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
- Je suis une chose que les garçons utilisent deux fois par jour et les filles une fois toute leur vie - Forum Loisirs / Divertissements
- Un problème s'est produit et votre pin n'est pas disponible - Forum Windows 10
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 ?