Вы находитесь на странице: 1из 50

Содержание

Введение……………………………………………………..………………….…3
1. PHP как язык Web программирования………………………………………..5
1.1. История PHP. Характеристики PHP……………………………………..….5
1.2. Традиционность, простота, эффективность. Безопасность и гибкость…..7
1.3. Конфигурация РНР……………………………………………………..…...10
1.3.1. Общие параметры конфигурации………………………………….….....10
1.3.2. Основные конструкции РНР…………………………………….…...…..13
1.3.3. Внедрение HTML в код РНР………………………..……….….…..……15
2. Методика преподавания языка Web программирования PHP ……………21
2.1. Тематическое планирование преподавания языка Web программирования
PHP …………………………………………………..……………………….….21
2.2. Методология обучения Web программированию в PHP….………..……24
2.3. Поурочные разработки изучения Web программирования PHP ….........30
Заключение…………………………………………………………………....…34
Литература……………………….………………………………………………35
Приложения ……………………………………………………………………..36
Введение
Последние пять лет ознаменовались фантастическим развитием
Интернета и новых способов общения между людьми. На переднем крае
этого явления находится World Wide Web (WWW). Ежедневно в этой новой
коммуникационной среде открываются тысячи новых сайтов, а потребителям
предлагаются новые виды услуг. Вместе с бурным развитием рынка появился
огромный спрос на новые технологии и разработчиков, владеющих ими. Если
вы читаете этот абзац, вероятно, вы уже являетесь или скоро станете web-
разработчиком. Впрочем, какой бы ни была ваша профессия, вы наверняка
слышали о замечательной новой технологии — РНР.
Вначале мы познакомимся с языком РНР, получим представление о его
истории и возможностях, а также основную информацию, необходимую для
разработки сайтов с поддержкой РНР.
Цель данной курсовой работы: создать элективный курс
«Преподавание языка Web программирования PHP» и разработать методику
его преподавания.
Задачи курсовой работы
1. рассмотреть, что представляет собой язык Web программирования
PHP
2. наметить основные аспекты в содержании полного курса
преподавания языка PHP
3. составить тематический план преподавания Web программирования
PHP
4. составить примерное поурочное планирование изучения языка Web
программирования PHP
5. разработать поурочную систему обучения языку Web
программирования PHP в виде элективных курсов
Актуальность темы
В современном мире знание языков Web программирования очень
важно. Язык PHP является одним из наиболее простых языков Web

2
программирования, к тому же на PHP пишутся практически все Internet
сайты и странички. Поэтому я не случайно взял темой своей курсовой работы
разработку методики преподавания языка Web программирования PHP.
После прохождения курсов обучения языку Web программирования PHP
ученики смогут понять структуру написания сайтов и даже смогут написать
свою собственную Internet страничку. Эти курсы помогут ученикам в выборе
их профиля.
Данная курсовая работа состоит из введения, двух глав, заключения, из
15 источников и 11 приложений.

3
1. PHP как язык Web программирования
1.1. История PHP. Характеристики PHP
История РНР начинается с 1995 года, когда независимый программист-
контрактник по имени Расмус Лердорф (Rasmus Lerdorf) написал сценарий
Perl/CGI для подсчета количества посетителей сайта, прочитавших его
онлайновое резюме. Его сценарий решал две задачи: регистрацию данных
посетителя и вывод количества посетителей на web-странице. Развитие
WWW еще только начиналось, никаких специальных средств для решения
этих задач не было, и к автору хлынул поток сообщений с вопросами.
Лердорф начал бесплатно раздавать свой инструментарий, названный
Personal Home Page (РНР) или Hypertext Processor (гипертекстовый
процессор).
Шумный успех инструментария РНР заставил Лердорфа приступить к
разработке расширений РНР. Одно из расширений преобразовывало данные,
введенные на форме HTML, в символические переменные, что позволяло
экспортировать их в другие системы.
Новая версия РНР пользовалась исключительной популярностью, и
вскоре образовалась основная команда разработчиков. Они сохранили
исходную концепцию внедрения программного кода прямо в HTML и
переписали заново механизм лексического анализа, что привело к появлению
РНР 3.0. К моменту выхода версии 3.0 в 1997 году свыше 50 000
пользователей применяли РНР для улучшения своих web-страниц.
В течение следующих двух лет стремительное развитие РНР
продолжалось. В язык добавлялись сотни новых функций, а количество
пользователей стремительно росло. В начале 1999 года служба Netcraft
сообщила о том, что, по минимальным оценкам, число пользователей РНР
превысило 1 000 000, в результате чего РНР стал одним из самых популярных
сценарных языков в мире.
В начале 1999 года было объявлено о предстоящем выходе РНР 4.0.
Хотя одной из сильнейших сторон РНР была эффективность выполнения

4
сценариев, при первоначальных разработках не предполагалось, что на базе
РНР будут строиться крупномасштабные приложения. По этой причине была
начата работа над более устойчивым механизмом лексического анализа,
больше известным под названием Zend.
РНР лучше всего охарактеризовать как работающий на стороне сервера
встроенный язык сценариев Web, позволяющий разработчикам быстро и
эффективно строить динамические web-приложения. Среди ценных
заимствованных возможностей — поддержка регулярных выражений,
мощные средства работы с массивами, объектно-ориентированная
методология и обширная поддержка работы с базами данных.
При написании приложений, выходящих за рамки традиционной,
статической методологии разработки web-страниц (то есть HTML), РНР
также может послужить ценным инструментом для создания и управления
динамическим содержанием, который используется наряду с JavaScript,
стилями, WML (Wireless Markup Language) и другими полезными языками.
Благодаря наличию сотен стандартных функций РНР в состоянии решить
практически любую задачу. В нем имеется обширная поддержка создания
графики и операций с ней, математических вычислений, средств электронной
коммерции и таких популярных технологий, как XML (Extensible Markup
Language), ODBC (Open Database Connectivity) и Macromedia Shockwave.
Широкий выбор возможностей избавляет от необходимости рутинной и
непростой работы по подключению сторонних модулей, поэтому многие
разработчики со всего мира останавливают свой выбор на РНР.
Одним из главных достоинств РНР является тот факт, что он внедряется
прямо в HTML-код, поэтому программисту не приходится писать программу
с множеством команд для простого вывода HTML. Код HTML и РНР можно
чередовать по мере необходимости. РНР позволяет написать фрагмент
следующего вида:
<html>
<title><? print "Hello world!"; ?></title>

5
</html>
Сообщение "Hello world!" выводится в заголовке web-страницы.
Команда print внутри конструкции, которая обычно называется
экранирующими последовательностями РНР (<?...?>), представляет собой
законченную программу. Ни длинного кода инициализации, ни включения
библиотек — программа состоит лишь из того кода, который
непосредственно решает поставленную задачу!
Для выполнения сценариев РНР необходимо предварительно
установить и настроить программное обеспечение РНР на сервере.
Характеристики РНР
Главным фактором при проектировании языка РНР является
практичность. РНР должен предоставить программисту средства для
быстрого и эффективного решения поставленных задач. Практический
характер РНР обусловлен пятью важными характеристиками:
• традиционностью;
• простотой;
• эффективностью;
• безопасностью;
• гибкостью.
1.2. Традиционность, простота, эффективность. Безопасность и
гибкость
Традиционность. Язык РНР кажется знакомым программистам,
работающим в разных областях. Многие конструкции языка позаимствованы
из Си Perl, а нередко код РНР практически неотличим от того, что
встречается в типичных программах С или Pascal. Это заметно снижает
начальные усилия при изучении РНР.
Простота. Сценарий РНР может состоять из 10 000 строк или из одной
строки — все зависит от специфики вашей задачи. Вам не придется
подгружать библиотеки, указывать специальные параметры компиляции или
что-нибудь в этом роде. Механизм РНР просто начинает выполнять код после

6
первой экранирующей последовательности (<?) и продолжает выполнение до
того момента, когда он встретит парную экранирующую последовательность
(?>). Если код имеет правильный синтаксис, он исполняется в точности так,
как указал программист.
Эффективность.Эффективность является исключительно важным
фактором при программировании для многопользовательских сред, к числу
которых относится и WWW. В РНР 4.0 был реализован механизм выделения
ресурсов и обеспечена улучшенная поддержка объектно-ориентированного
программирования, а также средства управления сеансом. В последней
версии появился и механизм подсчета ссылок (reference counting),
предотвращающий выделение лишней памяти.
Безопасность и гибкость.
Безопасность. РНР предоставляет в распоряжение разработчиков и
администраторов гибкие и эффективные средства безопасности, которые
условно делятся на две категории: средства системного уровня и средства
уровня приложения.
Средства безопасности системного уровня
В РНР реализованы механизмы безопасности, находящиеся под управлением
администраторов; при правильной настройке РНР это обеспечивает
максимальную свободу действий и безопасность. РНР может работать в так
называемом безопасном режиме (safe mode), который ограничивает
возможности применения РНР пользователями по ряду важных показателей.
Например, можно ограничить максимальное время выполнения и
использование памяти (неконтролируемый расход памяти отрицательно
влияет на быстродействие сервера). По аналогии с cgi-bin администратор
также может устанавливать ограничения на каталоги, в которых пользователь
может просматривать и исполнять сценарии РНР, а также использовать
сценарии РНР для просмотра конфиденциальной информации на сервере
(например, файла passwd).
Средства безопасности уровня приложения

7
В стандартный набор функций РНР входит ряд надежных механизмов
шифрования. РНР также совместим с многими приложениями независимых
фирм, что позволяет легко интегрировать его с защищенными технологиями
электронной коммерции (e-commerce). Другое преимущество заключается в
том, что исходный текст сценариев РНР нельзя просмотреть в браузере,
поскольку сценарий компилируется до его отправки по запросу пользователя.
Реализация РНР на стороне сервера предотвращает похищение
нетривиальных сценариев пользователями, знаний которых хватает хотя бы
для выполнения команды View Source.
Тема безопасности настолько важна, что ей посвящена целая глава.
Гибкость. Поскольку РНР является встраиваемым (embedded) языком,
он отличается исключительной гибкостью по отношению к потребностям
разработчика. Хотя РНР обычно рекомендуется использовать в сочетании с
HTML, он с таким же успехом интегрируется и в JavaScript, WML, XML и
другие языки. Кроме того, хорошо структурированные приложения РНР
легко расширяются по мере необходимости (впрочем, это относится ко всем
основным языкам программирования).
Нет проблем и с зависимостью от браузеров, поскольку перед
отправкой клиенту сценарии РНР полностью компилируются на стороне
сервера. В сущности, сценарии РНР могут передаваться любым устройствам
с браузерами, включая сотовые телефоны, электронные записные книжки,
пейджеры и портативные компьютеры, не говоря уже о традиционных PC.
Программисты, занимающиеся вспомога-тельными утилитами, могут
запускать РНР в режиме командной строки.
Поскольку РНР не содержит кода, ориентированного на конкретный
web-сервер, пользователи не ограничиваются определенными серверами
(возможно, незнакомыми для них). Apache, Microsoft IIS, Netscape Enterprise
Server, Stronghold и Zeus — РНР работает на всех перечисленных серверах.
Поскольку эти серверы работают на разных платформах, РНР в целом

8
является платформенно-незави-симым языком и существует на таких
платформах, как UNIX, Solaris, FreeBSD и Windows 95/98/NT.
Наконец, средства РНР позволяют программисту работать с внешними
компонентами, такими как Enterprise Java Beans или СОМ-объекты Win32.
Благодаря этим новым возможностям РНР занимает достойное место среди
современных технологий и обеспечивает масштабирование проектов до
необходимых пределов.
Эволюция РНР и признание его мировым сообществом —
классический пример успешного ведения проекта с открытыми исходными
текстами. Широта взглядов создателей, поддержка сообщества и хорошее
сопровождение кодовой базы привели РНР к успеху, о котором многие
коммерческие проекты могут лишь мечтать. Я с оптимизмом смотрю в
будущее РНР и рекомендую каждому web-разработчику попробовать его в
деле. Возможно, вы, как и я, уже не расстанетесь с ним».
1.3. Конфигурация РНР
Все параметры конфигурации находятся в файле php.ini, который по
умолчанию копируется в каталог /usr/local/lib/ в процессе установки.
Независимо от платформы и web-сервера, используемого в сочетании с
РНР, файл php.ini содержит одинаковый набор стандартных параметров,
позволяющих управлять важными аспектами работы РНР. Этот файл
содержит все параметры, определяющие поведение пакета при выполнении
сценария РНР. Содержимое файла php.ini читается при запуске РНР.
1.3.1. Общие параметры конфигурации
Подробное описание всех конфигурационных параметров выходит за
рамки этой книги, но некоторые директивы используются особенно часто и
заслуживают отдельного упоминания. Другие параметры упоминаются в
соответствующих местах следующих глав.
short_open_tag [on | off]
Параметр short_open_tab [on | off] определяет возможность использования
коротких тегов <?...?> наряду со стандартными тегами.

9
asp_tags [on | off]
Параметр asp_tags [on | off] определяет возможность использования тегов в
стиле ASP наряду со стандартными тегами. При использовании тегов в стиле
ASP фрагменты кода РНР оформляются следующим образом:
<%
print "This is РНР code.";
%>
precision [integer]
Параметр precision [integer] задает количество значащих цифр, отображаемых
в вещественных числах.
safe_mode [on | off]
Безопасный режим особенно удобен в случае, если в вашей системе работают
несколько пользователей. Включение безопасного режима гарантирует, что
пользователь не сможет применить сценарий РНР для получения доступа к
другому файлу в системе — например, файлу passwd на компьютере Linux.
Параметр safe_mode работает только в CGI-версии РНР. За дополнительной
информацией по этой теме обращайтесь к главе 16.
max_execution_time [integer]
Параметр max_execution_time [integer] определяет максимальную
продолжительность выполнения сценариев РНР в секундах. Такое
ограничение предотвращает поглощение ценных системных ресурсов
сценариями, содержащими ошибки.
error_reporting [1-8]
Параметр error_reporting [1-8] определяет уровень выдачи сообщений об
ошибках в РНР. Чем выше значение, тем «чувствительнее» РНР реагирует на
ошибки.
Значение Чувствительность
1 Обычные ошибки
2 Обычные предупреждения
Ошибки лексического
4
анализатора

10
8 Замечания
display_errors [on | off]
Параметр display_errors[on | off] управляет выводом информации об ошибках
в браузере.
log_errors
Параметр log_errors определяет, следует ли регистрировать ошибки в файле.
При включении параметра log_errors файл, в котором регистрируются
ошибки, назначается при помощи параметра error_log.
magic_quotes_gpc
При активизации параметра magic_quotes_gpc все специальные символы,
содержащиеся в пользовательских данных или в базе, автоматически
экранируются обратной косой чертой. Кстати, сокращение gрс означает
«get/post/cookie».
Лично я считаю, что параметр magic_quotes_gpc эффективнее отключить и
использовать явное экранирование специальных символов. Какой бы способ
вы ни выбрали, любые компромиссы приведут к порче данных. Если
параметр magic_quotes_gpc
включен, никогда не экранируйте специальные символы обратной косой
чертой; в противном случае не забывайте делать это всегда.
track_vars
Параметр track_vars включает отслеживание нескольких важных массивов
сеансовых переменных, в том числе $HTTP_GET_VARS[],
$HTTP_POST_VARS[], $HTTP_POST_FILES, $HTTP_COOKIE_VARS[],
$HTTP_ENV_VARS[] и $HTTP_SERVER_VARS[]. Эти массивы подробно
описаны в главе 13.
Помните, что кроме перечисленных параметров существует множество
других. Выше перечислены лишь те параметры, которые часто применяются
большинством пользователей. Многие параметры будут упоминаться в
последующих главах.

11
1.3.2. Основные конструкции РНР
Прежде чем переходить к изложению основного материала я
представлю несколько вспомогательных концепций, относящихся к РНР.
Переход в РНР
Механизм лексического анализа должен как-то отличать код РНР от
других элементов страницы. Идентификация кода РНР называется
«переходом в РНР» (escaping to РНР). Существуют четыре варианта
оформления перехода в РНР:
• стандартные теги;
• короткие теги;
• теги script;
• теги в стиле ASP.
Стандартные теги
Стандартные теги используются программистами РНР чаще остальных
способов, что объясняется наглядностью и удобством этой формы записи:
<?php print "Welcome to the world of PHP!": ?>
У стандартных тегов есть еще одно дополнительное преимущество: за
открывающей конструкцией <? следуют символы php, однозначно
определяющие тип дальнейшего кода. Это удобно при использовании в одной
странице нескольких технологий — таких, как JavaScript, серверные
включения и РНР. Весь текст, расположенный до закрывающего тега ?>,
интерпретируется как код РНР.
Короткие теги
Короткие теги обеспечивают наиболее компактную запись для перехода
в РНР:
<? print "Welcome to the world of PHP!"; ?>
По умолчанию короткие теги не используются, их нужно специально
активизировать. Это можно сделать двумя способами:
• указать ключ -enable-short-tags при компиляции РНР;
• включить параметр short_open_tag в файл php.ini.

12
Теги script
Некоторые текстовые редакторы ошибочно принимают код РНР за код
HTML (то есть визуально отображаемый текст), что нарушает работу над
web-страницей. Проблема решается использованием тегов script:
<script language="php">
<?php print "Welcome to the world of PHP!"; ?>
</script>
Теги в стиле ASP
Четвертый и последний способ оформления внедренного кода РНР —
теги в стиле ASP (Active Server Page). Они похожи на короткие теги,
описанные выше, однако вместо вопросительного знака используется знак
процента (%):
<%php print "Welcome to the world of PHP!"; %>
У тегов в стиле ASP есть одна особенность, делающая запись более
компактной. Во внедренный код РНР не обязательно включать команду print
— знак равенства (=), расположенный сразу же после открывающего тега в
стиле ASP, приказывает лексическому механизму РНР вывести значение
указанной переменной:
<%=$variable %>
Этот удобный стиль позволяет использовать в страницах фрагменты вида
<%
// Присвоить значение переменной $recipe
$recipe = "Lasagna":
%>
Luigi's favorite recipe is <%=$recipe;%>
Этот фрагмент содержит два разных сценария РНР. В первом сценарии
переменной $recipe присваивается значение "Lasagna". Позднее, когда
потребуется вывести значение $гесiре, специально для этой цели
используются теги в стиле ASP. Кстати, такая возможность существует и для
коротких тегов (<?...?>).

13
1.3.3. Внедрение HTML в код РНР
Одной из самых замечательных особенностей HTML является простота
использования в сочетании с другими языками — например, HTML и
JavaScript (см. листинг 1.2).
Листинг 1.2. Вывод кода HTML средствами РНР
<html>
<head>
<title>Basic PHP/HTML integration</title>
</head>
<body>
<?
// Обратите внимание на присутствие тегов HTML в команде print.
print "<h3>PHP/HTML integration is cool.</h3>";
?>
</body>
</html>

Рис. 1.2. Форматирование даты с использованием функции РНР date()


В листинге 1.2 показано, как код HTML интегрируется прямо в
команды РНР. В данном примере в код РНР включаются теги заголовка
третьего уровня (<h3>...</h3>). В итоговом документе эти теги ничем не
отличаются от обычного кода HTML.
В листинге 1.3 продемонстрировано включение динамической информации в
web-страницу на примере вывода текущей даты в заголовке окна (рис. 1.2).
Листинг 1.3. Динамический вывод даты
<title>PHP Recipes | <? print (date("F d, Y")); ?></title>
Простая функция РНР date() форматирует дату одним из нескольких
стандартных способов. Отформатированная дата вставляется в заголовок
окна.

14
РНР также позволяет изменять формат конструкций HTML — для этого
соответствующая характеристика тега присваивается переменной,
вставляемой в файл. В листинге 1.4 эта возможность продемонстрирована на
примере присваивания характеристики шрифта (h3) переменной $big_font и
ее последующего использования при выводе текста.
Листинг 1.4. Динамические теги HTML
<html>
<head>
<title>PHP Recipes | <? print (date("F d, Y")); ?></title>
</head>
<?
$big_font = "h3";
?>
<body>
<? print "<$big_font>PHP Recipes</$big_font>"; ?>
</body>
</html>
Листинг 1.4 представляет собой разновидность листинга 1.3 — на этот
раз тег заголовка (<h3>...</h3>) сначала присваивается переменной, а затем
эта переменная используется в команде print. В итоговом документе эти теги
ничем не отличаются от обычного кода HTML.
Включение нескольких сценариев РНР
Для обеспечения необходимой гибкости при построении динамических web-
приложений можно внедрить в страницу несколько сценариев РНР (листинг
1.5).
Листинг 1.5. Включение нескольких сценариев РНР в один документ
<html>
<head>
<title>
<?

15
print "Another PHP-enabled page";
Svariable = "Hello World!";
?>
</title></head>
<body>
<? print Svariable; ?>
</body>
</html>
Листинг 1.5 начинается как типичная (пусть несколько упрощенная)
страница HTML. При внедрении нескольких сценариев переменные,
значения которых были присвоены в одном сценарии, могут использоваться в
другом сценарии той же страницы.
Комментарии в коде РНР
Комментарии следует использовать даже в относительно простых и
незамысловатых сценариях. В РНР существуют два формата комментариев:
• Однострочные комментарии обычно используются для коротких
пояснений или примечаний, относящихся к локальному коду.
• Многострочные комментарии обычно используются при оформлении
алгоритмов на псевдокоде и в более подробных объяснениях.
Оба способа в конечном счете приводят к одинаковому результату и
совершенно не влияют на общее быстродействие сценария. Выбор варианта
остается за вами.
Однострочные комментарии
При оформлении однострочных комментариев используется два стиля
комментирования. Оба стиля работают абсолютно одинаково, но в них
используются разные служебные символы. В одном случае комментарий
начинается с двойного символа «косая черта» (//), а в другом — с символа
фунта (#). Ниже приведены примеры обоих стилей:
<?
// Выбрать цвет роз $rose_color = "red";

16
# Выбрать цвет фиалок $violet_color = "blue";
print "Roses are $rose_color, violets are $violet_color"
?>
Конечно, оба стиля однострочных комментариев могут применяться для
построения искусственных многострочных комментариев, как показано в
следующем листинге:
<?
// файл: example. php
// автор: У.Дж.Гилмор
// дата: 24 августа 2000 г.
print "An example with comments";
?>
Многострочные комментарии
В РНР существует возможность построения подробных комментариев,
занимающих несколько строк. Такие комментарии оформляются в стиле
языка С — их начало и конец обозначаются символами /* и */.
<?
/*
Сценарий: multi_coramment_example.php
Назначение : пример использования многострочных комментариев
Автор: У.Дж.Гилмор
Дата: 14 июня 2000 г.
*/
print "A multiline comment can be found at the top of this script!";
?>
Как видите, многострочные комментарии особенно удобны для вывода
относительно длинной сводной информации обо всем сценарии или его
части.
Несомненно, один из наиболее часто задаваемых вопросов в списках
рассылки PHP - "Как мне сделать свои PHP-скрипты независимыми от

17
дизайна?". Хотя PHP называют "скриптовым языком, встраиваемым в
HTML", после написания нескольких проектов, в которых PHP и HTML
свободно перемешиваются, многие понимают, что отделение формы от
содержания - это Хорошая Вешь [TM]. Кроме того, во многих компаниях
должности дизайнера и программиста разделены между собой. Так
начинается поиск обработчика шаблонов...
Программист реализовывает логику приложения на PHP и использует макеты
интерфейса для создания базовых шаблонов. Затем проект передаётся HTML-
дизайнеру/верстальщику, который доводит шаблоны до совершенства.
Проект может несколько раз переходить из этапа HTML-вёрстки к этапу
программирования и обратно. Таким образом, важно иметь хорошую
поддержку шаблонов, потому что программисты не хотят иметь дела с HTML
и не хотят, чтобы HTML-дизайнеры копались в PHP-коде. Дизайнерам нужна
поддержка конфигурационных файлов, динамических блоков и прочих
интерфейсных нюансов, но они не хотят иметь дела со сложностями языка
программирования PHP.
Глядя на множество обработчиков шаблонов, доступных сегодня для
PHP, большинство из них предоставляет базовые возможности подстановки
переменных в шаблоны и имеет ограниченную поддержку динамических
блоков.
Итоги
В этой главе мы рассмотрели некоторые ключевые аспекты РНР:
• историю и особенности РНР;
• установку и конфигурацию;
• «переход» в РНР;
• комментирование кода РНР.
Эти вопросы закладывают основу для подробного изучения языка
программирования PHP, изложенного в приложениях 3-13, в которых описана
поурочная система образования для 11 классов в виде элективных курсов. В

18
результате прохождения этих курсов ученики будут знать о РНР достаточно,
чтобы писать собственные Web приложения. Новые знания будут применены
на практике — мы создадим приложения, которые можно будет легко
вставить в существующую web-страницу. Этот проект подготовит учеников к
работе над web-приложением РНР.

19
2. Методика преподавания языка Web
программирования PHP
"Web программирование в среде PHP"
Web программирование в настоящее время занимает ведущее место в
разработке профессиональных программных средств. Ознакомление с его
основами является полезным для тех учащихся, которые ориентируются на
профессии, связанные с разработкой компьютерных программ. В ходе
изучения данного курса должны быть решены три задачи:
1. Освоение методологии Web программирования.

2. Овладение техникой Web программирования на PHP.

3. Введение учащихся в проблематику, адекватную данному подходу,


расширение общего кругозора.
2.1. Тематическое планирование преподавания языка Web
программирования PHP
Данный курс рассчитан на учащихся 11 классов информационно-
технологического профиля. Изучение курса предполагает наличие у
учащихся сформированных базовых знаний и умений по основному курсу
«Информатика и ИКТ», навыков работы с компьютерной техникой и знания
языка HTML, который изучался в курсе «Информатика и ИКТ» или как
элективный курс.
Язык HTML является языком гипертекстовой разметки,
адаптированного для обучения программированию в среде Windows. Для
создания Internet сайтов язык HTML, без включения PHP или Java, в
настоящее время практически не используется. Однако все сайтостроение
ориентировано именно на знание HTML.
HTML рекомендуется изучать тем, кто в дальнейшем планирует
заниматься профессиональной работой с базами данных и языками
программирования высокого уровня.

20
Среда программирования PHP используется профессионалами и
рекомендуется учащимся, решившими в будущем стать программистами или
профессионально создавать Internet сайты.
В качестве учебных пособий необходимо использовать научно-
популярную литературу, справочные материалы, Интернет-ресурсы, но в
основном содержание и методика курса могут основываться на использовании
программной разработки – образовательный комплекс «Элективные курс
PHP», изложенный в 1-11 приложениях. Вопросы курса выходят за рамки
программы обязательного содержания программы.
Элективный курс "Web программирование в среде PHP"
«компенсирует» ограниченные возможности базового курса информатики и
ИКТ в удовлетворении потребностей старшеклассников. Этот курс
ориентирован на приобретение школьниками образовательных результатов
для успешного продвижения на рынке труда, подготовит к работе в сфере
информационных систем и технологий, поможет осознать возможности и
способы реализации выбранного жизненного пути, подготовит к
поступлению в вуз.
К элективному курсу "Web программирование в среде PHP"
прилагается пакет программного обеспечения, который содержит примеры
различных учебных проектов, электронные справочники по среде
программирования PHP, уроки по программированию.

Содержание программы
1. Установка и настройка сервера. Первое знакомство.
Переменные (3 часа + 1 час на контрольную)
Основные сведения о среде Web программирования PHP.
Разбираемся во всех тонкостях установки и настройки web сервера Apache
для работы в PHP, а также знакомимся с правилами написания и
использования переменных в среде PHP. Полное содержание этой главы
можно посмотреть в приложении 1.

21
2. Арифметические операторы. Работа с формой. Условия (3 часа
+ 1 час на контрольную)
Знакомимся с простейшими арифметическими операторами и
правилами их использования. Также в этой главе учимся работать с формами
и знакомимся с правилами написания условий в среде PHP. Полное
содержание этой главы можно посмотреть в приложении 2.
3. Проверка нескольких условий. Инструкция Switch. Оператор ?
(3 часа + 1 час на контрольную)
Написание сложных программ на проверку нескольких условий.
Знакомимся с инструкцией Switch и учимся применять ее на практике.
Учимся работать с операторами. Полное содержание этой главы можно
посмотреть в приложении 3.
4. Цикл со счетчиком. Циклы по условию (2 часа + 1 час на
контрольную)
Знакомимся с видами циклов и правилами их написания в среде PHP.
Учимся применять циклы на практике. Полное содержание этой главы можно
посмотреть в приложении 4.
5. Функции (2 часа + 1 час на контрольную)
Знакомимся с функциями, с правилами их написания и использования
в седее Web программирования PHP. Учимся применять функции на практике.
Полное содержание этой главы можно посмотреть в приложении 5.
6. Массивы (2 часа + 1 час на контрольную)
Учимся работать с массивами в среде PHP. Полное содержание этой
главы можно посмотреть в приложении 6.
7. Ассоциированные массивы. Объединение массивов (2 часа + 1
час на контрольную)
Какие массивы называются ассоциированными, правила работы с
ними. Полное содержание этой главы можно посмотреть в приложении 7.
8. Сортировка массивов. Чтение из формы элементов с
многозначным выбором (2 часа + 1 час на контрольную)

22
Способы сортировки массивов, написание программ на сортировку
массивов. Полное содержание этой главы можно посмотреть в приложении 8.
9. Доступ ко всем полям формы через ассоциированный массив.
PHP скрипт и форма одном документе (2 часа + 1 час на контрольную)
Как получить доступ ко всем полям формы через ассоциированные
массивы. Как расположить форму и PHP скрипт в одном документе. Полное
содержание этой главы можно посмотреть в приложении 9.
10. Повторение (4 часа)
Обобщение за курс «Среда PHP».

2.2. Методология обучения Web программированию в


PHP
Формы проведения занятий.
Компьютерный класс должен иметь локальную вычислительную сеть,
объединяющую все компьютеры и желательно мультимедийный проектор,
позволяющий демонстрировать изображение на большом экране. В этом
случае возможно полное использование образовательного комплекса для
проведения уроков и для тестирования учащихся. Возможна демонстрация
уроков как индивидуально, так и в группе.
• Групповая форма предусматривает, что урок демонстрируется на
экране перед группой учащихся. Показом управляет учитель. В
ходе работы предусмотрены групповое обсуждение и вопросы.
• Индивидуальная форма предусматривает демонстрацию урока на
каждом рабочем месте, прослушивание осуществляется через
наушники.
Демонстрационный экран в дисплейном классе должен
использоваться, как правило, при проведении практических занятий,
направленных на усвоение очередного раздела теоретического материала. В
данном случае проекционный экран дублирует изображение, выводимое на
мониторы учащихся, облегчая преподавателю управление вниманием

23
аудитории. Применять демонстрационный экран следует, прежде всего, для
показа схем и анимационных роликов. С помощью указателя мыши
преподаватель должен акцентировать внимание учащихся на наиболее
важные, ключевые фрагменты кадра. При работе с экраном необходимо
задействовать речевое сопровождение – там, где это уместно. После
проведения демонстраций на экране целесообразно предложить учащимся
самостоятельно просмотреть пройденный материал на своих рабочих местах.
Одним из вариантов использования образовательного комплекса
«Элективный курс PHP, 10-11 классы» при особых конфигурациях
оборудования является его применение в лекционной аудитории с
демонстрационным экраном. В такой аудитории, снабженной
мультимедийным компьютером и демонстрационным экраном большого
размера, следует проводить лекции, чередуя традиционные (доска + мел) и
новые (компьютер + проектор) формы подачи информации. В ходе изложения
лекционного материала в полной мере необходимо использовать
графические и анимационные возможности курса, включая в ряде случаев
интерактивные модели.
Элементы курса
В курс обучения должны войти следующие элементы:
1. Уроки. В ходе урока изложить новую тему и проверить ее

усвоение (методика проведения занятий по основным темам


изложена в приложениях 1-9).
2. Тесты к уроку. К каждому уроку приложить тест (приложение 11,

«Тест»), охватывающий материал одной темы. Тесты использовать


для закрепления материала на понятийном уровне.
3. Практикумы. Должны служить как для творческого освоения

материала, так и для контроля полученных знаний и навыков. В


ходе практикума учащийся должен творчески осмыслить задание и
выполнить его. Практикумы также использовать для закрепления
материала на творческом уровне.

24
4. Контрольные работы. Должны проводиться для объективного

оценивания знаний учащихся. Контрольные работы представляют


собой набор тестов. Используются для закрепления материала на
репродуктивном уровне. Пример теста приведен в приложении 11.
Структура урока
Необходимо планировать урок, исходя из следующих временных
рамок:
• Введение, постановка целей и задач, повторение пройденного
материала – 5 – 10 мин.
• Прохождение материала урока – 15 – 20 мин.
• Тестирование – 5 – 10 мин.
• Рефлексия, саморефлексия, домашнее задание – 10 мин.
Структура урока образовательного комплекса «Элективный курс PHP,
10-11 классы» совпадает со структурой урока, используемой учителем,
поэтому пособие можно применять в качестве обучающего средства, тогда
учителю следует:
• сформулировать цели и задачи урока;
• запустить урок на выполнение;
• в конце урока провести экспресс-тестирование;
• оценить результаты тестирования.
Рекомендуется заканчивать каждый урок тестированием для развития
у учащихся внимания и стимулирования познавательной активности.
Формы контроля
В качестве контроля используются:
1. Устные беседы по теоретическому материалу.
2. Электронное экспресс-тестироване.
3. Электронные контрольные тесты по окончании изучения каждой
темы.
4. Взаимоконтроль.
5. Домашние работы.

25
6. Письменные отчеты.
7. Опрос.

8. Рейтинговое тестирование.
9. Задачи - минипроекты.
10. Практикумы.
Тестирование
Необходимо предусмотреть поурочное, рубежное и экзаменационное
тестирование. Поурочное тестирование позволяет учителю проводить
быстрые опросы по пройденной теме или дает учащемуся возможность
самостоятельно контролировать свои знания. Рубежное тестирование
является более сложным. Оно рассчитано на проверку целого блока
материала (ориентировочно 6 уроков). Тестирование продолжается 30 – 40
мин.
Закрепление знаний, умений и навыков, контроль знания достигается
путем практического выполнения заданий. В ходе практического
программирования учащемуся приходится вспоминать материалы
предыдущих уроков, что приводит к лучшему запоминанию за счет
повторения. Для использования практикума с этой целью учитель должен
указать учащемуся, какое задание следует выполнять.
Использование практикумов должно преследовать две цели:
1) закрепление знаний, умений и навыков в практической
деятельности;
2) оценка действенности применения знаний на конструктивном и
творческом уровне, оценка способности самостоятельно решать
поставленную задачу.
Практикум необходимо использовать в начале урока согласно
тематическому планированию. Практикум рассчитан на весь урок (30 – 35
мин). В ходе практикума учащийся самостоятельно решает поставленную
задачу (обычно это написание программы), а затем исследует заданный
объект путем ввода в программу установленных исходных данных. По

26
полученному результату, как сам учащийся, так и учитель могут судить о
степени освоения предмета. Практикум должен строиться на основе
возрастающей сложности. Первые задания очень просты для решения и по
сути лишь вводят учащегося в проблему. Последующие задания сложнее, они
направлены на развитие мыслительных операций. Последние 1-2 задания по
своей сложности рассчитаны на профессионального программиста, вполне
овладевшего навыками алгоритмического мышления. В случае, когда
учащийся выполнил их, следует поощрить его.
После изучения курса учащиеся должны знать:
• Основное назначение языка PHP.
• Как установить и настроить сервер Apache.
• Основные арифметические операторы.
• Структуру сложной программы.
• Основные понятия и элементы баз данных.
Должны уметь:
• Четко формулировать задачу и оценивать возможность ее
решения средствами PHP.
• Разрабатывать форму.
• Разрабатывать сценарии приложений.
• Программировать модули, управляющие базами данных.

27
Тематический план элективного курса
«Web программирование в среде PHP»

Кол-во
№ Содержание программы Тип урока
часов
1 Урок 1. Установка и настройка сервера. 4
Урок 2. Первое знакомство.
лекция и
Урок 3. Переменные.
практика
Урок 4. Контрольная работа.
см. приложение 1
2 Урок 5. Арифметические операторы. 4
Урок 6. Работа с формой.
лекция и
Урок 7. Условия
практика
Урок 8. Контрольная работа.
см. приложение 2
3 Урок 9. Проверка нескольких условий. 4
Урок 10. Инструкция Switch.
лекция и
Урок 11. Оператор ?.
практика
Урок 12. Контрольная работа.
см. приложение 3
4 Урок 13. Цикл со счетчиком. 3
Урок 14. Циклы по условию. лекция и
Урок 15. Контрольная работа. практика
см. приложение 4
5 Урок 16-17. Функции. 3
лекция и
Урок 18. Контрольная работа.
практика
см. приложение 5
6 Урок 19-20. Массивы 3
лекция и
Урок 21. Контрольная работа.
практика
см. приложение 6
7 Урок 22. Ассоциированные массивы. 3
Урок 23. Объединение массивов. лекция и
Урок 24. Контрольная работа. практика
см. приложение 7
8 Урок 25. Сортировка массивов. 3
Урок 26. Чтение из формы элементов с
лекция и
многозначным выбором.
практика
Урок 27. Контрольная работа.
см. приложение 8
9 Урок 28. Доступ ко всем полям формы 3 лекция и

28
через ассоциированный массив.
Урок 29. PHP скрипт и форма в одном
документе. практика
Урок 30. Контрольная работа.
см. приложение 9
10 Повторение 4
Урок 31 - 32. Обобщение за курс лекция и
«Среда PHP» практика
Урок 33. Контрольная работа.
Урок 34. Подведение итогов за курс.
Итого: 34

2.3. Поурочные разработки изучения Web


программирования PHP
Конспект урока.
Тема: «Массивы»
Цель урока:
развитие творческой личности учащихся на основе формирования
педагогической культуры и поддержки творческих устремлений учеников в
индивидуальной и совместной деятельности.
Задачи урока:
- Образовательные: помочь учащимся развить знания о языке
программирования PHP, а именно: полностью раскрыть тему урока и
способствовать ее полному пониманию учениками.
- Воспитательные: воспитание информационной культуры учащихся,
внимательности, аккуратности, дисциплинированности, усидчивости.
- Развивающие: развитие познавательных интересов, навыков работы с
мышью и клавиатурой, самоконтроля, умения конспектировать.
Оборудование:
компьютер, проектор, доска, текстовые материалы.
План урока:
I. Организационный момент. (3 мин)
II. Проверка и актуализация знаний. (5 мин)
29
III. Теоретическая часть. (20 мин)
IV. Практическая часть. (15 мин)
V. Итог урока. (2 мин)
Ход урока:
I. Организационный момент.
Объяснение хода урока.
II. Актуализация знаний.
Вспоминаем, что было на прошлом уроке, а затем проверка самостоятельных
занятий прошлого урока.
III. Теоретическая часть.
Что такое массив.
Сперва просто термин: Массив - это набор значений, скрытый под
одним именем. То есть если ранее мы пользовались переменными, у каждой
из которых было свое имя (и хранила она одно значение), то благодаря
массиву под одним именем можно хранить сразу много переменных. Для
того, чтобы их все таки различать, помимо имени надо добавить индекс (в
квадратных скобках).
Создание массива.
Чтобы создать массив, и сразу поместить в него некоторые значения,
необходима строка вида: $имя_массива = array (значения, которые войдут
в массив). Пример:
<?php
$user = array ("Василий", "Иван" , "Петр");
?>
Итак, мы занесли в массив 3 элемента. Они получили при этом свои
номера, начиная с нуля. То есть $user[0] = "Василий" , $user[1] = "Иван" и
$user[2] = "Петр". Соответственно, вывести элементы массива известной
длины удобнее всего в цикле:
for ($i=0; $i<=2; $i++)
{ print "$user[$i] <br>";}

30
Элементы можно присваивать и не одной командой, а по мере
необходимости:
$user[] = "Василий";
$user[]="Иван" ;
$user[]="Петр";
И теперь, чтобы начинать привыкать к работе с массивами
постарайтесь выполнить такое самостоятельное задание:
1. В первом массиве длиной 4 элемента запишите имена сотрудников, во
втором (тоже длиной 4) - их фамилии. Далее выведите их в таблицу с
одной строкой и четырьмя ячейками (в каждой имя и фамилия).
На всякий случай, вариант решения данной задачи можно посмотреть в
приложении 11.
Работа с массивом.
На практике, количество элементов массива мы часто не знаем. По
этому весьма полезна функция, которая позволяет определить размер массива
- count ( $имя_массива ). Пример ее использования:
<?php
$user = array ("Василий", "Иван" , "Петр", "Михаил", "Александр");
print "Всего в массиве \$user - ". count($mas) . " элементов";
?>
Обратите внимание, что число элементов массива - 4, а номер последнего
элемента - 3. Напоминаю, это связано с тем, что нумерация идет с нуля.
Автоматический перебор элементов массива.
Еще тонкость работы с массивами связана с тем, что номера элементов
массива можно задать и "вручную", причем не обязательно подряд.
Например:
$user[5] = "Василий";
$user[1]="Иван" ;
$user[3]="Петр";

31
Перебрать все элементы такого массива "обычным" циклом не
получится. Однако, в этом нет проблемы, поскольку PHP располагает
удобными методами перебора любых массивов.
Перебрать все элементы массив позволяет конструкция вида:
foreach (имя_массива as переменная)
{переменная примет значение каждого элемента массива;}
пример:
$mas= array ("Иван","Петр","Василий");
$mas[7] = "Михаил";
$mas[5] = "Григорий";
foreach ($mas as $a)
{print " $a <br>";}
Данный скрипт выведет все элементы массива по порядку возрастания
их номеров.
Результат срабатывания этого крипта на сервере можно посмотреть ниже
Иван
Петр
Василий
Михаил
Григорий
И для отработки навыков вывода элементов массива конструкцией
foreach постарайтесь выполнить такое самостоятельное задание:
2. В массив внесите 5 произвольных чисел. Далее используя конструкцию
foreach выведите их и их квадраты в виде: 42=16 22=4 52=25 и т.д.
Вариант решения данной задачи можно посмотреть в приложении 11.
IV. Практическая часть.
Набор PHP-скриптов, продиктованных во время лекции, в блокноте, проверка
их работы.
V. Итог урока.
Подведение итогов урока, запись домашнего задания. Краткое объяснение,
что будет на следующем уроке.

32
Заключение
Цель данной курсовой работы была полностью достигнута. Мы создали
элективный курс «Преподавание языка Web программирования PHP» и
разработали методику его преподавания. В ходе курсовой работы мы
рассмотрели, что представляет собой язык Web программирования PHP,
наметили основные аспекты в содержании полного курса преподавания языка
PHP, составили тематический план преподавания, составили примерное
поурочное планирование и на основании этого материала разработали
поурочную систему обучения языку Web программирования PHP в виде
элективных курсов. Затем разработали методику преподавания этих курсов.
Рассмотрели основные формы проведения уроков, формы контроля за
учащимися, а также все требования к учителю и учащимся.

33
Список литературы
1. Гуденко Д.А., Петроченко Д.В. Сборник задач по программированию. –

СПб.: Питер, 2001.


2. Жуков В.А. Изучаем PHP. – СПб.: Питер, 2003.

3. Попов В.Б. HTML и PHP. Самоучитель. – СПб.: Питер, 2001.

4. Бобровский С.И. PHP 5.0. Учебный курс. – СПб.: Питер, 2002.

5. Гофман В., Хомоненко А. PHP. Быстрый старт. – BHV, 2002.

6. Лишнер Рэй. PHP. Справочник. – Символ, 2001.

7. Тейксейра С., Паченко К. PHP 5.0. Руководство разработчика, в 2-х

томах. – М.: Диалектика, 2001.


8. Фаронов В.В. Учебный курс PHP. – Нолидж, 2001.

9. Фаронов В.В. Программирование баз данных в PHP. Учебный курс. –

СПб.: Питер, 2003.


10. Баженова И.Ю. PHP. Самоучитель программиста – М.: КУДИЦ-

ОБРАЗ.
Интернет-ресурсы
http://www.phpsources.ru/ - Программирование на PHP - Исходники,
компоненты, статьи, форум, чат, примеры, решения, учебники
http://phpbasics.ru - Справочник - "Основы PHP " Основы PHP
программирование | Форум программистов PHP.
http://www.phpmaster.ru/ - Мастера PHP (документация, исходники,
скачать). Мастера PHP. Подборка статей на самые разные темы. Все о PHP.
http://skycity.dem.ru - Статьи, компоненты, полезные ссылки, списки
литературы для программиста.
http://www.phpmaster.ru - Советы, статьи, подсказки, каталог ресурсов,
поисковая система, список литературы.

34
Приложение 1
Тема: «Установка и настройка сервера.
Первое знакомство. Переменные»
Для начала можно предложить всем желающим разобраться во всех
тонкостях установки и настройки web сервера Apache его официальный сайт
www.apache.org. Для настройки самого PHP его официальный сайт ru.php.net
или php.net. Все бесплатно.
Однако, помимо необходимости настройки еще есть необходимость
скачивать дистрибутивы, а они не очень малы. Всем, кто не желает
заниматься конфигурированием специфических файлов, тем более что на том
сервере, где Вы после будете хостить свои проекты в основном все сделают
за Вас, предлагаю воспользоваться великолепной (и бесплатной) разработкой
лаборатории dklab.ru Денвер-2.
Все дистрибутивы Денвер-2 доступны по следующему адресу:
www.denwer.ru. Базовый пакет Денвера включает:

• Apache, SSI, mod_rewrite, mod_php.

• PHP4 с поддержкой GD и MySQL.


• MySQL с поддержкой транзакций (mysqld-max).
• phpMyAdmin — система управления MySQL через Web-интерфейс.
Полностью заменяет командную строку MySQL.
• Ядро Perl без стандартных библиотек (они поставляются отдельно).
• Эмулятор sendmail (отладочная «заглушка», складывающая приходящие
письма в /tmp); поддерживается работа совместно с PHP и Perl.
• Система управления виртуальными хостами, основанная на шаблонах.
Чтобы создать новый хост, вам нужно лишь добавить директорию в
каталог /home, править конфигурационные файлы не требуется.
• Система управления запуском и завершением.
• Инсталлятор (нечто вроде InstallShield).

35
и все это в одном флаконе и компактном объеме.
Если Вы воспользуетесь данной разработкой и не будете изменять пути,
стоящие по умолчанию в дистрибутиве, для работы просто создавайте Ваши
документы в каталоге C:\WebServers\home\localhost\www. Вызывать же
файлы надо, например, из адресной строки броузера
http://localhos/имя_файла.
Итак все УРА, ЗАРАБОТАЛО. Начнем.
Первое, что надо знать -
Обрамление блока PHP-команд тегами
Могут использоваться такие варианты тегов:

• Стандартные - <?php ?>


• Короткие <? ?>
• ASP <% %>
• Программные <SCRIPT LANGUAGE="php"> </SCRIPT>

Не вдаваясь в подробности, советую использовать стандартные.


Однако, на большинстве серверов настройки позволяют использовать и
короткие.
Второе, что надо знать - отдельные команды скрипта надо разделять
точкой с запятой (;). А будут они в одной строке или разных - не важно. Мы
для понятности будем писать в разных. Вам тоже советую. По крайней мере
по началу.
Функция print ()
Функция print () - выводит данные, естественно - в основном в окно
броузера. Может использоваться без скобок, в этом смысле она исключение
из правил.
Итак. Мы уже знаем достаточно, чтобы написать первый скрипт.
Создаваем файл с расширением php. В файле пишем следующий текст:
<?php

36
print "Первый скрипт";
?>
Вызываем файл, как говорилось выше http://localhos/имя_файла.
Видим, естсественно только - Первый скрипт. Но не в этом прелесть. Из окна
броузера откройте "В виде HTML" и тут не увидите ни тегов ни функции
print. То есть весь текст скрипта обрабатывается на сервере и клиенту отдает
только то, что сами желаем. Итак. Следующее, что надо понять, это что текст
самого скрипта (или его частей) правильно включать в стандартную HTML
структуру. То есть правильнее весь текст документа с первым скриптом
должен выглядеть примерно так:
<HTML>
<HEAD>
<TITLE>
Заголовок страницы
</TITLE>
</HEAD>
<BODY>
<?php
print "Первый скрипт";
?>
</BODY>
</HTML>
Результат срабатывания данного скрипта на сервере можно посмотреть ниже:
Первый скрипт
Естетсвенно, включение в документ любых тегов и "прочего" не ограничено.
ПЕРЕМЕННЫЕ
Имена переменных в PHP должны начинаться с $. В имени могут быть
буквы (латинские), цифры и подчеркиватели. Нельзя использовать пробелы и
пр. Простейший пример использования переменных (для простоты и
лаконичности здесь и далее примеры приводятся без HTML структуры):

37
<?php
$a="Слово 1";
$b="Слово 2";
print "$a $b";
?>
Типы данных (переменных)
В PHP поддерживаются следующие типы данных:

• Integer - целое
• Double - с плавающей точкой
• String - строка
• Boolean - булевая
• Array - массив
• Object - обїект (но к нему мы не скоро доберемся).

Вывести тип переменной позволяет функция gettype(). Попробовать на


практике разные типы переменных позволяет простенький пример,
приведенный ниже:
<?php
$a=1;
print "$a ";
print gettype($a);
print "<br>";
$b=1.5;
print "$b ";
print gettype($b);
print "<br>";
$c="слово";
print "$c ";
print gettype($c);
print "<br>";
$d=true;
print "$d ";
print gettype($d);
?>
Результат срабатывания данного скрипта на сервере можно посмотреть ниже:
38
1 integer
1.5 double
слово string
1 boolean
Запустите его и в разных строках у Вас должны появится типы переменных -
Integer, затем Double, String и Boolean. На этом примере также видно, что
теги, вписанные в функцию print срабатывают вполне корректно.
Изменение типов переменных
Все просто - изменить тип переменной позволяет функция
settype(переменная, новый тип). Приведенный ниже пример поясняет
изменение типов. Сначала присваиваем переменной не целое число ($a=5.5) ,
затем преобразуем его в строку, затем в целое и в заключении - в boolean:
<?php
Error_Reporting(E_ALL & ~E_NOTICE);
$a=5.5;
print "$a ";
print gettype($a);
print "<br>";
settype ( $a, string );
print "$a ";
print gettype($a);
print "<br>";
settype ( $a, integer );
print "$a ";
print gettype($a);
print "<br>";
settype ( $a, boolean );
print "$a ";
print gettype($a);
?>
Результат срабатывания данного скрипта на сервере можно посмотреть ниже:
5.5 double
5.5 string
5 integer
1 boolean
Непонятная строка Error_Reporting(E_ALL & ~E_NOTICE) в начале
скрипта необходима, чтобы сервер не выдавал предупреждений об ошибках.

39
Приложение 2
Глава 2.
Создание тестовой оболочки на языке программирования PHP.
2.1 Скрипты студенческой части тестов.

List1.php
<?php
session_start();
include_once("../files/configdb.php");

require('/usr/php/setup.php');

$smarty = new smarty_test;

$log_stud=peremen ('p','log_st');
$pas_stud=peremen ('p','paswd_st');

if ($log_stud<>""){

$que=mysql_query("select paswd_stud from stud where (log_stud='$log_stud') limit 1;");


if (!$que){
echo "база не отвечает";
} else {
if ($res=mysql_fetch_array($que))
{
if ($res['paswd_stud']==$pas_stud)
{
$_SESSION['log_stud']=$log_stud;

} else {

echo "ПОЛЯ ЗАПОЛНЕНЫ НЕ ПРАВИЛЬНО";


include"../index.php" ;
exit();
}} else {
echo "Aвторизация не пройдена.<br> Проверьте правильно ли
заполнены все поля";
include"../index.php" ;
exit();

}
}
}

40
if (isset($_GET['num_question'])){
$num_question=$_GET['num_question'];
} else {
$num_question=1;
}

$que="select * from question where id='$num_question';";

$query=mysql_query($que);

if (!$query)
{
echo "вопрос не определен";
exit();
}
elseif (mysql_num_rows($query)==0)
{
echo "вопрос не найден";
exit();
} else {
while ($vopr=mysql_fetch_array($query))
{
$vop=$vopr['vopros'];

$cust_radio=$vopr['var'];
$prav=$vopr['protvet'];
}
$cust_radios=explode("<br>",$cust_radio);

$_SESSION['prav']=$prav;

$smarty->assign('num_vopr',$num_question);
$smarty->assign('vopr',$vop);
$smarty->assign('cust_ids',array(1,2,3,4));
$smarty->assign('cust_names',$cust_radios);
$smarty->display('indexst.tpl');
}
?>
Эта часть программы выполняет загрузку тестовой оболочки для
студента. Студент должен ввести свой логин и пароль, после чего программа
проверяет, существует ли такой логин и пароль в базе данных студента. Если
введенный логин и пароль совпадает с уже имеющимися в базе данных, то
делается ссылка на list2.php и происходит загрузка самого теста. Если
введенный логин и пароль не совпадает с уже имеющимися в базе данных, то
программа ничего не делает вновь запрашивает логин и пароль. То есть эта
часть программы предотвращает несанкционированный доступ к тестам.
41
List2.php
<?php
session_start();
include_once("../files/configdb.php");

require('/usr/php/setup.php');

$smarty = new smarty_test;


if (!isset($_SESSION['log_stud'])){
include "../index.php";
exit();
} else {
$otv_st=peremen ('p','otvet');
$num_vopr=peremen ('p','num_vopr');
$otvet_st=$num_vopr."stud";
$_SESSION["$otvet_st"]=$otv_st;

$otvet_pr=$num_vopr."prav";
$_SESSION["$otvet_pr"]=$_SESSION['prav'];

if (isset($_GET['num_question'])){
$num_question=$_GET['num_question'];
} else {
$num_question=$_POST['num_vopr']+1;
}

$que="select * from question where id='$num_question';";

$query=mysql_query($que);

if (!$query)
{
echo "вопрос не определен";
exit();
}
elseif (mysql_num_rows($query)==0)
{
$line='Вы ответили на все вопросы. Если хотите завершить тест нажмите <A
href="end.php"> ЗАВЕРШИТЬ </a>или можете выбрать номер вопроса.';
$smarty->assign('line',$line);
$smarty->display('finishst.tpl');
exit();
} else {
while ($vopr=mysql_fetch_array($query))
{
$vop=$vopr['vopros'];

$cust_radio=$vopr['var'];
$prav=$vopr['protvet'];
}
$cust_radios=explode("<br>",$cust_radio);

42
// $smarty->assign('fam',$fam);
// $smarty->assign('imiy',$imia);
// $smarty->assign('otch',$otch);

$_SESSION['prav']=$prav;

$smarty->assign('num_vopr',$num_question);
$smarty->assign('vopr',$vop);
$smarty->assign('cust_ids',array(1,2,3,4));
$smarty->assign('cust_names',$cust_radios);

$smarty->display('indexst.tpl');
}
}
?>
Эта часть программы делает загрузку тестовой части программы. То
есть программа берет вопрос и все прилагающиеся к нему варианты ответов
и выводит их на экран. Студент отвечает на данный вопрос и нажимает
кнопку далее, программа запоминает номер вопроса и номер варианта ответа.
Затем происходит загрузка следующего вопроса и соответствующих
вариантов ответа. Студент может пропустить какой-то вопрос и ответить на
другие, затем, нажав на ссылку номера пропущенного вопроса попадает на
пропущенный вопрос и отвечает на него. При нажатии на ссылку программа
считывает номер ссылки и загружает из базы данных вопросов вопрос с
соответствующим номером. При нажатии на кнопку завершить тест
программа закрывает тестирующую оболочку и делает ссылку на еnd.php.

End.php
<?php
session_start();
include_once("../files/configdb.php");

if (!isset($_SESSION['log_stud'])){
include "../index.php";
exit();
} else {
$otv_st=peremen ('p','otvet');
$num_vopr=peremen ('p','num_vopr');
$otvet_st=$num_vopr."stud";
$_SESSION["$otvet_st"]=$otv_st;

43
$otvet_pr=$num_vopr."prav";
$_SESSION["$otvet_pr"]=$_SESSION['prav'];

$n=0;
for ($i = 1; $i <= 30; $i++) {

$otvet_st=$i."stud";
$otvet_pr=$i."prav";
if ((isset($_SESSION["$otvet_st"])) and (isset($_SESSION["$otvet_pr"]))) {
if ($_SESSION["$otvet_st"]==$_SESSION["$otvet_pr"]) {$n++;}
}
}

$que="update stud set prav='".$n."' where (`log_stud`='".$_SESSION['log_stud']."');";


$zapr=mysql_query($que);
if ($zapr){
echo "результаты теста сохранены<br>";

} else {
echo "результаты не записаны <br>";

}
session_destroy();
}
?>
<img src="../images/fin.gif" border="0">
Этот скрипт делает подсчет правильно отвеченных вопросов.
Программа берет номера вопросов и соответствующих им ответов из
временного файла и сравнивает их с правильными ответами. Если ответы
совпадают, то программа увеличивает число правильных ответов на 1. После
проверки всех вопросов программа записывает логин количество правильных
ответов в форму преподавателя.

2.2 Скрипты преподавательской части тестов.


Index.php
<html>
<head>
<title>Регистрация</title>
</head>

<body bgcolor="CCFFFF">

<table border="0" cellpadding="0" cellspacing="0" >


<tr><td valign="top" align="left"><img src="../images/1.jpg" border="0"></td></tr>
<tr><td bgcolor="00CCFF" width="1024"><marquee scrollamount="10" scrolldelay="150"
direction="left" ><font color="FF00CC" size="2"><b>Е С Т Е С Т В Е Н Н О Н А У Ч Н Ы Й
&nbsp; Ф А К У Л Ь Т Е Т</b> </font></marquee></td></tr>

44
<tr align="center" valign="top">
<td>
<table border="0" cellpadding="0" cellspacing="0" width="193"> <form
action="choose.php" method="POST">

<tr><td align="center"><br><img src="../images/bt.jpg" border="0"


alt="РЕГИСТРАЦИЯ"></td></tr>
<tr><td align="center" background="../images/body.jpg" width="191">
<b>Логин</b><br><input size="10" style="width: 160px;" type="text"
name="log"><br>
<b>Пароль</b><br><input size="10" style="width: 160px;" type="password"
name="paswd"><br><br>
<input src="../images/bot.jpg" alt="отправить" border="0" type="image" >
<input type="hidden" name="istor" value="reg">
<br>
</td></tr>
<tr><td><img src="../images/down.jpg" border="0"></td></tr>
</table> </form>
</td></tr>
<!--<A href="teacher/auten.php"> учитель </a>-->
</table>
</body>
</html>
Этот скрипт производит авторизацию преподавателя. Производится
проверка пароля и логина введенных в поля записи с истинным паролем и
логиным. Если поля записи совпадают то происходит загрузка
преподавательской формы, если не совпадают то вновь запрашивается
авторизация. После авторизации происходит ссылка на сhoose.php.
Choose.php
<?php
session_start();

require('/usr/php/setup.php');
include_once "../files/configdb.php";

$smarty = new smarty_test;


if ((isset($_SESSION['aut'])) and ($_SESSION['aut']=="1"))
{
// выводим все тесты которые есть в базе
$_SESSION['aut']="1";
$zap="select * from test ;";
$que=mysql_query($zap);
if (!$que) {
echo "Сервер временно не отвечает на запрос, поэтому правильное
отображение страницы не возможна. Попробуйте позже.";
exit();
}
$smarty->display('choos.tpl');

45
exit();
}
$fam=peremen ('p','log');
$paswd=peremen ('p','paswd');
///*****************************************************

$que="select * from teacher where (`teacher`='$fam');";


$quer=mysql_query($que);
$num_rows = mysql_num_rows($quer);
if ($num_rows<>0) {
while ($ad=mysql_fetch_array($quer)) {
$pas=$ad["paswd"];

if (!$pas==$paswd) {
$line='Здраствуйте. Для дальнейшей работы надо пройти
авторизацию';
$posit1='Пожалуйста, заполните обязательно все поля<br><br><table
align="center" border="0" cellpadding="0" cellspacing="0"><form action="choose.php"
method="POST">
<tr><td align="center"><b>Логин</b><br><input size="10" style="width: 160px;"
type="text" name="log"><br>
<br>
<b>Пароль</b><br><input size="10" style="width: 160px;" type="password"
name="paswd"><br><br>
<input type="submit" value="В х о д">
<br>
</td>
</table> </form>';
} else {
// выводим все тесты которые есть в базе
$_SESSION['aut']="1";

$smarty->display('choos.tpl');
exit();
}
}
} else {
$line='Здраствуйте. Для дальнейшей работы надо пройти авторизацию';
$posit1='Пожалуйста, заполните обязательно все поля<br><br><table align="center"
border="0" cellpadding="0" cellspacing="0"><form action="choose.php" method="POST">
<tr><td align="center"><b>Логин</b><br><input size="10" style="width: 160px;"
type="text" name="log"><br>
<br>
<b>Пароль</b><br><input size="10" style="width: 160px;" type="password"
name="paswd"><br><br>
<input type="submit" value="В х о д">
<br>
</td>
</table> </form>';
}
$smarty->assign('line',$line);
$smarty->assign('posit1',$posit1);

46
$smarty->display('error.tpl');

//*****************************************************
?>
Здесь происходит загрузка таблицы выбора действий. В зависимости от
того, что будет делать преподаватель программа будет ссылаться на один из
следующих скриптов: add.php, addform.php, change.php, delete.php, finish.php,
prosmotr.php, stud_result.php, student.php, update.php.
Prosmotr.php
<?php
session_start();
if ((!isset($_SESSION['aut'])) or ($_SESSION['aut']==""))
{
echo "не пройдена авторизация";
exit;
}

include_once("../files/configdb.php");
$que="select * from question";
$zapr=mysql_query($que);
$n=1;
if ($zapr){
echo "<table border=\"1\"><tr valign=\"middle\" bgcolor=\"Aqua\"><td>№</td><td
align=\"center\">Id</td><td align=\"center\">Вопрос</td><td align=\"center\">Правильный
ответ</td><td align=\"center\">Варианты ответа</td><td align=\"center\" colspan=\"2\">Что
делать?</td></tr>";
while ($str=mysql_fetch_array($zapr)){
echo "<tr><td align=\"center\">".$n++."</td><td
align=\"center\">".$str['id']."</td><td align=\"center\">".$str['vopros']."</td><td
align=\"center\">".$str['protvet']."</td><td align=\"center\">".$str['var']."</td><td><a
href=\"change.php?id=".$str['id']."\">править</a></td><td><a
href=\"delete.php?id=".$str['id']."\"><img src=\"../images/delete.jpg\" border=\"0\"
alt=\"Удалить\"></a></td></tr>";
}
echo "</table>";
} else echo "запрос не выполнен";
echo "<br><br>Выберите дальнейщее действие: <br>";
echo " <a href=\"ADDform.php\">ДОБАВИТЬ<br><br>";
echo "<a href=\"choose.php\">назад</a> || <a href=\"finish.php\"><font size=\"3\"
color=\"Red\"> ВЫХОД </font></a>";
?>
Программа берет все вопросы из базы данных и выводит их на экран.

Add.php
<?php
session_start();
if ((!isset($_SESSION['aut'])) or ($_SESSION['aut']==""))
{
47
echo "не пройдена авторизация";
exit;
}

include_once "../files/configdb.php";
$var=array($_POST['var1'],$_POST['var2'],$_POST['var3'],$_POST['var4']);
$vardb=implode("<br>",$var);
$que="insert into question values ('','".$_POST['question']."','".$_POST['pr']."','".$vardb."');";
$zapr=mysql_query($que);
if ($zapr){
echo "вопрос добавлен в базу <br>";
echo "Выберите дальнейщее действие: <br>";
echo " <a href=\"ADDform.php\">ДОБАВИТЬ || <a
href=\"prosmotr.php\">ПРОСМОТР<br>";
echo "<a href=\"finish.php\"><font size=\"3\" color=\"Red\"> ВЫХОД </font></a>";

} else {
echo "вопрос в базу не добавлен <br>";

}
?>
Происходит добавление вопроса. То есть программа берет данные из
заполненной формы и добавляет их в базу данных вопросов.

Student.php
<?php
session_start();
if ((!isset($_SESSION['aut'])) or ($_SESSION['aut']==""))
{
echo "не пройдена авторизация";
exit;
}

require('/usr/php/setup.php');
include_once "../files/configdb.php";

$smarty = new smarty_test;

$log_stud=peremen ('p','log_st');
$paswd_stud=peremen ('p','paswd_st');
$line='Поля желательно заполнить';
$posit='';

if ($log_stud<>"") {

$que="select * from stud where (`log_stud`='".$log_stud."')";


$zapr=mysql_query($que);
if (!$zapr) {
echo "запрос не выполнен";

48
} elseif (mysql_num_rows($zapr)<>0) {
$line='Пользователь с таким логином уже существует. Для корректной
работы выберите другой логин';

} else
{
$que="insert into stud (`log_stud`,`paswd_stud`) values
('".$log_stud."','".$paswd_stud."');";
$zapr=mysql_query($que);
if ($zapr){
echo "Студент с логином <b>$log_stud</b> и паролем
<b>$paswd_stud</b> добавлен<br>";

echo "<a href=\"finish.php\"><font size=\"3\" color=\"Red\"> ВЫХОД


</font></a>";

} else {
echo "студент не добавлен<br>";

}
}
}
echo "<br><br><br>";

$posit='Добавление студента в базу<br><br><table align="center" border="0"


cellpadding="0" cellspacing="0"><form action="student.php" method="POST">
<tr><td align="center"><b>Логин</b><br><input size="10" style="width: 160px;"
type="text" name="log_st"><br>
<br>
<b>Пароль</b><br><input size="10" style="width: 160px;" type="text"
name="paswd_st"><br><br>
<input type="submit" value="Добавить">
<br>
</td>
</table> </form>';

$smarty->assign('line',$line);
$smarty->assign('posit',$posit);

$smarty->display('teach_stud.tpl');
?>
Эта часть программы осуществляет добавление студента в список всех
студентов.

Сhange.php
<?php
session_start();
if ((!isset($_SESSION['aut'])) or ($_SESSION['aut']==""))
{
echo "не пройдена авторизация";
exit;
49
}
require('/usr/php/setup.php');

$smarty = new Smarty_test;

include_once("../files/configdb.php");
$id=$_GET['id'];

$que="select * from question where (id='".$id."');";

$query=mysql_query($que);
if (!$query) {
echo "запрос не выполнен";
} else {
while ($as=mysql_fetch_array($query)) {
$smarty->assign('vopr',$as['vopros']);
$vak=$as['var'];
$smarty->assign('customer_id',$as['protvet']);

$cust_radios=explode("<br>",$vak);

$smarty->assign('id',$id);
$smarty->assign('cust_names',$cust_radios);
$smarty->display('update.tpl');
}
?>
Происходит исправление вопроса и его перезапись в базе данных
вопросов.

Finish.php
<?php
session_start();
session_destroy();
?>
<img src="../images/fin.gif" border="0">
Происходит выход из преподавательской части программы.

50