PHP Switcher

son gohan

Erfahrenes Mitglied
Hallo,

habe eine Frage zu folgendem PHP Switcher http://www.contrastsweb.com/switcher/v1/source.php

Kann mir jemand sagen ob der auch so funktionieren müsste oder ob ich irgendwas falsch gemacht haben muss in meiner Seite?

Ich kann mir eigentlich nur Fehler in der switcher.php Datei vorstellen gemacht zu haben.

PHP:
<?php
// This array lists the "acceptable" styles$accept = array('normal',
'different');
// Get style from a query string (e.g. from a link),
// or from a form.
if(isset($_REQUEST['set'])){
$style = trim(strip_tags($_REQUEST['set']));
}
else if(isset($_POST['set'])){
$style = trim(strip_tags($_POST['set']));
}
// Check if the requested stylesheet is "acceptable"
if(in_array($style, $accept)){
setcookie('sitestyle', $style, time()+31536000, '/', $_SERVER['HTTP_HOST']); 
 
}
if(isset($_SERVER['HTTP_REFERER'])){
// Send the user back to the refering page
header("Location: ". $_SERVER['HTTP_REFERER']);
exit;
}
else {
// No HTTP referrer, send them back to the home page
header("Location: http://localhost/index.php");
exit;
}
?>

Entweder stimmen die Angaben http://localhost/index.php nicht im Script oder die HTTP variablen sind falsch geschrieben, eil ich habe mal von einer verkürzten Schreibweise gelesen, wonach man auch

$_get["Variablennamen"];

anstatt

$HTTP_GET_VARS["Name"];

schreiben kann.

Auf jedenfall muss doch irgendwas nicht stimmen, ich bekomme diese Fehlermeldung wenn ich es austesten will:

PHP:
Parse error: parse error, unexpected ')' in C:\Programme\OmniSecure\htdocs\switcher.php on line 4
 
Zuletzt bearbeitet:
Hallo!

Kann es sein, dass hier der Fehler liegt?

PHP:
<?php
// This array lists the "acceptable" styles$accept = array('normal',
'different');

So wie ich das sehe, ist


nicht als Kommentar gekennzeichnet und wird dadurch geparst.
Oder wolltest du folgendes machen (was ich für wahrscheinlicher halte):

PHP:
// This array lists the "acceptable" styles
$accept = array('normal','different');
 
Hallo,

ich glaube das different soll nicht als Kommentar stehen!?

Das Original sieht so aus:

PHP:
<?php
 
// This array lists the "acceptable" styles
$accept = array('normal',
				'different');
 
// Get style from a query string (e.g. from a link),
// or from a form.
if(isset($_REQUEST['set'])){
	$style = trim(strip_tags($_REQUEST['set']));
}
else if(isset($_POST['set'])){
	$style = trim(strip_tags($_POST['set']));
}
 
// Check if the requested stylesheet is "acceptable"
if(in_array($style, $accept)){
	setcookie("sitestyle", $style, time()+31536000, '/switcher/', 'contrastsweb.com', '0');
}
 
if(isset($_SERVER['HTTP_REFERER'])){
	// Send the user back to the refering page
	header("Location: ". $_SERVER['HTTP_REFERER']);
	exit;
}
else {
	// No HTTP referrer, send them back to the home page
	header("Location: http://contrastsweb.com/switcher/example.php");
	exit;
}
?>

Du findest es direkt unter: http://www.contrastsweb.com/switcher/v1/source.php

Naja, und ausser der switcher.php Datei muss nur etwas Code in die eigentliche Seite:

einmal im header das hier:
PHP:
 <link rel="stylesheet" href="<?php if(isset($_COOKIE['sitestyle'])){	print trim($_COOKIE['sitestyle']); } else {	print "normal"; } ?>.css" media="screen" />
<link rel="alternate stylesheet" href="normal.css" media="screen" title="Default Style" />
<link rel="alternate stylesheet" href="different.css" media="screen" title="Different Stylesheet" />

und dann noch das hier zum wählen der Styles:

PHP:
<p><a href="switcher.php?set=different">Different stylesheet</a><br />
<a href="switcher.php?set=normal">Normal stylesheet</a></p>

Also im ganzen ja nicht so aufwendig, aber es funkt nicht Ich vermute den Fehler in der switcher.php .

So sagt es mir auch die Fehlermeldung:
PHP:
 Parse error: parse error, unexpected ')' in C:\Programme\OmniSecure\htdocs\switcher.php on line 3


Nachtrag:

Ich habe jetzt mal versucht die switcher.php Datei ohne Kommentare zu schreiben so:

PHP:
<?php
$accept = array('normal','different');
if(isset($_REQUEST['set']))
{
$style = trim(strip_tags($_REQUEST['set']));
}
else if(isset($_POST['set']))
{
$style = trim(strip_tags($_POST['set']));
}
 
if(in_array($style, $accept))
{
setcookie('sitestyle', $style, time()+31536000, '/', $_SERVER['HTTP_HOST']);
}
if(isset($_SERVER['HTTP_REFERER']))
{
header("Location: ". $_SERVER['HTTP_REFERER']);	exit;
}
else
{
header("Location: http://localhost/index.php");
exit;
}
?>

Ich bekomme dann aber eine neue Fehlermeldung die noch länger ist:

PHP:
Notice: Undefined index: HTTP_HOST in C:\Programme\OmniSecure\htdocs\switcher.php on line 27
 
Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\OmniSecure\htdocs\switcher.php:27) in C:\Programme\OmniSecure\htdocs\switcher.php on line 27
 
Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\OmniSecure\htdocs\switcher.php:27) in C:\Programme\OmniSecure\htdocs\switcher.php on line 35

Ech seltsam nisch.
 
Zuletzt bearbeitet:
Hallo!

Versuch es mal mit
PHP:
setcookie('sitestyle', $style, time()+31536000, '/', 'localhost', '0');
Gruss Dr Dau
 
Hallo Dr. Dau,

also mit deinem Vorschlag bekomme ich keine Fehlermeldung, das ist ja schon mal gut.

Aber das Stylesheet wird auch nicht gewechselt.

Fällt jemand noch etwas ein. Das muss man doch irgendwie hinbekommen lo. :mad:
 
Code:
C:ProgrammeOmniSecurehtdocsswitcher.php
Scheint mir ein etwas merkwürdiger Pfad zu sein - irgendwie fehlen da doch die "\"...?

Ansonsten kann ich mal auf Anhieb keinen Fehler im Script finden...
 
Hallo Moritz123,

C:ProgrammeOmniSecurehtdocsswitcher.php​

Scheint mir ein etwas merkwürdiger Pfad zu sein - irgendwie fehlen da doch die "\"...?

Das stammt doch aus der Fehlemeldung. Es kommt jetzt aber nicht mehr zu einer Fehlermeldung weil mir Dr. Dau den Tipp gegeben hat in der switcher.php folgendes zu ändern:

PHP:
 setcookie('sitestyle', $style, time()+31536000, '/', 'localhost', '0');

Seit dem kommt es zu keiner Fehlermeldung mehr.
Die Schreibweise kann ich aber nicht ganz verstehen. Wieso kommt z.B. nach dem 'localhost', noch eine '0` ?

So und nun zähle ich nochmal alles genau auf was ich in meiner Seite aktuell habe:

In der index.php :
PHP:
 <link rel="stylesheet" href="<?php   if(isset($_COOKIE['sitestyle'])){	print trim($_COOKIE['sitestyle']);   }   else {	print "normal";   } ?>.css" media="screen" />
<link rel="alternate stylesheet" href="normal.css" media="screen" title="Default Style" /> <link rel="alternate stylesheet" href="different.css" media="screen" title="Different Stylesheet" /> 
 
 
 
<body>
 
<p><a href="http://localhost/switcher.php?set=different">Different stylesheet</a><br />
<a href="http://localhost/switcher.php?set=normal">Normal stylesheet</a></p>

zugehörige switcher.php

PHP:
 <?php
$accept = array('normal','different');
if(isset($_REQUEST['set']))
{
$style = trim(strip_tags($_REQUEST['set']));
}
else if(isset($_POST['set']))
{
$style = trim(strip_tags($_POST['set']));
}
if(in_array($style, $accept))
{
setcookie('sitestyle', $style, time()+31536000, '/', 'localhost', '0');
}
if(isset($_SERVER['HTTP_REFERER']))
{
header("Location: ". $_SERVER['HTTP_REFERER']);	exit;
}
else
{
header("Location: http://localhost/index.php");
exit;
}
?>

normal- und different.css Dateinen erstellt.


Es kommt zu keiner Fehlermelung aber es wird auch kein Style gewechselt.

Das sind nur ein paar kleine Zeilen PHP Code zum Anfang meiner LErnphase und schin klappt was nicht, das ist ech deprimierend.

Wo liegt der Fehler, wer sieht es auf Anhieb?
 
Das der Style nicht gewechselt wird kann eigentlich nur damit zusammenhängen, dass das Cookie nicht gesetzt wird, da ich im Code auf Anhieb keinen Fehler finde.

Die 0 am Ende bedeutet lediglich, dass das Cookie nicht bei einer gesicherten Verbindung (also über SSL) gesetzt wird.

Hast Du Cookies in deinem Browser aktiviert?
Kannst Du mir mal sagen, was dein Browser ausgibt, wenn du ein kleines Script wie folgendes schreibst und aufrufst:
PHP:
<?php
   echo $_SERVER['DOCUMENT_ROOT'];
?>
 
Hallo,

wenn ich
PHP:
 <?php 
echo $_SERVER['DOCUMENT_ROOT']; 
?>

eingebe, erhalte ich die URL:

PHP:
C:\\Programme\\OmniSecure\\htdocs

Kann es vielleicht sein das ich diese URL überall verwenden muss?

Also wegen den Cookies glaube ich schon das die aktiviert sind. Alle anderen Swichtcher von fremeden Seiten mit Cookie funktionieren bei mir, ich kann mich bei Tutorials zwecks Cookie einloggen und in meinen IE Brwoser sind die Einstellungen vom Datenschutz auf mittel, das bedeutet glaub ich das die Cookies angenommen werden.

Kann es sein das diese Zeile falsch ist:

PHP:
 setcookie('sitestyle', $style, time()+31536000, '/', 'localhost', '0');
muss dort nicht ein Backslah hin so \ rum und nicht so / ?

Wenn ich die Adresse so reinschreibe in der switcher.php geht es auch nicht. C:\\Programme\\OmniSecure\\htdocs

grüße
feh
 
Zuletzt bearbeitet:
Hast Du das mal auf nem "richtigen" Webserver ausprobiert?

Wenn du magst, probier ichs mal bei mir - dazu müsstest Du die Dateien grad zippen und hochladen, die dazu gehören.
 
Zurück