Aller au contenu

Redirection sous condition.


kattig

Sujets conseillés

Bonsoir,

J'ai un petit soucis concernant la redirection d'une page. Je pensais avoir bien écrit le code, cependant, cela ne fonctionne pas et affiche un message d'erreur.

Mon code est le suivant:

if (ma condition)
{
 header("Location: ./accueil.php?page=reservation.php");
}

Le message d'erreur qui s'affiche est:

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\projet_ci2\accueil.php:11)

Je vous remercie d'avance pour votre aide.

kattig

Lien vers le commentaire
Partager sur d’autres sites

Tu dois afficher quelque chose avant ta redirection.

Il suffit d'un caractere (ou d'une balise) affiché sur ta page pour que cela ne fonctionne pas.

Ceci te donnera une erreur :

<html>
if (ma condition)
{
header("Location: ./accueil.php?page=reservation.php");
}

alors que ce qui suit sera correct :

if (ma condition)
{
header("Location: ./accueil.php?page=reservation.php");
}
<html>
...

Hervé

EDIT : exemple

Modifié par webadev
Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Hervé,

Je vous remercie pour votre réponse.

Selon vous, ce serait une balise ou un caractère qui serait la cause de mon problème.

Dans ma page, il y a des balises et autres avant et après le code permettant une redirection, je ne vois pas pourquoi cela gênerait...

J'ai essayé de faire ce que vous m'avez conseillez (ce que je pense avoir compris) cependant, cela ne fonctionne toujours pas.

A vrai dire, je suis assez perdue...

kattig

Lien vers le commentaire
Partager sur d’autres sites

Place toute ta page dans un codebox ou tu peux me la pm je regarderais.

D'où vient ton problème.

Hervé

Lien vers le commentaire
Partager sur d’autres sites

Voici mon code de ma page qui est actuellement en construction:

<html>
<head>
</head>
<body>
<?php
if(isset($_POST['salle']))
{
$fichier=fopen("salle.txt","r");
$i=0;
while(!feof($fichier))
{
$fsalle[$i]=explode("|",fgets($fichier,255));
$i=$i+1;
}
$ls=$i;
fclose($fichier);
$fichier=fopen("administrateur.txt","r");
$i=0;
while(!feof($fichier))
{
$fens[$i]=explode("|",fgets($fichier,255));
$i=$i+1;
}
$lens=$i;
fclose($fichier);
$fichier=fopen("groupe.txt","r");
$i=0;
while(!feof($fichier))
{
$fgrou[$i]=explode("|",fgets($fichier,255));
$i=$i+1;
}
$lgrou=$i;
fclose($fichier);
$fichier=fopen("reserv_salle.txt","r");
$i=0;
while(!feof($fichier))
{
$frs[$i]=explode("|",fgets($fichier,255));
$i=$i+1;
}
$lrs=$i;
fclose($fichier);
$fichier=fopen("emploi_temps.txt","r");
$i=0;
while(!feof($fichier))
{
$fplan[$i]=explode("|",fgets($fichier,255));
$i=$i+1;
}
$lplan=$i;
fclose($fichier);
$jour=$_POST['jour'];
$mois=$_POST['mois'];
$annee=$_POST['annee'];
$j=date("w",mktime(0,0,0,$mois,$jour,$annee));
if ($jour>31 || $jour<1 || $mois>12)
{
header("Location: accueil.php?page=reservation.php");
}
//le reste n'a pas encore tapé
}
?>
</body>
</html>

Je vous remercie encore pour votre aide.

kattig

Lien vers le commentaire
Partager sur d’autres sites

Comme ta redirection se fait au milieu de ton fichier tu as deux choix... soit tu prépare toutes tes données et tu fais ta redirection avant que tout autre caractère soit envoyé au client (navigateur)... Donc tu déplaces ton code PHP au dessus de la balise <html> et celles qui suivent...

Soit du utilise la gestion de buffer PHP...et tu ajoutes cette ligne à la première ligne de ton fichier :

<?php ob_start(); ?>

et celle-ci à la dernière ligne de ton fichier :

<?php ob_end_flush(); ?>

Ainsi les données ne seront envoyé qu'une fois la fonction ob_end_flush appelée et ainsi cela ne posera pas de problème à la fonction header ....mais cela à l'inconvénient d'envoyer les données de ta page en une seule fois (au niveau du buffer PHP) et donc l'utilisateur risque d'attendre devant une page vide lorsque ton script prends du temps à être exécuté...

A toi de voir quelle solution te convient le mieux...

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir TheRec,

Je vous remercie pour votre aide [sourire].

J'ai essayé la première méthode que vous m'avez proposé cependant cela ne fonctionne pas et me donne le même message d'erreur...

Pourtant j'ai mis le code au tout début de la page comme vous me l'avez indiqué..

Je peux essayer la deuxième méthode, cependant, je ne m'y connais pas concernant "la gestion de buffer PHP". Je préfère me renseigner et apprendre son fonctionnement après avoir combler mes lacunes..

Merci de nouveau pour votre aide.

kattig

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Un simple blanc ou espace envoyé au navigateur avant l'appel à la fonction header() suffit pour empêcher l'envoi de celui-ci et générer l'erreur.

Dan

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Il ne sagit pas d'une erreur du au header, mais plutot d'une sortie de données avant l'exécution de celui-ci:

exemple correct:

<?php

header('Location: /mapage.php');

?>

exemple invalide:

<?php

echo 'je suis une ligne qui pose probleme avec les headers';
header('Location: /mapage.php');

?>

Soit vous lever la sortie ou soit vous rediriger d'une maniere différente (javascript ou balise méta par exemple).

Bon courage.

Lien vers le commentaire
Partager sur d’autres sites

Posté (modifié)

Bonjour,

Je viens de comprendre quel était le problème grâce à vous. Il y avait deux problèmes : l'emplacement de header() (qui a été résolu après avoir fait les modifications que vous m'avez conseillé de faire)et aussi l'emplacement de ma page.

En effet, dans accueil.php, j'avais inclu la page en question en utilisant include()...

J'ai fais un test avec la même page, dans un emplacement différent sans qu'il y ait d'inclusion, et cela a fonctionné.

Je vous remercie pour votre aide à vous tous et vous souhaite un bon week-end.

kattig

Modifié par kattig
Lien vers le commentaire
Partager sur d’autres sites

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...