1 Введение в
PHP,
MySQL.
Общие данные о
серверных языках программирования и базах данных.
Сервер — компьютер,
предоставляющий общие ресурсы пользователям (клиентам) сети. Под клиентами
понимаются программы и приложения, взаимодействующие с сервером:
Internet
explorer,
ICQ,
Outlook
и др. Взаимодействие сервера с браузером происходит следующим образом:
сервер и браузер общаются, посылая друг другу запросы по особому протоколу -
HTTP. Соединение может инициировать только браузер. Он посылает серверу
запрос - показать такой-то файл. Сервер клиенту файл посылает.
Только так и
происходит. Клиент запросил - сервер отдал. И забыл сразу о клиенте. Отсюда
становится понятным ответ на вопрос, можно ли точно узнать, сколько
пользователей сейчас на сайте. Нельзя, потому, что "на сайте" нет ни одного.
Они соединяются, запрашивают страницу, и отсоединяются.
Запрос браузера
выглядит примерно так:
http://www.mysite.ru/index.htm. Это команда серверу с именем
www.mysite.ru
отослать файл index.htm браузеру. Запрос браузера называется url-запросом,
он предназначен только для определенного сервера. Для того чтобы запрос
дошел до адресата существует служба DNS. Сетевое программное обеспечение,
маршрутизаторы и другая сетевая аппаратура работают c IP-адресами.
Преобразования "доменное имя в IP адрес" ("прямое") выполняются службой DNS
путем поиска в доменном дереве нужного имени и извлечения связанной с этим
именем информации требуемого типа (IP-адрес), существует также обратное
DNS-преобразование "IP адрес в доменное имя".
Существуют клиентские и
серверные языки программирования. Клиентские выполняются на стороне клиента,
а серверные соответственно на стороне сервера. Существенным недостатком
клиентских языков программирования является то, что для выполнения программы
необходимо передавать браузеру весь программный код приложения, который
потом будет обработан и выполнен. В случае же с серверным языком достаточно
передать программе входные параметры (значения исходных переменных), и
сервер вернет нам результат работы. Таким образом, при написании сложных
программ или при необходимости работы с базой данных используются серверные
языки программирования.
Принцип работы
серверного приложения:
1.
посылка браузером
URL-запроса
www.mysite.ru/index.php
2.
сервер проверяет наличие необходимого файла
3.
получение файла
index.php
из файлового хранилища (Жесткого
диска). Этот файл имеет расширение
PHP
и в нем может содержаться программный модуль (скрипт), что является командой
для сервера перед отправкой браузеру осуществить обработку файла в
интерпретаторе PHP.
4.
отправка файла
index.php
на обработку в интерпретатор.
5.
запрос к базе данных (если есть)
6.
информация, возвращаемая базой данных на запрос
7.
результат работы интерпретатора –файл, возвращается серверу
8.
передача файла клиенту
Стоит еще раз отметить,
что при обработке обычного файла HTML выполняются только операции 1, 2, 3 и
8. И только файлы, имеющие расширение PHP обрабатываются интерпретатором.
Программа PHP находится
прямо в файле PHP вместе HTML тэгами, это команды заключенные в специальные
тэги, интерпретатор, встретив такой тэг, выполняет записанные в нем команды.
Код выполняется построчно сверху вниз. Результат выполненных команд
интерпретатор записывает в конечный файл.
Это выглядит так:
Текст, заключенный в
тэге <?php
?> интерпретатор воспринял как программу и выполнил команду
echo,
которая помещает на своё место в конечном файле строку. В данном случае
строку «Привет».
Таким образом, возможно
формирование выходного файла при помощи программы, которая в определенные
места текста вставит результат своей работы.
<?php
$a=5;
$b=10;
$c=$a*$b;
echo(’5
умножить на 10 равно ’.$c);
?>
В результате на месте
этого тэга появится строка: 5 умножить на 10 равно 50. Таким образом, задача
программирования на PHP сводится к формированию
HTML
кода при помощи средств
PHP.
Важное замечание:
Отличие веб-приложения от
обычной программы.
Начиная писать программы для веба, многие начинающие
программисты сталкиваются с такой ошибкой. Они рассматривают систему
браузер-сервер, как обычное приложение. Интерактивное. Нажал кнопку -
система среагировала. Провел мышкой - среагировала. Вся информация, которая
доступна клиенту - доступна и программе, программа все время находится в
памяти.
Так вот, в веб-программировании это не так!.
В момент, когда пользователь видит перед собой страницу
и начинает совершать какие-то действия с ней, PHP уже завершил работу!
И пользователь взаимодействует не с PHP скриптом, а со своей страницей HTML,
которую он получил в браузер. Результатом работы скрипта на PHP в
большинстве случаев является обычный текст. Текст HTML страницы. Которая
отдается браузеру и показывается им, как обычный HTML. Вы сами можете в этом
убедиться, написав в скрипте
<?
echo
"Привет, <b>Вася!</b>";
?>;
А потом просмотрев в браузере исходный текст полученной страницы. Никаких
тегов PHP там нет! Только: Привет,
<b>Вася!</b>
РНР выполняется на сервере. Браузер посылает серверу
запрос на страницу с php кодом. Сервер отдает эту страницу на исполнение
интерпретатору PHP, интерпретатор генерирует HTML код, отдает серверу, а
сервер посылает клиенту. Никакого РНР кода в браузер не попадает (это
важно! Это значит, что увидеть исходный код PHP скрипта невозможно!).
Единственный способ отправить что-то скрипту - это кликнуть по ссылке или
нажать на кнопку в форме. Так, чтобы РНР обрабатывал какие-то действия
пользователя в браузере - невозможно. РНР остался на сервере, ждать новых
запросов с данными для обработки. PHP, но не скрипт! Скрипт, который
выполнялся, отдавая пользователю страницу, завершил работу. Все данные,
которые были в нем - пропали. Именно поэтому, если какая-то переменная
нужна при последующих вызовах скрипта, ее надо этому скрипту передать снова.
Возможности PHP,
принцип работы.
Есть четыре способа выхода из HTML и
перехода в "режим PHP кода":
1. <?
echo("простейший
способ, инструкция обработки
SGML
"); ?>
2.
<?php
echo("при
работе с
XML
документами делайте так "); ?>
3.
<script language="php">
echo ("некоторые редакторы (подобные FrontPage) не
любят обрабатывающие инструкции");
</script>;
4.
<% echo("От PHP 3.0.4 можно факультативно применять ASP-тэги"); %>
Разделение инструкций
Инструкции
(утверждения) разделяются также как в C или Perl - точкой с запятой.
Закрывающий тэг (?>)
тоже подразумевает конец утверждения, поэтому следующие записи эквивалентны:
<php
echo
"строка 1";
echo
"строка 2";?>
<php
echo
"строка 1" ?> <php
echo
"строка 2" ?>
Переменная это
поименованная область памяти, в которой хранится некоторое значение.
Обратившись к переменной по имени вы получите её значение. Для инициализации
переменной в PHP вы просто присваиваете ей значение. Имя переменной
начинается со знака $ и может состоять из любых букв латинского алфавита,
знака подчеркивания и цифр, причем первым символом в имени должна быть
именно буква. Регистр букв имеет значение: $a
и $A
разные переменные.
$a=5;
$b=”Строка”;
Массив может
инициализироваться одним из двух способов: последовательным присвоением
значений, или посредством конструкции array().
При последовательном
добавлении значений в массив вы просто записываете значения элементов
массива, используя пустой индекс. Каждое последующее значение будет
добавляться в качестве последнего элемента массива.
$names[] = "Jill"; // $names[0] = "Jill"
$names[] = "Jack"; // $names[1] = "Jack"
Как в C и Perl, элементы массива
нумеруются начиная с 0, а не с 1.
Выражения
Выражения - это
краеугольный камень PHP. В PHP почти всё является выражениями. Простейший и
наиболее точный способ определить выражение - это "что-то, имеющее
значение".
Простейший пример,
приходящий на ум это константы и переменные. Когда вы печатаете "$a = 5", вы
присваиваете значение '5' переменной $a. '5', очевидно, имеет значение 5,
иными словами'5' это выражение со значением5 (в данном случае'5' это
целочисленная константа).
После этого
присваивания вы считаете значением $a 5, также, если вы напишете $b = $a, вы
будете ожидать того же как, если бы вы написали $b = 5. Другими словами, $a
это также выражение со значением 5.
Очень распространённый
тип выражений это выражения сравнения. Эти выражения имеют значение 0 или 1
(означает ложь или истину соответственно). PHP поддерживает > (больше, чем),
>= ( больше или равно), = = (равно), != (не равно), < (меньше, чем) и <=
(меньше или равно). Эти выражения в основном используются внутри условий,
например оператора IF.
IF
Структура IF это одна
из важнейших возможностей многих языков, включая PHP. Она позволяет
организовать выполнение фрагментов кода по условию.
if (условие) {действие1;} else {действие2};
Если выполняется
условие, то программа выполнит действие 1, если не выполняется – действие 2.
Следующий пример
выведет фразу «а больше б» если $a больше $b:
if ($a > $b) {echo ’а больше б’;};
Зачастую Вам требуется
исполнить больше чем одно выражение по условию. Конечно, не надо окружать
каждое выражение конструкцией IF. Вместо этого вы можете сгруппировать
несколько выражений в блок выражений. К примеру, следующий код не только
выведет фразу, но и присвоит значение $a переменной $b:
if ($a > $b) { echo ’а больше б’; $b = $a; };
Выражение IF может
иметь неограниченную степень вложенности в другие выражения IF, что
позволяет Вам эффективно использовать выполнение по условию различных частей
программы.
Зачастую Вам требуется
исполнить одно выражение, если соблюдается какое-либо условие и другое
выражение в противном случае. Вот для этого применяется ELSE. ELSE расширяет
возможности IF по части обработки вариантов выражения, когда оно равно
FALSE. Данный пример выведет фразу ‘а больше б ’ если $a больше $b, и ‘а не
больше б’ в противном случае:
if ($a > $b) {echo "а больше б"; } else {echo "а не больше б";};
Выражение ELSE
выполняется только если выражение IF равно FALSE.
ELSEIF, как и следует
из его названия, является комбинацией IF и ELSE. ELSEIF как и ELSE позволяет
выполнить выражение, если значение IF равно FALSE, но в отличие от ELSE оно
выполнится только если выражение ELSEIF равно TRUE. К примеру, следующий код
выведет ‘а больше б ’ если $a>$b,
‘а равно б ’ если $a==$b,
‘а меньше б ’ если $a<$b:
if ($a > $b) {echo " а больше б ";}
elseif ($a == $b) {echo " а равно б ";}
else {echo " а меньше б ";};
Внутри одного выражения
IF может быть несколько ELSEIF. Первое выражение ELSEIF (если таковые есть),
которое будет равно TRUE, будет выполнено.
Выражение ELSEIF будет
выполнено только если выражение IF и все предыдущие ELSEIF равно FALSE, а
данный ELSEIF равен TRUE.
FOR
Циклы FOR - наиболее
мощные циклы в PHP. Они работают подобно их аналогам в C. Синтаксис цикла
FOR :
FOR (выражение1; выражение2; выражение3) {операции;};
Первое выражение
безусловно вычисляется (выполняется) в начале цикла.
В начале каждой
итерации вычисляется выражение2. Если
оно равно TRUE, то цикл продолжается и выполняются вложенный(е) оператор(ы).
Если оно равно FALSE, то цикл заканчивается.
В конце каждой итерации
вычисляется (исполняется) выражение3.
Каждое из этих
выражений может быть пустым. Если выражение2 пусто, то цикл продолжается
бесконечно (PHP по умолчанию считает его равным TRUE, как и С). Это не так
бесполезно, как могло бы показаться, так как зачастую вам требуется
закончить выполнение цикла используя оператор BREAK в сочетании с логическим
условием вместо использования логического выражения в FOR.
for ($i=1; $i<=10; $i=$i+1)
{echo $i;};
Этот код выведет числа
от 1 до 10.
INCLUDE
Оператор INCLUDE
вставляет и выполняет содержимое указанного файла. Когда файл исполняется,
парсер пребывает в "режиме HTML", то есть будет выводить содержимое файла,
пока не встретит первый стартовый тег PHP (<?).
include(’file.php’);
Операторы
Арифметические
операторы
Помните основную
арифметику из школы? Эти операторы работают подобным образом
пример |
название |
результат |
$a + $b |
Сложение |
Сумма $a и $b. |
$a - $b |
Вычитание |
Вычитает $b из $a. |
$a * $b |
Умножение |
Произведение $a и $b. |
$a / $b |
Деление |
Деление $a на $b. |
$a % $b |
Остаток деления |
Остаток от деления $a на $b. |
Оператор деления("/")
возвращает целую величину(результат целочисленного деления) если оба
оператора - целые (или строка преобразованная в целое). Если каждый операнд
является величиной с плавающей запятой, выполнится деление с плавающей
запятой.
Операторы строк
B действительности есть
только один оператор - оператор конкатенации (".").
$a = "Hello ";
$b = $a."World!"; // теперь $b = "Hello World!"
Операторы
присваивания
Основным оператором
присваивания является "=". Вы могли подумать что это "равно". Но это не так.
В действительности это означает что левый операнд получает значение
выражения в правых (собирательное присваивание).
Значением выражения
присваивания является присваиваемая величина. Так что если "$a = 3", то это
3. Это позволит Вам делать некоторые мудреные вещи:
$a = ($b = 4) + 5; // теперь $a равно 9, а $b стало равным 4.
Операторы Сравнения
пример |
название |
результат |
$a == $b |
равно |
истина, если $a эквивалентно $b. |
$a != $b |
Не равно |
Истина, если $a не эквивалентно $b. |
$a < $b |
Меньше чем |
Истина если $a меньше чем $b. |
$a > $b |
Больше чем |
Истина если $a больше $b. |
$a <= $b |
Меньше или равно |
Истина, если $a меньше или равно $b. |
$a >= $b |
Больше или равно |
Истина, если $a больше или равно $b. |
Внешние переменные.
Для взаимодействия с
пользователем PHP
скрипту необходимо принимать от него
данные, например: ключевое слово для поиска в базе данных нужного товара,
условия сортировки, дата интересующей нас новости и тд.
Передавать данные
скрипту можно только этими способами:
GET
Данные передаются в
строке URL-запроса
www.mysite.ru/index.php?переменая1=значение1&переменая2=значение2& ... &переменнаяN=значениеN
После имени файла
ставится знак вопроса (?) далее идёт имя переменной и её значение.
Переменные отделяются друг от друга знаком амперсанд (&).
Получение внешней
переменной происходит следующим образом: на сервер приходит
URL-запрос
и он передает его PHP-интерпретатору,
который выделяет из строки запроса переменные и помещает их в массив $_GET[]
где индексом элемента является имя переданной переменной, значение
соответствующего элемента – значением переменной.
URL-запрос:
www.mysite.ru/index.php?a=5
код:
echo $_GET[’a’];
URL-запрос:
www.mysite.ru/index.php?s=Привет
код:
echo $_GET[’s’];
URL-запрос:
www.mysite.ru/index.php?a=5&s=Привет
код:
$var1=$_GET[’a’];
$var2=$_GET[’s’];
echo
$var1.$var2;
URL-запрос можно
увидеть в строке адреса, он формируется при помощи гиперссылок.
<a
href="untitled.php?a=5">Передать</a>
Имена переменных в
запросе не начинаются со знака $ и строковые значения не берутся в кавычки.
Переменные в запросе
не имеют ничего общего с
PHP
их даже нельзя назвать переменными,
это просто набор символов, записанных по определенным правилам,
которые затем читает интерпретатор.
POST
Этот метод может
использоваться только при передачи данных из форм.
<form
action="index.php" method="post">
<input name="a" type="text" value="Привет">
<input type="submit" name="s" value="Отправить">
</form>
Как видно из примера в
тэге формы указывается атрибут
method
он может принимать значение
post
и
get.
Получение внешней
переменной осуществляется при помощи массива $_POST[]
аналогично методу GET.
echo
$_POST['a'];
выведет «Привет». У
каждого поля есть аргументы:
type
– тип поля, name
- имя переменой, value
– её значение.
Передача переменных
происходит при переходе по ссылке (метод get) или при нажатии на кнопку в
форме (метод post).
Листинг1:
-
<?php
-
$x=5;
-
$y=8;
-
if ($_GET['a']==1)
-
{$z=$x*$y;}
-
else
-
{$z=$x+$y;};
-
?>
-
<html>
10.
<head>
11.</head>
12.<body>
13.<a
href="page.php?a=1">Умножить</a>
14.<a
href="page.php?a=2">Сложить</a>
15.<?php echo $z;?>
16.</body>
17.</html>
Приведенный ниже
листинг представляет собой страницу page.php с кодом, на которой имеются две
ссылки. При переходе по ссылке Умножить отображается произведение переменных
$x и $y, а при переходе по ссылке Сложить - их сумма.
У этого кода есть
недостаток: при первом посещении страницы
page.php,
когда в строке адреса будет написано
www.mysite.ru/page.php
переменная (а) в
url-запросе
не будет существовать, соответственно при обращении в строке 4 к элементу
массива $_GET[‘a’]
возникнет ошибка. Для избежания подобных ситуаций, осуществляется проверка
вводимых данных. Если внешняя переменная существует, то она используется,
если нет, то либо ей присваивается значение по умолчанию, либо не
выполняется никаких действий. Для таких целей рекомендуется использовать
буферные переменные.
if
(isset($_GET['a']))
{$s=$_GET['a'];} else {$s=1;};
if
($s==1)
{$z=$x*$y;}
else
{$z=$x=$y;};
Модифицированный код, в
нём переменной $s присваивается значение внешней переменной в том случае
если она существует, если же она не существует то присваивается значение по
умолчанию = 1. Далее буферная переменная используется для проверки условия
(умножить/сложить).
Следующий листинг
представляет собой программу, которая берет числа для умножения или сложения
из полей форм.
Листинг 2:
-
<?php
-
if (isset($_GET['s']))
-
{$x=$_GET['a'];
-
$y=$_GET['b'];
-
if ($_GET['s']=="сложить")
-
{$z=$x+$y;}
-
else
-
{$z=$x*$y;};
-
}
10.
else
11.
{$z=0;};
12.
?>
13.
<html>
14.
<head>
15.
</head>
16.
<body>
17.
<form name="form" method="get">
18.
число а: <input type="text" name="a"><br>
19.
число б: <input type="text" name="b"><br>
20.
<input type="submit" name="s" value="сложить">
21.
<input type="submit" name="s" value="умножить">
22.
</form>
23.
<?php echo $z; ?>
24.
</body>
25.
</html>
Надо отменить что при
нажатии на кнопку submit
передаются все переменные формы. При
наличии двух кнопок с одинаковым именем передаётся значение той, которая
была нажата.
|