【问题标题】:Submitting form to itself and echoing validation errors in CodeIgniter向自身提交表单并在 CodeIgniter 中回显验证错误
【发布时间】:2014-07-06 22:15:58
【问题描述】:

我的项目中的表单很少,它们被提交到诸如 site.com/email => site.com/validate_email 之类的公共函数,但后来我意识到这不是我想要的。 现在我需要让他们自己提交,检查并显示验证错误。 这样做的适当方法是什么?检查$_POST 是否为空,如果帖子不为空,则调用我的新_validate_email(// 将返回真或假)? 或者其他不那么无聊的东西?:)

例如:

public function login()
{
        $this->load->view('login');
}


public function login_validation()
{
        $this->load->library('form_validation');

        $this->form_validation->set_rules('email', 'Email', 'required|valid_email|trim|xss_clean|callback_validate_credentials');
        $this->form_validation->set_rules('password','Password','required|md5');

        if($this->form_validation->run())
        {
            //some stuff here
        }
        else
        {
            $this->load->view('login'); //or redirect()?
        } 

查看:

<?php $this->load->view('header'); ?>


<div class="form-container">
    <?=$this->form_validation->validation_errors();?>
    <?php
    $form_atr = array(
        'id' => 'form-set'
    );
    echo form_open('main/login_validation', $form_atr);//this should be 'main/login'
    ?>
    <div class="header">
        /*
here goes other parts of form
*/
</div><!--END  form-container -->`
<?php $this->load->view('footer'); ?>

所以,基本上我需要结合login()login_validation(),但是这样当用户输入不正确时,我会重新加载具有相同 URL 的相同视图的页面并显示验证错误。

我尝试将验证代码放入显示表单的同一函数中,但我不知道如何重定向或重新加载视图以显示 val.errors(如果有)。

【问题讨论】:

    标签: php forms codeigniter validation


    【解决方案1】:

    所以,我认为这种方式是正确的(确实应该如此):

    我通过在 login_validation() 之前添加“_”将其设为私有,就像 _login_validation() 然后我添加了一个包含$_POST 表单变量的if() 语句,并且我使用php isset() 函数检查它们,这样代码可以确定用户何时提交表单。毕竟,如果设置了输入,我只需调用_login_validation(),否则再次加载我的登录视图。

    public function login()
    {
    
        if(isset($_POST['password']) && isset($_POST['email']))
        {
            $this->_login_validation();
        }
        else
        {
            $this->load->view('login');
        }
    }
    

    并且不要忘记处理您的表单,以便将其提交到相同的 URL:

    echo form_open('', $form_atr);

    希望有一天能对某人有所帮助。

    【讨论】:

      【解决方案2】:

      首先validation_errors()是一种flash数据,所以每当你重定向出错的页面时都会显示验证错误,如果你再次加载它就不会显示。

      从您的问题我无法理解,您是否要显示错误。 如果你想显示错误: 然后只需将页面重定向到登录并在登录视图中添加alert div

      如果您不想显示错误: 然后只需删除alert div

      *我在您的登录视图中没有看到任何警报 div,如果仍然显示验证错误,则可能是 alert div 在标题视图中

      【讨论】:

      • 感谢您的回复!实际上,问题更多是关于如何以正确的方式将我的表单提交给自己,然后显示验证错误。我需要让我的 login() 调用 _validate_login(),我在问 - 我应该怎么做才能让我的 login() 提交,这样我就不会调用 mysite.com/validate_login,而是留在相同的 URL并处理提交并显示错误(如果有)。呵呵,我不太擅长用英语表达自己……
      • 好的,那么您必须通过 ajax 提交 from 数据。你可以按照这个教程...phpsblog.agustinvillalba.com/sending-forms-ajax-codeigniter
      • 谢谢@Aminul,总有一天它对我来说肯定会派上用场,但我自己解决了我的问题
      猜你喜欢
      • 1970-01-01
      • 2019-07-04
      • 2014-04-23
      • 1970-01-01
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      相关资源
      最近更新 更多