Panier d'achat

Eléphant du PHP | 331 Messages

22 sept. 2006, 22:51

Bonjour,

J'ai un panier d'achat qui se rempli en cochant les produits que l'on veut ajouter au panier.

Il fonctionne presque bien sauf que j'ai l'impression que mon tableau se construit mal.

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_".$row2["id_produit"]."[]\" value=\"".$row2["prix"]."\"></td>\n";

echo "<td><input name=\"choix[]\" type=\"checkbox\" value=\"".$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";
Le panier:
foreach($_POST["choix"] as $i)
{
echo "".$i."<br>";
$panier[]=array($_POST["choix"],$_POST["prix_".$i.""]); 
$_SESSION['panier']=$panier;
}
Si je visualise le contenu de $_SESSION["panier"] avec :
echo "<pre>";
var_dump($_SESSION['panier']);
echo "</pre>";
J'obtiens ceci avec deux produits sélectionnés:

Code : Tout sélectionner

array(2) { [0]=> array(2) { [0]=> array(2) { [0]=> string(1) "4" [1]=> string(1) "5" } [1]=> array(1) { [0]=> string(3) "555" } } [1]=> array(2) { [0]=> array(2) { [0]=> string(1) "4" [1]=> string(1) "5" } [1]=> array(1) { [0]=> string(1) "6" } } }
J'ai l'impression qu'il y a de quoi de pas correct genre un array de trop et je n'ai pas trouvé comment l'arranger.

Pouvez-vous m'aider svp?

Merci!

Mammouth du PHP | 19672 Messages

22 sept. 2006, 23:33

Regarde les post-it de ce forum, tu y trouveras un lien vers un tuto spécialement fait pour la construction d'un panier dont tu pourras peut-être t'inspirer pour résoudre ton problème.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

23 sept. 2006, 00:03

J'ai déjà regardé ce tuto:

http://jmolline.free.fr/tutos/tuto_panier.html

Ce tuto ci-haut, j'ai réussi a m'en servir mais seulement pour ajouter un produit à la fois ayant chacun leur bouton "Ajouter"

Alors, je me suis aussi servi de ce Post qui correspond à ce que je cherche à faire:

http://www.phpfrance.com/forums/voir_su ... panier.php

Eléphant du PHP | 331 Messages

23 sept. 2006, 03:28

Merci pour ton indication!

Le post:

http://jmolline.free.fr/tutos/comprendre_tableaux.html

Va sûrement m'aider, il est plus détaillé que tout se que j'ai lu avant sur les tableau et la section qui explique le résultat de var_dump() va sûrement m'aider.

Eléphant du PHP | 331 Messages

26 sept. 2006, 00:20

Bonjour,

Après beaucoup d'essai je suis parvenu à structurer mon tableau adéquatement.

Cependant, je reste avec un problème d'insertion de mes données dans le tableau.

Tous les articles de mon catalogue sont inséré dans mon tableau plutot que seulement items sélectionnés.

Voici mon code de catalogue:
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 name=\"choix[]\" type=\"checkbox\" value=\"".$row2["id_produit"]."\"></td>\n";

//echo "<td><input type=\"submit\" name=\"ajout\" value=\"Ajouter au panier\"></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";
Voici mon code du panier:
session_start();
if(!isset($_SESSION["panier"]))
{
$_SESSION["panier"] = array();
$_SESSION["panier"]["id_produit"] = array();
//$_SESSION["panier"]["qte"] = array();
$_SESSION["panier"]["prix"] = array();
}

foreach($_POST["choix"] as $i)
{
echo "".$i."<br>";
$_SESSION['panier']["id_produit"]=$_POST["id_produit"];
$_SESSION['panier']["prix"]=$_POST["prix"];
}
Chose étrange pour moi le:
echo "".$i."<br>";
M'affiche correctement les items sélectionnés!

Pouvez-vous m'aider de nouveau SVP?

Merci!

Mammouth du PHP | 19672 Messages

26 sept. 2006, 08:19

Il y a un problème avec l'ajout de données dans ton tableau :
<?php
//...
foreach($_POST["choix"] as $i)
{
    echo "".$i."<br>";
    $_SESSION['panier']["id_produit"]=$_POST["id_produit"];
    $_SESSION['panier']["prix"]=$_POST["prix"];
}
//...
?>
à chaque nouveau tour de boucle, tu écrases la valeur précédente. Si tu as regardé le mini tuto sur les tableaux, tu as dû voir une chose importante. Essaye comme ceci:
<?php
//...
foreach($_POST["choix"] as $i)
{
    echo "".$i."<br>";
    $_SESSION['panier']["id_produit"][] = $_POST["id_produit"];
    $_SESSION['panier']["prix"][] = $_POST["prix"];
}
//...
?>
Les explications sont dans le mini-tuto mentionné.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

26 sept. 2006, 15:30

Bonjour,

J'ai corrigé mon code, il fonctionne, maintenant seulement les items sélectionnés son ajoutés au panier.

Voici mon code:
foreach($_POST["choix"] as $i)
{
echo "".$i."<br>";
$panier=$_SESSION["panier"];
$panier[]=array("id_produit"=>$_POST["id_produit_".$i.""],"prix"=>$_POST["prix_".$i.""]);
$_SESSION["panier"]=$panier;
}
Cependant, je m'intéroge sur le résultat de var_dump il semble qu'il y a un index de vide en début d'affichage. Mais il ne me manque pas de données.
array(4) {
["id_produit"]=>
array(0) {
}
["prix"]=>
array(0) {
}
[0]=>
array(2) {
["id_produit"]=>
string(1) "4"
["prix"]=>
string(3) "555"
}
[1]=>
array(2) {
["id_produit"]=>
string(1) "7"
["prix"]=>
string(3) "777"
}
}
Il y a deux produits de sélectionné dans ça.

Que peux-tu me dire la-dessus?

Est-ce correct ou non?

Merci!