Problème pour modifier mon panier
Résolu
delavega470
Messages postés
298
Date d'inscription
Statut
Membre
Dernière intervention
-
delavega470 Messages postés 298 Date d'inscription Statut Membre Dernière intervention -
delavega470 Messages postés 298 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Problème pour modifier mon panier
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
- Modifier story facebook - Guide
- Modifier extension fichier - Guide
- Logiciel pour modifier une carte d'identité - Télécharger - Suite bureautique
8 réponses
Bonjour,
Pour ton premier problème, il y a deux soucis :
Ton formulaire est ouvert autant de fois qu'il y a d'articles, mais n'est jamais fermé. De plus, chaque fois, il est ouvert avec le même id.
Soit tu fais un formulaire par ligne, ouvert ET fermé dans la boucle while, soit tu fais un seul formulaire global. Comme tu n'as mis qu'un seul bouton Submit, je suppose que tu préfères un formulaire global.
D'autre part, dans ce code :
Comme tu es dans une boucle, tu vas avoir plusieurs lignes avec plusieurs <input> qui vont avoir le même name et le même id. Name doit être unique dans un <form> (à quelques exceptions près), Id doit être unique dans toute ta page.
Là quand tu soumets le formulaire, tout est mélangé.
Je te suggère de suffixer ces champs avec l'id du produit :
Et, évidemment, faire de même dans ton traitement plus bas :
(Tu peux aussi, en début de boucle, mettre $contenu['id_prod'] dans une variable $id_prod et le remplacer en dessous, pour alléger ton code)
Pour ton deuxième problème, c'est parce que tu fais la requête de lecture AVANT la requête d'écriture. Php va lire ce qu'il y a en base, l'afficher, puis faire la mise à jour demandée. Ce sont donc les anciennes valeurs qui sont affichées.
Du coup !
Voici ce que je te propose :
Xavier
Pour ton premier problème, il y a deux soucis :
Ton formulaire est ouvert autant de fois qu'il y a d'articles, mais n'est jamais fermé. De plus, chaque fois, il est ouvert avec le même id.
Soit tu fais un formulaire par ligne, ouvert ET fermé dans la boucle while, soit tu fais un seul formulaire global. Comme tu n'as mis qu'un seul bouton Submit, je suppose que tu préfères un formulaire global.
D'autre part, dans ce code :
<input class="form-control input-sm" type="text" value="'.$contenu['qte'].'" name="qte" id="qte">
Comme tu es dans une boucle, tu vas avoir plusieurs lignes avec plusieurs <input> qui vont avoir le même name et le même id. Name doit être unique dans un <form> (à quelques exceptions près), Id doit être unique dans toute ta page.
Là quand tu soumets le formulaire, tout est mélangé.
Je te suggère de suffixer ces champs avec l'id du produit :
<input class="form-control input-sm" type="text" value="'.$contenu['qte'].'" name="qte'.$contenu['id_prod'].'" id="qte'.$contenu['id_prod'].'">
Et, évidemment, faire de même dans ton traitement plus bas :
$resultat=$panier->execute(array('qte'=>$_POST['qte'.$contenu['id_prod']],'id_prod'=>$contenu['id_prod']));
(Tu peux aussi, en début de boucle, mettre $contenu['id_prod'] dans une variable $id_prod et le remplacer en dessous, pour alléger ton code)
Pour ton deuxième problème, c'est parce que tu fais la requête de lecture AVANT la requête d'écriture. Php va lire ce qu'il y a en base, l'afficher, puis faire la mise à jour demandée. Ce sont donc les anciennes valeurs qui sont affichées.
Du coup !
Voici ce que je te propose :
echo '[...] <div class="table-responsive"> <form id="form" method="POST" action="#"> <table class="table table-bordered cart_summary"> <thead> <tr> <th class="cart_product">Produit</th> <th>Description</th> <th class="text-center">prix</th> <th class="text-center">Qté</th> <th class="text-center">Total</th> <th class="text-center"><img src="images/document_edit.png"></th> <th class="action"><i class="fa fa-trash-o"></i></th> </tr> </thead><tbody>'; $pa1 = $bd->query('SELECT * from panier, produit WHERE panier.id_prod = produit.id_prod AND panier.cookie="' . $cookie . '" '); while ($contenu = $pa1->fetch()) { $prixT = $contenu['qte'] * $contenu['prix_prod'] ; $id_prod = $contenu['id_prod']; $qte = $contenu['qte']; $newQte = $_POST['qte' . $id_prod]; if (isset($_POST['update_cart_action'] && $qte != $newQte)) { $panier = $bd->prepare('UPDATE panier SET qte=:qte WHERE id_prod=:id_prod'); $resultat = $panier->execute(array('qte' => $newQte, 'id_prod' => $id_prod)); $qte = $newQte; } echo ' <tr> <td class="cart_product"><a href="#" rel="nofollow noopener noreferrer" target="_blank"><img src="ca/pages/product/img/'.$contenu['img_prod'].'" alt="Product"></a></td> <td class="cart_description"><p class="product-name">'.$contenu['lib_prod'].' </a></p><small>'.$contenu['des_prod'].'</small></td> <td class="price"><span>'.$contenu['prix_prod'].' FRANCS CFA</span></td> <td class="qty"><input class="form-control input-sm" type="text" value="'.$qte.'" name="qte'.$id_prod.'" id="qte'.$id_prod.'"></td> <td class="price"><span>'.$prixT.' FRANCS CFA</span></td> <td class="action"><a class="modifier" id="'.$contenu['id_panier'].$id_prod.'" href="index.php?page=panier.php&id_panier='.$contenu['id_panier'].'" rel="nofollow noopener noreferrer" target="_blank"><img src="images/pencil.ico" height="20" width="20"></a></td> <td class="action"><a class="delete" id="'.$contenu['id_panier'].$id_prod.'" href="index.php?page=panier.php&id_panier='.$contenu['id_panier'].'" rel="nofollow noopener noreferrer" target="_blank"><i class="icon-close"></i></a></td> </tr>'; } echo'</tbody><tfoot>[...]</tfoot> </table> </form> [...]';
Xavier
dans le
Cannot use isset() on the result of an expression (you can use "null !== expression" instead)
isset($_POST['update_cart_action'] && $qte != $newQte)j'ai ce message
Cannot use isset() on the result of an expression (you can use "null !== expression" instead)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pour supprimer un element du panier j'ai fais avec Jquery maintenant pour vider le panier j'ai oublié de le mettre dans le code voici sont code je l'ai mis au début
j'ai remis mais ça ne vide pas le panier
if(isset($_POST['delete_action'])) { $delete=$bd->query('DELETE FROM panier WHERE cookie="'.$cookie.'" '); }
j'ai remis mais ça ne vide pas le panier
Les modifications que j'apporte doivent être comprises et appliquées dans le traitement des demandes de suppression / modification.
Si tu me donnes le code complet (avec mes modifications) je peux te donner une version qui marche.
Par ailleurs, je ne vois pas du tout où tu traites les liens "supprimer" et "modifier". Tu me dis qu'ils marchaient avant ?