inloggen
Ik heb twee vragen:
1) Hoe stel ik het beste in dat er een foutmelding komt als de combinatie gebruikersnaam/paswoord niet correct is ?
2) Als een gebruiker in een pagina (één van de velen) wil geraken waar hij eerst voor moet inloggen krijgt hij onmiddelijk een inlogformulier om in te vullen. Hoe stel je in dat hij na ingelogd te zijn onmiddelijk naar de gewenste pagina wordt doorgeschakeld ?
alvast bedankt
Gewijzigd op 21/08/2010 20:17:02 door Bas IJzelendoorn
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
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
<?php
session_start();
$Verkeerd="Uw gebruikersnaam en/of paswoord zijn verkeerd of niet ingevuld.";
if (isset($_POST['verzenden']))
{
$gebruikersnaam = $_POST["gebruikersnaam"];
$paswoord = $_POST["paswoord"];
// controleren of naam en paswoord in database voorkomen
// foutmelding als ie niet klopt
// als het klopt dan sessievariabelen aanmaken
$db=mysql_connect("localhost","afhaalpizz_root2","admin");
mysql_select_db("afhaalpizz_klanten",$db) or die ("Fout: openen database mislukt");
$sql = "SELECT * FROM gegevens WHERE Gebruikersnaam = \"" . $gebruikersnaam . "\" AND Paswoord = \"" . $paswoord . "\" ";
$result=mysql_query("$sql");
if(mysql_num_rows($result) ==1)
{
while ($rij=mysql_fetch_assoc($result))
{
if(($gebruikersnaam==$rij["Gebruikersnaam"]) AND ($paswoord==$rij["Paswoord"]))
{
$_SESSION["gebruikersnaam"] = $gebruikersnaam;
$_SESSION["paswoord"] = $paswoord;
header("Location:ingelogd.php");
}
else{echo $Verkeerd;}
}
}
}
?>
<html>
<head>
<title>inloggen.php</title>
</head>
<body>
<table><tr><td>
<?php
include ("includes/hoofdmenu.php");
?>
</td><td>
<form action="inloggen.php" method="post">
<input type="button" value="Gebruikersnaam" style="width:150px" />
<input type="text" name="gebruikersnaam" /><br />
<input type="button" value="Paswoord" style="width:150px" />
<input type="password" name="paswoord" />
<br />
<input type="submit" name="verzenden" value="Inloggen" />
</form>
<br /><img src="afbeeldingen/aanmelden.jpg" style="width:150px" border="1" onclick="location='aanmelden.php';" />
</td></tr></table>
<center>
Welcome to inloggen.php.
</center>
</body>
</html>
session_start();
$Verkeerd="Uw gebruikersnaam en/of paswoord zijn verkeerd of niet ingevuld.";
if (isset($_POST['verzenden']))
{
$gebruikersnaam = $_POST["gebruikersnaam"];
$paswoord = $_POST["paswoord"];
// controleren of naam en paswoord in database voorkomen
// foutmelding als ie niet klopt
// als het klopt dan sessievariabelen aanmaken
$db=mysql_connect("localhost","afhaalpizz_root2","admin");
mysql_select_db("afhaalpizz_klanten",$db) or die ("Fout: openen database mislukt");
$sql = "SELECT * FROM gegevens WHERE Gebruikersnaam = \"" . $gebruikersnaam . "\" AND Paswoord = \"" . $paswoord . "\" ";
$result=mysql_query("$sql");
if(mysql_num_rows($result) ==1)
{
while ($rij=mysql_fetch_assoc($result))
{
if(($gebruikersnaam==$rij["Gebruikersnaam"]) AND ($paswoord==$rij["Paswoord"]))
{
$_SESSION["gebruikersnaam"] = $gebruikersnaam;
$_SESSION["paswoord"] = $paswoord;
header("Location:ingelogd.php");
}
else{echo $Verkeerd;}
}
}
}
?>
<html>
<head>
<title>inloggen.php</title>
</head>
<body>
<table><tr><td>
<?php
include ("includes/hoofdmenu.php");
?>
</td><td>
<form action="inloggen.php" method="post">
<input type="button" value="Gebruikersnaam" style="width:150px" />
<input type="text" name="gebruikersnaam" /><br />
<input type="button" value="Paswoord" style="width:150px" />
<input type="password" name="paswoord" />
<br />
<input type="submit" name="verzenden" value="Inloggen" />
</form>
<br /><img src="afbeeldingen/aanmelden.jpg" style="width:150px" border="1" onclick="location='aanmelden.php';" />
</td></tr></table>
<center>
Welcome to inloggen.php.
</center>
</body>
</html>
Toevoeging op 22/08/2010 00:39:29:
dit was het inlogformulier
Toevoeging op 22/08/2010 00:41:45:
als ik ingelogd ben ga ik naar een apart bestand 'ingelogd.php'
nu wil ik automatisch doorgeschakeld worden naar het (één van de vele) gewenste bestand
Gewijzigd op 22/08/2010 17:17:29 door Bas IJzelendoorn
1. controles en validaties
2. op het gebruik van die() staat de doodstraf
3. je slaat geen privacy gevoelige info op in sessions / coookies
4. script logica klopt niet
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
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
<?php
session_start();
if ($db=mysql_connect('*****','*****','*****')) {
if (!mysql_select_db('afhaalpizz_klanten',$db))
unset($db);
}
}
if ($db) {
$Verkeerd = 'Uw gebruikersnaam en/of paswoord zijn verkeerd of niet ingevuld.';
$bError = false;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if ( isset($_POST['gebruikersnaam']) && trim($_POST['gebruikersnaam']) != ''
&& isset($_POST['passwoord']) && trim($_POST['paswoord']) != '')
// wachtwoord sla je op met md5 of sha1 of andere manier van hash
$sql = "SELECT *
FROM gegevens
WHERE gebruikersnaam = '".mysql_real_escape_string($_POST['gebruikersnaam']."'
AND password = '".md5($_POST['paswoord'])."'";
if (($result = mysql_query($sql)) === false) {
// schrijf mysql_error() en $sql naar een error file
$bError = true;
}
else {
if (mysql_num_rows($result) == 1) { // als het aantal opgehaalde record > 1 is dan klopt er iets niet gebruikersnaam dient uniek te zijn!
$row = mysql_fetch_assoc($result];
$_SESSION['ingelogd'] = 1;
unset($row['paswoord']); // wactwoorden en pricicy gegevens sla je niet op in $_COOKIE / $_SESSION
$_SESSION['gid'] = $row;
}
else {
$bError = true;
}
}
}
else {
$bError = true;
}
if ($bError) {
echo $Verkeerd;
}
else {
header('Location: ingeloged.php');
}
}
}
else {
// schrijf mysql_error() naar een error file
echo 'Op dit moment is het niet mogelijk in te loggen';
}
?>
<?php
session_start();
if (isset($_SESSION['ingelogd']) === false) {
header('Location: inloggen.php');
}
?>
<form action="inloggen.php" method="post">
<input name="gebruikersnaam" type="text" />
<input name="gebruikersnaam" type="password" />
<input name="verzenden" type="submit" value="inloggen" />
</form>
session_start();
if ($db=mysql_connect('*****','*****','*****')) {
if (!mysql_select_db('afhaalpizz_klanten',$db))
unset($db);
}
}
if ($db) {
$Verkeerd = 'Uw gebruikersnaam en/of paswoord zijn verkeerd of niet ingevuld.';
$bError = false;
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
if ( isset($_POST['gebruikersnaam']) && trim($_POST['gebruikersnaam']) != ''
&& isset($_POST['passwoord']) && trim($_POST['paswoord']) != '')
// wachtwoord sla je op met md5 of sha1 of andere manier van hash
$sql = "SELECT *
FROM gegevens
WHERE gebruikersnaam = '".mysql_real_escape_string($_POST['gebruikersnaam']."'
AND password = '".md5($_POST['paswoord'])."'";
if (($result = mysql_query($sql)) === false) {
// schrijf mysql_error() en $sql naar een error file
$bError = true;
}
else {
if (mysql_num_rows($result) == 1) { // als het aantal opgehaalde record > 1 is dan klopt er iets niet gebruikersnaam dient uniek te zijn!
$row = mysql_fetch_assoc($result];
$_SESSION['ingelogd'] = 1;
unset($row['paswoord']); // wactwoorden en pricicy gegevens sla je niet op in $_COOKIE / $_SESSION
$_SESSION['gid'] = $row;
}
else {
$bError = true;
}
}
}
else {
$bError = true;
}
if ($bError) {
echo $Verkeerd;
}
else {
header('Location: ingeloged.php');
}
}
}
else {
// schrijf mysql_error() naar een error file
echo 'Op dit moment is het niet mogelijk in te loggen';
}
?>
<?php
session_start();
if (isset($_SESSION['ingelogd']) === false) {
header('Location: inloggen.php');
}
?>
<form action="inloggen.php" method="post">
<input name="gebruikersnaam" type="text" />
<input name="gebruikersnaam" type="password" />
<input name="verzenden" type="submit" value="inloggen" />
</form>
Ik leer stap voor stap. Het script dat je hebt gepost is te moeilijk voor me. Ik hou het bij het mijne tot het werkt en dan zie ik wel naar de andere zaken (privacy,die,logica,enz).
Ik ben momenteel bezig met twee dingen die niet willen lukken: direct doorschakelen naar de gewenste pagina na ingelogd te zijn en een foutmelding krijgen op dezelfde inlogpagina als de inloggegevens fout zijn.
Wat betreft de foutmelding, die kun je gewoon vanuit hetzelfde script echoën...
Wellicht ook handig: PHP Beginnershandleiding
ik zal het anders uitleggen:
ik zit op de voorpagina van de website, ik wil naar het bestelformulier dus klik ik op 'bestellen' maar aangezien ik niet ingelogd ben wordt ik doorgestuurd naar het inlogformulier en na ingelogd te zijn moet ik onmiddelijk doorgeschakeld worden naar het bestelformulier.
mijn vraag:
hoe kan ik zo instellen dat de website mij onmiddelijk doorschakelt naar het bestelformulier na ingelogd te zijn enkel omdat ik voor dat ik ingelogd was heb geklikt op de link 'bestellen' ?
hoe kan ik zo instellen dat de website mij onmiddelijk doorschakelt naar het bloggedeelte na ingelogd te zijn enkel omdat ik voor dat ik ingelogd was heb geklikt op de link 'bloggen' ?
alvast bedankt
Dan zul je dus op een of andere manier moeten registreren vanaf welke pagina de bezoeker naar de login pagina verwezen is. Dat kan wellicht met de waarde in $_SERVER['HTTP_REFERER'], dus daar zou je eens naar kunnen kijken.
$VorigePagina=$_SERVER['HTTP_REFERER'];
header('Location:'.$VorigePagina);
lukt niet.
Echo de waarde van $_SERVER['HTTP_REFERER'] eerst eens en kijk of die waarde klopt...
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
100
101
102
103
104
105
106
107
108
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
100
101
102
103
104
105
106
107
108
<?php
// Oude locatie opvragen die is
// opgestuurt door middel van
// header("Location: inloggen.php?oudeLocatie=" . $_SERVER["REQUEST_URI"]);
$oudelocatie = $_REQUEST['oudeLocatie'];
session_start();
$Verkeerd = "Uw gebruikersnaam en/of paswoord zijn verkeerd of niet ingevuld.";
if (isset($_POST['verzenden']))
{ $gebruikersnaam = $_POST["gebruikersnaam"];
$paswoord = $_POST["paswoord"];
/// controleren of naam en paswoord in database voorkomen
/// foutmelding als ie niet klopt
/// als het klopt dan sessievariabelen aanmaken
$db = mysql_connect("localhost","afhaalpizz_root2","admin");
// Veiligheids maatregel
$gebruikersnaam = mysql_real_escape_string($gebruikersnaam);
$paswoord = mysql_real_escape_string($paswoord);
// Deze maatregel heeft een verbinding met MYSQL nodig;
mysql_select_db("afhaalpizz_klanten",$db) or die ("Fout: openen database mislukt");
$sql = "SELECT * FROM `gegevens` WHERE Gebruikersnaam = \"" . $gebruikersnaam . "\" AND Paswoord = \"" . $paswoord . "\" ";
// Tabel naam tussen `` gezet.
$result = mysql_query($sql); // $sql uit de "" gehaald.
if(mysql_num_rows($result) == 1)
{ // Aangezien je alleen resultaten kan hebben
// Waar de gebruikersnaam en wachtwoord klopt,
// hoef je het dus niet dubbel te controleren.
$_SESSION["gebruikersnaam"] = $gebruikersnaam;
$_SESSION["paswoord"] = $paswoord;
// We willen de oude loctie in een url gebruiken:
// Voorkom slechte URL's
$oudelocatie = urlencode($oudelocatie);
header("Location: ingelogd.php?oudeLocatie=" . $oudelocatie);
// Geef de oude loctie door aan ingelogd.php;
exit();
// Na een header('location: '); een exit(); gebruiken om het script te stoppen
}
else
{ // Er is niks gevonden waar de ingevoerde gebruikersnaam
// en wachtwoord mee overeen komen:
// Gebruiker bestaat niet.
echo $Verkeerd;
}
mysql_close($db); // Sluit de verbinding met mysql.
}
?>
<html>
<head>
<title>inloggen.php</title>
</head>
<body>
<table>
<tr>
<td>
<?php
include ("includes/hoofdmenu.php");
?>
</td><td>
<form action="inloggen.php" method="post"><p><!-- <p> toegevoegt om goede HTML te maken -->
<input type="button" value="Gebruikersnaam" style="width: 150px;" />
<input type="text" name="gebruikersnaam" /><br />
<input type="button" value="Paswoord" style="width: 150px;" />
<input type="password" name="paswoord" />
<br />
<!-- Geef de oude locatie door aan het volgende document. -->
<input type="hidden" name="oudeLocatie" value="<?PHP echo $oudelocatie; ?>"/>
<input type="submit" name="verzenden" value="Inloggen" />
</p></form>
<p><!-- <p> toegevoegt om goede HTML te maken -->
<br/><img src="afbeeldingen/aanmelden.jpg" style="width: 150px;" border="1" onclick="location = 'aanmelden.php';" />
</p>
</td></tr></table>
<center>
<p>Welcome to inloggen.php.</p><!-- <p> toegevoegt om goede HTML te maken -->
</center>
</body>
</html>
// Oude locatie opvragen die is
// opgestuurt door middel van
// header("Location: inloggen.php?oudeLocatie=" . $_SERVER["REQUEST_URI"]);
$oudelocatie = $_REQUEST['oudeLocatie'];
session_start();
$Verkeerd = "Uw gebruikersnaam en/of paswoord zijn verkeerd of niet ingevuld.";
if (isset($_POST['verzenden']))
{ $gebruikersnaam = $_POST["gebruikersnaam"];
$paswoord = $_POST["paswoord"];
/// controleren of naam en paswoord in database voorkomen
/// foutmelding als ie niet klopt
/// als het klopt dan sessievariabelen aanmaken
$db = mysql_connect("localhost","afhaalpizz_root2","admin");
// Veiligheids maatregel
$gebruikersnaam = mysql_real_escape_string($gebruikersnaam);
$paswoord = mysql_real_escape_string($paswoord);
// Deze maatregel heeft een verbinding met MYSQL nodig;
mysql_select_db("afhaalpizz_klanten",$db) or die ("Fout: openen database mislukt");
$sql = "SELECT * FROM `gegevens` WHERE Gebruikersnaam = \"" . $gebruikersnaam . "\" AND Paswoord = \"" . $paswoord . "\" ";
// Tabel naam tussen `` gezet.
$result = mysql_query($sql); // $sql uit de "" gehaald.
if(mysql_num_rows($result) == 1)
{ // Aangezien je alleen resultaten kan hebben
// Waar de gebruikersnaam en wachtwoord klopt,
// hoef je het dus niet dubbel te controleren.
$_SESSION["gebruikersnaam"] = $gebruikersnaam;
$_SESSION["paswoord"] = $paswoord;
// We willen de oude loctie in een url gebruiken:
// Voorkom slechte URL's
$oudelocatie = urlencode($oudelocatie);
header("Location: ingelogd.php?oudeLocatie=" . $oudelocatie);
// Geef de oude loctie door aan ingelogd.php;
exit();
// Na een header('location: '); een exit(); gebruiken om het script te stoppen
}
else
{ // Er is niks gevonden waar de ingevoerde gebruikersnaam
// en wachtwoord mee overeen komen:
// Gebruiker bestaat niet.
echo $Verkeerd;
}
mysql_close($db); // Sluit de verbinding met mysql.
}
?>
<html>
<head>
<title>inloggen.php</title>
</head>
<body>
<table>
<tr>
<td>
<?php
include ("includes/hoofdmenu.php");
?>
</td><td>
<form action="inloggen.php" method="post"><p><!-- <p> toegevoegt om goede HTML te maken -->
<input type="button" value="Gebruikersnaam" style="width: 150px;" />
<input type="text" name="gebruikersnaam" /><br />
<input type="button" value="Paswoord" style="width: 150px;" />
<input type="password" name="paswoord" />
<br />
<!-- Geef de oude locatie door aan het volgende document. -->
<input type="hidden" name="oudeLocatie" value="<?PHP echo $oudelocatie; ?>"/>
<input type="submit" name="verzenden" value="Inloggen" />
</p></form>
<p><!-- <p> toegevoegt om goede HTML te maken -->
<br/><img src="afbeeldingen/aanmelden.jpg" style="width: 150px;" border="1" onclick="location = 'aanmelden.php';" />
</p>
</td></tr></table>
<center>
<p>Welcome to inloggen.php.</p><!-- <p> toegevoegt om goede HTML te maken -->
</center>
</body>
</html>
Als iemand naar inloggen.php moet worden gestuurt moet je dit gebruiken:
Ik ben zelf een PHP-exper dus ik heb het gebrobeer makkelijk begrijpbare code te maken, het is dus NIET 100% hack-proef!
Bij ingelocht.php moet je zetten als je een link naar de oude pagina wilt.
Gewijzigd op 17/09/2010 20:03:17 door ferry d
Quote:
Ik ben zelf een PHP-exper
LOL je hebt er anders best nog wel wat foutjes in zitten.
- Je echoed content boven je html gedeelte.
- "$gebruikersnaam = $_POST["gebruikersnaam"];" is nergens voor nodig.
- Het wachtwoord in een sessie opslaan? Helemaal nergens voor nodig.
- Het wachtwoord word zonder te coderen opgeslagen.
- Je hebt nul comma nul fout afhandeling.
- mysql_close() is nergens voor nodig.
- die() is ook niet echt mooi.
- backtics uit je sql slopen.
- als je enkele quotes had gebruikt had je je dubble quotes niet hoeven te escapen in je sql.
Het enige plus punt is meer en beter commentaar in je script. Al is het al bijna een maand te laat ben ik bang.
Weet dat het al beetje laat is maar misschien handig voor de andere gebruikers.
Wat ik altijd deed (deed!!), was:
Code (php)
Toevoeging op 18/09/2010 00:11:06:
HTTP_REFERER hoeft trouwens nooit te bestaan. Ga daar dus niet van uit! En in Safari kan je m spoofen.