Prob de header()

cs_soussan Messages postés 53 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 23 juin 2008 - 11 juil. 2007 à 12:52
dvdstory Messages postés 192 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 10 août 2009 - 12 juil. 2007 à 06:25
slt
j"ai un formulaire de validation de login et passe après validation ca doit rediriger vers une autre page concernant les clients seulement
tt le traitement marche jusqu'a header ca me donne cet erreur
Cannot modify header information - headers already sent by (output started at c:\program ...
voila mon code 

 if(isset($_GET['action']) && $_GET['action'] == 'login')
 {
$q = mysql_query("SELECT *
                  FROM client
                  WHERE login='$login'
                  and pass='$pass'");
$n = mysql_num_rows($q);
    if ($n == 1 and !empty($login) and !empty($pass))
         {
         // Le login est placé dans la session
         $_SESSION['session'] = $login;
         // redirection
        header('Location:reponse.htm');
          exit();
         }

merci pour votre patience

4 réponses

J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
11 juil. 2007 à 13:13
Salut,

Rien de bien grave, c'est une erreur très classique (cf. Le texte suivant provennant de http://www.php.net/header) :

------------------------------------------------

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 affichges 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 génèreront un affichage avant que la fonction header() ne soit appelée. Le même problème existe avec les fichiers PHP/HTML standards.

Exemple 1677. header() doit toujours être appelé en premier
<?php

require("user_logging.inc")
?>
<?php
header("Content-Type: audio/x-pn-realaudio");
?>

// Erreur : Notez la ligne blanche ci-dessus
?>

Note: Depuis PHP 4, vous pouvez utiliser le système de cache (output buffering) pour contourner ce problème. Tous vos textes générés seront mis en buffer sur le serveur jusqu'à ce que vous les envoyiez. Vous pouvez utiliser les fonctions ob_start() et ob_end_flush() dans vos scripts, ou en modifiant la directive de configuration output_buffering dans votre fichier php.ini ou vos fichiers de configuration du serveur.

---------------------------------------

A+
0
cs_soussan Messages postés 53 Date d'inscription vendredi 14 mai 2004 Statut Membre Dernière intervention 23 juin 2008
11 juil. 2007 à 15:24
slt et merci pour l'aide
est ce que je doit mettre le header() avant la balise <html> même si je veux faire la redirection qu'après la validation de mot de passe je coprend pas très bien le principe veuillez svp m'explique plus et merci
0
J_G Messages postés 1406 Date d'inscription mercredi 17 août 2005 Statut Membre Dernière intervention 28 août 2007 10
11 juil. 2007 à 16:12
Hmmm....

Un premier bon principe en PHP est de différencier traitement de l'information et affichage de l'information. C'est à dire que vous devriez valider le mot de passe avant la première balise <html>...

En gros vos fichiers PHP devraient avoir la structure suivante:
----------------------------------
<?php
/*
* Traitement des données
*/
?>
<html>

<?php eho $resultat_triaitement_données ?>

</html>
--------------------------------------

On voit bien ici la nette séparation entre traitement et affichage.
(Note : Généralement, la partie traitement est relayée dans des fichiers inclus)

Avec une telle structure, l'appelle à "header" devra avoir lieu dans la partie traitement.

Ok?
0
dvdstory Messages postés 192 Date d'inscription dimanche 23 janvier 2005 Statut Membre Dernière intervention 10 août 2009
12 juil. 2007 à 06:25
Lorsque t'envoie un fichier au client: il y a d'abord les entête HTTP (header = entête). Il faut savoir distinguer la différence entre les header HTTP et le contenue qui suit

HEADER HTTP

puis le contenue

<html>
etc

</html>

Si tu ve modifier les header tu pe le faire uniquement si tu n'a envoyé aucun contenu au client, car si dans ton code PHP tu envoie déja <html> et le reste et qu'en plien milieu tu t'arrete et tu balance un header HTTP ça met le bordel.
Imagine le truc.

HEADER HTTP

puis le contenue

<html>

HEADER HTTP en plein milieu du contenu sans réson (prvoque une erreur)

</html>

C'est pareil pour les cookies car les cookies sont transmie grace au header HTTP.
La fonction setcookie n'est q'un cas particulier a la fonction header.

GRUNENBERGER Benoît
www.UnrealNetwork.net
0
Rejoignez-nous