2 votes

Système de connexion PHP PDO

J'essaie de faire fonctionner mon formulaire de connexion avec php et une base de données mysql. Pour l'instant, le formulaire ne semble rien faire. Lorsque je clique sur soumettre, la page de connexion est rechargée sans le formulaire de connexion.

Structure de la base de données :

Database structure

Le code est le suivant :

<?php

require_once 'header.php';
$current = 'login.php';
require_once 'navigatie.php';

if(isset($_POST['login'])){

    $username = $_POST["gebruiker"];
    $password = $_POST["psw"];

    try{
        $stmt = $db->prepare("SELECT * FROM gebruiker WHERE (naam = :gebruiker AND wachtwoord = :psw)");
            $stmt ->bindParam(":naam", $username);
        $stmt ->bindParam(":psw", $password);
        $stmt ->execute();
        $db = null;
        $result=$stmt->fetch();
        if($stmt->rowCount() == 1)
        {
            //gebruiker bestaat
            header("location: index.php");
            session_start();
        }
        else{
            echo "gebruiker bestaat niet";
        }

    }
    catch (PDOException $e){
        $message = $e . "Failed";
    }

}
?>

<main>

    <div class="row">
    <form role="form" class="col s12" method="POST" action="login.php" >
        <div class="row">
            <div class="container">

                <div class="input-field col s6">
                    <i class="material-icons prefix">face</i>
                    <input name="gebruiker" id="icon_prefix" type="text" class="validate">
                    <label for="icon_prefix">Naam</label>
                </div>

                <div class="input-field col s6">
                    <i class="material-icons prefix">lock</i>
                    <input name="psw" id="icon_psw" type="password" class="validate">
                    <label for="icon_psw">password</label>
                </div>

                <div class="col s12" >
                    <button id="submit" class="btn waves-effect waves-light" type="submit" name="login">Login
                        <i class="material-icons right">send</i>
                    </button>

                </div>
            </div>
    </form>
    </div>

2voto

bcesars Points 981

Il y a quelque chose qui cloche dans ces deux lignes ci-dessous :

$stmt = $db->prepare("SELECT * FROM gebruiker WHERE (naam = :gebruiker AND wachtwoord = :psw)");
$stmt ->bindParam(":naam", $username);

Vous essayez de lier un paramètre nommé :naam mais ce mot semble être une colonne dans votre déclaration SQL.

Après avoir analysé votre script et en supposant que gebruiker reçoit de la demande POST, ces lignes devraient être :

$stmt = $db->prepare("SELECT * FROM gebruiker WHERE (naam = :gebruiker AND wachtwoord = :psw)");
$stmt ->bindParam(":gebruiker", $username); //<-- Look at Param name binded

0voto

mathias van sele Points 27

Avec votre aide et celle de mon professeur, j'ai trouvé une âme soeur. J'ai modifié la base de données et le code a quelques lignes de code supplémentaires. Mais je poste ceci pour aider d'autres étudiants ou codeurs.

<?php
session_start();
require_once 'header.php';
$current = 'login.php';
require_once 'navigatie.php';
$errMsg ="";

if(isset($_POST['login'])){
    require_once "connectie.php";
    $username = $_POST["username"];
    $password = $_POST["password"];

    if($username == '')
        $errMsg = "geen gebruiker gedefineerd";

    if($password == '')
        $errMsg = "Geen wachtwoord";
    if ($errMsg == ''){

        $stmt = $db->prepare("SELECT id,username,password FROM gebruiker WHERE username =:username AND password =:password");
        $stmt ->bindParam(':username',$username);
        $stmt ->bindParam(':password', $password);
        $stmt->execute();
        $results = $stmt->fetch();
        if($stmt->rowCount() == 1 ){
            $_SESSION['username'] = $username;
            echo "<script>window.location = 'index.php'</script>";
        }else{
            $errMsg = "Gebruiker en/of wachtwoord niet gevonden";
        }
    }
}
?>

<main>
    <?php echo $errMsg;?>
    <div class="row">

    <form role="form" class="col s12" method="POST" action="login.php" >
        <div class="row">

            <div class="container">

                <div class="input-field col s6">
                    <i class="material-icons prefix">face</i>
                    <input name="username" id="icon_prefix" type="text" class="validate">
                    <label for="icon_prefix">Naam</label>
                </div>

                <div class="input-field col s6">
                    <i class="material-icons prefix">lock</i>
                    <input name="password" id="icon_psw" type="password" class="validate">
                    <label for="icon_psw">password</label>
                </div>

                <div class="col s12" >
                    <button id="submit" class="btn waves-effect waves-light" type="submit" name="login">Login
                        <i class="material-icons right">send</i>
                    </button>

                </div>
            </div>
    </form>
    </div>

</main>
<?php require_once 'footer.php'; ?>

J'ai modifié les tables suivantes dans la base de données : naam en nom d'utilisateur et wachtwoord en mot de passe. Non inclus dans cette réponse est ma connexion séparée.php où la variable $db est définie.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X