Session et tableaux

Eléphant du PHP | 64 Messages

14 juin 2005, 09:57

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

Eléphant du PHP | 357 Messages

14 juin 2005, 10:05

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 ???

Eléphant du PHP | 64 Messages

14 juin 2005, 10:21

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:

Eléphant du PHP | 357 Messages

14 juin 2005, 11:04

donc il me semble que sauf si tu transforme cadie en une variable et non un tableau tu auras des problèmes ....

Mammouth du PHP | 19672 Messages

14 juin 2005, 11:04

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'].
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 64 Messages

14 juin 2005, 11:14

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";
}

Mammouth du PHP | 19672 Messages

14 juin 2005, 11:52

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();
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 64 Messages

14 juin 2005, 12:02

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?

Mammouth du PHP | 19672 Messages

14 juin 2005, 12:04

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();
}
?>
Modifié en dernier par Cyrano le 14 juin 2005, 12:27, modifié 1 fois.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 64 Messages

14 juin 2005, 12:10

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

Mammouth du PHP | 19672 Messages

14 juin 2005, 12:27

oups, j'ai oublié d'enlever une ligne, j'édite le précédent plutôt que de reposter.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Mammouth du PHP | 19672 Messages

14 juin 2005, 12:30

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();
}
?>
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 64 Messages

14 juin 2005, 13:06

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>

Mammouth du PHP | 19672 Messages

14 juin 2005, 13:20

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.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

14 juin 2005, 13:26

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>";
}
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène