使用数组验证登录名和密码


Using an Array to verify login and password

当我访问数据库时,我可以获取用户文件的数组。 我缺少的是如何使用该数组来验证用户的输入。 该数组还包含我需要捕获并在以后的页面上使用的另一段数据?

这是生成数组的代码,也是我试图开始工作的foreach的一部分。 我走在正确的轨道上吗?

$sql = "SELECT * from users;";
$result = mysql_query($sql, $dbc); //run the query
if ($result)
{
    $html .= '<h2>Result Found </h2>'.PHP_EOL; 
    //Grab arrays from the result
    for($i = 0; $i < mysql_num_rows($result); $i++)
    {
        $array = mysql_fetch_array($result, MYSQL_ASSOC);
        print_r($array);
        foreach ('username' as $inputUsername){
        echo 'password';
    }
    }
}
else
{
    $html .= '<h2>Error: '.mysql_error().' </h2>';
}

因此,与其获取数据库中的所有用户然后逐个迭代以检查密码,不如告诉MySQL"给我用户名为exampleuser的用户的密码",如下所示:

$username = "exampleuser";
$sql = "SELECT `password` from users where `username` = '$username';";
$result = mysql_query($sql, $dbc); //run the query
if ($result)
{
    $row = mysql_fetch_assoc($result);
    $password = $row['password'];
    echo '<h2>Result Found '.$password.'</h2>'.PHP_EOL;
}
else
{
    echo '<h2>No user found, or Error: '.mysql_error().' </h2>';
}

附带说明请注意,mysql_函数已被弃用,我将它们留在那里以保持代码完整并向您展示细微差异。

您需要尽快更改为PDO或mysqli用法(mysql将被弃用)。此外,当您可以使用SELECT * from users WHERE username = $username;时,无需使用SELECT * from users。当您有许多记录时,它可以减少工作量。

我在应用程序中创建了这段代码。希望这会有所帮助。

   <?php    $username = preg_replace('/[^a-zA-Z0-9]/','',$_POST['用户名']);    $password = base64_encode($_POST["密码"]);    $mysqli = new mysqli($dbc);设置数据库连接    $sql = $mysqli->query("从用户中选择 *,其中 '用户名' = '$username'");    $num = $sql->num_rows;    如果 ($num) {        找到用户        $row = $sql->fetch_assoc();        if($password != $row['password']) {            回显"密码错误";        }        否则 {            数组中的用户数据            print_r($row);        }    }    否则 {        回显"找不到用户";    }    $mysqli->close();    ?>

preg_replace('/[^a-zA-Z0-9]/','',$_POST['username']) -> 以防止不必要的输入

base64_encode($_POST['password']); 我总是对此输入使用加密。