Login page
Hierbij moeten we zorgen dat iemand kan inloggen.
Ik heb een database met de tabel 'Inloggegevens' en de kolommen 'GEBRUIKERSNAAM' en 'WACHTWOORD' (varchar 100+)
Nu heb ik een form action waar jij je gebruikersnaam en wachtwoord invult, namelijk:
Gebruikersnaam:
zelfde voor wachtwoord alleen dan is Gebruikersnaam natuurlijk vervangen door Wachtwoord.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php.... $Gebruikersnaam = ($POST=['Gebruikersnaam']); etc included.
Nu komt uiteindelijk in mijn php scriptje dit voor :
$query = mysql_query("SELECT * FROM `Inloggegevens` WHERE GEBRUIKERSNAAM ='$Gebruikersnaam'",$mysql) or die ("De query is mislukt!");
$numrows = mysql_num_rows($query);
if ($numrows!=0)
{
while ($row = mysql_fetch_assoc($query))
{
$GEBRUIKERSNAAM = $row ['$Gebruikersnaam'];
$WACHTWOORD = $row ['$Wachtwoord'];
}
if ($Gebruikersnaam==$GEBRUIKERSNAAM&&$Wachtwoord==$WACHTWOORD)// $dbGEBRUIKERSNAAM// $dbWACHTWOORD
{
echo "daaaauyymmmmm eindelijk gelukt";
}
else
echo "ja van jou wachtwoord klopt helemaal nada!";
.... ?>
Nu komt uiteindelijk in mijn php scriptje dit voor :
$query = mysql_query("SELECT * FROM `Inloggegevens` WHERE GEBRUIKERSNAAM ='$Gebruikersnaam'",$mysql) or die ("De query is mislukt!");
$numrows = mysql_num_rows($query);
if ($numrows!=0)
{
while ($row = mysql_fetch_assoc($query))
{
$GEBRUIKERSNAAM = $row ['$Gebruikersnaam'];
$WACHTWOORD = $row ['$Wachtwoord'];
}
if ($Gebruikersnaam==$GEBRUIKERSNAAM&&$Wachtwoord==$WACHTWOORD)// $dbGEBRUIKERSNAAM// $dbWACHTWOORD
{
echo "daaaauyymmmmm eindelijk gelukt";
}
else
echo "ja van jou wachtwoord klopt helemaal nada!";
.... ?>
Rest van het scriptje werkt fatsoenlijk en is daarom niet van toepassing
Nu zal dit scriptje, ookal vul ik wachtwoord en gebuikersnaam goed in, nooit inloggen, mijn vraag is waarom?!
MVG
Jasper
Gewijzigd op 27/03/2013 18:59:57 door Jasper Konsten
- wachtwoorden niet als plain text opslaan in een database, altijd beveiligd. Ja, ik weet dat dit 'maar voor school' is, maar op school dien je het volgens mij juist te leren. Niet nu dus lekker makkelijk ga doen, gewoon direct goed.
- in je query selecteer je al het record op gebruikersnaam, waarom dan later nog eens checken? Dat is overbodig.
- het gebruik van een variabele $gebruikersnaam en $GEBRUIKERSNAAM in 1 script is een slechte gewoonte. Ja, php zal het als twee verschillende zien, maar het werkt erg snel fouten in de hand. Welke is ook al weer welke?
- het copieren van variabele alleen maar omdat het leuk is is ook een slechte gewoonte. Dit dient geen enkel doel.
- geen 'die()' gebruiken als foutafhandeling. Ook dat is weer een slechte gewoonte die ze er op school echt uit zouden moeten slaan (maar blijkbaar accepteren...)
- Dit: $row ['$Gebruikersnaam']; is waarschijnlijk echt de boosdoener. Er bestaat geen kolom $Gebruikersnaam in je tabel mag ik hopen, dus dit gaat je een foutmelding opleveren. Je bedoelt waarschijnlijk $row['gebruikersnaam'] (of iets anders, omdat je hoofdlettergebruik nogal vreemd is en ook dat je problemen op zal gaan leveren).
Al met al, als ik je leraar was zou ik dit op alle punten direct naar je terug sturen om het nog eens te proberen.
Je hebt gelijk over het wachtwoord, ik moet md5 encryptie gaan gebruiken maar wou eerst dat ik uberhaupt kon inloggen. In je laatste opmerking over $row zag ik de fout toen jij hem beschreef, namelijk: $GEBRUIKERSNAAM = $row ['$Gebruikersnaam']; moet dit zijn: $Gebruikersnaam = $row ['$GEBRUIKERSNAAM']; De rest is voor mij als nieuweling moeilijk te begrijpen.
Maar in ieder geval hardstikke bedankt, nu kan ik weer verder!
Nee, dat laatste is ook weer onzin.
zou je je code even tussen [ c o d e ] en [ / c o d e ] willen zetten tevens < ? p h p en ? > willen gebruiken, dit allemaal zonder spaties!
$Gebruikersnaam = $row ['$GEBRUIKERSNAAM'];
Terwijl het dit zou moeten zijn
$Gebruikersnaam = $row ['GEBRUIKERSNAAM'];
Zonder dollarteken in de array key.
Maar ook hier kopieer je weer een variabele hoor.
Gewijzigd op 27/03/2013 18:38:30 door Mark Hogeveen
@Frank zal ik ff proberen
@Klopt ik heb het veranderd.. nu zit ik weer vast lol
ik zie variabelen / mysql namen met allemaal hoofdletters of één hoofdletter. Ik zou in mysql kolomnamen, tabelnamen en ook php variabelen met uitsluitend kleine letters schrijven.
Nog steeds bestaat mijn database ui : 'Inloggegevens' en de kolommen 'GEBRUIKERSNAAM' en 'WACHTWOORD' (ook nog meer maar dat is nu niet van belang)
De PHP zegt nu automatisch fout wachtwoord ookal zijn gebruikersnaam en wachtwoord goed ingevoerd.
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
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
<?php
$username =($_POST ['username']);
$password =($_POST ['password']);
$mysql = mysql_connect("localhost" , "geheimpje!" , "nog een geheimpje!") or die("Fout:Verbinding met mysql mislukt!");
mysql_select_db("DASdatabase",$mysql) or die("Fout: De database kon niet worden geopend, balen!");
if ($username&&$password)
{
$query = mysql_query("SELECT * FROM Inloggegevens WHERE GEBRUIKERSNAAM ='$username'",$mysql) or die ("De query is mislukt!");
$numrows = mysql_num_rows($query);
if ($numrows!=0)
{
while ($row = mysql_fetch_assoc($query))
{
$username = $row ['GEBRUIKERSNAAM'];
$password = $row ['WACHTWOORD'];
}
if ($username==GEBRUIKERSNAAM&&$password==WACHTWOORD)// $WACHTWOORD?!?!??!
{
echo "U bent ingelogd!";
}
else
echo ("Wachtwoord is niet correct!");
}
else
echo ("Gebruikersnaam is niet correct of bestaat niet!");
}
else
echo ("Vul alle velden in, tysm!");
?>
$username =($_POST ['username']);
$password =($_POST ['password']);
$mysql = mysql_connect("localhost" , "geheimpje!" , "nog een geheimpje!") or die("Fout:Verbinding met mysql mislukt!");
mysql_select_db("DASdatabase",$mysql) or die("Fout: De database kon niet worden geopend, balen!");
if ($username&&$password)
{
$query = mysql_query("SELECT * FROM Inloggegevens WHERE GEBRUIKERSNAAM ='$username'",$mysql) or die ("De query is mislukt!");
$numrows = mysql_num_rows($query);
if ($numrows!=0)
{
while ($row = mysql_fetch_assoc($query))
{
$username = $row ['GEBRUIKERSNAAM'];
$password = $row ['WACHTWOORD'];
}
if ($username==GEBRUIKERSNAAM&&$password==WACHTWOORD)// $WACHTWOORD?!?!??!
{
echo "U bent ingelogd!";
}
else
echo ("Wachtwoord is niet correct!");
}
else
echo ("Gebruikersnaam is niet correct of bestaat niet!");
}
else
echo ("Vul alle velden in, tysm!");
?>
Ik kan dus niet inloggen met het juiste wachtwoord en de juiste gebruikersnaam...
MVG
Jasper Konsten
Daarmee moet je een controle maken die controleerd of een user is ingelogd of niet.
Wat jij doet is sec een focus leggen op username en password.
En dat is nou juist net niet een login systeem.
Een username en password is alleen om te kijken of er een match is.
Meer niet.
Verder is je logica in je script niet echt duidelijk.
Ik zou meer voor zoiets gaan in pseudo code:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
session_start(); // starten session
// eerste check kijken of er wat is gepost
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// tweede check alle velden zijn ingevuld
// query afvuren in de database
// klopt het?
$row['user_id'] = $_SESSION['user_id'];
$_SESSION['logged_in'] = true;
header('Location:beveiligd');
exit();
// else constructe met melding dat er geen match is..
}
?>
session_start(); // starten session
// eerste check kijken of er wat is gepost
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// tweede check alle velden zijn ingevuld
// query afvuren in de database
// klopt het?
$row['user_id'] = $_SESSION['user_id'];
$_SESSION['logged_in'] = true;
header('Location:beveiligd');
exit();
// else constructe met melding dat er geen match is..
}
?>
Enkele tips:
- Maak geen dubbele variabelen aan $_POST['ies'] is al een variabele
- maak je script logisch
- variabelen buiten quotes zetten.
- Gebruik mysql_real_escape_string() om je $_POST[] waardes in een database.
Gewijzigd op 27/03/2013 21:15:29 door Bart V B
regel 22 moet dan vervolgens worden:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if ($numrows == 1) {
$row = mysql_fetch_assoc($query);
if ($username == $row['GEBRUIKERSNAAM'] && $password == $row['WACHTWOORD'])
?>
if ($numrows == 1) {
$row = mysql_fetch_assoc($query);
if ($username == $row['GEBRUIKERSNAAM'] && $password == $row['WACHTWOORD'])
?>
Gewijzigd op 27/03/2013 21:25:35 door Frank Nietbelangrijk
En in php hoef je niet meer te controleren op gebruikersnaam, want dat heb je in de query al gedaan. Overbodige check dus, wat ik in mijn eerste post al heb aangegeven....
@frank,ik heb regel 17 tot 21 verwijdert levert geen fout rapporten op maar ook niet het juiste resultaat (het verwijderen was niet wat je bedoelde neem ik aan maar, toch even geprobeerd) En regel 22 vervangen zoals jij hem had staan.(ik probeer wat) Ik vroeg me nou eigenlijk af hoe ik nou de gebruikersnaam en het wachtwoord uit de database kon vergelijken met de ingevoerde gebruikersnaam en wachtwoord... php is zo moeilijk...
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
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
<?php
$username =($_POST ['username']);
$password =($_POST ['password']);
$mysql = mysql_connect("localhost" , "geheimpje!" , "nog een geheimpje!") or die("Fout:Verbinding met mysql mislukt!");
mysql_select_db("DASdatabase",$mysql) or die("Fout: De database kon niet worden geopend, balen!");
if ($username&&$password)
{
$query = mysql_query("SELECT * FROM Inloggegevens WHERE GEBRUIKERSNAAM ='$username'",$mysql) or die ("De query is mislukt!");
$numrows = mysql_num_rows($query);
if ($numrows!=0){
if ($username == $row['GEBRUIKERSNAAM'] && $password == $row['WACHTWOORD'])
{
echo "U bent ingelogd!";
}
else
echo ("Wachtwoord is niet correct!");
}
else
echo ("Gebruikersnaam is niet correct of bestaat niet!");
}
else
echo ("Vul alle velden in, tysm!");
?>
$username =($_POST ['username']);
$password =($_POST ['password']);
$mysql = mysql_connect("localhost" , "geheimpje!" , "nog een geheimpje!") or die("Fout:Verbinding met mysql mislukt!");
mysql_select_db("DASdatabase",$mysql) or die("Fout: De database kon niet worden geopend, balen!");
if ($username&&$password)
{
$query = mysql_query("SELECT * FROM Inloggegevens WHERE GEBRUIKERSNAAM ='$username'",$mysql) or die ("De query is mislukt!");
$numrows = mysql_num_rows($query);
if ($numrows!=0){
if ($username == $row['GEBRUIKERSNAAM'] && $password == $row['WACHTWOORD'])
{
echo "U bent ingelogd!";
}
else
echo ("Wachtwoord is niet correct!");
}
else
echo ("Gebruikersnaam is niet correct of bestaat niet!");
}
else
echo ("Vul alle velden in, tysm!");
?>
mvg
Jasper
En de check op username is nog steeds overbodig.... of vind je het gewoon leuk dingen dubbel te doen?
Gewijzigd op 27/03/2013 21:44:20 door Erwin H
Kan ik hier dan: "($username == $row['GEBRUIKERSNAAM'] && "" weglaten?
mvg
"SELECT * FROM Inloggegevens WHERE GEBRUIKERSNAAM ='$username'"
Alleen het record met die username komt dus uit de database, niet nodig om daar nog eens op te checken.
Bedankt voor al de snelle reacties maar ik ben totaal nieuw op dit gebied en heb er nauwelijks verstand van het is dan ook voor een school opdracht. Dingen dubbel doen is niet echt mijn ding, maar het gaat hier per ongeluk. En frank heeft blijkbaar zijn post veranderd :P.
MVG
Toevoeging op 27/03/2013 21:51:50:
Hoi iedereen ik heb zojuist frank zijn post ingevoerd namelijk:
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
if ($numrows == 1) {
$row = mysql_fetch_assoc($query);
if ($username == $row['GEBRUIKERSNAAM'] && $password == $row['WACHTWOORD'])
?>
if ($numrows == 1) {
$row = mysql_fetch_assoc($query);
if ($username == $row['GEBRUIKERSNAAM'] && $password == $row['WACHTWOORD'])
?>
En dit WERKT!
Hartstikke bedankt (en toen wou ik door met schrijven maar klikte ik op reageren lekker handig :D dus ff deze edit) Zou iemand mij ook kunnen uitleggen waarom numrows == 1 moet zijn? Ik heb misschien binnenkort nog wat vragen en hoop dat ik jullie daar niet mee lastig val, echt hartstikke bedankt!
Gewijzigd op 27/03/2013 21:54:33 door Jasper Konsten
Code (php)
1
SELECT COUNT(*) AS aantal_users, * FROM Inloggegevens WHERE GEBRUIKERSNAAM ='$username'
Dan heb je ook $row['aantal_users'] :
Scheelt weer een regel code in je php script.. Maar misschien dat dit dan al weer wat verder gaat voor je.
Krijg je één record terug dan is ie goed anders niet.
- SanThe - op 28/03/2013 08:20:37:
Nog simpeler: SELECT .. FROM .. WHERE username='..' AND password='..'
Krijg je één record terug dan is ie goed anders niet.
Krijg je één record terug dan is ie goed anders niet.
Dacht dat ie dat dus wel had gedaan.. Dat zag ik niet :-) En ja, dan zou die ook gewoon maar 1 record terug moeten geven als het veld 'username' uniek is (:
Gewijzigd op 28/03/2013 10:44:34 door Mebus Hackintosh
Mebus Hackintosh op 28/03/2013 10:42:27:
dan zou die ook gewoon maar 1 record terug moeten geven als het veld 'username' uniek is (:
Username hoeft niet uniek te zijn.
De combinatie usernaam en password moet uniek zijn.