Pepin avec un mysql_fetch_array()

Signaler
Messages postés
49
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
29 décembre 2005
-
Messages postés
49
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
29 décembre 2005
-
bonjour!
voilà j'ai un petit problème que je n'arrive pas à élucider
le voici :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c


je ne vois pas trop où j'ai peu fauté... :?
voici mon code :
if ($tab_com = mysql_query ($add_com,$base))
 {


 $res_com mysql_fetch_array($tab_com);> ERREUR DONC ICI
$num_com = $res_com[0]; 
$quantite = $_SESSION['panier']['quantite'];



echo "<h3><center>Votre commande a bien &#233;t&#233; prise en compte

Le paiement s'effectuera au moment de la livraison

le delais est de 48h
</center>"; 
 }
else
{
 echo "Erreur dans l'&#233;xecution de la requete derniere_comm
";
 echo "Erreur".mysql_error().":".mysql_error()."
";
}



merci pour votre aide!
A voir également:

9 réponses

Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
saLut...



Tu nous caches l'essentiel, à savoir la requète fautive !



Mais je soupçonne tout de même la faute :

Tu utilises une variable nommée $add_com.

Je vois gros comme ma b**e que $add_com = "insert into table ...";



donc dans le cas d'une insertion (ou update ou delete ou drop ou
truncate ou ... donc tout sauf select) mysql_query répond bêtement
'true' (enfin je veux dire que c'est toi qu'est bête !)





Normal vu que tu ne lui demande pas de resultat !!!

donc $tab_com == true;

donc is_resource($tab_com) == false;

donc mysql_fetch_array($tab_com) == 'Va te faire voir';



Logique ! Non ?
Messages postés
49
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
29 décembre 2005

huumm c'est facile pour toi "homme si fort en php" de critiquer les gens qui débutent
si je suis ici c'est qu'il y a des raisons...
enfin, point de vue pédagogie = 0 ou false, comme tu veux!
heuresement qu'il n'y en a pas des tonnes comme toi ...
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
A bon... désoler alors.





Mais c'est vrai que a force de répondre à des questions souvent identique, j'essaye de faire des experiences.



C'est tombé sur toi, encore désolé.





As-tu compris ce que je tentais de te dire ?

Sinon je répète en plus didactique...
Messages postés
49
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
29 décembre 2005

oauis ej sais bien que c'est toujours les meme questions qui sont posées mais je pense que chaque cas est différent...
revenons à mon cas ;)
en faite c'est une requete du type :
$add_com = " INSERT INTO commande(num_com, date_com) VALUES ( '', '".$date."' )";

le code ennoncé plus haut marche tres bien avec une requete de type SELECT


donc en faites j'ai pas spécialement compris ce que tu m'as dit plus haut..
Messages postés
2350
Date d'inscription
mercredi 13 octobre 2004
Statut
Membre
Dernière intervention
18 avril 2015
3
Suffit juste de savoir que mysql_query ne renvoit JAMAIS true, et normalement ca devrait être bon !! :)

Via la doc www.php.net ==> Mysql_query() renvoit FALSE si rien ne marche, mais certainement pas TRUE :)

De toute facon, il faut savoir que tu ne peux pas faire de mysql_fetch_array() sur une requète de type INSERT,UPDATE, DELETE etc... Seulement sur un SELECT !

Pour voir si il y a une erreur mysql je te conseil de faire une fonction comme celle la :

function query($sql) {
if ( !$query = mysql_query($sql) ) {
die (mysql_error());
} else {
return $query;
}
}

C'est la SEULE méthode la plus fiable pour savoir si une requète est bien passé ou non, toutes les autres sont basés sur le fait qu'un if convertit TOUS les types en booléans (true/false) seulement une méthode prédéfini et pas forcément la meilleur.

Voila.
Messages postés
1406
Date d'inscription
mercredi 17 août 2005
Statut
Membre
Dernière intervention
28 août 2007
8
Justine :



Comme le dit FhX, mysql_fetch_array sert à "convertir" le résultat
d'une requète SQL en tableau. Simplement, certaine requètes ne
renvoient pas de résultat sous forme de données. Il s'agit des
insertions, suppression, modification...



Donc quand tu fais un insert, pas de retour de données.

Donc pas de mysql_fetch_*





FhX parle de fr.php.net... il faut que tu lises attentivement cette
documentation. D'ailleurs, en voici le morceau qui explique le problème
:



(FhX => le deuxième paragraphe !!!)



http://fr.php.net/manual/fr/function.mysql-query.php

Valeurs de retour


Pour les requêtes du type <var>SELECT</var>, <var>SHOW</var>,
<var>DESCRIBE</var> ou <var>EXPLAIN</var>,
mysql_query() retournera une ressource en cas de succès,
ou <tt>FALSE</tt> en cas d'erreur.




Pour les autres types de requêtes, <var>UPDATE</var>,
<var>DELETE</var>, <var>DROP</var>, etc.,
mysql_query() retourne <tt>TRUE</tt> en cas de succès
ou <tt>FALSE</tt> en cas d'erreur.




La ressource de résultat retournée doit être passée à la fonction
mysql_fetch_array(), et les autres fonctions
permettant d'explorer le résultat des tables, pour accéder aux
données retournées.




Utilisez mysql_num_rows() pour trouver le nombre
de lignes retournées pour une requête du type <var>SELECT</var> ou
mysql_affected_rows() pour trouver le nombre
de lignes affectées par les requpetes du type <var>DELETE</var>,
<var>INSERT</var>, <var>REPLACE</var>, ou <var>UPDATE</var>.
Messages postés
49
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
29 décembre 2005

ah oauis d'accord!
je savais pas que pour un INSERT on ne pouvait utiliser mysql_fetch_array..
je comprends mieux l'erreur
je vais regarder tout ça..
merci beaucoup !!!
Messages postés
49
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
29 décembre 2005

mais souhaiterais savoir, si vous pourriez jeter un coup d'oeil à mon code pour savoir si je suis sur la bonne voie ou si je m'éloigne completement?

le voici :
[code]

<?
...
"".$date = date("Y/m/d ");
"".$date2 = date("d/m/Y H:i:s");
echo"
".$date2."
";


echo"Récapitulatif de votre commande:


<table border 8 align center>
<tr> <td colspan 5 align center>


</td>
</tr>
<tr>
<td > <center>Reference </td></center>
<td ><center>Article</td></center>
<td><center>Prix Unitaire
(en ?)</td></center>
<td>Quantité</td></center>
<td>Montant
(en ?)</td>
</tr>";
aff_panier();


echo"<tr><td></td><td><td><td>TOTAL </td><td align = 'right'>".$_SESSION['total']."</td></tr>";

$add_com = " INSERT INTO commande(num_com, date_com) VALUES ( '', '".$date."' )";

if ($base= mysql_connect (SERVEUR,log,password))
{
echo " </center>
";
}
else
{
echo "<H3>Echec de la connexion au serveur
";
exit;
}
mysql_select_db(BASE,$base);

for ($i =0;$i<20;$i++)
{
$tab_passer[]="";
$tab_conserner[]="";
$tab_acheter[]="";
$tab_livraison[]="";
$tab_ligne_livr[]="";


$requetes array ("passer"> $tab_passer, "conserner" => $tab_conserner, "acheter" => $tab_acheter, "livraison" => $tab_livraison, "ligne_livr" => $tab_ligne_livr);
}


if ($tab_com = mysql_query ($add_com,$base))
{


$res_com = mysql_fetch_array($tab_com);
$num_com = $res_com[0];
$quantite = $_SESSION['panier']['quantite'];


echo $res_com;



echo " <center>Votre commande a bien été prise en compte

Le paiement s'effectuera au moment de la livraison

le delais est de 48h
</center>";
}
else
{
echo "Erreur dans l'éxecution de la requete derniere_comm
";
echo "Erreur".mysql_error().":".mysql_error()."
";
}


for ($i = 0; $i < 20 ; $i++)
{
if ($_SESSION['panier']['quantite'][$i] >0)
{



$requetes['passer'][$i] = "INSERT INTO passer(num_com, num_cli) VALUES ('', '".$_SESSION['num_cli']."')";
$requetes['conserner'][$i] = "INSERT INTO conserner (num_com, ref_produit, quantite) VALUES ( '','".$_SESSION['panier']['ref_produit'][$i]."', '".$_SESSION['panier']['quantite'][$i]."');";
$requetes['acheter'][$i] = "INSERT INTO acheter (num_cli, ref_produit, designation_produit, quantite, total) VALUES ('".$_SESSION['num_cli']."', '".$_SESSION['panier']['ref_produit'][$i]."', '".$_SESSION['article']."', '".$_SESSION['panier']['quantite'][$i]."','".$_SESSION['total']."');";
$requetes['livraison'][$i] = "INSERT INTO livraison (num_livr, date_livr, etat_livr) VALUES ('','aucun', 'encours de traitement')";
$requetes['ligne_livr'][$i] = "INSERT INTO ligne_livr (num_com, num_livr) VALUES ('', '')";


}


}

for ($i = 0; $i < 20 ; $i++)
{

if ($requetes['conserner'][$i] != "")
{
if (mysql_query ($requetes['conserner'][$i],$base))
{
//echo "<h3>Conserner n°".$i." Ajoute
";
}
else
{
echo "Erreur dans l'éxecution de la requete add_conserner
";
echo "Erreur".mysql_error().":".mysql_error()."
";
}
}
echo "
Passer = ".$requetes['passer'][1]."
";


if ($requetes['passer'][$i] != "")
{
if (mysql_query ($requetes['passer'][$i],$base))
{
//echo "Passer Ajoute n°".$i."
";
}
else
{
echo "Erreur dans l'éxecution de la requete add_passer
";
echo "Erreur".mysql_error().":".mysql_error()."
";
}
}


echo"
acheter = ".$requetes['acheter'][$i]."
";
if ($requetes['acheter'][$i] != "")
{
if (mysql_query ($requetes['acheter'][$i],$base))
{
//echo "Acheter n°".$i." Ajoute
";
}
else
{
echo "Erreur dans l'éxecution de la requete add_acheter
";
echo "Erreur".mysql_error().":".mysql_error()."
";
}
}

echo"
livraison = ".$requetes['livraison'][$i]."
";
if ($requetes['livraison'][$i] != "")
{
if (mysql_query ($requetes['livraison'][$i],$base))
{
//echo "Livraison n°".$i." Ajoute
";
}
else
{
echo "Erreur dans l'éxecution de la requete add_livraison
";
echo "Erreur".mysql_error().":".mysql_error()."
";
}
}
echo"
ligne_livr = ".$requetes['ligne_livr'][$i]."
";
if ($requetes['ligne_livr'][$i] != "")
{
if (mysql_query ($requetes['ligne_livr'][$i],$base))
{
//echo "Livraison n°".$i." Ajoute
";
}
else
{
echo "Erreur dans l'éxecution de la requete add_ligne_livr
";
echo "Erreur".mysql_error().":".mysql_error()."
";
}
}

session_destroy(); //la commande est terminee on detruit la session
session_unset();
//et on efface toutes les variables pour eviter les bug
echo"";
echo"Fermer la session";
echo"votre numero de commande est le : ".$num_com.";";

?>

en faite c'est à ce moment là du site que l'enregistrement d'une commande s'effectue .

merci encore pour votre aide
Messages postés
49
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
29 décembre 2005

là il faut changer, c'est sur ==> $res_com = mysql_fetch_array($tab_com);