Headerproblemen

Status
Niet open voor verdere reacties.

James007

Meubilair
Lid geworden
7 jan 2005
Berichten
5.794
Oke, het probleem is dat bij het aanmelden op mijn website, er een "headers already sent" error wordt weergegeven. Dit omdat de include login.inc.php niet helemaal als eerste op mijn website staat. Er staat namelijk nog headers.inc.php voor, met daarin de hele bovenkant van mijn webpagina inclusief headers.

In headers.inc.php staat een link "login". Bij het aanklikken van die link wordt via javascript een loginmogelijkheid zichtbaar gemaakt. Als je de gegevens verzendt, wordt er terug naar dezelfde pagina verwezen, die dan op zich zou moeten detecteren dat het gelukt is. Maar nu krijg ik dus een fout.

http://www.software.frihost.net/aviation/index.php

header.inc.php
PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">

<html>

   <head> 
      <title>Aviation</title>
      <meta name="description" content="Een overzicht van de luchtvaart" />
      <meta name="keywords" content="aviation, airospace, luchtvaart, vliegtuig, vliegtuigen, boeing, airbus" />
	  <link rel="stylesheet" href="main.css" type="text/css" />
<script type="text/javascript">
<!--
function showElement(id){
document.getElementById(id).style.display = "block";
}

function hideElement(id){
document.getElementById(id).style.display = "none";
}
//-->
</script>
   </head>

   <body onload="hideElement('login');">
<div class="header"><img src="images/header_big2.png" alt=""/><p class="headerlinks"><a href="index.php">Home</a> | <a href="#">Links</a> | <a onclick="showElement('login');"href="#">Login</a></p>
<p class="slogan">Do you share my passion for flying?</p></div>
   </body>
</html>

login.inc.php (username: administrator, wachtwoord: abcdefg )
PHP:
<?php
// Associatieve array met gebruikers (gebruikersnaam => wachtwoord):
$gebruikers = array(
                    "Administrator" => "abcdefg",
                    // enzovoorts ...
                   );

// Gebruikersnaam en wachtwoord controleren:
if (isset($_REQUEST['gn'])) {
    // Gebruikersnaam lezen uit een formulier of cookie:
    if (isset($_POST['gn'])) {
        $gebruikersnaam = $_POST['gn'];
    } elseif (isset($_COOKIE['gn'])) {
        $gebruikersnaam = $_COOKIE['gn'];
    } else {
        inloggen();
    }
    $gebruikersnaam = trim(strip_tags($gebruikersnaam));
    // Controleren of de gebruikersnaam bestaat:
    if (array_key_exists($gebruikersnaam, $gebruikers)) {
        // Wachtwoord lezen uit een formulier of cookie:
        if (isset($_POST['ww'])) {
            $wachtwoord = $_POST['ww'];
        } elseif (isset($_COOKIE['ww'])) {
            $wachtwoord = $_COOKIE['ww'];
        } else {
            inloggen($gebruikersnaam);
        }
        $wachtwoord = trim(strip_tags($wachtwoord));
        // Het wachtwoord bij deze gebruikersnaam controleren:
        if ($gebruikers[$gebruikersnaam] == $wachtwoord) {
            // Cookie verloopt na 30 dagen = 2592000 seconden:
            $verloopt_op = time() + 2592000;
            // Gebruikersnaam opslaan in een cookie:
            setcookie("gn", $gebruikersnaam, $verloopt_op);
            // Wachtwoord naar keuze opslaan in een cookie:
            if (isset($_POST['wo'])) {
                if ($_POST['wo'] == 1) {
                    setcookie("ww", $wachtwoord, $verloopt_op);
                }
            }
        } else {
            inloggen($gebruikersnaam);
        }
    } else {
        inloggen($gebruikersnaam);
    }
} else {
    inloggen();
}

// Webpagina met een formulier en instructies weergeven:
function inloggen($gebruikersnaam = '')
{
?>

<form id="log" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>" method="post">
  <table border="0" cellpadding="0" cellspacing="2">
    <tr>
      <td colspan="2">
        <label for="gn"><span style="text-decoration: underline">G</span>ebruikersnaam:</label>
      </td>
    </tr>
    <tr>
      <td colspan="2"><input accesskey="g" id="gn" name="gn" type="text" value="<?php echo $gebruikersnaam; ?>"></td>
    </tr>
    <tr>
      <td colspan="2">
        <label for="ww"><span style="text-decoration: underline">W</span>achtwoord:</label>
      </td>
    </tr>
    <tr>
      <td colspan="2"><input accesskey="w" id="ww" name="ww" type="password"></td>
    </tr>
    <tr>
      <td>
        <label for="wo">
          <input accesskey="s" id="wo" name="wo" type="checkbox" value="1"> Wachtwoord op<span style="text-decoration: underline">s</span>laan
        </label>
      </td>
      <td><input class="knop" type="submit" value="Inloggen"></td>
    </tr>
  </table>
</form>
<?php
};
?>

index.php
PHP:
<?php
include_once('header.inc.php');

/* LOGIN */
print '<div id="login">';
include_once ('login.inc.php');
print '</div>';


/*LINKERBLOK*/
print '<div class="left">';
include_once ('left.inc.php');
print '</div>';

/*NAVIGATOR*/
include ('navigator.inc.php');

/*MIDDENBLOK*/
print '<div class="midden">';
switch ($_POST['p']) {
  case 'home':
  include('home.inc');
  break;
}
print '</div>';
?>

Wie weet mij te helpen?

Alvast bedankt :)
 
Laatst bewerkt:
Je gebruik in login.inc.php een cookie nadat je al output hebt geleverd.

Zodra je in index.htm (php?) de include_once('header.inc.php'); weghaald zal die melding niet verschijnen...

Kwestie van de juiste volgorde aanhouden... dus eerst php dan html, niet html, php en dan weer html.
 
Ja, ik bedoelde index.php.

Als ik header.inc.php weghaal, dan is mijn header weg... en dat is dus niet de bedoeling.
Verder zou ik in mijn index.php de volgorde van de includes wel kunnen omdraaien, maar dan zit hij weer te klagen dat ik de headers al bij login.inc.php heb gedefinieerd.

James :)
 
headers (header (), maar ook functies als session_start () en setcookie ()) moeten aangeroepen worden voordat er output verzonden is.

PHP:
<?php

header ( 'Content-type: text/html' );
echo 'hai';

?>

Dit werkt. Er wordt een header verzonden, en daarna past output verstuurd (echo, print en andere functies die output genereren).

PHP:
<?php

echo 'output';
header ( 'Content-type: text/html' );

?>

Werkt dus niet.

In je script wordt er dus eerst output verzonden, en daarna pas een header aangemaakt. Dit moet je zien om te draaien. Je kunt eens kijken of je met templates kunt gaan werken. Dit maakt je code overzichtelijker (HTML en PHP is gescheiden).

Tha Devil zei:
Kwestie van de juiste volgorde aanhouden... dus eerst php dan html, niet html, php en dan weer html.
Dit is niet waar.

Code:
<html>

<head>
<title>PHP info</title>

</head>

<body>

<?php

$var = 'koe';
echo $var;

?>

</body>

</html>

Dit werkt prima, terwijl het HTML - PHP - HTML is. Het gaat er om welke functies je aanroept.
 
Laatst bewerkt:
bash zei:
Dit is niet waar.

Ik weet ook wel dat HTML - PHP - HTML goed gaat, maar ik heb het niet over altijd, ik heb het over dit script. En aangezien in dit script functies zitten die voor de output moet worden neergezet zeg ik dat het een kwestie van de juiste volgorde is...
 
Ik zie in dit script nérgens een Header(...); functie worden aangeroepen.. zeker weten dat de fout hierin zit James?
 
aaajeetee zei:
Ik zie in dit script nérgens een Header(...); functie worden aangeroepen.. zeker weten dat de fout hierin zit James?
PHP:
            setcookie("gn", $gebruikersnaam, $verloopt_op);
bash zei:
headers (header (), maar ook functies als session_start () en setcookie ()) moeten aangeroepen worden voordat er output verzonden is.

Mijn bericht over headers already sent was slechts 'n voorbeeldje, en ik heb de functie header () gebruikt.
 
aaajeetee zei:
Ik zie in dit script nérgens een Header(...); functie worden aangeroepen.. zeker weten dat de fout hierin zit James?
Er zijn headers verzonden in de html... en dan verzendt de php functie die inlogt ook nog eens headers en dat kan blijkbaar niet... Misschien kan ik bij het inloggen eerst de huidige headers verwijderen voor hij de nieuwe verzendt? Is daar een functie voor? of zou dat niet lukken?

James :)
 
Huh ?

Dat gaat prima, meerdere headers versturen. Als je mijn post had gelezen..

Er wordt output verzonden voordat de headers zijn verzonden.

Magoe, lijkt erop dat je mijn vorige post niet gelezen hebt :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan