Stef schreef:Eerdere citaten tonen
Keffe schreef:Eerdere citaten tonen
Milan schreef:Eerdere citaten tonen
Stef schreef:Eerdere citaten tonen
Keffe schreef:Eerdere citaten tonen
Stef schreef:Eerdere citaten tonen
Keffe schreef:Eerdere citaten tonen
Stef schreef:Eerdere citaten tonen
Milan schreef:Eerdere citaten tonen
Stef schreef:Ik probeer een login systeem te maken met PDO maar het wil niet lukken

Dit is hoe ik de functie aanroep:
Codeblok (index.php):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
include_once head.php;
if($_SERVER[REQUEST_METHOD] == "POST") {
$user = new User();
if(isset($_POST[username]) && $_POST[password]) {
//$user->createUser($_POST[username], $_POST[password]);
if($user->login($_POST[username], $_POST[password]) == true) {
header(Location: dashboard.php);
} else {
echo "Fout met inloggen";
}
} else {
echo "Naam of wachtwoord niet ingevuld.";
}
}
?>
Dit is mijn login function in de User class:
Codeblok (User.class.php):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function login($username, $password) {
$db = new Database();
$usr = htmlentities($username);
//$pwd = $db->query("SELECT id,password FROM users WHERE username = ?", array($usr));
//$pwd = $db->connection->prepare("SELECT id,password FROM users WHERE username = ?");
$pass = $db->select("SELECT id,password FROM users WHERE username = ?", array($usr));
if(isset($pass[0][password])) {
if (password_verify($password, $pass[0][password])) {
$_SESSION[loggedin] = $pass[0][id];
return true;
} else {
return false;
}
} else {
return false;
}
}
En dit is de select function in de Database class:
Codeblok (Database.class.php):
1
2
3
4
5
public function select($query, $par) {
$query = $this->connection->prepare($query);
$query->execute($par);
return $query->fetchAll();
}
Als ik [c]$pass[0][password][/c] echo dan komt er netjes een encrypted wachtwoord uit.
Weet iemand wat ik fout doe?
toevoeging op 3 juni 2016, 11:40:33:De volledige code is trouwens hier te downloaden:
https://stefvdwel.stackstorage.com/index.php/s/OYOEvXUsom4Kcjj
Waar maak je verbinding met de database dan?
En je kunt de login functie beter static maken, aangezien je nu een leeg User object hebt.
Dat doe ik ook in de Database class:
Codeblok (voorbeeld.php):
1
2
3
4
public function __construct()
{
$this->connection = new PDO("mysql:host=$this->host;dbname=$this->database;charset=utf8mb4", $this->username, $this->password);
}
Wat gebeurt er dan als ik die functie static maak?
Als je de functie static maakt kun je het volgende doen:
User::login(bla, bla, bla);
Dan hoef je niet eerst de new user enz te doen.
toevoeging op 3 juni 2016, 13:58:28:Dit wil trouwens wel zeggen dat je geen dynamische shit erin kunt gebruiken haha.
Oh dat is inderdaad wel handig. Wat bedoel je met dynamische shit?
Als je een class hebt en je gebruikt de global variabele van die class (ben even de naam vergeten)
A.k.a:
Class test {
public $test = "haai";
public static function Test() {
return $this->test; <-- dit zou bijvoorbeeld niet kunnen.
Dat wil zeggen dat het dynamisch is. Niks dat buiten deze functie gebeurt dat je eigenlijk ergens anders ook wilt gebruiken werkt.
dus wat je wel dan kunt doen is via een andere class hier inladen en dan het resultaat dat daaruit komt gebruiken.
}
}
Ik hoop dat ik het zo duidelijk uitleg
Ah oké, ja dat had ik al begrepen

Dankjewel!
Maar dat zou denk ik niet mijn probleem oplossen

1. Debuggen. Je zou bijvoorbeeld overal echos kunnen neerzetten om te kijken waar je script precies doorheen gaat. Dan kun je ongeveer vinden waar je fout zit. Dus gewoon bijvoorbeeld echo username goed of username fout. Ook zou je de waardes kunnen echoen.
2. Hoe heb je je wachtwoord encrypted? password_verify werkt niet met alle encrypties.
Over het static VS object:
In object georiënteerd programmeren ga je uit van objecten. Een gebruiker op zich zelf is een object, maar als je nog niet ingelogd bent ben je dat in feite niet. Wat jij nu doet is een lege gebruiker aanmaken om te controleren of de login gegevens kloppen terwijl je het object voor de rest nergens voor gebruikt.
Om dit op te lossen kun je een static method/function, die kun je aanroepen zonder dat je de klasse eerst moet instantiëren (new User()). Dit kun je (in PHP) doen door [klasnaam]::[methodenaam], in jouw geval dus User::login().
Ik ben er al achter gekomen

het lag niet aan zijn script maar aan zijn database, hij had max 45 tekens voor het wachtwoord terwijl bcrypt er veel meer gebruikt.
Yess bedankt!

Milan schreef:Eerdere citaten tonen
Stef schreef:Eerdere citaten tonen
Keffe schreef:Eerdere citaten tonen
Stef schreef:Eerdere citaten tonen
Keffe schreef:Eerdere citaten tonen
Stef schreef:Eerdere citaten tonen
Milan schreef:Eerdere citaten tonen
Stef schreef:Ik probeer een login systeem te maken met PDO maar het wil niet lukken

Dit is hoe ik de functie aanroep:
Codeblok (index.php):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
include_once head.php;
if($_SERVER[REQUEST_METHOD] == "POST") {
$user = new User();
if(isset($_POST[username]) && $_POST[password]) {
//$user->createUser($_POST[username], $_POST[password]);
if($user->login($_POST[username], $_POST[password]) == true) {
header(Location: dashboard.php);
} else {
echo "Fout met inloggen";
}
} else {
echo "Naam of wachtwoord niet ingevuld.";
}
}
?>
Dit is mijn login function in de User class:
Codeblok (User.class.php):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public function login($username, $password) {
$db = new Database();
$usr = htmlentities($username);
//$pwd = $db->query("SELECT id,password FROM users WHERE username = ?", array($usr));
//$pwd = $db->connection->prepare("SELECT id,password FROM users WHERE username = ?");
$pass = $db->select("SELECT id,password FROM users WHERE username = ?", array($usr));
if(isset($pass[0][password])) {
if (password_verify($password, $pass[0][password])) {
$_SESSION[loggedin] = $pass[0][id];
return true;
} else {
return false;
}
} else {
return false;
}
}
En dit is de select function in de Database class:
Codeblok (Database.class.php):
1
2
3
4
5
public function select($query, $par) {
$query = $this->connection->prepare($query);
$query->execute($par);
return $query->fetchAll();
}
Als ik [c]$pass[0][password][/c] echo dan komt er netjes een encrypted wachtwoord uit.
Weet iemand wat ik fout doe?
toevoeging op 3 juni 2016, 11:40:33:De volledige code is trouwens hier te downloaden:
https://stefvdwel.stackstorage.com/index.php/s/OYOEvXUsom4Kcjj
Waar maak je verbinding met de database dan?
En je kunt de login functie beter static maken, aangezien je nu een leeg User object hebt.
Dat doe ik ook in de Database class:
Codeblok (voorbeeld.php): 1
2
3
4
public function __construct()
{
$this->connection = new PDO("mysql:host=$this->host;dbname=$this->database;charset=utf8mb4", $this->username, $this->password);
}
Wat gebeurt er dan als ik die functie static maak?
Als je de functie static maakt kun je het volgende doen:
User::login(bla, bla, bla);
Dan hoef je niet eerst de new user enz te doen.
toevoeging op 3 juni 2016, 13:58:28:Dit wil trouwens wel zeggen dat je geen dynamische shit erin kunt gebruiken haha.
Oh dat is inderdaad wel handig. Wat bedoel je met dynamische shit?
Als je een class hebt en je gebruikt de global variabele van die class (ben even de naam vergeten)
A.k.a:
Class test {
public $test = "haai";
public static function Test() {
return $this->test; <-- dit zou bijvoorbeeld niet kunnen.
Dat wil zeggen dat het dynamisch is. Niks dat buiten deze functie gebeurt dat je eigenlijk ergens anders ook wilt gebruiken werkt.
dus wat je wel dan kunt doen is via een andere class hier inladen en dan het resultaat dat daaruit komt gebruiken.
}
}
Ik hoop dat ik het zo duidelijk uitleg
Ah oké, ja dat had ik al begrepen

Dankjewel!
Maar dat zou denk ik niet mijn probleem oplossen

1. Debuggen. Je zou bijvoorbeeld overal echos kunnen neerzetten om te kijken waar je script precies doorheen gaat. Dan kun je ongeveer vinden waar je fout zit. Dus gewoon bijvoorbeeld echo username goed of username fout. Ook zou je de waardes kunnen echoen.
2. Hoe heb je je wachtwoord encrypted? password_verify werkt niet met alle encrypties.
Over het static VS object:
In object georiënteerd programmeren ga je uit van objecten. Een gebruiker op zich zelf is een object, maar als je nog niet ingelogd bent ben je dat in feite niet. Wat jij nu doet is een lege gebruiker aanmaken om te controleren of de login gegevens kloppen terwijl je het object voor de rest nergens voor gebruikt.
Om dit op te lossen kun je een static method/function, die kun je aanroepen zonder dat je de klasse eerst moet instantiëren (new User()). Dit kun je (in PHP) doen door [klasnaam]::[methodenaam], in jouw geval dus User::login().
Ah, dat heldert een hoop op. Is het dan de bedoeling om telkens als de user is ingelogd de userdata met de constructor in de properties van de class te zetten?
Dat zou kunnen ja, maar als je echt OO wilt programmeren zou je bijvoorbeeld voor het weergeven van online leden het volgende scenario kunnen bedenken:
1. De gebruiker vraagt de pagina onlineleden op die laat zien welke leden online zijn
2. De pagina roept controller op (bijv. UserController) en daarvan de statische functie getOnlineUsers(): [c]UserController::getOnlineUsers()[/c]. Deze returnt een array met User objecten van users die online zijn (dus in de getOnlineUsers() wordt een query uitgevoerd en User objecten aangemaakt).
3. De pagina foreacht door deze lijst heen en laat dan de usernames zien.