Versio

probleem met login script

Overzicht Reageren

SCO

SCO

04/12/2006 23:07:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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");

?>


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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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!
 
PHP hulp

PHP hulp

25/05/2012 11:54:32
Gesponsorde koppelingen:
BHosted Hosting al vanaf € 1,- per maand

Controleer nu gratis jouw domeinnaam:

  
 
Bierens

Bierens

04/12/2006 23:16:00
Quote Anchor link
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'])){
Gewijzigd op 01/01/1970 01:00:00 door Bierens
 
Frank -

Frank -

04/12/2006 23:24:00
Quote Anchor link
$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.
 
SCO

SCO

04/12/2006 23:49:00
Quote Anchor link
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>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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!
 
Bierens

Bierens

04/12/2006 23:50:00
Quote Anchor link
Je moet zorgen dat session_start(); helemaal bovenaan staat, dus ook boven <html>
 
SCO

SCO

04/12/2006 23:56:00
Quote Anchor link
Ok, ik heb nu dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
session_start();
?>

<!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)
PHP script in nieuw venster Selecteer het PHP script
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
<?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
 
Bierens

Bierens

04/12/2006 23:57:00
Quote Anchor link
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
 
SCO

SCO

05/12/2006 00:04:00
Quote Anchor link
beveiligd.php ziet er zo uit bij mij:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php session_start(); ?>

<HTML>
<HEAD><TITLE>Welkom op de beveilgde pagina!</TITLE>
</HEAD>
<BODY>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(!isset($_SESSION["user"])){
$text = "U bent niet goed ingelogd, ga terug naar <A HREF='login.php'>de login pagina</A> of naar <A HREF='registreer.php'>de registreer pagina</A>";
echo($text);
}

else{?>

Welkom, u bent aangemeld als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo($_SESSION["user"]);?>

<BR>
Uw wachtwoord is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo($_SESSION["wachtwoord"]);?>

<P>
<A HREF="loguit.php">Log hier uit!</A>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
}
?>

</BODY>
</HTML>

Het begint dus wel met session_start();

Is hier wat aan te doen?
 
- SanThe -

- SanThe -

05/12/2006 10:14:00
Quote Anchor link
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.
 
SCO

SCO

05/12/2006 15:45:00
Quote Anchor link
Ik heb nu de include bovenaan pagina beveiligd.php weggehaald,

<HTML>
<HEAD><TITLE>Welkom op de beveilgde pagina!</TITLE>
</HEAD>
<BODY>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
if(!isset($_SESSION["user"])){
$text = "U bent niet goed ingelogd, ga terug naar <A HREF='login.php'>de login pagina</A> of naar <A HREF='registreer.php'>de registreer pagina</A>";
echo($text);
}

else{?>

Welkom, u bent aangemeld als
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo($_SESSION["user"]);?>

<BR>
Uw wachtwoord is:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo($_SESSION["wachtwoord"]);?>

<P>
<A HREF="loguit.php">Log hier uit!</A>
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
}
?>

</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?
 
SCO

SCO

05/12/2006 15:49:00
Quote Anchor link
En met wat kan ik $_POST het beste vervangen?

Inmiddels heb ik

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php echo($_SESSION["wachtwoord"]);?>


ook verwijderd zoals aanbevolen, foutmelding is nog steeds hetzelfde..
 
Jan Koehoorn

Jan Koehoorn

05/12/2006 15:53:00
Quote Anchor link
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.
 
SCO

SCO

05/12/2006 15:59:00
Quote Anchor link
Dank je wel Jan! Die tutorial is voor mij nieuw, heb die nog nooit gezien. Ik ga er mee aan de slag!
 
SCO

SCO

05/12/2006 18:06:00
Quote Anchor link
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
 
SCO

SCO

05/12/2006 22:04:00
Quote Anchor link
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!
 
Jan Koehoorn

Jan Koehoorn

05/12/2006 22:06:00
Quote Anchor link
Ja, dan moet je even kijken welke PHP versie mysql_real_escape_string ondersteunt, en welke MySQL versie SHA1 ondersteunt.
 
Jeroen

Jeroen

05/12/2006 22:11:00
Quote Anchor link
waarom zet je het wachtwoord in de sessie?
 
SCO

SCO

05/12/2006 22:16:00
Quote Anchor link
@ 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?
 
Jeroen

Jeroen

05/12/2006 22:21:00
Quote Anchor link
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?


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'])
 



Overzicht Reageren

Get Adobe Flash player