Ik heb het volgende probleem met een login script en het includen daarvan.
Ik heb een login.php file die als ik deze direct open in de browser, goed werkt.
maar als ik deze login.php include in de pagina waar ik hem wil hebben krijg ik onderstaande error's:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-8\www\main.php:9) in c:\program files\easyphp1-8\www\login.php on line 3
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\main.php:9) in c:\program files\easyphp1-8\www\login.php on line 3
ik heb al gezocht op deze error's en ook wel het een en ander gevonden maar nog niet de oplossing.
ik heb begrepen dat er al output (header) is verzonden voordat het script wordt uitgevoerd en dat niet kan. Een oplossing hiervoor is ervoor te zorgen dat er niets voordat het script word uitgevoerd verzonden wordt. De enige manier in mijn ogen is door het script bovenaan het .php document te plaatsen (en dat werkt dan ook) maar dan staat het login form dus niet meer op de juiste plaats
Hieronder de code:
login.php
<?php
//login.php
session_start();
require('functions.php');
if($_SERVER['REQUEST_METHOD']=='POST')
{
if(FALSE!==($rDbConn=connectdb()))
{
$sQuery='SELECT id FROM users WHERE username="'.$_POST['username'].'" AND password="'.md5($_POST['password']).'"';
if(!$rResult=mysql_query($sQuery,$rDbConn))
{
echo 'Hey een foutmelding: '.mysql_error($rDbConn).'<BR>'.$sQuery;
}
else
{
if(mysql_num_rows($rResult)==0)
{
echo 'Gebruikersnaam en wachtwoord horen niet bij elkaar.';
}
else
{
//En dan komt hier het loginverhaal
//willekeurige string maken
$sValidate=md5(rand(0,99999));
//cookies setten voor 7dagen
$iUserId=mysql_result($rResult,0,'id');
setcookie('validate',$sValidate,time()+60*60*24*7,'/','localhost');
setcookie('user_id',$iUserId,time()+60*60*24*7,'/','localhost');
//de gegevens in de tabel zetten
$sQuery='REPLACE INTO logins (tijdstip, validate, user_id, client_ip)
VALUES (NOW(), "'.$sValidate.'", '.$iUserId.', "'.$_SERVER['REMOTE_ADDR'].'")';
if(!mysql_query($sQuery,$rDbConn))
{
echo 'Hey een foutmelding: '.mysql_error($rDbConn).'<BR>'.$sQuery;
}
//de sessie gegevens schrijven
$_SESSION['user_id']=$iUserId;
$_SESSION['ingelogd']=TRUE;
$_SESSION['client_ip']=$_SERVER['REMOTE_ADDR'];
//doorsturen naar de volgende pagina
header('location: secure.php');
}
}
mysql_close($rDbConn);
}
}
else
{
//het formulier (zonder te letten op HTML-standaarden):
echo '<FORM NAME="inlogform" METHOD="post" ACTION="'.$_SERVER['PHP_SELF'].'">
Login: <INPUT TYPE="text" NAME="username" SIZE="10"><BR>
Passw: <INPUT TYPE="password" NAME="password" SIZE="10"><BR><BR>
<INPUT TYPE="submit" VALUE="Login"></FORM>';
}
?>
infomenu.php
<div id="infomenu">
infomenu
<?php include("login.php"); ?>
</div>
Heeft iemand hier een idee over om dit op te lossen?
Ik heb een login.php file die als ik deze direct open in de browser, goed werkt.
maar als ik deze login.php include in de pagina waar ik hem wil hebben krijg ik onderstaande error's:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at c:\program files\easyphp1-8\www\main.php:9) in c:\program files\easyphp1-8\www\login.php on line 3
Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\main.php:9) in c:\program files\easyphp1-8\www\login.php on line 3
ik heb al gezocht op deze error's en ook wel het een en ander gevonden maar nog niet de oplossing.
ik heb begrepen dat er al output (header) is verzonden voordat het script wordt uitgevoerd en dat niet kan. Een oplossing hiervoor is ervoor te zorgen dat er niets voordat het script word uitgevoerd verzonden wordt. De enige manier in mijn ogen is door het script bovenaan het .php document te plaatsen (en dat werkt dan ook) maar dan staat het login form dus niet meer op de juiste plaats
Hieronder de code:
login.php
<?php
//login.php
session_start();
require('functions.php');
if($_SERVER['REQUEST_METHOD']=='POST')
{
if(FALSE!==($rDbConn=connectdb()))
{
$sQuery='SELECT id FROM users WHERE username="'.$_POST['username'].'" AND password="'.md5($_POST['password']).'"';
if(!$rResult=mysql_query($sQuery,$rDbConn))
{
echo 'Hey een foutmelding: '.mysql_error($rDbConn).'<BR>'.$sQuery;
}
else
{
if(mysql_num_rows($rResult)==0)
{
echo 'Gebruikersnaam en wachtwoord horen niet bij elkaar.';
}
else
{
//En dan komt hier het loginverhaal
//willekeurige string maken
$sValidate=md5(rand(0,99999));
//cookies setten voor 7dagen
$iUserId=mysql_result($rResult,0,'id');
setcookie('validate',$sValidate,time()+60*60*24*7,'/','localhost');
setcookie('user_id',$iUserId,time()+60*60*24*7,'/','localhost');
//de gegevens in de tabel zetten
$sQuery='REPLACE INTO logins (tijdstip, validate, user_id, client_ip)
VALUES (NOW(), "'.$sValidate.'", '.$iUserId.', "'.$_SERVER['REMOTE_ADDR'].'")';
if(!mysql_query($sQuery,$rDbConn))
{
echo 'Hey een foutmelding: '.mysql_error($rDbConn).'<BR>'.$sQuery;
}
//de sessie gegevens schrijven
$_SESSION['user_id']=$iUserId;
$_SESSION['ingelogd']=TRUE;
$_SESSION['client_ip']=$_SERVER['REMOTE_ADDR'];
//doorsturen naar de volgende pagina
header('location: secure.php');
}
}
mysql_close($rDbConn);
}
}
else
{
//het formulier (zonder te letten op HTML-standaarden):
echo '<FORM NAME="inlogform" METHOD="post" ACTION="'.$_SERVER['PHP_SELF'].'">
Login: <INPUT TYPE="text" NAME="username" SIZE="10"><BR>
Passw: <INPUT TYPE="password" NAME="password" SIZE="10"><BR><BR>
<INPUT TYPE="submit" VALUE="Login"></FORM>';
}
?>
infomenu.php
<div id="infomenu">
infomenu
<?php include("login.php"); ?>
</div>
Heeft iemand hier een idee over om dit op te lossen?