Главная | Учебник | Статьи | FAQ | Книги | Ссылки |
ФАЙЛ OTZIV.PHP Код в этом файле рассчитывает новый средний балл статьи на основе переданной через форму оценки посетителя и текущего среднего балла, записывает значения среднего балла и количества оценок в соответствующие файлы, а также помечает браузер посетителя cookie для недопущения повторного голосования того же самого посетителя. <?php Поскольку изменять значения среднего балла и количества оценок имеет смысл лишь в том случае, если посетитель еще не голосовал за статью, то вновь составим имя cookie, служащего "пометкой" свершившегося голосования... $namecook=$nom."haveest"; ...и весь дальнейший код выполним только в том случае, если такого cookie установлено не было. if ($$namecook=="") Примечание: Комментарий: Итак, если посетитель еще не голосовал за данную статью... { ...установим cookie, говорящий, что такое голосование наконец совершилось. Время жизни cookie установим в месяц - пожалуй, хватит. (Пояснение по функции установки cookie смотрите в гл. 8). SetCookie("$namecook","1",time()+2 592000); Запишем в переменные имена директории с файлами оценок и самих этих файлов: $dirct="cnt"; Если файлы оценок не существуют (т. е. выставляемая оценка - вообще первая по счету)... if ((file_exists("$dirct/$kolvooc")!=True)|| ...то запишем в файл со сведениями о количестве оценивших число 1 (так ведь и есть, не правда ли?)... $hdll = fopen("$dirct/$kolvooc", "a+"); fwrite($hdll,l); fclose($hdll); ...а в файл со сведениями о среднем балле - выставленную посетителем оценку (она ведь и есть "среднее" от самой себя): $hdl2 = fopen("$dirct/$ocenka", "a+"); Если же файлы со сведениями об оценке уже существуют... else ...то считаем для начала содержимое файла с количеством оценок в переменную kvo... ...а затем увеличим значение этой переменной на 1 - что и будет новым количеством оценок, с учетом последней выставленной: $kvo++; Теперь нам надо вернуть точку считывания (так называемый "указатель") в начало файла - для того, чтобы записать в файл новое значение количества оценок. Ведь в результате проведения операции чтения количества оценок из файла точка считывания - указатель - переместилась в его конец. Для совершения данной операции воспользуемся командой rewind: rewind($hdll); Примечание: Запишем новое значение количества оценок в предназначенный для хранения этой величины файл... fwrite($hdll,$kvo); ...и закроем его. fclose($hdll); Теперь разберемся со средним баллом. Откроем файл, где хранится его значение... $hdl2 = fopen("$dirct/$ocenka", "r+"); ...запишем это значение в переменную... $sred= fread($hdl2, filesize("cnt/$ocenka")); ...и рассчитаем новую величину среднего балла - на основе его старого значения, а также информации о количестве оценок и новой оценки. $sred=($sred*($kvo-l)+$ocen)/$kvo; Теперь запишем эти сведения в предназначенный для них файл -точно так же, как и парой абзацев выше. rewind($hdl2); fwrite($hdl2,$sred); fclose($hdl2); Собственно, и все. echo ("Благодарим вас за оценку!");
Рис. 10.6. После успешного голосования
Рис.10.7. После попытки повторного голосования Если же посетитель уже голосовал за данную статью... } ...то сообщим ему об этом (рис. 10.7) - и ничего делать не станем, echo ("Вы уже голосовали за эту статью!"); } Остальной текст страницы - на ваше усмотрение. Разместите на ней каталог разделов сайта, список статей или просто красиво оформите. Если же пожелаете поставить на ней ссылку на оцениваемую статью - то просто разместите в нужном месте выводящий эту ссылку код: <?php echo ("<a href=$nazad>Ha3afl</a>"); ?> Переменная Snazad была передана через форму, помните? Комментарий: Как всегда, сценарий можно совершенствовать до бесконечности. Можно, например, совместить его с разбиравшемся в предыдущей главе сценарием гостевой книги - тогда посетители наряду с оценкой статьи могут оставить и свой отзыв на нее. Можно увеличить количество возможных оценок, которые посетители могут выставлять статьям -использовать 10-балльную или иную систему. Все в вашей власти - творите... |