cs_Remy05
Messages postés5Date d'inscriptionvendredi 8 février 2008StatutMembreDernière intervention11 février 2008
-
8 févr. 2008 à 13:42
cs_Remy05
Messages postés5Date d'inscriptionvendredi 8 février 2008StatutMembreDernière intervention11 février 2008
-
11 févr. 2008 à 10:15
Bonjour,
Dans le cadre d’un site e-commerce, lors de la validation d’une
commande j’ai besoin d’effectuer une succession requêtes d’insertion
dans différentes tables (exemple : client/produit/devis/liens).
La table liens ayant pour unique but de mettre en relation les données contenues dans les autres tables.
Dans la majorité des cas, tout fonctionne parfaitement, mais parfois,
il arrive que la dernière requête ne s’exécute pas correctement. Ce qui
a pour résultat de valider la commande pour le client (aucun message
d’erreur de son coté) mais du coté administration, on se retrouve avec
des données isolées dans la base et aucun lien entre elles, ce qui
n’est pas pratique pour retrouver quel client a commandé quel produit…
J’aimerais dans un premier temps comprendre d’où peut venir se problème (client, code, hébergeur ?).
Et surtout trouver comment corriger cela ou faire en sorte que si l’une
des requêtes ne s’exécute pas, les autres soient annulées aussi et
retourner un message d’erreur.
J’ai essayé avec une transaction, mais a priori cela ne marche pas puisque l’erreur persiste parfois.
Voici une partie du code en question :
<!-- BEGIN TEMPLATE: bbcode_code -->
Code :
<!--[if !IE]><--><!----><!--[endif]--><!--[if IE]>
<![endif]-->$link = mysqli_connect('localhost','xxx', 'xxxxxxx','xxxxxxx');
if(!$link){
die("Echec de la connexion ");
}
<!-- END TEMPLATE: bbcode_code -->je précise aussi que j'ai essayé en
passant par les requêtes de type mysql avant d'utiliser les mysqli ,
mais cela ne change rien a mon problème.
sidf
Messages postés1216Date d'inscriptionmardi 20 décembre 2005StatutMembreDernière intervention18 octobre 20125 8 févr. 2008 à 14:48
salut
il serait interessant de voir le contenu exact de tes requetes
sachant que mysql_insert_id() retourne la valeur du dernier auto increment inséré
de type INT donc la 1ere des values insérées devrait être NULL
malalam
Messages postés10839Date d'inscriptionlundi 24 février 2003StatutMembreDernière intervention 2 mars 201025 8 févr. 2008 à 19:53
Hello,
est-ce que tu échappes correctement les caractères dangereux pour ta requête, du genre une apostrophe dans la valeur ?
Dans tous les cas, tu devrais faire plusieurs choses :
- mettre une transaction afin de faire un rollback si une des requête échoue
- tester si tes requêtes réussissent ou échouent, donc
- logger dans un fichier les requêtes qui échouent.
Ce n'est que de cette manière que tu y verras plus clair.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Remy05
Messages postés5Date d'inscriptionvendredi 8 février 2008StatutMembreDernière intervention11 février 2008 11 févr. 2008 à 10:15
Petite rectification, aprés relecture de mon code, mes champs sont bien protégés par un addslashes , donc l'erreur ne vient pas de la, par contre je suis toujours intérréssé par une aide pour la transaction ou pour tester si une requête a bien été éxécutée :p