Avatar billede polse Nybegynder
23. september 2007 - 17:57 Der er 13 kommentarer

validering af e-mail

hejsa. jeg har følgende kode til at validere emails, inden de indsættes i databasen.
der er dog 2 ting jeg ikke kan greje:
- hvis man ikke har skrevet noget i tekstfeltet fortæller den både at feltet er tomt(hvilket den skal) OG at der er en fejl i mailadressen. den sidste skal selvfølgelig ikke på...

- hvordan validerer jeg på en nem måde om e-mailen allerede findes i databasen??
Avatar billede jensgram Nybegynder
23. september 2007 - 18:18 #1
b: Lav en SELECT i db'en og se, om der er hits på den angivne adresse.

a: Lidt svært uden kode :)
Avatar billede jakobdo Ekspert
23. september 2007 - 18:21 #2
Du kunne lave feltet email UNIQUE og så vil en INSERT fejle.
Inden da tjekker du så om email er tastet eller ej.
Evt. kunne du bruge check_email() fra denne side: http://www.razor.dk/php/funktioner/
Avatar billede polse Nybegynder
23. september 2007 - 19:38 #3
Glemte at vedhæfte koden, hehe:-) her er den:
(desuden kræver jeres forslag lidt mere konkrete forklaringer:-))

<?php
        require_once("connections.php");
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>index</title>
</head>

<body>
<?php
$message =NULL;
$email=$_POST['email'];

if(isset($_POST['send'])){

if(empty($email)){
$message.="<span class=stjerne>* </span>"."udfyld venligst din email<br/>";
$mail_ok=FALSE;
}else{
$mail_ok=TRUE;
}
if(!eregi('^[[:alnum:]][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$', $email)){
//hvis brugeren ikke har skrevet sin email ordentligt
$message .="<span class=stjerne>* </span>"."Du har en fejl i din email-adresse<br/>";
$mail_ok=FALSE;
}else{
$mail_ok=TRUE;
}//slut validering af email

if($mail_ok){
$query = "INSERT INTO mailadresser (email) VALUES ('$email')";
$result=mysql_query($query);
mysql_close();

unset($email);    //der er indtastet fejlfri data og trykket på submit.
$message.="<span class=stjerne>* </span>"."Du er nu tilmeldt nyhedsbrev...";
}
}
?>

<form id="form1" name="form1" method="post" action="">
  <table width="200" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>Tilmeld nyhedsbrev</td>
    </tr>
    <tr>
      <td><input name="email" type="text" id="email" value="<?php echo $email;?>"></td>
    </tr>
    <tr>
      <td><input name="send" type="submit" id="send" value="Send"></td>
    </tr>
    <tr>
      <td><?php echo $message;?></td>
    </tr>
  </table>
</form>

</body>
</html>
Avatar billede jensgram Nybegynder
23. september 2007 - 20:01 #4
a:

if(empty($email)){
    $message.="<span class=stjerne>* </span>"."udfyld venligst din email<br/>";
    $mail_ok=FALSE;
} elseif(!eregi('^[[:alnum:]][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$', $email)){
    //hvis brugeren ikke har skrevet sin email ordentligt
    $message .="<span class=stjerne>* </span>"."Du har en fejl i din email-adresse<br/>";
    $mail_ok=FALSE;
}else{
    $mail_ok=TRUE;
}//slut validering af email
Avatar billede jakobdo Ekspert
23. september 2007 - 20:20 #5
if(check_email($email)) //Funktion fra razor.dk
{
echo 'Email er ok';
}
else
{
echo 'Email er ikke ok';
}
Avatar billede polse Nybegynder
23. september 2007 - 20:23 #6
SEJT!

DET PRØVER JEG LIGE.
ang. sp. 2 er jeg stadig et lige så stort spørgsmålstegn:-)
Avatar billede jakobdo Ekspert
23. september 2007 - 20:44 #7
Du kunne lave:

if(check_email($email)) //Funktion fra razor.dk
{
$query = mysql_query("SELECT email FROM table WHERE email = '$email' LIMIT 1");
if(mysql_num_rows($query)==1)
echo 'Email findes i DB';
else
echo 'Email findes ikke, vi indsætter den';
}
else
{
echo 'Email er ikke ok';
}
Avatar billede polse Nybegynder
25. september 2007 - 16:30 #8
ok. jeg har lige et spørgsmål til ovenstående. lige nu kører jeg bare lokalt på maskinen med en wampserver, altså indtil videre. burde funktionen stadig kunne fungere, selv om det bare er lokalt? :-)
Avatar billede jakobdo Ekspert
25. september 2007 - 17:05 #9
Tja, det burde den vel! :o)
Avatar billede polse Nybegynder
25. september 2007 - 17:10 #10
hmmm. kan bare ikke rigtig få placeret koden rigtigt i den nuværende kode. skal en funktion ikke være blå?
Avatar billede jakobdo Ekspert
25. september 2007 - 17:32 #11
Jo, hvis du har php highlight og funktionen er kendt.
Hvis det er en funktion du selv koder, bliver den ikke blå.
Avatar billede polse Nybegynder
25. september 2007 - 17:33 #12
JEG FÅR FØLGENDE FEJL NÅR JEG KØRER DETTE:
Fatal error: Call to undefined function check_email() in C:\wamp\www\docken\index.php on line 29
KAN MAN IKKE LAVE 2 ELSEIF´ER EFTER HINANDEN? TJECK MAIL FUNKTIONEN ER HELLER IKKE BLÅ... DET ER SIKKERT MIG DER IKKE FATTER ET ELLER ANDET..HMM:-)

<?php
        require_once("connections.php");
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>index</title>
</head>

<body>
<?php
$message =NULL;
$email=$_POST['email'];
$check_email = $_POST['email'];

if(isset($_POST['send'])){

if(empty($email)){
    $message.="<span class=stjerne>* </span>"."udfyld venligst din email<br/>";
    $mail_ok=FALSE;

} elseif(!eregi('^[[:alnum:]][a-z0-9_\.\-]*@[a-z0-9\.\-]+\.[a-z]{2,4}$', $email)){
    //hvis brugeren ikke har skrevet sin email ordentligt
    $message .="<span class=stjerne>* </span>"."Du har en fejl i din email-adresse<br/>";
    $mail_ok=FALSE;

} elseif(check_email($email)){
    $query = mysql_query("SELECT email FROM mailadresser WHERE email = '$email' LIMIT 1");
    if(mysql_num_rows($query)==1)
    $message .="<span class=stjerne>* </span>"."Email findes allerede i DB<br/>";
    $mail_ok=FALSE;

} else{
    $mail_ok=TRUE;
}//slut validering af email

if($mail_ok){
$query = "INSERT INTO mailadresser (email) VALUES ('$email')";
$result=mysql_query($query);
mysql_close();

unset($email);    //der er indtastet fejlfri data og trykket på submit.
$message.="<span class=stjerne>* </span>"."Du er nu tilmeldt nyhedsbrev...";
}
}
?>
<?php
//if(check_email($email)) //Funktion fra razor.dk
//{
//$query = mysql_query("SELECT email FROM table WHERE email = '$email' LIMIT 1");
//if(mysql_num_rows($query)==1)
//echo 'Email findes i DB';
//else
//echo 'Email findes ikke, vi indsætter den';
//}
//else
//{
//echo 'Email er ikke ok';
//}
?>


<form id="form1" name="form1" method="post" action="">
  <table width="200" border="0" cellspacing="0" cellpadding="0">
    <tr>
      <td>Tilmeld nyhedsbrev</td>
    </tr>
    <tr>
      <td><input name="email" type="text" id="email" value="<?php echo $email;?>"></td>
    </tr>
    <tr>
      <td><input name="send" type="submit" id="send" value="Send"></td>
    </tr>
    <tr>
      <td><?php echo $message;?></td>
    </tr>
  </table>
</form>

</body>
</html>
Avatar billede jakobdo Ekspert
25. september 2007 - 17:51 #13
Du skal huske at hente funktionen fra www.razor.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