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
Bonsoir,
En effet, pas mal d'améliorations
Bon courage pour la suite,
Sky
Edit : pour les erreurs qui apparaisse pas en prod, c'est vrai... mais c'est pas parce que les erreurs ne sont pas affichés quelles ne sont pas gérés par PHP et du coups, ralentissent (pas de beaucoup, y'a des bench la dessus) l'exécution du script global. Bon, je chipote je sais, mais plus on sais ce genre de petite chose, plus les scripts que l'on développe sont rapide.
un très grand merci pour ce tuto RideKick , il va me servir pour l'une de mes APA
Merci beaucoup pour ce tuto vraiment clair et complet pour un debutant comme moi !!!
Au passage si quelqu un la transformer en classe je suis preneur
Merci beaucoup en tous cas pour la qualite du travail fourni.
Bonjour,
j'ai voulu tester le tutorial, mais cele me renvoi des erreurs :
Voici la page html/cataloque de test que j'ai créé, j'ai essayé avec le lien en exemple mais aussi avec un formulaire, et dans les 2 cas les erreurs apparaissent.Warning: array_search() [function.array-search]: Wrong datatype for second argument in /homez.342/ornelys/www/panier2/fonctions-panier.php on line 32
Warning: array_push() [function.array-push]: First argument should be an array in /homez.342/ornelys/www/panier2/fonctions-panier.php on line 41
Warning: array_push() [function.array-push]: First argument should be an array in /homez.342/ornelys/www/panier2/fonctions-panier.php on line 42
Warning: array_push() [function.array-push]: First argument should be an array in /homez.342/ornelys/www/panier2/fonctions-panier.php on line 43
Votre panier
Libellé Quantité Prix Unitaire Action
Votre panier est vide
voici ma page catalogue
Test avec lien
test avec formulaire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 <a href="panier.php?action=ajout&l=5&q=2&p=42" onclick="window.open(this.href, '', 'toolbar=no, location=no, directories=no, status=yes, scrollbars=yes, resizable=yes, copyhistory=no, width=600, height=350'); return false;">Ajouter au panier</a></p>
Merci de votre aide
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 <p> </p> <form id="form1" name="form1" method="post" action="panier.php"> <p>Produit : <input type="text" name="l" id="l" /> </p> <p>Qté : <input type="text" name="q" id="q" /> </p> <p>Taille : <input type="text" name="p" id="p" /> </p> <p> <input type="submit" name="action" id="action" value="ajout" /> </p> </form>
Je me réponds à moi même
Cela fonctionne avec explorer mais pas avec firefox
Après recherche,
c'est un problème niveau hébergeur
Pour ovh il faut créer un fichier .htaccess
avec : SetEnv PHP_VER 4
Hervé
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.
bonjour,
ca va peut etre vous paraitre nul, mais je me demande apres lecture du script, (je suis nouveau sous php)quel table doit on faire avec phpmyadmin pour valider ce script du cadie?
thank you for your lumieres!
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...
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager