inloggen toegstaan.
Ik heb mijn login systeem gebouwd. Maar als ik met de verkeerde geruikersnaam en wachtwoord inlog dan ben ik ook ingelogged; Hoe komt dit?
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
47
48
49
50
51
52
53
54
55
56
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
47
48
49
50
51
52
53
54
55
56
<?PHP
error_reporting(E_ALL);
?>
<table border="2" bordercolor="#2D2D2D" cellpadding="0" cellspacing="0" colspan="0" width="70%">
<tr>
<td bgcolor="#2D2D2D">Inloggen</td>
</tr>
<tr>
<td>
<form method="post">
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="50%">Gebruikersnaam</td>
<td width="50%"><input type="text" name="gebruikersnaam" value="" onclick="gebruikersnaam.value=''" size="20"></td>
</tr>
<tr>
<td width="50%">Wachtwoord</td>
<td width="50%"><input type="password" name="wachtwoord" value="" onclick="wachtwoord.value=''" size="20"></td>
</tr>
<tr>
<td width="50%">Ingelogd blijven</td>
<td width="50%"><select size="1" name="dagen">
<option selected value="1">1 Dag</option>
<option value="2">2 Dagen</option>
<option value="7">7 Dagen</option>
<option value="14">2 Weken</option>
<option value="28">1 Maand</option>
<option value="178">6 Maand</option>
<option value="356">1 Jaar</option>
</select></td>
</tr>
<tr>
<td width="50%"> </td><td width="50%" colspan="2"><input type="submit" name="login" value="Login"></td>
</tr>
</table>
</form>
</center>
<?
if($_SERVER['REQUEST_METHOD'] == "POST")
{
$query = mysql_query("SELECT COUNT(id)
FROM leden
WHERE gebruikersnaam='".mysql_real_escape_string($_POST["gebruikersnaam"])."' AND wachtwoord='".md5($_POST["wachtwoord"])."'") or die(MySQL_Error());
if(mysql_num_rows($query) == 1)
{
setcookie ("login", mysql_real_escape_string($_POST["gebruikersnaam"]),time()+3600*$_POST["dagen"]);
echo "U bent ingelogt.";
echo "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"1; URL=index.php\">";
} else {
echo "Fout.";
}
}
?>
</td>
</tr>
</table>
error_reporting(E_ALL);
?>
<table border="2" bordercolor="#2D2D2D" cellpadding="0" cellspacing="0" colspan="0" width="70%">
<tr>
<td bgcolor="#2D2D2D">Inloggen</td>
</tr>
<tr>
<td>
<form method="post">
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="50%">Gebruikersnaam</td>
<td width="50%"><input type="text" name="gebruikersnaam" value="" onclick="gebruikersnaam.value=''" size="20"></td>
</tr>
<tr>
<td width="50%">Wachtwoord</td>
<td width="50%"><input type="password" name="wachtwoord" value="" onclick="wachtwoord.value=''" size="20"></td>
</tr>
<tr>
<td width="50%">Ingelogd blijven</td>
<td width="50%"><select size="1" name="dagen">
<option selected value="1">1 Dag</option>
<option value="2">2 Dagen</option>
<option value="7">7 Dagen</option>
<option value="14">2 Weken</option>
<option value="28">1 Maand</option>
<option value="178">6 Maand</option>
<option value="356">1 Jaar</option>
</select></td>
</tr>
<tr>
<td width="50%"> </td><td width="50%" colspan="2"><input type="submit" name="login" value="Login"></td>
</tr>
</table>
</form>
</center>
<?
if($_SERVER['REQUEST_METHOD'] == "POST")
{
$query = mysql_query("SELECT COUNT(id)
FROM leden
WHERE gebruikersnaam='".mysql_real_escape_string($_POST["gebruikersnaam"])."' AND wachtwoord='".md5($_POST["wachtwoord"])."'") or die(MySQL_Error());
if(mysql_num_rows($query) == 1)
{
setcookie ("login", mysql_real_escape_string($_POST["gebruikersnaam"]),time()+3600*$_POST["dagen"]);
echo "U bent ingelogt.";
echo "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"1; URL=index.php\">";
} else {
echo "Fout.";
}
}
?>
</td>
</tr>
</table>
Als ik me niet vergis ligt dit aan het volgende:
SELECT COUNT(id) FROM ... vind altijd een resultaat. Hij geeft namelijk een rij met inhoud 0 terug als er geen match is.
Waarom die COUNT er staat is me niet geheel duidelijk, als je gewoon SELECT id FROM ... doet, zou het moeten werken.
SELECT COUNT(id) FROM ... vind altijd een resultaat. Hij geeft namelijk een rij met inhoud 0 terug als er geen match is.
Waarom die COUNT er staat is me niet geheel duidelijk, als je gewoon SELECT id FROM ... doet, zou het moeten werken.
<form method="post">
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="50%">Gebruikersnaam</td>
<td width="50%"><input type="text" name="gebruikersnaam" value="" onclick="gebruikersnaam.value=''" size="20"></td>
</tr>
<tr>
<td width="50%">Wachtwoord</td>
<td width="50%"><input type="password" name="wachtwoord" value="" onclick="wachtwoord.value=''" size="20"></td>
</tr>
<tr>
<td width="50%">Ingelogd blijven</td>
<td width="50%"><select size="1" name="dagen">
<option selected value="1">1 Dag</option>
<option value="2">2 Dagen</option>
<option value="7">7 Dagen</option>
<option value="14">2 Weken</option>
<option value="28">1 Maand</option>
<option value="178">6 Maand</option>
<option value="356">1 Jaar</option>
</select></td>
</tr>
<tr>
<td width="50%"> </td><td width="50%" colspan="2"><input type="submit" name="login" value="Login"></td>
</tr>
</table>
</form>
</center>
^^ Dat heb ik nu, maar als ik met de juiste gebruikersnaam en juiste wachtwoord inlog komt er nog steeds fout!
<table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="50%">Gebruikersnaam</td>
<td width="50%"><input type="text" name="gebruikersnaam" value="" onclick="gebruikersnaam.value=''" size="20"></td>
</tr>
<tr>
<td width="50%">Wachtwoord</td>
<td width="50%"><input type="password" name="wachtwoord" value="" onclick="wachtwoord.value=''" size="20"></td>
</tr>
<tr>
<td width="50%">Ingelogd blijven</td>
<td width="50%"><select size="1" name="dagen">
<option selected value="1">1 Dag</option>
<option value="2">2 Dagen</option>
<option value="7">7 Dagen</option>
<option value="14">2 Weken</option>
<option value="28">1 Maand</option>
<option value="178">6 Maand</option>
<option value="356">1 Jaar</option>
</select></td>
</tr>
<tr>
<td width="50%"> </td><td width="50%" colspan="2"><input type="submit" name="login" value="Login"></td>
</tr>
</table>
</form>
</center>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?
if($_SERVER['REQUEST_METHOD'] == "POST")
{
$query = mysql_query("SELECT id FROM leden WHERE gebruikersnaam='".mysql_real_escape_string($_POST["gebruikersnaam"])."' AND wachtwoord='".md5($_POST["wachtwoord"])."'") or die(MySQL_Error());
if(mysql_num_rows($query) == 1)
{
setcookie ("login", mysql_real_escape_string($_POST["gebruikersnaam"]),time()+3600*$_POST["dagen"]);
echo "U bent ingelogt.";
echo "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"1; URL=index.php\">";
} else {
echo "Fout.";
}
}
?>
if($_SERVER['REQUEST_METHOD'] == "POST")
{
$query = mysql_query("SELECT id FROM leden WHERE gebruikersnaam='".mysql_real_escape_string($_POST["gebruikersnaam"])."' AND wachtwoord='".md5($_POST["wachtwoord"])."'") or die(MySQL_Error());
if(mysql_num_rows($query) == 1)
{
setcookie ("login", mysql_real_escape_string($_POST["gebruikersnaam"]),time()+3600*$_POST["dagen"]);
echo "U bent ingelogt.";
echo "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"1; URL=index.php\">";
} else {
echo "Fout.";
}
}
?>
^^ Dat heb ik nu, maar als ik met de juiste gebruikersnaam en juiste wachtwoord inlog komt er nog steeds fout!
Voer je query eens in phpMyAdmin uit en kijk wat hij terug geeft.
En hoe doe je dat de query uitvoeren in mysql?
Inloggen in phpMyAdmin. Kies een database en klik rechtsboven op 'SQL'. Typ in dat grote tekstvak daar je query en klik op 'Start'. Je krijgt dan te zien wat de query doet en teruggeeft.
SQL-query:
$query = mysql_query(
"SELECT id FROM leden WHERE gebruikersnaam='".mysql_real_escape_string(
$_POST[ "gebruikersnaam"]
). "' AND wachtwoord='".md5(
$_POST[ "wachtwoord"]
). "'"
) OR die(
MySQL_Error(
)
)
MySQL retourneerde:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$query = mysql_query("SELECT id FROM leden WHERE gebruikersnaam='".mysql_real_es' at line 1
Dan krijg ik dit te zien!
$query = mysql_query(
"SELECT id FROM leden WHERE gebruikersnaam='".mysql_real_escape_string(
$_POST[ "gebruikersnaam"]
). "' AND wachtwoord='".md5(
$_POST[ "wachtwoord"]
). "'"
) OR die(
MySQL_Error(
)
)
MySQL retourneerde:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '$query = mysql_query("SELECT id FROM leden WHERE gebruikersnaam='".mysql_real_es' at line 1
Dan krijg ik dit te zien!
Maak er eens dit van:
Btw niet echt veilig dit systeem he. Als ik nu in me cookiemanager de gebruikersnaam aanpas ben ik straks ingelogd met een andere naam.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?
if($_SERVER['REQUEST_METHOD'] == "POST")
{
$query = mysql_query("SELECT id FROM leden WHERE gebruikersnaam='".mysql_real_escape_string($_POST["gebruikersnaam"])."' AND wachtwoord='".md5($_POST["wachtwoord"])."'") or die(MySQL_Error());
$count = mysql_num_rows($query);
if($count == 1)
{
setcookie ("login", mysql_real_escape_string($_POST["gebruikersnaam"]),time()+3600*$_POST["dagen"]);
echo "U bent ingelogt.";
echo "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"1; URL=index.php\">";
} else {
echo "Fout.";
}
}
?>
if($_SERVER['REQUEST_METHOD'] == "POST")
{
$query = mysql_query("SELECT id FROM leden WHERE gebruikersnaam='".mysql_real_escape_string($_POST["gebruikersnaam"])."' AND wachtwoord='".md5($_POST["wachtwoord"])."'") or die(MySQL_Error());
$count = mysql_num_rows($query);
if($count == 1)
{
setcookie ("login", mysql_real_escape_string($_POST["gebruikersnaam"]),time()+3600*$_POST["dagen"]);
echo "U bent ingelogt.";
echo "<META HTTP-EQUIV=\"REFRESH\" CONTENT=\"1; URL=index.php\">";
} else {
echo "Fout.";
}
}
?>
Btw niet echt veilig dit systeem he. Als ik nu in me cookiemanager de gebruikersnaam aanpas ben ik straks ingelogd met een andere naam.
nu kan ik helemaal niet meer inloggen. Zelfs niet als ik de juiste gebruikersnaam en wachtwoord invoeg!
Voer je query dan eens goed uit in phpMyAdmin, de query is alleen de string die je meegeeft aan mysql_query(); En zonder PHP-variablen, dus je moet eerst
".mysql_real_escape_string($_POST[ "gebruikersnaam"]). "
en ".md5($_POST[ "wachtwoord"]). "
Aanpassen naar wat ze echt zijn.
".mysql_real_escape_string($_POST[ "gebruikersnaam"]). "
en ".md5($_POST[ "wachtwoord"]). "
Aanpassen naar wat ze echt zijn.
Hoe bedoel je aanpassen naar wat ze echt zijn?
phpMyAdmin kan ".mysql_real_escape_string($_POST[ "gebruikersnaam"]). " en ".md5($_POST[ "wachtwoord"]). " niet uitvoeren, je moet dus die twee dingen vervangen door de tekst die ze representeren.
En waar representeren ze dat?





