und wieder mal session :( Brauche bitte euer hilfe

ultrasonic

Erfahrenes Mitglied
Hallo zusammen !

Habe bereits mehrere Threats gelesen aber ich bekomme es einfach nicht hin

Ich arbeite an einem css Switcher der aus meiner mysql Tabelle gelesen wird.

Wenn ich über eine Dropdownbox das Themes auswähle ändert er mir auch brav
das CSS aber sobald ich auf einen Link klicke verliert die Session ihren Wert obwohl ich session_start();in jeder datei habe.

Kann mir bitte jemand sagen wieso das so ist.

Habe in den Index.php folgenden code:


index.php
PHP:
session_start();
$_SESSION["switcher"]=$HTTP_POST_VARS["switcher"];
echo $_SESSION["switcher"];

...

<form method="post" action="<? echo $PHP_SELF; ?>">
   <select class="Buttonout_select" name="switcher"  action="index.php">
   <option value="1">select your color</option>
   <option value="1">deep love</option>
   <option value="2">communication Blue</option>
   <option value="3">Dessert ´n´ Mud</option>
   <option value="4">SlateGrey</option>
   <option value="5">cornsilk</option>
   </select>
</form>

gefolgt von :

<LINK href="includes/css/style_test.php rel="stylesheet" type="text/css">
in der Datei style_test.php steht folgender Code:

PHP:
 session_start();

...

$sql = "SELECT * FROM ".$pre."settings where id='".$_SESSION['switcher']."'";


Gruß

Ultrasonic
 
Zuletzt bearbeitet:
Versuchs mal so:
PHP:
// anstatt
$_SESSION["switcher"]=$HTTP_POST_VARS["switcher"];

// so
if ($_POST['switcher'])
{
  $_SESSION['switcher'] = $_POST['switcher'];
}
 
Danke, Danke, Danke

ich kapier zwar nicht warum aber es geht

Wenns nicht zu viel ist könntest du mir sagen warum das jetzt geht


Gruß
Ultrasonic
 
Wenn du es so machst wie oben, erhält die Variable $_SESSION['switcher'] - wenn $_POST['switcher'] nicht existiert, weil das Formular ja nicht abgeschickt wurde, sondern nur ein einfacher Link angeklickt wurde - den Wert NULL, weil sie ja neu gesetzt wird. Bei Karl Förster's Vorschlag erhält die Variable $_SESSION['switcher'] eben nur einen neuen Wert, wenn $_POST['switcher'] existiert, sprich, wenn das Formular abgeschickt wurde.
 
Natürlich funktioniert die Variante der neuinitialisierten Session, ist aber nicht wirklich Produktiv.

Das Problem besteht doch eigentlich "nur" in der Tatsache, daß innerhalb des HTML-Formulars keine Übergabemöglichkeit der Session definiert ist.
Insofern auf Cookies verzichtet wird und kein automatisches Anhängen der Session-ID verwendet wird, trage bitte in jedes Formular den folgenden Quelltext ein:

PHP:
<form ...>

  <input type="hidden" name="<?PHP echo session_name(); ?>" value="<?PHP echo session_id(); ?>" />

</form>

Mit dieser Variante geht auf keinen Fall die Session-ID verloren, egal wie die Session-Variable wirklich heißt. Ebenso sollte mit sämtlichen Links verfahren werden.
 
Zurück