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 -
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.

<!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
A voir également:

2 réponses

jordane45 Messages postés 40051 Date d'inscription   Statut Modérateur Dernière intervention   4 761
 
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.
0
tino_2065 Messages postés 38 Statut Membre
 
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>
0
Pitet Messages postés 2845 Statut Membre 528 > tino_2065 Messages postés 38 Statut Membre
 
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
0
tino_2065 Messages postés 38 Statut Membre > Pitet Messages postés 2845 Statut Membre
 
Toujours la même erreur
0
yg_be Messages postés 24281 Date d'inscription   Statut Contributeur Dernière intervention   1 586 > tino_2065 Messages postés 38 Statut Membre
 
Le message d'erreur indique "ligne 19": vois-tu une instruction
header
à la ligne 19?

Pour tester, fais un code php avec uniquement ceci:
<?php
header('location:home.php');
?>
0
Pitet Messages postés 2845 Statut Membre 528 > tino_2065 Messages postés 38 Statut Membre
 
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
0
jordane45 Messages postés 40051 Date d'inscription   Statut Modérateur Dernière intervention   4 761
 
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.

0
tino_2065 Messages postés 38 Statut Membre
 
Oui j'utilise notepad++ et l'encodage est en utf-8 sans BOM
0
tino_2065 Messages postés 38 Statut Membre
 
0
jordane45 Messages postés 40051 Date d'inscription   Statut Modérateur Dernière intervention   4 761 > tino_2065 Messages postés 38 Statut Membre
 
Lignes 25 et 28 faut remplacer les deux points par dess points virgule..
0
tino_2065 Messages postés 38 Statut Membre
 
Ci-dessous mon fichier "config1" :

https://www.cjoint.com/c/KKCgAMkxwsK
0
tino_2065 Messages postés 38 Statut Membre
 
Merci frère
0