Session和mysql_query不会向表中插入数据

时间:2015-10-29 08:42:55

标签: php mysql session

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>

以下是我将数据存储到Session&#39; cart&#39;

的方法
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 个答案:

答案 0 :(得分:-1)

  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中的表可以处理。
  8. 尝试下面的代码,它可能会更好,但设置文件名并设置列名称。有

    <?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>