Mysql_fetch_array(): et foreach()

Bonjour,
J'ai un petit souci avec mon site internet j'ai deux message d'erreur et ca le fait pas trop car je trouve pas la solution pour résoudre mon probleme.

Voici le script :

$db=new DataBase;
//connexion à la base de donnée
$id_connex=$db->ConnexionDataBase($db);
$id_result=$db->LireTable($id_connex,$sql);

$tabmoto=mysql_fetch_array($id_result,MYSQL_ASSOC);

$html="<table bgcolor='#EDEDED' align='center' width='800px'><tr><td><ul>\n";
$i=0;
foreach($tabmoto as $t)
{
$html.="<li><font color='black' size='3' font-family='Georgia'><strong> - ".mysql_field_name($id_result, $i++)."</strong></font> : <font color='#981117' size='3'><strong>$t</strong></font></li>\n";
}
//lit dans le rep. la photo vignette
$replecture=lecture_rep($rep."/".$reppetit."/");
if($replecture!=-1)
{
//insert les photos à l'écran
foreach($replecture as $t)
{
if(is_file($rep."/".$reppetit."/".$t))
echo("<img src='".$rep."/".$reppetit."/$t'>\n");
}
}
function lecture_rep($rep)
{
if(is_dir($rep))
{
$dir = opendir($rep);
$i=0;
while ($f = readdir($dir))
{
$photo[$i]=$f;
$i++;
}
return $photo;
}
return -1;
}
$html.="</ul></td></tr></table>\n";
echo($html);
mysql_close();
?>

Et j'ai ceci en message d'erreur :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/motorev2/public_html/vendre/formmoto_etape3.php on line 237

Warning: Invalid argument supplied for foreach() in /home/motorev2/public_html/vendre/formmoto_etape3.php on line 241


Merci pour votre aide

--
Moto2Reve.com : Site internet de petites annonces moto 
Configuration: Windows Vista
Internet Explorer 7.0

19 réponses

  1. Pour ta première erreur, cela arrive quand tu as 2 connexion actives sur ta BD SQL. Par exemple, Avant d'appeler uen fonction qui elle-même se connectera a ta BD, il faut que tu ai fermé toutes la connexion déja présente à ta BD.
    0
    1. Ca simplifierait pas mal si tu mettais ton code entre balises

      LireTable($id_connex,$sql);


      Dans ta fonction LireTable, tu ne cherches pas a te reconnecter a ta BD ?
      0
      1. $db=new DataBase; 
        //connexion à la base de donnée 
        $id_connex=$db->ConnexionDataBase($db); 
        $id_result=$db->LireTable($id_connex,$sql); 
        
        $tabmoto=mysql_fetch_array($id_result,MYSQL_ASSOC); 
        
        $html="<table bgcolor='#EDEDED' align='center' width='800px'><tr><td><ul>\n"; 
        $i=0; 
        foreach($tabmoto as $t) 
        { 
        $html.="<li><font color='black' size='3' font-family='Georgia'><strong> - ".mysql_field_name($id_result, $i++)."</strong></font> : <font color='#981117' size='3'><strong>$t</strong></font></li>\n"; 
        } 
        //lit dans le rep. la photo vignette 
        $replecture=lecture_rep($rep."/".$reppetit."/"); 
        if($replecture!=-1) 
        { 
        //insert les photos à l'écran 
        foreach($replecture as $t) 
        { 
        if(is_file($rep."/".$reppetit."/".$t)) 
        echo("<img src='".$rep."/".$reppetit."/$t'>\n"); 
        } 
        } 
        function lecture_rep($rep) 
        { 
        if(is_dir($rep)) 
        { 
        $dir = opendir($rep); 
        $i=0; 
        while ($f = readdir($dir)) 
        { 
        $photo[$i]=$f; 
        $i++; 
        } 
        return $photo; 
        } 
        return -1; 
        } 
        $html.="</ul></td></tr></table>\n"; 
        echo($html); 
        mysql_close(); 
        ?> 
        

        0
        1. Alors personne pour m'aider??
          0
          1. Bonjour

            Pas facile car on ne sait pas ce que c'est que ta classe DataBase. Le sais-tu, toi ?
            $id_connex=$db->ConnexionDataBase($db);

            Je trouve bizarre cette méthode qui prend l'objet lui-même comme paramètre, mais comme on ne connaît pas la classe tout est possible.
            $id_result=$db->LireTable($id_connex,$sql);

            Elle sort d'où la requête $sql ?
            0
            1. Voila ma requete : qui vien juste avant le script que j'ai mis

              $sql="SELECT `annonce`.`titre` as `Titre de votre annonce`, 
              `annonce`.`Constructeur` as `Marque`, 
              `annonce`.`Modele` as `Modèle`,
              `annonce`.`Modele2` as `Autre Modèle`, 
              `annonce`.`Type` as Type, 
              `annonce`.`Km` as Kilométres, 
              `annonce`.`Année`, 
              `annonce`.`1ere immat` as `1ére Immatriculation`, 
              `annonce`.`Carnet` as `Carnet d'entretien`,  
              `annonce`.`garantie`,
              `annonce`.`Options`, 
              `annonce`.`Etat`, 
              `annonce`.`Nb de proprietaire` as `1ère main`,
              `annonce`.`Cylindrée`, 
              `annonce`.`Puissance`, 
              `annonce`.`Couleur`, 
              `annonce`.`tuning` as `Personnalisation / Tuning`, 
              `annonce`.`Prix`, 
              `annonce`.`texte` as `Commentaire`
              FROM `annonce`
              WHERE `annonce`.Id_annonce=".$Id_annonce.";";


              et voila pour la connexion :

              class DataBase
              /* Site web root localhost */
              {
              	var $database="Site_web";
              	var $connexion;
              	var $utilisateur="root";
              	var $pass="";
              	var $serveur="localhost";
              
              	//connexion à une base de donnée
              	function ConnexionDataBase($c)
              	{
              		//objetd de connexion
              		$c->connexion = mysql_connect($c->serveur,$c->utilisateur,$c->pass);
              		mysql_select_db($c->database,$c->connexion);
              		return $c->connexion;
              	}
              	
              	
              	function affiche($m)
              	{
              		//$database="moi";
              		echo $m->database."<br>";
              		echo $m->utilisateur."<br>";
              		echo $m->pass."<br>";
              		echo $m->serveur."<br>";
              	}
              	
              	function LireTable($idcon,$sql)
              	{
              		$rs=mysql_query($sql, $idcon);
              		return $rs;
              	}
              
              }

              0
              1. Fais les modifications suivantes :

                dans ConnexionDataBase :
                $c->connexion = mysql_connect($c->serveur,$c->utilisateur,$c->pass) or die (mysql_error());
                dans ta fonction LireTable
                $rs=mysql_query($sql, $idcon) or die(mysql_error());
                ça ne va pas résoudre le problème mais ça va donner des informations sur la cause
                0
                1. Voici l'erreur : Unknown column '$Id_annonce' in 'field list'
                  0
                  1. Voici le message d'erreur mais qui vien de la page d'avant en faite

                    Unknown column '$Id_annonce' in 'field list'

                    Donc voila mon script de la page d'avant :

                    $Id_annonce=$_POST["Id_annonce"];
                    $rep="../temporaire/".session_id();
                    $repnormal="normal";
                    
                    
                    $db=new DataBase;
                    //connexion à la base de donnée
                    $id_connex=$db->ConnexionDataBase($db);
                    
                    function lecture_rep($rep)
                    	{
                    		if(is_dir($rep))
                    		{
                    			$dir = opendir($rep);
                    			$i=0;
                    			while ($f = readdir($dir)) 
                    			{
                    				$photo[$i]=$f;	
                    				$i++;
                    			}
                    			return $photo;
                    		}
                    			return -1;
                    	}
                    
                    //lit dans le rep. la photo vignette
                    	$replecture=lecture_rep($rep."/".$repnormal."/");
                    	if($replecture!=-1)
                    	{
                    		//insert les photos à l'écran
                    		foreach($replecture as $t)
                    		{
                    			if(is_file($rep."/".$repnormal."/".$t))
                    			{
                    				$handle = fopen ($rep."/".$repnormal."/".$t, "rb");
                    				$contents = fread ($handle, filesize ($rep."/".$repnormal."/".$t));
                    				fclose ($handle);
                    				if(filetype($rep."/".$repnormal."/".$t)=='file')
                    				{
                    					$requete="insert into `photo`(photo,nom_photo,type_photo,taille_photo,Id_annonce)VALUES
                    						('".addslashes($contents)."','$t','image/pjpeg','".filesize ($rep."/".$repnormal."/".$t)."',$Id_annonce);";
                    					$db->LireTable($id_connex,$requete);
                    				}
                    			}
                    		
                    		}
                    	}
                    	else 
                    			$db->LireTable($id_connex,"insert into `photo`(Id_annonce,nom_photo,type_photo,taille_photo,photo)
                    										select $Id_annonce,nom_photo,type_photo,taille_photo,photo from `photo` where Id_photo=49");
                    		
                    	mysql_close();
                    	
                    	//header("location: formmoto_etape3.php?IId_annonce=$Id_annonce");
                    	
                    echo '<script language="Javascript">
                    <!--
                    document.location.replace("formmoto_etape3.php?IId_annonce=$Id_annonce");
                    // -->
                    </script>';	
                    ?>
                    0
                    1. J'ai fait quelques essais, je ne vois pas.

                      le message d'erreur dit-il bien Unknown column '$Id_annonce' in 'field list' ? Peux-tu donner le message complet ?
                      Sur laquelle des requêtes y a-t-il une erreur ?
                      Dans la dernière requête, est-ce bien un select $Id_annonce que tu veux et non pas un select Id_annonce ?
                      0
                      1. C'est le message en entier il y a rien d'aute désolé
                        0
                        1. D'accord, mais tu peux peut-être dire sur quelle requête ?
                          Si tu ne le sais pas, fais un echo htmlentities($sql); au début de la fonction LireTable
                          0
                          1. en faite je ne pense pas que ca vienne d'une requete mais de l'ID_annonce car dans mon lien j'ai ca :

                            formmoto_etape2.php?Id_annonce=$Id_annonce

                            Et on voi bien qu'il ne prend pas l'ID_annonce dans le lien et je pense que c'est la ou est le souci

                            Par contre comment recupérer l'ID ca je trouve pas
                            0
                            1. Mais si ça vient bien de la requête !
                              Si tu as ?Id_annonce=$Id_annonce dans ton URL, alors je suppose que cette valeur se retrouve dans ta variable $Id_annonce, même si je ne vois pas comment puisque tu as $Id_annonce=$_POST["Id_annonce"]; au lieu de $Id_annonce=$_GET["Id_annonce"];.
                              Dans ce cas, dans la sous-requête "select $Id_annonce,nom_photo,type_photo,taille_photo,photo from `photo` where Id_photo=49", la variable $Id_annonce est remplacée par sa valeur, c'est à dire...$Id_annonce
                              Puisque ce $Id_annonce ,n'est pas entre apostrophes, il est pris comme un nom de champ. Et comme tu n'as pas de champ de ce nom là, il y a une erreur, qui correspond exactement au message indiqué.
                              0
                              1. Si j'ai un champs nommé ID_annonce
                                0
                                1. Non, tu n'as pas de champ ID_annonce, tu as un champ Id_annonce
                                  Mais peu importe l'erreur de majuscule, le problème c'est que dans ta requête tu appelles ton champ $Id_annonce
                                  0
                                  1. Sur un programme correct, on peut comprendre ce que l'auteur a voulu faire.
                                    Sur un programme avec des erreurs, on ne peut faire que des suppositions.
                                    Donc, sous toutes réserves :
                                    Je pense que le Id_annonce=$Id_annonce dont tu parles dans ton message 14 est incorrect, il devrait y avoir une valeur à la place de $Id_annonce. Cela vient probablement de la façon dont le lien a été créé, une chaîne entre apostrophes au lieu de double quotes et une variable PHP n'a pas été substituée.
                                    Je pense également que $Id_annonce est une erreur dans ta requête
                                    ...select $Id_annonce,nom_photo,type_photo,taille_photo,photo from `photo` where Id_photo=49");
                                    il devrait y avoir simplement Id_annonce.
                                    0