Bonjour à tous j'ai un problème aux niveau de mon codage pour la connexion

si mon nom de compte ou mot de passe est incorrect il me le dit

si j'ai pas remplis les champs il me le dit

mais quand je veut me connecté avec les bon identifiants sa ne change rien du tout sa actualise ma page et sais tout alors voila mon code :

<?php

if (isset($_POST'connexion'])) {

$pseudo = htmlspecialchars(trim($_POST'pseudo']));

$password = sha1($_POST'password']);

if ($pseudo != '' AND $password != '' ) {

$boucle = $bdd->query("SELECT * FROM register WHERE username = '$pseudo' ");

$sql = $boucle->fetch();

if ($sql'password'] == $password) {

session_start();

$_SESSION'pseudo'] = $sql'username'];

echo $alert->success("<strong>Succès :</strong> Connexion réussi.");

} else {

echo $alert->danger("<strong>Erreur :</strong> Nom de compte ou mot de passe incorrect");

}

} else {

echo $alert->danger("<strong>Erreur :</strong> Veuillez remplir tous les champs");

}

}

?>

7 réponses


yohan90
Auteur
Réponse acceptée

Donc je doit mettre sessions start tout en haut ?

antho07
Réponse acceptée

Oui

Bonjour,

Ou est situé ce code? Y-a-t-il de l'html au dessus?

yohan90
Auteur

Oui je t'envoie ça

<?php require('menu_top.php'); ?>

<div class="container col-md-6 col-md-offset-3">
<div class="row">
<?php
if (isset($_POST'connexion'])) {
$pseudo = htmlspecialchars(trim($_POST'pseudo']));
$password = sha1($_POST'password']);
if ($pseudo != '' AND $password != '' ) {
$boucle = $bdd->query("SELECT * FROM register WHERE username = '$pseudo' ");
$sql = $boucle->fetch();
if ($sql'password'] == $password) {
session_start();
$_SESSION'pseudo'] = $sql'username'];
echo $alert->success("<strong>Succès :</strong> Connexion réussi.");
} else {
echo $alert->danger("<strong>Erreur :</strong> Nom de compte ou mot de passe incorrect");
}

} else {
echo $alert->danger("<strong>Erreur :</strong> Veuillez remplir tous les champs");
}
}
?>

</div>
</div>

<div class="container col-md-6 col-md-offset-3">
<div class="row">
<div class="panel panel-default">
<div class="panel-heading">Inscription sur <font color="#d3220e"><?php echo $title; ?></font></div>
<div class="panel-body">

<form method="POST" class='form-horizontal'>
<!-- Nom de compte -->
<div class="form-group">
<label for="inputCompte" class="col-lg-2 control-label">Nom de compte</label>
<div class="col-lg-10">
<input type="text" class="form-control" id="inputCompte" placeholder="Nom de compte" autocomplete="off" name="pseudo" >
</div>
</div>

<!-- Mot de passe -->
<div class="form-group">
<label for="inputPassword" class="col-lg-2 control-label">Mot de passe</label>
<div class="col-lg-10">
<input type="password" class="form-control" id="inputPassword" placeholder="mot de passe" autocomplete="off" name="password" >
</div>
</div>

<div class="form-group">
<div class="col-lg-10 col-lg-offset-2">
<button class="btn btn-default">Annuler</button>
<button type="submit" class="btn btn-primary" name="connexion">Connexion</button>
</div>
</div>
</form>
</div>
</div>
</div>
</div>

<?php require('menu_top.php'); ?>

<div class="container col-md-6 col-md-offset-3">
<div class="row">
<?php
if (isset($_POST'connexion'])) {
$pseudo = htmlspecialchars(trim($_POST'pseudo']));
$password = sha1($_POST'password']);
if ($pseudo != '' AND $password != '' ) {
$boucle = $bdd->query("SELECT * FROM register WHERE username = '$pseudo' ");
$sql = $boucle->fetch();
if ($sql'password'] == $password) {
session_start();

On rappelle que le session_start(), notamment si la session est basée sur des cookies, va émettre des headers spécifiques dans la réponse.
Or, si quelque chose est déjà affiché (déjà envoyé au navigateur , cela s'envoie au fur et à mesure), cela va être dur de modifier les entêtes d'une réponse déjà partie...

Conclusion,

Le session_start placé à cet endroit ne peut pas fonctionner...

La doc de la méthode le précise bien:

Note:

Pour utiliser des sessions basées sur les cookies, session_start() doit être appelée avant d'afficher quoi que ce soit dans le navigateur.

yohan90
Auteur

D'accord merci

SVP utilisez les balises code pour afficher votre code sinon c'est impossible a lire. Merci