12. juli 2011 - 21:22Der er
18 kommentarer og 1 løsning
Hjælp til validering af E-mail samt kontrol om E-mail allerede findes i databasen
Hej
Jeg har et script der sender nogle data på en bruger til en mysql database.
Som overskriften beskriver, mangler jeg hjælp til at kontrollere om brugerens email allerede er oprettet (hvilket den ikke må være) og om email adressen er valid.
Tak for det hurtige svar! Jeg har fået e-mailfunktionen til at virke - SUPER!
Men jeg kan ikke rigtig gennemskue hvor jeg skal flette den anden kode ind i min egen kode.
her er et udpluk af min kode: mysql_connect($mysql_host, $mysql_user, $mysql_pw); mysql_select_db($mysql_db); mysql_query("insert into brugergruppe (fornavn, efternavn, adresse, alder, koen, email, tlfnr) values ('$fornavn', '$efternavn', '$adresse', '$alder', '$koen', '$email', '$tlfnr')") or die(mysql_error()); print "Kære <b>\"$fornavn $efternavn\"</b> tak for din henvendelse. Du er nu oprettet som bruger.";
Kan du gennemskue hvor kontrollen af, om emailen allerede eksisterer skal tilføjes?
if (!preg_match(PATTERN_EMAIL, $email)) { $error = "<p>Ugyldig mail.</p><br>"; }
// Du connecter til MySQL her ...
$query = mysql_query("SELECT mail FROM table WHERE mail = '$email' LIMIT 1") or die (mysql_error());
$count = mysql_num_rows($query);
if ($count >= 1) { $error .= "<p>Mailen eksisterer i forvejen.</p><br>"; }
if (!$error) {
mysql_query("insert into brugergruppe (fornavn, efternavn, adresse, alder, koen, email, tlfnr) values ('$fornavn', '$efternavn', '$adresse', '$alder', '$koen', '$email', '$tlfnr')") or die(mysql_error()); print "Kære <b>\"$fornavn $efternavn\"</b> tak for din henvendelse. Du er nu oprettet som bruger.";
} else {
echo $error;
}
}
?>
Sådan. Så har du en helt simpel løsning, der først validerer dine data. Hvis der er fejl, viser den fejlene og hvis der ikke er nogen, smider den data i databasen.
Jeg har nu forsøgt at flette de to stykker kode sammen og er nået frem til:
<?php require("config.php"); $add = &$HTTP_POST_VARS['add']; if(empty($add)) { ?> <br><a href="index.php?pageid=2">Fejl! Alle felterne skal udfyldes. Tryk her for at blive sendt til oprettelsesformularen.</a> <?php } else { define("PATTERN_EMAIL", "/^[a-zA-Z0-9_\.\-]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$/"); $fornavn = &$HTTP_POST_VARS['fornavn']; $efternavn = &$HTTP_POST_VARS['efternavn']; $adresse = &$HTTP_POST_VARS['adresse']; $alder = &$HTTP_POST_VARS['alder']; $koen = &$HTTP_POST_VARS['koen']; $email = &$HTTP_POST_VARS['email']; $tlfnr = &$HTTP_POST_VARS['tlfnr']; $accept = &$HTTP_POST_VARS['accept'];
if(empty($accept)) { echo '<font color="red"><b>Fejl!</b></font><br>Du skal acceptere vilkårene for at blive tilknyttet systemet.<br><br> <a href="index.php?pageid=2"><b>Tryk her for at blive sendt til oprettelsesformularen</b></a>';} else if(!preg_match(PATTERN_EMAIL, $email)) { echo '<font color="red"><b>Fejl!</b></font><br>Du skal angive en gyldig e-mail.<br><br> <a href="index.php?pageid=2"><b>Tryk her for at blive sendt til oprettelsesformularen</b></a>'; } else if(empty($fornavn) OR empty($efternavn) OR empty($adresse) OR empty($alder) OR empty($koen) OR empty($email) OR empty($tlfnr)) { echo '<font color="red"><b>Fejl!</b></font><br>Alle felterne skal udfyldes.<br><br> <a href="index.php?pageid=2"><b>Tryk her for at blive sendt til oprettelsesformularen</b></a>';}
$query = mysql_query("SELECT mail FROM table WHERE mail = '$email' LIMIT 1") or die (mysql_error());
$count = mysql_num_rows($query);
if ($count >= 1) { $error .= "<p>Mailen eksisterer i forvejen.</p><br>"; }
if (!$error) {
mysql_query("insert into brugergruppe (fornavn, efternavn, adresse, alder, koen, email, tlfnr) values ('$fornavn', '$efternavn', '$adresse', '$alder', '$koen', '$email', '$tlfnr')") or die(mysql_error()); print "Kære <b>\"$fornavn $efternavn\"</b> tak for din henvendelse. Du er nu oprettet som bruger."; } else {
echo $error;
} ?> <br> Gå til <a href="index.php?pageid=1"><b>Tilbage til forsiden</b></a><br> Gå til <a href="index.php?pageid=4"><b>Brugeroversigt</b></a> <?php } } ?>
Når jeg forsøger at oprette en bruger, får jeg fejlen: 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 'table WHERE mail = 'test@test.com' LIMIT 1' at line 1
Jo, du skal huske at erstatte de navne jeg har givet dem til dine rigtige ... Det skal være navnet på din tabel i databasen, samt navnet på det felt i tabellen du har din email stående i ...
Synes godt om
Slettet bruger
13. juli 2011 - 00:04#9
Test af om en email er valid - når det hele skal med (der er ekstremt vide grænser for hvordan en email kan se ud og stadig være valid):
I bund og grund det samme som i #9 jo, men der er forskellige udformninger af, hvordan en valid mail ser ud. Så derfor er der små forskelle. Den jeg gav dig, virker fint for langt de fleste og gængse mailadreser.
Forslaget i #10 er en helt anden måde at gøre det på, hvor den faktisk slet ikke checker om mailen er valid eller ej .. Den sender bare et aktiveringslink i den oplyste mail, som der skal klikkes på ...
Jeg smider et svar, nu hvor du har fået det til at virke :)
Droppede du min filter_var($_POST['email'], FILTER_VALIDATE_EMAIL) ?
Den er bedre at bruge, medmindre du selv VIL vedligeholde regexp-mareridtet - løbende...
Min regexg i #9 er den mest korrekte, lige NU. Men hvergang der sker ændringer i .domæne strukturerne ændrer disse regler sig. Med filter_var() lægger du dét besvær over til PHP(versionen)
Hej.. Og skippede du aktiverings linket i #10, man kan jo sætte en restriktion på 48 timer til at aktivere linket, eller oprettede bruger slettes igen.
#15 Så vidt jeg husker, virker dette kun fra PHP 5.xx versionen og frem. Så hvis han sidder med PHP 4, duer det ikke. Udover det, har jeg ikke benyttet mig af den, da jeg har hørt omkring flere tilfælde, hvor den faktisk ikke virker særlig godt. Det har det med at drille, når der er tal i mailen og så videre .. Det kan der evt. også læses lidt om ved en søgning på Google :-)
#16 Ikke rigtig nogen grund til at lave det, når der er validering på mailen. Det tager noget længere tid, hvis man først skal vente på en mail, før man kan gøre oprettelsen færdig. Det er mere nyttigt, hvis man vil sikre sig at det ikke er spambotter der "opretter sig som brugere" og så videre ... :-)
Men det er en god måde, hvis man vil sikre sig lidt bedre, at den person som registrerer sig, også er en person rent faktisk og en som har "gode" intentioner. Bruger det selv diverse steder :-)
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.