PHP: Курс молодого бойца

Ниже приведены задачи лабораторного практикума занятий I семестра. Решение всех задач — необходимое и достаточное условие получения зачета.

Темы упражнений блока №1:

  • Определение символьных строк в программах на РНР тремя способами: в одиночных, в двойных кавычках и в виде встраиваемого документа.
  • Назначение экранирования и символы, которые следует экранировать в отдельных видах символьных строк.
  • Проверка достоверности символьной строки путем определения ее длины, удаления начальных и конечных пробелов и сравнения с другой символьной строкой.
  • Форматирование символьной строки с помощью функции printf().
  • Манипулирование регистром букв в символьной строке с помощью функций strtolower(), strtoupper() и ucwords().
  • Извлечение подстроки с помощью функции substr().
  • Изменение части символьной строки с помощью функции str_replace().
  • Определение чисел в программах.
  • Выполнение арифметических операций над числами.
  • Сохранение значений в переменных.
  • Надлежащее именование переменных.
  • Выполнение составных операций над переменными.
  • Выполнение операций инкрементирования и декрементирования над переменными.
  • Вставка переменных в символьные строки.

1. Найдите ошибки в приведенном ниже исходном тексте программы на РНP

<? php 
print 'How are you? '; 
print 'I' m fine. '; 
??> 

2. Напишите на РНР программу, вычисляющую общую стоимость трапезы в ресторане, состоящей из двух гамбургеров по 49,5 рубля каждый, одного молочно-шоколадного коктейля за 19,5 рубля и одной порции кока-колы за 8,5 рубля. Ставка налога на добавленную стоимость составляет 7,5%, а чаевые без вычета налогов — 16%.

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

4. Напишите на РНР программу, задающую имя в переменной $first_name и фамилию в переменной $last_name. Выведите символьную строку, содержащую имя и фамилию, разделив их пробелом. Кроме того, выведите длину этой символьной строки.

5. Напишите на РНР программу, в которой применяются составные операции инкрементирования (++) и умножения с присваиванием (*=), для вывода чисел в пределах от 1 до 5, а также степеней числа 2 в пределах от 2 (21) до 32 (25).

6. Снабдите комментариями программы, написанные на РНР в предыдущих упражнениях. Попробуйте ввести как одно-, так и многострочные комментарии. После ввода комментариев выполните программу, чтобы убедиться в правильности их функционирования и синтаксиса введенных комментариев.

Темы упражнений блока №2:

  • Вычисление выражений и определение их истинности (true) или ложности (false).
  • Принятие решений с помощью условного оператора if().
  • Расширение условного оператора if() оператором else.
  • Расширение условного оператора if() оператором elseif().
  • Размещение нескольких операторов в блоке кода языковой конструкции if(), elseif () или else.
  • Применение операций сравнения на равенство (==) и неравенство (!=) в проверочных выражениях.
  • Различение операций присваивания (=) и сравнения на равенство (==).
  • Применение операций сравнения на "больше" (>), "меньше" (<), "больше или равно" (>=) и "меньше или равно" (<=) в проверочных выражениях.
  • Сравнение двух чисел с плавающей точкой с помощью функции abs().
  • Сравнение двух символьных строк с помощью соответствующих операций.
  • Сравнение двух символьных строк с помощью функции strcmp() или strcasecmp().
  • Сравнение двух значений с помощью составной операции сравнения типа "космический корабль" (<=>).
  • Применение операции отрицания (!) в проверочных выражениях.
  • Применение логических операций (&& и !!) для составления сложных проверочных выражений.
  • Повторное выполнение блока кода с помощью конструкции цикла while().
  • Повторное выполнение блока кода с помощью конструкции цикла for().

1. Определите истинность или ложность приведенных ниже выражений, не прибегая к помощи интерпретатора РНР. После решения убедитесь на практике.

а. 100. 00 - 100 
Ь. "zero" 
с. "false" 
d. 0 + "true" 
е. 0.000 
f. "0.0" 
g. strcmp ("false", "False") 
h. 0 <=> "0" 

2. Выясните результат, выводимый приведенной ниже программой, не прибегая к помощи интерпретатора РНР. После решения убедитесь на практике.

$age = 12; 
$shoe size = 13; 
if ($age > $shoe_size) { 
	print "Message 1."; 
elseif (($shoe - size++) && ($age > 20) ) { 
	print "Message 2."; 
else { 
	print "Message З.";
}	
print "Age : $age . Shoe Size: $shoe size";

3. Воспользуйтесь конструкцией цикла while(), чтобы вывести на экран величины температур в пределах от -50 до 50 градусов по Фаренгейту и эквивалентные им величины температур в градусах Цельсия. По температурной шкале Фаренгейта вода замерзает при температуре 23 градуса и закипает при 212 градусах. А по температурной шкале Цельсия вода замерзает при температуре О градусов и закипает при 100 градусах. Таким образом, для преобразования температуры по Фаренгейту в температуру по Цельсию следует вычесть из ее величины 32, умножить полученную разность на 5 и разделить на 9. А для преобразования температуры по Цельсию в температуру по Фаренгейту следует умножить ее величину на 9, разделить полученный результат на 5 и прибавить 32.

4. Видоизмените выполнение задания в упражнении 9, воспользовавшись конструкцией цикла for() вместо конструкции цикла while().

Темы упражнений блока №3:

  • Представление о составляющих массива: элементах, ключах и значениях.
  • Два способа определения массива в программах на РНР: с помощью языковой конструкции array() и сокращенного синтаксиса массивов.
  • Ввод элементов в массив с помощью квадратных скобок.
  • Представление о сокращенном синтаксисе доступа к массивам с числовыми ключами.
  • Подсчет количества элементов в массиве.
  • Обход каждого элемента массива с помощью языковой конструкции foreach().
  • Чередование классов CSS в строках НТМL-таблицы с помощью языковой конструкции foreach() и массива классов имен.
  • Модификация значений элементов массива в блоке кода, выполняемом в цикле, организуемом с помощью языковой конструкции foreach().
  • Обход каждого элемента числового массива с помощью языковой конструкции for().
  • Чередование классов CSS в строках НТМL-таблицы с помощью языковой конструкции for() и операции взятия модуля (%).
  • Представление о порядке, в котором осуществляется обход элементов массива в циклах, организуемых с помощью языковых конструкций foreach() и for().
  • Проверка элемента массива по конкретному ключу.
  • Проверка элемента массива по конкретному значению.
  • Вставка значений элементов массива в символьные строки.
  • Удаление элемента из массива.
  • Формирование символьной строки из массива с помощью функции implode().
  • Формирование массива из символьной строки с помощью функции explode().
  • Сортировка массива с помощью функции sort(), asort() или ksort().
  • Сортировка массива в обратном порядке.
  • Определение многомерного массива.
  • Доступ к отдельным элементам многомерного массива.
  • Обход каждого элемента многомерного массива с помощью функции foreach() или for().
  • Вставка значений элементов многомерного массива в символьные строки.

1. Согласно данным Бюро переписи населения США в 2010 году, самыми крупными в Соединенных Штатах Америки были следующие города:

  • Нью-Йорк (8 175 133 человек)
  • Лос-Анджелес, шт. Калифорния (3 792 621 человек)
  • Чикаго, шт. Иллинойс (2 695 598 человек)
  • Хьюстон, шт. Техас (2 100 263 человек)
  • Филадельфия, шт. Пенсильвания (1 526 006 человек)
  • Феникс, шт. Аризона (1 445 632 человек)
  • Сан-Антонио, шт. Техас (1 327 407 человек)
  • Сан-Диего, шт. Калифорния (1 307 402 человек)
  • Даллас, шт. Техас (1 197 816 человек)
  • Сан-Хосе, шт. Калифорния (945 942 человек)

Определите один массив (или ряд массивов), хранящий местоположение и население перечисленных выше городов. Выведите на экран таблицу со сведениями о местоположении и населении, а также общее население всех десяти городов.

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

3. Видоизмените выполнение задания в первом упражнении таким образом, чтобы таблица содержала также строки с общим населением каждого штата, упомянутого в перечне самых крупных городов США.

4. Выясните, как хранить каждый из приведенных ниже видов информации в массиве, а затем предоставьте пример кода, в котором создается такой массив, состоящий из нескольких элементов. Например, в следующем ассоциативном массиве в качестве ключа служит Ф.И.О. учащегося, а качестве значения ассоциативный массив, состоящий из классов и идентификационных номеров учащихся:

$students = 
	['James D. McCawley' => [ 'grade' => 'А+', 'id' => 271231 ], 
	'Buwei Yang Chao ' => [ 'grade ' => 'А', 'id' => 818211] ];

 

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

Темы упражнений блока №4:

  • Определение и вызов функций в программах.
  • Определение функций с обязательными аргументами.
  • Определение функций с необязательными аргументами.
  • Возврат значения из функции.
  • Представление об области действия переменных.
  • Обращение к глобальным переменным в теле функций.
  • Представление об объявлениях типов.
  • Применение объявлений типов аргументов.
  • Применение объявлений типов возвращаемых значений.
  • Организация исходного кода РНР в отдельных файлах.

1. Напишите функцию, возвращающую дескриптор разметки НТМLстраницы. Эта функция должна принимать URL изображения в качестве обязательного аргумента, а также текст надписи, ширину и высоту изображения в качестве необязательных аргументов alt, height и width соответственно.

2. Видоизмените функцию из предыдущего упражнения таким образом, чтобы передавать ей только имя файла в качестве аргумента URL. Введите глобальную переменную в теле данной функции, чтобы дополнить указанное имя файла до полного URL. Так, если данной функции передано имя файла photo.png, а глобальная переменная содержит путь /images/, то атрибут возвращаемого дескриптора будет содержать путь /images/photo.png. Такая функция упрощает поддержание правильности дескрипторов изображений даже в том случае, если изображения размещаются по новому пути или на другом сервере. Для этого достаточно изменить содержимое глобальной переменной, например, с /images/ на http://images.example.com/.

3. Разместите функцию из предыдущего упражнения в отдельном файле. Затем создайте еще один файл, загружающий первый файл, используя его для вывода на экран ряд дескрипторов .

4. Что выводится на экран в приведенном ниже фрагменте кода:

<?php 
	fuction restaurant_check($meal, $tax, $tip) {
		$tax amount = $meal * ($tax / 100); 
		$tip_amount = $meal * ($tip / 100); 
		return $meal + $tax_amount + $tip_amount; 
	}

	$cash_on_hand 31; 
	$meal = 25; 
	$tax 10; 
	$tip = 10; 
	while( ($cost = restaurant_check ($meal,$tax,$tip) ) < $cash on hand ) { 
		$tip++; 
		print "I can afford а tip of $tip% ($cost)\n"; 
	}
?> 

5. Такие цвета веб-палитры, как, например, #ffffff и #сс3399, составляются из шестнадцатеричных значений красной, зеленой и синей составляющих цвета. Напишите функцию, принимающую в качестве аргументов десятичные значения красной, зеленой и синей составляющих цвета и возвращающую символьную строку, содержащую подходящий цвет для применения на веб-странице. Так, если указаны аргументы 255, 0 и 255 при вызове данной функции, она должна возвратить символьную строку #ff00ff. Для написания данной функции может оказаться полезной встроенная функция dechex(), документацию на которую можно найти по этому адресу.

Темы упражнений блока №5:

  • Представление о том, как объекты помогают организовать код.
  • Определение класса с методами и свойствами.
  • Создание объекта с помощью операции new.
  • Доступ к методам и свойствам с помощью операции "стрелка".
  • Определение и вызов статического (static) метода.
  • Инициализация объекта в конструкторе.
  • Генерирование исключений для индикации ошибок.
  • Перехват исключений для обработки ошибок.
  • Расширение класса производным от него подклассом.
  • Управление доступом к свойствам и методами с помощью модификаторов доступа.
  • Организация кода в пространствах имен.

1. Создайте класс Ingredient. Каждый экземпляр этого класса должен представлять отдельный ингредиент блюда, а также отслеживать наименование ингредиента и его стоимость.

2. Введите в свой новый класс Ingredient метод, изменяющий стоимость ингредиента блюда.

3. Создайте подкласс, производный от класса Entree:

class  Eпtree  { 
	puЬlic  $name; 
	puЬlic  $ingredieпts  =  array(); 
	puЬlic  functioп  hasingredient ($iпgredient) {
		return  in_array($ingredieпt,  $this->iпgredients);
	}
} 

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

4. Разместите свой класс Ingredient в собственном пространстве имен и внесите изменения в другой код, где применяется класс Ingredient, чтобы этот код функционировал надлежащим образом.

Темы упражнений блока №6:

  • Представление о взаимодействии веб-браузера с веб-сервером, выполняющим отображение формы, обработку переданных параметров формы и вывод полученных результатов.
  • Установление связи между атрибутом action дескриптора
    и URL, по которому передаются параметры формы.
  • Применение значений из автоглобального массива $_SERVER.
  • Доступ к параметрам переданной на обработку формы в автоглобальных массивах $_GET и $_POST.
  • Доступ к многозначным параметрам переданной на обработку формы.
  • Применение функций show_form(), validate_form() и process_form() для модульной организации обработки формы.
  • Отображение сообщений об ошибках вместе с формой.
  • Проверка достоверности данных в элементах формы: обязательных элементов, целых чисел, чисел с плавающей точкой, символьных строк, диапазонов дат, адресов электронной почты и списков, размечаемых дескриптором < select >.
  • Очистка или удаление элементов кода HTML и JavaScript из переданных на обработку данных перед их отображением.
  • Отображение значений, устанавливаемых по умолчанию в элементах формы.
  • Применение вспомогательных функций для отображения элементов формы.

1. Что будет содержать массив $_POST после передачи на обработку приведенной ниже формы, где выбран третий элемент из списка Braised Noodles (Тушеное мясо с лапшой), первый и последний элементы из списка Sweet (Сладкое), а в текстовом поле введено значение 4?

<form method="POST" action="order.php"> 
	Braised Noodles with: <select name="noodle"> 
		<option>crab meat</option> 
		<option>mushroom</option> 
		<option>barbecued pork</option> 
		<option>shredded ginger and green onion</option> 
	</select> 
	<br/> 
	Sweet: <select name="sweet []" multiple> 
		<option value="puff"> Sesame Seed Puff 
		<option value="square"> Coconut Milk Gelatin Square 
		<option value="cake"> Brown Sugar Cake 
		<option value="ricemeat"> Sweet Rice and Meat 
	</select> 
	<br/> 
	Sweet Quantity: <input type="text" name="sweet_q"> 
	<br/> 
	<input type="submit" name="submit" value="Order"> 
</form> 

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

3. Напишите программу, выполняющую основные арифметические операции. С этой целью отобразите форму с текстовым полем для ввода двух операндов и список, размечаемых дескриптором < select >, для выбора операции сложения, вычитания, умножения или деления. Организуйте проверку достоверности вводимых данных, чтобы они были числовыми и пригодными для выполнения выбранной арифметической операции. Функция обработки вводимых данных должна отображать операнды, операцию и результат ее выполнения. Так, если введены операнды 4 и 2 и выбрана операция умножения, то функция обработки вводимых данных должна отобразить следующее:
4 * 2 = 8.

4. Напишите программу, отображающую, проверяющую достоверность и обрабатывающую форму для ввода сведений о доставленной посылке. Эта форма должна содержать поля ввода адресов отправителя и получателя, а также размеров и веса посылки. При проверке достоверности данных из переданной на обработку формы должно быть установлено, что вес посылки не превышает 150 фунтов (около 68 кг), а любой из ее размеров — 36 дюймов (порядка 91 см). Можете также допустить, что в форме введены адреса США, но в таком случае проверьте правильность ввода обозначения штата и почтового индекса. Функция обработки формы в вашей программе должна выводить на экран сведения о посылке в виде организованного, отформатированного отчета.

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

В последующих упражнениях применяется таблица dishes базы данных, имеющая следующую структуру:

 
	CREATE TABLE dishes  ( 
		dish_id		INT,
		dish_name	CHAR(255),
		price		DECIMAK(4,2),
		is_spicy	INT
	}

Ниже приведен образец данных, размещаемых в таблице dishes.

 
	INSERT INTO dishes VALUES	(1, 'Walnut Bun',1.00,0) 
	INSERT INTO dishes VALUES	(2, 'Cashew Nuts and White MushrooWs ',4.95,0) 
	INSERT INTO dishes VALUES	(3, 'Dried Mulberries',3.00,0) 
	INSERT INTO dishes VALUES	(4, 'Eggplant with Chili Sauce',6.50,1) 
	INSERT INTO dishes VALUES	(5, 'Red Bean Bun',1.00,0) 
	INSERT INTO dishes VALUES	(6, 'General Tso' 's Chicken',5.50,1) 

Темы упражнений блока №7:

  • Выяснение видов информации, которые можно хранить в базе данных.
  • Представления об организации информации в базе данных.
  • Установление соединения с базой данных.
  • Создание таблицы в базе данных.
  • Удаление таблицы из базы данных.
  • Применение команды INSERT в запросах SQL.
  • Ввод информации в базу данных с помощью метода ехес().
  • Проверка ошибок при выполнении операций в базе данных путем обработки генерируемых исключений.
  • Изменение режима выдачи ошибок с помощью метода setAttribute().
  • Применение команд UPDATE и DELETE в запросах SQL.
  • Изменение или удаление информации в базе данных с помощью метода ехес().
  • Подсчет количества строк таблицы, затрагиваемых запросом SQL.
  • Применение замещающих знаков для безопасного ввода информации в запрос SQL.
  • Применение команды SELECT в запросах SQL.
  • Извлечение данных из базы данных с помощью методов query() и fetch().
  • Подсчет количества строк, извлеченных из таблицы, с помощью метода query().
  • Применение ключевых слов ORDER ВY и LIMIT в запросах SQL.
  • Извлечение строк в виде массивов, индексированных символьными строками, или в виде объектов.
  • Применение подстановочных символов % и_ вместе с оператором LIKE в запросах SQL.
  • Экранирование подстановочных символов в командах SELECT запросов SQL.
  • Сохранение параметров переданной на обработку формы в базе данных.
  • Применение информации, извлекаемой из базы данных, в заполняемой форме

1. Напишите программу, в которой все блюда, находящиеся в таблице dishes, перечисляются отсортированными по цене.

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

3. Напишите программу, отображающую форму со списком наименований блюд, размечаемым дескриптором < select >. Составьте такой список из наименований блюд, извлеченных из базы данных. После передачи формы на обработку программа должна вывести из таблицы всю информацию о выбранном блюде, в том числе идентификатор, наименование, цену и наличие специй в данном блюде.

4. Создайте новую таблицу для хранения информации о посетителе ресторана. В этой таблице должна храниться следующая информация о каждом посетителе ресторана: идентификатор посетителя, имя, номер телефона, а также идентификатор излюбленного блюда посетителя. Напишите программу, отображающую форму для ввода нового посетителя в таблицу. Часть формы, предназначенная для ввода излюбленного блюда посетителя, должна быть реализована в виде списка наименований блюд, размечаемого дескриптором < select >. Идентификатор посетителя должен формироваться вашей программой, а не вводиться в заполняемой форме.

Темы упражнений блока №8:

  • Представление о происхождении полномочий на доступ к файлам в интерпретаторе РНР.
  • Чтение всего файла с помощью функции filе_get_contents().
  • Запись всего содержимого в файл с помощью функции file_put_contents().
  • Построчное чтение содержимого файла с помощью функции file().
  • Открытие и закрытие файлов с помощью функций fopen() и fclose().
  • Чтение отдельных строк из файла с помощью функции fgets().
  • Построчное чтение содержимого файла в цикле while() с применением функции feof().
  • Применение знаков косой черты в путях к файлам во всех операционных системах.
  • Задание разных режимов доступа к файлу при вызове функции fopen().
  • Запись данных в файл с помощью функции fwrite().
  • Чтение отдельных строк из файла формата CSV с помощью функции fgetcsv().
  • Запись отдельных строк в файл формата CSV с помощью функции fputcsv().
  • Применение стандартного потока вывода php://output для отображения выводимых результатов.
  • Выявление факта существования файла с помощью функции file_exists().
  • Проверка прав доступа к файлам с помощью функций s_readaЬle() и is_writеаbе().
  • Выявление ошибок, возвращаемых функциями доступа к файлам.
  • Представление о том, когда именно следует проверять возвращаемое значение с помощью операции тождественности.
  • Удаление потенциально опасных частей из предоставляемых извне путей к файлам.

1. Создайте вне интерпретатора РНР новый НТМL-файл шаблона по образцу, приведенному в примере 9.1. Напишите программу, в которой функции file_get_contents() и file_put_contents() применяются для чтения НТМL-файла шаблона, вместо переменных в шаблон подставляются соответствующие значения, а новая страница сохраняется в отдельном файле.

2. Создайте вне интерпретатора РНР новый файл, содержащий ряд адресов электронной почты в отдельных строках, причем некоторые адреса должны присутствовать в файле неоднократно. Присвойте новому файлу имя addresses.txt. Затем напишите на РНР программу, читающую каждую строку из файла addresses.txt и подсчитывающую, сколько раз каждый адрес упоминается в данном файле. Для каждого адреса из файла addresses.txt эта программа должна записывать отдельную строку в другой файл, называемый addresses-count.txt. Каждая строка из файла addresses-count.txt должна состоять из числа, обозначающего, сколько раз данный адрес упоминается в файле addresses.txt, запятой и самого адреса электронной почты. Такие строки должны записываться в файл addresses-count.txt в отсортированном порядке, начиная с адреса, чаще всего упоминаемого в файле addresses.txt, и кончая адресом, реже всего упоминаемым в файле addresses.txt.

3. Отобразите файл формата CSV в виде НТМL-таблицы. Если у вас нет под рукой такого файла (или программы электронных таблиц), воспользуйтесь данными из примера 29.

4. Напишите на РНР программу, отображающую форму, в которой пользователю предлагается указать имя файла в корневом каталоге документов на веб-сервере. Если такой файл существует на веб-сервере, доступен для чтения и находится в корневом каталоге документов, то программа должна отобразить его содержимое. Так, если пользователь введет имя файла article.html, программа должна отобразить содержимое файла article.html, находящегося в корневом каталоге документа. А если пользователь введет путь к файлу саtalog/show.php, программа должна отобразить содержимое файла show.php из каталога catalog, входящего в корневой каталог документа.

5. Видоизмените программу из предыдущего упражнения, чтобы она отображала только файлы с расширением .html. Ведь разрешать пользователям просматривать исходный код РНР любой страницы веб-сайта опасно, если она содержит уязвимую информацию (например, имена пользователей и их пароли).

Темы упражнений блока №9:

  • Выяснение причин, по которым сооkiе-файлы необходимы для идентификации конкретного веб-браузера или веб-сервера.
  • Установка сооkiе-файла в программе на РНР.
  • Чтение значения из сооkiе-файла в программе на РНР.
  • Видоизменение таких параметров сооkiе-файла, как время истечения срока действия, путь и домен.
  • Удаление сооkiе-файла в программе на PHP
  • Активизация сеансов из программы на РНР или в конфигурации интерпретатора РНР.
  • Сохранение информации в сеансе.
  • Чтение информации из сеанса.
  • Сохранение данных из переданной на обработку формы в сеансе.
  • Удаление данных из сеанса.
  • Настройка срока действия и очистки сеанса.
  • Отображение, проверка достоверности и обработка формы регистрации.
  • Применение хешированных паролей.
  • Выяснение причин, по которым функции setcookie() и session _start() должны вызываться прежде вывода любых результатов.

1. Создайте веб-страницу, на которой сооkiе-файл используется для слежения за количеством ее просмотров отдельным пользователем. Когда отдельный пользователь просматривает страницу в первый раз, на странице должно быть выведено сообщение вроде "Nꊓer of views: 1" (Количество просмотров: 1), а когда данный пользователь просматривает страницу во второй раз — сообщение "N_er of views : 1" и т.д.

2. Видоизмените веб-страницу из первого упражнения таким образом, чтобы на ней выводилось специальное сообщение при 5-м, 10-м и 15-м просмотре страницы, а после 20-го просмотра должен быть удален сооkiе-файл и подсчет просмотров страницы начат с самого начала. \

3. Напишите на РНР программу, отображающую форму, где пользователь может выбрать излюбленный цвет из списка. Создайте еще одну страницу с цветом фона, выбранным пользователем в данной форме. Сохраните значение этого цвета в массиве $_SESSION, чтобы сделать его доступным на обеих страницах.

4. Напишите на РНР программу, отображающую форму заказа, где перечисляются шесть товаров. Рядом с названием каждого товара должно находиться текстовое поле, в котором пользователь может ввести количество заказываемого товара. После передачи формы на обработку данные из нее должны быть сохранены в сеансе. Создайте еще одну страницу, отображающую содержимое сохраненного заказа, обратную ссылку на страницу с формой заказа, а также кнопку Check Out (Оформить заказ). Если щелкнуть на обратной ссылке, должна появиться страница с формой заказа, в текстовых полях которой должны быть указаны сохраненные количества заказанных товаров. А если щелкнуть на кнопке Check Out, то заказ должен быть удален из текущего сеанса.

Темы упражнений блока №10:

  • Простое извлечение данных по заданному URL с помощью функции file_get_contents().
  • Извлечение данных по заданному URL с включением параметров в строку запроса.
  • Декодирование НТТР-ответа, присылаемого в формате JSON.
  • Представление о потоковых контекстах в РНР.
  • Включение дополнительных заголовков в запросы для излечения данных по заданному URL.
  • Излечение данных по заданному URL методом POST с помощью функции file_get_contents().
  • Излечение данных по заданному URL средствами расширения cURL.
  • Применение параметров из строки запроса в расширении cURL.
  • Ввод заголовков в запрос средствами cURL.
  • Обработка ошибок при выполнении запросов средствами cURL.
  • Излечение данных по заданному URL методом POST средствами cURL.
  • Отслеживание сооkiе-файлов по сетевому протоколу НТТР средствами cURL.
  • Безопасное применение расширения с URL по сетевому протоколу HTTPS.
  • Обслуживание ответов на запросы без НТМL-разметки.
  • Изменение кода НТТР-ответа.
  • Применение значений из заголовков НТТР-запросов.
  • Проверка, был ли запрос сделан по сетевому протоколу HTTPS.

1. По адресу http://php.net/releases/?json находится лента подачи информации в формате JSON о последних выпусках версий языка РНР. Напишите программу, в которой функция file_get_contents() используется для извлечения из этой ленты и последующего вывода на экран информации о последней выпущенной версии языка РHP.

2. Видоизмените программу из предыдущего упражнения, чтобы воспользоваться расширением cURL вместо функции file_get_contents().

3. Напишите программу для формирования веб-страницы, на которой сооkiе-файл используется с целью извещать пользователя о том, когда он в последний раз посещал данную веб-страницу (для этой цели могут пригодиться функции манипулирования датой и временем.

4. Обменный фонд GitHub (GitHub gist) — это фрагмент текста или кода, которым легко обмениваться с другими. Прикладной программный интерфейс GitНub API позволяет создавать такой обменный фонд без дополнительной регистрации. Напишите программу для создания обменного фонда, содержащего ее исходный код. Имейте в виду, что прикладной программный интерфейс GitHub API потребует от вас установить заголовок User-Agent в НТТР-запросах к нему. Для установки этого заголовка можете воспользоваться параметром CURLOPT_USERAGENT.

Темы упражнений блока №11:

  • Настройка отображения в окне веб-браузера, вывода в журнал регистрации ошибок или того и другого.
  • Конфигурирование интерпретатора РНР на уровне сообщения об ошибках.
  • Извлечение выгод из текстового редактора, поддерживающего написание программ на РНɞ
  • Расшифровка сообщений о синтаксических ошибках.
  • Выявление и устранение синтаксических ошибок.
  • Вывод отладочной информации с помощью оператора print и функций var dump () и error_log ().
  • Отправка отладочной информации, выводимой функцией var _ dump (), в журнал регистрации ошибок с помощью функций буферизации.
  • Проверка работоспособности программы с помощью отладчика во время ее выполнения.
  • Обработка исключений, которые нельзя перехватить в каком-нибудь другом коде.

1. В следующей программе содержится синтаксическая ошибка:

<?php 
	$name = 'UmЬerto '; 

	function say_hello() {
		print 'Hello, '; 
		print global $name; 
	}
	
	say_hello(); 
?> 

Не выполняя программу в интерпретаторе РНР, выясните, о какой ошибке должен сообщить этот интерпретатор при попытке выполнить программу. Какие
изменения следует внести в данную программу, чтобы она выполнялась правильно и выводила на экран сообщение "Hello, UmЬerto"?

2. Видоизмените ответ на задание написать функцию validate_form() в упражнении 3 из главы 7 таким образом, чтобы она выводила имена и значения всех параметров из переданной на обработку формы в журнал регистрации ошибок на веб-сервере.

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

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

<?php 
	// подключиться  к  базе  данных 
	try  { 
		$db  =  new  PDO('sqlite::/tmp/restaurant.db'); 
	} 
	catch  ($е)  { 
		die ("Can't connect:  "  .  $e->getMessage ()); 
	}

	// организовать  обработку  исключений 
	$db->setAttribute(PDO::ATTR_ERRМODE,  PDO:: ERRМODE_EXCEPTION); 

	// установить  режим  извлечения  строк  из  таблицы  в  виде  массивов 
	$db->setAttribute (PDO::ATTR_DEFAULT_FETCH_MODE,  PDO:: FETCH_ASSOC); 

	// получить  массив  наименований  блюд  из  базы  данных 
	$dish_names  =  array(); 
	$res  =  $db->query ('SELECT  dish_id,dish_name  FROM  dishes'); 
	foreach($res->fetchAll() as  $row)  { 
		$dish_names [$row['dish_id']]] =  $row['dish_name ']; 
	}
	$res  =  $db->query ('SELECT  **  FROM  customers  ORDER  ВУ  phone  DESC'); 
	$customers  =  $res->fetchAll (); 
	if( count($customers)  =  0)  { 
		print  "No  customers .";
	}
	else  { 
		print  '<table>'; 
		print  '<tr><th>ID</th><th>Name</th><th>Phone</th> 
		<th>Favorite  Dish</th></tr>'; 
		foreach($customers  as  $customer)  { 
			printf(
				"<tr><td>%d</td><td>%s</td> 
				<td>%f</td><td>%s</td> 
				</tr>\n", 
				$customer['customer_id'], 
				htmlentities ( $customer['customer  name']), 
				$customer ['phone'] , 
				$customer['favorite_dish_id']); 
		}
	}
	print  '</table>'; 
?>

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Как бы так получилось? *