codeigniter form validation for dynamic form input names

前端 未结 2 1426

I have a codeigniter app. My view uses the database row ID to append to the input name to get a unique ID. this allows me to use all inputs in my form action, which is update.

相关标签:
2条回答
  • 2021-01-28 05:22

    You can loop through your $records in controller as you are doing it in view to achieve dynamic input validation rules.

    foreach($records as $row)
    {
        $this->form_validation->set_rules("customer_name_" . $row->id, "Customer name", "required|xss_clean|min_length[10]|max_length[14]");
        $this->form_validation->set_rules("postalcode_" . $row->id, "Customer name", "required|xss_clean|min_length[10]|max_length[14]");
    }
    


    Edit:

    Think a little. I don't have ability to check what variables in your controller are. As far as I know basing on code you wrote here, this should be working:

    foreach($editcustomer as $row_id)
    {
        $this->form_validation->set_rules("customer_name_" . $row_id, "Customer name", "required|xss_clean|min_length[10]|max_length[14]");
        $this->form_validation->set_rules("postalcode_" . $row_id, "Customer name", "required|xss_clean|min_length[10]|max_length[14]");
    }
    
    0 讨论(0)
  • 2021-01-28 05:32

    Working solution, big thanks to @yabol on this one. I still need to clean up the syntax a little but desired functionality working.

    View

    <?php 
        $attributes=array(
            'name'=>'updatecustomer',
            'id'=>'updatecustomer',
            );
        echo form_open('masterdata/manage_customers',$attributes);
    ?>
    <div id="validation_failed">
        <?php
            echo validation_errors();
        ?>
    </div>
    <?php if(isset($records)) {?>
    <table id="hor-minimalist-a">
        <tr>
            <th>&nbsp;</th><th>&nbsp;</th><th>Customer Name</th><th>Address Line 1</th><th>Address Line 2</th><th>Suburb</th><th>City</th><th>Postal Code</th><th>Contact Name</th><th>Contact Email</th><th>Contact Tel</th>
        <tr>
    
    <?php if(isset($records)) : foreach ($records as $row) : ?>
        <tr>
            <td>
    <?php echo anchor('masterdata/confirm_delete_customer/'.$row->id, img(array('src'=>'images/delete_icon.png','border'=>'0','alt'=>'Delete'))); ?>
            </td>
            <td>
                <input type=checkbox name="editcustomer[]" id="editcustomer[]" value="<?php echo $row->id ?>">
            </td>
            <td>
                <input class="inputwide" type="text" name="customer_name_<?php echo $row->id ?>" id="customer_name_<?php echo $row->id ?>" value="<?php echo $row->customer_name ; ?>" >
            </td>
            <td>
                <input class="inputmedium" type="text" name="address_line_1_<?php echo $row->id ?>" id="address_line_1_<?php echo $row->id ?>" value="<?php echo $row->address_line_1 ; ?>" >
            </td>
            <td>
                <input class="inputmedium" type="text" name="address_line_2_<?php echo $row->id ?>" id="address_line_2_<?php echo $row->id ?>" value="<?php echo $row->address_line_2 ; ?>" >
            </td>
            <td>
                <input class="inputmedium" type="text" name="suburb_<?php echo $row->id ?>" id="suburb_<?php echo $row->id ?>" value="<?php echo $row->suburb ; ?>" >
            </td>
            <td>
                <input class="inputmedium" type="text" name="city_<?php echo $row->id ?>" id="city_<?php echo $row->id ?>" value="<?php echo $row->city ; ?>" >
            </td>
            <td>
                <input class="inputnarrow" type="text" name="postalcode_<?php echo $row->id ?>" id="postalcode_<?php echo $row->id ?>" value="<?php echo $row->postalcode ; ?>" >
            </td>
            <td>
                <input class="inputmedium" type="text" name="primary_contact_name_<?php echo $row->id ?>" id="primary_contact_name_<?php echo $row->id ?>" value="<?php echo $row->primary_contact_name ; ?>" >
            </td>
            <td>
                <input class="inputmedium" type="text" name="primary_contact_email_<?php echo $row->id ?>" id="primary_contact_email_<?php echo $row->id ?>" value="<?php echo $row->primary_contact_email ; ?>" >
            </td>
            <td>
                <input class="inputmedium" type="text" name="primary_contact_tell_<?php echo $row->id ?>" id="primary_contact_tell_<?php echo $row->id ?>" value="<?php echo $row->primary_contact_tell ; ?>" >
            </td>
    
        </tr>
    <?php endforeach ; ?>
        </table><br>
    <input type="submit" value="Update Checked Customers">
    <?php endif; ?>
    
    <?php echo form_close(); ?>
    

    Controller

    function manage_customers()
        {
    
            $data['title']="Manage Customers";
                //query model to get data results for form
                $data=array();
    
                if($query=$this->model_master_data->get_customer_records()){
                    $data['records']=$query;
                }
                $editcustomer = $this->input->post('editcustomer');
    
                if( $this->input->post('editcustomer') != false ){
                foreach($editcustomer as $row_id)
                {
                    $this->form_validation->set_rules("customer_name_" . $row_id, "Customer name", "required|min_length[6]");
                    $this->form_validation->set_rules("address_line_1_". $row_id,"`Address Line 1`","required|xss_clean|min_length[6]");
                    $this->form_validation->set_rules("address_line_2_". $row_id,"`Address Line 2`","xss_clean|min_length[6]");
                    $this->form_validation->set_rules("suburb_". $row_id,"`Suburb`","required|xss_clean|min_length[6]");
                    $this->form_validation->set_rules("city_". $row_id,"`City`","required|xss_clean|min_length[6]");
                    $this->form_validation->set_rules("postalcode_". $row_id,"`Postal Code`","required|xss_clean|min_length[4]|max_length[5]");
                    $this->form_validation->set_rules("primary_contact_name_". $row_id,"`Contact Person Name`","required|xss_clean|min_length[6]");
                    $this->form_validation->set_rules("primary_contact_email_". $row_id,"`Contact Person email`","required|valid_email|xss_clean");
                    $this->form_validation->set_rules("primary_contact_tell_". $row_id,"`Contact Person tell`","required|xss_clean|min_length[10]|max_length[14]");
    
                }
                }
    
                if ($this->form_validation->run() == FALSE){
    
                    $data["message"]="";
    
                    $this->load->view("master_data/view_master_data_header",$data);
                    $this->load->view("master_data/view_master_data_nav");
                    $this->load->view("master_data/view_content_master_data_manage_customers",$data);
                    $this->load->view("master_data/view_master_data_footer");
    
                } else {
                    // single update - working
                    if( $this->input->post('editcustomer') != false )
                    {
                        foreach ($editcustomer as $row_id)
                        {
                            $data = array( 
                            'customer_name' => $this->input->post('customer_name_'.$row_id),
                            'address_line_1' => $this->input->post('address_line_1_'.$row_id),
                            'address_line_2' => $this->input->post('address_line_2_'.$row_id),
                            'suburb' => $this->input->post('suburb_'.$row_id),
                            'city' => $this->input->post('city_'.$row_id),
                            'postalcode' => $this->input->post('postalcode_'.$row_id),
                            'primary_contact_name' => $this->input->post('primary_contact_name_'.$row_id),
                            'primary_contact_email' => $this->input->post('primary_contact_email_'.$row_id),
                            'primary_contact_tell' => $this->input->post('primary_contact_tell_'.$row_id),
                            );
    
                            $this->model_master_data->update_customer_records( $row_id, $data );
                        }
                         $this->session->set_flashdata('dbaction', 'Selected Records have been updated successfully');
                        redirect('masterdata/manage_customers', 'refresh');
                        }
    
                }
        }
    
    0 讨论(0)
提交回复
热议问题