Page 1 sur 1

soucis de mise à jour de données et affichage

Posté : 27 mai 2006, 02:27
par oceane751
bonjour!

voilà je voudrais pouvoir modifier la quantité de chaque article dans mon panier mais au lieu de ça, ça me modifie toutes les quantités des articles que le client à mis dans son panier

voici mon code :

Code : Tout sélectionner

<? session_start(); $sessionidclient = $_SESSION['id_client']; $article = $_POST['article']; $quantite = $_POST['quantite']; // connexion à la BDD $req1 = "SELECT ref_produit, prix_produit FROM produit WHERE designation_produit = '".$article."'"; $query1 = mysql_query($req1) or die(mysql_error()); $fetch1 = mysql_fetch_array($query1); $total = $fetch1[1]*$quantite; $inser = "INSERT INTO panier (id_cli, ref_produit, quantite, total) VALUES ( '".$_SESSION['id_client']."','".$fetch1[0]."', '".$quantite."', '".$total."')"; $inquer = mysql_query($inser) or die(mysql_error()); $affected = mysql_affected_rows(); $reqtot = "SELECT sum(total) FROM panier WHERE id_cli = '".$_SESSION['id_client']."' "; $querytot = mysql_query($reqtot) or die(mysql_error()); $fetchtot = mysql_fetch_array($querytot); $select = "SELECT ref_produit, quantite, total FROM panier WHERE id_cli = '".$_SESSION['id_client']."' "; $quersel = mysql_query($select) or die(mysql_error()); echo "<table border= 2> <tr> <td><center><b>Designation</td></center></b> <td><center><b>Quantite</td></center></b> <td><center><b>Prix(en €)</td> </center></b> <td><center><b>Total produit</td></center></b> <td>Modifier</td></tr>"; while($fetchsel = mysql_fetch_array($quersel)) { $selectdesi = "SELECT designation_produit, prix_produit FROM produit WHERE ref_produit = '".$fetchsel[0]."'"; $querdesi = mysql_query($selectdesi) or die(mysql_error()); while ($fetchdesi = mysql_fetch_array($querdesi)) { if(isset($_POST['sub_form'])) { if ($_POST['sub_form'] == 'modifier') { $modif = "UPDATE panier SET quantite = ".$_POST['quantite'].", total = ".$fetchdesi[1] * $_POST['quantite']." WHERE ref_produit = '".$fetchsel[0]."' AND id_cli = '".$_SESSION['id_client']."'"; echo $modif; $res = mysql_query($modif) or die (mysql_error()); $fetchmodif = mysql_affected_rows(); } } $reqtott = "SELECT sum(total) FROM panier WHERE id_cli = '".$_SESSION['id_client']."' "; $querytott = mysql_query($reqtott) or die(mysql_error()); $fetchtott = mysql_fetch_array($querytott); if(isset ($fetchmodif)) { echo "<form method= 'post' action='{$_SERVER['PHP_SELF']}'>"; echo "<tr> <td>".$fetchdesi[0]."</td> <td><input type = text name = quantite value = ".$_POST['quantite']." ></td> <td>".$fetchdesi[1]."</td> <td>".$fetchdesi[1] * $_POST['quantite']."</td> <td><input type = submit name = 'sub_form' value = 'modifier'></td> </form> </tr> "; } else { echo "<form method= 'post' action='{$_SERVER['PHP_SELF']}'>"; echo "<tr> <td>".$fetchdesi[0]."</td> <td><input type = text name = quantite value = ".$fetchsel[1]." ></td> <td>".$fetchdesi[1]."</td> <td>".$total."</td> <td><input type = submit name = 'sub_form' value = 'modifier'></td> </form> </tr> "; } } } if (isset ($fetchmodif)) { echo " <tr><td></td><td></td><b><center> </b></td><td align = \"center\"><b>Total : ".$fetchtott[0]." €</b></td></tr>"; echo"</table>"; } else { echo " <tr><td></td><td></td><b><center> </b></td><td align = \"center\"><b>Total : ".$fetchtot[0]." €</b></td></tr>"; echo"</table> "; } echo "<br><br>"; echo "<a href = essaipanier.php>Retour</a><br>"; echo "<a href = index.php>Accueil</a>"; ?>
je vous remercie beaucoup pour votre aide ...

Re: soucis de mise à jour de données et affichage

Posté : 27 mai 2006, 03:56
par Truc
Salut,
voilà je voudrais pouvoir modifier la quantité de chaque article dans mon panier mais au lieu de ça, ça me modifie toutes les quantités des articles que le client à mis dans son panier
C'est peut être moi (il est tard) mais c'est la même chose "modifier chaque" et "modifier toutes", non ?

La requete de mise à jour (UPDATE) boucle sur toutes les références et sort donc tous les articles du client. Si la question initiale est "modifier la quantité d'un article" il ne faut pas boucler sur la mise à jour mais directement passer l'id du produit à UPDATE.

Sinon ton système de panier avec base de dones est lourd niveau gestion et optimisation avec toutes ces requetes. Tu devrais faire une recherche sur le Forum il y a un tuto de Cyrano pour un panier.

Posté : 27 mai 2006, 05:34
par Invité
huumm en faite quand je modifie la quantité d'un article ça me modifie toutes les quantites de tous les articles
par exemple j'ai dans mon panier :
5 articles de la reference 1
6 articles de la référence 2

quand je veux modifier 4 articles de la ref 1, et bien ça me met :
4 articles de la ref 1
4 articles de la ref 2

c'est pas vraiment ce que je recherche... :?

je veux que ça donne :
4 articles de la ref 1
6 articles de la ref 2

...

Re: soucis de mise à jour de données et affichage

Posté : 27 mai 2006, 11:29
par Ryle
La solution t'a été donnée par Truc juste au dessus :)
La requete de mise à jour (UPDATE) boucle sur toutes les références et sort donc tous les articles du client. Si la question initiale est "modifier la quantité d'un article" il ne faut pas boucler sur la mise à jour mais directement passer l'id du produit à UPDATE.
Ryle - quoteur professionnel ;)

Posté : 28 mai 2006, 00:35
par Invité
oulala je me tire les cheveux depuis des heures et rien de concluant

j'ai simplifié ce code mais rien à faire, ça me rajoute une ligne avec la modification (dans mon formulaire) au lieu d'afficher la modification dans le champs "quantite". j'ai donc une 2eme ligne qui s'affiche.

Code : Tout sélectionner

<? session_start(); $sessionidclient = $_SESSION['id_client']; echo $_SESSION['id_client']."Identifiant client"; echo "<br><br>"; $article = $_POST['article']; echo $article; echo "<br>"; $quantite = $_POST['quantite']; //connexion à la BDD $req1 = "SELECT ref_produit, prix_produit FROM produit WHERE designation_produit = '".$article."'"; $query1 = mysql_query($req1) or die(mysql_error()); $fetch1 = mysql_fetch_array($query1); $total = $fetch1['prix_produit']*$quantite; $inser = "INSERT INTO panier (id_cli, ref_produit, quantite, total) VALUES ( '".$_SESSION['id_client']."','".$fetch1['ref_produit']."', '".$quantite."', '".$total."')"; $inquer = mysql_query($inser) or die(mysql_error()); $affected = mysql_affected_rows(); $reqtot = "SELECT sum(total) FROM panier WHERE id_cli = '".$_SESSION['id_client']."' "; $querytot = mysql_query($reqtot) or die(mysql_error()); $fetchtot = mysql_fetch_array($querytot); if(isset($_POST['sub_form'])) { if ($_POST['sub_form'] == 'modifier') { $modif = "UPDATE panier SET quantite = '".$_POST['quantite']."', total = '".$fetch1['prix_produit'] * $_POST['quantite']."' WHERE ref_produit = '".$fetch1['ref_produit']."' AND id_cli = '".$_SESSION['id_client']."'"; $res = mysql_query($modif) or die (mysql_error()); } } $select = "SELECT ref_produit, quantite, total FROM panier WHERE id_cli = '".$_SESSION['id_client']."' "; $quersel = mysql_query($select) or die(mysql_error()); echo "<table border= 2> <tr> <td><center><b>Reference</td></center></b> <td><center><b>Quantite</td></center></b> <td><center><b>Total produit</td></center></b> <td>Modifier</td></tr>"; while($fetchsel = mysql_fetch_assoc($quersel)) { echo "<form method= 'post' action='{$_SERVER['PHP_SELF']}'>"; echo "<tr> <td>".$fetchsel['ref_produit']."</td> <td><input type = text name = quantite value = ".$fetchsel['quantite']." ></td> <td>".$fetchsel['total']."</td> <td><input type = submit name = 'sub_form' value = 'modifier'></td> </tr> </form>"; } echo "</table> "; } ?>


[/img]

Posté : 28 mai 2006, 09:50
par Cyrano
Salut,
tu génères un code invalide, la balise <form> ne peut pas se trouver entre </tr> et <tr>. Ensuite, tu initialisses une variable $sessionidclient que tu n'utilises jamais, ce n'est pas d'une très grande utilité : proposition pour une première correction avant un autre problème :
<?php
session_start();

$sessionidclient =  $_SESSION['id_client'];

echo  $sessionidclient ." Identifiant client";
echo "<br><br>";
$article = $_POST['article'];
echo $article;
echo "<br>";

$quantite = $_POST['quantite'];

//connexion à la BDD
$req1   = "SELECT ref_produit, prix_produit ".
          "FROM produit ".
          "WHERE  designation_produit = '".$article."'";
$query1 = mysql_query($req1) or die(mysql_error());
$fetch1 = mysql_fetch_array($query1);
$total  = $fetch1['prix_produit']*$quantite;

$inser    = "INSERT INTO panier (id_cli, ref_produit, quantite, total) ".
            "VALUES ( '".$_SESSION['id_client']."','".$fetch1['ref_produit']."', '".$quantite."', '".$total."')";
$inquer   = mysql_query($inser) or die(mysql_error());
$affected = mysql_affected_rows();

$reqtot   = "SELECT sum(total) ".
            "FROM panier ".
            "WHERE id_cli = '".$_SESSION['id_client']."'  ";
$querytot = mysql_query($reqtot) or die(mysql_error());
$fetchtot = mysql_fetch_array($querytot);

if(isset($_POST['sub_form']) && $_POST['sub_form'] == 'modifier')
{
    $modif = "UPDATE panier ".
             "SET quantite = '". $_POST['quantite'] ."', total = '". $fetch1['prix_produit'] * $_POST['quantite'] ."' ".
             "WHERE ref_produit = '".$fetch1['ref_produit']."' ".
             "AND id_cli = '". $sessionidclient ."'";

    $res = mysql_query($modif) or die (mysql_error());
}

$select = "SELECT  ref_produit, quantite, total ".
          "FROM panier ".
          "WHERE id_cli = '". $sessionidclient ."'  ";
$quersel = mysql_query($select) or die(mysql_error());
?>
<table border="2">
  <tr>
    <td>
      <center><b>Reference</b></center>
    </td>
    <td>
      <center><b>Quantite</b></center>
    </td>
    <td>
      <center><b>Total produit</b></center>
    </td>
    <td>Modifier</td>
  </tr>
<?php
while($fetchsel = mysql_fetch_assoc($quersel))
{
?>
  <tr>
    <td colspan="4">
      <form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
        <table>
          <tr>
            <td><?php echo($fetchsel['ref_produit']); ?></td>
            <td><input type="text" name="quantite" value="<?php echo($fetchsel['quantite']); ?>" ></td>
            <td><?php echo($fetchsel['total']); ?></td>
            <td><input type="submit" name="sub_form" value="modifier"></td>
          </tr>
        </table>
      </form>
    </td>
  </tr>
<?php
}
?>
</table>
Au moins, ton code html aura plus de sens.

Maintenant, il reste un problème: tu génères un formulaire par tour de boucle : tu te retrouves avec autant de fois les mêmes éléments de formulaire ayant tous les mêmes noms : comment distingueras-tu un formulaire de l'autre ?

Suggestion : crée un seul formulaire global, mais crée des noms pour les champs dynamiquement dans ta boucle en concaténant les noms avec une variable incrémentée à chaque tour.