1

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

这是生成数组的代码和我试图开始工作的 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>';
}
4

3 回答 3

0

因此,与其获取数据库中的所有用户然后逐个迭代以检查密码,不如告诉 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_ 函数已被弃用,我将它们留在那里以保持您的代码完整并向您展示细微的差异。

于 2013-10-06T16:08:27.117 回答
0

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

于 2013-10-06T16:14:20.620 回答
0

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

    <?php
    $username = preg_replace('/[^a-zA-Z0-9]/','',$_POST['username']);
    $password = base64_encode($_POST['password']);

    $mysqli = 新 mysqli($dbc); //设置数据库连接

    $sql = $mysqli->query("SELECT * from users where `username` = '$username'");
    $num = $sql->num_rows;
    如果 ($num) {
        //找到用户
        $row = $sql->fetch_assoc();
        if($password != $row['password']) {
            echo "密码错误";
        }
        别的 {
            // 数组中的用户数据
            打印_r($行);
        }
    }
    别的 {
        echo "找不到用户";
    }
    $mysqli->关闭();
    ?>

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

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

于 2013-10-06T16:25:35.930 回答