4

私は PHP が初めてで、Cookie についてあまり知識がありません。

一時的にデータが必要なだけなので、データを Cookie に保存する必要があるようです。いくつかの記事を読んで試してみましたが、空白の結果が得られました。

ここに私のコードがあります:

<?php
if (isset($_COOKIE['vaccine'])) {
setcookie('vaccine',$vaccine);
foreach ($_COOKIE[$vaccine] as $vaccine){ ?>

<div class="control-group">
<label class="control-label">
<?php echo '&nbsp'.'<a href="javascript:void(0);"  rel="tooltip"    
 title="Delete" onclick="delete_vaccination('.$vaccine->vaccination_record_id.');"><i class="icon-minus-sign"></i></a>'.'';?><?php echo $vaccine->vaccination_record_brand;?>

</label>
</div>

<?php }} ?>
4

2 に答える 2

2

これにはセッションを使用できます (すべきですか?)。Cookie は一時的なものではなく、クライアントのコンピューターに保存されます。セッションは一時的なものであり、破棄するまで存続します。

さらに、PHP にいくつかのエラーがあります (Cookie の処理にはあまりありません):配列内の$_COOKIE[$vaccine]逆参照します。配列のように見えるので、 を見ています。次のように修正します。$vaccine$_COOKIE$vaccine$_COOKIE["Array"]

foreach ($_COOKIE["vaccine"] as $vaccine)

また、オブジェクトを Cookie に入れているため、Cookie を設定または取得する前に、オブジェクトをシリアル化/非シリアル化する必要があります。

// fetch the vaccines somewhere first
setcookie('vaccine',serialize($vaccines));

最後に、Cookie が設定されているのに、なぜ Cookie を設定するのでしょうか。設定したら、それを読む必要があります。

完全なコード:

<?php
if (isset($_COOKIE['vaccine'])) {
   $vaccines = unserialize($_COOKIE['vaccine']);
   foreach ($vaccines as $vaccine){ ?>

      <div class="control-group">
      <label class="control-label">
      <?php echo '&nbsp'.'<a href="javascript:void(0);"  rel="tooltip"    
          title="Delete" onclick="delete_vaccination('.$vaccine->vaccination_record_id.');">
          <i class="icon-minus-sign"></i></a>'.'';?>
          <?php echo $vaccine->vaccination_record_brand;?>

      </label>
      </div>

<?php }} ?>
于 2013-01-02T08:30:57.033 に答える
1

それがあなたのコード全体である場合、$vaccineに入るデータはどこにありますか?そのCookieを空に設定したようです。

次に、コードのバグもあります。foreachには、$ _ COOKIE[$vaccine]ではなく$_COOKIE['vaccine']が必要です。ただし、Cookieとアレイに関するコメントについては、以下を参照してください。

さらに、PHP配列をCookieに保存することはできません。配列をCookieに格納しながらシリアル化し、Cookieを取得したときにPHP配列にシリアル化を解除する必要があります。それか、PHPマニュアルの例3を見てください-Cookieの配列を処理する方法についてはhttp://php.net/manual/en/function.setcookie.phpを参照してください。この方法で配列Cookieを使用する場合は、その数のCookieが設定されることに注意してください。これは問題かもしれません。したがって、シリアル化について考えたいと思うかもしれません。

シリアル化の1つの実装は、PHPマニュアル自体のsetcookieエントリに記載されています。上記のマニュアルページの「cwillardatfastmaildotfm」のコメントを参照してください。

また、設定したCookieは、次のページの読み込み時にのみアクセスできます。データを$vaccineに詰め込んだ場合でも、最初は空白が表示されます。ページのリロード時に、whaが表示されます。

于 2013-01-02T08:23:17.993 に答える