probleem met login script
Beste allemaal,
Ik gebruik het login script van deze tutorial:
http://www.phphulp.nl/php/tutorials/8/155/
Nu heb ik alles precies zo opgevolgd. Mijn connection.php ziet er alleen iets anders uit:
Registreren gaat prima: user en password worden netjes ge-insert in de database. Echter als ik dan op login.php wil gaan inloggen, krijg ik steeds de melding "U hebt geen goede combinatie van emailadres en wachtwoord gebruikt! Ga terug"
Met andere woorden, hij loopt stuk op dit stuk:
Klopt: if(!empty($_POST)){ etc wel? Is het nu niet zo dat als er geen login gegevens zijn gesubit dat ie dan juist wel wat wil gaan toevoegen, wat natuurlijk dan juist niet de bedoeling is? Of is er iets mis met mijn databaseverbinding?
Alvast bedankt, ik ben een beetje radeloos!
Ik gebruik het login script van deze tutorial:
http://www.phphulp.nl/php/tutorials/8/155/
Nu heb ik alles precies zo opgevolgd. Mijn connection.php ziet er alleen iets anders uit:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?
$gebruiker = "";
$wachtwoord = "";
$database = "";
$host = "localhost";
mysql_connect($host, $gebruiker, $wachtwoord) or die("Er is geen connectie met de database");
mysql_select_db($database) or die("Er is geen database geselecteerd");
?>
$gebruiker = "";
$wachtwoord = "";
$database = "";
$host = "localhost";
mysql_connect($host, $gebruiker, $wachtwoord) or die("Er is geen connectie met de database");
mysql_select_db($database) or die("Er is geen database geselecteerd");
?>
Registreren gaat prima: user en password worden netjes ge-insert in de database. Echter als ik dan op login.php wil gaan inloggen, krijg ik steeds de melding "U hebt geen goede combinatie van emailadres en wachtwoord gebruikt! Ga terug"
Met andere woorden, hij loopt stuk op dit stuk:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
session_start();
if(!empty($_POST)){
include("connection.php");
$query = "SELECT * FROM users WHERE email='" . $_POST["email"] ."' AND wachtwoord='". $_POST["wachtwoord"] . "'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0){
$user = $_POST["email"];
$wachtwoord = $_POST["wachtwoord"];
$_SESSION['user'] = $user;
$_SESSION['wachtwoord'] = $wachtwoord;
header("Location: beveiligd.php");
exit();
}
else {
$text = "U hebt geen goede combinatie van emailadres en wachtwoord gebruikt! <A onclick='javascript: window.back();'>Ga terug</A>";
die($text);
} }
else{
//pagina verkeerd aangeroepen
header("Location: login.php");
}?>
session_start();
if(!empty($_POST)){
include("connection.php");
$query = "SELECT * FROM users WHERE email='" . $_POST["email"] ."' AND wachtwoord='". $_POST["wachtwoord"] . "'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0){
$user = $_POST["email"];
$wachtwoord = $_POST["wachtwoord"];
$_SESSION['user'] = $user;
$_SESSION['wachtwoord'] = $wachtwoord;
header("Location: beveiligd.php");
exit();
}
else {
$text = "U hebt geen goede combinatie van emailadres en wachtwoord gebruikt! <A onclick='javascript: window.back();'>Ga terug</A>";
die($text);
} }
else{
//pagina verkeerd aangeroepen
header("Location: login.php");
}?>
Klopt: if(!empty($_POST)){ etc wel? Is het nu niet zo dat als er geen login gegevens zijn gesubit dat ie dan juist wel wat wil gaan toevoegen, wat natuurlijk dan juist niet de bedoeling is? Of is er iets mis met mijn databaseverbinding?
Alvast bedankt, ik ben een beetje radeloos!
Gesponsorde koppelingen:
Ik denk dat het hierin zit:
if(mysql_num_rows($result) > 0){
Ik denk dat hij geen goede rij heeft gevonden.
Ook zie ik dat je je wachtwoord in een session opslaat... Heb ergens gelezen dat dat niet verstandig is (maar bind me er niet aan vast, want ben er niet zeker van)
Even gezocht voor je:
$aantal=mysql_num_rows($result);
echo $aantal;
Hiermee kun je kijken of hij wel 1 rij terug geeft...
if(!empty($_POST['wachtwoord']) && !empty($_POST['email'])){
if(mysql_num_rows($result) > 0){
Ik denk dat hij geen goede rij heeft gevonden.
Ook zie ik dat je je wachtwoord in een session opslaat... Heb ergens gelezen dat dat niet verstandig is (maar bind me er niet aan vast, want ben er niet zeker van)
Even gezocht voor je:
$aantal=mysql_num_rows($result);
echo $aantal;
Hiermee kun je kijken of hij wel 1 rij terug geeft...
if(!empty($_POST['wachtwoord']) && !empty($_POST['email'])){
Gewijzigd op 01/01/1970 01:00:00 door Bierens
$result = mysql_query($query);
Waarom controleer je niet of $result TRUE of FALSE is? Je hebt de garantie dat de query altijd kan mislukken en vroeg of laat ook zal mislukken. In dat geval loopt jouw script in het honderd.
En wat Bierens ook al zegt, een wachtwoord hoort niet in een sessie. Je hebt dit gegeven nooit nodig (of je doet echt iets fout), sla het dan ook niet op. Het kan je hooguit problemen opleveren.
Waarom controleer je niet of $result TRUE of FALSE is? Je hebt de garantie dat de query altijd kan mislukken en vroeg of laat ook zal mislukken. In dat geval loopt jouw script in het honderd.
En wat Bierens ook al zegt, een wachtwoord hoort niet in een sessie. Je hebt dit gegeven nooit nodig (of je doet echt iets fout), sla het dan ook niet op. Het kan je hooguit problemen opleveren.
Bedankt voor jullie tips, intussen heb ik het script op mijn andere server gezet -omdat deze wat betrouwbaarder is- en toen kreeg ik het volgende:
Warning: Cannot send session cache limiter - headers already sent (output started at /home/sites/site101/web/admin/login_2.php:9) in /home/sites/site101/web/admin/login_2.php on line 10
Warning: Cannot add header information - headers already sent by (output started at /home/sites/site101/web/admin/login_2.php:9) in /home/sites/site101/web/admin/login_2.php on line 23
login2.php ziet er bij mij zo uit:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
</body>
</html>
Ik zal ook jullie tips opvolgen, maar misschien zit hier wel het probleem?
alvast bedankt!
Warning: Cannot send session cache limiter - headers already sent (output started at /home/sites/site101/web/admin/login_2.php:9) in /home/sites/site101/web/admin/login_2.php on line 10
Warning: Cannot add header information - headers already sent by (output started at /home/sites/site101/web/admin/login_2.php:9) in /home/sites/site101/web/admin/login_2.php on line 23
login2.php ziet er bij mij zo uit:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
session_start();
if(!empty($_POST)){
include("connection.php");
$query = "SELECT * FROM users WHERE email='" . $_POST["email"] ."' AND wachtwoord='". $_POST["wachtwoord"] . "'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0){
$user = $_POST["email"];
$wachtwoord = $_POST["wachtwoord"];
$_SESSION['user'] = $user;
$_SESSION['wachtwoord'] = $wachtwoord;
header("Location: beveiligd.php");
exit();
}
else {
$text = "U hebt geen goede combinatie van emailadres en wachtwoord gebruikt! <A onclick='javascript: window.back();'>Ga terug</A>";
die($text);
} }
else{
//pagina verkeerd aangeroepen
header("Location: login.php");
}?>
session_start();
if(!empty($_POST)){
include("connection.php");
$query = "SELECT * FROM users WHERE email='" . $_POST["email"] ."' AND wachtwoord='". $_POST["wachtwoord"] . "'";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0){
$user = $_POST["email"];
$wachtwoord = $_POST["wachtwoord"];
$_SESSION['user'] = $user;
$_SESSION['wachtwoord'] = $wachtwoord;
header("Location: beveiligd.php");
exit();
}
else {
$text = "U hebt geen goede combinatie van emailadres en wachtwoord gebruikt! <A onclick='javascript: window.back();'>Ga terug</A>";
die($text);
} }
else{
//pagina verkeerd aangeroepen
header("Location: login.php");
}?>
</body>
</html>
Ik zal ook jullie tips opvolgen, maar misschien zit hier wel het probleem?
alvast bedankt!
Je moet zorgen dat session_start(); helemaal bovenaan staat, dus ook boven <html>
Ok, ik heb nu dit:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
</body>
</html>
Nu geeft ie alleen nog deze melding:
Warning: Cannot add header information - headers already sent by (output started at /home/sites/site101/web/admin/login_2.php:12) in /home/sites/site101/web/admin/login_2.php on line 26
Overigens geeft ie door
$aantal=mysql_num_rows($result);
echo $aantal;
nu wel "1" dus de query klopt.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Untitled Document</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
if(!empty($_POST)){
include("connection.php");
$query = "SELECT * FROM users WHERE email='" . $_POST["email"] ."' AND wachtwoord='". $_POST["wachtwoord"] . "'";
$result = mysql_query($query);
$aantal=mysql_num_rows($result);
echo $aantal;
if ($aantal > 0){
$user = $_POST["email"];
$wachtwoord = $_POST["wachtwoord"];
$_SESSION['user'] = $user;
$_SESSION['wachtwoord'] = $wachtwoord;
header("Location: beveiligd.php");
exit();
}
else {
$text = "U hebt geen goede combinatie van emailadres en wachtwoord gebruikt! <A onclick='javascript: window.back();'>Ga terug</A>";
die($text);
} }
else{
//pagina verkeerd aangeroepen
header("Location: login.php");
}?>
if(!empty($_POST)){
include("connection.php");
$query = "SELECT * FROM users WHERE email='" . $_POST["email"] ."' AND wachtwoord='". $_POST["wachtwoord"] . "'";
$result = mysql_query($query);
$aantal=mysql_num_rows($result);
echo $aantal;
if ($aantal > 0){
$user = $_POST["email"];
$wachtwoord = $_POST["wachtwoord"];
$_SESSION['user'] = $user;
$_SESSION['wachtwoord'] = $wachtwoord;
header("Location: beveiligd.php");
exit();
}
else {
$text = "U hebt geen goede combinatie van emailadres en wachtwoord gebruikt! <A onclick='javascript: window.back();'>Ga terug</A>";
die($text);
} }
else{
//pagina verkeerd aangeroepen
header("Location: login.php");
}?>
</body>
</html>
Nu geeft ie alleen nog deze melding:
Warning: Cannot add header information - headers already sent by (output started at /home/sites/site101/web/admin/login_2.php:12) in /home/sites/site101/web/admin/login_2.php on line 26
Overigens geeft ie door
$aantal=mysql_num_rows($result);
echo $aantal;
nu wel "1" dus de query klopt.
Gewijzigd op 01/01/1970 01:00:00 door SCO
Ik denk dat je header fout nu hier in zit:
header("Location: beveiligd.php");
Weet niet of dit nu nog wel kan, omdat je daarvoor al <html> en session_start(); heb staan
header("Location: beveiligd.php");
Weet niet of dit nu nog wel kan, omdat je daarvoor al <html> en session_start(); heb staan
beveiligd.php ziet er zo uit bij mij:
<HTML>
<HEAD><TITLE>Welkom op de beveilgde pagina!</TITLE>
</HEAD>
<BODY>
Welkom, u bent aangemeld als
<BR>
Uw wachtwoord is:
<P>
<A HREF="loguit.php">Log hier uit!</A>
</BODY>
</HTML>
Het begint dus wel met session_start();
Is hier wat aan te doen?
<HTML>
<HEAD><TITLE>Welkom op de beveilgde pagina!</TITLE>
</HEAD>
<BODY>
Code (php)
Welkom, u bent aangemeld als
<BR>
Uw wachtwoord is:
<P>
<A HREF="loguit.php">Log hier uit!</A>
</BODY>
</HTML>
Het begint dus wel met session_start();
Is hier wat aan te doen?
Je moet session_start() slechts één keer aanroepen. En dan wel op de allereerste regel. In de includes die dan nog komen hoeft het dan niet meer.
Verder stop je $_POST gegevens direct in de query. Dat is niet veilig, denk aan mysql-injection.
Verder stop je $_POST gegevens direct in de query. Dat is niet veilig, denk aan mysql-injection.
Ik heb nu de include bovenaan pagina beveiligd.php weggehaald,
<HTML>
<HEAD><TITLE>Welkom op de beveilgde pagina!</TITLE>
</HEAD>
<BODY>
Welkom, u bent aangemeld als
<BR>
Uw wachtwoord is:
<P>
<A HREF="loguit.php">Log hier uit!</A>
</BODY>
</HTML>
maar nu geeft ie nog steeds deze foutmelding:
Warning: Cannot add header information - headers already sent by (output started at /home/sites/site101/web/admin/login_2.php:12) in /home/sites/site101/web/admin/login_2.php on line 26
Hoe kan dat?
<HTML>
<HEAD><TITLE>Welkom op de beveilgde pagina!</TITLE>
</HEAD>
<BODY>
Code (php)
Welkom, u bent aangemeld als
<BR>
Uw wachtwoord is:
<P>
<A HREF="loguit.php">Log hier uit!</A>
</BODY>
</HTML>
maar nu geeft ie nog steeds deze foutmelding:
Warning: Cannot add header information - headers already sent by (output started at /home/sites/site101/web/admin/login_2.php:12) in /home/sites/site101/web/admin/login_2.php on line 26
Hoe kan dat?
En met wat kan ik $_POST het beste vervangen?
Inmiddels heb ik
ook verwijderd zoals aanbevolen, foutmelding is nog steeds hetzelfde..
Inmiddels heb ik
ook verwijderd zoals aanbevolen, foutmelding is nog steeds hetzelfde..
Nergens om, maar die tutorial is uit 2004. Je zet de user en het wachtwoord in de sessie, allebei nergens voor nodig. Je hoeft maar 1 keer te checken of user en wachtwoord kloppen, namelijk als iemand inlogt.
Ik heb ook een tut over inlogscripts geschreven, misschien is het een idee om die eens door te lezen.
Ik heb ook een tut over inlogscripts geschreven, misschien is het een idee om die eens door te lezen.
Dank je wel Jan! Die tutorial is voor mij nieuw, heb die nog nooit gezien. Ik ga er mee aan de slag!
Hoi Jan, ik heb je tutorial gelezen, en uitgeprobeerd, ik krijg nu deze melding als ik wil inloggen:
Fatal error: Call to undefined function: mysql_real_escape_string() in /home/sites/site101/web/admin1/authenticatie.php on line 23
?
En wat betekent je opmerking "Het password sla je op in je DB met een SHA1 hash, daarom staat SHA1 dus ook in de query"
Moet ik in MySQL "password" nog een extra eigenschap meegeven?
Alvast bedankt!
SCO01
Fatal error: Call to undefined function: mysql_real_escape_string() in /home/sites/site101/web/admin1/authenticatie.php on line 23
?
En wat betekent je opmerking "Het password sla je op in je DB met een SHA1 hash, daarom staat SHA1 dus ook in de query"
Moet ik in MySQL "password" nog een extra eigenschap meegeven?
Alvast bedankt!
SCO01
Ik heb net even getest op een server waar een nieuwere mysql op draait, enals ik de query terugbreng naar dit:
SELECT id
FROM members
WHERE username = '" . mysql_real_escape_string ($username) . "'
AND password = '" . mysql_real_escape_string ($password) . "'
";
dan werkt het wel.. Ik doe dus wat fout met de SHA1.. Weet iemand wat ik fout doe?
Tx!
SELECT id
FROM members
WHERE username = '" . mysql_real_escape_string ($username) . "'
AND password = '" . mysql_real_escape_string ($password) . "'
";
dan werkt het wel.. Ik doe dus wat fout met de SHA1.. Weet iemand wat ik fout doe?
Tx!
Ja, dan moet je even kijken welke PHP versie mysql_real_escape_string ondersteunt, en welke MySQL versie SHA1 ondersteunt.
waarom zet je het wachtwoord in de sessie?
@ Jeroen, dat was inderdaad een oud script, ik gebruik nu Jan's script.
@ Jan, mijn nieuwe mysql ondersteunt het gelukkig wel, en daar moet ie ook op draaien. Hij doet het dus nu helemaal, ik zit alleen nog met dat SHA1. Als ik die in de query laat staan, dan gaat ie dus terug naar login.php. Moet ik SHA1 ook in MySQL invoeren ergens?
Overigens Jan, heel erg bedankt voor je tutorial! Hij is heel erg duidelijk. Ik weet alleen niet hoe het zit met uitloggen?
@ Jan, mijn nieuwe mysql ondersteunt het gelukkig wel, en daar moet ie ook op draaien. Hij doet het dus nu helemaal, ik zit alleen nog met dat SHA1. Als ik die in de query laat staan, dan gaat ie dus terug naar login.php. Moet ik SHA1 ook in MySQL invoeren ergens?
Overigens Jan, heel erg bedankt voor je tutorial! Hij is heel erg duidelijk. Ik weet alleen niet hoe het zit met uitloggen?
SCO schreef op 05.12.2006 22:16:
@ Jeroen, dat was inderdaad een oud script, ik gebruik nu Jan's script.
@ Jan, mijn nieuwe mysql ondersteunt het gelukkig wel, en daar moet ie ook op draaien. Hij doet het dus nu helemaal, ik zit alleen nog met dat SHA1. Als ik die in de query laat staan, dan gaat ie dus terug naar login.php. Moet ik SHA1 ook in MySQL invoeren ergens?
Overigens Jan, heel erg bedankt voor je tutorial! Hij is heel erg duidelijk. Ik weet alleen niet hoe het zit met uitloggen?
@ Jan, mijn nieuwe mysql ondersteunt het gelukkig wel, en daar moet ie ook op draaien. Hij doet het dus nu helemaal, ik zit alleen nog met dat SHA1. Als ik die in de query laat staan, dan gaat ie dus terug naar login.php. Moet ik SHA1 ook in MySQL invoeren ergens?
Overigens Jan, heel erg bedankt voor je tutorial! Hij is heel erg duidelijk. Ik weet alleen niet hoe het zit met uitloggen?
ok ^^
en btw, inplaats van sha1 zou je ook md5 kunnen gebruikt, of ze combineren :)
zoiets => md5(sha1($pass))
en dan bij het inloggen zo checken
if(md5(sha1($pass)) == $mysqlassocresult['pass'])



