Arrays Codeigniter将数组插入数据库

Arrays Codeigniter将数组插入数据库,arrays,codeigniter,insert,Arrays,Codeigniter,Insert,我在Codeigniter中创建了一个表单,其中包含一个电话号码字段,该字段使用javascript动态复制。基本上我可以有一个或多个这样的字段 <input name="phone[]" value=""type="text"> <input name="phone[]" value=""type="text"> 然后我就这样把这个保存到我的数据库里 function SaveForm($form_data) { $this->db->insert

我在Codeigniter中创建了一个表单,其中包含一个电话号码字段,该字段使用javascript动态复制。基本上我可以有一个或多个这样的字段

<input name="phone[]" value=""type="text">
<input name="phone[]" value=""type="text">
然后我就这样把这个保存到我的数据库里

function SaveForm($form_data)
{
    $this->db->insert('customers', $form_data);
    if ($this->db->affected_rows() == '1')
    {
        return TRUE;
    }
    return FALSE;
}

但很明显,“phone”的代码是错误的,我就是不知道如何正确地执行此操作。

按以下方式修改您的功能,它会像charm一样工作

function SaveForm($form_data)
    {
        foreach ($form_data as $contact)
        {
            $data[] = array(
                'first_name' => $contact['first_name'],
                'last_name' => $contact['last_name'],
                'phone' => $contact['phone']
                );
        }

        $this->db->insert_batch('customers', $data); 

        if ($this->db->affected_rows() > 0)
        {
            return TRUE;
        }
        return FALSE;
    }
修改:

哦,是的,您必须编辑传递给SaveForm函数的para数组。 请使用以下代码,忽略以上代码:

    foreach($_POST['first_name'] as $key=>$fname) 
    {
        $form_data[] = array(
            'first_name' => $_POST['first_name'][$key],
            'last_name' => $_POST['last_name'][$key],
            'phone' => $_POST['phone'][$key],
            );
    }

function SaveForm($form_data)
  {
    $this->db->insert_batch('customers', $data); 

    if ($this->db->affected_rows() > 0)
    {
        return TRUE;
    }

    return FALSE;
  }
内部控制器

$phone = $_POST['phone'];//this will store data as array. Check image 02
$form_data = array(
    'first_name' => $this->input->post('first_name'),
    'last_name' => $this->input->post('last_name'),
    'phone' => $phone,//some times it works with '$phone'
);
模型中

function SaveForm($form_data)
{
    $this->db->insert('customers', $form_data);
    if ($this->db->affected_rows() == '1')
    {
        return TRUE;
    }
    else
    {
        return FALSE;
    }

}
测试

图像01(我的表格)

图像02(提交后)


mysql没有任何数组数据类型。所以我们不能将数组直接存储到mysql数据库中。 为此,我们必须首先使用php serialize()函数将数组转换为字符串,然后将其保存到mysql数据库中

例如:在数据库中存储数组的php代码

$array = array("foo", "bar", "hello", "world");
$conn=mysql_connect('localhost', 'mysql_user', 'mysql_password');
mysql_select_db("mysql_db",$conn);
$array_string=mysql_escape_string(serialize($array));
从数据库检索数组的步骤

$conn=mysql_connect('localhost', 'mysql_user', 'mysql_password');
 mysql_select_db("mysql_db",$conn);
$q=mysql_query("select column from table",$conn);
while($rs=mysql_fetch_assoc($q))
{
 $array= unserialize($rs['column']);
 print_r($array);
}

无法将数组保存到数据库中。您可以使用
内爆()
将其转换为字符串,并在需要时使用
内爆()
将其转换回数组。如下

$phone=implode(',',$this->input->post('phone'));
$form_data = array(
        'first_name' => $this->input->post('first_name'),
        'last_name' => $this->input->post('last_name'),
        'phone' => $phone
        );

您可以将其转换为json字符串,并在需要时转换回数组,如下所示:

$phone = json_encode($this->input->post('phone'));
转换回数组

$phone = json_decode($phone, TRUE);
公共功能添加主题页面(){
$page_name=$this->input->post('page');
$page\u img=$this->input->post('page\u img');
对于($i=0;$ithis->input->post('theme\u id'),
“主题页面名称”=>$page页面名称[$i],
'theme_page_img'=>$page_img[$i]
);
如果($this->backendM->add_theme_pages($pages_data)){
$this->session->set_flashdata('message','Theme Added Successfully!');
$this->session->set_flashdata('message_class','green');
$this->create_template();
}否则{
$this->create_template();
}
}   
}

不幸的是,这一个不起作用,数组的每一行都会抛出错误
非法字符串偏移量“first\u name”
谷歌搜索这一点似乎是PHP5.4中出现的常见问题。我正在使用5.5.8我已经修改了答案,请将您的代码替换为张贴在“修改”文本下方的代码!我明白你的意思了。。。但这并不像Vinie所建议的那样使用内爆()那么简单,所以我接受他的答案。谢谢你的回答,但正如Bugfixer所指出的,你的答案不是使用CodeInigter,这正是我的问题所在。我已经可以用香草PHP做了。我缺少什么?实际上我也试过类似的方法,我的和你的都会产生同样的错误。遇到PHP错误严重性:注意消息:数组到字符串转换文件名:bfmysqli/bfmysqli_driver.PHP行号:509发生数据库错误错误号:1054“字段列表”中的未知列“数组”插入到
客户
名字
电话
)值('franky','smith',Array)虽然您的代码可能会提供问题的答案,但请在其周围添加上下文,以便其他人了解它的作用以及它存在的原因。
$phone = json_decode($phone, TRUE);
public function add_theme_pages(){
        $page_name = $this->input->post('page');
        $page_img = $this->input->post('page_img');

        for($i=0; $i < count($page_name); $i++){

            $pages_data = array(
                    'theme_id' => $this->input->post('theme_id'),
                    'theme_page_name' => $page_name[$i],
                    'theme_page_img' => $page_img[$i]
            );

            if($this->backendM->add_theme_pages($pages_data)){
                $this->session->set_flashdata('message', 'Theme Added Successfully !');
                $this->session->set_flashdata('message_class', 'green');
                $this->create_template();
            }else{
                $this->create_template();
            }
        }   

    }