所以我的学习让我想到了这个小问题。 (香港专业教育学院已经进入了一个坚实的月份,所以如果我不完全清楚,我会道歉)
我有一个由用户名和传递组成的小表单。
<form method="post" action="proc.php">
<table>
<tr>
<td>Username:</td>
<td><input type="text" name="user" id="user"></td>
</tr>
<tr>
<td>password:</td>
<td><input type="text" name="password" id="password"></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="submit"></td>
</tr>
</table>
</form>
我在db列中有相应的值。
我想要做的是,我试图检查表单字段中输入的名称与数据库列的所需值。
所以当我这样做只测试db中的一个值(第一个值正弦不循环)时,它可以工作并让我进入:
$dbq = "SELECT * FROM accounts;";
$dbqDoIt = mysqli_query($connect2db, $dbq)or die("error".mysqli_error($connect2db));
$getNames = mysqli_fetch_array($dbqDoIt);
//check if user acc. exists inside vSpot database.
if(($name !== $getNames['username']) || ($pass !== $getNames['password'])){
header("Location:index.php"); /* Redirect browser */
用于测试我的while循环...(因为新的lol),当我这样做时:
$nums = array(1,2,3,4,5);
for($i=0; $i<6; $i++){
if($nums[0] < 6 ) echo $i . '<br/>';
}
它起作用并列出数字1-5。
现在当我尝试循环db for names / pass时,它不起作用。 像这样:
while($getNames = mysqli_fetch_array($dbqDoIt)){
//check if user acc. exists inside my database.
if(($name !== $getNames['username']) || ($pass !== $getNames['password'])){
header("Location:index.php"); /* Redirect them to log in */
}
}
关于为什么不检查所有值的任何想法?我确定我错过了一些东西。
任何提示,建议等都很高兴欣赏。 谢谢你的推荐
somdow。
答案 0 :(得分:3)
您不需要(并且您不应该)从数据库表中获取所有数据并迭代所有结果以进行此类检查。为什么呢?
尝试更具体的SQL并使用您的数据库引擎功能,如下所示:
$query = "SELECT user_id FROM accounts WHERE username = :username";
答案 1 :(得分:1)
您应该限制结果,而不是返回所有帐户。
$dbq = "SELECT * FROM accounts WHERE username = '$name';";
然后查看返回的结果是否为空,如果没有,则根据查询返回的密码检查密码。
编辑: 嘿,我不会不甘示弱,为什么你不应该做OP可能不知道他能做的事情,因为我比他更了解......所以你应该检查SQL注入,如果你要放在您的查询中输入文本。(希望通过添加更多内容并复制之前的答案,我可能会得到更多的赞成。)