Php 基于1个输入字段自动计算MySQL数据价格

Php 基于1个输入字段自动计算MySQL数据价格,php,mysql,Php,Mysql,我怎样才能一次更改所有价格而不是逐个更改? 我只想在字段中键入一个数字,每个价格都将根据我的公式计算并更新 所以我有一个数据库,里面有一些价格。 我已经有了一个php页面,在那里我可以一个接一个地编辑价格 因此,名称和价格值正在从我的数据库中加载。 这是PHP文件: <?php $objConnect = mysql_connect("localhost","***","***") or die("Error Connect to Database"); $objDB = mysql_s

我怎样才能一次更改所有价格而不是逐个更改? 我只想在字段中键入一个数字,每个价格都将根据我的公式计算并更新

所以我有一个数据库,里面有一些价格。 我已经有了一个php页面,在那里我可以一个接一个地编辑价格

因此,名称和价格值正在从我的数据库中加载。 这是PHP文件:

<?php
$objConnect = mysql_connect("localhost","***","***") or die("Error Connect to Database");
$objDB = mysql_select_db("***");
$strSQL = "SELECT * FROM orders";
$objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
?>
<table width="562" border="1">
  <tr>
    <th width="201"> <div align="center">Name</div></th>
    <th width="213"> <div align="center">Price</div></th>
    <th width="126"> <div align="center">Edit </div></th>
  </tr>
<?php
while($objResult = mysql_fetch_array($objQuery))
{
?>
  <tr>
    <td><?php echo $objResult["gehalte"];?></td>
    <td><?php echo $objResult["prijs"];?></td>
    <td align="center"><a href="prijsedit.php?id=<?php echo $objResult["id"];?>">Edit</a></td>
  </tr>
<?php
}
?>
</table>
<p>Total price:
  <label for="textfield">:</label>
  <input type="text" name="textfield" id="textfield"> 
  <a href="#">Update</a>
</p>


<?php
mysql_close($objConnect);
?>

好的,我建议使用多个SQL语句

<?php
//declare update value to variable x 
//SQL Statement 1: select first value from database with ID2
//do math for first value using x and set it to new variable y
//SQL Statement 2: Update database with new value y for ID1
//Do the above for each value
?>

我希望这能回答你的问题。如果你需要进一步解释,请告诉我

这是正确的答案

  • 创建一个新的.php文件,并将其放入其中:


  • *****如果我将整个代码粘贴到代码标签中,Stackoverflow会有点奇怪**

    您可以在一次
    更新中完成此操作

    以下是我对公式的假设:

    • 它们可以用空格表示
    • 它们有三个标记,例如X(空格)操作符(空格)Y
    • 他们总是将操作符作为中间标记
    下面是我用来模拟您的数据的设置(显然您不需要运行此部分):

    下面是一条
    SELECT
    语句,向您展示
    更新将要执行的操作:

    SELECT id
    , gehalte
    , formula
    , prijs AS prijs_original
    , SUBSTRING_INDEX(formula, ' ', 1) AS part1
    , SUBSTRING_INDEX(SUBSTRING_INDEX(formula, ' ', 2),' ',-1) AS part2
    , SUBSTRING_INDEX(SUBSTRING_INDEX(formula,' ',-1),' ',1) AS part3
    , CASE SUBSTRING_INDEX(SUBSTRING_INDEX(formula, ' ', 2),' ',-1) 
      WHEN '+' THEN
        SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) + SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
      WHEN '-' THEN
        SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) - SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
      WHEN '/' THEN
        SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) / SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
      WHEN '*' THEN
        SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) * SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
      END AS prijs_calculated
    FROM orders;
    
    结果:

    id  gehalte     formula  prijs  part1   part2   part3   prijs_calculated
    1   8karaat     n / 10   80     n       /       10      200
    2   14karaat    n - 500  150    n       -       500     1500
    3   18 karaat   n * 2    200    n       *       2       4000
    
    SQL Fiddle:

    第1部分、第2部分和第3部分列说明了公式是如何标记的。例如,如果公式为“n/10”,则第一个标记为“n”,第二个标记为“/”,第三个标记为“10”。 在
    CASE
    语句中,对第二个标记(运算符)求值,并在此基础上执行数学:part1(运算符)part3。 如果你愿意的话,你可以添加模运算符作为另一种情况,但我认为它不太可能在你的公式中使用

    因此,
    UPDATE
    语句如下所示:

    UPDATE orders 
    SET prijs = CASE SUBSTRING_INDEX(SUBSTRING_INDEX(formula, ' ', 2),' ',-1) 
          WHEN '+' THEN
            SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) + SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
          WHEN '-' THEN
            SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) - SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
          WHEN '/' THEN
            SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) / SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
          WHEN '*' THEN
            SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) * SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
          END;
    
    SQLFiddle:

    注意,我没有
    WHERE
    子句,因为我假设您正在显示和更新所有记录。如果不是这样,则需要提供相应的
    WHERE
    子句来限制更新的记录

    还有一点很重要您确实应该使用准备好的语句和参数化查询来防止SQL注入。在上面的
    UPDATE
    语句中,2000是表单帖子中的值。您应该使用参数,而不是使用
    $\u POST[“theFormField”]
    。这里有一个很好的答案来演示如何做到这一点:

    它必须是这样的:只需要使用看起来像一张桌子的Javascript即可。@jewelhuq谢谢,我已经在想。。在哪里可以找到我想要的演示或示例?我搜索了3天,但没有结果:(签出:或在google中尝试更改Chane文本框的值。)
            if (value === '') {
                alert("Please input a value");  
                return false;
            }
        })
    })
    
    CREATE TABLE orders (
      id numeric,
      gehalte varchar(20),
      formula varchar(20),
      prijs numeric
    );
    
    INSERT INTO orders VALUES (1, '8karaat', 'n / 10', 80);
    INSERT INTO orders VALUES (2, '14karaat', 'n - 500', 150);
    INSERT INTO orders VALUES (3, '18 karaat', 'n * 2', 200);
    
    SELECT id
    , gehalte
    , formula
    , prijs AS prijs_original
    , SUBSTRING_INDEX(formula, ' ', 1) AS part1
    , SUBSTRING_INDEX(SUBSTRING_INDEX(formula, ' ', 2),' ',-1) AS part2
    , SUBSTRING_INDEX(SUBSTRING_INDEX(formula,' ',-1),' ',1) AS part3
    , CASE SUBSTRING_INDEX(SUBSTRING_INDEX(formula, ' ', 2),' ',-1) 
      WHEN '+' THEN
        SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) + SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
      WHEN '-' THEN
        SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) - SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
      WHEN '/' THEN
        SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) / SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
      WHEN '*' THEN
        SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) * SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
      END AS prijs_calculated
    FROM orders;
    
    id  gehalte     formula  prijs  part1   part2   part3   prijs_calculated
    1   8karaat     n / 10   80     n       /       10      200
    2   14karaat    n - 500  150    n       -       500     1500
    3   18 karaat   n * 2    200    n       *       2       4000
    
    UPDATE orders 
    SET prijs = CASE SUBSTRING_INDEX(SUBSTRING_INDEX(formula, ' ', 2),' ',-1) 
          WHEN '+' THEN
            SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) + SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
          WHEN '-' THEN
            SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) - SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
          WHEN '/' THEN
            SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) / SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
          WHEN '*' THEN
            SUBSTRING_INDEX(REPLACE(formula,'n',2000), ' ', 1) * SUBSTRING_INDEX(SUBSTRING_INDEX(REPLACE(formula,'n',2000),' ',-1),' ',1)
          END;