如何更改所有价格1次而不是逐个更改? 我想在字段中输入一个数字,每个价格将根据我的公式计算并更新。
所以我有一个数据库,在那里,有一些价格。 我已经有了一个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);
?>
如果我按下编辑,它将转到另一个php页面,我可以在其中更改价格值并保存:
但我只想在输入字段中键入1个价格,该值将由*或 - 自动计算,并显示为结果。 因此,如果我输入总价,请说:2000然后我希望每个价格自动更改,然后我可以按更新。
这样我就可以给每个名字一个公式:2000-500 =显示这个值 而且我只在总字段中添加了一些数字,所有价格都将自动计算,我不必一个一个地更改所有价格。
像这样:http://i.stack.imgur.com/yM40T.png
编辑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);
?>
答案 0 :(得分: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;
}
})
})
*****如果我将整个代码粘贴到代码标记中,那么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
中执行此操作。
以下是我对公式的假设:
以下是我用来模仿您数据的设置(显然您不需要运行此部分):
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?