Разработка сайта интернет-магазина

 

Введение


Интернет-магазин - это магазин, «витрина» которого расположена в сети интернет и который дает возможность заказать товар через интернет.

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

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

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

Преимущества, которые даёт интернет-магазин:

. Интернет-магазин работает 24 часа в сутки, 365 дней в году, без перерыва на обед, без выходных и праздничных дней.

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

. Профессионально грамотно созданный интернет-магазин может работать полностью автономно. Практически без обслуживания.

. Интернет-магазин не имеет ограничений на виртуальную площадь. Можно разместить сколь угодно много товаров или описать любое количество услуг.

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

. Интернет-магазин позволяет общаться с потенциальными клиентами, находящимися сколь угодно далеко, в режиме реального времени.

. Срок и стоимость создания интернет-магазина несоизмеримо ниже, чем обычного магазина.

. Для создания интернет-магазина не требуется получения многочисленных разрешений и лицензий. Его не проверяет пожарный инспектор, санэпидемстанция и другие хорошо знакомые вам службы.

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

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

1. Постановка задачи


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

Очевидно, что было необходимо разработать несколько интерфейсов: для посетителя, для пользователя, для менеджеров и для администратора. Доступ к каждому интерфейсу открыт в соответствии с полномочиями.

Интерфейс посетителя самый упрощенный. Посетитель может просматривать информацию главной страницы, список товаров и сами товары. Купить товар посетитель сможет только зарегистрировавшись, тем самым перейдя в категорию пользователей.

Интерфейс пользователя должен давать возможность совершать покупки, а так же открывать доступ к личному кабинету, где будут отображаться корзина, подготовленные заказы, а так же история выполненных заказов.

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

Интерфейс администратора должен позволять управлять правами пользователей (покупатель/менеджер), а так же учетными записями пользователей.

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

Требуется предусмотреть проверку и разграничение прав доступа к различному контенту сайта в зависимости от прав пользователя.

2. База данных


В качестве СУБД используется MYSQL. Выбор обоснован поддержкой таблиц InnoDB, а так же ее бесплатностью. В ходе анализа требований к функционалу интернет-магазина была определена схема базы данных магазина.


Рис. 1 - Физическая схема БД


Для каждой из таблиц были определены поля.


Рис. 2 - Логическая схема БД


Таким образом, исходя из анализа требований становится очевидно, что для реализации полнофункциональной системы БД магазина достаточно всего лишь 7 таблиц.

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

В таблице korzina хранятся данные о покупках пользователя, а именно - дата, сумма, статус покупки.

В таблице tovari_korz хранятся непосредственно данные о наполнении товарами корзины пользователя.

Таблица tovari содержит в себе информацию о товаре на складе, без описания его свойств.

Описание свойств товара находится в таблице opisanie.

И, наконец, таблица izobrajenia хранит в себе ссылки на изображения товара.


3. Функционал сайта


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

Рассмотрим функционал относительно каждого из экранов, видимых пользователем.


3.1 Главная страница


Рис. 3 - Главная страница


Нажатие на ссылку «Магазин» ведет на главную страницу сайта, отображенную на рис. 3. На этой странице отображается информация о магазине, о принципах его работы.

Нажатия на ссылки «F.A.Q.», «Способы оплаты», «Контакты» отобразят на странице информацию, соответствующую их названию.

Список типов товаров отображается динамически - изменение типов в базе менеджером вызовет перестроение этого списка и на сайте. Список отображается во всех пунктах главной страницы.

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

Реализация формы входа при условии, что посетитель еще не вошел на сайт под своим логином:

(!isset($_SESSION['id_klienta'])) //Проверяем, вошел ли пользователь

print '<table width="100%" height="81" border="0"><form action="login.php" method="get">

<tr>

<td width="10%" align="left">Логин:</td>

<td align="center">

<input type="text" name="login" id="login">

</td>

</tr>

<tr>

<td width="10%" align="left">Пароль:</td>

<td align="center">

<input type="password" name="password" id="password">

</td>

</tr>

<tr>

<td colspan="2" align="center"><input type="submit" value="Войти"><input type="button" value="Регистрация" onclick=window.location.href="register.php"></td>

</tr>

</form>

</table>'; //Выводим форму входа


После того, как посетитель зашел на сайт, вышеописанная форма меняется:


Рис. 4 - Главная страница вошедшего пользователя


Реализация:

(isset($_SESSION['id_klienta'])) //Проверяем, вошел ли пользователь

{

$login=$_SESSION['login']; //Получаем логин

$id_klienta=$_SESSION['id_klienta']; //Пароль

$iniciali_klienta=$_SESSION['iniciali_klienta']; //Инициалы

$query_k=mysql_query("select id_korzini from korzina where id_klienta='".$id_klienta."' and status='nabor'");($row_k=mysql_fetch_row($query_k))

$id_korzini=$row_k[0]; //Получаем id корзины

$query_t=mysql_query("select count(id_tovara_korz) from tovari_korz where id_korzini='".$id_korzini."'");($row_t=mysql_fetch_row($query_t))

$kol_korz=$row_t[0]; //Выводим количество товара в корзине($_SESSION['metka']=='administrator') //Приветствие для администратора'Здравствуйте, <b>Администратор</b>!<br>

<a href="admin.php">Панель администратора</a><br><br>

<input type="button" value="Выйти" onclick=window.location.href="login.php?logout"><br>';($_SESSION['metka']=='manager') //Для менеджера'Здравствуйте, <b>'.$iniciali_klienta.'</b>!<br>

<a href="manager.php">Панель менеджера</a><br><br>

<input type="button" value="Выйти" onclick=window.location.href="login.php?logout"><br>';//Для пользователя'Здравствуйте, <b>'.$iniciali_klienta.'</b>!<br>

<a href="cabinet.php">Личный кабинет</a><br>Наименований в корзине: '.$kol_korz.'<br>

<input type="button" value="Выйти" onclick=window.location.href="login.php?logout"><br>';

}

Таким образом, администратор, пользователь и менеджер будут видеть разные приветствия и разные ссылки на кабинеты.


3.2 Регистрация


Теперь рассмотрим результат нажатия на кнопку «Регистрация».


Рис. 5 - Регистрация


Для прохождения процедуры регистрации пользователю необходимо заполнить все поля, при чем выполняется правильность ввода информации, например e-mail. Проверка выполняется с помощью javascript.

Реализация:


<script>check_values(UserForm)

{STATUS_DEF=true; //Статус правильности заполнения по умолчаниюexp=/^[а-яёА-ЯЁ\s]+$/; //Регулярное выражение

if (exp.test(UserForm.fio.value)==false) //Правильность ввода ФИО

{_DEF=false;("Введите корректное ФИО (Например: Иванов Иван Иванович)");.fio.focus();

}m_exp=/^([a-z0-9_-]+\.)*[a-z0-9_-]+@[a-z0-9_-]+(\.[a-z0-9_-]+)*\.[a-z]{2,4}$/; //Регулярное выражение

if (m_exp.test(UserForm.email.value)==false) //Правильность ввода email

{_DEF=false;("Введите корректный электронный адрес (Например: [email protected])");.email.focus();

}(UserForm.password.value.length<5) //Правильность длины пароля

{_DEF=false;("Введите корректный пароль: длина не менее 5 символов");.password.focus();

}(UserForm.password.value!=UserForm.password_verification.value) //Правильность повтора пароля

{_DEF=false;("Введенные пароль и повтор пароля не совпадают");.password.focus();

}l_exp=/^[a-zA-Z0-9]{3,10}$/;//Правильность ввода логина

if (l_exp.test(UserForm.login.value)==false)

{_DEF=false;("Введите корректный логин: разрешены только латинские символы и цифры, длина логина от 3 до 10 символов");.login.focus();

}(UserForm.target_address.value=="") //Наличие адреса доставки

{_DEF=false;("Введите адрес");.target_address.focus();

}t_exp=/^[0-9]+$/; //Правильность ввода телефона(t_exp.test(UserForm.phone_number.value)==false)

{_DEF=false;("Введите корректный номер (Например: 456532 или 89546543221)");

UserForm.phone_number.focus();

}STATUS_DEF;

}

</script>

Если STATUS_DEF=true, то выполняется процедура регистрации (Замечание: если такого логина еще нет в базе).


3.3 Просмотр списка товаров


Рис. 6 - Просмотр товаров

сайт база данных товар

На рис. 6 отображен список товаров типа «Корпуса». Как видно из изображения, разрешено сортировать и фильтровать отбор товаров по таким критериям как: по столбцам, по цене, по наличию на складе, по наличию изображений.

Нажатие на ссылку «Подробнее» направит пользователя на страницу с описанием товара.

Список разбит на страницы, по 20 товаров на каждой.

Реализация формирования фильтра:


<form id="sortmethod" name="sel_goods" method="get" action="" onchange="document.forms.sel_goods.submit();"> //Форма фильтра

<?($_GET['id'])

{

$num=$_GET['id'];"<input type='hidden' name='id' value=$num>";

$tiptovar=MYSQL_QUERY("select nazvanie from tip_tovara where id_tipa=$num");

$maxmin_query=mysql_query("select max(cena),min(cena) from tovari where id_tipa=$num");

while ($maxmin_arr=mysql_fetch_array($maxmin_query)) //Определяем самый дорогой и самый дешевый товар в категории

{

$maxsumm=$maxmin_arr[0];

$minsumm=$maxmin_arr[1];

}//А если таковых не нашлось, то

if ($maxsumm=="") $maxsumm=0;($minsumm=="") $minsumm=0;($tip = mysql_fetch_array($tiptovar))

print "<nobr>Тип: $tip[0] ";(!$_GET['goodsid'])//Количество товаров для разбиения на страницы

{

$rcount_query=mysql_query("select count(id_tovara) from tovari where id_tipa=$num");($rcount_arr=mysql_fetch_array($rcount_query))

$rcount=$rcount_arr[0];

?>//Сортировка

/ Сортировать по

<select name="sort">

<option value="tovari.nazvanie" <? if (($_GET['sort'])=="tovari.nazvanie") print " selected " ?>>названию</option>

<option value="tovari.cena" <? if (($_GET['sort'])=="tovari.cena") print " selected " ?>>цене</option>

<option value="tovari.kol_sklad" <? if (($_GET['sort'])=="tovari.kol_sklad") print " selected " ?>>количеству</option>

</select>

/</nobr> <nobr>Цена от

<input type="input" name="summin" value="<? if ($_GET['summin']) print $_GET['summin']; else print $minsumm ?>" style="width:60px"> до

<input type="input" name="summax" value="<? if (($_GET['summax']>=$_GET['summin']) && ($_GET['summax']!="")) print $_GET['summax']; else print $maxsumm ?>" style="width:60px"> рублей

/</nobr> <nobr><input type="checkbox" name="showzero" <? if (($_GET['showzero'])=="on") print " checked ";?>>Нет на складе

/ <input type="checkbox" name="showpic" <? if (($_GET['showpic'])=="on") print " checked " ?>>Только с изображениями</nobr> <input type="submit" value="Отобразить">

<?

//Получаем значения полей фильтра и запоминаем их

if ($_GET['sort'])

$method=$_GET['sort'];$method="tovari.nazvanie";($_GET['numpage'])

$numpage=$_GET['numpage'];$numpage=0;($_GET['summin'])

$minsumm=$_GET['summin'];(($_GET['summax']>=$_GET['summin']) && ($_GET['summax']!=""))

$maxsumm=$_GET['summax'];($_GET['showzero']=="on")

$showzero="on";$showzero="off";($_GET['showpic']=="on")

$showpic="on";

else $showpic="off";

}

}

?>

</form>

Вывод товаров осуществляется через функцию. Реализация:(($_GET['id']) && (!$_GET['goodsid']))//Выводить только если открыт список товаров

{

$id=$_GET['id'];("tovari","$id","$method","$numpage","$minsumm","$maxsumm","$showzero","$showpic","$rcount");

}

Сама функция вынесена в приложение.


3.4 Просмотр товара


Нажатие на ссылку «Подробнее» направит пользователя на страницу с описанием товара.


Рис. 7 - Описание товара


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

Реализация:


<script language = "JavaScript">bigsize = "300"; //Увеличенная высота

var smallsize = "100"; //Стандартная высотаchangeSizeImage(im)

{(im.height == bigsize) //Изменяем высоту в зависимости от текущей

im.height = smallsize;im.height = bigsize;

}

</script>


Поле с количеством товара и кнопкой «В корзину» доступно только зарегистрированным пользователям. Посетителям, менеджерам и администратору оно недоступно.

Реализация:

(isset($_SESSION['id_klienta'])) //Если это пользователь

{

$login=$_SESSION['login'];(($_SESSION['metka']!='manager') && ($_SESSION['metka']!='administrator'))(($_GET['id']) && ($_GET['goodsid'])) //Если смотрим товар

{

$id=$_GET['id'];

$goodsid=$_GET['goodsid'];'<form action="actions.php" method="get">';"<input type='hidden' name='id' value=$id>";"<input type='hidden' name='goodsid' value=$goodsid>";"<input type='hidden' name='basket' value=add>";"Количество:

<input type='text' name='count' id='count' value='0' size='1'>

<input type='submit' value='В корзину'></form>"; //Выводим форму покупки

}

}


3.5 Отправка в корзину


Чтобы отправить товар в корзину, пользователь должен нажать на клавишу «В корзину», введя при этом количество товара, удовлетворяющее условию:

<Количество товара<Товара на складе

Это условие проверяется и в случае несоответствия пользователю выводится соответствующее сообщение.

Если все верно:


Рис. 8 - Сообщение пользователю


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


3.6 Личный кабинет


Рис. 9 - Личный кабинет


В личном кабинете пользователь может отредактировать товары в корзине: удалить те, которые считает лишними. Автоматически ведется расчет итоговой суммы, которую покупатель должен заплатить за товар. Доставка в расчет не входит.

Если покупателя все устраивает, он нажимает кнопку «Отправить»:


Рис. 10 - Сообщение пользователю


Заказ из корзины перемещается в «Отправленные заказы», что говорит о том, что список передам сотрудникам магазина, но доставка еще не выполнена. Пользователь может выбрать определенный заказ и просмотреть его содержимое.

Таблица «Выполненные заказы» содержит в себе заказы, которые были отправлены покупателю. Пользователь может выбрать определенный заказ и просмотреть его содержимое.

Реализация таблиц с товарами приведена в приложении.

Реализация отправки заказа:

(isset($_POST['accept'])) //Если нажали кнопку Отправить

{"dbconnect.php";

$id_korzini=$_POST['id_korzini']; //Определяем корзину

$testing=mysql_query("select * from tovari_korz where id_korzini='".$id_korzini."'");(count(mysql_fetch_row($testing))>1) //Если есть товары

{

$data_pok=date("d.m.y H:i"); //Дата покупки_query("update korzina set status='podtverjden', data_pok='".$data_pok."' where id_korzini='".$id_korzini."'"); //Статус корзины обновлен('Location: cabinet.php?r=2');

}

}


3.7 Панель менеджера


.7.1 Управление типами товаров

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


Рис. 11 - Панель менеджера, Управление типами товаров


На странице «Управление типами товаров» менеджер может добавлять или удалять требуемые типы товаров. Если есть товары, принадлежащие удаляемому типу, то удалить его не получится.


Рис. 12 - Сообщение пользователю


Типы товаров разделены постранично, так же их можно отсортировать по различным колонкам.

Реализация формирования запроса сортировки:


<form id="tipselector" name="sel_tip" method="get" action="" onchange="document.forms.sel_tip.submit();">

Добавление типов товаров (Сортировать по

<select name="goodtype">

<option value="tip_tovara.nazvanie" <? if (($_GET['goodtype'])=="tip_tovara.nazvanie") print " selected " ?>>названию</option>

<option value="tip_tovara.id_tipa" <? if (($_GET['goodtype'])=="tip_tovara.id_tipa") print " selected " ?>>номеру</option>

</select>):

<?

//Определяем значения переменным($_GET['goodtype'])

$method=$_GET['goodtype'];$method="tip_tovara.nazvanie";($_GET['numpage'])

$numpage=$_GET['numpage'];

else $numpage=0;

?>

</form>


Вывод таблицы осуществляется функцией:

ShowTable("tip_tovara","id_tipa","0","0",$method,$numpage,$rcount); //Вызов функции

Реакция на действия пользователя(удаление, добавление типов) реализована следующим образом:


if ($_GET['r']==1) //Удаление

{

?>

<script>

window.alert("Удалено успешно");

</script>

<?

}($_GET['a']==1) //Добавление

{

?>

<script>

window.alert("Добавлено успешно");

</script>

<?

}


Значения, получаемые с помощью $_GET возвращаются со страницы actions.php с помощью header, где хранится код реакции на нажатия тех или иных кнопок.

Код, содержащийся в actions.php приведен в приложении.


3.7.2 Управление товарами

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


Рис. 13 - Товары


Если хотя бы одно поле из подменю добавления товаров не заполнено, товар не добавится. Если товар добавится, то в столбце «Опис.» появится рядом с товаром клавиша «Доб.», по нажатию на которую откроется окно свойств товара.

В данном окне можно будет добавить информацию о характеристиках товара, гарантии, производителе. Нажатие кнопки «Обновить запись» добавит эту информацию в базу данных. Далее следует форма добавления изображений к товару. Нажатием кнопки «Обзор» запускается диалог выбора изображения.

Имеется проверка формата изображения: допускается изображение только формата .jpg/.jpeg и объема менее 1 Мб.

Кнопка «Загрузить» добавит изображение на сайт. Так же в этом окне отображаются все изображения данного товара, их можно удалить. Когда все изменения проделаны нужно нажать кнопку «Закрыть» или просто закрыть окно.


Рис. 14 - Описание товара


Реализация выбора типа товара:


$content='<select name="tip_tovar">'; //Собираем select"dbconnect.php"; //Подключаемся к БД

$res = mysql_query('select id_tipa, nazvanie from tip_tovara order by nazvanie');

$kost=0;($row = mysql_fetch_array($res)) //Заполняем select с оглядкой на выбранное значение

{

$content.= '<option value="'.$row["id_tipa"].'"';($kost==0) {$number=$row["id_tipa"]; $kost++;}($row["id_tipa"]==$_GET["tip_tovar"])

{$content.= ' selected'; $kost++;} else(($row["id_tipa"]==$_GET['number']) && $kost==1)

{$content.= ' selected'; $kost++;}

$content.= '>'.$row["nazvanie"].'</option>';

}

$content.= '</select> ';$content;// Выводим select

//Получаем значения select($_GET['tip_tovar'])

$number=$_GET['tip_tovar']; else($_GET['number'])

$number=$_GET['number'];

Реализация вывода изображений приведена в приложении.


3.7.3 Новые заказы

На вкладке «Новые заказы» менеджер может отсортировать, просмотреть, отгрузить и отменить заказы.


Рис. 15 - Новые заказы


Реализация кнопки «Отгрузить»:


if (isset($_POST['send_zak'])) //Если нажали Отгрузить

{"dbconnect.php"; //Подключились к БД, заполнили параметры

$id_korzini=$_POST['id_korzini'];

$data_otpr=date("d.m.y H:i");

//Обновили статус корзины_query("update korzina set status='otpravlen', data_pok='".$data_otpr."' where id_korzini='".$id_korzini."'");

$tovar_minus=mysql_query("select kolichestvo,id_tovara from tovari_korz where id_korzini='".$id_korzini."'");($row_tovar=mysql_fetch_row($tovar_minus)) //Отгрузили со склада, обнов. количество_query("update tovari set kol_sklad=kol_sklad-'".$row_tovar[0]."' where id_tovara='".$row_tovar[1]."'");('Location: orders_new.php?r=2');

}

Реализация кнопки «Отменить заказ»:(isset($_POST['del_zak'])) //Если нажали Отменить заказ

{"dbconnect.php";

$id_korzini=$_POST['id_korzini']; //Удалили корзину

$delete=mysql_query("delete from korzina where id_korzini='".$id_korzini."'");('Location: orders_new.php?r=1');}

Нажатие кнопки «Открыть» откроет список товаров, заказанный покупателем. Реализация открытия окна:

<script>rnum(n)

{//Откроем посередине экранаleftvar = (screen.width-700)/2; //Расстояние слева

var topvar = (screen.height-400)/2; //Расстояние сверху= window.open('user_basket.php?mode=new&id='+n,'formWindow', 'left='+leftvar+',top='+topvar+',width=700,height=400,toolbar=no,menubar=no,location=no,directories=no,scrollbars=yes'); //Открыли, передали информацию

newWin.focus();

}

</script>


Рис. 16 - Выписка по невыполненному заказу


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


3.7.4 Выполненные заказы

После нажатия кнопки «Отгрузить» на вкладке «Новые заказы» обработанный заказ переместится и будет отображен на вкладке «Обработанные заказы». Так же, в личном кабинете пользователя, чей заказ был выполнен, обновится таблица выполненных заказов.

На данной вкладке так же можно просмотреть список заказанных товаров:


Рис. 17 - Выписка по выполненному заказу


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


Рис. 18 - Обработанные заказы


Реализация количества выполненных товаров и сортировки:


<form id="readyselector" name="sel_order" method="get" action="" onchange="document.forms.sel_order.submit();">

Выполнено заказов:

<?"dbconnect.php"; //Подключились к БД

$res=mysql_query('select count(id_korzini) from korzina where status="otpravlen"');($row=mysql_fetch_array($res))

$rcount=$row[0];$rcount." "; //Вывели количество выполненных заказов и начали формировать select

?>

(Сортировать по

<select name="ready">

<option value="klient.iniciali_klienta" <? if (($_GET['ready'])=="klient.iniciali_klienta") print " selected " ?>>фамилии клиента</option>

<option value="korzina.data_pok" <? if (($_GET['ready'])=="korzina.data_pok") print " selected " ?>>дате выполнения</option>

<option value="korzina.id_korzini" <? if (($_GET['ready'])=="korzina.id_korzini") print " selected " ?>>номеру заказа</option>

<option value="korzina.summa"<? if (($_GET['ready'])=="korzina.summa") print " selected " ?>>сумме</option>

</select>)

<?

// Определили переменные и их значения

if ($_GET['ready'])

$method=$_GET['ready'];$method="klient.iniciali_klienta";($_GET['numpage'])

$numpage=$_GET['numpage'];

else $numpage=0;

?>

</form>


3.7.5 Статистика


Рис. 19 - Статистика


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

Реализация статистики:


<table width="100%" border="0">

<tr>

<td width="20%"></td>

<td align="center">Всего типов товаров:

<?"dbconnect.php"; //Подключились к БД

$res=mysql_query('select count(id_tovara) from tovari where kol_sklad="0"');($row=mysql_fetch_array($res))

$rcount=$row[0];

$tquery=MYSQL_QUERY("select count(id_tipa) from tip_tovara");($trez = mysql_fetch_array($tquery))$trez[0]; //Посчитали типы

?>

</td>

<td width="20%"></td>

</tr>

<tr>

<td></td>

<td align="center">Всего наименований:

<?

$tquery=MYSQL_QUERY("select count(id_tovara) from tovari");($trez = mysql_fetch_array($tquery))

print $trez[0]; //Посчитали наименования

?>

</td>

<td></td>

</tr>

<tr>

<td></td>

<td align="center">Общее число единиц товаров на складе:

<?

$kol=0;

$tquery=MYSQL_QUERY("select kol_sklad from tovari");($kol_arr = mysql_fetch_array($tquery))

$kol+=$kol_arr[0]; //Считаем общее число товара на складе

print $kol.' единиц';

?>

</td>

<td></td>

</tr>

<tr>

<td></td>

<td align="center">Товаров на складе на сумму:

<?

$summ=0;

$tquery=MYSQL_QUERY("select kol_sklad,cena from tovari");($kol_arr = mysql_fetch_array($tquery))

$summ+=$kol_arr[0]*$kol_arr[1]; //Считаем общую сумму$summ.' руб.';

?>

</td>

<td></td>

</tr>

<tr>

<td></td>

<td align="center">

<form id="readyselector" name="sel_order" method="get" action="" onchange="document.forms.sel_order.submit();">

Кончившиеся товары

(Сортировать по

<select name="goodtype">

<option value="tovari.nazvanie" <? if (($_GET['goodtype'])=="tovari.nazvanie") print " selected " ?>>названию</option>

<option value="tovari.id_tovara" <? if (($_GET['goodtype'])=="tovari.id_tovara") print " selected " ?>>номеру</option>

<option value="tovari.cena" <? if (($_GET['goodtype'])=="tovari.cena") print " selected " ?>>цене</option>

</select>):

<?

//Определяем значения переменных($_GET['goodtype'])

$method=$_GET['goodtype'];$method="tovari.nazvanie";($_GET['numpage'])

$numpage=$_GET['numpage'];$numpage=0;

?>

</form>

<?("tovari","id_tovara","2","0",$method,$numpage,$rcount); //Функция вывода таблицы

?>

</td><td></td></tr>

</table>

Реализация вывода таблицы представлена в приложении.


3.8 Панель администратора


Рис. 20 - Панель администратора

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

Реализация управления правами менеджера:

(isset($_POST['addprivileges'])) //Если нажали кнопку Добавить/Отменить

{"dbconnect.php"; //Подключились к БД

$userid=$_POST['userid'];

$numpage=$_POST['numpage'];

$sort=$_POST['sort'];($_POST['priv']=="Отменить") //Если отменяем права_query("update klient set metka='' where id_klienta=".$userid."");

if ($_POST['priv']=="Добавить") //Если добавляем права

mysql_query("update klient set metka='manager' where id_klienta=".$userid."");('Location: admin.php?numpage='.$numpage.'&sort='.$sort.'');

}


Все остальные решения идентичны рассмотренным ранее.


4. Права доступа


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

Защита в данном случае основа на проверке авторизации и аутентификации пользователей.

Доступ был разграничен следующим образом:

Посетители сайта, которые не зарегистрированы, имеют возможность просматривать главную страницу, а так же товары, представленные на сайте.

Зарегистрированные и вошедшие под своим логином и паролем пользователи получают доступ к форме отправки товара в корзину, главной странице и к личному кабинету.

Менеджеры имеют доступ к главной странице и панели менеджера. Совершать покупки и посещать личный кабинет они не могут.

Администратор имеет доступ к главной странице и к панели администратора. Совершать покупки он так же не имеет прав.

Таким образом, необходимо проверять, вошел ли пользователь и есть ли у него права менеджера или администратора.

Пример реализации (личный кабинет):

_start(); //Открыли сессию

if (isset($_SESSION['id_klienta'])) //Вошли ли на сайт

{

$login=$_SESSION['login'];(($_SESSION['metka']!='manager') && ($_SESSION['metka']!='administrator')) //Нет ли меток

{

(код страницы)

}

//Если условия не выполнились отказать во ходе, вернуть на главную страницу

else('Location: index.php');

}('Location: index.php');

Реализация входа на сайт:_start();//Открыли сессию

if (isset($_GET['login']) && isset($_GET['password'])) //Если введен логин и пароль

{"dbconnect.php";//Подключаемся к БД

$login=$_GET['login'];

$password=$_GET['password'];

$query = "select `id_klienta`,`iniciali_klienta`,`metka` from `klient` where `login`='{$login}' and `parol`='{$password}'";

$sql = mysql_query($query);//Выберем из БД пользователя с таким логином и паролем(mysql_num_rows($sql)==1) //Если такой пользователь есть

{

$row = mysql_fetch_assoc($sql);

$_SESSION['id_klienta']=$row['id_klienta']; //Проставим метку, что пользователь вошел

$_SESSION['iniciali_klienta']=$row['iniciali_klienta'];

$_SESSION['metka']=$row['metka']; //Метка прав доступа

$_SESSION['login']=$login;($_SESSION['metka']=='manager') //Если вошел менеджер("Location: manager.php"); //Перешлем его в панель менеджера($_SESSION['metka']=='administrator') //Если вошел администратор

header("Location: admin.php"); //Перешлем его в панель администратора//Просто пользователя вернем на главную("Location: index.php");

}//И тех, кто не смог войти тоже вернем на главную

{("Location: index.php");

}

}

//Если выходим из учетной записи

if (isset($_GET['logout'])) {_unset();_destroy();("Location: index.php");

exit();

}


Заключение


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

В качестве основы были взяты PHP и MYSQL, а так же JavaScript.

Были разработаны различные интерфейсы для различных групп пользователей:

Для покупателей.

Для менеджеров.

Для администратора.

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

Тестирование производилось в браузерах Firefox 13.0, Firefox 3.6.6, Opera 11.6, а так же в Internet Explorer 8. Работоспособность в каждом из браузеров сохранялась полностью, различия во внешнем виде незначительны. Права доступа работают корректно.

Из ограничений, касающихся бесплатных хостингов, необходимо отметить, что использование таблиц InnoDB поддерживается только с MYSQL версии 5, которую на данный момент широко используют лишь на платных хостингах.

Список литературы


1. Самоучитель PHP 5. - Издание 2-е - СПб.: Наука и техника, 2005. - 576 с.

. Ржеуцкая С.Ю., Андрианов И.А. Структуры и алгоритмы обработки данных. Часть 1. Учеб. Пособие. - Вологда: ВоГТУ, 2005. - 232с.

. Хомоненко А.Д., Цыганков В.М., Мальцев М.Г. Базы данных. Учебник для вузов. - М.: Корона-принт, 2004.

Приложение А

.php

<?_start();

//udalenie(isset($_POST['del']))

{"dbconnect.php";

$type = $_POST['arr'];

$tname = $_POST['tablename'];

$idname = $_POST['idname'];

$number = $_POST['number'];

$id_korzini = $_POST['id_korzini'];

$met = $_POST['met'];(!empty($type))

{

$r=1;

$query = "(" ;($type as $val) $query.= "$val,";

$query = substr($query, 0, strlen($query) - 1 ). ")" ;($met==3)

{

$price="select cena,kolichestvo from tovari_korz where id_tovara_korz in ".$query;

$summ=0;

$price_rez=mysql_query($price);($row=mysql_fetch_row($price_rez))

$summ=$summ+$row[0]*$row[1];_query("update korzina set summa=summa-'".$summ."' where id_korzini='".$id_korzini."'");

}($met==5)

{

$query2=mysql_query("select `izobrajenie` from izobrajenia where id_izobrajenia in ".$query);($row_iz = mysql_fetch_row ($query2))($row_iz[0]);

}

$query = "DELETE FROM $tname WHERE $idname IN ".$query;(!mysql_query($query))

{

?>

<script>

window.alert("Нельзя удалить: удаляемым типам соответствуют товары");

window.location.href='goodsdb_tip.php';

</script>

<?

}

}$r=0;($met)

{0: {header('Location: goodsdb_tip.php?r='.$r); break;}1: {header('Location: goodsdb_tovar.php?r='.$r.'&number='.$number); break;}2: {header('Location: goodsdb_stat.php?r='.$r); break;}3: {header('Location: cabinet.php?r='.$r); break;}4: {header('Location: admin.php?r='.$r); break;}5: {header('Location: about_tovar.php?id='.$number.'&r='.$r); break;}

}

}

//tip_tovara(isset($_POST['add_tip']))

{(trim($_POST['add_tip_text']))

{

$name=$_POST['add_tip_text'];"dbconnect.php";

$STR="insert into tip_tovara (nazvanie) values ('".$name."')";_query($STR);('Location: goodsdb_tip.php?a=1');

}header('Location: goodsdb_tip.php');

}

//tovar(isset($_POST['add_tovar']))

{

$number = $_POST['number'];((trim($_POST['add_tovar_text']))

&& (trim($_POST['add_tovar_cena']))

&& (trim($_POST['add_tovar_sklad']))

&& (trim($_POST['add_tovar_izm'])))

{

$name=$_POST['add_tovar_text'];

$cena = $_POST['add_tovar_cena'];

$sklad = $_POST['add_tovar_sklad'];

$izm = $_POST['add_tovar_izm'];"dbconnect.php";

$STR="insert into tovari (nazvanie,id_tipa,cena,ed_izmerenia,kol_sklad) values ('".$name."','".$number."','".$cena."','".$izm."','".$sklad."')";_query($STR);('Location: goodsdb_tovar.php?a=1&number='.$number);

}header('Location: goodsdb_tovar.php?number='.$number);

}

//opisanie((isset($_POST['op_accept'])) || (isset($_POST['op_upd'])))

{

$id_op=$_POST['hiddp'];((trim($_POST['garantia']))

&& (trim($_POST['proizvoditel']))

&& (trim($_POST['tech_dannie'])))

{

$garantia=$_POST['garantia'];

$proizvoditel=$_POST['proizvoditel'];

$tech_dannie=mysql_escape_string($_POST['tech_dannie']);"dbconnect.php";(isset($_POST['op_accept']))

$STR="insert into opisanie (id_tovara,tech_dannie,garantia,proizvoditel) values ('".$id_op."','".$tech_dannie."','".$garantia."','".$proizvoditel."')";(isset($_POST['op_upd']))

$STR="update opisanie set tech_dannie='".$tech_dannie."', garantia='".$garantia."', proizvoditel='".$proizvoditel."' where id_tovara='".$id_op."'";_query($STR);('Location: about_tovar.php?a=1&id='.$id_op);

}header('Location: about_tovar.php?id='.$id_op);

}

//korzina(isset($_GET['basket']))

{

$count=$_GET['count'];

$id=$_GET['id'];

$goodsid=$_GET['goodsid'];

$id_klienta=$_SESSION['id_klienta'];($count>0)

{"dbconnect.php";

$testing=mysql_query("select * from korzina where id_klienta='".$id_klienta."' and status='nabor'");(count(mysql_fetch_row($testing))==1)

{

$data_pok=date("d.m.y H:i");_query("insert into korzina (id_klienta,data_pok,summa,status) values ('".$id_klienta."','".$data_pok."','0','nabor')");

}

$query_k=mysql_query("select id_korzini from korzina where id_klienta='".$id_klienta."' and status='nabor'");($row_k=mysql_fetch_row($query_k))

$id_korzini=$row_k[0];

$query_t=mysql_query("select nazvanie,cena,ed_izmerenia,kol_sklad from tovari where id_tovara='".$goodsid."'");($row_t=mysql_fetch_row($query_t))

{

$nazvanie=$row_t[0];

$cena=$row_t[1];

$ed_izmerenia=$row_t[2];

$kol_sklad=$row_t[3];

}($kol_sklad>=$count)

{_query("insert into tovari_korz (id_korzini,nazvanie,cena,ed_izmerenia,kolichestvo,id_tovara) values ('".$id_korzini."','".$nazvanie."','".$cena."','".$ed_izmerenia."','".$count."','".$goodsid."')");

$itog_cena=$cena*$count;_query("update korzina set summa=summa+'".$itog_cena."' where id_korzini='".$id_korzini."'");('Location: index.php?id='.$id.'&goodsid='.$goodsid.'&res=1');

}header('Location: index.php?id='.$id.'&goodsid='.$goodsid.'&res=3');

}header('Location: index.php?id='.$id.'&goodsid='.$goodsid.'&res=2');

}

//korzina otpravit manageram(isset($_POST['accept']))

{"dbconnect.php";

$id_korzini=$_POST['id_korzini'];

$testing=mysql_query("select * from tovari_korz where id_korzini='".$id_korzini."'");(count(mysql_fetch_row($testing))>1)

{

$data_pok=date("d.m.y H:i");_query("update korzina set status='podtverjden', data_pok='".$data_pok."' where id_korzini='".$id_korzini."'");('Location: cabinet.php?r=2');

}

}

//otmenit zakaz(isset($_POST['del_zak']))

{"dbconnect.php";

$id_korzini=$_POST['id_korzini'];

$delete=mysql_query("delete from korzina where id_korzini='".$id_korzini."'");('Location: orders_new.php?r=1');

}

//otpravit so sklada(isset($_POST['send_zak']))

{"dbconnect.php";

$id_korzini=$_POST['id_korzini'];

$data_otpr=date("d.m.y H:i");_query("update korzina set status='otpravlen', data_pok='".$data_otpr."' where id_korzini='".$id_korzini."'");

$tovar_minus=mysql_query("select kolichestvo,id_tovara from tovari_korz where id_korzini='".$id_korzini."'");($row_tovar=mysql_fetch_row($tovar_minus))_query("update tovari set kol_sklad=kol_sklad-'".$row_tovar[0]."' where id_tovara='".$row_tovar[1]."'");('Location: orders_new.php?r=2');

}

//registracia(isset($_GET['register']))

{"dbconnect.php";

$login=$_GET['login'];

$parol=$_GET['password'];

$iniciali_klienta=$_GET['fio'];

$adres=$_GET['target_address'];

$email=$_GET['email'];

$telephone=$_GET['phone_number'];

$query="select count(`id_klienta`) from `klient` where `login`='".$login."'";

$test=mysql_query($query);($row=mysql_fetch_row($test))

$c=$row[0];($c==0)

{_query("insert into klient (`iniciali_klienta`,`login`,`parol`,`telephone`,`email`,`adres`) values ('".$iniciali_klienta."','".$login."','".$parol."','".$telephone."','".$email."','".$adres."')");('Location: index.php?registered=1');

}header('Location: register.php?loginerr=1');

}

//kartinki(isset($_POST['upload']))

{

$id=$_POST['hideid'];($_FILES['userfile']['tmp_name']!="")

{"dbconnect.php";

$uploaddir = 'images/';

$apend=date('YmdHis').rand(100,1000).'.jpg';

$uploadfile = "$uploaddir$apend";($_FILES['userfile']['size']!=0 and $_FILES['userfile']['size']<=1024000)

{($_FILES['userfile']['type']=="image/jpeg")

{(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))

{_query("insert into izobrajenia (id_tovara,izobrajenie) values ('".$id."','".$uploadfile."')");("Location: about_tovar.php?upl=1&id=".$id);

}("Location: about_tovar.php?uplerr=3&id=".$id);

}("Location: about_tovar.php?uplerr=1&id=".$id);

}("Location: about_tovar.php?uplerr=2&id=".$id);

}("Location: about_tovar.php?id=".$id);

}

//dobavit kolichestvo tovara(isset($_POST['updcnt']))

{"dbconnect.php";

$updname=$_POST['updname'];

$updnumber=$_POST['updnumber'];_query("update tovari set kol_sklad=".$updnumber." where id_tovara='".$updname."'");('Location: goodsdb_stat.php?r=2');

}

//prava managera i uzera(isset($_POST['addprivileges']))

{"dbconnect.php";

$userid=$_POST['userid'];

$numpage=$_POST['numpage'];

$sort=$_POST['sort'];($_POST['priv']=="Отменить")_query("update klient set metka='' where id_klienta=".$userid."");($_POST['priv']=="Добавить")_query("update klient set metka='manager' where id_klienta=".$userid."");('Location: admin.php?numpage='.$numpage.'&sort='.$sort.'');

}

?>

Приложение Б

.php

<?_start();ShowTable($tname,$idname,$met,$number,$method,$numpage,$rcount)

{"dbconnect.php";($met)

{0: {$query = "select * from $tname order by ".$method." limit ".($numpage*10).",10" ; break;}1: {$query = "select * from $tname where id_tipa=$number order by ".$method." limit ".($numpage*10).",10"; break;}2: {$query = "select * from $tname where kol_sklad=0 order by ".$method." limit ".($numpage*10).",10"; break;}4: {$query = "select * from $tname where metka!='administrator' order by ".$method." limit ".($numpage*10).",10"; break;}

}

$result = MYSQL_QUERY($query);

$total_rows = mysql_num_rows($result);(!$total_rows)

{"<i>Таблица пуста</i>";;

}

$tmp_result=MYSQL_QUERY($query);

$row = mysql_fetch_row($tmp_result);

$total_cols = count($row);"<form name='sel1' action='actions.php' method='post'>";"<table border='0' cellspacing='1' cellpadding='1' align='center'>";($met)

{0: {print "<tr bgcolor='#FCDBA9'>

<td align='center'>Номер</td>

<td align='center'>Тип</td>

<td align='center'></td>

</tr>"; break;}1: {print "<tr bgcolor='#FCDBA9'>

<td align='center'>Номер</td>

<td align='center'>Название</td>

<td align='center'>Цена</td>

<td align='center'>Ед. изм.</td>

<td align='center'>Кол.</td>

<td align='center'>Тип</td>

<td align='center'></td>

<td align='center'>Опис.</td>

</tr>"; break;}2: {print "<tr bgcolor='#FCDBA9'>

<td align='center'>Номер</td>

<td align='center'>Название</td>

<td align='center'>Цена</td>

<td align='center'>Ед. изм.</td>

<td align='center'>Кол.</td>

<td align='center'>Тип</td>

<td align='center'></td>

<td align='center'>Пополнить</td>

</tr>"; break;}4: {print "<tr bgcolor='#FCDBA9'>

<td align='center'>Номер</td>

<td align='center'>Инициалы</td>

<td align='center'>Логин</td>

<td align='center'>Пароль</td>

<td align='center'>Телефон</td>

<td align='center'>E-mail</td>

<td align='center'>Адрес</td>

<td align='center'></td>

<td align='center'>Права менеджера</td>

</tr>"; break;}

}

$iter=0;($met==4) $total_cols-=1;($row = mysql_fetch_row ($result))

{

$i = 0;

$iter++;

$N=$row[0];

$metka=$row[7];(($iter % 2)!=0)"<tr bgcolor='#E3F9A4'>";"<tr bgcolor='#EBFABE'>";($i < $total_cols)

{($i)

{0 : {print "<td align='center'>"; break;}1 : {print "<td>"; break;}2 : {print "<td align='center'>"; break;}3 : {print "<td align='center'>"; break;}4 : {print "<td align='center'>"; break;}5 : {print "<td align='center'>"; break;}6 : {print "<td align='center'>"; break;}

}$row[$i];"</td>";

$i++;

}"<td align='center' width='5'><input type='checkbox' name=arr[] value=$N></td>";($met==2)

{"<form name='updatecnt' action='actions.php' method='post'><td align='center' width='5'><nobr>

<input type='hidden' name='updname' value=$N>

<input type='input' name='updnumber' value='0'>

<input type='submit' name='updcnt' value='Ок'></nobr></td></form>";

}($met==4)

{"<form action='actions.php' method='post'><td align='center' width='5'><input type='hidden' name='numpage' value='$numpage'>

<input type='hidden' name='sort' value='$method'><input type='hidden' name='userid' value='$N'>";($metka=="manager") print "<input type='submit' value='Отменить' name='addprivileges'>

}($met==1)

{

$prov=MYSQL_QUERY("select * from opisanie where id_tovara=$N");(count(mysql_fetch_row($prov))==1)"<td align='center' width='5'><input type='button' name='sql_add' value='Доб.' onclick=rnum($N)></td>";print "<td align='center' width='5'><input type='button' name='sql_add' value='Ред.' onclick=rnum($N)></td>";

}"</tr>";

}"</TABLE>";"Страницы: ";($i=0;$i<($rcount/10);$i++)

{($met==0)"<a href='goodsdb_tip.php?goodtype=".$method."&numpage=".$i."'>";($met==1)"<a href='goodsdb_tovar.php?goodtype=".$method."&numpage=".$i."&number=".$number."'>";($met==2)"<a href='goodsdb_stat.php?goodtype=".$method."&numpage=".$i."'>";($met==4)"<a href='admin.php?numpage=".$i."&sort=".$method."'>";(($_GET['numpage'])==$i)"<b><font size='4'>".($i+1)."</font></b></a> ";($i+1)."</a> ";

}"<input type='hidden' name='tablename' value=$tname>";"<input type='hidden' name='idname' value=$idname>";"<input type='hidden' name='number' value=$number>";"<input type='hidden' name='met' value=$met><br><br>";"<input id='del' type='submit' value='Удалить отмеченные' name='del'/>";"</form>";

}ShowImage($tname, $idname, $idname2, $number)

{"dbconnect.php";

$query = "select * from $tname where id_tovara=$number";

$result = MYSQL_QUERY($query);

$total_rows = mysql_num_rows($result);(!$total_rows)

{"Таблица $tname пуста";;

}

$tmp_result=MYSQL_QUERY($query);

$row = mysql_fetch_row($tmp_result);

$total_cols = count($row);"<form name='sel2' action='actions.php' method='post'>";"<table border='0' cellspacing='1' cellpadding='1' align='center'>";"<tr bgcolor='#FCDBA9'>

<td align='center'>Номер</td>

<td align='center'>Номер товара</td>

<td align='center'>Изображение</td>

<td align='center'></td>

</tr>";

$iter=0;($row = mysql_fetch_row ($result))

{

$i = 0;

$iter++;

$N=$row[0];(($iter % 2)!=0)"<tr bgcolor='#E3F9A4'>";"<tr bgcolor='#EBFABE'>";($i < $total_cols)

{($i)

{0 : {print "<td align='center'>"; break;}1 : {print "<td align='center'>"; break;}2 : {print "<td align='center'>"; break;}3 : {print "<td align='center'>"; break;}

}($i!=2) print $row[$i];print "<img src='".$row[$i]."' height='100' onclick='changeSizeImage(this)'>";"</td>";

$i++;

}"<td align='center' width='5'><input type='checkbox' name=arr[] value=$N></td></tr>";

}"</TABLE>";"<input type='hidden' name='tablename' value=$tname>";"<input type='hidden' name='idname' value=$idname2>";"<input type='hidden' name='number' value=$number>";"<input type='hidden' name='met' value='5'>";"<input id='del' type='submit' value='Удалить отмеченные' name='del'/>";"</form>";

}

?>

<script type="text/javascript" src="jquery.js"></script>

<script>rnum(n)

{leftvar = (screen.width-700)/2;topvar = (screen.height-600)/2;= window.open('about_tovar.php?id='+n,'formWindow', 'left='+leftvar+',top='+topvar+',width=700,height=600,toolbar=no,menubar=no,location=no,directories=no,scrollbars=yes');.focus();

}

</script>

Приложение В

_store.php

<?_start();"dbconnect.php";ShowGoods($tname,$number,$method,$numpage,$minsumm,$maxsumm,$showzero,$showpic,$rcount)

{($showzero=="on") $mode_zero=">="; else $mode_zero=">";($showpic=="on") $mode_pic=" and izobrajenia.id_tovara=tovari.id_tovara"; else $mode_pic="";

$query = "select distinct tovari.id_tovara,tovari.nazvanie,tovari.cena,tovari.kol_sklad,tovari.ed_izmerenia,tovari.id_tipa from $tname,izobrajeniatovari.kol_sklad".$mode_zero."0 and tovari.id_tipa=".$number."".$mode_pic." and tovari.cena>=".$minsumm." and tovari.cena<=".$maxsumm." order by ".$method." limit ".($numpage*20).",20";

$result = MYSQL_QUERY($query);

$total_rows = mysql_num_rows($result);

if (!$total_rows)

{"<i>В данной категории нет товаров</i>";

return;

}

$tmp_result=MYSQL_QUERY($query);

$row = mysql_fetch_row($tmp_result);

$total_cols = count($row);"<form name='sel1' action='actions.php' method='post'>";"<table border='0' cellspacing='1' cellpadding='1' align='center'>";"<tr bgcolor='#FCDBA9'>

<td align='center'>Название</td>

<td align='center'>Цена за единицу</td>

<td align='center'>Единиц на складе</td>

<td align='center'>Измерение</td>

<td align='center'>О товаре</td>

</tr>";

$iter=0;($row = mysql_fetch_row ($result))

{

$i=0;

$iter++;

$N=$row[0];(($iter % 2)!=0)"<tr bgcolor='#E3F9A4'>";"<tr bgcolor='#EBFABE'>";($i < $total_cols)

{(($i!=0) && ($i!=5))

{($i)

{1 : {print "<td>"; break;}2 : {print "<td align='center'>"; break;}3 : {print "<td align='center'>"; break;}4 : {print "<td align='center'>"; break;}

}$row[$i];"</td>";

}

$i++;

}"<td align='center'><a href='index.php?id=$number&goodsid=$N'>Подробнее</a></td>";"</tr>";

}"</table>";"Страницы: ";($i=0;$i<($rcount/20);$i++)

{"<a href='index.php?id=".$number."&sort=".$method."&summin=".$minsumm."&summax=".$maxsumm."&showzero=".$showzero."&showpic=".$showpic."&numpage=".$i."'>";(($_GET['numpage'])==$i)"<b><font size='4'>".($i+1)."</font></b></a> ";($i+1)."</a> ";

}"</form>";

}ShowAbout($tname1, $tname2, $number)

{

$query_t = "select id_tovara,nazvanie,cena,kol_sklad,ed_izmerenia,id_tipa from $tname1 where id_tovara=$number";

$result_t = mysql_query($query_t);

$total_rows_t = mysql_num_rows($result_t);($row_t = mysql_fetch_row ($result_t))

{

$id_tovara=$row_t[0];

$nazvanie=$row_t[1];

$cena=$row_t[2];

$kol_sklad=$row_t[3];

$ed_izmerenia=$row_t[4];

$id_tipa=$row_t[5];

}"<form name='sel2' action='actions.php' method='post'>";"<table border='0' cellspacing='1' cellpadding='1' align='center'>";"<tr bgcolor='#E3F9A4'>

<td align='center' bgcolor='#FCDBA9'>Название</td>

<td>$nazvanie</td></tr>

<tr bgcolor='#EBFABE'>

<td align='center' bgcolor='#FCDBA9'>Цена за единицу</td>

<td>$cena руб.</td></tr>

<tr bgcolor='#E3F9A4'>

<td align='center' bgcolor='#FCDBA9'>На складе</td>

<td>$kol_sklad $ed_izmerenia</td></tr>";

$query_o = "select id_opisania,tech_dannie,garantia,proizvoditel from $tname2 where id_tovara=$number";

$result_o = mysql_query($query_o);

$total_rows_o = mysql_num_rows($result_o);($row_o = mysql_fetch_row ($result_o))

{

$id_opisania=$row_o[0];

$tech_dannie=$row_o[1];

$garantia=$row_o[2];

$proizvoditel=$row_o[3];

}($id_opisania=="")

{

$tech_dannie="n/a";

$garantia="n/a";

$proizvoditel="n/a";

}"<tr bgcolor='#EBFABE'>

<td align='center' bgcolor='#FCDBA9'>Технические характеристики</td>

<td>".nl2br($tech_dannie)."</td></tr>

<tr bgcolor='#E3F9A4'>

<td align='center' bgcolor='#FCDBA9'>Производитель</td>

<td>$proizvoditel</td></tr>

<tr bgcolor='#EBFABE'>

<td align='center' bgcolor='#FCDBA9'>Гарантия</td>

<td>$garantia</td></tr>

<tr bgcolor='#E3F9A4'>

<td align='center' bgcolor='#FCDBA9'>Изображения</td>

<td align='center'>";

$imgquery=mysql_query("select `izobrajenie` from izobrajenia where id_tovara=$number");($row_img = mysql_fetch_row ($imgquery))

{"<img src='".$row_img[0]."' height='100' onclick='changeSizeImage(this)' title='Кликните левой клавишей мыши для увеличения или уменьшения'>&#8195;";

}"</td></tr>";"</table>";"</form>";"<br>";

}ShowBasket($id_klienta,$status,$met)

{"dbconnect.php";

$query_k_tmp=mysql_query("select id_korzini from korzina where id_klienta='".$id_klienta."' and status='".$status."'");

$total_rows=mysql_num_rows($query_k_tmp);(!$total_rows)

{"<i>Корзина пуста</i>";;

}($status=='nabor')

{

$query_k=mysql_query("select id_korzini,summa from korzina where id_klienta='".$id_klienta."' and status='".$status."'");($row_k=mysql_fetch_row($query_k))

{

$id_korzini=$row_k[0];

$summa=$row_k[1];

}

}($status=='podtverjden')

$id_korzini=$met;($status=='otpravlen')

$id_korzini=$met;

$query_t_tmp=mysql_query("select id_tovara_korz,nazvanie,cena,kolichestvo,ed_izmerenia from tovari_korz where id_korzini='".$id_korzini."'");

$total_rows=mysql_num_rows($query_t_tmp);(!$total_rows)

{"<i>Корзина пуста</i>";;

}

$tmp_result=mysql_query("select id_tovara_korz,nazvanie,cena,kolichestvo,ed_izmerenia from tovari_korz where id_korzini='".$id_korzini."'");

$row=mysql_fetch_row($tmp_result);

$total_cols=count($row);

$query_t=mysql_query("select id_tovara_korz,nazvanie,cena,kolichestvo,ed_izmerenia from tovari_korz where id_korzini='".$id_korzini."'");"<HTML><BODY><form name='sel1' action='actions.php' method='post'>";"<table border='0' cellspacing='1' cellpadding='1' align='center'>";"<tr bgcolor='#FCDBA9'>";($status=='nabor')"<td align='center'></td>";"<td align='center'>Название</td>

<td align='center'>Цена за единицу</td>

<td align='center'>Количество</td>

<td align='center'>Измерение</td>

</tr>";

$iter=0;($row=mysql_fetch_row ($query_t))

{

$i=0;

$iter++;

$N=$row[0];(($iter % 2)!=0)"<tr bgcolor='#E3F9A4'>";"<tr bgcolor='#EBFABE'>";($status=='nabor')"<td align='center' ><input type='checkbox' name=arr[] value=$N></td>";($i < $total_cols)

{($i!=0)

{($i)

{1 : {print "<td>"; break;}2 : {print "<td align='center'>"; break;}3 : {print "<td align='center'>"; break;}4 : {print "<td align='center'>"; break;}

}$row[$i];"</td>";

}

$i++;

}"</tr>";

}"<input type='hidden' name='tablename' value='tovari_korz'>";"<input type='hidden' name='idname' value='id_tovara_korz'>";"<input type='hidden' name='number' value='0'>";"<input type='hidden' name='met' value=$met>";"<input type='hidden' name='id_korzini' value=$id_korzini>";($status=='nabor')"<tr><td colspan='2' align='left'><input id='del' type='submit' value='Удалить отмеченные' name='del'></td>

<td colspan='3' align='right'>Итого: ".$summa." руб. <input id='accept' type='submit' value='Отправить' name='accept'></td></tr>";"</TABLE>";"</form></BODY></HTML>";

}ShowBasketApprovement($id_korzini,$mode)

{"dbconnect.php";

$query_k_tmp=mysql_query("select id_tovara,nazvanie,cena,kolichestvo,ed_izmerenia from tovari_korz where id_korzini='".$id_korzini."'");

$total_rows=mysql_num_rows($query_k_tmp);(!$total_rows)

{"<i>Новых заказов нет</i>";;

}

$id_klienta_arr=mysql_query("select id_klienta from korzina where id_korzini='".$id_korzini."'");($row_k=mysql_fetch_row ($id_klienta_arr))

$id_klienta=$row_k[0];

$klient_arr=mysql_query("select iniciali_klienta,telephone,email,adres from klient where id_klienta='".$id_klienta."'");($row_kl=mysql_fetch_row ($klient_arr))

{

$iniciali_klienta=$row_kl[0];

$telephone=$row_kl[1];

$email=$row_kl[2];

$adres=$row_kl[3];

}"

<table border='0' cellpadding='1' cellspacing='1'>

<tr>

<td bgcolor='#FCDBA9'>Инициалы: </td>

<td bgcolor='#E3F9A4'>$iniciali_klienta</td>

</tr>

<tr>

<td bgcolor='#FCDBA9'>Телефон: </td>

<td bgcolor='#EBFABE'>$telephone</td>

</tr>

<tr>

<td bgcolor='#FCDBA9'>E-mail: </td>

<td bgcolor='#E3F9A4'>$email</td>

</tr>

<tr>

<td bgcolor='#FCDBA9'>Адрес: </td>

<td bgcolor='#EBFABE'>$adres</td>

</tr>

</table><br>";

$summa_arr=mysql_query("select summa from korzina where id_korzini='".$id_korzini."'");($row_s=mysql_fetch_row ($summa_arr))

$summa=$row_s[0];

$tmp_result=mysql_query("select id_tovara,nazvanie,cena,kolichestvo,ed_izmerenia from tovari_korz where id_korzini='".$id_korzini."'");

$row=mysql_fetch_row($tmp_result);

$total_cols=count($row);

$query_t=mysql_query("select id_tovara,nazvanie,cena,kolichestvo,ed_izmerenia from tovari_korz where id_korzini='".$id_korzini."'");"<form name='sel0' action='actions.php' method='post'>";"<table border='0' cellspacing='1' cellpadding='1' align='center'>";"<tr bgcolor='#FCDBA9'>";"<td align='center'>Номер</td>

<td align='center'>Название</td>

<td align='center'>Цена за единицу</td>

<td align='center'>Количество</td>

<td align='center'>Измерение</td>

</tr>";

$iter=0;($row=mysql_fetch_row ($query_t))

{

$i=0;

$iter++;(($iter % 2)!=0)"<tr bgcolor='#E3F9A4'>";"<tr bgcolor='#EBFABE'>";($i < $total_cols)

{($i)

{0 : {print "<td align='center'>"; break;}1 : {print "<td>"; break;}2 : {print "<td align='center'>"; break;}3 : {print "<td align='center'>"; break;}4 : {print "<td align='center'>"; break;}

}$row[$i];"</td>";

$i++;

}"</tr>";

}"<input type='hidden' name='id_korzini' value=$id_korzini>";"<tr><td colspan='5' align='right'>Итого: ".$summa." руб.</td></tr>";"</table>";"</form>";

}ShowOrders($method,$numpage,$rcount,$stat)

{"dbconnect.php";($stat=="done")

$res = mysql_query('select korzina.id_klienta,korzina.id_korzini,klient.iniciali_klienta,korzina.data_pok,korzina.summa from korzina,klient where status="otpravlen" and klient.id_klienta=korzina.id_klienta order by '.$method.' limit '.($numpage*10).',10');($stat=="new")

$res = mysql_query('select korzina.id_klienta,korzina.id_korzini,klient.iniciali_klienta,korzina.data_pok,korzina.summa from korzina,klient where status="podtverjden" and klient.id_klienta=korzina.id_klienta order by '.$method.' limit '.($numpage*10).',10');

$total_rows = mysql_num_rows($res);($total_rows)

{

$iter=0;

$tcols=mysql_num_fields($res);"<table border='0' cellspacing='1' cellpadding='1' align='center'>";"<tr bgcolor='#FCDBA9'>

<td align='center'>№ заказа</td>

<td align='center'>Клиент</td>

<td align='center'>Дата</td>

<td align='center'>Сумма, руб.</td>

<td align='center'>Выписка</td>";($stat=="new")"<td align='center' colspan='2'>Действие</td>";

"</tr> ";($row = mysql_fetch_array($res))

{

$i=0;

$iter++;

$N=$row[1];(($iter % 2)!=0)"<tr bgcolor='#E3F9A4'>";"<tr bgcolor='#EBFABE'>";($stat=="new") $r=2;$r=1;($i=1;$i<$tcols+$r;$i++)

{"<form action='actions.php' method='post'>";($i!=2)"<td align='center'>";"<td align='left'>";($i<5)

{$row[$i];"</td>";

}($i==5)"<input type='button' name='view_goods' value='Открыть' onclick=rnum($N)></td>";($i==6)"<input type='hidden' name='id_korzini' value=$N><input id='send_zak' type='submit' value='Отгрузить' name='send_zak'></td><td><input id='del_zak' type='submit' value='Отменить заказ' name='del_zak'></td>";"</form>";

}"</tr>";

}"</table> ";"Страницы: ";($i=0;$i<($rcount/10);$i++)

{($stat=="done")"<a href='orders_done.php?ready=".$method."&numpage=".$i."'>";($stat=="new")"<a href='orders_new.php?ready=".$method."&numpage=".$i."'>";(($_GET['numpage'])==$i)"<b><font size='4'>".($i+1)."</font></b></a> ";($i+1)."</a> ";

}

}print "<i>Таблица пуста</i>";

}

?>



Введение Интернет-магазин - это магазин, «витрина» которого расположена в сети интернет и который дает возможность заказать товар через интерне

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ