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

       

Обновление корзины покупателя


Ниже показан весь сценарий обновления корзины покупателя, когда заказчик щелкает на кнопке формы "Update".

Пример I.14.

(html, txt)

Прежде всего, создается соединение с базой данных eCommerce.mdb. Объект множества записей (Recordset) здесь не требуется, так как обновления делаются непосредственно командами SQL, выполняемыми с помощью объекта соединения (Connection).

Затем применяется цикл foreach для итераций по именам и значениям, помещенным в массив $_REQUEST[] после отправки формы на сервер. Переменная с именем $key используется для ссылки на имена полей, находящиеся в массиве.

При просмотре элементов массива выполняется проверка того, что имя поля начинается с буквы "Q":

if (strpos($key,"Q") === 0 ) { }

Функция PHPstrpos() применяется для проверки, что первый символ (или символ в позиции 0) имени элемента управления формы совпадает с "Q". Если первый символ "Q", то это будет поле количества, содержащее значение для обновления корзины покупателя. Здесь важно отметить, что используется оператор сравнения PHP "===" ("идентично"), а не оператор сравнения "==" ("равно"). Это необходимо, потому что функция strpos() требует для проверки своих возвращаемых значений "===".

Затем сценарий определяет, какую надо обновить запись о продукте и каким является фактическое значение количества:

$OrderItem = substr($key,1); $OrderQuantity = $value;

Мы знаем, что код продукта, связанный с полем количества, содержится в переменной $key. Фактически это будут шесть правых символов имени поля. Поэтому эти шесть символов извлекаются из переменной с помощью функции PHP substr() и помещаются в переменную $OrderItem. Затем значение переменной $value, связанное с этим полем, присваивается переменной $OrderQuantity. Теперь у нас есть два фрагмента информации, необходимых для обновления поля $ItemQuantity этого продукта в таблице ShopCart.

Прежде чем обновлять количество продукта, необходимо проверить, что заказчик ввел число. В поле можно случайно ввести недействительный символ. Поэтому для $OrderQuantity выполняется числовая проверка.


if (is_numeric($OrderQuantity)) { }

Если в поле находится что- то отличное от числа, то обновление количества для этого продукта пропускается и происходит обращение к следующему полю формы.

Количества, присланные с помощью формы, могут представлять дополнительные купленные количества, или они могут иметь значение 0, указывающее, что товар удален из корзины покупателя. Это значение проверяется, и выполняется один из двух операторов SQL.

if ($OrderQuantity == 0) { $sqlCartUpdate = "DELETE FROM ShopCart WHERE OrderNo=' $_SESSION[OrderNo]' AND OrderItem='$OrderItem'"; }

else { $sqlCartUpdate = "UPDATE ShopCart SET OrderQuantity='$OrderQuantity' WHERE OrderNo='$_SESSION[OrderNo]' AND OrderItem='$OrderItem'"; }

$rsCartUpdate = odbc_exec($sqlCartUpdate,$conn2);

В случае удаления или обновления, действие применяется к записи ShopCart с полем OrderNo соответствующим текущему $_SESSION[OrderNo], и с полем $OrderItem соответствующим $OrderItem из отправленной формы. Оператор DELETE удаляет из таблицы всю запись; оператор UPDATE изменяет поле $OrderQuantity в таблице на значение $OrderQuantity из отправленной формы.

Сценарий выполняет итерации по всем позициям, отправленным через форму, проверяя имя поля на наличие символа "Q". Если символ найден, то из имени извлекается код продукта и присваивается вместе со значением количества переменным, которые используются при обновлении таблицы ShopCart. После завершения обработки массива $_REQUEST[] соединение с базой данных закрывается и сценарий заканчивается.


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