Panier n'affiche qu'un produit à la fois ?
Lolo
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je suis presque à la fin de mon site e-commerce. Il ne me reste plus qu'à régler le panier. J'avoue qu'entant que débutante j'ai chercher un script prêt à l'emploi. J'ai donc insérer dans mon script personnel celui de jcrozier.developpez.com Il est très bien mais j'ai quelques soucis.
1) Il n'affiche que les premières lettre/chiffre du produit et du prix sélectionnés.
J'ai procédé de la façon suivante : formulaire method POST pour ajouter au panier et en même temps dans la bdd panier. Comme le panier utilise $_SESSION et que mon formulaire et en POST, j'ai fais :
<?php
session_start();
include_once("fonction-panier.php");
echo '<?xml version="1.0" encoding="utf-8"?>';?>
<?php
$_SESSION['panier'];
$_SESSION['panier'] ['produit'] = $_POST['produit'];
$_SESSION['panier'] ['quantite'] = $_POST['quantite'];
$_SESSION['panier'] ['prix'] = $_POST['prix_format'];
?>
Si le client n'est pas identifié avant d'ajouter au panier ça ne marche pas. Utilisation dans la requête Sql de $_SESSION['email']. Si j'efface [$i] dans le bout de script ci-dessous ça fonctionne mais je ne pourrais pas afficher d'autres articles :
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]))."\">X</a></td>";
echo "</tr>";
}
Ca fait des jours et des jours que je tourne en rond. J'ai déjà posté sur ce sujet mais je n'ai toujours pas la solution. Help !!!
2) Je ne peux afficher plusieurs articles en même temps.
Si le client ajoute un article dans le panier, celui-ci apparaît (avec le problème cité ci-dessus) mais disparaît pour laisser place à l'autre article si le client en sélectionne un autre.
Même punition : Help !!!
Merci pour votre aide...
(P.S : je suis débutante en php)
Je suis presque à la fin de mon site e-commerce. Il ne me reste plus qu'à régler le panier. J'avoue qu'entant que débutante j'ai chercher un script prêt à l'emploi. J'ai donc insérer dans mon script personnel celui de jcrozier.developpez.com Il est très bien mais j'ai quelques soucis.
1) Il n'affiche que les premières lettre/chiffre du produit et du prix sélectionnés.
J'ai procédé de la façon suivante : formulaire method POST pour ajouter au panier et en même temps dans la bdd panier. Comme le panier utilise $_SESSION et que mon formulaire et en POST, j'ai fais :
<?php
session_start();
include_once("fonction-panier.php");
echo '<?xml version="1.0" encoding="utf-8"?>';?>
<?php
$_SESSION['panier'];
$_SESSION['panier'] ['produit'] = $_POST['produit'];
$_SESSION['panier'] ['quantite'] = $_POST['quantite'];
$_SESSION['panier'] ['prix'] = $_POST['prix_format'];
?>
Si le client n'est pas identifié avant d'ajouter au panier ça ne marche pas. Utilisation dans la requête Sql de $_SESSION['email']. Si j'efface [$i] dans le bout de script ci-dessous ça fonctionne mais je ne pourrais pas afficher d'autres articles :
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]))."\">X</a></td>";
echo "</tr>";
}
Ca fait des jours et des jours que je tourne en rond. J'ai déjà posté sur ce sujet mais je n'ai toujours pas la solution. Help !!!
2) Je ne peux afficher plusieurs articles en même temps.
Si le client ajoute un article dans le panier, celui-ci apparaît (avec le problème cité ci-dessus) mais disparaît pour laisser place à l'autre article si le client en sélectionne un autre.
Même punition : Help !!!
Merci pour votre aide...
(P.S : je suis débutante en php)
A voir également:
- Panier n'affiche qu'un produit à la fois ?
- Clé de produit windows 10 gratuit - Guide
- Le clavier de mon telephone ne s'affiche plus - Guide
- Historique prix produit - Guide
- Un problème s'est produit et votre pin n'est pas disponible - Forum Windows 10
- Paiement 4 fois cdiscount impossible ✓ - Forum Consommation & Internet
4 réponses
Bonjour,
Je lis: Si le client n'est pas identifié avant d'ajouter au panier ça ne marche pas
Mon avis: ce serait plus simple de faire un panier directement en base de données...
Le problème avec les sessions, c'est qu'elles ont une durée de vie limitée. Donc, si le client tarde trop, les données s'effacent. En gérant vos paniers en BDD, c'est plus persistant. Scénario:
- le client s'identifie,
- on vérifie s'il n'a pas une commande en cours. S'il n'en a pas, on crée une commande...
- dès qu'il sélectionne un produit, on crée une ligne produit rattachée à cette commande,
- en fin de commande, on peut facilement retrouver tous les produits rattachés à cette commande...
En annexe, vous créez un script qui vire toutes les commandes non validées trop anciennes (+48 à 72 heures...).
C'est pas compliqué.
A+
Je lis: Si le client n'est pas identifié avant d'ajouter au panier ça ne marche pas
Mon avis: ce serait plus simple de faire un panier directement en base de données...
Le problème avec les sessions, c'est qu'elles ont une durée de vie limitée. Donc, si le client tarde trop, les données s'effacent. En gérant vos paniers en BDD, c'est plus persistant. Scénario:
- le client s'identifie,
- on vérifie s'il n'a pas une commande en cours. S'il n'en a pas, on crée une commande...
- dès qu'il sélectionne un produit, on crée une ligne produit rattachée à cette commande,
- en fin de commande, on peut facilement retrouver tous les produits rattachés à cette commande...
En annexe, vous créez un script qui vire toutes les commandes non validées trop anciennes (+48 à 72 heures...).
C'est pas compliqué.
A+
Bonjour,
Votre code d'enregistrement du produit dans le panier ne peut effectivement enregister qu'un seul produit, il faudrait mettre ceci :
<?php
$_SESSION['panier'] ['produit'][] = $_POST['produit'];
$_SESSION['panier'] ['quantite'][] = $_POST['quantite'];
$_SESSION['panier'] ['prix'][] = $_POST['prix_format'];
?>
C'est pour cela que quand vous demandez $_SESSION['panier']['quantite'][$i] il vous affiche le premier carractère.
Dans votre système $_SESSION['panier']['quantite'] est une chaîne donc $_SESSION['panier']['quantite'][0] est le premier caractère de cette chaîne.
Pour votre boucle for ($i=0 ;$i < $nbArticles ; $i++) il serait mieux de mettre for ($i=0 ;$i <count($_SESSION['panier'] ['produit']) ; $i++) à la place. count($_SESSION['panier'] ['produit'] vous donne le nombre d'éléments présent dans le tableau.
Après je en sais pas pour quelle raison le panier ne fonctionne pas si le client n'est pas enregistré et je n'ai pas compris ce que vous vouliez dire par Utilisation dans la requête Sql de $_SESSION['email'].
Cordialement
Votre code d'enregistrement du produit dans le panier ne peut effectivement enregister qu'un seul produit, il faudrait mettre ceci :
<?php
$_SESSION['panier'] ['produit'][] = $_POST['produit'];
$_SESSION['panier'] ['quantite'][] = $_POST['quantite'];
$_SESSION['panier'] ['prix'][] = $_POST['prix_format'];
?>
C'est pour cela que quand vous demandez $_SESSION['panier']['quantite'][$i] il vous affiche le premier carractère.
Dans votre système $_SESSION['panier']['quantite'] est une chaîne donc $_SESSION['panier']['quantite'][0] est le premier caractère de cette chaîne.
Pour votre boucle for ($i=0 ;$i < $nbArticles ; $i++) il serait mieux de mettre for ($i=0 ;$i <count($_SESSION['panier'] ['produit']) ; $i++) à la place. count($_SESSION['panier'] ['produit'] vous donne le nombre d'éléments présent dans le tableau.
Après je en sais pas pour quelle raison le panier ne fonctionne pas si le client n'est pas enregistré et je n'ai pas compris ce que vous vouliez dire par Utilisation dans la requête Sql de $_SESSION['email'].
Cordialement
Bonjour et merci pour vos réponses.
J'ai en effet essayé :
<?php
$_SESSION['panier'] ['produit'][] = $_POST['produit'];
$_SESSION['panier'] ['quantite'][] = $_POST['quantite'];
$_SESSION['panier'] ['prix'][] = $_POST['prix_format'];
?>
mais à chaque fois il me note :
Fatal error: [] operator not supported for strings in C:\wamp\www\album_photos\panier.php on line 6
Pour ce qui est du fait que le panier ne fonctionne pas quand le client ne s'identifie pas ça correspond à ma volonté que le client soit reconnu avant de faire son panier. Ca marche très bien de ce côté la. J'ai ajouté dans ma requête Sql une condition.
J'ai en effet essayé :
<?php
$_SESSION['panier'] ['produit'][] = $_POST['produit'];
$_SESSION['panier'] ['quantite'][] = $_POST['quantite'];
$_SESSION['panier'] ['prix'][] = $_POST['prix_format'];
?>
mais à chaque fois il me note :
Fatal error: [] operator not supported for strings in C:\wamp\www\album_photos\panier.php on line 6
Pour ce qui est du fait que le panier ne fonctionne pas quand le client ne s'identifie pas ça correspond à ma volonté que le client soit reconnu avant de faire son panier. Ca marche très bien de ce côté la. J'ai ajouté dans ma requête Sql une condition.
Ok c'est un problème d'initialisation quelque part avec les trois variables
$_SESSION['panier'] ['produit'];
$_SESSION['panier'] ['quantite'];
$_SESSION['panier'] ['prix'];
Tu dois mettre quelque part dans ton code
$_SESSION['panier'] ['produit'] = une chaîne
alors qu'en fait à l'initialisation de ton panier la première fois tu fois mettre
$_SESSION['panier'] ['produit'] = array();
idem pour les autres.
$_SESSION['panier'] ['produit'];
$_SESSION['panier'] ['quantite'];
$_SESSION['panier'] ['prix'];
Tu dois mettre quelque part dans ton code
$_SESSION['panier'] ['produit'] = une chaîne
alors qu'en fait à l'initialisation de ton panier la première fois tu fois mettre
$_SESSION['panier'] ['produit'] = array();
idem pour les autres.
Est ce que le problème pourrait venir du fait que je n'ai pas inséré dans mon formulaire ce bouton soumis par le créateur du script :
<a href="panier.php?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;">Ajouter au panier</a>
<a href="panier.php?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;">Ajouter au panier</a>
Oui malheureusement il n'affiche toujours qu'un élément à la fois.
En effet je n'ai peut être pas été très claire.
Alors deux véritables problèmes se posent et je pense qu'ils sont liés :
1) le panier n'affiche qu'un élément à la fois
Je clique dans mon catalogue sur le bouton "ajouter au panier" et ça s'affiche correctement et si je veux un deuxième article dans le panier, je dois revenir sur le catalogue (pas de lien direct) et refaire "ajouter au panier". Et le panier ajoute le dernier article saisi. Pas les deux ???
2) Quand je clique sur la croix pour supprimer un élément dans le panier il m'indique que les variables ne sont pas définies. Alors il y a ce bout de script dans la page panier.php :
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;
}
}
et la fonction dans la page fonction-panier.php :
<?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['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['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.";
}
?>
Voilà j'espère avoir été plus claire...
As tu besoin du script complet pour avoir une vision d'ensemble ?
En effet je n'ai peut être pas été très claire.
Alors deux véritables problèmes se posent et je pense qu'ils sont liés :
1) le panier n'affiche qu'un élément à la fois
Je clique dans mon catalogue sur le bouton "ajouter au panier" et ça s'affiche correctement et si je veux un deuxième article dans le panier, je dois revenir sur le catalogue (pas de lien direct) et refaire "ajouter au panier". Et le panier ajoute le dernier article saisi. Pas les deux ???
2) Quand je clique sur la croix pour supprimer un élément dans le panier il m'indique que les variables ne sont pas définies. Alors il y a ce bout de script dans la page panier.php :
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;
}
}
et la fonction dans la page fonction-panier.php :
<?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['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['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.";
}
?>
Voilà j'espère avoir été plus claire...
As tu besoin du script complet pour avoir une vision d'ensemble ?