Via een kennis heb ik een member script overgenomen. Het aanmelden werkt perfect, maar zodra ik wil gaan inloggen geeft de browser de volgende melding:

Warning: Cannot modify header information - headers already sent by (output started at http://*****/test/style.css:1) in /var/www/***/test/login.php on line 105

Ben nou al 3 uur bezig en krijg het niet voor elkaar, heb het script exact overgenomen en heb inmiddels al diverse topics gelezen over dit probleem

Dit zijn de bestanden:

style.css

<style type=text/css>
body, table
{
font-family: MS Sans Serif;
font-size: 10pt;
background: #EEEFEE;
color: #000000;
}

hr {
color: black;
height: 1;
}

a {
color: #000000;
text-decoration: none;
}

a:hover
{
text-decoration: underline;
}

input, textarea, select
{
font-family: MS Sans Serif;
font-size: 10pt;
background: #FFFFFF;
border: 1px solid #C0C0C0;
}

--!>
</style>


login.php

<?
session_start();
include("config.inc.php");
if(IsSet($stijl))
{
include($stijl);
}

$grens = date("YmdHi", mktime(date("H") - $tijd_blokkeren,date("i"), 0, date("m"),
date("d"), date("Y")));

$user_ip=$_SERVER['REMOTE_ADDR'];

$query = mysql_query("
SELECT id
FROM foute_aanmelding
WHERE ip='$user_ip' AND
tijd>$grens
")
or die(mysql_error());
$result = mysql_num_rows($query);

if(!$result)
{
if(IsSet($_POST['submit']))
{
// maak "gevaarlijke" tekens van invoer onschakelijk door een "\" toe te voegen
$gebruikersnaam = addslashes($_POST['gebruikersnaam']);
$wachtwoord = md5(addslashes($_POST['wachtwoord']));

// controleer gebruikersnaam en wachtwoord met gegevens uit de database
$query = mysql_query("
SELECT *
FROM members
WHERE gebruikersnaam='$gebruikersnaam' AND
wachtwoord='$wachtwoord' AND
geactiveerd='1'
")
or die(mysql_error());
$result = mysql_num_rows($query);

if(!$result)
{
// wachten met output om "brute force" tegen te gaan
sleep(2);

if (IsSet($_SESSION['foute_aanmelding']))
{
$_SESSION['foute_aanmelding']++;

if($_SESSION['foute_aanmelding']>=$max_foute_aanmelding)
{
$tijd=date("YmdHi");

// blokkeren van het ip adres
mysql_query ("
INSERT INTO foute_aanmelding
(
ip,
tijd
)
VALUES
(
'$user_ip',
'$tijd'
)
")
or die(mysql_error());

echo $blok_melding;
session_destroy();
}

}

else
{
$_SESSION['foute_aanmelding']=1;
}

// gebruikersnaam of wachtwoord is onjuist, terug naar inlogformulier
$a = "Gebruikersnaam en/of Wachtwoord is/zijn incorrect.
Of je bent vergeten om je account te activeren...<br>
<br><a href=\"?gebruikersnaam=$gebruikersnaam\">Ga terug</a>";
echo $a;
}

else
{
while($object = mysql_fetch_object($query))
{
$memberid = $object->memberid;
}
// inloggen: registreren gegevens in sessie en openen beveiligde pagina
$login = 1;

// aanmaken object "$reg_sessie" zodat gegevens onzichtbaar voor webbrowsers worden
$reg_sessie->login=$login;
$reg_sessie->memberid=$memberid;
$reg_sessie->ipadres=$user_ip;

$_SESSION['reg_sessie']=$reg_sessie;

// openen van de beveiligde pagina
header("Location: fotos.php"); //--- dit is de regel van de foutmelding
}
}

else
{
if(!IsSet($_SESSION['reg_sessie']->login))
{
// Het inlogformulier
$formulier = "<form method=\"POST\" action=\"$PHP_SELF\">
<input type=\"hidden\" name=\"submit\" value=\"1\">
Naam:<br>
<input type=\"text\" name=\"gebruikersnaam\" size=\"20\"><br>
Wachtwoord:<br>
<input type=\"password\" name=\"wachtwoord\" size=\"20\"><br>
<input class=\"button\" type=\"submit\" value=\"Login\">
<input class=\"button\" type=\"reset\" value=\"Aanmelden\"
onclick=\"document.location.href=('aanmelden.php')\">
</form>";

}
else
{
// openen van de beveiligde pagina
header("Location: fotos.php");
}

if(!IsSet($_SESSION['reg_sessie']))
{
echo $formulier;
}
}
}

else
{
echo $blok_melding;
}

?>

Ik kan geen harde returns vinden en ook geen spaties aan het einde van de bestanden.

Wie zal mij willen helpen dit (veel voorkomende) probleem te verhelpen.

Alvast bedankt,

Arnold
Kan me vergissen maar dien je niet <? en ?> te gebruiken in style.css

Blijkbaar voeg je die in volgens de foutmelding (in config.inc.php?)
Ik dacht altijd dat style.css zonder de php tags moest. maar kan het wel even proberen.

In ieder geval alvast bedankt voor je hulp
Even te snel geantwoord:

De invoeging vindt plaats met include($style)

Maar uitvoer begint daarmee ook. Uit de PHP Help bij include

When a file is included, parsing drops out of PHP mode and into HTML mode at the beginning of the target file, and resumes again at the end. For this reason, any code inside the target file which should be executed as PHP code must be enclosed within valid PHP start and end tags.

Dus: Je zult de style op andere plekken moeten invoegen.
Heb ik gelezen. Begrijp het nog niet. Bijvoorbeeld bij wijzig.php staat precies hetzelfde als bij login.php

<?php
session_start();

require("config.inc.php");
if(IsSet($stijl))
{
require($stijl);
}

wijzig.php werkt gewoon goed, nou begrijp ik niet waarom login.php niet werkt. Als ik require($stijl) weghaal bij inlog.php werkt die wel gewoon. Maar dan heeft die pagina niet meer dezelfde opmaak.

En bij het inloggen heeft de pagina halverwege nogmaals een header nl,

// openen van de beveiligde pagina
header("Location: fotos.php");

en hier geeft die dan de foutmelding
Ja, maar heeft wijzig.php dan een header(...)?

Wat ook werkt:

ob_start();
session_start();

dan bij fouten

ob_end_clean();
header(....);

op het einde:

ob_end_flush();

Werkt altijd.
nee, klopt inderdaad. En hoe zet ik de bovengenoemde code er dan in.

Moet dus beginnen met

ob_start();
session_start();

maar waar zet ik die andere 2 dan?

Ben nog niet zo gevorderd hiermee. Ben wel aan het leren
Via deze code omzeil ik het probleem toch of niet?

Heeft dat verder geen gevolgen dan?

Reageren