gontran Posté 29 Mai 2006 Posté 29 Mai 2006 (modifié) Bonjour le hub, J'ai un petit souci lors de l'ajout d'un article dans mon panier Les vins du terroir. Voila une copie du script qui ajoute l'article dans ma table function add_table_comm_active () { if (isset ($_SESSION['idok'])) { $session=$_SESSION['idok']; $quantite=$_GET['quantite']; $idurl=$_GET['id']; $query03='select * from vin where id="'.$idurl.'"'; $queryvin=mysql_query($query03); $queryinsert=mysql_fetch_array ($queryvin); //définition des variables $prixtotal=$queryinsert['prix']*$quantite; $prixht=$queryinsert['prixht']*$quantite; $id_article=$idurl; $couleur=$queryinsert['couleur']; $mill=$queryinsert['millesime']; $chato=$queryinsert['chato']; $ref=$queryinsert['ref']; $date=date("d-m-Y"); //insertion dans la table comm_active mysql_query ("INSERT INTO comm_active (id, id_client, id_cookie, id_article, ref, chato, millesime, quantite, totalttc, date, prixht) VALUES ('NULL', '$session', 'NULL', '$id_article', '$ref', '$chato', '$mill', '$quantite', '$prixtotal', '$date', '$prixht')") or die (mysql_error()); header ("location:recap_caddie.php"); } else { $id_cookie=$_COOKIE['PHPSESSID']; $quantite=$_GET['quantite']; $idurl=$_GET['id']; $query03='select * from vin where id="'.$idurl.'"'; $queryvin=mysql_query($query03); $queryinsert=mysql_fetch_array ($queryvin); //définition des variables $prixtotal=$queryinsert['prix']*$quantite; $prixht=$queryinsert['prixht']*$quantite; $id_article=$idurl; $couleur=$queryinsert['couleur']; $mill=$queryinsert['millesime']; $chato=$queryinsert['chato']; $ref=$queryinsert['ref']; $date=date("d-m-Y"); //insertion dans la table comm_active mysql_query ("INSERT INTO comm_active (id, id_client, id_cookie, id_article, ref, chato, millesime, quantite, totalttc, date, prixht) VALUES ('NULL', 'NULL', '$id_cookie', '$id_article', '$ref', '$chato', '$mill', '$quantite', '$prixtotal', '$date', '$prixht')") or die (mysql_error()); header ("location:recap_caddie.php"); }} J'explique mon probleme Lorsque je clique sur le bouton "ajouter au panier", ce script me crée 2 entrées dans ma table. Je ne vois pas d'ou ca peut venir. Toute suggestion sera la bien venu, je suis en train de m'arracher les cheveux... Merci Modifié 29 Mai 2006 par gontran
kot Posté 29 Mai 2006 Posté 29 Mai 2006 Es-tu sûr que ta fonction n'est pas appelée deux fois? Fais un echo "foo"; pour le vérifier... Peut être le fais-tu par ailleurs, mais si j'étais toi je vérifierai que id est bien un numérique is_numeric($_GET["id"]) pour prévenir des injections
gontran Posté 29 Mai 2006 Auteur Posté 29 Mai 2006 pour le double appel oui je suis sur, j'ai tout verifier plusieurs fois. pour l' id, je suis sur que c'est du numerique puisque ce qu'il me rentre dans la table est numerique... je vais suivre ton conseil, et faire un "echo" de ma fonction pour voir ce qu'elle me renvoi
xpatval Posté 29 Mai 2006 Posté 29 Mai 2006 Sans régler le problème, tu peux aussi écrire ta fonction de la sorte, avec une seule ligne d'INSERT. Il te faut juste, dans tes conditions, implémenter la valeur de $id_cookie et $session, en fonction du résultat des tests. function add_table_comm_active () { if (isset ($_SESSION['idok'])) { ... $id_cookie = "NULL"; } else { ... $session ="NULL"; } mysql_query ("INSERT INTO comm_active (id, id_client, id_cookie, id_article, ref, chato, millesime, quantite, totalttc, date, prixht) VALUES ('NULL', '$session', '$id_cookie', '$id_article', '$ref', '$chato', '$mill', '$quantite', '$prixtotal', '$date', '$prixht')") or die (mysql_error()); header ("location:recap_caddie.php");} Reste à mettre des echo, et tester les valeurs retournées par $session et $id_cookie afin de savoir pourquoi tu insères deux fois... xpatval
gontran Posté 29 Mai 2006 Auteur Posté 29 Mai 2006 (modifié) j'ai fais des tests voici la fonction modifiée : function add_table_comm_active () { if (isset ($_SESSION['idok'])) { $session=$_SESSION['idok']; echo 'session : '.$session.'<br />';} else { $id_cookie=$_COOKIE['PHPSESSID']; echo 'cookie : '.$id_cookie.'<br />';} $quantite=$_GET['quantite']; $idurl=$_GET['id']; $query03='select * from vin where id="'.$idurl.'"'; $queryvin=mysql_query($query03); $queryinsert=mysql_fetch_array ($queryvin); //définition des variables $prixtotal=$queryinsert['prix']*$quantite; $prixht=$queryinsert['prixht']*$quantite; $id_article=$idurl; $couleur=$queryinsert['couleur']; $mill=$queryinsert['millesime']; $chato=$queryinsert['chato']; $ref=$queryinsert['ref']; $date=date("d-m-Y"); //insertion dans la table comm_active $myquery= 'INSERT INTO comm_active (id, id_client, id_cookie, id_article, ref, chato, millesime, quantite, totalttc, date, prixht) VALUES ("NULL", "'.$session.'", "'.$id_cookie.'", "'.$id_article.'", "'.$ref.'", "'.$chato.'", "'.$mill.'", "'.$quantite.'", "'.$prixtotal.'", "'.$date.'", "'.$prixht.'")'; $send=mysql_query($myquery) or die (mysql_error()); echo $myquery; //header ("location:recap_caddie.php"); } et voici la réponse de mon navigateur cookie : af1e1cd455fa3e783feeb92a3c555731INSERT INTO comm_active (id, id_client, id_cookie, id_article, ref, chato, millesime, quantite, totalttc, date, prixht) VALUES ("NULL", "", "af1e1cd455fa3e783feeb92a3c555731", "13", "BM03ROC", "Domaine des Rochers", "2003", "1", "9", "29-05-2006", "7.53") donc pour moi la fonction récupere bien une seule fois les données mais l'insere en double dans la table !! Modifié 29 Mai 2006 par gontran
kot Posté 29 Mai 2006 Posté 29 Mai 2006 J'attire ton attention sur ça: http://www.phpsecure.info/v2/article/InjSql.php Le fait que quelqu'un remplace le id dans l'adresse de la page par autre chose quqi pourrait te nuir... Car à moins que je n'ai râté un épisode,ces deux lignes $idurl=$_GET['id']; $query03='select * from vin where id="'.$idurl.'"'; consistent à mettre directement la valeur du GET (en paramètres dans l'adresse de la page) dans la requête SQL ce qui n'est pas très sûr... A+
gontran Posté 29 Mai 2006 Auteur Posté 29 Mai 2006 bon j'ai résolu le probleme avec l'aide de mon pote steph (membre du hub). le probleme venai en fait du bouton qui me server a envoyer les info. J'utilisai un bouton de formulaire, ce qui apparement pose probleme, puisque quand je met un lien ca passe nickel... consistent à mettre directement la valeur du GET (en paramètres dans l'adresse de la page) dans la requête SQL ce qui n'est pas très sûr... pour te repondre, cette ligne l'utilisateur ne la voit pas puisqu'elle est inserée dans une fonction et que cette fonction renvoi sur une page de récapitulatif du panier.
xpatval Posté 29 Mai 2006 Posté 29 Mai 2006 bon j'ai résolu le probleme avec l'aide de mon pote steph (membre du hub). le probleme venai en fait du bouton qui me server a envoyer les info. J'utilisai un bouton de formulaire, ce qui apparement pose probleme, puisque quand je met un lien ca passe nickel... C'est à dire ? En quoi cela posait-il problème ? xpatval
Anonymus Posté 29 Mai 2006 Posté 29 Mai 2006 Pour ajouter mon grain de sel : Il est préférable de noter dans un fichier texte les passages sur une page, à l'aide de fopen. En effet, dans certains cas, on ne voit qu'une seule fois le 'foo', parce qu'il y a redirection. En notant dans un fichier texte, on est sûr qu'à chaque passage il y a une trace quelque part De plus, ca permet de noter toutes les variables 'espion' du script
gontran Posté 29 Mai 2006 Auteur Posté 29 Mai 2006 (modifié) C'est à dire ? En quoi cela posait-il problème ? xpatval Avec le bouton de formulaire ca me créer un doublon dans la table Modifié 29 Mai 2006 par gontran
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant