Kleine Vragen Topic #4

Gestart doorOne2xs1.965 reacties23.994 weergaven

1.966 berichten · pagina 81 van 132

Berichten
951
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
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 sadley
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? sadley
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.
0
Stef

Lid

Berichten
10.150
Reputatie
2
Punten
0,00
Lid sinds
Laatst gezien
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 sadley
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? sadley
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?
0
Berichten
951
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
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 sadley
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? sadley
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
0
Stef

Lid

Berichten
10.150
Reputatie
2
Punten
0,00
Lid sinds
Laatst gezien
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 sadley
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? sadley
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 yummieDankjewel!
Maar dat zou denk ik niet mijn probleem oplossen sadley
0
Berichten
8.602
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
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 sadley
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? sadley
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 yummieDankjewel!
Maar dat zou denk ik niet mijn probleem oplossen sadley
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().
0
Berichten
951
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
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 sadley
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? sadley
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 yummieDankjewel!
Maar dat zou denk ik niet mijn probleem oplossen sadley
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 wink het lag niet aan zijn script maar aan zijn database, hij had max 45 tekens voor het wachtwoord terwijl bcrypt er veel meer gebruikt.
0
Stef

Lid

Berichten
10.150
Reputatie
2
Punten
0,00
Lid sinds
Laatst gezien
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 sadley
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? sadley
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 yummieDankjewel!
Maar dat zou denk ik niet mijn probleem oplossen sadley
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 wink 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! worshippy
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 sadley
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? sadley
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 yummieDankjewel!
Maar dat zou denk ik niet mijn probleem oplossen sadley
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?
0
Berichten
8.602
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
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 sadley
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? sadley
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 yummieDankjewel!
Maar dat zou denk ik niet mijn probleem oplossen sadley
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 wink 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! worshippy
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 sadley
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? sadley
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 yummieDankjewel!
Maar dat zou denk ik niet mijn probleem oplossen sadley
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.
0
Stef

Lid

Berichten
10.150
Reputatie
2
Punten
0,00
Lid sinds
Laatst gezien
Milan schreef:
Eerdere citaten tonen
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 sadley
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? sadley
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 yummieDankjewel!
Maar dat zou denk ik niet mijn probleem oplossen sadley
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 wink 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! worshippy
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 sadley
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? sadley
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 yummieDankjewel!
Maar dat zou denk ik niet mijn probleem oplossen sadley
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.

Oh wauw dat gaat diep joh redface
Laat ik eerst maar eens beginnen met een login systeem emo
0
One2xs

Bot · Topicstarter

Berichten
93.699
Reputatie
0
Punten
1,27
Lid sinds
Laatst gezien
Ieuw op die manier de zooi static maken is echt nasty ?
0
Stef

Lid

Berichten
10.150
Reputatie
2
Punten
0,00
Lid sinds
Laatst gezien
Sevvlor schreef:
Ieuw op die manier de zooi static maken is echt nasty ?
Verklaar je nader smile
0
Rik

Lid

Berichten
18.393
Reputatie
0
Punten
0,04
Lid sinds
Laatst gezien
Sevvlor schreef:
Ieuw op die manier de zooi static maken is echt nasty ?
Het is voor zon klein systeem niet zo heel nasty hoor? Je kan wel een hele factory gaan schrijven om user objecten aan te gaan maken, maar dat is nergens voor nodig. KISS.
0
Stef

Lid

Berichten
10.150
Reputatie
2
Punten
0,00
Lid sinds
Laatst gezien
Ik probeer in C# een random double te maken maar wanneer ik Random.NextDouble probeer dan kan dat maar tussen de 0 en de 1.0. Weet iemand hoe ik een random double tussen de 5.4179983 51.5623357 kan maken?
0
Berichten
13.482
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Stef schreef:
Ik probeer in C# een random double te maken maar wanneer ik Random.NextDouble probeer dan kan dat maar tussen de 0 en de 1.0. Weet iemand hoe ik een random double tussen de 5.4179983 51.5623357 kan maken?
Codeblok (voorbeeld.php):

1
2

Random rand = new Random( seed );
double randomGetal = 5.4179983 + rand.NextDouble( ) * 46.1443374; //(51.5623357 - 5.4179983);

Zoiets?
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren