• Login
  • Register
  • Zoek
This Thread
  • Everywhere
  • This Thread
  • This Forum
  • Articles
  • Pages
  • Forum
  • Filebase Entry
  • More Options

ICTscripters

Dé plek voor IT

Dé plek voor IT

Login

Geavanceerde opties
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Home
  2. Forum
    1. Alle berichten
    2. Recente activiteiten
  3. ICT Nieuws
  4. Blog
  5. Marktplaats
    1. Werk
    2. Advertenties
    3. Domeinnamen
    4. Websites
    5. Design & lay-outs
    6. Scripts
    7. Overige
  6. Design
  7. Leden
    1. Actieve bezoekers
    2. Team
    3. Leden zoeken
  8. Downloads
  9. Goedkope domeinnamen
  1. Dé plek voor IT - ICTscripters
  2. Forum
  3. Scripting & programmeren
  4. PHP + SQL

Forum

  • Na 15 jaar terug van weggeweest: iCriminals.nl is terug (BETA)!

    Syntax 19 januari 2026 om 09:34
  • Developer Gezocht

    Mikevdk 10 januari 2026 om 18:57
  • Op zoek naar de legends

    Syntax 5 januari 2026 om 13:50
  • [FREE] WeFact Hosting module

    Jeroen.G 13 oktober 2025 om 14:09
  • Help testers nodig voor android app Urgent

    urgentotservices 26 september 2025 om 10:21
  • Versio vervanger

    Jeroen.G 25 augustus 2025 om 15:56
  • Afspraken systeem met planbeperking

    Lijno 1 augustus 2025 om 23:04
  • Partner Gezocht om meerdere NFT Collecties op Open Sea te Plaatsen

    NFT Art Designer 1 maart 2025 om 14:08

Marktplaats

  • 321 Nieuwe Domeinnamen December 2025

    shiga 1 januari 2026 om 10:26
  • Meerdere mafia game template te koop

    Syntax 26 december 2025 om 00:07
  • Van een pixelige afbeelding naar een strakke, moderne website

    Syntax 21 december 2025 om 17:05

Login class pdo

  • MBCompany
  • 13 april 2015 om 02:39
  • MBCompany
    Staat open voor projecten!
    Berichten
    119
    • 13 april 2015 om 02:39
    • #1

    Haay,

    K ben bezig met een login class en ik vraag me af of de manier van denken goed is?
    En of er wat verbeterd kan worden in de class.

    Code
    <?php
    	class User
    	{		
    		function authentication($username, $password)
    		{
    			global $db;
    		
    			try
    			{
    				
    				if(!empty($username) && !empty($password) )
    				{
    					$query = $db->prepare("SELECT `password` FROM `Users` WHERE `username`= ? LIMIT 1");
    					$query->bindParam(1, $username);
    					$query->execute();
    						
    					if($query->rowCount == 0 )
    					{
    						echo "FOUT";
    					}
    					else
    					{
    						$result = $query->fetchObject();	
    						
    							if(password_verify($password, $result->password) )
    							{
    								echo "GOED";
    							}
    							else
    							{
    								echo "FOUT";
    							}
    					}
    				
    				}
    				else
    				{
    					echo "VUL WEL WAT IN.";
    				}
    			
    			}
    			catch(PDOException $e) 
    			{ 
    				echo $e->getMessage(); 
    			}
    			
    		} 
    		
    	}
    Toon Meer


    Code
    include("../private/classes/User.class.php");
    	
    	if ($_SERVER['REQUEST_METHOD'] == 'POST')
    	{
    		$username = $_POST['username'];
    		$password = $_POST['password'];
    		
    		$user = new User();
    		$user->authentication($username, $password);
    		
    	}
    Toon Meer

    EDIT:

    Ik krijg nu wel deze foutmelding:

    Notice: Undefined property: PDOStatement::$rowCount inC:\xampp\htdocs\private\classes\User.class.php on line 18
    FOUT

    Ik sta open voor projecten.
    Ik sta ook tehuur als scripter
    PM voor meer informatie

  • Luc
    Software Engineer
    Ontvangen Reacties
    44
    Berichten
    1.986
    • 13 april 2015 om 08:34
    • #2

    volgensmij moet het

    $query->rowCount() zijn ipv $query->rowCount

    Verder, hou er rekening mee dat je in classes geen html wil gebruiken dus geen echo etc. Waarom in je klasse controleren of je wachtwoord en username niet leeg zijn? Je wil dat juist daarvoor checken, zodat je niet onnodig een klasse aanpsreekt.

    Verder zal ik de wachtwoordcheck in een aparte methode zetten.

    Website: https://devimo.nl
    Skype: https://join.skype.com/invite/dJyYILTt7Eqh

  • r8934
    Beginner
    Ontvangen Reacties
    7
    Berichten
    32
    • 13 april 2015 om 10:28
    • #3

    Wat luc zegt.

    Zoiezo moeten die echo's eruit. En gebruik de echo's in de pagina's waar nodig. zo leg je je output niet vast, en blijft je class flexibel.

    Verder zou ik gebruik maken van de constructor en daar $db als parameter meegeven, zo ben je niet afhankelijk van de globals, en kan je meerdere objecten van de class aanmaken zonder dat die dezelfde $db gebruikt.

    EDIT:
    Kijk eens naar je query

    Altijd open voor een leuk project ^^

  • Victor
    Master
    Ontvangen Reacties
    102
    Berichten
    1.680
    • 13 april 2015 om 15:21
    • #4

    Ik zou er zelfs een validation class van maken. Zo kan je al je formulieren door die ene class laten controleren (Code hergebruiken!).
    Overigens heb ik zelf nooit de user class "zichzelf laten verifiëren". Bij een user class kijk ik zelf altijd naar wat een user allemaal heeft en kan doen. Een user heeft een wachtwoord en kan die veranderen. Een user kan niet zichzelf verifiëren.
    Als je altijd op zo'n manier denkt weet je altijd waar je iets kan vinden. Werkt voor mij heel handig.

    Zoals hierboven ook al is gezegd echo je in principe nooit iets. Dat zou heel onhandig zijn als je bijvoorbeeld later besluit om je content in twee of meer talen te publiceren. Dan moet je in álle classes dingen gaan zitten veranderen.

    Oh, en wat Luc al aangeeft: rowCount is een function en geen property. Je zult er dus () achter moeten zetten.

    Laat maar horen als je nog vragen hebt! ;)

    Met vriendelijke groet,

    Victor
    Beheerder ICTscripters

  • MBCompany
    Staat open voor projecten!
    Berichten
    119
    • 13 april 2015 om 20:36
    • #5

    Foutmelding opgelost dom van me () vergeten.
    De echo’s waren enkel om te kijken of het wel naar behoren werkt.

    Bedankt voor jullie hulp.

    Vraag.
    Hoe moet ik de class dan gaan noemen? En hoe is het beste om het intedelen?

    Vraag 2
    Ik wil in het script na een aantal keer fout inloggen dat je 15 min ofzo niet meer kan inloggen.

    Ik weet wel hoe het moet etc maar ik weet niet hoe ik het handig kan maken?

    een function maken?
    Of gewoon in de class authentication?
    Of in het login script?

    Ik dacht aan een functie schrijven maar ik weet het nog niet zeker. heb de manier van denken volgens OOP nog niet onder de knie.

    Code
    class Authentication
    	{		
    		function login($username, $password)
    		{
    			global $db;
    		
    			try
    			{				
    					$query = $db->prepare("SELECT `password` FROM `Users` WHERE `username`= ? LIMIT 1");
    					$query->bindParam(1, $username);
    					$query->execute();
    						
    					if($query->rowCount() == 0 )
    					{
    						return 0;
    					}
    					else
    					{
    						$result = $query->fetchObject();	
    						
    							if(password_verify($password, $result->password) )
    							{
    								return 1;
    							}
    							else
    							{
    								return 0;
    							}
    					}										
    			}
    			catch(PDOException $e) 
    			{ 
    				echo $e->getMessage(); 
    				/* TODO Error logger. */
    			}
    			
    		} 
    		
    	}
    Toon Meer

    Ik heb het nu zo gedaan.
    Is de class indeling goed?

    Ik sta open voor projecten.
    Ik sta ook tehuur als scripter
    PM voor meer informatie

    Bewerkt 3 keer, laatst door MBCompany (14 april 2015 om 01:59).

  • r8934
    Beginner
    Ontvangen Reacties
    7
    Berichten
    32
    • 14 april 2015 om 09:11
    • #6

    Het eerste wat mij opvalt is alweer je query. Je controleert alleen of de gebruiker bestaat, en vervolgens geef je zelf het wachtwoord. Dit is dus niet inloggen, dit is alleen raad een gebruikersnaam in de database. Je controleert niet op het wachtwoord.

    Vraag 1 heb je zelf al opgelost, zo zou ik het ook doen. Het was eerder een authentication class dan een user class.

    Voor een userclass staat hier een voorbeeld van hoe victor het bedoelde.

    Vraag 2 kan je doen door een extra tabel toe te voegen, en iedere foute poging daarin op te slaan, vervolgens te checken wanneer de laatste foute login was, en daarvanuit verder gaan.
    Ik zou wel het account blokkeren en niet het ip adres.

    Zoals ik al eerder zei, ik zou database in de constructor meegeven. Gewoon een object als input. Dat werkt beter dan met globals werken.


    PHP
    class Authentication {		
    
    
            protected $db;
    
    
    	public function __construct(PDO $db) {
    		$this->db = $db;
    	}

    Altijd open voor een leuk project ^^

  • MBCompany
    Staat open voor projecten!
    Berichten
    119
    • 14 april 2015 om 19:22
    • #7

    @r8934

    Zoals je ziet controller ik wel op een wachtwoord?
    Of heb ik het mis?

    1. if(password_verify($password, $result->password) )
    2. {
    3. return 1;
    4. }

    Ook vraag ik me af of ik ipv return 1;
    $message = "Fout";
    kan zetten in de class.
    Dit heb ik al geprobeerd maar ik weet niet hoe ik het weer zal moeten aanroepen ik de login script

    Verder heb ik nog een vraag

    Het aanmelden hoe zal ik dat aanpakken?

    Een create function in de class user?
    Of zijn er andere suggesties?

    Ik sta open voor projecten.
    Ik sta ook tehuur als scripter
    PM voor meer informatie

    Bewerkt één keer, laatst door MBCompany (14 april 2015 om 19:32).

  • r8934
    Beginner
    Ontvangen Reacties
    7
    Berichten
    32
    • 14 april 2015 om 20:06
    • #8

    Hallo,

    In je query staat:
    "SELECT `password` FROM `Users` WHERE `username`= ? LIMIT 1"

    In deze query vraag je het wachtwoord op waar username gelijk is aan de ingevoerde waarde. Ik mis hier AND 'password' = ?.
    Je vraag in de query alleen om een username niet om een wachtwoord.

    Je kan een propery aan je class meegeven die false wordt als er een fout is opgetreden.
    Vervolgens kun je die met een method ophalen in je login script:


    Code
    class Bla {
    	
    	protected $valid = true;
    	protected $message = 'FOUT!';
    
    
    
    
    	public function getError() {
    		if(!$this->valid) {
    			return $this->message;
    		}
    		else {
    		   return false;
    		}
    	}
    
    
    }
    
    
    
    
    // loginscript :
    
    
    $bla = new Bla();
    
    
    echo $bla->getError()
    Toon Meer


    De valid property zet je op false bij een foute login.


    Edit:

    Ik zie inderdaad dat je wel op wachtwoord controleert, aleen op een andere manier dan hoe ik gewend ben.
    Ik vraag de user gegevens op als wachtwoord & username kloppen.

    Op jouw manier zal je dus 2 keer een database moeten aanroepen. 1x voor het wachtwoord en erna om de gevens eruit te halen.

    Password_verify is trouwens om hashes te controleren die aangemaakt worden met password_hash();

    Altijd open voor een leuk project ^^

    Bewerkt 5 keer, laatst door r8934: verkeede BBcodes (14 april 2015 om 20:45).

  • Victor
    Master
    Ontvangen Reacties
    102
    Berichten
    1.680
    • 14 april 2015 om 22:05
    • #9

    @r8934
    In feite maakt dat niet uit, of je nou in de query of buiten de query het wachtwoord controleert. ;) Is alleen extra werk, dus jouw manier is inderdaad wel beter. (Minder load)

    Je kunt denk ik beter overal return false meegeven, in plaats van een foutmelding. Zo kun je een aparte class aanmaken voor je foutafhandeling en is dat ook weer gecentraliseerd. Veel makkelijker te onderhouden.

    Ik kan zo snel even geen onbeantwoorde vragen eruit halen, dus roep maar als je nog iets wilt weten. :)

    Met vriendelijke groet,

    Victor
    Beheerder ICTscripters

  • MBCompany
    Staat open voor projecten!
    Berichten
    119
    • 15 april 2015 om 00:05
    • #10

    Hoe in een aparte class fouthandeling voeren dan??????

    Ik vroeg me ook af hoe ik aanmelden beste kon maken?

    Ik dacht in de Class User Create function zetten?

    Ik sta open voor projecten.
    Ik sta ook tehuur als scripter
    PM voor meer informatie

  • r8934
    Beginner
    Ontvangen Reacties
    7
    Berichten
    32
    • 15 april 2015 om 08:21
    • #11

    Voor de foutafhandeling zijn meerdere dingen mogelijk.

    Je kan met exceptions gaan werken.

    Je kan een static class schrijven, of een registry class.

    Je kan het ook via sessies doen en een getOnce() methode schrijven, die de sessie erna weer unset als de melding is getoond.


    Het ligt er maar net aan wat jij fijn vind.


    Het registreren is een mening, en geen echte vraag.
    Ik plaats zoiets liever in de controller.
    Er zijn ook genoeg mensen die er een aparte class voor schrijven, of het in de user class zetten.

    Altijd open voor een leuk project ^^

  • M.Beers
    Elite members
    Ontvangen Reacties
    31
    Berichten
    460
    • 15 april 2015 om 14:04
    • #12

    Bedenk dat elk object zijn eigen doel heeft! Simpel voorbeeld:

    User.php - Vaak het model dus is eigenlijk alleen maar een container voor alle data (bevat attributen + getters/setters)
    UserDao.php - Dit is het data object van de user (bevat alle database acties)
    AuthenticationService.php - Dit is het inloggen zelf, waar alle sessies en zooi worden aangemaakt.
    AuthenticationController.php - Dit is de pagina die je laat zien op het web met enkele acties

    Dit is een ongetest voorbeeld, heel snel geschreven:

    PHP
    <?php
    class User {
    	
    	private $id;
    	private $username;
    	private $password;
    	
    	public __construct($username, $password) {
    		$this->username = $username;
    		$this->password = $password;
    	}
    	
    	public function getUsername() {
    		return $this->username;
    	}
    	
    	public function setUsername($username) {
    		$this->username = $username;
    	}
    	
    	...
    	
    }
    
    
    class UserDao {
    	
    	public function getUserByUsername($username) {
    		// User object maken.
    		$user = new User();
    		
    		try {
    			$query = $db->prepare("SELECT * FROM `Users` WHERE `username`= ? LIMIT 1");
    			$query->bindParam(1, $username);
    			$query->execute();
    			
    			if($query->rowCount() == 0) {
    				return false;
    			}
    			
    			$result = $query->fetchObject();
    			
    			// Data naar user object plaatsen, kan volgensmij niet rechtstreekt uit de DB omdat het PHP is.
    			$user->setUsername($result->username);
    		} catch(\PDOException $e) {
    			
    		}
    		
    		return $user;
    	}
    	
    	...
    	
    }
    
    
    public AuthenticationService {
    	
    	public function loginUser($username, $password) {
    		$dao = new UserDao();
    		$user = $dao->getUserByUsername($username);
    		
    		if ($user->getPassword() === $password) {
    			return true;
    		} else {
    			return false;
    		}
    	}
    	
    	...
    	
    }
    
    
    public AuthenticationController {
    	
    	public function loginPage() {
    		$service = new AuthenticationService();
    		
    		if ($service->loginUser('piet', 'eenheellastigwachtwoord')) {
    			echo "Gebruiker is wel ingelogd";
    		} else {
    			echo "Gebruiker is niet ingelogd";
    		}
    	}
    	
    	...
    	
    }
    ?>
    Toon Meer

    Ik hoop dat dit je een beetje helpt, het zijn veel extra objecten maar ieder object heeft hierin zijn eigen rol die hij vervult.

    Dit was mijn spreekbeurt, zijn er nog vragen?

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!

Maak een account aan Login

ICT Nieuws

  • Fijne feestdagen

    tcbhome 28 december 2025 om 13:55
  • Kritieke update voor Really Simple Security-plug-in

    K.Rens 16 november 2024 om 16:12
  • ING Nederland streeft naar ondersteuning van Google Pay tegen eind februari

    K.Rens 2 november 2024 om 16:09

Blogs

  • Functioneel ontwerp

    Dees 28 december 2014 om 12:38
  • Access Control List implementatie in PHP/MySQL - deel 1/2

    FangorN 28 december 2018 om 12:35
  • Access Control List implementatie in PHP/MySQL - deel 2/2

    FangorN 29 december 2018 om 12:37

Gebruikers die dit topic bekijken

  • 1 Gasten
  1. Marktplaats
  2. Design
  3. Voorwaarden
  4. Ons team
  5. Leden
  6. Geschiedenis
  7. Regels
  8. Links
  9. Privacy Policy
ICTscripters ©2005 - 2026 , goedkope hosting door DiMoWeb.com, BE0558.915.582
Sponsors: Beste kattenhotel provincie Antwerpen | Beste Zetes eid kaartlezer webshop
Style: Nexus by cls-design
Stylename
Nexus
Manufacturer
cls-design
Licence
Commercial styles
Help
Supportforum
Visit cls-design