1 login formulier voor meerdere accounts wilt niet lukken
Ik heb een formulier waar men kan inloggen voor zowel een klant account als een normale gebruiker account. Beide accounts staan in 2 aparte tabellen. Ik sla in een sessie op wat het type van de account is omdat de locatie waar je heen gestuurd wordt hetzelfde is, op de bestemmingspagina bekijk ik de sessie om te bepalen wat er ingeladen moet worden. Normale gebruiker heeft namelijk een ander menu dan de klant.
Het werkt opzich prima maar met mijn huidige code kan je niet dezelfde account gegevens hebben in beide tabellen wat ik een beetje dom vind. Je moet natuurlijk gewoon hetzelfde email en wachtwoord kunnen gebruiken voor zowel een klantenaccount als een gebruiker account. De sessie geeft bij dezelfde account namelijk altijd 2. (de laatste).
Dit is de code:
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
34
35
36
37
38
39
40
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
34
35
36
37
38
39
40
<?php // check gegevens in klanten tabel.
$q = 'SELECT email, wachtwoord FROM klanten WHERE email = "'.$sEmail.'" AND wachtwoord = "'.$sWachtwoord.'" AND status = 1';
$result = $database->query($q);
$status = mysqli_num_rows($result);
if ($status !== 1)
{
}
else
{
// Geldige inlog gegevens
echo 'Geldige login gegevens, gebruiker gevonden!';
$_SESSION['fbplogged'] = 1;
$_SESSION['fbputype'] = 1;
header('location: /account/');
}
// Check gegevens in gebruikers tabel.
$q = 'SELECT email, wachtwoord FROM gebruikers WHERE email = "'.$sEmail.'" AND wachtwoord = "'.$sWachtwoord.'" AND status = 1';
$result = $database->query($q);
$status = mysqli_num_rows($result);
if ($status !== 1)
{
$errors[] .= 'Login gegevens zijn incorrect, kan niet inloggen.';
}
else
{
// Geldige inlog gegevens
echo 'Geldige login gegevens, gebruiker gevonden!';
$_SESSION['fbplogged'] = 1;
$_SESSION['fbputype'] = 2;
header('location: /account/');
}
?>
$q = 'SELECT email, wachtwoord FROM klanten WHERE email = "'.$sEmail.'" AND wachtwoord = "'.$sWachtwoord.'" AND status = 1';
$result = $database->query($q);
$status = mysqli_num_rows($result);
if ($status !== 1)
{
}
else
{
// Geldige inlog gegevens
echo 'Geldige login gegevens, gebruiker gevonden!';
$_SESSION['fbplogged'] = 1;
$_SESSION['fbputype'] = 1;
header('location: /account/');
}
// Check gegevens in gebruikers tabel.
$q = 'SELECT email, wachtwoord FROM gebruikers WHERE email = "'.$sEmail.'" AND wachtwoord = "'.$sWachtwoord.'" AND status = 1';
$result = $database->query($q);
$status = mysqli_num_rows($result);
if ($status !== 1)
{
$errors[] .= 'Login gegevens zijn incorrect, kan niet inloggen.';
}
else
{
// Geldige inlog gegevens
echo 'Geldige login gegevens, gebruiker gevonden!';
$_SESSION['fbplogged'] = 1;
$_SESSION['fbputype'] = 2;
header('location: /account/');
}
?>
Gewijzigd op 26/02/2014 17:21:43 door Furio Scripting
Je controleert namelijk nergens of iemand in beide tabellen bestaat. Verder gebruik je in beide gevallen dezelfde sessie-naam; daar kan maar 1 waarde in zitten: of klant of gebruiker.
Waarom heb je het eigenlijk in twee tabellen? Want nu moet iemand die gebruiker en klant is op twee plaatsen zijn gegevens (mailadres, wachtwoord (nog meer?)) wijzigen.
Obelix en Idefix op 26/02/2014 17:58:47:
Als in beide gevallen (klant / gebruiker) eenzelfde combinatie is toegestaan, hoe wordt dan bepaald of de klantgegevens of de gebruikersgegevens moet worden getoond?
Je controleert namelijk nergens of iemand in beide tabellen bestaat. Verder gebruik je in beide gevallen dezelfde sessie-naam; daar kan maar 1 waarde in zitten: of klant of gebruiker.
Waarom heb je het eigenlijk in twee tabellen? Want nu moet iemand die gebruiker en klant is op twee plaatsen zijn gegevens (mailadres, wachtwoord (nog meer?)) wijzigen.
Je controleert namelijk nergens of iemand in beide tabellen bestaat. Verder gebruik je in beide gevallen dezelfde sessie-naam; daar kan maar 1 waarde in zitten: of klant of gebruiker.
Waarom heb je het eigenlijk in twee tabellen? Want nu moet iemand die gebruiker en klant is op twee plaatsen zijn gegevens (mailadres, wachtwoord (nog meer?)) wijzigen.
Door de sessie bepaal ik of het 1: klant is of 2: gebruiker. Als zowel dezelfde email en wachtwoord gebruikt wordt weet ik inderdaad dus niet of het nu een klant of gebruiker is. Vandaar dat ik mijn vraag post hier om tot een oplossing te komen hoe dit het beste aan te passen.
Ik heb 2 tabellen omdat dit overzichtelijker is en ik maar een klein aantal klanten verwacht en een groot aantal gebruikers.
Ik kan ook wel 2 inlog systemen gebruiken maar het lijkt mij handiger en mooier om er 1 te hebben die zelf bepaalt wie wat is.
Toevoeging op 26/02/2014 18:55:06:
Ik heb toch maar besloten voor 2 inlog formulieren omdat een normale gebruiker toch ook via facebook kan inloggen en een klant niet. Bedankt voor het lezen en meedenken!
Punt is, is een klant niet ook een gebruiker? Ik persoonlijk zou zien van wel en dus 1 tabel gebruiken voor beide. Vervolgens voeg je een extra veld toe aan die tabel welke je iets noemt als status of rank. Hierin geef je dan een getal aan wat de status van de gebruiker representeert. Klant of normale gebruiker.
Het lijkt mij dat je zo behoorlijk flexibel bent, plus dat het inloggen ineens een heel ander verhaal wordt.
Ik zal net zoals Milo S zegt één tabel gebruiker voor je users (klant en gebruiker) en dan een extra tabel rights koppelen aan de tabel users.
Voorbeeld.
+++USER+++
- userID Primary Key
- rightID Foreign Key
- gebruikersnaam
- wachtwoord
- adres
- etc
+++userRight+++
- rigthId Primary Key
- description
En als je de tabellen zal vullen krijg je ongeveer dit effect
+++USER+++
Userid = 1 | rightID = 1 | gebruiknaam = test | ww = test | email = [email protected]
Userid = 2 | rightID = 2 | gebruiknaam = test | ww = test | email = [email protected]
Userid = 3 | rightID = 2 | gebruiknaam = test | ww = test | email = [email protected]
Userid = 4 | rightID = 1 | gebruiknaam = test | ww = test | email = [email protected]
+++userRight+++
rigthId = 1 | description = klant
rigthId = 2 | description = gebruiker
Ik hoop dat je met dit voorbeeld verder kan
Ik ga het nog eens overwegen om er toch 1 van te maken.