Php Warning: Cannot modify header information

Résolu/Fermé
Utilisateur anonyme - 29 déc. 2009 à 16:55
 Utilisateur anonyme - 3 janv. 2010 à 12:22
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 !
A voir également:

8 réponses

avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 499
29 déc. 2009 à 17:43
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
Utilisateur anonyme
31 déc. 2009 à 13:20
Je ne comprend pas :( !
pouvez vous m'aider un peu plus ?
0
graffx Messages postés 6506 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 24 mars 2019 1 973
31 déc. 2009 à 13:28
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
Dr Zoidberg Messages postés 529 Date d'inscription jeudi 28 juin 2007 Statut Membre Dernière intervention 12 juin 2015 100
31 déc. 2009 à 14:50
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
graffx Messages postés 6506 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 24 mars 2019 1 973
31 déc. 2009 à 15:31
pas de merci? pas de resolu? comme d 'habitude
0
Utilisateur anonyme
3 janv. 2010 à 12:12
non c'est que je n'est pas pu aller sur mon ordinateur cette semaine !
je vais tester ça !
merci d'avance !
0
Utilisateur anonyme
3 janv. 2010 à 12:21
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
Utilisateur anonyme
3 janv. 2010 à 12:22
MERCIIIIIIIIIIIIIIIIII beaucoup !
[résolu]
0