Anfrage

Hallo,

gut zu wissen Gumbo das es gehen müsste, ich kann mich da auch wieder an ein PHP Script von dir erinnern das du mir mal für XHTML gegeben hattest, welches auch eine XML Deklaration einbaut wenn der Browser XHTML unterstützen tut.

Wegen dem Switcher konnte ich mich noch nicht entscheiden ob ich den von modo nehme oder das Beispiel von hans_schmid versuche.

Ich muss auch erst einmal ein Appacher Server lokal installieren zum testen. Da hab ich noch etwas Probleme mit dem XAMPP den ich mir dazu geladen habe.
 
Hallo,

ich habe mir jetzt endlich mal einen Webserver auf den Rechner installieren können und wollte jetzt mal ein PHP Switcher bauen.

Ich habe auch unter http://www.contrastsweb.com/switcher/v1/source.php einen recht simpelen Switcher gefunden.

Das ganze habe ich versucht in meine Seite einzubauen, es kommt zwar keine Fehlermeldung, aber wechseln tut er auch nicht.

Ich weis nicht woran es liegen könnte, ich habe eine schwitcher.php Datei und eine index6.php erstellt.

Die swichtcher.php sieht so aus:

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, '/switcher/', 'contrastsweb.com', '0');
		 }
if(isset($_SERVER['HTTP_REFERER'])){
header("Location: ". $_SERVER['HTTP_REFERER']);
exit;
}
else {
		 header("Location: http://localhost/index6.php");
		 exit;
}
?>

Dort habe vom original aus unter
header("Location: http://contrastsweb.com/switcher/example.php"); versucht mit der Änderung inheader("Location: http://localhost/index6.php");
was zu machen. Weiterhin steht in der swichter.php noch an einer Stelle setcookie("sitestyle", $style, time()+31536000, '/switcher/', 'contrastsweb.com', '0');dort stört mich die Angabe 'contrastsweb.com' .Ich kann das ganze leider mit meinen PHP Kentnisse noch nicht ganz nachvollziehen, aber ich vermute das dort nicht 'contrastsweb.com' stehen sollte. Nur weis ich auch nicht was passiert wenn ich es da weg nehme. :-)In der index6.php Datei vermute ich keine Fehler gemacht zu haben:
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" /> <p><a href="switcher.php?set=fkstu">Different stylesheet</a><br />
<a href="switcher.php?set=fkstyl">Normal stylesheet</a></p>
Das ganze sieht dort simpel aus. Ich weis auch nicht so recht was ihr von den swichter halten tutu, aber den hatte ich mir am ehesten noch zugetraut nachdem ich versuchthatte erst noch alle anderen Beispiele aus diesem Tread zu bauen.

Ich könnte also wieder mal Hilfe gebrauchen. :-)
 
Wirf einfach mal einen Blick in die Referenz der setcookie()-Funktion, dort gibt es Beschreibungen der einzelnen Funktionsparameter. So beschreibt beispielsweise der fünfte Parameter die Domain, die in deinem Fall auch der tatsächlichen Domain entsprechen sollte:
PHP:
<?php

	…
	setcookie('sitestyle', $style, time()+31536000, '/', $_SERVER['HTTP_HOST']);
	…

?>
 
Hallo,

ich muss mir echt mal ein wenig was über header und vor allem session bei php.net durchlesen, aber auf Anhieb konnt ich jetzt nicht viel verstehen zum Thema Cookie dort.

In der switcher.php Datei habe ich die Zeile geändert wie du es vorgeschlagen hast, aber es kommt dann zu einer Fehlermeldung wenn ich ein anderes Styl wähle:

PHP:
Notice: Undefined index: HTTP_HOST in C:\Programme\OmniSecure\htdocs\switcher.php on line 13

Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\OmniSecure\htdocs\switcher.php:13) in C:\Programme\OmniSecure\htdocs\switcher.php on line 13

Warning: Cannot modify header information - headers already sent by (output started at C:\Programme\OmniSecure\htdocs\switcher.php:13) in C:\Programme\OmniSecure\htdocs\switcher.php on line 17

Kann man das ganze etwas nur übers Internet testen oder müsste es auch über mein virtuellen OmniSecure Server gehen?

Wen ja, was können da noch an Fehler sein? Die Fehlermeldungen sagen mir zwar das irgendwie kein header deffienirt ist, aber ich kann das alles nicht richtig zuordnen ;-))

Dann noch eine Frage wegen der anderen Lösung di du früher mal angeredet hattest oder auch die von modo, die scheinen ohne Cookies zu laufen, würdest du nicht auch eher zu denen tendieren?
 
Nun, die Meldungen sagen nur, dass einerseits kein Element der $_SERVER-Variable mit dem Index HTTP_HOST existiert (was ich mir eigentlich nicht erklären kann), und dass kein zusätzlicher HTTP-Header zum Senden der Cookie-Informationen mehr gesendet werden kann, da bereits eine Ausgabe erfolgte (siehe „Ich bekomme die Meldung 'Warning: Cannot send session cookie - headers already sent...' oder 'Cannot add header information - headers already sent...'“).
Allgemein müssen HTTP-Header vor dem Senden des eigentlichen Inhalts gesendet werden.
 
Naja, das hört sich ja nicht gerade gu an.

Hast du den nicht eine vorübergehende Lösung für einen vernüftigen switcher der auch funktioniert?

Was hälst du von den Lösungsansätzen von reptiler und hans_schmid aus diesem tread.

Meinst du wir könnten gemeinsam so einen switcher hinbekommen ohne cookies?
 
Die Problematik ist, dass sich der Benutzer irgendwie identifizieren muss. Und dies geht nun mal am einfachsten und umständlichsten mit Cookies.
 
Aber bei reptiler seiner Lösung scheint es auch ohne Cookies zu funktionieren und auch wie er sagt auf eine einfache Art.

PHP:
Zitat:Zitat von hans_schmidNaja... ein Formular erstellen, dass via PHP_SELF auf sich selbst verweist und dann im Head des Scripts z.B.:

PHP-Code:if(!isset($_POST[styleauswahl])) {echo '<link rel="stylesheet" href="default.css" type="text/css">';} 
elseif($_POST[styleauswahl] == "style1"){echo '<link rel="stylesheet" href="style1.css" type="text/css">';} 
elseif($_POST[styleauswahl] == "style2"){echo '<link rel="stylesheet" href="style2.css" type="text/css">';} 


Ungefähr so würd ich das versuchen...

MfG
Hans
Das geht auch einfacher. ;)
Wenn Du, wie im Beispiel als Werte die Namen der CSS-Files angibst kannst Du mit folgendem Code arbeiten:
PHP-Code:if (!isset($_POST['styleauswahl'])) 
{ 
  echo '<link rel="stylesheet" href="default.css" type="text/css">'; 
} 
else 
{ 
  echo '<link rel="stylesheet" href="'.$_POST['styleauswahl'].'.css" type="text/css">'; 
} 

Der Vorteil ist, dass Du diesen Code unabhaengig von der Anzahl der angebotenen Styles nutzen kannst.
Du musst halt nur die Auswahl erweitern, aber brauchst nichts am PHP-Code zu aendern damit weitere Styles aktiviert werden koennen.

Auch modo seine Lösung scheint ohne Cookies zu funktionieren, aber leider kann ich beide nicht fehlerfrei einbauen irgendiwe:

PHP:
Hallo Feh,

also ich würde das ganze mit sessions lösen.
So hast du den vorteil dass das gewünschte Layout auf jeder nachfolgender eingesetzt wird.
Als erstes eine Session öffnen:

PHP-Code:<?php 
	session_start(); 
	 if(isset($_POST['stil'])){ 
		 $_SESSION['stil'] = $_POST['stil']; 
	 } 
	 elseif(!isset($_SESSION['stil'])){ 
		 $_SESSION['stil']= 'Standart'; 
	 } 
?> 

nun im header das über Radiobuttons gewählte style dynamisch anzeigen:

PHP-Code:<!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> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<link href="<?php echo $_SESSION['stil']?>.css" type="text/css" rel="stylesheet" /> 
<title>StyleSwitcher</title> 
</head> 


Das Formular sieht folgendermassen aus:

PHP-Code:<form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post"> 
  <input name="stil" type="radio" value="Standart" /> 
Standart Layout <br /> 
<input type="radio" name="stil" value="Bunte" /> 
Buntes Layout <br /> 
<input type="radio" name="stil" value="Druck" /> 
Druck Layout <p></p> 
<input type="submit" name="Submit" value="Auswählen" class="button" /> 
</form> 


Die werte der Radiobuttons und der Dateiname der CSS Datei sollten identisch sein

Der Komplette Code hier als zip

Hoffe du kannst das gebrauchen :) 

Gruss Modo
 
Reptilers Lösungsvorschlag funktioniert aber nur nachdem das Formular abgeschickt wurde. Und auch modos Lösungsvorschlag funktioniert nur so lange, bis die Sitzung abgelaufen ist – es sei denn, die Sitzungs-ID wird als Cookie gespeichert.
 
Also wenn ich die beiden Lösungen vergleiche, würde ich sagen, was mich am meisten daran stört, ist dort die Styles per Formular ausgewählt werden müssen und nicht per Hyperlink.

Ich würde es ja am liebsten per Link machen.

Wegen dem abspeichern nehme ich aber an das man auch Reptilers Lösung die nicht so aufwendig zu sein scheint, umbauen könnte auf Cookie abspeichern.

Oder ich würde fast sagen wenn eine der beiden Lösungen wenigsten Fehlerfrei laufen würde bei mir, wäre es mir egal ob das gewünschte Style bei jeder Sitzung neu gewählt werden müsste wegen dem Fehlenden Cookie, hauptsache mann könnte das ganze per Linkauswahl und ohne Formularübergabe realisieren. :-)
 
Zurück