Jump to content



Welcome to KnowledgeSutra - Dear Guest , Please Register here to get Your own website. - Ask a Question / Express Opinion / Reply w/o Sign-Up!
- - - - -

Simple Shopping Cart Tutorial Using Php And Mysql


5 replies to this topic

#1 THC

    Newbie

  • Kontributors
  • Pip
  • 1 posts

Posted 25 December 2006 - 08:06 PM

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:

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:



<?
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


<?
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:


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

Edited by THC, 02 January 2007 - 11:28 AM.


#2 farsiscript

    Super Member

  • Kontributors
  • PipPipPipPipPipPipPipPipPip
  • 357 posts
  • Interests:... No More !

Posted 31 December 2006 - 12:52 AM

hi dear THC thanks about this tutorial , i really need this tutorial , please post next part of this tutorial ,
thanks

#3 PunkGuitar

    Newbie [Level 2]

  • Kontributors
  • PipPip
  • 33 posts

Posted 01 January 2007 - 04:22 PM

please post the next part

#4 QuickSilva

    Premium Member

  • Kontributors
  • PipPipPipPipPipPipPipPip
  • 182 posts
  • Gender:Male
  • Location:Rotherham, UK
  • Interests:I love to help people in any way possible, if it's helping someone with some work, or going to someone's house to fix there computer. I am into Cricket, web design and much more other things. Bye!

Posted 18 January 2007 - 04:44 PM

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

#5 html

    Newbie [Level 2]

  • Kontributors
  • PipPip
  • 31 posts

Posted 10 October 2007 - 04:35 AM

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

#6 Earthshaker

    Newbie

  • Kontributors
  • Pip
  • 3 posts
  • Gender:Male
  • Location:In Front Of My PC!
  • Interests:Playing online games,listening to music,learn new thing,addicted to map/game making!

Posted 01 February 2011 - 08:31 PM

Hello...wow! what a good Tutorial :D .Can u make a Tutorial like this but using HTML? Because i dont know what is PhP/MySQL! :( .Anyway thanks for the tutorial...




Reply to this topic


This post will need approval from a moderator before this post is shown.

  


1 user(s) are reading this topic

0 members, 1 guests, 0 anonymous users