簡體   English   中英

如何驗證 codeigniter 中的表單數據 4

[英]how to validate form data in codeigniter 4

我是 codeigniter 4 的新手,我目前正在建立一個注冊表單。 當我提交注冊表格時,即使我用正確的數據填寫所有字段,它也會給出必填字段的錯誤。

這是我的代碼片段

function register() {
        $data = [];
        helper(['form']);
        if($this->request->getMethod() == "post"){
            $validation =  \Config\Services::validation();

            $validation->setRules([
                "firstname" => ["label" => "First Name", "rules" => "required|min_length[3]|max_length[20]"],
                "lastname" => ["label" => "Last Name", "rules" => "required|min_length[3]|max_length[20]"],
                "email" => ["label" => "Email", "rules" => "required|min_length[3]|max_length[20]|valid_email|is_unique[users.email]"],
                "password" => ["label" => "Password", "rules" => "required|min_length[8]|max_length[20]"],
                "password_confirm" => ["label" => "Confirm Password", "rules" => "matches[password]"],
            ]);

            if($validation->run()){
                
                $user = new UserModel();
                $userdata = [
                    "firstname" => $this->request->getVar("firstname"),
                    "lastname" => $this->request->getVar("lastname"),
                    "email" => $this->request->getVar("email"),
                    "password_confirm" => $this->request->getVar("password_confirm"),
                ];
                $user->save($userdata);
                $session = session();
                $session->setFlashData("success", "Successful Registration");
                return redirect()->to('/');


            }else{
                $data["validation"] = $validation->getErrors();
            }

        }


        echo view('templates/header', $data);
        echo view('register');
        echo view('templates/footer');
    }

這是我要驗證的注冊表。

<form class="" action="/register" method="post">
          <div class="row">
            <div class="col-12 col-sm-6">
              <div class="form-group">
               <label for="firstname">First Name</label>
               <input type="text" class="form-control" name="firstname" id="firstname" value="<?= set_value('firstname') ?>">
               <small class="text-danger"><?= isset($validation) ? $validation['firstname'] : null;  ?></small>
              </div>
            </div>
            <div class="col-12 col-sm-6">
              <div class="form-group">
               <label for="lastname">Last Name</label>
               <input type="text" class="form-control" name="lastname" id="lastname" value="<?= set_value('lastname'); ?>">
               <small class="text-danger"><?= isset($validation) ? $validation['lastname'] : null ;  ?></small>
              </div>
            </div>
            <div class="col-12">
              <div class="form-group">
               <label for="email">Email address</label>
               <input type="text" class="form-control" name="email" id="email" value="<?= set_value('email') ?>">
               <small class="text-danger"><?= isset($validation) ? $validation['email'] : null ;  ?></small>
              </div>
            </div>
            <div class="col-12 col-sm-6">
              <div class="form-group">
               <label for="password">Password</label>
               <input type="password" class="form-control" name="password" id="password" value="">
               <small class="text-danger"><?= isset($validation) ?  $validation['password'] :null ; ?></small>
             </div>
           </div>
           <div class="col-12 col-sm-6">
             <div class="form-group">
              <label for="password_confirm">Confirm Password</label>
              <input type="password" class="form-control" name="password_confirm" id="password_confirm" value="">
              <small class="text-danger"><?= isset($validation) ?  $validation['password_confirm'] :null ; ?></small>
            </div>
          </div>
          </div>

          <div class="row">
            <div class="col-12 col-sm-4">
              <button type="submit" class="btn btn-primary">Register</button>
            </div>
            <div class="col-12 col-sm-8 text-right">
              <a href="/">Already have an account</a>
            </div>
          </div>
        </form>

這是output,即使我填寫了所有字段。

試試這種風格

function register()
{
    $data = [];
    helper(['form']);
    if ($this->request->getMethod() == "post") {
        $validation =  \Config\Services::validation();

        $rules = [
            "firstname" => [
                "label" => "First Name", 
                "rules" => "required|min_length[3]|max_length[20]"
            ],
            "lastname" => [
                "label" => "Last Name", 
                "rules" => "required|min_length[3]|max_length[20]"
            ],
            "email" => [
                "label" => "Email", 
                "rules" => "required|min_length[3]|max_length[20]|valid_email|is_unique[users.email]"
            ],
            "password" => [
                "label" => "Password", 
                "rules" => "required|min_length[8]|max_length[20]"
            ],
            "password_confirm" => [
                "label" => "Confirm Password", 
                "rules" => "matches[password]"
            ]
        ];

        if ($this->validate($rules)) {

            $user = new UserModel();
            $userdata = [
                "firstname" => $this->request->getVar("firstname"),
                "lastname" => $this->request->getVar("lastname"),
                "email" => $this->request->getVar("email"),
                "password_confirm" => $this->request->getVar("password_confirm"),
            ];
            $user->save($userdata);
            $session = session();
            $session->setFlashData("success", "Successful Registration");
            return redirect()->to('/');
        } else {
            $data["validation"] = $validation->getErrors();
        }
    }


    echo view('templates/header', $data);
    echo view('register');
    echo view('templates/footer');
}

只需將您的規則放入一個數組並將其傳遞給 controller 驗證 function ..

我希望這是工作

如果您想始終驗證進入該 model 的數據,您可能需要考慮在 model 內進行驗證:

https://codeigniter.com/user_guide/models/model.html#validating-data

如果你想驗證 model 之外的數據,你必須告訴驗證服務數據在哪里,因為它可以是 POST、GET 甚至只是你從其他東西獲得的數組。

在您的情況下,您需要使用您的請求驗證數據。

https://codeigniter.com/user_guide/libraries/validation.html?highlight=validation#withrequest

所以你的驗證碼應該是這樣的:

if($validation->withRequest($this->request)->run()){ }

這將在 GET 和 POST 中查找數據。

如果你想指定並且只使用 POST

if($validation->withRequest($this->request->getPost())->run()){ }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM