Файл 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);