Login geeft telkens fout
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
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
<?php
if (!isset($_POST['submit'])){
?>
<!-- The HTML login form -->
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
Username: <input type="text" name="username" /><br />
Password: <input type="password" name="password" /><br />
<input type="submit" name="submit" value="Login" />
</form>
<?php
} else {
require_once("includes/config.php");
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$sql = "SELECT user_id from users WHERE username LIKE '{$username}' AND password LIKE '{$password}' LIMIT 1";
$result = $db->query($sql);
if (!$result->num_rows == 1) {
echo "<p>Invalid username/password combination</p>";
} else {
echo "<p>Logged in successfully</p>";
// do stuffs
}
}
?>
if (!isset($_POST['submit'])){
?>
<!-- The HTML login form -->
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
Username: <input type="text" name="username" /><br />
Password: <input type="password" name="password" /><br />
<input type="submit" name="submit" value="Login" />
</form>
<?php
} else {
require_once("includes/config.php");
$username = trim($_POST['username']);
$password = trim($_POST['password']);
$sql = "SELECT user_id from users WHERE username LIKE '{$username}' AND password LIKE '{$password}' LIMIT 1";
$result = $db->query($sql);
if (!$result->num_rows == 1) {
echo "<p>Invalid username/password combination</p>";
} else {
echo "<p>Logged in successfully</p>";
// do stuffs
}
}
?>
Ik weet zeker dat ik de juiste gegevens invoer. Krijg telkens
Invalid username/password combination
--
Dit is de database
CREATE TABLE `users` (
`user_id` int(11) NOT NULL,
`role` varchar(10) NOT NULL,
`username` varchar(50) NOT NULL,
`password` varchar(256) NOT NULL,
`email` varchar(256) NOT NULL
) ENGINE=MyISAM
Iemand enig idee waarom ik niet verder kom?
En waarom kijk je niet of het aantal 1 is, waarna je dan de melding toont dat de gegevens kloppen?
Verder is het zeer afgeraden of je wachtwoorden open en bloot op te slaan zonder encoding.
ALs ik een goede tip mag geven: Gebruik password_hash en password_verify.
Gewijzigd op 16/12/2016 23:58:00 door - Ariën -
Tips zijn meer dan welkom. Ik ben echt leek. Maar hij wil gewoon niet inloggen
Code (php)
1
$sql = "SELECT user_id from users WHERE username ='".$username."' AND password ='".$password."'";
En verder:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
if ($result->num_rows == 1) {
echo "<p>Logged in successfully</p>";
// do stuffs
} else {
echo "<p>Invalid username/password combination</p>";
}
echo "<p>Logged in successfully</p>";
// do stuffs
} else {
echo "<p>Invalid username/password combination</p>";
}
En anders is het even debuggen, en kijken wat je invoert, en wat je met $result->fetch_assoc() uit de database haalt. Ergens moet een verschil zitten.
Ik probeer het maar wat ik ook doe ik kom er niet uit.
Wat had je geprobeerd dan?
Al veel verschillende dingen. Maar ik ga vandaag opnieuw beginnen. Bedankt voor de hulp tot nu toe :)
$sql = "SELECT user_id from users WHERE username LIKE '{$username}' AND password LIKE '{$password}' LIMIT 1";
Overigens is de SQL query vatbaar voor injectie. Pas de real_escape_string() functie / methode toe op de variabele delen in je query.
Gewijzigd op 17/12/2016 14:59:46 door Thomas van den Heuvel
Maar aanvullend ook suggestie om hier geen LIKE te gebruiken. LIKE wordt in combinatie met wildcards (%) gebruikt. Ook zou ik hier een prepared statement gebruiken (met PDO). Dwz een '?' of ':username ipv van de php variable.
Het is de bedoeling dat de login maar 1 user terug geeft, dus de query moet dus zo opgebouwd zijn dat een LIMIT niet nodig is. De username moet dus uniek zijn.
Code (php)
1
2
3
4
2
3
4
$stmt = $dbh->prepare("SELECT user_id FROM users WHERE username = ? AND password = ?");
if ($stmt->execute(array($username, $password))) {
$row = $stmt->fetch();
}
if ($stmt->execute(array($username, $password))) {
$row = $stmt->fetch();
}
of
Code (php)
1
2
3
4
2
3
4
$stmt = $dbh->prepare("SELECT user_id FROM users WHERE username = :username AND password = :password ");
if ($stmt ->execute(array(':username' => $username, ':password' => $password));){
$row = $stmt->fetch();
}
if ($stmt ->execute(array(':username' => $username, ':password' => $password));){
$row = $stmt->fetch();
}
waarbij :password de hashed versie is.
Gewijzigd op 18/12/2016 22:42:06 door Rob D
- Ariën -:
Het is niet nodig om het voorgaande bericht te quoten. Daarom heb ik die quote verwijderd.
Is het wel zo een goed idee om hem meteen een volledig gemaakte PDO te geven terwijl TS aangeeft dat hij PHP nog niet echt snapt. Dan is zijn code een goed begin, maar PDO / OOP nog iets te hoog gegrepen. (Naar mijn mening)
Gewijzigd op 19/12/2016 13:06:12 door - Ariën -
Misschien is een beginners cursusje SQL wel een beter idee. Als je pas bezig bent met PHP en daar al meteen
SQL doorheen mengt wordt de verwarring misschien wel groter.
Waar kun je dan het beste mee beginnen? Beste een boek? Of online tutorials misschien via hier?
Ikzelf raad CodeAcademy aan.
Dan ga ik daar in ieder geval eens kijken. Dank je wel :)