我正在学习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 [&#39; inc]和Update语句,但我无法做到这一点。另外我还在学习mysql到mysqli的过渡形式,所以也许语法中也有一些错误。
执行上述代码时会发生什么:没有任何反应。该表不会使用新值更新。它保持不变。没有出现错误
注意:欢迎各种批评,因为这是我的学习观点。但也请给出downvotes的理由,以便我可以提出更好的问题
根据建议我减少了代码以删除不需要的代码行。这是新代码
<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页面。最后,变量开始从输入类型中获取值,代码工作正常。
答案 0 :(得分:1)
有几个错误,因为它不起作用。可能的主要原因是你尝试从$ 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))";
但是,正如我之前提到的,你不需要整个循环。实际上,如果它可以工作,它会多次更新整个表(所有行)(与该表中的行数相同)。您只需要一个更新查询。没有获取,没有循环,只有一个exec。
P.S。很抱歉没有在评论中继续讨论而不是发表回答,但我无法发表评论,因为它需要50个声望,而且我有21个。
答案 1 :(得分:0)
这是你的解决方案
当您选择记录
时$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));
}