PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mail() nur an eine id



Contra10
03.02.2010, 01:09
Hallo Leute,

bin in PHP ziehmlich eingerostet, da ich erst wieder seit langem (ca. 2 Jahre) was mit PHP mache.
Ich Schreib derzeit ein kleines Freundschaftstest Script. Die Registrierung und das Verschicken funktioniert soweit, das Problem jedoch
ist das die Ergebnisse des Tests an jede Email in der Datenbank verschickt.

Folgendermaßen sieht bei mir die Abfrage aus:


$result = mysql_query ("SELECT * FROM ft");
$num = mysql_num_rows($result);

if (mysql_num_rows($result))
{
while($row = mysql_fetch_array($result))
{
$id=$row['id'];
$name=$row['name'];
$email=$row['email'];
$ip = $_SERVER['REMOTE_ADDR'];


mail($email, $betreff, $ausgabe, $extra, "FROM: Freunde-Test.xe.cx - Team");
}
}

Der Code funktioniert zwar, jedoch habe ich das Problem das mail() die Email an jeden schickt, die in der Datenbank Registriert ist.

Ich habe auch schon Probiert


$result = mysql_query ("SELECT * FROM ft WHERE id ='".$_GET['id']."'");

zu machen, leider erfolgslos, er Schickt ab da dann keine Email mehr.

Kann mir da jemand Helfen?

Mit freundlichen Grüßen

Marwin
03.02.2010, 01:25
Also die Idee mit in die SQL Abfrage zu tun ist schonmal soweit ganz richtig ;):

$result = mysql_query ("SELECT * FROM ft WHERE id ='".$_GET['id']."'");
und da wir es ja sicher haben wollen,... scannen wir das $_GET lieber nochmal nach irgendwelchen Injections
also
mysql_real_escape_string

$result = mysql_query ("SELECT * FROM ft WHERE id ='".mysql_real_escape_string($_GET['id'])."'");
siehe http://de.php.net/mysql_real_escape_string

Dann muss aber das darauffolgende anders:

if (is_array($result)) //Das zählen der Reihen und dann das überprüfen hätte keinen richtigen Sinn da dort eh nur 1 Zeile gibt! Also so ist es gut denn wenn alles richtig ist kommt ein array, wenn nicht false als Ausgabe
{
while ($row = mysql_fetch_assoc($result)) { //Hier war es fast richtig nur nicht mysql_fetch_arrary sondern mysql_fetch_assoc
{
$id=$row['id'];
$name=$row['name'];
$email=$row['email'];
$ip = $_SERVER['REMOTE_ADDR'];


mail($email, $betreff, $ausgabe, $extra, "FROM: Freunde-Test.xe.cx - Team");
}
}
Infos:
http://de.php.net/is_array
http://de.php.net/manual/de/function.mysql-fetch-assoc.php


So müsste eigentlich alles gehen ;)

Contra10
03.02.2010, 01:32
Hast vergessen das if zu schließen :P

Leider funktioniert des trotzdem nicht, jetzt schickt er wieder keine Emails, so wie vorhin erwähnt, sobald ich


WHERE id ='".mysql_real_escape_string($_GET['id'])."'");

einfüge, für mich echt ein Rätsel..

lg

Marwin
03.02.2010, 01:40
$result = mysql_query ("SELECT * FROM ft WHERE id ='".mysql_real_escape_string($_GET['id'])."'");
also dies ist aber so richtig :P (bin ich mir ziemlich sicher ;) )
was sagt er denn wenn du des result diest.
Also danach einfach mal folgendes einfügst:

die($result."<br>".mysql_error());
Dann sollte eigentlich ein Aufschlussreicher Error kommen ;)

Contra10
03.02.2010, 01:42
Da kommt "Resource id #6"? :D

lg

Marwin
03.02.2010, 01:46
Was laber ich hier eigentlich gerade -.-... Ich glaub ich muss ins Bett ^^ also probier es mal so:


$result = mysql_query ("SELECT * FROM ft WHERE id ='".mysql_real_escape_string($_GET['id'])."'");
$row = mysql_fetch_array($result);
if($row){
$id=$row['id'];
$name=$row['name'];
$email=$row['email'];
$ip = $_SERVER['REMOTE_ADDR'];

mail($email, $betreff, $ausgabe, $extra, "FROM: Freunde-Test.xe.cx - Team");
}

Ich programmiere in letzter Zeit auch zu wenig ^^, bekomm nicht mal mehr ne Abfrage hin^^

Contra10
03.02.2010, 01:50
Scheint trotzdem nicht zu funktionieren, hast du zufällig ICQ das ich dir mal den kompletten Code schicken kann? Weil ich verzweifel schon den ganzen Tag und weiß nich an was das liegen will. :P

lg

Marwin
03.02.2010, 02:25
Also,... wir haben uns das gerade angeschaut, und falls jemand noch diese Theard liest ;)

Die beiden möglichkeiten von mir waren richtig ;), Problem war ein anderes ;)
Auch Contras Lösung war richtig nur dann mit:
WHERE id ='".$_GET['id']."'

und wie ja jetzt schon öfters erwähnt lieber auch mit:
mysql_real_escape_string

Also alles richtig hier, ne andere Stelle war falsch ;)

Contra10
03.02.2010, 02:35
Jop.. dummheit muss weh tun :D

Danke für die Hilfe

lg