Version complète: sur le forum Webmaster Hub : problème header
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > PHP
schats
bonjour,

j'ai un petit problème avec le header .

l'erreur:
Warning: Cannot modify header information - headers already sent by (output started at /data/users/t/toutetrien/menu.php:6) in /data/users/t/toutetrien/menu.php on line 94

la ligne 94 et environs
CODE
   $_SESSION['id'] = $donnees['id']; //Id du membre.
                                        $_SESSION['pseudo'] = $pseudo; //Pseudo du membre.
                                        //Redirection vers la page membre.
                                        header("location: toutetrien.redby.info/espace_membre/index.php");//ligne 94
                                }


sachant que cette page est incluse à l'index avec une include

tout le code
CODE

<?php

?><br/><br/><br/><br/><br/><br/><br/>
<img src="http://toutetrien.redby.info/image/mascote.jpeg" border="0" width="150" height="150" alt="" >

<?php
mysql_connect("sql.redby.info","toutetrien3","874419666");
mysql_select_db("toutetrien3");
if ($_SESSION['logged'] === false)
{
if (isset($_COOKIE['pseudo'], $_COOKIE['pass']))
{
//Vérification du pseudo.
$pseudo = htmlspecialchars($_COOKIE['pseudo']);
$pass = htmlspecialchars($_COOKIE['pass']);

//Requête comptant le nombre de pseudos $_POST['pseudo']
$sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM membres WHERE pseudo='".$pseudo."'");

//Si le pseudo existe.
if (mysql_result($sql,0,'nb_pseudo') == 1)
{
//Vérification du mot de passe
//Information sur le compte du membre.
$sql_infos = mysql_query("SELECT id, pass, confirmation FROM membres WHERE pseudo='".$pseudo."'") or die (mysql_error());
$donnees = mysql_fetch_array($sql_infos);

//Comparaison du mot de passe et vérification que le compte est confirmé.
if ($pass == $donnees['pass'] && $donnees['confirmation'] == 1)
{
//Tout est bon, on connecte le membre.
$_SESSION['logged'] = true;

//Création de 2 variables de sessio, contenant des informations sur le membre.
$_SESSION['id'] = $donnees['id']; //Id du membre.
$_SESSION['pseudo'] = $pseudo; //Pseudo du membre.

//Redirection vers la page membre.
header("location: toutetrien.redby.info/espace_membre/index.php");
}
}
}
}

//Si la variable $_POST['connexion'] (bouton submit du formulaire) et la variable $_SESSION['logged'] vaut false (déconnecté) existent.
if (isset($_POST['connexion']) && $_SESSION['logged'] === false)
{
//Vérification des autres variables.
if (!empty($_POST['pseudo']) && !empty($_POST['pass']))
{

//Vérification du pseudo.
$pseudo = htmlspecialchars($_POST['pseudo']);
$pass = htmlspecialchars($_POST['pass']);

//Requête comptant le nombre de pseudos $_POST['pseudo']
$sql = mysql_query("SELECT COUNT(*) AS nb_pseudo FROM membres WHERE pseudo='".$pseudo."'")or die (mysql_error());

//Si le pseudo existe.
if (mysql_result($sql,0,'nb_pseudo') == 1)
{
//Vérification du mot de passe
//Information sur le compte du membre.
$sql_infos = mysql_query("SELECT id, pass, confirmation FROM membres WHERE pseudo='".$pseudo."'")or die (mysql_error());
$donnees = mysql_fetch_array($sql_infos);

//Hashage du mot de passe.
$passhash = md5(sha1($_POST['pass']));

//Comparaison du mot de passe.
if ($passhash == $donnees['pass'])
{
//On vérifie que le compte est confirmé.
//Si $donnees['confirmation'] vaut 1.
if ($donnees['confirmation'] == 1)
{
if (isset($_POST['souvenir']) && $_POST['souvenir'] == 'on')
{
mysql_query("UPDATE membres SET statut ='1' WHERE id=".$donnees_info['id']."") OR die(mysql_error());
//Temps d'expiration des cookies (1 an).
$expire = time() + 3600 * 24 * 365;

setcookie('pseudo', $pseudo, $expire);
setcookie('pass', $passhash, $expire);
}

//Tout est bon, on connecte le membre.
$_SESSION['logged'] = true;

//Création de 2 variables de session, contenant des informations sur le membre.
$_SESSION['id'] = $donnees['id']; //Id du membre.
$_SESSION['pseudo'] = $pseudo; //Pseudo du membre.
//Redirection vers la page membre.
header("location: toutetrien.redby.info/espace_membre/index.php");
}
else
echo 'Erreur : le compte n\'est pas confirmé !';
}
else
echo 'Erreur : le mot de passe est incorrect !';
}
else
echo 'Erreur : le pseudo n\'existe pas !';
}
else
echo 'Erreur : veuillez remplir tous les champs !';
}
?>
<div id="menu">
<div class="element">
Le site Web

<form method="post" action="">
<label>Pseudo : <input type="text" name="pseudo" /></label><br/>
<label>Mot de passe : <input type="password" name="pass" /></label><br/>
<input type="submit" name="connexion" value="Se connecter" /><br/>
<input type="checkbox" name="souvenir" > se souvenir de moi
</form>



<li><a href="inscription.php" target="_top">inscription</a></li>

<li><a href="index.html" target="_top">accueil</a></li>

<li><a href="forum.php" target="_top">le forum</a></li>

<li><a href="tchat.html" target="_top">le tchat</a></li>

<li><a href="livreor.php" target="_top"> le livre d'or</a></li>
<li><a href="reference.php" target="_top"> vous aimmez se site faite le partager ici</a></li>
</ul>
Les espaces


merci de me répondre

s'il vous manque des informations merci de me le dire par la messagerie personel ou en répondant aux forum
theonlydrayk
La commande php header(); doit etre la premiere a etre envoyer.

Sit tu envoit du html le php envoit les header apres il envoit ton html.
A ce moment la il est impossible d'envoyer les headers ils sont deja clos.

Tu peut utiliser la commande headers_sent() pour savoir si les headers
ont ete envoyer ou pas.
http://www.php.net/manual/fr/function.headers-sent.php

CODE
if (!headers_sent())
{
   header("location: toutetrien.redby.info/espace_membre/index.php");
   exit;
} else
{
   /* On ne peut plus rediriger la page les headers sont envoyer */
  echo '<a href="toutetrien.redby.info/espace_membre/index.php">Cliquer Ici</a>';
  exit;
}


Mais le mieux je crois serait d'envoyer ton code dans le haut de la page
en premier. N'envoye aucun html ou espace, aucun caractere, fait le test
de sessions et envoye tes headers, apres tu t'occupe du html.
Dan
CITATION(theonlydrayk @ vendredi 19 janvier 2007, 19h44) *
Mais le mieux je crois serait d'envoyer ton code dans le haut de la page
en premier. N'envoye aucun html ou espace, aucun caractere, fait le test
de sessions et envoye tes headers, apres tu t'occupe du html.

Tu penses juste ! wink.gif

Il ne faut AUCUNE sortie vers le navigateur avant d'envoyer une entête ou un cookie, sinon on a ce type d'erreur.
Un seul caractère, même un espace ou un retour chariot, provoque l'envoi d'entêtes automatiques. C'est ce qui donne ensuite le message d'erreur "headers already sent" smile.gif

Dan
schats
mouai le seul problème c'est que mes header sont obliger d'être la .... car sinon .... ben sa l'enverra sur la page même s'il n'est pas membre
les session marche car quand je vais sut http://toutetrien.redby.info/espace_membre/index.php ben ça me met les bonne donner et l'acess est accepter .... ( quand je suis connecter bien sur )
schats
ça marche mais comment faire pour le code html qu'il y avait avant ...... je le met juste après le php ou plutôt dans le css ???

désoler pour le double post
Mikiman
Bonsoir,

Juste un commentaire au passage, la fonction setcookie() nécessite aussi d'être placé avant la sortie du navigateur.
Place ton code html après le php wink.gif

Cordialement,
Mikiman
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.