19. juli 2009 - 15:23Der er
24 kommentarer og 1 løsning
problem med mail()
hej eksperten.
Jeg har nu rodet rigtig lang tid med det ene probelm at den simpelthen ikke vil sende en mail! I det første stykke tid da jeg programmerede på scriptet virkede det fint, men pludselig virker det bare ikke! :S
if($tjek[password] != $tjek[password_g]) { echo "Dit password og gentag password skal være identiske"; $fejl = false; } else { $fejl = true; if(ereg("^.+@.+\\..+$", $tjek[email]) && $fejl) { require("db.php"); $resultat = mysql_query("SELECT * FROM `table` WHERE `e-mail` = '$tjek[email]'"); $number = mysql_num_rows($resultat);//Tæller antaller af resultater echo mysql_error(); if($number == 0) { mail("$tjek[email]","emne","Besked","from:email"); if(mail("$tjek[email]","emne","Besked","from:email")) { echo "Mailen er nu sendt"; } } if($number > 0) { echo "Mailen blev ikke sendt da din mailadresse allerede findes i vores database"; }
else { echo "Mailen blev ikke sendt"; }
}
} } else { echo "du trykkede ikke på opret"; }
?>
Den eneste fejl jeg får er "mailen blev ikke sendt" :S Jeg kan virkelig ikke finde fejlen!
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
if($tjek[password] != $tjek[password_g]) { echo "Dit password og gentag password skal være identiske"; $fejl = false; } else { $fejl = true; if(ereg("^.+@.+\\..+$", $tjek[email]) && $fejl) { require("db.php"); $resultat = mysql_query("SELECT * FROM `table` WHERE `e-mail` = '$tjek[email]'"); $number = mysql_num_rows($resultat);//Tæller antaller af resultater echo mysql_error(); if($number == 1) { mail("$tjek[email]","emne","Besked","from:email"); if(mail("$tjek[email]","emne","Besked","from:email")) { echo "Mailen er nu sendt"; } } if($number > 0) { echo "Mailen blev ikke sendt da din mailadresse allerede findes i vores database"; }
if($tjek[password] != $tjek[password_g]) { echo "Dit password og gentag password skal være identiske"; $fejl = false; } else { $fejl = true; if(ereg("^.+@.+\\..+$", $tjek[email]) && $fejl) { require("db.php"); $resultat = mysql_query("SELECT * FROM `table` WHERE `e-mail` = '$tjek[email]'"); $number = mysql_num_rows($resultat);//Tæller antaller af resultater echo mysql_error(); if($number == 1) { mail("$tjek[email]","emne","Besked","from:email"); if(mail("$tjek[email]","emne","Besked","from:email")) { echo "Mailen er nu sendt"; } } if($number > 0) { echo "Mailen blev ikke sendt da din mailadresse allerede findes i vores database"; }
Og så virker det også forkert med dine if-sætninger. Prøv at kigge nærmere på $number.
Du tjekker nemlig, om der er nogle rækker i databasen. Hvis ikke, er det OK, og $number sættes til 0, hvorfor emailen skal sendes.
Du sender altså emailen, når $number = 0. Men lige under tjekker du igen, om $number > 0 og hvis ikke, så giver den fejlteksten "Mailen blev ikke sendt".
Det hænger ikke sammen at emailen skal sendes, hvis værdiene er 0, og den samtidig skal skrive en fejltekst.
mbm2007: Jeg tror vist, at vi snakker om noget forskelligt.
Du sætter $number til 1. Emailen skal netop ikke sendes, hvis $number sættes til 1, idet emailadressen i så fald er registreret i databasen. Ellers er jeg ikke med på koden.... (og det kan sagtens være).
Jeg nævner også noget om anførselstegn om variablen i mail()-funktionen.
Har svært ved at se, at det har sammenhæng med det, du skriver.
Og så bidrager jeg ikke i dette forum for at tjene point. Kig blot på mit point-tal. ;) Jeg har fået masser af hjælp herinde, og "sover lidt bedre om natten", når jeg kan give lidt tilbage igen.
Tak for de mange svar, grunden til at mailadressen ikke må ligge i databasen er jo fordi at det er en form hvor man skal kunne oprette sig som bruger, og det kommer til at blive sådan at hvis emailen allerede står i databasen at man så har mulighed for at generere et nyt brugernavn og password hvis man har glemt det.
Men jeg har nu prøvet at løbe hele koden igennem igen, men bare hvor at $tjek[email] er min email hos one.com og ellers er alt det samme. Og på one.com der kommer mailen fint frem og browseren skriver at "mailen er nu sendt" men det virker stadig ikke hverken hos gmail eller hotmail.com, jeg vil jo så tro at det har noget med et spam filter at gøre? men hvordan undgår jeg det?
if(empty($tjek[brugernavn]) || empty($tjek[password]) || empty($tjek[password_g]) || empty($tjek[email])) { echo "Et af felterne er tomme"; $fejl = false; }
if($tjek[password] != $tjek[password_g]) { echo "Dit password og gentag password skal være identiske"; $fejl = false; } else { require("db.php"); $resultat = mysql_query("SELECT * FROM forum_login WHERE `e-mail` = '$tjek[email]'"); $number = mysql_num_rows($resultat);//Tæller antaller af resultater echo mysql_error();
if($number > 0) { echo "Mailen blev ikke sendt da din mailadresse allerede findes i vores database"; $fejl = false; } else { $fejl = true; if(ereg("^.+@.+\\..+$", $tjek[email]) && $fejl) { if($number == 0) { if(mail("$tjek[email]","emne","Besked","from:email")) { echo "Mailen er nu sendt"; } } } else { echo "Mailen blev ikke sendt"; }
if(empty($tjek[brugernavn]) || empty($tjek[password]) || empty($tjek[password_g]) || empty($tjek[email])) { echo "Et af felterne er tomme"; $fejl = false; exit; }
if($tjek[password] != $tjek[password_g]) { echo "Dit password og gentag password skal være identiske"; $fejl = false; exit; } else { require("db.php"); $resultat = mysql_query("SELECT * FROM `table` WHERE `e-mail` = '$tjek[email]'"); $number = mysql_num_rows($resultat);//Tæller antaller af resultater echo mysql_error();
if($number > 0) { echo "Mailen blev ikke sendt da din mailadresse allerede findes i vores database"; $fejl = false; exit; } else { $fejl = true; if(ereg("^.+@.+\\..+$", $tjek[email]) && $fejl) { if($number == 0) { if(mail("$tjek[email]","emne","Besked","from:email")) { echo "Mailen er nu sendt"; } } } else { echo "Mailen blev ikke sendt"; }
Jeg er ikke sikker, men manglende brug af header, kan måske være årsag til, at nogle email-servere afviser emailen. Jeg bruger selv phpmailer, hvor opsætning af header er en leg. Og jeg bruger også one.com, og har ikke oplevet disse problemer.
Og det virker lidt underligt på mig, at det virker, når du sætter anførselstegn om din email-variabel("$tjek[email]"):
Og denne sætning virker også forkert på mig, idet du har apostrof rundt om din variabel.
$resultat = mysql_query("SELECT * FROM `table` WHERE `e-mail` = '$tjek[email]'");
Er du sikker på, at det virker korrekt. Prøv at angive en emailadresse, som allerede er i din database. Så skal den jo gerne fange det, men jeg tvivler.....
Jeg kommer lige til at tænke på, at one.com også har drillet mig på et tidspunkt. Det var fordi, at "from" var sat til en email-adresse, som ikke er på domænet. Prøv at sætte en from-emailadresse, som er på det domæne, hvor det script afvikles fra.
Det var da godt. Jeg kan stadig ikke forstå, at din SQL-query virker korrekt. Jeg vil mene, at den altid returnerer 0 linjer, da '$tjek[email]' ikke er en variabel pga. af apostroferne.
Kan du få $number til at være 1, hvis du i dit email-inputfelt angiver en adresse, der er registreret i din DB.
hmmm når jeg har '$tjek[email]' returnerer den 1 som den skal da mailen står i databasen
Det undrede også mig i starten, men hvis jeg bare skrev: $tjek[email]
så kommer følgende fejl :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /customers/carbon-crystal.dk/carbon-crystal.dk/httpd.www/forum/login/opret_bruger_step2.php on line 18 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 '@hotmail.com' at line 1
(det skal lige siges at værdien af $tjek[mail] er min_mail@hotmail.com da følgende kom)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.