Php Warning: Cannot modify header information

Résolu
Utilisateur anonyme -  
 Utilisateur anonyme -
Bonjour,
je suis entrain de faire mon site et j'ai un problème:
Voilà alors j'ai fait un menu qui est composé de ce code :
<?php
if (isset ($_SESSION['login'])) {
echo 'Bienvenue ici!</h4>

        <li>
                <a href="messagerie.php">Messagerie</a>
        </li>
        
        <li>
                <a href="prop_news.php">Proposez une News</a>
        </li>
        
        <li>
                <a href="forum/ucp.php?mode=register&sid=0b40018937c8f5d85ea482a0d1d62341">Inscription au Forum</a>
</li>
        
        <li>
                <a href="astuces.php">Astuces</a>
</li>
        
		<li>

        <a href="livre_or.php">Livre D\'or</a></li>
       <br />
		<a href="deconnexion.php">Déconnexion </a>
';
}
else if (!isset ($_SESSION['login'])){
echo '<center>
<h4>Connexion l\'espace membres :</h4>
<form action="" method="post">
  Login : <input type="text" name="login"><br />
Mot de passe : <input type="password" name="pass"><br />
<input type="submit" name="connexion" value="Connexion">
</center>';
}
?>

Qui permet aux membres de se connecter depuis ce menu et comme vous avez vu action se fait directement depuis cette page grace à ce code :
<?php
session_start();
?> 
<?php
if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {

		$base = mysql_connect ('mystère', 'et boule', 'de');
		mysql_select_db ('gomme', $base);

		$sql = 'SELECT id FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"';
		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
		$nb = mysql_num_rows($req);

		if ($nb == 1) {
			$data = mysql_fetch_array($req);

			session_start();
			$_SESSION['login'] = $_POST['login'];
			$_SESSION['id'] = $data['id'];

			mysql_free_result($req);
			mysql_close();

			header('Location: index.php');
			exit();
		}
		elseif ($nb == 0) {
			$erreur = 'Compte non reconnu.';
		}
		else {
			$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
		}
		mysql_free_result($req);
		mysql_close();
	}
	else {
		$erreur = 'Au moins un des champs est vide.';
	}
}
?>

et quand je me connecte ça m'affiche ça :
Warning: Cannot modify header information - headers already sent by (output started at /mnt/159/sdc/9/d/nom_de_mon_site/beta/include/connec.php:4) in /mnt/159/sdc/9/d/nom_de_mon_site/beta/include/connec.php on line 25

Voilà merci d'avance !
Configuration: windows vista 
windows 7 en machine virtuel
2 GO de ram

8 réponses

  1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    Tu ne peux plus modifier les entêtes HTTP une fois qu'un caractère de la apge a été envoyé au client.
    Donc avant le premier "<?php", il ne doit y avoir aucun caractère (espace compris), et tu ne dois faire aucun echo/print(f) avant la fonction header().
    Tu peux utiliser la tamporisation de sortie si tu ne veux pas être ennuyé avec ça :
    http://www.siteduzero.com/tutoriel-3-38102-la-tamporisation-de-sortie-en-php.html
    0
  2. Utilisateur anonyme
     
    Je ne comprend pas :( !
    pouvez vous m'aider un peu plus ?
    0
  3. graffx Messages postés 120 Date d'inscription   Statut Contributeur Dernière intervention   2 031
     
    tu as mis sur ton deuxieme code deux fois session_start;

    1 en premiere ligne et l' autre plus bas.

    Il ne faut en mettre qu' un et il doit etre avant tout code html.

    Supprime celui-ci (juste session_start)

    session_start();
    $_SESSION['login'] = $_POST['login'];
    $_SESSION['id'] = $data['id'];
    0
  4. Dr Zoidberg Messages postés 547 Statut Membre 100
     
    Tu as aussi au début :
    ?> 
    <?php
    

    Ca va envoyer un retour à la ligne au navigateur et tu ne pourras plus faire d'header après, et ca ne sert à rien de fermer le bloc php pour le rouvrir tout de suite.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. graffx Messages postés 120 Date d'inscription   Statut Contributeur Dernière intervention   2 031
     
    pas de merci? pas de resolu? comme d 'habitude
    0
  7. Utilisateur anonyme
     
    non c'est que je n'est pas pu aller sur mon ordinateur cette semaine !
    je vais tester ça !
    merci d'avance !
    0
  8. Utilisateur anonyme
     
    je viens de tester j'ai modifier mon code comme ça :
    <?php
    session_start();
    if (isset($_POST['connexion']) && $_POST['connexion'] == 'Connexion') {
    	if ((isset($_POST['login']) && !empty($_POST['login'])) && (isset($_POST['pass']) && !empty($_POST['pass']))) {
    
    		$base = mysql_connect ('mystère', 'et boule', 'de');
    		mysql_select_db ('gomme', $base);
    
    		$sql = 'SELECT id FROM membre WHERE login="'.mysql_escape_string($_POST['login']).'" AND pass_md5="'.md5(mysql_escape_string($_POST['pass'])).'"';
    		$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
    		$nb = mysql_num_rows($req);
    
    		if ($nb == 1) {
    			$data = mysql_fetch_array($req);
    
    			$_SESSION['login'] = $_POST['login'];
    			$_SESSION['id'] = $data['id'];
    
    			mysql_free_result($req);
    			mysql_close();
    
    			header('Location: index.php');
    			exit();
    		}
    		elseif ($nb == 0) {
    			$erreur = 'Compte non reconnu.';
    		}
    		else {
    			$erreur = 'Probème dans la base de données : plusieurs membres ont les mêmes identifiants de connexion.';
    		}
    		mysql_free_result($req);
    		mysql_close();
    	}
    	else {
    		$erreur = 'Au moins un des champs est vide.';
    	}
    }
    ?>
    0
  9. Utilisateur anonyme
     
    MERCIIIIIIIIIIIIIIIIII beaucoup !
    [résolu]
    0