Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Препроцессор гипертекста

Работа добавлена на сайт samzan.net:


  1.  PHP

PHP -  Препроцессор гипертекста. Это серверный язык программирования, созданный специально для динамических страниц Web. Язык был первоначально разработан в 1994 г. Расмусом Лердорфом и был с тех пор расширен, чтобы стать одним из наиболее популярных языков сценариев WWW. Согласно статистике Netcraft в 2005 г. PHP использовался более чем на 23000000 доменах. Подобно другим типам серверных языков, таких, как ASP, ASP.NET и JSP, код PHP обрабатывается на сервере Web и создает код HTML или другой вывод, который можно увидеть в браузере. В отличие от других серверных языков, PHP является продуктом с открытым исходным кодом — это означает, что каждый имеет доступ к исходному коду и может использовать, изменять и распространять его полностью бесплатно.

Текущая версия PHP имеет номер 5. Систему PHP5 можно применять практически с любым типом операционной системы и сервера Web. Однако, чтобы сценарии PHP были обработаны, должен быть установлен интерпретатор PHP. Это программное обеспечение доступно в двух формах – полный исходный код и исполняемые двоичные файлы. Большинство систем Linux поставляются с исходным кодом PHP.

2. Соединение HTML и PHP

Код PHP обычно объединяется с тегами HTML. PHP является встраиваемым языком — это означает, что можно перемещаться между чистым кодом HTML и PHP, не жертвуя возможностью чтения текста.

Чтобы встроить код PHP в HTML, PHP должен задаваться обособленно, с помощью начального и конечного тегов PHP. Теги PHP говорят серверу Web, где начинается и заканчивается код PHP. Анализатор PHP распознает три варианта начального и конечного тегов.

  •  Стиль XML
  •  <?php
  •  Блок кода PHP

?>

Первый вариант тегов PHP называется тегами в стиле XML и является предпочтительным стилем. Он работает в документах Расширяемого языка разметки (XML). Этот метод должен использоваться при соединении PHP с документами XML и XHTML.

Сокращенный стиль

  •  <?
  •  Блок кода PHP

?>

Сокращенный стиль является самым простым, однако, вступает в противоречие с объявлениями документов XML.

  •  Стиль сценария (script)
  •  <script language="php">
  •  Блок кода PHP

</script>

Этот стиль использует самую длинную запись и похож на стиль тегов, применяемых с JavaScript. Этот стиль является предпочтительным при использовании редактора HTML, который не распознает другие стили тегов.

Блоки сценария могут размещаться в любом месте документа HTML, в том месте, где сценарий создает и показывает свой вывод. Следующий пример страницы HTML иллюстрирует использование трех форматов тегов сценария.

<p>

<?php echo "Это базовый документ PHP";?>

</p>

<p>

<? print "PHP – это здорово!";?>

</p>

<p>

<script language="php">

$myvar = "Hello World! ";

echo $myvar;

</script>

</p>

В предыдущем примере три блока PHP включены в документ HTML. Первый блок использует открывающий и закрывающий теги <?php ... ?>. Сегмент кода использует оператор PHP echo для вывода строки "Это базовый документ PHP" в окне браузера.

Второй блок применяет теги <? ... ?> для пометки начала и конца кода PHP. Этот раздел применяет оператор PHP print (другое имя оператора echo ) для вывода на экране текста "PHP – это здорово!".

Наконец, третий блок использует блок сценария <script language="php"> ... </script> для определения начала и конца кода PHP. В коде строка "Hello World!" присваивается переменной $myvar, а оператор echo выводит значение $myvar в окне браузера.

Это базовая страница PHP.  

PHP – это здорово!

Hello World!

Пример показанного выше кода включает теги HTML, теги PHP, операторы PHP и разделители. Когда пользователь запрашивает страницу PHP, сервер обрабатывает весь код PHP. Когда страница PHP просматривается в окне браузера, выводится только текст между открывающим и закрывающим тегами HTML или PHP. Никакой реальный код PHP не виден при просмотре исходного кода в окне браузера. Причина в том, что интерпретатор PHP выполняет сценарий на сервере и заменяет код результатом вывода работы сценария. Только этот вывод передается браузеру. Это одна из характеристик, которая делает PHP серверным языком сценариев, в отличие от JavaScript, языка сценариев клиента.

3. Вывод контента

PHP содержит два основных оператора для вывода текста в браузере Web: echo и print.

Оба оператора, echo и print, кодируются между открывающим и закрывающим тегами блока кода PHP и могут находиться в любом месте в документах HTML.

Операторы echo и print используют следующий формат:

echo – используется для вывода одной или нескольких строк.

echo "Выводимый текст";

print – используется для вывода строки. В некоторых случаях оператор print предлагает большую функциональность, чем оператор echo. Это будет рассмотрено далее в учебнике. Пока print можно считать другим именем оператора echo.

print "Выводимый текст";

Следующие примеры демонстрируют использование и размещение команд echo и print в документе XHTML.

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>Страница Web</title>

</head>

<body>

<p>

<?php

echo "Это базовый документ PHP";

?>

</p>

</body>

</html>

В большинстве случаев необходимо выводить целые параграфы в окне браузера или создавать переносы строк при выводе контента. По умолчанию операторы echo и print не создают автоматические переносы строк, необходимо использовать тег <p> или <br> для создания параграфов или переносов строк. Разделители, создаваемые в редакторе HTML с помощью возврата каретки, пробелов и табуляции, игнорируются процессором PHP.

В следующем примере тег параграфа HTML включается в оператор PHP echo. В PHP теги HTML можно применять в операторах print и echo для форматирования вывода. В этих случаях вывод необходимо заключать в двойные кавычки (""), чтобы гарантировать, что браузер не интерпретирует тег буквально и не выведет его как часть строки вывода.

echo "<p>Параграф 1</p>";

echo "<p>Параграф 2</p>";

Без использования тега параграфа HTML предыдущие операторы echo будут выводить контент в следующем виде:

Параграф 1 Параграф 2

При включении тегов параграфов операторы выводятся как два отдельных параграфа.

Параграф 1

Параграф 2

3. Терминатор инструкции

Каждая строка кода PHP должна завершаться терминатором инструкции (признаком конца), в качестве которого используется точка с запятой (;). Терминатор инструкции применяется для отделения одного множества инструкций от другого.

Отсутствие терминатора инструкции может приводить к ошибкам в работе интерпретатора PHP и выводу ошибок в окне браузера. Следующий фрагмент кода показывает распространенную ошибку отсутствия терминатора инструкции.

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>Страница Web </title>

</head>

<body>

<p>

<?php

echo "Эта строка порождает ошибку"

echo "В предыдущей строке отсутствует терминатор инструкции";

?>

</p>

</body>

</html>

В этом примере в первом операторе echo пропущен терминатор инструкции. Так как интерпретатор PHP не может определить конец первого оператора echo и начало второго, то происходит ошибка. В зависимости от настроек Обработки ошибок (Error Handling) интерпретатора, будет выводиться сообщение об ошибке или браузер выведет просто пустую страницу.

Далее показано типичное сообщение об ошибке, которое выводится, когда пропущен терминатор инструкции:

Parse error: syntax error, unexpected T_PRINT in C:\ApacheRoot\test.php on line 11

Ошибка при разборе: синтаксическая ошибка, непредвиденный T_PRINT в ... в строке  11

Как можно видеть, сообщения об ошибках PHP достаточно загадочны по своей природе. Отсутствие терминатора инструкции является распространенной ошибкой среди новичков PHP. Со временем появится привычка проверять каждую строку на наличие терминатора инструкции.

4. Комментарии в коде

Комментарии применяются в PHP для записи собственных замечаний во время процесса разработки кода. Такие комментарии могут определять назначение сегмента кода или их можно использовать для исключения блоков кода во время тестирования и отладки сценариев.

Синтаксический анализатор PHP игнорирует комментарии. Комментарии в PHP можно определить одним из следующих способов:

// — простой комментарий PHP;

# — альтернативный простой комментарий PHP;

/*...*/ — многострочные блоки комментариев.

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>Страница Web </title>

</head>

<body>

<p>

<?php

// Простой комментарий PHP

#  Другой тип простого комментария PHP

/* Многострочный блок комментария PHP

Он может занимать любое необходимое

количество строк */

?>

</p>

</body>

</html>

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

5. Скалярные переменные

Переменные являются временным местом хранения, используемым для представления значений в сценарии PHP. В PHP имеется два основных типа переменных: скалярные и массивы. Скалярные переменные содержат только одно значение в данный момент времени, а переменные массивы — список значений. Переменные массивы обсуждаются в следующем разделе. Скалярные переменные PHP содержат значения следующих типов.

Целые – целые числа или числа без десятичной точки (1, 999, 325812841).

Числа с плавающей точкой – числа, содержащие десятичную точку (1.11, 2.5, .44).

Строки – текстовая или числовая информация. Строковые данные всегда определяются с помощью кавычек ("Hello World", "478-477-5555").

Булевы значения – используются для значений true (истина) или false (ложь).

Имена переменных PHP всех типов начинаются со знака "$". Имена переменных могут содержать буквы, числа, и символ подчеркивания ( _ ); они не могут, однако, начинаться с цифры. В PHP имена переменных различают регистр символов. Следующие переменные в PHP интерпретируются как две различные переменные.

$myvar

$MYVAR

Допустимые имена переменных:

$myvar

$F_Name

$address1

$my_string_variable

Недопустимые имена переменных:

Myvar

$1stvar

$&62##

Скалярным переменным PHP присваивают значения в следующем формате:

$username = "jdoe"

$first_name = "John"

$Last_Name = "Doe"

Переменная username содержит значение jdoe.

6. Вывод переменных

Следующий фрагмент кода демонстрирует, как объявить скалярную переменную, присвоить скалярной переменной значение и вывести результаты в окне браузера:

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>Страница Web</title>

</head>

<body>

<p>

<?php

$string_var = "Моя программа PHP";

$integer_var = 500;

$float_var = 2.25;

echo $string_var;

echo $integer_var;

echo $float_var;

?>

</p>

</body>

</html>

Переменные массивы PHP можно создавать и присваивать им значения с помощью конструкции array() или явным образом.

Переменную можно соединять с другими переменными или тегами HTML с помощью оператора PHP — точки ( .). В предыдущем блоке кода значения переменных выводятся в следующем формате:

Моя программа PHP5002.25

Чтобы создать возврат каретки или перенос строки, можно присоединить тег HTML <br/> в конце каждой пременной:

<?php

$string_var = "My PHP program" . "<br/>";

$integer_var = 500 . "<br/>";

$float_var = 2.25;

echo $string_var;

echo $integer_var;

echo $float_var;

?>

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

My PHP Program

500

2.25

7. Соединение переменных

Оператор точки можно использовать также для соединения строк и переменных:

Сообщение — The user\'s name is John Doe — выводится в окне браузера.

Строка "The user's name is " соединяется со значением $fname (John), за которым следует пробел " ", и значением $lname (Doe).

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>A Web Page</title>

</head>

<body>

<p>

<?php

$fname = "John";

$lname = "Doe";

echo "The user\'s name is " . $fname ." ". $lname;

?>

</p>

</body>

</html>

The user\'s name is John Doe

8. Интерполяция

PHP поддерживает также процесс, называемый интерполяцией – замену переменной в строке ее содержимым. Вместо соединения переменных и литералов, их можно объединять внутри двойных кавычек (""). Интерполяция является свойством только двойных кавычек. Переменные и литералы нельзя объединить внутри одиночных кавычек. При использовании двойных кавычек значение переменной выводится вместе с литералом. При использовании одиночных кавычек выводится "буквально" имя переменной вместе с остальной строкой. Следующий пример иллюстрирует свойство интерполяции PHP.

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>A Web Page</title>

</head>

<body>

<p>

<?php

$fname = "John";

$lname = "Doe";

echo "The user\'s name is $fname  $lname";

?>

</p>

</body>

</html>

Этот код создает такой же вывод, как и предыдущий пример. Здесь переменные объединяются с помощью литеральной строки, заключенной в двойные кавычки. Соединение (конкатенация) не требуется.

9. Переменные массивы

В то время как скалярная переменная PHP хранит одно значение, переменную массива можно использовать для хранения множества или последовательности значений. Система PHP поддерживает массивы с числовыми индексами и ассоциативные массивы. Массив в PHP является фактически упорядоченным отображением. Отображение является типом, который отображает значения в ключи. Переменные массивов состоят из двух частей – индекса и элемента. Индекс массива, иногда называемый ключом массива, является значением, применяемым для идентификации или доступа к элементам массива. Индекс массива помещается в квадратные скобки. Большинство массивов используют числовые индексы, которые обычно начинаются с 0 или 1. В PHP ассоциативные массивы могут использовать строковые индексы. Оба типа массивов создаются с помощью конструкции array().

9.1 Массивы с числовыми индексами

$my_array = array('red', 'green', 'blue');

Этот код создает массив с числовым индексом с именем $my_array. Массиву присваивается три элемента — red, green, и blue. Каждый элемент идентифицируется числовым индексом.

$my_array[0] = 'red' // индекс 0 соответствует элементу red

$my_array[1] = 'green' // индекс 1 соответствует элементу green

$my_array[2] = 'blue' // индекс 2 соответствует элементу blue

Чтобы получить доступ к содержимому массива, используется имя массива и индекс. Следующий код применяется для вывода значений переменной $my_array.

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>Страница Web </title>

</head>

<body>

<p>

<?php

$my_array = array('red', 'green', 'blue');

echo "Первое значение массива — " . $my_array[0];"<br/>";

echo "Второе значение массива — " . $my_array[1];"<br/>";

echo "Третье значение массива  — " . $my_array[2];"<br/>";

?>

</p>

</body>

</html>

Первое значение массива — red

Второе значение массива — green

Третье значение массива — blue

9.2 Ассоциативные массивы

Ассоциативные массивы позволяют использовать более полезные значения индекса. Для массивов с числовыми индексами значения индекса создаются автоматически, начиная с 0. Ассоциативные массивы допускают применение числовых и строковых значений индекса. Символ между индексом и значениями ( => ) является знаком равенства, за которым сразу следует символ больше.

$members = array('FName' => 'John', 'LName' => 'Smith', 'Age' => 50)

В этом примере члены массива содержат три элемента, однако используются строковые индексы — FName, LName и Age.

$members['FName'] = 'John' //индекс FName соответствует элементу John

$members['LName'] = 'Smith' // индекс LName соответствует элементу Smith

$members['Age'] = '50' // индекс Age соответствует элементу 50

Для доступа к содержимому массива используется имя массива и индекс. Следующий код применяется для вывода значений переменной $members.

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>Страница Web </title>

</head>

<body>

<p>

<?php

$members = array('FName' => 'John', 'LName' => 'Smith', 'Age' => 50);

echo "The user\'s first name is " . $members['FName'];

echo "The user\'s last name is " . $members['LName'];

echo "The user\'s age is " . $members['Age'];

?>

</p>

</body>

</html>

The user's first name is John

The user's last name is Smith

The user's age is 50

10 Функции для работы с массивами

Кроме функции array() система PHP включает множество других функций для работы с массивами. Следующий раздел описывает некоторые из наиболее часто используемых функций. Более обширный список доступен на Web-сайте PHP.

count() – функция count используется для подсчета числа элементов в массиве.

sort() – функция sort используется для сортировки элементов существующего массива.

shuffle() – функция shuffle используется для случайного перемешивания элементов в заданном массиве.

sizeof() – функция sizeof является синонимом (алиасом) функции count().

array_slice($array_name,offset, length) – функция array_slice используется для извлечения части существующего массива. $array_name является именем разрезаемого массива, offset указывает позицию, где будет начинаться разрез, length указывает число элементов, которое будет вырезано из массива.

array_merge($array_name, $array_name) – функция array_merge используется для объединения или слияния двух или большего количества существующих массивов. Имена массивов разделяются запятыми.

Следующий код показывает, как применяется каждая из функций для работы с массивами.

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>Страница Web </title>

</head>

<body>

<p>

<?php

//Созданы два массива

$numbers = array(50,20,18,30,10,7);

$colors = array('red', 'blue', 'green');

// определяем размер массива $numbers — 6

$array_size = sizeof($numbers);  

// сортируем элементы массива $numbers – возвращает array(7,10,18,20,30,50)

sort($numbers);

// случайным образом перемешиваем элементы массива $numbers

shuffle($numbers);

// $merged_array возвращает array(7,10,18,20,30,50,'red','blue','green')

$merged_array = array_merge($numbers,$colors);

// вырезаем номера 18 и 20 из сортированного массива $numbers

// $slice содержит array(18,20)

$slice = array_slice($numbers, 2, 2);

?>

</p>

</body>

</html>

PHP включает также ряд предопределенных или глобальных массивов. Их называют также суперглобальными переменными, так как они всегда присутствуют и доступны для всех блоков сценария PHP. Ниже показаны обычно используемые суперглобальные переменные PHP.

$_GET[]

$_POST[]

$_REQUEST[]

$_COOKIE[]

$_FILES[]

$_SERVER[]

$_ENV[]

$_SESSION[]

Суперглобальные переменные PHP будут описаны в дальнейшем. Массивы имеют много применений в PHP и программировании в целом. Этот раздел представил некоторые базовые вопросы массивов PHP и описал некоторые базовые функции: это понадобится при рассмотрении более развитых свойств массивов в следующих разделах.

11 Константы PHP

Константы, как и переменные, являются временным хранилищем значений в памяти. В отличие от переменных значение константы никогда не изменяется. При объявлении константы используется функция define(), которая требует задать имя константы и значение этой константы.

Константам можно присваивать следующие типы данных.

Целые – целые числа или числа без десятичной точки (1, 999, 325812841).

Числа с плавающей точкой — числа, содержащие десятичную точку (1.11, 2.5, .44).

Строки – текстовая или числовая информация. Строковые данные всегда заключаются в кавычки ("Hello World", "478-477-5555").

Имена констант PHP в отличие от переменных не начинаются со знака "$". Имена констант обычно записывают в верхнем регистре. Имена констант могут содержать буквы, цифры и символ подчеркивания ( _ ); они не могут, однако, начинаться с цифры. Объявление констант показано ниже.

define("STRING_CONSTANT", "This is my string.");

define("NUMERIC_CONSTANT", 5);

11.1 Вывод констант

Следующий фрагмент кода демонстрирует объявление константы, присваивание константе значения и вывод результатов в окне браузера.

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>A Web Page</title>

</head>

<body>

<p>

<?php

define("STRING_CONST","My PHP program");

define("INTEGER_CONST",500);

define("FLOAT_CONST",2.25);

echo STRING_CONST;

echo INTEGER_CONST;

echo FLOAT_CONST;

?>

</p>

</body>

</html>

Пример 3.2. (html, txt)

My PHP program

500

2.25

В этом примере объявляются значения трех констант: STRING_CONST, INTEGER_CONST и FLOAT_CONST. Затем используется оператор echo для вывода содержимого констант в окне браузера. Кроме вывода в окне браузера, константы можно использовать при выполнении математических и строковых операций PHP.

11.2 Операторы PHP

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

Арифметические операторы

Операторы присваивания

Операторы сравнения

Логические операторы

Арифметические операторы используются для выполнения основных математических операций. В следующей таблице представлены арифметические операторы, которые применяются в PHP.

Оператор

Описание

+

сложение

-

вычитание

*

умножение

/

деление

%

сравнение по модулю (возвращает остаток от деления)

++

увеличивает значение

--

уменьшает значение

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>A Web Page</title>

</head>

<body>

<p>

<?php

// Оператор сложения

$sum = 5 + 2;

$sum = 7;

$newsum = $sum + 4;

echo "The sum is " . $newsum;

//The subtraction operator

$difference = $newsum - 2;

echo "The difference is " . $difference;

//The multiplication operator

$product = $difference * 3;

echo "The product is " . $product;

//The division operator

$quotient = $product / $difference;

echo "The quotient is " . $quotient;

//The Increment operator

$quotient++;

echo $quotient;

//The decrement operator

$quotient --;

echo $quotient;

?>

</p>

</body>

</html>

Пример 3.3. (html, txt)

The sum is 11

The difference is 9

The product is 27

The quotient is 343

11.3 Порядок выполнения операций

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

<?php

$num1 = 4;

$num2 = 5;

$num3 = 2;

$answer = $num1 * $num2 - $num3;

echo $answer;

?>

Получающееся значение будет равно 18. Сначала $num1 умножается на $num2, чтобы получить 20; затем $num3 вычитается из 20, чтобы получить 18. Предположим, однако, что в действительности надо сначала вычесть $num3 из $num2, а затем умножить на $num1, чтобы получить 12. Показанное выше выражение не создаст этот результат, потому что умножение имеет приоритет перед вычитанием и выполнится первым.

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

<?php

$num1 = 4;

$num2 = 5;

$num3 = 2;

$answer = $num1 * ($num2 - $num3);

echo $answer;

?>

В этот раз $answer равно 12. $num3 вычитается из $num2, чтобы получить 3. Затем 3 умножается на $num1.

Операторы присваивания используются для изменения значения текущей переменной на значение справа от оператора. В следующей таблице представлены операторы присваивания языка PHP.

Оператор

Описание

=

Переменной слева присваивается вычисленное справа значение

+=

Складывает значение слева со значением справа и присваивает результат переменной слева

-=

Вычитает значение справа из значения слева и присваивает результат переменной слева

*=

Умножает значение справа на значения слева и присваивает результат переменной слева

/=

Делит значение слева на значение справа и присваивает результат переменной слева

%=

Делит значение слева на значение справа и присваивает остаток (по модулю) переменной слева

.=

Значение слева соединяется (конкатенация) со значением справа, и результат присваивается переменной слева

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

Оператор

Описание

==

равно

!=

не равно

>

больше

<

меньше

>=

больше или равно

<=

меньше или равно

Логические операторы позволяют определять состояние условий. В зависимости от условия переменной в сценарии могут происходить различные действия. Логические операторы широко используются в управляющих структурах PHP. В следующей таблице представлены логические операторы языка PHP.

Оператор

Описание

&&

AND (И)

||

OR (ИЛИ)

!

NOT (НЕ)

12. Строки PHP

Строки являются последовательностями символов. В PHP символ соответствует байту, т.е. существует точно 256 возможных различных символов. Строки могут быть очень большими. В PHP не существует практического ограничения на размер строк, поэтому вообще нет причин беспокоиться об их длине. Строковые значения могут использоваться буквально или присваиваться переменным.

В PHP строковый литерал можно представлять тремя способами.

строки в одиночных кавычках

строки в двойных кавычках

12.1 Строки в одиночных кавычках

Одиночные кавычки предоставляют самый простой метод для работы со строками. При использовании этого метода строки заключаются в одиночные кавычки (' '). Если одиночные кавычки требуются как часть строки, они должны быть экранированы символом обратной косой черты ("\"). Хотя одиночные кавычки предоставляют простой способ работы со строками, одиночные кавычки не поддерживают применение интерполяции. Примеры ниже иллюстрируют использование одиночных кавычек.

<?php

//A literal string displayed in the browser window

echo 'PHP was developed in 1994 by Rasmus Lerdorf';

//A literal string assigned to a variable

$string = 'Since its development, PHP has become a popular scripting language.';

echo $string;

//escaping single quotes

echo 'The array contains the values \'2,5,3,4\'.';

//invalid attempt to expand a variable inside of a single quote string

$name = 'John Smith';

echo 'The user\'s name is $name';

?>

PHP was developed in 1994 by Rasmus Lerdorf

Since its development, PHP has become a popular scripting language.

The array contains the values '2,5,3,4'.

Parse error: syntax error, unexpected T_STRING, expecting ',' or ';'

Первая строка вывода является результатом работы оператора echo, который выводит литеральную строку в одиночных кавычках в окне браузера. Вторая строка выводится после присваивания строки в одиночных кавычках переменной. Переменная затем выводится с помощью оператора echo. Следующая строка вывода демонстрирует использование экранирующего символа.

12.2 Строки в двойных кавычках

Строки PHP можно выводить также с помощью двойных кавычек (""). Если строки PHP помещаются в двойные кавычки, то можно применять интерполяцию. Для строк в двойных кавычках PHP поддерживает также больше экранированных символов. Эти символы представлены в таблице ниже.

Символ

Описание

\n

перенос строки

\r

возврат каретки

\t

горизонтальная табуляция

\\

обратная косая черта

\$

знак доллара

\"

двойная кавычка

<?php

echo "PHP is supported by many operating systems including Windows and Linux.";

$name = "John";

echo "The user\'s name is $name.";

$fruits = array('grapes', 'peaches', 'strawberries');

echo "My favorite fruit is $fruits[0].";

?>

PHP is supported by many operating systems including Windows and Linux.

The user's name is John.

My favorite fruit is grapes.

Первая строка выводит строку в двойных кавычках с помощью оператора echo. Вторая - создается строкой с включенной переменной. Переменная расширяется, и ее содержимое выводится вместе со строкой. Затем расширяется переменная массива и выводится вместе со строкой.

12.3 Функции для работы со строками

Система PHP содержит ряд функций для работы со строками. Следующий список содержит некоторые из наиболее распространенных строковых функций.

strlen(string) – определяет длину строки string.

ltrim(string) – удаляет символы-разделители в начале строки string.

rtrim(string) – удаляет символы-разделители в конце строки string.

strpbrk(string, char) – ищет в строке string символ char. Возвращает false или строку, начинающуюся с найденного символа.

strtoupper(string) – преобразует строку в верхний регистр.

strtolower(string) – преобразует строку в нижний регистр.

strrev(string) – возвращает строку string в обратном порядке.

eregi(pattern, subject) – выполняет независимое от регистра символов сравнение с выражением. В строке subject происходит поиск регулярного выражения, заданного строкой pattern.

Следующий блок кода демонстрирует, как использовать строковые функции PHP.

<?php

$string = "Hello World";

$another_string = "Welcome to PHP";

echo strlen($string);

echo strtoupper($another_string);

echo strrev($another_string);

echo strpbrk($string, "W");

?>

11

WELCOME TO PHP

PHP ot emocleW

World

Первая строка выводит длину строки "Hello World", равную 11. Затем строка "Welcome to PHP" преобразуется в верхний регистр и выводится в окне браузера. Эта строка используется также с функцией strrev для изменения порядка символов строки на обратный. Наконец, в строке происходит поиск символа "W". Так как первое появление символа происходит в тексте "World", выводится эта строка.

12.4 Функции даты и времени

Базовые функции PHP для даты и времени позволяют форматировать отметку времени для применения в запросах базы данных или просто для вывода даты и времени в окне браузера. PHP включает следующие функции даты и времени:

date(format) – возвращает текущее время сервера, форматированное согласно заданному множеству параметров format.

checkdate(month, day, year) – проверяет заданную дату. Успешная проверка означает, что год year находится между 0 и 32767, месяц month – между 1 и 12, и правильное количество дней каждого месяца.

time() – возвращает текущее время сервера, измеренное в секундах, начиная с 1 января 1970 г.

Следующая таблица содержит допустимые форматы date():

a

выводит "am" или "pm"

A

выводит "AM" или "PM"

h

часы в 12-часовом формате (01 – 12)

H

часы в 24-часовом формате (00 – 23)

g

часы в 12-часовом формате без ведущего нуля (1 – 12)

G

часы в 24-часовом формате без ведущего нуля (0 – 23)

i

минуты (00 – 59)

s

секунды (00 – 59)

d

день месяца двумя цифрами (01 – 31)

D

день недели текстом (Mon – Sun)

l

день недели длинным текстом (Monday – Sunday)

F

месяц длинным текстом (January – December)

n

месяц двумя цифрами (1 – 12)

Y

год четырьмя цифрами (2005)

y

год двумя цифрами (05)

S

английские порядковые суффиксы (th, nd, st)

Следующая страница использует функцию PHP date() для определения и вывода текущего времени сервера и даты:

<?php

echo "<span style='font:10pt arial'>Today is ".date('l F j Y')."</span>";

echo "<br/>";

echo "<span style='font:10pt arial'>The current time is:</span>".

date('g:i:s a');

?>

Формат даты/времени, выводимый с помощью функции date(), зависит от типов параметров формата, подставленных в функцию. Параметры функции date() можно объединять, разделяя запятой ",", двоеточием ":" или другими знаками пунктуации, в зависимости от желаемого формата вывода. Все параметры, однако, должны быть заключены в одиночные кавычки. В примере выше время выводится с помощью параметров формата времени g, i, s, и a. Двоеточия и пробелы также вставляют для разделения часов, минут, секунд и признаков am/pm.

Функции checkdate() и time() обычно используются в процессах принятия решений. Поэтому они подробнее будут рассмотрены в дальнейшем.

13 Оператор If

При создании кода часто требуется выполнять различные действия на основе некоторого выбора. В PHP это можно делать с помощью условных операторов – оператора if, оператора if … else и оператора elseif.

if – этот оператор используется для выполнения блока кода, когда выполняется условие ( true ).

if...else – этот оператор используется для выполнения блока кода, когда условие выполняется ( true ), или для выполнения другого блока кода, когда условие не выполняется ( false ).

elseif – комбинация if и else. Оператор расширяет оператор if, чтобы выполнялся другой оператор в случае, если исходное выражение if оценивается как FALSE. В отличие от else он будет выполнять альтернативное выражение, только если условное выражение elseif оценивается как TRUE.

В том случае, когда необходимо выполнить блок кода, если выполняется некоторое условие ( true ), можно использовать оператор if.

Ниже представлен синтаксис оператора if:

if (условие) {

 // выполняемый код

}

Строки кода оператора if заключаются в фигурные скобки ( {} ). Эти скобки определяют начало (открывающая скобка { ) и конец (закрывающая скобка } ) оператора If. Следующий пример демонстрирует использование оператора if.

<?php

$number = 5;

if ($number <= 10)

{

echo "Число меньше или равно 10.";

}

?>

Число меньше или равно 10.

В приведенном выше примере число 5 присваивается переменной $number. Затем сценарий PHP использует оператор сравнения "<=" (меньше или равно) для сравнения значения $number с числом 10. Если значение меньше или равно 10, оператор echo выводит сообщение " Число меньше или равно 10" в окне браузера. Можно видеть, что скобки применяются для ограничения блока оператора if. Открывающая скобка { появляется сразу после оператора условия, а закрывающая скобка } — в конце оператора if.

Вспомните, что все операторы PHP должны завершаться с помощью терминатора инструкции ( ; ): echo "Число меньше или равно 10.";

В некоторых случаях может понадобиться предоставить альтернативное сообщение. В приведенном выше примере предположим, что переменная $number содержит число 15, которое больше 10. Альтернативное сообщение должно выводиться, чтобы пользователь знал: число больше 10. Это можно выполнить с помощью оператора if … else.

<?php

$number = 15;

if ($number <= 10) {

echo "Число меньше или равно 10.";

}

else {

echo "Число больше 10";

}

?>

Число больше 10.

В приведенном выше примере число 15 присваивается переменной $number. Затем сценарий PHP использует оператор сравнения "<=" (меньше или равно) для сравнения значения $number с числом 10. Если это значение меньше или равно 10, оператор echo выводит сообщение "Число меньше или равно 10" в окне браузера. Теперь в код добавлен оператор else, чтобы выводить альтернативное сообщение, если условие в операторе if не выполняется. Альтернативное сообщение "Число больше 10" выводится в окне браузера, если оператор условия возвращает false. Здесь также используются скобки для ограничения блока оператора if. Открывающая скобка { появляется сразу после оператора условия, а закрывающая скобка } — в конце оператора if. Скобки также используются для ограничения альтернативного блока оператора else.

Третий тип условного оператора является структурой elseif. Оператор elseif является комбинацией if и else. Подобно else он расширяет оператор if, чтобы выполнить другой оператор, если условное выражение исходного if оценивается как FALSE. Однако в отличие от else он будет выполнять это альтернативное выражение, только если условное выражение в elseif оценивается как TRUE. В одном операторе if может быть несколько структур elseif. Первое выражение elseif (если такое имеется), которое оценивается как TRUE, будет выполнено.

<?php

$number = 15;

if ($number < 10) {

echo "Число меньше 10.";

}

elseif ($number == 10) {

echo "Число равно 10.";

}

else {

echo "Число больше 10.";

}

?>

Число больше 10.

В этом примере числовое значение переменной $number сравнивается с 10. Сперва оператор if проверяет, что $number меньше 10. Если этот оператор выполняется ( true ), выводится сообщение "Число меньше 10". Затем оператор elseif используется для проверки, что $number равно 10. Если этот оператор оценивается как true, выводится сообщение "Число равно 10". Оператор elseif выполняется, ТОЛЬКО если оператор if возвращает FALSE. Наконец, если операторы if и elseif возвращают FALSE, выполняется оператор else и выводится сообщение "Число больше 10". В то время как оператор elseif позволяет проверить только одно условие, структуру if можно применять для проверки множества условий.

Следующий пример использует функцию checkdate(), функцию explode() и оператор if … else для проверки правильности строки даты.

<?php

$orig_date = "09/19/2005";

$date = explode("/", "$orig_date");

$month = $date[0];

$day = $date[1];

$year = $date[2];

$result = checkdate($month, $day, $year);

if ($result == true)

{

echo "Правильная дата";

}

else

{

echo "Неправильная дата!";

}

?>

Правильная дата

Операторы if можно использовать "в одиночку" либо как часть оператора if...else или if...elseif...else. В любом случае вы обнаружите, что эта структура будет важным элементом в любой программе.

14 Оператор switch

В дополнение к операторам if, рассмотренным в предыдущем разделе, PHP включает четвертый тип условного оператора, называемый оператором switch. Оператор switch очень похож или является альтернативой для команд if...else if...else. Оператор switch проверяет условие. Результат этой проверки определяет, какой case выполняется. switch используется обычно, когда ищут точный (равенство) результат, вместо условия больше или меньше. При проверке диапазона значений должен применяться оператор if.

switch – используйте этот оператор для выбора одного из нескольких блоков кода для выполнения.

Ниже представлен синтаксис оператора switch.

<?php

switch (выражение) {

case "значение1":

// код, который будет выполнен, если выражение = значение1;

break;

case "значение2":

// код, который будет выполнен, если выражение = значение2;

break;

default:

// код, который будет выполнен, если выражение не равно ни значение1, ни значение2;

}

?>

Подобно оператору if строки кода в операторе switch заключаются в фигурные скобки.

Эти скобки определяют начало и конец оператора switch. Следующий пример демонстрирует использование оператора switch.

<?php

$number = 25;

switch ($number) {

case 40:

echo "Значение \$number равно 40";

break;

case 25:

echo "Значение \$number равно 25";

break;

default:

 echo "Значение \$number отлично от 25 и 40";

}

?>

Оператор switch может включать множество операторов case. В предыдущем примере показаны два оператора case. Создается переменная $number, которой присваивается значение 25. Оператор switch используется для сравнения значения $number с другими значениями. Проверяемое (сравниваемое) выражение (в данном случае $number ) помещается внутри скобок сразу после оператора switch. Затем вызывается последовательность операторов case для сравнения выражения с другими значениями. Эти значения помещаются сразу после оператора case. (Примечание: если проверяемые значения являются строками, они должны заключаться в кавычки.) За значением, которое сравнивается с выражением, следует двоеточие ( :). Операторы case аналогичны конструкциям if и elseif. Если значение оператора case будет true, то выполняется код, связанный с этим оператором, и оператор break. Оператор break приводит к завершению оператора switch. Остальные операторы case проверяться не будут. В конце оператор switch содержит инструкцию default. Она аналогична оператору else. Если ни один из операторов case не будет выполнен (не будет иметь значение TRUE ), выполняется оператор default. Здесь одновременно происходит несколько вещей:

  1.  проверяется условие switch и находится значение ( $number == 25 );
  2.  значение условия передается по очереди операторам case ;
  3.  если это значение совпадает со значением case, выполняется код этого блока. Оператор break приводит к завершению оператора switch. Остальные операторы case не проверяются;
  4.  если проверяемое значение не совпадает ни с одним из значений case, выполняется раздел default ;
  5.  в приведенном выше примере, так как выражение "значение $number" равно 25, выполняется второй оператор case, и в окне браузера выводится текст "Значение $number равно 25".

15 Циклы while

В программировании часто необходимо повторить один и тот же блок кода несколько раз. Это можно реализовать с помощью операторов цикла. Язык PHP содержит несколько типов операторов цикла. Данный раздел рассматривает цикл while.

Оператор while циклически повторяет блок кода, пока указанное условие имеет значение true. Другими словами, оператор while будет выполнять блок кода, если и пока условие будет истинным.

Базовый синтаксис цикла while показан ниже.

while (условие) {

выполняемый код;

}

Код в цикле while будет повторно выполняться, пока условие в начале цикла имеет значение true. Блок кода, связанный с оператором while, всегда заключается в фигурные скобки.

Следующий пример демонстрирует цикл while, который будет выполняться, пока значение переменной $number будет больше или равно 2.

<?php

$number = 5;

while ($number >= 2) {

echo $number . "<br/>";

$number -= 1;

}

?>

В приведенном выше примере переменная $number получает начальное значение, равное 5. Цикл while выполняется, пока условие ( $number >=2 ), или значение $number больше или равно 2, и печатает в окне браузера значение $number. В конце блока цикла значение $number уменьшается на 1.

Ниже показан вывод, создаваемый примером цикла.

5

4

3

2

При первом выполнении значение $number равно 5. Так как 5 больше 2, используется оператор echo для вывода значения 5. При выводе присоединяется <br/>, чтобы создавать возврат каретки при каждом выполнении цикла. Затем значение $number уменьшается на 1. Во время второй итерации значение $number равно 4. Так как 4 больше 2, то оператор echo выводит значение 4. Этот процесс продолжается, пока значение $number равно 3 и 2. Когда $number равно 2, оператор echo выводит значение 2, а значение $number затем уменьшается на 1. Так как 1 не больше и не равно 2, то условие больше не выполняется, и цикл while заканчивается.

16. Циклы do while

Оператор do...while повторяет циклически блок кода, пока определенное условие принимает значение true. Другими словами, оператор do…while будет выполнять блок кода, если и пока условие будет выполняться (т.е. оцениваться как true ).

Цикл do...while аналогичен по своей природе циклу while, рассмотренному в предыдущем разделе. Ключевое различие состоит в том, что тело цикла do...while будет обязательно выполнено как минимум один раз. Это связано с тем, что оператор условия оценивается в конце оператора цикла после выполнения тела цикла.

Базовый синтаксис цикла do…while показан ниже.

do {

выполняемый код;

}

while (условие);

Выполнение кода внутри цикла do…while будет повторяться, пока условие в конце цикла будет оцениваться как true. Блок кода, связанный с оператором do…while, всегда размещается внутри фигурных скобок.

Следующий пример демонстрирует цикл do…while, который продолжает выполняться, пока переменная $number будет больше или равна 2.

$number = 5;

do {

echo $number . "<br/>";

$number -= 1;

}

while ($number >= 2);

В приведенном выше примере переменная $number инициализируется значением 5. Цикл do…while выполняется до тех пор, пока справедливо условие ( $number >=2 ) или $number больше или равно 2, выводя значение $number в окне браузера. В конце блока цикла значение $number уменьшается на 1.

Ниже показан вывод, создаваемый примером цикла:

5

4

3

2

Во время первого выполнения значение $number равно 5. Так как условие для выполнения цикла не проверяется, пока цикл не будет выполнен один раз, то выводится значение $number, равное 5. Затем значение $number уменьшается на 1, становясь равным 4. Так как 4 больше 2, снова выполняется цикл, и во время второй итерации используется оператор echo для вывода значения 4. В вывод добавляется <br/>, чтобы создать возврат каретки при каждом выполнении цикла. Этот процесс продолжается, пока значение $number равно 3 и 2. Когда $number становится равным 2, оператор echo выводит значение 2, и значение $number уменьшается затем до 1. Так как 1 не больше и не равно 2, то условие больше не выполняется, и цикл do…while заканчивается.

17. Цикл for

Оператор цикла for используется, когда известно, сколько раз необходимо выполнить оператор или последовательность операторов. В связи с этим цикл for называют точным циклом.

Базовый синтаксис цикла for показан ниже.

for (инициализация; условие; шаг цикла) {

выполняемый код;

}

Оператор цикла for имеет три параметра. Первый параметр используется для инициализации переменных, второй содержит условие, а третий включает в себя приращения, требуемые для реализации цикла. Блок кода, связанный с оператором for, всегда заключается в фигурные скобки ( {} ).

Следующий пример демонстрирует цикл for для 4-кратного вывода сообщения "Добро пожаловать в мир PHP":

<?php

for ($counter=1; $counter < 5; $counter++) {

echo "Добро пожаловать в мир PHP!<br/>";

}

?>

В приведенном выше примере цикл for включает три параметра, которые выполняют следующие задачи:

  1.  Переменная $counter инициализируется значением 1.
  2.  $counter < 5 определяет условие, которое должно выполняться для выполнения цикла.
  3.  $counter++ увеличивает значение переменной $counter при каждом выполнении цикла.

Ниже показан вывод, созданный этим примером цикла.

Добро пожаловать в мир PHP!

Добро пожаловать в мир PHP!

Добро пожаловать в мир PHP!

Добро пожаловать в мир PHP!

При первом выполнении переменная $counter инициализируется значением 1. Так как 1 меньше 5, $counter увеличивается на 1. Затем используется оператор echo для вывода строки "Добро пожаловать в мир PHP!". К выводу присоединяется <br/>, чтобы создавать возврат каретки при каждом выполнении цикла. Во время второй итерации значение $counter будет равно 2. Так как 2 меньше 5, то оператор echo снова выводит строку "Добро пожаловать в мир PHP!". Этот процесс продолжается при значениях $counter, равных 3 и 4. Когда $counter становится равным 5, условие больше не выполняется, и цикл for заканчивается.

Циклы for используются также в качестве удобного способа выполнения итераций по значениям массива. Вспомните, что массивы состоят из элементов и индексов. Каждый элемент имеет связанный с ним индекс. Первый индекс массива с числовыми индексами равен 0. До сих пор при выводе элементов массива требовалось выводить каждый элемент отдельно. Для больших массивов это может потребовать много времени и оказаться громоздким. Циклы for решают эту проблему. В следующем примере создается массив с 5 элементами. Затем применяется цикл for для вывода всех значений массива.

<?php

//Создается новый массив, содержащий 5 значений цвета

$colors = array('red', 'green', 'blue', 'yellow','white');

// Цикл for используется для итераций по массиву и вывода каждого элемента

for ($i = 0; $i < sizeof($colors); $i++)

{

echo "Значением элемента массива $i+1 является $colors[$i].";

}

?>

Массив $colors содержит пять элементов — $colors[0] = "red", $colors[1] = "green", $colors[2] = "blue", $colors[3] = "yellow", и $colors[4] = "white". Создается цикл for. Переменной счетчику $i сначала задается значение 0, что соответствует первому элементу массива. Затем задается условие, проверяющее, что значение счетчика $i меньше sizeof($colors) или общего числа элементов массива. Здесь мы знаем, что размер массива равен 5, однако в большинстве случаев размер массива во время выполнения неизвестен. Наконец, переменная счетчика увеличивается на 1 во время каждой итерации. На каждом шаге выполнения цикла выводится строка — "Значением элемента массива $i+1 является $colors[$i]". Значения $i+1 и $colors[$i] расширяются и создают при выводе литеральные значения. Цикл выполняется, пока счетчик не превысит число элементов или размер массива. Получаемый вывод показан ниже.

Значением элемента массива 1 является red.

Значением элемента массива 2 является green.

Значением элемента массива 3 является blue.

Значением элемента массива 4 является yellow.

Значением элемента массива 5 является white.

Циклы являются полезными конструкциями, которые активно используются при программировании.

18. Цикл foreach

Конструкция foreach является вариацией цикла for и применяется для итераций на массивах. Существуют две различные версии цикла foreach.

Базовый синтаксис обеих версий цикла foreach показан ниже.

foreach ($array as $value)

   {

   оператор

   }

   

foreach ($array as $key => $value)

 {

   оператор

}

Первый тип цикла foreach используется для итераций по массиву, обозначенному как $array. Во время каждой итерации цикла текущее значение массива присваивается переменной $value, и счетчик цикла увеличивается на единицу. Цикл продолжается, пока foreach не достигнет последнего элемента или верхней границы заданного массива. Во время каждой итерации значение переменной $value можно использовать любым способом, но исходное значение массива не изменяется. Чтобы изменить реальное значение массива, необходимо добавить символ "&". Любые изменения, сделанные в &value, будут присвоены элементу массива с текущим индексом.

Следующий пример демонстрирует, как цикл foreach применяется для итераций по значениям массива.

<?php

$my_array = array('red','green','blue');

echo "Различные цвета включают: ";

foreach($my_array as $value)

 {

$colors = $value . " ";

echo $colors;

}

?>

Во время каждой итерации имя цвета, связанное с текущим элементом массива, присваивается переменной $colors. Также добавляется одиночный пробел между соседними именами цветов для целей вывода. Когда цикл достигает конца массива, создается следующий вывод.

Различные цвета включают: red green blue

Вторая форма цикла обеспечивает такие же функции, что и первая, но дополнительно присваивает на каждом шаге итерации индекс текущего элемента массива или ключ переменной $key. В предыдущем примере массив $my_array содержит три элемента: $my_array[0] = "red", $my_array[1] = "green", и $my_array[2] = "blue". В то время как переменная $value содержит значения элементов массива red, green и blue, переменная $key содержит индексы элементов массива 0, 1, и 2.

19. Включаемые файлы

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

Включаемые файлы могут содержать любой код HTML или PHP и обычно сохраняются с расширением .inc, хотя можно использовать также расширения .php, .txt, или .htm. Содержимое включаемого файла кодируется один раз и включается в любое необходимое количество страниц PHP. Если во включаемом файле делается изменение, то обновление автоматически отражается на всех страницах PHP, ссылающихся на включаемый файл.

Ниже показан пример типичного включаемого файла, содержащего информацию о заголовке страницы.

Header.inc

<h3> Welcome to WebBooks.Com </h3>

Этот пример показывает включаемый файл с именем header.inc. Файл содержит текст "Welcome to WebBooks.Com", окруженный тегом XHTML <h3>. Он создает заголовок третьего уровня, который можно теперь включать на все страницы, которые составляют сайт WebBooks.

После создания включаемого файла, его можно включить в страницу PHP с помощью одной из следующих функций:

require(имя_файла) – включает и проверяет указанный файл

include(имя_файла) – другой способ подключения файлов

В следующем примере файл header.inc включается в существующую страницу PHP:

home.php

<?php

require('header.inc');

echo "<p>This is the WebBooks site...</p>";

?>

Функция require() вызывает файл header.inc и проверяет содержимое файла. Содержимое затем выводится, как если бы оно было частью страницы home.php. В этом примере функция require() кодируется вверху страницы, так как она содержит информацию заголовка. Оператор require() можно, однако, включить в любом месте документа PHP. Расположение функции require() определяет, где будет выводиться содержимое файла в контексте страницы PHP.

Welcome to WebBooks.Com

This is the WebBooks site...

Важно отметить, что при использовании включаемых файлов, которые содержат конфиденциальную информацию, такую, как пароли или информацию о пользователе, файлы должны сохраняться с использованием расширения .php, а не .inc или другого нестандартного расширения. Файлы, которые применяют нестандартные расширения файлов, могут загружаться с сервера Web, а их содержимое можно просматривать как обычный текст. Использование расширения .php гарантирует, что клиент не сможет увидеть исходный код, сервер вернет только код XHTML.

20. Использование функций

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

Определенные пользователем функции создаются с помощью ключевого слова function. Они особенно полезны в больших программах PHP, так как могут содержать блоки кода, которые могут вызываться или использоваться в программе, что позволяет избежать повторного переписывания кода. Далее представлен пример простой определенной пользователем функции PHP:

function AddNumbers($num1,$num2)

{

 

echo "Это пример функции PHP. Она вычисляет сумму двух чисел и возвращает

результат вызывающей программе";

 

return $num1 + $num2;

 

}

Определенные пользователем функции могут вызываться в любом месте блока кода PHP. В PHP функция выполняется при использовании в коде ее имени. После вызова функция получает все передаваемые ей значения в форме параметров, выполняет определенные задачи и возвращает значение вызывающей программе. Простой пример показан ниже.

<?php

function AddNumbers($num1,$num2)

{

return $num1 + $num2;

}

echo "Сумма 5 и 2 равна " . AddNumbers(5,2);

?>

Однако определенная в начале функция AddNumbers() вызывается только позже в программе. Вызов функции происходит в операторе echo. Выводится строка "Сумма 5 и 2 равна ". Имя функции соединяется со строкой вывода, вызывая тем самым функцию. Функции передается два параметра — 5 и 2. Они присваиваются параметрам функции $num1 и $num2. Параметры складываются, и вызывается оператор return, чтобы "вернуть" значение или сумму двух чисел в то место в блоке кода PHP, который первоначально вызвал функцию. Вывод результата показан ниже:

Сумма 5 и 2 равна 7

Имена функций следуют тем же правилам, что и переменные в PHP. Допустимые имена могут начинаться с буквы или подчеркивания, после чего может следовать любое количество букв, цифр или подчеркиваний.

21. Проектирование форм

Обработка форм является очень важным свойством PHP. С помощью форм пользователи взаимодействуют со страницами Web, и с их же помощью можно собирать информацию для персонализированных страниц посетителей. В более широком смысле информационной обработки, формы предназначены для ввода данных в системы обработки. Они являются первичным механизмом получения данных, которые обрабатывают сценарии для порождения новой информации, обновления файлов и баз данных, а также для ответа на запросы пользователей для получения информации.

Пример приложения

Первым примером обработки форм является приложение регистрации. В нем две страницы. Первая страница с именем "login.php" содержит форму для отправки имени учетной записи и пароля. Посетитель вводит эту информацию и щелкает на кнопке "Submit", чтобы отправить информацию формы для проверки.

Вторая страница является страницей приветствия сайта с именем "welcome.php". Информация формы посылается на эту страницу для проверки учетной записи и пароля. Если имя учетной записи и пароль будут правильными, то страница становится доступной. Если имя учетной записи или пароль будут неправильными, посетитель возвращается на страницу login.php.

<html>

<body>

<h3>Страница регистрации </h3>

<form name="Login" action="welcome.php" method="post">

 <table border="0">

 <tr>

   <td>User name: </td>

   <td><input type="text" name="Account" size="10"></td>

 </tr>

 <tr>

   <td>Password: </td>

   <td><input type="password" name="Password" size="10"></td>

 </tr>

 </table>

 <input type="submit" name="SubmitButton" value="Submit">

</form>

</body>

</html>

Элементы управления формы HTML выводятся на странице Web при кодировании их внутри тегов <form>...</form>. Эти теги окружают элементы управления формы, однако они не обязаны окружать их "плотно". Другими словами, теги <form> не обязаны непосредственно предшествовать первому элементу управления и не обязаны следовать сразу за последним элементом управления. Если страница содержит одну форму, можно записать открывающий тег <form> сразу после тега <body>, а закрывающий тег </form> — непосредственно перед закрывающим тегом </body>. Затем элементы управления могут появляться в теле документа вперемешку с другими тегами HTML или текстом.

Тег <form> содержит три важные для обработки форм атрибута.

Атрибут Name. Все формы должны быть именованы. Хотя это не требуется для текущего упражнения, стоит следовать такой привычке. Имя формы потребуется, когда понадобится выполнить проверку данных в браузере, что будет рассмотрено в оставшейся части этого раздела. Формы именуют, записывая name="ИмяФормы" в теге <form>. Форме можно присвоить любое имя по желанию. В данном примере используется name="Login".

Атрибут Action. Атрибут Action="url" определяет расположение и имя страницы, на которую посылается информация из формы для обработки. Если страница, которая будет обрабатывать данные, находится в том же каталоге, что и содержащая форму страница, то URL в параметре Action является просто именем этой страницы. Иначе это может быть полный URL, определяющий адрес Web на другом сервере или в другом каталоге на том же сервере. В рассматриваемом примере имя учетной записи и пароль, введенные посетителем, посылаются на страницу welcome.php в том же каталоге: action="welcome.php".

Атрибут Method. Атрибут method="GET|POST" определяет способ, используемый для пересылки данных формы на страницу, где они будут обрабатываться. Существует два метода на выбор.

  •  Метод GET является более старым способом пересылки данных. В этом случае данные из формы присоединяются в конце URL страницы, на которую посылаются данные (URL в атрибуте action ). Данные формы состоят из текстовой строки, которая соединяется с URL с помощью знака вопроса (?). Вы могли видеть, как это происходит, при посещении Web. Этот метод не является предпочтительным при отправке данных формы, так как существует ограничение на количество посылаемых символов, и данные плохо защищены от постороннего взгляда, когда они появляются в поле адреса URL в браузере. Мы будем в дальнейшем в некоторых случаях использовать этот метод.
  •  Метод POST отчасти решает эти проблемы. Он посылает данные формы на страницу action как отдельный поток данных, который не появляется в поле адреса браузера, кроме того, можно посылать любое требуемое для обработки формы количество символов. Если нет специальных причин, всегда используйте метод POST. В этом примере применяется method="post".

Поля формы

Формы состоят из полей, или элементов управления формы, с помощью которых пользователь вводит данные, делает выбор, и посылает информацию. Способ сбора информации зависит от типа элемента формы. Хотя в этом учебнике будут обсуждаться все типы элементов формы, в данный момент мы рассмотрим только три типа, необходимые для приложения регистрации. Это позволит хорошо понять общую методику обработки форм, без дополнительных осложнений, связанных с кодированием всех видов полей форм.

Поле Account. Пример страницы содержит текстовое поле, в котором пользователь вводит свое учетное имя. Это стандартное текстовое поле, созданное с помощью тега <input type="text"> с заданными атрибутами name и size.

<input type="text" name="Account" size="10">

Поле Password. Поле пароля имеет вид стандартного текстового поля ввода; однако при вводе символов в поле, они выводятся как звездочки (*) или маркеры, чтобы сохранить приватность вводимых данных. Поле пароля создается с помощью тега <input type="password">. Полю необходимо присвоить имя и изменить его размер, равный по умолчанию 20 символам.

<input type="password" name="Password" size="10">

В этом примере и для всех создаваемых форм необходимо не забывать задавать имена для полей формы. Эти имена требуются при обработке на сервере. Кроме того, можно управлять физическим размером полей, задавая атрибут size, и можно ограничить максимальное число символов, допустимых для ввода, задавая атрибут maxlength.

Кнопка Submit. При щелчке на кнопке передачи submit выполняется действие, определенное параметром ACTION тега <form>. Другими словами, щелчок на кнопке submit передает данные из формы на указанную страницу. Кнопка submit создается с помощью тега <INPUT TYPE="submit">. Кроме того, необходимо задать имя кнопки для ссылки в сценарии и присвоить значение, которое служит в качестве метки, появляющейся на кнопке.

<input type="submit" name="SubmitButton" value="Submit">

После создания страница с формой готова к активации. Вспомните, что эта форма передает информацию об имени учетной записи и пароле на страницу welcome.php. Там эти значения проверяются, чтобы разрешить доступ к странице. Если предоставлены неправильное имя учетной записи и/или пароль, пользователя немедленно возвращают на страницу login.php, не позволяя увидеть страницу welcome.php.

Работа с формами

Элементы управления формы HTML позволяют пользователям вводить данные и делать выбор и предоставляют механизм, с помощью которого пользователи взаимодействуют со страницей Web. Форма полезна в той мере, насколько она поддерживается сценарием обработки, закодированным на странице Web, или программой, выполняющейся на сервере Web. В данном учебнике рассматривается, как PHP, подобно другим серверным языкам программирования, взаимодействует с формами в ответ на ввод пользователя.

Введенные в форму данные посылаются на обработку, после щелчка на кнопке формы submit (отправка), <input type="submit">. Информация из полей формы передается затем на страницу, определенную атрибутом ACTION тега <form>. Когда запрос этого URL и соответствующие данные формы прибывают на сервер, вызывается указанная страница и данные передаются ей для обработки.

Пары имя/значение

Данные из формы передаются на сервер как последовательность пар имя/значение. Это значит, что имя каждого элемента формы (появляющееся в атрибуте NAME тега) связывается со значением этого элемента (введеным или выбранным пользователем). Формат имя/значение, используемый для передачи, имеет вид имя=значение. Используется столько пар имя/значение, сколько имеется элементов формы, и все пары соединяются с помощью символа амперсанда (&), чтобы сформировать текстовую строку, имеющую следующий вид:

name1=value1&name2=value2&name3=value3....

Все символы-разделители, появляющиеся в именах или значениях, заменяются символом плюс (+), чтобы создать неразрывную строку пар имя/значение. Предположим, что пользователь ввел имя учетной записи "myaccount" и пароль "xyzzy". Полученная строка пар имя/значение, доставляемая на сервер, будет иметь вид:

Account=myaccount&Password=xyzzy&SubmitButton=Submit

Отметим, что передаются имена полей, кнопок и значения. Хотя здесь они показаны в том же порядке, в котором элементы появляются в форме, не гарантируется, что порядок, в котором пары имя/значение приходят на сервер, будет таким же, как и на форме.

PHP имеет три типа переменных для работы с формами, предназначенные для хранения и обработки ввода информации пользователя в форму: $_GET, $_POST, и $_REQUEST.

Эти переменные называют также суперглобальными. Это означает просто, что они доступны во всех областях действия сценария.

$_GET[] — ассоциативный массив, который содержит все значения, передаваемые в сценарий с помощью метода формы GET.

$_POST[] – ассоциативный массив, который содержит все значения, передаваемые в сценарий с помощью метода формы POST.

$_REQUEST[] – ассоциативный массив, который содержит все значения, передаваемые в сценарий с помощью методов POST и GET.

Следующий пример показывает типичную страницу HTML с формой, которая может обрабатываться с помощью PHP:

form_page.htm

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>A Web Page</title>

</head>

<body>

<form action="process.php" method="post">

First Name: <input type="text" name="FName"/>

Last Name: <input type="text" name="LName"/>

City:      <input type="text" name="City"/>

State:     <input type="text" name="State"/>

Message:   <textarea name="Message" cols="30" rows="5"></textarea>

<input type="submit" name="submit" value="Submit Data"/>

</form>

</body>

</html>

Ниже показана форма с введенными пользователем данными для обработки:

Когда в приведенном выше примере нажимают кнопку отправки, все введенные пользователем данные формы передаются для обработки на страницу process.php. Так как эта форма использует метод POST, все данные формы передаются с помощью переменной PHP $_POST.

Каждый элемент управления ввода уникальным образом определяется значением, присвоенным его атрибуту name. Значение атрибута name элемента управления формы становится значением индекса массива $_POST. Страница формы PHPForm.htm передает данные с помощью следующих переменных PHP $_POST:

$_POST["FName"] = John;

$_POST["LName"] = Smith;

$_POST["City"] = Atlanta;

$_POST["State"] = Georgia;

$_POST["Message"] = I like PHP;

Так как переменные PHP $_POST и $_GET используют значение, связанное с атрибутом name элемента управления формы, важно, чтобы всем элементам формы было присвоено уникальное значение name (имя).

Приведенная выше страница формы XHTML обрабатывается показанной ниже страницей process.php. Введенные в форму данные передаются с помощью переменной $_POST в сценарий PHP, который выводит информацию в окне браузера:

process.php

<?php

echo "Your First Name is: " . $_POST["FName"] . "<br/>";

echo "Your Last Name is: " . $_POST["LName"] . "<br/>";

echo "Your City is: " . $_POST["City"] . "<br/>";

echo "Your State is: " . $_POST["State"] . "<br/>";

echo "<br/>";

echo "Your Message is: " . $_POST["Message"];

?>

Сценарий PHP анализирует данные формы XHTML и применяет оператор echo для вывода результатов в окне браузера.

Если вместо метода POST используется метод GET, <form method="get" action="process.php/>, то массив $_POST заменяется массивом $_GET. Можно также воспользоваться массивом $_REQUEST. Этот массив можно применять для получения данных, посланных с помощью метода POST или GET. Переменную REQUEST можно использовать также с файлами Cookies, что рассматривается в дальнейшем.

В данном месте возникает естественный вопрос: что лучше использовать при обработке форм в PHP — метод GET или POST. Хотя оба метода определяют способ, которым информация формы передается на страницу, заданную в атрибуте ACTION, рекомендуется применять метод POST.

GET – информация из формы добавляется к URL атрибута ACTION, создавая строку запроса. Если обработка формы не оказывает заметного влияния на состояние мира, то методом формы может быть GET. Многие запросы к базам данных не имеют видимого побочного эффекта и являются идеальными для приложений с формами запроса.

POST — (рекомендуемый) информация из формы передается отдельным потоком данных. Если служба, связанная с обработкой формы, имеет побочные эффекты (например, модификация базы данных или подписка на обслуживание), то должен использоваться метод POST.

В предыдущем примере приложение обработки формы состоит из двух отдельных страниц – страницы формы XHTML ( form_page.htm ) и страницы PHP ( process.php ). Страница XHTML является статической, содержащей только детали представления и не имеющей кода. В противоположность этому страница PHP содержит только сценарий для обработки данных формы и не имеет тегов XHTML или деталей представления. Распространенной практикой при обработке форм в PHP является разделение деталей представления и кода обработки. В этом случае страницу сценария PHP можно создать таким образом, что ее можно будет использовать повторно с множеством страниц форм XHTML. Повторное использование является распространенной практикой программирования, которая позволяет использовать код повторно в различных программах, сокращая тем самым стоимость написания приложений.

Хотя разделение разметки XHTML и кода PHP является широко используемой многими программистами практикой, можно также объединять разметку и код PHP в одном файле PHP. Этот подход создает только один файл, упрощая кодирование и процесс обнаружения ошибок.

Следующий пример показывает предыдущий пример ( form_page.htm и process.php ), объединенный на одной странице PHP — form_process.php.

form_process.php

<?php

echo "Your First Name is: " . $_POST["FName"] . "<br/>";

echo "Your Last Name is: " . $_POST["LName"] . "<br/>";

echo "Your City is: " . $_POST["City"] . "<br/>";

echo "Your State is: " . $_POST["State"] . "<br/>";

echo "<br/>";

echo "Your Message is: " . $_POST["Message"];

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>A Web Page</title>

</head>

<body>

<form action="form_process.php" method="post">

First Name: <input type="text" name="FName"/>

Last Name: <input type="text" name="LName"/>

City:      <input type="text" name="City"/>

State:     <input type="text" name="State"/>

Message:   <textarea name="Message" cols="30" rows="5"></textarea>

<input type="submit" name="submit" value="Submit Data"/>

</form>

</body>

</html>

Блок кода PHP помещается вверху страницы. Кроме того, значение тега формы ACTION изменяется на "form_process.php". Теперь страница будет отсылать к себе, а не к отдельной странице PHP. Требуется еще один конечный шаг, чтобы новая страница работала правильно. Взгляните на представленный ниже вывод созданной страницы.

Здесь раздел формы XHTML выводится правильно. Однако блок кода PHP был выполнен до отправки формы (или до того, как был сделан щелчок на кнопке отправки). Это приводит к выводу строковых значений в операторах echo при загрузке страницы. Присоединенные значения $_POST[] отсутствуют, так как форма еще не была отправлена. Решение этой проблемы состоит в запрете выполнения блока кода PHP, пока форма не будет отправлена или пока не будет сделан щелчок на кнопке submit. Это можно сделать с помощью некоторой условной конструкции. Когда страница загружается, оператор if используется для определения, что была нажата кнопка submit в форме if($_POST['submit'] == "Submit Data"). Это условие будет выполняться только после того, как будет запущена отправка формы в результате щелчка на кнопке submit. Предыдущая страница показана ниже с оператором if, проверяющим отправку формы.

form_process.php

<?php

if ($_POST['submit'] == "Submit Data")

{

echo "Your First Name is: " . $_POST["FName"] . "<br/>";

echo "Your Last Name is: " . $_POST["LName"] . "<br/>";

echo "Your City is: " . $_POST["City"] . "<br/>";

echo "Your State is: " . $_POST["State"] . "<br/>";

echo "<br/>";

echo "Your Message is: " . $_POST["Message"];

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>A Web Page</title>

</head>

<body>

<form action="form_process.php" method="post">

First Name: <input type="text" name="FName"/>

Last Name: <input type="text" name="LName"/>

City:      <input type="text" name="City"/>

State:     <input type="text" name="State"/>

Message:   <textarea name="Message" cols="30" rows="5"></textarea>

<input type="submit" name="submit" value="Submit Data"/>

</form>

</body>

</html>

Теперь код раздела PHP страницы выводится только после того, как условие ( $_POST['submit'] == "Submit Data" ) станет истинно ( true ), т.е. будет нажата кнопка submit и начнется процесс отправки формы. По большей части, практика разделения PHP и XHTML или их объединения является вопросом личных предпочтений.

Массив $_REQUEST

Массив PHP $_Request предоставляет ценную помощь при сборе передаваемой на сервер информации формы, помещая ее в структуру для удобной обработки сценарием. Массив $_Request перехватывает строку имен/значений, разбирает строку на имена и соответствующие значения и помещает эту информацию в ассоциативный массив, индексированный соответствующими именами полей формы. PHP предоставляет также массивы $_POST и $_GET, однако массив $_REQUEST часто является лучшим выбором, особенно в ситуациях, когда данные отправляются с удаленного сайта и неизвестно, какой метод используется — GET или POST.

Когда значения данных оказываются в массиве $_Request, их можно легко использовать по их именам, применяя следующий синтаксис:

$_Request['FName']="John"

$_Request['LName']="Doe"

$_Request['City']="Atlanta"

$_Request['State']="Georgia"

$_Request['Message']="I like PHP"

$_Request['submit']="Submit Data"

где именем является имя, связанное с полем в форме. Поэтому ссылка $_Request['Account'] указывает на значение, введенное в поле User Name ; а ссылка $_Request['SubmitButton'] — на значение, связанное с кнопкой Submit. С точки зрения программирования $_Request['name'] работает как переменная программы, которая указывает на значение, хранящееся в этой переменной.

Итерации по массиву $_Request

С помощью цикла foreach можно выполнять итерации на массиве $_Request. Это предоставляет хороший способ отладки сценариев, которые обрабатывают информацию формы, а также возможность просмотреть имена полей и присланные значения, чтобы проверить, что из формы была прислана правильная информация.

<?php

foreach($_REQUEST as $key => $value)

 

{

 

echo $key;

echo ": " .$value;

echo "<br/>";

 

 }

 

?>

На каждом шаге цикла значение текущего элемента $_REQUEST присваивается переменной $value, а указатель массива сдвигается на единицу. Текущий индекс массива присваивается на каждом шаге переменной $key.

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

FName: John

LName: Smith

City: Atlanta

State: Georgia

Message: I like PHP

submit: Submit Data

Просматривая этот вывод, можно убедиться, что ожидаемые данные были присланы на страницу welcome.php перед реальной обработкой правильно.

Проверка формы

При работе со страницами, которые включают обработку форм, часто необходимо проверять вводимые пользователем данные.

is_string(string) – определяет, является ли переменная string строкой. Возвращает значение true или false.

is_int(string) или is_integer(string) – определяет, является ли переменная string целым числом. Возвращает значение true или false.

is_numeric(string) – определяет, является ли переменная string числовой строкой. Возвращает значение true или false.

is_double(string) или is_float(string) – определяет, является ли переменная string числом с плавающей точкой. Возвращает значение true или false

strlen(string) – возвращает длину строки string.

strpbrk(string1, string2) – ищет в строке string1 символ из строки string2, возвращает строку, начинающуюся с найденного символа (или FALSE, если ничего не найдено).

strtolower(string) – преобразует строку, хранящуюся в переменной string, в символы нижнего регистра.

strtoupper(string) — преобразует строку, хранящуюся в переменной string, в символы верхнего регистра.

Рассмотрим следующую страницу с формой XHTML:

Эта страница формы требует, чтобы пользователь ввел имя, имя учетной записи (имя пользователя) и пароль длиной не менее 4 символов, прежде чем происходит обработка формы. Такой тип проверки формы является важным, так как он помогает гарантировать, что ввод пользователя имеет правильный формат, который можно записать в базу данных, — текстовый файл, используемый для создания сообщения e-mail или для повторного вывода пользователю. Однако один XHTML не может выполнить проверку такого типа. Этот процесс выполняется с помощью перечисленных выше строковых и числовых функций PHP.

Отправка формы становится теперь трехшаговым процессом.

  1.  Ввод данных формы и щелчок на кнопке отправки.
  2.  Проверка ввода с помощью функций PHP.
  3.  Обработка (запись в файл, генерация автоматического сообщения e-mail или воспроизведение ввода на экране) данных с помощью PHP.

Следующий сценарий демонстрирует этот процесс.

<?php

  

//Проверка, была ли нажата кнопка отправки. Если да, начинается проверка данных формы.

  

 if(isset($_POST['submitB']))  {

    //Проверяет, что было введено в поле name

    

 $valid_form = true;

    

 if ($_POST['name'] == "")

 {

  echo "Введите свое имя";

  $valid_form = false;

 }

 

 else

 {

  $name = $_POST['name'];

 }

 

 if ($_POST['uname'] == "")

 {

  echo "Введите имя пользователя";

  $valid_form = false;

 }

 

 else

 {

  $username = $_POST['uname'];

 }

 

 if ($_POST['pass'] == "")

 {

 

  echo "Введите пароль";

  $valid_form = false;

 }

 

 elseif (strlen($_POST['pass']) < 4)

 {

  

  echo "Пароль должен содержать не менее 4 символов";

  $valid_form = false;

 }

 

 else

 {

  $password = $_POST['pass'];

 }

   

 //если все поля формы были введены правильно, начинаем обработку

 

 if($valid_form == true)

 {

 

  //код обработки формы находится здесь

 

 }

 }

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>A Web Page</title>

</head>

<body>

<form method="post" action="http://...form_validate.php"/>

Enter Name: <input type="text" name="name"/>

Enter user name: <input type="text" name="uname"/>

Enter Password (must contain at least 4 characters): <input type="password" name="pass"/>

<input type="submit" name="submitB" value="Submit"/>

</form>

</body>

</html>

Когда нажимается кнопка отправки, применяется последовательность операторов для проверки содержимого полей формы. Сначала проверяется, что поле name не NULL (значение $_POST['name'] ). Если $_POST['name'] содержит значение NULL, это указывает, что пользователь не ввел имя в поле 'name'. Оператор echo используется для вывода пользователю сообщения об ошибке. Если $_POST['name'] содержит значение, то оно присваивается скалярной переменной $name, которая может использоваться позже в программе, когда начнется обработка данных. Затем проверяется поле 'user name' с помощью того же метода, который применялся для проверки поля 'name'. Если имя пользователя не введено, выводится сообщение об ошибке. Иначе значение присваивается скалярной переменной $username. Наконец, проверяется поле пароля 'password'. Проверка пароля является двухшаговым процессом: 1) проверяется, что пароль был введен, и 2) если пароль был введен, проверяется, что он содержит не меньше 4 символов. Первый оператор if проверяет, что пароль был введен. Оператор elseif (который выполняется, только если предыдущий оператор if будет оцениваться как false ) проверяет введенный пароль с помощью функции strlen(). Эта функция возвращает длину пароля. Полученная длина сравнивается с числом 4. Если значение меньше 4, выводится ошибка. Иначе длина пароля будет допустима, и он присваивается скалярной переменной $password.

Если все поля формы содержат допустимые данные, можно начинать обработку формы. Можно задать флаг, чтобы помочь в отслеживании проверки. Сначала флаг задается ( $valid_form = true ) в начале блока кода. Если какое-то из полей формы не содержит допустимые данные, то флагу присваивается значение false ( $valid_form ). После проверки всех полей формы применяется финальный оператор if для проверки статуса флага ( $valid_form ). Если значение $valid_form будет true (все поля формы содержат допустимые данные), можно начинать обработку формы, иначе блок обработки формы пропускается. Пользователь получает сообщение об ошибке, возникшей во время процесса проверки, и может начинать делать исправления.

Контрольный вывод введенных значений формы

Когда страница формы PHP отправляется на сервер, все значения полей формы посылаются сценарию PHP с помощью метода формы get или post. Когда страница формы выводится снова, все поля формы будут пустыми, независимо от того, будут или нет значения допустимыми. Это происходит, потому что сервер извлекает новый экземпляр страницы PHP и посылает его браузеру. Однако пользователю было бы удобно, чтобы при повторном выводе формы ее поля были заполнены отправленной ранее информацией. В этом случае пользователю нужно будет только исправить ошибочные данные, а не заново вводить значения во все поля. Это не является проблемой для формы с двумя полями, однако будет крайне неудобно для формы с большим числом полей.

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

Вспомните, что значения полей посланной формы хранятся в суперглобальных переменных $_POST или $_GET. В предыдущем примере имя пользователя хранится в переменной массива $_POST['FName'], а фамилия — в переменной массива $_POST['LName']. Поэтому вывод значений полей формы можно выполнить, присваивая атрибутам 'value' полей формы с помощью кода PHP значения, содержащиеся в массиве. Следующий код демонстрирует такой подход.

process.php

<!DOCTYPE html PUBLIC "-//W3C//DTD/XHTML 1.0 Transitional//EN"

 "http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

 <title>Страница Web </title>

</head>

<body>

<form action="process.php" method="post">

First Name: <input type="text" name="FName" value="<?php echo $_POST['FName']?>"/>

Last Name: <input type="text" name="LName" value="<?php echo $_POST['LName']?>"/>

<input type="submit" name="submit" value="Submit Data"/>

</form>

</body>

</html>

Отметим, что значения текстовых полей First Name и Last Name обновлены, чтобы включить следующий код PHP:

<?php echo $_POST['FName']?>

<?php echo $_POST['LName']?>

Когда этот код присваивается атрибуту 'value', он снова выводит значения, введенные ранее пользователем. Когда страница загружается в первый раз, значения переменных POST будут NULL, а value = "". Атрибут value содержит значение только после того, как была нажата кнопка submit.

Повторный вывод полей формы является полезным приемом, который будет активно использоваться в последующих разделах.

Сеансы

Переменная сеанса является специальным типом переменной, значение которой сохраняется при переходе между последовательными страницами Web. C помощью переменных сеанса специфические данные пользователя можно сохранять при переходе со страницы на страницу, предоставляя ему индивидуализированный контент при взаимодействии пользователя с приложением Web. Переменные сеанса существуют обычно, пока не выполняется одно из следующих событий:

  1.  пользователь закрывает окно браузера;
  2.  завершение заданного на сервере максимального интервала времени сеанса;
  3.  использование функций PHP, таких, как session_destroy(), чтобы освободить все существующие в данный момент переменные сеанса.

Проблема, которую должны решить переменные сеанса, состоит в том, что протокол HTTP, используемый в Web, не имеет состояния. Каждый запрос страницы совершенно независим от предыдущих запросов, поэтому, если требуется, чтобы последующие страницы "запоминали" имя пользователя, которое он вводит на первой странице, то эту информацию надо где-то сохранить.

Система PHP имеет ряд средств для поддержки сеансов. Это руководство начинается с введения глобальной переменной $_SESSION[]. Переменную $_SESSION[] рекомендуется использовать для улучшения безопасности и удобочитаемости кода.

Также вводятся функции сеанса session_start() и session_destroy(). Каждая из них определена ниже:

$_SESSION[] – суперглобальный массив PHP, который содержит зарегистрированные в данный момент переменные сеанса сценария.

session_start() – инициализация данных сеанса. Эта функция вызывается перед созданием новой переменной сеанса с помощью $_SESSION[].

session_destroy() – разрушает все данные, зарегистрированные для текущего сеанса сценария

Функция PHP header("Location …") - это функция HTTP, а не функция сеанса, она обычно используется для перенаправления пользователей во время существующих сеансов. Эта функция определена ниже.

header("Location: http://www.domain.com") – функция header используется для перенаправления браузера на страницу, определенную параметром Location.

Следующий блок кода демонстрирует, как инициализируется переменная сеанса.

<?php

session_start();

if ($_SESSION['count'] == "")

{

$_SESSION['count'] = 1;

}

else

{

$_SESSION['count'] = $_SESSION['count'] + 1;

 

}

?>

В этом примере сначала вызывается функция session_start() для инициализации данных сеанса. Функция session_start() должна вызываться перед созданием и присваиванием значений переменным сеанса. Затем используется оператор if для проверки значения переменной сеанса "count". Если сеанс будет null или не содержит значения, то он инициализируется как 1, иначе значение переменной сеанса увеличивается на 1. В этом случае переменная сеанса count используется для подсчета числа посетителей. Переменные сеанса предоставляют идеальный способ создания счетчиков страниц, так как каждому пользователю предоставляется уникальный сеанс.

Переменная сеанса может создаваться также после успешного ввода пользователем своего имени и пароля, которые нужны для доступа к конфиденциальному сайту. В этом случае переменная сеанса содержит значение, которое передается со страницы на страницу, указывая, что пользователь имеет право доступа к любым ресурсам, связанным с сайтом. Когда пользователь выходит или решает "завершить", переменная сеанса должна возвращаться в исходное состояние. Это выполняется с помощью функции session_destroy().

login.php

<?php

if ($_POST['submit'] == "Login")

{

// сценарий проверки имени пользователя и пароля должен кодироваться здесь

 

//если аутентификация прошла успешно

session_start();

 $_SESSION['access'] = "yes";

header(Location:access.php);

}

if ($_POST['submit'] == "Log Out")

{

//если пользователь решает выйти

session_destroy();

}

?>

access.php

<?php

// если пользователь обращается к этой странице,

// проверьте, что он был аутентифицирован в login.php

if ($_SESSION['access'] != "yes")

{

header(Location:login.php);

 

}

?>

Пример выше состоит из двух страниц — login.php и access.php. Прежде чем пользователь сможет увидеть содержимое access.php, он должен пройти login.php. Создается сеанс, чтобы гарантировать, что пользователь был аутентифицирован. После того как пользователь вводит действительное имя пользователя и пароль, выполняется щелчок на кнопке "Login". Сценарий PHP проверяет, что пароль и имя пользователя допустимы. Затем переменной сеанса присваивается значение "yes" и доступ предоставляется. Пользователь перенаправляется на страницу access.php. Сценарий на access.php проверяет, что существует сеанс. Если сеанс не существует, применяется функция header(), чтобы перенаправить пользователя назад на страницу login.php и не разрешить доступ к содержимому страницы access.php.

Страница login.php содержит второй сценарий, который используется для уничтожения переменной сеанса, вызывая функцию session_destroy(). Сценарий выполняется после того, как пользователь щелкает на кнопке "Log Out".

Приложения Web, которые используют данные сеанса, могут быть доступны одновременно множеству пользователей. Чтобы каждый пользователь имел свой собственный сеанс, с каждым сеансом необходимо связать уникальное значение id. В PHP это уникальное значение сеанса id можно извлечь с помощью функции session_id(). Уникальное значение сеанса session_id() поддерживается для каждого пользователя и хранится в подкаталоге PHP/sessiondata, расположенном на сервере Web.

Так как значение session_id() является уникальным для каждого пользователя, его можно применять для идентификации пользователей, не создавая при этом индивидуальных имен пользователей и паролей. Функция session_id() определена ниже:

session_id() – используется для получения значения id текущего сеанса.

Файлы Cookies

Файл cookie является сообщением от браузера Web-серверу. Браузер сохраняет сообщение в текстовом файле. Это сообщение посылается затем назад на сервер каждый раз, когда браузер запрашивает страницу с сервера.

Основное назначение cookies состоит в идентификации пользователей и возможной подготовке специально настроенной для них страницы Web. При посещении сайта Web, использующего cookies, на сайте может быть предложено заполнить форму, чтобы предоставить такую информацию, как свое имя и возможные интересы. Эта информация упаковывается в cookie и посылается браузеру Web, который сохраняет ее для последующего использования. Когда вы в следующий раз посещаете тот же самый сайт Web, браузер пошлет cookie серверу Web. Сервер может использовать эту информацию, чтобы создать индивидуализированные страницы Web. Поэтому, например, вместо обычной приветственной страницы можно увидеть приветственную страницу со своим именем.

В PHP файлы cookies создают с помощью функции setcookie(). Все данные cookie хранятся в глобальной переменной PHP $_COOKIE и доступны для последующих страниц.

setcookie(name,value,expiration,path,domain,security) – определяет файл cookie, который посылается вместе с остальными заголовками HTTP. Как и другие заголовки, файлы cookie должны посылаться до какого-либо вывода работы сценария (это ограничение протокола). Поэтому требуется, чтобы обращение к функции было помещено до любого вывода, включая теги и любые символы разделители. Если вывод происходит до обращения к этой функции, то setcookie() не выполнится и вернет FALSE. Если setcookie() выполняется успешно, то возвращается TRUE. Это не указывает на то, что пользователь принял cookie.

Параметры setcookie() объясняются в следующей таблице.

Параметр

Описание

name

Имя cookie. Этот идентификатор хранится в глобальной переменной $_COOKIE и доступен в последующих сценариях

value

Значение cookie. Значение, связанное с идентификатором cookie. Хранится на компьютере пользователя, поэтому не должно содержать секретной информации

expiration

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

path

Указывает пути доступа на сервере, для которых cookie действителен или доступен. Прямая косая черта "/" говорит, что cookie доступен во всех папках

domain

Домен, в котором доступен cookie. Если домен не определен, по умолчанию используется хост, на котором создан cookie. Значения domain должны содержать в строке как минимум две точки ".", чтобы быть допустимыми

security

Указывает, будет ли cookie передаваться через HTTPS. Значение 1 означает, что cookie передается через защищенное соединение. Значение 0 обозначает стандартную передачу HTTP

Следующий пример демонстрирует, как cookie используется для сохранения имени пользователя посетителя. Вначале требуется ввести имя пользователя, чтобы получить доступ к ограниченному сайту. Когда имя пользователя будет создано, cookie, содержащий его, сохраняется на компьютере пользователя. Доступ в будущем возможен при извлечении cookie с компьютера пользователя.

<?php

 

if ($_REQUEST[auth] == "no")

 {

 $msg = "Вы не являетесь пользователем. Зарегистрируйтесь.";

}

 

// Если пользователь щелкает на кнопке Login, создается cookie,

           // содержащий его имя пользователя и IP-адрес

 

 if ($_POST[submit] == "Login")

{

 $cookie_name = "user";

 $cookie_value = $_POST[uname];

 $cookie_expire = time() + 14400;

 

 setcookie($cookie_name,$cookie_value,$cookie_expire,"/");

 

 $formDisplay = "no";

}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHMTL 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>

<title>Страница Web </title>

<style type="text/css">

body {font:10pt arial;color:white}

div#form {background-color:gray;border:solid 1px black;padding:10px}

input {border:solid 2px black}

</style>

<?php

if ($formDisplay == "no")

  

{

  

?>

<meta http-equiv='refresh' content='0;url=siteaccess.php?auth=yes'/>

<?php

}

?>

</head>

<body>

<div id="form">

<h4 style="color:red">New User? Create User Name</h4>

<form action="setcookie.php" method="post">

<p>User Name:

<br/>

<input type="text" name="uname" size="7"/>

</p>

<input type="submit" value="Login" name="submit"/>

</form>

<h4 style="color:red">Existing User?

<a style="color:white" href="siteaccess.php?auth=yes">Enter Site</a></h4>

</div>

<br/>

<br/>

<?php

echo "<span style='color:red'>" . $msg . "</span>";

 

?>

</body>

</html>

Файл setcookie.php

siteaccess.php

<?php

// Если пользователь щелкает на кнопке Login,

// создается cookie, содержащий его имя пользователя и IP-адрес

 

if ($_REQUEST[auth] == "yes" && $_REQUEST[user])

{

 

 echo "Добро  пожаловать " . " " . $_COOKIE[user] . " на сайт с ограниченным доступом.

 Теперь на вашем жестком диске хранится cookie,

 и вы можете обращаться к этому сайту без регистрации при каждом обращении";

 

}

else  

 

{

 

header("Location:setcookie.php?auth=no");

}

?>

22. Доступ к MySQL

Используемые обычно функции PHP для MySQL описаны ниже.

mysql_connect(имя сервера MySQL,имя пользователя,пароль) – открывает соединение с сервером MySQL.

mysql_select_db(имя базы данных,идентификатор_соединения) – выбирает базу данных, расположенную на сервере MySQL. Параметр "имя базы данных" относится к активной базе данных на сервере MySQL, который был открыт с помощью функции mysql_connect. "Идентификатор_соединения" является ссылкой на текущее соединение с MySQL.

mysql_query(запрос sql) – посылает запрос активной в данный момент базе данных.

mysql_fetch_array(resourse result) – возвращает массив, который соответствует извлеченной строке, и перемещает внутренний указатель данных вперед.

mysql_affected_rows(resourse result) – определяет число строк, затронутых предыдущей операцией SQL.

mysql_close(link_identifier) – закрывает соединение MySQL.

Прежде чем можно будет применять эти функции для создания приложений обработки данных с помощью MySQL, необходимо получить подходящий доступ к серверу MySQL. Для этого требуется учетная запись пользователя и пароль с полномочиями доступа к базе данных и таблицам, содержащим данные, а также имя хоста сервера MySQL или IP-адрес.

При работе с сервером MySQL полезно также использовать инструменты управления с графическим интерфейсом, которые обеспечивают более легкий интерфейс использования данных. Популярными инструментами являются: SQLyog (доступный на http://www.webyog.com) и MySQL Administrator (доступный на http://www.mysql.com/products/tools/).

Добавление записей

С помощью рассмотренных в предыдущем разделе функций MySQL и языка SQL можно добавлять записи в таблицу базы данных. Записи добавляются с помощью формы, предоставляющей области для ввода информации. Нажатие кнопки вызывает затем сценарий PHP для записи новой информации в таблицу с помощью команды SQL INSERT.

Типичная форма ввода для добавления новой записи в таблицу Survey показана ниже.

Поля формы именованы соответствующим образом:

Name — 'Name', Email — 'Email', Web Connection — 'Connection',

Residence (City/ST/Country) — 'Residence', Age — 'Age', Gender — 'Gender',

Comments — 'Comments'.

Прежде чем подробно рассматривать код, будет полезно посмотреть на синтаксис оператора SQL INSERT:

INSERT INTO TableName (FieldName1 [,FieldName2]...) VALUES (Value1 [,Value2]...)

Более подробное рассмотрение оператора INSERT дано в приложении.

Следующий код используется для обработки данных формы VisitorSurvey.php:

VisitorSurvey.php

<?php

if ($_POST[submit] == "Submit")

{

//Получение данных формы и присвоение скалярным переменным

$Name = $_POST[Name];

$Email = $_POST[Email];

$Connection = $_POST[Connection];

$Residence = $_POST[Residence];

$Age = $_POST[Age];

$Gender = $_POST[Gender];

$Comments = $_POST[Comments];

//Установление соединения с базой данных

$conn = mysql_connect('localhost','root','xyxyxy');

//Выбор базы данных MySQL

$db = mysql_select_db('Membership', $conn);

//Оператор SQL

$sql = "INSERT INTO Survey " .

"(Name,Email,Connection,Residence,Age,Gender,Comments) VALUES ('$Name', '$Email', '$Connection',    

 '$Residence', '$Age', '$Gender', '$Comments')";

 

//Выполнение оператора SQL и сохранение результатов в множестве записей

 

$rs = mysql_query($sql,$conn);

mysql_close($conn);

}

?>

После нажатия кнопки отправки Submit создается суперглобальный массив $_POST, содержащий значения из формы. Значения массива присваиваются скалярным переменным. Это упрощает кодирование оператора SQL. Затем выполняется оператор mysql_connect(). Этот оператор требует три параметра – имя хоста сервера MySQL, имя пользователя, и пароль. Здесь для соединения с базой данных MySQL используется строка соединения без DSN. Ссылка на соединение хранится в переменной $conn. Это пример ссылочной переменной PHP. В отличие от скалярных переменных и массивов, ссылочные переменные не применяются непосредственно в программе, но часто используются как параметры для других функций. После соединения с сервером базы данных MySQL следующий шаг состоит в выборе базы данных. Так как экземпляр сервера MySQL может содержать большое число баз данных, то задействуется функция mysql_select_db для выбора одной из них для использования в приложении. Эта функция требует два параметра – имя базы данных и ссылку на соединение MySQL. Вслед за выбором базы данных формируется оператор SQL INSERT и присваивается переменной $sql. Затем функция mysql_query() выполняет оператор SQL, создающий множество записей (множество записей базы данных). Это множество записей присваивается переменной $rs, еще одной ссылочной переменной PHP. Отметим, что функция mysql_query() требует два параметра — $sql (ссылка на текущий оператор SQL) и $conn (ссылка на текущее соединение с базой данных). Наконец, вызывается функция close() для закрытия текущего соединения с базой данных. Для таких приложений обычно желательно выполнять проверку данных, прежде чем заносить данные в таблицу базы данных. Это необходимо делать перед установлением соединения с базой данных.

В случае ошибки кодирования данные не заносятся в таблицу базы данных, а PHP выведет предупреждение или сообщение об ошибке. В такой ситуации полезно подавить эти критические сообщения, добавить код для проверки ошибок вручную и сгенерировать более понятный для пользователя вывод. Это можно делать сразу после оператора mysql_query(), проверяя статус вновь созданного множества записей — $rs.

Предположим, что в предыдущем коде функция mysql_query() содержит вместо $sql параметр $sqlString. В этом случае PHP немедленно прекратит выполнение страницы и выведет сообщение об ошибке.

Вывод сообщения об ошибке PHP можно подавить с помощью оператора управления ошибками "@". При подавленном сообщении об ошибке можно добавить код для создания более понятного пользователю сообщения. Такой подход показан ниже:

VisitorSurvey.php

<?php

if ($_POST[submit] == "Submit")

{

//Получение данных формы и присвоение скалярным переменным

$Name = $_POST[Name];

$Email = $_POST[Email];

$Connection = $_POST[Connection];

$Residence = $_POST[Residence];

$Age = $_POST[Age];

$Gender = $_POST[Gender];

$Comments = $_POST[Comments];

//Установление соединения с базой данных

$conn = @mysql_connect('localhost','root','xyxyxy');

//Выбор базы данных MySQL

$db = @mysql_select_db('Membership', $conn);

//Оператор SQL

$sqlstring = "INSERT INTO Survey " .

"(Name,Email,Connection,Residence,Age,Gender,Comments) VALUES ('$Name', '$Email', '$Connection',    

 '$Residence', '$Age', '$Gender', '$Comments')";

 

//Выполнение оператора SQL и сохранение результатов в виде множества записей

 

$rs = @mysql_query($sqlstring,$conn);

if (!$rs)

{

echo "Произошла ошибка. Попробуйте еще раз.";

}

else

{

echo "Запись была успешно добавлена.";

}

mysql_close($conn);

}

?>

Вслед за функцией mysql_query() используется оператор if для проверки статуса множества записей $rs. Если множество записей успешно создается, выводится сообщение "Запись была успешно добавлена". Если возникает проблема, выводится сообщение "Произошла ошибка. Попробуйте еще раз."

Выбор записей

Следующий код используется для обработки формы DirectorySearch.php:

DirectorySearch.php

<?php

if ($_POST[submit] == "Search")

{

 

 //Получение данных формы

 

 $string = $_POST['search'];

 

 //Установление соединения с данными

 

 $conn = mysql_connect('localhost','root','xyxyxy');

 

 //Выбор базы данных 

 

 $db = mysql_select_db('Membership', $conn);

 

 //Создание оператора SQL SELECT

 

 $sql = "SELECT * FROM Directory WHERE LName = '$string'";

 

 $rs = mysql_query($sql, $conn);

}

?>

<!DOCTYPE html PUBLIC "-//W3C/DTD/XHTML 1.0 Transitional//EN"

"http://www.w3.org/TR/xhtml1/DTD/xhtml11-transitional.dtd">

 

 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">

<head>

<title>Страница Web </title>

 

</head>

 

<body>

 

<form action="DirectorySearch.php" method="post">

 <p>Введите ниже фамилию и нажмите кнопку "Search",

чтобы найти номер телефона и адрес e-mail сотрудника</p>

 <table>

<tr>

<td colspan="2">Company XYZ Directory</td>

</tr>

<td><input type="text" size="15" name="SearchName"/></td>

<td><input type="submit" value="Search" name="submit"/>

</tr>

</table>

 </form>

 

<div>

 

<?php

 

if(!empty($_POST))

{

while($row = mysql_fetch_array($rs))

{

echo "Name: " .$row['FName'] . "  ";

echo  $row['LName'] . "<br/>";

echo "Telephone: " . $row['Telephone'] . "<br/>";

echo "Email: " . $row['Email'] . "<br/>";

}

mysql_close($conn);

}

?>

 

</div>

</body>

</html>

Эта страница содержит два блока кода PHP. Первый выполняется, когда нажимается кнопка отправки формы "Search". Введенная пользователем фамилия присваивается скалярной переменной '$string'. Затем создается соединение с базой данных и формируется оператор SQL SELECT для выбора всех (*) полей таблицы записей, в которых поле 'lastname' совпадает со строкой фамилии, введенной пользователем. В конце выполняется оператор SQL. Если найдены подходящие записи, то множество записей присваивается переменной '$rs'.

Второй блок кода появляется в теле документа HTML. Код, содержащий операторы echo или print, помещается обычно между открывающим и закрывающим тегами <body>, так что он может выводиться или форматироваться в соответствии с другими элементами страницы. Операторы echo и print, появляющиеся в блоках PHP, закодированные выше тега <html>, всегда появляются в верху страницы и предшествуют всем другим ее элементам.

Назначение этого блока кода состоит в выводе извлеченных записей, если в предыдущем блоке кода был выполнен оператор SQL. Сначала используется оператор if для проверки, что массив $_POST не является пустым. Если этот массив будет пустым, то это означает, что форма не была отправлена, и никакие записи не были извлечены. Если этот условный оператор отсутствует, то будет возникать ошибка, так как массив mysql_fetch_array не будет содержать никаких значений.

Затем используется цикл while для итераций по множеству записей. Во время каждой итерации по множеству записей функция mysql_fetch_array() создает ассоциативный массив (здесь этот массив назван $row ), содержащий значения полей текущей записи. Индексы массива соответствуют именам полей формы, а элемент массива соответствует значению поля. Каждая запись затем выводит $row['FName'] — значение поля 'FirstName', $row['LName'] -- значение поля 'LastName', $row['Telephone'] – значение поля 'Telephone', и $row['Email'] – значение поля 'Email'. Этот процесс продолжается, пока не будет достигнут конец множества записей, при этом массив $row каждый раз будет содержать новые значения.

После вывода всех записей соединение с базой данных закрывается с помощью функции mysql_close().

Ниже представлен пример вывода, созданного после поиска в каталоге.

Если пользователь ищет фамилию, которая не существует в таблице базы данных, то никакие записи не выводятся. Чтобы предотвратить путаницу, приведенный выше сценарий можно немного изменить так, что будет выводиться соответствующее сообщение, если подходящие записи не будут найдены.

DirectorySearch.php

<?php

 

if(!empty($_POST))

{

 

while($row = mysql_fetch_array($rs))

 

{

 

echo "Name: " .$row['FName'] . "  ";

echo  $row['LName'] . "<br/>";

echo "Telephone: " . $row['Telephone'] . "<br/>";

echo "Email: " . $row['Email'] . "<br/>";

 

}

 

if (mysql_affected_rows($rs) == 0)

 

{

 

 echo "No records found!";

 

}

 

mysql_close($conn);

 }

?>

 

</div>

</body>

</html>

Показанный выше измененный сценарий содержит дополнительно функцию mysql_affected_rows(). Эта функция требует один параметр – ссылку на текущее множество записей $rs и определяет число строк, затронутых последней операцией SQL. Если возвращаемое функцией mysql_affected_rows() значение равно 0, то оператор SQL SELECT не затронул ни одной строки. Поэтому подходящих записей найдено не было.

Удаление записей

Оператор SQL DELETE используется для удаления существующих записей в базе данных.

Синтаксис оператора SQL DELETE показан ниже:

DELETE FROM Имя_Таблицы WHERE критерий

Более подробно оператор DELETE рассматривается в приложении.

Следующая форма представляет запись пользователя, которая будет удалена из таблицы базы данных Personnel. Щелчок на кнопке Delete вызывает процедуру PHP, которая выполняет оператор SQL DELETE для удаления этой записи из таблицы базы данных.

Кроме показанных выше элементов управления формы, страница включает также скрытое текстовое поле с именем "AutoNum" со значением, равным полю AutoNum таблицы базы данных. Это поле используется для уникальной идентификации каждой записи. Следующий код демонстрирует, как работает страница:

DirectorySearch.php

<?php

 

if ($_POST['submitb']=="Delete Record")

   {

 

    $conn = mysql_connect('localhost','root','xyxyxy');

    $db = mysql_select_db('Membership',$conn);

    $sqlDelete = "DELETE FROM Personnel WHERE AutoNum =" . $_POST['AutoNum'];

    $rsDelete = mysql_query($sqlDelete,$conn);

 

 if(mysql_affected_rows($rsDelete) == 1)

  {

 

    echo "Запись успешно удалена!";

 

  }

 

    mysql_close($conn);

 

   }

 

?>

После нажатия кнопки "Delete Record" устанавливается соединение с базой данных MySQL. Затем создается оператор SQL DELETE для удаления записи из таблицы Personnel со значением поля AutoNum, равным значению скрытого текстового поля AutoNum. Затем оператор SQL выполняется. Результаты работы функции mysql_query() присваиваются переменной $rsDelete. Последний шаг состоит в проверке, что удаление записи прошло успешно, и в выводе подтверждающего сообщения. Функция mysql_affected_rows() используется для определения числа строк в множестве результатов ODBC или числа строк, затронутых оператором mysql_query(). Так как будет удалена только одна запись, то результат mysql_affected_rows() равный 1 означает, что запись удалена успешно. В конце соединение с базой данных закрывается.

Открытие файлов

PHP предоставляет доступ к файлам в операционных системах Windows и Unix для чтения, записи или добавления содержимого. Этот раздел описывает, как использовать PHP для открытия файлов в системах Windows.

PHP содержит функции fopen() и fclose() для работы с файлами. Обе функции определяются ниже.

fopen(имя_файла, режим) - функция используется для открытия файла. Для функции требуется задать имя файла и режим работы. Она возвращает указатель на файл, который содержит информацию о файле и используется в качестве ссылки.

fclose(указатель_ресурса) – функция используется для закрытия файла. Для функции требуется указатель файла, созданный при открытии файла с помощью функции fopen(). Возвращает TRUE при успешной работе или FALSE при отказе.

Имя файла является полным путем доступа к файлу, который требуется создать или открыть. Этот путь доступа может быть относительным путем доступа к файлу: "/Documents and Settings/Administrator/PHP/myfile.txt" или абсолютным путем доступа к файлу: "E:/MyFiles/PHP/myfile.txt". Для каждого определенного каталога необходимо иметь подходящие права NTFS для создания, модификации или удаления файлов.

Режим может быть одним из следующих.

Режимы, используемые в fopen()

Режим

Применение

r

Открывает существующий файл с целью чтения из него данных. Указатель файла помещается в начале файла

r+

Открывает существующий файл с целью чтения или записи данных. Указатель файла помещается в начале файла

w

Открывает файл для записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в начале файла и функция удаляет все существующее содержимое файла

w+

Открывает файл для чтения и записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в начале файла и функция удаляет все существующее содержимое файла

a

Открывает файл для записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в конце файла

a+

Открывает файл для чтения и записи. Если файл не существует, то он создается. Если файл существует, то указатель файла помещается в конце файла

Следующий пример показывает, как открыть файл для чтения:

fileprocess.php

<?php

$filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

$newfile = fopen($filename, "w+");

//код для чтения или записи данных в файл располагается здесь

fclose($newfile);

?>

Первый шаг состоит в создании переменной для хранения всего пути доступа к файлу, который будет открыт:

$filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Путь доступа к текстовому файлу myfile.txt хранится в переменной с именем filename. Затем создается указатель файла с именем $newfile и применяется с функцией fopen() для открытия файла, указанного в предыдущем разделе. Указатель файла является ссылочной переменной PHP, используемой для ссылки на только что открытый файл:

$newfile = fopen($filename, "w+");

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

В некоторых ситуациях функция fopen() не сможет успешно открыть файл в результате неверного пути доступа к файлу, полномочий безопасности или других непредвиденных проблем. В связи с этим рекомендуется использовать специальную функцию PHP для аккуратной обработки таких ошибок. Эти функции можно применять в сочетании с оператором управления ошибками PHP "@" для завершения сценария, подавления создаваемых PHP сообщений об ошибках, и вывода более понятного пользователю сообщения. Функции управления ошибками PHP описаны ниже:

exit(сообщение_об_ошибке) – завершает текущий сценарий и выводит сообщение об ошибке, передаваемое в функцию.

die(сообщение_об_ошибке) – алиас функции exit().

Следующий сценарий демонстрирует использование функций управления ошибками:

fileprocess.php

<?php

$filename = "C:/Documents and Settings/Administrator/MyFiles/

myfile.txt";

$newfile = @fopen($filename, "w+") or exit("Невозможно открыть или создать файл");

//код для чтения или записи данных в файл размещается здесь

fclose($newfile);

?>

Если файл невозможно открыть, функция exit() выводит сообщение " Невозможно открыть или создать файл" и сценарий завершается.

Если файл открывается успешно, то содержимое можно читать из файла, записывать в файл, или добавлять к файлу в зависимости от используемого в функции fopen() режима. Подробнее эти действия будут рассмотрены в следующих разделах. После завершения обработки всего файла применяется функция fclose() для закрытия открытого файла.

Чтение файлов

Этот раздел описывает, как использовать PHP для чтения содержимого файлов в системах Windows.

Для чтения файлов в PHP имеются функции fread() и filesize(). Они определяются ниже.

fread(указатель_ресурса, длина) – функция, используемая для чтения содержимого файла. Читает указанное количество байтов "длина" из файла "указатель_ресурса". Чтение останавливается, когда будет прочитано заданное количество байтов ("длина") или будет достигнут маркер EOF ( end of file ). Функция требует два параметра – указатель файла, который создается, когда файл открывается с помощью функции fopen(), и размер, который определяет, какая часть содержимого будет считана.

fgetcsv(указатель_ресурса, длина, ограничитель) – функция, используемая для чтения содержимого файла и анализа данных для создания массива. Данные разделяются параметром-ограничителем, задаваемым в функции.

filesize(имя_файла) – возвращает размер файла. Если возникает ошибка, функция возвращает значение false.

Следующий пример иллюстрирует, как прочитать все содержимое файла:

fileread.php

<?php

$filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

$newfile = @fopen($filename, "r") or exit("Невозможно открыть файл!");

$file_contents = @fread($newfile, filesize($filename))

 or exit("Невозможно прочитать содержимое файла!");

fclose($newfile);

?>

Первый шаг состоит в создании переменной для хранения полного пути доступа к файлу, который будет открыт для чтения:

$filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Путь доступа к текстовому файлу myfile.txt хранится в переменной с именем filename. Затем создается указатель файла с именем $newfile и используется с функцией fopen() для открытия файла, указанного в предыдущем разделе. Указатель файла применяется для ссылки на только что открытый файл:

$newfile = fopen($filename, "r");

Указатель файла является переменной PHP, которая содержит ссылку на открытый файл. Он будет задействован позже с функцией fread() для чтения содержимого из открытого файла.

Затем создается переменная с именем $file_contents и используется для хранения содержимого текстового файла myfile.txt. Первый параметр функции fread() указывает на имя файла, содержимое которого будет прочитано. Второй параметр определяет длину файла. Если длина файла неизвестна, можно воспользоваться специальной функцией PHP с именем filesize(), которая определяет длину файла. Она требует один параметр – имя или путь доступа файла, который читается в данный момент.

$file_contents = fread($newfile, filesize($filename));

Все содержимое текстового файла хранится теперь в переменной $file_contents. Эти данные можно выводить на экране с помощью оператора echo или записать в другой текстовый файл.

В некоторых случаях может понадобиться прочитать и работать с отдельными частями содержимого текстового файла. При использовании fread() все содержимое файла хранится в одной переменной, что затрудняет работу с отдельными частями файла. Если текстовый файл содержит разграничители для разделения отдельных фрагментов данных, можно применить для чтения другую функцию чтения — fgetcsv(). Эта функция читает содержимое файла и создает массив, делая доступными определенные части текста.

Предположим, что текстовый файл numbers.txt существует и содержит следующие данные:

numbers.txt

50,17,34,90

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

fileread.php

<?php

$filename = "C:/numbers.txt";

$newfile = @fopen($filename, "r") or exit("Could not open file");

$file_contents = @fgetcsv($newfile, filesize($filename),",")

 or exit("Could not read file contents");

for ($i=0; $i < sizeof($file_contents); $i++)

{

echo $file_contents[$i];

echo "<br/>";

}

fclose($newfile);

?>

После открытия файла функция fgetcsv() считывает все содержимое файла, создавая массив — '$file_contents'. Третий параметр функции fgetcsv() определяет, что каждый элемент, отделенный с помощью запятой ",", станет элементом нового массива. Так как numbers.txt содержит значения 50,17,34,90, то $file_contents[0] = 50, $file_contents[1] = 17, $file_contents[2] = 34, $file_contents[3] = 90. После создания массива значениями можно манипулировать с помощью любой из функций для массивов PHP. В предыдущем примере цикл for выполняет итерации на массиве $file_contents[] и выводит каждое число.

После завершения обработки файла функция fclose() используется для закрытия открытого файла.

Запись в файлы

Этот раздел описывает, как использовать PHP для записи содержимого в файлы в системах Windows.

PHP содержит функцию fwrite() для записи файлов. Эта функция определена ниже.

fwrite(указатель_файла,строка) – записывает содержимое строки в поток указанного файла. Если задан аргумент length (длина), запись будет остановлена после записи length байтов или достижения конца строки.

Следующий пример иллюстрирует, как записать все содержимое файла:

filewrite.php

<?php

$filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

$newfile = @fopen($filename, "w") or exit("Невозможно открыть файл");

$file_contents = "Добавьте эту строку в текстовый файл";

fwrite($newfile,$file_contents);

fclose($newfile);

?>

Первый шаг состоит в создании переменной для хранения полного пути доступа к файлу, который будет открыт или создан:

$filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Путь доступа к текстовому файлу myfile.txt хранится в переменной с именем filename. Затем создается указатель файла с именем $newfile и используется с функцией fopen() для открытия файла, указанного в предыдущем разделе. Указатель файла применяется для ссылки на только что открытый файл. Файл открывается в режиме записи:

$newfile = fopen($filename, "w");

Указатель файла является переменной PHP, содержащей ссылку на открытый файл. Он будет задействован позже для записи содержимого в открытый файл.

Затем создается переменная с именем $file_contents и ей присваивается строковое значение, которое будет записано в текстовый файл myfile.txt.

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

fwrite($newfile, $file_contents);

После завершения обработки файла используется функция fclose() для закрытия открытого файла.

В некоторых случаях может понадобиться записать содержимое существующего файла в новый файл. Этот процесс требует использования функций fopen(), fread() и fwrite(). Открывается первый файл, читается его содержимое и записывается в новый файл, который также был открыт. Следующий сценарий показывает реализацию такого процесса:

filecopy.php

<?php

$fileAname = "C:/MyFiles/PHP/file1.txt";

$fileBname = "C:/MyFiles/PHP/file.txt";

$currentfile = fopen($fileAname,"r") or exit("Невозможно открыть файл");

$fileAcontents = fread($currentfile,filesize($fileAname));

$newfile = fopen($fileBname,"w");

fwrite($newfile, $fileAcontents);

fclose($newfile);

fclose($currentfile);

echo "Содержимое файла file1.txt скопировано в файл file.txt";

?>

Этот сценарий копирует содержимое "file1.txt" в новый файл "file.txt". Сначала объявляются две переменные $fileAname и $fileBname, которым присваиваются пути доступа к каталогам существующего и нового файла. Функция fopen() используется для открытия текущего файла для чтения его содержимого. Открытый файл присваивается указателю файла $currentfile. Содержимое открытого файла считывается с помощью функции fread() и присваивается переменной $fileAcontents. Затем функция fopen() применяется снова для открытия нового файла. Открытый файл присваивается указателю файла $newfile. Функция fwrite() используется для записи содержимого исходного файла в новый файл. Когда процесс копирования завершается, оба файла закрываются с помощью функции fclose().

Копирование файлов

Этот раздел описывает, как использовать PHP для копирования файлов в системах Windows.

PHP содержит функцию copy() для копирования файлов. Эта функция определяется ниже:

copy(исходный_файл, новый_файл) – копирует содержимое исходного файла, определенного первым параметром, в новый файл, определенный вторым параметром функции. Функция возвращает значение true или false.

Следующий пример показывает, как скопировать содержимое одного файла в другой файл:

filecopy.php

<?php

$orig_filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

$new_filename = "C:/Documents and Settings/Administrator/MyFiles/myNewfile.txt";

$status = @copy($orig_filename, $new_filename) or die("Невозможно скопировать файл");

echo "Содержимое файла успешно скопировано!";

   

?>

Первый шаг состоит в создании переменной для хранения полного пути доступа к исходному файлу, содержимое которого будет скопировано:

$orig_filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Затем создается вторая переменная для хранения полного пути доступа к новому файлу, который будет создан:

$new_filename = "C:/Documents and Settings/Administrators/MyFiles/myNewfile.txt";

Копирование выполняет функция copy(), принимая два параметра, путь доступа к исходному файлу — $orig_filename, и путь доступа к новому — $new_filename. Функция copy() возвращает значение true, если копирование завершается успешно; иначе возвращается значение false. Возвращаемое значение хранится в переменной $status.

$status = copy($orig_filename, $new_filename) or die("Невозможно скопировать файл");

Если функция copy() отказывает, выполняется функция die(), выводя сообщение об ошибке. Иначе с помощью функции echo выводится сообщение об успехе.

echo "Содержимое успешно скопировано";

В предыдущем разделе функция fwrite() используется вместе с функцией fread() для чтения содержимого одного файла и записи этого содержимого в новый файл. Если содержимое исходного файла не добавляется к существующему файлу, то функция copy() предоставляет более простой подход для копирования содержимого из существующего файла в новый файл.

Удаление файлов

Этот раздел описывает, как использовать PHP для удаления файлов в системах Windows.

PHP содержит функцию unlink() для удаления файлов. Функцию unlink() надо использовать с осторожностью. После удаления файла его невозможно восстановить. Эта функция определяется ниже.

unlink(имя_файла) – удаляет файл, определенный параметром. Функция возвращает значение true или false.

Следующий пример показывает, как удалить файл с помощью функции unlink():

filedelete.php

<?php

$filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

$status = unlink($filename) or exit("Невозможно удалить файл");

echo "файл удален успешно";

   

?>

Первый шаг состоит в создании переменной для хранения полного пути доступа к файлу, содержимое которого будет удалено:

$filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Функция unlink() выполняется, получая один параметр, путь доступа исходного файла — $filename. Функция unlink() возвращает значение true, если файл удаляется успешно; иначе возвращается значение false. Возвращаемое значение хранится в переменной $status.

$status = unlink($filename) or die("Невозможно удалить файл");

Если функция unlink() отказывает, выполняется функция exit(), выводя сообщение об ошибке. Иначе с помощью оператора echo выводится сообщение об успехе:

echo "файл удален успешно";

Переименование файлов

Этот раздел описывает, как использовать PHP для переименования файлов в системах Windows.

PHP содержит функцию rename() для переименования файлов. Эта функция определена ниже:

rename($orig_filename, $new_filename) – переименует файл, определенный первым параметром, в имя, определенное вторым параметром. Функция возвращает значение true или false.

Следующий пример показывает, как переименовать файл с помощью функции rename():

filerename.php

<?php

$orig_filename = "C:/Documents and Settings/Administrator/MyFiles/myfile.txt";

$new_filename = "C:/Documents and Settings/Administrator/MyFiles/newfile.txt";

$status = rename($orig_filename, $new_filename) or exit("Невозможно переименовать файл");

echo "файл успешно переименован";

?>

Первый шаг состоит в создании переменной для хранения полного пути доступа к файлу, который будет переименован:

$orig_filename = "C:/Documents and Settings/Administrators/MyFiles/myfile.txt";

Второй шаг состоит в создании переменной для хранения полного пути доступа к файлу, который будет создан, когда старый файл будет переименован:

$new_filename = "C:/Documents and Settings/Administrators/MyFiles/newfile.txt";

При выполнении функция rename() получает два параметра, путь доступа к исходному файлу — $orig_filename и путь доступа к файлу, который будет создан, когда старый файл будет переименован — $new_filename. Функция rename() возвращает значение true, если файл переименовывается успешно, иначе возвращается значение false. Возвращаемое значение хранится в переменной $status.

$status = rename($orig_filename,$new_filename) or exit("Невозможно переименовать файл");

Если функция rename() отказывает, выполняется функция exit(), выводящая сообщение об ошибке. Иначе выводится сообщение об успехе с помощью оператора echo.

echo "файл успешно переименован";


Задание

Создать скрипты регистрации пользователей с обеспечением проверки формы и ипользованием сеансов в соответствии с заданием из практической работы №5.




1. Доступ к ресурсам Internet через электронную почту.html
2. порождаю наука о наследственности и изменчивости организмов Медицинская генетика раскрывает и объясняе.html
3. реферат дисертації на здобуття наукового ступеня кандидата технічних наук Харків 2001 Дисер
4. 2002 N 152ФЗ от 10.01.2003 N 8ФЗ от 10
5. Редуктор для привода ленточного транспортера
6. тема РФ- понятие структура и основы построения
7. Стратегический конкурентный исследование в системе управленческого исследованиеа
8. ЛЕКЦИЯ 9ТЕОРИИ ОБЩЕГО РАВНОВЕСИЯ И ЭКОНОМИЧЕСКОГО РАЗВИТИЯ1
9. Вариант 3 Женщина 24 года
10. Поняття етикету
11. СОЦИАЛЬНЫЕ ВЗГЛЯДЫ МОЛОДЕЖИ НА ПРОБЛЕМЫ В ОБЩЕСТВЕ ПЕРСПЕКТИВЫ РЕШЕНИЯ ПРОБЛЕМ Я автор.html
12. СУЩНОСТЬ И ВИДЫ МОТИВАЦИИ Сущность мотивации персонала состоит именно в том чтобы персонал предприятия э
13. Общая характеристика рыночной экономики
14. Создание 3Dмоделей геометрических тел. Получение чертежей с 3Dмоделей
15. III ступенів з поглибленим вивченням економіки та права 380936539111 Навіщо мені
16. Проблемы НП
17. то давно совратил ее бывшего заместителя Джека Филдинга
18. Культурная мозаика малых городов и сёл ОПИСАНИЕ ОРГАНИЗАЦИИ Название организации полное1
19. і Держава створює умови для повної зайнятості працездатного населення рівні можливості для громадян у ви
20. Translatioin of Political Literature