Отправляет email-рассылки с помощью сервиса Sendsay

PHP за чашкой кофе

  Все выпуски  

PHP за чашкой кофе Чашечка седьмая — решения и примеры


Информационный Канал Subscribe.Ru

PHP за чашкой кофе

Чашечка седьмая — решения и примеры

PHP за чашкой кофе

Приветствую!

Перед тем как начать вываливать на Ваши головы ещё одну порцию информации хочу рассказать о новой возможности: если Вы не желаете получать вместе с выпусками нашей рассылки дополнительную кучу рекламы, то можете подписаться на рассылку на нашем сервере. Рассылка для этих подписчиков приходит:

  1. Раньше на пару-тройку часов
  2. Без рекламы

Так как этот сервис пока что тестируется, я заранее приношу свои извинения за возможные ошибки в доставке писем.


Также позвольте мне исправить ту ошибку, которую я допустил в прошлой чашечке. Цитирую сам себя:Несмотря на явную схожесть, команды require(); и include(); серьёзно различаются: команда require(); выполняется единожды перед началом выполнения скрипта, а команда inlcude(); каждый раз когда встречается в коде и Вы легко можете помещать команду inlcude(); в циклы.

На самом деле в последних версиях PHP эти команды действуют абсолютно одинаково, вот только в том случае, если включаемый файл не существует, то команда include(); просто сообщает об этом и продолжает выполнять скрипт, в то время как команда require(); вызывает фатальную ошибку и завершает работу скрипта. Подробности обсуждения в нашем форуме.

Сегодня я подробно расскажу о том, как решаются предыдущие домашние задания, а также покажу несколько примеров по работе с условиями, циклами и командами подключения файлов (include(), require()).

Таблица квадратов

Заданием пятой чашечки было написание скрипта, который выводил бы таблицу квадратов чисел от 3 до 47. Многие из читателей справились с этим заданием, ведь решение было достаточно простым. Вот код, который получился у меня:

Пример 1. Таблица квадратов от 3 до 47:
<html>

<head><title>Таблица квадратов</title>
</head><body>
<table border="1px" cellspacing=1 cellpadding=3>
<tr><td> <em>x</em> </td><td> <em>x<sup>2</sup></em> </td></tr>
<?
// запускаем цикл от 3 до 47
for ($i=3; $i<=47; $i++) {
// находим переменную $k, которая содержит квадрат числа
$k=$i*$i;
// выводим в первой ячейке число, а во-второй — его квадрат
echo("<tr><td>" . $i . "</td><td>" . $k . "</td></tr>");
}
?>
</table>
</body></html>

Как видите, всё легко и просто. Результат работы скрипта должен быть примерно таким:

Рисунок 1. Результат работы примера 1 (сокращён):

Калькулятор

Таким было задание прошлой чашечки, и, судя по письмам, задание оказалось несколько сложнее. Что-ж, посмотрим, как нужно было его решать:

Пример 2. Файл calc.html:
<html>
<head><title>Калькулятор</title>
</head><body>
<h3>Калькулятор</h3>
<form action="calc.php">
<input type="text" name="var1" value="5" style="width: 50px;">
<input type="text" name="var2" value="5" style="width: 50px;">
<br>действие: <select name="action"><option value=1>сложить</option>
<option value=2>вычесть</option>
<option value=3>умножить</option>
<option value=4>разделить</option></select>
<br><input type="submit" value="Вперёд!">
</form>
</body></html>

Внешне это выглядит примерно так:

Рисунок 2. Внешний вид калькулятора:

Страшновато, конечно, но ничего, сойдёт. У многих возник вопрос, а что будет известно скрипту, когда пользователь нажмёт кнопку «Вперёд!»? Посмотрим:

  1. Значение первого текстового поля — в переменной $var1
  2. Значение второго текстового поля — в переменной $var2
  3. И переменная $action, в которой будет значение от 1 до 4 в зависимости от того, что выбрал пользователь.

Вот тут главное не спутать: слова «сложить», «вычесть» и др. — это лишь подписи, которые отображаются в списке. Скрипт о них никогда и не узнает, а узнает он о значении, указанном в свойстве value тега <option>.

Вот как выглядит скрипт calc.php:

Пример 3. Скрипт calc.php:
<?

switch (
$action) {
// смотрим, чему же равна переменная $action
case 1:
// 1 — это сложение
echo ($var1 . "+" . $var2 . "=");
// выводим переменную $var1, затем символ
// «+», затем — $var2, затем — «=»
echo ($var1+$var2);
// а потом — результат сложения
// также будет и в остальных действиях
break;
case
2:
// 2 — это вычитание
echo ($var1 . "-" . $var2 . "=");
echo (
$var1-$var2);
break;
case
3:
// 3 — это умножение
echo ($var1 . "*" . $var2 . "=");
echo (
$var1*$var2);
break;
case
4:
// 4 — это деление
echo ($var1 . "/" . $var2 . "=");
echo (
$var1/$var2);
break;
default:
// если вдруг значение переменной $action
// не равно 1, 2, 3 или 4, то выводим ошибку:
echo ("Такого действия я не знаю");
}
?>

Посмотрим, что будет, если мы выберем сложение, а в качестве чисел — две пятёрки:

Рисунок 3. 5+5 равно...:

Итак, скрипт работает идеально. Или не совсем? Вспомните, есть в математике одно правило, а наш калькулятор его не учитывает. Правило это — «На ноль делить нельзя!». Интересно, а что будет, если всё-таки попытаться?

Рисунок 3. Делить на ноль:

Вот вам и пожалуйста: ошибка. Видать, и вправду нельзя на ноль делить... А жаль. Наша задача — предотвратить подобные ситуации и сделать так, чтобы при попытке деления на ноль вместо непонятного текста появлялось нормальное пояснение. Что делать? Воспользуемся условиями!

Пример 4. Правильный калькулятор:
<?

switch (
$action) {
// смотрим, чему же равна переменная $action
case 1:
// 1 — это сложение
echo ($var1 . "+" . $var2 . "=");
// выводим переменную $var1, затем символ
// «+», затем — $var2, затем — «=»
echo ($var1+$var2);
// а потом — результат сложения
// также будет и в остальных действиях
break;
case
2:
// 2 — это вычитание
echo ($var1 . "-" . $var2 . "=");
echo (
$var1-$var2);
break;
case
3:
// 3 — это умножение
echo ($var1 . "*" . $var2 . "=");
echo (
$var1*$var2);
break;
case
4:
// 4 — это деление
if ($var2==0) {
echo (
"Делить на ноль нельзя!");
} else {
echo (
$var1 . "/" . $var2 . "=");
echo (
$var1/$var2);
}
break;
default:
// если вдруг значение переменной $action
// не равно 1, 2, 3 или 4, то выводим ошибку:
echo ("Такого действия я не знаю");
}
?>

Пожалуйста! Всё готово. Теперь при попытке деления на ноль Вы увидите что-то такое:

Рисунок 4. Разделить число на ноль не удастся:

А вот пример того, как можно было решить задачу, используя только конструкцию IF:

Пример 5. Тот же калькулятор, но без использования switch:
<?

if (
$action==1) {
// 1 — это сложение
echo ($var1 . "+" . $var2 . "=");
// выводим переменную $var1, затем символ
// «+», затем — $var2, затем — «=»
echo ($var1+$var2);
// а потом — результат сложения
// также будет и в остальных действиях

} elseif ($action==2) {
// 2 — это вычитание
echo ($var1 . "-" . $var2 . "=");
echo (
$var1-$var2);

} elseif (
$action==3) {
// 3 — это умножение
echo ($var1 . "*" . $var2 . "=");
echo (
$var1*$var2);

} elseif (
$action==4) {
// 4 — это деление
if ($var2==0) {
echo (
"Делить на ноль нельзя!");
} else {
echo (
$var1 . "/" . $var2 . "=");
echo (
$var1/$var2);
}

} else {
// если вдруг значение переменной $action
// не равно 1, 2, 3 или 4, то выводим ошибку:
echo ("Такого действия я не знаю");
}
?>

include() и require()

А сейчас я хочу показать несколько примеров с выражениями include() и require(). Вот посмотрите на такой пример (файл inc1.php):

Пример 6. Пример использования include (файл inc1.php):
<?

$a=1;
include (
"inc2.php");
?>

А вот код файла inc2.php:

Пример 7. Пример использования include (файл inc1.php):
<?

echo (
$a);
?>

Действия PHP:

  1. Присвоит переменной $a значение 1
  2. Подключит скрипт inc2.php
  3. Выведет значение переменной $a (то есть 1)

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

Простой сайт

А сейчас, на основе тех команд, что мы уже изучили попытаемся сделать простой шаблон для сайта. Основным скриптом сайта будет файл с именем index.php. Что в нём должно быть:

  • Вывод шапки сайта
  • Вывод той страницы, которую запросил пользователь
  • Вывод сообщения об ошибке, если такой страницы не существует
  • Вывод низа сайта

Шапку и низ сайта мы будем держать в двух файлах: top.php и bottom.php, а содержимое страниц будет находиться в файлах, которые мы расположим в папке text и будем брать их оттуда.

Как определить, какая страница нужна пользователю? Каждая страница нашего сайта будет иметь такой адрес: http://www.site.ru/index.php?page=название_страницы, значит уже в самом начале работы скрипту будет известна переменная с именем $page. Она и будет содержать адрес нужной страницы.

Пример 8. Простейший шаблонизатор. Файл index.php:
<?

include_once (
"top.php");
// подключаем шапку сайта (только один раз)

if (!$page) $page="index";
// если страница явно не указана, то это главная страница

if (file_exists("text/" . $page . ".php")==FALSE) $page="404";
// это поясним подробнее: функция file_exists (ИМЯ ФАЙЛА)
// говорит нам, существует файл с таким именем, или нет
// В условии сказано: если файл не существует (функция возвращает
// FALSE), то в качестве страницы берём файл с текстом ошибки 404
// имя проверяемого файла: "text/" . $page . ".php"

include ("text/" . $page . ".php");
// подключаем саму страницу

include_once ("bottom.php");
// подключаем низ сайта (только один раз)
?>

Теперь всё, что осталось сделать — это создать файлы top.php и bottom.php, а также все файлы всех страниц сайта. Это достаточно просто. Если же у Вас возникают какие-то сложности, то Вы легко можете скачать пример такого сайта.

Ну, на сегодня у меня всё. Если что не так — пишите!

До встречи!


http://subscribe.ru/
http://subscribe.ru/feedback/
Подписан адрес:
Код этой рассылки: inet.webbuild.phplearn
Отписаться

В избранное