【发布时间】:2020-03-20 15:01:25
【问题描述】:
背景:
我有一个关于各种产品的数据库表。此数据库表称为产品。列设置为id | group_id | model | description | price |。
id = the product id.
group_id = identifies the group that this product belongs too.
model = product model
description = Description
price = Price
从这个表中,我根据表product 的group_id 生成一个动态表。
<table>
<tr>
<th>Model</th>
<th>Description</th>
<th>Price</th>
<th>QTY</th>
</tr>
<?php
$conn = mysqli_connect("localhost", "root", "root", "test");
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql ="SELECT * FROM product WHERE group_id = 2";
$result = $conn->query($sql);
while($row = $result->fetch_assoc()) :
?>
<tr>
<td><?php echo $row['model']; ?></td>
<td><?php echo $row['description']; ?></td>
<td>R <?php echo $row['price']; ?></td>
<td><input type="number" name = "<?php echo $row['id']?>" value = 0></td>
</tr>
<?php endwhile; ?>
</table>
<div class="input-group">
<button type="submit" class="btn" name="save">Save and Return</button>
</div>
</form>
这很好用。生成此表后,它允许用户编辑属于该group id 的每个产品的quantity,使用POST 提交后,信息将发送到config_824.php
请参阅下面的代码以获取此文件。
<?php
session_start();
include ('customer_details_config.php');
$quote_id = $_SESSION['quote_id'];
$salesman_id = $_SESSION['salesman_id'];
$db = mysqli_connect('localhost', 'root', 'root', 'test');
if (isset($_POST['save_pan_han'])){
unset($_POST['save_pan_han']);
foreach($_POST as $key => $value):
$test_query = "SELECT * FROM quote_items WHERE quote_id = $quote_id AND prod_id = $key AND rep_id = $salesman_id";
$result = mysqli_query($db, $test_query);
$item = mysqli_fetch_assoc($result) or die (mysqli_error($db));
if($item['quote_id'] == $quote_id &&
$item['prod_id'] == $key &&
$item['rep_id'] == $salesman_id){
$update_query = "UPDATE quote_items SET
qty = $value
WHERE
quote_id = $quote_id
AND prod_id = $key
AND rep_id = $salesman_id
";
mysqli_query($db,$update_query) or die (mysqli_error($db));
}else{
$query = "INSERT INTO quote_items (quote_id, prod_id, rep_id, qty) VALUES ($quote_id, $key, $salesman_id, $value)" ;
mysqli_query($db,$query) or die (mysqli_error($db));
}
endforeach;
}
?>
$quote_id 设置为$_SESSION['quote_id'],$salesman_id 在用户登录时设置为$_SESSION['salesman_id']。
quote items 表有名为 id、quote_id、prod_id、rep_id、qty 的列
CREATE TABLE `project`.`quote_items` ( `id` INT(10) NOT NULL AUTO_INCREMENT , `quote_id` INT(10) NOT NULL , `prod_id` INT(10) NOT NULL , `rep_id` INT(10) NOT NULL , `qty` INT(10) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;
根据上面的代码,我正在尝试将数据插入到名为 quote_items 的数据库表中,如果我将测试数据插入到数据库中,UPDATE 查询运行良好。
问题:
问题是,如果它检查并且该行不在数据库中,则INSERT 查询不起作用。尽管error showing = TRUE,我也没有看到任何错误。
我将使用以下示例:
我在数据库中有六行测试数据。动态表允许设置 8 个值并将其发送到数据库。所以说前两个值已经在数据库中并且符合UPDATE 查询。值 3 和 4 尚未插入,将属于 INSERT 查询。值 5、6、7 和 8 再次属于 Update 查询。
如果我运行代码。只有第 1 行和第 2 行会被更新。不会插入第 3 行和第 4 行,也不会更新第 5、6、7、8 行。
我尝试过的:
* using mysqli_autocommit($db,FALSE);
复制查询并通过phpMyAdmin 中的SQL 插入数据库,如果我从查询中删除变量,它在INSERT 上工作正常。
正如您在上面的代码中看到的,当我回显包含表name 的数组时,我注意到我有一个unset($var)。这是一个字符串。如果我尝试插入一个字符串,这显然会导致问题,我认为这会解决问题。
遗憾的是,事实并非如此。
通过删除 if 和 elseif 并仅使用下面评论中推荐的 insert 进行测试:
<?php
include ('customer_details_config.php');
$quote_id = $_SESSION['quote_id'];
$salesman_id = $_SESSION['salesman_id'];
$db = mysqli_connect('localhost', 'root', 'root', 'test');
if (isset($_POST['save_pan_han'])):
foreach($_POST as $key => $value):
$test_query = "INSERT INTO quote_items (quote_id, prod_id, rep_id, qty) VALUES ($quote_id, $key, $salesman_id, $value)";
$result = mysqli_query($db, $test_query) or die (mysqli_error($db));
/*
$item = mysqli_fetch_assoc($result) ;
if ($item['quote_id'] == $quote_id &&
$item['prod_id'] == $key &&
$item['rep_id'] == $salesman_id
){
$update_query = "UPDATE quote_items SET
qty = $value
WHERE
quote_id = $quote_id
AND prod_id = $key
AND rep_id = $salesman_id
";
mysqli_query($db,$update_query) or die (mysqli_error($db));
}else{
$query = "INSERT INTO quote_items (quote_id, prod_id, rep_id, qty) VALUES ($quote_id, $key, $salesman_id, $value)" ;
mysqli_query($db,$query) or die (mysqli_error($db));
}
*/
endforeach;
endif;
?>
【问题讨论】: