我想對Codeigniter 4中的登錄活動進行驗證,登錄功能運行正常,但是驗證有問題。當我嘗試輸入一個不存在的用戶名時,會出現一個錯誤并且說“嘗試訪問 null 型別值的陣列偏移量”
這是我的完整代碼:
public function index()
{
$M_admin = new \App\Models\M_admin();
$login = $this->request->getPost('login');
if ($login) {
$member_username = $this->request->getPost('member_username');
$member_password = $this->request->getPost('member_password');
if ($member_username == '' or $member_password == '') {
$err = "Please insert username and password";
}
if(empty($err)) {
$dataMember = $M_admin->where("unm",
$member_username)->first();
if ($dataMember['unm'] != $member_username
){
$err="Username does not exist";
}else
if ($dataMember['u_p'] != $member_password
){
$err="Incorrect password";
}
}
if(empty($err)){
$dataSesi = [
'member_id' => $dataMember['id'],
'member_username' => $dataMember['unm'],
'member_password' => $dataMember['u_p'],
];
session()->set($dataSesi);
return redirect()->to('dashboard');
}
if ($err) {
session()->setFlashdata('member_username', $member_username);
session()->setFlashdata('error', $err);
return redirect()->to("login");
}
}
return view('v_login');
}
錯誤的原因在這里:
if ($dataMember['unm'] != $member_username
){
$err="Username does not exist";
}
我的代碼有問題嗎?一個有用的答案將意味著很多,謝謝...
uj5u.com熱心網友回復:
由于您沒有“firstOrFail”函式,因此您應該在代碼周圍添加一個 try catch
$dataMember = $M_admin->where("unm",
$member_username)->first();
如果用戶不存在,您可能不想執行完整的檢查程序,您也可以添加一個簡單的“if(!empty($dataMember))”,但在控制器中添加太多邏輯可能不是最好的方式,至少你應該創建一個私有函式來執行完整的檢查邏輯并回傳“true”或“err = “your_error_message”
希望我的回答能幫到你。:)
uj5u.com熱心網友回復:
該條件if ($dataMember['unm'] != $member_username)沒有意義,因為您正在根據此值查詢資料。
$dataMember = $M_admin->where("unm", $member_username)->first();
如果您從此方法得到結果,$dataMember['unm']則必須等于$member_username。
您需要做的是檢查變數$dataMember是否為空。
if (empty($dataMember)) {
$err = "Username does not exist";
} elseif ($dataMember['u_p'] != $member_password) {
$err = "Incorrect password";
}
uj5u.com熱心網友回復:
[已解決] 我在驗證之前進行空值檢查,所以代碼如下所示
if (empty($err)) {
$dataMember = $M_admin->where("unm", $member_username)->first();
if (empty($dataMember)) {
$err = "Invalid Username!";
} else
if ($dataMember['u_p'] != SHA1($member_password)) {
$err = "Incorrect Password1";
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/487048.html
標籤:php 验证 条件语句 codeigniter-4
