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
bonjour j'ai des soucis avec mon panier
1-je ne peux pas modifier la quantité de plusieurs produit
quand c'est un seul produit je peux bien modifier la quanté mais quand c'est plusieurs dans le panier il prend en compte la derniere quantité et remplace toute les autres quantités par cette valeur
2- le total ne change pas tant que je n'ai pas actualisé 2 fois
or le total général change sans actualiser 2 fois
voici le code quelqu'un peu m'expliquer comment je dois procéder svp merci
echo'<section class="main-container col1-layout">
    <div class="main container">
      <div class="col-main">
        <div class="cart">
          
          <div class="page-content page-order"><div class="page-title">
            <h2>Contenu du panier</h2>
          </div>
            <div class="order-detail-content">
              <div class="table-responsive">
                <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> ';
$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'] ;
     echo '<tbody>  <form id="form" method="POST" action="#">
                    <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><br>
                      <td class="price"><span>'.$contenu['prix_prod'].' FRANCS CFA</span></td>
                       <td class="qty">
                       <input class="form-control input-sm" type="text" value="'.$contenu['qte'].'" name="qte" id="qte"></td>
                      <td class="price"><span>'.$prixT.' FRANCS CFA</span></td>
                      <td class="action"><a class="modifier" id="'.$contenu['id_panier'].'" 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'].'" 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>
                  </tbody>';

                     if (isset($_POST['update_cart_action'])) {
                      $panier = $bd->prepare('UPDATE  panier SET qte=:qte WHERE   id_prod=:id_prod');
                      $resultat=$panier->execute(array('qte'=>$_POST['qte'],'id_prod'=>$contenu['id_prod']));
                     }
                   }
echo'  <tfoot>
                    <tr class="first last">
                      <td colspan="50" class="a-right last">
                      <button type="button" title="Continuer" id="continuer" class="button btn-continue" href="index.php?page=home.php">
                        <span >Continuer</span></button>
        
                        <button type="submit" id="submit" name="update_cart_action" value="update_qty"  title="Modifier" class="button btn-update"><span>Modifier</span></button>
                        <button type="submit"  name="delete_action" value="empty_cart" title="supprimer" class="button btn-empty" id="delete_action"><span>Vider le panier</span></button></td>
                    
                    </tr>
                  </tfoot>
                </table><a id="imprimer" href="voir_commande.php?id_cli='.$_SESSION['id_cli'].'" rel="nofollow noopener noreferrer" target="_blank"><font color="write">Cliquer ici pour imprimer</font></a>
                 <em class="valider_commande">( Valider la commande <img src="images/down.ico" height="10" width="10"> )</em></div> 
            </div>
            <div class="totals col-sm-4">
              <h3>Total du panier</h3>
              <div class="inner">
                <table id="shopping-cart-totals-table" class="table shopping-cart-table-total">
                  <colgroup>
                  <col>
                  <col width="1">
                  </colgroup>
                  <tfoot>
                    <tr>
                      <td style="" class="a-left" colspan="1"><strong>Total général</strong></td>
                      <td style="" class="a-right"><strong><span class="price">';
                       $req_prix = 'SELECT sum(prix_prod*qte) FROM panier
                                INNER JOIN produit where 
                              panier.id_prod = produit.id_prod  AND panier.cookie = '.$_COOKIE['cookie'].' ';
                            $req_p = $bd ->query($req_prix);
                            $result = $req_p->fetch();
                         echo $result['sum(prix_prod*qte)'].' FRANCS CFA';
                      echo'</span></strong></td>
                    </tr>
                  </tfoot>
                  <tbody>
                    <tr>
                      <td style="" class="a-left" colspan="1"> </td>
                      <td style="" class="a-right"><span class="price"></span></td>
                    </tr>
                  </tbody>
                </table> ';
A voir également:

8 réponses

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
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 :
<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
0
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:49
ce que vous m'a proposé ne marche pas je n'ai rien changé, on peut plus vider le panier ni supprimer un element dans le panier comme au depart
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 14 août 2017 à 13:54
Non, ce qu'il y avait ne marchait déjà pas pour plus d'un article.
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.
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48 > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
14 août 2017 à 14:11
<?php 
 
 if (isset($_SESSION['id_cli'])) {
  $id_cli = $_SESSION['id_cli'];

} else {
  $id_cli = "";
}

  $pa1=$bd->query('SELECT * from panier WHERE cookie="'.$cookie.'" ');
 $nombre = $pa1->rowcount();
if($nombre > 0)
{
 
        echo'<section class="main-container col1-layout" >

    <div class="main container" >  
    <div class="resultat" id="resultat"> </div>
      <div class="col-main"id="container1">
        <div class="cart">
          
          <div class="page-content page-order"><div class="page-title">
            <h2>Contenu du panier</h2>
          </div>
            <div class="order-detail-content">
              <div class="table-responsive">
                <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>';

                     if (isset($_POST['update_cart_action'])) {
                      $panier = $bd->prepare('UPDATE  panier SET qte=:qte WHERE   id_prod=:id_prod');
                      $resultat=$panier->execute(array('qte'=>$_POST['qte'],'id_prod'=>$contenu['id_prod']));
                     }
                   }

               echo'</tbody><tfoot>
                    <tr class="first last">
                      <td colspan="50" class="a-right last">
                      <button type="button" title="Continuer" id="continuer" class="button btn-continue" href="index.php?page=home.php">
                        <span >Continuer</span></button>
        
                        <button type="submit" id="submit" name="update_cart_action" value="update_qty"  title="Modifier" class="button btn-update"><span>Modifier</span></button>
                        <button type="submit"  name="delete_action" value="empty_cart" title="supprimer" class="button btn-empty" id="delete_action"><span>Vider le panier</span></button></td>
                    
                    </tr>
                  </tfoot>
                </table>
                ';
                if (isset($_SESSION['id_cli'])) {

                 echo '<a id="imprimer" href="voir_commande.php?id_cli='.$_SESSION['id_cli'].'" rel="nofollow noopener noreferrer" target="_blank"><font color="write">Cliquer ici pour imprimer</font></a>
                 <em class="valider_commande">( Valider la commande <img src="images/down.ico" height="10" width="10"> )</em></div> ';
                }  
                 echo' </div>
            <div class="totals col-sm-4">
              <h3>Total du panier</h3>
              <div class="inner">
                <table id="shopping-cart-totals-table" class="table shopping-cart-table-total">
                  <colgroup>
                  <col>
                  <col width="1">
                  </colgroup>
                  <tfoot>
                    <tr>
                      <td style="" class="a-left" colspan="1"><strong>Total général</strong></td>
                      <td style="" class="a-right"><strong><span class="price">';
                       $req_prix = 'SELECT sum(prix_prod*qte) FROM panier
                                INNER JOIN produit where 
                              panier.id_prod = produit.id_prod  AND panier.cookie = '.$_COOKIE['cookie'].' ';
                            $req_p = $bd ->query($req_prix);
                            $result = $req_p->fetch();
                         echo $result['sum(prix_prod*qte)'].' FRANCS CFA';
                      echo'</span></strong></td>
                    </tr>
                  </tfoot>
                  <tbody>
                    <tr>
                      <td style="" class="a-left" colspan="1"> </td>
                      <td style="" class="a-right"><span class="price"></span></td>
                    </tr>
                  </tbody>
                </table> '; ?>
                    <button type="submit" id="valider_action"
                     name="valider_action" title="commander" class="button btn-proceed-checkout">
                     <span>Valider la commande</span></button>
               </form>
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
14 août 2017 à 15:32
Il faut enlever cette partie :
if (isset($_POST['update_cart_action'])) {
$panier = $bd->prepare('UPDATE panier SET qte=:qte WHERE id_prod=:id_prod');
$resultat=$panier->execute(array('qte'=>$_POST['qte'],'id_prod'=>$contenu['id_prod']));
}


Par ailleurs, je ne vois pas du tout où tu traites les liens "supprimer" et "modifier". Tu me dis qu'ils marchaient avant ?
0
delavega470 Messages postés 298 Date d'inscription dimanche 9 février 2014 Statut Membre Dernière intervention 24 mars 2020 48 > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
14 août 2017 à 17:35
j'ai enlevé mais ça ne marche toujours pas !
0
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
dans le
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)
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
11 août 2017 à 18:44
Oui j'ai raté une parenthèse...
if (isset($_POST['update_cart_action']) && $qte != $newQte)
0
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
j'ai des soucis avec les accolades ! des if
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
14 août 2017 à 09:47
Quel genre de soucis ?
0
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
je vais envoyé tout l'anncien code on va voir ensemble petit à petit parce que la tout est melangé
0
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
ça ne marche pas !
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
14 août 2017 à 13:43
Mais encore ?
0

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
c'est avec Jquery j'ai traité supprimer
0
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
je traite supprimer avec jquery
0
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
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
if(isset($_POST['delete_action']))
{ $delete=$bd->query('DELETE FROM panier WHERE cookie="'.$cookie.'" '); } 

j'ai remis mais ça ne vide pas le panier
0
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
ah oui pardon
0