$array=array("sam"=>"andy");
$user="sam";
$pass="andy";
if(!in_array($user,$array)) //line no 5
{
echo "please register";
}
else
{
if($array[$user]==$pass)
{
echo "welcome";
}
}
我应该在第5行进行哪些更改,因此用户将是" sam"不是" sam => andy" ??
答案 0 :(得分:0)
当您呼叫in_array()
时,它会检查针是否存在于haystack(数组)的值中,而不是密钥中。因此,它将检查" sam"存在于一个为此目的的数组中只是[" andy"]。我想你想检查一下:
if (!in_array($user, array_keys($array)))
(需要注意的是我真的希望这不是生产代码)
答案 1 :(得分:0)
这是一种更合适的方式
<?php
$users = array(
"sam" => "andy"
);
$username="sam";
$password="andy";
$errorMessage = 'invalid username or password received';
if (array_key_exists($username, $users) === false) {
echo $errorMessage;
exit;
}
$intendedPassword = $users[$username];
if ($intendedPassword !== $password) {
echo $errorMessage;
exit;
}
echo 'Hello ' . $username . ' and welcome to my beautiful web-site!';
答案 2 :(得分:0)
<?php
$user_credentials=array(
"sam"=> password_hash("foo", PASSWORD_DEFAULT),
"dan"=> password_hash("bar", PASSWORD_DEFAULT)
);
$check_credentials = function($user, $password) use ($user_credentials)
{
if(!array_key_exists($user, $user_credentials))
echo "Unknown user.\n";
else
if(password_verify($password, $user_credentials[$user]))
echo "Good credentials.\n";
else
echo "Invalid password.\n";
};
foreach(
[
["sam", "baz"],
["sam", "foo"],
["peter", "parker"]
]
as list($username, $password)
) $check_credentials($username, $password);
输出:
Invalid password.
Good credentials.
Unknown user.
注意建议存储用户密码的盐渍哈希值,password_hash在这里有帮助。 (当然,您需要提前散列并存储这些内容。)