Encore un header...

Eléphant du PHP | 148 Messages

28 nov. 2005, 01:37

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:

@ +
Et hop !

Mammouth du PHP | 1339 Messages

28 nov. 2005, 02:02

Passe par une fonction javascript.

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

Et ca sur autant de page differetnes que tu veux !
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphant du PHP | 148 Messages

28 nov. 2005, 04:19

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 ?
Et hop !

Mammouth du PHP | 1339 Messages

28 nov. 2005, 04:42

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 !
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Eléphant du PHP | 148 Messages

28 nov. 2005, 14:22

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

:?:
Et hop !

Mammouth du PHP | 1311 Messages

28 nov. 2005, 14:23

est ce que tu peut nous faire voir le bout de code

Eléphant du PHP | 148 Messages

28 nov. 2005, 14:34

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]
Et hop !

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

28 nov. 2005, 15:09

Ton code est un peu long, tu ne crois pas ?
Peux tu cibler les parties qui nous intéresssent ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphant du PHP | 148 Messages

28 nov. 2005, 15:15

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 !
Et hop !

Mammouth du PHP | 1311 Messages

28 nov. 2005, 15:17

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

Eléphant du PHP | 148 Messages

28 nov. 2005, 17:22

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...
Et hop !

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 nov. 2005, 21:01

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 148 Messages

28 nov. 2005, 21:17

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...
Et hop !

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

28 nov. 2005, 21:18

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

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Eléphant du PHP | 148 Messages

28 nov. 2005, 21:42

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...
Et hop !