2013-01-02 56 views
5

Tôi mới sử dụng PHP và không có nhiều kiến ​​thức về cookie.Làm thế nào để lưu trữ dữ liệu trong cookie bằng cách sử dụng php?

Dường như tôi phải lưu trữ dữ liệu của mình trong cookie vì tôi chỉ cần tạm thời dữ liệu đó. Tôi đã đọc một số bài báo và đã thử một số bài viết nhưng tôi nhận được kết quả trống từ nó.

đây là mã của tôi:

<?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 }} ?> 
+0

giá trị của '$ vaccine' là gì? –

+1

Lời nhắc: Cookie chỉ hiển thị trên yêu cầu tiếp theo. Điều bạn dính vào một cookie bằng cách sử dụng 'setcookie' sẽ không xuất hiện trong' $ _COOKIE' cho đến khi cuộc gọi tiếp theo của người dùng đến tập lệnh. – Charles

Trả lời

2

Bạn có thể (nên?) Sử dụng các phiên cho việc này. Cookie không phải là tạm thời, chúng được lưu trữ trên máy tính của khách hàng. Phiên là tạm thời, chúng vẫn còn sống cho đến khi bạn tiêu diệt chúng.

Bên cạnh đó, bạn có một số sai sót trong chương trình PHP (không quá nhiều trong các cookie handling): $_COOKIE[$vaccine] sẽ dereference các giá trị của $vaccine trong $_COOKIE mảng của bạn. Vì $vaccine có vẻ là một mảng, bạn đang xem $_COOKIE["Array"]. Bạn sẽ muốn khắc phục nó như sau:

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

Ngoài ra, như bạn đang đặt một đối tượng trong một cookie, bạn phải serialize/unserialize nó, trước khi đặt hoặc nhận cookie:

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

Sau đó, cuối cùng , tại sao bạn đặt cookie, khi cookie được đặt? Bạn nên đọc nó, khi được đặt.

mã hoàn chỉnh:

<?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 }} ?> 
+0

cảm ơn bạn rất nhiều vì đã kiên nhẫn giải thích điều này với tôi. – claire

1

Nếu đó là toàn bộ mã của bạn sau đó ở đâu là dữ liệu mà đi vào vắc-xin $? Dường như bạn đã đặt cookie đó để trống.

thì cũng có lỗi mã; foreach nên có $ _COOKIE ['vaccin'] thay vì $ _COOKIE [$ vaccin]. Nhưng sau đó xem bên dưới để biết các nhận xét về cookie và mảng.

Ngoài ra, bạn không thể lưu trữ một mảng PHP vào cookie. Bạn sẽ phải tuần tự hóa mảng trong khi lưu trữ nó trong cookie, và unserialize nó khi bạn lấy lại cookie, vào một mảng PHP. Hoặc là, hoặc xem ví dụ # 3 trong hướng dẫn sử dụng PHP - http://php.net/manual/en/function.setcookie.php về cách xử lý các mảng trong cookie. Hãy thận trọng nếu bạn sử dụng cách này, bằng cách sử dụng cookie mảng, thì nhiều cookie được đặt. Đó có thể là một vấn đề. Và vì vậy bạn có thể muốn suy nghĩ về serialization.

Thực hiện tuần tự hóa được đưa ra trong mục nhập setcookie trong chính sách hướng dẫn sử dụng PHP. Xem nhận xét của 'cwillard tại fastmail dot fm' trong trang hướng dẫn được đưa ra ở trên.

Ngoài ra, các cookie bạn đã đặt sẽ chỉ có thể truy cập được khi tải trang tiếp theo. Ngay cả khi bạn đưa dữ liệu vào $ vaccine, lần đầu tiên bạn sẽ thấy một khoảng trống. Khi tải lại trang, bạn sẽ thấy wha

+0

Tôi không biết làm thế nào để thiết lập cookie tuy nhiên tôi đã cố gắng print_r $ vắc xin và nó trả về mảng. Cảm ơn bạn đã trả lời .. – claire

Các vấn đề liên quan