[RESOLU] header location

Eléphanteau du PHP | 16 Messages

17 déc. 2015, 14:16

Bonjour! J'ai un problème avec la syntaxe header('location: index.php') ,c'est à dire que lors de la saisie d'un login et d'un mot de passe , je devrais être diriger vers index.php (en local) mais ce n'est pas le cas car je reste sur la même page au lieu d'être diriger vers index.php. Ors ,le login et le mot de passe sont correcte! :( |*()
Vous pouvez m'aider??? svp

Mammouth du PHP | 1967 Messages

17 déc. 2015, 14:24

il est très important que le header apparait dans ton code avant la moindre sortie php du type echo, print etc.

Vérifie aussi qu'en début de fichier, il n'y ai rien avant ton <?php

sinon donne nous ton code et si ce n'est pas fait affiche les erreurs de ton script, il y a des chances que cela nous aiguilles dans la bonne direction
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 16 Messages

17 déc. 2015, 14:53

Merci pour ta réponse mais mon script n'affiche aucune erreur et il n'y a rien avant mon <?php , voici la page d'authentification que j'ai nommé provisoirement 'page.php' :

Code : Tout sélectionner

<?php session_start (); require_once 'connect.php'; $error='' ; if(!empty ($_POST)) { if(isset($_POST['connect'])) { $login=$_POST['login']; $motdepasse = sha1($_POST['motdepasse']); // Vérification des identifiants $req = $connect->prepare('SELECT id FROM personnel WHERE login=:login AND motdepasse=:motdepasse'); $req->execute(array('login'=>$login, 'motdepasse'=>$motdepasse)); $resultat = $req->fetch(); if (!$resultat) { $error='Mauvais identifiant ou mot de passe !' ; } else { $_SESSION['id'] = $resultat['id']; $_SESSION['login'] = $login; echo 'Vous êtes connecté !'; header ('location: index.php'); } } } ?> <!DOCTYPE html> <html> <head> <title>Authentification</title> <link href="style.css" rel="stylesheet" type="text/css"> </head> <body> <div id="main"> <div id="login"> <h2>Login </h2> <form action="" method="post"> <label>Utilisateur :</label> <input id="name" name="login" placeholder="username" type="text" required = "required"/> <label>Mot de passe :</label> <input id="password" name="motdepasse" placeholder="password" type="password" required = "required"/> <input name="connect" type="submit" value="connect"/> <p><a href="inscription.php">S'inscrire </a></p> <!--<span><?php echo $error; ?></span>--> </form> </div> </div> </body> </html>
et voici 'index.php':

Code : Tout sélectionner

<?php session_start (); header('location: page.php'); error_reporting(E_ALL); include_once 'fonctions.php'; $id_page_accueil = 1; if (isset($_GET['id_page'])) { $_ENV['id_page'] = intval($_GET['id_page']); } else { $_ENV['id_page'] = $id_page_accueil; } extraction_infos_DB(); ?> <!DOCTYPE html> <html> <head > <META charset="utf-8"/> <META NAME="keywords" lang="fr" CONTENT="<?php echo $_ENV['mots_cles']; ?>"> <!-- Insère la description extraite de la DB dans les meta --> <META NAME="Description" CONTENT="<?php echo $_ENV['description']; ?>"> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <title><?php echo $_ENV['titre']; ?></title> <link rel="stylesheet" type="text/css" href="styles.css"> <script type="text/javascript"> var _gaq = _gaq || []; _gaq.push(['_setAccount', 'UA-8922143-3']); _gaq.push(['_trackPageview']); (function() { var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); })(); </script> </head> <body onLoad="getDt()"> <!-- <div id="menu_horizontal"> <?php // Affiche le menu 'racine' => id de la page = id de la page d'accueil = 1 echo affiche_menu($id_page_accueil); ?> </div> --> <div id="chemin_fer"> <?php echo affiche_chemin_fer($_ENV['id_page']); ?> </div> <div id="bloc_central"> <div class="menu_vertical"> <?php // Affiche le menu en cours => id de la page = id de la page en cours. echo affiche_menu($_ENV['id_page']); ?> </div> </body> </html>

ynx
Mammouth du PHP | 586 Messages

17 déc. 2015, 15:58

Salut,

Comme souligné par Spols, aucune sortie php ne doit être effectuée avant la modification des entêtes http via header (à moins d'activer la directive php output_buffering).
//echo 'Vous êtes connecté !'; <- pas de echo avant l'utilisation de header
    header('location: index.php');
Il ne faut pas oublier également d'ajouter l'instruction exit(); après un header(Location: ...); pour s'assurer que la suite du code ne soit pas exécutée :
header('location: index.php');
    exit();
Bonne journée

Mammouth du PHP | 1967 Messages

17 déc. 2015, 17:00

$_SESSION['id'] = $resultat['id'];
			$_SESSION['login'] = $login;
			echo 'Vous êtes connecté !';
			
			header ('location: index.php');
<?php
	session_start ();
	
	header('location: page.php');
	
	
	error_reporting(E_ALL);
Sans avoir analysé tout en détail, voici 2 remarques
Dans le premier code,
Un echo avant un header va forcement poser problème. Si tu veux changer de page tu ne dois avoir aucun texte renvoyé par PHP

Dans le second,
Un header à cet endroit là va forcement poser problème car il rend totalement inutile tout ce qu'il y a en dessous. il n'est pas dans une condition, il s'applique donc à tous
Tu devrais aussi mettre ton error_reporting plus haut dans ton code et surment aussi dans ton premier script.
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 16 Messages

18 déc. 2015, 07:30

J'ai enlevé l'echo et le header('location: page.php') dans ma page index.php mais quand j'ouvre le dossier contenant les deux pages ,c'est la page index.php qui s'affiche mais non pas la page d'authentification (page.php)....Que doit je faire? svp :?:

Mammouth du PHP | 1967 Messages

18 déc. 2015, 08:37

ajouter une condition sur le header que tu as supprimer. ou inverser le nom de tes pages
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Eléphanteau du PHP | 16 Messages

18 déc. 2015, 09:43

quel condition me suggère tu??? car je ne trouve aucun moyen stp :?

Mammouth du PHP | 1967 Messages

18 déc. 2015, 10:34

les questions à te poser :
-Que doit voir un visiteur qui vient pour la première fois sur mon site ?
-Comment (par quelle URL) est il arriver sur mon site ?
-Comment (par quelle URL) doit il arriver sur mon site ?
-Comment je sais si l'utilisateur est logué ou non? <== la plus importante
-Quelle page l'utilisateur logué a comme accès en plus ?

Si tu te réponds à ces questions, cela devrait te mettre sur la bonne voie
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube