Хотя, конечно, вернее будет назвать это "система заказа товаров на сайте". Но, глядя на сайты многочисленных российских фирм, которые работают именно по такому принципу (www.dostavka.ru, www.depo.ru, www.wstore.ru), мы тоже с пафосом назовем набор простеньких скриптов "ИНТЕРНЕТ-МАГАЗИН". Что для этого потребуется: любой web-сервер, поддерживающий работу с cgi. Вполне подойдет apache, eserv, pws. Установленный php версий 3.0.х - 4.0.х, установленный сервер баз данных mysql (хотя, не имеет значения какой именно - но этот пример написан исходя из того, что установлен именно mysql). Платформа не имеет особого значения. Это будет работать и на win32, и на unix. Что мы хотим получить: чтобы пользователи, путешествуя по нашему сайту, могли заказать интересующие их товары, и чтобы этот заказ попал к нам в руки. А дальше уже начинается обычная работа менеджеров. Определим задачи: 1) Каждый пользователь при заходе на сайт должен получить уникальный идентификатор. Мы же должны знать кто именно заказывает товары? 2) Для каждого пользователя у нас должна хранится виртуальная "корзина", где будет учитываться что заказано и в каком кол-ве. 3) В конце концов, весь заказ отправляется по e-mail менеждеру (с информацией кто, когда, что и сколько заказал) и самому пользователю сделавшему заказ.
Начинаем.
Делаем таблицы для базы данных товаров. Здесь нужна оговорка - идеальный случай, если у вас каждый товар имеет свой уникальный код. По всем правилам именно так и должно быть. У вас не так? Сделайте поле auto_increment - сильно облегчите жизнь. Вообщем, будем счиатать что с базой товаров у Вас все ок. Для определенности, рассмотрим самый простой случай - у вас всего одна таблица с примерно такой структурой:
create table main ( id varchar(20) not null, manufacture varchar(255), name varchar(255) not null, price double(8,2) default '0.00' not null, primary key (id) );
insert into main values ( '1002575', 'manuf_1', 'tovar 1', '150.21'); insert into main values ( '125575', 'manuf_1', 'tovar 2', '254.02'); insert into main values ( '1255757', 'manuf_1', 'tovar 3', '456.24'); insert into main values ( '4556852', 'manuf_2', 'tovar 1', '75.24'); insert into main values ( '15957725', 'manuf_2', 'tovar 2', '5721.01'); insert into main values ( '5732548', 'manuf_2', 'tovar 3', '685.49');
Но никакой разницы принципиальной нет, конечно же. 1) Делаем файл, в котором у нас каждому пользователю присваивается идентификатор:
Файл cookie.php3
<? if (isset ($cookie_tmp)) { $uid = $cookie_tmp; } else { srand(time()); $uid = md5(uniqid( "")); setcookie ( "cookie_tmp",$uid,time()+604800, "/"); } ?>
Этим мы устанавливаем файл cookie с именем cookie_tmp, значением $uid и временем жизни 1 неделя с настоящего момента. Этот файл вставляем ДО вывода ЛЮБЫХ тэгов html на все (или на какие надо) страницы нашего сайта:
<?php require ("cookie.php3"); ?>
Если Вас не прельщает использование файлов cookie можно таскать этот самый $uid по всему сайту через строку запроса или скрытые поля формы...
2) Делаем таблицу для хранения "корзины" заказов:
create table shop_tmp ( id int(20) default '0' not null auto_increment, uid varchar(50) default '0' not null, activated int(14) default '0' not null, goods_id int(20) default '0' not null, goods text not null, price double(8,2) default '0.00' not null, quantity smallint(6) default '0' not null, summa double(8,2) default '0.00' not null, primary key (id) );
Поле activated пригодится для проверки когда была добавлена запись в таблицу и удаления, если, к примеру, это произошло больше недели назад.
2.1) Делаем файл который добавляет в эту нашу таблицу информацию:
Файл add.php3
<html><body>
<div align="center">Добавление товаров в корзину</div>
<table border=1 align="center"> <tr> <td>Производитель</td> <td>Наименование товара</td> <td>Цена</td> </tr>
<?php
require ( "connect.php3");
$result = mysql($dbname, "select * from main where id='$id' "); $manufacture = mysql_result($result,0, "manufacture"); $name = mysql_result($result,0, "name"); $price = mysql_result($result,0, "price"); ?>
<tr>
<td> <? echo "$manufacture"; ?></td> <td> <? echo "$name"; ?></td> <td> <? echo "$price"; ?> руб.</td>
</tr></table>
<form action="basket.php3" method="post">
<div align="center"> <p>Количество <input type="text" name="quantity" value="1" maxlength="4"> шт. <input type="submit" name="add" value="Добавить в корзину"> </p> </div> <input type="hidden" name="goods_id" value=" <? echo "$id"; ?>"> <input type="hidden" name="goods" value=" <? echo "$manufacture $name"; ?>"> <input type="hidden" name="price" value=" <? echo "$price"; ?>"> <input type="hidden" name="uid" value=" <? echo "$uid"; ?>">
</form></body></html>
2.2) С учетом этого, теперь наш файл который выводит информацию из базы данных выглядит примерно так:
Файл show.php3
<?php require ( "cookie.php3"); ?> <html> <head> <script language="javascript"> function basket(url) { bag = window.open(url,'basket','toolbar=no,location=no,status=no, menubar=no,scrollbars=yes,width=600,height=300,resizable=yes'); bag.focus();} </script> </head> <body>
<table border=1>
<?php require ( "connect.php3");
$sql = "select * from main order by manufacture, name";
$result = mysql($dbname,$sql); $num = mysql_num_rows($result); $i = 0;
while($i<$num) {
$id=mysql_result($result,$i, "id"); $manuf=mysql_result($result,$i, "manufacture"); $name=mysql_result($result,$i, "name"); $price=mysql_result($result,$i, "price");
echo "<tr>n <td>$manuf</td>n <td>$name</tdn> <td>$price </td>n <td><a href="javascript:basket('add.php3?uid=$uid&id=$id')">Заказ</a></td>n </tr>"; $i++; }
?>
</table> </body></html>
2.3)
|