php associative array用户名第一个字母

时间:2018-03-11 13:07:18

标签: php associative-array

$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" ??

3 个答案:

答案 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在这里有帮助。 (当然,您需要提前散列并存储这些内容。)