Waarom gebruik je LIKE en niet = ?
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 [php]password_hash[/php] en [php]password_verify[/php].
Waarom staan username & password tussen accolades?
$sql = "SELECT user_id from users WHERE username LIKE '{$username}' AND password LIKE '{$password}' LIMIT 1";
Zoals Thomas al aangaf is de uitroepteken niet correct.
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.
$stmt = $dbh->prepare("SELECT user_id FROM users WHERE username = ? AND password = ?");
if ($stmt->execute(array($username, $password))) {
$row = $stmt->fetch();
}
of
$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();
}
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)