php - 将购物车和用户数据插入订单系统的 mysql

标签 php mysql sql

你好, 我有一个与此类似的问题,但似乎我又陷入困境了。 我以为我可以正常工作,直到我尝试添加多个产品购物车并将其发送到数据库.

用户数据(姓名、地址等)和 1 个商品购物车数据(产品名称、价格等) ..) 插入没有任何问题。 但是,如果我可以说,当我尝试将数据发送到数据库时,购物车中有 2 个商品,我也会得到 2 行,所以它不存在任何问题,但是两行都是相同的项目,所以看起来相同的id计数两次,但实际上有2个不同的 session 中的 >id

有什么线索我哪里出错了吗?

我正在通过表单发送数据!

这是代码块:

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
if ((isset($_POST["MM_insert"])) && ($_POST["MM_insert"] == "form1")) {

$insertSQL = sprintf("INSERT INTO ordermodul (orgnummer, namn, levadress, faktadress, telefon, email, datum, summa, nmr) VALUES (%s, %s, %s, %s, %s, %s, now(), %s, %s)",
                   GetSQLValueString($_POST['orgnum'], "text"),
                   GetSQLValueString($_POST['namn'], "text"),
                   GetSQLValueString($_POST['levadress'], "text"),
                   GetSQLValueString($_POST['faktadress'], "text"),
                   GetSQLValueString($_POST['telefon'], "text"),
                   GetSQLValueString($_POST['email'], "text"),
                   GetSQLValueString($_POST['summa'], "text"),
                   GetSQLValueString($_POST['nmr'], "text"));

mysql_select_db($database_vesundberg_eu, $vesundberg_eu);
$Result1 = mysql_query($insertSQL, $vesundberg_eu) or die(mysql_error());

$order_id = mysql_insert_id();

if ($order_id) {

$quantity = $each_item['quantity'];
implode ( ',', array_values($each_item));
$line_cost = $price;

foreach ($_SESSION['cart_array'] as $each_item) {
    $item_id = $each_item['item_id'];
    $sql = sprintf("SELECT id, productname, price FROM products WHERE id = %d;", '$item_id'); 
            $result = mysql_query($sql);
            if(mysql_num_rows($result) > 0) {
                list($id, $price) = mysql_fetch_row($result);
                $line_cost = number_format($price * $quantity, 2);                  
            }   
$query = sprintf("INSERT INTO cartorders (id, nmr, name, price, quantity) VALUES (%s, %s, %s, %s, %s)",
    GetSQLValueString("$artnummer", "int"),
    GetSQLValueString("$nmr", "int"),
    GetSQLValueString("$product_name", "text"),
    GetSQLValueString("$line_cost", "int"),
    GetSQLValueString("$quantity", "int"));

mysql_select_db($database_vesundberg_eu, $vesundberg_eu);
$Result1 = mysql_query($query, $vesundberg_eu) or die(mysql_error());
}}

$insertGoTo = "orders.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $insertGoTo));
}

表格如下:

<form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1">
                   <table width="60%" border="0" align="center">
                      <tr align="center">
                        <td align="right">Org. nummer:</td>
                        <td align="left"><input name="orgnum" id="orgnum" type="text" /> *</td>
                      </tr>
                      <tr align="center">
                        <td align="right">Företagsnamn:</td>
                        <td align="left"><input name="namn" type="text" id="namn" /> *</td>
                      </tr>
                      <tr align="center">
                        <td align="right">Lev. adress:</td>
                        <td align="left"><input name="levadress" type="text" id="levadress" /> *</td>
                      </tr>
                      <tr align="center">
                        <td align="right">Fakt. adress:</td>
                        <td align="left"><input name="faktadress" type="text" id="faktadress" /> *</td>
                      </tr>
                      <tr align="center">
                        <td align="right">Telefon:</td>
                        <td align="left"><input name="telefon" type="text" id="telefon" /> *</td>
                      </tr>
                      <tr align="center">
                        <td align="right">E-mail:</td>
                        <td align="left"><input name="email" type="text" id="email" /> *</td>
                      </tr>
                      <tr align="center">
                        <td align="right"></td>
                        <td align="left"><input name="summa" type="hidden" id="summa" value="<?php echo $cartTOTAL; ?>" /></td>
                      </tr>
                      <tr align="center">
                        <td align="right"></td>
                        <td align="left"><input name="prodnum" type="hidden" id="prodnum" value="<?php echo $artnummer; ?>" /></td>
                      </tr>
                      <tr align="center">
                        <td align="right"></td>
                        <td align="left"><input name="prodname" type="hidden" id="prodname" value="<?php echo $product_name; ?>" /></td>
                      </tr>
                      <tr align="center">
                        <td align="right"></td>
                        <td align="left"><input name="price" type="hidden" id="price" value="<?php echo $price; ?>" /></td>
                     </tr>
                     <tr align="center">
                        <td align="right"></td>
                        <td align="left"><input name="quantity" type="hidden" id="quantity" value="<?php echo $each_item['quantity']; ?>" /></td>
                      </tr>
                      <tr align="center">
                        <td align="right"></td>
                        <td align="left"><input name="nmr" type="hidden" id="nmr" value="<?php echo $nmr; ?>" /></td>
                      </tr>
                      <tr align="center">
                        <td align="right">&nbsp;</td>
                        <td align="left"><input name="submit" type="submit" value="Skicka Order" /></td>
                      </tr> 
                    </table>
                    <input type="hidden" name="MM_insert" value="form1" />
</form>

最佳答案

我怀疑您从产品中提取的 ID 在每次传递中都是相同的,因为

sprintf("SELECT id, productname, price FROM products WHERE id = %d;", '$item_id');

应计算为“SELECT id, Productname, Price FROM products WHERE id = 0” 因为“$item_id”计算结果为字符串“$item_id”,它不是数字,而是字符串的号码。 This answer对字符串中的变量求值有很好的分解

将其更改为:

$sql = sprintf("SELECT id, productname, price FROM products WHERE id = %d;", $item_id);

另一个问题是

list($id, $price) = mysql_fetch_row($result);

$results 返回的行由 ("id","product_name", "price") 组成,所以我猜测 $price 实际上包含产品名称,而 price 则无处可去。

关于php - 将购物车和用户数据插入订单系统的 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16444368/

相关文章:

php - MySQL跨表删除

php - symfony 1.4.15 错误与 php 7

php - 在多个文件上传(PHP/Mysql)中,图像存储在单列中。想要将每个图像存储在具有相同 id 的单行中

sql - 获取 Postgres 数据库中每个表的行数

sql - _TABLE_SUFFIX 在多个连接上

java - 如何使用java将三个表连接成一个表以及set方法值应该写在哪里

php - 如果 upload_tmp_dir 没有值(value)...我的临时文件去哪里了? -- 实验

php - 在 WooCommerce 3 中重新排序结帐字段

php - 查询问题,var_dump 说 bool(false)

带有 Zend 框架的 PHPUnit