使用php在sql表上执行操作

时间:2016-01-27 03:21:41

标签: php html mysql

我正在学习SQL并且我创建了一个表

products,其中包含itempricebasewholesale

我想要实现的是用户输入一个数字(假设用户输入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页面。最后,变量开始从输入类型中获取值,代码工作正常。

2 个答案:

答案 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));
  }