Иллюстрированный самоучитель по PHP

Файл otziv.php

Код в этом файле рассчитывает новый средний балл статьи на основе переданной через форму оценки посетителя и текущего среднего балла, записывает значения среднего балла и количества оценок в соответствующие файлы, а также помечает браузер посетителя cookie для недопущения повторного голосования того же самого посетителя.

<?php

Поскольку изменять значения среднего балла и количества оценок имеет смысл лишь в том случае, если посетитель еще не голосовал за статью, то вновь составим имя cookie, служащего "пометкой" свершившегося голосования…

$namecook=$nom."haveest";

…и весь дальнейший код выполним только в том случае, если такого cookie установлено не было.

if ($$namecook=="")

Примечание
Вместо этой строки можно использовать строку:

if ($HTTP_COOKIE_VARS[$haveestim]=="")

…или в PHP версии 4.1 и выше – строку:

if ($_COOKIE[$haveestim]=="") как уже указывалось выше.

Комментарий
Казалось бы – а зачем, собственно, проверять на этой странице, установлен ли cookie? Ведь форма для выставления оценки на предыдущей странице может появиться на ней только в том случае, если cookie отсутствует, не так ли? Но все дело в том, что посетитель, желающий сделать "накрутку" статьи, проголосовав за нее множество раз, вполне может сохранить на своем компьютере локальную копию статьи с формой для выставления оценки, и уже с нее осуществлять голосование. Ясно, что отображение формы на локальной копии страницы от наличия или отсутствия cookie не зависит, – поэтому и приходится осуществлять проверку еще и здесь
.

Итак, если посетитель еще не голосовал за данную статью…

{

…установим cookie, говорящий, что такое голосование наконец совершилось. Время жизни cookie установим в месяц – пожалуй, хватит. (Пояснение по функции установки cookie смотрите в Главе 8).

SetCookie("$namecook","1",time()+2 592000);

Запишем в переменные имена директории с файлами оценок и самих этих файлов:

$dirct="cnt";
$kolvooc="$nom"."kol";
$ocenka="$nom"."est";

Если файлы оценок не существуют (т. е. выставляемая оценка – вообще первая по счету)…

if ((file_exists("$dirct/$kolvooc")!=True)||
(file_exists("$dirct/$name2")!=True)) {

…то запишем в файл со сведениями о количестве оценивших число 1 (так ведь и есть, не правда ли?)…

$hdll = fopen("$dirct/$kolvooc", "a+"); fwrite($hdll,l); fclose($hdll);

…а в файл со сведениями о среднем балле – выставленную посетителем оценку (она ведь и есть "среднее" от самой себя):

$hdl2 = fopen("$dirct/$ocenka", "a+");
fwrite($hdl2,$ocen);
fclose($hdl2);
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.