【发布时间】:2015-10-29 08:42:54
【问题描述】:
Mysql_query 在下订单时会向“orders”表插入数据,但不会向“order_detail”表插入数据。
它应该从 Session 'cart' 中获取数据,但似乎失败了。
为了简单起见,我去掉了一些 html 代码,只是留下了按钮,但应该没关系。
<?php
require_once('connect_to_db.php');
include("includes/functions.php");
session_start();
if ($_REQUEST['command'] == 'update') {
$customerid = mysql_insert_id();
$date = date('Y-m-d');
$result = mysql_query("insert into orders values('', '$date', '$customerid')");
$orderid = mysql_insert_id();
$max = count($_SESSION['cart']);
for ($i=0; $i<$max; $i++) {
$pid = $_SESSION['cart'][$i]['productid'];
$q = $_SESSION['cart'][$i]['qty'];
$price = get_price($pid);
mysql_query("insert into order_detail values ($orderid,$pid,$q,$price)");
}
die('Thank You! your order has been placed!');
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script language="javascript">
function validate(){
var f=document.form1;
f.command.value='update';
f.submit();
}
</script>
</head>
<body>
<form name="form1" onsubmit="return validate()">
<input type="hidden" name="command" />
<input type="submit" value="Place Order" />
</form>
</body>
</html>
这是我将数据存储到会话“购物车”的方式
function addtocart($pid,$q){
if($pid<1 or $q<1) return;
if(is_array($_SESSION['cart'])){
if(product_exists($pid)) return;
$max=count($_SESSION['cart']);
$_SESSION['cart'][$max]['productid']=$pid;
$_SESSION['cart'][$max]['qty']=$q;
}
else{
$_SESSION['cart']=array();
$_SESSION['cart'][0]['productid']=$pid;
$_SESSION['cart'][0]['qty']=$q;
}
}
【问题讨论】:
-
会话中的值是否正确存储??
-
a) 您的脚本中没有错误处理。
mysql_connect、mysql_select_db和mysql_query可能会失败,在这种情况下它们会返回 FALSE。在这种情况下,mysql_error()可以告诉您更多关于实际错误的信息。 b)您可能想检查 $max 实际上是什么,例如通过将其打印在您的模具中(消息)。 c) mysql_* 扩展在即将发布的 php 版本 7 中已弃用并删除,最好使用pick another API 连接到您的 MySQL 服务器 -
请注意,您使用的旧 mysql_* 扩展在 PHP 5.5 版(当前版本)中已弃用,并且正在从版本 7(下一个版本)中删除。您需要迁移到使用 mysqli_* 扩展或 PDO
-
我添加了用于将数据存储到会话的代码,Niranjan。我的数据库连接运行良好,Volker,$max 似乎总是打印值 1。
-
在查询中添加引号:
insert into order_detail values ('$orderid','$pid','$q','$price');BTW:您应该考虑控制查询中可能出现的错误:if (!mysql_query(...)) die(mysql_error())或类似的东西。