Hallo, allereerst wil ik melden dat dit mijn eerste post is op deze website, dus als het niet helemaal goed is, is dat de reden.

Ik ben momenteel met een opdracht voor school bezig en wil daarvoor een login sessie maken. Ik heb via een tutorial de code al, maar het werkt bij mij niet en ik kan niet vinden waar het aanligt.


<?php
session_start();
//in DB, collectors table, handelingen, daar staan de users die toegang hebben tot de database met de bijbehorende servernaam en username.

$servername = "127.0.0.1";
$username = "root";
$password = "";
$databasename = "collectorsedition";
$message = "";

try {
  $conn = new PDO("mysql:host=$servername;dbname=$databasename", $username, $password);
  // set the PDO error mode to exception
  $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  //echo "Connected successfully";

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

        if(empty($_POST["name"]) || empty($_POST["surname"]) || empty($_POST["username"]) || empty($_POST["password"]) || empty($_POST["email"]))
        {
            $message = '<label>All fields are required</label>';
        }
        else
        {
            $query = "SELECT * FROM collectors WHERE name = :name AND surname = :surname AND username = :username AND password = :password AND email = :email ";
            $statement = $conn->prepare($query);
            $statement->execute(
                array(
                    'name'      =>      $_POST["name"],
                    'surname'      =>      $_POST["surname"],
                    'username'      =>      $_POST["username"],
                    'password'      =>      $_POST["password"],
                    'email'      =>      $_POST["email"]
                )
            );
            $count = $statement->rowCount();
            if($count > 0)
            {
                $_SESSION["name"] = $_POST["name"];
                header("location:login_success.php");
            }
            else
            {
                $message = '<label>Wrong Data</label>';
            }
        }
  }
}
  catch(PDOException $e) {
  echo "Connection failed: " . $e->getMessage();
}
?>


Dit is de PHP code, ik krijg dus op mijn website de 'Wrong Data error'. die staat onderaan de code. Hij hoort nadat ik alle gegevens in het inlog formulier heb ingevuld, naar de login_success.php file te gaan, maar hij laat dus die error zien.

<div class="container" style="width:500px;">  
                <?php  
                if(isset($message))  
                {  
                     echo '<label class="text-danger">'.$message.'</label>';  
                }  
                ?>  
                <h3 >PHP Login Script using PDO</h3><br />  
                <form method="post">  
                     <label>Name</label>  
                     <input type="text" name="name" class="form-control" />  
                     <br />  
                     <label>Surname</label>  
                     <input type="text" name="surname" class="form-control" />  
                     <br />  
                     <label>Username</label>  
                     <input type="text" name="username" class="form-control" />  
                     <br />  
                     <label>Password</label>  
                     <input type="password" name="password" class="form-control" />  
                     <br />  
                     <label>Email</label>  
                     <input type="email" name="email" class="form-control" />  
                     <br />  
                     <input type="submit" name="login" class="btn btn-info" value="Login" />  
                </form>  
           </div>


Dit hierboven is de code van het login form.

Ik kan zelf niet vinden waar de fout zit en hoop dus dat iemand hier mij kan helpen. Alvast mijn excuses als de formatting niet helemaal gestroomlijnd is voor deze website, dit is de eerste keer dat ik deze gebruik.
Waarom alle velden van de rolodex gebruiken om in te loggen?

Begin simpel.
Met alleen met de gebruikersnaam.
Bestaat die?
Doe dan een controle op het wachtwoord.
Is ook dat goed, dan is de gebruiker binnen.
Klaar.
Je kunt in de documentatie lezen dat de PSOStatement::execute functie true of false teruggeeft. Je zou eens kunnen kijken wat daar de uitkomst van is.

indien true: Dan is je query juist maar zijn er geen rijen gevonden die aan de criteria voldoen.

indien false: Dan is je query niet goed. Misschien heb je ergens een spelfoutje zitten?
<?php
if(!$statement->execute(
array(
'name' => $_POST["name"],
'surname' => $_POST["surname"],
'username' => $_POST["username"],
'password' => $_POST["password"],
'email' => $_POST["email"]
)
)) {
echo 'Deze query is onjuist.';
}
?>

[size=xsmall]Toevoeging op 05/04/2021 21:50:13:[/size]

Nog even een aanvulling: Wachtwoorden zou je niet in de database moeten opslaan. Kijk eens naar password_hash en password_verify. En wat je in de sessie wil zetten is vooral het id van de gebruiker die inlogt. Het id in de databasetabel is uniek in tegenstelling tot een naam die meerder malen voor zou kunnen komen.
Frank Nietbelangrijk op 05/04/2021 21:40:40


Nog even een aanvulling: Wachtwoorden zou je niet open en bloot in de database moeten opslaan. Kijk eens naar password_hash en password_verify.

FTFY

Reageren