Inlog systeem
Hallo, ik heb hier een code voor mijn inlog systeem. Het probleem echter is dat ik steeds de melding krijg dat het wachtwoord onjuist is. Ik weet zeker dat dit niet het geval is. Iemand een idee?
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
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
<?php
session_start();
mysql_connect("mysql","gebruiker","wachtwoord");
mysql_select_db("databasenaam");
if(isset($_SESSION['loggedin']))
{
die("You are already logged in!");
}
if(isset($_POST['submit']))
{
$name = mysql_real_escape_string($_POST['username']);
$pass = mysql_real_escape_string($_POST['password']);
$mysql = mysql_query("SELECT * FROM users WHERE name = '{$name}' AND password = '{$pass}'");
if(mysql_num_rows($mysql) < 1)
{
die("Password was probably incorrect!");
}
$_SESSION['loggedin'] = "YES";
$_SESSION['name'] = $name;
die("You are now logged in!");
}
echo "<form type='login.php' method='POST'>
Username: <br>
<input type='text' name='username'><br>
Password: <br>
<input type='password' name='password'><br>
<input type='submit' name='submit' value='Login'>
</form>";
?>
session_start();
mysql_connect("mysql","gebruiker","wachtwoord");
mysql_select_db("databasenaam");
if(isset($_SESSION['loggedin']))
{
die("You are already logged in!");
}
if(isset($_POST['submit']))
{
$name = mysql_real_escape_string($_POST['username']);
$pass = mysql_real_escape_string($_POST['password']);
$mysql = mysql_query("SELECT * FROM users WHERE name = '{$name}' AND password = '{$pass}'");
if(mysql_num_rows($mysql) < 1)
{
die("Password was probably incorrect!");
}
$_SESSION['loggedin'] = "YES";
$_SESSION['name'] = $name;
die("You are now logged in!");
}
echo "<form type='login.php' method='POST'>
Username: <br>
<input type='text' name='username'><br>
Password: <br>
<input type='password' name='password'><br>
<input type='submit' name='submit' value='Login'>
</form>";
?>
Staan die ge-codeerd in de db?
nee, nog niet, ik wil in ieder geval dat het eerst werkt.
Toevoeging op 03/03/2013 18:53:37:
Zie jij het probleem in de code?
Toevoeging op 03/03/2013 18:53:37:
Zie jij het probleem in de code?
doe eens
dan kopieer je die query en plak je die in phpmyadmin, daar krijg je wel een foutmelding terug (denk ik).
dan kopieer je die query en plak je die in phpmyadmin, daar krijg je wel een foutmelding terug (denk ik).
Als ik het is phpmyadmin plak krijg ik het volgende met een groen vinkje: MySQL gaf een lege resultaat set terug (0 rijen). ( Query duurde 0.0081 sec )
jaahaa en als je dan eens naar http://www.php.net/mysql_connect kijkt dan zie je dat mysql-functies verouderd zijn en eigenlijk vervangen moeten worden voor mysqli. Bovendien zie je daar dat deze functie een waarde teruggeeft true of false afhankelijk of de connectie tot stand gebracht is. Het zou natuurlijk handiger zijn als je daar in de code iets mee deed zodat je als gebruiker op de hoogte gesteld wordt wanneer een connectie niet gemaakt kan worden.
Stukje code uit andere pagina genomen:
Resultaat: geen error, de pagina wordt gewoon weergeven
Toevoeging op 03/03/2013 19:33:16:
Het probleem zit hem dus niet in de connectie
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$db_con = mysql_connect("localhost","gebruiker","@wachtwoord");
if (!$db_con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("database", $db_con);
if (!$db_con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("database", $db_con);
Resultaat: geen error, de pagina wordt gewoon weergeven
Toevoeging op 03/03/2013 19:33:16:
Het probleem zit hem dus niet in de connectie
Het lijkt me toch echt, duidelijk, de gegevens kloppen niet.
Een paar tips:
- Herschrijf alles naar Mysqli
- Gebruik geen die() maar nette foutafhandeling. Waarom moet je script en de layout stoppen als iets wel/niet goed is gegaan? Nergens voor nodig
- Sla je wachtwoorden gecodeerd op met sha1() en een unieke saltstring:
sha1("Ietsuniekshier".$_POST['password']), ook bij controle pas je die unieke string toe, en deze aan het wachtwoord te plakken
- Gebruik if($_SERVER['REQUEST_METHOD']=="POST") { om je controleren of je formulier verstuurd is.
Een paar tips:
- Herschrijf alles naar Mysqli
- Gebruik geen die() maar nette foutafhandeling. Waarom moet je script en de layout stoppen als iets wel/niet goed is gegaan? Nergens voor nodig
- Sla je wachtwoorden gecodeerd op met sha1() en een unieke saltstring:
sha1("Ietsuniekshier".$_POST['password']), ook bij controle pas je die unieke string toe, en deze aan het wachtwoord te plakken
- Gebruik if($_SERVER['REQUEST_METHOD']=="POST") { om je controleren of je formulier verstuurd is.
Zoals eerder gezegd, ik weet voor 100% zeker dat het in dit geval niet ligt aan de connectie gegevens. Ik gebruik dezelfde gegevens over de hele site, daar doet alles het normaal. Waarom hier het script stopt als er iets fout gaat? Dit is slechts een test pagina waar ik het werkend wil krijgen voordat ik het ga overnemen op de site zelf.
Mijn probleem blijft dus nog steeds staan, iets klopt niet aan de code waardoor hij de invoer afwijst.
Mijn probleem blijft dus nog steeds staan, iets klopt niet aan de code waardoor hij de invoer afwijst.
Al is het een test dan is het onnodig.
Pas
aanpast naar:
Dan zie je welke query er wordt uitgevoerd, en deze kan je dan in phpMyAdmin uitvoeren. Als deze geen resultaten geeft, dan geloof ik zeer zeker dat wat je invoert gewoon niet klopt.
Maar ik raad aan om het script toch even te herschrijven met onze tips. Daarbij ben ik vergeten om foutafhandeling op je query te noemen. Ook iets wat verschrikkelijk belangrijks is.
Pas
Code (php)
1
$mysql = mysql_query("SELECT * FROM users WHERE name = '{$name}' AND password = '{$pass}'");
aanpast naar:
Code (php)
1
2
3
2
3
$sql = "SELECT * FROM users WHERE name = '{$name}' AND password = '{$pass}'";
echo $sql."<br />";
$mysql = mysql_query($sql);
echo $sql."<br />";
$mysql = mysql_query($sql);
Dan zie je welke query er wordt uitgevoerd, en deze kan je dan in phpMyAdmin uitvoeren. Als deze geen resultaten geeft, dan geloof ik zeer zeker dat wat je invoert gewoon niet klopt.
Maar ik raad aan om het script toch even te herschrijven met onze tips. Daarbij ben ik vergeten om foutafhandeling op je query te noemen. Ook iets wat verschrikkelijk belangrijks is.
Ik heb het script al werkend gekregen, wat zijn precies de voordelen van mysqli?
Het is de vervanger van de Mysql-functies, welke er in PHP 5.5 uit zijn.
Gewijzigd op 03/03/2013 20:02:58 door - Ariën -
foutje
Gewijzigd op 03/03/2013 22:46:11 door php knipper
Om het systeem veiliger te maken, kun je bijvoorbeeld de sessies loggen in de database, zo kun je bijvoorbeeld makkelijker voorkomen dat iemand je sessies steelt. Correct if I'm wrong.
session_regenerate_id();
Dit zal een nieuwe SESSIONID geven, dat maakt sessie stelen moeilijk, tot onmogelijk
Dit zal een nieuwe SESSIONID geven, dat maakt sessie stelen moeilijk, tot onmogelijk




