L'articleCet article a pour but d'expliquer la création simple d'un panier en PHP.
L'articleCet article a pour but d'expliquer la création simple d'un panier en PHP.
Bonjour,
Comme à chaque fois, article clair et precis.
Je vais le mettre en application cette semaine.
Le site pour lequel je compte l'utiliser est en lien WWW.
Merci
Bonjour RideKick.
C'est simple et assès clair, merci.
J'ai juste quelques questions pour la forme
Pourquoi tu n'en a pas fais une classe ?
Ensuite, pourquoi utilisé _REQUEST ?
Laisser le choix entre _GET et _POST pour passer l'action est excellent, mais du coups je comprend pas pourquoi _REQUEST pour les autres paramètres (p, q et l.
Ensuite, y'a, je pense du moins, un réèl manque de test de l'existence des variables dans certains cas de figure. (je parle évidemment d'un développement avec les erreurs PHP à E_ALL)
Exemples :
- $erreur n'a pas de valeur par défaut
- si on demande 'ajout', les valeurs $l, $q et $p ne sont pas forcément déclarés, je ne suis pas allez voir les conséquences ceci dit.
- (Je n'ai pas tout testé, y'en peut être d'autre)
Je sais que c'est des petites choses, même si c'est pas exactement un tutoriel pour les débutants non plus... Tant qu'a faire, autant donner des bons exemples.
Pour finir :
Si ni POST ni GET existe, on aura un warning php.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $action = (isset($_POST['action'])? $_POST['action']: $_GET['action']);
Il faut ici aussi soit changer la conditions, soit avoir une valeur par défaut.
Quoi qu'il en soit, le principe est sympa, je vais essayer d'en faire une classe
Evidemment, ceci sont des critiques que j'espère constructives et point négatives !
Sky
yop, bonjour,
as-tu finis la classe du panier, je serais fortement intéressé par celle-ci (je suis pas encore assez doué pour concevoir une classe) ?
Merci !![]()
oups j'avais pas vu tu avais posté il y a 20 min...peut être un peu léger pour concevoir une classe...
Merci
Pour la simple et bonne raison que beaucoup de débutants s'en servent tel quel, je ferais surement un petit aparté pour la mise en classe plus tard
Qustion de facilité en effet, même si certains raccourcis ne sont pas forcement les plus judicieux
Tout à fait, encore une facilité qu'offre PHP, de plus le panier est bien à mettre sur un serveur de prod donc sans erreurs apparentes.
Tu as raison
Yep , j'avais la version du code avec valeur par défaut, oublie de ma part. (idem pour $erreur)
Merci je prends toute critique positivement, merci a toi de prendre le temps de les coucher sur le forum![]()
à jour![]()
Merci beaucoup pour ce tuto, il est exactement ce que je cherchais.
J'ai tout de même une demande à faire qui je pense peut intéresser d'autres personnes.
Je ne sais pas comment récupérer les données de $_SESSION dans une table.
J'ai trouvé ce code sur un autre forum :
Vous pourrez peut être m'éclairer.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for ($i=0; $i<count($_SESSION['panier']['libelleProduit']); $i++) { mysql_query("INSERT INTO $tbl_name2 VALUES ('','$order_number','$myusername','".$_SESSION['panier']["libelleProduit"][$i]."','".$_SESSION['panier']["qteProduit"][$i]."','".$_SESSION['panier']["prixProduit"][$i]."','$total','$payment_','$date_hour') ") or die(mysql_error()); }
Tous ces champs ne m'intéressent pas, je souhaite juste comprendre pour :
- libelleProduit
- qteProduit
- prixProduit
- MontantGlobal
Ma table doit avoir combien de champs par rapport aux données des produits ?
Merci par avance à celui ou celle qui me répondra.![]()
J'ai trouvé comment faire pour pratiquement tout.
J'ai modifié ma base avec un nombre de champ fixe, j'ai 10 produits, du coup j'ai créé 10 champs pour les libellés, 10 champs pour la quantité et 10 champs pour le prix unitaire.
Bien sûr le champ pour le prix total.
Sur la page qui valide le panier, j'ai ajouté au début ce code :
jusqu'à 10 ...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $libelleProduit1=(isset($_POST['libelleProduit1']))?$_POST['libelleProduit1']:Null; $qteProduit1=(isset($_POST['qteProduit1']))?$_POST['qteProduit1']:Null; $prixProduit1=(isset($_POST['prixProduit1']))?$_POST['prixProduit1']:Null; $libelleProduit2=(isset($_POST['libelleProduit2']))?$_POST['libelleProduit2']:Null; $qteProduit2=(isset($_POST['qteProduit2']))?$_POST['qteProduit2']:Null; $prixProduit2=(isset($_POST['prixProduit2']))?$_POST['prixProduit2']:Null; $libelleProduit3=(isset($_POST['libelleProduit3']))?$_POST['libelleProduit3']:Null; $qteProduit3=(isset($_POST['qteProduit3']))?$_POST['qteProduit3']:Null; $prixProduit3=(isset($_POST['prixProduit3']))?$_POST['prixProduit3']:Null;
Avant l'insertion dans la base j'ai mis le code suivant :
jusqu'à 10 ... pareil pour la quantité et le prix.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 if (!empty($_SESSION['panier']["libelleProduit"][0])) { $libelleProduit1=($_SESSION['panier']["libelleProduit"][0]); } if (!empty($_SESSION['panier']["libelleProduit"][1])) { $libelleProduit2=($_SESSION['panier']["libelleProduit"][1]); } if (!empty($_SESSION['panier']["libelleProduit"][2])) { $libelleProduit3=($_SESSION['panier']["libelleProduit"][2]); } if (!empty($_SESSION['panier']["libelleProduit"][3])) { $libelleProduit4=($_SESSION['panier']["libelleProduit"][3]); }
et dans le code d'insertion :
Mon soucis est que le montant total ne s'enregistre pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part $sql="INSERT INTO $table_commande (libelleProduit1, qteProduit1, prixProduit1, libelleProduit2, qteProduit2, prixProduit2, libelleProduit3, qteProduit3, prixProduit3, libelleProduit4, qteProduit4, prixProduit4, libelleProduit5, qteProduit5, prixProduit5, libelleProduit6, qteProduit6, prixProduit6, libelleProduit7, qteProduit7, prixProduit7, libelleProduit8, qteProduit8, prixProduit8, libelleProduit9, qteProduit9, prixProduit9, libelleProduit10, qteProduit10, prixProduit10, MontantGlobal) VALUES ('$libelleProduit1', '$qteProduit1', '$prixProduit1', '$libelleProduit2', '$qteProduit2', '$prixProduit2', '$libelleProduit3', '$qteProduit3', '$prixProduit3', '$libelleProduit4', '$qteProduit4', '$prixProduit4', '$libelleProduit5', '$qteProduit5', '$prixProduit5', '$libelleProduit6', '$qteProduit6', '$prixProduit6', '$libelleProduit7', '$qteProduit7', '$prixProduit7', '$libelleProduit8', '$qteProduit8', '$prixProduit8', '$libelleProduit9', '$qteProduit9', '$prixProduit9', '$libelleProduit10', '$qteProduit10', '$prixProduit10', '$MontantGlobal')";
Sur la page ou se trouve l'affichage du montant j'ai créé un input hidden.
Mais il ne doit pas fonctionner comme il faut.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 echo "<td colspan=\"2\" align=right>"; echo "<p style=font-size:14px><b>Total : $ ".MontantGlobal(); echo "</b></p>"; echo "<input type=\"hidden\" id=MontantGlobal name=MontantGlobal value=".MontantGlobal(); echo ">"; echo "</td>";
Dans le code il n'est pas en $_SESSION, donc du coup je sais pas trop comment faire.
Si quelqu'un pouvait m'apporter un coup de pouce, merci d'avance![]()
Merci pour ce tuto qui m'a permi de mettre un panier sur mon site.
J'ai juste une question à propos du verrou.
A quoi il sert?
Comment verrouiller le panier?
Quelles actions peut-on faire sur le panier quand il est verrouillé?
Merci d'avance...
Bonjour,
Le verrou sert a figer le panier avant de passer a l'étape de paiement.
Si aucune précaution n'est prise de cote la, un utilisateur malveillant pourrait commander 10 articles dans une fenêtre et valider sa commande, juste avant de payer il pourrait dans une autre fenêtre enlever des articles de son panier pour descendre le montant lors du paiement.
Maintenant ça dépend énormément du scenario de commande, le verrou est juste une petite sécurité minimal mais quand on a un scénario bien rodé on peut s'en passer.
Exemple :
- La validation du panier engendre une mise en base et une identification de la commande, ainsi qu'une purge du panier, l'étape de paiement se base sur la commande validée en base.
- La plupart des modules de paiements aujourd'hui attendent des données envoyées par un formulaire, rendant difficile le genre de manipulations citées précédemment car l'utilisateur payerait 2 commandes différentes en arrivant 2 fois sur la page de paiement.
Bonsoir,
nouveau en PHP (2 mois), je ne comprend pas comment on fait pour verrouiller le panier sur la page suivante (en l'occurrence, paiement).
Merci de me montrer un exemple...
Bonjour
Quand on modifie plusieur quantitées d'article du panier dont une a zéro.
Ce message s'affiche :
Notice: Undefined offset: 1 in /.../panier.php on line 49
la ligne 49 pour moi est :
Comment résoudre se problème ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 46 Case "refresh" : 47 for ($i = 0 ; $i < count($QteArticle) ; $i++) 48 { 49 modifierQTeArticle($_SESSION['panier']['libelleProduit'] [$i],round($QteArticle[$i])); 50 } 51 break;
Merci
Bonjour
suite au bug dont je fais mention plus haut j'ai changer ceci :
1) pour corriger le bug sur le rafraîchissement avec une quantité a zéro
modifier dans panier.php
explication : la valeur de $i est celle de l'ancien panier mais celui-ci est modifier lors de la suppression d'un article. $a prend donc la valeur du nouveau panier.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Case "refresh" : $a = 0; for ($i = 0 ; $i < count($QteArticle) ; $i++) { if($QteArticle[$i] != 0) { modifierQTeArticle($_SESSION['panier']['libelleProduit'][$a],round($QteArticle[$i])); $a++; } else { modifierQTeArticle($_SESSION['panier']['libelleProduit'][$a],round($QteArticle[$i])); } } break;
2) pour éviter les erreurs avec les nombres négatif (en effet un client peu modifier la quantiter par -10 par ex.)
modifier dans panier.php
Voilà
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 //On traite $q qui peut etre un entier simple ou un tableau d'entier if (is_array($q)){ $QteArticle = array(); $i=0; foreach ($q as $contenu){ $valeur = intval($contenu); if($valeur <= 0) { $QteArticle[$i++] = 0 ; } else { $QteArticle[$i++] = $valeur ; } } }
Il ma fallu du temp pour résoudre ses bug.
J'espère que sa pourra aidé![]()
Bonjour et merci de ton intérêt pour la panier !
En effet il y'a un bug concernant la quantité des articles à 0.
Comme tu l'as dis le panier change puisque ça supprime l'article donc l'index du produit n'est plus bon.
Pour le 2eme "bug", il y'à déjà un cas prévu pour ça dans la fonction de modification de l'article :
Merci à toi
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 //Si la quantité est positive on modifie sinon on supprime l'article if ($qteProduit > 0) { //Recharche du produit dans le panier $positionProduit = array_search($libelleProduit, $_SESSION['panier']['libelleProduit']); if ($positionProduit !== false) { $_SESSION['panier']['qteProduit'][$positionProduit] = $qteProduit ; } } else supprimerArticle($libelleProduit);
Bonjour
en effet cela vient de mon code de bug concernant la quantité des articles à 0.
j'ai misalors qu'il faut
Code : Sélectionner tout - Visualiser dans une fenêtre à part if($QteArticle[$i] != 0)Merci
Code : Sélectionner tout - Visualiser dans une fenêtre à part if($QteArticle[$i] <= 0)
édit : Ce srais bien de mettre le tuto a jour![]()
Salut paul01, à quel moment tu précise quel libellé doit se voir ajouter une quantité ? Avec ce code, dans le cas d'un panier avec plusieurs articles, il m'est impossible d'ajouter une quantité dans le formulaire du panier, comment se fait-il ?
---> en fait, la quantité ne va pas dans le bon article ... comment se fais-ce ?![]()
Bonjour,
Débutante en php, je me suis lancée dans la programmation d'un site e-commerce. J'avance bien mais bloque sur le panier. Incapable d'en créer un moi même j'ai (j'avoue c'est pas beau) copié le script de jc Rozier.
Problème : une fois la sélection faite par le client du produit, quantité et prix sur mon site (listes déroulantes), le panier n'affiche que la première lettre/chiffre de la sélection. Pourriez vous m'indiquer la modification à apporter à votre script ?
Merci beaucoup...
P.S : je galère vraiment et ne sais pas quoi faire du tout
Partager