Page 1 sur 1

page panier en php

Posté : 27 juil. 2021, 22:28
par narjes
Bonjour,
en ce moment je travaille sur un site de rachat des écrans de téléphone ,j'ai créé la page panier mais j'ai quelques problème quand je consulte directement la page panier.php j'ai plein de notice (des variable indéfinie )et si je rajoute des article dans mon panier quand je consulte la page panier et je rafraichie la quantité du dernier article ajouter s'incrémente toute seul ..
pouvez-vous m'aidez :roll:

Code : Tout sélectionner

<?php session_start(); function Getfloat($str){ if (strstr($str,",")){ $str=str_replace(",",".",$str); return $str; } $str=floatval($str); $str=round(($str),2); return $str; } function v_d($donnees){ $donnees = trim($donnees); $donnees = stripslashes($donnees); $donnees = htmlspecialchars($donnees); return $donnees; } if(!isset($_SESSION['panier'])){ $_SESSION['panier']=[]; $_SESSION['panier']['nom'] = []; $_SESSION['panier']['quantite'] =[]; $_SESSION['panier']['prix'] = []; } $quantite=0; $prix=0; $nom=' '; $total=0; if (isset($_GET['quantite'])){ $quantite=intval($_GET['quantite']); } if (isset($_GET['nom'])){ $nom=v_d($_GET['nom']); } if (isset($_GET['prix'])){ $prix=Getfloat($_GET['prix']); } echo "prix".round(($prix),2)."<br>"; echo "nom".$nom."<br>"; echo "quantite".$quantite."<br>"; //Si le panier existe if (isset($_SESSION['panier'])) { //Si le produit existe déjà on ajoute seulement la quantité $positionProduit = array_search($nom, $_SESSION['panier']['nom'], $strict=true); if ($positionProduit !== false) { $_SESSION['panier']['quantite'][$positionProduit]++ ; } else { //Sinon on ajoute le produit array_push( $_SESSION['panier']['nom'],$nom); array_push( $_SESSION['panier']['quantite'],$quantite); array_push( $_SESSION['panier']['prix'],$prix); } } else{ echo "Un problème est survenu veuillez contacter l'administrateur du site."; } ?> <!DOCTYPE html> <html> <head> <!-- META --> <title>ecoscreen</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta name="description" content="" /> </head> <body> <?php include('menu.php'); ?> <div class="grid"> <div class="col_12" style="margin-top:100px;"> <table cellspacing="0" cellpadding="0" class="striped"> <thead><tr> <th>nom</th> <th>quantité</th> <th>prix</th> </tr></thead> <tbody> <?php $nbArticles=count(($_SESSION['panier']['nom'])); if ($nbArticles <= 0){ echo "<tr><td>Votre panier est vide </ td></tr>"; } else { for ($i=0 ;$i < $nbArticles ; $i++) { echo "<tr>"; echo "<td>".($_SESSION['panier']['nom'][$i])."</ td>"; echo "<td>".($_SESSION['panier']['quantite'][$i])."</td>"; echo "<td>".round(($_SESSION['panier']['prix'][$i]),2)."€</td>"; echo "<td><a href=\"".htmlspecialchars("sup-produit.php?&l=".rawurlencode($_SESSION['panier']['nom'][$i]))."\"> <i class=\"fa fa-trash\" ></i></a>"; echo "</tr>"; } } ?> </tbody> </table> <?php for($i = 0; $i < count($_SESSION['panier']['nom']); $i++) { $total += $_SESSION['panier']['quantite'][$i] * $_SESSION['panier']['prix'][$i]; } echo "<p>vous avez <b>" .$nbArticles." </b> article dans votre panier</p>"; echo "<p>votre totale est de <b> :" .round($total,2)." €</p>"; ?> <button><a href="viderpanier.php">vider le panier</a></button> </div> <?php ?> </div> <!-- End Grid --> </body> </html>

Re: page panier en php

Posté : 28 juil. 2021, 11:42
par ynx
Bonjour,

Concernant l'ajout de produit, dans le code PHP avant d'ajouter le produit ou d'incrémenter la quantité, on vérifie uniquement si le panier existe.
Il faudrait également vérifier que l'utilisateur a bien demander d'ajouter un produit dans son panier (les paramètres GET devraient alors être renseignés si je comprends bien le code).

Je suppose qu'on pourrait alors corriger la condition comme ceci :
//Si le panier existe ET que l'utilisateur ajoute un produit
if (isset($_SESSION['panier']) && $quantite > 0)

Concernant les notices, peux tu nous indiquer quel sont ces messages d'erreur ?

Enfin rien à voir avec la question initiale mais je suis assez dubitatif sur le fait de passer le prix et le nom du produit en paramètre GET : si je modifie le paramètre GET "prix" dans l'URL, je peux donc choisir le prix du produit ? Même chose pour le paramètre "nom" qui peut être modifié dans l'URL.
Le prix et le nom de l'article devrait plutôt être stocké sur le site (en bdd par exemple) et seule la quantité et un identifiant du produit devrait être passés en paramètre GET.

Bonne journée,