login  Naam:   Wachtwoord: 
Registreer je!
 Forum

or die(mysql_error()) Vraag. (Opgelost)

Offline arthurheijm - 31/01/2014 18:39
Avatar van arthurheijmLid In mijn nieuws brief script, heb ik voor het aan en af melden de regel staan die kijkt of het e-mail adres bestaat.

  1. $sql= mysql_query("SELECT email FROM nieuwsbrief WHERE email = '".$_POST['email']."'") or die(mysql_error());


Volgens mij zo ik op deze manier toch een melding moeten krijgen als het e-mail adres niet bestaat.
Of zit ik hiermee fout.

2 antwoorden

Gesponsorde links
Offline Thomas - 31/01/2014 20:22 (laatste wijziging 31/01/2014 20:33)
Avatar van Thomas Moderator mysql_query retourneert een resource (dit is een variabele type dat naar een stuk geheugen wijst waar het resultaat-object is opgeslagen zeg maar) of (de boolse waarde) false indien er een (syntactische) fout in de query is opgetreden, in dat laatste geval wordt het "or die()" deel uitgevoerd.
Een query die geen resultaten oplevert is niet (per definitie) syntactisch fout.
Als je wilt controleren of een query resultaten oplevert, moet je de resource nader inspecteren met behulp van mysql_num_rows().

  1. // query uitvoeren, foutmelding indien syntactische SQL fout
  2. $res = mysql_query('... je query ...') or die(mysql_error());
  3.  
  4. // controleren of er resultaten zijn
  5. if (mysql_num_rows($res) > 0) {
  6. // 1 of meer resultaten, die je kunt ophalen met je favoriete mysql_fetch_... opdracht
  7. // ...
  8. } else {
  9. // geen resultaten
  10. // ...
  11. }
  12.  
  13. // resource weer vrijgeven


Je doet er trouwens goed aan om MySQLi of PDO te gaan gebruiken, want de mysql_ lijn wordt langzaam maar zeker uitgefaseerd.

NB: Als je gebruikers-invoer hebt in je query ($_POST variabelen enzo) doe je er verstandig aan deze te "escapen" (te ontdoen van special MySQL betekenis) met behulp van de functie mysql_real_escape_string(), anders is je query mogelijk vatbaar voor "SQL injection" (het onbedoeld invoegen van tekstpassages die in MySQL een speciale betekenis hebben) en daarmee kan mogelijk de werking van de query wijzigen en (persoonlijke) informatie worden blootgelegd. Een veiligere variant zie er dus als volgt uit:

  1. $res = mysql_query("SELECT email
  2. FROM nieuwsbrief
  3. WHERE email = '".mysql_real_escape_string($_POST['email'])."'") or die(mysql_error());
Bedankt door: arthurheijm
Offline arthurheijm - 01/02/2014 17:02
Avatar van arthurheijm Lid Bedankt voor de uitleg.
Ik zal ook eens gaan kijken na dat Mysqli.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.197s