Page 1 sur 1

Message d'erreur: Warning: mysql_fetch_assoc() expects param

Posté : 18 mars 2012, 14:39
par gennievre
Bonjour

Mes connaissances lacunaires en PHP m'ont amené à retoucher un script pour l'adapter à l'exploitation d'une base SQL à peu près semblable.
J'y suis presque arrivé sauf que je bute sur cette erreur:
Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP-5.3.9\www\lieux\lieux-dits\resultlieuditcom.php on line 75

Je colle le script ci-dessous:
Celui-ci doit aller chercher ses renseignements dans une table comportant 5 champs dont deux sont cités dans le script "paroisse" et "col-dep", ce sont des champs de texte.
<?php
require "connex.php";
?>
<html>
<head>
<meta http-equiv="Content-Language" content="fr">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Dates des registres paroissiaux de la Nièvre</title>
</head>
<body bgcolor="#ffffff">
<p align="center"><font color="#255899" size="4">
Dates des registres paroissiaux de la Nièvre (58).<br>Moteur de recherche</font></p>

<?php
$sql="SELECT * FROM registresbms";
$req=mysql_query($sql,$db);
// on compte le nombre de résultats
$res = mysql_num_rows($req);
echo '<center><font color="F80880"><i>Il y a '.$res.' références dans cette base.</i></font></center>';
?>
<br>
<div align="center">
<center>
<table border="0" width="80%">
<tr>
<td>
<p align="center"><font face="Comic Sans MS" size="2"><font color="#255899"><b>Cet outil vous permet tout simplement de sélectionner une paroisse et de consulter toutes les dates des registres existants
<br></p></font>
</td>
</tr>
</table>
<br>

<form method="POST" action="resultlieuditcom.php">
<tr>
<td width="25%" align="right"><font color="#255899">Dates des registres d'une paroisse</font></td>
<td width="25%" align="center">
<select name="lieuditcom"><option selected value=""> ----------choisissez une paroisse---------
<?php
$sql="SELECT DISTINCT paroisse FROM registresbms order by paroisse ASC";
$optio=mysql_query($sql,$db);
while($row = mysql_fetch_row($optio)) {
print "\t\t<option>".($row[0])."\n";
}
?>
</select>
</td>
<td width="25%" align="left"><input type="submit" value="Chercher"></td>
</tr>
</form>


</table>
</center>
</div>

<?php
$table = "registresbms";
$sql="SELECT distinct col-dep,paroisse FROM `$table` WHERE `paroisse` LIKE '".mysql_real_escape_string($_POST['lieuditcom'])."'";
$req=mysql_query($sql);
if (($_POST['lieuditcom'])==NULL OR $_POST['lieuditcom']=="")

echo '<center>Vous devez faire un choix</center>';

else
{
?>

<center><font color="#006902"><i>Résultats pour la paroisse de:</i></font><font color="#255899" size="4">
<?php echo $_POST['lieuditcom'];?>
</center>

</center>
<?php
while($data = mysql_fetch_assoc($req))
{
?>
<div align="center">
<center>
<table border="0" width="20%">
<tr>
<td align="center"><font color="#255899"><?php echo ($data['col-dep']);?></font></td>
</tr>
</table>
</center>
</div>
</n>
<?php
}
}
// on ferme la connexion à mysql
mysql_close();
?>

Re: Message d'erreur: Warning: mysql_fetch_assoc() expects p

Posté : 18 mars 2012, 15:10
par sirakawa
Le problème se situe-t-il dans cette partie:
<?php
$sql="SELECT DISTINCT paroisse FROM registresbms order by paroisse ASC";
$optio=mysql_query($sql,$db);
while($row = mysql_fetch_row($optio)) 
{
     print "\t\t<option>".($row[0])."\n";
}
?>
ou dans celle-ci:
<?php
$table = "registresbms";
$sql="SELECT distinct col-dep,paroisse FROM `$table` WHERE `paroisse` LIKE '".mysql_real_escape_string($_POST['lieuditcom'])."'";
$req=mysql_query($sql);
if (($_POST['lieuditcom'])==NULL OR $_POST['lieuditcom']=="")
{ // ajot
     echo '<center>Vous devez faire un choix</center>';
} // ajout 
else
{
?>

<center><font color="#006902"><i>Résultats pour la paroisse de:</i></font><font color="#255899" size="4">
<?php echo $_POST['lieuditcom'];?>
</center>

</center>
<?php
while($data = mysql_fetch_assoc($req))
{
?>
dans le premier cas, erreur ou pas, je procèderais ainsi:

table = "registresbms";
$lieu_dit_com = isset($_POST['lieuditcom']) ? $_POST['lieuditcom']: "";
/* il ne sert à rien de faire un LIKE sans joker
$sql="SELECT distinct col-dep,paroisse FROM `$table` WHERE `paroisse` LIKE '".mysql_real_escape_string($_POST['lieuditcom'])."'";
*/
$sql="SELECT distinct col-dep,paroisse FROM `$table` WHERE `paroisse` = '$lieuditcom''";

$req=mysql_query($sql);


/* test mal placé, puisque après l'exécution de la requête
if (($_POST['lieuditcom'])==NULL OR $_POST['lieuditcom']=="")
{ // ajout
echo '<center>Vous devez faire un choix</center>';
} // ajout
*/
/* plus loin il y a ça:
while($data = mysql_fetch_assoc($req))
mais le résultat de mysql_query est soit ce qui est appelé une ressource, quand la fonction a réussi, soit le booléen false quand elle a échoué. C'est pourquoi, il faudrait tester $req.
Si la requête est correctement formulée et si la table existe, $req sera toujours une ressource, y compris quand aucun enregistrement ne répond à la question.
Si la requête est mal formulée ou si la table ne peut être consultée, $req vaudra false
Si pas compris ajouter simplement la ligne suivane*/
var_dump($req);
if ($req) // suggestion
{
while($data = mysql_fetch_assoc($req))
{
}

Re: Message d'erreur: Warning: mysql_fetch_assoc() expects p

Posté : 18 mars 2012, 15:10
par Ryle
Ce message, "Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given", signifie que tu as eu un problème lors de l'exécution de ta requête. Au lieu de passer une ressource sql à la fonction mysql_fetch_assoc(), tu lui passes un booléen, qui correspond en général à une erreur lors du mysql_query().

Il faut donc vérifier que la requête concernée est correcte syntaxiquement, que les tables et champs existent bien dans ta base de données, etc.