0

ドロップダウン メニューの値を Cookie に保存しようとしています。しかし、クッキーは異なる値を示しています! そのためのphpコードは次のとおりです。

if (isset($_POST['myselection'])){

$chooseone=$_POST['myselection'];
setcookie ("chosenlang",$chooseone, $t);
$setobr=$_COOKIE['chosenlang'];

}

これが HTML 部分です。

<form method="post" action="">

<select name="myselection" id="myselection" onchange="this.form.submit();">
<option value="choose">choose your language:</option>
<option value="Eng">Eng</option>
<option value="Esp">Esp</option>
</select>

</form>

問題は、$setobr が $chosenone を遅延して表示することです。つまり、両方を印刷すると、最初に反対の選択が表示され、次に同じ選択が表示されます!

それがなぜなのか誰か知っていますか?

4

3 に答える 3

0

で Cookie を設定するとsetcookie()、次のリクエストでこの値を送り返すようにブラウザに指示することになります。

$_COOKIEこの関数呼び出しでは更新されません。これは意図的なものです。

于 2013-01-07T21:52:48.647 に答える
0

この行を再確認できますか

setcookie ("chosenlang",$myselection, $t);

$myselection ではなく $chooseone であることを願っています。

于 2013-01-07T21:46:59.790 に答える
0

This does not work:

    setcookie("chosenlang", $chooseone, $t);
    $setobr = $_COOKIE['chosenlang'];

The $_COOKIE superglobalDocs only contains cookies that are part of the request. As you're just setting that cookie for the response, it will be available in the next request only.

Streamlining it might be what you're looking for:

    setcookie("chosenlang", $chooseone, $t);
    $setobr = $_COOKIE['chosenlang'] = $chooseone;

Take care. Also use the manual, it normally explains these things. http://php.net/$_cookie

于 2013-01-07T22:15:25.280 に答える