Хотя, конечно, вернее будет назвать это "система заказа товаров на сайте". Но, глядя на сайты многочисленных российских фирм, которые работают именно по такому принципу (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 с именем 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>
$result = mysql($dbname, select * from $table_4 where (goods_id=$goods_id) and (uid=$uid) ); $num = mysql_num_rows($result);
if ($num > 0) // значит такой товар в корзине уже есть и надо увеличить кол-во и сумму { $result_1=mysql($dbname, select * from $table_4 where (goods_id=$goods_id) and (uid=$uid) );
4) ... и отправить письма (клиенту и менеджеру) Да, необходимый комментарий. Я на первой странице своего сайта указывал что это просто СОВЕТЫ, а никак не готовые решения. И что необходимо почитать кое-что еще прежде чем браться за написание. В данном случае, я намекаю на статью "приемы безопасного программирования на php". Вот посмотрите листинг следующего файла и прочитайте то, о чем я говорю - сразу станет ясно где дыра...
Файл end.php3
<? if ($name == ) { echo Вы не указали свое имя!; exit; }
elseif ($email == ) { echo Вы не указали адрес email!; exit;}
else {
//$message & $header - это для отправки менеджеру //$message_1 & $header_1 - это для отправки клиенту
$message= <html><body><font size=+1><p align=justify> Новый заказ с сайта www.nnn.net.<br> Сведения о покупателе:<br> Имя - $name<br> Компания - $company<br> Телефон - $phone<br> e-mail - $email<br><br> Содержание заказа:<br><br> <table border=1> $body <tr><td colspan=5><b> Всего на сумму - $total руб.</b></td></tr> </table></font></p></body></html> ;
$header= to: info@nnn.netnfrom: mail-robot@nnn.netnreply-to: $emailnx-mailer: php auto-mailerncontent-type: text/html;nmime-version: 1.0n ;
$message_1= <html><body><font size=+1><p align=justify> Уважаемый $name!n На сайте фирмы nnn (www.nnn.net) Вами был сделан заказ: <br><br> <table border=1> $body <tr><td colspan=5><b> Всего на сумму - $total руб.</b></td></tr> </table><br> Наши менеджеры свяжутся с Вами в самое ближайшее время для уточнения деталей. Спасибо. </font></p></body></html>;
$header_1= to: $emailnfrom: mail-robot@nnn.netnreply-to: info@nnn.netnx-mailer: php auto-mailerncontent-type: text/html;nmime-version: 1.0n ;
@mail( info@nnn.net, order from nnn web site, $message, $header); @mail($email, order from nnn web site, $message_1, $header_1);
echo <h4>Уважаемый <b>$name</b>! Ваш заказ принят. Менеджер нашей фирмы свяжется с Вами в ближайшее время для уточнения деталей.<br> Спасибо за посещение нашего сайта!</h1>n; } ?>
Ну что? Разумеется, опасность в том, что этому скрипту можно подсунуть ЛЮБЫЕ данные и он их отправит спокойно.. Выход: не пересылать с предыдущей страницы содержимое заказа, а формировать его непосредственно в этом скрипте. Вообще, надо стараться таскать за собой как можно меньше данных. Также, НИКОГДА не повредит проверка того, с какой страницы пришел запрос. 5) Все. Мы получили все что хотели. Теперь осталось только сделать функцию которая будет чистить таблицу shop_tmp от старых заказов. Но это уже сами.
6) Перед всеми операциями с базой данных вызывается файл для соединения с базой данных такого вида:
mysql_connect($host,$user,$password); mysql_select_db($dbname) or die( unable to select database); }
?>
ps. Еще раз повторяю - все что здесь написано я проверил - ЭТО работает. Если у вас не так - вы просто что-то неправильно сделали... pps. По просьбам трудящихся, дописан пункт 4. И немного поправлен пункт три..