Erreur : impossible d'envoyer l'en-tête. En-tête déjà envoyé
tino_2065
Messages postés
38
Statut
Membre
-
tino_2065 Messages postés 38 Statut Membre -
tino_2065 Messages postés 38 Statut Membre -
Bonjour, les ainés j'ai un souci au niveau de ma page de connexion.
En effet, lorsque l'utilisateur de mon site essaie de se connecter,ça ne passe pas et voici le message d'erreur : impossible d'envoyer l'en-tête. En-tête déjà envoyé.
Ci-dessous mon code veuillez bien vouloir l'analyses et me dire où se trouve l'erreur.
En effet, lorsque l'utilisateur de mon site essaie de se connecter,ça ne passe pas et voici le message d'erreur : impossible d'envoyer l'en-tête. En-tête déjà envoyé.
Ci-dessous mon code veuillez bien vouloir l'analyses et me dire où se trouve l'erreur.
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css" />
</head>
<body>
<?php
require('config1.php');
if (isset($_POST['username'])){
$username = stripslashes($_REQUEST['username']);
$username = mysqli_real_escape_string($conn, $username);
$_SESSION['username'] = $username;
$password = stripslashes($_REQUEST['password']);
$password = mysqli_real_escape_string($conn, $password);
$query = "SELECT * FROM `users` WHERE username='$username'
and password='".hash('sha256', $password)."'";
$result = mysqli_query($conn,$query) or die(mysql_error());
if (mysqli_num_rows($result) == 1) {
$user = mysqli_fetch_assoc($result);
// vérifier si l'utilisateur est un administrateur ou un utilisateur
if ($user['type'] == 'admin') {
header('location:home.php');
}else{
header('location: index.php');
}
}else{
$message = "Le nom d'utilisateur ou le mot de passe est incorrect.";
}
}
?>
<form class="box" action="" method="post" name="login">
<h1 class="box-logo box-title">
<a href="https://waytolearnx.com/">WayToLearnX.com</a>
</h1>
<h1 class="box-title">Connexion</h1>
<input type="text" class="box-input" name="username" placeholder="Nom d'utilisateur">
<input type="password" class="box-input" name="password" placeholder="Mot de passe">
<input type="submit" value="Connexion " name="submit" class="box-button">
<p class="box-register">Vous êtes nouveau ici?
<a href="register.php">S'inscrire</a>
</p>
<?php if (! empty($message)) { ?>
<p class="errorMessage"><?php echo $message; ?></p>
<?php } ?>
</form>
</body>
</html>
Configuration: Android / Chrome 80.0.3987.132
2 réponses
-
Bonjour
Les instructions "header(...". doivent être placées avant tout affichage et/ou tout code html..
Il faut donc déplacer ton code php au dessus de ton code html.
-
J'ai déplacé mais toujours la même erreur.
<?php require('config1.php'); if (isset($_POST['username'])){ $username = stripslashes($_REQUEST['username']); $username = mysqli_real_escape_string($conn, $username); $_SESSION['username'] = $username; $password = stripslashes($_REQUEST['password']); $password = mysqli_real_escape_string($conn, $password); $query = "SELECT * FROM `users` WHERE username='$username' and password='".hash('sha256', $password)."'"; $result = mysqli_query($conn,$query) or die(mysql_error()); if (mysqli_num_rows($result) == 1) { $user = mysqli_fetch_assoc($result); // vérifier si l'utilisateur est un administrateur ou un utilisateur if ($user['type'] == 'admin') { header('location:home.php'); }else{ header('location: index.php'); } }else{ $message = "Le nom d'utilisateur ou le mot de passe est incorrect."; } } ?> <!DOCTYPE html> <html> <head><body> <link rel="stylesheet" href="style.css" /> </head> <form class="box" action="" method="post" name="login"> <h1 class="box-logo box-title"> <a href="https://waytolearnx.com/">WayToLearnX.com</a> </h1> <h1 class="box-title">Connexion</h1> <input type="text" class="box-input" name="username" placeholder="Nom d'utilisateur"> <input type="password" class="box-input" name="password" placeholder="Mot de passe"> <input type="submit" value="Connexion " name="submit" class="box-button"> <p class="box-register">Vous êtes nouveau ici? <a href="register.php">S'inscrire</a> </p> <?php if (! empty($message)) { ?> <p class="errorMessage"><?php echo $message; ?></p> <?php } ?> </form> </body> </html> -
Bonjour,
A priori le problème vient de la première ligne du fichier login.php ("sortie démarrée à .../login.php:1").
Assure toi de ne pas avoir d'espace ou de ligne vide avant l'ouverture de la balise php "<?php" qui doit être au tout début de ton fichier login.php
Si le problème persiste, comme indiqué par jordane45 sur ta précédente question, vérifie que tes fichiers .php sont bien encodé en UTF8 sans BOM.
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8 -
-
-
Tu as bien vérifié qu'il n'y a pas de BOM utf8 ?
Quel éditeur de texte tu utilises pour éditer les fichiers .php ?
Tu peux éventuellement partager ton fichier sur le forum avec cjoint pour que nous vérifions si celui-ci est bien encodé :
https://www.commentcamarche.net/faq/29493-utiliser-cjoint-pour-heberger-des-fichiers
-
-
Alors..
Déjà, voici quelques petites corrections/améliorations de ton code<?php //Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); require_once 'config1.php'; //traitement du formulaire if (isset($_POST['username'])){ $username = stripslashes(trim($_POST['username'])); $password = stripslashes(trim($_POST['password'])); $password = mysqli_real_escape_string($conn, $password); $username = mysqli_real_escape_string($conn, $username); $query = "SELECT * FROM `users` WHERE username='$username' and password='".hash('sha256', $password)."'"; $result = mysqli_query($conn,$query) or die(mysql_error()); if (mysqli_num_rows($result) == 1) { $_SESSION['username'] = $username; $user = mysqli_fetch_assoc($result); // vérifier si l'utilisateur est un administrateur ou un utilisateur if ($user['type'] == 'admin') { header('location:home.php'); exit;//toujours mettre un exit après une redirection }else{ header('location: index.php'); exit; //toujours mettre un exit après une redirection } }else{ $message = "Le nom d'utilisateur ou le mot de passe est incorrect."; } } ?> <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="style.css" /> <meta charset="utf8"> </head> <body> <form class="box" action="" method="post" name="login"> <h1 class="box-logo box-title"> <a href="https://waytolearnx.com/">WayToLearnX.com</a> </h1> <h1 class="box-title">Connexion</h1> <input type="text" class="box-input" name="username" placeholder="Nom d'utilisateur"> <input type="password" class="box-input" name="password" placeholder="Mot de passe"> <input type="submit" value="Connexion " name="submit" class="box-button"> <p class="box-register">Vous êtes nouveau ici? <a href="register.php">S'inscrire</a> </p> <?php if (! empty($message)) { ?> <p class="errorMessage"><?php echo $message; ?></p> <?php } ?> </form> </body> </html>
Ensuite... on ne sait rien de ton fichier config1.php .. j'espère qu'il contient bien un session_start() (sinon faudra penser à le mettre si tu veux pouvoir utiliser la variable $_SESSION)
Et puis, il ne doit pas contenir de code html, de echo ou de print ou de var_dump ... sinon ça empèche les instructions header de fonctionner.
Et enfin, encore une fois ... VERIFIE L'ENCODAGE DE TES FICHIERS ...
Notepad n'est pas le plus adapté à la programmation...
utilise notepad++ ou un ide plus évolué ( visual studio code, netbeans php, php storm ... )
Et pour rappel... pour vérifier l'encodage, voir chapitre 1 de ce lien :
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
Edit: correction des lignes 25 et 28.
