WinFuture-Forum.de: Cookie Setzen ?! - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Cookie Setzen ?! funktioniert vorn und hinten nicht


#1 Mitglied ist offline   amalbhalbe 

  • Gruppe: aktive Mitglieder
  • Beiträge: 643
  • Beigetreten: 14. Mai 04
  • Reputation: 0
  • Geschlecht:Männlich
  • Wohnort:BMW E38 740i V8 286 PS 4.4L Hubraum
  • Interessen:Design is the production of braindysentery

geschrieben 08. Mai 2008 - 08:44

Ich bin am verzweifeln,

ich poste einfach mal den Code -

<?
$value = $_POST['lang'];
setcookie("lang", $value, time()+3600, "/", ".domain.at");

require_once("inc/module.inc.php");

$main_tpl = file_get_contents("./tpl/index.htm");



if (isset($_COOKIE['lang']) && $_COOKIE['lang'] == "en") {
$lang = LoadLang($_COOKIE['lang']);
}else{
$lang = LoadLang("de");
}



$switch =  "
<form action=\"\" method=\"post\">
<select name=\"lang\">
<option value=\"de\">deutsch</option>
<option value=\"en\">englisch</option>
</select>
<input type=\"submit\" value=\"sprache ändern\">
</form>
";

$main_tpl = str_replace("{WELCOME}", $lang['willkommen'], $main_tpl);
$main_tpl = str_replace("{SWITCH}", $switch, $main_tpl);

echo $main_tpl;

?>



Folgendes Verhalten:

ich geh auf die Seite, Standardausgabe ist Deutsch - ich wähle Englisch aus und drück den Submit - Site ladet aber ändert sich nichts, dann führe ich IRGENDEINE andere Aktion aus
z.b fiktive Seite -> index.php?id=lalaalala

dann ändert er die Ausgabe auf Englisch, sobald ich dann aber nochwas mache ->
index.php?id=lalalal11223

dann springt er wieder auf Deutsch zurück der Cookie besteht aber nach wie vor mit dem Wert "en" ?

Danke im Voraus

mfg

Dieser Beitrag wurde von amalbhalbe bearbeitet: 08. Mai 2008 - 09:04

Pc is my life, amd my world, intel my enemy and Linux my Hell
0

Anzeige



#2 Mitglied ist offline   MNG 

  • Gruppe: aktive Mitglieder
  • Beiträge: 293
  • Beigetreten: 29. März 06
  • Reputation: 0

geschrieben 11. Mai 2008 - 22:16

Zum ersten Problem: Du setzt ein Cookie in die Header-Informationen. Die werden aber erst abgeschickt, wenn dein Skript durchgelaufen ist. Du fragst aber innerhalb des Skripts bereits den Wert des Cookies ab - das kommt zu früh. Wenn Du dann (durch eine Aktion) die Seite neu lädst, ist der Cookie vorhanden und wird korrekt ausgelesen. Am Ende dieses Aufrufs wird dein Cookie aber wieder gesetzt! Und diesmal wird vermutlich gar kein Wert für "lang" übergeben, daher wird dein Cookie 'leer' gesetzt, was dazu führt, dass bei der nächsten Aktion die Sprache wieder auf den Default zurückspringt - und auch dort bleibt, ausser, Du setzt den Wert neu.
Korrekturvorschlag (nicht getestet, ohne Gewähr ;) ):
if ( isset($_COOKIE['lang']) ) {
	$lang = LoadLang($_COOKIE['lang']);
} else if (isset($_POST['lang'])){
	$lang = LoadLang($_POST['lang']);
} else {
	$lang = LoadLang("de");
}
setcookie("lang", $lang, time()+3600, "/", ".domain.at");

Das Ganze dann an den Anfang der Seite, dann dein include und der Rest, dann der Rest ($switch usw.). In deinem select könntest du jetzt noch die einzelnen Optionen mit dem Wert von $lang vergleichen und im Falle der Gleichheit ein "selected" hinzufügen - so stimmt die Auswahl des select mit der aktuellen Sprache überein.
Alternativ könntest Du die header auch vorab senden, geht in PHP mittels ob_flush und flush. Das kann aber, auf Grund von Server-seitigem Caching, fehlschlagen.

Dieser Beitrag wurde von MNG bearbeitet: 11. Mai 2008 - 22:19

0

Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0