Ваш первый Сайт С использованием РНР-скриптов

ПРОГРАММА ДЛЯ ОЦЕНКИ ПОСЕТИТЕЛЯМИ WEB-СТРАНИЦЫ

Ну и теперь составим программу (ocenka.php) для оценки посетителем вашей страницы по пятибалльной шкале. Эта программа выводит небольшую форму, состоящую из выпадающего списка с оценками (от 1 до 5) и кнопкой «Оценить», при нажатии на которую запускается эта же программа

(ocenka.php), которая высчитывает средний балл и выводит его в окно брау­зера (рис. 6.6).

^Кездодство ж&нт этой' ет«т»е;'4 Средняяоценка:4Ш ;у - '

{5 (Отличный материал!) "т] Оценить J

Рис. 6.6

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

Сначала в рабочей папке сервера htdocs создайте подпапку осепка. Там у нас будет храниться текстовый файл (он будет создан программно) с коли­чеством оценок и средней оценкой.

Программа несложная, и если вы разобрались с программой второго ва­рианта счетчика (см. листинг 4.7), то разобраться с приведенным внизу лис­тингом (6.5) не составит труда. Создайте в редакторе новый файл и сохраните его в рабочей папке htdocs под названием ocenka.php.

Листинг 6.5 (файл Ocenka.Php) <?Php

$dir="ocenka";

$ocenka=$ind.".txt";

$way="$dir/$ocenka";

If(!isset($_POST['bair]))

{

If(file_exists($way)==true) {

$file=file($way); $vsego=(int)$file[0]; $srednee=(float)$file[l];

Echo "<B id=lolo2>I^H4ecTBO Оценок Этой Статье: $vsego</Bxbr>";

Echo "<B Id=lolo2>CpeДняя Оценка: $srednee</Bxbr>"; }

Echo "<form method=POST action=ocenka. php> <input name=ind type=HIDDEN value=$ind> <select name=ball>

<option value=5>5 (Отличный материал!)</орйоп>

<option value=4>4 (В общем, хорошо!)</option>

<option value=3>3 (Неплохо, но можно было бы и лучше!)</орйоп> <option value=2>2 (Плохо, зря я только зашел сюда!)</ор1юп>

<option value=l>l (Лучше бы ты землю пахал, чем делал бы сайты!)</орНоп>

</select>

<input name=submut type=SUBMIT Уа1Ие=Оценить>

</form>"; }

Else

{

$ball=$_POST['bair]; $ind=$_POST['ind']; $ocenka=$ind.".txt"; $way="$dir/$ocenka";

If(file_exists($way)!=true) {

$vsego=l; $srednee=$ball; $count=$vsego."n".$srednee; $open=fopen($way, "w+"); fwrite($open, Scount);

Fclose(Sopen);

}

Else {

$file=file($way); $vsego=(int)$file|0); $srednee=(float)$file[lj; $vsego++;

$srednee=($srednee*($vsego-l)+$ball)/$vsego;

$srednee=round($srednee, 2);

$count=$vsego."n".$srednee;

$open=fopen($way, "r+");

Flock($open, LOCK EX);

Fwrite($open, Scount);

Flock($open, LOCK UN);

Fclose($open);

}

Echo "<div Id=,lolo'>БлAГOДApИм Вас За OueHKy</divxbr>";

Echo "<a href=# onClick=^istory. backO'xbutton>BepHyTbCfl</button></a>";

}

?>

Разберем строчки кода. Многие из них вам должны быть уже понятны. <?php

$dir="ocenka"; - присваиваем переменной $dir название папки, где будет храниться текстовый файл с количеством оценок и средней оценкой. Эта папка (осепка) должна быть вами создана заранее;

$ocenka=$ind.".txt"; - переменной Socenka (це путать с названием папки!) присваиваем название текстового файла с количеством оценок и средней оценкой. Переменная $ind у нас определена (пока не нажата кнопка «Оце­нить») на странице statji.php. Текстовый файл будет иметь такое же назва­ние, но, естественно, с расширением txt. Не пропустите точки! В этой строке их две: первая - знак конкатенации или соединения, вторая внутри кавычек (расширение любого файла начинается с точки);

$way="$dir/$ocenka"; - переменной $way присваиваем путь к текстовому файлу. Вообще можно было 3 строчки соединить в одну (Sway="ocenka"/Sind.".txt"), А можно написать так, как я. Выбирать вам;

If(!isset($_POST['ball'])) - проверяется условие, которое истинно, если эле­мента суперглобального массива SPOSTf'ball'] еще не существует, т. е. кнопка в форме «Оценить» еще не нажата и данные из формы еще не полу­чены. Именем name=ball мы назвали выпадающий список select (сама форма будет выводиться несколькими строчками ниже);

If - итак, код между фигурными скобками под номером 1 будет выполнять­ся, если кнопка «Оценить» еще не нажата;

If(file_exists($way)==true) - внутри первого условия ставим второе, которое истинно, если текстовый файл с количеством оценок и средним баллом уже создан, а создается он при первой же оценке (смотри этот код чуть ниже);

2{ - итак, код между фигурными скобками под номером 2 будет выполнять­ся, если текстовый файл уже был создан;

Sfile=file($way); - функция file, если помните, создает массив строк из содер­жимого текстового файла (путь к нему находится в переменной Sway). В тек­стовом файле (он будет создан ниже) будет две строки. В первую строку бу­дет записано общее число оценок, во вторую - средний балл. Таким образом, в переменной Sfile (не путать с функцией file) будет простой массив с двумя элементами;

Svsego=(int)$file[0]; - присваиваем переменной Svsego нулевой элемент мас­сива Sfile. Оператором (int) мы указываем, что нулевой элемент - целочис­ленное число. Это действительно так, поскольку общее количество оценок не может быть дробным числом;

Ssrednee=(float)S file [1]; - присваиваем переменной Ssrednee первый элемент массива Sfile. Оператором (float) мы указываем, что первый элемент - деся­тичное число. Это действительно так, поскольку средний балл у нас будет дробным числом;

Echo "<В id=lolo2>Количество оценок этой статье: $vsego</B><br>";

Echo "<В id=lolo2>Средняя оценка: $srednee</B><br>"; - выводим элемен­ты массива в браузер, т. е. общее число оценок и средний балл; 2}

Echo "<form method=POST action=ocenka.php> - создаем форму, данные ко­торой методом POST отсылаем на эту же страницу ocenka.php;

<input name=ind type=HIDDEN value=$ind> - вводим скрытое поле для пе­редачи на эту же страницу после нажатия кнопки «Оценить» значение пере­менной $ind. Зачем это нужно объяснялось в разборе прошлого листинга 6.4;

<select name=ball> - создаем раскрывающийся список с именем name=ball, Состоящий из пяти элементов, заданных тегом <option>. Каждому элементу списка присваивается свое значение value (от одного до пяти). Текст между тегами <option> и </option> - это то, что увидит посетитель в списке. При нажатии кнопки «Оценить» на страницу, указанную в теге <form>, т. е. на эту же страницу, передастся элемент суперглобального массива $ POST'['ball'], ко­торое будет содержать то значение value (балл), которое выберет посетитель; <option value=5>5 (Отличный материал!)</option> <option value=4>4 (В общем, xopotuo!)</option> <option value=3>3 (Неплохо, но можно было бы и получше!)</option> <option value=2>2 (Плохо, зря я только зашел сюда!)</option> <option value=l>l (Лучше бы ты землю пахал, чем делал бы сай­ты !)</option>

</select> - окончание раскрывающегося списка;

<input name=submut type=SUBMIT Value=Oцeнumь> - кнопка для отправки данных из этой формы. В данном случае у нас двое данных: выбранная оцен­ка, которая поместится в элемент суперглобального массива $ POST ['ball'] И значение переменной $ind, которое поместится в элемент суперглобального массива $_POST['ind'] </form>";

1} - окончание кода между фигурными скобками под номером 1, который будет выполняться, если кнопка «Оценить» еще не нажата;

Else - если кнопка «Оценить» нажата и данные из формы отправлены, то вы­полнится код между фигурными скобками под номером 3;

З{

$ball=$ POST['ball']; - переменной $ball присваиваем значение элемента су­перглобального массива $ POST ['ball'], т. е. оценку, которую дал посетитель;

$ind=$_POST['ind']; - заново определяем переменную Sind, присваиваем зна­чение элемента суперглобального массива $ POST ['ind']',

$ocenka=$ind. ".txt"; - поскольку прошлую переменную $ind мы определи или заново, так же заново нужно определить переменные Socenka и Sway; Sway ="$dir/Socenka"; '

If(file_exists(Sway)!=true) - если текстовой файл с количеством оценок и средней оценкой еще не создан, то создим его в блоке команд в фигурных скобках под номером 4;

4{ - весь код в фигурных скобках под номером 4 выполнится только один - единственный раз, когда страницу оценят впервые;

Svsego=l; - переменной Svsego присваиваем единицу. Текстовый файл созда­ется только один раз, когда странице впервые дают оценку. Естественно, об­щее число оценок становится равным единице;

Ssrednee=$ball; - переменной Ssrednee, где потом мы будем хранить средний балл, присваиваем введенный посетителем первый балл. Поскольку у нас только одна оценка, средний балл, естественно, будет равен первой оценке;

$count=Svsego. "п".Ssrednee; - создаем строку, вернее, две строки, разделен­ные символом «п»;

$open=fopen($way, "w+"); - создаем и открываем, наконец, новый текстовый файл, путь к которому указан в переменной Sway;

Fwrite($open, Scount); - записываем в созданный файл значение переменной Scount. После этой команды в текстовом файле будет две строки. В первой строке будет единица, во второй - средний балл, равный первой оценке;

Fclose(Sopen); - закрываем текстовый файл;

4}

Else - если текстовый файл с количеством оценок и средней оценкой уже соз­дан, т. е. страницу оценивают уже не впервые, то выполнится блок команд в фигурных скобках под номером 5;

(5

Sfile=file($way); - как w раньше (смотри данный код чуть выше), создаем массив строк из текстового файла и присваиваем элементы этого массива переменным Svsego и Ssrednee; Svsego=(int)S fde [0]; Ssrednee=(float) S file [1];

Svsego++; - увеличиваем общее число оценок на единицу, поскольку посети­тель сделал очередную оценку;

Ssrednee=($srednee*($vsego-l)+Sball)/$vsego; - здесь вычисляем среднее зна­чение оценок, т. е. средний балл. Постарайтесь разобраться в этой строке са­ми. Здесь чистая математика. Мы получаем десятичное число с множеством цифр после запятой;

$srednee=round($srednee, 2); - при помощи математической функции round Округляем полученное число Ssrednee до двух знаков после запятой (второй аргумент этой функции - число 2). Думаю, этого достаточно;

$count=$vsego."n".$srednee; - опять создаем две строки с уже новыми дан­ными;

$open=fopen($way, "г+"); - открываем текстовый файл для записи; Flock($open, LOCK EX); - делаем блокировку текстового файла. Зачем это нужно, объяснено в разд. 4.3;

Fwrite($open, Scount); - записываем новые данные в текстовый файл; Flock($open, LOCK UN); - разблокируем текстовый файл; Fclose($open); - закрываем файл;

5} - окончание блока команд, выполняющихся, когда текстовый файл с коли­чеством оценок и средней оценкой был уже создан; Echo "<div id='lolo'>Благодарим вас за оценку</div><br> ";

Echo "<а href=# onClick= 'history.back()'><ЬиПоп>Вернутъся</ЬиПоп></a> "; - Выводим в браузер надпись и кнопку для возврата (аналогично, как и в прошлом листинге 6.4);

3} - окончание блока команд, выполняющихся, если кнопка «Оценить» была

Нажата и данные из формы отправлены.

?>

Поле того, как все правильно будет сделано, запустите программу Statji.php. Вверху у вас должна быть двухколонная таблица с указанием на­звания статей и их авторов. На рис. 6.7 показана верхняя часть окна браузера, как у меня.

J ; Наз&оние статьи

| Автор статьи

^крещение вечности

Цдлк&фт Сгель*ер

Стратегический план Вселенной

|лл№Йрт Стелнюр

(Солнечная Система - пюрение рдаумо?

Jjdwv. Ввйцвх<лвкйй

J

[Планеты других звёзд

1|Л КС АИФОМ АЛИТИ

{Судьба планетных систем

Ijr. М {уйиицки*

[Параллельные вселенные

- ' ш*ж« Т«гма£к ' «

Рис. 6.7

Данные шесть статей я нашел в Интернете и расположил их по папкам с 1 по 6 и в HTML-страницу каждой статьи вставил meta-теги (см. разд. 6.3, рис. 6.4). При нажатии на ссылку какой-либо из статей она открывается в от­дельном окне. Для вывода в таблице ссылки на новую статью вам надо будет только создать папку (в данном случае под номером 7), вставить туда HTML - файл со статьей и не забыть в этом HTML-файле написать пару строк (meta- теги) с указанием названия статьи и его автора.

Flip Ш

1Ш1111

После двухколонной таблицы в браузер выведется одноколонная, с отзы­вами посетителей, а также текстовые поля для ввода данных посетителя и его нового отзыва (рис. 6.8).

Здесь 8ьх можете оценить подборку и оставить своё сообщение

Н&тр «нмй$г ф^^йга ЦМЛШ

Ошйшт ^«a&fpit /

Адексамдр lolOE^Uvlchpii, Цйб«*вл£Но; 22.08.2007

Iliii

Алексей «-«tail: Akx@aket. ni Добавлено: 22Я8.2007 Статьи иеяяохие. но хотелось бы побольше

Ваше am Г

Ваш г

ПРОГРАММА ДЛЯ ОЦЕНКИ ПОСЕТИТЕЛЯМИ WEB-СТРАНИЦЫ

Добавить < v •

Рис. 6.8

Введите вымышленные данные и оставьте отзыв. После нажатия кнопки «Добавить» вы со страницы statji.php попадете на страницу soobshenie.php. Вы можете увидеть сообщение, как на рис. 6.1. Жмите «Отмена». Далее на странице soobshenie.php вы увидите кнопку «Вернуться». После нажатия на нее вы опять должны попасть на страницу statji.php. Ваши введенные дан­ные и отзыв должны появиться в таблице отзывов. Я, например, ввел 3 отзы­ва (см. рис. 6.8).

Ну, а дальше, внизу в браузере, должен появиться выпадающий список с оценками и кнопка «Оценить», как на рис. 6.6. Правда, сначала вы не уви­
дите там надписей о количестве оценок и среднем балле. После нажатия на кнопку вы попадете на страницу ocenka.php с кнопкой «Вернуться». Нажми­те на нее, и вы вновь попадете на страницу statji.php, но там уже отобразится и количество оценок, и средний балл. Если у вас все получилось, то прекрас­но, однако есть один нюанс. Один и тот же посетитель может оценивать одну и ту же страницу несколько раз и ради прикола наставить вам кучу колов и двоек. Как этого избежать? Предлагаю решить вам эту задачу самостоятель­но. Я лишь могу подсказать один из способов. Вам нужно будет в папке осепка создать (программно) еще один текстовый файл, где будут храниться IP-адреса посетителей, которые выставили оценку. Как только посетитель выставил оценку, его ip заносится в этот текстовый файл (если такого ip там еще нет). Если такое ip уже есть, то выводится сообщение типа «Вы уже оце­нивали», и выполнение программы оценки ocenka.php приостанавливается. Конечно, этот метод крайне неэффективен, поскольку на одном ip может на­ходиться много пользователей. Получается, что другие пользователи с таким же ip уже не смогут поставить оценку. Можно так же просто регистрировать посетителей, сохранять его логин и пароль в каком-нибудь текстовом файле. И если посетитель с парой «логин-пароль» уже ставил оценку, ему будет за­прещено снова оценивать страницу.

Ваш первый Сайт С использованием РНР-скриптов

Создание сайта

Итак, при помощи данной книги вы создали сайт. Конечно, сайт в таком виде не очень привлекателен, так как он создавался исключительно для при­мера. Но используя полученные знания в этой книге, …

ИСПОЛЬЗОВАНИЕ СЕРВИСА ROBOXCHANGE ДЛЯ ОПЛАТЫ

Если у вас нет никакой возможности получить персональный аттестат, или просто лень это делать, то для оплаты товаров со своего сайта вы можете воспользоваться сервисом Roboxchange. Этот сервис дает возможность …

ИСПОЛЬЗОВАНИЕ СЕРВИСА WEB MERCHANT INTERFACE ДЛЯ ОПЛАТЫ

Сервис Web Merchant Interface позволяет получать денежные средства на свои электронные кошельки от клиентов при оплате ими электронных товаров на вашем сайте. Электронные кошельки WebMoney и Yandex мы с вами …

Как с нами связаться:

Украина:
г.Александрия
тел./факс +38 05235  77193 Бухгалтерия

+38 050 457 13 30 — Рашид - продажи новинок
e-mail: msd@msd.com.ua
Схема проезда к производственному офису:
Схема проезда к МСД

Партнеры МСД

Контакты для заказов оборудования:

Внимание! На этом сайте большинство материалов - техническая литература в помощь предпринимателю. Так же большинство производственного оборудования сегодня не актуально. Уточнить можно по почте: Эл. почта: msd@msd.com.ua

+38 050 512 1194 Александр
- телефон для консультаций и заказов спец.оборудования, дробилок, уловителей, дражираторов, гереторных насосов и инженерных решений.