Ik krijg steeds volgende foutmelding:

Warning: mysql_fetch_row(): supplied argument is not a valid MySQL result resource in ...

Bij dit stuk code:


<?php
session_start();
session_register('userid');
session_register('username');

// deze regel verwijderen na testing security
// $username = '';
// einde verwijderen
//print "$pasw / $login";
if (!($pasw == '' || $login == ''))
{
	// Check hier aanwezigheid in Database

	$dbh=mysql_connect ("localhost", "databaseuser", "userpwd") or die ('I cannot connect to the database because: ' . mysql_error());
	mysql_select_db ("mijndatabase"); 
    
	$query = ("SELECT id,Vnaam,Anaam,Login,Pwd,Email FROM gebruiker WHERE Login = '$login' AND Pwd = '$pasw'");
$result=mysql_query($query);
print $query;
		while (list($id, $VNaam, $ANaam, $Login, $Pwd, $Email) = mysql_fetch_row($result))
	{
		print ("$id, $VNaam, $ANaam, $Login, $Pwd, $Email");
		$userid=$id;
		$username= "$VNaam $ANaam";
	}




	mysql_close($dbh);
}


Ik heb dit gewoon gecopy pasted van een andere configuratie die gelijkaardig is, daar krijg ik de fout niet.
Volgende dingen heb ik gechecked:
- databaseuser en zijn paswoord zijn correct
- databasenaam is correct
- query geeft een resultaat terug van 1 rij

Weet iemand wat hier misloopt?
Je controleert niet of de query wel correct is uitgevoerd.

Verder is session_register() hopeloos verouderd, dit moet zijn $_SESSION[]. Zie verder de handleiding.
Ik heb ondertussen al wat meer gevonden:

Ongeldige query: No database selected

De database naam zal niet juist zij zeker? Ik zoek nog even verder
Idd of databse bestaat niet...
Het antwoord heb ik gevonden! De database naam was niet juist. Daarom heb ik dit script uitgevoerd:
// get database list
$query = "SHOW DATABASES";
$result = mysql_query($query) or die ("Error in query: $query. ".mysql_error());

echo "<ul>";
while ($row = mysql_fetch_array($result)) {
echo "<li>".$row[0];

// for each database, get table list and print
$query2 = "SHOW TABLES FROM ".$row[0];
$result2 = mysql_query($query2) or die ("Error in query: $query2. ".mysql_error());
echo "<ul>";
while ($row2 = mysql_fetch_array($result2)) {
echo "<li>".$row2[0];
}
echo "</ul>";
}
echo "</ul>";


dan copy paste van de output, en 't was gefixt!

Bedankt!
Frank schreef op 06.06.2006 16:28
Je controleert niet of de query wel correct is uitgevoerd.

Verder is session_register() hopeloos verouderd, dit moet zijn $_SESSION[]. Zie verder de handleiding.


Word je het niet zat altijd dit moeten zetten?

MAAK ER EEN TUTORIAL VAN!

PS: Als je 2 dagen eerder was.. had je kans om de biosbon te winnen
Zoek eens er over op. het staat er al jaren in. Daarnaast op php.net enz..
Toch is het te hopen dat bovenstaand script niet werkt! $pasw en $login komen zo maar uit de lucht vallen, dat duidt op een ernstig veiligheidslek genaamd superglobals.

Begin je script eens met de volgende 2 regels:
<?php
ini_set('display_errors', 1); // 0 = uit, 1 = aan
error_reporting(E_ALL);

// rest van de code
?>

Wat is hiervan het resultaat?

@Markiej: Wanneer ik het zat ben om het wéér te moeten roepen, dan reageer ik gewoon niet. En wat die tutorials betreft, volgens mij staat het al wel ergens maar wordt deze tut gewoon niet gelezen. En de bioscoopbon is hier niet geldig...
Die globals komen uit een POST form. Beter de $_POST gebruiken of is dat ook mis?
Ja, de $_POST gebruiken, maar wel controleren..

<?php
htmlentities();
mysql_real_escape_string();
?>

bijv.
Hier een stuk code dat door Jan Koehoorn is gemaakt:
<?php
// bescherming tegen mysql injection
function quote_smart($value)
{
if (get_magic_quotes_gpc()) {
$value = stripslashes($value);
}
if (version_compare(phpversion(), "4.3.0") == "-1") {
return mysql_escape_string($value);
} else {
return mysql_real_escape_string($value);
}
}

function check_array(&$array)
{
foreach ($array as $key => $value) {
$value = quote_smart($value);
$array[$key] = $value;
}
}

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
check_array($_POST);
}
if ($_SERVER['REQUEST_METHOD'] == 'GET') {
check_array($_GET);
}
?>
@Andries: Ik zou geen htmlentities() gebruiken bij het controleren van de input. Ik vind het prima dat de code zo in mijn database terecht komt. Dan kan ik deze data ook gebruiken voor andere zaken dan html. Wil ik het echter op het scherm zetten, dan pas ik uiteraard wel htmlentities toe. Maar dat moet je toch al doen.

Reageren