Login script, vast met 'else'
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..
Quote:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
session_start();
include_once 'dbconnect.php';
if(isset($_SESSION['userSession']))
{
header("Location: home.php");
exit;
}
if(isset($_POST['btn-login']))
{
$email = $MySQLi_CON->real_escape_string(trim($_POST['user_email']));
$upass = $MySQLi_CON->real_escape_string(trim($_POST['password']));
$query = $MySQLi_CON->query("SELECT user_id, user_email, user_pass, user_rang FROM users WHERE user_email='$email'");
$row=$query->fetch_array();
if(password_verify($upass, $row['user_pass']) && ($row['user_rang'] == '2'))
{
$_SESSION['userSession'] = $row['user_id'];
header("Location: home.php");
}
else
{
$msg = "<div class='alert alert-danger'>
<span class='glyphicon glyphicon-info-sign'></span> email or password does not exists!
</div>";
}
$MySQLi_CON->close();
}
?>
session_start();
include_once 'dbconnect.php';
if(isset($_SESSION['userSession']))
{
header("Location: home.php");
exit;
}
if(isset($_POST['btn-login']))
{
$email = $MySQLi_CON->real_escape_string(trim($_POST['user_email']));
$upass = $MySQLi_CON->real_escape_string(trim($_POST['password']));
$query = $MySQLi_CON->query("SELECT user_id, user_email, user_pass, user_rang FROM users WHERE user_email='$email'");
$row=$query->fetch_array();
if(password_verify($upass, $row['user_pass']) && ($row['user_rang'] == '2'))
{
$_SESSION['userSession'] = $row['user_id'];
header("Location: home.php");
}
else
{
$msg = "<div class='alert alert-danger'>
<span class='glyphicon glyphicon-info-sign'></span> email or password does not exists!
</div>";
}
$MySQLi_CON->close();
}
?>
Edit:
Geen bug of feature, maar een normale vraag over PHP.
Daarom een verhuizing naar het juiste forum.
Daarom een verhuizing naar het juiste forum.
Gewijzigd op 10/08/2016 13:27:37 door - Ariën -
Isset() geeft true/false terug en dat ga jij vergelijken met een lege string?????
Waarom zet je niet alle gegevens in de query maar doe je de helft met php?
- SanThe - op 18/07/2016 20:53:21:
Regel 5 is zeer vreemd.
Isset() geeft true/false terug en dat ga jij vergelijken met een lege string?????
Waarom zet je niet alle gegevens in de query maar doe je de helft met php?
Isset() geeft true/false terug en dat ga jij vergelijken met een lege string?????
Waarom zet je niet alle gegevens in de query maar doe je de helft met php?
Dit was niet bepaald mijn vraag...
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?
Quote:
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.
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.
Gewijzigd op 10/08/2016 16:00:50 door Frank Nietbelangrijk
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().
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
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>"
}
}
$_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>"
}
}
zoiets wordt het dan ongeveer