当我访问数据库时,我可以获取用户文件的数组。 我缺少的是如何使用该数组来验证用户的输入。 该数组还包含我需要捕获并在以后的页面上使用的另一段数据?
这是生成数组的代码,也是我试图开始工作的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']);
我总是对此输入使用加密。