PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SQL abfrage für ja, nein und beides


AlexD
06.07.2003, 18:39:27
Hi,

nun brauch ich wieder Eure unterstützung.

Folgendes, es geht um das versenden von Emails über die Administation meiner Anmeldung.
Es soll möglich sein eine Mail an alle zu senden die einen privaten Server stellen, oder die die keinen stellen, aber auch an alle. Ich hab mir das so mit einem Dropdown-Menü vorgestellt.

Soweit wär das auch kein Problem, denn mit "WHERE server=$auswahl" würd es zum teil schon klappen aber nur wenn "ja" oder "nein" übergeben wird. Nur wie mach ich es das die Mail dann an alles gesendet wird???

Die e-Mailsadressen liegen in der Spalte 'email', in der Spalte 'server' steht nur "ja" oder "nein".

hier mal der Code:

$query = mysql_query("SELECT email FROM lanparty")
OR DIE(mysql_error());
while ($adressen = mysql_fetch_array($query)){

// die Mailfunktion ist in die Schleife (while) hier integriert!!
mail($adressen['email'], $subject, $msg,
"From: ".$absender."nReply-To: ".$absender."nX-Mailer: PHP/" . phpversion());
}


mysql_close($db);


Gruß
Alex

|Coding
06.07.2003, 19:01:20
also deine querys könnten so aussehen:

1. "SELECT email FROM lanparty WHERE server = 'stellt_server'" - nur die, die server stellen

2. "SELECT email FROM lanparty WHERE server != 'stellt_server'" - alle die, die keinen server stellen

3. "SELECT email FROM lanparty" - alle

AlexD
06.07.2003, 19:24:33
Glaub ich hab das nicht ganz korrekt beschrieben.

Das Menü zur Auswahl (stellt Server / keinen Server / an alle) ist wie auch der Rest wie Betreff und Textfeld in einem HTML Formular und wird dan mit POST an die entsprechende PHP-Datei übergeben.

oder könnte ich hier das komplette query wie Du geschrieben hast so übergeben ?!
fällt mir grad so ein.... sollte doch gehn? Oder hast Du das auch so gemeint?

werd ich mal testen.

[edit]
also an alle funzt einwandfrei, nur mit der auswahl derer die Server stellen oder nicht hab ich noch ein Problem.

ich übergeb das wie folgt:

<select size="1" name="auswahl">
<option value="SELECT email FROM lanparty">alle</option>
<option value="SELECT email FROM lanparty WHERE server='ja'">Server stellen</option>
<option value="SELECT email FROM lanparty WHERE server='nein'">keinen Server stellen</option>
</select>


der Teil in der ensprechenden PHP-Datei sieht nun so aus:

// Abfrage ausführen
$query = mysql_query("$auswahl")
OR DIE(mysql_error());


wie gesagt bei "alle" funzt es ohne Probleme, bei den Anderen bekomm ich einen SQL-Fehler das die Syntax nicht korrekt ist.

"email" und "server" sind zwei seperate Spalten einer DB.
liegts daran??

Alex

|Coding
06.07.2003, 20:22:45
Original geschrieben von AlexD
oder könnte ich hier das komplette query wie Du geschrieben hast so übergeben ?!
fällt mir grad so ein.... sollte doch gehn? Oder hast Du das auch so gemeint?

nein, das meinte ich nicht. geht zwar auch ist aber eine sehr schlechte lösung.

die querys waren ein reiner denkanstoß.

Original geschrieben von AlexD
"email" und "server" sind zwei seperate Spalten einer DB.


zwei seperate spalten in einer tabelle oder zwei seperate tabellen in einer db? das ist ein riesen unterschied und dann wäre es klar dass, das query nicht arbeitet. ansonsten kann ich mir jetzt nicht direkt erklären was am query falsch ist.

besser ist, du postest mal den kompletten php und html code.

AlexD
06.07.2003, 21:25:11
hi,

die spalten sind in einer DB und in der selben Tabelle.

Warum ist es eigentlich eine sehr schlechte Lösung wenn ich die SQL-Abfrage so übergebe??? Weil man es evtl. nicht nachvollziehen kann ?!

Folgenden Fehler gibt mir SQL aus:
Unknown column 'ja' in 'where clause'



Hier der CODE:

Das HTML-Formular: info_mail.html

<html>
<head>
<title>Teilnehmer Info-Mail</title>
</head>
<body bgcolor="#FFFFFF" link="#0000FF" vlink="#0000FF" alink="#0000FF">
<form method="post" action="mail-send.php">
<table width="500" border="0" cellspacing="1" cellpadding="3" align="center">
<tr bgcolor="#999999">
<div align="center"><br>
<font size="4" face="Arial, Helvetica, sans-serif"><b>Teilnehmer Info-Mail</b></font><br><br>
</div>
</div>
</tr>
<tr>
<br>
<font size="2" face="Arial, Helvetica, sans-serif"><b>Mit diesem Fromular wird eine
e-Mail an angemeldete Teilnehmer gesendet die in der Teilnehmerliste aufgeführt sind!!</b></font>
<br><br>
</tr>
<tr>
<font size="2" face="Arial, Helvetica, sans-serif"><b>eMail senden an:</b></font>
<select size="1" name="auswahl">
<option value="SELECT email FROM lanparty">alle</option>
<option value="SELECT email FROM lanparty WHERE server=ja ">Server stellen</option>
<option value="SELECT email FROM lanparty WHERE server=nein ">keinen Server stellen</option>
</select><br><br>
</tr>
<tr>
<font size="2" face="Arial, Helvetica, sans-serif">
<b>Betreff : </b><input type="msg" name="subject" size="31">
</font><br><br><br>
</tr>
<tr>
<font size="2" face="Arial, Helvetica, sans-serif">
<b>Information: </b>
<textarea name="text" rows="6" cols="60"></textarea>
</font><br><br>
</tr>
<tr>
<font size="2" face="Arial, Helvetica, sans-serif">
<input type="hidden" name="ausgefllt" value="1">
<input type="submit" value="Abschicken" name="submit">
<input type="reset" value="Zur&uuml;cksetzen" name="reset">
</font><br><br>
</tr>
<tr bgcolor="#999999">
<br>
</tr>
</table>
</form>

</body>
</html>


die dazugeörige PHP-Datei mail-send.php

<?PHP
// LAN-Daten aus der Datenbank holen
include('connect_sql.php');

$result=mysql_query('SELECT angesetzt, termin, ort, uhrzeit, lan_name FROM daten', $db);
if (!$result) {echo mysql_error($db);}
$data = mysql_fetch_array($result);

mysql_close($db);


$date = date("d.m.Y");
$absender = "lan-party@privatwebarea.de";
$fussnote = "Diese e-Mail wurde am $date an alle angemeldeten Teilnehmer gesendet!!";

$msg .= <<<Mailinhalt
Informationen zur {$data['lan_name']} am {$data['termin']}
Ort: {$data['ort']} Beginn: {$data['uhrzeit']}
______________________________________________________________________ _______

$text

Sollten noch Fragen auftauchen, so bitte ich Euch diese ins Forum zu stellen!
______________________________________________________________________ _______
$fussnote
Mailinhalt;

//Verbinung zu Datenbank herstellen
include("connect_sql.php");

// Abfrage ausführen
$query = mysql_query("$auswahl")
OR DIE(mysql_error());
while ($adressen = mysql_fetch_array($query)){

// die Mailfunktion ist in die Schleife (while) hier integriert!!
mail($adressen['email'], $subject, $msg,
"From: ".$absender."nReply-To: ".$absender."nX-Mailer: PHP/" . phpversion());
}


mysql_close($db);

// Anzeigen der Versendeten Daten
echo "
<p><br><br>
<table width=100%><tr>
<FONT face=arial size=2>
Das Rundschreiben wurde erfolgreich an alle angemeleten
Teilnehmer versendet
<br><br>
</FONT>

<p>
<FONT face=arial size=2><b>
Das Rundschreiben beinhaltet folgenden Text:</b><br>
$msg<br><br><br>

<HR NOSHADE SIZE="1" WIDTH="300" ALIGN="LEFT">
<br><b>
<a href="javascript:history.go(-1);">
&laquo;&laquo; zurück</A>
</tr>
</table></center><br><br>

<div align=center>
<form><input TYPE=button VALUE=Schließen onClick=window.close()<br><br></form></div>";

?>


Gruß
Alex

|Coding
07.07.2003, 16:13:59
also schlecht ist das aus dem grund, wenn noch andere user zugriff auf diesen bereich haben, können diese ganz easy die querys manipulieren, und was meinst du kann ein "DELETE FROM tabelle" alles anrichten?

so die querys haben einen kleinen fehler, richtig sind sie so:

- "SELECT email FROM lanparty WHERE server = 'ja'"
- "SELECT email FROM lanparty WHERE server = 'nein'"

der fehler war das die werte der spalten nicht in ' standen, das kannst du nur bei integer werten (ganze zahlen) weg lassen.

AlexD
07.07.2003, 16:34:52
Hi Coder,

wenn ich die Werte in ' setze bekomm ich folgenden SQL-Fehler:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ''ja'' at line 1

So sehen die queries nun aus:

<select size="1" name="auswahl">
<option value="SELECT email FROM lanparty">alle</option>
<option value="SELECT email FROM lanparty WHERE server='ja' ">die einen Server stellen</option>
<option value="SELECT email FROM lanparty WHERE server='nein' ">die keinen Server stellen</option>
</select><br><br>

Steh da aufm Schlauch. :(

ich wollte ursprünglich nur die Variable an das query übergeben. Nur Ja oder Nein wären nicht gas Problem gewesen nur wenn es ja und nein sein soll (eben an alle)!! Denn ich kann mit dem DropDown-Menü immer nur einen Wert übergeben und da wußte ich absolut nicht was ich für alle übergeben sollte!

Gruß
Alex

|Coding
07.07.2003, 17:02:15
also:

1. das überflüssige leerzeichen in den letzten zwei querys (im html code) kannst du weg lassen, das bringt nichts.

2. musst du nach dem absenden des forms nätürlich erst mal stripslashes() anwenden. addslashes() führt php automatisch aus, wenn sonderzeichen übergeben werden, sonst würde es dir immer den php code zerschießen.

somit muss diese zeile:

$query = mysql_query("$auswahl")

so heißen:

$query = mysql_query("stripslashes($auswahl)")

damit werden die überflüssigen escapes ( "" ) aus den übergebenen daten gefiltert. da das nicht passiert ist hast du, wie schon gesehen, einen syntax fehler bekommen.


btw: ich heiße |Coding, nicht Coder :-)))

AlexD
07.07.2003, 17:15:18
Hi Coding, ;)

das funzt leider auch ned! :(
Dann hab ich wieder SQL-Fehlermeldungen:


You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'stripslashes(SELECT email FROM lanparty WHERE server='ja')' a


Wenn ich nun an "alle" senden möchte kommt auch diese Fehlermeldung !!

Wenn ich das query direkt so in die PHP-Datei eingebe dann funzt es wie es soll!! Hab ich grad ausprobiert!! Anscheinend klappt da was beim übergeben nicht richtig!

Würd es ja gerne in der Form machen:
SELECT email FROM lanparty WHERE server='$wert'

Ja und Nein übergeben ist kein Problem aber wenn die Mail an Ja und gleichzeitig Nein gesendet werden soll... weiß ich nicht wie ich das anstellen soll.

Krieg nochmal graue Haare! :(

Alex

|Coding
07.07.2003, 19:22:16
keine panik, "hier werden sie geholfen". also mach es so:

ersetze das:

$query = mysql_query("$auswahl")



mit dem:


switch($_POST['id']){
case 0: $sql = ''; break;
case 1: $sql = " WHERE server = 'ja'"; break;
case 2: $sql = " WHERE server = 'nein'"; break;
}

$query = mysql_query("SELECT email FROM lanparty".$sql."")



und im formular, das:

<select size="1" name="auswahl">
<option value="SELECT email FROM lanparty">alle</option>
<option value="SELECT email FROM lanparty WHERE server=ja ">Server stellen</option>
<option value="SELECT email FROM lanparty WHERE server=nein ">keinen Server stellen</option>
</select><br><br>


mit dem:


<select size="1" name="id">
<option value="0">alle</option>
<option value="1">Server stellen</option>
<option value="2">keinen Server stellen</option>
</select><br><br>




jetzt gebe ich garantie darauf das es funzt, weil getestet :-) (, aber nur wenn du es so machst wie beschrieben).

AlexD
07.07.2003, 19:59:54
Hi Coding,

ja geht, nur mit "die keinen Server" also case: 2 funzt ned. Es wird so keine Fehlermeldung gezeigt... sieht aus als ob eine Mail verschickt wird... wird aber nicht. Ist aber ein Teilnehmer eingetragen der keinen Server stellt.

Zu Testzwecken:
1 Teilnehmer mit und einer ohne, beide mit meiner email-adresse.
An alle bekomme ich 2 Mails.
An die mit Server bekomme ich 1 Mail
An die ohne Server bekomme ich keine Mail.

An Deinem Code kann nicht liegen, der ist sicher korrekt da es auch ned funzt wenn ich die WHERE-Bedingung direkt ins query eintrage. Ich versteh nur nicht warum ?!



Gruß
Alex

|Coding
07.07.2003, 20:43:42
hmm ich habe den doch getestet... kannst du mir mal nen tabellen dump an d.kressler@selfphp.info schicken. dann kann ich mal sehen, wie das script mit den daten arbeitet.

AlexD
09.07.2003, 04:13:37
Hallo Coding,

Fehler gefunden!!!!
War wohl bei schreiben der Daten in die Datenbank!! Ja und Nein wird jeweils durch eine Checkbox übergeben das ich wie folgt hatte:

Im HTML-Formular
<input type="checkbox" name="ja" value="ja"><b>ja</b> <input type="checkbox" name="nein" value="nein">

übergabe an die DB
INSERT....... , server, ........
....... '$ja $nein'.....

Warum ich das so gemacht hatte.... ich weiß es nicht, nun steht da nur noch eine Variable nämlich $server und schon funzt es auch!!!

Also Coding, nochmal vielen Dank für Deine Hilfe.

Gruß
Alex

Hatte Dir meine connect_sql.php incl. meiner Daten zugeschickt!! Immer "gut" wenn man sowas durch die Gegend schickt!! Sollte da "etwas" besser aufpassen.