Основы языка программирования PHP

Содержание

Слайд 2

Если для запуска программ, написанных на JavaScript, достаточно лишь веб-браузера, то

Если для запуска программ, написанных на JavaScript, достаточно лишь веб-браузера, то для
для запуска программ, написанных на языке PHP, понадобиться веб-сервер.
Например, можно использовать для отладки PHP-программ бесплатный набор программного обеспечения Denver, который включает в себя веб-сервер Appache, PHP, MySQL и все необходимое:
Скачиваем Denver с сайта http://www.denver.ru и при установке Denver-а соглашайтесь на все предлагаемые по умолчанию настройки.
Для запуска Denver-а нужно кликнуть по иконке “Start Denver”. При этом он загрузится в память, но никаких окон на экране не останется, кроме иконки в панели задач. Для выгрузки Denver-а из памяти, нужно нажать на иконку “Stop Denver”.
Denver создаст на компьютере виртуальный диск (обычно это диск Z). Это делается для нашего удобства (физически файлы лежат на диске C в папке “C:\WebServers”). На этом диске в папку “Z:\home\localhost\www\” мы будем помещать разрабатываемые PHP-программы и оттуда их запускать на исполнение.

Слайд 3

Настройка Appache

По умолчанию в Denver PHP-код в файлах с расширением “.html” не

Настройка Appache По умолчанию в Denver PHP-код в файлах с расширением “.html”
исполняется. Поэтому необходимо будет выполнить небольшую (и единственную) правку файла конфигурации ‘Z:\usr\local\apache\conf\httpd.conf”:
Находим в файле конфигурации строку, начинающуюся на “AddType application/x-httpd-php” и дописываем в ее конец “ .html” и “ .htm” (с пробелами впереди).
2) Перед этой строкой вставляем строку: “RemoveHandler .html .htm”
3) Удостоверяемся, что в директиве “AddHandler server-parsed” (если такая строка есть) нет расширений “.html” и “.htm” (если есть - удаляем их).

Для запуска веб-страницы необходимо предварительно положить её в папку “Z:\home\localhost\www\”, а в браузере написать не просто “программа.html”, а “http://localhost/программа.html”.

Слайд 4

Программа на языке PHP может либо находиться в текстовом файле с расширением

Программа на языке PHP может либо находиться в текстовом файле с расширением
*.php, либо быть интегрированной прямо в текст HTML-страницы (файл с расширением *.html). Редактировать PHP-программу можно в любом текстовом редакторе, например в notepad++.

PHP-код на HTML-странице помещается внутри специального HTML-тега “”. Между знаками вопроса здесь нужно вставлять текст PHP-программы, которая будет выполнена на сервере. При этом результат выполнения программы (весь текст, что программа выводит с помощью команды echo) сервер помещает прямо в текст веб-страницы в то место, где была эта программа.

Слайд 5

В данной программе нет ничего, кроме вывода на экран (в тексте HTML-страницы)

В данной программе нет ничего, кроме вывода на экран (в тексте HTML-страницы)
строки “Hello, world!” командой echo. Текстовые строки на языке PHP нужно брать в кавычки (в одинарные или в двойные - все равно).

На рисунке мы действительно видим исходный текст страницы, однако вместо текста вставленной в эту страницу PHP-программы мы видим лишь результат ее выполнения - надпись “Hello, world!”.

Пример экрана браузера при просмотре в нем исходного текста веб-страницы.

Слайд 6

Этот пример иллюстрирует одно из наиболее важных свойств PHP-программы. Сервер НИКОГДА НЕ

Этот пример иллюстрирует одно из наиболее важных свойств PHP-программы. Сервер НИКОГДА НЕ
ПЕРЕДАЕТ текст PHP-кода браузеру. Сервер исполняет PHP-код, удаляет его из страницы, а на его место вставляет результат всех команд echo кода.
Таким образом, можно не опасаться, что текст PHP-программы будет кем-либо похищен - она никогда не покидает сервера. В то же время текст программы на языке JavaScript, на котором пишут клиентские приложения (front-end), доступен для просмотра в браузере и его можно похитить (воровство кода программ можно лишь затруднить с помощью обфускации текста программы).

Слайд 7

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

Здесь приведен текст этой же страницы (в браузере выглядит точно так же),
но оформленной в виде файла с расширением *.php. Браузеры понимают расширение *.php и интерпретируют такие веб-страницы так же, как и HTML-страницы.
Здесь уже нельзя просто вставлять HTML-текст. Все, что будет содержать веб-страница, нужно выводить на нее командами echo, а текст обязательно брать в кавычки.
Так же видно, что в данном случае теги , не обязательны (но, при желании и их можно добавить на страницу с помощью команды echo).

Эта же страница, только оформленная в виде файла с расширением *.php

Слайд 8

Попытка увидеть PHP-код данной программы при просмотре исходного текста веб-страницы в браузере

Видно,

Попытка увидеть PHP-код данной программы при просмотре исходного текста веб-страницы в браузере
что в браузер передаются только результаты работы команды echo PHP-программы.
Оба способа написания PHP-программ (в отдельных PHP-файлах или внутри HTML-страницы) эквивалентны друг другу. Но написание PHP-кода в файле с расширением *.php позволяет нам проверить текст программы на наличие ошибок. Например, с помощью файла php.exe, находящийся в Denverа.
Если в программе есть ошибки, то php.exe сообщит нам об этом с указанием номеров строк, в которых содержатся ошибки.

Слайд 9

Автоматическое генерирование текста страницы

Программы, которая выведет на экран все целые числа

Автоматическое генерирование текста страницы Программы, которая выведет на экран все целые числа
с 1 до 200, выделив красным цветом простые числа.

Слайд 10

Здесь мы уже видим пример программы, в которой есть функция, циклы,

Здесь мы уже видим пример программы, в которой есть функция, циклы, условные
условные операторы, переменные.
Особенности синтаксиса PHP-програм:
Во-первых, все имена переменных в PHP-программах должны начинаться со знака доллара “$”.
Во-вторых, типы переменных не обязательно объявлять - PHP сам поймет, что это за переменная по тому значению, которое мы в нее записываем.
Еще одной особенностью языка PHP по сравнению с C/C++ является требование, чтобы все условия в условных операторах обязательно брались в скобки. Нельзя написать так:
if $k>5 { $k=$k-3;$x=$x*2; }
Нужно обязательно писать так:
if ($k>5) { $k=$k-3;$x=$x*2; }
В данном примере функция “prost” возвращает 0, если число не простое, и 1, если число простое (ни на что не делится, кроме единицы и самого себя). Оператор “%” в выражении “$n % $i” означает “остаток от деления числа $n на число $i”.

Слайд 11

Результат выполнения данной PHP-программы

Результат выполнения данной PHP-программы

Слайд 12

Пример программы, которая выводит на экран список ПГТ Харьковской области, хранящийся на

Пример программы, которая выводит на экран список ПГТ Харьковской области, хранящийся на
сервере в файле “kh.txt”.

Работа с файлами

Некоторые функции PHP для работы с файлами:
fopen открывает файл,
fgets читает из файла одну строку,
fclose закрывает файл,
feof возвращает значение “истина”, если все строки из файла уже прочитаны).

Восклицательный знак перед условием на PHP означает отрицание. Если у условия значение “истина”, то после отрицания оно изменится на “ложь”. И наоборот, если у условия значение “ложь”, то после отрицания оно изменится на “истина”.

Слайд 13

Программа, которая выводит на экран только поселки, начинающиеся с буквы “Б”

Переменная

Программа, которая выводит на экран только поселки, начинающиеся с буквы “Б” Переменная
$s содержит текстовую строку. Текстовая строка на языке PHP - это массив букв. У массива есть длина (ее можно получить функцией strlen($s)). Индексы любого массива на языке PHP начинаются с нуля. Поэтому, чтобы обратиться к первой букве строки $s, нужно написать $s[0]. Чтобы обратиться к второй букве строки $s, нужно написать $s[1] и т.д. Чтобы обратиться к последней букве строки $s, нужно написать $s[strlen($s)]. Если в программе нужно последовательно перебрать все буквы строки $s и что-то с ними сделать, то можно организовать цикл от 0 до strlen($s)-1, примерно вот так:
for ($n=0;$n И уже в теле цикла можно обращаться к буквам строки $s ,как $s[$n].
В примере мы просто проверяем, равна ли первая буква строки $s букве “Б”. Здесь “==” - логический оператор, который возвращает “истина”, если $s[0] равно “Б” (точно так же равенство проверяется и в языке C/С++).

Слайд 14

Программа, которая выводит на веб-страницу название текущего дня недели

Вначале объявлен массив с

Программа, которая выводит на веб-страницу название текущего дня недели Вначале объявлен массив
именем $myday, содержащий 7 строк:
$myday=array("воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота");
Нумерация элементов массивов, как и строк, начинается с нуля. Чтобы обратиться к элементу массива, нужно написать его имя, а затем в квадратных скобках - значение индекса (номера элемента). Если написать $s = $myday[0], то в $s будет записано слово “воскресенье”. Если же написать, например, $s=$myday[3], то в $s будет записано слово “среда”. Если в переменной $k находится число 6, и, если написать $s=$myday[$k], то в $s будет записано слово “суббота”.
Далее в тексте программы в переменную, названную $today, заносится результат выполнения функции getdate(). Функция getdate() является стандартной функцией PHP (пустые скобки свидетельствуют о том, что у этой функции нет входных параметров), а результатом ее работы является ассоциативный массив данных о текущей дате.

Слайд 15

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

Ассоциативный массив отличается от обычного тем, что в качестве индексов массива используются
не цифры, а ключевые слова, заданные при объявлении массива. Например, ассоциативный массив можно объявить вот так:
$a["imya"]="Nikolay";
$a["familiya"]="Ponomarenko";
$a["gorod"]="Kharkov";
$a["denxr"]=1970;
В данном случае в массиве $a есть четыре ячейки. В первые три ячейки с именами imya, familiya и gorod мы занесли строки текста, а в четвертую ячейку с именем denxr мы занесли число. На PHP так можно делать.
Есть и чуть более компактный способ объявить этот массив:
$a=array("imya"=>"Nikolay", "familiya"=>"Ponomarenko", "gorod"=>"Kharkov", "denxr"=>1970);
Результат будет таким же. Вообще же PHP, как правило, предоставляет несколько альтернативных возможностей добиться нужного результата.
Теперь, обратиться к полям объявленного массива $a можно, например, вот так:
echo $a[“familiya”], " ", $a[“denxr”];
На веб-страницу будет выведена надпись “Ponomarenko 1970”. А можно и так (без кавычек в именах индекса):
echo $a[familiya], " ", $a[denxr];
Результат будет тем же самым.

Слайд 16

Согласно свойствам ассоциативных массивов в приведенном примере программы строка “$day=$today[wday];” означает, что

Согласно свойствам ассоциативных массивов в приведенном примере программы строка “$day=$today[wday];” означает, что
в переменную $day мы заносим значение ячейки массива $today с индексом “wday”. Это номер дня недели, число с возможными значениями от 0 до 6 (см. описание функции getdate() в справочнике).

В последней строке программы командой echo выводится на веб-страницу значение ячейки массива $myday (туда мы занесли названия всех дней недели) с номером ячейки, равным $day (там у нас номер дня недели).

Слайд 17

В языке PHP есть функция print_r, которая позволяет вывести на экран

В языке PHP есть функция print_r, которая позволяет вывести на экран заданный
заданный массив с названиями и значениями его ячеек. Данная программа выводит на экран значения массивов $myday и $today из предыдущего примера.
Как видно, у простого массива $myday, PHP автоматически пронумеровал индексы от 0 до 6. Видны также все названия индексов (имен ячеек) массива $today, который содержит результат работы функции getdate().
Обращаться из программы к ячейкам ассоциативного массива $today можно как с использованием кавычек: $today[“year”], так и без использования кавычек:
$today[year].

Слайд 18

Обработка запросов к серверу на PHP

Одно из основных назначений PHP

Обработка запросов к серверу на PHP Одно из основных назначений PHP -
- обработка запросов к серверу, поступающих от веб-страниц или других серверов.

Слайд 19

Тег

..
обрамляет те данные, которые будут отправлены на

Тег .. обрамляет те данные, которые будут отправлены на сервер. В атрибуте
сервер. В атрибуте action указывается адрес в Интернете той программы, которая будет обрабатывать эти данные. В данном случае это “primer.php”. В атрибуте method указывается метод отправки (это может быть “POST” или “GET”). В данном примере указан метод POST. Методы POST и GET отличаются тем, что для метода POST данные отправляются в теле HTTP-запроса (их не видно пользователю), а в методе GET данные отправляются в строке URL (их видно в адресной строке в браузере).
Внутри тега
..
мы видим несколько тегов (элемент формы), отличающихся разным значением атрибута type. Именно значение атрибута type определяет внешний вид элемента формы и его назначение.
Значение type=”text” задает текстовую строку ввода. В этом случае атрибут size=”50” означает, что в строке будет максимум 50 букв. Атрибут name понадобится нам при обработке данных на сервере. Значение type=”password” также задает строку ввода. Однако буквы, которые пользователь будет вводить, будут отображаться на экране звездочками (символами *).
Значение type=”checkbox” задает элементы с “галочками”, которые можно устанавливать независимо друг от друга. При этом наличие атрибута checked (без значения) указывает браузеру, что “галочка” должна стоять в элементе уже при загрузке веб-страницы. И type=”submit” задает кнопку, при нажатии на которую данные формы (значения ее элементов) будут отправлены на сервер. Значение type=”radio” задает элемент переключатель (кружочек с точечкой или без). Среди всех элементов типа radio с одинаковыми атрибутами name только один может быть установлен.

Слайд 20

Программа primer.php, которая будет обрабатывать данные формы

Эта программа проверяет данные формы,

Программа primer.php, которая будет обрабатывать данные формы Эта программа проверяет данные формы,
анализирует их, выводит сообщения на веб-страницу и сохраняет данные формы в текстовом файле.

Слайд 21

На PHP для обработки данных форм все, что можно, делается автоматически

На PHP для обработки данных форм все, что можно, делается автоматически и
и все полученные методом POST от веб-страницы данные помещаются в специальный ассоциативный массив с именем $_POST.
Названия индексов этого массива соответствуют именам тегов (атрибут name). Чтобы проверить, что передано из веб-страницы в элементе формы с значением тега name=”oleg” нужно просто обратиться к ячейке $_POST[‘oleg’]. Точно так же и со всеми остальными элементами формы.
В приведенном примере на экран командами echo выводятся ФИО и пароль. Затем проверяется, была ли установлена галочка в элементе формы с именем ‘cofe’ и, если да, то выводится надпись “Извините, кофе нет!”.
Далее проверяется, был ли выбран элемент radio со значением “var1” и, если да, то выводится надпись “Оплата наличными”.

Слайд 22

Все данные, полученные от веб-страницы, сохраняются в текстовом файле zakazy.txt. Параметр ‘a’

Все данные, полученные от веб-страницы, сохраняются в текстовом файле zakazy.txt. Параметр ‘a’
в функции fopen('zakazy.txt','a') означает, что файл открывается для дозаписи (добавления информации к уже записанной ранее в этот файл). Можно было бы сохранить каждое данное отдельно, но для красоты и краткости текста программы здесь использована функция print_r. Второй параметр этой функции, равный TRUE, сообщает ей, что нужно не выводить текст на веб-страницу, а передать его на выход функции (в данном случае в пременную $st).

Содержимое файла zakazy.txt для данной заполненной формы

Слайд 23

На этом примере видно, что для текстовых элементов формы и паролей

На этом примере видно, что для текстовых элементов формы и паролей на
на сервер передаются текстовые строки, для элементов типа “checkbox” - текстовая строка “on” (для случая, если галочка установлена), для элементов типа “radio” - значение того элемента, который был выбран.

Если данные с веб-страницы по какой-то причине не были переданы, то массив $_POST окажется пустым.
Проверить, не пустая ли та или иная ячейка массива $_POST можно с помощью функции isset($s), которая возвращает TRUE, если переменная $s существует. Чтобы проверить, например, были ли переданы на сервер данные с именем “oleg”, нужно проверить isset($_POST[‘oleg’]).

Слайд 24

Пример отправки данных на сервер методом GET.

Чтобы отправить данные на сервер

Пример отправки данных на сервер методом GET. Чтобы отправить данные на сервер
методом GET, можно точно так же использовать элементы формы, только в теге
присвоить атрибуту method значение “GET”.

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

Пока все выглядит точно так же, как и в предыдущем примере. Существенное отличие будет лишь в PHP-коде и том, как выглядит в браузере ответ сервера.

Слайд 25

Текст программы pr.php, которая обрабатывает запрос

В этом случае данные веб-страницы для метода

Текст программы pr.php, которая обрабатывает запрос В этом случае данные веб-страницы для
GET нужно читать из ассоциативного массива $_GET. Однако в адресной строке в браузере в этом случае значится “localhost/pr.php?nam=Nikolay&year=1970”. Все, что находится после знака “?” и есть данные, переданные от веб-страницы серверу методом GET.
Данные для метода GET передаются на сервер прямо в строке URL и разделяются символом “&”. При этом русские буквы могут кодироваться в кодировке UTF8 и быть нечитаемыми, однако PHP делает извлечение этих данных легкой задачей благодаря массиву $_GET.
Недостатком метода GET по сравнению с методом POST является меньший объем данных, которые можно передать на сервер. Однако, иногда метод GET является более удобным, так как позволяет формировать запросы на сервер даже без использования элементов формы.

Слайд 26

В данном примере используются просто ссылки с интегрированными в них запросами к

В данном примере используются просто ссылки с интегрированными в них запросами к
серверу. Данные здесь помещены в значения атрибутов href тега .. через символ “?” после пути к файлу PHP-программы.

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

В данном примере обе ссылки ведут к одному и тому же PHP-коду (или “PHP-скрипт”). Но результат работы этого PHP-кода будет разным в зависимости от того, какая из двух ссылок нажата.
Такого же эффекта можно добиться и при отправке данных методом POST, но придется задействовать JavaScript и текст веб-страницы будет более сложным.

Программа prim.php и результат ее работы

Слайд 27

NOTE!!! В предыдущих примерах пользователю предлагалось заполнить форму, но не указано, а

NOTE!!! В предыдущих примерах пользователю предлагалось заполнить форму, но не указано, а
что будет, если два пользователя почти одновременно отправят данные на сервер? Запустится два экземпляра этого PHP-кода и они могут одновременно пытаться что-то записать в файл 'zakazy.txt', что может привести к сбою и потере данных. Для решения этой проблемы в PHP имеется функция flock(), на логическом уровне запирающая файл. Если кто-то уже запер этот файл, функция flock() ждет, пока файл освободится и только тогда запирает его.
Можно завести вспомогательный служебный файл, (например, ‘flag.txt’) и использовать как семафор. Перед записью в файл ‘zakazy.txt’ нужно запереть файл ‘flag.txt’ вот так:
$q=fopen(‘flag.txt’,’r’);
flock($q, LOCK_EX);
После того, как запись в файл ‘zakazy.txt’ завершена и он закрыт, нужно отпереть файл ‘flag.txt’ вот так:
flock($q, LOCK_UN);
fclose($q);
Почему нельзя запереть и потом отпереть непосредственно файл ‘zakazy.txt’?

Слайд 28

Дело в том, что чтобы выполнить функцию flock(), нужно сначала открыть файл.

Дело в том, что чтобы выполнить функцию flock(), нужно сначала открыть файл.
Если две PHP-программы открывают файл для чтения (параметр ‘r’), то ничего страшного не происходит - это допустимо. Затем одна из программ выполняет flock(), а вторая ждет, пока файл освободится. Если же две программы попытаются одновременно открыть файл для записи или дозаписи (а именно для этого открывается файл ‘zakazy.txt’), то может произойти сбой и до вызова функции flock() просто не дойдет дело. Именно поэтому в данном примере в качестве семафора используется еще один файл (‘flag.txt’), который открывается для чтения. И, видя, что он закрыт, вторая программа знает, что кто-то в это время пишет в файл ‘zakazy.txt’. Когда же файл ‘flag.txt’ откроется, вторая программа закрывает его и начинает запись в файл ‘zakazy.txt’.

Кроме массивов $_POST и $_GET, содержащих данные, переданные с веб-страницы, в PHP есть еще ассоциативный массив $_SERVER, содержащий данные о компьютере пользователя (например, IP-адрес).

Слайд 29

PHP и MySQL

Базовые действия PHP-программы при работе с MySQL

PHP и MySQL Базовые действия PHP-программы при работе с MySQL Любая программа
Любая программа на языке PHP, которая собирается работать с MySQL базой данных, должна состоять из следующих обязательных базовых шагов:
1. Установить связь с MySQL сервером.
2. Выбрать базу данных для работы.
3. Посылать команды MySQL серверу и получать ответы.
4. Закрыть связь с MySQL сервером.

Слайд 30

Веб-страница, которая устанавливает и закрывает соединение с MySQL сервером

Функция mysql_connect устанавливает связь

Веб-страница, которая устанавливает и закрывает соединение с MySQL сервером Функция mysql_connect устанавливает
с сервером. Первый параметр функции - имя сервера (в нашем случае - “localhost”). Второй параметр – логин пользователя (“vladimir”). Третий параметр – пароль пользователя (“vladimir2013”).
Если соединение не установлено (например, сервер не разрешает этому пользователю доступ к базам данных), то PHP выполнит функцию die() (завершение программы).
Если соединение успешно установлено, то в служебной переменной $link (имя этой переменной можно задать любое) возвращаются параметры соединения с сервером, которые в дальнейшем нам потребуются.
После этого программа выдает на веб-страницу надпись “Соединение установлено” и закрывает соединение с сервером командой mysql_close($link).

Слайд 31

Создание таблицы MySQL

Веб-страница, которая таблицу в базе MySQLВеб-страница, которая таблицу в базе

Создание таблицы MySQL Веб-страница, которая таблицу в базе MySQLВеб-страница, которая таблицу в
MySQL

Команда mysql_select_db это выбор базы данных и mysql_query - запрос к серверу.
Команда mysql_connect() соединяет нас (пользователя) с сервером. Однако на сервере может лежать несколько баз данных и пользователю может быть разрешен доступ к нескольким из них. Поэтому необходимо уточнить, с какой же базой данных мы хотим работать, что и делает команда mysql_select_db(). Первым параметром выступает название базы данных (“lection5”). Вторым параметром нужно указать переменную, которую мы получили в результате выполнения mysql_connect() - $link.

Слайд 32

Как только мы выбрали базу данных, можно создавать в ней таблицу. Заметим,

Как только мы выбрали базу данных, можно создавать в ней таблицу. Заметим,
что все действия над базой данных (создание таблиц, занесение в них данных, изменение данных, поиск данных, удаление данных и т.д.) выполняются в виде запросов к MySQL серверу. Сначала формируется текстовая переменная, в которую помещается текст запроса. Затем содержимое этой текстовой переменной отправляется на сервер командой mysql_query().
Запросом в данном случае является строка:
CREATE TABLE studata (god int, grup char(7), fio char(50));
Здесь “CREATE TABLE” - ключевые слова, по которым сервер поймет, что нужно создать таблицу. “Studata” - название для таблицы. Далее в круглых скобках через запятую перечисляются столбцы, которые должны быть у таблицы. Для каждого столбца обязательно через пробел указывается его название и тип. В данном случае мы указываем серверу, что в таблице должно быть 3 столбца с названиями “god”, “grup” и “fio”. Столбец “god” будет содержать данные типа “int”, то есть целые числа. Столбец “grup” будет содержать строки с максимально возможной длиной в 7 букв каждая. Столбец “fio” будет содержать строки с максимально возможной длиной в 50 букв каждая. Точка с запятой в конце строки запроса – обязательный элемент синтаксиса.

Слайд 33

Результат добавления в базу “lection5” таблицы “studata”

Результат добавления в базу “lection5” таблицы “studata”

Слайд 34

Добавление строки в таблицу

Строки в таблицу добавляются такими же запросами-командами к серверу

Добавление строки в таблицу Строки в таблицу добавляются такими же запросами-командами к
с помощью функции mysql_query(), только с другим текстом запроса.

Программа, которая добавляет в таблицу “studata” строчку, в которой god=1996, grup=”519-Б”, а fio=“Иванов Иван Петрович”.

Здесь запросом является строка:
INSERT INTO studata VALUES (1996, '519-Б', 'Иванов Иван Петрович');
“INSERT INTO” - ключевые слова, которые говорят серверу, что нужно добавить строку в таблицу. “Studata” - название таблицы, в которую нужно добавлять данные. После ключевого слова “VALUES” в круглых скобках через запятую перечисляются значения столбцов. Заканчивается запрос точкой с запятой.

Слайд 35

Алгоритм действий остается одним и тем же:
1. Установили связь с

Алгоритм действий остается одним и тем же: 1. Установили связь с сервером.
сервером.
2. Выбрали базу данных.
3. Послали команду серверу.
4. Закрыли сеанс связи.
Если ошибки проверять не нужно, то текст программы можно упростить, например, до такого

Слайд 36

Создание веб-страницы с вводом данных, которые затем передадутся в
PHP-программу на сервере,

Создание веб-страницы с вводом данных, которые затем передадутся в PHP-программу на сервере,
которая добавит эти данные в базу MySQL

Эта веб-страница при нажатии на кнопку методом POST отправляет данные про группу, фамилию и год рождения студента на сервер программе “ex5_06.php”.

Слайд 37

Данная программа получает пришедшие от веб-страницы данные из стандартного массива $_POST и

Данная программа получает пришедшие от веб-страницы данные из стандартного массива $_POST и
затем формирует из них запрос для MySQL сервера на вставку в таблицу новой строки.
NOTE!!! Логин и пароль пользователя для доступа к MySQL серверу и базе данных находится в PHP-программе “ex5_06.php”, которая лежит на сервере. Пользователь может видеть только результат выполнения этой программы (результат команд echo), но не ее исходный текст. Поэтому пароль и логин находятся в полной безопасности, хотя и используются в программе.

Программа “ex5_06.php” и результат ее работы

Слайд 38

Поиск и извлечение данных из таблицы

Проще всего извлечь из базы

Поиск и извлечение данных из таблицы Проще всего извлечь из базы данных
данных всю таблицу целиком

В данном примере запросом к серверу является строка
SELECT * FROM studata;
Здесь ключевое слово “SELECT” сообщает серверу, что необходимо искать данные в таблице, а служебный символ “*” означает, что искать нужно во всех столбцах. Результат запроса поступает в переменную $r. Если ничего не найдено (например, такой таблицы нет или она пуста), то в $r будет записан ноль. Иначе же там будет двумерный массив, содержащий найденные строки таблицы. Для работы с результатами поиска данных в таблице в PHP есть несколько похожих функций. Например, $q=mysql_fetch_row($r). Она последовательно извлекает из результатов поиска $r по одной строке и заносит их в переменную $q.
Когда строки закончатся, в $q будет занесен ноль и цикл while в примере остановится. $q представляет собой массив, чьи индексы являются номерами, начинающимися с нуля. Поэтому, чтобы обратиться к элементу из первого столбца таблицы, нужно написать $q[0] (год рождения) и т.д.

Слайд 39

Поиск с условиями

Чтобы программа выводила не всю таблицу, а лишь

Поиск с условиями Чтобы программа выводила не всю таблицу, а лишь тех,
тех, кто родился в 1996-м году, нужно в запрос добавить ключевое слово “WHERE” и условие поиска, вот так:
SELECT * FROM studata WHERE god=1996;

Слайд 40

Модификатор “LIKE” задает шаблон для столбца “fio”. Символ “%” в начале и

Модификатор “LIKE” задает шаблон для столбца “fio”. Символ “%” в начале и
конце шаблона означает, что перед именем “Сергей” может быть что угодно и после имени “Сергей” может быть, что угодно. Если бы мы хотели, чтобы имя Сергей обязательно завершало текст, то шаблон выглядел бы так: ‘%Сергей’.
Условия при поиске могут быть сколь угодно сложными (можно использовать логические связки “or”, “and”). Можно извлекать из таблицы не все столбцы, а лишь указанные нами.

Поиск по шаблону

Вместе с ключевым словом “WHERE” можно использовать, например, модификатор “LIKE”. Здесь строка запроса:
SELECT * FROM studata WHERE fio LIKE '%Сергей%';

Слайд 41

Изменение и удаление данных в таблице

Здесь запросом является:
UPDATE studata SET

Изменение и удаление данных в таблице Здесь запросом является: UPDATE studata SET
god=1994, grup='529‘ WHERE god<1996;
Ключевое слово “UPDATE” говорит серверу, что нужно изменить данные, после ключевого слова “SET” через запятую перечисляются названия столбцов, которым нужно изменить данные и их новые значения. После ключевого слова “WHERE” следует условие. Данные будут изменены для ВСЕХ строк таблицы “studata”, для которых это условие выполняется.
Удаление данных происходит по запросам, похожим на запросы поиска, только ключевым словом является “DELETE”. Например, следующий запрос удалит из таблицы строку, где столбец “fio” содержит строку “Нос Олег”:
DELETE FROM studata WHERE fio=’Нос Олег’;
Будьте осторожны. Если криво задать условие WHERE, то можно одной командой удалить из таблицы все строки.

Слайд 42

Кодировки русского текста при работе с MySQL

Мы можем указать серверу в какой

Кодировки русского текста при работе с MySQL Мы можем указать серверу в
кодировке будут присылаться данные, в какой кодировке их хранить, в какой кодировке возвращать ответы сервера.

Пусть мы хотим, чтобы сервер принимал, хранил и возвращал данные в кодировке “Windows-1251”. Тогда при создании таблицы вместо, например, запроса
CREATE TABLE stuff (fi char(10), tel char(10));
пишите:
CREATE TABLE stuff (fi char(10), tel char(10)) DEFAULT CHARACTER SET cp1251 COLLATE cp1251_general_ci;
Это заставит сервер сохранять и возвращать данные в кодировке “Windows-1251”.
Еще в тексте программы, которая будет посылать запросы к серверу, нужно после выбора базы данных командой mysql_select_db() добавить запрос:
mysql_query("SET NAMES 'cp1251'");
После этого мы можем быть уверены, что вся работа с базой данных MySQL осуществляется с использованием кодировки “Windows-1251”.

Слайд 43

Проверка существования таблицы

Как узнать, существует ли таблица, например, с именем

Проверка существования таблицы Как узнать, существует ли таблица, например, с именем “olga”
“olga” в базе данных MySQL? Например, можно отправить запрос на сервер командой mysql_query():
SHOW TABLES LIKE "olga";
Здесь “SHOW TABLES” говорит серверу, что нужно вернуть названия таблиц, а после “LIKE” нужно указать имя таблицы. Если таблица не существует, то сервер вернет в ответ ноль.

Слайд 44

Первичный и внешний ключи и некоторые другие тонкости

При создании таблиц кроме

Первичный и внешний ключи и некоторые другие тонкости При создании таблиц кроме
имени и типа столбцов для них можно указывать еще и модификаторы:
NOT NULL - поле не может быть пустым;
PRIMARY KEY - поле будет первичным ключом (иметь уникальное значение);
AUTO_INCREMENT - при вставке новой записи значение этого поля будет автоматически увеличено на единицу;
DEFAULT - задает значение, которое будет использовано по умолчанию.
Если мы скажем MySQL, что столбец с именем “fio” является первичным ключом, то это приведет к тому, что сервер не будет нам позволять записывать две полностью одинаковые фамилии в две разные строки таблицы. Это может быть полезно, ведь в этом случае при удалении и модификации строк с указанием в WHERE конкретной фамилии, мы можем быть уверены, что изменим лишь одну строку таблицы.
В MySQL предусмотрены еще внешние ключи для связи таблиц между собой. Если столбец назначен внешним ключом (FOREIGN KEY), то указывается связанный с ним столбец другой таблицы, и сервер не будет разрешать добавлять в таблицу данные со значениями, которых нет в том связанном столбце.

Слайд 45

Традиционное взаимодействие браузера и сервера подразумевает отправку браузером запроса на сервер (например,

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