Door
Ringo Content
op 18-07-2016 20:39
gewijzigd op 10-08-2016 13:27
2.243 views
Hoi Phphulp,
Ik ben bezig met een Login script maar zit ik even vast met hoe ik de check functie van de user rang los een message kan geven in plaats van dat ie nu dezelfde message geeft als wanneer je username of wachtwoord verkeer is..
Beetje laat omdat het topic niet in het juiste forum stond en lastiger te vinden was. Maar op line 18 kan je toch prima een extra check inbouwen of de gebruiker correct is met wat de query teruggeeft?
Ik ben bezig met een Login script maar zit ik even vast met hoe ik de check functie van de user rang los een message kan geven in plaats van dat ie nu dezelfde message geeft als wanneer je username of wachtwoord verkeer is..
Je bedoelt dat je op grond van rang iemand een specifiek bericht wilt laten tonen? Euh, maak een gevalsonderscheid op grond van user_rang?
Het bovenstaande script betreft trouwens het inloggen, maar wellicht wil je op andere plaatsen ook iemand op grond van rang meer/minder dingen kunnen laten doen. Die informatie is op dat/dit moment niet bekend tenzij je de database opnieuw raadpleegt.
De eerste ingeving zou wellicht zijn om de rang ook maar in de sessie te kieperen bij het inloggen maar die ontwerpbeslissing heeft ook een keerzijde: zolang iemand ingelogd is/blijft blijft deze persoon dezelfde rang houden ook al wordt deze ondertussen in de database gewijzigd (of ontnomen).
Tenzij je een mechanisme hebt dat elke page-refresh de informatie in je sessie update, maar dan zou je net zo goed een User klasse/object kunnen maken die elk page-request gevuld wordt met informatie uit de database op grond van het user id in de sessie. Dit laatste is waarschijnlijk de beste manier om tegen te gaan dat er verouderde informatie in een sessie blijft hangen.
Daarnaast/In het algemeen is er iets voor te zeggen om de informatie die je in een sessie bijhoudt zo veel mogelijk te beperken zodat deze niet op den duur misbruikt wordt als een soort rijdend archief.
Ik begrijp de vraag niet helemaal dus ik hoop dat ik op de goede koers vaar.. Zoals Thomas al aangeeft is de gebruiker anoniem voordat deze ingelogd is. Zodra de gebruiker ingelogd is wordt deze naar home.php doorgestuurd.
Een melding zou dus op home.php getoond kunnen worden maar hoe weet home.php nu of deze gebruiker zojuist is ingelogd?
Als ik de vraag goed begrepen heb dan zou de oplossing kunnen zijn om een $flashMessage variabele aan te maken in de sessie en op de homepage controleren of deze variabele in de sessie aanwezig is. Zo ja: Bericht tonen en sessie variabele wissen. Zo wordt eenmalig een bericht getoond, ook al wordt je (meerdere malen) doorgestuurd als gebruiker.
Als je die controle op iedere pagina doet heb je een oplossing die je ook elders in je applicatie kunt gebruiken. Dat is voornamelijk handig na het afhandelen van formulieren. Om te voorkomen dat informatie uit een html formulier meerdere keren verstuurd wordt, wordt de gebruiker door de server ook doorgestuurd naar een ander pagina.
Zoals ik uit jou stukje tekst heb kunnen halen wil jij een $msg laten zien wanneer de username/password onjuist is.
Daarnaast wil je toch nog checken of de rang klopt zo niet, wil je deze gebruiker duidelijk maken dat de username in dit geval geen rang 2 heef.
Als dit juist is dan kun je deze zo in je else zetten van je password_verify().
if (password_verify($upass, $row['user_pass']) && $row['user_rang'] === '2') {
$_SESSION['userSession'] = $row['user_id'];
header("Location: home.php");
} else {
// Als gebruiker rang 2 beschikt maar username/password niet goed is
if ($row['user_rang'] !== '2') {
$msg = "<div class='alert alert-danger'> < span class = 'glyphicon glyphicon-info-sign' > < /span> email or password does not exists! < /div>";
} else {
// Als gebruiker rang NIET beschikt en username/password niet goed is
$msg = "<div class='alert alert-danger'> < span class = 'glyphicon glyphicon-info-sign' > < /span> permission denied (this user has not rang 2!) < /div>"
}
}