Aller au contenu

Probleme avec un panier


Hugo38

Sujets conseillés

Bonjour tous le monde, je viens poster ici car j'ai un soucis avec un panier en php.

Tout d'abord je vais expliquer ce que je souhaite faire.

Je fait une partir vente en ligne pour une société de reprographie qui traite des dossiers d'appels d'offre et je dois ajouter à leur site une partie de vente en ligne pour ces dossiers.

A savoir que les clients n'auront pas besoin de s'inscrire pour acheter en ligne.

J'ai donc creer mes differentes pages pour traiter mon panier mais je n'arrive pas a la faire fonctionner.

Alors voila mes diffrents codes.

Ma session :

session_name('ma_session');
session_start();

if(!isset($_SESSION['id'])) {

$_SESSION['id'] = 'visiteur';
$_SESSION['panier']['id'] = array();
$_SESSION['panier']['quantite'] = array();

}

print_r($_SESSION);

Ma page ajoutpanier.php :

<?php
include('fonctions/fonction.php');

//Initialise les variables
$id = $_GET['id'];
$pos = array_search($_SESSION['panier']['id']);


if ($pos === false) {
array_push($_SESSION['panier']['id'],$id);
array_push($_SESSION['panier']['quantite'],1);
}
else
$_SESSION['panier']['quantite'][$pos]++;


header('location:../index.php?cat=affaire');
?>

et pour finir, ma page d'affichage du panier :

echo '<h3>Votre panier</h3>';
echo '<table id="panier" cellspacing="0" cellpadding="0">';
echo '<tr>
<th>Affaire</th>
<th>Lot</th>
<th>Quantite</th>
<th>Prix</th>
</tr>';

$total = 0;
for($i=0; $i<count($_SESSION['panier']['id']); $i++){

$id = $_SESSION['panier']['id'][$i];
$qte = $_SESSION['panier']['quantite'][$i];

$sql = "SELECT * FROM commandes";
$query = mysql_query($sql);
$data = mysql_fetch_assoc($query);

$total = $data['PrixTtc'] * $qte;



echo ('
<tr>
<td>'.$data['Affaire'].'</td>
<td>'.$data['NumLot'].'</td>
<td>'.$qte.'</td>
<td>'.$data['PrixTtc'].'</td>
</tr>');

}
echo'</table>';

Voila ou j'en suis actuellement et rien ne s'affiche dans mon panier.

Si je fait un print_r de ma session j'obtiens Array ( [id] => visiteur [panier] => Array ( [id] => Array ( ) [quantite] => Array ( [] => 3 ) ) )

Laz seule chose qui bouge est le chiffre de la fin qui s'incremente de 1 a chaque fois que je clique sur le bouton ajouter.

Merci d'avance.

Modifié par Hugo38
Lien vers le commentaire
Partager sur d’autres sites

Salut,

Je ne vois pas trop pourquoi ta variable $_SESSION['panier'] contient deux tableaux : ce serait plus pratique qu'elle en contienne un seul, c'est à dire un tableau clés/valeurs où les clés seraient les identifiants des produits, et valeurs leurs quantités.

Exemple : j'ajoute trois fois le produit 12 et deux fois le produit 23, alors mon tableau $_SESSION['panier'] serait du style :

12 => 3

23 => 2

Ce serait plus facile à manipuler que ton double tableau. Ensuite, quand l'utilisateur ajoute un produit, on regarde si ce produit est déjà présent dans le panier (avec array_key_exists car c'est au niveau des clés qu'on recherche) : si c'est le cas, on modifie la quantité (c'est à dire la valeur correspondante), sinon, on ajoute une nouvelle entrée au tableau.

Lien vers le commentaire
Partager sur d’autres sites

D'accord merci pour ta réponse.

Dons je devrais ecrire $_SESSION ['panier']['id']['quantite'] = array(); c'est bien ça ?

J'ai utilisé le double tableau car je suis encore en formation et que l'exemple du cours été fait de cette façon et que c'est la premiere fois que je refait un panier.

Lien vers le commentaire
Partager sur d’autres sites

Dons je devrais ecrire $_SESSION ['panier']['id']['quantite'] = array(); c'est bien ça ?

Ah non, si tu fais ça, ça signifie que tu as un tableau 'panier', qui contient un tableau 'id', qui lui-même contient un tableau 'quantité', ça fait tout un tas de tableaux imbriqués, alors qu'un seul tableau d'une seule dimension suffit.

Par exemple tu déclares ton tableau 'panier' de cette manière :

$_SESSION['panier'] = array();

Ensuite, admettons qu'un utilisateur ajoute une fois le produit d'identifiant 12. Pour l'ajouter au panier, tu fais simplement :

$_SESSION['panier'][12] = 1;

Si ensuite il ajoute trois fois le produit 23, alors on fait :

$_SESSION['panier'][23] = 3;

Imaginons que plus tard, il revient sur le produit 12 et qu'il l'ajoute une fois de plus (donc maintenant il est deux fois dans le panier), alors on corrige simplement la quantité correspondante :

$_SESSION['panier'][12] = 2;

Et ainsi de suite...

Avec ça, si tu fais un print_r de $_SESSION['panier'], tu obtiendras : Array ( [12] => 2 [23] => 3 )

Et pour afficher le panier :

foreach($_SESSION['panier'] AS $id => $quantite)
echo 'produit : ' . $id . ', quantité : ' . $quantite . '<br />';

Par contre, si tu as besoin de stocker d'autres données (par exemple des options choisies pour chaque produit), et non pas uniquement la quantité, alors il deviendra effectivement nécessaire de faire des tableaux imbriqués.

Lien vers le commentaire
Partager sur d’autres sites

Ok, merci pour ta réponse.

Je comprend tout à fait ce que tu veux dire mais j'ai du mal à lintégrer dans le code déjà créer donc je vais continuer d'essayer et te tenir au courant surtout que je suis assez pressé pour finir ce panier.

La pour le moment j'arrive déjà à afficher une quantité qui sincrémente à chaque clic mais qui ne correspond pas au produit.

Je m'explique si je clique 5 fois sur le produit 1, il m'affiche bien 5 mais si après je clique 5 fois sur le produit 2 il m'affiche 10 au lieu de me créer une nouvelle ligne.

Lien vers le commentaire
Partager sur d’autres sites

En relisant ton code, je vois cette ligne :

$pos = array_search($_SESSION['panier']['id']);

Cette fonction doit prendre deux paramètres ! Là tu n'en donnes qu'un...

Tu aurais certainement dû écrire :

$pos = array_search($id, $_SESSION['panier']['id']);

Doc : http://www.php.net/manual/fr/function.array-search.php

Donc forcément ça casse tout le reste de ton script...

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Ah oui exact je viens de rectifier ça.

Bon la ça avance petit à petit.

foreach($_SESSION['panier'] AS $id => $quantite)

echo 'produit : Lot '.$id.', quantité: '.$quantite.'<br/>';

Si je fait ça, quand je clique sur ajouté pour le produit 1 j'ai : produit : Lot 0, quantité: 1 au lieu de produit : Lot 1, quantité: 1

Pour le produit 2 : produit : Lot 1, quantité: 2 au lieu de produit : Lot 2, quantité: 1

Pour le produit 3 : produit : Lot 2, quantité: 3 au lieu de produit : Lot 3, quantité: 1

Pour le produit 2 et 3 j'ai cliqué qu'une seule fois sur ajouter et ile me met directement une quantité de 2 ou 3. On dirais qu'il decale tout comme si dans la quantité il me mettai l'Id du produit.

Modifié par Hugo38
Lien vers le commentaire
Partager sur d’autres sites

Je remet mon code de la ou j'en suis car je n'arrive pas regler tous les probleme.

Ma session :

if(!isset($_SESSION['nom'])) {

$_SESSION['nom'] = 'visiteur';
$_SESSION['panier'] = array();

}

print_r($_SESSION['panier']);

Ma page d'ajout au panier :

<?php
include('fonctions/fonction.php');

//Initialise les variables
$id = $_GET['id'];
$pos = array_search($id,$_SESSION['panier']);


if ($pos === false) {
array_push($_SESSION['panier'],$id);
}
else
$_SESSION['panier'][$pos]++;


header('location:../index.php?cat=affaire');
?>

Et enfin l'affichage de mon panier :

foreach($_SESSION['panier'] AS $id => $quantite)
echo 'produit : Lot '.$id.', quantité: '.$quantite.'<br/>';

Lien vers le commentaire
Partager sur d’autres sites

C'est normal : la fonction array_search fait une recherche sur les valeurs, c'est à dire, dans notre cas, sur les quantités. Si tu veux vérifier la présence d'un identifiant de produit, c'est sur les clés qu'il faut rechercher, et donc utiliser la fonction array_key_exists (et peu importe la position dans le tableau).

Ta page d'ajout au panier devrait donc plutôt être :

<?php
include('fonctions/fonction.php');

//Initialise les variables
$id = $_GET['id'];

if(array_key_exists($id, $_SESSION['panier']))
$_SESSION['panier'][$id]++;
else
$_SESSION['panier'][$id] = 1;

header('location:../index.php?cat=affaire');
?>

Lien vers le commentaire
Partager sur d’autres sites

Ca y est ça marche.

Merci beaucoup a toi Ernestine pour ton aide.

Il ne me reste plus qu'à adapter pour rajouter le prix dans l'affichage de mon panier.

Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...