Hallo,

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?
je mag mysql_num_rows() niet op deze manier gebruiken

$sql = "je query";
$res = mysql_query($sql);
$num = mysql_num_rows($res);

Succes
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
}
?>
Erik schreef op 27.04.2006 18:43
je mag mysql_num_rows() niet op deze manier gebruiken

$sql = "je query";
$res = mysql_query($sql);
$num = mysql_num_rows($res);

Succes


Je mag het zo wel gebruiken maar over het verstandig is een ander verhaal
En om antwoord op zijn vraag te geven:
Je query klopt niet.


<?php
$sql = "SELECT email FROM users WHERE email = '" . $_POST['email'] . "'";
?>

Zo zou hij moeten werken.
Je query moet zo:

"SELECT email FROM users WHERE email = '" . $_POST['email'] . "'"


Verder tip van Frank/Erik even opvolgen. Verder klopt het ook wat Eris zegt, en niet helemaal wat Erik zegt :)
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.
Frank schreef op 27.04.2006 19:08
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.

eenig idee?
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.


mysql_query($query) OR die(mysql_error());

Reageren