Shopping cart

Eléphant du PHP | 331 Messages

07 sept. 2006, 16:33

Bonjour,

Je suis a coder un shopping cart.

Mais j'ai une intérogation concernant la session de magasinage.

J'ai une table commande qui contiendra les commandes confirmés.

Ma question est comment gérer le panier du client avant l'achat final (Check out) tout en sachant que certaines fois le client ajoutera des items à son panier mais ne terminera pas la transaction.

Donc, la table "panier" devra sûrement être vidé d'une façon quelquonque.

Pouvez-vous m'éclairer s.v.p.?

Merci!

Mammouth du PHP | 19672 Messages

07 sept. 2006, 17:22

Tu n'as pas besoin d'une table MySQL pour gérer ton panier, la base de données n'intervient qu'à partir de la confirmation de commande.

Voir : Tuto pour construire un panier
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

08 sept. 2006, 15:39

Merci, c'est se qu'il me fallait!

Eléphant du PHP | 331 Messages

08 sept. 2006, 17:29

Bonjour,

Pourriez-vous me préciser la chose suivante:

J'ai lu le tuto et commencé à l'essayer.

J'aimerais que vous m'indiquiez comment remplir le panier.

Code : Tout sélectionner

session_start(); if(!session_is_registered('id_client')) { header("Location: index.php"); } else { /////////////////////////////// if(!isset($_SESSION['panier'])) { $_SESSION['panier'] = array(); $_SESSION['panier']['id_produit'] = array(); $_SESSION['panier']['qte'] = array(); $_SESSION['panier']['prix'] = array(); } 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']); } ///////////////////////////////
Je remplis $select de quel façon?

Code : Tout sélectionner

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?id=".$row2["id"]."&id_client=".$row2["id_client"]."\">Ajouter au panier</a></td></tr>\n"; } } echo "</table>\n";
Merci!

Mammouth du PHP | 19672 Messages

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é !
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

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!

Mammouth du PHP | 19672 Messages

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

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!

Mammouth du PHP | 19672 Messages

08 sept. 2006, 21:50

à quoi correspond $select["les_variables"] dans ton systeme au juste ?
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

09 sept. 2006, 17:14

Dans la fonction function ajout($select)

Il y a:

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

Mammouth du PHP | 19672 Messages

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
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

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']);
}
//...
?>

Mammouth du PHP | 19672 Messages

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é...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 331 Messages

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?

Mammouth du PHP | 19672 Messages

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: