8797 sujets

Développement web côté serveur, CMS

Bonjour,
j'ai un souci avec une requête sql qui lme renvoit cette erreur :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in

Voici la requête :

<?php
	$count = mysql_fetch_array(mysql_query("SELECT * FROM annonces INNER JOIN membres ON annonces.id = membres.id WHERE annonces.acceptation='Non'ORDER BY id"));
	if ($count[0] == 0)
	{
?> .....


puis l'affichage du résultat :


<?php
	$how = 0;
	while ($var = mysql_fetch_array($requete_annonces))
	{
		$how++;
		echo '<tr>';
			echo '<td align="left" style="border-bottom:1px dashed gray;"><a href="profil-'.$var["auteur"].'.html">'.$var["auteur"].'</a></td>';
		    echo '<td align="left" style="border-bottom:1px dashed gray;">'.$var["telephone"].'</td>';



d'avance merci et bonne année à tous.
Modifié par stagos (03 Jan 2008 - 10:06)
quel est la ligne de l'erreur ? ( et donc quel fetch_array est faux ?)
le code est pas complet donc dur a dire.

mysql_fetch_array($requete_annonces))


hum si la variable $requete_annonces contient une requete tu as sauté une étape: celle du mysql_query.

sinon ça depend de plein de chose. a priori le mysql_query echoue car mysql_fetch_assoc ne reconnait pas le résultat. surement une erreur dans la requete. peut-etre une variable mal initialisée.

en général c'est assez mauvais d'économiser une variable a ce niveau en passant directement le mysql_query.

en effet tu te prives de la possibilité de faire un

$res = msql_query($query) or die($query);

hors afficher la requete permet souvent de comprendre pourquoi elle marche pas.
Modifié par CPascal (02 Jan 2008 - 23:58)
Bonjour,
La ligne qui rrenvoit une erreur est :
<?php $requete_annonces = mysql_query("SELECT * FROM annonces INNER JOIN membres ON annonces.id = membres.id WHERE annonces.acceptation='Non' ORDER BY id"); ?>		


et le code complet pour plus de clareté :

<?php $requete_annonces = mysql_query("SELECT * FROM annonces INNER JOIN membres ON annonces.id = membres.id WHERE annonces.acceptation='Non' ORDER BY id"); ?>		

<?php
	$how = 0;
	while ($var = mysql_fetch_array($requete_annonces))
	{
		$how++;
		echo '<tr>';
			echo '<td align="left" style="border-bottom:1px dashed gray;"><a href="profil-'.$var["auteur"].'.html">'.$var["auteur"].'</a></td>';
		    echo '<td align="left" style="border-bottom:1px dashed gray;">'.$var["telephone"].'</td>';
			echo '<td align="left" style="border-bottom:1px dashed gray;"><a href="annonce-'.$var["titre_url"].'.html">'.$var["titre"].'</a></td>';
			echo '<td align="left" style="border-bottom:1px dashed gray;">'.$var["localisation"].'</td>';	
			echo '<td align="left" style="border-bottom:1px dashed gray;">'.formatdate($var["expiration"]).'</td>';
			echo '<td align="left" style="border-bottom:1px dashed gray;"><a href="admin-validation-'.$var["id"].'.html">Processus de validation</a></td>';
		echo '</tr>';
	}
?>
	
	</table>		

<?php
	}
?>

merci
Modifié par stagos (03 Jan 2008 - 08:34)
Re,

tu devrais rajouter le die.

<?php $requete_annonces = mysql_query("SELECT * FROM annonces INNER JOIN membres ON annonces.id = membres.id WHERE annonces.acceptation='Non' ORDER BY id")
or die(mysql_error()." <br>"."SELECT * FROM annonces INNER JOIN membres ON annonces.id = membres.id WHERE annonces.acceptation='Non' ORDER BY id"); 
?>


sinon bonne année
comme ça là je ne vois d'erreur pas dans la requete sauf dans le order. le id est ambigue. c'est peut-être ça.
precise donc si c'est celui de annonces ou membres en le préfixant.

sinon le
ON annonces.id = membres.id 
est suspect aussi. soit tu as mal choisi tes noms. soit y a un pb avec ta structure de base. a moins que chaque membres n'est droit qu'a une seule annonce?

a priori je m'attendais a un
ON annonces.[b]id_membres [/b]= membres.id 

mais bon ca depend de la structure de ta base.
Modifié par CPascal (03 Jan 2008 - 10:17)
effectivement CPascal,
le :
ON annonces.id = membres.id 

est erronné et aurait du être :
ON annonces.auteur = membres.login


et le ORDER BY est modifié pour devenir :

ORDER BY annonces.id


merci beaucoup pour ton aide tu m'as bien aidé à comprendre mon problème, n'étant pas développeur cela ne m'a pas sauté aux yeux même si c'était logique ... Smiley biggrin
De rien.

petite remarque est tu sur que de order par un id. donc par ordre d'insertion dans la base soit trés judicieux?

en plus c'est a priori le comportement par defaut.

un tri sur des dates ou alphabétique sur annonces.auteur ne serait-il pas plus pertinent?

sinon bonne année
Modifié par CPascal (03 Jan 2008 - 10:18)
et bien cette fonction me permet d'afficher les dernières annonces postées pour les valider par l'administration du site et donc de les mettre en ligne.

C'est ce qui explique pourqui je choisis cette méthode .