Avatar billede krpoulsen Novice
06. oktober 2011 - 12:54 Der er 5 kommentarer og
1 løsning

Tjek email funktion.

Hej derude!

Jeg har følgende kode så folk kan tilmelde sig et nyhedsbrev på min hjemmeside.
Deres email bliver gemt ind i min Mysql databse, hvor jeg så senere kan hente dem ud.
Problemet er at de kan skrive hvad som helst i feltet.
Den tjekker ikke om det er en valid email.
Det er lidt irriterende at der tit står andre ting end emails i databasen! ;)
Nogen der har en fiks lille kode der kan klare det?
Jeg er ikke særlig skarp til det her, så hvis en evt. hjælper også vil forklare hvor den evt. kodestump skal indsættes i min kode og hvordan ville det være über nice!
På forhånd tak!

Her er så koden:

   
    <?php
if(isset($_POST['email']) && !empty($_POST['email'])) {

mysql_connect('blabla', 'blabla', 'blabla');
mysql_select_db('blabla') or die(mysql_error());

    $email = mysql_real_escape_string($_POST['email']);
   
  if($_POST['type'] == '1')
  {
      $insert = mysql_query("INSERT INTO newsletter (email) VALUES ('$email') ") or die(mysql_error()) ;
     
      echo "Your email $email has now been subscribed the KP-FOTO newsletter.";
     
    } else if($_POST['type'] == '0') {
   
      $delete = mysql_query("DELETE FROM newsletter WHERE email='$email'") or die(mysql_error()) ;
   
      echo "Your email $email has now been unsubscribed from the KP-FOTO newsletter";
     
    }
}
?>
<form method="post" action="">
   
    E-mail: <input type="text" name="email" />
    <br />
    Subscribe: <input type="radio" name="type" value="1" /><br />
    Unsubscribe: <input type="radio" name="type" value="0"/><br />
    <br />
  <input type="submit" value="Submit" />
   
</form>
Avatar billede PeteSK Nybegynder
06. oktober 2011 - 13:35 #1
http://php.net/manual/en/function.preg-replace.php du kan evt bruge dette til at se om det kunne være en "rigtig" email (:
Avatar billede olsensweb.dk Ekspert
06. oktober 2011 - 13:39 #2
du kunne jo overveje at validerer email addressen med et regulært udtryk
google "php regex email" http://www.google.dk/search?q=php+regex+email
eller merer generalt
google "regex email" http://www.google.dk/search?q=regex+email
der findes rigtig mange udtruk der tester og ingen er 100% sikker, men du fanger da min 80%, om folk så skriver deres egen email er noget andet.

function IsValidEmailAddress($email){
    return preg_match("/^[a-z0-9]+[a-z0-9_-]+@[a-z0-9]+[a-z0-9.-]+[a-z0-9]+.[a-z]{2,4}$/i", $email);
}

$error = 0;
$email = mysql_real_escape_string($_POST['email']);
if(! IsValidEmailAddress($email) ){
echo "du har ikke skrevet en valid email addresse";
$error = 1;
}
Avatar billede krpoulsen Novice
06. oktober 2011 - 13:51 #3
Tak for svaret til jer begge!

Jeg kan sagtens finde en masse mulige løsninger på google og andre sites, men som jeg har skrevet i teksten ovenfor kan jeg ikke finde ud af at sætte det ind i min egen kode så det virker.
Jeg har prøvet tusind ting på tusind måder, men det vil ikke lykkedes.

ronols hvis jeg anvender din kode stump, skriver den rigtig nok at emailen ikke er valid, men den putter stadig den "ikke valide" email ind i min database. I er nødt til at hjælpe mig med hvor jeg skal indlejrer jeres forslag i min kode.

På forhånd tak!
Avatar billede olsensweb.dk Ekspert
06. oktober 2011 - 14:11 #4
>skriver den rigtig nok at emailen ikke er valid, men den putter stadig den "ikke valide" email ind i min database
det var derfor jeg rejste et error "flag", som du så kunne teste på
utested men noget i denne stil

<?php
function IsValidEmailAddress($email){
    return preg_match("/^[a-z0-9]+[a-z0-9_-]+@[a-z0-9]+[a-z0-9.-]+[a-z0-9]+.[a-z]{2,4}$/i", $email);
}


if(isset($_POST['email']) && !empty($_POST['email'])) {

mysql_connect('blabla', 'blabla', 'blabla');
mysql_select_db('blabla') or die(mysql_error());

$error = 0;
$email = mysql_real_escape_string($_POST['email']);
if(! IsValidEmailAddress($email) ){
    echo "du har ikke skrevet en valid email addresse";
    $error = 1;
}

if(! $error) { // læs som "if not error" (error == 0)

    if($_POST['type'] == '1'){
      $insert = mysql_query("INSERT INTO newsletter (email) VALUES ('$email') ") or die(mysql_error()) ;   
      echo "Your email $email has now been subscribed the KP-FOTO newsletter.";   
    }
    else if($_POST['type'] == '0') {
      $delete = mysql_query("DELETE FROM newsletter WHERE email='$email'") or die(mysql_error()) ; 
      echo "Your email $email has now been unsubscribed from the KP-FOTO newsletter";   
    }
}
}
?>
Avatar billede krpoulsen Novice
06. oktober 2011 - 14:28 #5
Tusin dtak for det ronols!
Det virker super!
Kan du ikke oprette det som svar, så jeg kan give dig nogle point?
vh
KP
Avatar billede olsensweb.dk Ekspert
06. oktober 2011 - 14:31 #6
du får så et svar her
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

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