Const4ntine
Messages postés39Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention11 décembre 2008
-
15 oct. 2008 à 23:15
Const4ntine
Messages postés39Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention11 décembre 2008
-
16 oct. 2008 à 19:19
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 ?
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 16 oct. 2008 à 16:43
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 :
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...
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 16 oct. 2008 à 12:06
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...
Const4ntine
Messages postés39Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention11 décembre 2008 16 oct. 2008 à 15:33
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 ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Ordinastie
Messages postés93Date d'inscriptionsamedi 29 janvier 2005StatutMembreDernière intervention17 octobre 20082 16 oct. 2008 à 17:59
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.
//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.
Const4ntine
Messages postés39Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention11 décembre 2008 16 oct. 2008 à 18:35
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 :
Const4ntine
Messages postés39Date d'inscriptionmercredi 4 juin 2008StatutMembreDernière intervention11 décembre 2008 16 oct. 2008 à 19:19
Quand on a une erreur c'est toujours un petit truc à la con.
J'ai donc vu mon message d'erreur qui était : Duplicate entry '0' for key 1
1062
Je suis donc aller directement dans ma base de donnée, et j'ai vu que incrémentation de ma clé primaire n'avait pas été enregistrer lors de la création de la base de donnée.
En clair, il enregistrait le 1er envoi, avec en clé primaire 0, puis les autres il ne voulait pas car ils avaient la meme clé primaire.
On peut dire que j'aurai passé beaucoup pour pas grand chose, mais il parait que c'est comme ça qu'on apprend.
J'ai tout de meme appris plein de chose en php grace à vous.
Donc c'est avec un grand merci que je vous dis à bientot pour de nouvelle aventure codé ;)