Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Куки
 
 автор: dream3000   (03.06.2006 в 09:23)   письмо автору
 
 

Писала код с книги, поэтому всё вроде правильно. Нужно, что бы голосовать мог только один человек, ну или по крайней мере увеличить такую возможность при помощи куки.

Пишет значит такую ошибку.

Warning: Cannot modify header information - headers already sent by (output started at c:\www\scripts\dream\story\story_file\otziv.php:6) in c:\www\scripts\dream\story\story_file\otziv.php on line 57

А вот код. Ошибка в той строчке, где написано SetCookie

Без этой строчке всё работает, только голосования можно проводить каждому человеку по 1000000 раз. В общем мало приятного.


<?php
$namecook
=$nom."haveest";
if ($
$namecook=="")
  {
     
SetCookie("$namecook","1",time()+2592000);
     
$dirct="../cnt";
     
$kolvooc="$nom"."kol";
     
$ocenka="$nom"."est";
     if ((
file_exists("$dirct/$kolvooc")!=True) || (file_exists("$dirct/$name2")!=True))
       {
         
$hdl1 fopen("$dirct/$kolvooc""a+");
         
fwrite($hdl1,1);
         
fclose($hdl1);
         
         
$hdl2 fopen("$dirct/$ocenka""a+");
         
fwrite($hdl2,$ocen);
         
fclose($hdl2);
        }
      else
        {
        
$hdl1 fopen("$dirct/$kolvooc""r+");
        
$kvo fread($hdl1filesize("../cnt/$kolvooc"));
        
        
$kvo++;
        
rewind($hdl1);
        
fwrite($hdl1,$kvo);
        
fclose($hdl1);
        
        
$hdl2 fopen("$dirct/$ocenka""r+");
        
$sred fread($hdl2filesize("../cnt/$ocenka"));
        
$sred=($sred*($kvo-1)+$ocen)/$kvo;
        
rewind($hdl2);
        
fwrite($hdl2,$sred);
        
fclose($hdl2);
        }
    echo (
"<center><p>Благодарю вас за оценку!</p>");
   }
   else
     {
       echo(
"Вы уже голосаовали за эту статью!");
     }
?>

   
 
 автор: cheops (из кафе)   (03.06.2006 в 09:48)
 
   для: dream3000   (03.06.2006 в 09:23)
 

Куки, сессии, отправка заголовков должны происходить до отправки любой информации в окно браузера, т.е. до любого вывода echo, print или непосредственного вывода вне тэгов <?php и ?>. Это связано с тем, что HTTP-заголовки передаются перед всеми данными и когда происходит вывод в окно браузера PHP вынужден их пред этим отослать клиенту. Поэтому повторно, после вывода информации в браузер он не может работать с куками, сессиями и отправлять заголовки.
Если вывод текста до отправки заголовков необходим следует воспользоваться функциями управления вывода, позволяющих задерживать вывод информации в браузер.

http://www.softtime.ru/group/id_group=12

   
 
 автор: dream3000   (03.06.2006 в 10:20)   письмо автору
 
   для: cheops (из кафе)   (03.06.2006 в 09:48)
 

В принципе, я это знала, но в учебнике так было написано, вот я и подумала, написать, как есть.... Хм... а как тогда можно этот пример переделать?

Я попробовала сделать так:


<?php
$namecook
=$nom."haveest";
if ($
$namecook=="")
  {
     
SetCookie("$namecook","1",time()+2592000);
?>     


<html><head>

и т д

стили,
таблица,


<?php

     $dirct
="../cnt";
     
$kolvooc="$nom"."kol";
     
$ocenka="$nom"."est";
     if ((
file_exists("$dirct/$kolvooc")!=True) || (file_exists("$dirct/$name2")!=True))
       {
         
$hdl1 fopen("$dirct/$kolvooc""a+");
         
fwrite($hdl1,1);
         
fclose($hdl1);
         
         
$hdl2 fopen("$dirct/$ocenka""a+");
         
fwrite($hdl2,$ocen);
         
fclose($hdl2);
        }
      else
        {
        
$hdl1 fopen("$dirct/$kolvooc""r+");
        
$kvo fread($hdl1filesize("../cnt/$kolvooc"));
        
        
$kvo++;
        
rewind($hdl1);
        
fwrite($hdl1,$kvo);
        
fclose($hdl1);
        
        
$hdl2 fopen("$dirct/$ocenka""r+");
        
$sred fread($hdl2filesize("../cnt/$ocenka"));
        
$sred=($sred*($kvo-1)+$ocen)/$kvo;
        
rewind($hdl2);
        
fwrite($hdl2,$sred);
        
fclose($hdl2);
        }
    echo (
"<center><p>Благодарю вас за оценку!</p>");
   }
   else
     {
       echo(
"Вы уже голосаовали за эту статью!");
     }
?>
  <?php echo ("<p><a href=$nazad>Назад</a></p></center>"); ?>


Всё равно пишет:

Warning: Cannot modify header information - headers already sent by (output started at c:\www\scripts\dream\story\story_file\otziv.php:2) in c:\www\scripts\dream\story\story_file\otziv.php on line 6

   
 
 автор: valenok   (03.06.2006 в 11:01)   письмо автору
 
   для: dream3000   (03.06.2006 в 10:20)
 

А ты попробуй убрать пустые строчки до начала кода и смени редактор еслт пользуешся блокнотом.
Он там ставит какойто ASCII символ в начале текста не как не ставив тебя об этом в извесность.

   
 
 автор: cheops   (03.06.2006 в 14:27)   письмо автору
 
   для: dream3000   (03.06.2006 в 10:20)
 

Что находится во второй строке файла otziv.php?

   
 
 автор: dream3000   (03.06.2006 в 19:08)   письмо автору
 
   для: cheops   (03.06.2006 в 14:27)
 

Я в Dreamweaver пишу

Во второй строке

$namecook=$nom."haveest";

   
 
 автор: cheops   (03.06.2006 в 22:47)   письмо автору
 
   для: dream3000   (03.06.2006 в 19:08)
 

Не могли бы вы прикрепить файл otziv.php к сообщению как файл - может нам удасться что-нибудь свежим взлядом обнаружить - невидимые символы или ещё что-то мещающее...

   
 
 автор: valenok   (03.06.2006 в 23:16)   письмо автору
 
   для: cheops   (03.06.2006 в 22:47)
 

Извините, случайно топиком ошибся.

   
 
 автор: dream3000   (04.06.2006 в 09:42)   письмо автору
 
   для: valenok   (03.06.2006 в 23:16)
 

ОК, вот

   
 
 автор: cheops   (04.06.2006 в 11:19)   письмо автору
 
   для: dream3000   (04.06.2006 в 09:42)
 

А почему в первом посте ошибка в 57 строке, а несколькими постами выше в 6? Вы ничего в скриптах не меняли? Прикреплённый скрипт в какой строке ошибку выдаёт... Дело в том, что у него функция setcookie() распоожена в 5 строке, и, если ошибка присутствует, она должны бы возникать в 5 строке?

   
 
 автор: dream3000   (04.06.2006 в 18:10)   письмо автору
 
   для: cheops   (04.06.2006 в 11:19)
 

Всё заработало! :) Спасибо :)

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования