Jump to content

[CI] How to handle form with inputs as array


roksieu

Recommended Posts

Hello,

 

I have a large form that can be built dynamically, user can add multiple fields and now I have problems with saving values to DB.

 

I'm using codeigniter.

 

This is my form

Capture.jpg

and this is part of my controller that handle those inputs:

 

$from  = array();
	    foreach ($this->input->post('from') as $froms)
	    {
		    $from[] = $froms;
	    }
	    $to = array();
	    foreach ($this->input->post('to') as $tos)
	    {
		    $to[] = $tos;
	    }

	    $step = array();
	    foreach ($this->input->post('step') as $steps)
	    {
		    $step[] = $steps;
	    }

$odvisnost = array();
foreach ($this->input->post('odvisnost') as $dependency)
{
$odvisnost[] = $dependency;
}

 

And I get error:

 

 

A PHP Error was encountered

 

Severity: Notice

Message: Array to string conversion

Filename: mysql/mysql_driver.php

Line Number: 552

 

and

A Database Error Occurred

 

Error Number: 1054

Unknown column 'Array' in 'field list'

INSERT INTO `gc_dioptry` (`produkt`, `from`, `to`, `step`, `dependancy`, `value`) VALUES ('1', '2', '3', Array, Array, Array)

Filename: C:\xampp\htdocs\leckacms\system\database\DB_driver.php

Line Number: 330

 

1st value is "productid"

As you can see it tries to insert 'array' instead of values that I enter, I entered 2,3,4,5 and 6.

 

My html form is correct with all inputs names as array[] for example:

 

<input type="text" name="steps[]">

It's not very clear how you are planning to store the values in the database and I can't see exactly which form fields map to which database fields. If each dynamic line should be a separate row in the "gc_dioptry" table then you could try something like this:

 


// Collect desired post arrays
$from = $this->input->post('from');
$to = $this->input->post('to');
$step = $this->input->post('step');
// etc.

$rows = array();  # we'll store each row in this array

// Setup a counter for looping through post arrays
// If there are x items in one post array (e.g. $from) then the others *should* contain the same number
$row_count = count($from);

for ($i=0; $i < $row_count; $i++) { 
   $rows[] = array(
       'produkt' => '???',
       'from' => $from[$i],
       'to' => $to[$i],
       'step' => $step[$i],
       'dependancy' => '???',
       'value' => '???',
   );
}

$this->db->insert_batch('gc_dioptry', $rows);

 

You could add some validation like checking that your post values are actually arrays and also check whether array keys ($i in this example) exist before using them. This will prevent errors being thrown.

Each line of values will be stored in separate row.

For example:

All values from "first option" will be saved to table "first_option"

All values from "second" will be saved to table "second_option"

etc.

 

With all the fields I will also save product_id (so that I know to which products it goes to).

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.