Введение в программирование на PHP5

       

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


Выбор продукта и добавление его в корзину покупателя происходят на странице 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 записывает объект в корзину покупателя.


Пример I.11.

(html, txt)

Новая запись 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.



$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.


Содержание раздела