欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

php實(shí)現(xiàn)購物車功能(上)

 更新時(shí)間:2020年07月23日 15:40:46   作者:Switch_vov  
這篇文章主要介紹了php實(shí)現(xiàn)購物車功能的全部代碼,提出了需求分析、解決方案、數(shù)據(jù)庫的創(chuàng)建,幫助大家輕輕松松實(shí)現(xiàn)購物車功能,感興趣的小伙伴們可以參考一下

本文分兩篇為大家介紹php實(shí)現(xiàn)購物車功能,具有一定的參考價(jià)值,相信大家一定喜歡。

1、需求分析

 我們需要找到一種將數(shù)據(jù)庫連接到用戶的瀏覽器的方法。用戶能夠按目錄瀏覽商品。 用戶應(yīng)該能夠從商品目錄中選取商品以便此后的購買。我們也要能夠記錄他們選中的物品。 當(dāng)用戶完成購買,要合計(jì)他們的訂單,獲取運(yùn)送商品細(xì)節(jié),并處理付款。 創(chuàng)建一個(gè)管理界面,以便管理員在上面添加、編輯圖書和目錄。

2、解決方案

2.1 用戶視圖

2.2 管理員視圖

2.3 Book-O-Rama中的文件列表

3、實(shí)現(xiàn)數(shù)據(jù)庫3.1 創(chuàng)建book_sc數(shù)據(jù)庫的SQL代碼

CREATE DATABASE book_sc; #創(chuàng)建book_sc數(shù)據(jù)庫 
 
USE book_sc; #使用book_sc數(shù)據(jù)庫 
 
CREATE TABLE customers #創(chuàng)建用戶表 
( 
 customerid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
 name CHAR(60) NOT NULL, 
 address CHAR(80) NOT NULL, 
 city CHAR(30) NOT NULL, 
 state CHAR(10), 
 zip CHAR(10), 
 country CHAR(20) NOT NULL 
); 
 
CREATE TABLE orders #創(chuàng)建訂單表 
( 
 orderid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
 customerid INT UNSIGNED NOT NULL, 
 amount FLOAT(6,2), 
 date DATE NOT NULL, 
 order_status CHAR(10), 
 ship_name CHAR(60) NOT NULL, 
 ship_address CHAR(80) NOT NULL, 
 ship_city CHAR(30) NOT NULL, 
 ship_state CHAR(20), 
 ship_zip CHAR(10), 
 ship_country CHAR(20) NOT NULL 
); 
 
CREATE TABLE books #創(chuàng)建圖書表 
( 
 isbn CHAR(13) NOT NULL PRIMARY KEY, 
 author CHAR(80), 
 title CHAR(100), 
 catid INT UNSIGNED, 
 price FLOAT(4,2) NOT NULL, 
 description VARCHAR(255) 
); 
 
CREATE TABLE categories #創(chuàng)建目錄表 
( 
 catid INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, 
 catname CHAR(60) NOT NULL 
); 
 
CREATE TABLE order_items #訂單物品表 
( 
 orderid INT UNSIGNED NOT NULL, 
 isbn CHAR(13) NOT NULL, 
 item_price FLOAT(4,2) NOT NULL, 
 quantity TINYINT UNSIGNED NOT NULL, 
 PRIMARY KEY(orderid,isbn) 
); 
 
CREATE TABLE admin #管理員表 
( 
 username char(16) NOT NULL PRIMARY KEY, 
 password CHAR(40) NOT NULL 
); 
 
GRANT SELECT,INSERT,UPDATE,DELETE 
on book_sc.* 
to book_sc@localhost IDENTIFIED by 'password'; 

3.2 數(shù)據(jù)庫測(cè)試數(shù)據(jù)文檔

USE book_sc; 
 
INSERT INTO books VALUES ('0672329166','Luke Welling and Laura Thomson','PHP and MySQL Web Development',1,49.99, 
'PHP & MySQL Web Development teaches the reader to develop dynamic, secure e-commerce web sites. You will learn to integrate and implement these technologies by following real-world examples and working sample projects.'); 
INSERT INTO books VALUES ('067232976X','Julie Meloni','Sams Teach Yourself PHP, MySQL and Apache All-in-One',1,34.99, 
'Using a straightforward, step-by-step approach, each lesson in this book builds on the previous ones, enabling you to learn the essentials of PHP scripting, MySQL databases, and the Apache web server from the ground up.'); 
INSERT INTO books VALUES ('0672319241','Sterling Hughes and Andrei Zmievski','PHP Developer\'s Cookbook',1,39.99, 
'Provides a complete, solutions-oriented guide to the challenges most often faced by PHP developers\r\nWritten specifically for experienced Web developers, the book offers real-world solutions to real-world needs\r\n'); 
 
INSERT INTO categories VALUES (1,'Internet'); 
INSERT INTO categories VALUES (2,'Self-help'); 
INSERT INTO categories VALUES (5,'Fiction'); 
INSERT INTO categories VALUES (4,'Gardening'); 
 
INSERT INTO admin VALUES ('admin', sha1('admin')); 

4、實(shí)現(xiàn)在線目錄

 主頁-目錄
由以下代碼實(shí)現(xiàn):
4.1 index.php

<?php 
 
/** 
 * @author switch 
 * @copyright 2015 
 * 網(wǎng)站首頁,顯示系統(tǒng)中的圖書目錄 
 */ 
 //require_once語句和require語句完全相同,唯一區(qū)別是PHP會(huì)檢查該文件是否已經(jīng)被包含過,如果是則不會(huì)再次包含。 
 require_once('book_sc_fns.php'); 
 
 session_start(); //開始會(huì)話 
 do_html_header('Welcome to Book-O-Rama'); //頁頭 
 
 echo "<p>Please choose a category:</p>"; 
 
 $cat_array = get_categories(); //從數(shù)據(jù)庫獲取目錄 
 
 display_categories($cat_array); //顯示目錄鏈接 
 
 if(isset($_SESSION['admin_user'])) //如果是管理員,顯示管理員操作 
 display_button("admin.php","admin-menu","Admin Menu"); 
 do_html_footer(); //頁尾 
?> 

4.2 book_fns.php文件中的函數(shù)get_categories()

function get_categories() //從數(shù)據(jù)庫中獲取目錄列表 
 { 
 $conn = db_connect(); //連接數(shù)據(jù)庫 
 $query = "select catid,catname from categories"; 
 $result = @$conn ->query($query); 
 if(!$result) //查詢失敗,返回false 
 return false; 
 $num_cats = @$result ->num_rows; 
 if($num_cats == 0) //數(shù)據(jù)庫中無目錄,返回false 
 return false; 
 $result = db_result_to_array($result); 
 return $result; 
 } 

4.3 output_fns.php文件中的函數(shù)display_categories()

function display_categories($cat_array) //輸出目錄 
 { 
 if(!is_array($cat_array)) 
 { 
 echo "<p>No categories currently available</p>"; 
 return; 
 } 
 echo "<ul>"; 
 foreach($cat_array as $row) 
 { 
 $url = "show_cat.php?catid=". $row['catid']; 
 $title = $row['catname']; 
 echo "<li>"; 
 do_html_URL($url,$title); 
 echo "</li>"; 
 } 
 echo "</ul>"; 
 echo "<hr/>"; 
 } 

4.4 db_fns.php文件中的函數(shù)db_result_to_array()

function db_result_to_array($result) //結(jié)果到數(shù)組 
 { 
 $res_array = array(); 
 
 for($count = 0; $row = $result ->fetch_assoc(); $count++) 
 $res_array[$count] = $row; 
 
 return $res_array; 
 } 

Internet目錄下的所有圖書

由以下代碼實(shí)現(xiàn):

4.5 show_cat.php

<?php 
 
/** 
 * @author switch 
 * @copyright 2015 
 * 顯示特定目錄包含的所有圖書 
 */ 
 //require_once語句和require語句完全相同,唯一區(qū)別是PHP會(huì)檢查該文件是否已經(jīng)被包含過,如果是則不會(huì)再次包含。 
 require_once('book_sc_fns.php'); 
 
 session_start(); 
 
 @$catid = $_GET['catid']; 
 $name = get_category_name($catid); 
 
 do_html_header($name); 
 
 $book_array = get_books($catid); 
 
 display_books($book_array); 
 
 //如果是管理員,顯示管理界面按鈕 
 if(isset($_SESSION['admin_user'])) 
 { 
 display_button("index.php","continue","Continue Shopping"); 
 display_button("admin.php","admin-menu","Admin Menu"); 
 display_button("edit_category_form.php?catid=". $catid,"edit-category","Edit Category"); 
 } 
 else //否則顯示主界面按鈕 
 { 
 display_button("index.php","continue-shopping","Continue Shopping"); 
 } 
 do_html_footer(); 
?> 

4.6 book_fns.php文件中的函數(shù)get_category_name()

function get_category_name($catid) //獲取目錄名 
 { 
 $conn = db_connect(); //連接數(shù)據(jù)庫 
 $query = "select catname from categories where catid = '". $catid ."'"; 
 $result = @$conn ->query($query); 
 if(!$result) //查詢失敗,原因?yàn)椴樵兂鲥e(cuò) 
 return false; 
 
 $num_cats = @$result ->num_rows; 
 
 if($num_cats == 0) //查詢失敗,原因?yàn)闊o目錄 
 return false; 
 $row = $result ->fetch_object(); 
 return $row ->catname; 
 } 

4.8 book_fns.php文件中的函數(shù)get_books()

function get_books($catid) //從數(shù)據(jù)庫中獲取圖書 
 { 
 if((!$catid) || ($catid == '')) //如果目錄ID為空 
 return false; 
 
 $conn = db_connect(); 
 $query = "select * from books where catid = '". $catid ."'"; 
 $result = @$conn ->query($query); 
 if(!$result) //查詢失敗,原因?yàn)椴樵兂鲥e(cuò) 
 return false; 
 
 $num_books = @$result ->num_rows; 
 
 if($num_books == 0) //查詢失敗,原因?yàn)闊o圖書 
 return false; 
 
 $result = db_result_to_array($result); 
 return $result; 
 } 

4.9 output_fns文件中的函數(shù)display_books()

function display_books($book_array) //輸出圖書 
 { 
 if(!is_array($book_array)) 
 echo "<p>No books currently available in this category</p>"; 
 else //有圖書,建表 
 { 
 echo "<table width = \"100%\" border=\"0\">"; 
 
 foreach($book_array as $row) 
 { 
 $url = "show_book.php?isbn=". $row['isbn']; 
 echo "<tr><td>"; 
 // 如果圖片存在 
 if(@file_exists("images/". $row['isbn'] .".jpg")) 
 { 
 $title = "<img src=\"images/". $row['isbn'] .".jpg\" style=\"border: 1px solid black\"/>"; 
 do_html_URL($url,$title); 
 } 
 else 
 echo " "; 
 
 echo "</td><td>"; 
 $title = $row['title'] ." by ". $row['author']; 
 do_html_URL($url,$title); 
 echo "</td></tr>"; 
 } 
 echo "</table>"; 
 } 
 echo "<hr/>"; 
 } 


PHP and MySQL Web Development的詳細(xì)信息

由以下代碼實(shí)現(xiàn):

4.10 show_book.php

<?php 
 /** 
 * @author switch 
 * @copyright 2015 
 * 顯示特定圖書的詳細(xì)信息 
 */ 
 //require_once語句和require語句完全相同,唯一區(qū)別是PHP會(huì)檢查該文件是否已經(jīng)被包含過,如果是則不會(huì)再次包含。 
 require_once('book_sc_fns.php'); 
 
 session_start(); 
 
 $isbn = $_GET['isbn']; 
 
 $book = get_book_details($isbn); 
 do_html_header($book['title']); 
 display_book_details($book); 
 
 //設(shè)置繼續(xù)按鈕 
 $target = "index.php"; 
 if($book['catid']) 
 $target = "show_cat.php?catid = ". $book['catid']; 
 
 //如果是管理員,顯示編輯鏈接 
 if(check_admin_user()) 
 { 
 display_button("edit_book_form.php?isbn=". $isbn,"edit-item","Edit Item"); 
 display_button("admin.php","admin-menu","Admin Menu"); 
 display_button($target,"continue","Continue"); 
 } 
 else 
 { 
 display_button("show_cart.php?new=". $isbn,"add-to-cart","Add". $book['title']." To My Shopping Cart"); 
 display_button($target,"continue-shopping","Continue Shopping"); 
 } 
 do_html_footer(); 
?> 

4.11 book_fns.php文件中的函數(shù)get_book_details()

function get_book_details($isbn) //從數(shù)據(jù)庫中獲取一本圖書的詳細(xì)說明 
 { 
 if((!$isbn) || ($isbn == '')) //如果圖書統(tǒng)一書號(hào)為空 
 return false; 
 
 $conn = db_connect(); //連接數(shù)據(jù)庫 
 $query = "select * from books where isbn = '". $isbn ."'"; 
 $result = @$conn ->query($query); 
 if(!$result) //查詢失敗,原因?yàn)椴樵兂鲥e(cuò) 
 return false; 
 $result = @$result ->fetch_assoc(); 
 return $result; 
 } 

4.12 output_fns.php文件中的函數(shù)display_book_details()

function display_book_details($book) //輸出圖書詳細(xì)說明 
 { 
 if(is_array($book)) 
 { 
 echo "<table><tr>"; 
 // 如果圖片存在 
 if(@file_exists("images/". $book['isbn'] .".jpg")) 
 { 
 $size = getimagesize("images/". $book['isbn'] .".jpg"); 
 if(($size[0] > 0) && ($size[1] > 0)) 
 { 
 echo "<td><img src=\"images/". $book['isbn'] .".jpg\" style=\"border: 1px solid black\"/></td>"; 
 } 
 } 
 echo "<td><ul>"; 
 echo "<li><strong>Author:</strong>"; 
 echo $book['author']; 
 echo "</li><li><strong>ISBN:</strong>"; 
 echo $book['isbn']; 
 echo "</li><li><strong>Our Price:</strong>"; 
 echo number_format($book['price'],2); 
 echo "</li><li><strong>Description:</strong>"; 
 echo $book['description']; 
 echo "</li></ul></td></tr></table>"; 
 } 
 else 
 { 
 echo "<p>The details of this book cannot be displayed at this time.</p>"; 
 } 
 echo "<hr/>"; 
 } 

5、實(shí)現(xiàn)購物車

不使用參數(shù)的腳本只顯示購物車的內(nèi)容

帶有參數(shù)new的腳本將添加一個(gè)物品到購物車

由以下代碼實(shí)現(xiàn):
5.1 show_cart.php

<?php 
 
/** 
 * @author switch 
 * @copyright 2015 
 * 顯示用戶購物車的內(nèi)容。也用來向購物車添加圖書 
 */ 
 //require_once語句和require語句完全相同,唯一區(qū)別是PHP會(huì)檢查該文件是否已經(jīng)被包含過,如果是則不會(huì)再次包含。 
 require_once('book_sc_fns.php'); 
 
 session_start(); 
 
 @$new = $_GET['new']; 
 
 if($new) 
 { 
 if(!isset($_SESSION['cart'])) //購物車中無物品 
 { 
 $_SESSION['cart'] =array(); 
 $_SESSION['items'] = 0; 
 $_SESSION['total_price'] = '0.00'; 
 } 
 
 if(isset($_SESSION['cart'][$new])) 
 { 
 $_SESSION['cart'][$new]++; 
 } 
 else 
 { 
 $_SESSION['cart'][$new] = 1; 
 } 
 
 $_SESSION['total_price'] = calculate_price($_SESSION['cart']); 
 $_SESSION['items'] = calculate_items($_SESSION['cart']); 
 } 
 
 if(isset($_POST['save'])) 
 { 
 foreach($_SESSION['cart'] as $isbn => $qty) 
 { 
 if($_POST[$isbn] == '0') 
 unset($_SESSION['cart'][$isbn]); 
 else 
 $_SESSION['cart'][$isbn] = $_POST[$isbn]; 
 } 
 
 $_SESSION['total_price'] = calculate_price($_SESSION['cart']); 
 $_SESSION['items'] = calculate_items($_SESSION['cart']); 
 } 
 
 do_html_header("Your shopping cart"); 
 
 if((@$_SESSION['cart']) && (array_count_values($_SESSION['cart']))) 
 { 
 display_cart($_SESSION['cart']); 
 } 
 else 
 { 
 echo "<p>There are no items in your cart</p><hr/>"; 
 } 
 
 $target = "index.php"; 
 
 //如果只有一種物品添加到購物車,可以繼續(xù)購物 
 if($new) 
 { 
 $details = get_book_details($new); 
 if($details['catid']) 
 { 
 $target = "show_cat.php?catid=". $details['catid']; 
 } 
 } 
 
 display_button($target,"continue-shopping","Continue Shopping"); 
 
 //SSL鏈接--需要配置,PS:沒配置,所以不能使用 
// $path = $_SERVER['PHP_SELF']; //獲取路徑 
// $server = $_SERVER['SERVER_NAME']; //獲取主機(jī)名 
// $path = str_replace('show_cart.php','',$path); 
// display_button("https://". $server . $path ."checkout.php","go-to-checkout","Go To Checkout"); 
 
 //非SSL鏈接 
 display_button("checkout.php","go-to-checkout","Go To Checkout"); 
 
 do_html_footer(); 
?> 

5.2 output_fns.php文件中的函數(shù)display_cart()

function display_cart($cart,$change = true,$images = 1) //顯示購物車 
 { 
 echo "<table border=\"0\" width=\"100%\" cellspacing=\"0\"> 
 <form action=\"show_cart.php\" method=\"post\"> 
 <tr> 
 <th colspan=\"". (1 + $images) ."\" bgcolor=\" #cccccc\">Item</th> 
 <th bgcolor=\"#cccccc\">Price</th> 
 <th bgcolor=\"#cccccc\">Quantity</th> 
 <th bgcolor=\"#cccccc\">Total</th> 
 </tr>"; 
 //輸出購物車中每一項(xiàng) 
 foreach($cart as $isbn => $qty) 
 { 
 $book = get_book_details($isbn); 
 echo "<tr>"; 
 if($images == true) 
 { 
 echo "<td align=\"left\">"; 
 if(file_exists("images/". $isbn .".jpg")) 
 { 
 $size = getimagesize("images/". $isbn .".jpg"); 
 if(($size[0] > 0) && ($size[1] > 1)) //圖片長寬 
 { 
 echo "<img src=\"images/". $isbn .".jpg\" 
 style=\"border: 1px solid black\" 
 width=\"". ($size[0] / 3) ."\" 
 height=\"". ($size[1] / 3) ."\"/>"; 
 } 
 } 
 else 
 echo " "; 
 echo "</td>"; 
 } 
 echo "<td align=\"left\"> 
 <a href=\"show_book.php?isbn=". $isbn ."\">". $book['title'] ."</a> by". $book['author'] ."</td> 
 <td align=\"center\">\$". number_format($book['price'],2) ."</td><td align=\"center\">"; 
 
 //如果允許更改數(shù)量 
 if ($change == true) 
 { 
 echo "<input type=\"text\" name=\"".$isbn."\" value=\"".$qty."\" size=\"3\">"; 
 } 
 else 
 { 
 echo $qty; 
 } 
 echo "</td><td align=\"center\">\$".number_format($book['price']*$qty,2)."</td></tr>\n"; 
 } 
 
 
 //總數(shù) 
 echo "<tr> 
 <th colspan=\"". (2 + $images) ."\" bgcolor = \"#cccccc\"> </th> 
 <th align = \"center\" bgcolor=\"#cccccc\">". $_SESSION['items'] ."</th> 
 <th align = \"center\" bgcolor=\"#cccccc\">\$". number_format($_SESSION['total_price'],2) ."</th></tr>"; 
 
 //保存按鈕 
 if($change == true) 
 { 
 echo "<tr> 
 <td colspan = \"". (2 + $images) ."\"> </td> 
 <td align = \"center \"> 
 <input type=\"hidden\" name=\"save\"value=\"true\" /> 
 <input type = \"image\" src = \"images/save-changes.gif\" border = \" 0 \" alt = \" Save Changes \" /> 
 </td> 
 <td> </td> 
 </tr>"; 
 } 
 echo "</form></table>"; 
 } 

5.3 book_fns.php文件中的函數(shù)calculate_price()

function calculate_price($cart) //計(jì)算購物車中物品總價(jià) 
 { 
 $price = 0.0; 
 if(is_array($cart)) 
 { 
 $conn = db_connect(); 
 foreach($cart as $isbn => $qty) 
 { 
 $query = "select price from books where isbn ='". $isbn ."'"; 
 $result = $conn ->query($query); 
 if($result) 
 { 
 $item = $result ->fetch_object(); 
 $item_price = $item ->price; 
 $price += $item_price * $qty; 
 } 
 } 
 } 
 return $price; 
 } 

5.4 book_fns.php文件中的函數(shù)calculate_items()

function calculate_items($cart) //計(jì)算購物車中的物品總數(shù) 
 { 
 $items = 0; 
 if(is_array($cart)) 
 { 
 foreach($cart as $isbn => $qty) 
 $items += $qty; 
 } 
 return $items; 
 } 

獲取顧客的詳細(xì)信息

由以下代碼實(shí)現(xiàn):
5.5 checkout.php

<?php 
 
/** 
 * @author switch 
 * @copyright 2015 
 * 向用戶顯示所有的訂單細(xì)節(jié)。獲取商品運(yùn)送細(xì)節(jié) 
 */ 
 //require_once語句和require語句完全相同,唯一區(qū)別是PHP會(huì)檢查該文件是否已經(jīng)被包含過,如果是則不會(huì)再次包含。 
 require_once('book_sc_fns.php'); 
 
 session_start(); 
 
 do_html_header("Checkout"); 
 
 if((@$_SESSION['cart']) && (array_count_values($_SESSION['cart']))) 
 { 
 display_cart($_SESSION['cart'],false,0); 
 display_checkout_form(); 
 } 
 else 
 { 
 echo "<p>Thers are no items in your cart</p>"; 
 } 
 
 display_button("show_cart.php","continue-shopping","Continue Shopping"); 
 
 do_html_footer(); 
?> 

5.6 output_fns.php文件中的display_checkout_form()

function display_checkout_form() //輸出付款臺(tái)界面 
 { 
 ?> 
 <br /> 
 <table border="0" width="100%" cellspacng="0"> 
 <form action="purchase.php" method="post"> 
 <tr> <!--客戶信息--> 
 <th colspan="2" bgcolor="#cccccc">Your Details</th> 
 </tr> 
 <tr> 
 <td>Name</td> 
 <td><input type="text" name="name" value="" maxlength="40" size="40"/></td> 
 </tr> 
 <tr> 
 <td>Address</td> 
 <td><input type="text" name="address" value="" maxlength="40" size="40"/></td> 
 </tr> 
 <tr> 
 <td>City/Suburb</td> 
 <td><input type="text" name="city" value="" maxlength="20" size="40"/></td> 
 </tr> 
 <tr> 
 <td>State/Province</td> 
 <td><input type="text" name="state" value="" maxlength="20" size="40"/></td> 
 </tr> 
 <tr> 
 <td>Postal Code or Zip Code</td> 
 <td><input type="text" name="zip" value="" maxlength="10" size="40"/></td> 
 </tr> 
 <tr> 
 <td>Country</td> 
 <td><input type="text" name="country" value="" maxlength="10" size="40"/></td> 
 </tr> 
 
 <tr> <!--運(yùn)單信息--> 
 <th colspan="2" bgcolor="#cccccc">Shipping Address(leave blank if as above)</th> 
 </tr> 
 <tr> 
 <td>Name</td> 
 <td><input type="text" name="ship_name" maxlength=""/></td> 
 </tr> 
 <tr> 
 <td>Address</td> 
 <td><input type="text" name="ship_address" value="" maxlength="40" size="40"/></td> 
 </tr> 
 <tr> 
 <td>City/Suburb</td> 
 <td><input type="text" name="ship_city" value="" maxlength="20" size="40"/></td> 
 </tr> 
 <tr> 
 <td>State/Province</td> 
 <td><input type="text" name="ship_state" value="" maxlength="20" size="40"/></td> 
 </tr> 
 <tr> 
 <td>Postal Code or Zip Code</td> 
 <td><input type="text" name="ship_zip" value="" maxlength="10" size="40"/></td> 
 </tr> 
 <tr> 
 <td>Country</td> 
 <td><input type="text" name="ship_country" value="" maxlength="20" size="40"/></td> 
 </tr> 
 <tr> 
 <td colspan="2" align="center"> 
 <p> 
 <strong>Please press Purchase to confirm your purchase, or Continue Shopping to add or remove items.</strong> 
 </p> 
 <?php display_form_button("purchase","Purchase There Items"); ?> 
 </td> 
 </tr> 
 </form> 
 </table> 
 <hr /> 
 <?php 
 } 

已填寫好信息的訂單


獲取客戶信用卡信息

由以下代碼實(shí)現(xiàn):
5.7 purchase.php

<?php 
 
/** 
 * @author switch 
 * @copyright 2015 
 * 從用戶獲取付款細(xì)節(jié) 
 */ 
 //require_once語句和require語句完全相同,唯一區(qū)別是PHP會(huì)檢查該文件是否已經(jīng)被包含過,如果是則不會(huì)再次包含。 
 require_once('book_sc_fns.php'); 
 
 session_start(); 
 
 do_html_header("Checkout"); 
 
 //創(chuàng)建變量 
 $name = $_POST['name']; 
 $address = $_POST['address']; 
 $city = $_POST['city']; 
 $zip = $_POST['zip']; 
 $country = $_POST['country']; 
 
 //如果訂單細(xì)節(jié)填滿 
 if(($_SESSION['cart']) && ($name) && ($address) && ($city) && ($zip) && ($country)) 
 { 
 if(insert_order($_POST) != false) 
 { 
 display_cart($_SESSION['cart'],false,0); 
 
 display_shipping(calculate_shipping_cost()); 
 
 display_card_form($name); 
 
 display_button("show_cart.php","continue-shopping","Continue Shopping"); 
 } 
 else 
 { 
 echo "<p>Could not store data, please try again.</p><hr/>"; 
 display_button('checkout.php','back','Back'); 
 } 
 } 
 else 
 { 
 echo "<p>You did not fill in all the fields, please try again.</p><hr/>"; 
 display_button('checkout.php','back','Back'); 
 } 
 do_html_footer(); 
?> 

5.8 order_fns.php文件中的函數(shù)insert_order()

function insert_order($order_details) //提取訂單細(xì)節(jié)作為變量 
 { 
 extract($order_details); 
 
 //設(shè)置郵寄地址為當(dāng)前地址 
 if((!$ship_name) && (!$ship_address) && (!$ship_city) && (!$ship_state) && (!$ship_zip) &&(!$ship_country)) 
 { 
 $ship_name = $name; 
 $ship_address = $address; 
 $ship_city = $city; 
 $ship_state = $state; 
 $ship_zip = $zip; 
 $ship_country = $country; 
 } 
 
 //連接數(shù)據(jù)庫 
 $conn = db_connect(); 
 
 //事務(wù)開始,必須關(guān)閉自動(dòng)提交 
 $conn ->autocommit(false); 
 
 $query = "select customrid from customers where 
 name ='". $name ."' and address = '". $address ."' 
 and city = '". $city ."' and state = '". $state ."' 
 and zip = '". $zip ."' and country = '". $country ."'"; 
 
 $result = $conn ->query($query); 
 
 if(@$result ->num_rows > 0) 
 { 
 $customer = $result ->fetch_object(); 
 $customerid = $customer ->customerid; 
 } 
 else 
 { 
 $query = "insert into customers values 
 ('','". $name ."','". $address ."','". $city ."','". $state ."','". $zip ."','". $country ."')"; 
 $result = $conn ->query($query); 
 
 if(!$result) 
 return false; 
 } 
 
 $customerid = $conn ->insert_id; //返回上次查詢中自增量的ID 
 
 $date = date("Y-m-d"); 
 
 $query ="insert into orders values 
 ('','". $customerid ."','". $_SESSION['total_price'] ."','". $date ."','PARTIAL','". $ship_name ."','". $ship_address ."','". $ship_city ."','". $ship_state ."','". $ship_zip ."','". $ship_country ."')"; 
 
 $result = $conn ->query($query); 
 if(!$result) 
 return false; 
 
 $query = "select orderid from orders where 
 customerid ='". $customerid ."' and 
 amount > (". $_SESSION['total_price'] ."-.001) and 
 amount < (". $_SESSION['total_price'] ."+.001) and 
 date ='". $date ."' and 
 order_status = 'PARTIAL' and 
 ship_name ='". $ship_name ."' and 
 ship_address ='". $ship_address ."' and 
 ship_city ='". $ship_city ."' and 
 ship_state ='". $ship_state ."' and 
 ship_zip ='". $ship_zip ."' and 
 ship_country ='". $ship_country ."'"; 
 
 $result = $conn ->query($query); 
 
 if($result ->num_rows > 0) 
 { 
 $order = $result ->fetch_object(); 
 $orderid = $order ->orderid; 
 } 
 else 
 return false; 
 
 foreach($_SESSION['cart'] as $isbn => $quantity) 
 { 
 $detail = get_book_details($isbn); 
 $query = "delete from order_items where 
 orderid = '". $orderid ."' and isbn = '". $isbn ."'"; 
 $result = $conn ->query($query); 
 
 $query = "insert into order_items values 
 ('". $orderid ."','". $isbn ."',". $detail['price'] .",$quantity)"; 
 $result = $conn ->query($query); 
 if(!$result) 
 return false; 
 } 
 
 //事務(wù)關(guān)閉,開啟自動(dòng)提交 
 $conn ->commit(); 
 $conn ->autocommit(true); 
 
 return $orderid; 
 } 

5.9 output_fns.php文件中的函數(shù)display_shipping()

function display_shipping($shipping) //輸出包含運(yùn)費(fèi)的總價(jià) 
 { 
 ?> 
 <table border="0" width="100%" cellspacing="0"> 
 <tr> 
 <td align="left">Shipping</td> 
 <td align="right"> <?php echo number_format($shipping, 2); ?></td> 
 </tr> 
 <tr> 
 <th bgcolor="#cccccc" align="left">TOTAL INCLUDING SHIPPING</th> 
 <th bgcolor="#cccccc" align="right">$ <?php echo number_format($shipping+$_SESSION['total_price'], 2); ?></th> 
 </tr> 
 </table> 
 <br /> 
 <?php 
 } 

5.10 output_fns.php文件中的函數(shù)display_card_form()

function display_card_form($name) //輸出信用卡信息 
 { 
 ?> 
 <table border="0" width="100%" cellspacing="0"> 
 <form action="process.php" method="post"> 
 <tr> 
 <th colspan="2" bgcolor="#cccccc">Credit Card Details</th> 
 </tr> 
 <tr> 
 <td>Type</td> 
 <td> 
 <select name="card_type"> 
 <option value="VISA">VISA</option> 
 <option value="MasterCard">MasterCard</option> 
 <option value="American Express">American Express</option> 
 </select> 
 </td> 
 </tr> 
 <tr> 
 <td>Number</td> 
 <td><input type="text" name="card_number" value="" maxlength="16" size="40"/></td> 
 </tr> 
 <tr> 
 <td>AMEX code (if required)</td> 
 <td><input type="text" name="amex_code" value="" maxlength="4" size="4"/></td> 
 </tr> 
 <tr> 
 <td>Expiry Date</td> 
 <td>Month 
 <select name="card_month"> 
 <option value="01">01</option> 
 <option value="02">02</option> 
 <option value="03">03</option> 
 <option value="04">04</option> 
 <option value="05">05</option> 
 <option value="06">06</option> 
 <option value="07">07</option> 
 <option value="08">08</option> 
 <option value="09">09</option> 
 <option value="10">10</option> 
 <option value="11">11</option> 
 <option value="12">12</option> 
 </select> 
 Year 
 <select name="card_year"> 
 <?php 
  for($y = date("Y"); $y < date("Y") + 10; $y++) 
  echo "<option value =\"". $y ."\">" . $y ."</option>"; 
 ?> 
 </select> 
 </td> 
 </tr> 
 <tr> 
 <td>Name on Card</td> 
 <td><input type="text" name="card_name" value="<?php echo $name; ?>" maxlength="40" size="40"/></td> 
 </tr> 
 <tr> 
 <td colspan="2" align="center"> 
 <p> 
 <strong>Please press Purchase to confirm yout purchase, or Continue Shopping to add or remove items</strong> 
 </p> 
 <?php display_form_button('purchase','Purchase These Items'); ?> 
 </td> 
 </tr> 
 </table> 
 <?php 
 }

 5.11 db_fns.php文件中的函數(shù)db_connect()

function db_connect() //連接數(shù)據(jù)庫 
 { 
 $result = new mysqli('localhost','book_sc','password','book_sc'); 
 if(!$result) //連接失敗 
 return false; 
 $result ->autocommit(true); 
 return $result; 
 } 

6、實(shí)現(xiàn)付款

已填寫好信息的信用卡詳細(xì)信息

購物成功

由以下代碼實(shí)現(xiàn):
6.1 process.php

<?php 
 
/** 
 * @author switch 
 * @copyright 2015 
 * 處理付款細(xì)節(jié),將訂單添加到數(shù)據(jù)庫 
 */ 
 //require_once語句和require語句完全相同,唯一區(qū)別是PHP會(huì)檢查該文件是否已經(jīng)被包含過,如果是則不會(huì)再次包含。 
 require_once('book_sc_fns.php'); 
 
 session_start(); 
 
 do_html_header('Checkout'); 
 
 //創(chuàng)建變量 
 $card_type = $_POST['card_type']; 
 $card_number = $_POST['card_number']; 
 $card_month = $_POST['card_month']; 
 $card_year = $_POST['card_year']; 
 $card_name = $_POST['card_name']; 
 
 if(($_SESSION['cart']) && ($card_type) && ($card_number) && ($card_month) && ($card_year) &&($card_name)) 
 { 
 //顯示沒有圖片,不允許更改數(shù)量的購物車 
 display_cart($_SESSION['cart'],false,0); 
 
 display_shipping(calculate_shipping_cost()); 
 
 if(process_card($_POST)) 
 { 
 //清空購物車 
 session_destroy(); 
 //這里可以寫一些關(guān)于信用卡接口調(diào)用的函數(shù),調(diào)用銀行寫好的接口 
 echo "<p>Thank you for shopping with us. Your order has been placed.</p>"; 
 
 display_button("index.php","continue-shopping","Continue Shopping"); 
 } 
 else 
 { 
 echo "<p>Could not process your card. Please contact the card issuer or try again.</p>"; 
 display_button("purchase.php","back","Back"); 
 } 
 } 
 else 
 { 
 echo "<p>You did not fill in all the fields,please try again.</p><hr/>"; 
 display_button("purchase.php","back","Back"); 
 } 
 do_html_footer(); 
?> 

以上就是php實(shí)現(xiàn)購物車功能的前篇,代碼很詳細(xì),希望對(duì)大家的學(xué)習(xí)有所幫助,之后還有下篇分享給大家,不要錯(cuò)過。

相關(guān)文章

最新評(píng)論