【问题标题】:MySQLi and PHP sends only single products on the databaseMySQLi 和 PHP 只发送数据库上的单个产品
【发布时间】:2014-11-07 15:07:21
【问题描述】:

我在我的代码中找不到问题所在。它只向数据库发送单个订单。当我在购物车中订购 2 件或更多商品时,它只发送最后一个订单。我不知道如何在我的代码中更改或添加一些语法。

这是我在 checkout.php 中的代码

<?php
session_start();
echo '<h3>Your Order</h3>';
$current_url = base64_encode($url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  if(isset($_SESSION['products'])){
     echo '<ol>';
     echo '<form action="checkout_with_us.php" method="POST">';
     $total = 0;
     $cart_items = 0;

        foreach($_SESSION['products'] as $cart_itm){
           $product_code = $cart_itm['code'];
           $results = $mysqli->query("SELECT product_name,product_desc,price FROM products WHERE product_code='$product_code' LIMIT 1");
             $obj = $results->fetch_object();
                echo '<li>';
                echo 'Price: '.$currency.$obj->price;
                echo '<h4>'.$obj->product_name.'(Code: '.$product_code.')</h4>';
                echo 'Qty: '.$cart_itm['qty'];
                echo '</li>';

                   $subtotal = ($cart_itm['price'] * $cart_itm['qty']);
                     $total = ($total + $subtotal);
                     $cart_items++;
                       echo '<input type="hidden" name="item_name" value="'.$obj->product_name.'">';
                       echo '<input type="hidden" name="item_desc" value="'.$obj->product_desc.'">';
                       echo '<input type="hidden" name="item_qty" value="'.$cart_itm["qty"].'">';
                       echo '<input type="hidden" name="item_code" value="'.$product_code.'">';     
                }
                    echo '<strong>Sub Total: '.$currency.$total.'</strong>';
                    echo '<input type="hidden" name="price" value="'.$total.'">';
                    echo '</ol>';   
                    }

//Here is the information of the customer
echo 'Firstname: <input type="text" name="firstname"><br />';
echo 'Lastname: <input type="text" name="lastname"><br />';
echo 'Email: <input type="text" name="email"><br />';
echo '<input type="submit" value="Send Step">';

echo '</form>';
?>

这是我的 checkout.with_us.php 代码。这段代码是将信息发送到数据库的桥梁。

<?php
session_start();
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];
$order_name = $_POST['item_name'];
$order_code = $_POST['item_code'];
$order_qty = $_POST['item_qty'];
$sub_total = $_POST['price'];

$conn = mysqli_connect('localhost','root','','sampsix')or die('Could not connect');

$query = "INSERT INTO `sampsix`.`orders`(`firstname`,`lastname`,`email`,`OrderName`,`OrderCode`,`OrderQty`,`SubTotal`) VALUES('$firstname','$lastname','$email','$order_name','$order_code','$order_qty','$sub_total')";

mysqli_query($conn,$query);

mysqli_close($conn);

header('Location: checkout.php');
?>

【问题讨论】:

  • 你已经发布了这个stackoverflow.com/q/25821058
  • 是的,先生。我仍然没有答案可以帮助我:(
  • 如果您想在一个$_POST['xxx'] 中包含多个值,则需要将其设置为数组:$_POST['xxx'][]
  • @Razah 先生是什么意思? :)
  • 先生。 S. Pols 刚刚回答了您的问题。这就是我的意思。

标签: php mysql database mysqli insertion


【解决方案1】:

删除您的其他问题,好吗?

问题是您循环遍历$_SESSION 并每次使用相同的name 值。您需要创建一个输入数组。这是一个例子:

<?php
echo '<h3>Your Order</h3>';
$current_url = base64_encode($url='http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
  if(isset($_SESSION['products'])){
     echo '<ol>';
     echo '<form action="checkout_with_us.php" method="POST">';
     $total = 0;
     $cart_items = 0;

        foreach($_SESSION['products'] as $cart_itm){
           $product_code = $cart_itm['code'];
           $results = $mysqli->query("SELECT product_name,product_desc,price FROM products WHERE product_code='$product_code' LIMIT 1");
             $obj = $results->fetch_object();
                echo '<li>';
                echo 'Price: '.$currency.$obj->price;
                echo '<h4>'.$obj->product_name.'(Code: '.$product_code.')</h4>';
                echo 'Qty: '.$cart_itm['qty'];
                echo '</li>';

                   $subtotal = ($cart_itm['price'] * $cart_itm['qty']);
                     $total = ($total + $subtotal);
                     $cart_items++;
                       echo '<input type="hidden" name="product['.$product_code.'][item_name]" value="'.$obj->product_name.'">';
                       echo '<input type="hidden" name="product['.$product_code.'][item_desc]" value="'.$obj->product_desc.'">';
                       echo '<input type="hidden" name="product['.$product_code.'][item_qty]" value="'.$cart_itm["qty"].'">';
                       echo '<input type="hidden" name="product['.$product_code.'][item_code]" value="'.$product_code.'">';     
                }
                    echo '<strong>Sub Total: '.$currency.$total.'</strong>';
                    echo '<input type="hidden" name="product['.$product_code.'][price]" value="'.$total.'">';
                    echo '</ol>';   
                    }

//Here is the information of the customer
echo 'Firstname: <input type="text" name="firstname"><br />';
echo 'Lastname: <input type="text" name="lastname"><br />';
echo 'Email: <input type="text" name="email"><br />';
echo '<input type="submit" value="Send Step">';

echo '</form>';
?>

您可以通过在 product 数组中循环来捕获它:

<?php
$firstname = $_POST['firstname'];
$lastname = $_POST['lastname'];
$email = $_POST['email'];

$conn = mysqli_connect('localhost','root','','sampsix')or die('Could not connect');

foreach($_POST['product'] as $product)
{
    $order_name = $product['item_name'];
    $order_code = $product['item_code'];
    $order_qty = $product['item_qty'];
    $sub_total = $product['price'];

    $query = "INSERT INTO `sampsix`.`orders`(`firstname`,`lastname`,`email`,`OrderName`,`OrderCode`,`OrderQty`,`SubTotal`) VALUES('$firstname','$lastname','$email','$order_name','$order_code','$order_qty','$sub_total')";
    mysqli_query($conn,$query);
}



mysqli_close($conn);

header('Location: checkout.php');
?>

我不知道表 orders 的用途是什么,但在我的示例中,产品将添加到此表中,并具有相同的 firstnamelastname 等。

【讨论】:

  • 哈哈哈感谢上帝!先生完成了!你是一位了不起的老师。多个订单已发送,最后一个订单包含“小计” 您是如何做到的? :D
  • 终于嘿嘿。您的主要问题是您在每个input 使用相同的name 值。因为它们都具有相同的名称,所以只有最后一个值被传递。当您使用[] 括号时,您会创建一个信息数组,您可以在其中存储多行。
  • 啊哈!是的,我看到了我的错误。哈哈只是名字。我要发送的每个对象中都没有数组。啊哈哈哈谢谢你的精彩解释。我还能问一个问题吗。因为我很困惑。将订单发送到我的“order.php”后,如何查看多个同名订单的表信息。我在“order.php”中的代码只能查看单个订单。如果你有时间,你能看看我的代码吗? :)
  • 当然,只需将其发布到您的问题中,如果您当前的问题得到回答,请将其标记为已接受。
  • 是的,先生。哈哈,反正先生。我在哪里可以找到“接受按钮”,对不起先生。我是stackoverflow的新手。 :)
猜你喜欢
  • 2013-02-26
  • 2015-03-19
  • 1970-01-01
  • 2011-11-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-01
相关资源
最近更新 更多