【问题标题】:codeigniter form validation for dynamic form input names动态表单输入名称的 codeigniter 表单验证
【发布时间】:2013-02-17 15:49:20
【问题描述】:

我有一个 codeigniter 应用程序。我的视图使用数据库行 ID 附加到输入名称以获取唯一 ID。这允许我在我的表单操作中使用所有输入,即更新。

我的视图语法:

<?php if(isset($records)) {?>
<table id="hor-minimalist-a">
    <tr>
        <th>&nbsp;</th><th>&nbsp;</th><th>Customer Name</th><th>postalcode</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="inputnarrow" type="text" name="postalcode_<?php echo $row->id ?>" id="postalcode_<?php echo $row->id ?>" value="<?php echo $row->postalcode ; ?>" >
        </td>
    </tr>
<?php endforeach ; ?>
    </table>
<input type="submit" value="Update Checked Customers">
<?php endif; ?>

<?php echo form_close(); ?>
<?php } else {?>
<h4 id="warning"> No Customers currently in database</h4>
<?php } ?>

如您所见,输入 name'sid's 是唯一的。

我的控制器语法如下:

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

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


            $editcustomer = $this->input->post('editcustomer');

            // single update - working

            if( $this->input->post('editcustomer') != false )
            {
                foreach ($editcustomer as $row_id)
                {
                    $data = array( 
                        'postalcode' => $this->input->post('postalcode_'.$row_id),
                        'customer_name' => $this->input->post('customer_name_'.$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');
            }


    }

如何利用 codeigniter 验证类来确保用户修改输入框的数据可信?

怎么可能

$this-&gt;form_validation-&gt;set_rules("primary_contact_tell","联系人告诉","required|xss_clean|min_length[10]|max_length[14]");

引用输入字段的正确动态名称?表单目前只有客户姓名和邮政编码,但需要添加其余字段。

一如既往地提前致谢。

【问题讨论】:

    标签: forms codeigniter dynamic input validation


    【解决方案1】:

    您可以在控制器中循环访问 $records,以实现动态输入验证规则。

    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]");
    }
    


    编辑:

    想一想。我无法检查控制器中的变量是什么。据我所知,根据您在此处编写的代码,这应该可以工作:

    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]");
    }
    

    【讨论】:

    • 谢谢 yabol,按照您的建议尝试但根据问题更新失败?在我看来,我的正常 foreach 语句是针对模型的,而 foreach 在那里失败了。请指教。谢谢,
    • 将其更改为:foreach($editcustomer as $row_id),如下所示更新每一行。
    • 谢谢你。现在尝试这个并得到一个错误Trying to get property of non object 对我来说这是$row_id-&gt;id 没有价值的结果。我将很快更新我当前的语法并向您展示输出示例。再次感谢
    • 谢谢 yabol,完美。非常感谢您的知识和时间。
    【解决方案2】:

    工作解决方案,非常感谢@yabol 提供的解决方案。我仍然需要稍微清理一下语法,但所需的功能可以正常工作。

    查看

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

    控制器

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

    【讨论】:

      猜你喜欢
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-25
      • 2014-11-25
      相关资源
      最近更新 更多