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

Petit nouveau ! | 6 Messages

18 mars 2012, 14:39

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();
?>

Mammouth du PHP | 2278 Messages

18 mars 2012, 15:10

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))
{
}
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 mars 2012, 15:10

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.
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...