begin process at 2010 02 10 15:53:34
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

SQL dans ma boucle For


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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.


1 2

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


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,749 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales