Erreur header information

Résolu/Fermé
Alexis - Modifié le 4 août 2021 à 14:17
 Alexis - 5 août 2021 à 15:51
Bonjour à tous,

J'ai un site où il y a un espace membres, avec un formulaire d'inscription et un formulaire de connexion. Le problème c'est que je ne peux pas me connecter en tant que tel : j'ai un message d'erreur qui me dit "Warning: Cannot modify header information - headers already sent by (output started at /home/salutsa1/public_html/inscriptions/connexionjeunes.php:1) in /home/salutsa1/public_html/inscriptions/connexionjeunes.php on line 16" lorsque je suis sur ces pages : https://inscriptions.saumurteamtriathlon.fr/connexionjeunes.php et https://inscriptions.saumurteamtriathlon.fr/connexion.php

Est ce que vous savez ce que je dois modifier ? Voici le code :
 <?php
$bdd = new PDO('mysql:host=***=***', '***', '***');

if(isset($_POST['formconnexion'])) {
$mailconnect = htmlspecialchars($_POST['mailconnect']);
$mdpconnect = sha1($_POST['mdpconnect']);
if(!empty($mailconnect) AND !empty($mdpconnect)) {
$requser = $bdd->prepare("SELECT * FROM membres WHERE mail = ? AND mdp = ?");
$requser->execute(array($mailconnect, $mdpconnect));
$userexist = $requser->rowCount();
if($userexist == 1) {
$userinfo = $requser->fetch();
$_SESSION['id'] = $userinfo['id'];
$_SESSION['pseudo'] = $userinfo['pseudo'];
$_SESSION['mail'] = $userinfo['mail'];
header("Location: profil.php?id=".$_SESSION['id']);
} else {
$erreur = "Mauvais mail ou mot de passe !";
}
} else {
$erreur = "Tous les champs doivent être complétés !";
}
}
?>
<html>
<head>
<title>Espace membre STT</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link id="u-theme-google-font" rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:100,100i,300,300i,400,400i,500,500i,700,700i,900,900i">
<style>

body{
font-family: roboto;
font-size: 15px;
background-color: #bada55;
color: #333333;
text-align: center;
}

#boite{
background-color: #ffffff;
height: auto;
width: 30%;
border-radius: 10px;
margin-top: 5%;
margin-left: auto;
margin-right: auto;
margin-bottom: 5%;
box-shadow: -1px 2px 5px 1px rgba(0, 0, 0, 0.8);
}

#logo{
padding-top: 7%;
display: block;
max-width: 50%;
height: auto;
position: center;
margin-right: auto;
margin-left: auto;
}

input[type=email]{
border-radius: 5px;
border-width: 1px;
width: 60%;
height: 30px;
}


input[type=password]{
border-radius: 5px;
border-width: 1px;
width: 60%;
height: 30px;
}

.boutton{
border-radius: 20px;
border-width: 0px;
background-color: #333333;
font-size: 15px;
padding: 8px;
max-width: 40%;
color: #ffffff;
transition: background-color 0.25s;
font-weight: bold;
text-decoration: none;
}

.boutton:hover{
background-color: #BADA55;
}

.liens{
font-size: 12px;
font-family: roboto;
text-decoration: none;
color: #BADA55;
}

@media (max-width: 575px){
#boite{
width: 80%;
font-family: roboto;
}

</style>
</head>
<body>
<div align="center" id="boite">
<img src="Logo.png" id="logo">
<h2>Connexion</h2>
<form method="POST" action="">
<p>Adresse email :</p>
<input type="email" name="mailconnect" placeholder="Mail" /><br>
<p>Mot de passe :</p>
<input type="password" name="mdpconnect" placeholder="Mot de passe" />
<br /><br />
<input type="submit" name="formconnexion" value="SE CONNECTER !" class="boutton" /><br><br>
</form>
<?php
if(isset($erreur)) {
echo '<font color="red">'.$erreur."</font>";
}
?>
<a href="index.php" class="liens">Retour</a><br><br>
</div>
</body>
</html>


Le message s'affiche uniquement quand il y a un bon mot de passe, sinon les messages d'erreurs s'affichent correctement.

Configuration: Windows / Chrome 92.0.4515.107

2 réponses

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
4 août 2021 à 14:43
Bonjour,

Déjà, lorsque tu postes du code sur le forum, tu dois préciser le langage dans les balises de code afin d'avoir la coloration syntaxique et la numérotation des lignes.
Documentation à lire entièrement disponible ici :
https://codes-sources.commentcamarche.net/faq/11288-poster-un-extrait-de-code

Ensuite:
Ton erreur vient du fait que tu n'as pas démarré tes sessions au début de ton script.

Et puis.. il y a plein de choses à dire sur ton code.
A commencer par le fait que tu stockes le mot de passe en clair dans ta bdd ( donc pb de sécurité)
Je t'invite à te pencher sur la fonction php password_hash et password_verify

Ensuite, pour pdo, il faut activer ( et gérer ) les éventuelles erreurs.
Pour ça, merci d'appliquer ceci
https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et enfin, dans la doc PDO il est bien indiqué que l'instruction rowCount est à oublier pour les requêtes de type SELECT. A la place, tu feras un COUNT sur le FETCHALL de ta requête

et enfin, htmlspecialchar s'utilise pour de l'affichage de données sur une page ... pas pour se servir ensuite des données dans des requêtes SQL ou pour les stocker en bdd. Vu que tu utilises PDO et les requêtes préparées , tu n'as pas besoin (et c'est même déconseillé..) d'utiliser cette fonction pur "protéger" tes variables dans tes requêtes
0
Bonjour Jordane,

Déjà merci de votre réponse. Je suis nouveau ici, je ne connais encore guère les uses et coutumes du Forum mais je vais tâcher de les appliquer.

J'ai ajouté
session_start();
mais j'ai un code erreur "Warning: session_start(): Cannot start session when headers already sent in /home/salutsa1/public_html/inscriptions/connexion.php on line 3"
J'ai essayé de mettre un
session_destroy();
mais j'ai là aussi un code erreur :(.

Après. Mes mots de passe ne sont pas stockés en clairs mais hashés via
sha1
ça a l'air ancien mais cela me suffit, il n'y a rien de réélement confidentiel...
Et je vais me renseigner sur les erreurs PDO.

Merci de votre aide :D
0
C'est bon ça fonctionne ! Je viens de supprimer un espace qui devait perturber !
0