Erreur 500 lorsque je tente la connexion

Résolu/Fermé
HitNRun Messages postés 34 Date d'inscription jeudi 7 juillet 2016 Statut Membre Dernière intervention 14 décembre 2022 - 11 déc. 2022 à 12:10
HitNRun Messages postés 34 Date d'inscription jeudi 7 juillet 2016 Statut Membre Dernière intervention 14 décembre 2022 - 11 déc. 2022 à 13:52

Bonjour,

je travail actuellement sur un projet pour mes cours, n'ayant pas encore appris les connaissances requise pour ce dernier j'essaye tant bien que mal de me débrouiller grâce à des recherches internet et la précieuse aide d'Open Classroom cependant je me retrouve aujourd'hui confronté à un problème que j'ai du mal à comprendre et corriger: j'ai déjà créer de quoi s'inscrire un formulaire qui marche bien avec ma bdd, mais lorsque j'essaye de me connecter, dès que j'entre quoi que ce soit dans les champs de mon formulaire de connexion j’obtiens une erreur 500.

Je vous joins ici mon code, tout cela n'est qu'une première pour moi alors je ne comprend pas forcément bien tout, n'hésitez pas à me donner des conseils si vous voyer des choses à améliorer :

Voici la partie de mon formulaire:

<form action="verification.php" method="POST">
        <?php if(isset($errorMessage)) : ?>
        <div class="alert alert-danger" role="alert">
        <?php echo $errorMessage; ?>
        <?php endif; ?>
            <p>
            Adresse mail
            <input class="champ1" type="email" name="email" placeholder="***@***">
            Mot de passe
            <input class="champ1" type="password" name="pswd" placeholder="password">
            </p>
            <input type="submit" value="Valider" class="btn btn-light">
</form>

et voici la partie de mon fichier "verification.php"

<?php
session_start();
try    
{
	// On se connecte à MySQL
	$mysqlClient = new PDO(
	'mysql:host=localhost;dbname=neptune;charset=utf8',
	'root',
	'root');
    ini_set('display_errors', 'on');
}
catch(Exception $e)
{
	// En cas d'erreur, on affiche un message et on arrête tout
        die('Erreur : '.$e->getMessage());
}
// On récupère tout le contenu de la table password
$sqlQuery = 'SELECT * FROM password';
$passwordStatment = $mysqlClient->prepare($sqlQuery);
$passwordStatment->execute();
$password = $passwordStatment->fetchAll();
// Validation du formulaire
if (isset($_POST['email']) &&  isset($_POST['pswd'])) {
    foreach ($password as $password) {
        if ( $password['email'] === $_POST['email'] &&
             $password['pswd'] === $_POST['pswd']) 
        {
            $loggedUser = [
                'email' => $password['email'],
            ];
            header("Location :index.php");
        } else {
            $errorMessage = sprintf('Les informations envoyées ne permettent pas de vous identifier : (%s/%s)',
                $_POST['email'],
                $_POST['pswd']
            );
        }
        $_SESSION['email']=$_POST['email'];
    }
}        
error_reporting(E_ALL);?>
A voir également:

1 réponse

jordane45 Messages postés 38161 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 5 mai 2024 4 657
Modifié le 11 déc. 2022 à 14:37

Bonjour,

Quelques erreurs dans ton code et des choses à améliorer.

<?php
//-----------------------------------------------------------//
//démarrage des sessions
//-----------------------------------------------------------//
session_start();

//-----------------------------------------------------------//
//Activation de l'affichage des erreurs pHP ( à mettre au début du code )
//-----------------------------------------------------------//
error_reporting(E_ALL);
ini_set('display_errors', 'on');

//-----------------------------------------------------------//
// Connexion à la bdd ( je te conseillerai de le placer dans un fichier externe
// et à l'inclure ( via un require_once  là où tu en as besoin
//-----------------------------------------------------------//
try{
   $bdd =new PDO('mysql:host=localhost;dbname=neptune;charset=utf8', 'root', 'root');
   // Activation des erreurs PDO
    $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
   // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
   $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch(PDOException $e) {
    die('Erreur : ' . $e->getMessage());
}

//-----------------------------------------------------------//
// Validation du formulaire
//-----------------------------------------------------------//
//Récupéaration propre des variables AVANT de les utiliser
// pour ça, tu peux utilisr l'écriture ternaire (sorte de if/else)
$email = !empty($_POST['email']) ? trim($_POST['email']) : NULL;
$pswd = !empty($_POST['pswd']) ? trim($_POST['pswd']) : NULL;


if ($email && $pswd) {
  //-----------------------------------------------------------//
  // On récupère les infos de l'utilisateur en fonction de son email  
  //-----------------------------------------------------------//
  $sql = 'SELECT * FROM password WHERE email =:email';
  $datas = [':email'=>$email];
  $passwordStatment = $bdd->prepare($sql);
  $passwordStatment->execute($datas );
  $user = $passwordStatment->fetch(); // on retourne une seule ligne de la bdd
  
  $bddPswd = $user['pswd'] ; // NB : On ne doit pas stocker le mot de passe en clair dans la bdd... il faut le "crypter" ( renseignes toi sur les fonctions password_hash et password_verify
  if($bddPswd == $pswd ){
    $_SESSION['user']=$user;
    header("Location :index.php");
    exit;
  } else {
    $errorMessage = sprintf('Les informations envoyées ne permettent pas de vous identifier : (%s/%s)',
      $email,
      $pswd
    );
    $_SESSION['error']=$errorMessage; 
    header("Location :index.php");
    exit;
  }
}        
?>
<?php
//Démarrage des sessions
session_start();

//activation affichage des erreurs PHP
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

//récupération des variables avant de les utiliser
// là encore.. écriture ternaire...
$errorMessage = !empty($_SESSION['error']) ?  !empty($_SESSION['error']) : NULL;

?>
<!Doctype html>
<html>
 <!-- le reste de ton html jussqu'à ton formulaire...... -->
 <!-- .... -->
 
<form action="verification.php" method="POST">
  <?php 
  if($errorMessage) {
    echo '<div class="alert alert-danger" role="alert">';
    echo $errorMessage; 
    echo "</div>";
  }
  ?>
  <p>
  Adresse mail
  <input class="champ1" type="email" name="email" placeholder="***@***">
  Mot de passe
  <input class="champ1" type="password" name="pswd" placeholder="password">
  </p>
  <input type="submit" value="Valider" class="btn btn-light">
</form>

1
HitNRun Messages postés 34 Date d'inscription jeudi 7 juillet 2016 Statut Membre Dernière intervention 14 décembre 2022 1
11 déc. 2022 à 13:52

Merci beaucoup pour ta précieuse aide, cela marche très bien désormais

0