サイトにパスワードで保護されたエリアを構築しようとしています。ただし、私のif
ステートメントでは、配列が空かどうかを判断するのに苦労しています。コードが実行されると、ユーザー/パス フィールドに何が入力されても、常に true としてテストされます。参考までに、アクセスされているデータベースには、1 つのユーザー/パス コンボを含む 1 つの行しかありません。
function verify(){
$dbhost = "host";
$dbname = "db";
$dbuser = "user";
$dbpass = "password";
if (isset($_SESSION['valid_user']))return true;
$user_name = $_POST["user_name"];
$password = $_POST["password"];
if ($user_name && $password){
try{
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
}
catch(PDOException $pe){
die('Connection error, because: ' .$pe->getMessage());
}
$sql = "SELECT user_name FROM users WHERE user_name = ':user_name' AND password = ':password'";
$q = $conn->prepare($sql);
if(!$q){
die("Execute query error, because: ". $conn->errorInfo());
};
$q->execute(array(':user_name'=>$user_name, ':password'=>$password));
$result = $q->fetchALL();
if ($result['user_name']=$user_name){
$valid_user = $user_name;
$_SESSION['valid_user'] = $valid_user;
return true;
}
else{
$text = "User Name and Password did not match";
write_log_in($text);
}
}
else {
$text = "This is a secure server. Please log in.";
write_log_in($text);
}
}
補足として、パスワードは少なくとも MD5 ハッシュ形式または同様のもので保存する必要があることを認識しています。さらに何かを追加する前に、それをまったく機能させたかっただけです。