Headers foutje.

Status
Niet open voor verdere reacties.

XenomX

Gebruiker
Lid geworden
27 apr 2002
Berichten
822
Ik heb een login op m'n site staan, gedeetelijk van phphulp.nl, ik heb deze beetje aangepast en in een map gegooid en klaar, hij werkt goed.

Maar.. nu heb ik het anders gedaan, nu ga ik niet direct naar de login pagina maar via:
admin.php?pagina=Login

Als ik nu probeer in te loggen krijg ik de volgende error:

Code:
Warning: session_start(): Cannot send session cookie - headers already sent by (output started at 
D:\WebServer\IndigoPerl\apache\htdocs\Mix\Admin\admin.php:8) in 
D:\WebServer\IndigoPerl\apache\htdocs\Mix\Admin\login.php on line 2

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at 
D:\WebServer\IndigoPerl\apache\htdocs\Mix\Admin\admin.php:8) in 
D:\WebServer\IndigoPerl\apache\htdocs\Mix\Admin\login.php on line 2

Hier even de code van de pagina's zelf.

aanmelden.php
PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>Untitled Document</title>
<link href="../../styles/kt.css" rel="stylesheet" type="text/css">
</head>

<body>
<div align="center">

        <form name="form1" method="post" action="?midden=login">
          <p align="center"> <br>
            Gebruikersnaam:<br>
              <input name="username" type="text" class="knoppentext" id="username">
              <br>
              <br>
            Wachtwoord:<br>
            <input name="password" type="text" class="knoppentext" id="password">
            <br>
            <br>
            <input name="Submit" type="submit" class="knoppentext" value="Login">
          </p>
      </form></td>

</div>
<div align="center"></div>
<div align="center"></div>
</body>
</html>

login.php
PHP:
<?php  
session_start();  
if(!empty($_POST)){  
include("verbind.php");  
$query = "SELECT * FROM admin WHERE username='" . $_POST["username"]  ."' AND password='". $_POST["password"] . "'";  

$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 = "Toegang geweigerd! <A onclick='javascript: window.back();'>Ga terug</A>";  
die($text);  
} }  
else{  
//pagina verkeerd aangeroepen 
header("Location: login.php");  
}?>

Ik krijg hiet voor elkaar werkend te krijgen, en als ik het op de eerste manier moet doen moeten alle pagina's weer veranderd worden :confused:

Bij voorbaat heel veel dank ;)
 
In de pagina admin.php een sesson start doen als de pagina login is

PHP:
if($pagina == "Login")		
 {
  session_start();
 }
 
Ik zit nu nog wat te vogelen, krijg het nog niet voor elkaar, deze code gebruik ik:

PHP:
           if(!$_GET['midden']) 
               $_GET['menu'] = "home";
 
           if(file_exists($_GET['midden'].'.php')) 
               include($_GET['midden'].'.php');      
           else 
             // niks

De link waar het login form op staat is:
admin.php?midden=aanmelden

De pagina die de login controleerd (waar hij dus op vast loopt is)
admin.php?midden=login

:thumb:

p.s.

Waar moet ik:
PHP:
if($pagina == "Login")        
 {
  session_start();
 }
precies plaatsen? Had het nu geprobeerd in admin.php bovenaan.
 
OK, ik heb nu session start uit login.php gehaald en alleen bovenaan admin.php dit gezet:
PHP:
<?php
if($pagina == "aanmelden")        
 {
  session_start();
 }
?>

Nu zegt hij niet headers already send als ik het wachtwoord fout hebt, maar wel als ik het goed heb.
Hij loopt dan vast op Line: 15 en daar staat dit:
PHP:
header("Location: beveiligd.php");

:confused:
 
Mag ik je aanraden om templates te gebruiken ? Dan krijg je dit probleem niet.
Het probleem is dat er output naar de browser van de bezoeker wordt gestuurd en vervolgens nog een HTTP headers worden gestuurd. Dat kan niet. HTTP headers moeten altijd vóór de output worden gestuurd.
Als je templates zou gebruiken zou je éérst alle PHP codes uitvoeren (dus o.a. HTTP headers naar de browser van de bezoeker sturen) en daarnaaaaaaaa de output.
 
PHP:
<?

if (headers_sent()) { 
		echo "<script language=\"Javascript\">"; 
		echo "document.location='beveiligd.php'"; 
		echo "</script>"; 
}else{ 
		header("location: beveiligd.php"); 
}

?>
 
Geplaatst door KaWouter
PHP:
<?

if (headers_sent()) { 
		echo "<script language=\"Javascript\">"; 
		echo "document.location='beveiligd.php'"; 
		echo "</script>"; 
}else{ 
		header("location: beveiligd.php"); 
}

?>

Wat bedoel je hier mee?

(info: het is de bedoeling dat er ingelogt word voordat die pagina weergegeven mag worden, zijn er misschien andere manieren hoe het in deze situatie wel werkt.)

:thumb:
 
vervang de

PHP:
header("Location: beveiligd.php");

door

PHP:
<?
if (headers_sent()) { 

        echo "<script language=\"Javascript\">"; 

        echo "document.location='beveiligd.php'"; 

        echo "</script>"; 

}else{ 

        header("location: beveiligd.php"); 

}



?>
 
Hmm.. dat werkt enigzins wel, ik zat weer met een anders probleem, heb het al met een andere login opgelost.

Toch hartstikke bedankt, ben weer iets meer te weten gekomen :thumb:

@JPeetje, Templates.. zou je me dat in het kort uit kunnen leggen, link naar tutorials hoe en wat?

Bvd.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan