【问题标题】:php associative array username first letterphp关联数组用户名首字母
【发布时间】:2018-03-11 13:07:18
【问题描述】:
$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”??

【问题讨论】:

  • !isset($array[$user])
  • 看来你正在开发一个身份验证系统 LOL。但是,假设您有一个数组,其中键是用户名,值是其密码,然后您要检查用户名是否存在(第 5 行),然后继续检查密码是否匹配等;只需将第 5 行更改为 if (!isset($array($user))) 以检查用户名是否在 $array 中定义。这是一个非常有趣的功能。 :D
  • @vietanhyt - 这是一个非常有趣的功能:$array($user) - 哈哈。

标签: php associative-array


【解决方案1】:

这将是一种更合适的方式

<?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】:

    当您调用in_array() 时,它会检查针是否存在于干草堆(数组)的 中,而不是键中。因此它将检查“sam”是否存在于为此目的的数组中,只是[“andy”]。我想你想检查一下:

    if (!in_array($user, array_keys($array)))
    

    (需要注意的是,我真的希望这不是生产代码)

    【讨论】:

    • 或者array_key_exists
    【解决方案3】:
    <?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 在这里有帮助。 (当然你会提前散列和存储这些。)

    【讨论】:

      猜你喜欢
      • 2021-04-02
      • 2018-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多