Login script, vast met 'else'

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Ringo Content

Ringo Content

18/07/2016 20:39:46
Quote Anchor link
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..

Quote:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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> &nbsp; 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.
Gewijzigd op 10/08/2016 13:27:37 door - Ariën -
 
PHP hulp

PHP hulp

25/04/2024 02:23:45
 
- SanThe -

- SanThe -

18/07/2016 20:53:21
Quote Anchor link
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?
 
Ringo Content

Ringo Content

18/07/2016 21:03:04
Quote Anchor link
- 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?


Dit was niet bepaald mijn vraag...
 
- Ariën  -
Beheerder

- Ariën -

10/08/2016 13:30:27
Quote Anchor link
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?
 
Thomas van den Heuvel

Thomas van den Heuvel

10/08/2016 14:09:14
Quote Anchor link
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.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

10/08/2016 15:53:15
Quote Anchor link
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.
Gewijzigd op 10/08/2016 16:00:50 door Frank Nietbelangrijk
 
E WNSMA

E WNSMA

10/08/2016 16:28:31
Quote Anchor link
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().

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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> &nbsp; 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> &nbsp; permission denied (this user has not rang 2!) < /div>"
    }
}


zoiets wordt het dan ongeveer
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.