Welcome Guest ( Log In | Register)



 
Reply to this topicStart new topic
> Simple Shopping Cart Tutorial Using Php And Mysql
THC
post 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
Go to the top of the page
 
+Quote Post
farsiscript
post 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
Go to the top of the page
 
+Quote Post
PunkGuitar
post 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
Go to the top of the page
 
+Quote Post
QuickSilva
post 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
Go to the top of the page
 
+Quote Post
html
post 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........
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 



-