自动根据1个输入字段计算MySQL数据价格

时间:2015-05-23 23:38:18

标签: php mysql

如何更改所有价格1次而不是逐个更改? 我想在字段中输入一个数字,每个价格将根据我的公式计算并更新。

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

http://i.stack.imgur.com/q0fWl.png

因此从我的数据库加载名称和价格值。 这是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);
?>

如果我按下编辑,它将转到另一个php页面,我可以在其中更改价格值并保存:

http://i.stack.imgur.com/YMgUh.png

但我只想在输入字段中键入1个价格,该值将由*或 - 自动计算,并显示为结果。 因此,如果我输入总价,请说:2000然后我希望每个价格自动更改,然后我可以按更新。

这样我就可以给每个名字一个公式:2000-500 =显示这个值 而且我只在总字段中添加了一些数字,所有价格都将自动计算,我不必一个一个地更改所有价格。

像这样:http://i.stack.imgur.com/yM40T.png enter image description here

编辑PHP页面:

<html>
<head>

</head>
<body>
<form action="save.php?id=<?php echo $_GET["id"];?>" name="frmEdit" method="post">
<?php
$objConnect = mysql_connect("localhost","*","*") or die("Error Connect to Database");
$objDB = mysql_select_db("*");
$strSQL = "SELECT * FROM orders WHERE id = '".$_GET["id"]."' ";
$objQuery = mysql_query($strSQL);
$objResult = mysql_fetch_array($objQuery);
if(!$objResult)
{
    echo "Not found CustomerID=".$_GET["id"];
}
else
{
?>
<table width="540" border="1">
  <tr>
    <th width="161"> <div align="center">CustomerID </div></th>
    <th width="203"> <div align="center">Name</div></th>
    <th width="154"> <div align="center">Price</div></th>
    </tr>
  <tr>
    <td><div align="center"><input type="text" name="txtCustomerID" size="5" value="<?php echo $objResult["id"];?>"></div></td>
    <td><input type="text" name="txtName" size="20" value="<?php echo $objResult["gehalte"];?>"></td>
    <td><input type="text" name="txtEmail" size="20" value="<?php echo $objResult["prijs"];?>"></td>
    </tr>
  </table>
  <input type="submit" name="submit" value="submit">
  <?php
  }
  mysql_close($objConnect);
  ?>
</form>
</body>
</html>

并保存PHP:

$strSQL = "UPDATE orders SET ";
$strSQL .="id = '".$_POST["txtCustomerID"]."' ";
$strSQL .=",gehalte = '".$_POST["txtName"]."' ";
$strSQL .=",prijs = '".$_POST["txtEmail"]."' ";

$strSQL .="WHERE id = '".$_GET["id"]."' ";
$objQuery = mysql_query($strSQL);
if($objQuery)
{
    echo "Save Done.";
    header('Location: edit.php');
}
else
{
    echo "Error Save [".$strSQL."]";
}
mysql_close($objConnect);
?>

3 个答案:

答案 0 :(得分:1)

  

这是正确答案

  1. 创建一个新的.php文件,并将其放在那里:

    $objConnect = mysql_connect("localhost","***","***") or die("Error Connect to Database");
    $objDB = mysql_select_db("***");
    $strSQL = "SELECT id FROM orders";
    $objQuery = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
    
    $value = isset ($_POST['inputField']) ? $_POST['inputField'] : '';
    
    if (!empty($value)) {
        while ($row = mysql_fetch_array($objQuery)) {
            $price = calculate_price ($row['id'], $value);
            $strSQL = "UPDATE orders SET prijs =". $price. " WHERE id = ".$row['id']. "";
            $result = mysql_query($strSQL) or die ("Error Query [".$strSQL."]");
        }
    
        echo "<script>alert('Update Successful!');</script>";
    }
    

    function calculate_price($ id,$ value){     $ price = 0;     switch($ id){         //这里为id 0计算         案例0:             $ price = $ value / 10;             打破;         //这里为id 1计算         情况1:             $ price = $ value / 10;             打破;         //这里为id 2计算         案例2:             $ price = $ value * 2;             打破;         //在这里计算id 3         案例3:             $ price = $ value + 4;             打破;         默认值:             打破;     }     返回$ price; }

        $(document).ready(function(){         $( '#键')。点击(函数(){             var value = $('#inputField')。val();
            if (value === '') {
                alert("Please input a value");  
                return false;
            }
        })
    })
    

  2. *****如果我将整个代码粘贴到代码标记中,那么Stackoverflow会有点奇怪**

答案 1 :(得分:0)

好的,我建议使用多个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
?>

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

答案 2 :(得分:0)

您可以在一个UPDATE中执行此操作。

以下是我对公式的假设:

  • 他们可以用空格标记
  • 他们有三个代币,例如X(空间)运算符(空间)Y
  • 他们总是将运营商作为中间令牌

以下是我用来模仿您数据的设置(显然您不需要运行此部分):

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声明,向您展示UPDATE将要做的事情:

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小提琴:http://sqlfiddle.com/#!9/8816c/1

列part1,part2和part3说明了如何对公式进行标记化。例如,如果公式为&#34; n / 10&#34;,则第一个标记为&#39; n&#39;,第二个标记为&#39; /&#39;第三个标记是&#39; 10&#39;。 在CASE语句中,将评估第二个标记(运算符),并根据该标记执行:part1(operator)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:http://sqlfiddle.com/#!9/2a962/1

请注意,我没有WHERE条款,因为我假设您正在显示和更新所有记录。如果不是这种情况,您需要提供适当的WHERE子句来限制更新的记录。

另一个重要的注意事项。 您应该使用预准备语句和参数化查询来阻止SQL注入。在上面的UPDATE语句中,2000是表单帖子中的值。您应该使用参数,而不是使用$_POST["theFormField"]。有一个很好的答案证明如何在这里做: How can I prevent SQL injection in PHP?