login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Registreer-script: email bestaat wel/niet (Opgelost)

Offline Raze - 07/02/2009 12:54
Avatar van RazePHP beginner Hallo,

ik heb volgend script gemaakt om een nieuwe gebruiker te laten aanmelden.
  1. <?php
  2. $uID = $_POST['uID'];
  3. $name = $_POST['name'];
  4. $email = $_POST['email'];
  5. $password = $_POST['password'];
  6. $password_check = $_POST['password_check'];
  7.  
  8. $q = mysql_query("SELECT email FROM user");
  9. mysql_query($query_control) or die (mysql_error());
  10. while ($obj = mysql_fetch_object($q)) {
  11. echo $obj->email;
  12. }
  13.  
  14. if(isset($_POST['submit'])) {
  15. if(empty($email)) {
  16. $error2 = "U heeft geen e-mailadres ingegeven";
  17. } elseif($obj->email == $email) {
  18. $error4 = "Er is al een account met dit e-mailadres";
  19. } else {
  20. if($password == $password_check) {
  21. $query="INSERT INTO user (uID, email, password, name) VALUES ('".$uID."','".$name."','".$email."','".$password."')";
  22. mysql_query($query) or die (mysql_error());
  23. $value = "Uw account is aangemaakt.";
  24. } else {
  25. $error1 = "De wachtwoorden komen niet overeen";
  26. }
  27. }
  28. } else { } ?>

Zonder die SELECT en $error4 (om te kijken of het emailadres al dan niet al in de database staat) werkt het perfect. Maar met die SELECT krijg ik de foutmelding "Query is empty".

Er staat al data in de tabel maar ik denk dat het hier niets mee te maken heeft. Wat is er dan fout?

6 antwoorden

Gesponsorde links
Offline Wim - 07/02/2009 12:58
Avatar van Wim Crew algemeen je selecteerd nu ALLE e-mail adressen uit de database. Als er slechts 1 record in je table staat zal dit script werken, als er meerderen in staan werkt het foutief:
$obj wordt altijd overschreven, en na de while-lus heeft het als waarde dus het laatste mail-adres uit de db. Je kan bij je select iets zetten als WHERE email=$_POST['email']. Als je dan 1 record terug krijgt bestaat het e-mail adres, krijg je er geen terug bestaat het niet...
Offline svm - 07/02/2009 13:00 (laatste wijziging 07/02/2009 19:37)
Avatar van svm PHP ver gevorderde mysql_query($query_control) or die (mysql_error());

Waar maak je $query_control aan?
Dit staat niet in je script.
Misschien dat de foutmelding daaraan ligt.

Daarnaast zie ik dat je $obj -> email na de while-lus gebruikt.
Het kan natuurlijk zijn dat ik me vergis, maar volgens mij werkt deze variabel alleen in de while-lus zelf, anders zal deze alleen het laatste mailadres bevatten.


De controle op de emaildressen kun je dus in de while-lus plaatsen, maar eventueel kun je ook alle emailadressen in een array zetten en dan controleren met in_array() of hij al bestaat.
Hoe ik het zelf meestal doe is het ingevoerde emailadres opzoeken in de database (SELECT id FROM gebruikerdtabel WHERE email='". htmlentities($_POST['email']) ."').
Als hij dan niks terug geeft (in de while een variable aanmaken en vervolgens controleren of deze bestaat), dan bestaat het mailadres nog niet in de tabel.
Deze laatste manier werkt denk ik het snelste.

@hieronder
Jou stukje is gepost toen ik nog aan het typen was: niet overgeschreven dus, maar dezelfde gedachten .
@hieronder, 2e edit 
Ja, mijn wijziging ja: ik zie ook wel eens spellingsfoutjes na het posten... 
Offline Wim - 07/02/2009 15:26 (laatste wijziging 07/02/2009 19:31)
Avatar van Wim Crew algemeen
Citaat:
Je kan bij je select iets zetten als WHERE email=$_POST['email']. Als je dan 1 record terug krijgt bestaat het e-mail adres, krijg je er geen terug bestaat het niet...


Citaat:
Hoe ik het zelf meestal doe is het ingevoerde emailadres opzoeken in de database (SELECT id FROM gebruikerdtabel WHERE email='". htmlentities($_POST['email']) ."').
Als hij dan niks terug geeft (in de while een variable aanmaken en vervolgens controleren of deze bestaat), dan bestaat het mailadres nog niet in de tabel.
Deze laatste manier werkt denk ik het snelste.


Gewoon eventjes herschreven...? Verder gebruiken we zeker ook een PHP.net: mysql_real_escape_string om de postdata te beveiligen op sql injecties!!

//edit:
Gezien een e-mail adres uniek is zal er met dergelijke query maximaal 1 resultaat zijn, een while-lus hebben we dus niet nodig!

//2: je edit kwam een half uur later, daarom dat ik reageerde lol
Offline Raze - 07/02/2009 19:58
Avatar van Raze PHP beginner ik krijg nog steeds een foutmelding:
Warning: mysql_error(): supplied argument is not a valid MySQL-Link resource in C:\wamp\www\layout\register.php on line 25

Dit is dus mijn query
  1. $query_c = mysql_query("SELECT email FROM user WHERE email='".htmlentities($_POST['email']));
  2. mysql_query($query_c) or die(mysql_error($query_c));
  3. while ($obj = mysql_fetch_object($query_c)) {
  4. $var = $obj->email;
  5. }


en zo controleer ik of er al een waarde bestaat
  1. } elseif (isset($var)) {
  2. $error4 = "Er is al een account met dit e-mailadres";
Offline svm - 07/02/2009 20:05
Avatar van svm PHP ver gevorderde Probeer het zo eens :
  1. $query_c = mysql_query("SELECT email FROM user WHERE email='".mysql_real_escape_string($_POST['email'])."'");
  2. while($obj = mysql_fetch_object($query_c)) {
  3. $query_mailControl = true;
  4. }
  5.  
  6. if(isset($query_mailControl)) {
  7. echo 'E-mail bestaat al';
  8. }else{
  9. // aanmeldingsprocedure
  10. }


Ps.
Hopelijk heb ik dan mysql_real_escape_string() goed toegepast.
Offline Raze - 07/02/2009 20:15
Avatar van Raze PHP beginner @svm: prachtig...  
(het werkt dus  )
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.237s