• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Probleme mit Cookie

Status
Für weitere Antworten geschlossen.

Devil

Neues Mitglied
Tach zusammen,
ich will eine Sprach auswahl machen die in einem Cookie später gespeichert wird und mein problem ist, dass überhaupt kein Cookie gesetzt wird.
Was ist falsch?
PHP:
    echo"<center>
        <a href='index.php?language=de'><img src='images/button/de.jpg' alt='Germany'/></a>
        <a href='index.php?language=en'><img src='images/button/en.jpg' alt='English'/></a>
        <a href='index.php?language=tu'><img src='images/button/tu.jpg' alt='Turkish'/></a>        
        </center>";
    
setcookie("Sprache",'$language',time()+(3600*24*5));

$cookie = $_COOKIE["Sprache"];

    if($_COOKIE['Sprache'] == 'de')
    {
    $la = 'language/german/lang_menu.php';
    } 
    elseif($_COOKIE['Sprache'] == 'en')
    {
    $la = 'language/english/lang_menu.php';
    }
    elseif($_COOKIE['Sprache'] == 'tu')
    {
    $la = 'language/turkie/lang_menu.php';
    }
    require $la;
 
Weil in der Zeile
PHP:
<a href='index.php?language=de'><img src='images/button/de.jpg' alt='Germany'/></a>
die Variable "language" die Zuweisung bekommt um welche Sprache es sich handelt.
Damit ja der Besucher der Seite, selbst aussuchen kann, welche Sprache
er gerne benützten möchte.

 
jo wird sie

PHP:
$variable = "Hallo";
echo $variable; //Ausgabe: Hallo
echo "$variable"; //Ausgabe: Hallo
echo "{$variable}"; //Ausgabe: Hallo
echo '$variable'; //Ausgabe: $variable
 
auch wenn ich das ' ' weg nehme oder mit "" mache trozdem kommt immer der gleiche fehler
Code:
[B]Warning[/B]:  Cannot modify header information - headers already sent by (output started at D:\Programme\xampp\htdocs\rz\index.php:8) in [B]D:\Programme\xampp\htdocs\rz\index.php[/B] on line [B]30[/B]

ich hab schon alles versucht, mit "", '' und ohne und nichts klappt, was ist der fehler ?

okay ich hab es geschaft ^^ aber mal dazu ne frage, wieso muss ich jetzt zwei mal auf den button klicken, damit die sprache übernommen wird?

EDIT Beitrag #7-#8 zusammengeführt (Frank)
 
Zuletzt bearbeitet von einem Moderator:
Bitte keine Doppel / Dreifachposts.

SetCookie muss vor jeglicher ausgabe stattfinden, das ist das, was dir die Fehlermeldung sagt
 
denk doch mal nach was die fehlermeldung bedeutet könnte.
du kannst keine sessions /cookies oder sonstwas dem header mitgeben, wenn du vorher ihn schon gerendertn hast (indem du was ausgegeben hast).
verzichte also auf html / echo / print und etc, VOR den Cookies.

PHP: headers_sent - Manual

Gruß, Tim
 
sorry mein englisch ist stark begrenzt, dass mit dem Cookie läuft jetzt zu 70% was nur fehlt, ist das dieser Cookie auch den Auswahlwert behält, da sobald ich auf Sprachauswahl Klicke (zwei mal) dann die jeweilige Sprache auch ausgiebt und bei einem weiteren Menü-punkt Auswahl klickt die Deutsche Sprache Automatisch ausgibt -.-.
 
wo fragst du wie den cookie ab ?
wo setzt du den cookie ?
ich würde zudem versuchen das ganze ohne ein solches switch/case modell zu lösen und einfach die sprachauswahl anhand der verschiedenen sprachfiles/sprachtabels anpassen.
 
Also wenn ich das machen würde, würde ich für jede Sprache eine Datei verwenden und eine ganz einfache Abfrage machen..

Also du hast nun zwei Sprachen zum Beispiel:
-Deutsch
-English

Nun hast du das Menü, das ja mehrsprachig sein soll...
Jeder Menüpunkt ist eine PHP Variable. Der jeweilge Text zu jedem Menüpunkt kommt in der Sprachdatei vor.

Also so:
PHP:
<?php
echo'Punkt1'."\n".
'Punkt2'; // etc. kA wie dein Menü aussieht
Nun hast du die zwei Dateien, englisch.php und deutsch.php

Die sehn zum Beispiel so aus:
PHP:
<?php
// Menü Deutsch > deutsch.php
$punkt1 = "Menü";
$punkt2 = "Über mich";
$punkt2.1 = "Unterpunkt 1";
// etc.....
?>
Nun einfach die Variablen kopieren und in die englische Datei einfügen.
Einfach nur den Text ändern, Variablen bleiben gleich..

Nun kannst du dein Menüpunkt so machen:
PHP:
// Menü
echo'
<a href="???.php">'.$punkt2.'</a>';
?>
So das wars eigendlich auch.
Nun macht man eine Standartsprache, wenn kein Cookie gesetzt ist, ansonsten die jeweilige Sprache einfügen.

Also so:
PHP:
if(!isset($_COOKIE['xyzcookie']))
{
 include "deutsch.php";
}
elseif($_COOKIE['xyzcookie'] == 'english')
{
 include "english.php";
}
elseif($_COOKIE['xyzcookie'] == 'deutsch')
{
 include "deutsch.php";
}
So, das wars.
Mit dieser Technik kannste hunderte Sprachen einbinden.


MfG, matibaski
 
Genau so hab ich das, halt nur mit anderen Variablen namen.

Mein Problem ist aber weiter hin da.
1. Sobald man ausgewählt hat welche Sprache man benützen will reagiert es nicht sofort auf den ersten
Klick.
2. Die AUsgabe der Texte werden dann jeweils für einen Mausklick in der richtigen Sprache ausgegeben und bei einer weiteren wahl des Menüs springt er automatisch ins deutsch zurück.

Die Augabe wird über eine switch case abfrage gemacht, halt welche seite man nun sehen möchte (Home, Gästebuch, Fotos, etc.)
 
Egal wie ich es versuche, der Cookie ändert sich bei jedem zweiten auswahl des Menüs, wie kann man das abschalten, dass der Cookie konstant bleibt, bis man irgendwann eine andere Sprache sich ausgesucht hat?
 
in dem du dein script so schreibst das es funktioniert, der cookie ändert sich schließlich nicht 'von Geisterhand'.
 
Hahaha, wenn ich keine Fehler hätte im Scrippt würde ich wohl nicht nach hilfe fragen oder?
Mein setcookie ist in der ersten zeile.
 
PHP:
<?php

error_reporting(E_ALL);

// Hier dein restlicher Code...

?>

vielleicht kannst uns dann ja mehr sagen...
 
Du hast ja geschrieben, dass es nicht sofort reagiert.

Machst du die Cookiesetzung über ein Formular? Wenn nicht, rate ich es dir an.



MfG, matibaski
 
formular?
also über den tag form?
ich habe das über eine if anweisung und varuiablen zuweisung gemacht, damit die sprache auch eingefügt wird, wo ich dann auch über die if anweisung schaue was im cookie drin steht.
 
Mein Problem ist aber weiter hin da.
1. Sobald man ausgewählt hat welche Sprache man benützen will reagiert es nicht sofort auf den ersten
Klick.
2. Die AUsgabe der Texte werden dann jeweils für einen Mausklick in der richtigen Sprache ausgegeben und bei einer weiteren wahl des Menüs springt er automatisch ins deutsch zurück.

Die Augabe wird über eine switch case abfrage gemacht, halt welche seite man nun sehen möchte (Home, Gästebuch, Fotos, etc.)

hmmm meine glaskugel ist gerade kaputt, du musst schon code herzeigen.

nur so ein kleiner gedankensplitter:

PHP:
session_start();

if(isset($_GET['lng'])) $_SESSION['lng'] = $_GET['lng'];

if(!isset($_SESSION['lng']) or ($_SESSION['lng'] == ""))
{
    $_SESSION['lng'] = "de";
}

echo '<a href="'.$PHP_SELF.'?lng=de">deutsch</a>&nbsp;<a href="'.$PHP_SELF.'?lng=en">englisch</a><br>';


// check und ausgabe der sprachdatei
if(file_exists($_SESSION['lng'].".php"))
{
    include($_SESSION['lng'].".php");
}
else echo "sprache nicht vorhanden";
 
Abend,

@matibaski: ein Formular bringt da nur wenig, da werden die Parameter unter Umständen per POST übertragen(je nach Einstellung), aber das ändert ja das Problem nicht.

Sessions sind eine gute Lösung, allerdings ist die Eingestellte Sprache dann bei einem späteren Besuch wieder auf Standard gesetzt.

zum eigentlichen Script: Das Problem ist setcookie. Damit wird zwar dem Browser mitgeteilt das Cookie Sprache zu setzen, aber PHP "kennt" es dann noch nicht. Erst beim nächsten Aufruf teilt der Browser dem Server / PHP mit seiner Anfrage auch das Cookie Sprache mit. Man muss also nach setcookie, sofern das Cookie sofort verfügbar sein soll, noch
PHP:
$_COOKIE['Sprache'] = $language;
einfügen.
Afaik hätte PHP mit error_reporting(E_ALL) einen Notice Fehler mit 'ner Meldung wie "$_COOKIE['Sprache'] nicht gesetzt" bringen müssen.


N43
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben