我需要将一个数组变量从表单传递给控制器,以便将值保存到数据库中。
这是观点:
<?php
$i=1;
foreach ($data->result() as $dt)
{
?>
<input type="text" value="<?php echo $i;?>" />
<input type="text" name="name[]" id="name" value="<?php echo $name;?>" />
<?php
$i++;
}
?>
<button type="button" name="save" id="save" class="btn btn-mini btn-info"><i class="icon-save"></i>Save</button>
这是javascript:
$(document).ready(function(){
$("#save").click(function(){
var string = $("#my-form").serialize();
$.ajax({
type : 'POST',
url : "<?php echo site_url(); ?>/the_site/site_value/save_name",
data : string,
cache : false,
success : function(data){
$.gritter.add({
title: 'Info..!!',
text: data,
class_name: 'gritter-info'
});
}
});
});
});
这是控制器:
public function save_name()
{
$name = $this->input->post('name');//actually 'name' is 'name[]' from view.
if (is_array($name))
{
foreach ($name as $name1 => $name2)
{
$dt['person_name'] = $name2;
}
}
$id['id_person'] = '001'; //this is just an example of id..
选择一个表及其选定的行...
$q = $this->db->get_where("the_table",$id);
$row = $q->num_rows();
if($row>0)
{
答案 0 :(得分:0)
在发布时,names数组看起来像这样(我使用microtime()
生成一些随机名称仅用于示例):
Array
(
[name] => Array
(
[0] => 0.33037500 1512871675
[1] => 0.33040300 1512871675
[2] => 0.33041700 1512871675
[3] => 0.33043000 1512871675
[4] => 0.33044300 1512871675
[5] => 0.33045500 1512871675
[6] => 0.33046800 1512871675
[7] => 0.33048000 1512871675
[8] => 0.33049100 1512871675
[9] => 0.33050500 1512871675
[10] => 0.33051700 1512871675
)
)
你可以这样访问数组:$names = $this->input->post('name');
(你已经在做了)。
然后你可以运行foreach:
foreach ($names as $name) {
$q = $this->db->get_where("the_table", array('name' => $name));
if ($q->num_rows() > 0) {
$this->db->update('the_table', array('name' => $name), array('id' => $q->row()->id));
echo "Name successfully updated";
} else {
$this->db->insert('the_table', array('name' => $name));
echo "Name successfully saved";
}
}
您必须检查每个名称是否存在。由于您只变量与name
进行比较,因此您必须get_where
名称相同。如果它不存在,则插入,如果存在,则使用给定的id
进行更新。我高度建议您阅读query builder documentation因为您将字符串而不是数组直接传递给db函数。这不起作用。