Ankündigung

Einklappen
Keine Ankündigung bisher.

einfacher PHP Styleswitcher - ich bin zu doof

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • einfacher PHP Styleswitcher - ich bin zu doof

    Hallo!

    Ich habe WAMP auf meiner Kiste. Die info PHP Startseite zeigt, dass PHP drauf ist und funzt. Bisher habe ich auch 1-2 ganz simple Skripte getestet.

    Und nun wollte ich in meine Webpages einen Styleswitcher integrieren, der aus ganz simplem Quellcode besteht. Doch ich bin anscheinend zu doof. Ich habe ein Skript, von folgender Quelle für mich angepasst:

    http://alistapart.com/articles/phpswitch/

    Und hier ist der Quellcode meiner Seite:

    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" />
    <title>localhost</title>
    
    <link rel="stylesheet" type="text/css" media="screen" title="standard" href="<?php echo(!$sitestyle)?'standard':$sitestyle ?>.css" />
    
    <link rel="alternate stylesheet" type="text/css" media="screen" title="red" href="href="http://localhost/red.css" />
    <link rel="alternate stylesheet" type="text/css" media="screen" title="blue" href="http://localhost/blue.css" />
    </head>
    
    <body>
    
    <p class="textColor">A piece of text</p>
    
    ROT
    BLAU
    STANDARD
    
    <form action="switcher.php" method="post">
    <select name="set">
    <option value="standard" selected>Standard</option>
    <option value="red">Blau</option>
    <option value="blue">Rot</option>
    </select>
    <input type="submit" value="change color">
    </form>
    </body>
    </html>

    Die CSS-Dateien dazu sind ganz simpel:

    Datei "red.css":

    Code:
    .textColor {
    	color: #0033CC;
    }


    Datei "blue.css":

    Code:
    .textColor {
    	color: #CC0000;
    }

    Und hier der Quellcode der Datei "switcher.php":

    Code:
    <?php
    setcookie ('sitestyle', $set, time()+31536000, '/', 'http://localhost/', '0'); header("Location: $HTTP_REFERER");
    ?>
    Wenn ich nun die Seite aufrufe, mit der ich das CSS-Style ändern möchte, dann passiert einfach nix. In IE ruft er sich nochmal selbst auf, aber verändert gar nix. In Opera und Mozilla zeigt es oben die Adresse, wo ich hin möchte, bleibt dann aber stehen, zeigt nur weiß an.

    Wo liegt mein Fehler??? Ich habe bestimmt etwas übersehen, oder?

    Danke für eure Hilfe! Ich werde nämlich zum Eichhörnchen vor lauter Fehlersuche![/code]


  • #2
    Im IE nachdem Du die Seite aufgerufen hast Ansicht->Quelltext
    Was wird da nach <link rel="stylesheet" type="text/css" ausgegeben?

    Kommentar


    • #3
      Nach Ausführung steht im Source Code immer nur:

      Code:
      <link rel="stylesheet" type="text/css" media="screen" title="standard" href="standard.css" />
      Und zwar unabhängig davon, welchen Style ich ausgewählt habe.

      Kommentar


      • #4
        Also gilt wohl immer !$sitestyle.
        Wo soll $sitestyle Deiner Meinung nach herkommen?

        Kommentar


        • #5
          Jemand hat mir im Forum "phpforum.de" den Hinweis gegeben, dass es etwas damit zu tun hat:

          http://de.php.net/manual/de/security.globals.php

          Es ist mir einigermaßen klar, was da steht. Nur weiß ich nicht, wie ich das umschalten kann. Irgendwie ist das alles Chinesisch für mich.

          Kommentar


          • #6
            Wo soll $sitestyle Deiner Meinung nach herkommen?

            Kommentar


            • #7
              Laut Quelle (http://alistapart.com/articles/phpswitch/) mit:

              Code:
              <?php echo (!$sitestyle)?'defaultstyle':$sitestyle ?>
              Angeblich liest man damit das Cookie aus. Aber das ist doch Blödsinn, oder?!

              Kommentar


              • #8
                Aha, also Cookies.
                Mit register_globals=On geht das.
                Ansonsten $_COOKIE['sitestyle']

                Übrigens frage ich mich, wie da das href="standard.css" zustande kommt, wo doch im Code 'defaultstyle' als Voreinstellung steht.

                Kommentar


                • #9
                  bei mir heißt die datei eben standard.css - entsprechend hab ich das auch in meinem skript umgetauft. jetzt sieht mein code so aus, funzt aber immer noch nicht:


                  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" />
                  <title>localhost</title>
                  
                  <link rel="stylesheet" type="text/css" media="screen" title="User definded Style" href="<?php echo(!$_COOKIE['sitestyle'])?'standard':$_COOKIE['sitestyle'] ?>.css" />
                  
                  
                  <link rel="alternate stylesheet" type="text/css" media="screen" title="red" href="href="http://localhost/red.css" />
                  
                  <link rel="alternate stylesheet" type="text/css" media="screen" title="blue" href="http://localhost/blue.css" />
                  
                  </head>
                  
                  <body>
                  
                  
                  
                  <span class="textColor">Ein wenig Text</span></p>
                  
                  ROT
                  BLAU
                  STANDARD
                  
                  <form action="switcher.php" method="post">
                  <select name="set">
                  <option value="standard" selected>Standard</option>
                  <option value="red">Blau</option>
                  <option value="blue">Rot</option>
                  </select>
                  <input type="submit" value="change color">
                  </form>
                  
                  
                  </body>
                  </html>

                  Kommentar


                  • #10
                    Und was passiert damit?
                    PHP-Code:
                    <?php
                    error_reporting
                    (E_ALL);
                    ini_set('display_errors'true);
                    $stylesheet = isset($_COOKIE['sitestyle']) ? basename($_COOKIE['sitestyle']) : 'standard';
                    ?>
                    <!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" />
                            <title>localhost</title>
                            <link rel="stylesheet" type="text/css" media="screen" title="User definded Style" href="<?php echo $stylesheet?>.css" />
                            <link rel="alternate stylesheet" type="text/css" media="screen" title="red" href="href="http://localhost/red.css" />
                            <link rel="alternate stylesheet" type="text/css" media="screen" title="blue" href="http://localhost/blue.css" />
                        </head>
                        <body>
                            


                                <span class="textColor">Stylesheet: <?php echo $stylesheet?></span>
                            </p>
                            [url="switcher.php?set=red"]ROT[/url]
                            [url="switcher.php?set=blue"]BLAU[/url]
                            [url="switcher.php?set=standard"]STANDARD[/url]
                            <form action="switcher.php" method="post">
                                


                                    <select name="set">
                                        <option value="standard" selected>Standard</option>
                                        <option value="red">Blau</option>
                                        <option value="blue">Rot</option>
                                    </select>
                                    <input type="submit" value="change color">
                                </p>
                            </form>
                            <pre><?php print_r($_COOKIE); ?></pre>
                        </body>
                    </html>

                    Kommentar


                    • #11
                      Ich bekomme die gleiche Seite und unten zusätzlich die Ausgabe:

                      Code:
                      Array
                      {
                      }
                      Inzwischen bin ich nach viel Herumsucherei auf ein Beispiel gestoßen, das funktioniert. Ich hab' es mal angepasst und alles klappt. Es gibt nur ein Problem: Diese Lösung ist nicht wünschenswert, weil ich das ausführende PHP-Skript gern in einer externen PHP-Datei hätte. Andernfalls muss ich das in jede einzelne Seite einfügen. Und wenn sich was ändert, ist nicht so toll.

                      Hier mal der Code von dem funktionierenden Beispiel, bei dem alles in einer einzigen PHP-Seite untergebracht ist:

                      PHP:
                      Code:
                      <?php
                      
                      header('Cache-Control: max-age=0, no-cache');
                      
                      if(isset($_GET['chosenStyle']))
                      {
                          setcookie("styleCookieVar", $_GET['chosenStyle'], time()+31536000, "/", 'http://localhost', '0');
                          $style = $_GET['chosenStyle'];
                      }
                      else
                      {
                         if(isset($_COOKIE['styleCookieVar']))
                         {
                             $style = $_COOKIE['styleCookieVar'];
                         }
                         else
                         {
                              $style = 'default';
                         }
                      }
                      
                      
                      // echo $_SERVER['PHP_SELF'];
                      
                      ?>
                      
                      
                      
                      
                      <!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" />
                      <title>localhost</title>
                      
                      <link rel="stylesheet" type="text/css" media="screen" title="user definded style" href="<?php echo $style?>.css" />
                      
                      
                      </head>
                      
                      <body>
                      
                      Blaues Design
                      
                      Rotes Design
                      
                      Default Design
                      
                      
                      
                      <span class="textColor">Ein wenig Text</span></p>
                      
                      
                      </form>
                      
                      
                      </body>
                      </html>

                      Kommentar


                      • #12
                        Mhh! Also ich hab' es jetzt einfach so gemacht, dass ich den PHP-Code aus dem Header per "include"-Befehl eingebunden hab, d.h. dass ich den Code in eine externe Datei ausgelagert habe. Das Ganze sieht jetzt so aus:

                        Datei "switcher.php":

                        Code:
                        <?php
                        
                        header('Cache-Control: max-age=0, no-cache');
                        
                        if(isset($_GET['chosenStyle']))
                        {
                            setcookie("styleCookieVar", $_GET['chosenStyle'], time()+31536000, "/", 'http://localhost', '0');
                            $style = $_GET['chosenStyle'];
                        }
                        else
                        {
                           if(isset($_COOKIE['styleCookieVar']))
                           {
                               $style = $_COOKIE['styleCookieVar'];
                           }
                           else
                           {
                                $style = 'default';
                           }
                        }
                        
                        
                        // echo $_SERVER['PHP_SELF'];
                        
                        ?>
                        Datei "styleswitchtest.php":
                        Code:
                        <?php include('switcher.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>
                        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
                        <title>localhost</title>
                        
                        <link rel="stylesheet" type="text/css" media="screen" title="user definded style" href="<?php echo $style?>.css" />
                        
                        
                        </head>
                        
                        <body>
                        
                        Blaues Design
                        
                        Rotes Design
                        
                        Default Design
                        
                        
                        
                        <span class="textColor">Ein wenig Text</span></p>
                        
                        
                        </form>
                        
                        
                        </body>
                        </html>
                        und natürlich die CSS-Dateien (siehe oben).

                        Ob das eine elegante Lösung ist? Kann es eventuell Schwierigkeiten geben wegen dem "register_global" Dingsbums?

                        Kommentar


                        • #13
                          Mist

                          So ein Mist! Es funzt zwar - aber nur eigentlich... Denn wenn ich die Seite wechsle, behält der den Style nicht.

                          EDIT:
                          Cookies werden gesetzt - alles nachgeprüft. Sollte doch dann eigentlich auch auslesen können?! Ach ja: Wenn man die php-Datei in eine html-Datei umbenennt, dann motzt er mit einer 403 Fehlermeldung "You don't have permission to access /cookies/< on this server." Seltsam das Ganze.

                          Kommentar

                          Lädt...
                          X