conni: PHP in CSS-Datei

Hallo zusammen,
ich versuche mich gerade an einer Lösung für dynamische Styles - je nach Auswahl des Nutzers. Die zu erzeugenden Farbangaben habe ich in einer SQL-Datenbank abgelegt. Hielt ich für sinnvoll, denn es handelt sich um mehrere Farbschemata mit je 20 Farben.

Auf den PHP-Seiten wird eine Variable erzeugt/mitgegeben, die das jeweilige Farbschema ansprechen soll. Der Code sieht so aus:
<?php
$farbwahl = 'blau';
echo "<link rel='stylesheet' href='styles.php' type='text/css' />";
?>

Die Variable $farbwahl kommt aber in der styles.php so nicht an.
Wenn ich die Datei styles.php include (include ("styles.php");) wird die Variable zwar übergeben, aber ich will nicht, dass sie ganzen Styleangaben immer im Head stehen.

Kann mir da jemand helfen?

Gruß
Conni

  1. Hallo,

    <?php
    echo "<link rel='stylesheet' href='styles.php' type='text/css' />";
    ?>

    dieser Teil wird an den Browser ausgegeben, der dann seinerseits den Server bittet die style.php auszuliefern. Wenn Du Varablen in das styles-Script einbinden willst, mußt Du dies dementsprechend auch dem Browser:

    echo "<link rel='stylesheet' href='styles.php?frabwahl=".$farbwahl."' type='text/css' />";

    Gruß aus Berlin!
    eddi

    --
    Es scheint für jedes Problem eine Datenbank zu geben... zzz
  2. Hiho,

    wenn du willst das die Farbe in styles.php ankommt musst du sie auch schon übergeben. Also ein
    <link rel='stylesheet' href='styles.php?farbe=$farbwahl' type='text/css'>

    Alternativ kannst du dir auch überlegen ob du den Kram nicht direkt in styles.php aus der Datenbank ausliest.

    Marc

  3. Hallo nochmal,
    habe eure beiden Codes ausprobiert - auch in Variationen.
    In der styles.php kommt einfach nichts an.

    Vielleicht liegt es auch daran, dass ich XHTML strict verwende?:
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

    Ich weiß nicht mehr weiter...

    Gruß
    Conni

    1. Hallo Conni,

      vielleicht liegt es auch nur daran, daß Du in dem Script styles.php nicht auf die Variable $_GET['farbwahl'] zurückgreifst...
      Wenn Dir dies nicht hilft, solltest Du Quellcode posten!

      Gruß aus Berlin!
      eddi

      1. Hallo eddi,
        poste gerne auch mehr Quellcode:
        test.php:
        <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
         "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
        <html>
        <head>
        <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8" />
         <title>Unbenannt</title>
        <?php
        $farbwahl = 'blau';
        echo "<link rel='stylesheet' href='styles.php?farbwahl=".$farbwahl."' type='text/css' />";
        ?>

        </head>

        <body>
        <!-- inhalt -->
        <p>Text Text Text Text Text Text
        ...

        styles.php:
        <?php
        echo "Frabwahl".$farbwahl."<br>";
        ...Datenbankverbindung...
        $farbe = mysql_query("SELECT * FROM styles WHERE name = '$farbwahl'")
         or die (mysql_error());
         if(!$farbe) die("Die Datenbank konnte nicht abgefragt werden<br>".mysql_error());

        while($row = mysql_fetch_array($farbe)) {
        if ($farbwahl == $row['name'])
        echo "body {color:". $row['A2'] .";";
        echo "background-color : ". $row['A1'] ."}";
         }
        ?>

        Wo in der styles.php sollte ich $_GET['farbwahl'] einbauen?
        Ich bin leider ein PHP-Anfänger.

        Gruß
        Conni

        1. Re:

          Wo in der styles.php sollte ich $_GET['farbwahl'] einbauen?
          Ich bin leider ein PHP-Anfänger.

          überall da, wo bei Dir jetzt $farbwahl seht.

          Gruß aus Berlin!
          eddi

          1. Hallo eddi,
            langsam zweifel ich an mir. Habe jetzt in der styles.php:
            echo "Farbwahl".$_GET['farbwahl'];
            eingebaut, aber es wird trotzdem nichts geechot. ???

            Ansonsten habe ich den Code unverändert belassen.
            Kann mir das nicht erklären.

            Gruß
            conni

            1. Re:

              wie hast Du denn jetzt bei Deinem Test styles.php aufgerufen?

              Gruß aus Berlin!
              eddi

              1. Hallo eddi

                wie hast Du denn jetzt bei Deinem Test styles.php aufgerufen?

                test.php:
                $farbwahl = 'blau';
                echo "<link rel='stylesheet' href='styles.php?farbwahl=".$farbwahl."' type='text/css' />";
                ?>

                Ich kann da keinen Fehler sehen.

                Gruß und danke (hatte bisher ganz vergessen)
                conni

            2. Hallo,

              Das steht in Deiner test.php:
              ...
              <?php
              $farbwahl = 'blau';
              echo "<link rel='stylesheet' href='styles.php?farbwahl=".$farbwahl."' type='text/css' />";
              ?>

              langsam zweifel ich an mir. Habe jetzt in der styles.php:
              echo "Farbwahl".$_GET['farbwahl'];
              eingebaut, aber es wird trotzdem nichts geechot. ???

              Wo erwartest Du die Ausgabe des echos? Die styles.php wird vom Browser über href eines LINK-Elements angefordert und sollte vom Server mit Content-Type: text/css ausgeliefert werden. Was willst Du da von dem echo sehen und wo?

              Im Gegenteil, in der CSS-Ressource steht durch das echo:
              ...
              Farbwahlblau
              ...
              Das ist aber keine gültige CSS-Syntax.

              viele Grüße

              Axel

              1. Hallo Axel,

                Wo erwartest Du die Ausgabe des echos? Die styles.php wird vom Browser über href eines LINK-Elements angefordert und sollte vom Server mit Content-Type: text/css ausgeliefert werden. Was willst Du da von dem echo sehen und wo?

                Das echo habe nur zur Kontrolle in die css.Datei eingebaut, um zu sehen, ob überhaupt etwas ankommt. Das kann ich mir dann anschauen, wenn ich die styles.php direkt aufrufe.

                Die Variable soll dann natürlich für die Generierung von Styles verwendet werden:

                <?php
                echo "Farbwahl".$_GET['farbwahl'];
                $db = @MYSQL_CONNECT...
                $farbe = mysql_query("SELECT * FROM styles WHERE name = '$farbwahl'")
                 or die (mysql_error());
                 if(!$farbe) die("Die Datenbank konnte nicht abgefragt werden<br>".mysql_error());

                while($row = mysql_fetch_array($farbe)) {
                if ($farbwahl == $row['name'])
                echo "body {color:". $row['A2'] .";";
                echo "background-color : ". $row['A1'] ."}";
                 }
                ?>

                Das ist aber keine gültige CSS-Syntax.

                Da würden dann richtige Styleangaben rauskommen (wenn $farbwahl bekannt wäre). Habs ausprobiert, indem ich statt $farbwahl gleich 'blau' eingetragen habe. Dann klappt es jedenfalls.

                Viele Grüße
                Conni

                1. Hallo,

                  Das kann ich mir dann anschauen, wenn ich die styles.php direkt aufrufe.

                  Wie machst Du das?

                  Die Variable soll dann natürlich für die Generierung von Styles verwendet werden:

                  <?php
                  echo "Farbwahl".$_GET['farbwahl'];
                  $db = @MYSQL_CONNECT...
                  $farbe = mysql_query("SELECT * FROM styles WHERE name = '$farbwahl'")

                  Hier ist $farbwahl immer noch nicht definiert.

                  viele Grüße

                  Axel

                  1. Hallo,

                    Das kann ich mir dann anschauen, wenn ich die styles.php direkt aufrufe.
                    Wie machst Du das?

                    Indem ich die Datei direkt mit Namen als Adresse im Browser eintrage (www....). Dort wird dann auch geechot: Farbwahl

                    • weiter nichts.

                    Hier ist $farbwahl immer noch nicht definiert.

                    In der Datenbankauswertung habe ich es natürlich auch mit probiert mit:
                    echo "Farbwahl".$_GET['farbwahl'];
                    $auswahl = $_GET['farbwahl'];
                    ...
                    $farbe = mysql_query("SELECT * FROM styles WHERE name = '$auswahl'")
                     or die (mysql_error());
                     if(!$farbe) die("Die Datenbank konnte nicht abgefragt werden<br>".mysql_error());

                    while($row = mysql_fetch_array($farbe)) {
                    if ( $row['name'] == '$auswahl')
                    echo "body {color:". $row['A2'] .";";
                    echo "background-color : ". $row['A1'] ."}";
                     }
                    Aber leider ohne Ergebnis :-(

                    Viele Grüße
                    Conni

                    1. Gute Nacht Conni,

                      ist Dir schon mal der glorreiche Gedanke gekommen, daß Alex und ich es darum geht, ob Du im Browser nun http://www.deine.domain/styles.php oder http://www.deine.domain/styles.php?farbwahl=HILFE eingetippt hast?

                      Gruß aus Berlin!
                      eddi

                      1. Auch gute Nacht,

                        ist Dir schon mal der glorreiche Gedanke gekommen, daß Alex und ich es darum geht, ob Du im Browser nun http://www.deine.domain/styles.php oder http://www.deine.domain/styles.php?farbwahl=HILFE eingetippt hast?

                        Leider konnte ich das aus der Frage nicht herauslesen.
                        Meine glorreiche Idee war das erste Beispiel: "www.meine domain.de/styles.php". Wenn ich "http://www.meine.domain/styles.php?farbwahl=blau" eingebe, wird blau als Variable auch übergeben.

                        Gruß
                        conni