Posts by r8934

    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.

    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:






    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();

    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;
    	}

    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

    Je hoeft niet voor elke functie een try catch te schrijven.


    Als je in iedere function een exception eruit gooit als er iets mis gaat, hoef je het maar op 1 punt op te vangen.


    EDIT:
    Klik voor voorbeeld om exceptions naar een file weg te schrijven

    PHP
    $query =		"SELECT * FROM user 
    				JOIN klant ON klant.klant_id = user.klant_klant_id 
    			    JOIN email ON email.user_user_id = user.user_id";
    if(isset($_SESSION['klantid'])) {
    	$query .= " WHERE klant_klant_id = '".$_SESSION['klantid']."' ";
    }
    if(isset($_SESSION['sorted'])) {
    	$query .= " ORDER BY '".$_SESSION['sorted']."' ";
    }

    Je kan ook met ifjes controleren of de sessies gezet zijn, en dan de query aanpassen/verlengen?

    AngularJS kan dit.


    op de inputveld zet je een ng-model="naam"
    en waar je wilt dat het verschijnt zet je {{naam}}.


    Wat er ingevuld wordt in het input veld verschijnt dan automatisch op de plaats waar {{naam}} staat.


    Voorbeeld


    Om hier gebruik van te maken hoef je alleen angular.js te includen.
    Kan ook vanaf een CDN.


    Angular OfficialSite