"SetCookie" gönderme ile ilgili sorun

5 Cevap php

Bu kılavuza göre: http://us2.php.net/setcookie Ben her şeyden önce çerez ayarlamak zorunda.

İşte benim cookie kodu:

if (isset($_COOKIE['watched_ads'])){
    $expir = time()+1728000; //20 days
    $ad_arr = unserialize($_COOKIE['watched_ads']);
    $arr_elem = count($ad_arr);
    if (in_array($ad_id, $ad_arr) == FALSE){
        if ($arr_elem>10){
        array_shift($ad_arr);
        }
        $ad_arr[]=$ad_id;
        setcookie('watched_ads', serialize($ad_arr), $expir, '/');
    }
}
else {
    $expir = time()+1728000; //20 days
    $ad_arr[] = $ad_id;
    setcookie('watched_ads', serialize($ad_arr), $expir, '/');
}

Gördüğünüz gibi ben çerez ayarı değişkenleri kullanıyorum.

The variables comes from a mysql_query and I have to do the query first. But then, if I do, I will get an error message:

 Cannot modify header information - headers already sent by ...

Hata yukarıda çerez ayarlamak hattına puan.

Ben ne yapmalıyım?

UPDATE:

Ben SetCookie bölümü önce bunu:

$ad_id=$_GET['ad_id'];
$query2 = "SELECT * FROM classified WHERE classified.ad_id = '$ad_id'";
$results2 = mysql_query($query2) or die(mysql_error());
$row2 = mysql_fetch_array($results2);
$cat = $row2['category'];
$action=$row2['action'];
$sql_table='';
$num_rows = mysql_num_rows($query_results);
if ($num_rows != 0){
   HERE COMES THE SETCOOKIE PART

5 Cevap

Başkalarına tavsiye ettiler, size bir çerez ayarı yapmadan önce, herhangi bir html ya da boşluk çıkış olmadığından emin olun.

Eğer çerez ayarlamak önce printing html çünkü bu başarısız olur.

<p>
<?php
  // your cookie code - note <p> tag before <?php tag
  // ...
?>

Eğer çerez ayarlamak önce printing, boşluk, çünkü bu aynı zamanda, başarısız olur.

 
<?php
  // your cookie code - note the extra linebreak before <?php tag
  // ...
?>

Ayrıca

 <?php
  // your cookie code - note the extra space before <?php tag
  // ...
?>

Eğer php komut dosyası için bir kodlamasını UTF kullanmak (ve İngilizce konuşan ülkelerden birinde değilseniz, şansını yapmak vardır), bu does not {[(dahil emin editörün ayarlanmış olduğundan emin olun Her dosyanın başında 1)]} (BOM). http://en.wikipedia.org/wiki/Byte_order_mark BOM ilgili daha fazla ayrıntı için bkz.

Kısıtlama Eğer sadece, çerezleri çıkmadan önce bir şey yapmak gerektiğini olmadığını çerezleri çıkmadan önce yapmanız gerekir hayır output şey.

Örneğin, biz kullanıcı veritabanı, çıkış o bazı verileri almak ve çerez olarak ayarlayın istiyorum diyelim.

<?php
$data = getDbData();
echo $data['field'];
setcookie('field', $data['field'], time()+86400, '/');

Biz çerez ayarlamadan önce çıktılarının verileri ettik çünkü bu başarısız olur. Biz çerez ayarladıktan sonra çıktıyı hareket ettirerek çözebilirsiniz.

<?php
$data = getDbData();
setcookie('field', $data['field'], time()+86400, '/');
echo $data['field'];

Eğer anything önce başlık tabanlı bilgileri ekleyerek not print (çerezler gibi) mutlaka emin olun.

Mysql Buna neden olabilecek bir hata, çıktılar sürece, kodu ile herhangi bir sorun göremiyorum.

Bu karanlık bir çekim, ancak açmadan php etiketleri önce herhangi bir boşluk (veya bu konuda başka bir şey) yok emin olun. Ayrıca size dahil dosyaları kapanış php etiketlerinin sonra herhangi izleyen whitespaces yok emin olun.

Eğer bize gösterdi hata mesajı başlıkları setcookie() on line gönderildi söylüyor. Böylece, hataya neden olan, kod başlıklarını veya çerezleri later ayar olabilir. (Ya da ben öyle kelime hata kelime hatırlamıyorum çünkü ben inanıyorum ve kritik noktada kesilmiş)