繁体   English   中英

会话和mysql_query不在表中插入数据

[英]Session and mysql_query doesn't insert data to table

下订单时,Mysql_query将数据插入“ orders”表中,但不会将数据插入“ order_detail”表中。

它应该从会话“购物车”中获取数据,但是似乎失败了。

为了简单起见,我带走了一些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;
        }
    }
  1. 在HTML中,每个表单都应具有方法(“ GET”或“ POST”)或操作(文件),以防您使用相同的文件(在这种情况下),只需将文件名放在此处即可。
  2. 在这种情况下,在PHP中,您不应该使用请求,而应该使用post或get,因为请求都可以处理,使用post或get可能会更快一些。
  3. 您可以在不使用javascript的情况下优化html文件,而无需使用此javascript。
  4. 您应该避免使用mysql_query代替PDO(数据对象)。
  5. 我猜想orderid和productid是相同的,您应该只使用一个。
  6. 您应该在第二个查询中添加“”。
  7. 您应该将表中的列命名为:“ INSERT INTO table_name(column1,column2,column3,...)VALUES(value1,value2,value3,...)”,检查添加的值是否不超过您的值mysqlDb中的表可以处理。

尝试下面的代码,它可能会更好,但是可以设置文件名并设置列名。 那里

<?php
require_once('connect_to_db.php');
include("includes/functions.php");
session_start();

if (isset($_POST['update'])) {
    $customerid = mysql_insert_id();
    $date = date('Y-m-d');
    $result = mysql_query("INSERT INTO orders (column1,column2,column3) 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 (column1,column2,column3,column4) VALUES('$orderid','$pid','$q','$price')");
    }
    die('Thank You! your order has been placed!');
}
?>

<html xmlns="http://www.w3.org/1999/xhtml">
 <head>
 </head>
 <body>
  <form name="form1" method="POST" action="<?php echo $_SERVER['SCRIPT_NAME']; ?>">
   <input type="submit" name="update" value="Place Order" />
  </form>
 </body>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM