问题
I have a situation like this, I want to update some data where the input are checkboxes, I was tried this code below. Data already saved in database, but data saved in another row,
For example : I checked color red, yellow and grey for BirdA and I checked dark and blue for BirdD at the same time. In database, color for BirdA saved correctly, but for the 2nd bird, dark and blue saved on BirdB (Should be save on BirdD)
I want to solve my problem above, so data should be save in the right place in database. Please check my code below :
My Db Table:
=============================================
| birds | red | blue | grey | yellow | dark |
=============================================
| BirdA | 0 | 0 | 0 | 0 | 0 |
| BirdB | 0 | 0 | 0 | 0 | 0 |
| BirdC | 0 | 0 | 0 | 0 | 0 |
| BirdD | 0 | 0 | 0 | 0 | 0 |
=============================================
View :
<tr>
<td><input type="hidden" name="birds[]" value='<?php echo $dp['birds']; ?>' /><?php echo $dp['birds']; ?></td>
<td><p align='center'><input type="text" name="qtt[]" value='<?php echo $dp['qtt']; ?>' tabindex="2" style="width:30px;" /></td>
<td><p align='center'><input type="checkbox" name="red[]" value='1' <?php if($dp['red']==1) { echo " checked=\"checked\""; } ?> /></td>
<td><p align='center'><input type="checkbox" name="blue[]" value='1' <?php if($dp['blue']==1) { echo " checked=\"checked\""; } ?> /></td>
<td><p align='center'><input type="checkbox" name="grey[]" value='1' <?php if($dp['grey']==1) { echo " checked=\"checked\""; } ?> /></td>
<td><p align='center'><input type="checkbox" name="yellow[]" value='1' <?php if($dp['yellow']==1) { echo " checked=\"checked\""; } ?> /></td>
<td><p align='center'><input type="checkbox" name="dark[]" value='1' <?php if($dp['dark']==1) { echo " checked=\"checked\""; } ?> /></td>
</tr>
And the controller :
$birds= $this->input->post("birds");
if (empty($this->input->post("birds"))){
$birds= 0;
}
$qtt= $this->input->post("qtt");
if (empty($this->input->post("qtt"))){
$qtt= 0;
}
$red= $this->input->post("red");
if (empty($this->input->post("red"))){
$red= 0;
}
$blue= $this->input->post("blue");
if (empty($this->input->post("blue"))){
$blue= 0;
}
$grey= $this->input->post("grey");
if (empty($this->input->post("grey"))){
$grey= 0;
}
$yellow= $this->input->post("yellow");
if (empty($this->input->post("yellow"))){
$yellow= 0;
}
$dark= $this->input->post("dark");
if (empty($this->input->post("dark"))){
$dark= 0;
}
for($x = 0; $x < sizeof($birds); $x++){
$reslt[$x] = array(
"birds" => $birds[$x],
"qtt" => $qtt[$x],
"red" => $red[$x],
"blue" => $blue[$x],
"grey" => $grey[$x],
"yellow" => $yellow[$x],
"dark" => $dark[$x]
);
}
$this->db->update_batch('db_birds', $reslt, 'birds');
after I execute that code, php has an error like this :
A PHP Error was encountered
Severity: Notice
Message: Undefined variable: x
Filename: controllers/....
Line Number: 613
Backtrace:
File: /home/.....
Line: 613
Function: _error_handler
File: /home/..../index.php
Line: 315
Function: require_once
A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 3
Filename: controllers/....
Line Number: 621
Backtrace:
File: /home/....
Line: 621
Function: _error_handler
File: /home/..../index.php
Line: 315
Function: require_once
A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 3
Filename: controllers/...
Line Number: 622
Backtrace:
File: /home/...
Line: 622
Function: _error_handler
File: /home/.../index.php
Line: 315
Function: require_once
A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 4
Filename: controllers/...
Line Number: 620
Backtrace:
File: /home/...
Line: 620
Function: _error_handler
File: /home/.../index.php
Line: 315
Function: require_once
A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 4
Filename: controllers/...
Line Number: 621
Backtrace:
File: /home/...
Line: 621
Function: _error_handler
File: /home/.../index.php
Line: 315
Function: require_once
A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 4
Filename: controllers/...
Line Number: 622
Backtrace:
File: /home/...
Line: 622
Function: _error_handler
File: /home/.../index.php
Line: 315
Function: require_once
A PHP Error was encountered
Severity: Notice
Message: Undefined offset: 5
Filename: controllers/...
Line Number: 618
Backtrace:
File: /home/...
Line: 618
Function: _error_handler
File: /home/.../index.php
Line: 315
Function: require_once
......
Thank you, Best Regards
回答1:
Controller Code:-
for($x = 0; $x < sizeof($birds); $x++){
$reslt[$x] = array(
"birds" => $birds[$x],
"qtt" => $qtt[$x],
"red" => $red[$x],
"blue" => $blue[$x],
"grey" => $grey[$x],
"yellow" => $yellow[$x],
"dark" => $dark[$x]
);
}
$this->db->update_batch('db_birds', $reslt, 'birds');
Change is in your view code:-
<?php
//sql Query.
//execute Query.
$ii=0;
foreach($dps as $dp){
$iii = $ii++;
<tr>
<td><input type="hidden" name="birds[<?php echo $iii;?>]" value='<?php echo $dp['birds']; ?>' /><?php echo $dp['birds']; ?></td>
<td><p align='center'><input type="text" name="qtt[]" value='<?php echo $dp['qtt']; ?>' tabindex="2" style="width:30px;" /></td>
<td><p align='center'><input type="checkbox" name="red[<?php echo $iii;?>]" value='1' <?php if($dp['red']==1) { echo " checked=\"checked\""; } ?> /></td>
<td><p align='center'><input type="checkbox" name="blue[<?php echo $iii;?>]" value='1' <?php if($dp['blue']==1) { echo " checked=\"checked\""; } ?> /></td>
<td><p align='center'><input type="checkbox" name="grey[<?php echo $iii;?>]" value='1' <?php if($dp['grey']==1) { echo " checked=\"checked\""; } ?> /></td>
<td><p align='center'><input type="checkbox" name="yellow[<?php echo $iii;?>]" value='1' <?php if($dp['yellow']==1) { echo " checked=\"checked\""; } ?> /></td>
<td><p align='center'><input type="checkbox" name="dark[<?php echo $iii;?>]" value='1' <?php if($dp['dark']==1) { echo " checked=\"checked\""; } ?> /></td>
</tr>
}
?>
来源:https://stackoverflow.com/questions/64654976/codeigniter-batch-update-for-checkbox