对于我的代码,当我选中该复选框时,它将从数据库中检索日期和价格,并进行计算以获得总价。
但是它将更新所有具有相同值的行。
我试图选择3复选框,然后var_dump总价,结果是正确的。
但是我想更新到数据库,它用相同的值更新了所有行。
控制器:
$PledgeCheckbox = ($this->input->post('batch_pledge[]') ? '1' : '0');
//$Pledge_No = $this->input->post('batch_pledge[]'); //return value of pledge_id
if($PledgeCheckbox == '1'){
$Pledge_No = $this->input->post('batch_pledge[]'); //return value of pledge_id
//take the stg_fee_per_mth from database and calculate $Total_Stg_Fee
$Pledge = $this->pledge->GetPledgeStgFee($Pledge_No);
foreach($Pledge as $row){
$Stg_fee_per_mth = $row->stg_fee_per_mth;
$Pledge_date = $row->pledge_date;
$DATE_NOW = strtotime($Cur_date);
$DATE_PREV = strtotime($Pledge_date);
$Year1 = date('y', $DATE_NOW);
$Year2 = date('y', $DATE_PREV);
$Month_Now = date('m', $DATE_NOW);
$Month_Prev = date('m', $DATE_PREV);
$Month_diff = (($Year1 - $Year2)*12)+($Month_Now - $Month_Prev);
if($Month_diff !== 0){
$Total_Stg_Fee = $Stg_fee_per_mth * $Month_diff;
//update $Total_Stg_fee in database
$this->pledge->UpdatePledgeTotalStgFee($Total_Stg_Fee,$Month_diff);
//var_dump($Total_Stg_Fee);
}else{
//if $Month_diff == 0, $Stg_fee_per_mth must multiple with 1, if not $Total_stg_Fee will become 0
$Month_diff = 1;
$Total_Stg_Fee = $Stg_fee_per_mth * 1;
//update $Total_Stg_fee in database
$this->pledge->UpdatePledgeTotalStgFee($Total_Stg_Fee,$Month_diff);
//var_dump($Total_Stg_Fee);
}
}
$data['pledge'] = $this->pledge->FetchPledge2Renew($Pledge_No);
$this->load->view('auth/header',$data);
$this->load->view('pledge/batch_renew_pledge',$data);
$this->load->view('pledge/footer',$data);
}
型号:
public function UpdatePledgeTotalStgFee($Total_Stg_Fee,$Month_diff){
$post = $this->input->post();
//$Month_diff = $post;
//$Total_Stg_Fee = $post;
foreach($post['batch_pledge'] as $k => $value){
$TotalStgFee[] = array(
'pledge_id' => $value,
'no_of_mth' => $Month_diff,
'total_stg_fee' => $Total_Stg_Fee
);
}
$this->db->update_batch('pledge',$TotalStgFee,'pledge_id'); //('table','array','condition')
}
var_dump($ TotalStgFee)的输出
C:\wamp64\www\kde\store\application\models\Pledge_model.php:683:
array (size=2)
0 =>
array (size=3)
'pledge_id' => string '27' (length=2)
'no_of_mth' => int 1
'total_stg_fee' => float 20
1 =>
array (size=3)
'pledge_id' => string '21' (length=2)
'no_of_mth' => int 1
'total_stg_fee' => float 20
C:\wamp64\www\kde\store\application\models\Pledge_model.php:683:
array (size=2)
0 =>
array (size=3)
'pledge_id' => string '27' (length=2)
'no_of_mth' => int 36
'total_stg_fee' => float 900
1 =>
array (size=3)
'pledge_id' => string '21' (length=2)
'no_of_mth' => int 36
'total_stg_fee' => float 900
答案 0 :(得分:0)
要迭代发布的复选框输入,最好使用foreach
而不是for
循环,因为$post['pledge_id']
数组索引并不总是顺序的。我已将您的代码更改为仅在foreach
循环之后才调用update方法:
控制器:
$PledgeCheckbox = ($this->input->post('batch_pledge[]') ? '1' : '0');
//$Pledge_No = $this->input->post('batch_pledge[]'); //return value of pledge_id
if($PledgeCheckbox == '1'){
$Pledge_No = $this->input->post('batch_pledge[]'); //return value of pledge_id
//take the stg_fee_per_mth from database and calculate $Total_Stg_Fee
$Pledge = $this->pledge->GetPledgeStgFee($Pledge_No);
if (!empty($Pledge)) {
$Total_Stg_Fee = [];
$Month_diff = [];
foreach($Pledge as $k => $row){
$Stg_fee_per_mth = $row->stg_fee_per_mth;
$Pledge_date = $row->pledge_date;
$DATE_NOW = strtotime($Cur_date);
$DATE_PREV = strtotime($Pledge_date);
$Year1 = date('y', $DATE_NOW);
$Year2 = date('y', $DATE_PREV);
$Month_Now = date('m', $DATE_NOW);
$Month_Prev = date('m', $DATE_PREV);
$Month_diff[$k] = (($Year1 - $Year2)*12)+($Month_Now - $Month_Prev);
if($Month_diff[$k] !== 0){
$Total_Stg_Fee[$k] = $Stg_fee_per_mth * $Month_diff[$k];
//update $Total_Stg_fee in database
// $this->pledge->UpdatePledgeTotalStgFee($Total_Stg_Fee,$Month_diff);
//var_dump($Total_Stg_Fee);
}else{
//if $Month_diff == 0, $Stg_fee_per_mth must multiple with 1, if not $Total_stg_Fee will become 0
$Month_diff[$k] = 1;
$Total_Stg_Fee[$k] = $Stg_fee_per_mth * 1;
//update $Total_Stg_fee in database
// $this->pledge->UpdatePledgeTotalStgFee($Total_Stg_Fee,$Month_diff);
//var_dump($Total_Stg_Fee);
}
}
$this->pledge->UpdatePledgeTotalStgFee($Pledge_No,$Total_Stg_Fee,$Month_diff);
}
$data['pledge'] = $this->pledge->FetchPledge2Renew($Pledge_No);
$this->load->view('auth/header',$data);
$this->load->view('pledge/batch_renew_pledge',$data);
$this->load->view('pledge/footer',$data);
}
模型:
public function UpdatePledgeTotalStgFee($Pledge_No,$Total_Stg_Fee,$Month_diff){
// $post = $this->input->post();
//$Month_diff = $post;
//$Total_Stg_Fee = $post;
// $arraySize = count($post['pledge_id']);
/*
for($k=0; $k<$arraySize; $k++){
$TotalStgFee[] = array(
'pledge_id' => $post['pledge_id'][$k],
'no_of_mth' => $Month_diff.[$k],
'total_stg_fee' => $Total_Stg_Fee.[$k]
);
}
*/
$TotalStgFee = [];
foreach($Pledge_No as $k => $value){
$TotalStgFee[$k] = array(
'pledge_id' => $value,
'no_of_mth' => $Month_diff[$k],
'total_stg_fee' => $Total_Stg_Fee[$k]
);
}
$this->db->update_batch('pledge',$TotalStgFee,'pledge_id'); //('table','array','condition')
}
这将首先将每个$Total_Stg_Fee
和$Month_diff
保存为一个数组,然后将其作为批处理插入。我还在$Pledge_No
函数上添加了UpdatePledgeTotalStgFee()
作为参数,并将其传递给模型。