Problème panier site e-commerce

Fermé
Lolo - 26 juil. 2011 à 16:22
thevinou Messages postés 1008 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 10 mars 2015 - 26 juil. 2011 à 19:22
Bonjour,

J'ai trouvé des scripts pour réaliser un panier simple pour mon site e-commerce mais il n'explique pas comment faire le lien entre la page où m'on sélectionne le produit, la quantité, le format... et le panier lui même.
Je tourne en rond depuis le début de l'après midi...

J'ai ça (script panier) :

<form method="post" action="panier.php">
<table style="width: 400px; margin-left:200px; margin-top:70px;">
<tr>
<td colspan="4">Votre panier</td>
</tr>
<tr>
<td>Produit</td>
<td>Quantité</td>
<td>Format</td>
<td>Prix Unitaire</td>
<td>Action</td>
</tr>

<?php
if (creationPanier())
{
$nbArticles=count($_SESSION['panier']['produit']);
if ($nbArticles <= 0)
echo "<tr><td>Votre panier est vide </ td></tr>";
else
{
for ($i=0 ;$i < $nbArticles ; $i++)
{
echo "<tr>";
echo "<td>".htmlspecialchars($_SESSION['panier']['produit'][$i])."</ td>";
echo "<td><input type=\"text\" size=\"4\" name=\"q[]\" value=\"".htmlspecialchars($_SESSION['panier']['quantite'][$i])."\"/></td>";
echo "<td>".htmlspecialchars($_SESSION['panier']['prix'][$i])."</td>";
echo "<td><a href=\"".htmlspecialchars("panier.php?action=suppression&l=".rawurlencode($_SESSION['panier']['produit'][$i]))."\">XX</a></td>";
echo "</tr>";
}

echo "<tr><td colspan=\"2\"> </td>";
echo "<td colspan=\"2\">";
echo "Total : ".MontantGlobal();
echo "</td></tr>";

echo "<tr><td colspan=\"4\">";
echo "<input type=\"submit\" value=\"Rafraichir\"/>";
echo "<input type=\"hidden\" name=\"action\" value=\"refresh\"/>";

echo "</td></tr>";
}
}
?>

<?php
$erreur = false;

$action = (isset($_POST['action'])? $_POST['action']: (isset($_GET['action'])? $_GET['action']:null )) ;
if($action !== null)
{
if(!in_array($action,array('ajout', 'suppression', 'refresh')))
$erreur=true;

//récuperation des variables en POST ou GET
$l = (isset($_POST['l'])? $_POST['l']: (isset($_GET['l'])? $_GET['l']:null )) ;
$p = (isset($_POST['p'])? $_POST['p']: (isset($_GET['p'])? $_GET['p']:null )) ;
$q = (isset($_POST['q'])? $_POST['q']: (isset($_GET['q'])? $_GET['q']:null )) ;

//Suppression des espaces verticaux
$l = preg_replace('#\v#', '',$l);
//On verifie que $p soit un float
$p = floatval($p);

//On traite $q qui peut etre un entier simple ou un tableau d'entier

if (is_array($q)){
$QteArticle = array();
$i=0;
foreach ($q as $contenu){
$QteArticle[$i++] = intval($contenu);
}
}
else
$q = intval($q);

}

if (!$erreur){
switch($action){
Case "ajout":
ajouterArticle($l,$q,$p);
break;

Case "suppression":
supprimerArticle($l);
break;

Case "refresh" :
for ($i = 0 ; $i < count($QteArticle) ; $i++)
{
modifierQTeArticle($_SESSION['panier']['produit'][$i],round($QteArticle[$i]));
}
break;

Default:
break;
}
}
?>

</table>
</form>

ce script aussi (fonction panier) :

<?php
function creationPanier()
{
if (!isset($_SESSION['panier']))
{
$_SESSION['panier']=array();
$_SESSION['panier']['produit'] = array();
$_SESSION['panier']['quantite'] = array();
$_SESSION['panier']['format'] = array ();
$_SESSION['panier']['prix'] = array();
$_SESSION['panier']['verrou'] = false;
}
return true;
}
?>

<?php
function ajouterArticle($produit,$quantite,$format,$prix)
{

//Si le panier existe
if (creationPanier() && !isVerrouille())
{
//Si le produit existe déjà on ajoute seulement la quantité
$positionProduit = array_search($produit, $_SESSION['panier']['produit']);

if ($positionProduit !== false)
{
$_SESSION['panier']['quantite'][$positionProduit] += $quantite ;
}
else
{
//Sinon on ajoute le produit
array_push( $_SESSION['panier']['produit'],$produit);
array_push( $_SESSION['panier']['quantite'],$quantite);
array_push( $_SESSION['panier']['format'],$format);
array_push( $_SESSION['panier']['prix'],$prix);
}
}
else
echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}
?>

<?php
function supprimerArticle($produit){
//Si le panier existe
if (creationPanier() && !isVerrouille())
{
//Nous allons passer par un panier temporaire
$tmp=array();
$tmp['produit'] = array();
$tmp['quantite'] = array();
$tmp['format'] = array();
$tmp['prix'] = array();
$tmp['verrou'] = $_SESSION['panier']['verrou'];

for($i = 0; $i < count($_SESSION['panier']['produit']); $i++)
{
if ($_SESSION['panier']['produit'][$i] !== $produit)
{
array_push( $tmp['produit'],$_SESSION['panier']['produit'][$i]);
array_push( $tmp['quantite'],$_SESSION['panier']['quantite'][$i]);
array_push( $tmp['format'],$_SESSION['panier']['format'][$i]);
array_push( $tmp['prix'],$_SESSION['panier']['prix'][$i]);
}

}
//On remplace le panier en session par notre panier temporaire à jour
$_SESSION['panier'] = $tmp;
//On efface notre panier temporaire
unset($tmp);
}
else
echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}
?>

<?php
function modifierQTeArticle($produit,$quantite){
//Si le panier éxiste
if (creationPanier() && !isVerrouille())
{
//Si la quantité est positive on modifie sinon on supprime l'article
if ($quantite > 0)
{
//Recharche du produit dans le panier
$positionProduit = array_search($produit, $_SESSION['panier']['produit']);

if ($positionProduit !== false)
{
$_SESSION['panier']['quantite'][$positionProduit] = $quantite ;
}
}
else
supprimerArticle($produit);
}
else
echo "Un problème est survenu veuillez contacter l'administrateur du site.";
}
?>

<?php
function MontantGlobal(){
$total=0;
for($i = 0; $i < count($_SESSION['panier']['produit']); $i++)
{
$total += $_SESSION['panier']['quantite'][$i] * $_SESSION['panier']['prix'][$i];
}
return $total;
}
?>

<?php
function isVerrouille(){
if (isset($_SESSION['panier']) && $_SESSION['panier']['verrou'])
return true;
else
return false;
}
?>

<?php
function compterArticles()
{
if (isset($_SESSION['panier']))
return count($_SESSION['panier']['produit']);
else
return 0;

}
?>

<?php
function supprimePanier(){
unset($_SESSION['panier']);
}
?>

et ma page de sélection du produit :

<form method="post" action="fonction-panier.php"/>
<p style="margin-left:50px;" > Prix unitaire : 30 €
<input type="text" name="prix"/>
<p style="margin-left:50px;" > Quantité
<input type="text" name="quantite"/>
<a style="margin-left:50px;" href="panier.php?action=ajout&p=PRODUIT&q=QUANTITE&f=FORMAT&p=PRIX" 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;">Ajouter au panier</a>
</form>

Que dois je faire ???

Merci pour vos réponses.

A voir également:

2 réponses

thevinou Messages postés 1008 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 10 mars 2015 190
26 juil. 2011 à 16:25
Ce qui se passe, c'est que tu stockes dans une variable de session le contenu de ton panier ( quand quelqu'un clic, ça ajoute les données dans la variable de session) et dans ta page panier ( celle de validation), tu récuperes les articles dans la variable de session et tu les affiches + calcul + tout ce que tu veux en faire.
0
thevinou Messages postés 1008 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 10 mars 2015 190
26 juil. 2011 à 16:27
Par contre, dans ton script, le prix est stocké dans ta variable de session, ce qu'il NE FAUT SURTOUT PAS FAIRE, car la personne, en modifiant sa variable, peut modifier le prix.
0
Merci beaucoup !
Pourrais tu me mettre sur la voie concernant le script à mettre en place pour que le client puisse choisir son produit, sa quantité... et que ça s'affiche dans le panier ?
0
thevinou Messages postés 1008 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 10 mars 2015 190
26 juil. 2011 à 16:34
Je pense que si tu ne comprends pas ce qui se passe dans ce fichier, ne t'aventure pas dans la création d'un panier par toi même, je te conseillerai de t'orienter vers des solutions fonctionnelles et plus simples, comme prestashop ou oscommerce
0
Mon site est presque fini.
Il ne me manque plus que le panier...

En effet je débute complètement dans le php/MySql mais petit à petit avec différentes aides j'avance.
0
thevinou Messages postés 1008 Date d'inscription lundi 28 février 2011 Statut Membre Dernière intervention 10 mars 2015 190
26 juil. 2011 à 16:43
il faut donc que tu comprennes le principe :

Un article à un ID ( j'espere :) )

Lorsque que tu ajoutes un article à ton "panier", ce que tu fais, c'est que dans une variable de session ( ou cookie), tu ajoutes l'ID de ton article et la quantité.

Lorsque la personne à ajouté tous ses articles, elle peut les voir ou supprimer ( voir modifier le nombre) .

Une fois que c'est fait, elle valide, donc tu récupères tous les articles, tu les affiche ( prix + nom + quantité, ...)
0
Je commence à saisir.
En fait j'ai oublié d'insérer mes produits... dans ma base de donnée.
Il faut d'abord que je commence par ça ?

Merci.
0