Login telkens error

<?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
	}
}
?>	

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?
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].
Tips zijn meer dan welkom. Ik ben echt leek. Maar hij wil gewoon niet inloggen
$sql = "SELECT user_id from users WHERE username ='".$username."' AND password ='".$password."'";


En verder:

if ($result->num_rows == 1) {
        echo "<p>Logged in successfully</p>";
        // do stuffs
    } else {
	echo "<p>Invalid username/password combination</p>";
    }

[/code]

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 :)
Waarom staan username & password tussen accolades?
$sql = "SELECT user_id from users WHERE username LIKE '{$username}' AND password LIKE '{$password}' LIMIT 1";
    
Voor de duidelijkheid: in het oorspronkelijke codefragment staat op regel 21 een uitroepteken die daar niet hoort.

Overigens is de SQL query vatbaar voor injectie. Pas de real_escape_string() functie / methode toe op de variabele delen in je query.
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();
}


waarbij :password de hashed versie is.





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)

Reageren