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:
<?
$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:

<?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!
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'])){
$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.
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 /var/www/vhosts/phphulp.nl/httpdocs/admin/login_2.php:9) in /var/www/vhosts/phphulp.nl/httpdocs/admin/login_2.php on line 10

Warning: Cannot add header information - headers already sent by (output started at /var/www/vhosts/phphulp.nl/httpdocs/admin/login_2.php:9) in /var/www/vhosts/phphulp.nl/httpdocs/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>
<?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:

<?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>
<?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 /var/www/vhosts/phphulp.nl/httpdocs/admin/login_2.php:12) in /var/www/vhosts/phphulp.nl/httpdocs/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.

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

beveiligd.php ziet er zo uit bij mij:

<?php session_start(); ?>
<HTML>
<HEAD><TITLE>Welkom op de beveilgde pagina!</TITLE>
</HEAD>
<BODY>
<?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
<?php echo($_SESSION["user"]);?>
<BR>
Uw wachtwoord is:
<?php echo($_SESSION["wachtwoord"]);?>
<P>
<A HREF="loguit.php">Log hier uit!</A>
<?php
}
?>
</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.
Ik heb nu de include bovenaan pagina beveiligd.php weggehaald,

<HTML>
<HEAD><TITLE>Welkom op de beveilgde pagina!</TITLE>
</HEAD>
<BODY>
<?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
<?php echo($_SESSION["user"]);?>
<BR>
Uw wachtwoord is:
<?php echo($_SESSION["wachtwoord"]);?>
<P>
<A HREF="loguit.php">Log hier uit!</A>
<?php
}
?>
</BODY>
</HTML>

maar nu geeft ie nog steeds deze foutmelding:

Warning: Cannot add header information - headers already sent by (output started at /var/www/vhosts/phphulp.nl/httpdocs/admin/login_2.php:12) in /var/www/vhosts/phphulp.nl/httpdocs/admin/login_2.php on line 26

Hoe kan dat?
En met wat kan ik $_POST het beste vervangen?

Inmiddels heb ik

<?php echo($_SESSION["wachtwoord"]);?>

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

Reageren