|
|
|
|
![]() ![]() |
Dec 25 2006, 08:06 PM
Post
#1
|
|
|
Newbie ![]() Group: Members Posts: 1 Joined: 25-December 06 Member No.: 35,911 |
hello everybody, to those who are interested in creating interactive web page using PHP, this tutorial will describe how to build a simple shopping cart from A to Z
you can either use a PHP editor or simply notepad to edit your pages, enjoy. first we'll design the database for the cart: make a new file and name it cart.sql and type this code: CODE create table customers( id INT NOT NULL, first VARCHAR(32), mi CHAR(2), last VARCHAR(32), address1 VARCHAR(64), address2 VARCHAR(64), city VARCHAR(32), state VARCHAR(32), zip VARCHAR(10), country VARCHAR(32), shiptobilling VARCHAR(5), ship_address1 VARCHAR(64), ship_address2 VARCHAR(64), ship_city VARCHAR(32), ship_state VARCHAR(32), ship_zip VARCHAR(10), ship_country VARCHAR(32), ship_phone VARCHAR(32), email VARCHAR(128), PRIMARY KEY(id)); create table order_details ( id INT NOT NULL, orderid INT, code VARCHAR(32), qty INT, PRIMARY KEY(id)); create table orders( id INT NOT NULL, customer INT, status VARCHAR(16), tracking_number VARCHAR(128), PRIMARY KEY(id)); create table inventory( id INT NOT NULL, name VARCHAR(32), category INT, code VARCHAR(32), description TEXT, price VARCHAR(8), picture VARCHAR(128), qty INT, PRIMARY KEY(id)); create table category( id INT NOT NULL, name VARCHAR(128), description TEXT, PRIMARY KEY(id)); this file will be used to store the database and tables information and define any relationship configurations. now this is the PHP configuration file which will be used to define all the functions, global variables and webhosting settings, note that you will have to change some information to match your settings such as the paths of your files if you are using your own webserver or your webhosting info, usernames and passwords etc.. Put this file in /include dir under your wwwroot directory: CODE <? define(SECURE_URL, "your webhost URL"); define(IMAGE_URL, "your webhost URL/images/"); define(SHIPPING_COST, "10.00"); // specify shipping cost here define(COMPANY_NAME, "your company name"); define(CREDIT_AUTH_URL, "finishorder.php"); define(COMPANY_EMAIL, "your email here"); function connect() { ini_set("include_path", "any other path you want to include"); require_once("DB.php"); $type ="mysql"; $username = "your user name"; $password = "your password"; $host = "localhost"; $database = "cart"; $dsn = $type . "://" . $username . ":" . $password . "@" . $host . "/" . $database; $dbconn = DB::connect($dsn); $errortrap($dbconn); $dbconn->setFetchMode(DB_FETCHMODE_ASSOC); $return $dbconn; } // end function connect function errortrap($result) { if(DB::isError($result)) { ?><h3> There was an error!</h3><? die($result->getMessage()); } } // end function errortrap function alter_cart($cat, $items, $item, $action) { global $dbconn; $sql = "select * from inventory where id = '$item' AND category = '$cat'"; $result = $dbconn->query($sql); errortrap($result); if($result->numRows() > 0) { switch($action) { case("add"): if(!isset($items[$cat][$item])) { $items[$cat][$item] = 0; } $items[$cat][$item]++; break; case("remove"): if(isset($items[$cat][$item])) { $items[$cat][$item]--; } if($items[$cat][$item] < 1) { unset($items[$cat][$item]); } break; default: break; } } return $items; } // end function alter_cart function full_item($item, $items) { global $dbconn; $sql ="select * from inventory where id =$item"; $result = $dbconn->query($sql); errortrap($result); $result->fetchinto($r); ?> <table border=1 cellpadding=5 cellspacing=0> <tr><td class=tablehead><?=$r["name"]?></td></tr> <tr><td><?=$r["name"]?><br><?=$r["description"]?> <br><b>Price</b>: <?=$r["price"]?> <p> <? if($r["picture"] != "") { ?><div align="center"><img src="<? echo IMAGE_URL $r["picture"]?>"></div><? } // end if if ($r["qty"] > 1) { ?> <p><div align=center> <a href="<?=SECURE_URL?>cart.php?cat=<?=$r["category"]?>&item=<?=$item?>&itemview=<?=$item?>&action=add"><img src="<?=IMAGE_URL?>add.gif" border=0></a> <? } else { ?> <p> Sorry, Out Of Stock </p> <? } ?> <br><a href="<?=SECURE_URL?>cart.php">Return To List Of Items In This Category</a></div></td></tr></table> <? } // End function full_item function build_menu ($ref,$table) { global $dbconn; $sql = "select * from $table order by id"; $result = $dbconn->query($sql); errortrap($result); if($result->numRows() > 0) { $x=0; while($result->fetchInto($r)) { if($x==0) { echo '<option value="' . $r["id"] . '"selected>' . $r[$ref] . '</option>'; $x++; } else { echo '<option value="' . $r["id"] . '">' . $r[$ref] . '</option>'; } } } else { echo '<option value="">NO CATEGORIES DEFINED</option>'; } } // end function build_menu function head() { ?> <html> <head> <style type=text/css> h1, h2, h3, p, td {font-family: veranda, sans-serif;} .tablehead {font-size: 12pt; color: #FFFFFF; background-color: #000099; } .required {font-weight: bold; colr: red;} smalli {font-size: 8pt; font-style: italic;} </style> </head> <body bgcolor="#FFFFFF"> <div align=center> <table width="74%" border="0" cellspacing="0" cellpadding="0" height="128" bgcolor="#FFFFFF"> <tr> <td height ="134" align="center"><h1> Shopping Cart</h1></td> </tr> </table> <? } function calculate_total($items) { global $dbconn; $shipping = SHIPPING_COST; $total = 0; foreach($items as $key => $val) { foreach($items[$key] as $key2 => $val2) { $sql = "select * from inventory where id ='$key2'"; $result = $dbconn->query($sql); errortrap($result); $result->fetchinto($r); $total+= ($r["price"] * $val2); } } if($total != 0) { $total= $total + $shipping; } return($total); } // end function calculate_total function display_cart($items) { global $dbconn; global $items, $status; $shipping = SHIPPING_COST; $count = 0; ?> <table border=1 cellpadding=5 cellspacing=0> <tr><td class=tablehead>Name</td><td clas=tablehead>Qty</td><td class=tablehead>Price Each</td><td class=tablehead> </td></tr> <? foreach($items[$cat] as $item => $qty) { $sql = "select * from inventory where id = '$item'"; $result = $dbconn->query($sql); errortrap($result); $result->fetchinto($r); ?> this the page where the database connection will be established then the customer can start shopping, search for products and edit his own cart. file name cart.php CODE <? require_once("include/cart_inc.php"); session_start(); session_register("items"); session_register("category_choice"); session_register("total"); if(!isset($items)) { $items= array(); } if(!isset($category_choice)) { $category_choice=1; } /***************** MAIN *****************/ head(); $dbconn = connect(); select_cat(); $status = "shopping"; ?> <table width="58%" border="1" cellspacing="10" cellpadding="10" height="371" bordercolor="#0000FF" bgcolor="999999"> <tr align ="left" valign="top"> <td bgcolor="#CCCCCC" bordercolor="#0000FF"> <table border="0" cellpadding="10"><tr><td valign=top> <? if(isset($category_choice_in)) { $category_choice =$category_choice_in; } if(isset($update_cart)) { foreach($items_in as $cat => $val { foreach($items_in[$cat] as $id => $qty) { if ($qty < 1) { unset($items_in[$cat][$id]); } } } $items = $items_in } if(isset(itemsview)) { full_item($itemview, $items); } else { display_items($category_choice, $items); } if(isset($action)) { $items = alter_cart ($cat, $items, $item, $action); } ?> </td><td valign=top> <h3> Your Cart: </h3> <? if(isset($modify)) { edit_cart ($items); } else { display_cart ($items); } ?> <p> <? if(sizeof($items) > 0 { $total = calculate_total ($items); print_r($items); ?> <p>Do you want to <a href="<?=SECURE_URL?>checkout.php"><b>checkout</b></a>? <? } ?> </td></tr></table> </td> </tr> </table> </div> </body> </html> This is the checkout page, file name checkout.php: CODE <? require_once("include/cart_inc.php"); session_start(); head(); $dbconn = connect(); $response = "1"; // transaction okay //$response = "2"; // Declined Credit Card //$response = "3"; //General Error if (sizeof($items)==0) { ?> <h3> There are no items in your cart! Click back to add some items to your cart.</h3> <? } else { ?> <h2> Here are the items that you are ordering:</2> <? $status = "checkout"; display_cart ($items); ?> <p> Please fill in the following information to proceed.<p> <FORM METHOD=POST ACTION = "<?=CREDIT_AUTH_URL?>"> <INPUT TYPE=HIDDEN NAME="Amount" VALUE="<?$total?>"> <INPUT TYPE=HIDDEN NAME="x_Description" VALUE="Order From <?=COMPANY_NAME?>"> <INPUT TYPE=HIDDEN NAME="x_Invoice_Num" VALUE="<?=time()?>"> <INPUT TYPE=HIDDEN NAME="x_response_code" VALUE="<?=$response?>"> <?cart2form($items);?> <table border="1" cellspacing="1" cellpadding="5"> <tr> <td colspan="2" class="tablehead"><b>BILLING ADDRESS</b>: </td> </tr> <tr> <td>Credit Card Number<span class="required">*</span></td> <td><input type="text" name="x_card_num"> </td> </tr> <tr> <td>Expiration Date<span class="required">*<br> (MMYY - for example 0402 for April 2002)</span></td> <td><input type="text" name="x_exp_date" maxlength="4" size="4"> </td> </tr> <tr> <td>First Name<span class="required">*</span></td> <td><input type="text" name="x_card_num"> </td> </tr> <tr> <td>Credit Card Number<span class="required">*</span></td> <td><input type="text" name="x_first_name"> </td> </tr> <tr> <td>Middle Initial</td> <td><input type="text" name="x_mi"> </td> </tr> <tr> <td>Last Name<span class="required">*</span></td> <td><input type="text" name="x_last_name"> </td> </tr> <tr> <td>Address Line 1<span class="required">*</span></td> <td><input type="text" name="x_address"> </td> </tr> <tr> <td>Address Line 2<span class="required">*</span></td> <td><input type="text" name="x_address2"> </td> </tr> <tr> <td>City<span class="required">*</span></td> <td><input type="text" name="x_city"> </td> </tr> <tr> <td>State or province<span class="required">*</span></td> <td><input type="text" name="x_state"> </td> </tr> <tr> <td>Zip/Postal Code<span class="required">*</span></td> <td><input type="text" name="x_zip" size="10" maxlength="10"> </td> </tr> <tr> <td>Country<span class="required">*</span></td> <td><select name="x_country"> <option>Saudi Arabia <option>Sudan <option>United Arab Emeritaes </select></td> </tr> <tr> <td>Daytime Phone Number<span class="required">*</span></td> <td><input type="text" name="x_phone"> </td> </tr> <tr> <td>Email<span class="required">*</span></td> <td><input type="text" name="x_email"> </td> </tr> <tr> <td>Shipping Address is as the same as Billing Address<span class="required">*</span></td> <td><input type="checkbox" name="shiptobilling" value="true"><br><font size="-2">(check to ship to your billing address)</font> </td> </tr> <tr> <td colspan="2" class="tablehead"> <p><b>SHIPPING ADDRESS</b><br> (Fill this out if your shipping address is different from your billing address):</p> </td> </tr> <tr> <td>Address Line 1<span class="required">*</span></td> <td><input type="text" name="x_address"> </td> </tr> <tr> <td>Address Line 2<span class="required">*</span></td> <td><input type="text" name="x_address2"> </td> </tr> <tr> <td>City<span class="required">*</span></td> <td><input type="text" name="x_city"> </td> </tr> <tr> <td>State or province<span class="required">*</span></td> <td><input type="text" name="x_state"> </td> </tr> <tr> <td>Zip/Postal Code<span class="required">*</span></td> <td><input type="text" name="x_zip" size="10" maxlength="10"> </td> </tr> <tr> <td>Country<span class="required">*</span></td> <td><select name="x_country"> <option>Saudi Arabia <option>Sudan <option>United Arab Emeritaes </select></td> </tr> </table> <p> <INPUT TYPE = "SUBMIT" value= "Submit Order"> </p> </form> <? session_unset(); session_destroy(); } // end else statement ?> I'll be coming back with rest of the code soon. This post has been edited by THC: Jan 2 2007, 11:28 AM |
|
|
|
Dec 31 2006, 12:52 AM
Post
#2
|
|
|
Super Member ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Group: Members Posts: 357 Joined: 8-April 06 Member No.: 21,487 |
hi dear THC thanks about this tutorial , i really need this tutorial , please post next part of this tutorial ,
thanks |
|
|
|
Jan 1 2007, 04:22 PM
Post
#3
|
|
|
Newbie [Level 2] ![]() ![]() Group: Members Posts: 33 Joined: 9-February 06 Member No.: 18,457 |
please post the next part
|
|
|
|
Jan 18 2007, 04:44 PM
Post
#4
|
|
|
Premium Member ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Group: Members Posts: 181 Joined: 15-January 07 From: Rotherham, UK Member No.: 37,245 |
Very good! Only problem what I found out, you didn't really comment it. That's the only bad part, as there was some bits which I didn't understand what it did. Never the less, very good and a quite advanced tutorial! Can't wait to see the next part of it!
Have a great day! -Tom |
|
|
|
Oct 10 2007, 04:35 AM
Post
#5
|
|
|
Newbie [Level 2] ![]() ![]() Group: Members Posts: 31 Joined: 28-September 07 Member No.: 50,771 |
We are willing to make an interactive webpage using php and mysql please keep sharing the next part for
our best, your this is tutorial is well tutorialzed thanks. waiting for the next tutorial........ |
|
|
|
![]() ![]() |
|