Page 1 sur 1

insert into dans un while

Posté : 20 mars 2007, 20:20
par corde
bonjour,

voila bien sur j'ai un proble, je séléctionne des données sur des tables, je fait une boucle while pour avoir mes résultats et je veux inserer ces données dans une autre table, il y aura donc plusieurs ligne à inserer.

logiquement il faut que mon insert soit dans le while sinon il ne m'insere que la derniere ligne,mais j'ai une erreur du type: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\wamp\www\librairie\mes_fonctions.php on line 408.

si je met mon insert en dehors avec un i++ il m'insere autant de fois qu'il y a de résultat mais toujours le dernier de la lecture.
voila les 2 codes:

Code : Tout sélectionner

function confirm_commande (){ $sid=$_POST['sid']; $montant=$_POST['montant']; $client=$_POST['client_id']; $strSQL="SELECT f.*,r.prd_id,r.prix_ttc,r.auteur,r.titre FROM panier as f , produit as r WHERE f.sid ='$sid' AND f.prd_id = r.prd_id "; $resultat= requete_SQL($strSQL); while ($row=mysql_fetch_array($resultat)){ $sid=$row['sid']; $prd_id=$row['prd_id']; $quantite=$row['quantite']; $prix_ttc=$row['prix_ttc']; $auteur=$row['auteur']; $titre=$row['titre']; $date=$row['date']; $strSQL="INSERT INTO detail_commande (sid,prd_id,client_id,titre,auteur,quantite,prix_ttc,date) values('$sid','$prd_id','$client','$titre','$auteur','$quantite','$prix_ttc','$date')"; $resultat=requete_SQL($strSQL); } }
le 2eme:

Code : Tout sélectionner

function confirm_commande (){ $sid=$_POST['sid']; $montant=$_POST['montant']; $client=$_POST['client_id']; $i=0; $strSQL="SELECT f.*,r.prd_id,r.prix_ttc,r.auteur,r.titre FROM panier as f , produit as r WHERE f.sid ='$sid' AND f.prd_id = r.prd_id "; $resultat= requete_SQL($strSQL); while ($row=mysql_fetch_array($resultat)){ $sid=$row['sid']; $prd_id=$row['prd_id']; $quantite=$row['quantite']; $prix_ttc=$row['prix_ttc']; $auteur=$row['auteur']; $titre=$row['titre']; $date=$row['date']; } $nbre_ligne=mysql_num_rows($resultat); for($i=0;$i<$nbre_ligne;$i++){ $strSQL="INSERT INTO detail_commande (sid,prd_id,client_id,titre,auteur,quantite,prix_ttc,date) values('$sid','$prd_id','$client','$titre','$auteur','$quantite','$prix_ttc','$date')"; $resultat=requete_SQL($strSQL); } }
merci à tout ceux qui peuvent m'aider.

Posté : 21 mars 2007, 03:01
par guilt92
Bonjour,
je pense que le premier code est correct mais que l erreur vient peut etre de ta fonction requete_SQL().

En effet d apres le warning que tu as l'erreur serait sur la valeur de $resultat qui est retournée par cette fonction, en supposant que la ligne 408 soit "while ($row=mysql_fetch_array($resultat))"

Peut tu poster la fonction requete_SQL() pour etre sur que ton probleme ne vient pas de la ?

plusieur requete en meme temps

Posté : 21 mars 2007, 09:36
par corde
un grand merci pour ta réponse guilt 92.

ma requéte est bonne (j'ai 10 autres fonctions qui tourne bien) mais tu m'a mis la puce à l'oreille, le probleme vient qu'il y a deux requete avec les meme variable $strSQL et $resultat concernant le while,j'ai changé les noms des variables et ca marche, ce qui n'empeche pas que j'ai une requete à la suite (je n'ai envoyé qu'une partie de la fonction...qui ne fonctionnai pas pour que ça soit plus clair)avec ces meme variables.

conclusion, il ne faut pas faire 2 requetes qui tourne en meme temp (l'une lit et l'autre insere au fur et à mesure du parcour du tableau) avec les meme variable...
ça ne m'etait pas arriver jusqu'a present....ça peut servir, le pire c'est que j'y avait pensé mais je me suis acharné à trouver une autre solution.:oops:
autre conclusion: faire trois fois le tour du paté de maison au lieu de s'acharner sur sa souris....:twisted:

que veut dire:involve me and I learn (moi et l'anglais...)

à bientot et merci