Login form - Werkt niet zoals het moet.
Ik heb een vraag(je).
Ik ben bezig met een loginform te maken, met een database.
Maar ik stoot op een klein probleem. Hij wil namelijk niet inloggen.
hier mijn 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
41
42
43
44
45
46
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
41
42
43
44
45
46
<article id="login">
<?php
if(isset($_POST['submit'])){
$Gebruikersnaam = $_POST['username']; //Variable aanmaken voor het ingegeven gebruikersnaam.
$Wachtwoord = $_POST['password']; //Variable aanmaken voor het ingegeven wachtwoord.
// Beveiliging tegen Mysql injection.
$Gebruikersnaam = stripslashes($Gebruikersnaam);
$Wachtwoord = stripslashes($mypassword);
$Gebruikersnaam = mysql_real_escape_string($Gebruikersnaam);
$Wachtwoord = mysql_real_escape_string($Wachtwoord);
$sql="SELECT * FROM Gebruikers WHERE Gebruikersnaam=".$Gebruikersnaam." and Wachtwoord=".$Wachtwoord."";
$result=mysql_query($sql);
// Aantal records tellen
$count=mysql_num_rows($result);
// Kiijk of er 1 rij overeen komt.
if($count==1){
// Registreren van Gebruikersnaam en Wachtwoord en doorverwijzen naar de login_succes.php
session_register("Gebruikersnaam");
session_register("Wachtwoord");
header("location:login_success.php");
}
else {
echo "Oeps er ging iets mis. Gelieve de juiste login gegevens in te geven.";
echo "U wordt terug gestuurd naar de login pagina.";
echo '<meta http-equiv="refresh" content="5;url=login.php" />';
}
}else{
disconnectfromdb();
?>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<p>Gebruikersnaam:</p>
<input id="name" name="username" placeholder="Gebruikersnaam" type="text">
<p>Wachtwoord:</p>
<input id="password" name="password" placeholder="**********" type="password"><br />
<input name="submit" type="submit" value=" Login" />
</form>
<?php
}
?>
</aricle>
<?php
if(isset($_POST['submit'])){
$Gebruikersnaam = $_POST['username']; //Variable aanmaken voor het ingegeven gebruikersnaam.
$Wachtwoord = $_POST['password']; //Variable aanmaken voor het ingegeven wachtwoord.
// Beveiliging tegen Mysql injection.
$Gebruikersnaam = stripslashes($Gebruikersnaam);
$Wachtwoord = stripslashes($mypassword);
$Gebruikersnaam = mysql_real_escape_string($Gebruikersnaam);
$Wachtwoord = mysql_real_escape_string($Wachtwoord);
$sql="SELECT * FROM Gebruikers WHERE Gebruikersnaam=".$Gebruikersnaam." and Wachtwoord=".$Wachtwoord."";
$result=mysql_query($sql);
// Aantal records tellen
$count=mysql_num_rows($result);
// Kiijk of er 1 rij overeen komt.
if($count==1){
// Registreren van Gebruikersnaam en Wachtwoord en doorverwijzen naar de login_succes.php
session_register("Gebruikersnaam");
session_register("Wachtwoord");
header("location:login_success.php");
}
else {
echo "Oeps er ging iets mis. Gelieve de juiste login gegevens in te geven.";
echo "U wordt terug gestuurd naar de login pagina.";
echo '<meta http-equiv="refresh" content="5;url=login.php" />';
}
}else{
disconnectfromdb();
?>
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
<p>Gebruikersnaam:</p>
<input id="name" name="username" placeholder="Gebruikersnaam" type="text">
<p>Wachtwoord:</p>
<input id="password" name="password" placeholder="**********" type="password"><br />
<input name="submit" type="submit" value=" Login" />
</form>
<?php
}
?>
</aricle>
Iemand die mij kan vertellen, waarom ik steeds de foutmelding krijg, en niet kan worden doorgestuurd naar de login_succes.php ?
Alvast bedankt :)
Gewijzigd op 21/12/2014 13:46:26 door - Ariën -
Je code is heel belabberd te lezen. Kan je dit even aanpassen en deze tussen [code] en [/code] tags plaatsen?
Is gebeurd, mijn excuses :)
session_register() is een hele oude functie die tegenwoordig niet meer zal werken.
Je kan gewoon $_SESSION['Username'] = $_POST['username'] gebruiken.
Waarom je een wachtwoord in een sessie wilt opslaan is mij niet duidelijk, maar het is onnodig en bovendien ook zeer onveilig.
Verder zijn regel 5 en 6 overbodig, omdat je die $_POST variabelen al direct kan gebruiken.
Gewijzigd op 21/12/2014 13:51:08 door - Ariën -
Dan is dat toch al ietsjes veiliger ;)
Maar zit ik nog steeds met het zelfde probleem :/
Welke foutmelding krijg je precies?
Mijn code telt het aantal records in mijn database en als er 1 record is dat overeenkomt met de ingevulde gegevens, dan moet die doorverwijzen naar login_succes.php
Ander geeft die een melding:
"Oeps er ging iets mis. Gelieve de juiste login gegevens in te geven. U wordt terug gestuurd naar de login pagina." En dan word je na 5 seconde doorgestuurd naar de login.php opnieuw (zodat je opnieuw een formulier krijgt te zien.)
Probleem is nu.
Hij geeft altijd die foutmelding. Ook als ik het juiste wachtwoord en juiste gebruikrsnaam invul.
En ik weet niet waar het probleem zit :/ (connectie met men db zou normaal gezien moeten kloppen :) )
Begin boven in je script met de php logica en onderin pas met de output.
Je wilt een gebruiker na een correcte login doorsturen naar een andere pagina met
Dat zal niet werken als er al output (HTML) naar de browser is verstuurd.
Waarom gebruik je niet uitsluitend kleine letters in je database en engelse termen zoals username en password
Dit is korter en je hoeft dan niet meer na te denken of het nu met een hoofdletter was of zonder hoofdletter.
Waarom de gebruiker terugsturen naar de loginpagina? De gebruiker was daar immers toch al? laat die pagina gewoon constant refreshen tot er een juiste login heeft plaats gevonden.
mysql_ functies zijn niet veilig meer. Ook niet met mysql_real_escape_string. Gebruik mysqli of PDO met prepared statements.
stripslashes() moet je al helemaal niet gebruiken
Zet je database op Collatie utf8_unicode_ci. en gebruik mysqli_set_charset($con, "utf8"); nadat je verbinding hebt gemaakt met mysqli_connect().
Zoals Aar zegt: session_register() moet je niet meer gebruiken
Geen passwords opslaan in de sessie
Passwords met iets als sha256 versleutelen en dan versleuteld in de database opslaan
Dus na registratie als de gebruiker een password heeft gekozen deze eerst versleutelen en dan pas in de database opslaan
Dan bij de login ook het password eerst versleutelen en dan de sleutels met elkaar vergelijken.
Als die kloppen en de gebruikersnaam klopt, pas dan mag de gebruiker ingelogd worden.
Toevoeging op 21/12/2014 14:16:22:
Een ander algemene afspraak is om variabelen zonder hoofdletter te schrijven:
Code (php)
1
2
3
4
2
3
4
<?php
$var = 'waarde';
$loginCount = 1; // tweede woord mag wel met een hoofdletter omdat dat de leesbaarheid ten goede komt
?>
$var = 'waarde';
$loginCount = 1; // tweede woord mag wel met een hoofdletter omdat dat de leesbaarheid ten goede komt
?>
class namen worden wel met een hoofdletter geschreven:
Gewijzigd op 21/12/2014 14:18:24 door Frank Nietbelangrijk
Zal het op deze manier naar een oplossing proberen te zoeken :)
@Frank Nietbelangrijk
Bedankt voor je uitleg :D
Ik ga het deze middag even rustig bekijken :)
Gewijzigd op 21/12/2014 14:19:37 door Webmaster Robbe
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
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
<?php
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// check password en gebruikersnaam
if( /* correcte logingegevens */ )
{
// set session['login'] zodat de gebruiker ingelogd is
header('Location: login_success.php');
}
}
// Hieronder de output: ?>
<!DOCTYPE html>
<html>
...
<div id='error'><?php echo $error; ?></div>
<form action="" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="Login" />
</form>
...
</html>
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
// check password en gebruikersnaam
if( /* correcte logingegevens */ )
{
// set session['login'] zodat de gebruiker ingelogd is
header('Location: login_success.php');
}
}
// Hieronder de output: ?>
<!DOCTYPE html>
<html>
...
<div id='error'><?php echo $error; ?></div>
<form action="" method="post">
<input type="text" name="username" />
<input type="password" name="password" />
<input type="submit" value="Login" />
</form>
...
</html>
Toevoeging op 21/12/2014 14:25:46:
Graag gedaan :-)
Gewijzigd op 21/12/2014 14:29:04 door Frank Nietbelangrijk
T'is gelukt!
Maar met die hash256 snap ik niet goed hoe ik dat moet toepassen.
Moet ik gewoon in mijn php code die has256 toepassen zoals je in je vorige reactie zei?
Want in mijn mysql database zelf vind ik nergens dat die kan opgeslagen worden als hash256.
SHA256 is 256bit groot. Dus Een varchar van 64 zal voldoende zijn.
Eens zien of het zo lukt :)
Stel jij hebt password '1234'.
vul die 1234 in het scriptje hieronder in en bekijk het resultaat in de browser
Kopieer de sleutel die je in de browser ziet en ga naar je wachtwoord veld in phpmyadmin
Vervang het oude wachtwoord voor de nieuwe
p.s. je wachtwoordveld moet je gewoon op varchar zetten met een lengte van 64.
Toevoeging op 21/12/2014 14:57:30:
dan je query bij het inlogggen:
Code (php)
1
2
3
2
3
<?php
$sql="SELECT * FROM Gebruikers WHERE Gebruikersnaam=".$Gebruikersnaam." and Wachtwoord=".hash('sha256', $Wachtwoord);
?>
$sql="SELECT * FROM Gebruikers WHERE Gebruikersnaam=".$Gebruikersnaam." and Wachtwoord=".hash('sha256', $Wachtwoord);
?>
Gewijzigd op 21/12/2014 15:02:31 door Frank Nietbelangrijk
Dus VARCHAR255 is erg overdreven ;-)
Het is 64 bytes blijkt na een strlen()
Gewijzigd op 21/12/2014 15:04:48 door Frank Nietbelangrijk
Volgens mij moet dit ijn :
Dit soort problemen is te voorkomen door de veld-name en de veld-id zoveel mogelijk gelijk te houden. (Dit kan niet altijd, bij radiobuttons bijv. gaat dit niet)
Je kan $_POST['username'] en $_POST['password'] al direct gebruiken nadat je je formulier gesubmitted hebt.
Gewijzigd op 21/12/2014 15:07:03 door - Ariën -
Keep it short & simple