【问题标题】:remove form validation errors with a page refresh通过页面刷新删除表单验证错误
【发布时间】:2015-07-31 16:27:00
【问题描述】:

我有一个接受表单输入的页面,它是使用 HTML 和 PHP(codeignter 框架)编写的,我面临的问题是当出现表单验证错误时,页面刷新不会像全新的那样重新加载页面,我的意思是它没有清除字段中的输入,并且页面刷新时仍然出现错误消息,即使在我更正输入并点击提交之后,当我单击浏览器后退按钮时,它仍在加载带有验证错误的页面.. 任何想法为什么会发生或如何解决它。我只需要在刷新时重新加载页面。

这是我的观点(view1.php)

<html>
<?php
    echo validation_errors();
    form_open('search_controller/search_fn');
    form_input('input1', set_value('input1'));  
    form_input('input2', set_value('input2'));
    form_input('input3', set_value('input3'));
    form_submit('submit', 'Submit');
?>
</html>
Controller Functions

function index() {
    $this->load->view('view1');
}

function search_fn {
    if($this->input->post('submit') {
        $this->form_validation->set_rules('input1', 'XXXX',      
                                'trim|some_validation');
        $this->form_validation->set_rules('input2', 'XXXX', 
                                'trim|some_validation');      
        $this->form_validation->set_rules('input3', 'XXXX',
                         'trim|some_validation');

        if($this->form_validation->run() == FALSE) {
            //when validation fails
            $this->load->view('view1');
        } else {
            //when all input is validated sucessfully
           do some processlisng,
           //load some other view
           $this->load->view('view2');
        }
    } else {
        //When page is refreshed, this is supposed to redirect
        redirect('search_controller/index');
    }       
}

当输入验证失败时,url 以 www.something.com/search/search_fn 的形式返回,当我刷新时,它基本上会加载相同的页面并显示相同的错误消息。我,不知何故,需要重置 $this->input->post('search'),这样只有在单击搜索按钮时才会为真。

谢谢。

【问题讨论】:

  • 欢迎来到 Stack Overflow!这个问题的信息有点少。能分享一下你尝试过的,遇到了什么问题吗?
  • 如果不发布您遇到问题的代码示例,几乎不可能为您提供帮助。
  • 请记住,IE 和其他浏览器会保存状态(真的很烦人)并且即使在页面刷新后也会将数据保留在表单中。不知道和你的问题有没有关系。

标签: php forms codeigniter validation


【解决方案1】:

你在处理表单后是否使用了 CodeIgniter 的redirect() 函数?你应该总是这样做

我的意思是在你处理完提交的数据之后,而不是返回 TRUE 或简单地关闭函数,到一个简单的redirect('CONTROLLER_NAME');,即使你希望它们在同一个页面上

至于字段,我建议在您的输入中使用 autocomplete="off" (if you are not using an &lt;input type="text"&gt; above an &lt;input type="password"&gt; because Chrome and next version of Firefox will ignore automplete="off" in that situation)

【讨论】:

  • 感谢阿拉的回复。
  • 如果我添加重定向页面将被重定向到我在重定向中提供的新网址。我已经更新了我的问题以使其更加清晰。
  • @PREDDY 我的意思是在提交表单时使用重定向,而不是在刷新页面时!例如,将 $this-&gt;load-&gt;view('view2'); 更改为 redirect('CONTROLLER_NAME') ,如果您需要在重定向后显示任何消息,请使用 Codeigniter flash data ,也可以使用 form_input('input1', set_value('input1'), 'autocomplete="off"'); 更改您的输入
  • 再次感谢阿拉。 “view2”应该加载从数据库中获取的 1000 个结果,所以我不能使用闪存数据将输出传递给视图。我也在尝试使用'autocomplete="off"',但由于某种原因它不适用于输入类型=“文本”字段..对此有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-02-06
  • 1970-01-01
  • 2020-05-19
  • 2014-07-12
  • 2019-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多