ФАЙЛ NIZ.PHP

Код цього файлу виводить інформацію про вже виставлені оцінки - їх кількість і середній бал, а також в тому випадку, якщо відвідувач ще не виставляв свою оцінку - форму для її введення.

<?php

Файли із значеннями середнього балу і кількості оцінок зберігатимуться в теці з ім'ям cnt. Запишемо для зручності її ім'я в змінну:

$dirct="cnt";

А самі ці файли матимуть імена, що складаються на основі імені файлу із статтею. Спочатку "витягнемо" це ім'я з повного імені файлу (пояснення до використовуваних функцій дивитеся в попередній главі):

$nom=substr(basename($PHP_SELF), 0 -4);

...а самі файли назвемо на основі цього імені, отримавши ім'я файлу з кількістю оцінок збільшенням до нього закінчення "kol", а ім'я файлу з середнім балом - закінчення "est" (мал. 10.1):

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

Мал. 10.1. Файли системи оцінювання.
Зліва - статті, файли з сценаріями і тека з файлами оцінок, справа -содержімоє цієї теки


Тепер виведемо відомості про вже виставлені оцінки.

echo ("Оцінок цій статті - ");

Якщо файл з відомостями про кількість оцінок існує (він створюється при першому оцінюванні)...

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

...то вставимо його значення в документ.

include ("$dirct/$kolvooc");

Якщо ж такого файлу немає, тобто документ жодного разу не оцінювався...

}
else
{

...виведемо значення "0".

echo ( " 0 " ) ;
}

Якщо файл з середнім балом існує...

if (file_exists("$dirct/$ocenka")==True)
{

...то треба вивести його значення.

echo (". Середній бал - ");

Але просто включити вміст файлу на сторінку не можна - середній бал може бути і довгим десятковим дробом. Тому відкриємо файл для читання командою f open (детальніше про цю команду дивитеся в попередній главі)...

$hdl у fopen("$dirct/$ocenka", "r+");

...і рахуємо в змінну Ssred весь вміст цього файлу.

$sred = fread($hdl, filesize("$dirct/$ocenka"));

Примітка:
Функція fread (дескриптор файлу, довжина прочитуваного фрагмента) прочитує з відкритого файлу, для якого отриманий вказаний в її першому параметрі дескриптор, стільки байт, скільки вказано в її другому параметрі (читання починається з місцезнаходження так званого покажчика файлу - відмітки, що показує поточне місце роботи з файлом; покажчик рухається при читанні або записі у файл, а також при використанні команди fseek).
Функція filesize (повна дорога до файлу) повертає розмір вказаного в її параметрі файлу в байтах.

Файл можна закрити...

fclose($hdl);

...а змінну $sred - округлити до десятих

$sred=round ($sred, 1);

Примітка:
Функція round (число, кількість розрядів) округлює дробове число в її першому параметрі до кількості розрядів, вказаної в її другому параметрі. Скажімо, round (число, 1) округлить число до десятих, round (число, 2) - до сотих і так далі

У РНР до четвертої версії функція round могла округлювати числа лише до цілих, тому в тому випадку, якщо ви маєте в своєму розпорядженні лише таку версію РНР, то команда округлення до десятих повинна виглядати як

$sred=(round ($sred*10))/10; ...і вивести на сторінку.
echo ("$sred.");
}

Ім'я cookie, в якому знаходитиметься інформація про те, чи голосував відвідувач за дану статтю чи ні, теж утворюватиметься з імені файлу статті. Запишемо це ім'я в змінну $haveestim...

$haveestim=$nom."haveest";

...і перевіримо, чи визначена змінна з таким ім'ям - тобто чи встановлений однойменний cookie чи ні (мал. 10.2). Можна було б також перевіряти, яке значення має дана змінна, але для нашого сценарію це неважливо - якщо змінна встановлена і cookie визначений, то відвідувач вже голосував за дану статтю: адже cookie з даним ім'ям встановлюється йому в цьому і лише в цьому випадку.

if ($$haveestim=="")

Звернете увагу на ім'я змінної, що перевіряється, - це ім'я само є значенням змінної Shaveestim (подібну конструкцію допускають правила РНР, детальніше дивитеся в гл. 3).

Мал. 10.2. Вміст cookie - позначки про голосування, що відбулося

Оскільки значення cookies доступні і через масив $HTTP_COOKIE_VARS[], то перевірити наявність cookie можна і на основі аналізу значень цього масиву:

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

або в РНР версії 4.1 і вище

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

Коментар:
Пам'ятаєте, що доступність даних cookie залежить від налаштувань у файлі php.ini (ріс.10.3) - якщо у файлі php.ini встановлений в on параметр register_globals, той вміст cookie доступно в сценарії в змінній з тим же ім'ям, що і cookie, а якщо ephp.ini встановлений в on параметр trackjvars, той вміст cookie доступно в сценарії в однойменному з цим cookie елементі масиву Shttpcookievarsfj (з РНР 4.1 -і $_СООК1Е[]).

Використовувати масиви $HTTP_COOKIE_VARS[] і $_СООК1Е[] краще з точки зору безпеки. Якщо в сценарії використовуються однойменні cookie змінні, а не елементи цих масивів, то в тому випадку, якщо cookie не встановлений, зловмисник все одно може передати сценарію значення такої змінної, просто вказавши його в адресному рядку браузера. У вказані ж масиви потрапляють виключно отримані з cookie дані. Проте в сценарії, що розглядається в даній главі, це неістотно. 118

Мал. 10.3. Файл php.ini. Вищезазначені налаштування

Якщо cookie не встановлений - тобто відвідувач раніше не голосував за дану статтю...

{

то виведемо йому форму для голосування

. ?>
<form method="post" action="otziv.php">

Передамо в прихованому полі форми ім'я файлу із статтею без розширення - для визначення на основі його сценарієм-обробником імен файлів з відомостями про кількість оцінок і середній бал, а також повне ім'я, разом з дорогою, файлу із статтею - для виведення заслання "Назад" на сторінці з сценарієм-обробником. В принципі можна було б передавати через форму лише повне ім'я файлу із статтею, а "чисте" ім'я файлу статті визначати в сценарії-обробнику точно так, як і в сценарії з niz.php - на основі функції basename, але для скорочення довжини коди в обробнику скористаємося передачею його через форму.

<input name="nom" type="hidden" value="<?php echo $nom; ?>">
<input type=hidden name=nazad value=<?php echo ($PHP_SELF); ?>>

Виведемо форму введення оцінки:
Поставте оцінку статті:

<SELECT Name=ocen>
<OPTION Value=5>5 (Відмінно)
«DPTION Value=4>4 (Добре)
<OPTION Value=3>3 (Задовільно)
<OPTION Value=2>2 (Погано)
<OPTION Valoe=1>1 (Дуже погано)
</select>

В результаті в сценарій-обробник буде переданий змінна Socen (і однойменні елементи масивів $HTTP_POST_VARS, $_POST при відповідних версіях РНР і налаштуваннях в php.ini) із значенням, рівним параметру value вибраного користувачем пункту випадного списку.
Виведемо кнопку відправки форми (мал. 10.4).

Мал. 10.4. Система оцінювання у дії...

<input name="submit" type="submit" value="послать оценку"></form>
<?php

А якщо відвідувач вже голосував за дану статтю - тобто cookie з відповідним ім'ям у нього встановлений...

}
else {

...то повідомимо його про це (мал. 10.5).

echo ("Ви вже голосували за цю статтю!");

Мал. 10.5. ...але голосування вже відбулося

От і все.

 
На правах реклами: 1 2

:: Меню ::

ГОЛОВНА

Введення

Небагато про Web-программировании

PHP: Історія. Місця. Джерела.

PHP: Основи

PHP: Вибіркове завантаження

PHP: Простий інтернет-магазин

PHP: Папкопотрошилка

PHP: Закачування файлів

PHP: Авторизація доступу

PHP: Гостьова книга

PHP: Система оцінки матеріалів

PHP: Файловий менеджер

PHP: Корисні дрібниці

PHP: Способи передачі даних між окремими сторінками

Висновок

Додаток 1. Перетвори свій сайт на портал

Додаток 2. Використовуй те, що під рукою - і не шукай завжди інше

Додаток 3. На сайті - як в "Вінде"


:: Реклама ::

  Настройка і оптимізація комп'ютера Качественные ракетки фирмы yonex для любителей бадминтона.

 

:: Статистика ::

  Індекс цитування

:: Навігація ::

Головна

Гостьова книга

Додати у вишукане  

 

 

 


Copyright © Asentli, 2008