Probleme mit Styleswitcher Script

root_linux

Mitglied
Hallo!

Also vora, Ich selbst habe eigentlich kaum eine Ahnung von PHP. Da ich aber "gezwungen" bin für ein Schulprojekt einen CSS-Styleswitcher in PHP (mit Cookie) Funktion einzubauen.

PHP:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<?php
if(isset($_COOKIE['style']) && file_exists($_COOKIE['style'].".css")) {
	echo "<link href='{$_COOKIE['style']}.css' rel='stylesheet' type='text/css' />";
} else {
	echo "<link href='style-b.css' rel='stylesheet' type='text/css' />";
}
?>




<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="author" content="Schlat" />
<title>Testat 1 :: Webseite</title>

</head>

<body>

<div id="color_scheme">
<?php
if (!isset($_GET['s'])) {
?>
Choose your color <br />
	<a href="index.php?s=style-b">.Black.:</a><a href="index.php?s=style-w">:.White.</a>

</div>


<div id="black_bar">
<div id="menu">
<a href="index.php">Home</a>::<a href="ajax.php">Ajax</a>::<a href="videos.php">Videos</a>::<a href="members.php">Members</a>::<a href="contact.php">PHP</a>
</div>

<div id="content_box_l">
<h1>RSS - News</h1><p>
</div>

<div id="content_box_r">

<div id="img_bottom">
<?php
echo "<img src='{$_COOKIE['style']}.jpg' />";
?>
</div>

</div>
<div id="logo">

</div>


</div>
<?php
exit;
}
if (file_exists($_GET['s'].".css")) {
setcookie("style", $_GET['s'], time()+(31*86400), '/');
header("Location: index.php");
} else {
header("Location: index.php");
}
?>
</body>

Hier mal mein Code. Nun habe ich folgendes Probelm: Auf meinem XAMPP Server lief die Seite noch Problemlos. Seit ich sie im INternet auf einen Server geladen habe bekomme ich nur noch Fehlermeldungen geliefert.

Cannot modify header information

Nach kurzer Suche bin ich darauf gestossen dass der PHP Code möglicherweise an der falschen Stelle steht. Ich habe danach mehrmals den Code versucht umzustellen, aber ohne Erfolg. Wenn ich denn PHP ganz am anfang vor das Doctype stelle, zeigt es mir von <body> abwärts nichts mehr an! :(

Ich hoffe jemand erbarmt sich mir un kann mir einen konkreten Hinweis liefern. ;)


root_linux
 
Das Problem ist, das du keinen Output (auch HTML außerhalb der PHP-Tags ist Output) an den Client senden darfst, bevor header(), setcookie(), session_start(), etc gesendet wurde. Willst du dennoch Code ausgeben, bevor die Befehle ausgeführt wurden, musst die Ausgabe zwischenpuffern. Das funktioniert so:

PHP:
<?php
ob_start();
?>
<html>
....

<?php
header("....");
setcookie(...);
?>
...
</html>

<?php
ob_end_flush();
?>
 
Kann ich nicht glauben, du wirst da vermutlich nur keine Fehler gesehen haben, wenn die Fehler-Anzeige deaktiviert ist (php.ini). Du könntest das nachprüfen, in dem du in die ersten Zeilen des Scripts folgendes schreibst:

PHP:
error_reporting(E_ALL|E_STRICT);
ini_set('display_errors', 1);
 
Zurück