Impressum · Kontakt · Hilfe
Besucher online · Mitglieder



Portal > Foren > PHP > PHP-Programmierung > Problem mit Cookie und Reloads...
Antwort
 
Themen-Optionen
Alt 11.04.2006, 17:56   Nach oben    #1
n00b -.-
 
Benutzerbild von Bookworm
 
Registriert seit: 10.11.2005
Beiträge: 318
Standard 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!
Bookworm ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 11.04.2006, 22:34   Nach oben    #2
Jay
Gast
 
Beiträge: n/a
Standard

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).
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 14:24   Nach oben    #3
n00b -.-
 
Benutzerbild von Bookworm
 
Registriert seit: 10.11.2005
Beiträge: 318
Standard

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!
Bookworm ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 16:13   Nach oben    #4
Jay
Gast
 
Beiträge: n/a
Standard

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}\" />";
?>
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 18:26   Nach oben    #5
n00b -.-
 
Benutzerbild von Bookworm
 
Registriert seit: 10.11.2005
Beiträge: 318
Standard

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!
Bookworm ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 19:16   Nach oben    #6
Jay
Gast
 
Beiträge: n/a
Standard

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
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 19:34   Nach oben    #7
n00b -.-
 
Benutzerbild von Bookworm
 
Registriert seit: 10.11.2005
Beiträge: 318
Standard

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!
Bookworm ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 19:38   Nach oben    #8
Jay
Gast
 
Beiträge: n/a
Standard

Zitat:
<html>
<head>
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>
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 12.04.2006, 19:52   Nach oben    #9
n00b -.-
 
Benutzerbild von Bookworm
 
Registriert seit: 10.11.2005
Beiträge: 318
Standard

*den kopf auf den tisch hau*
ok!
__________________
Alle wollen doch nur mein Bestes. Aber sie werden es nicht kriegen!
Bookworm ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.04.2006, 07:37   Nach oben    #10
Projektleiter
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.225
Standard

böse:
Zitat:
Zitat von Bookworm
switch($HTTP_COOKIE_VARS["style"])
Warum nicht $_COOKIE
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 13.04.2006, 12:09   Nach oben    #11
n00b -.-
 
Benutzerbild von Bookworm
 
Registriert seit: 10.11.2005
Beiträge: 318
Standard

kA^^
Habe eh den Quelltext von Fat Tony übernommen...
__________________
Alle wollen doch nur mein Bestes. Aber sie werden es nicht kriegen!
Bookworm ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist Aus.
Trackbacks are An
Pingbacks are An
Refbacks are Aus

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Problem E-Mails zu senden Jann Hendrik Plauderecke 7 25.05.2007 21:37
Logisches Problem beim einsatz von Ereignissen Prophet Allgemeine Java-Programmierung 19 05.06.2006 22:08
Auch ein problem mit Cookie Jan PHP-Programmierung 20 25.02.2006 02:31
PRoblem mit Cookie bei PHPbb-Board Julied64 PHP-Programmierung 2 12.12.2005 15:41
OSX + Eclipse 3.1 Problem bacarni Eclipse 3 29.07.2005 21:19


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:49 Uhr.

Nach oben
Wir nutzen das Zend Framework, vBulletin (vBulletin v3.7.3, Copyright ©2000-2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0) und vBSEO.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44