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


Создание заказа на продажу


Мы приходим теперь на первую страницу, которую видит заказчик, когда покидает компанию кредитных карт. Эта страница salesorder.php представляет сводку подтвержденного заказа (или сообщение "простите" при отвергнутом заказе), которую заказчик может распечатать для справки. Также, поскольку заказ был завершен, выводится новый номер заказа, на тот случай, если заказчик захочет продолжить покупки.


Основной раздел этой страницы начинается с заголовка страницы и получения строки запроса Approval, переданной со страницы ordercapture.php. Если подтверждение заказа будет "true", то начинается процесс вывода информации о заказе.

Пример I.17.

(html, txt)

Создается объект соединения для связи с базой данных eCommerce.mdb и используется оператор SQL для извлечения информации из таблиц OrderHeader и OrderDetail. Эти множества записей имеют общий номер заказа, который находится в глобальной переменной $_SESSION[OrderNo]. Тогда будет доступна вся информация для восстановления заказа, начиная с информации о выставленном счете к оплате, извлеченной из таблицы OrderHeader.

Стоит обратить внимание на небольшой раздел кода, следующий за открытием таблицы OrderHeader.

if (odbc_result($rsHeader,OrderNo) == "") { odbc_close($conn); ob_flush(); header("Location:home.php") }

Этот сценарий проверяет условие EOF на множестве записей, которое означает, что для OrderNo не было найдено подходящего значения. Как это может случиться, и зачем проверять? Это может случиться, если заказчик использует кнопку браузера "Back" ("назад") для возврата на предыдущую страницу (страница подтверждения компании кредитных карт), а затем снова нажимает кнопку "вперед" ("forward").

Когда данная страница загружается впервые для представления заказа на продажу, конечная часть сценария создает для заказчика новый номер заказа (см. ниже). Поэтому, если заказчик возвращается на страницу назад, а затем снова перемещается вперед, номер заказа, вновь посланный компанией кредитных карт, не будет совпадать с номером текущего заказа, и будет порождаться ошибка сценария. Данный раздел кода позволяет избежать этой проблемы, перенаправляя заказчика на страницу home.asp, если отсутствует совпадение. Невозможно запретить использовать кнопку браузера для возврата на предыдущую страницу, но можно перехватывать все проблемы, которые возникают при перемещении вперед.

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

Пример I.17.

(html, txt)

Форматирование этого заказа на продажу аналогично тому, которое использовалось при выводе корзины покупателя. Сценарий выполняет цикл по записям, извлеченным из таблицы OrderDetail, создавая строку для каждой записи. Как и раньше, вычисляется каждое значение $ItemAmount, накапливается общая сумма OrderTotal и вычисляется $OrderShipping на $OrderTotal.

(Здесь снова возникает тот случай, когда можно подумать о том, чтобы хранить плату за доставку в записи OrderHeader, а не вычислять ее во время создания заказа. Позже, когда этот заказ будет восстановлен, скорее всего, будет изменение в проценте оплаты и общая стоимость заказа будет отличаться от текущей. Здесь эта проблема рассматриваться не будет.)


if (odbc_result($rsHeader,OrderNo) == "") { odbc_close($conn); ob_flush(); header("Location:home.php") }

Этот сценарий проверяет условие EOF на множестве записей, которое означает, что для OrderNo не было найдено подходящего значения. Как это может случиться, и зачем проверять? Это может случиться, если заказчик использует кнопку браузера "Back" ("назад") для возврата на предыдущую страницу (страница подтверждения компании кредитных карт), а затем снова нажимает кнопку "вперед" ("forward").

Когда данная страница загружается впервые для представления заказа на продажу, конечная часть сценария создает для заказчика новый номер заказа (см. ниже). Поэтому, если заказчик возвращается на страницу назад, а затем снова перемещается вперед, номер заказа, вновь посланный компанией кредитных карт, не будет совпадать с номером текущего заказа, и будет порождаться ошибка сценария. Данный раздел кода позволяет избежать этой проблемы, перенаправляя заказчика на страницу home.asp, если отсутствует совпадение. Невозможно запретить использовать кнопку браузера для возврата на предыдущую страницу, но можно перехватывать все проблемы, которые возникают при перемещении вперед.

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

<?php echo odbc_result($rsHeader,CustomerName) ?><br> <?php echo odbc_result($rsHeader,CustomerAddress) ?><br> <?php echo odbc_result($rsHeader,CustomerCity) ?>, <?php echo odbc_result($rsHeader,CustomerState) ?> <?php echo odbc_result($rsHeader,CustomerZip) ?><br> <br> <table border="0" cellpadding="3"> <tr> <th>Item Number</th> <th>Title</th> <th>Quantity</th> <th>Price</th> <th>Amount</th> </tr> <?php $OrderTotal = 0 while ($row = odbc_fetch_array($rsDetail) { $ItemNumber = $row[ItemNumber] $ItemTitle = $row[ItemTitle] $ItemPrice = $row[ItemPrice] $ItemQuantity = $row[ItemQuantity] $ItemAmount = $ItemPrice * $ItemQuantity $OrderTotal = $OrderTotal + $ItemAmount


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