Mysql_fetch_array(): et foreach()

Fermé
Yo !! Messages postés 54 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 6 janvier 2009 - 3 janv. 2009 à 16:32
 toto - 6 janv. 2009 à 11:38
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

19 réponses

Apaachee Messages postés 248 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 25 août 2011 47
3 janv. 2009 à 16:37
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
Yo !! Messages postés 54 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 6 janvier 2009
3 janv. 2009 à 16:40
Donc je dois faire quoi?
0
Apaachee Messages postés 248 Date d'inscription mardi 13 novembre 2007 Statut Membre Dernière intervention 25 août 2011 47
3 janv. 2009 à 16:53
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
Yo !! Messages postés 54 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 6 janvier 2009
3 janv. 2009 à 18:36
$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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Yo !! Messages postés 54 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 6 janvier 2009
4 janv. 2009 à 16:42
Alors personne pour m'aider??
0
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
Yo !! Messages postés 54 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 6 janvier 2009
4 janv. 2009 à 17:31
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
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
Yo !! Messages postés 54 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 6 janvier 2009
4 janv. 2009 à 17:51
Voici l'erreur : Unknown column '$Id_annonce' in 'field list'
0
Yo !! Messages postés 54 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 6 janvier 2009
4 janv. 2009 à 17:52
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
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
Yo !! Messages postés 54 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 6 janvier 2009
4 janv. 2009 à 18:34
C'est le message en entier il y a rien d'aute désolé
0
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
Yo !! Messages postés 54 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 6 janvier 2009
4 janv. 2009 à 21:02
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
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
Yo !! Messages postés 54 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 6 janvier 2009
5 janv. 2009 à 17:26
Si j'ai un champs nommé ID_annonce
0
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
Yo !! Messages postés 54 Date d'inscription mercredi 16 juillet 2008 Statut Membre Dernière intervention 6 janvier 2009
6 janv. 2009 à 11:16
Donc je dois modifier quoi?
0
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