- •Одесса, 2004 Дорогой друг!
- •Содержание
- •Введение в php, управляющие операторы, формы.
- •Связь html-формы и php-скрипта.
- •Семейство функций is..().
- •Преобразование типов данных
- •Задания
- •Функции. Подключение файлов.
- •Самостоятельная работа.
- •Подключение файлов
- •Контрольная работа.
- •Массивы.
- •Задание
- •Функции для работы с датой и временем.
- •Функции для работы со строками.
- •Файлы и директории.
- •Задания
- •Загрузка клиентом файлов на сервер.
- •Обработка загруженных файлов на сервере
- •Регулярные выражения.
- •Сессии.
Контрольная работа.
В HTML форме пользователь вводит строки текста. После нажатия клавиши кнопки ГОТОВО запускается PHP скрипт, в котором напишите функцию, которая в качестве аргументов получает эти три строки и формирует из них таблицу с тремя ячейками.
Выше таблицы предусмотрите бегущую строку с текстом первой строки.
В
HTML
форме пользователь вводит три число
a,b
и с и после нажатия клавиши кнопки
ГОТОВО запускается PHP
скрипт, который решает квадратное
уравнение: ax2+bx+c=0.
Для этого в скрипте предусмотрите
функцию, которая получает три аргумента
(a,b
и c)
и возвращает значение дискриминанта
D=b2-4ac.
Далее в самой программе проверяется
значение функции и в зависимости от ее
значения рассчитывается 2 или 1 корень,
или выводится сообщение «корней нет».
Напоминаю, корни рассчитываются по
формуле.
Например, при вводе 2, -5 , 2 корни должны выйти 2 и 0.5, при 1, 2, 1 корень –1 и т.п.
Дополнительно проверьте, что a¹0, и если это не так, выведите сообщение.
Создайте функцию, которая в качестве параметров принимает два числа и выводит первое число в степени второго. Если второе число не задано, число должно выводится в первой степени.
В первом массиве длиной 4 элемента запишите имена сотрудников, во втором (тоже длиной 4) – их фамилии. Далее выведите их в таблицу с одной строкой и четырьмя ячейками (в каждой имя и фамилия).
Сделайте таблицу размером 2 на 2.
Массивы.
Индексом массива в PHP может быть как целое число (по умолчанию отсчет элементов начинается как обычно с нуля), так и строка. Массивы в PHP могут содержать элементы нескольких разных типов.
Для инициализации массива существуют несколько способов. Один из способов Вам уже знаком:
$massiv[0] = "first";
$massiv[1] = "second";
$massiv[2] = "third";
Но то же самое Вы могли бы провернуть и другим способом.
$massiv[] = "first";
$massiv[] = "second";
$massiv[] = "third";
Данный код создаст массив из трех элементов, и даст индексы элементам по умолчанию: 0, 1, 2. Но можно присваивать любой целый индекс по своему усмотрению:
$massiv[25] = "first";
$massiv[10] = "second";
$massiv[49] = "third";
Данный код опять-таки создает массив из трех элементов, но с индексами 10, 25 и 49. Как вы уже наверное поняли, привычный для вас способ определения количества элементов в массиве по наибольшему индексу в массиве не сработает. Тут необходимо что-то другое, а именно функция count(). Вот ее прототип: int count (массива)
Данная функция возвращает 0 в случае, если такого массива нет или если в массиве нет элементов (об этом позже). Если Вы имеете дело с массивом с последовательной индексацией, то Вы сможете ее использовать для работы с массивом:
$massiv = array("first", "second", "third");
$num = count($massiv);
for($i = 0; $i < $num; $i++){ echo (massiv[$i]."<br>"); }
Кстати, вы можете совмещать способы инициализации:
$massiv[25] = "first";
$massiv[10] = "second";
$massiv[ ] = "third";
В данном случае третьему элементу массива присвоится индекс 26.
Другой способ инициализации массива заключается в использовании функции array(). Мы передаем в функцию значения, которые хотим присвоить массиву:
$massiv = array("first", "second", "third");
Создаст массив с тремя элемента, присвоив им индексы 0, 1 и 2 соответственно. Чтобы присваивать индексы по своему усмотрению, необходимо использовать в функции array() оператор =>
$massiv = array(5 => "first", 15 => "second", 10 => "third");
$massiv = array(9 => "first", "second", 21 => "third");
В первом примере создается массив из трех элементов с индексами 5, 10 и 15. Во втором случае - с индексами 9, 10 и 21. Обратите внимание, что оператор => можно использовать перед любым элементом массива.
Чтобы присвоить элементу массива индекс в виде строки, делаем то же самое:
$massiv["first"] = "five";
$massiv["second"] = "six";
или $massive = array( "first" => "five", "second" => "six");
Теперь рассмотрим функции, которые помогут вам справляться с массивом, если он непоследовательно индексирован или индексирован строками. Две функции - each() и list() используются вместе для прохода через массив:
void list(...); //присваивает переданные переменные так, как если бы они были массивом
array each (array array) //возвращает следующую пару (ключ, значение) из массива
//в случае, если массив закончился, функция возвращает FALSE.
reset($massiv);
while (list($key, $value) = each($massiv))
{ echo "Array element with key = ".$key." has value = ".$value."<br>"; }
В примере используется еще одна функция - reset(). Ее используют для установки внутреннего указателя на первый в массиве элемент. При использовании этой функции Вы будете уверены, что находитесь в начале массива.
Следующие две функции next(), prev() перемещают внутренний курсор в массиве на один элемент вперед или назад соответственно, т.е. возвращают значение следующего или предыдущего элемента соответственно. В случае, если достигнут конец или начало массива функции возвращают FALSE.
sort(array, flag) – сортировка массива, где flag – необязательный праметр:
SORT_REGULAR – обычная сортировка
SORT_NUMBER – значения массива рассматриваются как числа
SORT_STRING – значения массива рассматриваются как строки.
asort(array) – сортировка массива с сохранением порядка индексов.
rsort(array) – аналогична sort(), но в обратном порядке.
arsort(array) – аналогична asort(), но в обратном порядке.
ksort(array) – сортирует массив по индексам.
krsort(array) – аналогична ksort(), но в обратном порядке.
Функция usort() несколько сложнее. В качестве одного аргумента, как и все остальные функции сортировки, она принимает массив. Однако у нее есть и второй аргумент. Этим вторым аргументом является функция, определив которую, можно сообщить usort (), как осуществлять сортировку. В следующем примере массив сортируется по длине строк, содержащихся в его элементах. Функция strlen() возвращает длину строки.
function by_length ($a, $b)
{ $1_а = strlen ($a);
$1_Ь = strlen ($b);
if ($l_a == $l_b) return 0;
return ($l_a < $l_b) ? -1 : 1;
}
$countries = array ( "e" => "United States" ,
"d" => "United Kingdom",
"c" => "Canada",
"b" =;> "Costa Rica",
"a" => "Germany");
usort ($countries, by_length);
while (list ($key, $val) = each ($countries))
{ echo "Element $key equals $val<BR>\n"; }
Возможно, вы заметили, что в результате мы снова потеряли наши строковые индексы. Функция uasort () действует так же, как usort (), но сохраняет исходные индексы. Функция uksort () действует аналогично функции usort (), но сравнивает ключи, а не значения элементов массива.
А что если мы хотим десортироватъ массив? Функция shuffle () с помощью имеющегося в РНР генератора случайных чисел переставляет элементы массива в случайном порядке. В приведенном ниже примере функция shuffle () используется вместе с функцией range () с целью создания массива из ста случайно расположенных чисел. Функция range () принимает два целочисленных параметра, первый из которых должен быть меньше второго, и возвращает массив, состоящий из всех целых чисел между этими двумя значениями.
// Создать массив чисел от 1 до 100:
$ints = range (1, 100);
// Задать начальное состояние генератора случайных чисел:
srand (time());
shuffle ($ints);
while (list ( , $num) = each ($ints)) {
echo "$num<br>\n"; }
Массивы особенно удобны при работе с данными HTML-форм табличного вида. При желании предоставить пользователю возможность ввести в базу данных несколько имен можно воспользоваться следующей формой
Код HTML для текстовых окон может выглядеть так:
<INPOT NAME="firstl" TYPE=TEXT> <INPUT NAME ="lastl" TYPE=TEXT>
<INPUT NAME="first2" TYPE=TEXT> <INPUT NAME="last2" TYPE=TEXT>
<INPOT NAME="first3" TYPE=TEXT> <INPUT NAME="last3" TYPE=TEXT>
Каждое текстовое окно имеет уникальное имя (" firstl", "lastl", "first2" и т. д.). При передаче формы для каждого текстового окна на форме будет создана переменная PHP ($firstl, $lastl, $first2 и т. д.). Однако если количество строк может меняться, как, вероятно, и будет, то более удобно представить каждое поле как массив данных. В HTML это делается с помощью квадратных скобок после имени элемента. Можно использовать цикл РНР for для размещения на форме необходимого числа текстовых окон:
<?php
$names = 3; ?>
<form action=”submit.php" method=post>
<? for ($i = 1; $i <= $names; $i++): ?>
first name:
<input мйме="first[]" type=text><br>
last name:
<input name="last[] " type=text><br><br>
<? endfor ?>
<br><input type=submit>
</form>
При передаче этой формы РНР создаст массивы с именами $first и $last, каждый элемент которых будет содержать значение текстового окна. Это позволяет легко обработать переданные данные в сценарии РНР. Допустим, что мы хотим добавить переданные имена в таблицу базы данных. Можно создать команду SQL INSERT для каждой пары имен при циклическом обходе массива:
<!— submit .php —>
<?php
$numrows = count ($first);
for ($i = 0; $i < $numrows; ++$i) {
$sql = "INSERT INTO Names ('First', 'Last') " . "VALUES (‘$first[$i]', '$last[$i]')";
// Здесь код для выполнения запроса. // ... // ... } ?>
