Лабораторная работа №7. PHP
Задание 1. Массивы и строки
Массив может инициализироваться одним из двух способов: последовательным присвоением значений, или посредством конструкции array().
Второй способ создания массива реализуется путем вызова функции array():
$massiv = array('one','two','three');
Для ассоциированных массивов такой вызов будет иметь вид:
$new_massiv = array('name' => 'nobody', 'email' => '[email protected]');
Между индексом и значением здесь помещается здесь знак =>. Рассмотрим пример:
<?php //pr45
$massiv = array('one','two','three');
$massiv[5]="5";
$massiv[6]="6";
$massiv[]="7";
print_r($massiv);
$new_massiv = array('name' => 'nobody', 'email' => '[email protected]');
print_r($new_massiv);
print $new_massiv['name']
?>
Выполнить одно из перечисленных ниже упражнений
1.1. В массиве строк проверить начинается ли каждая строка символом “*”. Строки без “* “ перенести в другой массив.
1.2. В массиве из n строк проверить, содержит ли к-я строка символ @. Если не содержит, вставить символ в строку.
1.3. В массиве строк удалить все HTML –теги, заключенные в скобки <>
1.4. В массив случайным образом помещаются строки задающие «совет дня» или «цитата дня». Случайным образом выбрать строку из массива можно использовать функции Shuffle(array arr); или arrayrand(array arr, int num);
1.5. Создать многомерный массив: Факультет, Курс, Группа, Студенты. Вывести список студентов в алфавитном порядке.
1.6. Создать многомерный массив: Факультет, Кафедра, Преподаватели. Вывести список преподавателей в алфавитном порядке.
Задание 2. Функции
Функция может быть определена с использованием синтаксиса:
function fname ($arg_1, $arg_2, ..., $arg_n)
{
echo "Пример \n";
return $val; //возвращаемое значение
}
Необязательный оператор return возвращает значение любого типа, в том числе список и объект.
<?php //pr11.php-найти все натуральные числа, не //превосходящие m и содержащие хотя бы одну девятку в //десятичном представлении
$m=rand(10,150); //случайное значение m
print "m=$m<br>";
for($i=1;$i<$m;$i++)
{$k=f($i);
if($k!=0)print "$k<br>";
}
function f($n)
{$l=$n;
do
{
if(($l%10)==9)return $n;}
while(($l/=10)!=0);
return 0;
}
?>
Выполнить одно из перечисленных ниже упражнений
2.1. Среди n чисел найти наибольшее и наименьшее простые числа.
2.2. Для заданного числа n построить треугольник Паскаля.
2.3. Написать функцию, возвращающую текст приветствия в соответствии с приведенной ниже схемой
<?php
if((date(“G”) >=5)AND(date(“G”) <= 11 ))echo “Good Morning!”;
if((date(“G”)>=12)ANDdate(“G”)<=18))echo “Good Afternoon!”;
if((date(“G”) >= 19)AND(date(“G”)<= 4))echo “Good Evening!”;
?>
Задание 3. Файлы и строки
Файлы могут быть текстовыми, содержащими строки переменной длины и бинарными, представляющими последовательность байт.
Открытие файла:
int fopen (string filename, string mode [, int use_include_path]). Функция осуществляет открытие локального или удаленного файла с именем, указанным в filename, и возвращает его дескриптор (номер). Режим открытия файла mode, может принимать следующие значения:
"r" - файл открывается только для чтения. "r+" - открывается на чтение и на запись. Указатель файла устанавливается в его начало.
"w" - Файл открывается только для записи. Указатель файла устанавливается в его начало. Всё старое содержимое файла теряется, счётчик длины файла устанавливается равным 0. Если файл с указанным именем не существует, функция пытается его создать. "w+" - Файл открывается на чтение и на запись. Указатель файла устанавливается в его начало. Всё старое содержимое файла теряется.
"a" - Файл открывается на добавление (запись). Указатель файла помещается в конец файла. Если файл с указанным именем не существует, функция пытается его создать. "a+" - Файл открывается на чтение и на запись. Вот несколько примеров открытия файлов с помощью fopen()
$fp = fopen ("/home/a/bases.dat", "r");
$fp = fopen ("/home_dir/client/count.txt", "w+");
$fp = fopen ("http://www.yahoo.com/", "r");
В случае успешного завершения функция fopen() возвращает "ссылку" на открытый файл, а в случае ошибки эта функция возвращает булевское значение false.
В РНР имеется возможность удаленного открытия файлов путем указания URL-адреса в качестве параметра $ filename функции fopen (). Осуществлять запись в такие файлы, невозможно, но зато можно читать файлы, расположенные на Web- и FTP-серверах.
Закрытие файла: bool fclose ($fp).
URL, содержащие недопустимые символы (например, пробельные символы в имени файла), необходимо кодировать перед их использованием с помощью функции urlencode (). Функция urlencode () принимает единственный параметр (URL, подлежащий кодированию) и возвращает закодированный URL. Использование функции fореn()
<?php
/* Открыть файл для чтения */
$fr = fopen("myfile.txt", 'г');
/* Открыть бинарный файл для чтения/добавления */
$fr = fopen("myfile.dat", 'ba+');
/* Открыть файл для чтения/записи (искать файл в пути,
заданном директивой include_path)*/
$fr = fopen("code.php", 'w+', true);
/* Открыть файл index.php, для чтения по протоколу HTTP */
$fr = fopen("http://www.php.net/index.php", 'г');
/* Открыть файл index.php, для чтения по протоколу FTP */
$fr = fopen("ftp://ftp.php.net/index.php", 'г');
/*Закодировать URL, затем открыть для чтения по протоколу HTTP */
$url = "http://www.php.net/this is my invalid URL.php";
$url = urlencode($url);
$fr = fopen($url, 'r');
?>
Для работы с текстовыми файлами наиболее часто используются две функции: fgets (), которая извлекает строку из файла, и fputs (), которая записывает строку в файл.
Считывание строки: string fgets ( $fp, $length). Функция возвращает строку длиной до length-1 байт, считанную из файла $fp. Операция чтения завершается либо после загрузки length-1 символов, либо после обнаружения символа конца строки (который включается в возвращаемое значение), либо при обнаружении признака конца файла.
Вот пример построчного вывода на экран, содержимого файла:
<? //pr415
$fp = fopen ("pr415.php", "r");
while (!feof ($fp)) {
$stroka = fgets ($fp, 80);
echo $stroka."<BR>";
}
fclose($fp);
?>
Загрузка строки с пропуском HTML-тего выполняется функцией: string fgetss ($fp, $length [, string allowable_tags]). Функция работает идентично fgets(), за одним исключением: из считанной строки удаляются все HTML-теги, если таковые в ней присутствуют. Есть возможность использовать необязательный третий аргумент, для указания разрешенных тегов, которые удалены не будут.
Альтернативой fgets () является функция fscanf (). :
fscanf ($filename, $format , $var_one [, $var_two ...]]])
где $filename — входной поток, $format задает шаблон для чтения, а $var_one, $var_two представляют собой переменные, в которых сохраняются разобранные фрагменты данных (эти параметры необходимо передавать по ссылке). В случае успешного завершения ввода fscanf () возвращает количество разобранных элементов, а случае ошибки возвращает значение false.
Функция fputs ()служит для записи строки (или любых других данных) в указанный поток и имеет следующийсинтаксис: fputs($filename, $data [, int $length]), где $filename представляет выходной поток, $data содержит записываемые данные, а необязательный параметр $length задает размер фактически записываемых данных.
Выполнить одно из перечисленных ниже упражнений
В следующих заданиях использовать файлы, строки и объекты.
1. Текст записан одной длинной строкой. Признаком красной строки служит символ $. Переформатировать текст в 60-символьные строки, формируя абзацы.
2. Текст, сформированный построчно, выровнять по правому краю так, чтобы каждая строка заканчивалась знаком препинания или одним пробелом. Выравнивание осуществить, вставляя дополнительные пробелы между словами (равномерно по всей строке).
3. Данный текст программы на каком-либо алгоритмическом языке и словарь зарезервированных слов этого языка (в английской транскрипции). Преобразовать текст, записав все зарезервированные слова прописными буквами, а остальные конструкции (имена и так далее) – строчными. Русские буквы (имена, литералы) не заменять.
4. Программа, записанная 80-байтовыми строками, в последних 8 байтах содержит номер строки. Строки упорядочены по номерам, но не обязательно с шагом 1. Поступает изменение к программе в таком виде. Вставить новые строки взамен имеющихся старых или между ними.
5. Текст записан 60-символьными строками, содержит следующие знаки корректуры: $ – сделать красную строку; # удалить следующее слово; @ – удалить следующую фразу. Произвести указанную корректировку, переформатируя строки в пределах абзаца.
6. Часто встречающаяся ошибка начинающих наборщиков – дважды записанное слово. Обнаружить и исправить такие ошибки в тексте, записанном 80-символьными строками; переформатировать строки в пределах абзаца.
7. Стихотворный текст (в строке не более 80 символов) имеет четырехстрочную строфу. Записать его «лесенкой» (по одному слову в строке), вставляя пустую строку после каждого четверостишья.
8. Поздравления. По заданному списку фамилий напечатать каждому упомянутому в списке поздравление к определенному празднику. Чтобы избежать шаблона, перечень желаемых благ выбирать как случайное подмножество из заготовленного списка (например, здоровья, счастья, продвижения по службе, долголетия и т. д.). Можно сделать переменными и название праздника – для универсальности программы.
9. Имеется список членов коллектива с указанием принадлежности каждого к различным общественным организациям (профком, ученый совет, общество книголюбов, федерация пентикса и т. д.). Напечатать приглашение всем членам на очередное заседание указанной организации. Задается только вид организации, место и время сбора.
12. В заданном тексте найти самое длинное слово и самую длинную фразу.
13. Обнаружено, что в тексте пропущены некоторые слова и словосочетания. Эти слова и словосочетания представлены отдельным списком в том порядке, в каком должны быть вставлены. Места вставки отмечены в тексте символом $. Откорректировать текст.
14. Текст не содержит собственных имен и сокращений, набран с использованием прописных и строчных русских букв. Проверить то, что все фразы (и только они) начинаются с прописной буквы; при необходимости откорректировать текст.
15. Текст, не содержащий собственных имен и сокращений, набран полностью прописными русскими буквами. Заменить все прописные буквы, кроме букв, стоящих после точки, строчными буквами.
16. IP-адрес посетителя страницы находится как элемент суперглобального массива S – Server[΄Remoute_ADDR΄]. Составить список посетителей за текущий день (неделю, месяц).
17. Запрет посещений с определенных IP-адресов. В массиве хранятся IP-адреса, выход с которых на наш сайт нежелателен. Сравнить IP-адрес посетителя с адресами из списка и не пускать нежелательного посетителя.
18. Составить список серверов ($_SERVER[΄SERVER_NAME΄]) и список страниц ($_SERVER[΄PHP_SELF΄]), которые мы посетили.
19. Составить список страниц, с которых приходят к нам посетители ($_SERVER[΄HTTP_REFERER΄]).
20. Составить список браузеров, операционных систем, поисковых роботов, которые посещают нашу страницу: ($_SERVER[΄HTTP_USER_AGENT΄]), таким же образом определяются менеджеры закачки типа ΄DownLoadMaster΄, ΄FlashGet΄ и другие.
21. Выяснить языковые предпочтения посетителя, который браузер отправляет серверу в HTTP-заголовке и помещает в массив $_SERVER[΄HTTP_ACCEPT_LANGUAGE΄].
Задание 4. Работа с базами данных
Выполнить одно из перечисленных ниже упражнений
Создать распределенную информационную систему. Из пользователей системы обязательно наличие Администратора и Зарегистрированного Пользователя.
В каждом из заданий необходимо выполнить следующие действия:
· Организацию соединения (пула соединений) с базой данных вынести в отдельный класс, метод которого возвращает соединение;
· Спроектировать БД. Привести таблицы к одной из нормированных форм. Создать БД.
· Создать класс для выполнения запросов на извлечение информации из БД с использованием компилированных запросов;
· Создать класс на добавление информации;
· Создать документ (XHTML, JSP и т.д.) с полями для формирования запроса;
· Результаты выполнения запроса передать клиенту.
1. Видеотека. В БД хранится информация о домашней видеотеке – фильмы, актеры, режиссеры.
Для фильмов необходимо хранить:
- название;
- актеров;
- дата выхода;
- страну, в которой выпущен фильм.
Для актеров и режиссеров необходимо хранить:
- ФИО;
- дата рождения.
· Найти все фильмы, вышедшие на экран в текущем и прошлом году.
· Вывести информацию об актерах, снимавшихся в заданном фильме.
· Вывести информацию об актерах, снимавшихся как минимум в 2-х фильмах.
· Вывести информацию об актерах, которые были режиссерами хотя бы одного из фильмов.
· Удалить все фильмы, дата выхода которых была более 2-х лет назад.
2. Расписание занятий. В БД хранится информация о преподавателях и проводимых ими занятиях.
Для предметов необходимо хранить:
- название;
- время проведения (день недели);
- аудитории, в которых проводятся занятия.
Для преподавателей необходимо хранить:
- ФИО;
- -предметы, которые он ведет;
- количество пар в неделю по каждому предмету;
- количество студентов занимающихся на каждой паре.
· Вывести информацию о преподавателях, работающих в заданный день недели в заданной аудитории.
· Вывести информацию о преподавателях, которые не ведут занятия в заданный день недели.
· Вывести дни недели, в которых проводится наименьшее количество занятий.
· Вывести дни недели, в которых занято наименьшее количество аудиторий.
· Перенести первые занятия заданных дней недели на последнее место.
3. Письма. В БД хранится информация о письмах и отправляющих их людях.
Для людей необходимо хранить:
- ФИО;
- дата рождения.
Для писем необходимо хранить:
- отправителя;
- получателя;
- тема письма;
- текст письма;
- дата отправки.
· Найти пользователя, длина писем которого наименьшая.
· Вывести информацию о пользователях, а также количестве полученных и отправленных ими письмах.
· Вывести информацию о пользователях, которые получили хотя бы одно сообщение с заданной темой.
· Вывести информацию о пользователях, которые не получали сообщение с заданной темой.
· Направить письмо заданного человека с заданной темой всем людям.
4. Сувениры. В БД хранится информация о сувенирах и их производителях.
Для сувениров необходимо хранить:
- название;
- производителя;
- дату выпуска;
- цену.
Для производителей необходимо хранить:
- название;
- страну.
· Вывести информацию о сувенирах заданного производителя.
· Вывести информацию о сувенирах, произведенных в заданной стране.
· Вывести информацию о производителях, чьи цены на сувениры меньше 1000.
· Вывести информацию о производителях заданного сувенира, произведенных в прошлом году.
· Удалить заданного производителя и его сувениры.
5. Заказ. В БД хранится информация о заказах магазина и товарах в них.
Для заказа необходимо хранить:
- номер заказа;
- товары в заказе;
- дату поступления.
Для товаров в заказе необходимо хранить:
- товар;
- количество.
Для товара необходимо хранить:
- название;
- описание;
- цену.
· Вывести полную информацию о заданном заказе.
· Вывести номера заказов, сумма которых не превосходит 100 и количество различных товаров равно 1.
· Вывести номера заказов, содержащие товар с заданным заказом.
· Вывести номера заказов, не содержащие товар с заданным названием и поступившие в течение текущего дня.
· Сформировать новый заказ, состоящий из товаров, заказанных в текущий день.
· Удалить все заказы, в которых присутствует заданное количество заданного товара.
6. Погода. В БД хранится информация о погоде в различных регионах.
Для погоды необходимо хранить:
- регион;
- дату;
- температуру;
- осадки.
Для регионов необходимо хранить:
- название;
- площадь;
- тип жителей.
Для типов жителей необходимо хранить:
- название;
- язык общения.
· Вывести сведения о погоде в заданном регионе.
· Вывести даты, когда в заданном регионе шел снег, и температура была ниже -10.
· Вывести информацию о погоде за прошедшую неделю в регионах, жители которых общаются на заданном языке.
· Вывести среднюю температуру за прошедшую неделю в регионах с площадью более 1000.
7. Города. В БД хранится информация о городах и их жителях.
Для городов необходимо хранить:
- название;
- год создания;
- площадь;
- количество населения для каждого типа жителей.
Для типов жителей необходимо хранить:
- город проживания;
- название;
- язык общения.
· Вывести информацию обо всех жителях заданного города, разговаривающих на заданном языке.
· Вывести информацию обо всех городах, в которых проживают жидели выбранного типа.
· Вывести информацию о городе с максимальным количеством населения и всех типах жителей в нем проживающих.
· Вывести информацию самом древнем типе жителей.
8. Словарь. В БД хранится англо-русский словарь, в котором для одного английского слова может быть указано несколько его значений и наоборот. Со стороны клиента вводятся последовательно английские (русские) слова. Для каждого из них вывести на консоль все русские (английские) значения слова.
9. Словари. В двух различных базах данных хранятся два словаря: русско-белорусский и белорусско-русский. Клиент вводит слово и выбирает язык. Вывести перевод этого слова.
10. Стихотворения. В БД хранятся несколько стихотворений с указанием автора и года создания. Для хранения стихотворений использовать объекты типа Blob. Клиент выбирает автора и критерий поиска.
· в каком из стихотворений больше всего восклицательных предложений?
· в каком из стихотворений меньше всего повествовательных предложений?
· есть ли среди стихотворений сонеты и сколько их?
Задание 5. Создание WEB-объектов
Клиентские методы HTTP
В HTTP метод клиента определяет запрос, отправленный от Web-клиента, либо РНР-сценария, HTTP-серверу. Существуют три основных типа запросов:
GET-запросы. Когда вы хотите только получить информацию от источника HTTP, то можете сделать это методом GET. Получить информацию можно из файла, либо от исполняемой программы на Web-сервере с указанным URL-адресом. Привлекательность HTTP состоит в том, что запрос GET делает выполнение программы таким же простым, как извлечение файла.
POST-запросы. Когда вы хотите отправить информацию от клиента Web-серверу, то используете запрос POST. Обычно это имеет место, когда вы отправляете содержимое Web-формы Web-серверу.
HEAD-запросы. Когда вы хотите получить информацию о запрошенном URL, но не информацию самого URL, то используете запрос HEAD.
По методу GET контент запроса посылается через поля формы или через строку URL, по методу POST – через поля формы. Запросы можно создать и отправить вручную с помощью средств JavaScript, а получить обратно с помощью методов PHP.
Простой способ просмотреть HTTP запросы и ответы состоит в установке плагина для браузера Firefox, который называется HttpFox и доступен для свободного скачивания.
Ниже приведен пример работы HttpFox для сервера localhost.
Обработка HTML-форм
Одно из главнейших достоинств PHP – это реализация возможности работы с формами HTML. Формы используется почтовыми службами, электронными магазинами и многими другими типами сайтов. Формы – удобный способ получения информации от посетителей сайта. Пример тому – гостевая книга, – которая обеспечивает обратную связь с посетителями и разработчиками сайта.
Формой называется конструкция, состоящая из поименованных элементов, заключенных между HTML-тэгами <form...> n</form>. В качестве элементов формы могут выступать поля ввода текста, кнопки, выпадающие меню, переключатели, квадратики для отметки галочкой checkbox, а также картинки формата jpg или gif. Каждый элемент формы может иметь свое имя. При этом каждый элемент клиентской формы может пересылаться на сервер и становится доступен серверным программам на PHP.
Наиболее важным свойством формы является то, что в ее заголовке в открывающем тэге <form...> можно указать адрес какого-либо файла. В этом случае при загрузке этого файла в программный код, если он будет там присутствовать, передадутся значения всех переменных, установленных в этой форме, в частности, значения всех элементов формы, как если бы эти значения были установлены в программе, расположенной в самом загружаемом файле. Таким образом, можно передавать значения переменных между различными web-страницами, используя их в программном коде.
Если в конфигурационном файле РНР - php.ini - параметр register_globals установлен в on, имена передаваемых переменных соответствуют тем именам, которые были даны элементам формы, а значения - соответственно значениям этих элементов: для поля ввода текста - введенному тексту, для переключателя или checkbox - True при отмеченном и False при неотмеченном, для рисунка - координаты указателя мыши относительно верхнего левого угла изображения. Кроме того, переменные, передаваемые через форму, помещаются в ассоциативные массивы $_POST_ или $_GET. Содержимое поля ввода текста <input type=text name=’myname’ size=30> окажется в элементе $_POST['myname']) или $_GET['myname']). Различие между двумя методами состоит в том, что при передаче данных методом GET эти данные отображаются в адресной строке браузера, а при использовании метода POST - нет. Переменные $_POST и $_GET доступны и во всех функциях, расположенных в программе РНР, т. е. являются глобальными. Способ передачи данных через глобальные переменные является основным, поскольку в последних версиях PHP register_globals установлен в off по умолчанию. Ниже показаны обычно используемые суперглобальные переменные PHP: $_GET[], $_POST[], $_REQUEST[], $_COOKIE[], $_FILES[], $_SERVER[], $_ENV[], $_SESSION[].
Передача переменных в скрипт.
PHP скрипты используются для обработки на сервере полей форм, которые задаются на клиенте. Форма содержит тэги и атрибуты:
<form name="имя_формы" action="путь_к_обработчику"
method="метод_передачи_переменных GET или POST ">
поля ввода...
</form>
Обработчик - это скрипт на сервере, в который будут переданы значения полей ввода. Каждое поле ввода имеет имя, задаваемое атрибутом name и передается в обработчик вместе со своим значением. Рассмотрим пример:
<form action="action.php" method="POST">
Ваше имя: <input type="text" name="name" />
Ваш возраст: <input type="text" name="age" />
Пароль:<input type="text" name="password" />
<input type="submit">
</form>
Когда пользователь заполнит форму и нажмет кнопку отправки submit, будет вызван обработчик action.php. В этом файле может быть:
<html><body>Здравствуйте,
<?php
echo $_POST["name"];
?>.
Вам <?php echo $_POST["age"]; ?> лет.
Пароль:<?php echo $_POST["password"]; ?>
</body></html>
Вывод:
Здравствуйте, Егор.Вам 20 лет. Пароль:******
Метод отправки формы - POST. Переменные The $_POST["name"] и $_POST["age"] автоматически установлены в значения из формы средствами PHP. Если бы мы использовали метод GET, то информация нашей формы была бы в суперглобальной переменной $_GET. Также можно использовать переменную $_REQUEST, если источник данных не имеет значения. Эта переменная содержит смесь данных GET, POST, COOKIE и FILE.
Передача значений переменных по методу GET
При использовании метода GET все данные упаковываются в адресную строку. Причем происходит это следующим образом: вначале имена переменных и их значения преобразуются в вид, безопасный для передачи в строке URL (особенно хорошо это заметно, когда передаются русские символы), после чего все данные преобразуются в форму name=value и собираются в одну строку, отделяясь друг от друга знаком & (амперсанд). Происходит это таким образом:
http://site.domain/action.php?имя=значение&имя=значение
Пары "имя=значение" создаются для каждого элемента ввода, для которого указано имя атрибутом NAME.
В таком виде данные и попадают скрипту, который уже самостоятельно должен проделать обратную операцию и извлечь из строки названия переменных и их значения. Строка запросаможет содержать не более 254 символов. Это одно из ограничений метода GET, которое не позволяет передавать объемные данные.
В отличие от других серверных языков программирования, PHP делает всю нудную работу по расшифровке строки запроса, переданной методом GET, на себя и предоставляет нам уже готовые для использования в скрипте переменные. Причем имя переменной образуется из имени, указанного в соответствующем элементе формы. Если пользователь ввел в строке $name запроса имени "Гриня", то в скрипте автоматически появится переменная $name, которая будет иметь значение "Гриня".
По определению, все данные, передаваемые этим способом, доступны всем и могут быть прочитаны кем угодно. Поэтому им не рекомендуется пользоваться для передачи секретной информации - например паролей.
Рассмотрим пример передачи данных через строку URI:
<!—pr421.php -->
<html>
<head> </head>
<body>
<?php //
$a =$_GET['a'];
$b =$_GET['b'];
$c++;//Если режим on включен. Следует сначала написать $с =$_GET['с'];
echo "a=$a,b=$b"; //
print "<br>c=$c";//
echo "<br> <a href='pr421.php?a=1&b=2&c=3'> новая передача</a>"
?>
</body>
</html>
Получим после запуска вида:
http://localhost/MyPrimers/pr421.php?a=10&b=20&c=30
a=10,b=20
c=31
новая передача
Если нажмем на гиперссылку новая передача, получим
a=1,b=2
c=4
новая передача
Передача данных из клиентской формы на сервер по методу GET
<html><head>
<title>Simpleform.html </title>
</head>
<body>
<form action="form.php" method="GET">
Имя:<input type="text" name="fio"><p>
<input type="submit" value="GO"><p>
</form>
</body>
</html>
<?php //form.php
echo "Hello, $fio<br>";
foreach($_GET as $fio=>$value);
echo "$fio=$value<br>";
print_r ($_GET);
print_r ($_REQUEST);
?>
Результат:
Hello,valera
fio=valera
Array ( [fio] => valera ) Array ( [fio] => valera )
Передача данных из клиентской формы на сервер по методу POST
Метод POST, в отличие от GET, передает все данные на стандартный вывод. Соответственно, и ограничений на длину информации нет.
Какой же из этих методов лучше? Это зависит от конкретной ситуации. Для передачи информации, вводимой в форме, в большинстве случаев лучше подходит метод POST. А вот в случае динамических сайтов, когда показываемая страничка определяется не только адресом странички, но и переменными (типичный представитель - интернет-магазин), лучше использовать метод GET.
Кроме простого задания переменной в форме, PHP позволяет использовать для этой цели и массивы. В этом случае код нашей формы будет выглядеть вот так:
<form action="formmail.php" method="post">
Ваше имя:
<input type="text" name="user[name]"><br>
Электронный адрес:
<input type="text" name="user[email]"> <br>
Сообщение:
<textarea name="user[message]"></textarea><br>
<input type="submit" value="Отправить">
</form>
Теперь все введенные пользователем данные будут находиться в массиве $user, что очень удобно для больших форм и передачи множества данных в функцию.
Задание состоит в выделении и создании основных объектов web страницы:
Admin, Новости, Форумы, Голосование, Счетчики, Информация о посетителе, Анкета, Гостевые книги, Форумы, Баннеры, Ссылки и каталоги ссылок, Чаты и общение, Электронная почта, Открытки, Статистика, Защита, Игры, Мультимедия и музыка, Тесты и викторины, Доски объявлений, Знакомства, обратная связь, галерея, календарь, рассылка/авторассылка и т.д.
Для используемых форм предусмотреть обязательные для заполнения поля формы. Выполнить проверку числовых или строковых полей на клиенте и на сервере. Для проверки данных использовать JavaScript или PHP.
Для хранения информации предусмотреть использование a) файл b)БД MySql.
Список заданий
1. Загрузка файла на сервер. Просмотр каталога из клиентской формы. Выбор файла и загрузка на сервер
2. Система отправки писем Send Mail. Отправка e-mail. E-mail с вложенными файлами. Интерфейс:
- Имя.
- e-mail.
- Отправить.
- Обратная связь или «контакты».
3. Рекомендация другу. На указанный e-mail оправляется письмо со ссылкой и рекомендациями, подписанные вами.
4. Система рассылки SMS - сообщений. Поддержка мобильной связи.
5. Система рассылки ICQ - сообщений.
6. Получение информации о клиенте и сервере.
7. Регистрация на сайте. Заполнить регистрационную форму: Фамилия, Имя, Город, E-Mail, login.
Система должна сгенерировать уникальный password. После регистрации отослать password по E-Mail.
8. Авторизация посетителя на сайте (логин, пароль, смена пароля и т.д.).
9. Счетчик посещений Counter – текстовый и графический.
10. HTTP Аутентификация и приветствие зарегистрированного клиента.
Интерфейс: Не видели Вас две недели Сэр. Рады видеть Вас снова на нашем сайте.
11. Удаленный web-counter. Необходимо реализовать службу наподобие RAMBLER:TOP100. Интерфейс: пользователь регистрируется и получает идентификатор. Таким образом он связывает свою страницу с сервером- носителем web-couter-а. После этого служба должна вести учет посетителей страницы пользователя.
Необходимо осуществить администраторские функции по включению и исключению произвольного пользователя администратором.
12. Откуда заходят посетители или поисковые машины. Адрес, IP- адрес, государство.
13. Подсчет on-line посетителей на сайте.
14. Администрируемая Гостевая книга.
- Имя:
- e-mail:
- Сайт:
- Город:
- Сообщение:
- Отправить
Интерфейс: пользователь заходит на страницу гостевой книги, на которой он сможет ввести сообщение, а также просмотреть сообщения оставленные другими пользователями. Создать две кнопки “Ввести” и “Просмотреть”.
Должны быть выполнены такие администраторские функции как включение и исключение сообщения в гостевой книге, запрет и управление запретом на включение сообщения содержащее определяемые администатором выражения, запрет и управление запретом на включение сообщения с заданных администатором хостов.
Помимо указанных пунктов можно предусмотреть:
1. Ответ администратора
2. Шаблон вывода.
3. Фильтр слов.
4. Смайлы
15. Голосование.
Интерфейс:
Как жизнь?
.Отлично
.Хорошо
.Средне
.Плохо
.Хуже плохого
Проголосовать
Для реализации голосования продумать детали:
1) Структура базы или файлов.
2) Логику скрипта (вывод результатов, само голосование, администрирование, архив).
3) Интерфейс пользователя.
4) Анти-флуд (для защиты от накрутки).
5) Администрирование - создается как отдельный скрипт, который защищается паролем и содержит формы управления голосованием. Голосование делается на определенный срок, потом оно неактивно. Оно может принудительно закрываться админом.
16. Система оценки материалов, расположенных на сайте.
17. Тесты и викторины.
18. FTP – клиент на PHP. FTP. Список файлов каталога. Загрузка файла с FTP-сервера. Загрузка файла на FTP-сервер.
19. Система отслеживания адресов по которым скачиваются копии текста из данного сайта.
20. Файловый менеджер
– удалять файлы и папки с сайта
– копировать
– переименовать
– создавать новые папки
– загрузка файлов на сайт
21. Электронная почта и список рассылки.
Список рассылки представляет собой систему регистрации удаленных пользователей с целью получения этими пользователями электронных писем с информацией. Интерфейс: произвольный пользователь заходит на страницу списка рассылки, регистрирует там свой E-MAIL, администратор заходит на страницу администрирования, там он набирает письмо, которое затем отправляется зарегистрированным пользователям. Необходимо также реализовать простейшие администраторские функции: исключение пользователя из списка рассылки, включение в список рассылки (подписка и отписка), сохранение отправляемого сообщения(с возможным архивированием), операции связанные с авторизацией (смена пароля и т.д.).
22. Доска объявлений.
23. Знакомства. Служба знакомств.
24. Чаты и общения.
25. Forum & FAQ.
Струтура базы для форума.
Таблица пользователи:
|ID_user|User_pass|User_Name
Таблица форумов:
|ID_forum|Forum_name
Таблица тем
|ID_theme|ID_foruma|ID_Autor|theme_name|theme_text
Посты:
|ID_post|Post_data|Post_autor|Post_text|
26. Навигация на PHP: Различные меню, карта сайта.
27. Cookie. Установка cookie. Чтение cookie. Срок действия cookie. Удаление cookie.
28. Сеансы. Сохранение данных сеансов. Создание счетчика посещений.
Сеансы без cookie. Удаление данных сеансов.
29. Система аутентификации пользователей с помощью сеансов и cookie.
30. Переводс русского на транслит и обратно «text на translite».
31. Количество кликов по ссылкам на другие сайты.
32. Калькулятор.
33. Фотогалерея.
34. Календари и органайзеры.
35. Словарь – переводчик.
36. Система поиска для web-сервера.
В силу того что поисковые системы общего назначения(такие как Altavista) не позволяют выделить ресурсы отдельного сервера и производят модификацию своих баз данных медленно, возникает необходимость создать свою службу поиска. Поиск производится только для документов хранящихся на сервере-носителе службы. Должен поддерживаться поиск по сложным выражениям, включающим логические операторы и *.
37. Рубрикатор: Система поиска по первой букве (A,B,C…).
38. Использование региональных настроек.
39. Элементы управления и расширенные элементы управления.
40. Баннеры.
41. Быстрый переход на избранные сайты, спроектированный в виде выпадающего меню.
42.Электронные платежные системы
43.Интернет – радио и телевидение
44.Поисковые системы
45.FTP- серверы
46.Служба IRC
47. Написать сервис-редактор изображений. Возможности: конвертирование в различные форматы, изменять размер изображения и сохранять его, реализовать различные фильтры и т. д.
48. Написать скрипт чата. Особенности:
· Страница входа
· Страница с личными настройками
· Общие комнаты
· Комнаты с приватными сообщениями
· Возможность добавить картинку-аватар.
49. Скрипт проверки наличия новых личных сообщений на каком-либо популярном форуме (сайте). Особенности:
· Получение html-страницы при помощи CURL (вход в авторизированный раздел отправкой post-запроса на страницу логина)
· Проверка наличия новых сообщений на странице (NegExps)
· Отправка уведомлений на почту
50. Создать серверную спамилку (спамит по форумам PHPbb и гостевым книгам).
51. Создать синонимайзер (заменить синонимами данный текст).
52. Создать сервис по определению Tug и PageRank сайта.
53. Создать сервис по определению доменов, которые заканчиваются или брошенные. (Работа с сервисом Whois) зона .com; .info.
54. Создать Http-туннель. Создание цепи анонимных http, socks proxy.
55. Нахождение мультов (лиц, зарегистрировавшихся с одного IP несколько раз) и удаление несколько последних, оставляя первого.
56. Использование cookie & session: Пользователю, посетившему раздел музыка, предлагается банер с рекламой магазина музыкальных инструментов.
57. Написать игру типа «Кто хочет стать миллионером?»
58. Написать игру «Пятнашки».
59. Написать игру «Крестики-Нолики».
60. Игра «Морской бой» против компьютера.
61. Написать парсер (Вырезание статей со всех сайтов).
Литература
1. Протоколы информационно-вычислительных сетей. Под. ред. Мизина И.А. и Кулешова А.П. М.: Радио и связь, 1990, 504 с.
2. Halsall F. Data communications, computer networks and open systems. Addison-Wesley publishing company, 1992, 772 pp.
3. Santifaller M. TCP/IP and ONC/NFS: internetworking in a UNIX environment. Addison-Wesley (Deutschland) GmbH, 1994, 288 pp.
4. Джейсон Мейнджер. Java: основы программирования :Пер. с англ. - К.: Издательская группа BHV,1997.-320с.
5. Симкин Стив, Бартлет Нейл, Лесли Алекс. Программирование на Java. Путеводитель :Пер. с англ. - К. НИПФ «ДиаСофт Лтд», 1996. 736 с.
6. Кристиансен Т., Торкингтон Н. Perl: Библиотека программиста :Пер. с англ.- СПб.: Издательство «Питер», 2000. - 736с.: ил.
7. Холзнер Стивен. Perl: специальный справочник :Пер. с анг. - СПб.: Питер, 2000. - 496с.: ил.
8. Хейл, Бернард Ван. JDBC: Java и базы данных :Пер. с англ. М.,1999.-320с.
9. Эферган М. Java: справочник. - СПб.: Питер, 1998. -448с.: ил.
10. http://www.citforum.ru
11. http://www.xpoint.ru
12. http://www.by.iatp.org.ua
13. http://phpclub.unet.ru
14. http://www.webmasteram.ru
15. http://kek.ksu.ru
16. http://inftech.webservis.ru
17. http://dit.vov.ru
18. http://chip.ua
19. http://www.adobe.com/support/dreamweaver/
20. " Adobe Dreamweaver CS4: System Requirements and languages ". "Adobe Dreamweaver CS4: Системные требования и Языки". http://www.adobe.com/products/dreamweaver/systemreqs/ .
21. www.adobe.com, www.adobe.com/ru
WEB 2.0 сервисы и приложения.
1. http://wikipedia.org/
2. http://livejournal.com/
3. http://del.icio.us/
4. http://www.ebay.com/
5. http://www.craigslist.org/
6. http://www.skype.com/
7. http://www.google.com/adsense
8. http://netvibes.com/
9. http://maps.google.com/
10. http://habrahabr.ru/
11. http://digg.com/
12. http://www.backpackit.com/
13. http://www.basecamphq.com/
14. http://sourceforge.net/
15. http://youtube.com/
16. http://imageshack.us/
17. http://news.yandex.ru/export.html
18.ещё примеры на http://web2.ajaxprojects.com/
Примеры сайтов
Википедия — Свободная многоязычная энциклопедия
Google Maps — Google-карты
Gmail — Google-почта
Flickr — онлайн-фотоальбом
del.icio.us — служба онлайновых закладок
Netvibes — Персональный десктоп
Digg.com — Новостной ресурс
Pligg — Веб 2.0 CMS
Quintura — Визуальный поисковик с интуитивной картой подсказок
Live Journal — сервис для ведения блогов
Youtube — видеосервис
MySpace — сайт сетевых сообществ
Last.fm — музыкальное сообщество