probleme msql_fetch_array

Eléphant du PHP | 124 Messages

06 janv. 2007, 11:29

bonjour
j'ai un proble avec ma messagerie interne
quand on se logue ,on arrive sur la page d'accueil
a l'entrée ça nous previens si il y a un msg
quand il y a un message tous va bien
quand il n'y en a pas j'ai un message d'erreur en haut de pa page
je comprend pas tres bien

msg d'erreur
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /www/sites/1/site/l/i/lsite/site/page_membres.php on line 13
le code
if($_ACTIVE_MESSAGERIE=="1")
		
		if($nb_mess_i=="1")
			
			$select_mess=mysql_query("SELECT * FROM ".PREFIXE."messagerie WHERE dest='$pseudom' AND open='0'");
			$messrow=mysql_fetch_array($select_mess);
			$id_mess_voir=$messrow['id'];
le code pour affiche le nombre de msg
<p align="center" style="1"><span class="Style5">Vous avez <?php print"<a href='mess_voir.php?id_mess=$id_mess_voir'> (".$nb_mess_i.")</a>"; ?> message</span></p>
   <p align="center"></p>
merci pour votre aide :wink:
on regle beaucoup de chose avec le php,
et pour la misere du monde ,on peut s'en servir aussi????

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

06 janv. 2007, 11:58

Le problème c'est que tu récupères le résultat de la requête sans te soucier s'il y en a réellement un ou pas :
$messrow=mysql_fetch_array($select_mess); 
En général on utilise un while() qui renvoi faux s'il n'y a pas de résultat et ne rentre donc pas dans la boucle. Dans ton cas il suffit juste de remplacer ce while par un if pour tester la présence de donner :
if ($messrow=mysql_fetch_array($select_mess)) {
  ...
}
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 19672 Messages

06 janv. 2007, 12:02

Logique : l'absence d'accolades a pour conséquence qu'après un if(), une seule instruction est exécutée si la condition renvoie true. Les suivantes seront de toutes façons exécutées.

Ton code actuel correspond à ceci :
<?php
if($_ACTIVE_MESSAGERIE=="1")
{
    if($nb_mess_i=="1")
    {
        $select_mess=mysql_query("SELECT * FROM ".PREFIXE."messagerie WHERE dest='$pseudom' AND open='0'");
    }
}
$messrow=mysql_fetch_array($select_mess);
$id_mess_voir=$messrow['id'];
?>
Alors qu'il devrait être comme ceci :
<?php
if($_ACTIVE_MESSAGERIE=="1")
{
    if($nb_mess_i=="1")
    {
        $select_mess=mysql_query("SELECT * FROM ".PREFIXE."messagerie WHERE dest='$pseudom' AND open='0'");
        $messrow=mysql_fetch_array($select_mess);
        $id_mess_voir=$messrow['id'];
    }
}
?>
Dans le premier cas, s'il n'y a pas de message, l'appel à mysql_fetch_array() ne correspond à aucune ressource si l'un des deux if() retourne false.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 124 Messages

06 janv. 2007, 16:03

merci pour votre aide c'est cool ça fonctionne :wink:
donc je resume
si condiditon sur table
requete et fetch_array doivent etre emsemble dans les accolades apres la condition
par contre j'ai essayé sans condition ce qui donne

	$select_mess=mysql_query("SELECT * FROM ".PREFIXE."messagerie WHERE dest='$pseudom' AND open='0'");
			$messrow=mysql_fetch_array($select_mess);
			$id_mess_voir=$messrow['id'];
alors ma question est :
ya t'il interet a metre une condition ou pas puisque avec ou sans ça fonctionne????
on regle beaucoup de chose avec le php,
et pour la misere du monde ,on peut s'en servir aussi????