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
[DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE[DESIGN PATTERNS] PARTIE 2: DIP: DEPENDENCY INVERSION PRINCIPLE par tja
C'est le dernier principe des principes du Design Orienté Objet (The Principles of Object Oriented Design) fondés par Robert C. Martin plus connu sous le pseudonyme d'Uncle Bob.
l'image empruntée de LosTechies.
Je ne traite pas les principes dans...
Cliquez pour lire la suite de l'article par tja TECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURSTECHDAYS PARIS 2010 : SHAREPOINT 2010 POUR LES DéVELOPPEURS par ROMELARD Fabrice
Animé par: Laurent Cotton Le développement dans SharePoint 2010 passe par plusieurs axes qui seront évoqués dans cette session, mais plus particulièrement les développements simples lié au besoin Business Business Connectivity Services Ce BCS es...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice TECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOURTECHDAYS PARIS 2010 : PLEINIèRE DERNIER JOUR par ROMELARD Fabrice
Cette session est la dernière pleinière de ces 3 jours de TechDays Paris 2010. Généralement, cette troisième journée est plus axée sur l'avenir vu par Microsoft. Après un retour sur l'avenir vu par la Science Fiction ou par ...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice UNE JOLIE-HORLOGE ET PAS QU'UN PEU !UNE JOLIE-HORLOGE ET PAS QU'UN PEU ! par neodante
Pour les possesseurs d'iPhone, ça y est Bijin Tokei - qui se traduit littéralement en Français par " Jolie Horloge " - est arrivé et GRATUITEMENT s'il vous plaît ! Après la version Tokyo, Hokkaido, night club, racing, Gal, "pour les mademoiselles'", . voi...
Cliquez pour lire la suite de l'article par neodante TECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICESTECHDAYS PARIS 2010 : CONNECTEZ VOS DONNéES à SHAREPOINT 2010 AVEC LES BUSINESS CONNECTIVITY SERVICES par ROMELARD Fabrice
Animé par: Gaetan Bouveret et Julien Chomarat Business Connectivity Services (BCS) est dans SharePoint 2010 la version 2 de Business Data Catalog (BDC dans SharePoint 2007). Il s'agit de la solution permettant de visualiser des données provenan...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice
Logiciels
DB-MAIN (9.1.0)DB-MAIN (9.1.0)DB-MAIN is a data-modeling and data-architecture tool. It is designed to help developers and anal... Cliquez pour télécharger DB-MAIN Xilisoft DPG Convertisseur (5.1.37.0120)XILISOFT DPG CONVERTISSEUR (5.1.37.0120)Xilisoft DPG Convertisseur offre aux fans de Nintendo DS une bonne solution leur permettant de dé... Cliquez pour télécharger Xilisoft DPG Convertisseur GraphicsGale (2.01.01)GRAPHICSGALE (2.01.01)GraphicsGale est un logiciel de PixelArt avec de nombreuse fonctionnalités permettant de réalisé ... Cliquez pour télécharger GraphicsGale Architecte 3D (Platinum 2010)ARCHITECTE 3D (PLATINUM 2010)Architecte 3D Platinium vous permet de concevoir facilement les plans votre future maison, de l'é... Cliquez pour télécharger Architecte 3D TeamViewer 5 (TeamViewer 5)TEAMVIEWER 5 (TEAMVIEWER 5)Dépanner un ami,expliquer une manipulation devient un jeu d'enfant.
Prise en main d'un autre ord... Cliquez pour télécharger TeamViewer 5
|