Niet hoofdletter gevoelig
Ik ben bezig met een inlog systeem, als je je registreerd en je gebruikersnaam is Pietje10 zet hij dus Pietje10 in de database. Als je dan wilt inloggen en je doet pietje10 pakt hij hem niet, hoe kan ik dit (makkelijk) regelen. Ik doe nu als je hem in de database zet met strtolower() en als je wilt inloggen ook gewoon eerst strtolower() maar misschien is er een makkelijker/netter manier?!
bvd
Is prima methode.
de charset voor die kolom aanpassen zodat die case-insensitive vergelijkt. Gewoon dezelfde charset als nu gebruiken, maar dan met _ci aan het eind.
Je kan bvd
want als het niet aan de database ligt, ligt het aan je 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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
<?php
/**
* @author 053Timo
* @copyright 2011
*/
session_start(); //We maken gebruik van sessies
# errors weergeven
ini_set('display_errors',0); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',false); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
$con = mysql_connect("xxx","xxx","xxx"); // Verbinding met de database maken
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("leden", $con);
$result = mysql_query("SELECT * FROM leden
WHERE gebruikersnaam='" . $_POST['gebruikersnaam'] . "'");
$row = mysql_fetch_array($result);
if ($_SESSION['ingelogd'] == true)
{
header('Refresh: 3; url=beveiligd.php');
echo "Je bent al ingelogd met gebruikersnaam: " . mysql_real_escape_string($_SESSION['gebruikersnaam']) . ", je wordt nu doorgestuurd.";
}
else
{
echo'
<html>
<head>
<title>Login</title>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>Login</h1>
<p>Login met uw gegevens.</p>
<form action="" method="post">
<table>
<tr><td>Gebruikersnaam: </td><td><input type="text" name="gebruikersnaam"/></td></tr>
<tr><td>Wachtwoord: </td><td><input type="password" name="wachtwoord"/></td></tr>
<tr><td><input type="submit" value="Login"/></td></tr>
</table>
</form>
<table width="35%">
<tr><td><a href="registreer.php">Registreren</a></td><td><a href="wachtwoordvergeten.php">Wachtwoord vergeten</a></td></tr>
</table>
</body>
</html>
';
}
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (isset($_POST['gebruikersnaam'], $_POST['wachtwoord']))
{
if ($_POST['gebruikersnaam'] == $row['gebruikersnaam'] && $_POST['wachtwoord'] == $row['wachtwoord']) //is de gebruikersnaam en wachtwoord goed ingevuld (uitlezen van database)
{
$_SESSION['ingelogd'] = true;
$_SESSION['gebruikersnaam'] = $row['gebruikersnaam'];
$_SESSION['rang'] = $row['rang'];
header('Refresh: 3; url=beveiligd.php');
echo "Je bent succesvol ingelogd, je wordt nu doorgestuurd.";
}
else
{
echo "De gebruikersnaam en/of wachtwoord is niet juist ingevuld.";
}
}
}
?>
/**
* @author 053Timo
* @copyright 2011
*/
session_start(); //We maken gebruik van sessies
# errors weergeven
ini_set('display_errors',0); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',false); // true == aan, false == uit
# functie voor sql debug
function showSQLError($sql,$error,$text='Error')
{
if (DEBUG_MODE)
{
return '<pre>Error: ' . $error . '<br />' . $sql . '</pre>';
}
else
{
return $text;
}
}
$con = mysql_connect("xxx","xxx","xxx"); // Verbinding met de database maken
if (!$con)
{
die('Could not connect: ' . mysql_error());
}
mysql_select_db("leden", $con);
$result = mysql_query("SELECT * FROM leden
WHERE gebruikersnaam='" . $_POST['gebruikersnaam'] . "'");
$row = mysql_fetch_array($result);
if ($_SESSION['ingelogd'] == true)
{
header('Refresh: 3; url=beveiligd.php');
echo "Je bent al ingelogd met gebruikersnaam: " . mysql_real_escape_string($_SESSION['gebruikersnaam']) . ", je wordt nu doorgestuurd.";
}
else
{
echo'
<html>
<head>
<title>Login</title>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>Login</h1>
<p>Login met uw gegevens.</p>
<form action="" method="post">
<table>
<tr><td>Gebruikersnaam: </td><td><input type="text" name="gebruikersnaam"/></td></tr>
<tr><td>Wachtwoord: </td><td><input type="password" name="wachtwoord"/></td></tr>
<tr><td><input type="submit" value="Login"/></td></tr>
</table>
</form>
<table width="35%">
<tr><td><a href="registreer.php">Registreren</a></td><td><a href="wachtwoordvergeten.php">Wachtwoord vergeten</a></td></tr>
</table>
</body>
</html>
';
}
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (isset($_POST['gebruikersnaam'], $_POST['wachtwoord']))
{
if ($_POST['gebruikersnaam'] == $row['gebruikersnaam'] && $_POST['wachtwoord'] == $row['wachtwoord']) //is de gebruikersnaam en wachtwoord goed ingevuld (uitlezen van database)
{
$_SESSION['ingelogd'] = true;
$_SESSION['gebruikersnaam'] = $row['gebruikersnaam'];
$_SESSION['rang'] = $row['rang'];
header('Refresh: 3; url=beveiligd.php');
echo "Je bent succesvol ingelogd, je wordt nu doorgestuurd.";
}
else
{
echo "De gebruikersnaam en/of wachtwoord is niet juist ingevuld.";
}
}
}
?>
En de Collatie van gebruikersnaam is latin1_swedish_ci
* geen wildcard in SQL
* mysql_real_escape_string gebruiken
* geen or die();
* mysql_fetch_assoc is sneller
* gebruikers geen mysql_error geven
* geen gebruikersnaam in SESSION zetten
* beter beveiligen, iedereen kan nu ingelogd op true zetten
* wachtwoord beveiligen met sha1()
* form niet in een table zetten
voorderest is strtolower een goede manier.
Gewijzigd op 06/05/2011 21:12:44 door Victor -
Gebruik geen strtolower maar MySQL functions als LOWER() of UPPER()
wildcard = *
je kan beter SELECT naam, email, id, wachtwoord FROM members WHERE naam= naam
dan SELECT * anders heb je nog steeds SQL_INJECTION
Toevoeging op 07/05/2011 13:04:40:
Ik heb een aantal punten die je aangaf verbeterd, maar als je de gebruikersnaam niet in een Session mag zetten, hoe kun je die later dan weer terug halen? en hoe kan ik het beter beveiligen zodat anderen de sessie ingelogd niet zelf op true kunnen zetten?
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
<?php
session_start(); //We maken gebruik van sessies
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
$con = mysql_connect("localhost","xxx","xxx"); // Verbinding met de database maken
$select = mysql_select_db("leden", $con);
$result = mysql_query("SELECT gebruikersnaam, wachtwoord, email, rang FROM leden
WHERE gebruikersnaam='" . mysql_real_escape_string($_POST['gebruikersnaam']) . "'");
$row = mysql_fetch_assoc($result);
if (!$con || !$select) {
echo '<b>Er kan momenteel geen verbinding worden gemaakt met de database. Er is al contact opgenomen met de webmaster.</b>';
mail('[email protected]', 'Mysql Error', 'Er kan momenteel geen verbinding worden gemaakt met de database.');
}
// SQL Function
function sql_query($query) {
$mysql = mysql_query($query);
if ($mysql) {
return $mysql;
} else {
echo '<b>Fout in de database bij het uitvoeren van een query!</b>';
mail('[email protected]', 'Mysql Error', 'Fout in de database bij het uitvoeren van: ' . $query . '');
}
}
if ($_SESSION['ingelogd'] == true)
{
header('Refresh: 3; url=beveiligd.php');
echo "Je bent al ingelogd met gebruikersnaam: " . $_SESSION['gebruikersnaam'] . ", je wordt nu doorgestuurd.";
}
else
{
echo'
<html>
<head>
<title>Login</title>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>Login</h1>
<p>Login met uw gegevens.</p>
<form action="" method="post">
<table>
<tr><td>Gebruikersnaam: </td><td><input type="text" name="gebruikersnaam"/></td></tr>
<tr><td>Wachtwoord: </td><td><input type="password" name="wachtwoord"/></td></tr>
<tr><td><input type="submit" value="Login"/></td></tr>
</table>
</form>
<table width="35%">
<tr><td><a href="registreer.php">Registreren</a></td><td><a href="wachtwoordvergeten.php">Wachtwoord vergeten</a></td></tr>
</table>
</body>
</html>
';
}
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (isset($_POST['gebruikersnaam'], $_POST['wachtwoord']))
{
if ($_POST['gebruikersnaam'] == $row['gebruikersnaam'] && sha1($_POST['wachtwoord']) == $row['wachtwoord']) //is de gebruikersnaam en wachtwoord goed ingevuld (uitlezen van database)
{
$_SESSION['ingelogd'] = true;
$_SESSION['gebruikersnaam'] = $row['gebruikersnaam'];
$_SESSION['rang'] = $row['rang'];
header('Refresh: 3; url=beveiligd.php');
echo "Je bent succesvol ingelogd, je wordt nu doorgestuurd.";
}
else
{
echo "De gebruikersnaam en/of wachtwoord is niet juist ingevuld.";
}
}
}
?>
session_start(); //We maken gebruik van sessies
# errors weergeven
ini_set('display_errors',1); // 1 == aan , 0 == uit
error_reporting(E_ALL | E_STRICT);
# sql debug
define('DEBUG_MODE',true); // true == aan, false == uit
$con = mysql_connect("localhost","xxx","xxx"); // Verbinding met de database maken
$select = mysql_select_db("leden", $con);
$result = mysql_query("SELECT gebruikersnaam, wachtwoord, email, rang FROM leden
WHERE gebruikersnaam='" . mysql_real_escape_string($_POST['gebruikersnaam']) . "'");
$row = mysql_fetch_assoc($result);
if (!$con || !$select) {
echo '<b>Er kan momenteel geen verbinding worden gemaakt met de database. Er is al contact opgenomen met de webmaster.</b>';
mail('[email protected]', 'Mysql Error', 'Er kan momenteel geen verbinding worden gemaakt met de database.');
}
// SQL Function
function sql_query($query) {
$mysql = mysql_query($query);
if ($mysql) {
return $mysql;
} else {
echo '<b>Fout in de database bij het uitvoeren van een query!</b>';
mail('[email protected]', 'Mysql Error', 'Fout in de database bij het uitvoeren van: ' . $query . '');
}
}
if ($_SESSION['ingelogd'] == true)
{
header('Refresh: 3; url=beveiligd.php');
echo "Je bent al ingelogd met gebruikersnaam: " . $_SESSION['gebruikersnaam'] . ", je wordt nu doorgestuurd.";
}
else
{
echo'
<html>
<head>
<title>Login</title>
<link href="style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<h1>Login</h1>
<p>Login met uw gegevens.</p>
<form action="" method="post">
<table>
<tr><td>Gebruikersnaam: </td><td><input type="text" name="gebruikersnaam"/></td></tr>
<tr><td>Wachtwoord: </td><td><input type="password" name="wachtwoord"/></td></tr>
<tr><td><input type="submit" value="Login"/></td></tr>
</table>
</form>
<table width="35%">
<tr><td><a href="registreer.php">Registreren</a></td><td><a href="wachtwoordvergeten.php">Wachtwoord vergeten</a></td></tr>
</table>
</body>
</html>
';
}
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
if (isset($_POST['gebruikersnaam'], $_POST['wachtwoord']))
{
if ($_POST['gebruikersnaam'] == $row['gebruikersnaam'] && sha1($_POST['wachtwoord']) == $row['wachtwoord']) //is de gebruikersnaam en wachtwoord goed ingevuld (uitlezen van database)
{
$_SESSION['ingelogd'] = true;
$_SESSION['gebruikersnaam'] = $row['gebruikersnaam'];
$_SESSION['rang'] = $row['rang'];
header('Refresh: 3; url=beveiligd.php');
echo "Je bent succesvol ingelogd, je wordt nu doorgestuurd.";
}
else
{
echo "De gebruikersnaam en/of wachtwoord is niet juist ingevuld.";
}
}
}
?>
Gewijzigd op 07/05/2011 13:01:43 door Timo Kleinhout
De gebruikersnaam kun je krijgen door WHERE id="$id"