1

こんにちは、ここに投稿したコードで問題が発生しました (非常に縮小されたバージョンであるため、わかりやすくするために多くの html が省略されています)。目標は、Cookie が存在し、それが満たされているかどうかを確認することです。グローバル変数 $_POST が空の場合、Cookie が存在するかどうか、または何らかの理由で空であるかどうかをチェックします。Cookie が存在しないか空である場合。それは1つを作成します。次に、HTML フォームの前にコンテンツを表示します

フォームの送信がクリックされると、ページ自体が呼び出され、もちろん $_POST が入力されます。したがって、コードの後半は、Cookie のコンテンツを読み取って表示します。

実際には、ページを呼び出すと、Cookie が作成されますが (ブラウザーで確認しました)、最初の読み取り値は表示されません! 送信をクリックすると、Cookie のコンテンツが読み取られます。または、F5 でページを更新すると、それが表示されます。

しかし、「初めて」ページをロードしたときではありません。

どこで間違いを犯したかを教えてください。

if (!$_POST) {
    // Create Cookie
    if (!isset($_COOKIE["ID"]) || ($_COOKIE["ID"] != true)){
     $order_id = time();
         $lifetime = 600;
     setcookie("ID",$order_id,time()+$lifetime);
    }//End IF "create cookie"
     ...
     ...
     ...
     $order_id = $_COOKIE["ID"];
     echo $pag = <<< FORM
         $order_id
     <form action="page.php" method="post">
     ...
     ...
     <input type="submit">
     </form>
FORM;
} elseif  ($_POST) {
    // Read Cookie for Contract
    echo $order_id = $_COOKIE["ID"];
    echo $order_id_date = date('l jS \of F Y');
     ...
     ...
     ...
     setcookie("ID","",-50000);
} // End IF ELSEIF
4

3 に答える 3

0

Cookie は、リクエストごとにブラウザからサーバーに送信されます。あなたはまだ同じリクエストにいるので、Cookie は送信されていません。

そのため、同じファイル (同じリクエスト内) でさらにこれが機能しません。

$order_id = $_COOKIE["ID"]; // because the cookie hasn't been sent yet.

また、変数$order_id にはすでに注文 ID が含まれているため、これは必要ないようです。

于 2012-06-24T12:34:42.173 に答える
0

このように設定すると良いでしょう。

$order_id = time();
if(isset($_COOKIE['ID']) && !empty($_COOKIE['ID'])) {
  $order_id = $_COOKIE['ID'];
} else {
  $lifetime = 600;
  setcookie('ID', $order_id, time() + $lifetime);
}

したがって、常に注文 ID を設定し、存在する場合は Cookie ID に置き換えます。

于 2012-06-24T12:40:33.803 に答える
0

解決策を見つけました。折り返しです。私が作成したようなクッキーの代わりに、セッションを使用しました。ここでコードを報告したいと思います:

session_start();
if (!$_POST) {
   if ((!isset($_SESSION['order_id'])) or $_SESSION['order_id'] != true ){
    $order_id_time = time(); // Assign variables
    $_SESSION['order_id'] = $order_id_time;
    }
$order_id_date = date('l jS \of F Y');
$order_id = $_SESSION['order_id'];
     ...
     ...
     ...
     echo $pag = <<< FORM
     $order_id
     <form action="page.php" method="post">
     ...
     ...
     <input type="submit">
     </form>
FORM;
} elseif  ($_POST) {
    // Read Cookie for Contract
echo $cook = "Order ID: ".$_SESSION["order_id"]."<br /><br />";
     ...
     ...
     ...
session_destroy();
} // End IF ELSEIF
于 2012-06-25T12:06:36.397 に答える