[英]PHP batch update $_POST values
I got a $_POST params as below:我得到一个 $_POST 参数如下:
Array ( [qty-1] => 1 [uniprice-1] => 22.00 [qty-2] => 2 [uniprice-2] => 12.00 )
SQL use to update in db: SQL 用于在 db 中更新:
foreach($_POST as $key => $value) {
$q = "UPDATE `table` SET ";
$q .= "stock=stock + '".$value."', ";
$q .= "price='".$value."' ";
$q .= "WHERE fid='".$fid."' AND vid='".$key."'";
echo $q.'<br />';
}
However its output:然而它的输出:
UPDATE `stock` SET stock=stock + '1', price='1' WHERE fid='9' AND vid='1'
UPDATE `stock` SET stock=stock + '22.00', price='22.00' WHERE fid='9' AND vid='1'
UPDATE `stock` SET stock=stock + '2', price='2' WHERE fid='9' AND vid='2'
UPDATE `stock` SET stock=stock + '12.00', price='12.00' WHERE fid='9' AND vid='2'
what is the proper way to update the query in form like below?以如下形式更新查询的正确方法是什么?
UPDATE `stock` SET stock=stock + '1', price='22.00' WHERE fid='9' AND vid='1'
UPDATE `stock` SET stock=stock + '2', price='12.00' WHERE fid='9' AND vid='2'
$i = 1;
while(isset($_POST['qty-'.$i]) && isset($_POST['uniprice-'.$i])) {
$qty = $_POST['qty-'.$i];
$price = $_POST['uniprice-'.$i];
// query here..
$i++;
}
A better approach would be to send the data in this format:更好的方法是以这种格式发送数据:
Array
(
[0] => Array
(
[qty] => 1
[uniprice] => 22
)
[1] => Array
(
[qty] => 2
[uniprice] => 12
)
)
You can renaming the inputs of your form:您可以重命名表单的输入:
qty1: <input type="text" name="data[0][qty]">
price1: <input type="text" name="data[0][uniprice]">
qty2: <input type="text" name="data[1][qty]">
price2: <input type="text" name="data[1][uniprice]">
So that you can loop it with:这样你就可以循环它:
foreach ($_POST['data'] as $data) {
echo 'qty: ', $data['qty'], "\n";
echo 'uniprice: ', $data['uniprice'], "\n";
}
Try this尝试这个
<?php
// Input
$_POST['qty-1']=1;$_POST['uniprice-1']=22.00;$_POST['qty-2']=2;$_POST['uniprice-2']=12.00;
$x=0;$fid=9;
foreach($_POST as $key => $value) {
$q = "UPDATE `table` SET ";
$key=str_replace("qty-","",$key);
$value2=str_replace("uniprice-","",$key);
$q .= "stock=stock + '".$value2."', ";
if($x%2!=0)
{
$q .= "price='".$value."' ";
$q .= "WHERE fid='".$fid."' AND vid='".$fkey."'";
echo $q.'<br />';
}
$fkey=$key;
$x++;
}
?>
$test = array( "qty-1" => 1, "uniprice-1" => 22.00, "qty-2" => 2, "uniprice-2" => 12.00 );
///Make 2 Array
$odd = array();
$even = array();
$i=0;
foreach( $test as $key => $value ) {
if( $i%2==0) { //Even
$even[] = $value;
}
else {
$odd[] = $value;
}
$i++;
}
//then
$fid = 9;
foreach($odd as $key => $value) {
$q = "UPDATE `table` SET ";
$q .= "stock=stock + '".$even[$key]."', ";
$q .= "price='".$value."' ";
$q .= "WHERE fid='".$fid."' AND vid='".$even[$key]."'";
echo $q.'<br />';
}
It is better to use array like this ;最好像这样使用数组;
$array = Array ( array("qty" => 1, "uniprice" => 22.00) , array("qty" => 2, "uniprice" => 12.00) ) ;
foreach ($array as $arr) {
$q = "UPDATE `table` SET ";
$q .= "stock=stock + '".$arr['qty']."', ";
$q .= "price='".$arr['uniprice']."' ";
$q .= "WHERE fid=9 AND vid='".$arr['qty']."'";
echo $q.'<br />';
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.