Авторизация пользователей

advertisement
Система авторизации пользователей
Для пользователей, которые уже зарегистрированы в системе, должна быть
предусмотрена возможность авторизации, т.е., входа в магазин по логину и паролю.
Если введены неверный логин и/или пароль, следует сообщить об этом. Если логин и
пароль верные, пользователю следует предоставить возможность корректировки ранее
введенных (и хранящихся в серверной базе) данных (ФИО, адреса, e-mail и т.п.).
Покупатель
Главное меню
Форма
авторизации
Успешная
авторизация
Неуспешная
авторизация
Доступ к защищенным разделам сайта, в
т.ч., просмотру и корректировке личных
данных
Форма авторизации обычно постоянно присутствует на всех страницах сайта.
Авторизация, как правило, бывает основана на использовании ключиков (Cookies)
Cookies, или, как их называют по-русски, ключики, представляют собой
именованные кусочки информации, которые web-сервер может сохранить на
клиентском компьютере. Рассмотрим коротко процесс передачи ключиков между
сервером и клиентом. Он состоит из следующих шагов:
1. Сервер передает информацию о ключике, который он хочет создать: имя,
значение, срок действия, имя домена (ключик всегда создается для конкретного
домена) в служебной части HTML-страницы, в виде строки заголовка (header).
2. Браузер клиента записывает ключик в специальный файл на компьютере клиента.
Ключик будет храниться там, пока не истечет срок его действия (для хранимых
ключиков), либо пока браузер не будет закрыт (для временных ключиков).
3. При формировании запроса к web-серверу о получении какой-либо страницы
браузер отправляет в заголовке запроса все ключики этого домена, которые
хранятся на клиентском компьютере.
4. Сервер вместе с запросом страницы получает информацию о ключиках и может
ее использовать по собственному усмотрению.
Ключики являются единственным средством сохранения информации из webстраницы на компьютере клиента. Необходимость в сохранении информации
возникает, например, в том случае, если нужно отслеживать сеанс пользователя и
однозначно его идентифицировать. Проблема здесь состоит в том, что отдельные
HTML-страницы сайта очень слабо связаны друг с другом и для передачи информации
между ними существует не так уж много способов.
Рассмотрим фрагмент сценария авторизации (auto.asp).
<%
// Фрагмент сценария АВТОРИЗАЦИИ
//
//
//
//
2
Предполагается, что уже выполнено
назначение языка сценария
запрет кэширования
соединение с источником данных
// Прочитаем из формы логин и пароль
var login=””+Request.Form("login");
var pass=””+Request.Form("pass");
// “Заготовим” объект Recordset
var MyRec=Server.CreateObject("ADODB.Recordset");
// “Заготовим” строку для сообщения
message="”;
// Создадим “индикатор” успешности авторизации
success=false;
// Сформируем текст запроса
// Не страшно, если переменные «пустые», т.к.
// их значения окружены апострофами
var strSQL="SELECT id_cust FROM customers WHERE
login='"+login+"' AND pass='"+pass+"'";
// проверим, есть ли в БД пользователь с такими логином и
// паролем
MyRec.Open(strSQL, MyCon);
if(!MyRec.EOF) // есть такой пользователь
{
success=true;
// сохраним информацию в Cookies
Response.Cookies("log")=MyRec("fam")+"
"+MyRec("im");
Response.Cookies("id")=MyRec("id_cust");
message="<tr><td bgcolor='#ff9999'><b>Вы авторизованы!!!
</b></td></tr>";
}//end_if(!MyRec.EOF)
else // такого пользователя нет
{
success=false;
message="<tr><td bgcolor='#ff9999'><b>Вы НЕ авторизованы
3
</b></td></tr>";
}//end_ else // такого пользователя нет
%>
<!-----Подключаем «шапку» (header.asp)---------->
<!-----Она содержит форму авторизации----------->
<!-----Анализируя success, можно в header.asp -->
<!-----Сформировать ссылку на сценарий --------->
<!-----редактирования данных клиента ---------->
<!-- #include file="header.asp" -->
<%=message%>
Если данные введены неверно, пользователь получит сообщение об ошибке:
Обратите внимание, что в случае успешной авторизации создаются ключики с
именами id (идентификатор) и log (фамилия, имя). Содержимое ключика log будет
в дальнейшем выводиться под формой авторизации, а значение ключика id будет
нужно для оформления заказа.
В случае успешной авторизации пользователь получает
возможность
откорректировать информацию о себе при помощи формы с заполненными его
данными элементами:
4
Приведем фрагмент сценария, формирующего такую форму.
<%
// Фрагмент сценария ФОРМИРОВАНИЯ ФОРМЫ ДЛЯ РЕДАКТИРОВАНИЯ
//
//
//
//
Предполагается, что уже выполнено
назначение языка сценария
запрет кэширования
соединение с источником данных
// “Заготовим” объект Recordset
var MyRec=Server.CreateObject("ADODB.Recordset");
// Прочитаем код клиента из Cookie по имени id
var id_cust=Request.Form("id");
if(id_cust!=””)
{
var strSQL="SELECT * FROM customers WHERE
id_cust=”+id_cust;
MyRec.Open(strSQL, MyCon);
if(!MyRec.EOF) // есть такой пользователь
{
5
//создадим переменные
var fam=””+MyRec("fam");
var im=””+MyRec("im");
var addr=””+MyRec("addr");
var mail=””+MyRec("mail");
//создаем форму с заполненными полями
%>
<!-- #include file="forma.asp" -->
<%
}//end_ if(!MyRec.EOF) // есть такой пользователь
}//end_ if(id_cust!=””)
%>
Здесь содержимое файла forma.asp аналогично содержимому одноименного файла,
рассмотренному в разделе «Регистрация пользователей».
При нажатии на кнопку "Сохранить" вызывается сценарий (change.asp), в
котором производится изменение личных данных пользователя:
<%
// Фрагмент сценария ОБНОВЛЕНИЯ пользовательских данных
// в серверной базе
var
var
var
var
var
var
MyRec=Server.CreateObject("ADODB.Recordset");
fam=Request.Form("fam");
im=Request.Form("im");
addr=Request.Form("addr");
mail=Request.Form("mail");
id_cust=Request.Form("id_cust");
if(fam!="" && im!="" && addr!="" && mail!="" &&
id_cust!="")
{
var strSQL1="UPDATE customers SET fam='"+fam+"',im='"+
im+"',addr='"+addr+"', mail='"+mail+
"' WHERE id_cust="+id_cust;
MyRec.Open(strSQL1,MyCon);
Response.Cookies("log")=fam+" "+im;
// создадим временный ключик
6
message="<tr><td bgcolor='#66cc66' align='center'>
<b>Изменения данных выполнены</b></td></tr>";
}
else
message="<tr><td bgcolor='#ff9999' align='center'>
<b>Не все поля заполнены!!!</b></td></tr>";
%>
<!-- #include file="header.asp" -->
<%=message%>
<!-- #include file="footer.asp" -->
Далее пользователь сможет оформить заказ, а также продолжать работу с
корзиной и просмотр каталога.
Когда пользователь захочет выйти из магазина, ему следует щелкнуть по
гиперссылке "Выход". При этом будет вызван
сценарий (exit.asp), основное
действие которого заключается в уничтожении ключиков, связанный с логином и
идентификатором пользователя. Обратите внимание, что задается уже прошедший
момент времени. Затем переадресуем браузер на главную страницу.
<%
// Фрагмент сценария ВЫХОДА ИЗ СИСТЕМЫ
var d = new Date();
var s;
d.setTime(d.getTime()-1000);
s=""+d.getDate()+"."+(d.getMonth()+1)+"."+d.getYear()+"
"+d.getHours()+":"+d.getMinutes();
Response.Cookies("id")=1;
Response.Cookies("id").Expires=s;
Response.Cookies("log")=1;
Response.Cookies("log").Expires=s;
Response.Redirect("index.asp");
%>
7
Бонус: прайс-лист по издателям в формате XML
Каким образом можно создать следующий прайс-лист по всем книгам,
сгруппированный по издателям, в формате XML? В примере приведен внешний вид
XML-файла в браузере Internet Explorer.
<?xml version="1.0" encoding="windows-1251" ?>
-<прайс-лист>
-<издатель код="2">
BHV
-<книга Автор="Ю. Тихомиров"
Название="Microsoft SQL Server 7.0.
Разработка приложений">
<страниц>150</страниц>
<цена>100</цена>
<категория>Компьютерная литература</категория>
</книга>
-<книга Автор="И. Шапошников"
Название="Справочник web-мастера. XML">
<страниц>298</страниц>
<цена>100</цена>
<категория>Компьютерная литература</категория>
</книга>
-<книга Автор="Ю. Тихомиров"
Название="Microsoft SQL Server 7.0 в подлиннике">
<страниц>530</страниц>
<цена>140</цена>
<категория>Компьютерная литература</категория>
</книга>
</издатель>
<издатель код="5">Que</издатель>
<издатель код="4">Диалог-МИФИ</издатель>
<издатель код="3">ЛОРИ</издатель>
-<издатель код="1">
Питер
-<книга Автор="В. Водолазкий"
Название="Эффективная работа: PHP 4">
<страниц>430</страниц>
<цена>140</цена>
<категория>Компьютерная литература</категория>
</книга>
-<книга Автор="В.Гилмор"
Название="РНР4.Учебный курс">
<страниц>390</страниц>
<цена>140</цена>
<категория>Компьютерная литература</категория>
</книга>
</издатель>
</прайс-лист>
8
Прежде всего, следует сообщить браузеру, что дальнейший текст представляет
собой XML-документ:
Response.ContentType="text/xml";
Первая строка любого XML-документа имеет стандартный вид и формируется
следующим образом. Здесь мы явно указываем русскую кодировку Windows для того,
чтобы корректно воспринимался русский текст.
Response.write('<?xml version="1.0"
encoding="windows-1251" ?>');
Далее выбираем из базы всех издателей и все книги по каждому издателю. К
выбранным данным добавляем нужные тэги и выводим результат на печать:
<%
var MyRec1=Server.CreateObject("ADODB.Recordset");
var MyRec2=Server.CreateObject("ADODB.Recordset");
var strSQL, strSQL2;
strSQL1="SELECT * FROM publishers ORDER BY name_publ";
MyRec1.Open(strSQL1, MyCon);
%>
<прайс-лист>
<%while(!MyRec1.EOF)
{
%><издатель код='<%=MyRec1("id_publ")%>'>
<%=MyRec1("name_publ")%>
<%strSQL2="SELECT id_book, author, name_book, pages, price,
name_cat FROM books, categories WHERE
books.id_cat=categories.id_cat AND
books.id_publ="+MyRec1("id_publ");
MyRec2.Open(strSQL2, MyCon);
while(!MyRec2.EOF)
{
%><книга Автор='<%=MyRec2("author")%>'
Название='<%=MyRec2("name_book")%>'>
<страниц><%=MyRec2("pages")%></страниц>
<цена><%=MyRec2("price")%></цена>
<категория><%=MyRec2("name_cat")%></категория>
</книга>
<%MyRec2.MoveNext();
}%>
</издатель>
<%MyRec2.Close();
MyRec1.MoveNext();
}%>
9
</прайс-лист>
Полностью код сценария приведен в Приложении.
10
Некоторые замечания
1. При загрузке некоторых страниц может случиться так, что браузер не захочет
запрашивать страницу у сервера заново, а загрузит результат предыдущего выполнения
того же сценария из собственного временного хранилища – из так называемого "кэша".
Для того чтобы предотвратить такие ситуации, следует в серверном сценарии
выполнить команду:
Response.Expires=0
которая дает браузеру указание не сохранять результаты этой страницы в кэше. В
нашем примере эта команда помещена в верхний шаблон.
2. Любой электронный магазин будет неполным без удобной системы поиска.
Выполнив предыдущие семь заданий, вы уже обладаете всеми необходимыми
знаниями для того, чтобы разработать эту систему самостоятельно.
3.
Для дальнейшего совершенствования вашего магазина есть много
направлений, которые выходят за рамки нашего краткого учебного пособия. Это и
создание интерфейса для администратора, и подключение электронных платежных
систем, и многое-многое другое.
11
Приложение. Коды сценариев
Шаблон для заголовка и меню (header.asp)
<%
var id_bask=Request.cookies("id_bask");
var log=Request.cookies("log");
var d = new Date();
var s;
if (id_bask=="")
{
id_bask=d.getTime();
}
d.setTime(d.getTime()+1000*60*60*24*14);
s=""+d.getDate()+"."+(d.getMonth()+1)+"."+d.getYear()+"
"+d.getHours()+":"+d.getMinutes();
Response.Cookies("id_bask")=id_bask;
Response.Cookies("id_bask").Expires=s;
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>КНИЖНЫЙ МАГАЗИН</title>
<meta HTTP-EQUIV="Content-Type" Content="text-html; charset=windows1251">
</head>
<body background="EULA.jpg" style="background-repeat:repeat-y"
leftmargin="130" rightmargin="5" bgProperties=fixed>
<table border="0" align="right" width="90%" cellpadding="0"
cellspacing="0">
<tr><td>
<table border="0" align="right" width="100%" >
<tr>
<td align="center" bgcolor="#cccccc">
<form action="auto.asp" method="post">
<table>
<tr><td align="right"><font size=-2>Логин:</font></td><td
align="left"><input type=text style="width:60; height:20;"
name=login></td></tr>
<tr><td align="right"><font size=-2>Пароль:</font></td><td
align="left"><input type=password style="width:60; height:20;" name=pass>
<input type=submit value=ok style="height:20;"></td></tr>
</table>
<%=log%>
</td>
</form>
<td colspan="4" align="center" bgcolor="#ccccff"><font face="Arial"
size="+3"><i><b>Книжный магазин</b></i></font></td></tr>
12
<tr><td align="center" bgcolor="#aaddff" width="20%"><a
href="catalog.asp"><b>Каталог</b></a></td>
<td align="center" bgcolor="#ddaaff" width="20%"><a
href="basket.asp"><b>Корзина</b></a></td>
<td align="center" bgcolor="#aaaaff" width="20%"><a
href="reg.asp"><b>Регистрация</b></a></td>
<td align="center" bgcolor="#ffaaff" width="20%"><a
href="order.asp"><b>Заказ</b></a></td>
<td align="center" bgcolor="#aaffee" width="20%"><a
href="exit.asp"><b>Выход</b></a></td>
</tr>
</table>
</td></tr>
<tr><td align="center" bgcolor=<%=color%>><font face="Arial"
size="+2"><i><%=title%></i></font><br>
</td></tr>
Шаблон для нижней части страницы (footer.asp)
<tr><td><center><hr><br><a href="index.asp">На главную
страницу</a></center></td></tr>
</table>
</body>
</html>
Главная страница (index.asp)
<%@ Language="JScript" %>
<%Response.Expires=0 %>
<%
var title="Welcome!";
var color="#ccccff";
%>
<!-- #include file="header.asp" -->
<tr><td>
<center><h2><font color="#555599"><br>Добро пожаловать в наш электронный
книжный магазин! <br><br>Здесь представлена литература самых известных
российских издательств. Любой читатель обязательно найдет себе книгу по
вкусу! Мы предлагаем компьютерную литературу, энциклопедии, справочники,
самые известные художественные произведения классиков и современников и
многое-многое другое!</font></h2>
</center>
</td></tr>
<!-- #include file="footer.asp" -->
13
Шаблон для подключения к базе данных (connect.asp)
<% var MyCon=Server.CreateObject("ADODB.Connection");
MyCon.Open("books","sa","");
%>
Просмотр списка издателей и категорий (catalog.asp)
<%@ Language="JScript" %>
<%Response.Expires=0 %>
<% var title="Каталог";
var color="#aaddff";
%>
<!-- #include file="header.asp" -->
<!-- #include file="connect.asp" -->
<%
var MyRec1=Server.CreateObject("ADODB.Recordset");
var strSQL1="SELECT * FROM publishers ORDER BY name_publ";
MyRec1.Open(strSQL1, MyCon);
var MyRec2=Server.CreateObject("ADODB.Recordset");
var strSQL2="SELECT * FROM categories ORDER BY name_cat";
MyRec2.Open(strSQL2, MyCon);
%>
<tr><td>
<table border=0 width=100%>
<tr><td width="50%"><center><h3>Издатели</h3></center><ul>
<%
while(!MyRec1.EOF)
{%>
<li><a href="show.asp?type=1&id_publ=
<%=MyRec1("id_publ")%>"><%=MyRec1("name_publ")%></a>
<% MyRec1.MoveNext();
}%>
</ul></td>
<td width="50%"><center><h3>Категории</h3></center><ul>
<%
while(!MyRec2.EOF)
{%>
<li><a href="show.asp?type=2&id_cat=
<%=MyRec2("id_cat")%>"><%=MyRec2("name_cat")%></a>
<% MyRec2.MoveNext();
}%>
</ul></td>
</tr>
</table>
</td></tr>
<!-- #include file="footer.asp" -->
<%
14
MyRec1.Close(); MyRec2.Close();
MyCon.Close();
MyRec1=null; MyRec2=null;
MyCon=null;
%>
Просмотр списка книг по выбранному издателю или категории (show.asp)
<%@ Language="JScript" %>
<%Response.Expires=0 %>
<!-- #include file="connect.asp" -->
<%
var color="#fefefe";
var type=Request.QueryString("type");
var MyRec=Server.CreateObject("ADODB.Recordset");
var MyRec2=Server.CreateObject("ADODB.Recordset");
var strSQL, strSQL2;
if (type==1)
{
strSQL="SELECT name_publ FROM publishers WHERE id_publ="+
Request.QueryString("id_publ");
MyRec.Open(strSQL, MyCon);
if(!MyRec.EOF)
title=MyRec("name_publ");
strSQL2="SELECT id_book, image, author, name_book, books.id_publ,
name_publ, pages, price, books.id_cat, name_cat FROM books,
publishers, categories WHERE books.id_cat=categories.id_cat AND
books.id_publ=publishers.id_publ AND
books.id_publ="+Request.QueryString("id_publ");
}
if (type==2)
{
strSQL="SELECT name_cat FROM categories WHERE id_cat="+
Request.QueryString("id_cat");
MyRec.Open(strSQL, MyCon);
if(!MyRec.EOF)
title=MyRec("name_cat");
strSQL2="SELECT id_book, image, author, name_book, books.id_publ,
name_publ, pages, price, books.id_cat, name_cat FROM books,
publishers, categories WHERE books.id_cat=categories.id_cat AND
books.id_publ=publishers.id_publ AND
books.id_cat="+Request.QueryString("id_cat");
}
MyRec2.Open(strSQL2, MyCon);
%>
<!-- #include file="header.asp" -->
15
<tr><td>
<table border="1" width="100%" align="right" >
<%
while(!MyRec2.EOF)
{%>
<tr>
<td align="center"><img src="images/<%=MyRec2("image")%>"
alt="<%=MyRec2("name_book")%>" border="0">
<center><a href="dobasket.asp?type=1&id_book=
<%=MyRec2("id_book")%>">
<font size=-1>положить в корзину</font></a></center></td>
<td>
<table>
<tr><td align="right"><i>Автор: </i></td>
<td><%=MyRec2("author")%></td></tr>
<tr><td align="right"><i>Название: </i></td>
<td><%=MyRec2("name_book")%></td></tr>
<tr><td align="right"><i>Издательство: </i></td>
<td><a ref="show.asp?type=1&id_publ=<%=MyRec2("id_publ")%>">
<%=MyRec2("name_publ")%></a></td></tr>
<tr><td align="right"><i>Количество страниц: </i></td>
<td><%=MyRec2("pages")%></td></tr>
<tr><td align="right"><i>Цена: </i></td>
<td><%=MyRec2("price")%></td></tr>
<tr><td align="right"><i>Категория: </i></td>
<td><a href="show.asp?type=2&id_cat=<%=MyRec2("id_cat")%>">
<%=MyRec2("name_cat")%></a></td></tr>
</table>
</td>
</tr>
<%MyRec2.MoveNext();
}
MyRec.Close();
MyRec2.Close();
MyCon.Close();
MyRec=null;
MyRec2=null;
MyCon=null;
%>
</table>
</td></tr>
<!-- #include file="footer.asp" -->
16
Просмотр корзины (basket.asp)
<%@ Language="JScript" %>
<%Response.Expires=0 %>
<%
title="Ваша корзина";
color="#ddaaff";
%>
<!-- #include file="header.asp" -->
<!-- #include file="connect.asp" -->
<%
var id_bask=Request.cookies("id_bask");
var strSQL1="SELECT COUNT(*) AS cnt FROM basket_books WHERE
id_bask='"+id_bask+"'";
var MyRec1=Server.CreateObject("ADODB.Recordset");
var MyRec2=Server.CreateObject("ADODB.Recordset");
MyRec1.Open(strSQL1, MyCon);
if(MyRec1("cnt")==0)
{
%>
<tr><td bgcolor='#ff9999' align='center'>
<b>Ваша корзина пуста!</b></td></tr>
<%
}
else
{
strSQL1="SELECT image, author, name_book, pages, price, kolvo, id_bask,
books.id_book FROM books, basket_books WHERE
books.id_book=basket_books.id_book AND id_bask='"+id_bask+"'";
MyRec2.Open(strSQL1, MyCon);
%>
<tr><td colspan="2">
<table border="1" width="100%" align="right" >
<tr><td align="right"><i>Автор: </i></td>
<td align="right"><i>Название: </i></td>
<td align="right"><i>Цена: </i></td>
<td align="right"><i>Количество: </i></td><td></td></tr>
<%
var sum=0;
while(!MyRec2.EOF)
{
%>
<tr>
<td><%=MyRec2("author")%></td>
<td><b><%=MyRec2("name_book")%></b></td>
<td><%=MyRec2("price")%></td>
<td><%=MyRec2("kolvo")%>
<a href="dobasket.asp?type=1&id_book=<%=MyRec2("id_book")%>"
title="Увеличить">[ + ]</a>
17
<a href="dobasket.asp?type=2&id_book=<%=MyRec2("id_book")%>"
title="Уменьшить">[ - ]</a></td>
<td> <a href="dobasket.asp?type=3&id_book=
<%=MyRec2("id_book")%>">Удалить</a></td>
</tr>
<%
sum+=MyRec2("price")*MyRec2("kolvo");
MyRec2.MoveNext();
}%>
<tr><td align="right"></td><td align="right">
<i>ИТОГО: </i></td><td align="right"><%=sum%></td>
<td align="right"></td></tr>
</table>
<tr><td>
<center><a href=dobasket.asp?type=4><b>Очистить корзину</b></a>
</center></td></tr>
<tr><td>
<center><a href="order.asp"><b>Оформить заказ</b></a>
</center></td></tr>
<%
}
%>
<!-- #include file="footer.asp" -->
Действия с корзиной (dobasket.asp)
<%@ Language="JScript" %>
<%Response.Expires=0 %>
<!-- #include file="connect.asp" -->
<%
var
var
var
var
var
id_bask=Request.Cookies("id_bask");
type=Request.QueryString("type");
id_book=Request.QueryString("id_book");
strSQL;
MyRec=Server.CreateObject("ADODB.Recordset");
if(type==1) // положить в корзину
{
strSQL="SELECT * FROM basket_books WHERE id_book="+id_book+" AND
id_bask='"+id_bask+"'";
MyRec.Open(strSQL, MyCon);
if (!MyRec.EOF)
{
strSQL="UPDATE basket_books SET kolvo=kolvo+1
WHERE id_book="+id_book+" AND id_bask='"+id_bask+"'";
}
else
{
18
strSQL="INSERT INTO basket_books
(id_bask, id_book, kolvo)
VALUES ('"+id_bask+"',"+id_book+",1)";
}
MyCon.Execute(strSQL);
MyRec.close();
}
else
if(type==2) // уменьшить количество
{
strSQL="SELECT * FROM basket_books WHERE id_book="+id_book+" AND
id_bask='"+id_bask+"'";
MyRec.Open(strSQL, MyCon);
if (!MyRec.EOF)
{
if (MyRec("kolvo")>1)
{
strSQL="UPDATE basket_books SET kolvo=kolvo-1
WHERE id_book="+id_book+" AND id_bask='"+id_bask+"'";
}
else
{
strSQL="DELETE FROM basket_books WHERE id_book="+id_book + "
AND id_bask='"+id_bask+"'";
}
}
MyCon.Execute(strSQL);
MyRec.close();
}
else
if(type==3) // удалить из корзины
{
strSQL="DELETE FROM basket_books WHERE id_book="+id_book+
" AND id_bask='"+id_bask+"'";
MyCon.Execute(strSQL);
}
else
if(type==4) // очистить корзину
{
strSQL="DELETE FROM basket_books WHERE id_bask='"+id_bask+"'";
MyCon.Execute(strSQL);
}
Response.Redirect("basket.asp");
%>
Регистрация (reg.asp)
<%@ Language="JScript" %>
<%Response.Expires=0 %>
<%
19
var
var
var
var
var
var
var
var
var
var
var
var
var
title="Регистрация";
color="#aaaaff";
type=Request("type");
fam=Request.Form("fam");
im=Request.Form("im");
addr=Request.Form("addr");
mail=Request.Form("mail");
login=Request.Form("login");
pass=0; pass=''+Request.Form("pass");
pass2=0; pass2=''+Request.Form("pass2");
message;
success;
strSQL;
var MyRec=Server.CreateObject("ADODB.Recordset");
// была нажата кнопка "отправить" ?
if(type==1)
{%>
<!-- #include file="connect.asp" -->
<%
// все поля не пустые ?
if(fam!="" && im!="" && addr!="" && mail!="" && login!=""
&& pass!="" && pass2!="")
{
// поля пароля и повтора пароля не совпадают ?
if(!(pass==pass2))
{
message="<tr><td bgcolor='#ff9999' align='center'>
<b>Поля пароля и повтора пароля не совпадают!!!</b></td></tr>";
}
else
{
// ищем, нет ли в базе данных пользователя с таким логином
strSQL1="SELECT id_cust FROM customers
WHERE login='"+login+"'";
MyRec.Open(strSQL1, MyCon);
// такой логин уже есть ?
if(!MyRec.EOF)
{
message="<tr><td bgcolor='#ff9999' align='center'>
<b>Такой логин уже существует!!! Выберите другой логин</b>
</td></tr>";
}
else
{
// создаем нового пользователя
strSQL1="INSERT INTO customers
(fam, im, addr, mail, login, pass)
VALUES('"+fam+"','"+im+"','"+addr+"','"+
mail+"','"+login+"','"+pass+"')";
MyCon.Execute(strSQL1);
20
message="<tr><td bgcolor='#66cc66' align='center'>
<b>Вы успешно зарегистрированы</b></td></tr>";
success=true;
}
}
}
else
message="<tr><td bgcolor='#ff9999' align='center'>
<b>Не все поля заполнены!!!</b></td></tr><td>";
}
%>
<!-- #include file="header.asp" -->
<%=message%>
<%
if(!success)
{
%>
<form action=reg.asp method=post>
<tr><td>
<table border="0" width="100%" align="right" >
<tr><td align="right"><i>Фамилия: </i></td>
<td><input type=text name=fam value="<%=fam%>"></td></tr>
<tr><td align="right"><i>Имя: </i></td>
<td><input type=text name=im value="<%=im%>"></td></tr>
<tr><td align="right"><i>Адрес: </i></td>
<td><input type=text name=addr value="<%=addr%>"></td></tr>
<tr><td align="right"><i>E-mail: </i></td>
<td><input type=text name=mail value="<%=mail%>"></td></tr>
<tr><td align="right"><i>Логин: </i></td>
<td><input type=text name=login value="<%=login%>"></td></tr>
<tr><td align="right"><i>Пароль: </i></td>
<td><input type=password name=pass value=""></td></tr>
<tr><td align="right"><i>Повтор пароля: </i></td>
<td><input type=password name=pass2 value=""></td></tr>
<input type=hidden value=1 name=type>
<tr><td align="right"></td>
<td><input type=submit value="отправить"></td></tr>
</table>
</form>
</td></tr>
<%
}
%>
<!-- #include file="footer.asp" -->
Авторизация (auto.asp)
<%@ Language="JScript" %>
21
<%Response.Expires=0 %>
<%
var title="Авторизация";
var color="#aaaaff";
%>
<!-- #include file="connect.asp" -->
<%
var MyRec=Server.CreateObject("ADODB.Recordset");
var login=Request.Form("login");
var pass=Request.Form("pass");
var strSQL1="SELECT * FROM customers WHERE login='"+login+"' AND
pass='"+pass+"'";
var message;
var success;
MyRec.Open(strSQL1, MyCon);
if(!MyRec.EOF)
{
Response.Cookies("log")=MyRec("fam")+" "+MyRec("im");
Response.Cookies("id")=MyRec("id_cust");
message="<tr><td bgcolor='#66cc66' align='center'>
<b>Вы успешно авторизованы</b></td></tr>";
success=true;
}
else
{
message="<tr><td bgcolor='#ff9999' align='center'>
<b>Таких логина/ пароля не существует!!!</b></td></tr>";
}
%>
<!-- #include file="header.asp" -->
<%=message%>
<%
if(success)
{
%>
<form action=change.asp method=post>
<tr><td>
<table border="0" width="100%" align="right" >
<tr><td align="right"><i>Фамилия: </i></td><td>
<input type=text name=fam value="<%=MyRec("fam")%>"></td></tr>
<tr><td align="right"><i>Имя: </i></td><td>
<input type=text name=im value="<%=MyRec("im")%>"></td></tr>
<tr><td align="right"><i>Адрес: </i></td><td>
<input type=text name=addr value="<%=MyRec("addr")%>">
</td></tr>
<tr><td align="right"><i>E-mail: </i></td><td>
<input type=text name=mail value="<%=MyRec("mail")%>">
</td></tr>
<input type=hidden value=<%=MyRec("id_cust")%> name=id_cust>
22
<tr><td align="right"></td>
<td><input type=submit value="сохранить"></td></tr>
</table>
</form>
</td></tr>
<%
}
MyRec.close();
MyCon.close();
%>
<!-- #include file="footer.asp" -->
Изменение личных данных (change.asp)
<%@ Language="JScript" %>
<%Response.Expires=0 %>
<%
var title="Регистрация";
var color="#aaaaff";
%>
<!-- #include file="connect.asp" -->
<%
var MyRec=Server.CreateObject("ADODB.Recordset");
var fam=Request.Form("fam");
var im=Request.Form("im");
var addr=Request.Form("addr");
var mail=Request.Form("mail");
var id_cust=Request.Form("id_cust");
if(fam!="" && im!="" && addr!="" && mail!="")
{
var strSQL1="UPDATE customers SET fam='"+fam+"',im='"+
im+"',addr='"+addr+"', mail='"+mail+
"' WHERE id_cust="+id_cust;
MyRec.Open(strSQL1,MyCon);
Response.Cookies("log")=fam+" "+im;
// создадим временный ключик
message="<tr><td bgcolor='#66cc66' align='center'>
<b>Изменения данных выполнены</b></td></tr>";
}
else
message="<tr><td bgcolor='#ff9999' align='center'>
<b>Не все поля заполнены!!!</b></td></tr>";
%>
<!-- #include file="header.asp" -->
<%=message%>
<!-- #include file="footer.asp" -->
Выход – отмена авторизации (exit.asp)
<%@ Language="JScript" %>
23
<%Response.Expires=0 %>
<%
var d = new Date();
var s;
d.setTime(d.getTime()-1000);
s=""+d.getDate()+"."+(d.getMonth()+1)+"."+d.getYear()+"
"+d.getHours()+":"+d.getMinutes();
Response.Cookies("id")=1;
Response.Cookies("id").Expires=s;
Response.Cookies("log")=1;
Response.Cookies("log").Expires=s;
Response.Redirect("index.asp");
%>
Просмотр заказа (order.asp)
<%@ Language="JScript" %>
<%Response.Expires=0 %>
<%
var title="Ваш заказ";
var color="#ffaaff";
%>
<!-- #include file="header.asp" -->
<!-- #include file="connect.asp" -->
<%
var id_bask=Request.cookies("id_bask");
var MyRec=Server.CreateObject("ADODB.Recordset");
var strSQL;
var strSQL="SELECT COUNT(*) as cnt FROM basket_books WHERE
id_bask='"+id_bask+"'";
MyRec.Open(strSQL, MyCon);
if(MyRec("cnt")==0)
{
%>
<tr><td bgcolor='#ff9999' align='center'>
<b>Ваша корзина пуста!</b></td></tr>
<%
}
else
{
strSQL="SELECT image, author, name_book, pages, price, kolvo, id_bask,
books.id_book FROM books, basket_books WHERE
books.id_book=basket_books.id_book AND id_bask='"+id_bask+"'";
MyRec.Close();
MyRec.Open(strSQL, MyCon);
%>
<tr><td>
<table border="1" width="100%" align="right" >
<tr><td align="right"><i>Автор: </i></td><td align="right"><i>Название:
</i></td>
24
<td align="right"><i>Цена: </i></td><td align="right"><i>Количество:
</i></td><td></td></tr>
<%
var sum=0;
while(!MyRec.EOF)
{
%>
<tr>
<td><%=MyRec("author")%></td>
<td><b><%=MyRec("name_book")%></b></td>
<td><%=MyRec("price")%></td>
<td><%=MyRec("kolvo")%></td>
</tr>
<%sum+=MyRec("price")*MyRec("kolvo");
MyRec.MoveNext();
}%>
<tr><td align="right"></td>
<td align="right"><i>ИТОГО: </i></td>
<td align="right"><%=sum%></td><td align="right"></td></tr>
</table>
<tr><td><center><a href=doorder.asp>
<b>Отправить заказ</b></a></center></td></tr>
<%
}
%>
<!-- #include file="footer.asp" -->
Отправка заказа (doorder.phtml)
<%@ Language="JScript" %>
<%Response.Expires=0 %>
<%
var title="Ваш заказ";
var color="#ffaaff";
%>
<!-- #include file="connect.asp" -->
<%
var MyRec=Server.CreateObject("ADODB.Recordset");
var id_bask=Request.cookies("id_bask");
var id=Request.cookies("id");
var log=Request.cookies("log");
var message;
if(log=="")
message="<tr><td bgcolor='#ff9999' align='center'>
<b>Вы не авторизованы!!!</b></td></tr>";
else
{
var strSQL="SELECT COUNT(*) as cnt FROM basket_books
25
WHERE id_bask='"+id_bask+"'";
MyRec.Open(strSQL,MyCon);
if(MyRec("cnt")==0)
message="<tr><td bgcolor='#ff9999' align='center'>
<b>Ваша корзина пуста!</b></td></tr>";
else
{
var order=id_bask;
strSQL="INSERT INTO orders (id_order, date_ord, id_cust)
VALUES ('"+order+"',DATE(),"+id+")";
MyCon.Execute(strSQL);
strSQL="SELECT * FROM basket_books
WHERE id_bask='"+id_bask+"'";
MyRec.Close();
MyRec.Open(strSQL,MyCon);
while (!MyRec.EOF)
{
strSQL="INSERT INTO order_books
(id_order, id_book, kolvo) VALUES
('"+order+"',"+MyRec("id_book")+","
+MyRec("kolvo")+")";
MyCon.Execute(strSQL);
MyRec.MoveNext();
}
strSQL="DELETE FROM basket_books
WHERE id_bask='"+id_bask+"'";
MyCon.Execute(strSQL);
message="<tr><td bgcolor='#66cc66' align='center'>
<b>Ваш заказ отправлен</b></td></tr>";
}
}
%>
<!-- #include file="header.asp" -->
<%=message%>
<!-- #include file="footer.asp" -->
Прайс-лист в формате XML (price.phtml)
<%@ Language="JScript" %>
<%Response.Expires=0 %>
<!-- #include file="connect.asp" -->
<%
var MyRec1=Server.CreateObject("ADODB.Recordset");
var MyRec2=Server.CreateObject("ADODB.Recordset");
var strSQL, strSQL2;
Response.ContentType="text/xml";
Response.write('<?xml version="1.0" encoding="windows-1251" ?>');
strSQL1="SELECT * FROM publishers ORDER BY name_publ";
26
MyRec1.Open(strSQL1, MyCon);
%>
<прайс-лист>
<%while(!MyRec1.EOF)
{
%><издатель код='<%=MyRec1("id_publ")%>'>
<%=MyRec1("name_publ")%>
<%strSQL2="SELECT id_book, author, name_book, pages, price,
name_cat FROM books, categories WHERE
books.id_cat=categories.id_cat AND
books.id_publ="+MyRec1("id_publ");
MyRec2.Open(strSQL2, MyCon);
while(!MyRec2.EOF)
{
%><книга Автор='<%=MyRec2("author")%>'
Название='<%=MyRec2("name_book")%>'>
<страниц><%=MyRec2("pages")%></страниц>
<цена><%=MyRec2("price")%></цена>
<категория><%=MyRec2("name_cat")%></категория>
</книга>
<%MyRec2.MoveNext();
}%>
</издатель>
<%MyRec2.Close();
MyRec1.MoveNext();
}%>
</прайс-лист>
<%
MyRec1.close();
MyCon.close();
%>
Литература
1. С. Спейнаур, В. Куэрсиа, Справочник web-мастера: Пер. с англ. – Киев: BHV,
1997. – 368 c.
2. В. Пирогов, MS SQL Server 2000: управление и программирование. – СПб.:
BHV-Петербург, 2005. – 608 c.
27
Download