PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 18-11-2010 14:07:28

blackant
Membre
Inscription : 03-11-2010
Messages : 25

creer un panier ou cadie virtuel

bonjour,
apres avoir créé un catalogue depuis une base de données, j'aimerais creer un panier pour que le client puisse choisir ce qu'il veut.
j'ai trouvé pleins de tutos mais tous sont tres mal expliqué et ne montre q'un exemple mais n'explique pas ce qui m'interresse.

lien vers le catalogue en travaux
j'ai copié session_start(); en haut de chacune de mes pages

apres je suis perdu.^^'

j'ai créé une page 'panier' a l'interrieur de laquelle j'ai rentré ca:

<?
//initialisation ou continution de la session
session_start();

//verification du panier
if (!isset ($_SESSION[['panier']))
 //initilisation du panier
$_SESSION['panier'] = array();
//rangement
$_SESSION['panier'] ['IDBDD'] = array();
$_SESSION['panier'] ['Quantite'] = array();
$_SESSION['panier'] ['prix'] = array();
$_SESSION['panier'] ['Nom'] = array();
$_SESSION['panier'] ['Reference'] = array();
$_SESSION['panier'] ['Fraisport'] = array();

//ajout de l'article
array_push($_SESSION['panier']['']
?>

<table width="600" border="1" align="center" bordercolor="#999966">
  <tr>
    <td width="369" height="104" bordercolor="#FF9900" bgcolor="#6699FF"><table width="600" border="0">
      <tr>
        <td width="100" rowspan="3"><img src=<?php echo $donnees['image']; ?> /></td>
        <td width="230"><?php echo $donnees['Nom']; ?></td>
        <td width="64"><label></label></td>
        <td width="157"><div align="right">Quantité: </div></td>
        <td width="6"><input type="int" onclick="cancelBuble()" name="Quantite" value="1" size="1" maxlength="1" method="post" /></td>
        <td width="17"><?php echo $Quantite['Quantite']; ?></td>
      </tr>
      <tr>
        <td> </td>
        <td width="64"><div align="right"></div></td>
        <td><div align="right">prix: </div></td>
        <td colspan="2"><?php echo $donnees['prix']; ?> €</td>
      </tr>
      <tr>
        <td>réf: <?php echo $donnees['Reference']; ?></td>
        <td><div align="right"></div></td>
        <td><div align="right">+<?php echo $donnees['Fraisport']; ?> € de frais de port</div></td>
        <td colspan="2"><div align="right"><a href="panier.php5?action=ajout&l=LIBELLEPRODUIT&q=QUANTITEPRODUIT&p=PRIXPRODUIT" onclick="window.open(this.href, '',
'toolbar=no, location=no, directories=no, status=yes, scrollbars=yes, resizable=yes, copyhistory=no, width=600, height=350'); return false;"><img src="../images/cadi.png" alt="ajouter au cadi" width="24" height="22" /></a></div></td>
      </tr>
      <a href="panier.php5?action=ajout&l=LIBELLEPRODUIT&q=QUANTITEPRODUIT&p=PRIXPRODUIT" onclick="window.open(this.href, '',
'toolbar=no, location=no, directories=no, status=yes, scrollbars=yes, resizable=yes, copyhistory=no, width=600, height=350'); return false;"> </a>
    </table></td>
    <?php
}

$reponse->closeCursor(); // Termine le traitement de la requête


?>
  </tr>
</table>

ce que j'aimerais c'est que mes articles se mettent en page suivant le meme shema que sur la page du catalogue et dans les tutos c'est juste un array d'un article exemple donc je ne sais pas comment faire.

en plus sur la page du catalogue, j'aimerais que le bouton ajouter au cadi ajoute l'article mais ca ne fonctionne  pas.

pleaze help

Hors ligne

#2 18-11-2010 16:14:21

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : creer un panier ou cadie virtuel

salut,

hum le code la c'est un fourbit pas possible hmm

alors :
- pourquoi les sessions ? parce que c'est un moyen simple (relativement sécurisé) de reconnaitre la personne qui navigue sur ton site.
- comment fonctionnent les sessions ? si tu ne sais pas je t'invite a lire le cours sur le sujet.
- a tu regardé le source html de ta page ? (celle que tu met en lien) tu a pour le lien sur l'image du caddie <a href="Commande.php?prod=%22.$donnees[" idbdd']."'="">  donc la c'est clair tu un problème de concaténation sur le lien.

Le principe de base pour un caddie
- une variable de session (qui peut être appelé panier)
- Pas besoin de ce tout ce qui est dans ton code, il te suffit d'y mettre l'id et la quatitée du produit dans le caddie. pour cela, en général, on met la référence en clef et la quantité dans le tableau ce qui veut dire
$_SESSION['panier'][reference] = quantité; c'est tout.

tu va donc avoir un tableau ($_SESSION['panier']) qui va contenir les quantités commandées et la référence

comment ajouter ?
il faut un lien comme le tiens <a href="?prod=reference&action=ajoutpanier">ajouter un article</a>
que veut dire ce lien ? le ?permet d'indiquer la page courante, ça veut dire que l'on va faire l'ajout dans le panier sur la même page que celle qui affiche le catalogue (c'est plus simple ça évite une redirection ensuite).
donc en haut de catalogue.php


<?php
if (!isset($_GET['action']) && $_GET['action']=='ajoutpanier')) {
// on a cliqué sur le lien pour ajouter un article
if (isset($_GET['prod'])) {
// on regarde si le produit est deja dans le panier si oui on  fait un ++ si non on ajoute le produit dans le panier
if (isset($_SESSION['panier'][$_GET['prod'] ])) {
// l'article existe on en ajoute un
$_SESSION['panier'][$_GET['prod']]++;
}
else {
//l'article  existe pas on l'ajoute
$_SESSION['panier'][$_GET['prod']] = 1;
}
}
else {
$erreur = 'ben y a pas de produit je pas ajouter hein ....';
}
}
?>

voila pour l'ajout quelque soit l'article. C'est vraiment basique, il serait bon, par exemple, de vérifier si la référence existe, si tu l'a en stock etc).

comment afficher le panier ?
- il faut récupérer les infos des produits, pour cela rien de plus simple, la fonction array_key retourne un tableau contenant les clef d'un tableau.
la requete SQL devient simple $select = 'SELECT nom, description, prix etc from tableproduit where reference in ('.implode(',',array_key($_SESSION['panier']).')';
ensuite dans le traitement de la requête tu récupère la quantité dans le tableau panier et tu fait le calcul
par exemple


<?php
$select = 'SELECT reference,nom, description, prix,livraison from tableproduit where reference in ('.implode(',',array_key($_SESSION['panier']).')';
$result = mysql_query($select);
echo '<table><thead><tr><th>Ref</th><th>Nom</th><th>description</th><th>P.U</th><th>Quantitée</th><th>prix total</th><th>Livraison</th><th>Total</th></tr></thead>
<tbody>'
;
$total = 0;
$livraison = 0;
while ($data = mysql_fetch_assoc($result)) {
  $prix = $_SESSION['panier'][ $data['reference'] ] * $data['prix'];
  $total += $prix;
  $liv = $data['livraison'] * $_SESSION['panier'][ $data['reference'] ];
  $livraison += $data['livraison'];
  echo '<tr>
    <td>'
.$data['reference'].'</td>
    <td>'
.$data['nom'].'</td>
    <td>'
.$data['description'].'</td>
    <td>'
.$data['prix'].'</td>
    <td>'
.$_SESSION['panier'][ $data['reference'] ].'</td>
    <td>'
.$prix.'</td>
    <td>'
.$liv.'</td>
    <td>'
.($prix+$liv).'</td>
    </tr>'
;
}
echo '</tbody>
<tfooter>
<tr>
<td colspan="7">Total livraison</td>
<td>'
.$livraison.'</td>
</tr>
<tr>
<td colspan="7">Prix total</td>
<td>'
.$total.'</td>
</tr>
<td colspan="7">Prix total avec livraison</td>
<td>'
.($total+$livraison).'</td>
</tr>
</tfooter>
</table>'
;
?>

après il te faut adapter la requête pour avoir les bonnes infos (nom des champs, jointure sur autre table etc)

il te faut sauvegarder la commande quelque part ? (le mieux serait dans une table ce qui pourrait t'orienter vers un panier dans le SGBD plutôt qu'en session, bien que pour la commande tu n'ai pas besoin de mettre le tout dans un table tu garde ça pour la validation de la commande.
exemple de table commande



CREATE TABLE commandes (
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  numerocmd INT NOT NULL,
  refclient INT NOT NULL,
  datecommande DATE NOT NULL,
  PRIMARY KEY(id)
)TYPE=myisam

CREATE TABLE produitscommandes(
  id INT UNSIGNED NOT NULL AUTO_INCREMENT,
  idcommande INT UNSIGNED NOT NULL,
  reference INT NOT NULL,
  quantite INT NOT NULL,
  PRIMARY KEY(id)
)TYPE=myisam;
 

avec une telle structure tu a des commandes (tables commandes) et des produits liés à la commande (table produitscommandes).
dans la table commande tu à les infos nécessaire qui sont la référence de la commande, la référence client (qui est en fait la clef primaire de la table client) cela permet de savoir à qui est la commande.
la seconde table contient les articles de chaque commande.
Le prix totale de la commande étant calculé à la volée (tu peut le faire en SQL, à la limite tu peut ajouter un champ à la première table pour limiter l'utilisation du SGBD mais pas vraiment utile).

j'ai fait au plus simple mais perso j'utiliserais des tables innodb pour utiliser les clefs étrangères et forcer intégrité des données des tables (impossible d'avoir une référence d'article qui ne serait pas dans la table des articles etc).

voila comment répondre à ta question "simplement".
ce n'est pas compliqué mais il faut être à l'aise avec les sessions et les requêtes SQL.

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#3 22-11-2010 10:26:56

blackant
Membre
Inscription : 03-11-2010
Messages : 25

Re : creer un panier ou cadie virtuel

ca ne marche pas il me sort une erreur :
Parse error: syntax error, unexpected T_VARIABLE in /homez.20/espacelo/www/Pages/panier.php5 on line 19

ce qui correspond a cette ligne:
$select = 'SELECT reference,nom, description, prix,livraison from tableproduit where reference in ('.implode(',',array_key($_SESSION['panier']).')';

et je n'arrive pas a mettre le doigt dessus

Hors ligne

#4 23-11-2010 23:53:58

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : creer un panier ou cadie virtuel

c'est simple manque la parenthèse fermant de l'impode ...

je te conseil un editeur de txt qui colorise la syntaxe et indique les correspondances des parenthèses. (ou tu peu ausss tester netbeans, qunata etc)

@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

Pied de page des forums