Probleme d'execution de requêtes

cs_Remy05 Messages postés 5 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 11 février 2008 - 8 févr. 2008 à 13:42
cs_Remy05 Messages postés 5 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 11 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 ");
}
 
mysqli_autocommit($link, FALSE);
 
$SQLinsertclient = "INSERT INTO client (champs1,…,champsn)
VALUES ('$value1’',’…’,'$valuen’)";
mysqli_query($link,$SQLinsertclient);
$idClient =mysqli_insert_id($link);
 
$SQLinsertcommande = "INSERT INTO devis (
champs1,…, champsn)
VALUES ('$value1’,…,'$valuen’')";
mysqli_query($link,$SQLinsertcommande);
$idCommande =mysqli_insert_id($link);
 
 
$SQLliaison = "INSERT INTO `cppdc` ( ` champs1` , ` champs2` , ` champs3` , ` champs4` , ` champs5` )
VALUES ('$ value1’,'$ value2’,' value3’,'$value4’,'$value5’)"; mysqli_query($link,$SQLliaison);
 
mysqli_commit($link);
mysqli_close($link);

<!-- 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.


Merci d’avance

Cordialement,

Rémy

6 réponses

cs_Remy05 Messages postés 5 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 11 février 2008
8 févr. 2008 à 13:44
Désolé pour le double post , je pensais que le premier n'avait pas été posté, si un modo veut bien en effacer un , merci :)
0
sidf Messages postés 1216 Date d'inscription mardi 20 décembre 2005 Statut Membre Dernière intervention 18 octobre 2012 5
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
0
cs_Remy05 Messages postés 5 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 11 février 2008
8 févr. 2008 à 17:02
En effet quand j'insert dans une table avec un champ clé en auto incrément je met ' ' en value, donc je ne pense pas que ça vienne de là :)

exemple pour la table client :
"INSERT INTO client (LoginClient, ...., TypeClient)  VALUES ('',..., '$typeClient')";

je ne met pas tout les chamsp car la requete est assez conséquente ..
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Remy05 Messages postés 5 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 11 février 2008
11 févr. 2008 à 09:58
Salut,

est-ce que tu échappes correctement les caractères dangereux pour ta requête, du genre une apostrophe dans la valeur ?
Effectivement, pour ces requetes je n'y avait pas pensé, je vais rajouté mysql_real_escape_string() pour tout les champs rempli par le client.

Pour ce qui est de la transaction j'ai essayer avec :
mysqli_autocommit($link, FALSE);
...
mysqli_commit($link);
mysqli_close($link);

Comme préciser dans le code mais cela ne fonctionne pas a priori, pour ce qui est du rollback je n'ai
pas vraiment comprit comment l'utiliser :/

- tester si tes requêtes réussissent ou échouent, donc
Peut tu m'en dire plus sur la façon de procéder ?
ça pourrait m'être très utile en effet :)
0
cs_Remy05 Messages postés 5 Date d'inscription vendredi 8 février 2008 Statut Membre Dernière intervention 11 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
0
Rejoignez-nous