Php 基于1个输入字段自动计算MySQL数据价格
我怎样才能一次更改所有价格而不是逐个更改? 我只想在字段中键入一个数字,每个价格都将根据我的公式计算并更新 所以我有一个数据库,里面有一些价格。 我已经有了一个php页面,在那里我可以一个接一个地编辑价格 因此,名称和价格值正在从我的数据库中加载。 这是PHP文件:Php 基于1个输入字段自动计算MySQL数据价格,php,mysql,Php,Mysql,我怎样才能一次更改所有价格而不是逐个更改? 我只想在字段中键入一个数字,每个价格都将根据我的公式计算并更新 所以我有一个数据库,里面有一些价格。 我已经有了一个php页面,在那里我可以一个接一个地编辑价格 因此,名称和价格值正在从我的数据库中加载。 这是PHP文件: <?php $objConnect = mysql_connect("localhost","***","***") or die("Error Connect to Database"); $objDB = mysql_s
<?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
?>
我希望这能回答你的问题。如果你需要进一步解释,请告诉我
这是正确的答案
*****如果我将整个代码粘贴到代码标签中,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;