【问题标题】:Redirect codeigniter multiple forms after form validation?表单验证后重定向codeigniter多个表单?
【发布时间】:2013-02-17 07:41:36
【问题描述】:

我在表单验证后遇到重定向问题。我在不同的视图中有 3 个不同的表单,验证后,如果表单无法提交,我想将其重定向到上一个登录页面。它工作正常,但是,如果我单击 url 并按 enter,则在提交表单后。当我在主页时,它会重定向到联系人。我希望它将其重定向到他提交的上一个登录页面。我认为这不是正确的做法,在此先感谢

myform1.php 我的表格1

<?php echo validation_errors(); ?>

<?php echo form_open('con/validate_form'); ?>

<h5>Username</h5>
<input type="text" name="username" value="" size="50" />

<h5>Password</h5>
<input type="text" name="password" value="" size="50" />

<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />

<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />

<div><input type="submit" name='submit1' value="Submit1" /></div>

</form>

</body>
</html>

myform2.php

<html>
<head>
<title>My Form</title>
</head>
<body>

<?php echo validation_errors(); ?>

<?php echo form_open('con/validate_form'); ?>

<h5>Username</h5>
<input type="text" name="username" value="" size="50" />

<h5>Password</h5>
<input type="text" name="password" value="" size="50" />

<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />

<h5>Email Address</h5>
<input type="text" name="email"  value="" size="50" />

<div><input type="submit" name-'submit2' value="Submit2" /></div>

</form>

</body>
</html>

myform3.php

<html>
<head>
<title>My Form3</title>
</head>
<body>

<?php echo validation_errors(); ?>

<?php echo form_open('con/valdate_form'); ?>

<h5>Username</h5>
<input type="text" name="username" value="" size="50" />

<h5>Password</h5>
<input type="text" name="password" value="" size="50" />

<h5>Password Confirm</h5>
<input type="text" name="passconf" value="" size="50" />

<h5>Email Address</h5>
<input type="text" name="email" value="" size="50" />

<div><input type="submit" name="submit3" value="Submit3" /></div>

</form>

</body>
</html>

这是控制器页面

   public function validate_form(){
                $this->load->library('form_validation');
                $this->form_validation->set_rules('firstname', 'First name', 'required');
if ($this->form_validation->run() == FALSE){
 ($this->input->post('submit1')=='submit1') ?  $this->load->view('myform1') 
: ($this->input->post('submit2')=='submit2') ?  $this->load->view('myform2') 
: $this->load->view('myform3'); 
}
else
{
$this->register();
}
}

控制器配置

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

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

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

【问题讨论】:

    标签: php codeigniter phpunit


    【解决方案1】:

    我不明白为什么你有 3 个相同的表格,但是好的......为什么不呢。它可以是一种继续的方式(使用相同的验证方法以避免重复代码)。

    有不同的方式进行:

    1) 对当前位置使用隐藏输入:

    myform1.php

    <?php echo validation_errors(); ?>
    
    <?php echo form_open('con/validate_form'); ?>
    
    <h5>Username</h5>
    <input type="text" name="username" value="" size="50" />
    
    <h5>Password</h5>
    <input type="text" name="password" value="" size="50" />
    
    <h5>Password Confirm</h5>
    <input type="text" name="passconf" value="" size="50" />
    
    <h5>Email Address</h5>
    <input type="text" name="email" value="" size="50" />
    
    <input type="hidden" name="redirect_to" value="<?php echo current_url(); ?>" />
    <div><input type="submit" name='submit1' value="Submit1" /></div>
    
    </form>
    
    </body>
    </html>
    

    控制器 > validate_form() 方法:

    public function validate_form()
    {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('firstname', 'First name', 'required');
    
        if ($this->form_validation->run() == FALSE)
        {
            $redirect_to = $this->input->post('redirect_to');
            redirect($redirect_to);
        }
        else
        {
            $this->register();
        }
    }
    

    但这并不完美,因为使用redirect() 方法你不能轻易地重新填充表单。

    2) 这就是为什么我们通常不使用validate_form()

    您想发布一个表单,对其进行验证,然后在验证失败时再次显示表单并显示验证错误,或者如果验证通过则调用 register 方法。

    执行此操作的最佳方法是将表单发回给自身。这样,在您的方法中,您可以检查表单是否已提交,并确定要执行的操作:

    public function myform1()
    {
        $this->load->library('form_validation');
    
        $this->form_validation->set_rules('username', 'Username', 'required');
        $this->form_validation->set_rules('password', 'Password', 'required');
    
        if ($this->form_validation->run() == FALSE)
        {
            $this->load->view('myform');
        }
        else
        {
            $this->register();
        }
    }
    

    观点:

    <html>
    <head>
    <title>My Form 1</title>
    </head>
    <body>
    
    <?php echo validation_errors(); ?>
    
    <?php echo form_open('con/myform1'); ?>
    
    <h5>Username</h5>
    <input type="text" name="username" value="" size="50" />
    
    <h5>Password</h5>
    <input type="text" name="password" value="" size="50" />
    
    <h5>Password Confirm</h5>
    <input type="text" name="passconf" value="" size="50" />
    
    <h5>Email Address</h5>
    <input type="text" name="email"  value="" size="50" />
    
    <div><input type="submit" name-'submit' /></div>
    
    </form>
    
    </body>
    </html>
    

    【讨论】:

      【解决方案2】:

      我所做的是为不同类型的表单错误创建一个错误文件夹..... 对于 form_validation 错误,我将其重定向到特定的错误页面... 它对我来说很好用....

      我也觉得您可能正在尝试将同一个控制器用于多个表单视图... 这造成了一个问题.....

      我认为您的联系人和登录表单都具有相同的重定向控制器 con/myform1.... 看看吧……

      希望对您有所帮助....

      【讨论】:

      • “我也觉得你可能试图对多个表单视图使用相同的控制器......这会产生一个问题......” 是的,完全正确。这不是一个好的解决方案。
      猜你喜欢
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-29
      • 2013-11-05
      • 1970-01-01
      • 2020-05-24
      相关资源
      最近更新 更多