Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 22/04/2007, 21h15   #1
Invité de passage
 
Inscription : avril 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 7
Points : 2
Points : 2
Par défaut $_session et header(url)

Bonjour,

Je cherche à créer un tableau multidimentionnel de ce genre :
$_SESSION['facture'][0][quantite]=8 //par exemple...

Lorsque l'utilisateur du site ajoute une autre vente, cela enregistre un nouveau tableau :
$_SESSION['facture'][1][quantite]=5

Le souci provient de ce qu'après chaque enregistrement d'un array supplémentaire, je fais un header("location: url"); qui ramène vers la page où le dernier article avait été choisi.

Du fait de ce header(url) le premier tableaux n'est pas enregistré dans $_SESSION. En revanche, quand je comment le header(url) ou si je dit de payer la facture immédiatement après l'enregistrement du premier tableau, ce premier tableau de $_SESSION est bien trouvé !

Quelqu'un comprend ça ???

Merci d'avance !
thy75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 08h55   #2
Membre éclairé
 
Avatar de TucSale
 
Inscription : novembre 2005
Messages : 265
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2005
Messages : 265
Points : 301
Points : 301
Envoyer un message via MSN à TucSale
bonjour,

Peux tu nous envoyer les partis des code concernant tes varaibles de sessions de ta pages 'choix article'.

Car pour moi tu écrase ou supprime le tableau et le problème ne viens pas de ton header.
TucSale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 09h20   #3
Invité de passage
 
Inscription : avril 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 7
Points : 2
Points : 2
Salut,

Merci de ta réponse.

Voici le bout de code de index.php :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 
if (isset($_GET['a'])) //c'est le cas pour les achats et ventes
{
include_once('get.a.php');
 
switch ($_GET['cl']){
	case '':
	$envoi= SCRIPT_ADR.'?i='.$_GET['i'].'&next='.$_GET['next'];
	break;
 
	default:
	$envoi= SCRIPT_ADR.'?i='.$_GET['i'].'&next='.$_GET['next'] .'&cl='.$_GET['cl'];
	break;
	}
session_write_close();
 header("Location: $envoi"); //voici le header qui fait mal....
 exit;
}
Après cela c'est get.a.php qui est exécuté. Dans ce fichier je teste, dans une boucle switch, si $_GET et $_POST contiennent des ventes et demande de facture. Voici le passage de get.a.php qui s'exécute pour les ventes de plusieurs articles :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
case 'vente':
	$act = $_GET['a']; //je vends
	$id = $_GET['no']; //identifiant du produit vendu
	$qte = $_POST['qte']; //quantité vendue
	$actions->plusMoinsUn($act, $id, $qu_idvin, $qu_majvin, $qu_ou, $qte); //change le stock
	$actions->empti_vendi($taux_tva, $id, $qte, $qu_idvin, $qu_vte, $qu_empt); //enregistre la vente pour le calcul t.v.a.
	if($_POST['f'] == 'f') //c'est à dire si une facture est demandée
{
		if(!isset($_SESSION['facture']))
//si c'est le premier article ajouté à la facture (et c'est ceci qui est "perdu":
{
			$facture->nouvelle($id, $qte, $qu_idvin, $_POST['i'], $taux_tva, $smarty);
		}else{
//s'il y a déjà des articles dans le array facture :
			$facture->suivante($id, $qte, $qu_idvin, $_POST['i'], $taux_tva, $smarty);
		}
	}
	break;
Et voici la méthode $facture->nouvelle de mon fichier Facture.class.php :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public function nouvelle ($id, $qte, $qu_idvin, $i, $taux_tva, $smarty){
	$huh = $qu_idvin . $id;
//$huh est la requete mysql permettant de 
//chercher des infos relatives à l'article vendu.
	$demande = $this->execrequete($huh);
	while ($nn = $this->objetsuivant($demande)){
	$pr_ht =  $nn->prix_empt_ht;
	$port = $nn->port;
	$coeff = $nn->coeff;
	$_SESSION['facture'][1]['qte'] = $qte;
	$_SESSION['facture'][1]['nom_vin'] = $nn->nom_vin;
	$_SESSION['facture'][1]['annee'] = $nn->annee;
	}
	$coefTVA = ($taux_tva + 100) / 100;
	$vte_ttc = round(($pr_ht + $port ) * $coeff, 2);
	$vte_ht = round($vte_ttc / $coefTVA, 2);
	$_SESSION['facture'][1]['prix_ht'] = $vte_ht;
	$_SESSION['facture'][1]['prix_ht_tot'] = $vte_ht * $qte;
				if($i == 'i'){
				$this->imprime($taux_tva);
//si j'appelle cette méthode imprime ici, $_SESSION['facture'] n'est pas perdu
				}else{
				ob_start($_SESSION['facture']);
//tentative débile de garder $_SESSION['facture'] puisque immédiatement
//après ce bloc, index.php continue de s'exécuter, et je tombe sur 
// le header...
				}
	}

Un grand merci de m'avoir répondu. J'espère que tu peux éclairer la question...
thy75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 10h14   #4
Membre éclairé
 
Avatar de TucSale
 
Inscription : novembre 2005
Messages : 265
Détails du profil
Informations personnelles :
Âge : 30

Informations forums :
Inscription : novembre 2005
Messages : 265
Points : 301
Points : 301
Envoyer un message via MSN à TucSale
bonjour,

Je ne vois pas trop ou ca coince, vérifie juste si tes session_start() sont bien présents, et fait un var_dump($_SESSION) au début de tes scripts


En revanche je me pause des questions sur ob_start et session_write_close... Désolé, de ne pas pouvoir t'aider plus..


P.S: error_reporting = E_ALL dans le php.ini m'aide bien à débugguer.
TucSale est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/04/2007, 15h13   #5
Invité de passage
 
Inscription : avril 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 7
Points : 2
Points : 2
J'ai trouvé une manière d'éviter le header et tout march nickel maintenant. Merci beaucoup pour ta réponse.
thy75 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 10h24.


 
 
 
 
Partenaires

Hébergement Web