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?

Dankjewel!
Ik zie $st-> (met -> dus) en opeens $st['..'] (met blokhaken).
Dat zal niet werken lijkt mij.
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 :/
Prachtig, het ziet er nu zo uit:


			$st = $this->db->prepare("SELECT * FROM users WHERE username=? AND password=?");
			$st->bindParam(1, $username);
			$st->bindParam(2, $password);
			$st->execute();
			while($aRow = $st->fetch(PDO::FETCH_ASSOC)) 
    		{ 
        		echo $aRow['username'].'<br />'; 
        		$_SESSION['username'] = $aRow['username'];
    		} 
			if($st->rowCount() == 1){

				header('location:dashboard.php');
				echo "Username is verified, Access granted.";
			}else{
				echo "Incorrect Credientials.";
			}
		}else{


Het werkt nu! :D
Alleen even uitzoeken hoe ik op Dashboard.php alle gegevens van die Username ophaal :D
Komt wel goed!

Dankjewel voor de hulp!
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{
?>
Oh, nog beter! Dankjewel voor de hulp!

Toevoeging op 28/10/2015 20:45:01:

Er is nog maar een probleempje :D

Ik heb gevonden hoe ik info door Username sessie kan ophalen uit de database,

Alleen ik kan de Connection.php niet benaderen:


<?php
require_once('connection.php');
session_start();
echo 'Welcome '.$_SESSION['username'];

$_SESSION['username'] = //loggedin user id;

$query = dbConnect()->prepare('SELECT * FROM users WHERE username = "'.$_SESSION['username'].'"');
$query->execute();

foreach ($query->fetchAll(PDO::FETCH_ASSOC) as $row) {
    echo 'Name: '. $row['Name'] . '<br>Money: '.$row['Money'] . '<br>XP: '.$row['XP'];
}
?>

ik krijg dit:


Fatal error: Call to undefined function dbConnect() in F:\xampp\htdocs\ALLTEST\dashboard.php on line 8


en in Connection staat dit:


<?php

class Connection{

	public function dbConnect(){
		return new PDO("mysql:host=localhost; dbname=Login1","root","#####");
	}

}

?>
aiaiai.

- 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):
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'stdout');
?>

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
... Ik dacht dat je gewoon dbConnect kunt gebruiken omdat connection.php word geinclude?
Een klasse (class) doet van zichzelf niets.

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.

Reageren