【问题标题】:what is the best practice to handle form data in CodeIgniter?在 CodeIgniter 中处理表单数据的最佳实践是什么?
【发布时间】:2017-02-09 12:32:34
【问题描述】:

我正在 CodeIgniter 中开发一个新应用程序。我已经在 CI 中开发了一些应用程序。在我以前的所有应用程序中,我曾经处理过如下表单:

我的控制器:My_controller.php

class My_controller extends CI_Controller {
  public function __construct()
  {
    parent::__construct();
    $this->load->model('my_model');
  }
  public function sign_up()
  {
    $this->load->view('sign_up');
  }
  public function do_sign_up()
  {
    $this->form_validation->set_rules('');
    $this->form_validation->set_rules('');
    if($this->form_validation->run() == false)
    {
      $this->load->view('sign_up');
    }
    else
    {
      $this->my_model->insert_user();
      $data['message'] = "Signup Successful";
      $this->load->view('sign_up', $data);
    }
  }

我的观点:sign_up.php

<html>
<head></head>
<body>
 <?php echo form_open("my_controller/do_sign_up"); ?>

  form elements comes here.....
  ...............................

 <?php echo form_close(); ?>
</body>
</html>

我怀疑控制器中需要 2 个方法 sign_up() 和 do_sign_up() 来处理一个 sign_up 表单。如果我编写这样的代码来处理每个表单,那么控制器中的方法数量将会增加。这是正确的方法吗?还是有其他方法可以做到这一点?有人可以帮我吗?提前致谢。

【问题讨论】:

    标签: php forms controller codeigniter-3


    【解决方案1】:

    您当然可以使用一种功能。如下所示。

     public function sign_up()
     {
       if ($this->input->post()) {
          $this->form_validation->set_rules('');
          $this->form_validation->set_rules('');
          if($this->form_validation->run() == false)
          {
             $this->load->view('sign_up');
          }
          else
          {
             $this->my_model->insert_user();
             $data['message'] = "Signup Successful";
             $this->load->view('sign_up', $data);
          }
       }else{
          $this->load->view('sign_up');
       }
    

    }

    试一试。

    【讨论】:

    • 感谢您的快速回复。这肯定会起作用,但我想知道处理表单数据的最佳做法是什么?
    【解决方案2】:

    你也可以这样设置

        public function registre()
    {
    
    
    $this->form_validation->set_rules('email','EMAIL','trim|required|valid_email');
    
    if($this->form_validation->run()==FALSE)
        {
            echo validation_errors();
            $this->load->view('sign_up');//load page
       or you can      redirect('welcome/index');//also redirect
        }
        else{
            $data=array(
                'email'=>$this->input->post('email')
                );
    
               $this->welcome_model->registre($data);
    
    
            echo "<div class='alert'>Inscription success</div>";
            redirect('welcome/index');
        }
    }
    

    我认为遵循文档是最佳实践https://www.codeigniter.com/userguide3/libraries/form_validation.html#form-validation-tutorial

    【讨论】:

    • 如果我不使用 codeigniter 的表单验证,而是使用我自己的 jQuery 验证会怎么样。
    • 你可以做到,但是codeigniter表单验证比jQuery验证更安全@prasadchinthala
    【解决方案3】:

    我认为在 CodeIgniter 中处理数据的最佳实践(也适用于所有其他框架)

    1.给控制器中的变量赋值

    2.从这些变量初始化一个数组

    3.使用codeigniter表单验证来验证用户输入 (至少应该进行类型和长度验证)

    4.如果需要,使用回调进行用户定义的验证

    5. 还对所有返回的数据调用 isset() 和 !empty() 方法 表单函数(这将检查数据变量是否已设置或已设置 一个空值)

    6.对于前端验证(客户端验证)我们可以使用任一html 或 jquery 验证。代码可见性是主要缺点
    对于后端(服务器端)验证,大多数时候我们使用模块和 对应框架支持的库

    7.更好的编程实践既有前端验证也有后端验证

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-10-15
      • 1970-01-01
      • 1970-01-01
      • 2011-09-22
      相关资源
      最近更新 更多