Günther: /HTML: reload nach Submit eines Formulars (aber ohne JS!)

Beitrag lesen

Am Besten wäre es du setzt den Link zu dieser Seite mal hierher, damit wir uns die Seite anschauen könne.

tut mir leid aber ich teste das im moment nur offline, d.h. das wird nicht möglich sein :(
Unten im Post ist aber der code von der skin-auswahl.

Wie überträgst du die Variablen? Mit GET oder POST?

mit post.

Da würde ich GET empfehlen.
Wenn der Browser die Seite nur neu laden soll kannst du einfach immer eine Zufallsvariable an die Seite anhängen (z.B. rnd=127462), die dafür sorgt dass die Seite neu geladen wird.

wozu, dasselbe könnte man doch z.b. auch mit post machen, oder irre ich mich da?

also, ich werde das jetzt noch etwas detailierter beschreiben:
Der Benutzer wählt also in der Drop-Down-box einen Skin aus.
Daraufhin wird erstmal in $GLOBALS eine variable gesetzt die dazu dient um zu sehen ob der button geklickt wurde und eine zweite variable die den skin speichert.
in der datei index.php (dort ist die skin-auswahl via include() eingabut) wird dann gleich am anfang, je nach status dieser beiden variablen ein cookie gesetzt.
Fall 1) skin ausgewählt + ausgewählter skin existiert in DB
-> skin in cookie speichern, die beiden oben genannten variablen gleich 0 setzen (damit diese schleife nicht jedesmal bei einem reload durchlaufen wird). zusätzlich wird der skin in der variable $skin gespeichert.
Fall 2) kein skin ausgewählt oder skin existiert nicht
-> defaultskin aus DB auslesen und in variable $skin speichern.

Sobald jemand in der skin-auswahl einen skin auswählt, wird die seite neu geladen und sofort wird der neue skin richtig in $skin gespeichert.

die variable $skin wird dann so weiterverwertet:
$skin ist ja nur die SkinID, dadurch wird dann aus der DB das zugehörige verzeichnis ausgelesen.
dann wird durch
define('SKIN_DIR', './templates/skins/' . $skindir);
das skinverzeichnis gesetzt und alle templates sollten dann aus SKIN_DIR angeigt werden.
das dateisystem sieht also so aus:

/templates/skins/skin1:
template1.tpl
template2.tpl
template3.tpl

/templates/skins/skin2:
template1.tpl
template2.tpl
template3.tpl

und genau da liegt das problem. dieses verzeichnis scheint erst nach einem reload der seite aktualisiert zu werden. (obwohl das verzeichnis ja VOR dem ersten echo() befehl definiert wird usw.)
kann man das irgendwie vereinfachen?

Gruß,
Günther.

Hier die skinauswahl.php:

<?php
 if(isset($_POST['Submit']) AND $_POST['Submit'] == "Change skin")
 {
  if(isset($_POST['SkinSelect']) AND $_POST['SkinSelect'] == true)
  {
   $GLOBALS['SkinSelect']['Pressed'] = 1;
   $GLOBALS['SkinSelect']['SkinID'] = $_POST['SkinSelect'];
  }
  else
  {
   echo(":P");
  }
 }
 else
 {
  $sql = "SELECT
      ID,
      Name
     FROM
      ".DBPREFIX."skins;";
  $result = new Query($sql);
  if($result -> error())
  {
   $result -> getError();
  }
  $skins = array();

while($row = $result -> fetch())
  {
   $skins[$row['ID']] = changetext($row['Name']);
  }
  if(isset($_COOKIE['SkinID']) AND array_key_exists($_COOKIE['SkinID'], $skins))
  {
   $skin = $_COOKIE['SkinID'];
  }
  else
  {
   $sql = "SELECT
       Defaultskin
      FROM
       ".DBPREFIX."config;";
   $result = new Query($sql);
   if($result -> error())
   {
    $result -> getError();
   }
   $row = $result -> fetch();
   $skin = changetext($row['Defaultskin']);
  }
  echo("<form action="index.php" method="post">\n");
  echo("<select name="SkinSelect">\n");
  foreach($skins as $key => $value)
  {
   echo("<option value="".$key.""");
   if($key == $skin)
   {
    echo(" selected="selected"");
   }
   echo(">".$value."</option>\n");
  }
  echo("</select>\n");
  echo("<input type="submit" value="Change skin">");
  echo("</form>\n");
 }
?>