Page 1 sur 2

Session et tableaux

Posté : 14 juin 2005, 09:57
par xgregx
bonjour,

j'ai une page shop ou j'enregistre les produits dans une session
Pour chaque produit, j'enregistre:
1 Le nom du produit
2 La quantité
3 Le prix unitaire

J'ai du mal a manipuler les tableaux a 3 dimensions.
session_start();

if (isset($_SESSION["caddie"])) {
        $caddie = $_SESSION["caddie"];
    } else {
        $caddie = array();
    }     

$nom = $_GET['nom'];
$qt = $_GET['qt'];
$pu = $_GET['pu'];

if (isset($_GET["ajout"])) {      
$caddie = array(Nom=>$nom,quantite=>$qt,prixu=>$pu);

              
$_SESSION["caddie"] = $caddie;
header("Location: ".$_SERVER["PHP_SELF"]);
die();
}     

Puis dans la page commande je fais le récapitulatif:

mais là, je sèche pour lire mon tableau avec une boucle...

Pouvez vous critiquer mon code?
Merci

Posté : 14 juin 2005, 10:05
par seayoung
mm je pense que ta variable
 $_SESSION["caddie"] 
aura comme valeur array car je pense que tu as un pb avec ta déclaration
$caddie
est un tableau ....
je ne saisie pas bien ce que tu veux faire avec tes sessions cadie ...
en gros tu voudrais que chaque utilisateur est un cadie a lui ???
ou que lorsque tu fais une commande ca t ouvre une session ???
ou attribuer un cadie par utilisateur ???

Posté : 14 juin 2005, 10:21
par xgregx
bah en fait ce que je veux c'est que pour chaque utilisateur j'ouvre une session dans laquelle est stockée le caddie avec les produits de sa commande.

La caddie est un tableau a 3 dimensions avec pour chaque produit:
le nom
le prix unitaire
la quantité.

J'espère être clair... :oops:

Posté : 14 juin 2005, 11:04
par seayoung
donc il me semble que sauf si tu transforme cadie en une variable et non un tableau tu auras des problèmes ....

Posté : 14 juin 2005, 11:04
par Cyrano
fais un var_dump($_SESSION['caddie']); pour voir au juste comment récupérer quoi:
Comme tu as de multiples dimensions, il faut que pour lire ça dans une boucle tu fasses des comptage et que tu indiques à quel niveau il faut compter.

Fais nous voir la structure de ton tableau $_SESSION['caddie'].

Posté : 14 juin 2005, 11:14
par xgregx
Voilà mon code, j'ai un peu avancé.
J'ai bien UN enregistrement mais, j'en veux plusieur mais je ne sais pas comment avancer mon curseur dans mon tableau
session_start();

if (isset($_SESSION["caddie"])) {
        $caddie = $_SESSION["caddie"];
    } else {
        $caddie = array();
    }     

$nom = $_GET['nom'];
$qt = $_GET['qt'];
$pu = $_GET['pu'];
$sub = $qt * $pu;

if (isset($_GET["ajout"])) {      
$caddie = array(Produit=> array(Nom => $nom, Quantité=>$qt, "Prix unitaire"=>$pu, "Sous total"=>$sub));

              
$_SESSION["caddie"] = $caddie;
header("Location: ".$_SERVER["PHP_SELF"]);
die();
} 
Pour lire mon tableau, là il me lit que le dernier enregistrement.

foreach($caddie as $clef => $valeur){
	foreach($caddie[$clef] as $clef2 => $valeur2)
		echo $clef2." : ".$valeur2."<br>\n";
}

Posté : 14 juin 2005, 11:52
par Cyrano
Essaye comme ça :
<?php
session_start();

if (isset($_SESSION["caddie"]))
{
    $caddie = $_SESSION["caddie"];
}
else
{
    $caddie = array();
    $caddie = array("Produit"=> array("Nom", "Quantité", "Prix unitaire", "Sous total"));
}

$nom = $_GET['nom'];
$qt = $_GET['qt'];
$pu = $_GET['pu'];
$sub = $qt * $pu;

if (isset($_GET["ajout"]))
{
    $caddie = array("Produit"=> array("Nom" => $nom, "Quantité"=>$qt, "Prix unitaire"=>$pu, "Sous total"=>$sub));
    array_push($caddie['Produit']['Nom'], $nom);
    array_push($caddie['Produit']['Quantité'], $pu);
    array_push($caddie['Produit']['Sous total'], $sub);

    $_SESSION["caddie"] = $caddie;
    header("Location: ".$_SERVER["PHP_SELF"]);
    die();
}
?>

Posté : 14 juin 2005, 12:02
par xgregx
Là j'ai un...
Warning: First argument to array_push() needs to be an array in d:\easyphp\www\odonae\shop\shop.php on line 22
...que je ne comprends pas. ça te parle à toi Cyrano?

Posté : 14 juin 2005, 12:04
par Cyrano
Autant pour moi, j'ai oublié un morceau de code:
<?php
session_start();

if (isset($_SESSION["caddie"]))
{
    $caddie = $_SESSION["caddie"];
}
else
{
    $caddie = array();
    $caddie = array("Produit"=> array("Nom", "Quantité", "Prix unitaire", "Sous total"));
}

$nom = $_GET['nom'];
$qt = $_GET['qt'];
$pu = $_GET['pu'];
$sub = $qt * $pu;

$caddie['Produit']['Nom'] = array();
$caddie['Produit']['Quantité'] = array();
$caddie['Produit']['Sous total'] = array();
if (isset($_GET["ajout"]))
{
    array_push($caddie['Produit']['Nom'], $nom);
    array_push($caddie['Produit']['Quantité'], $pu);
    array_push($caddie['Produit']['Sous total'], $sub);

    $_SESSION["caddie"] = $caddie;
    header("Location: ".$_SERVER["PHP_SELF"]);
    die();
}
?>

Posté : 14 juin 2005, 12:10
par xgregx
Je suis désolé mais rebelotte !
Merci pour ton aide en tout cas !
Ca fait plaisir !
Warning: First argument to array_push() needs to be an array in d:\easyphp\www\odonae\shop\shop.php on line 25

Warning: First argument to array_push() needs to be an array in d:\easyphp\www\odonae\shop\shop.php on line 26

Warning: First argument to array_push() needs to be an array in d:\easyphp\www\odonae\shop\shop.php on line 27

Warning: Cannot add header information - headers already sent by (output started at d:\easyphp\www\odonae\shop\shop.php:25) in d:\easyphp\www\odonae\shop\shop.php on line 30

Posté : 14 juin 2005, 12:27
par Cyrano
oups, j'ai oublié d'enlever une ligne, j'édite le précédent plutôt que de reposter.

Posté : 14 juin 2005, 12:30
par Cyrano
Bon, décidément, ça me réussit pas de faire plusieurs trucs en même temps: voilà le corrigé, je suis complètement à l'ouest ce matin:
<?php
session_start();

if (isset($_SESSION["caddie"]))
{
    $caddie = $_SESSION["caddie"];
}
else
{
    $caddie = array("Produit"=> array());
    $caddie['Produit']['Nom'] = array();
    $caddie['Produit']['Quantité'] = array();
    $caddie['Produit']['Sous total'] = array();
}


if (isset($_GET["ajout"]))
{
    $nom = $_GET['nom'];
    $qt = $_GET['qt'];
    $pu = $_GET['pu'];
    $sub = $qt * $pu;
    array_push($caddie['Produit']['Nom'], $nom);
    array_push($caddie['Produit']['Quantité'], $pu);
    array_push($caddie['Produit']['Sous total'], $sub);

    $_SESSION["caddie"] = $caddie;
    header("Location: ".$_SERVER["PHP_SELF"]);
    die();
}
?>

Posté : 14 juin 2005, 13:06
par xgregx
Je t'envoie tout le code car là j'ai toujours ce pb de
Warning: First argument to array_push() needs to be an array in d:\easyphp\www\odonae\shop\shop.php on line 23

Warning: First argument to array_push() needs to be an array in d:\easyphp\www\odonae\shop\shop.php on line 24

Warning: First argument to array_push() needs to be an array in d:\easyphp\www\odonae\shop\shop.php on line 25

Warning: Cannot add header information - headers already sent by (output started at d:\easyphp\www\odonae\shop\shop.php:23) in d:\easyphp\www\odonae\shop\shop.php on line 28

Code : Tout sélectionner

<? session_start(); if (isset($_SESSION["caddie"])) { $caddie = $_SESSION["caddie"]; } else { $caddie = array("Produit"=> array()); $caddie['Produit']['Nom'] = array(); $caddie['Produit']['Quantité'] = array(); $caddie['Produit']['Sous total'] = array(); } if (isset($_GET["ajout"])) { $nom = $_GET['nom']; $qt = $_GET['qt']; $pu = $_GET['pu']; $sub = $qt * $pu; array_push($caddie['Produit']['Nom'], $nom); array_push($caddie['Produit']['Quantité'], $pu); array_push($caddie['Produit']['Sous total'], $sub); $_SESSION["caddie"] = $caddie; header("Location: ".$_SERVER["PHP_SELF"]); die(); } include ("header.php"); include ("menu.php"); ?> <div id="droite"> <a href="http://www.odonae.com" title="Retour Accueil" ><img src="img/tete.gif" /></a> <p> <? include ("cnx.php"); $sql = "select * from Oshopproduits"; $result = mysql_query($sql); $nbp = mysql_num_rows($result); while($var=mysql_fetch_array($result)){ $id = $var["SP_id"]; $nom = $var["SP_nom"]; $mini = $var["SP_minia"]; $large = $var["SP_large"]; $pu = $var["SP_prix"]; ?> <div class="produit"> <a href='javascript:popup("affiche.php?id=<? echo $id; ?>")'><img src="<? echo $mini; ?>" /></a> <form method="get" action="shop.php"> <input type="hidden" name="ajout" value="AJOUT"> <input type="hidden" name="nom" value="<?= $nom ?>"> <input type="hidden" name="pu" value="<?= $pu ?>"> <select name="qt" class="form"> <option value="1" selected>1</option> <option value="2">2</option> <option value="3">3</option> </select> <input type="submit" value="Ajouter" class="form"> </form> </div> <? } ?> </div>

Posté : 14 juin 2005, 13:20
par Cyrano
Je crois que ça doit venir de ce que tu es toujours sur la même session, or l'ancienne variable de session n'est pas bonne dans sa structure. Ferme ton navigateur et rouvre le sur ta page pour remettre le truc à plat. Ce message d'etrreur n'est pas normal autrement.

Posté : 14 juin 2005, 13:26
par sadeq
Pourquoi faire compliqué quand on peut faire simple :
1. Si to caddie n'est pas dans la session, il est null.
2. Quand tu te mets en mode Ajout tu crée une ligne dans le tableau caddie (ligne composée de Nom, Quantité et Sub) que tu mémorise dans la session.
session_start(); 

if (isset($_SESSION["caddie"])) 
{ 
    $caddie = $_SESSION["caddie"]; 
} 
else 
{ 
    $caddie = null; 
} 

$nom = isset($_GET['nom'])?$_GET['nom']:null; 
$qt = isset($_GET['qt'])?$_GET['qt']:0; 
$pu = isset($_GET['pu'])?$_GET['pu']:0; 
 

if (isset($_GET["ajout"]) && $nom != null && $qt>0 && $pu>0) 
{ 
	$sub = $qt * $pu;	
	$caddie[]= array($nom,$qt,$sub); 
    $_SESSION["caddie"] = $caddie; 
    //header("Location: ".$_SERVER["PHP_SELF"]);  
} 
echo "
<h1>Panier</h1>
<form>Nom <input name=nom> Qté <input name=qt> Prix <input name=pu> <input type=submit name=ajout value=Ajouter></form>
";

if ($caddie != null) {
	$total = 0;
	echo "<h3>Produits achetés</h3><table><tr><th>Nom<th>Qté<th>Total";
 	foreach($caddie as $ligne) 
	 if ($ligne != null) {
		echo "<tr><th>".$ligne[0]."<th>".$ligne[1]."<th>".$ligne[2];
		$total += $ligne[2];
	}
	echo "<tr><th colspan=2>Total (ht)<th>$total</table>";
}