IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème avec fonction header:location


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 40
    Par défaut Problème avec fonction header:location
    Bonjour à tous.

    Voilà je suis débutant en php, et je suis confronté à un problème où je n'arrive pas à trouver de réponse... Je vous explique tout.

    J'ai fait un livre d'or sur mon site, c'est à dire une page livreDOr.php avec un affichage des messages, puis un formulaire html pour poster.
    Le formulaire redirige vers la page messagePoste.php. Cette page récupère toutes les valeurs, fais les tests des booleens, des empty à certains champs etc... Puis ajoute tout ça à la base mysql. Tout marche niquel niveau ajout à la base tout ça.. Mon problème est que lorsque j'ai voulu faire ma dernière vérification, c'est à dire vérifier si certains champs étaient empty avant d'ajouter à la base, j'ai eu un probleme.
    SI tel champ OU tel champ est vide, ALORS je redirige vers une page erreur.html. Sinon, je fais mon ajout à la base, et j'indique que la requête a marché ou a échoue pour x raisons.
    Et ben mon header:location sensé rediriger vers ma page d'erreur foire et me redirige pas. Pire, la requete n'est même pas exécutée vue qu'il est resté bloqué dans le SI tel champ est vide...
    Je sais pas si je m'exprime clairement ( je fournis le code après ).

    J'ai cherché sur le net et j'ai trouvé deux autres forums ou ces problèmes étaient survenus : le premier avait trouvé sa solution en faisant avouer à l'hebergeur que le serveur php ne prenait pas en compte le header:location, le deuxieme a trouvé que l'origine du problème était qu'il fallait qu'un header:location en ligne soit la première instruction, avant le html... Donc il a remplacé le header:location par toute sa page html en echo.....

    Donc ben moi
    - j'aimerai pas que ca soit le serveur php qui reconnaisse pas le header,
    - j'aimerai pas remplacer cette instruction par 90 lignes de code
    - j'aimerai pas remplacer par une fonction javascript car je suis contre au niveau compatibilité, j'évite le JS

    Des solutions siouplait ? :-(

    J'vous met l'essentiel de mon code, et je vous remercie par avance !!!

    Bonne soirée.

    partie du script de ma page messagePoste.php ( celui qui foire )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    29
    30
    31
    32
    33
    34
    35
     
    <?php
    	include("connexion.php");
    	$numMessage = '';
    	$dateMessage = date('d-m-Y H:i');
    	$nomPosteur = $_REQUEST['nom'];
    	$prenomPosteur = $_REQUEST['prenom'];
    	$mailPosteur = $_REQUEST['email'];
    	$clientBooleen = $_REQUEST['client'];
    	$message = $_REQUEST['message'];
    	if(!empty($clientBooleen))
    		$clientBooleen = 'o';
    	else
    		$clientBooleen = 'n';
    	if(empty($nomPosteur) || empty($message))
    	{
    		header('location: erreur.html'); // c'est là que ça blème...
    		echo 'test bug'; // J'ai cette page d'affichée avec ces mots.
                    exit;
    	}
    	else // la requete n'est donc pas executée, la boucle s'est arrêtée avant.
    	{
    		$requete = "INSERT INTO message VALUES ( '".$numMessage."' , '".$dateMessage."' , '".$nomPosteur."' , '".$prenomPosteur."' , '".$mailPosteur."' , '".$clientBooleen."' , '".$message."' );";
    		$ok = mysql_query($requete,$connexion);
    		if($ok)
    		{
    			echo "<b>Ajout de votre message r&eacute;ussi, merci.</b><br /><br /><a href='livreDOr.php'>Cliquez ici</a> pour revenir sur le livre d'or.";
    		}
    		else
    		{
    			echo "<b>Erreur lors de l'ajout de votre message, veuillez recommencer.</b><br /><br /><a href='livreDOr.php'>Cliquez ici</a> pour revenir sur le livre d'or.";
    		}
    	mysql_close($connexion);
    	}
    ?>

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Salut, ton problème doit venir de là je pense :

    N'oubliez jamais que header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP. Une erreur très classique est de lire un fichier avec include() ou require(), et de laisser des espaces ou des lignes vides, qui produiront un affichage avant que la fonction header() ne soit appelée. Le même problème existe avec les fichiers PHP/HTML standards.
    @+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2010
    Messages
    40
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 40
    Par défaut
    Ouais donc en gros ce que tu me propose c'est de mettre toute ma page html en echo parce que mon script php ne peut pas se retrouver en début de page ! Donc le header ne peut pas être avant le html de la page...!
    Donc il me faut une alternative, mais je veux pas la fonction JS, une possibilité pour une redirection en php ? J'pense qu'il n'y a pas que le header pour rediriger une page, si ?
    Merci de vos réponses.

    Cordialement,

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    c'est de mettre toute ma page html en echo parce que mon script php ne peut pas se retrouver en début de page !
    Que le HTML soit envoyé a l'exterieur du code PHP ou via un echo ne change rien.

    Donc le header ne peut pas être avant le html de la page...!
    [/QUOTE]
    Le header doit avoir lieu avant l'envoi de toute donnée vers le navigateur.
    Ce n'est pas sa position dans le code qui est importante mais bien le moment du script ou il est réalisé.

    Concernant le passage cité Madfrix, il faisait plus référence aux eventuels espaces ou lignes blanches qui pourrait se glisser en début ou fin de ton fichier inclus.
    Pour savoir ou est ton problème il faut regarder la ligne d'output qui doit être indiqué dans ton message d'erreur.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre Expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Par défaut
    Citation Envoyé par 5c0rPi0n Voir le message
    Ouais donc en gros ce que tu me propose c'est de mettre toute ma page html en echo parce que mon script php ne peut pas se retrouver en début de page ! Donc le header ne peut pas être avant le html de la page...!
    Je ne pense pas que c'est cela dont te dit @Madfrix.

    Faut voir comment se déroule le code de ta page, y compris les includes/require.
    Si tu as un echo, ou même un espace, ou encore le moindre élément HTML avant de faire un header(), cela va générer une erreur.
    En faire, c'est comme si tu dis au serveur de renvoyer un contenu, puis après changer d'avis, de lui demander de faire une redirection.
    Trop tard ... l'avion a déjà décoller. D'où l'erreur.

    Si c'est la cas, alors une solution serait de remonter la partie de code qui effectue la vérification, avant de renvoyer le moindre contenu.
    Si ta vérification débouche à vouloir faire une redirection, de cette manière tu pourras le faire.

    C'est une erreur très courante de faire des traitements Php en pleins codes HTML, alors qu'ils pourraient très bien ce faire bien avant.


    Faut faire le point la dessus, ceci t'éviteras de faire du JS ou autre redirection avec un meta tag.

Discussions similaires

  1. Problème avec un HEADER
    Par Zebulonn dans le forum Langage
    Réponses: 4
    Dernier message: 19/10/2005, 13h56
  2. Problème avec fonction
    Par Goundy dans le forum C
    Réponses: 24
    Dernier message: 01/10/2005, 20h17
  3. [MFC][WINSOCK] Problème avec fonction recv
    Par Le Farfadet dans le forum MFC
    Réponses: 4
    Dernier message: 23/09/2005, 11h00
  4. Problème avec fonction d'envoie de mail
    Par zyg dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 23/02/2005, 08h48
  5. [Requête] Problème avec fonction "DATE_FORMAT()"
    Par sekiryou dans le forum Requêtes
    Réponses: 4
    Dernier message: 11/01/2005, 21h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo