Shopping cart

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Shopping cart

Résolu

par stefane321 » 22 sept. 2006, 02:01

Oublié ça j'ai réglé mon prob a l'aide d'un post sur ce sujet dans le forum

Ajout multiple dans le panier

par stefane321 » 21 sept. 2006, 22:07

Bonjour,

Mon panier fonctionne en autant que je permette d'y ajouter un article à la fois. Chaque article ayant son bouton ajouter au panier.

Cependant, mes besoin sont que mes produits doivent être affiché un en dessous de l'autre avec un bouton radio. Un bouton "Submit" au bas du formulaire et les produits sélectionnés seront ajouté au panier.

Actuellement de la façon dont j'ai fais mon code c'est le dernier produit de ma liste qui est ajouté au panier. Même si ce dernier n'a pas été sélectionné.

Je vous montre mon code en espérant que vous pourrez m'indiquez mon erreur:

Voici le formulaire:
echo "<form action=\"caddy.php\" method=\"post\">\n";

mysql_connect($host, $login, $password);

mysql_select_db($db);

$query2 = "SELECT cp.id, cp.prix, cp.id_produit, p.nom ".

          "FROM clients_produits AS cp, produits AS p ".

          "WHERE p.id = cp.id_produit ".

          "AND cp.id_client='". $_SESSION['id_client'] ."'"; $result2=mysql_query($query2);

while($row2=mysql_fetch_array($result2))

{

echo "<tr>\n";

echo "<td>\n";

echo "".$row2["nom"]."<input type=\"hidden\" name=\"id_produit\" value=\"".$row2["id_produit"]."\" size=\"25\"></td>\n";

echo "<td>".$row2["prix"]."$<input type=\"hidden\" name=\"prix\" value=\"".$row2["prix"]."\"></td>\n";

echo "<td><input type=\"text\" name=\"qte\" size=\"5\"></td>\n";

echo "<td><input type=\"radio\" name=\"ajout_".$row2["id_produit"]."\"></td>\n";

echo "</tr>\n";

}

echo "<tr>\n";

echo "<td align=\"center\" colspan=\"\"><input type=\"submit\" name=\"ajout\" value=\"Envoyer\">\n";

echo "</form>\n";

echo "</td>\n";

echo "</tr>\n";
Voici mon panier:
session_start();
///////////////////////////////
if(!isset($_SESSION["panier"]))
{
$_SESSION["panier"] = array();
$_SESSION["panier"]["id_produit"] = array();
$_SESSION["panier"]["qte"] = array();
$_SESSION["panier"]["prix"] = array();
}
if(isset($_POST["ajout"]))
{
$select = array();
$select["id"] = $_POST["id_produit"];
$select["qte"] = $_POST["qte"];
$select["prix"] = $_POST["prix"]; 
}
function ajout($select)
{
    array_push($_SESSION["panier"]["id_produit"],$select["id"]);
    array_push($_SESSION["panier"]["qte"],$select["qte"]);
    array_push($_SESSION["panier"]["prix"],$select["prix"]);
}
///////////////////////////////
ajout($select);
Je suis près de la solution finale de mon site, alors encore un petit coup d'aide svp .

Merci!

Re: Ça avance

par mere-teresa » 19 sept. 2006, 10:40

J'ai mis une requête mysql dans ma boucle d'affichage du panier pour pouvoir afficher le nom des produits contenu dans le panier.

Alors, si mon panier contient 50 produits la requête sera exécuté 50 fois.

Est-ce correct?
Pas incorrect, mais pas très économique.

Ça avance

par stefane321 » 18 sept. 2006, 20:22

Salut,

Je suis parvenu à faire afficher le contenu de mon panier.

Je souhaite cependant que tu me donne ton avis sur mon code car je ne suis pas certains d'avoir utilisé la meilleure méthode.

J'ai mis une requête mysql dans ma boucle d'affichage du panier pour pouvoir afficher le nom des produits contenu dans le panier.

Alors, si mon panier contient 50 produits la requête sera exécuté 50 fois.

Est-ce correct?
mysql_connect($host, $login, $password);
mysql_select_db($db);
$query3="select * from produits";
$result3=mysql_query($query3);
while($row3=mysql_fetch_array($result3))
{
$values[]=array("nom"=>$row3["nom"],"description"=>$row3["description"]);
}


for($i = 0;$i < sizeof($values); $i++) {
     echo " ".$values[$i]["nom"]. "<br>\n";
}
Merci!

par Cyrano » 14 sept. 2006, 21:01

Il te faut essayer de visualiser la structure de ton tableau. Tu jetteras un coup d'oeil dans la FAQ, il y a un sujet sur les tableaux.

Je dirais d'autre part que de nombreuses fonctions permettent de traiter des données stockées en tableaux, on peut compter, trier et d'autres choses encore. Représente-toi un tableau global comme un meuble avec des tiroir contenant eux-même des compartiments, eux-mêmes compartimentés, etc... Donc si tu pointes sur un compartiment contenant une valeur, tu verras la valeur, mais si il est compartimenté, tu verras un contenant, pas le contenu.

Tout ça plus des boucles peuvent te permettre d'afficher ton panier en récupérant des valeurs. Le print_r() ou le var_dump() ne servent qu'en débuggage et exclusivement en débuggage.

J'ai réussi a ajouter les items au panier

par stefane321 » 14 sept. 2006, 20:53

J'ai réussi a ajouter les items au panier.

C'était assez simple.

Le problème était que je comprenais mal.

Merci de tes orientations.

Maintenant, en étant à ma première utilisation des tableaux array() comment dois-je récupérer le contenu du panier pour obtenir un affichage:

pantalon quantité=2 prix=50$
Tuque a ponpon quantité=1 prix 5$
Botte quantité=2 prix=100$

J'ai essayé la fonction:
<pre>
<?php
var_dump($_SESSION['panier']);
?>
Ça sa donne un afficha pas utile à mon client.

Je sais que je devrai faire une requête avec une boucle en me servant des identifiants contenu dans le tableau array()

J'ai essayer ceci:
$count = count($_SESSION['panier']);
for ($i = 0; $i < $count; $i++) {
   echo "".$_SESSION['panier']['id_produit']."\n";
}
Mais se que je reçoit c'est des array array array

Peux-tu m'aider svp?

par Cyrano » 10 sept. 2006, 08:48

Il y a quelque chose de peut-être bien incohrent dans ton système : pour chaque article, tu as des champs de formulaire, mais pour ajouter au panier, tu utilises un lien hyper-texte normal : tu ne pourras donc pas récupérer les valeurs du formulaire. Ensuite dans ce lien, tu ajoutes un paramètre avec une valeur, mais le paramètre est dynamique : comment peux-tu le récupérer à l'autre bout puisqu'en fait tu ne sais pas ce qui est envoyé ?

Il y a deux méthodes possibles :
-1- systmème basique où tu ajoutes au panier un article et éventuellement le client peut modifier la quantité en éditant le contenu de son panier;
-2- système plus évolué où tu indiques la quantité à coté du bouton d'ajut au panier;

Selon le système choisi, tu n'utiliseras pas forcément la même manière de faire.

Pour le système basique, tu n'as pas besoin de formulaire. Un simple lien dynamique suffira avec en paramètre l'identifiant du produit et éventuellement la page pour le retour (explications plus loin)

Pour un système avec ajout de la quantité en plus du bouton, il te faudra un formulaire par article. Dans ce formulaire, un champ pour la quantité, un bouton de type submit pour l'ajout, un champ caché pour l'identifiant de l'article et éventuellement un champ caché pour la page retour. Avec une mise en page en tableaux, ça ne va pas te faciliter la tâche parce que tu vas devoir en fait créer un tableau pour chaque article à l'intérieur d'une cellule.

L'idée de la page retour, c'est que lorsqu'on clique sur le bouton (ou lien) "Ajouter", on appelle une page qui va uniquement récupérer les informations envoyées, les ajouter au panier et rediriger sur la page où on se trouvait.

J'ajoute qu'on pourrait avantageusement optimiser ton système : au lieu de deux requêtes dont une en boucle, tu pourrais simplifier avec une seule requête :
<table>
  <tr>
    <td colspan="4"><h3>Produits actuellement au dossier:</h3></td>
  </tr>
  <tr>
    <td class="texte1">Produit:</td>
    <td class="texte1">Prix:</td>
    <td class="texte1">Quantité:</td>
    <td class="texte1">Action:</td>
  </tr>
<?php
mysql_connect($host, $login, $password);
mysql_select_db($db);
$query2 = "SELECT cp.id, cp.prix, cp.id_produit, p.nom ".
          "FROM clients_produits AS cp, produits AS p ".
          "WHERE p.id = cp.id_produit ".
          "AND cp.id_client='". $_SESSION['id_client'] ."'";
$result2 = mysql_query($query2);
while($row2 = mysql_fetch_array($result2))
{
?>
  <tr>
    <td><?php echo($row2['nom']); ?><input type="hidden"  name="id_produit_<?php echo($row2['id']); ?>" value="<?php echo($row2['id']); ?>" size="25"></td>
    <td><?php echo($row2['prix']); ?>$</td>
    <td><input type="text" name="qte_<?php echo($row2['id']); ?>" size="5"></td>
    <td><a href="ajouter_panier.php?<?php echo($select['id_produit']); ?>=<?php echo($row2['id_produit']); ?>">Ajouter au panier</a></td>
  </tr>
<?php
}
?>
</table>
Reste à modifier le code en fonction de ce que tu veux faire pour l'ajout : basique, ou évolué...

Là est la question!

par stefane321 » 10 sept. 2006, 02:53

C'est ça ma question!

Voici mon code qui affiche mes produits avec un champ quantité et un url Ajouter au panier.
<?php
//...
echo "<table>\n";
echo "<tr><td colspan=\"4\"><h3>Produits actuellement au dossier:</h3></td></tr>\n";
echo "<tr>\n";
echo "<td class=\"texte1\">Produit:</td>\n";
echo "<td class=\"texte1\">Prix:</td>\n";
echo "<td class=\"texte1\">Quantit&eacute;:</td>\n";
echo "<td class=\"texte1\">Action:</td>\n";
echo "</tr>\n";
mysql_connect($host, $login, $password);
mysql_select_db($db);
$query2="select * from clients_produits where  id_client='".$_SESSION["id_client"]."'";
$result2=mysql_query($query2);
while($row2=mysql_fetch_array($result2))
{
    mysql_connect($host, $login, $password);
    mysql_select_db($db);
    $query3="select * from produits where  id='".$row2["id_produit"]."'";
    $result3=mysql_query($query3);
    while($row3=mysql_fetch_array($result3))
    {
        echo "<tr>\n";
        echo "<td>".$row3["nom"]."<input type=\"hidden\"  name=\"id_produit_".$row2["id"]."\" value=\"".$row2["id"]."\" size=\"25\"></td>\n";
        echo "<td>".$row2["prix"]."$</td>\n";
        echo "<td><input type=\"text\" name=\"qte_".$row2["id"]."\" size=\"5\"></td>\n";
        echo "<td><a href=\"ajouter_panier.php?".$select['id_produit']."=".$row2["id_produit"].">Ajouter au panier</a></td></tr>\n";
    }
}
echo "</table>\n";
//...
?>
Mon url :

<a href=\"ajouter_panier.php?".$select['id_produit']."=".$row2["id_produit"].">Ajouter au panier</a>
devrait alimenter les variables $select[] avec une quelconque amélioration de la fonction
<?php
//...
function ajout($select)
{
    array_push($_SESSION['panier']['id_produit'],$select['id_produit']);
    array_push($_SESSION['panier']['qte'],$select['qte']);
    array_push($_SESSION['panier']['prix'],$select['prix']);
}
//...
?>

par Cyrano » 09 sept. 2006, 17:25

et comment alimentes-tu ces variables : quelques bouts de codes sraient bienvenus, j'ai parfois du mal avec l'abstraction sur des données sommaires :-k

function ajout($select)

par stefane321 » 09 sept. 2006, 17:14

Dans la fonction function ajout($select)

Il y a:

$select['id_produit']
$select['Qte']
$select['prix']

par Cyrano » 08 sept. 2006, 21:50

à quoi correspond $select["les_variables"] dans ton systeme au juste ?

Envoie des données

par stefane321 » 08 sept. 2006, 19:54

Voici, en espérant que j'exprimerai bien se qui me trote dans la tête.

J'ai l'habitude d'envoyer mes données par un formulaire ou par un url mais pas les deux façon en même temps.

Avec un formulaire j'ai des champs <input type=... j'ai un bouton <input type="subit"> je récupère mes valeurs par $_POST["ma_variable"]

Par un url

panier.php?id_produit=".$row["id_produit"]."

Je récupère par $_GET["id_produit"]

Là pour mon shopping cart pour chaque produit j'ai un champs <input type="text" name="quantite"> et un url pour "Ajouter au panier"

Alors là, je bloque sur comment construire et remplire $select["les_variables"]

Merci de me répondre ou même me diriger vers un autre tuto qui m'enseignera se qui me manque.

Si mon problème n'est pas encore clair ne te gêne pas de me demandai quoi que se soit.

Merci!

Re: Manque de respect gratuit

par Cyrano » 08 sept. 2006, 19:39

Si tu es disposé à m'aider tout de même je reformulerai ma question d'une autre façon.
ça me semble assez indispensable parce que posée comme ça pour l'instant, ta question n'est pas cohérente :-k

Manque de respect gratuit

par stefane321 » 08 sept. 2006, 19:35

J'ai lu le tuto en entier même plus d'une fois.

Je code php depuis 3 ans.

On ne peut pas tous être bon comme toi!

J'ai dû mal exprimer mon problème.

Si tu es disposé à m'aider tout de même je reformulerai ma question d'une autre façon.

Merci!

Re: Quelques précisions S.V.P.

par Cyrano » 08 sept. 2006, 18:40

...J'ai lu le tuto ...
Et la ligne suivante :
...J'aimerais que vous m'indiquiez comment remplir le panier.
De deux choses l'une, mais soit tu as lu le tuto et dans ce cas la question ne se pose pas, soit tu n'as pas lu du tout, ou alors peut-être parcouru en diagonale juste pour dire que tu avais bien vu pa page.

Le tuto est largement assez clair sur ce point, faudrait quand même pas charrier... et personne ici ne te fera ton code, sois-en bien certain. :roll: J'ajoute même que si tu pose le problème comme ça, c'est que tu débutes complètement en PHP, et n'est pas un habitué qui a trois ou quatre mois de pratique périodique (comme indiqué à coté du titre du forum php4) Conclusion : je transfère le sujet vers le forum approprié !