Login sessie met php en database probleem
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)
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
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();
}
?>
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)
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
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>
<?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 -
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.
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?
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.
Je kunt in de 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)
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
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.
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