I have a form that dynamically adds dropdown fields depending on the number for results returned a db query that also populates the dropdown.
I need to validate if these dropdown fields. This is what I have at the moment
My view
<table>
<tbody>
<?php
if(!empty($result))
{
foreach($result as $row)
{
echo "<tr>";
echo "<td>" . $row->project_no . "</td>";
echo "<td>" . $row->sws_dwg_no . "</td>";
echo "<td>" . $row->client_dwg_no . "</td>";
echo "<td>" . $row->dwg_title . "</td>";
echo "<td>" . $row->dwg_by . "</td>";
$rev = array('' => $row->dwg_rev);
$rev_change = array(
'A' => 'A',
'B' => 'B',
'C' => 'C',
'D' => 'D',
'E' => 'E'
);
$dropdown = array_merge($rev,$rev_change);
echo "<td>" . form_dropdown('result['.$row->dwg_id.'][temp_dwg_rev]',$dropdown,'', 'id="theSelect' . $row->dwg_id .'"') . "</td>";
echo "<td>" . date('Y/m/d', strtotime($row->dwg_date)) . "</td>";
echo "<td>" . form_checkbox('result['.$row->dwg_id.'][temp_dwg_id]',$row->dwg_id,'', 'id="activate' . $row->dwg_id . '"') . "</td>";
echo "</tr>";
?></tbody></table>
$row->dwg_id
returns the table id of the results, i.e 1,2,3 or 4, to form the associative array.
My controller
public function issue()
{
$this->form_validation->set_rules('result[][temp_dwg_rev]', 'Rev ', 'required|callback_rev_change');
$this->form_validation->set_rules('result[][temp_dwg_rev]', 'Rev ', 'required|callback_rev_change');
$this->form_validation->set_rules('result[][temp_dwg_rev]', 'Rev ', 'required|callback_rev_change');
$this->form_validation->set_rules('result[][temp_dwg_rev]', 'Rev ', 'required|callback_rev_change');
if($this->form_validation->run())
{
echo "All changed";
}
else echo validation_errors();
}
Currently only the first dropdown is validated and an error returned. I have tried adding the id number to the field name in the form validation rule and the same thing happens - only the first dropdown is validated.
I want it to work for all the dropdown fields in the form.
I solve the problem that I had. Thank you for your interest Saty
Here is what I did to solve the problem that I had. I used a foreach loop that takes the posted $row->dwg_id
values to create the name of the form validation rule. The rule then matches the name of the input.
My controller
public function issue()
{
$rows = array();
$rows = $_POST['result'];
$temp_array = array_column($rows, 'temp_dwg_id');
foreach($temp_array as $key => $temp_dwg_id)
{
$this->form_validation->set_rules('result['.$temp_dwg_id.'][temp_dwg_rev]', 'Rev'.$temp_dwg_id , 'required');
}
if($this->form_validation->run())
{
//Do stuff.
}
else{
//Do other stuff.
}