PHP和mysql的购物程序代码供大家参考
来源:zend
<?
/* shoppingcart.php
*
*
*/ if(!$session && !$scid) {
$session = md5(uniqid(rand()));
SetCookie("scid", "$session", time() + 14400);
} /* last number is expiration time in seconds, 14400 sec = 4 hrs */ class Cart {
function check_item($table, $session, $product) {
$query = "SELECT * FROM $table WHERE session='$session' AND product='$product' ";
$result = mysql_query($query); if(!$result) {
return 0;
} $numRows = mysql_num_rows($result); if($numRows == 0) {
return 0;
} else {
$row = mysql_fetch_object($result);
return $row->quantity;
}
} function add_item($table, $session, $product, $quantity) {
$qty = $this->check_item($table, $session, $product);
if($qty == 0) {
$query = "INSERT INTO $table (session, product, quantity) VALUES ";
$query .= "('$session', '$product', '$quantity') ";
mysql_query($query);
} else {
$quantity += $qty;
$query = "UPDATE $table SET quantity='$quantity' WHERE session='$session' AND ";
$query .= "product='$product' ";
mysql_query($query);
}
} function delete_item($table, $session, $product) {
$query = "DELETE FROM $table WHERE session='$session' AND product='$product' ";
mysql_query($query);
} function modify_quantity($table, $session, $product, $quantity) {
$query = "UPDATE $table SET quantity='$quantity' WHERE session='$session' ";
$query .= "AND product='$product' ";
mysql_query($query);
} function clear_cart($table, $session) {
$query = "DELETE FROM $table WHERE session='$session' ";
mysql_query($query);
} function cart_total($table, $session) {
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0) {
while($row = mysql_fetch_object($result)) {
$query = "SELECT price FROM inventory WHERE product='$row->product' ";
$invResult = mysql_query($query);
$row_price = mysql_fetch_object($invResult);
$total += ($row_price->price * $row->quantity);
}
}
return $total;
} function display_contents($table, $session) {
$count = 0;
$query = "SELECT * FROM $table WHERE session='$session' ORDER BY id ";
$result = mysql_query($query);
while($row = mysql_fetch_object($result)) {
$query = "SELECT * FROM inventory WHERE product='$row->product' ";
$result_inv = mysql_query($query);
$row_inventory = mysql_fetch_object($result_inv);
$contents["product"][$count] = $row_inventory->product;
$contents["price"][$count] = $row_inventory->price;
$contents["quantity"][$count] = $row->quantity;
$contents["total"][$count] = ($row_inventory->price * $row->quantity);
$contents["description"][$count] = $row_inventory->description;
$count++;
}
$total = $this->cart_total($table, $session);
$contents["final"] = $total;
return $contents;
} function num_items($table, $session) {
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
return $num_rows;
} function quant_items($table, $session) {
$quant = 0;
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
while($row = mysql_fetch_object($result)) {
$quant += $row->quantity;
}
return $quant;
}
}
?> /*
This part contains a description of how to create the tables on your mysql server. # MySQL dump 6.0
#
# Host: localhost Database: kmartShopper
#--------------------------------------------------------
# Server version 3.22.25 #
# Table structure for table 'inventory'
#
CREATE TABLE inventory (
product tinytext NOT NULL,
quantity tinytext NOT NULL,
id int(4) DEFAULT '0' NOT NULL auto_increment,
description tinytext NOT NULL,
price float(10,2) DEFAULT '0.00' NOT NULL,
category char(1) DEFAULT '' NOT NULL,
KEY id (id),
PRIMARY KEY (id),
KEY price (price)
); #
# Table structure for table 'shopping'
#
CREATE TABLE shopping (
session tinytext NOT NULL,
product tinytext NOT NULL,
quantity tinytext NOT NULL,
card tinytext NOT NULL,
id int(4) DEFAULT '0' NOT NULL auto_increment,
KEY id (id),
PRIMARY KEY (id)
);
*/ Example
<?
include("shoppingcart.php");
$cart = new Cart;
$mysql_link = mysql_connect("localhost", "wwwrun", "");
$mysql_select_db("kmartShopper", $mysql_link) /* heh, use whatever database name you put the 2 tables under in place of kmartShopper */
?>
/* call functions like $cart->add_item and such, see the code. */
来源:zend
<?
/* shoppingcart.php
*
*
*/ if(!$session && !$scid) {
$session = md5(uniqid(rand()));
SetCookie("scid", "$session", time() + 14400);
} /* last number is expiration time in seconds, 14400 sec = 4 hrs */ class Cart {
function check_item($table, $session, $product) {
$query = "SELECT * FROM $table WHERE session='$session' AND product='$product' ";
$result = mysql_query($query); if(!$result) {
return 0;
} $numRows = mysql_num_rows($result); if($numRows == 0) {
return 0;
} else {
$row = mysql_fetch_object($result);
return $row->quantity;
}
} function add_item($table, $session, $product, $quantity) {
$qty = $this->check_item($table, $session, $product);
if($qty == 0) {
$query = "INSERT INTO $table (session, product, quantity) VALUES ";
$query .= "('$session', '$product', '$quantity') ";
mysql_query($query);
} else {
$quantity += $qty;
$query = "UPDATE $table SET quantity='$quantity' WHERE session='$session' AND ";
$query .= "product='$product' ";
mysql_query($query);
}
} function delete_item($table, $session, $product) {
$query = "DELETE FROM $table WHERE session='$session' AND product='$product' ";
mysql_query($query);
} function modify_quantity($table, $session, $product, $quantity) {
$query = "UPDATE $table SET quantity='$quantity' WHERE session='$session' ";
$query .= "AND product='$product' ";
mysql_query($query);
} function clear_cart($table, $session) {
$query = "DELETE FROM $table WHERE session='$session' ";
mysql_query($query);
} function cart_total($table, $session) {
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
if(mysql_num_rows($result) > 0) {
while($row = mysql_fetch_object($result)) {
$query = "SELECT price FROM inventory WHERE product='$row->product' ";
$invResult = mysql_query($query);
$row_price = mysql_fetch_object($invResult);
$total += ($row_price->price * $row->quantity);
}
}
return $total;
} function display_contents($table, $session) {
$count = 0;
$query = "SELECT * FROM $table WHERE session='$session' ORDER BY id ";
$result = mysql_query($query);
while($row = mysql_fetch_object($result)) {
$query = "SELECT * FROM inventory WHERE product='$row->product' ";
$result_inv = mysql_query($query);
$row_inventory = mysql_fetch_object($result_inv);
$contents["product"][$count] = $row_inventory->product;
$contents["price"][$count] = $row_inventory->price;
$contents["quantity"][$count] = $row->quantity;
$contents["total"][$count] = ($row_inventory->price * $row->quantity);
$contents["description"][$count] = $row_inventory->description;
$count++;
}
$total = $this->cart_total($table, $session);
$contents["final"] = $total;
return $contents;
} function num_items($table, $session) {
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
return $num_rows;
} function quant_items($table, $session) {
$quant = 0;
$query = "SELECT * FROM $table WHERE session='$session' ";
$result = mysql_query($query);
while($row = mysql_fetch_object($result)) {
$quant += $row->quantity;
}
return $quant;
}
}
?> /*
This part contains a description of how to create the tables on your mysql server. # MySQL dump 6.0
#
# Host: localhost Database: kmartShopper
#--------------------------------------------------------
# Server version 3.22.25 #
# Table structure for table 'inventory'
#
CREATE TABLE inventory (
product tinytext NOT NULL,
quantity tinytext NOT NULL,
id int(4) DEFAULT '0' NOT NULL auto_increment,
description tinytext NOT NULL,
price float(10,2) DEFAULT '0.00' NOT NULL,
category char(1) DEFAULT '' NOT NULL,
KEY id (id),
PRIMARY KEY (id),
KEY price (price)
); #
# Table structure for table 'shopping'
#
CREATE TABLE shopping (
session tinytext NOT NULL,
product tinytext NOT NULL,
quantity tinytext NOT NULL,
card tinytext NOT NULL,
id int(4) DEFAULT '0' NOT NULL auto_increment,
KEY id (id),
PRIMARY KEY (id)
);
*/ Example
<?
include("shoppingcart.php");
$cart = new Cart;
$mysql_link = mysql_connect("localhost", "wwwrun", "");
$mysql_select_db("kmartShopper", $mysql_link) /* heh, use whatever database name you put the 2 tables under in place of kmartShopper */
?>
/* call functions like $cart->add_item and such, see the code. */
解决方案 »
- 这种怎么转换成字符串啊?
- 我这样写可以吗?第一次接触PHP
- 如果时间大于2009年1月20日则显示A, 如果小于则显示B怎么写?
- php文件上传,结果得到的上传文件为空!
- 怎么样把提交的表单发送到指定的邮箱?
- 高手请进!请问我的下载地址要怎么写!!
- session丢失一问(很急,大家帮忙)
- 如何读取一个目录下的所有文件名,要求按照时间或文件名排序,还可以指定读取某一特定类型的文件名,比如"CSV"。
- PHP中JAVASCIPT的数组赋值问题。
- 请教:连续登录两次才能进入使SESSION变量赋值,怎么回事?
- 大家给个建议,图片放在数据库中好,还是单独以文件保存好?
- 哪位高手知道怎样用php实现Server push呀?
//////////接收页面变量,并放入数组
//
session_start();
if(!session_is_registered('stationery')) session_register('stationery');
//清空购物栏
if ($action=="clear") unset($stationery);
//如果是更新购物栏
if ($action=="update" && isset($num_num))
{
for ($c=0;$c<$num_num;$c++)
{
$jj="num".$c;
$stationery[$c]['num']=$$jj;
}
}
if ($action=="del" && isset($no))
{
$stationery[$no]['id']="null";
}
if ($action=="order")
{
echo "买单了";
}
if (isset($id))
{
$i=count($stationery);
if($i==0)
{
$stationery[$i]['id']=$id;
$stationery[$i]['name']=$name;
$stationery[$i]['price']=$price;
$stationery[$i]['unit']=$unit;
$stationery[$i]['num']=1;
echo "空的购物栏";
}else {
for($j=0;$j<$i;$j++)
{
if($stationery[$j]['id']==$id)
{
$stationery[$j]['num']=$stationery[$j]['num']+1;
break;
}else{
if ($j==($i-1))
{
$stationery[$i]['id']=$id; //如没有记录,给数组增添一个元素
$stationery[$i]['name']=$name;
$stationery[$i]['price']=$price;
$stationery[$i]['unit']=$unit;
$stationery[$i]['num']=1; //数量初始化为1
} }
}
}
reset($stationery);
}
print("您的购物篮现在有已下货品:<br>");
//购物列表
print ("<form method="POST" action="./char.php?action=update" id="form2" name="form2"><table><tr><td align="center" width="40" bgcolor="#60ACC8">数量</td>
<td align="center" width="60" bgcolor="#60ACC8">型号</td>
<td align="center" width="60" bgcolor="#60ACC8">价钱</td>
<td align="center" width="60" bgcolor="#60ACC8">总价</td>
<td align="center" width="70"> </td></tr>");
$s_total=0;
$num_num=0;
for ($a=0;$a<count($stationery);$a++)
{
$t_id=$stationery[$a]['id'];
$num_num+=1;
if ($t_id!="null")
{
$t_name=$stationery[$a]['name'];
$t_price=$stationery[$a]['price'];
$t_unit=$stationery[$a]['unit'];
$t_num=$stationery[$a]['num'];
$total=$t_num*$t_price;
$h_total+=$total;
print ("<tr>");
print "<td>$t_id<INPUT TYPE="text" NAME="num$a" value="$t_num" size="3" maxlength="3"></td>";
print "<td>$t_name</td>";
print "<td>¥$t_price</td>";
print "<td>¥$total</td>";
print "<td><a href=./char.php?action=del&no=$a><img SRC="./images/del.gif" WIDTH=41 HEIGHT=17 BORDER=0 ALT="$t_id"></a></td>";
print ("<tr>");
}
}
print ("<INPUT TYPE="hidden" name="num_num" value="$num_num" ></table>");
print ("<table width="290" border="0">
<tr>
<td width="33%">总计费用</td>
<td width="33%"> </td>
<td colspan="3" width="33%" align="left">¥$h_total</td>
<input type="hidden" name="number" value="2">
</tr>
</table>");
print ("<table>
<tr>
<td>
<input type="IMAGE" value="Update Order" src="./images/refresh.gif" width="77" height="17" border="0" alt="更新购物篮" id="IMAGE1" name="IMAGE1">
</td>
</form>
<form method="POST" action="./char.php?action=clear" id="form2" name="form2">
<td>
<p>
<input type="IMAGE" value="Clear Order" src="./images/empty.gif" width="77" height="17" border="0" alt="清空购物篮" id="IMAGE2" name="IMAGE2">
</td>
</form>
<form method="POST" action="./char.php?action=order" id="form3" name="form3">
<td>
<p>
<input type="IMAGE" value="Purchase" src="./images/order_now.gif" width="77" height="17" border="0" alt="下定单" id="IMAGE3" name="IMAGE3">
</td>
</form>
</tr>
</table>");
?>
2000年09月01
作者/来源:limodou 仅用PHP4 Session实现的迷你购物篮(一)作者:Evert Smith 翻译:limodou介绍
如果你还没有用PHP实现你自已的购物篮,在读完这篇文章之后你应该可以创建一个了。甚至你可能已
经有了一个购物篮,我在这里所提供的一些技巧可能会帮助你改善你的系统。 我将给你一些提示,关于如何去做也许才能减少对购物篮表的无限的查询,或减少无限的文本文件填充
你的文件系统,因为应用程序只会做但不会删除它们。 如果你对这类的题目是个新手,不要害怕。它实际上相当简单和有效,你只需要一个支持php4的主机,
象notepad或vi之类的html编辑器,你宝贵的几分种,和这个小例子。
想法
在1998年,我有一个在硬件商店工作的朋友要求我为他们编写一个在线商店。需要快速和简单,同时还
要有在线管理。当我发着39度高烧的时候我变得想当有创建力,所以我用perl写了那个东西,使用minisql
作为后端。在整个处理中我插入了我所提到的迷你购物篮。 这个迷你购物篮与平常的购物车只有很小的不同,它会在每一页显示你的购物车的东西,不需要在放入
一件东西后在购物车来回跳转。这就是我写这篇文章的初衷。
目标
人们喜欢控制,那么为什么不给他们些透明度,以便让他们相信拥有了控制?这个迷你购物篮演示了一
个完美的方法:它提供给人们所必须的信息,并且节省了他们一次点击,接近了在线商店的3击范例。 所以,目标就是在任何时候将这个迷你购物篮显示为你的页面上的一部分,在结尾处提供一个摘要用以
修改购物篮中的物品,接着在最后发送一个订单。 要求
你应该知道什么是session。如果不知道,这里有一个快速的纲要。已经有很多文章关于这个话题,你
可以从中找到所有你需要的代码例子。在你的开始页面打开一个session,使用 <?phpsession_start();?> 这样将创建一个session名字和一个session id。你现在既可以使用缺省的通过基于cookie的设置session
的方式,通过一个表单来传递session id,或把它作为一个变量附在你的链接上(get方法)的方法。不要忘
记在最后释放session。:) 你的商品应该有一个名字,价格和唯一标识,以便能用在这个例子中,如果不这样,你可能需要做一点
修改。这里我使用mysql作为后端以便建立页面及其它,为了让购物能工作这不是必须的。:) 你应该了解数组。现在如果有人有时间利用我的代码并且创建一个它的类,我理所当然地要感激得到它。 定义
为了简化这个例子,我使用了四个独立的数组和一些额外的变量。代码可以被优化。这样可以很容易地
显示想法和阅读代码。可以使用类更好的完成,但是我不能十分肯定是否能够把对象保存到session 里。有
人想对此发表评论吗? 我们还需要一个项目计数器。当然可以使用count() 命令来实现,我只不过认为它足够好,以便总能知
道有多少的项目,并且它也为循环提供了一个好的计数器。 工作
让我们假设在你的HTML页中有一个商品列表 ID Name Price
1 Mouse 25.00 add
2 Key 100.00 add
3 Car 5000.00 add
4 Game 25.00 add向你的页面增加链接 上面的'add'字段应该是一个链接,用来将商品放到迷你购物篮中。使用$PHP_SELF将这个链接指向它自
已。然后向它增加商品信息。这里是商品1的例子。 <A HREF="<?echo $PHP_SELF;?>?id=1&price=25&basket=Mouse">add</A> 商品的名称能够包含空格,所以将它放在链接的最后。Get方法好象对这个很挑剔。 准备迷你购物篮 为了代码重用,让我们创建一个额外的文件minibasket.inc。我使用.inc扩展名来标识我的包括文件。
使用这个外部文件的原因是,尽管你将使用session变量来传递给购物篮,代码仍然需要有效。这个文件将
包含显示迷你购物篮的代码,也包话增加项目的函数。实现它的最好的地方是将 <?php include ("minibasket.inc"); ?> 命令放在你需要的地方。 minibasket.inc的逻辑 花些时间考虑一下这个。迷你购物篮应该是个什么样子,它需要些什么特性?这里显示的迷你购物篮应
该看上去象这样: # Name Price
1 Mouse 25.00
3 Game 75.00
Total 100.00 你可以很容易的通过使用一个外部样式表格式化这个输出。可是,它不应该太大。这个迷你购物篮是一
个信息,然而它不应该成为你所显示页面的焦点。 这个文件的逻辑非常简单。 检查是否需要增加一个新的项目。
如果true,增加项目
在加入中,它要检查复重的记录,通过更新数量和价格来更新存在的记录。
片段1。检查将要增加的新的项目 这是一个正常的IF语句,用于检查$basket变量的值。 <?phpif ($basket!=""){
//向篮子中加入项目
}?> 片段2。在浏览器中显示篮子 <?phpif ($ses_basket_items>0){
// 如果在篮子中有项目
for ($basket_counter=0;$basket_counter<$ses_basket_items;$basket_counter++){
// 遍历篮子,打印出每一行
// 你当然可以用格表来格式化显示
// 需要通过格式化来显示价格的分值。如果没有格式化,则.00是不会显示出来的
$price=sprintf("%01.2f",$ses_basket_price[$basket_counter]);
$amount=$ses_basket_amount[$basket_counter];
$name=$ses_basket_name[$basket_counter];
echo "$amount $name $price";
echo "<BR> ";
}
} else {
// 在篮子中没有商品
// 设置项目计数为0,且清除所有的变量
// 这是一个清除处理。它防止人们得到旧的数组
$ses_basket_items=0;
unset($ses_basket_name);
unset($ses_basket_amount);
unset($ses_basket_price);
unset($ses_basket_id);
}?> 这段代码不会产生任何结果。项目还没有被填充,篮子总是空的,所以篮子不会被显示。那么让我们向
这个篮子中加些项目吧
$ses_basket_items=1;// 填充4个数组的第0个位置,使用从href链接传过来的值
// 链接是在‘给你的页面增加链接’部分所讲的
$ses_basket_name[0]=$basket;
$ses_basket_amount[0]=1;
$ses_basket_price[0]=$price;
$ses_basket_id[0]=$id;// 在session中注册新的篮子
session_register("ses_basket_items");
session_register("ses_basket_name");
session_register("ses_basket_amount");
session_register("ses_basket_price");
session_register("ses_basket_id");?> 这样将创建一个篮子,将所以的值填在数组第0个位置上,并利用session注册数组。一个篮子诞生了。
片段4。填充篮子 <?php$basket_position_counter=0; //篮子中的位置
$double=0; //双重入口标志设为NO
if ($ses_basket_items>0){
// 检查是否篮子包含的项目中有双重入口
foreach ($ses_basket_name as $basket_item){
// 遍历数组所包含的名字,检查是否与从href所传来的相配匹
if ($basket_item==$basket){
// 如果在篮子中已经有了一个项目,将flag设为1
$double=1;
// 记住项目的位置,将进行更新
$basket_position=$basket_position_counter;
}
$basket_position_counter++; //增加篮子中的实际位置
}
}// 更新篮子
if ($double==1){
// 如果项目在你的篮子中已经存在则更新在$basket_position处理的数量和位置
$oldamount=$ses_basket_amount[$basket_position];
$ses_basket_amount[$basket_position]++;
$amount=$ses_basket_amount[$basket_position];
$oldprice=$ses_basket_price[$basket_position];
//更新价格
$newprice=($oldprice/$oldamount)*$amount;
$ses_basket_price[$basket_position]=$newprice;
}else{
// 如果它不在你的篮子中,则在数组末尾增加新的项目
$ses_basket_name[]=$basket;
$ses_basket_amount[]=1;
$ses_basket_price[]=$price;
$ses_basket_id[]=$id;
$ses_basket_items++;
}?> 太好了,现在你可以填充迷你购物篮并显示它了。 将代码片断组织到一起 让我们将代码组织到一起并且存为minibasket.inc。 <?php// 记住在代码片段1中, 决定是不是要增加?
// 让我们在这里重复它
if ($basket!=""){
// 在这里,项目将要加到篮中。让我们检查一下是否存在一个注册过的篮子
if (session_is_registered("ses_basket_items")){
// 存在一个注册过的篮子,将代码片段4放在这里。
// 它增加项目到注册过的篮子中,检查重复记录,更新它们或在数组的最后增加项目
} else {
// 不存在注册过的篮子,将代码片段3放在这里。它创建一个新的篮子,并且
// 通过session注册它。
}
}
// 剩下的都是代码片段2。如果篮子中有物品时用于显示它们。
// 加到这里。?> 瞧,不错吧。"c'est tout", 法国人会这样说。如果都做好了,你可以保存这个文件为minibasket.inc
并且将其包括到显示商品的PHP页面中。