Archief - mysql_query wil niet zijn werk doen

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

het.pc.schaap

Legacy Member
Code:
<?php

if (isset($_POST['usr']) AND isset($_POST['pwd']))
{
	$loginquery = mysql_query("SELECT * FROM `members` WHERE usr = '".$_POST['usr']."' AND pwd = '".$_POST['pwd']."'");
	
	if (mysql_num_rows($loginquery) == 1)
	{
		$_SESSION['login'] = true;
	}
	
	while ($gegevens = mysql_fetch_assoc($loginquery) )
	{
		$_SESSION['usr'] = $gegevens['usr'];
		$_SESSION['pwd'] = $gegevens['pwd'];
		$_SESSION['rank'] = $gegevens['rank'];
	}
}

if ( $_SESSION['login'] ) {
	header('Location:?action=home');
}
else
{
	header('?action=error&mode=login');
}
?>

dat is mijn login script dat wordt opgeroepen na het submitten van de volgende form:
Code:
<form method="post" action="?action=loginGO">
<p style="float:left">Username: <input name="usr" type="text" size="10" /></p>
<p style="float:left">Pasword: <input name="pwd" type="password" size="10" /></p>
<p style="float:left"><input type="submit" value="Log In" /></p>
</form>

als ik het uitvoer geeft hij de volgende error:
Code:
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\wamp\www\JJTcssFORUM\inc\action\login.php on line 7

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\JJTcssFORUM\inc\action\login.php on line 12

het.pc.schaap

Legacy Member
The_Assman zei:
Werkt uw query wel?
als ik erboven zet
echo "SELECT * FROM `members` WHERE usr = '".$_POST['usr']."' AND pwd = '".$_POST['pwd']."'";

en ik copy paste dat naar de sql in mijn database, dan werkt het ja

dat is net het rare:/

Zir0h

Legacy Member
het.pc.schaap zei:
als ik erboven zet
echo "SELECT * FROM `members` WHERE usr = '".$_POST['usr']."' AND pwd = '".$_POST['pwd']."'";

en ik copy paste dat naar de sql in mijn database, dan werkt het ja

dat is net het rare:/

Connectie gemaakt met uw db?
Db geselecteerd?

Want die code hierboven kan gewoon niet werken.

het.pc.schaap

Legacy Member
The_Assman zei:
Connectie gemaakt met uw db?
Db geselecteerd?

Want die code hierboven kan gewoon niet werken.

Code:
<?php
$host="localhost"; 
$username="root"; 
$password=""; 
$db_name="JJTcssFORUM";
$connect=mysql_connect($host, $username, $password)or die("cannot connect server ");
mysql_select_db($db_name,$connect)or die("cannot select DB");
?>

dat is de dbconnect.php file die ik ook include

dus er wordt wel degelijk conectie gemaakt met db, sinds hij in een andere include al gegevens uit de db haalt

Cycloon

Legacy Member
Zou normaal wel moeten werken, alleen zie ik die include nie bovenaan in uw code.

Nog een tip:

Zet die code waar je de data uit je query haalt (die while dus) binnen je if test. Op dat moment kan de while lus ook weg (je hebt toch maar 1 resultaat) en heb je dus wat minder code. Uiteindelijk heeft het toch geen nut om die data in uw session te steken buiten uw if.

WHiSPy

Legacy Member
Doe eens wat error handling? Bv een die() in combinatie met 'n mysql_error() om de foutmelding van je query op te vragen?

Je script staat trouwens ook wide open voor sql injection. :)

killgore

Legacy Member
Waarom gebruik je geen mysqli? Dat ding is met reden gemaakt hoor.

Tyfius

Legacy Member
stoontkikker zei:
Iedereen is mis... het is de manier waarop ge mysql_num_rows aanroept.

Code:
$loginquery = mysql_query("SELECT * FROM `members` WHERE usr = '".$_POST['usr']."' AND pwd = '".$_POST['pwd']."'");
	
	if (mysql_num_rows($loginquery) == 1)
	{
		$_SESSION['login'] = true;
	}
	...

daar zit uw probleem, ge neemt ne num_rows van een query, terwijl je dit van een result moet doen. Dat moet dus dit worden :

Code:
$loginquery = mysql_query("SELECT * FROM `members` WHERE usr = '".$_POST['usr']."' AND pwd = '".$_POST['pwd']."'");
[COLOR="Red"]$loginresult = mysql_query($loginquery);[/COLOR]
	
	if (mysql_num_rows([COLOR="Red"]$loginresult[/COLOR]) == 1)
	{
		$_SESSION['login'] = true;
	}
	...
Erm, ik zou toch uw cursus PHP eens nakijken als ik van u was...

taLa.

Legacy Member
Ik hoop trouwens da ge die query zo niet gaat gebruiken, want nu zit ge met een dikke SQL injection vulnerability. Elke keer hetzelfde liedje ...

legerguy

Legacy Member
verander eens deze regel
PHP:
$loginquery = mysql_query("SELECT * FROM `members` WHERE usr = '".$_POST['usr']."' AND pwd = '".$_POST['pwd']."'");

in dit?

PHP:
$loginquery = mysql_query("SELECT * FROM `members` WHERE usr = '".$_POST['usr']."' AND pwd = '".$_POST['pwd']."'")or die(mysql_error());

Wat geeft dat?

legerguy

Legacy Member
Nog iets, waarom staat members tussen ''? Is totaal niet nodig :s

Zir0h

Legacy Member
legerguy zei:
Nog iets, waarom staat members tussen ''? Is totaal niet nodig :s

Geen '', maar ``. Die zijn totaal niet nodig, maar daardoor gaat uw query niet falen.

killgore

Legacy Member
legerguy zei:
Nog iets, waarom staat members tussen ''? Is totaal niet nodig :s

The_Assman zei:
Geen '', maar ``. Die zijn totaal niet nodig, maar daardoor gaat uw query niet falen.

totaal niet nodig is veel gezegd. Zaken tussen ` worden gewoon nooit geïnterpreteerd als (my)sql keywords. Hoewel bij iets als members de kans klein is dat dit ooit een keyword is zijn er meer dan genoeg triviale woorden (date, user, time, id, not, ...) die wel keywords zijn. Het is dus zeker geen bad practice van zaken tussen `` te zetten.

Zir0h

Legacy Member
killgore zei:
totaal niet nodig is veel gezegd. Zaken tussen ` worden gewoon nooit geïnterpreteerd als (my)sql keywords. Hoewel bij iets als members de kans klein is dat dit ooit een keyword is zijn er meer dan genoeg triviale woorden (date, user, time, id, not, ...) die wel keywords zijn. Het is dus zeker geen bad practice van zaken tussen `` te zetten.

Als uw db een beetje deftig in elkaar steekt gaat ge daar nooit last van hebben.

dJeez

Legacy Member
:offtopic: Als ik 1 raad mag geven : zoek eens naar informatie over SQL injections en zorg ervoor dat je NOOIT OFTE NIMMER (ja, dat mag geroepen worden) rechtstreeks POST of GET variabelen in queries gaat pompen zonder de minste controle en/of escapen van de waardes.

legerguy

Legacy Member
killgore zei:
totaal niet nodig is veel gezegd. Zaken tussen ` worden gewoon nooit geïnterpreteerd als (my)sql keywords. Hoewel bij iets als members de kans klein is dat dit ooit een keyword is zijn er meer dan genoeg triviale woorden (date, user, time, id, not, ...) die wel keywords zijn. Het is dus zeker geen bad practice van zaken tussen `` te zetten.

Nochtans, als ik dit uittest op mijn server (zowel lokaal als op een andere server), krijg ik toch een fout dat mijn mysql_num_rows niet kan werken hoor.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan