我創建了一個條件來檢查名稱和密碼是否正確,這里唯一的問題是當我測驗它時,它與我想要的完全相反。不管我是對還是錯,訊息始終是“您已成功登錄”。我使用 PDO 只是為了知道
<?php
include('connection.php');
$name = $_POST['name'];
$password = $_POST['password'];
$data = $_POST;
$statment = $connection->prepare('SELECT * FROM registration WHERE name = :name AND password = :password');
if($statment){
$result = $statment->execute([
':name' => $data['name'],
':password' => $data['password']
]);
}
if($data['name'] == $name && $data['password'] == $password){
echo 'You have successfuly logged in';
}else {
die('Incorrect username or password');
}
?>
uj5u.com熱心網友回復:
您使腳本過于復雜.. 最簡單的方法是系結并執行.. 然后您可以簡單地檢查是否有任何行,然后與data從執行的陳述句創建的陣列進行比較。
<?php
include('connection.php');
$name = $_POST['name'];
$password = $_POST['password'];
$statment = $connection->prepare("SELECT name, password FROM registration
WHERE name = ? AND password = ?");
$statment ->bind_param("ss", $name, $password);
$statment ->execute();
$result = $stmt->get_result();
if ($result ->num_rows > 0) {
$data = $result->fetch_array();
}else{
echo "No results found";
}
if($data['name'] == $name && $data['password'] == $password){
echo 'You have successfuly logged in';
}else {
die('Incorrect username or password');
}
?>
(請記住,我是徒手寫的,還沒有經過測驗或除錯,但主體在那里)
旁注
話雖如此..您永遠不應該將密碼存盤在開放的“文本”欄位中。你應該加密它們。最簡單的方法是使用bcrypt構建散列:
$options = [
'cost' => 12,
];
$newPass = password_hash($pass, PASSWORD_BCRYPT, $options);
并將其存盤在您的資料庫中..然后您可以像這樣比較它..
if (password_verify($pss, $pwdCheck)
$pss是從表單中發送的 .. 并且$pwdCheck是您從資料庫中選擇的散列 - 帶入您當前的代碼集中,看起來像:
if($data['name'] == $name && password_verify($password, $data['password']){
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/525338.html
下一篇:MethodNotAllowedHttpExceptionatRouteCollection->methodNotAllowed(array('POST'))
