PHP Superglobale $_Post

  • Hallo zusammen,

    habe folgendes problem:
    wenn ich die Browser Sprache eines Client ermittelt habe und mit $_POST['LANG'] nexten script verwenden will ist sie leer. $lang ist auch leer.

    Da ich nicht in jedem script die Sprache neu ermitteln KANN (Kunde hat eigene Sprache gewäht)
    Müsste ich verstehen wie ich diese Globalen var im nächsten programm verwende.

    Bei funktionsaufruf(lang) und formularen mit Methode(post) geht das klar.

    also:

    include_once ('http_sprache.php');
    $allowed_langs = array ('de', 'en', 'it', 'fr');
    $lang = lang_getfrombrowser ($allowed_langs, 'de', null, false);
    $_POST['LANG'] = $lang ;
    return($lang);

    Ergebnis 'de'

    dann aufruf anderes.php über link.

    Dann
    $_POST['LANG'] = leer
    $lang = leer

    Was mache ich falsch ?

  • Warum speicherst du das in $_POST?
    $_POST wird nur bei Formularen weitergegeben. Stattdessen solltest du es in $_SESSION speichern. So wirst du auch noch auf weiteren Seiten darauf zugreifen können

  • gut, habe ich jetzt in
    $_SESSION['LANG'] = $lang ;

    aber die ist im nächsten script auch leer.
    echo $_SESSION['LANG'];

  • Hallo zusammen,

    habe mich jetzt stundenlang durch diese Themna gequält, aber eine Lösung für mein Problem nicht gefunden.

    Ich generiere über die Sprachauswahl mein Seiten dynamisch aus einer Datenbank.
    Daher brauche ich die echo $_SESSION['LANG']; immer in jedem script.

    Ermitteln der Sprache:
    <?php
    include_once ('http_sprache.php');

    $allowed_langs = array ('de', 'en', 'it', 'fr');

    $lang = lang_getfrombrowser ($allowed_langs, 'en', null, false);
    $_SESSION['LANG'] = $lang ;

    //echo $_SESSION['LANG'];
    // Ausgabe im HTML
    //var_dump ($lang);
    return($lang);

    ?>

    Danach user Registrierung, und hier brauche ich den Wert, ohne den Include nochmal auszuführen, da der User auch im Menue die Sprachauswahl verändern kann und eine andere als die Browser Sprache auswählen, oder seine Stammsprache nach der Registrierung.
    Das heisst $_SESSION['LANG'] wird je nach bedarf verändert.

    Also wie bekomme ich den Wert überall global verfügbar ?
    Register_global = on;

    Dann folgt:
    <?php
    error_reporting(E_ALL);
    //include ("lang_get.php"); // das darf nichtmehr aufgerufen werden.

    //echo $_SESSION['LANG'];
    $lang = $_SESSION['LANG']; //ist immer leer

    print_r($_SESSION); //ist immer leer

    // javacript check input data
    if($lang == 'de') {
    include 'error_de.js';
    }elseif ($lang == 'it') {
    include 'error_it.js';
    }elseif ($lang == 'en') {
    include 'error_en.js';
    }elseif ($lang == 'fr') {
    include 'error_fr.js';
    }
    include 'chkField.js';

    //include the function dbconnect(verbose) function
    include 'connATC.php';
    //include the get_country(lang) function
    include 'country.php';
    ?>

    <body>
    <form name="Registrierung" id="register" onSubmit="return validate(this,var_1)" ACTION="insert_user.php" METHOD="POST">

    <?php {

    $verbose = TRUE;
    $dbconn = dbconnect($verbose);

    $sql_refmask = "SELECT vartxt, varname, substr(vartyp,1,2) as vartyp
    FROM atc.trefmask
    where (lang='$lang' or lang ='al')
    and maske='reguser' order by pos" ;


    $stmt = db2_prepare($dbconn, $sql_refmask);
    $result = db2_execute($stmt);

    if (!$result) {
    die('Ungültige Abfrage: ' . db2_conn_errormsg());
    }

    while ($row = db2_fetch_array($stmt)){
    echo "<tr><th align='left' valign='bottom'>";
    echo "{$row[0]} ";
    echo "</th><td align='left' valign='middle' width='485'>";

    if($row[2]== 'sl') {
    echo "

    {$row[1]} </p> ";
    $country = get_country();
    echo "</select> </td></tr>";
    } elseif ($row[2] == 'tx') {
    echo "

    {$row[1]} </p> </td></tr>";
    } elseif ($row[2] == 'sp') {
    echo "

    {$row[1]} </p> ";
    $province = get_province($lang);
    echo "</select></td></tr>";
    } elseif ($row[2] == 'se') {
    echo "

    {$row[1]} </p> ";
    echo "</select> </td></tr>";
    } else {
    echo "

    {$row[1]} </p> </td></tr>";
    }
    }
    }
    ?>

  • solltest du nicht eigentlich ne fehlermeldung bekommen ? 0o

    startest schliesslich die session nicht...


    also:

    <?php
    session_start();
    require_once("...");
    $_SESSION['lang'] = $lang;

    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!

  • Hallo ,

    das habe ich gemacht,
    jedoch schon beim ermitteln der Browsersprache

    include '/sites/lang_get.php';
    ist $_SESSION['LANG'];

    ist der wert nichtmehr verfügbar.

  • hat $lang überhaupt nen wert ?
    und poste mal den relevanten quelltext ohne js und überprüfung und ausgabe

    Sei immer du selbst. Außer du kannst Batman sein. Sei immer Batman!