1

我在登录表单中使用了 Codeigniter 4 表单验证。此外,验证表单运行良好或良好。加载登录页面时,在该导入字段之前也显示错误。在下面,我插入了与登录部分相关的控制器和视图代码。我检查了不同的方法,但我没有办法解决这个问题。请指导我解决它。

用户控制器:

<?php namespace App\Controllers;

use App\Models\UserModel;

class User extends BaseController
{
    public function index()
    {
        echo "User index";
        // Load views
//        echo view('static/header');
//        echo view('front/all');
//        echo view('static/footer');
    }

    public function login()
    {
        helper('form');

        $val = $this->validate([
            'username' => 'required',
            'password' => 'required',
        ]);

        if (!$val)
        {
            echo view('front/login', [
                'validation' => $this->validator
            ]);
        }
        else
        {
            return redirect()->to('/');
        }

    }

    public function logout()
    {

    }

    public function register()
    {
        // Load views
        echo view('front/register');
    }
}

login.php(登录页面视图):

<body>
<?= \Config\Services::validation()->listErrors(); ?>
<div class="limiter">
    <div class="container-login100">
        <div class="wrap-login100 p-b-160 p-t-50">
            <?php echo form_open(base_url('user/login'),array('class'=>'login100-form validate-form')); ?>
                    <span class="login100-form-title p-b-43">
                        Login Form
                    </span>

                <div class="wrap-input100 rs1 validate-input">
                    <input class="input100" type="text" name="username">
                    <span class="label-input100">User Name</span>
                </div>


                <div class="wrap-input100 rs2 validate-input">
                    <input class="input100" type="password" name="password">
                    <span class="label-input100">Password</span>
                </div>

                <div class="container-login100-form-btn">
                    <button class="login100-form-btn" type="submit">
                        Login
                    </button>
                </div>

                <div class="text-center w-full p-t-23">
                    <a href="#" class="txt1">
                        Forget Password?
                    </a>
                </div>

                <div class="text-center w-full p-t-23">
                    <a href="<?php echo base_url('user/register'); ?>" class="txt1">
                        SignUp
                    </a>
                </div>
            </form>
        </div>
    </div>
</div>

</body>

输出(登录页面首次访问): localhost/user/login

4

2 回答 2

1

根据我对您问题的理解,您总是遇到错误。您的预期行为是仅在您发布空的用户名和密码时出现错误。

解决方案:您必须在表单发布时运行验证。

描述 在您的代码中,在显示表单之前,您正在验证数据。这显然是空的。以下是解决方案,使用以下代码更改您的登录功能。(这不是最佳解决方案,但它会清除您的概念)。


    public function login()
    {
        helper('form');

        $val = null;

        if($this->request->getMethod() === 'post') {// checking if request is post
            $val = $this->validate([
                'username' => 'required',
                'password' => 'required',
            ]);
        }


        if (!$val)
        {
            echo view('front/login', [
                'validation' => $this->validator
            ]);
        }
        else
        {
            return redirect()->to('/');
        }

    }
于 2020-03-29T20:37:50.230 回答
1

这是验证表单并在表单出错时保留值的简单解决方案

控制器

public function form()
{
    $validation =  \Config\Services::validation();
    $validation->setRules([
    'email' => 'required',
    'password' => 'required',
    ]);

    if($validation->withRequest($this->request)->run())
    {
         //valid form
    }
    else
    {
      return redirect('')->withInput();
    }
}

看法

<form method="post" action="<?= base_url('');?>">
    <input type="email" name="email" value="<?= old('email') ?>">
     <input type="password" name="password" value="<?= old('password') ?>">
     <button type="submit" name="submit">Submit</button>
</form>
于 2020-08-18T04:03:47.687 回答