我正在学习sql,我创建了一个表
products
具有列item
、price
、base
、wholesale
我试图实现的是让用户输入一个数字(假设用户输入 15)。然后这意味着他们希望将所有 3 列(价格、基础和批发)的价格提高 15%。
这是我的输入和提交按钮
<html>
<head><title>Product table</title></head>
<body>
<form>
Enter the percentage increment:
<input type="number" name="inc">
<input type="submit" value="Increment" id="Increment" name="Increment">
<?php
if($_REQUEST['Increment']=='Increment') {
$conn = mysqli_connect("localhost","test","pwd","db")or die("Error " . mysqli_error($conn));
$sql="SELECT 'price' from products";
$result = $conn->query($sql) or die("Error in the query..." .mysqli_error($conn));
// $count=mysqli_num_rows($result);
$inc = $_REQUEST['inc'];
$incmod = $inc/100;
while($row = mysqli_fetch_array($result)){
$sql1="update products set price = ($row['price']-($row['price']*$incmod))";
$conn->query($sql1) or die("Error in the query..." .mysqli_error($conn));
}
}
?>
</form>
</body>
</html>
这是我试图做的,但没有奏效。有什么办法可以解决这个问题吗?我知道有一些明显的错误,例如 $_REQUEST['inc],以及更新语句,但我无法正确完成。此外,我仍在学习从mysql到mysqli的过渡,因此语法中也可能存在一些错误。
当我执行上面的代码时会发生什么:什么也没发生。该表不会使用新值进行更新。它保持原样。未显示任何错误
注意:欢迎各种批评,因为这是我的学习点。但也请给出反对票的理由,以便我可以提出更好的问题
根据建议,我减少了代码以删除不需要的代码行。这是新代码
<html>
<body>
<form>
<br/>
Enter the percentage increment:
<input type="number" name="inc" id="inc" >
<input type="submit" value="Increment" id="Increment" name="Increment">
<br/>
<?php
if(isset($_REQUEST['Increment'])) {
$inc = $_REQUEST['inc'];
$incmod = $inc/100;
echo "true";
$mysqli = new mysqli("localhost","test","pwd","db")or die("Error in the query..." .mysqli_error($conn));
$mysqli->query("UPDATE products SET price=price+(price*$incmod), baseprice=baseprice+(baseprice*$incmod), wholesale=wholesale+(36months*$incmod)");
$mysqli->close();
}
?>
</form>
</body>
</html>
感谢您的所有输入。不知何故,$incmod没有打印任何东西。我尝试了这里建议的一些事情,并创建了一个新的 php 页面。最后,变量开始从输入类型中获取值,代码工作正常。
有几个错误,因此它不起作用。主要的可能是您尝试从$result中获取数组,而您从未设置过此$result。
除此之外,您在这里根本不需要选择查询。您可以在单个更新查询中一次提高/降低所有价格:
$sql = "UPDATE products SET price=price+(price*$incmod), base=base+(base*$incmod), wholesale=wholesale+(wholesale*$incmod)";
$conn->query($sql) or die("Error in the query..." .mysqli_error($conn));
另外,我建议通过变量的存在而不是其值来测试表单提交:
if(isset($_REQUEST['Increment'])){ ...
更新:您没有输出,因为存在致命的语法错误,并且您的 PHP 环境可能设置为不显示错误。错误位于此行:
$sql1="update products set price = ($row['price']-($row['price']*$incmod))";
无需对双引号字符串内的数组键使用单引号。该行可以是:
$sql1="update products set price = ($row[price]-$row[price]*$incmod))";
但是,正如我之前提到的,这里不需要整个循环。实际上,如果它有效,它将多次更新整个表(所有行)(与此表中的行数相同)。您只需要一个更新查询。没有获取,没有循环,只有一个执行。
附言很抱歉没有在评论中继续您的讨论而不是发布答案,但我不能发表评论,因为它需要 50 个声誉,而我有 21 个。
这是你的解决方案
当您选择记录时
$sql="SELECT price from products";
删除单引号
你的计算是这样写的
while($row = mysqli_fetch_array($result)){
$re=$row['price'] - ($row['price'] * $incmod);
echo $re."<bR>";
$sql1="update products set price =".$re;
$conn->query($sql1) or die("Error in the query..." .mysqli_error($conn));
}