Ajout d'un même article ds panier PHP avc une option comme diff
Uxon-Studio
Messages postés13Date d'inscriptionmardi 12 septembre 2017StatutMembreDernière intervention21 février 2018
-
25 nov. 2017 à 10:32
jordane45
Messages postés37725Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention26 septembre 2023
-
25 nov. 2017 à 11:35
Olà olà, amigos, j'ai un petit soucie présentement! alors:
Je dev un site web php pour un client (foodtruck) .
Les utilisateur peuvent choisir dans 'shop_form.php' leur menu exemple:
- (sandwich ) Tacos / (option sauce) Mayonnaise / (option boisson) Oui
Tout fonctionne très bien, l'article est ajouté au panier avec SES options etc.
Mais si un client veut le même sandwich pour son amis, mais avec une sauce différente!... Là ça coince!
Question: Comment ajouter au panier le même article, si il à une option différente?
// Voici le traitements du panier if ($article == null || $sauce == null || $option == null || $boisson == null || $qty == null){ header('Location: ../shop.php?var_shop=commande_fail'); }
// Vérification dans la BDD si le produit existe bien $req = $bdd->prepare('SELECT * FROM shop WHERE produit_ID = ?');$req->execute(array($article_ID));$result = $req->fetch();
if (!$result) {header('Location: ../shop.php?var_shop=product_broken');}
else { // création: VARIABLES du PRODUIT pour le panier $BDD_produit_ID = $result['produit_ID']; $BDD_produit_nom = $result['produit_nom']; $BDD_produit_prix = $result['produit_prix']; $GET_produit_boisson = htmlspecialchars($boisson); $GET_produit_qty = htmlspecialchars($qty); $GET_produit_option = htmlspecialchars($option); $GET_produit_sauce = htmlspecialchars($sauce); $GET_produit_boisson = htmlspecialchars($boisson);
// Vérification dans la BDD si le produit existe bien $req = $bdd->prepare('SELECT * FROM shop WHERE produit_ID = ?');$req->execute(array($article));$result = $req->fetch();
if (!$result) {header('Location: ../shop.php?var_shop=product_broken');}
else { // création: VARIABLES du PRODUIT pour le panier $BDD_produit_ID = $result['produit_ID']; $GET_produit_qty = $qty;
if ($qty == 0) { unset($_SESSION['panier'][$BDD_produit_ID]); header('Location: ../shop.php'); }
if ($article == null){ header('Location: ../shop.php?var_shop=commande_fail'); }
// Vérification dans la BDD si le produit existe bien $req = $bdd->prepare('SELECT * FROM shop WHERE produit_ID = ?');$req->execute(array($article));$result = $req->fetch();
if (!$result) {header('Location: ../shop.php?var_shop=product_broken');}
else { // création: VARIABLES du PRODUIT pour le panier $BDD_produit_ID = $result['produit_ID'];
jordane45
Messages postés37725Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention26 septembre 2023342 25 nov. 2017 à 10:48
Bonjour,
Mais si un client veut le même sandwich pour son amis, mais avec une sauce différente!... Là ça coince!
En quoi est-ce que cela coince ?
Quel est le comportement observé ?
Ensuite.. quelques remarques concernant ton code.
- Après une redirection (header('location... ) on met toujours un exit
- Tu devrais découper un peu ton code en fonctions
- Tu utilises le PDO visiblement... dans ce cas, applique ceci : http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
Et enfin C'est toujours plus agréable de ne pas avoir à recharger la page et donc pour ça de privilégier l'ajax au traditionnel submit de formulaire
Uxon-Studio
Messages postés13Date d'inscriptionmardi 12 septembre 2017StatutMembreDernière intervention21 février 2018 25 nov. 2017 à 11:12
Re, alors en faite où ça coince c'est à l'ajout dans le panier, comme on ajoute dans $_SESSION['panier'] [$BDD_produit_ID] <-- si j'ajoute un tacos avec option 1 . Tout ce passe bien, mais si je recommande ce même tacos avec l'option 2 , comme cette article (tacos) ets déjà dans le panier, ça ne m'ajoute pas: tacos avec option 2. j'ai seulement Tacos avec option 1 dans mon panier
Ok je look ajax pour la modif/suppr et alors si c'est mieux je changerer
jordane45
Messages postés37725Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention26 septembre 2023342 Modifié le 25 nov. 2017 à 11:33
Je viens de parcourir ton code
En effet, dans ton panier tu te réfères à l'id du produit.. sauf que ça t’empêche d'en mettre plusieurs.
Je te propose ceci :
1 - créés un fichier de fonctions contenant ceci:
<?php
/**
*---------------------------------------------------------
* Fichier fonctions.php
*---------------------------------------------------------
*/
/**
* Fonction de redirection
*/
function redirection($url='index.php'){
header('Location:'.$url);
exit();
}
function qExec($sql,$datas=NULL){
//Execution de la requete
try{
$requete = $bdd -> prepare($sql) ;
$requete->execute($datas) ;
}catch(Exception $e){
// en cas d'erreur :
echo " Erreur ! ".$e->getMessage();
echo " Les datas : " ;
print_r($datas);
}
}
function querySelectAll($sql,$datas=NULL){
$result = qExec($sql,$datas);
return $result->fetchAll();
}
function querySelectRow($sql,$datas=NULL){
$result = qExec($sql,$datas);
return $result->fetch();
}
function getProductById($id){
$sql ='SELECT * FROM shop WHERE produit_ID = ?');
$datas = array($id);
$result = querySelectRow($sql,$datas);
}
function addPanier( $BDD_produit_ID, $BDD_produit_nom, $BDD_produit_prix, $produit_qty=1, $produit_option='', $produit_sauce='',$produit_boisson='' ){
$_SESSION['panier'][]['id'] = $BDD_produit_ID;
$_SESSION['panier'][]['nom'] = $BDD_produit_nom;
$_SESSION['panier'][]['prix'] = $BDD_produit_prix;
$_SESSION['panier'][]['qty'] = $produit_qty;
$_SESSION['panier'][]['option'] = $produit_option;
$_SESSION['panier'][]['sauce'] = $produit_sauce;
$_SESSION['panier'][]['boisson'] = $produit_boisson;
//retourne le numero (nombre) de lignes dans le panier : panierRow
return count($_SESSION['panier']);
}
function removeProduct($panierRow){
unset($_SESSION['panier'][$panierRow]);
}
function editProduct($panierRow,$produit_qty=1,$produit_option='',$produit_sauce='',$produit_boisson=''){
$_SESSION['panier'][$panierRow]['qty'] = $produit_qty;
$_SESSION['panier'][$panierRow]['option'] = $produit_option;
$_SESSION['panier'][$panierRow]['sauce'] = $produit_sauce;
$_SESSION['panier'][$panierRow]['boisson'] = $produit_boisson;
}
2 - Modifie ton code comme ceci:
<?php
//-------------------------------------------------------//
//démarrag des sessions
//-------------------------------------------------------//
session_start();
//-------------------------------------------------------//
//activation de l'affichage des erreurs php
//-------------------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
//-------------------------------------------------------//
//Require
//-------------------------------------------------------//
require_once("con_bdd.php");
require_once("fonctions.php");
//-------------------------------------------------------//
//récupération variables
//-------------------------------------------------------//
//variables de session
$userID = !empty($_SESSION['user_id']) ? $_SESSION['user_id'] : NULL;
$panier = !empty($_SESSION['panier']) ? $_SESSION['panier'] : array();
// Initialisation des variable pour 'article'
$article = !empty($_GET['article_ID']) ? ($_GET['article_ID']) : NULL;
$sauce = !empty($_GET['sauce']) ? ($_GET['sauce']) : NULL;
$option = !empty($_GET['option']) ? ($_GET['option']) : NULL;
$boisson = !empty($_GET['boisson']) ? ($_GET['boisson']) : NULL;
$qty = !empty($_GET['qty']) ? ($_GET['qty']) : NULL;
$add = !empty($_GET['add']) ? $_GET['add'] : NULL;
$edit = !empty($_GET['edit']) ? $_GET['edit'] : NULL;
$remove = !empty($_GET['remove']) ? $_GET['remove'] : NULL;
$panierRow = !empty($_GET['panierRow']) ? $_GET['panierRow'] : NULL;
//si l'utilisation n'est pas connecté :
if(!$userID){
redirection('index.php?access=denied');
}
// Véfication dans la BDD si le produit existe bien
$BDD_product = getProductById($article);
//si le produit n'existe pas
if(empty($BDD_product)){
redirection('shop.php?var_shop=product_broken');
}
//----------------------------------------------------------------------
//traitement des actions
//----------------------------------------------------------------------
if ($add) {
// Voici le traitements du panier
if ($article == null || $sauce == null || $option == null || $boisson == null || $qty == null){
redirection('shop.php?var_shop=commande_fail');
}
// création: VARIABLES du PRODUIT pour le panier
addPanier($BDD_product['produit_ID'], $BDD_product['produit_nom'], $BDD_product['produit_prix'], $qty, $option, $sauce,$boisson));
redirection('shop.php');
} elseif ($edit) {
if ($article == null || $qty == null){
redirection('shop.php?var_shop=commande_fail');
}
if ($qty == 0) {
removeProduct($panierRow);
redirection('shop.php');
}else{
editProduct($panierRow,$qty,$option,$sauce,$boisson){
redirection('shop.php');
}
} elseif($remove) {
if ($article == null){
redirection('shop.php?var_shop=commande_fail');
}
removeProduct($panierRow);
redirection('shop.php');
} else {
redirection('shop.php?var_shop=commande_fail');
}
?>
NB : Il faudra modifier ta page de "gestion du panier" pour cibler la "ligne" du panier concerné au lieu d'utiliser l'id du produit.
NB² : J'ai écrit le code de tête sans le tester. Il se peut qu'il y ait quelques erreurs... qu'il faudra corriger;
Cordialement,
Jordane
jordane45
Messages postés37725Date d'inscriptionmercredi 22 octobre 2003StatutModérateurDernière intervention26 septembre 2023342 25 nov. 2017 à 11:35
Pour l'ajax, tu pourras utiliser les mêmes fichiers.
A la différence que tu géreras les erreurs côté Javascript au lieu du PHP (là où actuellement tu faisais des redirections).
25 nov. 2017 à 11:12
Ok je look ajax pour la modif/suppr et alors si c'est mieux je changerer