als ik dit stukje gebruik krijg ik deze error melding:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/httpd/vhosts/battle-hq.com/subdomains/leagues/httpdocs/graw/functions/register.php on line 66
<?php
if (mysql_num_rows(mysql_query("SELECT email FROM users WHERE email = " . $_POST['email'] . "")) > 0){
echo "<font class='menutext'>Your e-mail addres is already in use on an different account.</font>";
}?>
Weet iemand meschien waar dit aan ligt?
Dit is een waardeloos stuk code. Waarom prop je alles in 1 regel? Dat levert ALTIJD problemen op.
Juiste aanpak:
1) De query zet je in een variabele
2) Met de functie mysql_query() ga je de query uitvoeren
3) Controleer of de query correct is uitgevoerd. Zo niet, geef een foutmelding en echo de query. Dat kan nu omdat deze in een variabele staat.
4) Ga iets met de resultaten doen.
<?php
$query = "SELECT blablabla....";
$result = mysql_query($query);
if(!$result){
echo 'Mislukt: '.mysql_error().' met query: '.$query;
}
else {
$aantal = mysql_num_rows($result);
// doe iets met $aantal
}
?>
Betere oplossing: Maak het veld 'email' uniek. Dan kan er nooit en te nimmer een dubbel emailadres in de database worden ingevoerd.
Doordat dit veld nu uniek is, kun je zonder meer de data in de database gaan wegschrijven. Dus de INSERT. Het gaat vanzelf fout wanneer er een emailadres voor de 2e keer in de database wordt geschreven, althans wanneer je dat probeert. Je krijgt van mysql keurig een foutmelding terug (gebruik mysql_errno()) en vang dit nummer op om de juiste melding op het scherm te tonen.
Deze aanpak zal sneller zijn. 9 van de 10 keer wordt er een nieuw emailadres weggeschreven. En die ene keer dat het fout gaat, krijg je direct een foutmelding terug. In alle gevallen heb je slechts 1 query nodig, de INSERT, en niet 2 zoals je nu hebt. Eerst een SELECT en dan een INSERT.
Ga er eens mee stoeien en leer zo ook iets over data integriteit. Geen enkele databasebeheerder zal ooit code van een programmeur vertrouwen, die zal altijd vertrouwen op zaken als UNIQUE.
Betere oplossing: Maak het veld 'email' uniek. Dan kan er nooit en te nimmer een dubbel emailadres in de database worden ingevoerd.
Doordat dit veld nu uniek is, kun je zonder meer de data in de database gaan wegschrijven. Dus de INSERT. Het gaat vanzelf fout wanneer er een emailadres voor de 2e keer in de database wordt geschreven, althans wanneer je dat probeert. Je krijgt van mysql keurig een foutmelding terug (gebruik mysql_errno()) en vang dit nummer op om de juiste melding op het scherm te tonen.
Deze aanpak zal sneller zijn. 9 van de 10 keer wordt er een nieuw emailadres weggeschreven. En die ene keer dat het fout gaat, krijg je direct een foutmelding terug. In alle gevallen heb je slechts 1 query nodig, de INSERT, en niet 2 zoals je nu hebt. Eerst een SELECT en dan een INSERT.
Ga er eens mee stoeien en leer zo ook iets over data integriteit. Geen enkele databasebeheerder zal ooit code van een programmeur vertrouwen, die zal altijd vertrouwen op zaken als UNIQUE.
Ok ik ben er eens mee aan de gang gegaan en heb de velden UNIQUE gemaakt ook heb ik error_reporting(E_ALL); aangezet.
Nou word er inderdaad geen waarde in de db gezet als er al iets in staat, maar ik krijg geen error te zien.
als je de volgende regel onder een query zet zul als er wat fout is gegaan altijd een melding zien wat er fout gaat
wel de $query aanpassen aan de naam van jouw query natuurlijk.
Gebruik niet mysql_error(), maar mysql_errno(). Daarmee vraag je het nummer op. Op basis van dit nummer kun jij een bepaalde foutmelding op het scherm zetten.