Опубликован: 08.05.2007 | Доступ: свободный | Студентов: 12881 / 3013 | Оценка: 4.13 / 3.77 | Длительность: 12:58:00
Дополнительный материал 1:

Приложение PHP E-Commerce

< Лекция 12 || Дополнительный материал 1: 123456789101112 || Дополнительный материал 2 >

Создание корзины покупателя

Нам потребуется корзина покупателя, с помощью которой заказчики могут выбирать продукты для покупки. Это делается с помощью кнопки "Buy Now" (Купить), появляющейся на странице detail.php. Когда происходит щелчок на кнопке, в корзину добавляется запись, идентифицирующая выбранный продукт. Выбранные продукты накапливаются, пока покупатель не оформит покупку, в этом случае объекты из корзины покупателя используются для подготовки заказа на покупку.

Создание таблицы корзины покупателя

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

Запись корзины покупателя должна содержать только минимальное количество информации. Она должна отслеживать заказчика, продукт и выбранное количество. Можно добавить дополнительные поля для поддержки других действий. Например, можно включить поле даты для отметки времени покупки (хорошая идея для очистки таблицы при отказе от покупки) и поле цены, если имеется риск, что цена объекта может измениться до окончательного оформления. Для текущих задач мы создаем следующую структуру таблицы ShopCart, которая добавляется в базу данных eCommerce.mdb.

ShopCart (таблица)
поле Название поле Тип поле Размер поле Количество
OrderNo Text 10 Номер заказа
OrderItem Text 6 Код продукта
OrderDate date/Time Дата заказа продукта
OrderQuantity Number Long Integer Выбранное количество продукта

Добавление объектов в корзину покупателя

Выбор продукта и добавление его в корзину покупателя происходят на странице detail.php. Когда покупатель щелкает на кнопке "Buy Now", информация о выбранном продукте записывается как новая запись в таблицу ShopCart. Объекты, накопленные в корзине покупателя, записываются как дополнительные покупки. После окончательного оформления и записи окончательного заказа корзину покупателя можно очистить от этих объектов.

Прежде всего, мы должны рассмотреть кнопку "Buy Now" на странице detail.php и запрограммировать ее для запуска процесса покупки.

<form action="detail.php?OrderItem=<?php echo $ItemNumber ?>" method="post">
  <input type="submit" class="buttonL" name="BuyButton" value="Buy Now"
    onMouseOver="OverMouse(this)"; onMouseOut="OutMouse(this)">
</form>

Атрибут ACTION, конечно, указывает на текущую страницу detail.php, кроме того, нам нужно передать на эту страницу, когда она перезагружается, информацию об ItemNumber продукта, добавляемого в корзину покупателя. Эта информация передается через строку запроса ?OrderItem=<?php echo $ItemNumber ?> (вспомните, что переменная ItemNumber доступна на этой текущей странице). Для передачи используется метод POST.

Здесь есть над чем подумать. Обычно теги <FORM> окружают поля данных, которые передаются, когда делается щелчок на кнопке отправки. Однако в данном случае полей формы нет – только одна кнопка. Поэтому, когда форма посылается, передаются только имя и значение кнопки. Однако нам надо передать значение ItemNumber продукта, выбранного на этой странице, чтобы его можно было добавить в корзину покупателя. Поэтому мы просто добавляем его как строку запроса в URL из ACTION. Теперь обе переменные, POST[BuyButton] (содержащая BuyButton ) и $_GET[OrderItem] (содержащая OrderItem ), становятся доступными на получающей странице. Отметим, что мы использовали имя строки запроса OrderItem для покупаемого продукта, чтобы избежать путаницы с ItemNumber рассматриваемого продукта.

Когда форма посылается, сценарий в начале страницы detail.php записывает объект в корзину покупателя.

<?php
session_start();
$ItemNumber = $_GET[ItemNumber];
$Category = $_GET[Category];
$Criterion =$_GET[Criterion];
$OrderNo = $_SESSION[OrderNo];
$OrderDate = date('n/d/y');

 if ($_POST[BuyButton] == "Buy Now")
  {
  
$OrderItem = $_GET[OrderItem];
$conn2 = odbc_connect('Driver={Microsoft Access Driver (*.mdb)};DBQ=c:\inetpub\wwwroot\PHPTutorial\Ecommerce\databases\ecommerce.mdb','','');
$sqlCart = "SELECT OrderNo,OrderItem FROM ShopCart WHERE OrderNo ='$OrderNo'";
$rsCart = odbc_exec($conn2,$sqlCart);
	
	while ($row = odbc_fetch_array($rsCart))
		{
			if ($row[OrderNo] == $OrderNo && $row[OrderItem] == $OrderItem)
		{
				$update = true;
		
		}
	
		}
	
	if (!$update)
	{
	$sqlInsert = "INSERT INTO ShopCart (OrderNo,OrderItem,OrderDate,OrderQuantity) Values ('$OrderNo', '$OrderItem','$OrderDate,1)";
	$rsInsert = odbc_exec($conn2,$sqlInsert);
	    }
	  else
	  {
	  
	  $sqlUpdate = "Update ShopCart SET OrderQuantity = OrderQuantity + 1 WHERE OrderNo = '$OrderNo' AND 			
	  OrderItem = '$OrderItem'";
	  $rsUpdate = odbc_exec($conn2,$sqlUpdate);
	  }
   header("Location:shopcart.php");
  }
?>
Пример I.11.

Новая запись ShopCart заполняется четырьмя значениями. OrderNo получают из объекта сеанса — $_SESSION[OrderNo]. OrderItem передается на эту страницу через строку запроса. OrderDate определяется текущей датой системы, полученной с помощью функции date(). OrderQuantity задается как 1. Когда объект выбирается в начале для покупки, мы автоматически задаем заказанное количество как 1. Покупатель может изменить это количество на странице корзины покупателя.

Мы имеем здесь также дело с ситуацией, в которой заказчик может попытаться купить один и тот же продукт несколько раз, намеренно или по неосторожности. Наше "бизнес-правило" говорит, что единовременно может быть заказан только один объект (хотя покупатели будут иметь возможность изменить заказанное количество на странице корзины покупателя). Мы не хотим, чтобы один и тот же объект появлялся несколько раз в корзине покупателя.

Такая ситуация легко решается начальной проверкой того, что запись для этого продукта уже существует в таблице ShopCart. Оператор SQL SELECT и цикл по возвращаемому множеству записей выполняют нужную проверку:

$sqlCart = "SELECT OrderNo,OrderItem FROM ShopCart WHERE OrderNo ='$OrderNo'";
$rsCart = odbc_exec($conn2,$sqlCart);
	
	while ($row = odbc_fetch_array($rsCart))
		{
			if ($row[OrderNo] == $OrderNo && $row[OrderItem] == $OrderItem)
		{
				$update = true;
		
		}
	
		}

Если найдены подходящие OrderNo и OrderItem, то потребуется оператор SQL UPDATE для обновления существующей записи. Если совпадений не найдено, требуется оператор SQL INSERT для создания новой записи. Для этого создается переменная ( $update ), которой присваивается значение true, если будут найдены подходящие OrderNo и OrderItem. Следующий блок кода содержит операторы INSERT и UPDATE. Значение переменной $update зависит от используемого оператора SQL:

if (!$update)
	{
	$sqlInsert = "INSERT INTO ShopCart (OrderNo,OrderItem,OrderDate,OrderQuantity) 
	Values ('$OrderNo', '$OrderItem',$OrderDate,1)";
	$rsInsert = odbc_exec($conn2,$sqlInsert);
	    }
	  else
	  {
	  $sqlUpdate = "Update ShopCart SET OrderQuantity = OrderQuantity + 1 WHERE OrderNo =
	  = '$OrderNo' AND 			
	  OrderItem = '$OrderItem'";
	  $rsUpdate = odbc_exec($conn2,$sqlUpdate);
	  }
   header("Location:shopcart.php");

После добавления новой записи множество записей и соединение закрываются, и покупатель посылается прямо на страницу корзины покупателя с помощью метода header("Location:url"). Предполагается, что покупатель захочет после выбора просмотреть объекты корзины покупателя. Дальше мы перейдем к программированию страницы shopcart.php.

< Лекция 12 || Дополнительный материал 1: 123456789101112 || Дополнительный материал 2 >
Максим Матросов
Максим Матросов
Наталья Джабасова
Наталья Джабасова