使用 PHP 对 SQL 表执行操作


performing operations on sql table using php

我正在学习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['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));
  }