Implementere validation af e-mailadresse i php til mailformular
Hej! Nedenstående php-script til min mailformular virker. Og giver også de rette meddelelser. Dem der står nederst i scriptet.
Men hvordan får jeg implimenteret funktionen (der står ovenover scriptet her): function valid_email($address) , i scriptet, så det giver meddelelsen: Ugyldig e-mailadresse, ved false? Og ellers kører resten af scriptet ved true?
function valid_email($address) { // check an email address is possibly valid if (ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $address)) return true; else return false; }
if (isset($_POST['submit'])) { if (!empty($_POST['name']) && // tjek, at der er skrevet et navn !empty($_POST['email']) && // tjek, at der er skrevet en e-mail-adresse !empty($_POST['telefon']) && // tjek, at der er skrevet et telefonnummer !empty($_POST['emne']) && // tjek, at der er skrevet et emne !empty($_POST['besked']) && // tjek, at der er skrevet en besked
// her følger sikringen mod spambotter !strpos($_POST['name'], "mitdomæne.dk") && // tjek, at dit domæne ikke er skrevet i feltet "navn" !strpos($_POST['email'], "mitdomæne.dk") && // tjek, at dit domæne ikke er skrevet i feltet "email" !strpos($_POST['telefon'], "mitdomæne.dk") && // tjek, at dit domæne ikke er skrevet i feltet "telefon" !strpos($_POST['name'], "@") && // tjek, at der ikke er et @ i "navn" !strpos($_POST['telefon'], "@") && // tjek, at der ikke er et @ i "telefon" !eregi("\r",$_POST['name']) && // tjek, at der ikke er "vogn-retur" i "navn" !eregi("\n",$_POST['name']) && // tjek, at der ikke er "linjeskift" i "navn" !eregi("\r",$_POST['telefon']) && // tjek, at der ikke er "vogn-retur" i "telefon" !eregi("\n",$_POST['telefon']) && // tjek, at der ikke er "linjeskift" i "telefon" !eregi("\r",$_POST['email']) && // tjek, at der ikke er "vogn-retur" i "email" !eregi("\n",$_POST['email'])) // tjek, at der ikke er "linjeskift" i "email"
// er alt ok, fortsættes med afsendelse af mailen { $headers="From: ".$_POST['name']."<".$_POST['email'].">"; if (@$_POST['customer_copy']) { $headers .= "\r\nBcc: ".$_POST['email']; } $body .= "Den " . date("d/m y") . " kl. " . date("G:i") . " skrev " . $_POST['name'] . ":\r\n\r\n" . $_POST['besked'] . ":\r\n\r\n" . "Telefonnr.: " . $_POST['telefon']; if (@mail("minmail@mitdomæne.dk", strip_tags($_POST['emne']), stripslashes(strip_tags($body)), $headers)) { echo "<p>Tak for din henvendelse. Jeg svarer snarest muligt.</p>"; } else { echo "<p>E-mailen blev ikke sendt. Der skete en fejl. Prøv igen!</p>"; } } else { echo "<p>Mailen kunne ikke sendes, alle felter skal udfyldes korrekt!</p>"; } }
!eregi("\n",$_POST['email'])) // tjek, at der ikke er "linjeskift" i "email"
med:
!eregi("\n",$_POST['email']) && // tjek, at der ikke er "linjeskift" i "email" valid_email($_POST['email'])) //Tjekker email med vores funktion valid_email
function valid_email($address) { // check an email address is possibly valid if (ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $address)) return true; else return false; }
if (isset($_POST['submit'])) { if (!empty($_POST['name']) && // tjek, at der er skrevet et navn !empty($_POST['email']) && // tjek, at der er skrevet en e-mail-adresse !empty($_POST['telefon']) && // tjek, at der er skrevet et telefonnummer !empty($_POST['emne']) && // tjek, at der er skrevet et emne !empty($_POST['besked']) && // tjek, at der er skrevet en besked
// her følger sikringen mod spambotter !strpos($_POST['name'], "mitdomæne.dk") && // tjek, at dit domæne ikke er skrevet i feltet "navn" !strpos($_POST['email'], "mitdomæne.dk") && // tjek, at dit domæne ikke er skrevet i feltet "email" !strpos($_POST['telefon'], "mitdomæne.dk") && // tjek, at dit domæne ikke er skrevet i feltet "telefon" !strpos($_POST['name'], "@") && // tjek, at der ikke er et @ i "navn" !strpos($_POST['telefon'], "@") && // tjek, at der ikke er et @ i "telefon" !eregi("\r",$_POST['name']) && // tjek, at der ikke er "vogn-retur" i "navn" !eregi("\n",$_POST['name']) && // tjek, at der ikke er "linjeskift" i "navn" !eregi("\r",$_POST['telefon']) && // tjek, at der ikke er "vogn-retur" i "telefon" !eregi("\n",$_POST['telefon']) && // tjek, at der ikke er "linjeskift" i "telefon" !eregi("\r",$_POST['email']) && // tjek, at der ikke er "vogn-retur" i "email" !eregi("\n",$_POST['email']) && // tjek, at der ikke er "linjeskift" i "email" valid_email($_POST['email']))
// er alt ok, fortsættes med afsendelse af mailen { $headers="From: ".$_POST['name']."<".$_POST['email'].">"; if (@$_POST['customer_copy']) { $headers .= "\r\nBcc: ".$_POST['email']; } $body .= "Den " . date("d/m y") . " kl. " . date("G:i") . " skrev " . $_POST['name'] . ":\r\n\r\n" . $_POST['besked'] . ":\r\n\r\n" . "Telefonnr.: " . $_POST['telefon']; if (@mail("minmail@mitdomæne.dk", strip_tags($_POST['emne']), stripslashes(strip_tags($body)), $headers)) { echo "<p>Tak for din henvendelse. Jeg svarer snarest muligt.</p>"; } else { echo "<p>E-mailen blev ikke sendt. Der skete en fejl. Prøv igen!</p>"; } } else { echo "<p>Mailen kunne ikke sendes, alle felter skal udfyldes korrekt!"; if(!valid_email($_POST['email'])) echo(' Addressen er desuden forkert!'); echo('</p>'); } }
Der skulle ikke være nogen ændring, ved mindre emailen ikke er valid. Jeg har sat én ekstra validering på, ligesom Jakobdo skrev, og hvor du printer "Mailen kunne ikke sendes..." har jeg lagt en ekstra echo på hvis emailen ikke er valid.
For at få Jakobdo's svar til at virke, skal du indsætte funktionen præcis ligesom jeg har gjort.
Det er jo klart du får fejl, når ikke du husker at smide function valid_email($address) { // check an email address is possibly valid if (ereg('^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$', $address)) return true; else return false; } i toppen af koden.
DEn her funktion: function valid_email($address) Den stinker. Den fortæller jo intet om en email f.eks. er:
spam@jegfindesikke.dk
Synes godt om
Ny brugerNybegynder
Din løsning...
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.