A voir également:
- Panier n'affiche qu'un produit à la fois ?
- Clé de produit windows 10 gratuit - Guide
- Faites en sorte que la cellule a1 affiche exactement ce qui est montré sur cette image. quel mot apparaît en b1 ? - Forum Excel
- Le clavier de mon telephone ne s'affiche plus - Guide
- Qu'est ce qu'une femme fait 3 fois par jour et un homme une fois dans sa vie ✓ - Forum Loisirs / Divertissements
4 réponses
mpmp93
Messages postés
6648
Date d'inscription
mercredi 13 avril 2011
Statut
Membre
Dernière intervention
28 septembre 2015
1 339
11 août 2011 à 10:08
11 août 2011 à 10:08
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+
Utilisateur anonyme
11 août 2011 à 10:23
11 août 2011 à 10:23
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.
Utilisateur anonyme
11 août 2011 à 10:55
11 août 2011 à 10:55
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 ?