Panier oui mais avec plusieurs variables ...

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Panier oui mais avec plusieurs variables ...

par Cyrano » 28 juil. 2005, 17:03

[Résolu] :?:

par fxgordon » 28 juil. 2005, 15:56

héhé ensemble ...
tout marche bien mais passé 4 article .. il ne me les ajoute pas dans mon panier ...???
arfff ... c'était trop beau !!!
////////////////////////////////
en fait je pense avoir trouvé ...
$nb_art = count($tableau);
// il compte les entrées id_article, prix, taille et qté soit 4
// du coup, je lui ai dis :
$nb_art = count($tableau['id_article']);
et là j'en rajoutes des pleines caisses ....
merci ... encore ... :P

par Cyrano » 28 juil. 2005, 15:46

Autant pour moi, mais tu aurais bien dû le voir toi-même : remplace ces quatre lignes :
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['id_article'][$i]); ?></font></div></td>
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['qte'][$i]); ?></font></div></td>
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['taille'][$i]); ?></font></div></td>
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['prix'][$i]); ?></font></div></td>
J'avais oublié l'index numérique de chaque tableau.

par fxgordon » 28 juil. 2005, 15:46

ca marche !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
il fallait lui assigné dans kel tableau ... et surtout kel niveau !!!
en fait si ca interresse quelqu'un ...
il faut boucler le lancement du <tr> et le code donne ca :
<?php
function afficher_tableau($tableau)
{
    ?>
<table width="360" height="20" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="62"><div align="center">&nbsp;</div></td>
    <td width="69"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">Réference</font></strong></div></td>
    <td width="108"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">Quantité</font></strong></div></td>
    <td width="68"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">Taille</font></strong></div></td>
    <td width="53"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">Prix</font></strong></div></td>
  </tr>
  
    <?php
    $nb_art = count($tableau);
    for($i = 0; $i < $nb_art; $i++)
    {
        ?>
	<tr>	
    <td>&nbsp;</td>
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['id_article'][$i]); ?></font></div></td>
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['qte'][$i]); ?></font></div></td>
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['taille'][$i]); ?></font></div></td>
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['prix'][$i]); ?></font></div></td>
        <?php
    }
    ?>
  </tr>
</table>
    <?php
}

if (empty($_SESSION['panier']))
{
?>
<p>Votre panier est vide</p>
<?php
}
else
{
    afficher_tableau($_SESSION['panier']);
}
?>
Yes ..... merci et encore merci ...
c'est vraiement sympa de m'avoir aidé ...
a+

par fxgordon » 28 juil. 2005, 15:41

ah oui !!! ok ...
mais ca marche pas :
il me sort que des "arrayarray..." !!!
cela ne vient il pas du fait que j'ai u array dans un autre array ???
Je cherche de ce côté ...
en tout cas merci encore ...
++

par Cyrano » 28 juil. 2005, 15:34

Bon reprennons alors. Pour afficher, tu fais un test: est-ce qu'il y a des articles dans le panier :
  1. Non : alors affiche la phrase "le panier est vide;
  2. Oui : Alors appelle la fonction qui contruit le panier sous forme d'un tableau HTML;
Donc il faut créer la fonction et lui faire construire logiquement ce tableau:
proposition de corrigé :
<?php
function afficher_tableau($tableau)
{
    ?>
<table width="360" height="20" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td width="62"><div align="center">&nbsp;</div></td>
    <td width="69"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">Réference</font></strong></div></td>
    <td width="108"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">Quantité</font></strong></div></td>
    <td width="68"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">Taille</font></strong></div></td>
    <td width="53"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">Prix</font></strong></div></td>
  </tr>
  <tr>
    <?php
    $nb_art = count($tableau);
    for($i = 0; $i < $nb_art; $i++)
    {
        ?>
    <td>&nbsp;</td>
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['id_article']); ?></font></div></td>
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['qte']); ?></font></div></td>
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['taille']); ?></font></div></td>
    <td><div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif"><?php echo($tableau['prix']); ?></font></div></td>
        <?php
    }
    ?>
  </tr>
</table>
    <?php
}

if (empty($_SESSION['panier']))
{
?>
<p>Votre panier est vide</p>
<?php
}
else
{
    afficher_tableau($_SESSION['panier']);
}

par fxgordon » 28 juil. 2005, 14:53

j'ai adapté ton script à mes besoins ....
Du coup, sa structure est la même ...
array(4) {
  ["id_article"]=>
  array(1) {
    [0]=>
    string(7) "hastala"
  }
  ["qte"]=>
  array(1) {
    [0]=>
    string(1) "1"
  }
  ["taille"]=>
  array(1) {
    [0]=>
    string(1) "U"
  }
  ["prix"]=>
  array(1) {
    [0]=>
    string(2) "25"
  }
}

Merci d'avance

par Cyrano » 28 juil. 2005, 13:17

Quelle est la structure de ton tableau de valeurs (array) ?

par fxgordon » 28 juil. 2005, 10:13

Bon je suis content, j'ai réussi à mettre tout en place, et à afficher les données du panier dans un pseudo tableau ... le soucis c'est lorsque je rajoute un article il me le place dans la meme cellule que le précedent et ainsi de suite ... du coup je me retrouve avec :

|image|reference|quantité|taille|prix|
levis nike 1 1UFU2525

et j'aimerais :

|image|reference|quantité|taille|prix|
levis 1 U 25
nike 1 F 25


j'utilise un foreach dans cet esprit :
if (empty($_SESSION['panier'])){
echo "Votre panier est vide";
$aff_vide="";
}
else
{
echo '<table width="360" height="20" border="0" cellspacing="0" cellpadding="0">';
echo '<tr>';
echo '<td width="62"><div align="center"></div></td>';
echo '<td width="69"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">R&eacute;ference</font></strong></div></td>';
echo '<td width="108"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">Quantit&eacute;</font></strong></div></td>';
echo '<td width="68"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">Taille</font></strong></div></td>';
echo '<td width="53"><div align="center"><strong><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">Prix</font></strong></div></td>';
echo '</tr>';
echo '<tr>';
echo '<td>';echo '</td>';
			
function afficher_tableau($tableau) 
    {

    foreach ($tableau as $cle=>$valeur) 
        {

        if(is_array($valeur)) 
            {


            afficher_tableau($valeur); 
            
            }
        
        else
            {
			
			echo '<td>
			<div align="center"><font size="-7" face="Verdana, Arial, Helvetica, sans-serif">' .$valeur. '</font></div></td>';
			
            
            }
        } 
    } 
    

afficher_tableau($_SESSION['panier']); 
			echo '</tr>';
			echo '</table>';
$aff_vide="<font size=\"-7\" face=\"Verdana, Arial, Helvetica, sans-serif\"><A href=\"voir_panier.php?vide=1\">Vider le sac</A></font>";

}

Je n'arrive pas à extraire correctement les données ...
Ou alors passer par $_SESSION["panier"][id_article'][$i]
pis boucler sur le $i .... si ya du conseil et même de l'aide ....
Merci d'avance

par fxgordon » 27 juil. 2005, 14:01

ALORS LA ... SUPER !!! j'ai vraiment compris mon erreur ...
Je vais mettre en pratique tout cela ... et t'informe de mes "progressions" :o
C'est pour afficher correctement le panier qui va falloir que j'adapte les valeur avec celle de ma bdd afin de pouvoir afficher l'image .. etc ...
En tout cas merci bcp ...
+++

par Cyrano » 27 juil. 2005, 09:36

Pas tout à fait. Je reprends plus en détail.

Ta variable de session $_SESSION['panier'][$select] ne correspond pas à grand chose parce que $select contient une valeur variable : ce qui peut varier, c'est le contenu, mais le contenant doit être identifiable.

Tu crées une vairable à trois dimensions composée de tableau et de sous tableaux. Première chose à créer, le panier global :
$_SESSION['panier'] = array();
Ça, c'est le contenant général de ton panier. Tu dois le subdiviser en compartiments avant d'y stocker quoique ce soit de manière organiser pour pouvoir trier ce contenu et le manipuler. Là, tu as trois partie à créer pour les quantités, les tailles et les prix.
$_SESSION['panier']['qte'] = array();
$_SESSION['panier']['taille'] = array();
$_SESSION['panier']['prix'] = array();
Voilà, là, nous avons maintenant un panier avec trois compartiments pour y mettre nos articles. Mais on ne peut pas mettre nos articles en vrac, il faut pouvoir retrouver nos articles, les tailles correspondant exctement à chaque article ajouté et la taille aussi. Donc ce sont également des tableaux, mais si "panier" est un tableau associatif (donc avec des index nommées "qte", "taille" et "prix", chaque compartiment est un tableau indexé, c'est à dire que les index seront numérotés de 0 à n.

Prenons un cas : supposons que ton site est un magasin de vêtements. J'ajoute dans mon panier 2 pantalons taille 56 d'une valeur de 24,95€ : première chose qu'on va remarquer : il manque un identifiant permettant de dire de quel type d'article il s'agit . Rajoutons ce compartiment au tableau.
$_SESSION['panier']['id_article'] = array();
Maintenant, nous avons le point manquant. La référence de notre pantalon est "phlevis501". La première chose à faire avant d'ajouter dans le panier, c'est de vérifier que le paier existe, sinon, on le crée. Puis on ajoute dedans. Le code sera le suivant:
<?php
/* Démarrage ou prolongation de la session */
/* Article exemple */
$select = array();
$select['id'] = "phlevis501";
$select['qte'] = 2;
$select['taille'] = "56";
$select['prix'] = 24.95;

/* On vérifie l'existence du panier, sinon, on le crée */
if(!isset($_SESSION['panier']))
{
    $_SESSION['panier'] = array();
    $_SESSION['panier']['id_article'] = array();
    $_SESSION['panier']['qte'] = array();
    $_SESSION['panier']['taille'] = array();
    $_SESSION['panier']['prix'] = array();
}

/* Ici, on sait que le panier existe, donc on ajoute l'article dedans. */
array_push($_SESSION['panier']['id_article'],$select['id']);
array_push($_SESSION['panier']['qte'],$select['qte']);
array_push($_SESSION['panier']['taille'],$select['taille']);
array_push($_SESSION['panier']['prix'],$select['prix']);

/* Affichons maintenant le contenu du panier : */
?>
<pre>
<?php
var_dump($_SESSION['panier']);
?>
</pre>
Et le résultat affiché sera le suivant :
array(4) {
["id_article"]=>
array(1) {
[0]=>
string(10) "phlevis501"
}
["qte"]=>
array(1) {
[0]=>
int(2)
}
["taille"]=>
array(1) {
[0]=>
string(2) "56"
}
["prix"]=>
array(1) {
[0]=>
float(24.95)
}
}
Note bien que le prix qui est dans la variable $_SESSION['panier']['prix'][0] correspond au prix unitaire de l'article. Donc pour avoir le prix total du panier, tu devras commencer par multiplier le prix par la quantité puis ensuite additionner les articles.

Est-ce que c'est plus clair comme ça ? :)

par fxgordon » 27 juil. 2005, 00:37

oula ... alors là je suis un peu paumé ...
est ce bien ce genre de chose que tu veux dire ...
if( isset($_SESSION['panier'][$select]) ) {
array_push($_SESSION['panier']['qte'], $qte)
array_push($_SESSION['panier']['taille'], $taille)
array_push($_SESSION['panier']['prix'], $prix)
}

par Cyrano » 27 juil. 2005, 00:13

Tes variables de session sont des tableaux, donc au lieu de rentrer de nouvelles valeurs en faisant += il faut les ajouter autrement:
array_push($_SESSION['panier']['qte'], $qte)
Note bien que la seconde dimension de ta veriable de session a le même nom partout : $select: ce n'est pas bon, regarde comment je l'ai nommée. Fais pareil pour les autres parties de ton panier pour bien distinguer chaque élément: tu feras le parallèle entre les éléments par l'index de la troisième dimension:
$_SESSION['panier']['qte'][0];
$_SESSION['panier']['prix'][0];
$_SESSION['panier']['taille'][0];
// ligne suivante du tableau :
$_SESSION['panier']['qte'][1];
$_SESSION['panier']['prix'][1];
$_SESSION['panier']['taille'][1];
// etc...

Panier oui mais avec plusieurs variables ...

par fxgordon » 26 juil. 2005, 23:59

Bonsoir ...
Je développe tant bien que mal un panier ...
je réussi à mettre les articles dans le panier, afficher ce panier avec le nom du prod et sa quantité ...
par contre je veux récuperer la taille et son prix ...
voilà ce que j'utilise dans le fichier appelé pour l'ajout d'un produit ...
c'est là que ca va pas ... :
<?php session_start();
$select = $_GET['select'];
$qte = $_GET['qte'];
$taille = $_GET['taille'];
$prix = $_GET['prix'];
     
if( isset($_SESSION['panier'][$select]) ) {
$_SESSION['panier'][$select] += $qte;
$_SESSION['panier'][$select] += $prix;
$_SESSION['panier'][$select] += $taille;

} else {
$_SESSION['panier'][$select] = $qte;
$_SESSION['panier'][$select] = $prix;
$_SESSION['panier'][$select] = $taille;

}
$_SESSION['nbprod'] = count($_SESSION['panier']);
     
header('Location: voir_panier.php');

?>

en fait il ne me rentre pas les $prix et $taille ... ou du moins il me remplace la $qte par la $taille ... pas cool ... si qqun pouvait m'éclairer ...