Problème pour modifier mon panier
Résolu/Fermé
delavega470
Messages postés
298
Date d'inscription
dimanche 9 février 2014
Statut
Membre
Dernière intervention
24 mars 2020
-
11 août 2017 à 16:28
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 - 17 août 2017 à 11:35
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 - 17 août 2017 à 11:35
A voir également:
- Problème pour modifier mon panier
- Modifier dns - Guide
- Modifier liste déroulante excel - Guide
- Modifier story facebook - Guide
- Logiciel gratuit pour modifier pdf - Guide
- Modifier extension fichier - Guide
8 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
11 août 2017 à 17:23
11 août 2017 à 17:23
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
delavega470
Messages postés
298
Date d'inscription
dimanche 9 février 2014
Statut
Membre
Dernière intervention
24 mars 2020
48
11 août 2017 à 18:25
11 août 2017 à 18:25
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)
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
11 août 2017 à 18:44
11 août 2017 à 18:44
Oui j'ai raté une parenthèse...
if (isset($_POST['update_cart_action']) && $qte != $newQte)
delavega470
Messages postés
298
Date d'inscription
dimanche 9 février 2014
Statut
Membre
Dernière intervention
24 mars 2020
48
11 août 2017 à 19:02
11 août 2017 à 19:02
j'ai des soucis avec les accolades ! des if
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
14 août 2017 à 09:47
14 août 2017 à 09:47
Quel genre de soucis ?
delavega470
Messages postés
298
Date d'inscription
dimanche 9 février 2014
Statut
Membre
Dernière intervention
24 mars 2020
48
14 août 2017 à 13:32
14 août 2017 à 13:32
je vais envoyé tout l'anncien code on va voir ensemble petit à petit parce que la tout est melangé
delavega470
Messages postés
298
Date d'inscription
dimanche 9 février 2014
Statut
Membre
Dernière intervention
24 mars 2020
48
14 août 2017 à 13:39
14 août 2017 à 13:39
ça ne marche pas !
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
14 août 2017 à 13:43
14 août 2017 à 13:43
Mais encore ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
delavega470
Messages postés
298
Date d'inscription
dimanche 9 février 2014
Statut
Membre
Dernière intervention
24 mars 2020
48
14 août 2017 à 17:30
14 août 2017 à 17:30
c'est avec Jquery j'ai traité supprimer
delavega470
Messages postés
298
Date d'inscription
dimanche 9 février 2014
Statut
Membre
Dernière intervention
24 mars 2020
48
14 août 2017 à 17:53
14 août 2017 à 17:53
je traite supprimer avec jquery
delavega470
Messages postés
298
Date d'inscription
dimanche 9 février 2014
Statut
Membre
Dernière intervention
24 mars 2020
48
14 août 2017 à 18:14
14 août 2017 à 18:14
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
delavega470
Messages postés
298
Date d'inscription
dimanche 9 février 2014
Statut
Membre
Dernière intervention
24 mars 2020
48
14 août 2017 à 18:31
14 août 2017 à 18:31
ah oui pardon
14 août 2017 à 13:49
Modifié le 14 août 2017 à 13:54
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.
14 août 2017 à 14:11
14 août 2017 à 15:32
Par ailleurs, je ne vois pas du tout où tu traites les liens "supprimer" et "modifier". Tu me dis qu'ils marchaient avant ?
14 août 2017 à 17:35