这篇文章主要介绍了服务器端编程语言(专业超文本预处理器的缩写)实现购物车功能的全部代码,提出了需求分析、解决方案、数据库的创建,帮助大家轻轻松松实现购物车功能,感兴趣的小伙伴们可以参考一下
本文分两篇为大家介绍php实现购物车功能,具有一定的参考价值,相信大家一定喜欢。
1、需求分析
我们需要找到一种将数据库连接到用户的浏览器的方法。用户能够按目录浏览商品。用户应该能够从商品目录中选取商品以便此后的购买。我们也要能够记录他们选中的物品。当用户完成购买,要合计他们的订单,获取运送商品细节,并处理付款。创建一个管理界面,以便管理员在上面添加、编辑图书和目录。
2、解决方案
2.1 用户视图
2.2 管理员视图
2.3 O-Rama图书中的文件列表
3、实现数据库3.1 创建book_sc数据库的结构化查询语言代码
创建数据库book _ sc#创建book_sc数据库
使用book _ sc#使用book_sc数据库
创建表客户#创建用户表
(
customerid INT UNSIGNED NOT NULL AUTO _ INCREMENT主键
姓名字符(60)不为空,
地址字符(80)不为空,
城市字符(30)不为空,
状态充电器(10),
拉链充电器(10),
国家字符(20)不为空
);
创建表订单#创建订单表
(
orderid INT UNSIGNED NOT NULL AUTO _ INCREMENT主键,
customerid INT无符号不为空,
金额浮动(6,2),
日期日期不为空,
订单状态字符(10),
ship_name CHAR(60)不为空,
发货地址字符(80)不为空,
发货城市字符(30)不为空,
发货状态字符(20),
ship_zip CHAR(10),
发货国家字符(20)非空
);
创建表格书籍#创建图书表
(
国际标准书号字符(13)非空主键,
作者充电器(80),
标题充电器(100),
catid INT无符号,
价格浮动(4,2)不为空,
描述VARCHAR(255)
);
创建表格类别#创建目录表
(
catid INT UNSIGNED NOT NULL AUTO _ INCREMENT主键
类别名字符(60)不为空
);
创建表订单_项目#订单物品表
(
orderid INT无符号不为空,
国际标准书号字符(13)不为空,
item _价格浮动(4,2)不为空,
数量TINYINT无符号不为空,
主键(订单编号,国际标准书号)
);
创建表管理员#管理员表
(
用户名字符(16)非空主键,
密码字符(40)不为空
);
授权选择、插入、更新、删除
在book_sc上。*
to book_sc@localhost由'密码'标识;
3.2 数据库测试数据文档
使用book _ sc
插入到图书值(' 0672329166 ','卢克韦林和劳拉汤姆森,' PHP和MySQL网络开发',1,49.99,
PHP MySQL Web开发教会读者开发动态、安全的电子商务网站。通过跟随真实世界的例子和工作样本项目,你将学会集成和实现这些技术。);
插入到书值(' 067232976X ','朱莉梅洛尼','萨姆斯自学PHP,MySQL和阿帕奇一体机,1,34.99,
本书中的每一课都以前面的课为基础,采用简单明了、循序渐进的方法,让你从头开始学习服务器端编程语言(Professional Hypertext Preprocessor的缩写)脚本、MySQL数据库和Apache web服务器的基本知识。);
插入图书值(' 0672319241 ','斯特林休斯和Andrei Zmievski ',' PHP开发人员食谱',1,39.99,
为服务器端编程语言(Professional Hypertext Preprocessor的缩写)开发人员最常面临的挑战提供了一个完整的、面向解决方案的指南\r\n这本书是专门为有经验的网开发人员编写的,为现实世界的需求提供了现实世界的解决方案\ r \ n ');
插入类别值(1,"互联网");
插入类别值(2,"自助");
插入类别值(5,"虚构");
插入类别值(4,"园艺");
插入管理值(' admin ',sha1(' admin '));
4、实现在线目录
主页-目录
由以下代码实现:
4.1 index.php
?服务器端编程语言(专业超文本预处理器的缩写)
/**
* @作者开关
* @copyright 2015
* 网站首页,显示系统中的图书目录
*/
//要求_一次语句和需要语句完全相同,唯一区别是服务器端编程语言(专业超文本预处理器的缩写)会检查该文件是否已经被包含过,如果是则不会再次包含。
require _ once(' book _ sc _ fns。PHP’);
session_start()。//开始会话
do_html_header('欢迎来到book-O-Rama’);//页头
回声请选择一个类别:/p ';
$ cat _ array=get _ categories();//从数据库获取目录
display _ categories($ cat _ array);//显示目录链接
if(isset($ _ SESSION[' admin _ user '])//如果是管理员,显示管理员操作
display_button('admin.php ','管理菜单','管理菜单');
do _ html _ footer();//页尾
?
4.2 book_fns.php文件中的函数获取类别()
函数get_categories() //从数据库中获取目录列表
{
$ conn=db _ connect();//连接数据库
$query='从类别中选择catid,目录名
$ result=@ $ conn-query($ query);
如果(!$result) //查询失败,返回错误的
返回错误的
$ num _ cats=@ $ result-num _ rows;
if($num_cats==0) //数据库中无目录,返回错误的
返回错误的
$ result=db _ result _ to _ array($ result);
返回$结果
}
4.3输出_fns.php文件中的函数显示类别()
函数display _ categories($ cat _ array)//输出目录
{
如果(!is_array($cat_array))
{
回声”当前可用的进行性核性眼肌麻痹类别/p ";
返回;
}
回声报
foreach($cat_array as $row)
{
$url='show_cat.php?catid=' .$ row[' catid '];
$ title=$ row['猫名'];
回声'李;
do_html_URL($url,$ title);
回声'/李;
}
echo '/ul ';
echo ' HR/';
}
4.4 db_fns.php文件中的函数db_result_to_array()
函数db_result_to_array($result) //结果到数组
{
$ RES _ array=array();
for($ count=0;$ row=$ result-fetch _ assoc();$count)
$ RES _ array[$ count]=$ row;
返回$ res _ array
}
Internet目录下的所有图书
由以下代码实现:
4.5 show_cat.php
?服务器端编程语言(专业超文本预处理器的缩写)
/**
* @作者开关
* @copyright 2015
* 显示特定目录包含的所有图书
*/
//要求_一次语句和需要语句完全相同,唯一区别是服务器端编程语言(专业超文本预处理器的缩写)会检查该文件是否已经被包含过,如果是则不会再次包含。
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 ','继续','继续购物');
display_button('admin.php ','管理菜单','管理菜单');
显示按钮('编辑类别表单。PHP?catid=' .$catid,'编辑类别','编辑类别');
}
else //否则显示主界面按钮
{
display_button('index.php ','继续-购物','继续购物');
}
do _ html _ footer();
?
4.6 book_fns.php文件中的函数get_category_name()
函数get_category_name($catid) //获取目录名
{
$ conn=db _ connect();//连接数据库
$query='从catid=' '的类别中选择猫名.$catid .';
$ result=@ $ conn-query($ query);
如果(!$result) //查询失败,原因为查询出错
返回错误的
$ num _ cats=@ $ result-num _ rows;
if($num_cats==0) //查询失败,原因为无目录
返回错误的
$ row=$ result-fetch _ object();
返回$ row-猫名;
}
4.8 book_fns.php文件中的函数get_books()
函数get_books($catid) //从数据库中获取图书
{
如果((!$ catid)| |($ catid==' ')//如果目录身份证明为空
返回错误的
$ conn=db _ connect();
$ query=' select * from books where catid=' ' .$catid .';
$ result=@ $ conn-query($ query);
如果(!$result) //查询失败,原因为查询出错
返回错误的
$ num _ books=@ $ result-num _ rows;
if($num_books==0) //查询失败,原因为无图书
返回错误的
$ result=db _ result _ to _ array($ result);
返回$结果
}
4.9输出_fns文件中的函数显示_书籍()
函数display_books($book_array) //输出图书
{
如果(!is_array($book_array))
回声此类别中目前没有图书/p ';
else //有图书,建表
{
"回显"表格宽度="100%"边框="0";
foreach($book_array as $row)
{
$url='show_book.php?国际标准书号=' .$ row[' ISBN '];
echo“trtd”;
//如果图片存在
if(@file_exists('images/').$ row[' ISBN ']. jpg '))
{
$title='img src='images/' .$ row[' ISBN ']. jpg ' style=' border:1px纯黑'/';
do_html_URL($url,$ title);
}
其他
回显"";
echo '/tdtd ';
$title=$row['title'].由. row[' author '];
do_html_URL($url,$ title);
echo '/TD/tr ';
}
echo "/table ";
}
echo ' HR/';
}
PHP and MySQL Web Development的详细信息
由以下代码实现:
4.10 show_book.php
?服务器端编程语言(专业超文本预处理器的缩写)
/**
* @作者开关
* @copyright 2015
* 显示特定图书的详细信息
*/
//要求_一次语句和需要语句完全相同,唯一区别是服务器端编程语言(专业超文本预处理器的缩写)会检查该文件是否已经被包含过,如果是则不会再次包含。
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);
//设置继续按钮
$ target=' index.php
if($book['catid'])
$target='show_cat.php?catid=' .$ book[' catid '];
//如果是管理员,显示编辑链接
如果(检查管理员用户())
{
display _ button(' edit _ book _ form。PHP?国际标准书号=' .$isbn,' edit-item ',' Edit Item ');
display_button('admin.php ','管理菜单','管理菜单');
display_button($target,' continue ',' Continue ');
}
其他
{
display_button('show_cart.php?新='。$isbn,'添加到购物车','添加。$book['title'].到我的购物车');
display _ button(target,'继续-购物','继续购物');
}
do _ html _ footer();
?
4.11 book_fns.php文件中的函数get_book_details()
函数get_book_details($isbn) //从数据库中获取一本图书的详细说明
{
如果((!$ ISBN)| |($ ISBN==' ')//如果图书统一书号为空
返回错误的
$ conn=db _ connect();//连接数据库
$ query=' select * from books where ISBN=' ' .$isbn .';
$ result=@ $ conn-query($ query);
如果(!$result) //查询失败,原因为查询出错
返回错误的
$ result=@ $ result-fetch _ assoc();
返回$结果
}
4.12输出_文件文件中的函数显示_书籍_详细信息()
函数display_book_details($book) //输出图书详细说明
{
if(is_array($book))
{
echo“tabletr”;
//如果图片存在
if(@file_exists('images/').$ book[' ISBN ']. jpg ').
{
$size=getimagesize('images/').$ book[' ISBN ']. jpg ');
if(($size[0] 0) ($size[1] 0))
{
echo 'tdimg src='images/' .$ book[' ISBN ']. jpg ' style=' border:1px纯黑//TD’;
}
}
回声报
echo ' listrong作者:/strong ';
echo $ book[' author '];
echo '/lilistrongISBN:/strong ';
echo $ book[' ISBN '];
回声/莉莉斯特朗我们的价格:/strong ';
echo number _ format($ book[' price '],2);
echo '/Lili strong描述:/strong ';
echo $ book[' description '];
echo '/Li/ul/TD/tr/table ';
}
其他
{
回声此时无法显示这本书的详细信息. p/p ';
}
echo ' HR/';
}
5、实现购物车
不使用参数的脚本只显示购物车的内容
带有参数new的脚本将添加一个物品到购物车
由以下代码实现:
5.1 show_cart.php
?服务器端编程语言(专业超文本预处理器的缩写)
/**
* @作者开关
* @copyright 2015
* 显示用户购物车的内容。也用来向购物车添加图书
*/
//要求_一次语句和需要语句完全相同,唯一区别是服务器端编程语言(专业超文本预处理器的缩写)会检查该文件是否已经被包含过,如果是则不会再次包含。
require _ once(' book _ sc _ fns。PHP’);
session_start()。
@ $ new=$ _ GET[' new '];
如果(新)
{
如果(!isset($ _ SESSION[' cart '])//购物车中无物品
{
$ _ SESSION[' cart ']=array();
$ _ SESSION[' items ']=0;
$ _ SESSION[' total _ price ']=' 0.00 ';
}
if(isset($ _ SESSION[' cart '][$ new]))
{
$ _ SESSION[' cart '][$ new];
}
其他
{
$ _ 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]);
其他
$ _ SESSION[' cart '][$ ISBN]=$ _ POST[$ ISBN];
}
$ _ SESSION[' total _ price ']=calculate _ price($ _ SESSION[' cart ']);
$ _ SESSION[' items ']=calculate _ items($ _ SESSION[' cart ']);
}
do_html_header("你的购物车");
if((@ $ _ SESSION[' cart '])(array _ count _ values($ _ SESSION[' cart ']))
{
display _ cart($ _ SESSION[' cart ']);
}
其他
{
回声您的购物车中没有商品/phr/';
}
$ target=' index.php
//如果只有一种物品添加到购物车,可以继续购物
如果(新)
{
$ details=get _ book _ details($ new);
if($details['catid'])
{
$target='show_cat.php?catid=' .$ details[' catid '];
}
}
display _ button(target,'继续-购物','继续购物');
//SSL链接-需要配置,PS:没配置,所以不能使用
//$ path=$ _ SERVER[' PHP _ SELF '];//获取路径
//$ SERVER=$ _ SERVER[' SERVER _ NAME '];//获取主机名
//$ path=str _ replace(' show _ cart。PHP ','',$ path);
//display_button('https://').$服务器.$path .checkout.php去结账','去结账');
//非加密套接字协议层链接
display_button('checkout.php ','转到签出','转到退房’);
do _ html _ footer();
?
5.2输出_fns.php文件中的函数显示购物车()
函数display_cart($cart,$change=true,$images=1) //显示购物车
{
"回显"表格边框="0"宽度="100%"单元格间距="0"
表单操作='show_cart.php '方法='post '
tr
th栏span=" .(1 $图片)。bgcolor=' #cccccc'Item/th
价格/日
th bgcolor=' cccccc '数量/th
th bgcolor='#cccccc'Total/th
/tr ';
//输出购物车中每一项
foreach($cart as $isbn=$qty)
{
$ book=get _ book _ details($ ISBN);
回声tr’;
if($images==true)
{
echo ' td align=' left
if(file_exists('images/' .$ ISBN . 1000 . jpg '))
{
$size=getimagesize('images/').$ ISBN . 1000 . jpg’);
if(($size[0] 0) ($size[1] 1)) //图片长宽
{
echo 'img src='images/' .$国际标准书号.' jpg '
style='border: 1px纯黑'
宽度=""。($size[0]/3).''
高度=""。($size[1]/3).''/';
}
}
其他
回显"";
echo '/TD ';
}
echo 'td align='left '
a href='show_book.php?国际标准书号=' .国际标准书号美元.'''.$book['title']./a by ' .$book['author']./td
td align='center'\$ ' .number _ format($book[' price '],2). '/tdtd align=" center ";
//如果允许更改数量
if ($change==true)
{
“回声”输入类型="文本"名称=""。国际标准书号美元.值=""。$数量. size=" 3
}
其他
{
echo $数量
}
echo '/tdtd align='center'\$ ' .number _ format($ book[' price ']* $ qty,2)./TD/tr \ n ';
}
//总数
回声报
th栏span=" .(2 $图片)。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)
{
回声报
td colspan=" " .(2 $图片)。/td
td align='居中'
输入类型=' hidden ' name=' save ' value=' true '/
输入type=' image ' src=' images/Save-Changes。gif ' border=' 0 ' alt='保存更改'/
/td
td /td
/tr ';
}
echo '/form/table ';
}
5.3 book_fns.php文件中的函数计算价格()
函数calculate_price($cart) //计算购物车中物品总价
{
$价格=0.0
if(is_array($cart))
{
$ conn=db _ connect();
foreach($cart as $isbn=$qty)
{
$query='从isbn=' '的图书中选择价格国际标准书号。
$ result=$ conn-query($ query);
如果($结果)
{
$ item=$ result-fetch _ object();
$ item _ price=$ item-price;
$ price=$ item _ price * $ qty
}
}
}
返回价格
}
5.4 book_fns.php文件中的函数计算项目()
函数calculate_items($cart) //计算购物车中的物品总数
{
$ items=0;
if(is_array($cart))
{
foreach($cart as $isbn=$qty)
$ items=$ qty
}
返回$项目
}
获取顾客的详细信息
由以下代码实现:
5.5 checkout.php
?服务器端编程语言(专业超文本预处理器的缩写)
/**
* @作者开关
* @copyright 2015
* 向用户显示所有的订单细节。获取商品运送细节
*/
//要求_一次语句和需要语句完全相同,唯一区别是服务器端编程语言(专业超文本预处理器的缩写)会检查该文件是否已经被包含过,如果是则不会再次包含。
require _ once(' book _ sc _ fns。PHP’);
session_start()。
do _ html _ header(' check out ');
if((@ $ _ SESSION[' cart '])(array _ count _ values($ _ SESSION[' cart ']))
{
display_cart($_SESSION['cart'],false,0);
display _ check out _ form();
}
其他
{
回声您的购物车中没有其他商品/p ';
}
display_button('show_cart.php ','继续-购物','继续购物');
do _ html _ footer();
?
5.6输出_fns.php文件中的显示_结帐_表单()
函数display_checkout_form() //输出付款台界面
{
?
br /
表格边框='0 '宽度='100% '单元格spacng='0 '
表单操作='purchase.php '方法='post '
tr!-客户信息-
您的详细信息/th
/tr
tr
(美)财政部(Treasury Department)名称/td
TD输入type=' text ' name=' name ' value=' ' maxlength=' 40 ' size=' 40 '//TD
/tr
tr
(美)财政部(Treasury Department)地址/td
TD输入type=' text ' name=' address ' value=' ' maxlength=' 40 ' size=' 40 '//TD
/tr
tr
(美)财政部(Treasury Department)城市/郊区/td
TD输入type=' text ' name=' city ' value=' ' maxlength=' 20 ' size=' 40 '//TD
/tr
tr
(美)财政部(Treasury Department)州/省/td
TD输入type=' text ' name=' state ' value=' ' maxlength=' 20 ' size=' 40 '//TD
/tr
tr
(美)财政部(Treasury Department)邮政编码/td
TD输入type=' text ' name=' zip ' value=' ' maxlength=' 10 ' size=' 40 '//TD
/tr
tr
(美)财政部(Treasury Department)国家/地区/td
TD输入type=' text ' name=' country ' value=' ' maxlength=' 10 ' size=' 40 '//TD
/tr
tr!-运单信息-
th colspan='2' bgcolor='#cccccc '送货地址(如果如上,请留空)/th
/tr
tr
(美)财政部(Treasury Department)名称/td
TD输入type=' text ' name=' ship _ name ' maxlength=' '//TD
/tr
tr
(美)财政部(Treasury Department)地址/td
TD输入type=' text ' name=' ship _ address ' value=' ' maxlength=' 40 ' size=' 40 '//TD
/tr
tr
(美)财政部(Treasury Department)城市/郊区/td
TD输入type=' text ' name=' ship _ city ' value=' ' maxlength=' 20 ' size=' 40 '//TD
/tr
tr
(美)财政部(Treasury Department)州/省/td
TD输入type=' text ' name=' ship _ state ' value=' ' maxlength=' 20 ' size=' 40 '//TD
/tr
tr
(美)财政部(Treasury Department)邮政编码/td
TD输入type=' text ' name=' ship _ zip ' value=' ' maxlength=' 10 ' size=' 40 '//TD
/tr
tr
(美)财政部(Treasury Department)国家/地区/td
TD输入type=' text ' name=' ship _ country ' value=' ' maxlength=' 20 ' size=' 40 '//TD
/tr
tr
td colspan='2' align='center '
p
强烈的请按"购买"确认您的购买,或继续购物以添加或删除项目100/strong
/p
?PHP display _ form _ button(' Purchase ',' Purchase There Items ');
/td
/tr
/表单
/表格
人力资源/
?服务器端编程语言(专业超文本预处理器的缩写)
}
已填写好信息的订单
获取客户信用卡信息
由以下代码实现:
5.7 purchase.php
?服务器端编程语言(专业超文本预处理器的缩写)
/**
* @作者开关
* @copyright 2015
* 从用户获取付款细节
*/
//要求_一次语句和需要语句完全相同,唯一区别是服务器端编程语言(专业超文本预处理器的缩写)会检查该文件是否已经被包含过,如果是则不会再次包含。
require _ once(' book _ sc _ fns。PHP’);
session_start()。
do _ html _ header(' check out ');
//创建变量
$ name=$ _ POST[' name '];
$ address=$ _ POST[' address '];
$ city=$ _ POST[' city '];
$ zip=$ _ POST[' zip '];
$ country=$ _ POST[' country '];
//如果订单细节填满
if(($ _ SESSION[' cart '])($ name)($ address)($ city)($ zip)($ country))
{
if(insert_order($_POST)!=假)
{
display_cart($_SESSION['cart'],false,0);
display _ shipping(calculate _ shipping _ cost());
display _ card _ form($ name);
display_button('show_cart.php ','继续-购物','继续购物');
}
其他
{
回声无法存储数据,请重试./phr/';
display_button('checkout.php ',' back ',' Back ');
}
}
其他
{
回声您没有填写所有字段,请重试./phr/';
display_button('checkout.php ',' back ',' Back ');
}
do _ html _ footer();
?
5.8 order_fns.php文件中的函数insert_order()
函数insert_order($order_details) //提取订单细节作为变量
{
extract($ order _ details);
//设置邮寄地址为当前地址
如果((!$ship_name)(!$ship_address)(!$ship_city)(!$ship_state)(!$ship_zi
p) &&(!$ship_country)) { $ship_name = $name; $ship_address = $address; $ship_city = $city; $ship_state = $state; $ship_zip = $zip; $ship_country = $country; } //连接数据库 $conn = db_connect(); //事务开始,必须关闭自动提交 $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; } //事务关闭,开启自动提交 $conn ->commit(); $conn ->autocommit(true); return $orderid; }5.9 output_fns.php文件中的函数display_shipping()
function display_shipping($shipping) //输出包含运费的总价 { ?> <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文件中的函数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文件中的函数db_connect()
function db_connect() //连接数据库 { $result = new mysqli('localhost','book_sc','password','book_sc'); if(!$result) //连接失败 return false; $result ->autocommit(true); return $result; }6、实现付款
已填写好信息的信用卡详细信息
购物成功
由以下代码实现: 6.1 process.php
<?php /** * @author switch * @copyright 2015 * 处理付款细节,将订单添加到数据库 */ //require_once语句和require语句完全相同,唯一区别是PHP会检查该文件是否已经被包含过,如果是则不会再次包含。 require_once('book_sc_fns.php'); session_start(); do_html_header('Checkout'); //创建变量 $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)) { //显示没有图片,不允许更改数量的购物车 display_cart($_SESSION['cart'],false,0); display_shipping(calculate_shipping_cost()); if(process_card($_POST)) { //清空购物车 session_destroy(); //这里可以写一些关于信用卡接口调用的函数,调用银行写好的接口 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实现购物车功能的前篇,代码很详细,希望对大家的学习有所帮助,之后还有下篇分享给大家,不要错过。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。