Problème de redirection en PHP

Résolu/Fermé
poliquinp Messages postés 58 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 25 mai 2011 - 8 juil. 2009 à 17:26
poliquinp Messages postés 58 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 25 mai 2011 - 8 juil. 2009 à 17:40
Bonjour,

Voilà mon problème. J'ai un site normal avec un menu de navigation normal aussi. Par contre, certains utilisateur peuvent entrer leurs login/pass pour accèder à la section cachée du menu. Cette dernière n'est visible que si l'utilisateur est connecté.

Je marche par les sessions, si aucune session n'exsite alors je n'affiche pas le deuxième menu. Par contre, si la session existe le deuxième menu apparaît en fesant disparaître le formulaire qui à son tour fera apparaître un bouton pour se déconnecter.

---- Si la variable session n'existe pas ----

-> Menu 1

-> Form Login/Pass


---- Si la variable session existe ----

-> Menu 1

-> Menu 2

-> Form Deconnexion


Alors, voilà. Lorsque je clique sur le bouton de déconnexion, je suis suposer être redirigé vers la page deconnexion.php pour une sorte de validation, mais ça me créer une erreur comme celle-ci.
Warning: Cannot modify header information - headers already sent by (output started at /chemin_de_mon_site/accueil.php:81) in /chemin_de_mon_site/accueil.php on line 86


Ligne 81 = Ouverture de la baliser php <?php
Ligne 86 =
header('Location: deconnexion.php');


__Hyposthèse numéro 1__

Je pense qu'il me fait cette erreur car quelque chose à déjà été appellé dans la page lorsque je me connecte. (Voir code plus bas) Donc théoriquement, en appelant un deuxième élément comme ma déconnexion la redirection ne peut avoir lieu car elle à déjà été fait quelque part. Alors, erreur!

__Hypothèse numéro 2__

Une erreur de programmation dans ma gestion de contenu avec les session fait défaut. (Vérifier le code plus bas)


CODE PHP
<?php
	session_start();
	
	//Code d'identification pour les bases de données.
	$adresse_serveur = "adresse";
	$nom_de_la_bd = "comment_sa_marche";
	$identifiant = "non_sérieux?";
	$password = "quelque chose";
	
	# On se connecte à la bd
	$connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se 		connecter : " . mysql_error());
	mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error());

?>

			<html>
//J'ai enlevé le début du html pour une meilleure lisibilité
			<!-- HEADER -->
			
			<!-- FIN HEADER -->
			
			<!-- CORPS DE LA PAGE -->
			<!-- COLONNE GAUCHE -->
			 <div class="division_gauche">
			 	<p><img src="images/nav_princ.jpg" /></p>
				<ul id="nav_principale">
					<li><a href="#">Retour à l'accueil</a></li>
					<li><a class="active" href="#">Contenu des trousses</a></li>
					<li><a href="#">Approche pédagogique</a></li>
					<li><a href="#">Débuter au primaire</a></li>
					<li><a href="#">Débuter au secondaire</a></li>
				</ul>

			<?php
				if ( isset( $_POST['deconnexion']) )
				{
					//Destruction de la session
				header('Location: deconnexion.php');		
				}
			?>
			
			<?php
				//Si le bouton connexion est cliqué
				if(isset($_POST['connexion']))
				{
					//Récupère les infos postées et code le mot de passe
					$identifiant = $_POST["identifiant"];
					$password = $_POST["password"];
					//$motDePasse = md5($motDePasse);
		
					// Si les champs ne sont pas vide
					if($identifiant != "" && $password != "")
					{
						//Select les informations relier au pseudo
						$requete = "select password, no_id from trifox where identifiant = '".$identifiant."';";
						$resultats = mysql_query($requete, $connexion) or die("Une erreur est survenue : " . mysql_error());
						$details = mysql_fetch_assoc($resultats);
							
						if($details['password'] != $password)
						{
							echo'Erreur, votre mot de passe est incorrect!';
						}
						else
						{
							$req = "select identifiant, no_id from trifox where password = '".$password."';";
							$resultats = mysql_query($req, $connexion) or die("Une erreur est survenue : " . mysql_error());
							$details = mysql_fetch_assoc($resultats);		
							$_SESSION['connexion'] = $identifiant;
						}
					}
				}
				if (isset($_SESSION['connexion']))
				{
				echo'
					
					<p><img src="images/securisee.jpg" /></p>
					<ul id="nav_secondaire">
						<li><a href="#">Les énergies renouvelables</a></li>
						<li><a href="#">Protection de l’environnement</a></li>
						<li><a href="#">Physique et mathématiques</a></li>
						<li><a href="#">Les énergies vertes</a></li>
						<li><a href="#">Plans</a></li>
						<li><a href="#">Mécanique, électricité</a></li>
					</ul>
					
				
					<p><img src="images/connexion.jpg" /></p>
					<form method="post" style="margin-left:7px;">
						<p>Identificant : '.$_SESSION['connexion'].'</p>
						<input type="submit" name="deconnexion" value="Se déconnecter" />
					</form>
				';
				}
				else
				{
				echo'
					<p><img src="images/connexion.jpg" /></p>
					<form method="post" style="margin-left:7px;">
						<p>Identifiant</p><input type="text" name="identifiant" valute=""/>
						<p>Mot de passe</p><input type="password" name="password" valute=""/>	
						
						<p><input type="submit" name="connexion" value="Connexion"/></p>
					</form>	
				';
				}
				
			?>		
			</div>
			<div id="bot_menu"></div>
			<!-- FIN COLONNE GAUCHE -->
		</div>
		<!-- FIN CORPS DE LA PAGE -->
	</div>
</body>
</html>


C'est à vous de m'aider à régler mon problème!




A voir également:

3 réponses

Bonjour,

Dans un premier temps, sache que le header doit être utilisé avant tout affichage à l'écran. Ce qui n'est pas le cas sur ton code.

Dans le cas présent, tu devrais faire le test dans un premier temps, puis ensuite faire le reste du traitement.

Ce qui pourrait donné :

<?php
session_start();
if ( isset( $_POST['deconnexion']) )
{
//Destruction de la session
header('Location: deconnexion.php');
exit();
}


//Code d'identification pour les bases de données.
$adresse_serveur = "adresse";
$nom_de_la_bd = "comment_sa_marche";
$identifiant = "non_sérieux?";
$password = "quelque chose";

# On se connecte à la bd
$connexion = mysql_connect($adresse_serveur, $identifiant, $password) or die("Impossible de se connecter : " . mysql_error());
mysql_select_db($nom_de_la_bd,$connexion) or die("Une erreur est survenue : " . mysql_error());


?>

Tu supprimeras cette partie la ou tu l'as mis actuellement.

J'espère que ça t'aidera.

Thamior.
1
poliquinp Messages postés 58 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 25 mai 2011 4
8 juil. 2009 à 17:30
J'ai été conseillé d'utiliser une manière plus radicale par un ami.
Se qui n'exclue pas que j'aimerais recevoir des informations sur mon problème.

Si on a une erreure du genre. Il est possible de tout simplement utiliser un lien hypertexte en HTML puis de détruire la session sur la page suivante qui est deconnexion.php dans mon cas.

ANCIENT CODE
<?php
	if ( isset( $_POST['deconnexion']) )
	{
	   //Destruction de la session
	   header('Location: deconnexion.php');		
	}
?>


REMPLACÉ PAR
<a href="deconnexion.php">Déconnexion</a>


Une fois sur la page nous feson le session_destroy(); puis une redirection vers la page d'accueil(dans mon cas).

0
poliquinp Messages postés 58 Date d'inscription lundi 29 juin 2009 Statut Membre Dernière intervention 25 mai 2011 4
8 juil. 2009 à 17:40
Je vais tester. Donne moi 5 min.

EDIT : Hey bien! Ton truc marche à 100%

Merci beaucoup! c'est résolue!
0