Door
Luuk Steys
op 28-10-2015 19:44
gewijzigd op 28-10-2015 19:45
2.183 views
Hallo!
Ik leer op mijn school voor applicatie ontwikkelaar, aangezien dit mijn eerste jaar is (niveau 4) en ik vroeger het oude MYSQL heb gedaan/geprobeerd zover ik kwam, wil ik graag PDO gaan doen want ik wil een beetje voorblijven.
Nu heb ik dus een webpagina gemaakt, waarbij mensen wel kunnen inloggen en er ook een bericht komt te staan met:
Username is verified, Access granted.
Alleen, het lukt mij niet om de session aan te zetten, zodat ik voor iedere gebruiker een dashboard kan maken met hun eigen informatie.
Dit is wat ik geprobeerd heb maar een error kreeg:
$st = $this->db->prepare("SELECT * FROM users WHERE username=? AND password=?");
$st->bindParam(1, $username);
$st->bindParam(2, $password);
$st->execute();
if($st->rowCount() == 1){
$_SESSION['username'] = $st['username'];
header('location:dashboard.php');
echo "Username is verified, Access granted.";
Ik krijg dan deze error als ze inloggen:
Fatal error: Cannot use object of type PDOStatement as array in F:\xampp\htdocs\ALLTEST\user.php on line 25
Lijn 25:
$_SESSION['username'] = $st['username'];
Ik heb dat geprobeerd, maar dat werkt dus zoal niet, weet iemand hier raad mee?
Nee, inderdaad maar ook overal zoeken op google helpt me niet echt veel haha, want dan zie ik alleen maar codes van andere mensen maar haal mijn specifieke probleem er niet uit :/
Je haalt maar 1 record op neem ik aan.
Dus er hoeft geen while bij.
<?php
$st = $this->db->prepare("SELECT * FROM users WHERE username=? AND password=?");
$st->bindParam(1, $username);
$st->bindParam(2, $password);
$st->execute();
if($st->rowCount() == 1)
{
$aRow = $st->fetch(PDO::FETCH_ASSOC);
echo $aRow['username'].'<br />';
$_SESSION['username'] = $aRow['username'];
header('location:dashboard.php');
echo "Username is verified, Access granted.";
}else{
echo "Incorrect Credientials.";
}
}else{
?>
- na een header('Location: ...') dient altijd een exit; te staan
- er zou geen output geproduceerd mogen worden voor dit moment, anders krijg je de welbekende "headers already sent" foutmelding, dus ofwel het melden en weergeven van foutmeldingen staat uit, of je gebruikt output buffering ofzo
ontwikkel altijd met de volgende instellingen (plaats ergens vooraan in je code):
Het is beter dat deze fout(melding)en vroeg opgemerkt en opgelost worden, in plaats van dat deze je applicatie crashen tijdens je presentatie...
- dbConnect is geen functie, maar een methode (van een klasse), je zult dus eerst een object van deze klasse moeten maken, en vervolgens hier aan refereren (al is de toegevoegde waarde van zo'n constructie mij op dit moment bijster)
- for the love of all that is good and holy, lees alsjeblieft eerst dit artikel en repareer daarna je character encoderingen
Oh, en als je database-connectie om een of andere reden mislukt produceert dit bij PDO een fatal error die ook je database-credentials dumpt (mja, wie dat bedacht heeft...) dus het loont de moeite om in te stellen dat je PDO-klasse gebruik maakt van exceptions. Vervolgens dien je je applicatie in een try { ... } catch() { ... } blok te zetten.