Accueil > Forum > > > > SQL dans ma boucle For
SQL dans ma boucle For
mercredi 15 octobre 2008 à 23:15:41 |
SQL dans ma boucle For

Const4ntine
|
Bonjour, Un petit souci inexpliqué, certainement un manque d'expérience de ma part ;) Je souhaite inséré un enregistrement pour chaque ligne d'article d'un panier dans ma base de donnée SQL et m'envoyer de plus un mail pour chaque enregistrement. exemple : je reçois une commande de :" 1 paire de chaussettes et une paire de lunettes" soit 2 articles donc 2 enregistrements Je reçois bien mon mail " 1 paire de chaussettes et une paire de lunettes" Mais dans ma base de donnée il n'enregistre que le 1er article "1 paire de chaussette" En clair, la boucle For fonctionne, la condition If dans la boucle for est bien réalisé 2 fois (2 articles = $num_cart_items=2), mais mon insert pour ma base SQL n'est réalisé qu'une fois. Est ce une question de timing, par exemple la boucle est réalisé plus rapidement que ma requete SQL ? ou ai je fais une erreur dans mon code ? Je vous remercie d'avance. Olivier Voila mon bout de code : for ($i = 1; $i <= $num_cart_items ; $i++) { $itemname = "item_name".$i; $itemnumber = "item_number".$i; $on0 = "option_name1_".$i; $os0 = "option_selection1_".$i; $on1 = "option_name2_".$i; $os1 = "option_selection2_".$i; $quantity = "quantity".$i; $result = mysql_query(" INSERT INTO Panier_Commandes( Payer_Email, Item_Name, Quantity, Option_Name_1, Option_Name_2, Option_Selection_1, Option_Selection_2, Txn_ID ) VALUES( '".$payer_email."', '".$_POST[$itemname]."', '".$_POST[$quantity]."', '".$_POST[$on0]."', '".$_POST[$on1]."', '".$_POST[$os0]."', '".$_POST[$os1]."', '".$txn_id."' ) "); if (strlen($itemname) > 1) { $mail_Body .= "\n\n" .$i. "e objet en commande: " .$_POST[$itemname]. "\n" . "Numero de l'objet ".$i.": " . $itemnumber . " - " . "Quantite: " .$_POST[$quantity]; } }
|
|
jeudi 16 octobre 2008 à 12:06:01 |
Re : SQL dans ma boucle For

neigedhiver
|
Salut, Si je peux me permettre... La commande INSERT en SQL permet d'insérer plusieurs enregistrements. Ce qui est autrement plus rapide que d'exécuter une requête de type INSERT pour chaque... Neige
N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
|
|
jeudi 16 octobre 2008 à 15:33:56 |
Re : SQL dans ma boucle For

Const4ntine
|
Bonjour,
Je suis au courant qu'on peut enregistrer plusieurs enregistrements à l'aide de INSERT, mais je n'ai pas trouvé d'autre solutions que celle ci, puis que ma requete change avec la boucle For, et de plus je ne connais jamais la fin de ma boucle qui dépend de $num_cart_items.
As tu une autre solution ?
|
|
jeudi 16 octobre 2008 à 16:36:31 |
Re : SQL dans ma boucle For

sidf
|
bonjour,
il faudrait voir le code du formulaire comment sont chargées les $_POST ??
|
|
jeudi 16 octobre 2008 à 16:39:27 |
Re : SQL dans ma boucle For

Const4ntine
|
Les $_POST sont envoyés de Paypal sur ma page, mais les $_POST sont bon puisqu'ils sont introduit dans $mail_body avec succès.
|
|
jeudi 16 octobre 2008 à 16:43:16 |
Re : SQL dans ma boucle For

neigedhiver
|
Réponse acceptée !
Je ne vois pas le problème... Ta requête ne change pas à chaque boucle for, ce sont les valeur des enregistrements qui ne sont (évidemment) pas les mêmes. Il suffit de séparer chaque enregistrement par des virgules : INSERT INTO table (champ1, champ2, champ3) VALUES (valeur1, valeur2, valeur3), (autrevaleur1, autrevaleur2, autrevaleur3), (encoreunevaleur1, encoreunevaleur2, encoreunevaleur3); Il suffit alors, dans ta boucle for, non pas d'exécuter chaque requête, mais de construire la requête finale en définissant les valeurs. Bon pis un autre truc : il est INDISPENSABLE de sécuriser les données que tu insères dans ta base de données. Il faut pour cela utiliser la fonction mysql_real_escape_string() sur les variables $_POST avant de les insérer. Cela évite les injections SQL. Neige
N'hésitez pas à lire la doc de PHP avant de poser des questions triviales...
|
|
jeudi 16 octobre 2008 à 17:59:42 |
Re : SQL dans ma boucle For

Ordinastie
|
Bonjour,
En regardant le code comme ça, je ne vois pas de problèmes. Neige a raison concernant le multi-insert. Tu n'as qu'a construire ta requête dans ta boucle et lancer la requête construite à la fin.
for($i = 1; $i <= $num_cart_items; $i++) { //tes assignations de variables $query_values .= "(".$payer_email."', '".$_POST[$itemname]."', '".$_POST[$quantity]."', '".$_POST[$on0]."', '".$_POST[$on1]."', '".$_POST[$os0]."', '".$_POST[$os1]."', '".$txn_id."'), "; }
//retirer la virgule en trop pour éviter de faire planter la requête à cause du dernier enregistrement $query_values = substr($query_values, 0, -2);
$query = "INSERT INTO Panier_Commandes( Payer_Email, Item_Name, Quantity, Option_Name_1, Option_Name_2, Option_Selection_1, Option_Selection_2, Txn_ID) VALUES " . $query_values; $res = mysql_query($query); //tester le retour de la fonction est le seul moyen de vérifier que ça s'est bien passé. if(!$res) echo'Erreur : ' . mysql_error();
Pour moi, la seule explication est un problème directement lié à l'insertion (surement à cause de guillemets ou d'apostrophes non gérés). Donc protège tes données comme il t'a été conseillé, et teste le retour de l'appel à la requête pour être sur que ça marche comme il faut. Dans le cas contraire, t'auras les informations nécessaires pour corriger le problème.
Ordinastie.
|
|
jeudi 16 octobre 2008 à 18:00:17 |
Re : SQL dans ma boucle For

Const4ntine
|
C'est ce que je pensais essayé : Construire ma requete.
Oui je sais qu'il faut sécuriser mes données, je le fais toujours dès que tout fonctionne je rajoute mes protections.
J'essaye, et je te tiens au courant
Merci
|
|
jeudi 16 octobre 2008 à 18:35:11 |
Re : SQL dans ma boucle For

Const4ntine
|
Alors là, j'y comprends rien.
J'ai fait comme vous m'avez dis (simplement une légère différence), et je n'ai toujours qu'un seul enregistrement dans ma base de donnée, mais je reçois bien mes lignes venant de $mail_body. Voila mon code, mais je ne pense pas qu'il y ait une erreur, c'est bizarre :
if ($num_cart_items >=1) { $query=" INSERT INTO Panier_Commandes( Payer_Email, Item_Name, Quantity, Option_Name_1, Option_Name_2, Option_Selection_1, Option_Selection_2, Txn_ID ) VALUES "; for ($i = 1; $i <= $num_cart_items ; $i++) { $itemname = "item_name".$i; $itemnumber = "item_number".$i; $on0 = "option_name1_".$i; $os0 = "option_selection1_".$i; $on1 = "option_name2_".$i; $os1 = "option_selection2_".$i; $quantity = "quantity".$i; $query .="( '".$payer_email."', '".$_POST[$itemname]."', '".$_POST[$quantity]."', '".$_POST[$on0]."', '".$_POST[$on1]."', '".$_POST[$os0]."', '".$_POST[$os1]."', '".$txn_id."' ), "; if (strlen($itemname) > 1) { $mail_Body .= "\n\n" .$i. "e objet en commande: " .$_POST[$itemname]. "\n" . "Numero de l'objet ".$i.": " . $itemnumber . " - " . "Quantite: " .$_POST[$quantity]; } } $query = substr($query, 0, -2); $select=mysql_query($query);
|
|
jeudi 16 octobre 2008 à 18:40:23 |
Re : SQL dans ma boucle For

Ordinastie
|
Tu as testé le retour de la fonction? ($select)
PS: ce test if(strlen($itemname) > 1) sera toujours vrai vu que tu set $itemname à chaque tour de boucle.
|
|
Cette discussion est classée dans : boucle, sql, post, for, option
Répondre à ce message
Sujets en rapport avec ce message
erreur boucle for [ par doudoutinette ]
Salut tout le monde!Voila j'ai un souci , voici le morceau de code qui pose problemefor (($_POST['$niveau'] = 1; ($_POST['$niveau'] </f
php et sql [ par fatatra ]
bonjour;j'essaie de rentrer des données dans ma bases a partir d'un formulaire.Ce queje fais c'est que je recupére les variable 'post' pour les mettre
petit probleme facile à résoudre [ par minibenji ]
Bonjour,j'ai confectioné cette petite shoutbox, mais lors de l'affichage des messages, les saut de ligne se transformes en simple espaces... voici u
verification de formulaire [ par lucien1988 ]
slt j'ai besoin de vos aides. nous sommes en train de develloper une application et de mon coté je dois faire un formulaire. j'utilise easyphp 1.8 et
probleme d'identification avec mysql et une page php [ par 1wxcvbn ]
Bonjour, je suis entrain de réaliser une identification des utilisateurs et en fait, quand j'essaye de m'identifié, il me dit que le mot de passe est
validation l'inscription par mail et inertion code captcha [ par achachia ]
Bonjour j'aimerai vous m'aider s'il vous plait.et merci d'avance. voila mon souci .c'estque j'ai cré une page d'inscription pour mon espace membre.et
insertion dans la base mysql [ par ikramta ]
salut tout le mande .j'ai un ptit probleme j'ai une table qui contien (code fournisseur ,code client,code article)et dans le formulaire j'ai (nom four
Probleme de connexion [ par toini ]
Bonjour, je suis débutant en php et j'ai un problème sur cette page que j'ai recopié d'un livre :*****************************************************
3 formulaire regrouper dans la basse sql [ par lunixman ]
Bonjour voici 3 donner de formulaire différente : 01 02 <option value="
souci avec requete update sql $_post et boucle while [ par jp1871 ]
Bonjour, je viens vous déranger en cete fin de semaine en esperant qu'une âme charitable puisse m'aider si ce que je désir faire est possible merci pa
Livres en rapport
|
Derniers Blogs
XNA IS DEAD!XNA IS DEAD! par richardc
Depuis la semaine dernière (et grâce aux TechDays 2012), je me penche activement sur la nouvelle version de Windows, aka Windows 8. Vous me direz, il était temps puisque la première preview date de Septembre dernier.
OK. Remarquez, on n'en est qu'aux...
Cliquez pour lire la suite de l'article par richardc TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 !TECHDAYS PARIS 2012 : WINDOWS SERVER "8" QUOI DE 9 ! par ROMELARD Fabrice
Speakers: Fabrice Meillon et Stanislas Quastana Cette session est basée entièrement sur celle donnée lors de la BUILD cet hiver. Il n'y a pas d'ajout d'information en rapport avec cet évènement passé. Windows 8 Server sera intégralem...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice [HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE)[HTML5] AUTOUR DU W3C : NOUVEAUX STANDARDS ET WEB MOBILE (LILLE) par Gio
Je m'y prends un peu tard je sais, mais bon je suis développeur web et donc hyper fainéant ! Toujours dans le cadre des technologies émergentes, ici HTML5, parce qu'on aime HTML5 chez Wyg , nous seront présent, le vieux ( Aurélien V.) et moi, pour pr...
Cliquez pour lire la suite de l'article par Gio [WP7] DYNAMICALLY CHANGE STARTUP PAGE[WP7] DYNAMICALLY CHANGE STARTUP PAGE par KooKiz
Let's say that you want to allow the user to customize the startup page of your application. You can easily change the startup page by editing the 'NavigationPage' attribute in the manifest file. But the manifest cannot be modified once the applicatio...
Cliquez pour lire la suite de l'article par KooKiz
Logiciels
DocTranslate (V3.1.0.0)DOCTRANSLATE (V3.1.0.0)DocTranslate est un traducteur de document Microsoft Word, PowerPoint et Excel. Il permet d'autom... Cliquez pour télécharger DocTranslate Tribler (2012)TRIBLER (2012)Tribler est un client pair à pair (P2P/Peer-to-Peer) open source avec la capacité de regarder des... Cliquez pour télécharger Tribler OneSwarm (2012)ONESWARM (2012)Le peer-to-peer qui protège votre vie privée, c'est OneSwarm.
Ce logiciel de peer-to-peer crypté... Cliquez pour télécharger OneSwarm PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V8.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|