 |
11.04.2006, 17:56
| Nach oben
#1 | | n00b -.-
Registriert seit: 10.11.2005
Beiträge: 318
| Problem mit Cookie und Reloads...
Moin
sorry, dass ich hier schon wieder mit einem neuen Thread stören muss. Aber ich habe wiedereinmal ein Problem, von dem ich nichtmal wirklich weiß wo es liegt (ich mutmaße noch!) und es von demher leider auch nicht lösen kann. Ich habe für meine Seite einen (wohl etwas primitiven) Laxoutchanger gebastelt. Der setzt z.T. auf Javascript und auf (browser)Cookies, damit das Design beim reload bzw. dem wechseln des inhalts der Seite erhalten bleibt.
und das funktioniert eben so, dass ich den namen der stylesdatei, die der user ausgewählt hat, in einem cookie speichere und dann später so immer die richtige datei laden kann. jetzt gibt es aber ein problem: wenn ich jetzt das layout wechseln muss, muss ich erst das layout wählen (reload erfolg danach) und dann nochmal neu laden, weil der browser anscheinend noch nicht den neuen wert des cookies verarbeitet.
ach, guckst euch selber an, ich denke das problem bemerkt jeder beim wechseln des layouts http://www.the-bookworm.de/test/site/index.php.
und hier der quelltext (ich weiß das das extrem umstäbdlich ist, so von wegen definition des cookies, aber mir ist nix schlaueres eingefallen PHP-Code: <?php
$layout = $_GET['layout'];
switch ($layout) { case 'normal': setcookie("style","normal"); break; case 'bookworm': setcookie("style","bookworm"); break; }
?>
<html> <head> <title>The-Bookworm.de</title> <link rel="stylesheet" type="text/css" <? switch($HTTP_COOKIE_VARS["style"]) {
case 'normal': ?> href="styles.css"> <? break;
case 'bookworm': ?> href="bookworm.css"> <? break;
default: ?> href="styles.css"> <? break; } ?> </head>
<body>
<div id="wrap">
<div id="head"> </div>
<div id="left"> <a href="?page=test">Test</a> </div>
<div id="content"> <? switch($_GET['page']) { case 'test': include("test.php"); $save = "test"; break; } ?> </div> <div id="right"> <b>Layout:</b> <script language="JavaScript"> <!-- Verstecken für ältere Browser-- function surfto(form) { var myindex=form.select1.selectedIndex if (form.select1.options[myindex].value != "0") { location=form.select1.options[myindex].value;} } // Ende Verstecken --> </SCRIPT> <FORM NAME="form1"> <SELECT NAME="select1" onChange="surfto(this.form)" SIZE=1> <OPTION SELECTED VALUE="0"> Layout wählen <? if(array_key_exists('page', $_GET) && !empty($_GET['page'])) { ?> <OPTION VALUE="index.php?page=<? echo "$save" ?>&layout=normal">Normal <OPTION VALUE="index.php?page=<? echo "$save" ?>&layout=bookworm">Bookworm <? } else { ?> <OPTION VALUE="?layout=normal">Normal <OPTION VALUE="?layout=bookworm">Bookworm <? } ?> </SELECT> </FORM> </div>
</div> </body> </html> thx und bye
booki
__________________ Alle wollen doch nur mein Bestes. Aber sie werden es nicht kriegen! |
| |
11.04.2006, 22:34
| Nach oben
#2 | | Gast |
Ja is klar.
Cookies werden über den HTTP Header gesetzt und auch über den HTTP Header an den Server gesendet d.h. bei der 1. Auswahl des Styles wird der Cookie gesetzt und bei der 2. wird er dann ausgelesen.
Lösung 1:
Erledige gleich alles mit JavaScript. Da du sowieso beim wechseln des Styles auf JavaScript setzt, kannst du gleich alles mit JavaScript machen. Da hast du das Problem mit dem auch HTTP Header nicht.
Lösung 2: PHP-Code: <?php
echo '<link rel="stylesheet" type="text/css" href="';
if (isset ($_COOKIE['style'])) { switch ($_COOKIE['style']) {
case 'bookworm': echo 'bookworm.css'; break; default: echo 'normal.css'; break; } } else if (!isset ($_COOKIE['style']) && isset ($_GET['layout'])) { switch ($_GET['layout']) { case 'normal': setcookie ('style', 'normal'); echo 'normal.css'; break; case 'bookworm': setcookie ('style','bookworm'); echo 'bookworm.css'; break; } } else { echo 'normal.css'; }
echo '">'; ?>
Geändert von Jay (11.04.2006 um 22:46 Uhr).
| |
| |
12.04.2006, 14:24
| Nach oben
#3 | | n00b -.-
Registriert seit: 10.11.2005
Beiträge: 318
|
Hm, komisch aber deine Lösung zwei Funktioniert nicht. Mein "Bookworm-Style" wird nicht gesetzt, er lädt dann immer ne site ohne jegliche formatierungen -.-
__________________ Alle wollen doch nur mein Bestes. Aber sie werden es nicht kriegen! |
| |
12.04.2006, 16:13
| Nach oben
#4 | | Gast |
Ja kann gar net funktioniern. sorry. hatte nen Denkfehler oder so kA.
So müsste das eigentlich funktionieren: (nicht getestet) PHP-Code: <?php $styleSheet = 'normal.css'; if (isset ($_COOKIE['style']) && !isset ($_GET['layout'])) { switch ($_COOKIE['style']) {
case 'bookworm': $styleSheet = 'bookworm.css'; break; default: $styleSheet = 'normal.css'; break; } } else if (isset ($_GET['layout'])) { switch ($_GET['layout']) { case 'normal': setcookie ('style', 'normal'); $styleSheet = 'normal.css'; break; case 'bookworm': setcookie ('style','bookworm'); $styleSheet = 'bookworm.css'; break; } } echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"{$styleSheet}\" />"; ?> | |
| |
12.04.2006, 18:26
| Nach oben
#5 | | n00b -.-
Registriert seit: 10.11.2005
Beiträge: 318
|
Hi
jo, hat immer noch Fehler.... Wenn ich das Bookworm-Style auswähle, kommt er mir mit "cannot modify header information - header has already been sent" ganz oben, und wenn ich das bookworm style drinnen habe und dann den inhalt wechsel, landen wir wieder beim normalen style.... und so ist das ziemlich doof....
ne idee wie das zu beheben ist?
__________________ Alle wollen doch nur mein Bestes. Aber sie werden es nicht kriegen! |
| |
12.04.2006, 19:16
| Nach oben
#6 | | Gast | Zitat: |
jo, hat immer noch Fehler....
| Ne hat es nicht. Du hast es nur falsch verwendet.
Weil wie oben schon gesagt werden Cookies über den HTTP Header gesetzt d.h. es darf keine Ausgabe vor setcookie erfolgen.
MfG Fat Tony
| |
| |
12.04.2006, 19:34
| Nach oben
#7 | | n00b -.-
Registriert seit: 10.11.2005
Beiträge: 318
|
Und wo ist hier die Ausgabe? PHP-Code:
<html> <head> <?php $styleSheet = 'styles.css'; if (isset ($_COOKIE['style']) && !isset ($_GET['layout'])) { switch ($_COOKIE['style']) {
case 'bookworm': $styleSheet = 'bookworm.css'; break; default: $styleSheet = 'styles.css'; break; } } else if (isset ($_GET['layout'])) { switch ($_GET['layout']) { case 'styles': setcookie ('style', 'styles'); $styleSheet = 'styles.css'; break; case 'bookworm': setcookie ('style','bookworm'); $styleSheet = 'bookworm.css'; break; } } echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"{$styleSheet}\" />"; ?> <title>The-Bookworm.de</title> </head>
<body>
<div id="wrap">
<div id="head"> </div>
<div id="left"> <a href="?page=test">Test</a> </div>
<div id="content"> <? switch($_GET['page']) { case 'test': include("test.php"); $save = "test"; break; } ?> </div> <div id="right"> <b>Layout:</b> <script language="JavaScript"> <!-- Verstecken für ältere Browser-- function surfto(form) { var myindex=form.select1.selectedIndex if (form.select1.options[myindex].value != "0") { location=form.select1.options[myindex].value;} } // Ende Verstecken --> </SCRIPT> <FORM NAME="form1"> <SELECT NAME="select1" onChange="surfto(this.form)" SIZE=1> <OPTION SELECTED VALUE="0"> Layout wählen <? if(array_key_exists('page', $_GET) && !empty($_GET['page'])) { ?> <OPTION VALUE="index.php?page=<? echo "$save" ?>&layout=styles">styles <OPTION VALUE="index.php?page=<? echo "$save" ?>&layout=bookworm">Bookworm <? } else { ?> <OPTION VALUE="?layout=styles">styles <OPTION VALUE="?layout=bookworm">Bookworm <? } ?> </SELECT> </FORM> </div>
</div> </body> </html> Die html, head und php tags müssen ja rein, und die variablendefinition erzeugt auch keien ausgabe
__________________ Alle wollen doch nur mein Bestes. Aber sie werden es nicht kriegen! |
| |
12.04.2006, 19:38
| Nach oben
#8 | | Gast | Das ist die Ausgabe.
So wäre es korrekt: PHP-Code: <?php
$styleSheet = 'styles.css';
if (isset ($_COOKIE['style']) && !isset ($_GET['layout'])) {
switch ($_COOKIE['style']) {
case 'bookworm':
$styleSheet = 'bookworm.css';
break;
default:
$styleSheet = 'styles.css';
break;
}
}
else if (isset ($_GET['layout'])) {
switch ($_GET['layout'])
{
case 'styles':
setcookie ('style', 'styles');
$styleSheet = 'styles.css';
break;
case 'bookworm':
setcookie ('style','bookworm');
$styleSheet = 'bookworm.css';
break;
}
}
?>
<html>
<head>
<?php
echo "<link rel=\"stylesheet\" type=\"text/css\" href=\"{$styleSheet}\" />";
?>
<title>The-Bookworm.de</title>
</head>
<body>
<div id="wrap">
<div id="head">
</div>
<div id="left">
<a href="?page=test">Test</a>
</div>
<div id="content">
<?
switch($_GET['page']) {
case 'test':
include("test.php");
$save = "test";
break;
}
?>
</div>
<div id="right">
<b>Layout:</b>
<script language="JavaScript">
<!-- Verstecken für ältere Browser--
function surfto(form) {
var myindex=form.select1.selectedIndex
if (form.select1.options[myindex].value != "0") {
location=form.select1.options[myindex].value;}
}
// Ende Verstecken -->
</SCRIPT>
<FORM NAME="form1">
<SELECT NAME="select1" onChange="surfto(this.form)" SIZE=1>
<OPTION SELECTED VALUE="0"> Layout wählen
<?
if(array_key_exists('page', $_GET) && !empty($_GET['page'])) {
?>
<OPTION VALUE="index.php?page=<? echo "$save" ?>&layout=styles">styles
<OPTION VALUE="index.php?page=<? echo "$save" ?>&layout=bookworm">Bookworm
<?
}
else {
?>
<OPTION VALUE="?layout=styles">styles
<OPTION VALUE="?layout=bookworm">Bookworm
<?
}
?>
</SELECT>
</FORM>
</div>
</div>
</body>
</html> | |
| |
12.04.2006, 19:52
| Nach oben
#9 | | n00b -.-
Registriert seit: 10.11.2005
Beiträge: 318
|
*den kopf auf den tisch hau*
ok!
__________________ Alle wollen doch nur mein Bestes. Aber sie werden es nicht kriegen! |
| |
13.04.2006, 07:37
| Nach oben
#10 | | Jann Hendrik Bekaan
Registriert seit: 02.12.2004 Ort: Wildeshausen
Beiträge: 2.212
|
böse: Zitat: |
Zitat von Bookworm switch($HTTP_COOKIE_VARS["style"]) | Warum nicht $_COOKIE |
| |
13.04.2006, 12:09
| Nach oben
#11 | | n00b -.-
Registriert seit: 10.11.2005
Beiträge: 318
|
kA^^
Habe eh den Quelltext von Fat Tony übernommen...
__________________ Alle wollen doch nur mein Bestes. Aber sie werden es nicht kriegen! |
| | |
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1) | | |
Forumregeln
| Es ist dir nicht erlaubt, neue Themen zu verfassen. Es ist dir nicht erlaubt, auf Beiträge zu antworten. Es ist dir nicht erlaubt, Anhänge hochzuladen. Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten. HTML-Code ist aus. | | | Alle Zeitangaben in WEZ +2. Es ist jetzt 09:14 Uhr.
|