Problème avec mysql_fetch_assoc

Résolu/Fermé
Nicke Messages postés 83 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 7 novembre 2009 - 3 juin 2009 à 19:23
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 3 juin 2009 à 22:06
Bonjour,
j'utilise mysql pour la création d'un forum et j'ai le problème suivant :
Lorsque j'utilise mysql_fetch_assoc sur ma reqete mysql il me fait une erreur (Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in C:\wamp\www\forum\includes\menu_gauche.php on line 11) à chaque fois que je n'ai qu'une seule valeur.
Dans l'un des cas il ne peut toujours y avoir qu'une seule valeur donc je pourrais le remplacer, mais je ne sait pas par quoi.
Et dans l'autre cas, le nombre de résultat étant aléatoire, je ne voit pas comment je peut faire, c'est pour un module de recherche qui marche très bien tant qu'il y a plus d'un résultat.

Merci.

3 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
3 juin 2009 à 20:08
c'est l'argument de mysql_fetch_assoc qui pose problème dans le cas ou tu as une seulle valeur

donc l'errue est avant

il nous faudrait le code de la requette
0
Nicke Messages postés 83 Date d'inscription samedi 15 novembre 2008 Statut Membre Dernière intervention 7 novembre 2009 13
3 juin 2009 à 21:36
$mots = explode(" ", $recherche); //séparation des mots
$nombre_mots = count ($mots); //compte le nombre de mots
$valeur_requete = '';
for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
{
$valeur_requete .= '' . $and_ou_or . ' titre LIKE \'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
}
$valeur_requete = ltrim($valeur_requete,$and_ou_or); //suppression de AND ou de OR au début de la boucle
$selection_recherche = mysql_query("SELECT *
FROM recherche
WHERE ".$valeur_requete." AND WHERE forum_id='".$forum."' ORDER BY id DESC"); //requête avec le résultat de la boucle dedans
}
else
{
$mots = explode(" ", $recherche); //séparation des mots
$nombre_mots = count ($mots); //compte le nombre de mots
$valeur_requete = '';
for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
{
$valeur_requete .= '' . $and_ou_or . ' titre LIKE \'%' . $mots[$nombre_mots_boucle] . '%\''; //modification de la variable $valeur_requete
}
$valeur_requete = ltrim($valeur_requete, $and_ou_or); //suppression de AND ou de OR au début de la boucle
$selection_recherche = mysql_query("SELECT * FROM forum_topic WHERE ".$valeur_requete." ORDER BY id DESC"); //requête avec le résultat de la boucle dedans
}

$nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
if ($nombre_resultats == 0) //s'il n'y a pas de résultat
{
echo 'Votre recherche n\'a donné aucun resultat veuillez réitérer. <a href="recherche.php>Recommencer</a>';
}
else //il y a au moins un résultat
{
while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
{
$auteur = mysql_query("SELECT *FROM forum_membres WHERE membre_id='".$topic_createur."' ORDER BY id DESC");
echo '<strong>Nom du topic :</strong> ' . $resultats['topic_titre'] . '<br />
<strong>Auteur</strong> ' . $auteur['membre_pseudo'] . '<br />';
}
echo '<a href="recherche.php">recommencer</a>';
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
3 juin 2009 à 22:06
un peu compliqué ton code

essayes comme ça:

$and_ou_or="AND";
//je suppose que ça tu le récupéres par un choix du formulaire de recherche

$mots = explode(" ", $recherche); //séparation des mots
$nombre_mots = count ($mots); //compte le nombre de mots
$requete = "SELECT * FROM recherche WHERE ";


for($nombre_mots_boucle = 0; $nombre_mots_boucle < $nombre_mots; $nombre_mots_boucle++) //tant que le nombre de mots de la recherche est supérieur à celui de la boucle, on continue en augmentant le nombre de mots de 1 à chaque fois
{
	if($nombre_mots_boucle ==0){
		$requete.= "titre LIKE '%".$mots[$nombre_mots_boucle]."%'";
	
	}else{
		$requete.= " ".$and_ou_or." titre LIKE '%".$mots[$nombre_mots_boucle]."%'";
	}

}
$selection_recherche = mysql_query($requete) or die ("Pb avec la requette: ".$requete."  ".mysql_error());


$nombre_resultats = mysql_num_rows($selection_recherche); //compte le nombre d'entrées sélectionnées par la recherche
if ($nombre_resultats == 0) //s'il n'y a pas de résultat
{
echo 'Votre recherche n\'a donné aucun resultat veuillez réitérer. <a href="recherche.php>Recommencer</a>';
}
else //il y a au moins un résultat
{
while($resultats = mysql_fetch_array($selection_recherche) ) //boucle affichant les résultats
{
// $auteur = mysql_query("SELECT *FROM forum_membres WHERE membre_id='".$topic_createur."' ORDER BY id DESC"); //ça c'est pas bon !
echo '<strong>Nom du topic :</strong> ' . $resultats['topic_titre'] . '<br />';
}
echo '<a href="recherche.php">recommencer</a>';

//si tu veux afficher l'auteur correspondant à chaque titre il faut que tu fasses une requette en utilisant un autre champ 
0