kattig Posté 4 Mai 2006 Posté 4 Mai 2006 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
webadev Posté 4 Mai 2006 Posté 4 Mai 2006 (modifié) 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é 4 Mai 2006 par webadev
kattig Posté 4 Mai 2006 Auteur Posté 4 Mai 2006 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
webadev Posté 4 Mai 2006 Posté 4 Mai 2006 Place toute ta page dans un codebox ou tu peux me la pm je regarderais. D'où vient ton problème. Hervé
kattig Posté 4 Mai 2006 Auteur Posté 4 Mai 2006 Voici mon code de ma page qui est actuellement en construction: <html><head></head><body><?phpif(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
TheRec Posté 4 Mai 2006 Posté 4 Mai 2006 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...
kattig Posté 4 Mai 2006 Auteur Posté 4 Mai 2006 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
Dan Posté 5 Mai 2006 Posté 5 Mai 2006 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
InTech Posté 5 Mai 2006 Posté 5 Mai 2006 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: <?phpheader('Location: /mapage.php');?> exemple invalide: <?phpecho '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.
kattig Posté 6 Mai 2006 Auteur Posté 6 Mai 2006 (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é 6 Mai 2006 par kattig
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant