Информатика. Лекции. Краткая история компьютерной техники Первые компьютеры: Z3, Colossus, eniac

Вид материалаЛекции

Содержание


PHP — работа с базами данных
Perl — работа с базами данных
ASP — работа с базами данных
Подобный материал:
1   ...   11   12   13   14   15   16   17   18   19


...



...



Файл frame.html








Подобная конструкция используется на web-узле интернет-магазина Болеро

Часто возникает прикладная задача — построить на основе web-страницы специальную упрощенную версию для печати. Для этого достаточно подготовить два варианта верхней и нижней шапок, один — для экранного отображения, другой — для печати. В качестве переключения между этими вариантами в примере используется QUERY_STRING.

Ниже приведены принципиальные структуры для самой страницы (file.html) и для верхней и нижней шапок (top.html и bottom.html).

Структура самой страницы (file.html):


тело документа


Структура top.html и bottom.html:


шапка для печати

шапка для просмотра


Тогда ссылка на странице будет иметь вид:

ссылка скрыта

При построении на сайте системы навигации в виде «меню», часто перед программистом стоит задача — «выключить» из навигации (отметить другим цветом, полностью убрать) пункт, в котором находится пользователь. С помощью SSI эта задача легко решается, если использовать переменную DOCUMENT_URI. Каждый пункт меню следует включать в код web-страницы следующим образом:

some link/" -->
ссылка скрыта

Тогда при попадании на страницу “some link” соответствующий пункт меню будет убран.

Часто также необходимо менять весь внешний вид web-страницы в зависимости от того, откуда пришел посетитель. Это легко делается условным оператором:

somesite.ru/" -->
операции по изменению внешнего вида


Нередко полезная возможность — борьба с различными версиями браузеров, чтобы web-страница выглядела одинаково вне зависимости от того, чем она просматривается.

Средствами SSI можно сделать проверку версий браузеров и выдавать различные варианты HTML-разметки. Для этого анализируется переменная HTTP_USER_AGENT, в которой содержится информация о типе и производителе браузера:

|| $HTTP_USER_AGENT=/Mozilla\/5/" -->
Если версия браузера не ниже 4 или 5, то вывести вариант дизайна,
использующий, например, DHTML

Здесь вывести простой дизайн


Подобная конструкция использовалась для построения фреймовой структуры и вывода внутреннего меню (для Netscape — на DHTML, для MSIE — на ActiveX) на web-сайте журнала «ОМ».

Как известно, баннерные системы предлагают включать некоторую случайную величину в URL скрипта показа, чтобы защитить его от кэширования.

С помощью SSI это легко сделать, взяв в качестве случайно величины количество секунд, прошедших с 1970 года:

Russian LinkExchange code START -->

Russian LinkExchange code END -->

Часто шаблоны используют таким образом, чтобы можно было включать различное содержимое. Обычно с помощью SSI это делается следующим образом. Есть один файл, который описывает структуру страницы, а основное содержание включается директивой:

Тогда ссылки будут иметь вид:

href="www.somesite.ru/index.html?page1"
href="www. somesite.ru/index.html?page2"

Проблема возникает, если пользователь набирает адрес «напрямую», например, site.ru, когда. QUERY_STRING="". Проблема легко решается:


Здесь default.html — страница корневого индекса (оглавления) или просто заглушка.

PHP — работа с базами данных

Связка PHP+MySQL заслужила признание не одного web-программиста из-за своей простоты и мощности.

Подключение к базе данных в PHP осуществляется при помощи функции mysql_connect:

$connect = mysql_connect(<хост>, <логин>, <пароль>).

Переменная $connect —указатель на место, где хранится информация о подключении к базе данных.

Механизм выполнения запросов к базе данных такой же, как и у функции соединения: функции передаются параметры запроса и (если надо) соединения, а результат запроса записывается в специальную переменную:

$result = mysql_db_query(string база данных, string запрос [, переменная соединения]);

или

$result = mysql_query(string запрос [, переменная соединения]);

Но чтобы использовать функцию mysql_query, в которой база данных не указывается, надо предварительно выбрать используемую базу данных:

mysql_select_db(string база данных);

Переменная $result — это указатель на результат выполнения запроса. Получить строки запроса можно через функции mysql_fetch_row и mysql_fetch_array:

echo "";

while ($row = mysql_fetch_array($result))

echo "";

echo "
", $row["field1"], "", $row["field2"], "
";

Функция mysql_fetch_array выдает массив, индексами которого являются имена полей, а функция mysql_fetch_row выдает массив, индексы которого — числа, начиная с 0.

Выполнение команд DELETE и UPDATE языка SQL производится аналогичным образом — с помощью команды mysql_query (mysql_db_query). Но в данном случае функция не возвращает результата:

mysql_query("DELETE FROM sometable WHERE id=...");

Сообщение о последней ошибке можно получить с помощью функции mysql_error:

echo "Ошибка базы данных MySQL:", mysql_error();

Если результат функции записывается в переменную, можно проверить саму переменную:

$result = mysql_query($request);

if (!$result)

echo "Ошибка базы данных MySQL:", mysql_error();

else {

echo "";

while ($row = mysql_fetch_array($result))

echo "";

echo "
", $row["field1"], "", $row["field2"], "
";

};

В противном случае понадобится подобная конструкция:

$request = "UPDATE (...)";

mysql_query($request);

if (!mysql_error())

echo "Обновление данных прошло успешно!";

else echo "Ошибка базы данных MySQL:", mysql_error();

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

Perl — работа с базами данных

Работа с базами данных в Perl осуществляется с помощью стандартного интерфейса программирования DBI, обеспечивающий доступ к большинству существующих СУБД с помощью подключаемых драйверов. Схемы подключения к различным СУБД (точнее, правила формирования имени источника данных) могут незначительно различаться. В этом примере рассмотрим работу с использованием MySQL.

Первый шаг — подключение DBI:

use DBI;

Далее — подключение к базе данных:

my $dbh = DBI->connect('DBI:mysql:hostname:base:port', 'user,

'password, { RaiseError => 1, AutoCommit => 1});

Здесь $dbh — переменная для подключения к базе данных, используемая в дальнейшем, DBI:mysql:hostname:base:port — имя источника данных, включающее имя драйвера, имя хоста, базы, к которой мы подключаемся, и номер порта, на который настроен sql-сервер, user/password — имя и пароль пользователя, имеющего доступ к базе.

По завершении работы предпочтительно отключиться от базы данных:

$dbh->disconnect();

Существуют два способа работы с базой данных. Во-первых, если нужно только передать информацию в базу, можно использовать метод do, параметром которого является строка SQL-запроса:

$dbh->do("insert into mytable values (1,1)");

Во-вторых, для получения информацию из базы, используется следующая процедура:

1. Создаем переменную команды с помощью метода prepare:

my $sth = $dbh->prepare ("select * from mytable where field1>1");

2. Выполняем команду:

$sth->execute();

3. Получаем данные (используется один из четырех методов):

fetchrow_array

fetchrow_hash

fetchrow_arrayref

fetchrow_hashref

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

while(my $hash_ref = $sth->fetchrow_hashref)

{

foreach my $fieldname(keys %$hash_ref)

{

print "$fieldname: $hash_ref->{$fieldname }\n";

}

print "\n";

}

4. Освобождаем ресурсы:

$sth->finish();

При передаче текстовой информации в базу рекомендуется предварительно обработать ее методом $dbh->quote(), расставляющим кавычки и управляющие символы в строке в соответствии с правилами используемой СУБД. Кроме того, возможно использование привязки параметров в виде:

$sth = $dbh->prepare("select * from mytable where field1=?");

$sth->bind_param(1, "значение параметра");

$sth->execute();

либо

$sth = $dbh->prepare("select * from mytable where field1=?");

$sth->execute("значение параметра");

В этом случае в методе quote необходимости нет, он вызывается автоматически.

Использование привязки параметров особенно эффективно при выполнении нескольких однотипных запросов подряд. В этом случае достаточно один раз подготовить запрос с помощью функции prepare, и выполнять его с помощью функции execute столько раз, сколько необходимо.

ASP — работа с базами данных

С помощью ASP легко и просто работать с любыми базами данных. Это делается через две промежуточные технологии — ODBC и ADO.

ODBC позволяет организовать доступ к любым базам данных через унифицированный интерфейс с помощью языка SQL. Специфика конкретных баз данных учитывается при помощи специальных драйверов. Такие драйверы существуют для всевозможных баз данных (в частности SQL Server, Oracle, Access, FoxPro).

Поддержка ODBC обеспечивается на уровне операционной системы Windows (NT). Настройка — через вкладку ODBC в Панели управления. Базовым понятием является источник данных или data source. Источник данных — это совокупность сведений о базе данных, включая ее драйвер, имя компьютера и файла, а также различные параметры.

Чтобы пользоваться базой, необходимо создать для нее источник данных. Важно, чтобы источник данных был «системным», а не «пользовательского». После этого достаточно лишь знать имя источника данных.

В настоящее время ODBC отступает перед натиском технологии OLE DB. Хотя на практике это практически ничего не меняет. Вместо имени источника данных теперь используется Connection String, в которой указывается имя ODBC-драйвера и все его параметры.

ADO — это совокупность объектов, доступных из ASP и позволяющих обращаться к источникам данных ODBC или OLE DB. Из объектов ADO на практике требуются лишь два объекта — Connection, представляющий соединение с базой данных, и Recordset, представляющий набор записей, полученный от источника.

Механизм работы с базой данных таким образом следующий. Сначала нужно открыть соединение (Connection), затем привязать к нему Recordset, и, наконец, используя методы объекта Recordset, обработать данные. Например:

<%
Dim Conn, RS, strSQL, strOut
strOut = ""
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Data-Source-Name"
Set RS = Server.CreateObject("ADODB.Recordset")
strSQL = "SELECT * FROM AGENTS ORDER BY USER_ID"
RS.Open strSQL, Conn
RS.MoveFirst
strOut = strOut & "
Here is the data:"
strOut = strOut & ""
strOut = strOut & ""
Do While Not RS.EOF
strOut = strOut & ""
strOut = strOut & ""
strOut = strOut & ""
strOut = strOut & ""
RS.MoveNext
Loop
strOut = strOut & "
USER_IDName
" & _
RS.Fields("USER_ID") & "
" & _
RS.Fields("NAME") & "
"
strOut = strOut & "