skribe
skribe

Reputation: 3615

Codeigniter Insert Array to Database

I have created a form in Codeigniter with a phone number field that dynamically is duplicated using javascript. So basically I can have one or more fields like this.

<input name="phone[]" value=""type="text">
<input name="phone[]" value=""type="text">

Then in my controller I have

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

Then I am saving this to my dabase like so

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

but obviously the code for 'phone' is wrong, I just cant figure out how to properly do this.

Upvotes: 3

Views: 43146

Answers (6)

kbhatta
kbhatta

Reputation: 457

Modify your function as below and it will works like charm:

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

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

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

Upvotes: 4

Jitendra Patidar
Jitendra Patidar

Reputation: 11

for array insertion to database use this programme in codeigniter controller=>

$inputdata=$this->input->post();

$phone=array($inputdata['phone']);
       
       foreach($phone as $arr)
       {
           $phoneNo=$arr;

           $f=count($phoneNo);
           
           for($i=0;$i<$f;$i++)
           {
              $arre=[
                  'phone'=>$phoneNo[$i],
                     ]; 
                  
              $insertB= $this->user_model->userdata($arre);      
           }
       }

Upvotes: 0

Abhi Sharma
Abhi Sharma

Reputation: 71

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();
            }
        }   

    }

Upvotes: -1

Vinie
Vinie

Reputation: 2993

you can't save array in to database. You can convert it in to string using implode() and whenever you needed then convert it back in array using explode(). Like below

$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
        );

OR

You can convert it to json string and when you needed convert back to Array Like below:

$phone = json_encode($this->input->post('phone'));

Convert back to array

$phone = json_decode($phone, TRUE);

Upvotes: 6

Nitheesh K P
Nitheesh K P

Reputation: 1110

mysql doesn’t has any array data type. So we can not store array directly into mysql database. To do this we have to first convert array into string using php serialize() function then save it into mysql database.

for eg:php code to store array in database

$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));

To retrieve array from database

$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);
}

Upvotes: 0

Abdulla Nilam
Abdulla Nilam

Reputation: 38670

In controller

$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'
);

In Model

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

}

Tested

Image 01 (My form)

01

Image 02 (After Submitted)

enter image description here

Upvotes: 0

Related Questions