Login sessie met php en database probleem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Martin Boersma

Martin Boersma

05/04/2021 15:09:07
Quote Anchor link
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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<?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.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<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.
Gewijzigd op 05/04/2021 16:31:51 door - Ariën -
 
PHP hulp

PHP hulp

14/04/2021 10:04:28
 
Adoptive Solution

Adoptive Solution

05/04/2021 15:56:07
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

05/04/2021 21:40:40
Quote Anchor link
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?
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?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.';
            }

?>


Toevoeging op 05/04/2021 21:50:13:

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.
Gewijzigd op 05/04/2021 21:53:03 door Frank Nietbelangrijk
 
- Ariën -
Beheerder

- Ariën -

05/04/2021 22:45:28
Quote Anchor link
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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.