Ik ben sinds een tijdje begonnen met het leren van PHP. Ik ben nu een tutorial aan het volgen om een simpel PHP/MySQL-forum te maken. Echter gebruikt deze tutorial nog de mysql* functies. Op zich geen probleem want ik heb al veel van deze functies omgezet naar de PDO-manier. Echter bij deze functie kom ik er niet uit:
$sql = "SELECT
user_id,
user_name,
user_level
FROM
users
WHERE
user_name = '" . mysql_real_escape_string($_POST['user_name']) . "'
AND
user_pass = '" . sha1($_POST['user_pass']) . "'";
$result = mysql_query($sql);
if(!$result)
{
//something went wrong, display the error
echo 'Something went wrong while signing in. Please try again later.';
//echo mysql_error(); //debugging purposes, uncomment when needed
}
else
{
//the query was successfully executed, there are 2 possibilities
//1. the query returned data, the user can be signed in
//2. the query returned an empty result set, the credentials were wrong
if(mysql_num_rows($result) == 0)
{
echo 'You have supplied a wrong user/password combination. Please try again.';
}
else
{
//set the $_SESSION['signed_in'] variable to TRUE
$_SESSION['signed_in'] = true;
//we also put the user_id and user_name values in the $_SESSION, so we can use it at various pages
while($row = mysql_fetch_assoc($result))
{
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['user_name'] = $row['user_name'];
$_SESSION['user_level'] = $row['user_level'];
}
echo 'Welcome, ' . $_SESSION['user_name'] . '. <a href="index.php">Proceed to the forum overview</a>.';
}
} Dit was de oorspronkelijke code van de tutorial. Die heb ik zo aangepast:
$sql = "SELECT
user_id,
user_name,
user_level
FROM
users
WHERE
user_name = '" . ($_POST['user_name']) . "'
AND
user_pass = '" . sha1($_POST['user_pass']) . "'";
$stmt = $db->prepare($sql);
$stmt->execute();
if(!$stmt)
{
// Er is iets fout gegaan, laat de error zien
echo 'Er is iets fout gegaan bij het registreren, probeer het later nog eens.';
}
else
{
/* De query is succesvol uitgevoerd, nu zijn er twee mogelijkheden
1. De query geeft data terug, de gebruiker kan inloggen
2. De query geeft een lege set resultaten terug, de ingevoerde gegevens zijn fout
*/
$rows = $stmt->fetchAll();
$num_rows = count($rows);
if($num_rows == 0)
{
echo 'Je hebt een verkeerde gebruikersnaam/wachtwoord combinatie ingevuld. Probeer het opnieuw.';
}
else
{
// Zet de $_SESSION['signed_in']- variabele op TRUE
$_SESSION['signed_in'] = true;
// We plaatsen ook de user_id en user_name waarden in de $_SESSION, zodat we het kunnen gebruiken op verschillende pagina's
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['user_name'] = $row['user_name'];
$_SESSION['user_level'] = $row['user_level'];
}
echo 'Welcome, ' . $_SESSION['user_name'] . '. <a href="index.php">Ga door naar het forumoverzicht!</a>.';
}
}
} Als een gebruiker inlogt, kan hij de gebruikersnaam niet weergeven. Het probleem speelt zich dus af in de while loop, maar ik kom er maar niet achter wat het probleem is. Hij kan op een of andere manier de query niet fetchen bij de while-loop, waardoor er geen betekenis aan de sessie-variabelen wordt gegeven en ik de gebruikersnaam niet kan teruggeven.
Iemand enig idee wat ik fout doe?
Alvast bedankt, Mike