Avatar billede servicetime Nybegynder
15. juli 2008 - 21:50 Der er 11 kommentarer

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;
}

------------------------------------------------------------------



<?php

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>";
}
}

?>
Avatar billede jakobdo Ekspert
15. juli 2008 - 22:08 #1
Erstat følgende:

!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
Avatar billede fbisen Nybegynder
15. juli 2008 - 22:12 #2
Jeg vil mene at dette burde kunne gøre det

--------------------------------------
<?php

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>');
}
}

?>
Avatar billede coderdk Praktikant
16. juli 2008 - 00:56 #3
funktionen godtager f.eks. ikke + som også er gyldige i brugernavne...
Avatar billede jakobdo Ekspert
16. juli 2008 - 05:39 #4
coderdk: Du mener vel i emails ? :o)
Avatar billede coderdk Praktikant
16. juli 2008 - 10:02 #5
brugernavndelen i en email... ikke domænedelen ;P
Avatar billede servicetime Nybegynder
16. juli 2008 - 10:55 #6
ad. jakobdo's svar:

Jeg fik fejlmeddelelsen:

Fatal error: Call to undefined function valid_email()

------------------------------------------
ad. fbisen's svar:

Der er ingen ændring ift. før.
Avatar billede fbisen Nybegynder
16. juli 2008 - 10:58 #7
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.
Avatar billede jakobdo Ekspert
16. juli 2008 - 11:04 #8
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.
Avatar billede servicetime Nybegynder
16. juli 2008 - 12:12 #9
Nu har jeg indsat alt helt som I siger, og testet det.

I begge tilfælde er der ingen ændring ift. min oprindelige kode.
Og jeg har prøvet, at skrive meget forkerte og ugyldige emailadresser.
Avatar billede servicetime Nybegynder
16. juli 2008 - 14:58 #10
Hvis jeres forslag er rigtigt, må der logisk set være noget forkert med:
function valid_email($address)

Jeg kender ikke nok til PHP, så jeg kan se, hvad der er galt.
Men måske skal jeg kigge efter en anden udgave af denne function.

Jeg har den fra bogen: PHP and MySQL Web Development af Luke Welling og Laura Thomson. Sams Publishing 2003. 870 si. Det er PHP 4.3 der bruges i den.
Avatar billede jakobdo Ekspert
16. juli 2008 - 15:05 #11
DEn her funktion: function valid_email($address)
Den stinker.
Den fortæller jo intet om en email f.eks. er:

spam@jegfindesikke.dk
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester