Aller au contenu

Sujets conseillés

Posté (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é par gontran
Posté

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

Posté

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

Posté

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

Posté (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 : af1e1cd455fa3e783feeb92a3c555731
INSERT 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é par gontran
Posté

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+

Posté

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.

Posté
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...

:sick: C'est à dire ? En quoi cela posait-il problème ?

xpatval

Posté

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 :)

Posté (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é par gontran

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...