return to first page linux journal archive
keywordscontents

Listing 4. Adding Items to a Cart

<?php
function cart_add_item($item_id,$quantity=1) { global $customer_id, $feedback, $conn; //no need to start a transaction, as only one //query will be updating the database //query postgres for the next value in our //sequence $res=query("SELECT * FROM item_inventory WHERE part_number='$item_id'"); //check for errors if (!$res || pg_numrows($res)<1) { $feedback .= pg_errormessage($conn); $feedback .= ' Error-item not found '; return false; } else { //item was legit-see if already in cart. If so, increment quantity //start a transaction so we can lock the rows if they are found query("BEGIN WORK"); $res=query("SELECT * FROM cart_items ". "WHERE part_number='$item_id' AND customer_id='$customer_id' FOR UPDATE"); //check for errors if (!$res || pg_numrows($res)<1) { //insert it into the cart $res=query("INSERT INTO cart_items ". "(customer_id,part_number,quantity)". "VALUES ($customer_id,$item_id,$quantity)"); //check for errors on insert if (!$res || pg_cmdtuples($res) < 1) { $feedback .= pg_errormessage($conn); $feedback .= ' Error-couldn't insert into cart '; //nothing was changed but it's good form to cancel the transaction query("ROLLBACK"); return false; } else { query("COMMIT"); return true; } } else { //item already in cart-increment quantity $res=query("UPDATE cart_items SET quantity = quantity + $quantity ". "WHERE part_number='$item_id' AND customer_id='$customer_id'"); if (!$res || pg_cmdtuples($res) < 1) { $feedback .= pg_errormessage($conn); $feedback .= ' Error-couldn\'t increment quantity in cart '; //again nothing was changed query("ROLLBACK"); return false; } else { //commit the updated quantity to the database query("COMMIT"); return true; } } } } ?>