Inlogsysteem review
Ik heb een ergens mijn best op gedaan en iets af kunnen maken. Het is een simpel inlog systeem. De volgende dingen kan je er mee doen:
Inloggen
Uitloggen
Registreren
Op de indexpagina zie je als je bent ingelogd. Op bijna iedere pagina zit wel een knop op uit te loggen
Index.php
Code (php)
Config.php
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
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
<?php
error_reporting(0);
session_start();
// Standaard instellingen
$gen['sql'] = true;
$gen['connect'] = 'pconnect'; //Connect of pconnect. Advies: pconnect
//SQL gegevens
$sql['host'] = 'localhost';
$sql['user'] = 'root';
$sql['pass'] = '---------';
$sql['data'] = '---------';
if ($gen['sql'] == true AND $gen['connect'] == 'connect') {
mysql_connect ($sql['host'], $sql['user'], $sql['pass']) or die(mysql_error());
mysql_select_db ($sql['data']) or die(mysql_error());
} elseif ($gen['sql'] == true AND $gen['connect'] == 'pconnect') {
mysql_pconnect ($sql['host'], $sql['user'], $sql['pass']) or die(mysql_error());
mysql_select_db ($sql['data']) or die(mysql_error());
}
//Site instellingen
$basic['site_naam'] = 'Koen Hollander';
$basic['register'] = 'on'; //on / off
$basic['login'] = 'on'; //on / off
$basic['direct_actief'] = '1'; //1=ja 0=nee
?>
error_reporting(0);
session_start();
// Standaard instellingen
$gen['sql'] = true;
$gen['connect'] = 'pconnect'; //Connect of pconnect. Advies: pconnect
//SQL gegevens
$sql['host'] = 'localhost';
$sql['user'] = 'root';
$sql['pass'] = '---------';
$sql['data'] = '---------';
if ($gen['sql'] == true AND $gen['connect'] == 'connect') {
mysql_connect ($sql['host'], $sql['user'], $sql['pass']) or die(mysql_error());
mysql_select_db ($sql['data']) or die(mysql_error());
} elseif ($gen['sql'] == true AND $gen['connect'] == 'pconnect') {
mysql_pconnect ($sql['host'], $sql['user'], $sql['pass']) or die(mysql_error());
mysql_select_db ($sql['data']) or die(mysql_error());
}
//Site instellingen
$basic['site_naam'] = 'Koen Hollander';
$basic['register'] = 'on'; //on / off
$basic['login'] = 'on'; //on / off
$basic['direct_actief'] = '1'; //1=ja 0=nee
?>
Login.php
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
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
<?php
error_reporting(0);
include 'config.php';
session_start();
?>
<html>
<head>
<title><?php echo $basic['site_naam']; ?> | Inloggen</title>
</head>
<body>
<p>
Log hier in of <a href='register.php'>Registreer</a><br>
</p>
<form method='post'>
<input type='text' name='username' value='Gebruikersnaam'><br>
<input type='password' name='password' value='Wachtwoord'><br>
<input type='submit' name='submit' value='Inloggen'><br>
</form>
</body>
</html>
<?php
include ('config.php');
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$userQuery = mysql_query("
SELECT
username, password
FROM
users
WHERE
username = '".mysql_real_escape_string($_POST['username'])."'
AND
password = '".sha1($_POST['password'])."'
");
if(mysql_num_rows($userQuery) == 1 AND $basic['direct_actief'] == '1') {
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $_POST['username'];
header('location: index.php');
} else {
echo "<font color='red'>Er is iets mis gegaan. Probeer het opnieuw</font>";
}
}
?>
error_reporting(0);
include 'config.php';
session_start();
?>
<html>
<head>
<title><?php echo $basic['site_naam']; ?> | Inloggen</title>
</head>
<body>
<p>
Log hier in of <a href='register.php'>Registreer</a><br>
</p>
<form method='post'>
<input type='text' name='username' value='Gebruikersnaam'><br>
<input type='password' name='password' value='Wachtwoord'><br>
<input type='submit' name='submit' value='Inloggen'><br>
</form>
</body>
</html>
<?php
include ('config.php');
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$userQuery = mysql_query("
SELECT
username, password
FROM
users
WHERE
username = '".mysql_real_escape_string($_POST['username'])."'
AND
password = '".sha1($_POST['password'])."'
");
if(mysql_num_rows($userQuery) == 1 AND $basic['direct_actief'] == '1') {
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $_POST['username'];
header('location: index.php');
} else {
echo "<font color='red'>Er is iets mis gegaan. Probeer het opnieuw</font>";
}
}
?>
Logout.php
Code (php)
Register.php
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
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
<?php
include 'config.php';
if ($basic['register'] == 'off') {
echo "Registreren is door de webmaster afgezet.";
exit();
}
?>
<!DOCTYPE html>
<p>Registreer op <?php echo $basic['site_naam']; ?></p><br>
<form method='POST'>
Gebruikersnaam: <input type='text' name='username'><br>
Wachtwoord: <input type='password' name='password'><br>
Wachtwoord (opnieuw): <input type='password' name='password2'><br>
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST' AND $_POST['password'] != $_POST['password2']) {
echo "<font color='red'>De wachtwoorden komen niet overeen.</font><br>";
} elseif ($_SERVER['REQUEST_METHOD'] == 'POST' AND $_POST['password'] == $_POST['password2']) {
$pass_true='1'; }
?>
E-mail: <input type='text' name='mail'><br>
<input type='submit' value='Registreer'>
</form>
</body>
</html>
<?php
$pass_true == '0';
if ($_SERVER['REQUEST_METHOD'] == 'POST' AND $pass_true == '1') {
$sql= 'INSERT INTO users (username, password, mail) VALUES ("'.mysql_real_escape_string($_POST['username']).'", "'.mysql_real_escape_string(sha1($_POST['password'])).'", "'.mysql_real_escape_string($_POST['mail']).'")';
$sqlq = mysql_query($sql); }
if ($_SERVER['REQUEST_METHOD'] == 'POST' AND $pass_true == '1' AND $sqlq == true) {
echo "U bent succesvol toegevoegd!";
} elseif ($_SERVER['REQUEST_METHOD'] == 'POST' AND $pass_true == '1' AND $sqlq == false){
echo "Er is een fout opgetreden:". mysql_error(). "probeert u het later nog eens!";
}
?>
include 'config.php';
if ($basic['register'] == 'off') {
echo "Registreren is door de webmaster afgezet.";
exit();
}
?>
<!DOCTYPE html>
<p>Registreer op <?php echo $basic['site_naam']; ?></p><br>
<form method='POST'>
Gebruikersnaam: <input type='text' name='username'><br>
Wachtwoord: <input type='password' name='password'><br>
Wachtwoord (opnieuw): <input type='password' name='password2'><br>
<?php if ($_SERVER['REQUEST_METHOD'] == 'POST' AND $_POST['password'] != $_POST['password2']) {
echo "<font color='red'>De wachtwoorden komen niet overeen.</font><br>";
} elseif ($_SERVER['REQUEST_METHOD'] == 'POST' AND $_POST['password'] == $_POST['password2']) {
$pass_true='1'; }
?>
E-mail: <input type='text' name='mail'><br>
<input type='submit' value='Registreer'>
</form>
</body>
</html>
<?php
$pass_true == '0';
if ($_SERVER['REQUEST_METHOD'] == 'POST' AND $pass_true == '1') {
$sql= 'INSERT INTO users (username, password, mail) VALUES ("'.mysql_real_escape_string($_POST['username']).'", "'.mysql_real_escape_string(sha1($_POST['password'])).'", "'.mysql_real_escape_string($_POST['mail']).'")';
$sqlq = mysql_query($sql); }
if ($_SERVER['REQUEST_METHOD'] == 'POST' AND $pass_true == '1' AND $sqlq == true) {
echo "U bent succesvol toegevoegd!";
} elseif ($_SERVER['REQUEST_METHOD'] == 'POST' AND $pass_true == '1' AND $sqlq == false){
echo "Er is een fout opgetreden:". mysql_error(). "probeert u het later nog eens!";
}
?>
Ik ben er zelf best wel trots op, maar wat vinden jullie er van?
P.s. Dit is helemaal, 100% zelf gemaakt
Gewijzigd op 20/01/2013 17:12:47 door Koen Hollander
- Waarom gebruik je mysql_pcconnect() ?
Dit wil zeggen dat je de database connectie open laat staan, wat inhoud bij een beetje hoster dat je iets
krijgt van een foutmelding: warning too many connections
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
if(mysql_num_rows($userQuery) == 1 AND $basic['direct_actief'] == '1') {
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $_POST['username'];
?>
if(mysql_num_rows($userQuery) == 1 AND $basic['direct_actief'] == '1') {
$_SESSION['loggedin'] = true;
$_SESSION['username'] = $_POST['username'];
?>
Uhm.. mijn voorkeur zou eerder liggen om een session aan te maken met de waardes van mysql zelf.
Dus haal bijvoorbeeld het user id op en zet die in de session, en niet uit de post waardes.
Username en wachtwoord zet je nooit in een session.
Een login systeem hoeft alleen maar een match te maken of men bepaalde inhoud mag bekijken.
Waarom == 1? Volgens mij is > 0 (groter dan nul) genoeg. ;)
Verder html quote je met dubbele quotes. (") dus niet ('):
Ook zou ik niet de $_SERVER['REQUEST_METHOD'] ergens in het midden gaan doen, maar netjes bovenin.
Een error die kan je netjes in een array zetten, en met isset() weergeven op de plek die jij dit wenst.
In php zijn nummers/cijfers altijd zonder quotes:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
<?php
// dit is een string en geen nummer
$pass_true='1';
// dit is een nummer:
$pass_true= 1;
?>
// dit is een string en geen nummer
$pass_true='1';
// dit is een nummer:
$pass_true= 1;
?>
Verder mis ik nog wat foutmeldingen:
- of een gebruikersnaam beschikbaar is.
- wachtwoord sterk genoeg is.
- als een veld leeg is.
- email wel een echt email adres is.
En never nooit mysql_error() op een live server prijsgeven.
Dus maak daar een nette foutafhandeling in.
Dus al met al nog wel wat verbeterpuntjes..
EDIT Ow..
En dan vergeet ik nog het belangrijkst.
Waarom check je of een username in een session aanwezig is?
Mij lijkt het logischer om te controleren of $_SESSION['loggedin'] === true is. ;)
Gewijzigd op 20/01/2013 17:52:40 door Bart V B
mysql_error en or die kan je beter niet gebruiken. vooral niet op een productie server
Verder zie ik dat je dingen overbodig gebruikt. probeer je html en php gescheiden te houden en je php alleen in je html te gebruiken voor wat echo's en wat loopjes.
je hoeft een cijfer niet tussen quotes te zetten
Koen Hollander op 20/01/2013 17:10:02:
Index.php
Volgens mij is het verstandiger/beter/netter om de ' en " om te wisselen.
Wees consequent met wat je in elk script oproept/toepast.
In je config heb je al session_start(); staan.
Waarom dan nog een keer op regel 3 in login.php?
Zoals al gezegd: eerst php, dan html.
Je controleert niet of $_POST waarden bestaan, maar gebruikt ze in je query.
sha1 zou ik niet gebruiken; kan naar salt+pepper.
Geen controle of query geslaagd is.
Mis doc-type (login).
Koen Hollander op 20/01/2013 17:10:02:
Ik ben er zelf best wel trots op, maar wat vinden jullie er van?
Is een begin, maar veel zaken die met enige regelmaat op het forum voorbij komen heb je nog niet (goed) verwerkt.
Bedankt allemaal voor jullie reacties. ik doe er morgen iets mee, zit nu op verjaardag vader
Maak je code ook wat netter en lijn vooral goed uit. Na een paar maanden zie je de bomen door het bos niet meer!