J'ai un souci avec la fonction header. J'ai bien parcouru sa documentation, lu les sujets sur le forum, Pas de solution.
Quand j'exécute ma page, dans tous les cas, j'ai une page blanche avec aucune redirection car l'adresse reste la même.
Voici mon code:
<?php
session_start();
// Le mot de passe n'a pas été envoyé
if (!isset($_POST['pseudo']) AND !isset ($_POST['pwd']) )
{
//Afficher le formulaire de saisie du mot de passe
header('Location: connexion.php');
die();
}
//Le mot de passe et l'identifiant ont été saisis
else
{
include("connexion_bdd.php");
//hachage du Mdp
$mdp_hash= sha1($_POST['pwd']);
//vérif des identifiants et mdp
$req= $bdd->prepare('SELECT id, statut FROM user WHERE pseudo = :pseudo AND mdp = :mdp AND validite = 1');
$req->execute(array(
'pseudo' => $_POST['pseudo'],
'mdp' => $mdp_hash));
$connexion_ok = $req->fetch();
if ($connexion_ok) // Si tout est correct
{
$_SESSION['id'] = $connexion_ok['id'];
$_SESSION['pseudo'] = $_POST['pseudo'];
$statut=$connexion_ok['statut'];
if ($statut=='1')
{
header('Location: admin.php');
die();
}
elseif ($statut=='2')
{
header('Location: accueil_cdf.php');
die();
}
elseif ($statut=='3')
{
header('Location: index.php');
die();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<?php
include("head.php");
?>
</head>
<body>
<div id="bloc_page">
<?php
include("header.php");
?>
<section>
<article>
<?php
else if (!$connexion_ok) // Sinon, on affiche un message d'erreur
{
?>
<form action="espace_dispatch.php" method="post">
<fieldset>
<legend>Connexion</legend>
<label>Nom d'utilisateur :</label>
<input type="text" name="pseudo" size="30"/> <br/><br/>
<label>Mot de passe :</label>
<input type="password" name="pwd" size="30"/><br/><br/>
<input type="submit" value="Envoyer"/></p>
</fieldset>
</form>
<?php
echo '<script> alert("Mot de passe et/ou identifiant incorrect");</script>';
}
?>
</article>
</section>
<?php
}
?>
</div>
</body>
</html>
C'est qu'il y a une sortie avant. Ce qui devrait apparaître par la bien connue warning: headers already sent indiquant où celle-ci a lieu si toutes les erreurs étaient affichées/activées.
Une page blanche peut également provenir une erreur de syntaxe php : il semble effectivement y avoir un problème d'accolade au niveau du else if ligne 75.
L'affichage des messages d'erreurs, la consultation du journal d'erreur ou l'utilisation d'un IDE devrait te permettre d'éviter et de corriger facilement les erreurs de syntaxe.
Non tu ne peux pas mettre un else tout court entre le dernier else if ligne 47 et celui de la ligne 75, car tu fais des include entre les conditions, ce qui tu produit une erreur dans la logique des if/else.
Enlève simplement le else ligne 75, ça marche chez moi.
Edit il ne doit pas y avoir de code entre un if{} et un else{}
Avant de t'indiquer où est le problème (devancé par @Psyckyo): 1 - quel est l'encodage de ton code ? ==> si possible, UTF-8 sans BOM (ce coquin d'espace qui aime s'ajouter devant le <?php d'ouverture) ; 2 - si tu as vraiment parcouru le forum, tu n'as pas trouvé la réponse ? ==> bon en même temps, quand on cherche sur Google on tombe ici : https://openclassrooms.com/forum/sujet/probleme-header-location-xx-php-45439 vraiment difficile.
Concernant l'erreur que tu décris, comme le dis @julp, tu as un problème. et ce n'est pas vraiment une histoire de sortie, mais de cohérence dans ton code. tu mets grosso modo si la connexion est ok tu me fais ça :
if ($connexion_ok){
// Si tout est correct
$_SESSION['id'] = $connexion_ok['id'];
$_SESSION['pseudo'] = $_POST['pseudo'];
$statut=$connexion_ok['statut'];
if ($statut=='1'){
header('Location: admin.php');
die();
}elseif ($statut=='2'){
header('Location: accueil_cdf.php');
die();
}elseif ($statut=='3'){
header('Location: index.php');
die();
}
}
jusque-là, rien à dire... sauf que vu qu'ensuite tu commences à saisir du HTML, la cohérence des if{}else{} se perd. Résultat, quand tu veux dire que si la connexion n'est pas là il faut afficher le formulaire :
<article>
<?php
else if (!$connexion_ok) // Sinon, on affiche un message d'erreur
{
?>
ton code plante, car il ne sait pas à quelle condition il est rattaché. sauves déjà ton code existant sur un autre fichier et déplaces ce "else if" après la }} vu avant et où ça semblait aller bien.
- Edité par rga 24 janvier 2017 à 15:57:48
Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs
J'ai parcouru les 10 pages de sujets que le forum affiche sur des soucis similaires....
Mon code, je crois qu'il ne plante plus quand je met un if comme l'a dit julp dans la mésure où lorsque je rentre de faux identifiants, il m'affiche le formulaire avec le message d'erreur.
Psyckyo
voilà:
<?php
session_start();
// Le mot de passe n'a pas été envoyé
if (!isset($_POST['pseudo']) AND !isset ($_POST['pwd']) )
{
//Afficher le formulaire de saisie du mot de passe
header('Location: connexion.php');
die();
}
//Le mot de passe et l'identifiant ont été saisis
else
{
include("connexion_bdd.php");
//hachage du Mdp
$mdp_hash= sha1($_POST['pwd']);
//vérif des identifiants et mdp
$req= $bdd->prepare('SELECT id, statut FROM user WHERE pseudo = :pseudo AND mdp = :mdp AND validite = 1');
$req->execute(array(
'pseudo' => $_POST['pseudo'],
'mdp' => $mdp_hash));
$connexion_ok = $req->fetch();
if ($connexion_ok) // Si tout est correct
{
$_SESSION['id'] = $connexion_ok['id'];
$_SESSION['pseudo'] = $_POST['pseudo'];
$statut=$connexion_ok['statut'];
if ($statut=='1')
{
header('Location: admin.php');
die();
}
elseif ($statut=='2')
{
header('Location: accueil_cdf.php');
die();
}
elseif ($statut=='3')
{
header('Location: index.php');
die();
}
}
?>
<!DOCTYPE html>
<html>
<head>
<?php
include("head.php");
?>
</head>
<body>
<div id="bloc_page">
<?php
include("header.php");
?>
<section>
<article>
<?php
if (!$connexion_ok) // Sinon, on affiche un message d'erreur
{
?>
<form action="espace_dispatch.php" method="post">
<fieldset>
<legend>Connexion</legend>
<label>Nom d'utilisateur :</label>
<input type="text" name="pseudo" size="30"/> <br/><br/>
<label>Mot de passe :</label>
<input type="password" name="pwd" size="30"/><br/><br/>
<input type="submit" value="Envoyer"/></p>
</fieldset>
</form>
<?php
echo '<script> alert("Mot de passe et/ou identifiant incorrect");</script>';
}
?>
</article>
</section>
<?php
}
?>
</div>
</body>
</html>
concernant l'encodage, ce n'était pas à lui que je faisais référence .
En utilisant un logiciel comme Notepad++ pour ne pas le citer (trop tard, je sais), quand tu vas dans le menu "Encodage", il t'affiche "Encoder en " puis "ANSI, UTF-8, UTF-8 sans BOM, UTF-16BE ou UTF-16LE", puis plus bas "Convertir en " et la même liste.
ça devrait être mieux ensuite.
Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs
Winter Is Coming - Explorez le forum : votre problème a déjà dû être traité ailleurs
Header ('location: ') ne fonctionne pas
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
julp.fr ~ PHP < 8.0.0 : activer les erreurs PDO/SQL ~ PHP < 8.1.0 : activer les erreurs mysqli