1.50M
Category: programmingprogramming

Введение в язык программирования PHP

1.

Введение в язык
программирования
PHP
Высшая Школа Программирования

2.

Программирование на PHP.
• PHP – это гибкий и легкий язык web-программирования, обладающий
широкими возможностями и неоспоримыми преимуществами.
• PHP это язык программирования, с помощью которого создают сайты,
активно взаимодействующие с пользователем, например: Интернетмагазин, веб - каталоги, почтовую рассылку на сайте, новостную ленту,
справочники, форумы и многое другое.
• PHP отличается от других подобных языков (JavaScript), тем, что код
выполняется на сервере. Если вы имеете скрипт на сервере, то клиент
получит результат работы этого скрипта, не имея возможности
определить, каков был исходный код.
• Наилучшим качеством PHP является то, что он прост для новичка в
программировании и предлагает много продвинутых возможностей для
программиста-профессионала.

3.

Программирование на PHP.
История развития.
• 1994 год – программист
Расмус Лердорф написал
собственные Perl-скрипты
для собственной
страницы и назвал
Personal Home Page
(PHP)

4.

Программирование на PHP.
История развития.
1997 год - два
программиста Энди
Гутманс и Зив Сураски
взяли за основу идею
Расмуса и переписали
PHP с нуля. Название
"Personal Home Page"
было изменено на
Hypertext Preprocessor

5.

• На PHP написаны популярные системы управления
контентом (CMS), например, WordPress, Joomla!,
Drupal.
На этом языке также написаны и популярные
фреймворки для создания сайтов,
например, Laravel, Yii2, Symfony.
• Наконец, масштабная и популярная соцсеть
«ВКонтакте» тоже создана на PHP

6.

Программирование на PHP.
История развития.
• 2000 год – вышла 4-я версия PHP, ставшая
стандартом для Веб-разработки.
• Последняя на сегодня версия — PHP 8.2.5 — появилась
в апреле 2023 года.
• PHP – это гибкий и легкий язык web-
программирования, обладающий широкими
возможностями и неоспоримыми
преимуществами.

7.

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

8.

• Для работы с языком программирования php
нам понадобится
• локальный сервер - open server для windows
• Или xamp для mac os

9.

Основные способы вставки PHP кода
PНР код состоит из инструкций, разделенных знаком ;
Правильные записи
<?php
инструкция1;
инструкция2;
?>
<?php
инструкция1;
инструкция2;
?>

10.

Вывод ошибок PHP
Если вы допустите в вашем PHP коде ошибку, то сервер выведет описание этой
ошибки прямо в браузер. Ошибки бывают трех типов: notice, warning и fatal.
Нотисы представляют собой замечания о том, что у вас в коде может что-то быть не
так. Хотя код по-прежнему будет работать. Лучше, однако, эти ошибки не оставлять
без внимания, а исправлять их.
Ворнинги представляют собой предупреждения о том, что что-то пошло не так. Как
правило при этом ваш код запустится, но будет работать не так, как вы хотите.
Фаталы возникают в том случае, когда PHP код не может быть выполнен. Как
правило это будет связано с допущенной вами синтаксической ошибкой.

11.

Вывод ошибок PHP
Есть, однако, проблема. По умолчанию нотисы и ворнинги выключены, а вместо
фаталов вы будете видеть просто белый экран. Это, конечно же, малоинформативно.
Давайте включим вывод всех ошибок:
<?php
error_reporting(E_ALL);
ini_set('display_errors', 'on');
?>
На выложенном в интернет сайте вывод ошибок лучше отключать.
Делается это вот так:
<?php
error_reporting(0);
ini_set('display_errors', 'off');
?>

12.

Вывод текста на экран. Оператор echo.
Когда нужно отобразить текст на веб-странице, то
оператор echo является наиболее употребляемым оператором
в PHP. Как его иcпользовать - после слова echo нужно
поместить строку текста в кавычки:
<?php
echo 'Привет от PHP';
?>
Отображение в браузере:
Привет от PHP
(для отображения текста можно использовать как двойные
кавычки, так и одинарные).
Для чисел кавычки можно не использовать:
<?php
echo 2014; ?>

13.

Комментарии
Однострочные
Многострочные

14.

Функция var_dump в PHP
Команда echo не всегда дает представление о том, что мы выводим. Для
отладки ваших программ лучше использовать специальную функцию
var_dump. Она помимо вывода строки или числа еще будет указывать тип
выводимых данных, а также их размер:
<?php
var_dump('12345'); // выведет '12345' и еще некоторую
полезную инфу
?>

15.

Переменные в PHP
PHP создан не только для форматирования
статичного текста. Для того, чтобы обрабатывать
различные данные были придуманы переменные.
Каждая переменная содержит определенное
значение.
Синтаксис переменной состоит из знака доллара $ и "свободного" идентификатора которому
присваивается какое-нибуть значение. Например:
<?php $name = "Виктор"; ?>

16.

Создание переменной
Переменная создается тогда, когда ей присваивают какоенибуть значение. Для присвоения значения переменной
используют оператор присвоения. Например:
<?php
$surname = "Петров";
$number = 1269794645;
$pi = 3.14159265;
$hello = "Hi all";
?>
Переменную можно вывести на экран с помощью
оператора echo, вот так:
<?php
$name = "Виктор";
echo "Ваше имя ", $name, "<br>";
?>

17.

Создадим переменyую которая будет содержать значение
количества бананов, вторая переменная количество лимонов, а
третья - их суммарное количество.
<?php
$bann = 5; // Бананы
$lim = 10; // Лимоны
$together = $bann + $lim; // Всего
echo "Количество фруктов ", $together;
?>
Отображение в браузере:
Количество фруктов 15

18.

Интерполяция переменных в PHP
Значение переменной может быть отображено например так:
<?php
$capital = "Paris";
echo "The capital of France is", $capital,"<br />";
?>
Но есть способ сделать это проще. Если имя переменной
заключено в двойные (не одинарные) кавычки, то переменная
интерполируется. Например:
<?php
$capital = "Paris";
echo "The capital of France is $capital <br />";
?>

19.

Переменные, содержащие имена других переменных
В PHP возможно размещать в значение переменных не только
обычные значения, но и имена других переменных.
<?php
$apples = 5;
$fruit = "apples"; /* Создаем переменную $fruit, которая содержит
имя переменной $apples */
// Сейчас мы можем вывести $apples, как $$fruit
echo "Число яблок - ", $$fruit; ?>
Для корректного отображения подобных переменных в строковых
константах, заключенных в двойные кавычки, следует также
использовать фигурные скобки:
${$fruit}.
Например:
<?php
echo "Число яблок - ${$fruit}";
?>

20.

Константы в PHP
Для описания константы используют функцию define,
которой передается ее имя и значение:
<?php
define("pi", 3.14); ?>
Имя константы нужно всегда заключать в кавычки, а ее
значение только тогда когда оно является строкой.
Пример использования константы:
<?php
define("pi", 3.14);
echo "Математическая константа Пи равняется ", pi;
?>

21.

Типы данных PHP
PHP является языком динамической типизации (тип переменной
определяется на основе её значения).
Типы, которые можно использовать в PHP:
•Boolean. Это логический тип, который содержит значение TRUE
или FALSE.
•Integer. Содержит значения целого числа (Например: 4 или 10
или другое целое число).
•String. Содержит значение текста произвольной длины
(Например: Олег, Киев, Австрия).
•Float. Вещественное число (Например: 1.2, 3.14, 8.5498777).
•Object. Объект.
•Array. Массив.
•Resource. Ресурс (Например: файл).
•NULL. Значение NULL.

22.

<?php
$bool = TRUE; // Значение Boolean
$int = 100; // Значение Integer
$string = "Переменная содержит текст"; // Значение String
$string2 = "5425"; // Значение String, так как число взято в кавычки
! $float = 44.122; // Значение Float
?>
Если надо изменить тип данных переменной, то для этого нужно
слева от имени переменной в круглых скобках указать нужный тип:
<?php
$str = "50000"; // Значение String
$new_str = (integer) $str; // Теперь значение стало Integer
echo $new_str + $new_str;
?>

23.

Математические операторы и математические
функции PHP
Числовые данные обрабатываются при помощи таких операторов :
+, -, *, /, % (остаток от деления), **
<?php
echo "2 + 2 = ", 2 + 2, "<br>";
echo "5 - 2 = ", 5 - 2, "<br>";
echo "10 * 10 = ", 10 * 10, "<br>";
echo "100 / 2 = ", 100 / 2, "<br>";
echo "10 % 2 = ", 10 % 2, "<br>";
echo "10 ** 2 = ", 10 ** 2, "<br>";
?>
Отображение в браузере: 2 + 2 = 4
5-2=3
10 * 10 = 100
100 / 2 = 50
10 % 2 = 0
10 ** 2 = 100

24.

Abs. Модуль числа, Sin. Синус, Sinh. Гиперболический синус. Cos. Косинус
Cosh. Гиперболический косинус. Acos. Арккосинус. Acosh. Гиперболический
арккосинус. Asin. Арксинус. Asinh. Гиперболический арксинус. Atan2. Арктангенс
частного двух переменных. Tan. Тангенс. Tanh. Гиперболический тангенс. Atan.
Арктангенс. Atan. Гиперболический арктангенс
Base_convert. Преобразование числа в строковом представлении из одной
системы счисления в другую. Decoct. Преобразование числа в восьмеричное
представление в виде строки. Bindec. Преобразование строки, предоставленной в
двоичном числе, в целое значение. Octdec. Преобразование строки,
представляющей восьмеричное число, в целое число. Hexdec. Преобразование
строки, которая представляет шестнадцатеричное число, в целое число. Ceil.
Округление числа в большую сторону. Floor. Округление числа в меньшую
сторону.Deg2rad. Градусы в радианы. Exp. Вычисление экспоненты числа.
Fmod. Остаток от деления двух чисел. Getrandmax. Макс. значение, которое
получают функцией rand(). Hypot. Вычисление гипотенузы по двум катетам.
Is_finite. Проверка, является ли число конечным вещественным числом.
Is_infinite. Проверка, является ли число бесконечностью.
Is_nan. Проверка, является ли значение Не числом(Not-A-Number).
Lcg_value. Генератор случайных чисел.
Log10. Десятичный логарифм. Log. Натуральный логарифм. Max. Максимум
заданных чисел. Min. Минимум заданных чисел. Mt_getrandmax. Макс. значение,
которое можно получить функцией mt_rand. Mt_rand. Генератор псевдослучайных
чисел по алгоритму. Pi. Значение числа π.
Pow. Возведение в степень. Round. Округляет число типа float. Sqrt. Квадратный
корень.

25.

<?php
echo "round(4.2) = ", round(4.2), "<br>";
?>
Отображение в браузере
round(4.2) = 4

26.

Операторы присвоения в PHP
Основным оператором присвоения является знак равенства =.
Он присваивает значение определенной переменной:
<?php $fruits=14; ?>
В одной строке можно присвоить одно значение сразу
нескольким переменным, например:
<?php $n = $m = $p = 3; echo $n, $m, $p; ?>
Отображение в браузере:
333
Также в PHP есть комбинированные операторы, которые делают
код более компактным. Вот их перечень:
+=, -=, /=, .=, %=, &=, |=, ^=, <=, >=
Например, если нужно прибавить 55 к значению
переменной $number, это можно записать как:
$number = $number + 55, а если использовать
комбинированный оператор, то так:
$number += 55.

27.

Увеличение и уменьшение на 1
Если есть переменна $a = 0, то чтобы добавить 1 к этой
переменной нужно написать: $a++, если нужно отнять 1, то
нужно записать так: $a--. Оператор ++ называют инкрементом,
а -- декрементом.
Оператор исполнения PHP
В PHP существует такой оператор, как оператор исполнения, он
нужен для того чтобы выполнять команды ОС и использовать
результат этого выполнения.
Любая строка, которая заключена в обратные апострофы —
` считаются как команда ОС. Например:
<?php
$d = `dir d:\\`;
echo $d;
?>
Как результат вы получите список директорий диска D.

28.

Строковые операторы PHP
PHP имеет два строковых операторы.
Первый - оператор конкатенации, который объединяет две
строки в одну.
Второй - конкатенирующий оператор присвоения .=, добавляет к
строке нужное значение. Например:
<?php
$d = "Hello";
$f = $d . " world"; // Теперь $f = "Hello world"
echo $f;
echo "<br/>";
$f .= " ! ! !"; // Теперь $f = "Hello world ! ! !"
echo $f;
?>

29.

1.
Создайте переменную $num и присвойте ей
значение 123. Выведите значение этой переменной
на экран с помощью команды echo.
2.
Создайте переменную $a. Запишите в нее значение
10, выведите его на экран. Затем запишите в нее
значение 20, выведите его на экран.
3.
Создайте переменную $a. Запишите в нее сумму
чисел 1, 2 и 3. С помощью команды echo выведите
на экран содержимое переменной $a.

30.

1.
Создайте переменную $c со значением 10 и
переменную $d со значением 5. Просуммируйте их, а
результат присвойте переменной $res. Выведите на
экран значение переменной $res.
2.
Создайте переменную $a со значением 1,
переменную $b со значением 2 и переменную $c со
значением 3. Выведите на экран их сумму.
3.
Запишите в переменную $a число 1.5, а в
переменную $b - число 0.75. Найдите сумму
значений этих переменных и выведите ее на экран.

31.

Условный оператор

32.

if (exp) statement
exp (выражение) - логическое выражение, которое может быть
истиной (TRUE) или ложью (FALSE).
statement (инструкция) выполняется тогда, когда exp — истина, и
не выполняется когда exp ложь!
Например, если скорость машины будет больше 60 то это
значит, что водитель превышает скорость:
<?php
$speed = 80;
if ($speed > 60)
echo "Превышение скорости !";
?>

33.

Если нужно чтобы при выполнении условия выполнялись сразу
несколько операторов, то нужно заключить их в фигурные
скобки { }:
<?php
$speed = 80;
if ($speed > 60)
{echo "Превышение скорости! <br>";
echo "Пожалуйста, уменьшите скорость!"; }
?>
Отображение в браузере:
Превышение скорости!
Пожалуйста, уменьшите скорость!

34.

Операторы сравнения PHP
Все операторы сравнения PHP указанные в таблице:
==
Равенство
Истина, если $a равно $b
===
Идентичност Истина, если $a равно $b, и они одного и того
ь
же типа
!=
Неравенство Истина, если $a не равно $b
<>
Неравенство Истина, если $a не равно $b
!==
Неидентично Истина, если $a не равно $b, или они не
сть
одного типа
<
Меньше
Истина, если $a меньше $b
>
Больше
Истина, если $a больше $b
<=
Меньше или Истина, если $a меньше или равно $b
равно
>=
Больше или
равно
Истина, если $a больше или равно $b

35.

<?php
$speed = 45;
if ($speed != 60)
echo "Скорость в пределах нормы";
?>
Если нужно применить к выражению несколько условий, то
используют логические операторы:
<?php
$speed = 40;
if ($speed > 35 && $speed < 55)
{ echo "Скорость в пределах нормы"; }
?>
&&
Логическое "И"
Истина, если истинно $a и $b
||
Логическое "ИЛИ"
Истина, если истинно $a или $b
xor
Логическое
"Исключающее ИЛИ"
Истина, если истинно $a или
$b, но не оба одновременно
!
Логическое "НЕ"
Истина, если $a ложь

36.

Оператор ELSE в PHP
Синтаксис оператора:
if(exp) statement1 else statement2
Пример:
<?php
$speed = 50;
if ($speed > 60)
echo "Превышение скорости !";
else
echo "Скорость в пределах нормы"
?>
В этом случае будет выведено сообщение
Скорость в пределах нормы

37.

Оператор ELSEIF в PHP
Оператор if имеет еще одно расширение, это оператор elseif, он
используется для последовательной проверки условий.
Синтаксис:
if (exp)
statement1
elseif (exp2)
statement2
Также можно записывать так:
if (exp)
statement1
else if (exp2)
statement2

38.

Пример:
<?php $speed = 50;
if ($speed < 30)
echo "Скорость в пределах нормы";
elseif ($speed == 30)
echo "Ваша скорость 30 км/час";
elseif ($speed == 40)
echo "Ваша скорость 40 км/час";
elseif ($speed == 50)
echo "Ваша скорость 50 км/час";
elseif ($speed == 60)
echo "Ваша скорость 60 км/час";
else echo "Превышение скорости !"; ?>

39.

Также, такой кусок кода можно записать и так:
<?php
$speed = 50;
if ($speed < 30)
echo "Скорость в пределах нормы";
elseif ($speed >= 30 && $speed <= 60)
echo "Ваша скорость {$speed} км/час";
else echo "Превышение скорости !";
?>
В этом случае будет выведено сообщение "Ваша скорость 50
км/час". А если бы не одно условие не подошло бы , то сработал
бы оператор else и мы увидели "Превышение скорости !".

40.

PHP также поддерживает альтернативный синтаксис для
конструкции if..else, при которой вместо открывающей фигурной
скобки ставится двоеточие, а в конце всей конструкции ставится
ключевое слово endif.
<?php
$a = 5;
if ($a > 0) :
echo "Переменная a больше нуля";
elseif ($a < 0) :
echo "Переменная a меньше нуля";
else :
echo "Переменная a равна нулю";
endif;
?>

41.

Комбинированный режим HTML и PHP
Также мы можем написать конструкцию if..else иным образом,
переключаясь внутри конструкции на код HTML:
<?php
$a = 5;
?>
<?php if ($a > 0) { ?>
<h2>Переменная a больше нуля</h2>
<?php } ?>
В данном случае само условие указывется в отдельном блоке php.
Важно, что при этом этот блок содержит только открывающую
фигурную скобку "{".Завершается конструкция if другим блоком
php, который содержит закрывающую фигурную скобку: <?php }
?>Между этими двумя блоками php располагается код, который
отображается на html-странице, если условие в if истинно. Причем
этот код представляет именно код html

42.

Тернарный оператор PHP
$var = condition ? exp1 : exp2;
Если условие выполняется, то переменной $var присваивается
результат вычисления exp1, иначе exp2.
Пример:
<?php
$speed = 55;
echo ($speed <= 60) ? "Скорость в пределах нормы" :
"Превышение скорости !"; ?>
В результате мы увидим строку - "Скорость в пределах нормы".

43.

Функции ISSET и UNSET в PHP
Функция isset предназначена для определения в коде наличия
переменной. В качестве параметра в данную функцию
передается проверяемая переменная.
На следующем примере мы хотим проверить существует ли у
нас переменная$g$g:
= 5;
if (isset($g)){
echo «Переменная g существует и равна: $g»;
}
else{
echo «Переменная g не существует»;
}
Результатом выполнения данного кода будет вывод на экран
цифры 1. Это означает, что переменная существует. В случае
проверки заведомо несуществующей переменной, результатом
выполнения будет пустота, то есть по другому, ничего не будет
выведено на экране.

44.

Функции ISSET и UNSET в PHP
Мы научились создавать переменные в php и придавать им
значения. Теперь рассмотрим функцию unset, которая
позволяет уничтожать данные переменные.
$g = 10;
unset($g);
echo «$g»;
Результатом выполнения данной программы будет ошибка, а
не вывод на экран числа 10. Так произойдет потому, что до
выполнения echo «$g», переменая $g будет уничтожена
функцией unset и уже она просто не будет физически
существовать.

45.

Комбинированный режим HTML и PHP
Также мы можем написать конструкцию if..else иным образом,
переключаясь внутри конструкции на код HTML:
<?php
$a = 5;
?>
<?php if ($a > 0) { ?>
<h2>Переменная a больше нуля</h2>
<?php } ?>
В данном случае само условие указывется в отдельном блоке php.
Важно, что при этом этот блок содержит только открывающую
фигурную скобку "{".Завершается конструкция if другим блоком
php, который содержит закрывающую фигурную скобку: <?php }
?>Между этими двумя блоками php располагается код, который
отображается на html-странице, если условие в if истинно. Причем
этот код представляет именно код html

46.

Оператор выбора
Оператор switch

47.

Иногда использование конструкции операторов
if .. else if несколько утомляет.
Чтобы исправить эту ситуацию есть оператор switch.
Синтаксис:
switch (exp){
case condition1: exp1; break;
case condition2: exp2; break;
case condition3: exp3; break;
default: exp4;
break; }
Сначала записывается ключевое слово switch, после которого в скобках
записывается некоторое выражение.
Далее, после слова case нужно перечислить возможные варианты
значений, если значение истина, то выполняется группа операторов,
которые записаны до оператора break. Если ни одно условие не походит,
то выполняется оператор default (если оператор default не записывать, то
при не выполнении никаких других условий ничего не произойдет).

48.

<?php
$speed = 55;
switch($speed)
{ case 30 : echo "Ваша скорость 30 км/час"; break;
case 58 : echo "Ваша скорость 50 км/час"; break;
case 70 : echo "Превышение скорости !"; break;
default : echo "Скорость в пределах нормы"; break; }
?>
Также, при использовании оператора switch, мы можем записать
несколько условий для некоторого действия:
<?php
$speed = 55;
switch($speed)
{ case 30 : case 58 : echo "Скорость в пределах нормы"; break;
case 70 : echo "Превышение скорости !"; break;
default : echo "Скорость в пределах нормы"; break; } ?>
В результате мы увидим — "Скорость в пределах нормы".

49.

Начиная с версии 8.0 в PHP была добавлена поддержка
другой, похожей конструкции - match. Она позволяет
оптимизировать конструкцию switch. Конструкция match
также принимает некоторое выражение и сравнивает его с
набором значений.Синтаксис:
<?php
$a = 2;
$operation = match ($a) {
1 => "сложение",
2 => "вычитание",
default => "действие по умолчанию",
};
echo $operation;
?>
Итак, match в скобках также принимает некоторое сравниваемое. Сам блок
кода match также обертывается в фигурные скобки, однако в конце после
закрывающей фигурной скобки необходимо поставить точку с запятой. А
вместо операторов case просто указываются значения, с которыми
сравнивается выражение.Но в отличие от switch, конструкция match
возвращает некоторый результат. Поэтому после каждого сравнимого значения
ставится оператор =>, после которого идет возвращаемый результат.

50.

1.
Дано число. Если оно больше 10, то увеличьте его на
100, иначе уменьшите на 30.
2.
Дано натуральное число. Если оно четное, то
уменьшите его в 2 раза, иначе увеличьте в 3 раза.
3.
Дано число. Если оно не меньше 50, то выведите
квадрат этого числа, если же это число больше 10 и
меньше 30, то выведите ноль, в остальных случаях
выведите слово
"Ошибка“

51.

4.
Дано два числа. Вывести наибольшее из них.
5.
Дано два числа. Вывести 'Да', если они отличаются
на 100, иначе вывести 'Нет’
6.
Дано два числа. Вывести 'Да', если они отличаются
не более чем на 20, иначе вывести 'Нет’.
7.
Дан номер месяца. Вывести название поры года
(весна, лето и так далее) или слово 'Ошибка', если
месяца с таким номером не существует.

52.

1.
Пусть в константе isAdmin содержится true, если
пользователь админ, и false, если нет,
Если пользователь админ – выведите на экран div,
содержащий в себе приветствие Админа сайта и кнопку
«Войти в панель управления»
Если пользователь не админ – выведите на экран span с
жирным текстом внутри «У вас нет прав доступа»
Попробуйте подключить к странице стили CSS, чтобы
оформить всё содержимое и проверьте работают ли стили с
php
2.
Cайт поддерживает 3 языка - русский, английский,
немецкий. Переменная $lang может принимать 3
значения - 'ru', 'en' и 'de'. В зависимости от значения
переменной $lang следует вывести фразу на одном
из языков. Используйте switch-case для решения
задачи

53.

Циклы в php

54.

Цикл FOR в PHP
Основной задачей компьютеров есть обработка большого
количества информации, которое у человека заняло бы очень
много времени.
Для обработки таких задач компьютер использует циклы.
Первым циклом которым мы начнем главу будет цикл for. Ниже
приведен его синтаксис:
for (exp1; exp2; exp3) statement
В выражение exp1 вставляют начальное значение для счетчика
цикла — переменная, которая считает количество раз
выполнения тела цикла.
exp2 — задает условие повторения цикла. Цикл будет
выполнятся пока это условие будет true.
exp3 — выполняется каждый раз после выполенения тела цикла.
Обычно, оно используется для изменения (увеличение или
уменьшение) счетчика.

55.

Пример:
<?php
for ($i = 0; $i < 10; $i++)
{ echo "Вывод строки. 10 раз <br>"; }
?>
Отображение в браузере:
Вывод строки. 10 раз
Вывод строки. 10 раз
Вывод строки. 10 раз
Вывод строки. 10 раз
Вывод строки. 10 раз
Вывод строки. 10 раз
Вывод строки. 10 раз
Вывод строки. 10 раз
Вывод строки. 10 раз
Вывод строки. 10 раз

56.

Циклы WHILE в PHP
Цикл WHILE, вместо использования счетчика цикла проверяет
некоторое условие до того, пока это условие Истина (TRUE).
Синтаксис:
while (exp) statement
Условие проверяется перед выполнением цикла, если оно будет
Ложным в начале, то цикл не выполнится ни разу!
В теле цикла должна быть переменная которая будет оказывать
влияние на условие, чтобы предотвратить зацикливание.
Пример:
<?php
$counter = 0;
while ($counter < 5) {
echo "Эта строка выведется 5 раз <br>";
$counter++; } ?>

57.

Цикл DO... WHILE в PHP
Главное отличие цикла DO ... WHILE от WHILE в том, что
первый сначала выполняется тело цикла, а потом проверяет
условие. Т.е., если условие сразу Ложь, то цикл выполнится один
раз.
Синтаксис
do statement while (condition)
Использование цикла DO... WHILE:
<?php
$counter = 6;
do
{ echo "Эта строка выведется 1 раз
<br>";
$counter++;
}
while ($counter < 5);
?>

58.

Цикл FOREACH в PHP
Цикл FOREACH представлен для упрощения работы с массивами. Массивы
состоят из отдельных элементов, цикл FOREACH предназначен для перебора
этих элементов без счетчика.
Синтаксис:
foreach (имяМассива as переменнаяДляЭлемента) {
/*
Код, который находится между фигурными
скобками будет повторяться столько раз,
сколько элементов у массива.
*/
}

59.

Цикл FOREACH в PHP
Использование цикла:
<?php
$array = array("Apple", "Limon", "Chery", "Oranges");
foreach ($array as $value) {
echo "Вы выбрали фрукт - $value <br>";
}
?>

60.

Оператор Break
Иногда возникает ситуация, когда требуется выйти из цикла, не
дожидаясь его завершения. В этом случае мы можем
воспользоваться оператором break. Синтаксис:
<?php
for ($i = 1; $i < 10; $i++) {
$result = $i * $i;
if ($result > 80) {
break;
}
echo "Квадрат числа $i равен $result
<br/>";
}
?>

61.

Оператор continue
Для управления циклами также применяется оператор continue.
Он осуществляет переход к следующей итерации цикла:
<?php
for ($i = 1; $i < 10; $i++) {
if ($i == 5) {
continue;
}
echo "Квадрат числа $i равен " . $i *
$i . " <br/>";
}
?>

62.

Вложенные циклы
Циклы могут располагаться внутри циклов. Например,
используем вложенный цикл, чтобы вывести таблицу умножения:
<?php
for ($i = 1; $i < 10; $i++)
{
echo "<tr>";
for ($j = 1; $j < 10; $j++)
{
echo "<td>" . $i * $j . "</td>";
}
echo "</tr>";
}
?>
?>

63.

1.
Найдите с помощью цикла сумму чисел от 1 до 100.
2.
Выведите с помощью цикла столбец четных чисел от
1 до 100.
3.
Выведите с помощью цикла столбец чисел от 1 до
100.
4.
Найдите с помощью цикла сумму тех чисел от 1 до
100, которые делятся на 7

64.

1.
Найдите с помощью цикла сумму корней чисел от 1
до 15. Результат округлите до двух знаков после
дробной части
2.
Найдите с помощью цикла сумму квадратов чисел от
1 до 15.
3.
Напишите скрипт, который будет находить факториал
числа. Факториал - это произведение всех целых
чисел, меньше данного, и его самого.

65.

Строки в php

66.

Обращение к символам строки
PHP позволяет обращаться к отдельным символам строки как к
элементам массива по числовому индексу.
Индексация символов, как и в массиве, начинается с нуля:
$str = "Hello Tom";
echo $str[0]; // получим первый символ - H
$str[1] = "i"; // поменяем второй символ
echo "<br>" . $str . "<br>";
// Hillo Tom

67.

Функции для обработки строк в PHP
С помощью этих функций можно, например, обрезать строку,
дописывать строку, заменить часть строки и много другое. Это
очень полезный инструмент при разработке скриптов.
Все функции для обработки строк перечислены ниже:
Функция substr
Функция substr используется для получения части строки.
Синтаксис:
string substr (string $string, int $start [, int $length ])
Первый параметр $string - строка из которой нужно получить
подстроку начиная с позиции $start и длинной в $length.
Пример:
<?php echo substr("Hello world", 6, 5); ?>
Отображение в браузере:
world
Последний параметр $length необязательный
<?php echo substr("Hello world !!!", 6); ?>

68.

Функция strpos
Функция возвращает позицию первого вхождения подстроки в
строку
int strpos (string $string , mixed $needle [,
int $offset = 0 ])
$string - строка в которой будет произведен поиск,
$needle - строка, которую нужно найти,
$offset - необязательный параметр, если этот параметр указан,
то поиск будет начат с указанного количества символов с начала
строки
Пример:
<?php
echo strpos("Hello world", "world");
?>
В результате, получим 6, так как строка "world" впервые
встречается на 6 позиции

69.

• Функция strtolower преобразовывает строку в нижний регистр.
Используйте функцию mb_strtolower (она работает аналогичным
образом, но корректно обрабатывает кириллицу)
<?php echo strtolower('ABCDE'); ?> - 'abcde’
• Функция strtoupper преобразовывает строку в верхний регистр
<?php echo strtoupper('abcde'); ?> - 'ABCDE’
• Функция lcfirst преобразует первый символ строки в нижний
регистр. Не работает с кириллицей.
<?php echo lcfirst('Abcde'); ?> - 'abcde’
• Функция ucfirst преобразует первый символ строки в верхний
регистр. Не работает с кириллицей.
<?php echo ucfirst('abcde'); ?> - 'Abcde’
• Функция ucwords преобразует первый символ каждого слова в
строке в верхний регистр. Не работает с кириллицей.
<?php echo ucwords('lorem ipsum dolor sit amet'); ?> - 'Lorem Ipsum Dolor
Sit Amet'

70.

• Функция strlen возвращает длину строки (количество символов в
строке).
<?php echo strlen('abcde'); ?> - 5
• Функция str_replace ищет в строке заданный текст и меняет его на
другой. str_replace(что меняем, на что меняем, где меняем);
<?php echo str_replace('a', '!', 'abcabc'); ?> - '!bc!bc’
<?php echo str_replace(['a', 'b', 'c'], [1, 2, 3], 'abcabc'); ?> -123123
• Функция strtr осуществляет поиск и замену символов в строке.
В первом варианте функция принимает массив замен: ключами
служит то, что мы меняем, а значениями - на что будем менять:
<?php echo strtr('111222', ['1'=>'a', '2'=>'b']); ?> - 'aaabbb’
<?php echo strtr('111222', '12', 'ab'); ?> - 'aaabbb’
Во втором варианте функция одним параметром принимает строку
с символами, которые будут заменены, а вторым параметром строку с символами, на которые будет производится замена.

71.

• Функция substr_replace заменяет указанную часть строки на
другую.
<?php echo substr_replace('abcde', '!!!', 1, 3); ?> - 'a!!!e’
<?php echo substr_replace('abcde', '!!!', 1); ?> - 'a!!!’
• Функция strpos возвращает позицию первого вхождения подстроки в
другую строку. Первым параметром функция принимает строку, в
которой осуществляется поиск, вторым параметром - подстроку,
которую следует искать. strpos(где ищем, что ищем, [откуда
искать]);
<?php echo strpos('abcde abcde', 'c'); ?> - 2
<?php echo strpos('abcde abcde', 'c', 3); ?> - 8
<?php if(strpos('http://site.ru', 'http://') === 0) {
echo 'да’;
}
else {
echo 'нет’;
} ?>

72.


Функция strrpos возвращает позицию последнего вхождения подстроки
<?php echo strrpos('abcde abcde', 'a'); ?> - 6
Функция explode разбивает строку в массив по определенному
разделителю. explode(разделитель, строка);
<?php
$date = '2025-12-31’;
$arr = explode('-', $date);
['2025', '12', '31']
var_dump($arr);
?>
Пусть дана дата в формате '2025-12-31’. Cделаем из нее дату в
формате '31.12.2025’.
<?php
$date = '2025-12-31’;
$arr = explode('-', $date);
echo $arr[2].'.'.$arr[1].'.'.$arr[0];
?>
'31.12.2025'

73.


Функция implode сливает массив в строку с указанным разделителем.
implode(разделитель, массив);
сольем массив ['a', 'b', 'c', 'd', 'e'] в строку 'a-b-c-d-e’
<?php
$arr = ['a', 'b', 'c', 'd', 'e’];
'a-b-c-d-e'
echo implode('-', $arr);
?>
Функция str_split разбивает строку в массив. Первым параметром она
принимает строку, а вторым - количество символов в элементе
массива.
str_split(строка, количество символов в элементе массива);
разобьем строку по 2 символа в элементе массива
<?php
$str = 'abcde’;
$arr = str_split($str, 2);
var_dump($arr);
?>
['ab', 'cd', 'e'];

74.

• разобьем строку по 3 символа в элементе массива:
<?php
$str = 'abcdefg’;
$arr = str_split($str, 3);
['abc', 'def', 'g'];
var_dump($arr);
?>
• найдем сумму цифр числа
<?php
$num = 12345;
echo array_sum(str_split($num, 1));
15
?>
Разобили число в массив с помощью str_split и сложили
элементы этого массива с помощью array_sum

75.


Функция trim удаляет пробелы с начала и конца строки. Может также
удалять другие символы, если их указать вторым параметром
trim(строка, [символы]);
<?php echo(trim(' abcde ')); ?> -'abcde’
<?php echo trim('/abcde/', '/'); ?> -'abcde’
<?php echo trim('/abcde.', '/.'); ?> -'abcde’
Функция удаляет любое количество указанных символов, если они стоят
с краю
<?php echo trim('../../abcde...', '/.'); ?> -'abcde’
Можно указать диапазон символов с помощью двух точек '..'. К примеру,
укажем, что мы хотим удалить символы от 'a' до 'd’:
<?php echo trim('abcde', 'a..d'); ?> -’e’
Функция ltrim удаляет пробелы с начала строки.
Функция rtrim удаляет пробелы с конца строки.

76.

• Функция strrev переворачивает строку так, чтобы символы шли в
обратном порядке
<?php echo strrev('12345'); ?> - '54321’
• Функция str_shuffle переставляет символы в строке в случайном
порядке.
<?php echo str_shuffle('abcde'); ?>
• Функция str_repeat повторяет строку заданное количество раз.
str_repeat(строка, сколько раз повторить);
<?php echo str_repeat('x', 5); ?> - 'xxxxx’
<?php echo str_repeat('123', 3); ?> - '123123123’

77.

• Функция number_format позволяет форматировать число. В
основном используется для того, чтобы отделять тройки чисел
пробелами, к примеру, из 1234567 она может сделать 1 234 567
• Кроме того, функция позволяет регулировать количество знаков
после дробной части. Это количество задается вторым
необязательным параметром.
• number_format(число);
• number_format(число, количество знаков);
• number_format(число, количество знаков, разделитель дробной части,
разделитель тысяч);
<?php echo number_format(1234567); ?> - 1,234,567
<?php echo number_format(1234.567, 2); ?> - 1,234.57
<?php echo number_format(1234.567, 2, '/', ' '); ?> - 1 234/57
<?php echo number_format(1234.567, 2, '.', ' '); ?> - 1 234.57

78.

• Функция
str_pad дополняет строку другой строкой до заданной
длины.
• Первый параметр принимает строку, второй - количество символов,
до которого следует дополнить строку, третий параметр - то, чем
следует заполнять строку.
• Четвертый
необязательный параметр задает, с какой стороны
заполнять строку. Этот параметр может принимать следующие
значения:
STR_PAD_LEFT
дополнять
строку
слева, STR_PAD_RIGHT - дополнять строку справа (это значение по
умолчанию).
str_pad(строка, до скольки символов, чем заполнить, [с какой
стороны]);
<?php $arr = 'abcde'; echo str_pad($arr, 10, '+'); ?> - 'abcde+++++’
<?php $arr = 'abcde'; echo str_pad($arr, 10, '+', STR_PAD_LEFT); ?> '+++++abcde'

79.

• Функция htmlspecialchars позволяет вывести теги в браузер так,
чтобы он не считал их командами, а выводил как строки.
<?php echo htmlspecialchars('<b>жирный текст</b>'); ?> - '<b>жирный
текст</b>’
Функция strip_tags удаляет HTML теги из строки, не трогая их
содержимого. Вторым необязательным параметром можно
указать разрешенные теги - они не будут удалены. Их
указываем в таком формате: '<b>' или '<b><p>', если хотим
оставить несколько тегов strip_tags(строка, [разрешенные теги]);
<?php echo strip_tags('lorem <b>ipsum</b> dolor sit amet');
?> - 'lorem ipsum dolor sit amet’
• Функция ord возвращает ASCII код символа. Параметром
принимает один символ или целую строку (в этом случае
возвращает код ее первого символа)
<?php echo ord('a'); ?> - 97
<?php echo ord('abcde'); ?> - 97

80.

Функция chr находит символ по его ASCII коду
<?php echo chr(97); ?> - 'a’
выведем случайную маленькую букву латинского алфавита. Для этого
посмотрим на таблицу ASCII и увидим, что маленькие латинские буквы
имеют коды от 97 до 122. Поэтому сгенерируем случайное число в этом
диапазоне с помощью mt_rand и результат возьмем в chr
<?php echo chr(mt_rand(97, 122)); ?>
сформируем случайную строку из 6 маленьких латинских букв
<?php
$str = ’ ’;
for ($i = 1; $i <= 6; $i++) {
$str .= chr(mt_rand(97, 122));
}
echo $str; ?>

81.

• Функция strchr находит первое вхождение подстроки в строку и
возвращает часть строки начиная этого места до конца строки.
адрес страницы без доменного имени из url (вернет подстроку,
начиная с первого /, до конца строки)
<?php
echo
strchr('site.ru/folder1/folder2/page.html',
'/folder1/folder2/page.html’
'/');
?>
-
Функция strstr находит первое вхождение подстроки в строку и
возвращает часть строки начиная этого места до конца строки. В
отличие от strchr ищет вхождение подстроки из нескольких
символов, а не вхождение одного символа.

82.

1.
Дана строка 'php'. Сделайте из нее строку 'PHP’.
2.
Дана строка 'london'. Сделайте из нее строку 'London’.
3.
Дана строка 'London'. Сделайте из нее строку 'london’.
4. Дана строка 'html css php'. Найдите количество
символов в этой строке.
5.
Дана переменная $password, в которой хранится пароль
пользователя. Если количество символов пароля больше
5-ти и меньше 10-ти, то выведите пользователю
сообщение о том, что пароль подходит, иначе сообщение
о том, что нужно придумать другой пароль.
6.
Дана строка. Проверьте, что она заканчивается на '.png'.
Если это так, выведите 'да', если не так - 'нет’.

83.

7.
Дана строка '31.12.2013'. Замените все точки на
дефисы.
8.
Дана строка $str. Замените в ней все буквы 'a' на
цифру 1, буквы 'b' - на 2, а буквы 'c' - на 3.
9.
Дана строка с буквами и цифрами, например,
'1a2b3c4b5d6e7f8g9h0'. Удалите из нее все цифры.
То есть в нашем случае должна получится строка
'abcbdefgh’.
10. Дана строка 'abc abc abc'. Определите позицию
первой буквы ‘b’.
11.
Дана строка 'abc abc abc'. Определите позицию
последней буквы 'b'.

84.

7.
Создайте скрипт, который выводит каждый символ
строки в отдельной строке.
8.
Напишите программу, которая выводит строку в
обратном порядке.
9.
Напишите программу для проверки, является ли
заданная строка палиндромом (читается одинаково с
начала и с конца) без использования встроенных
функций.
10. Создайте скрипт, который заменяет все пробелы в
строке на символ подчеркивания "_".
11. Напишите скрипт, который разбивает строку на слова
и выводит их в обратном порядке.

85.

Массивы PHP

86.

Одномерные
массивы

87.

Создание массивов в PHP
• Массив представляет собой переменную, в которой в упорядоченном виде
можно хранить целый набор каких-то значений.
• Для создания массива используются квадратные скобки:
<?php
$arr = []; // создаем массив $arr
?>
• Каждое значение списка, который мы записали в массив, называется
элементом массива. Как вы видите, элементы разделяются между собой
запятой.
• Кроме строк и чисел в массиве можно хранить все допустимые типы
данных PHP, а также смешивать их между собой в одном массиве, пример:
<?php
$arr = [1, 2, 'a', 'b', null, true, false];
?>

88.

В качестве индекса элементов массива мы можем использовать
не только числа:
<?php
$arr["Berlin"] = 3000000;
$arr["Paris"] = 5000000;
$arr["LA"] = 15000000;
?>
В качестве значений индексов элементов и самих элементов мы
можем использовать одинаковые типы данных одновременно!
Также существует сокращенная запись для индексирования:
<?php
$arr[] = 3000000; $arr[] = 5000000; $arr[] =
15000000;
?>
В этом случае первый элемент (3000000) получит индекс 0! Нужно
иметь это ввиду.

89.

Для создания массива можно использовать функцию array:
<?php
$arr = array("php", "html", "css");
?>
В этом случае первый элемент получит индекс 0. Если нужно
присвоить какой-то другой номер, то можно воспользоваться
конструкцией =>:
<?php
$arr = array(1 => "php", "html", "css"); ?>
Теперь элемент под номером 1 это "php", а не "html"! Также, можно
создать массив со строковым индексом:
<?php
$arr = array("first" => "php", "second" =>
"html", "third" => "css"); ?>

90.

Модификация элементов массива в PHP
Есть массив:
<?php
$arr[0] = "PHP";
$arr[1] = "HTML";
$arr[2] = "CSS";
?>
Для того, чтобы изменить значение элемента
используем оператор присвоения:
<?php
$arr[1] = "JAVASCRIPT";
?>

91.

Длина массива
• Длина массива находится с помощью функции count:
<?php
$arr = [1, 2, 3];
echo count($arr); // выведет 3
?>
• Последний элемент массива также получается аналогично последнему
символу строки:
<?php
$arr = [1, 2, 3];
echo $arr[count($arr) - 1]; // выведет 3
?>

92.

Инкремент и декремент в PHP
• Можно также применять операции инкремента и декремента:
<?php
$arr = [1, 2, 3, 4];
$arr[0]++;
++$arr[1];
$arr[2]--;
--$arr[3];
var_dump($arr); // выведет [2, 3, 2, 3]
?>

93.

Заполнение массивов
• Элементы в массив не обязательно добавлять сразу в момент объявления
этого массива. Можно вначале объявить этот массив пустым, а затем
добавить в него необходимые элементы, вот так:
<?php
$arr = [];
$arr[] = 'a';
$arr[] = 'b';
$arr[] = 'c';
// создаем пустой массив
// элемент добавится в ключ 0
// элемент добавится в ключ 1
// элемент добавится в ключ 2
var_dump($arr); // выведет ['a', 'b', 'c']
?>
• Массив не обязательно должен быть изначально пустым - там уже
что-то может быть, но мы все равно можем добавлять новые
элементы

94.

Заполнение массивов
• При необходимости ключи можно указать явным образом:
<?php
$arr = []; // создаем пустой массив
$arr[0] = 'a'; // в ключ 0 добавим элемент 'a'
$arr[1] = 'b'; // в ключ 1 добавим элемент 'b'
$arr[2] = 'c'; // в ключ 2 добавим элемент 'c'
var_dump($arr); // выведет ['a', 'b', 'c']
?>
• Ключи могут быть не только числовыми, но и строковыми:
<?php
$arr = [];
$arr['a'] = 1;
$arr['b'] = 2;
$arr['c'] = 3;
var_dump($arr); // выведет ['a' => 1, 'b' => 2, 'c' => 3]
?>

95.

Удаление элементов массива в PHP
Если нам нужно удалить один из элементов массива, то для
этого мы должны использовать функцию unset
<?php
$arr[0] = "PHP";
$arr[1] = "HTML";
$arr[2] = "CSS";
unset($arr[1]);
foreach ($arr as $key => $value) {
echo $value . '<br/>';
}

96.

Перебор элементов массива в PHP
Кроме использования цикла for для вывода всех
элементов массива на экран мы можем использовать
функцию print_r, которая выведет все элементы
массива вместе с их индексами.
<?php
$arr[0] = "PHP"; $arr[1] = "HTML";
$arr[2] = "CSS"; print_r($arr);
?>
Отображение в браузере:
Array ( [0] => PHP [1] => HTML [2] =>
CSS )

97.

Также в PHP присутствует специальный цикл для обработки
массивов - цикл foreach
<?php
$arr[0] = "PHP";
$arr[1] = "HTML";
$arr[2] = "CSS";
foreach ($arr as $value) {
echo $value, "<br>";
}
?>
Отображение в браузере:
PHP
HTML
CSS

98.

Для вывода индекса элемента нужно использовать второй
вариант синтаксиса цикла foreach
<?php
$arr[0] = "PHP";
$arr[1] = "HTML";
$arr[2] = "CSS";
foreach ($arr as $key => $value) {
// $key - индекс эл.массива,
// $value - значение эл.массива
echo "[{$key}] => {$value} <br/>";
}
Отображение в браузере:
[0] => PHP
[1] => HTML
[2] => CSS

99.

Сортировка массивов в PHP
Очень часто нужно отсортировать массив по индексу
его элементов, по алфавиту его элементов, по
возрастанию, по убыванию и т. д. В PHP для этого
существуют функции.
Функция - sort, которая сортирует массив по возрастанию значений
его элементов, при этом изменяя индекс после сортировки:
<?php
$arr[0] = "PHP";
$arr[1] = "HTML";
$arr[2] = "CSS";
sort($arr);
print_r($arr);
Отображение в браузере:
Array ( [0] => CSS [1] => HTML
[2] => PHP )

100.

Функция - rsort, которая сортирует массив по убыванию
значений его элементов, при этом изменяя индекс после
сортировки:
<?php
$arr[0] = "PHP";
$arr[1] = "HTML";
$arr[2] = "CSS";
rsort($arr);
print_r($arr);
Отображение в браузере:
Array ( [0] => PHP
CSS )
[1] => HTML
[2] =>

101.

Третья функция - ksort, которая сортирует массив по
ключам, сохраняя отношения между ключами и
значениями:
<?php
$arr[0] = "PHP";
$arr[1] = "HTML";
$arr[2] = "CSS";
ksort($arr);
print_r($arr);
Отображение в браузере:
Array ( [0] => PHP
CSS )
[1] => HTML
[2] =>

102.

Навигация по массивам в PHP
Навигация по массива дает возможно узнать текущий ,
следующий, предыдущий, последний элемента массива.
Текущий элемент массива определяет функция current:
<?php echo "Now is: ", current($arr), "<br>"; ?>
Следующий элемент массива определяет функция next:
<?php echo "Next is: ", next($arr), "<br>"; ?>
Предыдущий элемент массива определяет функция prev:
<?php echo "Previously is: ", prev($arr), "<br>"; ?>
Последний элемент массива определяет функция end:
<?php echo "The end is: ", end($arr), "<br>"; ?>
Для определения первого (возврата указателя) элемента массива
используют функцию reset:
<?php echo "First is: ", reset($arr), "<br>"; ?>

103.

Пример навигации по массивам:
<?php $arr[0] = "PHP";
$arr[1] = "HTML";
$arr[2] = "CSS";
echo "Тек_элемент: ", current($arr), "<br>";
echo "След_элемент: ", next($arr), "<br>";
echo "Предыдущ_элемент: ", prev($arr), "<br>";
echo "Последний_элемент: ", end($arr), "<br>";
echo "Первый_элемент: ", reset($arr), "<br>";
Отображение в браузере:
Тек_элемент: PHP
След_элемент: HTML
Предыдущ_элемент: PHP
Последний_элемент: CSS
Первый_элемент: PHP

104.

Преобразование строк в массивы и наоборот
PHP умеет преобразовывать данные из строки в массив и
наоборот, для этого в PHP есть функция implode и explode.
implode - формирует строку из массива.
explode - формирует массив из строки.
Использование функции implode:
<?php
$arr[0] = "PHP";
$arr[1] = "HTML";
$arr[2] = "CSS";
$string = implode(", ", $arr);
echo $string;
Отображение в браузере:
PHP, HTML, CSS

105.

Использование функции explode:
<?php
$string = "PHP, HTML, CSS";
$arr = explode(", ", $string);
print_r($arr);
Отображение в браузере:
Array ( [0] => PHP
[2] => CSS )
[1] => HTML

106.

1.
Дан массив с числами. Найдите сумму квадратов
элементов этого массива.
2.
Дан массив с числами. Найдите сумму тех
элементов этого массива, которые больше нуля и
меньше десяти.

107.

1.
Дана строка:
'abcde'
Получите массив букв этой строки.
2.
Дан массив со строками. Оставьте в этом массиве
только те строки, которые начинаются на http://.

108.

1.
Дан некоторый массив, например, вот такой:
[1, 2, 3, 4, 5, 6]
Найдите сумму первой половины элементов этого
массива.
2.
Дан некоторый массив, например, вот такой:
[1, 2, 3, 4, 5, 6]
Поделите сумму первой половины элементов этого
массива на сумму второй половины элементов.

109.

Многомерные
массивы

110.

Многомерные массивы
• Элементы массива могут быть не только строками и числами, но и
массивами. В этом случае у нас получится массив массивов или
многомерный массив. В следующем примере массив $arr состоит из трех
элементов, в свою очередь являющихся массивами:
<?php
$arr = [['a', 'b', 'c'], ['d', 'e', 'f'], ['g', 'h', 'i']];
?>
• Перепишем в более понятном виде:
<?php
$arr = [
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i'],
];
?>

111.

Многомерные массивы
• В зависимости от уровня вложенности массивы могут быть двухмерными массив массивов, трехмерными - массив массивов массивов (ну и так далее
- четырехмерными, пятимерными и тп).
• Приведенный выше массив является двухмерным, так как внутри одного
массива расположены другие подмассивы и уже в этих подмассивах нет
других массивов. Чтобы вывести какой-либо элемент из двухмерного
массива следует писать уже не одну пару квадратных скобок, а две:
<?php
$arr = [
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i'],
];
echo $arr[0][1]; // выведет 'b'
echo $arr[1][2]; // выведет 'f'
?>

112.

Многомерные массивы
• В зависимости от уровня вложенности массивы могут быть двухмерными массив массивов, трехмерными - массив массивов массивов (ну и так далее
- четырехмерными, пятимерными и тп).
• Приведенный выше массив является двухмерным, так как внутри одного
массива расположены другие подмассивы и уже в этих подмассивах нет
других массивов. Чтобы вывести какой-либо элемент из двухмерного
массива следует писать уже не одну пару квадратных скобок, а две:
<?php
$arr = [
['a', 'b', 'c'],
['d', 'e', 'f'],
['g', 'h', 'i'],
];
echo $arr[0][1]; // выведет 'b'
echo $arr[1][2]; // выведет 'f'
?>

113.

Многомерные массивы
• Вот пример трехмерного массива:
<?php
$arr = [
[
['a', 'b'],
['c', 'd'],
],
[
['e', 'f'],
['g', 'h'],
],
[
['i', 'j'],
['k', 'l'],
],
];
echo $arr[0][0][0]; // выведет 'a'
echo $arr[2][1][0]; // выведет 'k'
?>

114.

Многомерные массивы
• Многомерные массивы также могут быть ассоциативными, например, вот
так:
<?php
$arr = [
'user1' => [
'name' => 'name1',
'age' => 31,
],
'user2' => [
'name' => 'name2',
'age' => 32,
],
];
?>
• Давайте с помощью этого массива выведем на экран, к примеру, имя
второго юзера:
<?php
echo $arr['user2']['name']; // выведет 'name2'
?>

115.

Многомерные массивы
• Многомерные массивы не обязательно должны быть такими, как мы
рассмотрели выше. Посмотрите, например, на следующий массив:
<?php
$arr = [
[
'a', 'b', [1, 2, 3], [4, 5],
],
[
'd', ['e', 'f'],
],
];
?>

116.

Работа с ключами в многомерных массивах
• Работа с ключами при переборе многомерных массивов осуществляется
также, как и при переборе одномерных. Пусть для примера дан вот такой
массив:
<?php
$arr = [
'user1' => [
'name' => 'name1',
'age' => 31,
],
'user2' => [
'name' => 'name2',
'age' => 32,
],
];
foreach ($arr as $key1 => $sub) {
foreach ($sub as $key2 => $elem) {
echo $key1 . ' ' . $key2 . ' ' . $elem . '<br>';
}
}
?>

117.

Заполнение многомерных массивов
• Пусть теперь мы хотим в цикле создать какой-нибудь многомерный массив
с числами. Например, вот такой двухмерный массив:
<?php
[[1, 2, 3], [1, 2, 3], [1, 2, 3]]
?>
• Решим поставленную задачу, применив два вложенных цикла. Внешний
цикл будет создавать подмассивы, а внутренний - заполнять эти
подмассивы числами:
<?php
$arr = [];
for ($i = 0; $i < 3; $i++) {
for ($j = 0; $j < 3; $j++) {
$arr[$i][$j] = $j + 1; // заполняем подмассив числами
}
}
var_dump($arr); // [[1, 2, 3], [1, 2, 3], [1, 2, 3]]
?>

118.

1.
Дан массив:
[
[2, 1, 4, 3, 5],
[3, 5, 2, 4, 1],
[4, 3, 1, 5, 2],
]
Отсортируйте элементы в каждом подмассиве.
2.
Дан массив:
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9],
]
Найдите сумму элементов этого массива.

119.

1.
Сформируйте с помощью двух вложенных циклов
следующий массив:
<?php
[[1, 2], [3, 4], [5, 6], [7, 8]]
?>
2.
Сформируйте с помощью двух вложенных циклов
следующий массив:
[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]
3.
Дан следующий массив:
$arr = [
'group1' => ['user11', 'user12', 'user13', 'user43'],
'group2' => ['user21', 'user22', 'user23'],
'group3' => ['user31', 'user32', 'user33'],
'group4' => ['user41', 'user42', 'user43'],
'group5' => ['user51', 'user52'],
];
С помощью двух вложенных циклов выведите элементы
этого массива в формате имя группы - имя юзера.

120.

1.
Дан массив:
[
[
[11, 12, 13],
[14, 15, 16],
[17, 17, 19],
],
[
[21, 22, 23],
[24, 25, 26],
[27, 27, 29],
],
[
[31, 32, 33],
[34, 35, 36],
[37, 37, 39],
],
]
Найдите сумму элементов этого массива.

121.

1.
Напишите скрипт поиска в массиве, который
принимает многомерный массив и значение, и
возвращает true, если значение найдено в
массиве, и false в противном случае, массив:
[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
1.
Напишите скрипт поиска наименьшего элемента в
массиве, который находит наименьший элемент в
многомерном массиве:
[[3, 7, 2], [9, 4, 6], [1, 8, 5]];

122.

Функции

123.

Стандартные функции

124.

Математические функции
1. Функция sqrt находит квадратный корень числа.
2. Функция pow возводит число в заданную степень.
3. Функция round округляет число по правилам математического округления.
4. Функция ceil округляет дробь в большую сторону до целого.
5. Функция floor округляет дробь в меньшую сторону.
6. Функция min находит самое маленькое число из переданных ей
7. Функция max находит самое большое число из переданных ей
8. Функция mt_rand
промежутке.
генерирует
случайное
целое
число
в
заданном
9. Функция abs вычисляет модуль числа, то есть из отрицательного делает
положительное.

125.

1.
Даны переменные $a и $b. Найдите найдите
модуль разности $a и $b. Проверьте работу
скрипта самостоятельно для различных $a и $b.
2.
Найдите квадратный корень из 587. Округлите результат в
большую и меньшую сторону, запишите результаты
округления в ассоциативный массив с ключами 'floor' и
'ceil’.
3.
Найдите корень из суммы квадратов его элементов. Для
решения воспользуйтесь циклом foreach.

126.

Пользовательские
функции

127.

Пользовательские функции
• Давайте рассмотрим синтаксис для создания своей функции.
• Функция создается с помощью команды function. Далее через пробел
следует имя функции и круглые скобки, в которых пишется какой-то код
• Теперь вызовем нашу функцию. Для этого необходимо написать ее имя и
круглые скобки:
<?php
function func() {
echo '!';
}
// Вызываем нашу функцию:
func(); // выведет '!'
?>

128.

Параметры функций
• С помощью параметров мы можем передавать в функцию некоторые
данные.
• Параметры определяются в скобках после названия функции как обычные
переменные, оделенные друг от друга запятой.
• Здесь функция hello определяет один параметр - $name. При наименовании
параметров применяются те же правила, что и для переменных. Также
название параметров начинается со знака доллара $.
<?php
function hello($name)
{
echo "<h2>Hello $name</h2>";
}
hello("Tom");
hello("Bob");
hello("Sam");
?>

129.

Параметры функций
• Подобным образом можно определять функции и с большим количеством
параметров
• Здесь функция displayInfo определяет два параметра, соответственно при
вызове функции нам надо передать в функцию два значения.
• Значения отделяются запятой и передаются параметрам по позиции. Так,
первое значение передается первому параметру, второе значение
передается второму параметру и так далее.
<?php
function displayInfo($name, $age)
{
echo "<div>Имя: $name <br />Возраст: $age</div><hr>";
}
displayInfo("Tom", 36);
displayInfo("Bob", 39);
displayInfo("Sam", 28);
?>

130.

Необязательные параметры
• Выше при определении функции мы были обязаны передать для всех
параметров функции значения.
• Например, если функция определяет два параметра, соответственно нам
надо передать в ее вызов два значения.
• Однако, PHP позволяет сделать параметры необязательными. Такие
параметры имеют значение по умолчанию, которое применяется, если при
вызове функции не передано никакого значения.
<?php
function displayInfo($name, $age)
{
echo "<div>Имя: $name <br />Возраст: $age</div><hr>";
}
displayInfo("Tom", 36);
displayInfo("Bob", 39);
displayInfo("Sam", 28);
?>

131.

Необязательные параметры
• Здесь параметр $age определяется как необязательный. Для этого ему
присваивается начальное значение - число 18. Если функция содержит
обязательные и необязательные параметры, то необязательные параметры
должны определяться в конце
• При первом вызове в функцию передаются два значения: displayInfo("Tom",
36), поэтому параметр $age получит второе значение - число 36.
• Во втором вызове в функцию передается одно значение: displayInfo("Sam"),
поэтому параметр $age будет использовать значение по умолчанию - число
18.
<?php
function displayInfo($name, $age = 18)
{
echo "<div>Имя: $name <br />Возраст: $age</div><hr>";
}
displayInfo("Tom", 36);
displayInfo("Sam");
?>

132.

Именнованные параметры
• Начиная с версии 8.0 в PHP была добавлена поддержка именнованных
параметров.
• Так, до PHP 8.0 при вызове функции значения можно было передать
параметрам только по позиции. Именнованные параметры позволяют
передавать значения параметрам по имени
• При вызове функции сначала указывается название параметра (без символа
$) и через двоеточие указывается значение параметра : age: 23, name: "Bob".
И в этом случае нам необязательно соблюдать позицию параметров.
<?php
function displayInfo($name, $age = 18)
{
echo "<div>Имя: $name <br />Возраст: $age</div><hr>";
}
displayInfo(age: 23, name: "Bob");
displayInfo(name: "Tom", age: 36);
displayInfo(name: "Alice");
?>

133.

Переменное количество параметров
• В PHP функция может принимать переменное количество параметров.
• Для этого у функции определяется один параметр, перед которым
указывается оператор ... (три точки). Такой параметр рассматривается как
массив:
<?php
function sum(...$numbers)
{
$result = 0;
foreach($numbers as $number) {
$result += $number;
}
echo "<p>Сумма: $result</p>";
}
sum(1, 2, 3);
sum(2, 3);
sum(4, 5, 8, 10);
?>

134.

Переменное количество параметров
• Если функция должна принимать и другие параметры, то параметр,
который представляет переменное количество значений, указывается в
конце после остальных параметров.
• Например, определим функцию, которая принимает имя студента и
неопределенное количество его баллов успеваемости и выводит средний
балл:
<?php
function getAverageScore($name, ...$scores)
{
$result = 0.0;
foreach($scores as $score) {
$result += $score;
}
$result = $result / count($scores);
echo "<p>$name: $result</p>";
}
getAverageScore("Tom", 5, 5, 4, 5);
getAverageScore("Bob", 4, 3, 4, 4, 4);
?>

135.

Возвращение значений и оператор return
• Функция может возвращать некоторое значение - число, строку и т.д., то
есть некоторый результат. Для возвращения значения в функции
применяется оператор return, после которого указывается возвращаемое
значение.
• Например, получим из функции сумму двух чисел:
<?php
function add($a, $b)
{
return $a + $b;
}
$result = add(5, 6);
echo $result;
// 11
?>
• Функция add() принимает два параметра и возвращает сумму их значений.
• Поскольку функция возвращает значение, мы его можем присвоить
переменной: $result = add(5, 6);
• Либо использовать напрямую: echo add(4, 8);

136.

Возвращение значений и оператор return
• После того, как выполнится инструкция return - функция закончит свою
работу.
• То есть: после выполнения return больше никакой код не выполнится.
• Это не значит, что в функции должен быть один return. Но выполнится
только один из них.
<?php
function add($a, $b)
{
$sum = $a + $b;
return $sum;
echo "sum = $sum";
}
?>
// завершение функции
// эта строка не будет выполняться

137.

Возвращение значений и оператор return
• В следующем примере в зависимости от значения параметра выполнится
либо первый, либо второй return:
<?php
function func($num) {
if ($num >= 0) {
return '+';
} else {
return '-';
}
}
echo func( 3); // выведет '+'
echo func(-3); // выведет '-'
?>

138.

Советы по созданию функций
1. Имена функций должны быть глаголами.
2. Имя каждой функции должно точно отражать то, что функция делает.
3. Функция должна делать только то, что явно подразумевается её
названием, и не делать другого.
4. Каждая функция должна выполнять только одно действие.
5. Используйте внутри функций вспомогательные функции.
6. Код функций лучше не делать длиннее 10-15 строк.
7. Длинные функции лучше разбивать на ряд вспомогательных.
8. Используйте общепринятые префиксы в именах функций: show, get, set, calc,
create, change, check.
9. Выносите дублирующийся код в функции.

139.

1.
Сделайте функцию, которая параметром
принимает число и выводит на экран куб этого
числа
2.
Сделайте функцию, которая параметром принимает
число и проверяет, положительное это число или
отрицательное. В первом случае пусть функция
выводит на экран текст '+++', а во втором '---’.
3.
Сделайте функцию, которая параметрами принимает
3 числа и выводит на экран сумму этих чисел.

140.

1.
Сделайте функцию, которая параметром
принимает число, а возвращает куб этого числа. С
помощью этой функции найдите куб числа 34 и
запишите его в переменную $res за пределами
функции.
2.
С помощью созданной вами функции найдите сумму
кубов числа 2 и числа 3 и запишите ее в переменную
$res за пределами функции.

141.

1.
Напишите функцию, которая параметром будет
принимать число и делить его на 2 столько раз,
пока результат не станет меньше 10. Пусть
функция возвращает количество итераций, которое
потребовалось для достижения результата.
2.
Сделайте функцию, которая параметром будет
принимать массив с числами, и проверять, что все
элементы в этом массиве являются четными числами.

142.

1.
Сделайте функцию, которая параметром будет
принимать число и проверять, что все цифры это
числа являются нечетными.
2.
Сделайте функцию, которая параметром будет год
и проверять, високосный он или нет.

143.

Формирование строк

144.

Генерация тегов

145.

Генерация тегов
Давайте научимся формировать теги с использованием переменных. Пусть, к
примеру, у нас есть следующая переменная:
<?php
$text = 'aaa';
?>
Выведем текст этой переменной в абзаце:
<?php
$text = 'aaa';
echo "<p>$text</p>";
?>

146.

Генерация тегов с атрибутами
Давайте теперь научимся формировать теги с атрибутами. Пусть для примера мы
хотим сделать ссылку. При этом текст и адрес ссылки будут хранится в
соответствующих переменных:
<?php
$text = 'link';
$href = 'index.html';
?>
Давайте теперь сформируем наш тег путем вставки переменных. Не забывайте про
кавычки!
<?php
echo "<a href='$href'>$text</a>";
?>

147.

Цикл и генерация тегов
Давайте теперь научимся формировать теги в цикле. К примеру, давайте сделаем
пять абзацев, заполнив их числами по возрастанию:
<?php
for ($i = 1; $i <= 5; $i++) {
echo "<p>$i</p>";
}
?>

148.

Цикл и генерация тегов из массивов
Давайте теперь сформируем теги, взяв их тексты из массива:
<?php
$arr = [1, 2, 3, 4, 5];
foreach ($arr as $elem) {
echo "<p>$elem</p>";
}
?>

149.

Цикл и генерация тегов и атрибутов
Давайте теперь научимся формировать в цикле теги не только с текстом, но и с
атрибутами. Пусть, к примеру, у нас есть следующий массив с адресами и текстами
ссылок:
<?php
$arr = [
['href'=>'1.html', 'text'=>'link1'],
['href'=>'2.html', 'text'=>'link2'],
['href'=>'3.html', 'text'=>'link3'],
];
?>
Давайте с помощью этого массива сформируем ссылки:
<?php
foreach ($arr as $elem) {
echo "<a href='{$elem['href']}'>{$elem['text']}</a><br>";
}
?>

150.

1.
С помощью цикла сформируйте следующий HTML
код:
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
</ul>

151.

152.

153.

154.

• Пусть есть следующий массив:
• Выведите его на страницу в следующем виде

155.

Вставка PHP кода в
HTML

156.

Вставка PHP кода в HTML
Пусть у нас есть некоторый HTML код:
<p>text</p>
Мы можем внутри этого кода делать вставки PHP кода:
<p><?php echo 'text'; ?></p>
<p><?php echo sqrt(4); ?></p>

157.

Короткая команда echo
Существует специальная короткая форма команды echo. Давайте посмотрим как она
выглядит. Пусть у нас есть вывод данных в верстку:
<p><?php echo 'text'; ?></p>
Можно сократить вывод, используя специальный короткий тег PHP:
<p><?= 'text' ?></p>

158.

Вставка PHP переменной в HTML код
Пусть теперь у нас есть некоторый абзац, выше которого определена переменная
PHP
Можем упросить вставку переменной, используя короткий PHP тег:
<?php
$str = 'text';
?>
<p><?= $str ?></p>

159.

160.

161.

162.

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

163.

Базовая работа с
формами

164.

Работа с формами в PHP
• Формы — это часть языка HTML. Формы нужны для передачи данных от
клиента на сервер. Чаще всего формы используются для регистрации
пользователей, заполнения анкет, оформления заказа в интернет магазине,
и так далее.
• Через формы можно отправлять как простую текстовую информацию, так и
файлы. Большую часть времени программирования на PHP вы будете так
или иначе работать с формами и данными из них.
• HTML описывает то, из каких элементов состоит форма, и как она выглядит.
Но без принимающей стороны, то есть сервера, который принимает эти
данные и обрабатывает их нужным образом, создавать формы нет
никакого смысла.
• PHP содержит множество средств для работы с формами. Это позволяет
очень просто решать типичные задачи, которые часто возникают в вебпрограммировании:
• Регистрация и аутентификация пользователя;
• Отправка комментариев на форумах и социальных сетях;
• Оформление заказов.

165.

Отправка формы
• Рассмотрим один типичный пример — форма обратной связи. Для связи
пользователей с авторами сайта, как правило, используются формы
обратной связи, где человек указывает имя, почту для обратной связи и
текст своего сообщения.
• Такая форма в HTML может выглядеть следующим образом:
<form name="feedback" method="POST" action="form.php">
<label>Ваше имя: <input type="text" name="name"></label>
<label>Ваш email: <input type="text" name="email"></label>
<label>Сообщение: <textarea name="message"></textarea></label>
<input type="submit" name="send" value="Отправить">
</form>
• Это очень простая форма, состоящая из трёх полей и одной кнопки
отправки.

166.

Отправка формы
• Почти весь приведённый код описывает внешний вид и содержание
формы, но следует обратить внимание на два атрибута тега <form>,
которые нужны для указания на способ обработки данных:
• method — этот атрибут используется для определения метода HTTP, который
будет использован для передачи данных на сервер.
• Существует два механизма передачи данных из HTML-формы на сервер: GET
и POST.
• action — содержит адрес PHP-скрипта, который должен обработать эту
форму.
• После нажатия на кнопку «отправить», браузер выполняет POST запрос со
введёнными данными на адрес, указанный в атрибуте action.
<form name="feedback" method="POST" action="form.php">
<label>Ваше имя: <input type="text" name="name"></label>
<label>Ваш email: <input type="text" name="email"></label>
<label>Сообщение: <textarea name="message"></textarea></label>
<input type="submit" name="send" value="Отправить">
</form>

167.

Обработка формы
• После отправки формы управление передаётся PHP-скрипту, который
должен получить переданные данные, выполнить с ними какие-либо
действия (например, сохранить в базе данных) и показать результат.
• Результатом может быть какое-нибудь сообщение об успешном
завершении операции, например, «ваши данные успешно отправлены».
• Поэтому требуется в первую очередь научиться получать данные из формы
в сценарии.
• PHP помещает данные из формы в ассоциативный массив, к которому
можно получить доступ из сценария PHP на стороне сервера. Для методов
POST и GET имена переменных массива соответственно $_POST и $_GET.

168.

Обработка формы
• Чтобы показать пользователю заполненную в форме информацию, мы
можем просто отобразить переменные. PHP-обработчик «form.php» можно
записать так:
<html>
<body>
Вы ввели следующие данные:
Имя: <?php echo $_POST["firstname"]; ?>
Фамилия: <?php echo $_POST["lastname"]; ?>
</body>
</html>
• Результат обработки данных будет примерно таким:
Вы ввели следующие данные:
Имя: Иван
Фамилия: Иванов

169.

Обработка формы
• Такого же результата можно достичь с помощью метода HTTP GET заменив в
форме method="POST" на method="GET", а в обработчике $_POST на $_GET.
<form action="send.php" method="get">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>
• Php-обработчик "send.php" выглядит так:
<html>
<body>
Привет <?php echo $_GET["name"]; ?><br>
Твой email: <?php echo $_GET["email"]; ?>
</body>
</html>
• В вышеуказанном коде не хватает очень важного: Вам
необходимо проверить данные формы, чтобы защитить
скрипт от вредоносного кода.

170.

Методы GET и POST
• Существуют два способа, с помощью которых клиенты через формы могут
отправлять данные на веб-сервер — это методы GET и POST.
• Методы GET и POST создают ассоциативный массив (например, array (key1
=> value1, key2 => value2, key3 => value3, ...)). Массив содержит пары
ключ/значение, где ключи — это имена элементов управления формы, а
значения — входные данные от пользователя.
• И GET и POST рассматриваются как переменные $_GET и $_POST. Это
суперглобальные объекты, а это значит, что они всегда доступны,
независимо от области видимости — и мы можем получить к ним доступ из
любой функции, класса или файла.
• $_GET — это массив переменных, переданных текущему скрипту через
параметры URL.
• $_POST — это массив переменных, переданный текущему скрипту с
помощью метода HTTP POST.

171.

Метод GET
• Информация, отправленная из формы с помощью метода GET, видна всем
— GET создает длинную строку, которая отображается в логах сервера и в
адресной строке браузера. Например:
index.html?page=title&name=Nicol
• Здесь первая часть строки до символа (?) — это полный путь к файлу, а
остальная часть — передаваемые данные. Данные разделяются на блоки
«имя=значение» посредством (&).
• В данном случае мы получили 2 глобальных переменных $_GET['page'] и
$_GET['name'], их содержимым являются «title» и «Nicol» соответственно.
Поскольку переменные отображаются в URL-адресе, страницу можно
добавить в закладки. В некоторых случаях это может быть полезно.
• GET также имеет ограничения на объем отправляемой информации. Метод
GET предназначен для отправки только до 1024 символов.
• Метод GET не может отправлять на сервер двоичные данные, например
изображения или текстовые документы.
• GET может использоваться для отправки не конфиденциальных данных.

172.

Метод POST
• Метод POST передает информацию через HTTP-заголовки. Информация
кодируется и помещается в заголовок QUERY_STRING.
• Информация, отправляемая методом POST, проходят через HTTP-заголовок,
поэтому уровень безопасности зависит от протокола HTTP. Используя Secure
HTTP, можно обеспечить защиту важной информации.
• Метод POST, в отличие от GET, не устанавливает ограничения, а значит, если
вы передаёте объёмную информацию, то лучше пользоваться именно им.
• Так же к преимуществам метода POST стоит отнести возможность
передавать файлы на сервер.

173.

Ещё раз коротко
• GET
• Фильтры в интернет-магазинах
• Передача параметров через ссылку
• Другие безопасные запросы
• POST
• Любые формы с паролями или банковскими картами
• Формы заявок с персональными данными
• Отправка файлов

174.

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

175.

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

176.

Обработка формы в одном файле PHP
• В предыдущих примерах наша форма была размещена на одной странице,
а отправлялась на другую. На самом деле это не обязательно. Если оставить
атрибут action пустым или убрать его совсем, то форма будет отправляться
на эту же страницу.
• Как это будет работать: при первом заходе на страницу мы заполним форму
данными и нажмем на кнопку. После этого страница обновится и ее код
выполнится снова, но уже с данными формы.

177.

Обработка формы в одном файле PHP
• Давайте посмотрим на примере. Пусть у нас в одном файле есть форма и ее
обработка:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
var_dump($_GET);
?>
• При первом заходе на страницу функция var_dump выведет пустой массив. А
после отправки формы он выведет уже данные формы. То есть первый раз
$_GET будет пуст, а второй раз - будет содержать данные формы.

178.

Обработка формы в одном файле PHP
• Это может привести к проблемам. Пусть, к примеру, мы в форму будем
вводить числа и хотим вывести сумму этих чисел на экран:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
echo $_GET['test1'] + $_GET['test2'];
?>
• В этом случае при первом заходе на страницу мы увидим ошибки PHP,
связанные с тем, что массив $_GET пуст, а мы обращаемся к его элементам.

179.

Обработка формы в одном файле PHP
• Давайте исправим проблему. Для этого добавим условие, в котором будем
проверять то, что форма была отправлена.
• Например, можно проверять $_GET на не пустоту. Если $_GET не пустой - то
форма была отправлена и можно выполнять суммирование. В противном
случае у нас еще первый заход на страницу и суммирование выполнено не
будет. Итак, вот исправленный код:
<form action="" method="GET">
<input name="test1">
<input name="test2">
<input type="submit">
</form>
<?php
if (!empty($_GET)) {
echo $_GET['test1'] + $_GET['test2'];
}
?>

180.

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

181.

Валидация и
обработка форм

182.

Текстовые поля
• Валидация означает проверку данных, вводимых пользователем. В PHP
доступны два типа проверки:
• Валидация на стороне клиента — проверка выполняется на стороне
клиента в веб-браузере.
• Валидация на стороне сервера — после отправки данных на сервер их
проверка осуществляется на серверной стороне.
• Работая с массивами $_GET и $_POST очень важно не забывать
обрабатывать значения. Иначе можно получить неприятный сюрприз в
виде разных инъекций.
• Такой сайт рано или поздно будет взломан. Чтобы этого избежать важно
запомнить главное правило:
Никогда не доверяйте данным, которые приходят от пользователя!

183.

Текстовые поля
• Чтобы не получить ошибку, всегда проверяйте были ли вообще отправлены
данные с помощью команды isset() и empty()
$var = 0;
// Принимает значение true, потому что $var пусто
if (empty($var)) {
echo '$var или 0, или пусто, или вообще не определена';
}
// Принимает значение true, потому что $var определена
if (isset($var)) {
echo '$var определена, даже если она пустая';
}
• Чтобы пользователь не встроил свои HTML или PHP теги в наш код, мы
можем обработать и убрать их с помощью htmlspecialchars() или strip_tags()
<?php
$text = '<p>Test paragraph.</p><a href="#fragment">Other text</a>';
echo strip_tags($text); // Test paragraph. Other text
?>

184.

Текстовые поля
• Чтобы eубрать лишние, возможно вредосное символы можно использовать
urldecode() – убрать все символы относящиеся к url, trim() – убрать пробелы и
символы по бокам строки, strtr() – для замены определенных символов в
строке
<?php
$query = "my=apples&are=green+and+red <p>!</p>";
$query = urldecode($query);
$query = strip_tags($query);
$query = trim($query, '=');
$query = strtr($query, "+&=/", '
');
echo ($query); // my apples are green and red !
?>

185.

Валидация
• Обычно валидация выносится в отдельную функцию, вот пример:
<?php
//определим переменные и установим пустые значения
$name = $email = $education = $comment = $website = "";
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$education = test_input($_POST["education"]);
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
и т.д. ……
return $data;
}
?>

186.

Сохранение значений формы после отправки
• Пусть у нас есть некоторая форма, отправляющаяся на текущую страницу
• Давайте сделаем так, чтобы после отправки введенные данные не
пропадали из нашего инпута:
<form action="" method="GET">
<input name="test" value="<?php echo $_GET['test'] ?>">
<input type="submit">
</form>
• Такой подход, однако, не совершенен - при первом заходе на страницу PHP
выдаст ошибку из-за того, что $_GET['test'] не существует.

187.

Сохранение значений формы после отправки
• Для решения проблемы добавим условие:
<form action="" method="GET">
<input name="test" value="<?php
if (isset($_GET['test']))
echo $_GET['test']
?>">
<input type="submit">
</form>

188.

Сохранение значений формы после отправки
• Полученный нами код очень уж длинный. Давайте его сократим. Для
начала вместо if используем тернарный оператор:
<form action="" method="GET">
<input
name="test"
value="<?= isset($_GET['test']) ? $_GET['test'] : 'default' ?>"
>
<input type="submit">
</form>
• А теперь используем оператор ??, который сократит код еще больше:
<form action="" method="GET">
<input name="test" value="<?= $_GET['test'] ?? 'default' ?>">
<input type="submit">
</form>

189.

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

190.

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

191.

1.
Сделать функцию валидации данных из формы
(логин, пароль, повтор пароля, секретная фраза)
2.
Проверьте все поля на наличие инъекций и тегов
3.
Проверьте, что логин больше 3 и меньше 16
символов
4.
Проверьте что пароль совпадает с повтором
пароля и они оба больше 8 символов
5.
Проверьте что секретная фраза состоит ровно из 5
букв

192.

1.
Сделать функцию валидации данных из формы
(имя, фамилия, инн, снилс)
2.
Проверьте все поля на наличие инъекций и тегов
3.
Проверьте, что имя и фамилия не содержит
запрещенных символов
4.
Проверьте что инн и снилс соответствуют
правильному формату (12 цифр и Ххх-ххх-ххх yy
соответственно)

193.

Элементы формы

194.

Помимо текстовых полей в формах есть и другие
• Работа с textarea не отличается, главное задать ему name
<form action="" method="GET">
<textarea name="test"></textarea>
<input type="submit">
</form>
• С чекбоксами есть ньюансы. Сделаем такой флажок в нашей форме:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input name="text">
<input type="submit">
</form>
• После отправки формы в $_GET флажка будет содержаться строка 'on', если
флажок был отмечен и null, если нет:
<?php
var_dump($_GET['flag']); // 'on' или null
?>

195.

Чекбоксы
• Давайте выведем что-нибудь на экран в зависимости от того, был
отмечен флажок или нет:
<?php
if (!empty($_GET)) { // если форма была отправлена
if (isset($_GET['flag'])) { // если флажок
отмечен
echo 'отмечен';
} else {
echo 'не отмечен';
}
}
?>

196.

Чекбоксы
• Пусть в нашей форме есть только чекбокс, тогда код обработки
нашей формы выглядит вот так:
<form action="" method="GET">
<input type="checkbox" name="flag">
<input type="submit">
</form>
<?php
if (!empty($_GET)) { // если форма была отправлена
if (isset($_GET['flag'])) { // если флажок отмечен
echo 'отмечен';
} else {
echo 'не отмечен’; }
}
?>
• Нас ждет проблема - если флажок не отмечен, то, так как в форме кроме
чекбокса нет других элементов, в $_GET будет лежать пустой массив. Это
значит, что в коде обработки формы мы не попадем в первый if,
проверяющий отправку формы.

197.

Чекбоксы
• Для решения проблемы используют специальный прием: создают
скрытый инпут с таким же именем, как и у нашего чекбокса. При этом
значением скрытого инпута ставят ноль, а чебокса - единицу:
<form action="" method="GET">
<input type="hidden" name="flag" value="0">
<input type="checkbox" name="flag" value="1">
<input type="submit">
</form>
В таком случае если чекбокс не отмечен, то на сервер отправится
только значение скрытого инпута. Если же чекбокс отмечен, то на
сервер отправятся оба значения с одним именем. Но, так как значение
чекбокса будет вторым, то оно просто затрет первое.
<?php
if (!empty($_GET)) {
if ($_GET['flag'] === '1') {
echo 'отмечен';
} else {
echo 'не отмечен';}
}
?>

198.

Радиокнопки
• Давайте теперь научимся работать с radio в PHP. Сделаем несколько
переключателей в нашей форме:
<form action="" method="GET">
<input type="radio" name="radio" value="1">
<input type="radio" name="radio" value="2">
<input type="radio" name="radio" value="3">
<input type="submit">
</form>
• После отправки формы в $_GET переключателя будет содержаться
значение атрибута value отмеченного переключателя, либо null, если
ничего не было отмечено:
<?php
var_dump($_GET['radio']); // '1', '2', '3' или null
?>

199.

Радиокнопки
• При работе с радио возникают та же проблема, что и в чекбоксах.
Для решения этой проблемы давайте добавим скрытый инпут или
отметим одну из кнопок по умолчанию:
<form action="" method="GET">
<input type="hidden" name="radio" value="0">
<input type="radio" name="radio" value="1">
<input type="radio" name="radio" value="2">
<input type="radio" name="radio" value="3">
<input type="submit">
</form>
<form action="" method="GET">
<input type="radio" name="radio" value="1" checked>
<input type="radio" name="radio" value="2">
<input type="radio" name="radio" value="3">
<input type="submit">
</form>

200.

Селекты в PHP
• Давайте теперь научимся работать с тегом select в PHP. Сделаем
такой выпадающий список в нашей форме:
<form action="" method="GET">
<select name="test">
<option>item1</option>
<option>item2</option>
<option>item3</option>
</select>
<input type="submit">
</form>
• После отправки формы в $_GET селекта будет содержаться значение
выбранного тега option:
<?php
var_dump($_GET['test']); // 'item1', 'item2' или 'item3'
?>

201.

Селекты в PHP
• Давайте для пунктов списка укажем атрибут value:
<form action="" method="GET">
<select name="test">
<option value="1">item1</option>
<option value="2">item2</option>
<option value="3">item3</option>
</select>
<input type="submit">
</form>
• В этом случае на сервер будет отправляться именно значение этого
атрибута:
<?php
var_dump($_GET['test']); // '1', '2' или '3'
?>

202.

1.
Попросите пользователя оставить отзыв на сайт в
textarea. После отправки формы выведите этот
отзыв на экран.
2.
Сделайте форму с инпутом и флажком. С
помощью инпута спросите у пользователя имя.
После отправки формы, если флажок был отмечен,
поприветствуйте пользователя, а если не был
отмечен - попрощайтесь.

203.

1.
С помощью флажка спросите у пользователя, есть
ему уже 18 лет или нет. Если есть, разрешите ему
доступ на сайт, а если нет - не разрешите.
2.
С помощью двух переключателей спросите у
пользователя его пол. Выведите результат на
экран.

204.

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

205.

GET запросы

206.

GET запросы
• Вы уже знаете, что при отправке формы методом GET в адресной
строке браузера после знака ? появляются данные формы. Эти
данные в PHP коде будут доступны в массиве $_GET.
• На самом деле наличие формы на страницы является не
обязательным - мы можем просто руками написать в адресной строке
знак вопроса, после него перечислить параметры с их значениями и
нажать энтер.
• В этом случае введенные нами данные также будут доступны в
массиве $_GET. То есть получится имитация отправки формы. Такая
имитация называется отправить GET запрос. Такие слова означают,
что мы должны руками вбить в адресную строку вопросик и
параметры запроса.

207.

GET запросы
• Параметры запроса перечисляются в следующем формате: имя, затем знак равно,
затем значение параметра. Если параметров несколько, то они разделяются знаком
амперсанд &.
• Давайте попробуем на примерах. Пусть у вас есть некоторый PHP файл. Обратитесь к
нему в браузере, как вы обычно это делаете. А затем добавьте в конец адресной
строки ?par1=1 и нажмите энтер.
• В результате наш параметр будет содержаться в $_GET['par1']:
<?php
echo $_GET['par1']; // выведет '1'
?>

208.

GET запросы с помощью ссылок
• В реальном мире, конечно же, пользователи вашего сайта не будут отправлять GET
запросы вручную через адресную строку.
• Для этого мы будем предоставлять им ссылки, содержащие параметры GET запроса.
Пользователи будут переходить по ссылкам и автоматически отправлять GET
запросы.
• Давайте посмотрим на примерах. При переходе по следующей ссылке мы попадем на
страницу index.php, отправив GET параметры:
<a href="index.php?par1=1&par2=2">ссылка</a>
• Саму страницу в ссылке можно и не указывать, а просто начать адрес со знака ?. В
этом случае при переходе по ссылке мы вернемся на текущую страницу, но с GET
параметрами в адресной строке. Вот пример:
<a href="?par1=1&par2=2">ссылка</a>

209.

1.
Сделайте три ссылки. Пусть первая передает
число 1, вторая - число 2, третья - число 3.
Сделайте так, чтобы по нажатию на ссылку на
экран выводилось ее число.
2.
Сформируйте в цикле 10 ссылок. Пусть каждая
ссылка передает свое число. Сделайте так, чтобы
по нажатию на ссылку на экран выводилось ее
число.
3.
Дан массив:
$arr = ['a', 'b', 'c', 'd', 'e'];
Сделайте так, чтобы с помощью GET запроса можно
было вывести любой элемент этого массива. Для
этого с помощью цикла foreach сделайте ссылку для
каждого элемента массива.

210.

Практика формы

211.

1.
Напишите скрипт, который будет преобразовывать
температуру из градусов Цельсия в градусы
Фарингейта. Для этого сделайте инпут и кнопку
2.
Напишите скрипт, который будет считать
факториал числа. Само число вводится в инпут и
после нажатия на кнопку пользователь должен
увидеть результат.

212.

1.
Создайте php-файл, результат которого показан на
рисунке. При клике на кнопку 'Очистить' поля
формы обновляются, на кнопку 'Отправить' происходит отправка данных на сервер методом
POST. После отправки – выведите данные на
страницу, скажите что человек успешно записался,
а форму уберите

213.

1.
Напишите скрипт, который будет находить корни
квадратного уравнения. Для этого сделайте 3
инпута, в которые будут вводиться коэффициенты
уравнения.
2.
Даны 3 инпута. В них вводятся числа. Проверьте,
что эти числа являются тройкой Пифагора: квадрат
самого большого числа должен быть равен сумме
квадратов двух остальных.

214.

1.
Дан инпут и кнопка. В этот инпут вводится дата
рождения в формате '01.12.1990'. По нажатию на
кнопку выведите на экран сколько дней осталось
до дня рождения пользователя.
2.
Дан текстареа и кнопка. В текстареа вводится
текст. По нажатию на кнопку выведите количество
слов и количество символов в тексте.

215.

1.
Даны 3 селекта и кнопка. Первый селект - это дни
от 1 до 31, второй селект - это месяцы от января
до декабря, а третий - это годы от 1990 до 2025. С
помощью этих селектов можно выбрать дату. По
нажатию на кнопку выведите на экран день недели,
соответствующий этой дате.
2.
Сделайте скрипт-гороскоп. Внутри него хранится
массив гороскопов на несколько дней вперед для
каждого знака зодиака. По заходу на страницу
спросите у пользователя дату рождения,
определите его знак зодиака и выведите
предсказание для этого знака зодиака на текущий
день.

216.

Сессии и куки

217.

Куки

218.

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

219.

Сохранение cookie
• Для установки куки на компьютере пользователя используется функция
setcookie(). Она должна вызываться перед тем, как будет отправлен ответ
пользователю. Эта функция имеет следующее определение:
bool setcookie(string $name, string $value, int $expire,
string $path, string $domain, bool $secure, bool $httponly);
• name: имя cookie, которое будет использоваться для доступа к его значению
• value: значение или содержимое cookie - любой алфавитно-цифровой текст
не более 4 кБайт
• expire (необязательный параметр): срок действия в секундах, после
которого cookie уничтожаются. Если данный параметр не установлен или
равен 0, то уничтожение cookie происходит после закрытия браузера.
Обычно устанавливается относительно текущего времени, которое можно
получить с помощью функции time()

220.

Сохранение cookie
bool setcookie(string $name, string $value, int $expire,
string $path, string $domain, bool $secure, bool $httponly);
• path (необязательный параметр): путь к каталогу на сервере, для которого
будут доступны cookie. Если задать "/", cookie будут доступны для всего
сайта. Если задать, например, "/mydir/", cookie будут доступны только из
каталога /mydir/ и всех его подкаталогов.
• domain (необязательный параметр): задает домен, для которого будут
доступны cookie.
• secure (необязательный параметр): указывает на то, что значение cookie
должно передаваться по протоколу HTTPS. Если задано true, cookie от
клиента будет передано на сервер, только если установлено защищенное
соединение. По умолчанию равно false.
• httponly (необязательный параметр): если равно true, cookie будут доступны
только через http протокол. То есть cookie в этом случае не будут доступны
скриптовым языкам, например, JavaScript. По умолчанию параметр равен
false

221.

Сохранение cookie
• Сохраним cookie:
<?php
$name = "Tom";
$age = 36;
setcookie("name", $name);
setcookie("age", $age, time() + 3600);
// срок действия –
1 час (3600 секунд)
echo "Куки установлены";
?>
• Здесь устанавливаются две куки: "name" и "age".
• Первая куки уничтожается после закрытия браузера, а вторая - через 3600
секунд, то есть через час.

222.

Сохранение cookie
• При необходимости мы можем увидеть сохраненные куки в браузере с
помощью инструментов разработчика. Например, вид куки в Google Chrome:
• В cookie можно сохранить любую информацию, но не стоит сохранять
важные с точки зрения безопасности данные, например, пароли. А если и
сохранять какую-то важную информацию, то следует хранить ее в
зашифрованном виде.

223.

Получение cookie
• Чтобы получить cookie, можно использовать глобальный ассоциативный
массив $_COOKIE, например, $_COOKIE["name"]. Так, получим ранее
сохраненные куки:
<?php
if (isset($_COOKIE["name"]))
echo "Name: " . $_COOKIE["name"] . "<br>";
if (isset($_COOKIE["age"]))
echo "Age: " . $_COOKIE["age"] . "<br>";
?>

224.

Проблема установки кук
• Основная проблема при работе с куки следующая: нельзя делать никакого
вывода в браузер до окончания работы с куки, в противном случае вы
увидите следующую ошибку:
• Warning: Cannot send session cookie - headers already sent.
• Что такое вывод в браузер? Это любой символ до <?php, например, текст
или тег, даже пробел, а также сообщение об ошибке со стороны PHP. Кроме
того нельзя делать выводы через echo, var_dump и print_r.
• Кодировка вашего документа обязательно должна быть utf-8 без BOM. Если
она будет просто utf-8, то перед <?php будет вставлен спец. символ,
характерный для данной кодировки и куки работать не будут.

225.

Проблема установки кук
• При записи и чтении куки на одной странице нас будет поджидать
некоторый подвох. Дело в том, что куки, установленные через setcookie,
становятся доступными в массиве $_COOKIE только после перезагрузки
страницы.
• Давайте проверим это. Запишем через setcookie какую-то куку и сразу
выведем ее на экран. В этом случае при первом заходе в $_COOKIE для
нашей куки будет null, а при уже обновлении страницы - значение куки:
<?php
setcookie('str', 'eee');
var_dump($_COOKIE['str']); // сначала null,
а потом 'eee'
?>

226.

Мгновенная установка кук
• Для того, чтобы установленная кука сразу появилась в массиве $_COOKIE
можно использовать хитрый прием. Суть приема следующая: сначала
установим куку с помощью setcookie, а потом вручную запишем ее в массив
$_COOKIE:
<?php
setcookie('str', 'eee');
$_COOKIE['str'] = 'eee';
var_dump($_COOKIE['str']); // сразу выведет 'eee'
?>

227.

Счетчик обновления страницы на куках
• Чтобы кука каждый раз не отправлялась в браузер, можно запись куки
сделать внутри условия. Если такой куки нет, то запишем ее:
<?php
if (!isset($_COOKIE['counter'])) { // первый заход на страницу
setcookie('counter', 1);
$_COOKIE['counter'] = 1;
} else {
setcookie('counter', $_COOKIE['counter'] + 1);
$_COOKIE['counter'] = $_COOKIE['counter'] + 1;
}
echo $_COOKIE['counter'];
?>

228.

Время жизни куки
• Продлить время жизни куки можно с помощью третьего параметра,
который принимает момент времени в формате timestamp.
• Как только этот момент наступит - кука автоматически будет удалена
браузером.
• Третий параметр принято записывать так: настоящий момент времени + N
секунд. Настоящий момент времени в формате можно получить с помощью
функции time().
• Давайте для примера установим куку на один час. Так как в часе 3600
секунд, то прибавим это число к текущему моменту:
<?php
setcookie('test', 'abcde', time() + 3600);?>
• При установке кук обычно прописывают секунды в таком виде: 60 * 60 - это
час, 60 * 60 * 24 - это сутки.
<?php
setcookie('test', 'abcde', time() + 60 * 60 * 24);
#установили на сутки?>

229.

Удаление кук
• В PHP нет встроенного механизма для удаления кук. Поэтому удаляют куки
хитрым способом - устанавливая время 'смерти' куки на текущий момент:
<?php
setcookie('test', '', time());
?>
• Удаление куки приведет к изменению $_COOKIE только после перезагрузки
страницы:
<?php
setcookie('test', '', time());
var_dump($_COOKIE['test']);
// первый раз выведет значение куки
?>

230.

Удаление кук
• Для того, чтобы при удалении куки сразу менялся $_COOKIE можно
использовать уже известный нам хитрый прием:
<?php
setcookie('test', '', time());
unset($_COOKIE['test']);
var_dump($_COOKIE['test']);
?>
• Добавим условие, чтобы каждый раз не удалять уже удаленную куку:
<?php
if (isset($_COOKIE['test'])) {
setcookie('test', '', time());
unset($_COOKIE['test']);
}
var_dump($_COOKIE['test']); // удалена
?>

231.

1.
В одном файле запишите куку, а в другом файле
выведите ее на экран.
2.
Запишите в куку момент времени захода
пользователя на страницу. При обновлении
страницы выведите на экран, сколько времени
прошло с момента первого захода на страницу.

232.

1.
Установите какую-нибудь куку на месяц.
2.
Установите какую-нибудь куку на год.
3.
Установите какую-нибудь куку на 10 лет.

233.

1.
Удалите какую-нибудь куку. Обновите страницу и
убедитесь, что она удалилась.
2.
Создать сайт из четырех страниц. На четвертой
странице пользователь видит список страниц, которые
он посещал.
3.
Создать форму авторизации на сайте с тремя
обязательных полями: login, password и email. Если
данные введены верно, то записать в cookies
специальный ключ, при наличии которого
пользователю доступна кнопка "Выход". В момент
выхода происходит удаление созданной ранее
cookies.

234.

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

235.

Сессии

236.

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

237.

Сессии
• Итак, давайте посмотрим, как работать с сессиями на PHP. Чтобы записать что-то в сессию ее
сначала нужно инициализировать с помощью функции session_start:
<?php
session_start();
?>
• После инициализации мы можем записать что-нибудь в сессию или прочитать что-нибудь оттуда.
Это делается с помощью суперглобального массива $_SESSION.
• При запуске сессии с помощью функции session_start(), если пользователь первый раз заходит на
сайт, PHP назначает ему уникальный идентификатор сессии. Этот идентификатор с помощью
cookie, которые по умолчанию называются "PHPSESSID", сохраняется в браузере пользователя.
• С помощью этого идентификатора пользователь ассоциируется с данными сессии. Если для
пользователя уже установлена сессия, то данная функция продлевает текущую сессию вместо
установки новой.

238.

Сессии
• С помощью специальных функций мы можем получить идентификатор сессии:
<?php
session_start();
echo session_id(); // идентификатор сессии
echo session_name(); // имя - PHPSESSID
?>

239.

Сессии
• Давайте попробуем на практике. Сделаем файл test1.php и разместим в нем
следующий код:
<?php
session_start();
$_SESSION['test'] = 'abcde'; // пишем в сессию
?>
• А в файле test2.php - следующий код:
<?php
session_start();
echo $_SESSION['test']; // читаем из сессии
?>
• Теперь для начала откройте в браузере файл test1.php, а потом test2.php.
При открытии второго файла в браузере выведется то, что было записано в
сессию в первом файле.

240.

Сессии
• После установки сессии в браузере мы сможем заметить установку специальной куки, которая по
умолчанию называется "PHPSESSID":

241.

Возможные проблемы при работе с сессиями
• Также как и куки…
• Основная проблема при работе с сессией следующая: нельзя делать никакого вывода в
браузер до окончания работы с сессиями, в противном случае вы увидите следующую
ошибку: Warning: Cannot send session cookie - headers already sent.
• Что такое вывод в браузер? Это любой символ до <?php, например, текст или тег, даже
пробел, а также сообщение об ошибке со стороны PHP. Кроме того нельзя делать выводы
через echo, var_dump и print_r.
• Кодировка вашего документа обязательно должна быть utf-8 без BOM. Если она будет
просто utf-8, то перед <?php будет вставлен спец. символ, характерный для данной
кодировки и сессии работать не будут.

242.

Использование сессий на одной странице
• В первом примере на сессии мы что-то записывали в сессию в одном файле, а
прочитывали в другом. На самом деле это не обязательно - можно делать это и в одном
файле.
• Например, можно сделать счетчик обновления страницы пользователем сайта. Для этого
при первом заходе пользователя запишем в переменную сессии единицу, а при всех
последующих заходах будем увеличивать эту переменную на один:
<?php
session_start();
if (!isset($_SESSION['counter'])) {
$_SESSION['counter'] = 1; // первый заход на страницу
} else {
$_SESSION['counter']++;
// последующие заходы
}
echo $_SESSION['counter'];
?>

243.

Удаление сессий
• Иногда нам может понадобится удалить какую-нибудь переменную сессии, не затрагивая
остальных. Это делается с помощью функции unset:
<?php
unset($_SESSION['var']);
?>
<?php
session_destroy();
• После выполнения такого кода наша переменная станет null:
?>
<?php
var_dump($_SESSION['var'); // выведет null
?>

244.

Завершение всей сессии
• Если же вам нужно удалить все переменные сессии для данного пользователя, то следует
воспользоваться функцией session_destroy:
<?php
session_destroy();
?>
• Учтите, что эту функцию можно вызывать только тогда, когда сессия запущена через
session_start.

245.

Сессии и формы
• Пусть у нас есть два PHP файла. Давайте в файле test1.php разместим форму,
спрашивающую у пользователя два числа:
<form method="GET">
<input name="num1">
<input name="num2">
<input type="submit">
</form>
• В этом же файле разместим код обработки формы. В этом коде мы запишем данные
инпутов в сессию:
<?php
session_start();
Важный нюанс: в файле код обработки формы должен
стоять до самой формы. Почему: потому что в этом
коде мы работаем с сессией, а значит не должно быть
никакого вывода на экран до этого.
if (!empty($_GET)) {
$_SESSION['num1'] = $_GET['num1'];
$_SESSION['num2'] = $_GET['num2'];
}
?>

246.

Сессии и формы
• Давайте теперь в файле test2.php найдем сумму чисел, сохраненных в сессии:
<?php
session_start();
if (!empty($_SESSION)) {
echo $_SESSION['num1'] + $_SESSION['num2'];
}
?>
• Сначала пользователь заходит на страницу test1.php, заполняет форму и жмет на кнопку.
После этого он опять попадает на test1.php, но уже с отправленными данными формы.
При этом он попадает в условие, в котором мы пишем данные формы в сессию.
• Затем пользователь должен вручную зайти на страницу test2.php - и там он увидит сумму
введенных чисел.
• Вы можете спросить: зачем так мудрить? Ведь можно было сразу отправить форму на
страницу test2.php. Дело в том, что в данном случае удобство в том, что сама форма и код
ее обработки размещаются на одной странице. Такое, конечно же, удобно не всегда, но
иногда бывает нужно.

247.

Запись массивов в сессии
• Рассмотрим код, сделанный нами на предыдущем слайде:
<?php
session_start();
if (!empty($_GET)) {
$_SESSION['num1'] = $_GET['num1'];
$_SESSION['num2'] = $_GET['num2'];
}
?>
• На самом деле можно было взять и записать все данные формы сразу в $_SESSION:
<?php
if (!empty($_GET)) {
$_SESSION = $_GET;
}
?>

248.

Запись массивов в сессии
• Рассмотрим код, сделанный нами на предыдущем слайде:
<?php
session_start();
?>
if (!empty($_GET)) {
$_SESSION['num1'] = $_GET['num1'];
Преимущество такого подхода в том, что наш код
$_SESSION['num2'] = $_GET['num2'];
будет работать независимо от количества инпутов в
}
форме.
Есть, однако, и недостаток: перезаписывая
$_SESSION
мы затираем
все данные, которые там
• На самом деле можно было взять и записать все
данные формы
сразу в $_SESSION:
ранее были. Мало ли что туда написал другой наш
скрипт? А мы это удалим.
<?php
if (!empty($_GET)) {
$_SESSION = $_GET;
}
?>

249.

Запись массивов в сессии
• Давайте поступим по-другому:
<?php
if (!empty($_GET)) {
$_SESSION['nums'] = $_GET;
}
?>
• Как вы видите, в переменную сессии мы записали не одно какое-то значение, а целый
массив. Теперь в файле test2.php можем найти сумму элементов этого массива:
<?php
if (!empty($_SESSION)) {
echo array_sum($_SESSION['nums']);
}
?>

250.

1.
Сделайте два файла. При запуске первого файла
запишите в сессию 5 чисел, а при запуске второго
файла - выведите на экран сумму этих чисел.
2.
Запишите в сессию время захода пользователя на
сайт. При обновлении страницы выводите сколько
секунд назад пользователь зашел на сайт.

251.

1.
Вот код счетчика
<?php
session_start();
if (!isset($_SESSION['counter'])) {
$_SESSION['counter'] = 1;
} else {
$_SESSION['counter']++;
}
echo $_SESSION['counter'];
?>
2.
Модифицируйте этот код так, чтобы при достижении
счетчиком значения 10, отсчет начинался сначала.

252.

1.
Сделайте две страницы: index.php и hello.php. При
заходе на index.php спросите с помощью формы
имя пользователя, запишите его в сессию. При
заходе на hello.php поприветствуйте пользователя
фразой "Привет, %Имя%!".
2.
Покажите пользователю баннер с кнопкой 'Не
показывать больше!'. Если он нажмет на эту кнопку не показывайте ему баннер в течении месяца.

253.

1.
Спросите у пользователя email с помощью формы.
Затем сделайте так, чтобы в другой форме (имя,
фамилия, пароль, email) при ее открытии поле
email было автоматически заполнено.
2.
Реализуйте выбор цвета шапки сайта пользователем.
Сделайте несколько цветов для шапки. Пользователь
может выбрать один из цветов с помощью
выпадающего списка. Этот выбор будет сохранен в
куки и пользователь, заходя на сайт, всегда будет
видеть один и тот же цвет шапки. Можете заменить
цвет на полноценный дизайн.

254.

1.
Сделайте страницу logout.php, при заходе на
которую будет завершаться сессия пользователя.
2.
На одной странице с помощью формы спросите у
пользователя фамилию, имя и возраст. Запишите
эти данные в сессию. При заходе на другую
страницу выведите эти данные на экран.

255.

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

256.

1.
Реализуйте тест по принципу 'одна страница сайта
- одна задача'. Запомните результаты ответов
пользователя в сессию.

257.

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

258.

1.
Модифицируем
Сделайте на сайте 5 картинок с товарами. Реализуйте
корзину. Под каждой картинкой должна быть ссылка
'Положить в корзину'. По нажатию на эту ссылку этот
товар должен занестись в корзину (сессия), также должна
увеличиться общая сумма, которую должен заплатить
пользователь (сумма также должна быть указана под
картинками с товарами).

259.

Задача
• Сделайте игру – кликер, пусть на
странице есть звание игрока,
иконка для клика и счётчик кликов,
игрок может кликать по иконке, по
достижении 10, 20, 50, 100 кликов
будет меняться звание на малец,
хиляк, крутыш, босс
соответственно
• Звания и пороги можно придумать
свои
• При перезагрузке прогресс не
должен сбрасываться
• После достижения 100 кликов,
появляется кнопка сброса, после
которой 1 клик удваивается и игра
начинается с начала, цикл
повторяется
English     Русский Rules