Page 1 sur 2

Encore un header...

Posté : 28 nov. 2005, 01:37
par Zurg
Salut tout le monde,

me revoici avec une chtite question...

J'ai parcouru la FAQ et ai effectué une recherche, mais je n'ai pas vraiment trouvé de réponse. La voici :
Est-il impossible de faire 2 redirection successives avec la fonction header ?

Je précise, je suis toujours dans mes paniers et compagnie (pour ceux qui ont suivis..!) et sur ma page panier.php, j'effectue une redirection vers une page catalogue.php avec des variables d'url via la fonction header().

Bon, jusque-là, ça marche impeccable. Lorsque la variable d'url prend une certaine valeur, la page commande.php est incluse (système des pseudo-frames).
Et au début de login.php, je teste une variable de session pour vérifier le statut de l'utilisateur, si le statut n'est pas celui désiré, hop ! redirection via header() vers la page login.php.

Seulement, c'est là que le bât blesse... j'obtiens le fameux "header already sent..."

est-ce parce-que j'ai déjà fait une redirection, ou est-ce autre chose ?

Merci d'avance,
:wink:

@ +

Posté : 28 nov. 2005, 02:02
par Elie
Passe par une fonction javascript.

<script> location.href='ta_page.php'; </script>

Et ca sur autant de page differetnes que tu veux !

Posté : 28 nov. 2005, 04:19
par Zurg
Salut Elie,

merci de ta réponse, le problème c'est que si javascript n'est pas activé sur le poste client, la redirection ne s'effectuera pas, et comme c'est le moment où la commande est passée, il faut absoluement que la redirection marche...

que puis-je faire d'autre ?

Posté : 28 nov. 2005, 04:42
par Elie
Ne fait pas de redirection alors !

Stock les infos dans des $_SESSION et debrouille toi comme ca...

La plus part des caddie virtuel marche comme ca !

Posté : 28 nov. 2005, 14:22
par Zurg
RE-salut

les sessions, je m'en serts déjà, je ne vois pas trop comment ça pourrait m'éviter une redirection en fait, le truc c'est que je retourne le problème dans tous les sens, et que je ne vois pas comment faire autrement qu'avec une redirection...

:?:

Posté : 28 nov. 2005, 14:23
par jeff
est ce que tu peut nous faire voir le bout de code

Posté : 28 nov. 2005, 14:34
par Zurg
bien sûr (bonjour jeff ;) )

Alors ça c'est la page panier.php
<?php
//repris plus bas en plus lisible
Et c'est cette redirection qui ne marche pas !

Voilà, j'espère que c'est assez clair...

Merci ;)[/b]

Posté : 28 nov. 2005, 15:09
par mere-teresa
Ton code est un peu long, tu ne crois pas ?
Peux tu cibler les parties qui nous intéresssent ?

Posté : 28 nov. 2005, 15:15
par Zurg
Certes, on peut tailler un peu !!

donc, en enlevant les trucs inutiles pour l'instant, ça donne la page panier (sans html ) :
<?php
session_start();
//init des variables
	if (!isset($_SESSION['total'])) $_SESSION['total']="";
	if(!isset($_GET['ap'])) $ap="";//init de ajoutPanier(ap) si non déclaré
	else  $ap=$_GET['ap']; 
	if(!isset($_GET['mp'])) $mp="";//init de modifPanier(mp) si non déclaré
	else $mp=$_GET['mp'];
	if(!isset($_GET['sp'])) $sp="";//init de suppPanier(sp) si non déclaré
	else $sp=$_GET['sp'];
	if(!isset($_GET['ec'])) $ec="";//init de enregistrerCommande(ec) si non déclaré
	else $ec=$_GET['ec'];
	if ((!isset($_SESSION['liste']))&&($ap=="")) $liste[]=array("",1,0,0);//init de liste si VIDE
	if (isset($_SESSION['liste'])) $liste=$_SESSION['liste'];//recup de la liste de la session
	if(!isset($_GET['ref'])) $ref="";
	else $ref=$_GET['ref'];
	
require_once('../Connections/cnn.php');
mysql_select_db($database_cnn, $cnn);

// caddy
$query_rscaddy= sprintf("SELECT * FROM articles WHERE articles.reference='%s' ORDER BY articles.libelle ASC" , $ref);
$rscaddy=mysql_query($query_rscaddy, $cnn) or die(mysql_error());
$row_rscaddy = mysql_fetch_assoc($rscaddy);
$totalRows_rscaddy = mysql_num_rows($rscaddy);

// menu gauche
$query_rsproduits = "SELECT rubriks.theme, rubriks.ID FROM rubriks ORDER BY rubriks.theme";
$rsproduits = mysql_query($query_rsproduits, $cnn) or die(mysql_error());
$row_rsproduits = mysql_fetch_assoc($rsproduits);
$totalRows_rsproduits = mysql_num_rows($rsproduits);

// j'ai viré les ajouts, modifs et suppression de panier
//----------------------------------------------------COMMANDER

if ($ec=="COMMANDER")
{
	if(!isset($_GET['action'])) 
	$_SESSION['action']="ENREGISTRE";//mémorise l'action 
	header("Location: catalogue.php?ec=COMMANDER");
}
?>
La page centre.php, juste le test de la variable 'ec' et l'include :
if (!isset ($_GET['rubrikID'])) 
	{
	if (isset($_GET['ec']) && ($_GET['ec'] == "COMMANDER"))
		{
		$ec = $_GET['ec'];
		include ("commande.php");
		exit;
		}
	else
		{
		include ("defaut.php");
		exit;
		}
Et enfin la redirection contenue dans commande.php :
<?php
if (!isset($_SESSION['statut'])||($_SESSION['statut'] != "client"))
	{
	header ("Location: login.php"];
	} 
?>
Voilà, j'espère que c'est mieux comme ça !

Posté : 28 nov. 2005, 15:17
par jeff
pour acceder a la page command.php doit on etre loguer??
si oui pourquoi ne pas faire le teste dans cette page?avec la redirection

Posté : 28 nov. 2005, 17:22
par Zurg
Oui, on fait le test sur la page commande.php pour vérifier le statut: on est soit logué et le chargement continue, soit non logué (càd que $_SESSION['statut'] est différent de "client" ) et on est redirigé vers la page login.php.

C'est ce que j'ai fait, mais la redirection ne fonctionne pas...

Ou alors j'ai mal compris ce que tu m'as dit...

Posté : 28 nov. 2005, 21:01
par Truc
Salut, je vois pas pourquoi on ne pourrai pas mettre plusieurs Header de redirection.

tu inclus le header sur la page "centre.php", on peut donc considèrer que le code de "commande.php" se trouve sur cette page !

regarde donc sur cette meme page (centre.php) si tu n'a pas du code Html ou autre.

sinon tu as ausi un ] a la place de ) dans ce meme header:
header ("Location: login.php"]<--; 

Posté : 28 nov. 2005, 21:17
par Zurg
J'ai beau chercher, je ne vois pas où se trouve le html, pas de echo ni rien, le seul truc d'un peu bizarre, c'est que la page centre.php est inclue dans la page catalogue.php, cela peut-il jouer ?

Sinon, merci Truc pour le ] à la place de ), je m'en suis rendu compte peu de temps après avoir posté, mais je n'ai pas corrigé sur le post...

Posté : 28 nov. 2005, 21:18
par Truc
sinon je pense que jeff avait plus quelque chose comme ça en tete:
if (!isset ($_GET['rubrikID']))
    {
		if (isset($_GET['ec']) && ($_GET['ec'] == "COMMANDER"))
		{
		   $ec = $_GET['ec'];
		   if (!isset($_SESSION['statut'])||($_SESSION['statut'] != "client"))
			{
				header ("Location: login.php"];
				exit;
			}
			else
				include ("commande.php");			
		} 
ou encore un pb de exit apres le include.

le seul truc d'un peu bizarre, c'est que la page centre.php est inclue dans la page catalogue.php, cela peut-il jouer ?
biensur il faut verifier sur toute les pages qui comportent un fichier inclus

Posté : 28 nov. 2005, 21:42
par Zurg
Effectivement, j'avais pas compris ce qu'il voulait dire, merci, je vais essayer puis je donne des nouvelles...

biensur il faut verifier sur toute les pages qui comportent un fichier inclus
Il est clair que ma page catalogue.php contient du HTML, mais pas moyen de s'en passer...