Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in

Status
Niet open voor verdere reacties.

ciske de rat

Verenigingslid
Lid geworden
10 jun 2003
Berichten
964
goede avond iemand een idee hier over
waarom het fout gaat
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /volume1/web/lr/downloads.php on line 29

aan gezien het sorteren ook niet gaat


PHP:
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
include 'core/init.php';
protect_page();
include 'includes/overall/header.php';
?>
<?php
if (isset($_GET['sort'])){

$sorteren_op = $_GET['sort'];
} else {

$sorteren_op = 'username';
}

$result = mysql_query("SELECT user_id, username, first_name, last_name, email, functie FROM users ORDER BY $sorteren_op");
echo "<table id = 'red'>";
echo ' <tr>';

echo '<th class = "head">user_id&nbsp;<a href="download.php?sort=user_id%20ASC"><img src = "images/icons/arrow_down.png" alt="arrow_down"/></a><a href=".php?sort=user_id%20DESC"><img src = "images/icons/arrow_up.png" alt="arrow_up"/></a></th>';
echo '<th class = "head">username&nbsp;<a href="download.php?sort=username%20ASC"><img src = "images/icons/arrow_down.png" alt="arrow_down"/></a><a href="profile.php?sort=username%20DESC"><img src = "images/icons/arrow_up.png" alt="arrow_up"/></a></th>';
echo '<th class = "head">first_name&nbsp;<a href="download.php?sort=first_name%20ASC"><img src = "images/icons/arrow_down.png" alt="arrow_down"/></a><a href="profile.php?sort=first_name%20DESC"><img src = "images/icons/arrow_up.png" alt="arrow_up"/></a></th>';
echo '<th class = "head">last_name&nbsp;<a href="download.php?sort=last_name%20ASC"><img src = "images/icons/arrow_down.png" alt="arrow_down"/></a><a href="profile.php?sort=last_name%20DESC"><img src = "images/icons/arrow_up.png" alt="arrow_up"/></a></th>';
echo '<th class = "head">email&nbsp;<a href="download.php?sort=email%20ASC"><img src = "images/icons/arrow_down.png" alt="arrow_down"/></a><a href="profile.php?sort=email%20DESC"><img src = "images/icons/arrow_up.png" alt="arrow_up"/></a></th>';

echo '</tr>';

while ($row = mysql_fetch_array($result)){
echo '<tr>';
echo '<td class = "emp"><a href="download.php?profile='.$row['username'].'" class="edit_user_link">'.$row['username'].'</a></td>';
echo '<td>'.$row['firstname'].'</td>';
echo '<td>'.$row['lastname'].'</td>';
echo '<td>'.$row['email;'].'</td>';

echo '</table>';

}
?>


<?php include 'includes/overall/footer.php';
?>
 
  1. Controlleer altijd je variabelen voor je ze in een SQL query zet
  2. Kijk na of je result niet FALSE is (bij geen uitkomst van de query)
  3. Kijk na of je wel een MySQL verbinding tot stand hebt (vermoedelijk wel)
  4. Probeer wat te debuggen en de mysql_fetch_array(..) eerst in een tijdelijke var te zetten en deze uit te lezen
  5. Voor je sorteren kan/moet je nog ASC of DESC erachter zetten (ascending,descending) [want bij lijn 14 staat het er niet?]

gr,
Maxim
 
Laatst bewerkt:
PHP:
<?php
	ini_set('display_errors', 'On');
	error_reporting(E_ALL);
	include 'core/init.php';
	protect_page();
	include 'includes/overall/header.php';
?>

<?php
	if (isset($_GET['sort'])) {		 
		$sorteren_op = $_GET['sort'];
	} else {		 
		$sorteren_op = 'username';
	}
		 
	$result = mysql_query("SELECT user_id, username, first_name, last_name, email, functie FROM users ORDER BY " . $sorteren_op);
	echo "<table id='red'>";
		echo ' <tr>';
		 
		echo '<th class="head">user_id&nbsp;<a href="download.php?sort=user_id%20ASC"><img src="images/icons/arrow_down.png" alt="arrow_down"/></a><a href=".php?sort=user_id%20DESC"><img src = "images/icons/arrow_up.png" alt="arrow_up"/></a></th>';
		echo '<th class="head">username&nbsp;<a href="download.php?sort=username%20ASC"><img src="images/icons/arrow_down.png" alt="arrow_down"/></a><a href="profile.php?sort=username%20DESC"><img src = "images/icons/arrow_up.png" alt="arrow_up"/></a></th>';
		echo '<th class="head">first_name&nbsp;<a href="download.php?sort=first_name%20ASC"><img src="images/icons/arrow_down.png" alt="arrow_down"/></a><a href="profile.php?sort=first_name%20DESC"><img src = "images/icons/arrow_up.png" alt="arrow_up"/></a></th>';
		echo '<th class="head">last_name&nbsp;<a href="download.php?sort=last_name%20ASC"><img src="images/icons/arrow_down.png" alt="arrow_down"/></a><a href="profile.php?sort=last_name%20DESC"><img src = "images/icons/arrow_up.png" alt="arrow_up"/></a></th>';
		echo '<th class="head">email&nbsp;<a href="download.php?sort=email%20ASC"><img src="images/icons/arrow_down.png" alt="arrow_down"/></a><a href="profile.php?sort=email%20DESC"><img src = "images/icons/arrow_up.png" alt="arrow_up"/></a></th>';
		 
		echo '</tr>';
	 
	while ($row = mysql_fetch_array($result)){
		echo '<tr>';
		echo '<td class = "emp"><a href="download.php?profile='.$row['username'].'" class="edit_user_link">'.$row['username'].'</a></td>';
		echo '<td>'.$row['first_name'].'</td>';
		echo '<td>'.$row['last_name'].'</td>';
		echo '<td>'.$row['email'].'</td>'; 
	}

	echo '</table>';
?>
 
 
<?php 
	include 'includes/overall/footer.php';
?>

Je moet een verbinding hebben, daar gaat het fout, en variabelen stonden in de war.
 
Laatst bewerkt:
  1. Voor je sorteren kan/moet je nog ASC of DESC erachter zetten (ascending,descending) [want bij lijn 14 staat het er niet?]

Is niet noodzakelijk, standaard pakt MySQL ASC wanneer je het er niet expliciet bij zet :)

Daarnaast is het probleem dat er geen result opgevraagd wordt, er wordt een query uitgevoerd en dan direct een fetch-actie.

De volgorde is
  1. query
  2. result
  3. fetch

Dus dit:
PHP:
$result = mysql_query("SELECT user_id, username, first_name, last_name, email, functie FROM users ORDER BY " . $sorteren_op);
echo "<table id='red'>";
wordt
PHP:
$query = mysql_query("SELECT user_id, username, first_name, last_name, email, functie FROM users ORDER BY " . $sorteren_op);
$result = mysql_result($query);
echo "<table id='red'>";
 
Laatst bewerkt:
Huh, waarom zou je eerst een result op moeten vragen voor je een fetch-actie kan doen? Je kan een fetch-actie doen op het resultaat van mysql_query. Dat staat zelfs op de pagina over mysql_result op php.net:
When working on large result sets, you should consider using one of the functions that fetch an entire row (specified below). As these functions return the contents of multiple cells in one function call, they're MUCH quicker than mysql_result().


De foutmelding die je krijgt wil zeggen dat mysql_query FALSE oplevert en dat gebeurt als de query mislukt (geen verbinding met de database of een fout in de query).
 
Uh ja, je hebt gelijk. Hoe ik dat nou weer mee in mijn hoofd heb gekregen :confused: :o

Queries controleren op fouten is inderdaad een goeie:

PHP:
$result = mysql_query("SELECT user_id, username, first_name, last_name, email, functie FROM users ORDER BY " . $sorteren_op) or die(mysql_error());

Overigens zou ik de database-functies z.s.m. wijzigen naar PDO of MySQLi.

Het is überhaupt vreemd dat ik hier weer mysql_*-functies tegenkom aangezien je in een andere vraag wel PDO gebruikt: http://www.helpmij.nl/forum/showthread.php/775573-pdo-foutje
 
Op fouten controleren moet je nooit met or-die doen, want je wilt nooit (gewoon helemaal absoluut nooit) dat je script stopt omdat een query mislukt is. Plus je wilt nooit (nog nooiter dan or-die) de sql-fout printen naar een hacker die dan precies weet wat voor fout hij heeft veroorzaakt.

Over de variabelen; als de waarde van uit GPCS komt dan *MOET* je ze escapen, perse, geen uitzondering, altijd, punt. (of je moet prepared statements gebruiken, maar dat is lang niet altijd wijs)
 
@PgVincent

Ik neem aan dat Tha Devil dit alleen voor het debuggen wil gebruiken, dan is dit even een snelle oplossing. Hebben jullie mijn eerste post gelezen, daar staat het probleem.
 
Dus laat hem de code die ik daar heb gezet proberen en een mysql_connect toevoegen ;)
 
Dus laat hem de code die ik daar heb gezet proberen en een mysql_connect toevoegen

Lat hem liever de juiste foutcontrole toevoegen, en als de foutmelding dan zegt dat er geen verbinding is, dan zien we dat wel (want ik gok zomaar dat hij de verbinding al gemaakt heeft in init.php)
 
Op fouten controleren moet je nooit met or-die doen, want je wilt nooit (gewoon helemaal absoluut nooit) dat je script stopt omdat een query mislukt is. Plus je wilt nooit (nog nooiter dan or-die) de sql-fout printen naar een hacker die dan precies weet wat voor fout hij heeft veroorzaakt.

100% eens, maar grote kans dat de fout in die query zit dus dan is dit een snelle manier van debuggen.
Zodra die fout is opgelost uiteraard de or die() weghalen want de kans dat het script daarna op dezelfde query vastloopt acht ik zeer klein. :)
 
Ja, inderdaad er was iets mis met de query, de kolom "functie" bestond niet.
 
Hoe weet jij dat? Als "ciskederat" vorderingen heeft, is het handiger dat ie reageert.
 
tha devil ik zit niet altijd direct op forum
meestal zit ik verscholen in de chat
klopt wat lord zegt was een fout met fucntie in de database die stond daar niet in
mijn vorige vraag was en klopt iets met pdo
aan gezien dat ik daar ook mee aan de slag ben geweest bleek nog iet te hoog gegrepen
daarom heb ik wat aan testen op inlog script wat ik nu draaide heb met een registratie formulier

in middels is de fout ondekt ik heb script wat ik ooit gebruikt heb aan gepast maar niet alles aan gepast zo
bleek in regel
$result = mysql_query("SELECT user_id, username, first_name, last_name, email, functie FROM users ORDER BY " . $sorteren_op);
functie te staan die nie in database thuis hoort in middels is dit op gelost ik dank van harte voor mee denken
 
Laatst bewerkt door een moderator:
tha devil ik zit niet altijd direct op forum
meestal zit ik verscholen in de chat
Begrijp ik, maar je stelt de vraag op het forum en krijgt daar ook reacties op :)

Als PDO net iets te geavanceerd is zou ik op zijn minst de mysql_*-functies vervangen door mysqli_*-functies.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan