将表单值与数据库中的所有值匹配

时间:2011-10-13 17:18:40

标签: php

所以我的学习让我想到了这个小问题。 (香港专业教育学院已经进入了一个坚实的月份,所以如果我不完全清楚,我会道歉)

我有一个由用户名和传递组成的小表单。

    <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。

2 个答案:

答案 0 :(得分:3)

您不需要(并且您不应该)从数据库表中获取所有数据并迭代所有结果以进行此类检查。为什么呢?

  • 这很慢且耗费资源
  • 这不是很安全
  • 数据库引擎可以更好地搜索数据库中的内容(它们是针对这种任务的)
  • 在大型数据库中,您可能会填写所有允许的内存以执行PHP脚本(这将返回错误)。

尝试更具体的SQL并使用您的数据库引擎功能,如下所示:

$query = "SELECT user_id FROM accounts WHERE username = :username";

答案 1 :(得分:1)

您应该限制结果,而不是返回所有帐户。

$dbq = "SELECT * FROM accounts WHERE username = '$name';";

然后查看返回的结果是否为空,如果没有,则根据查询返回的密码检查密码。

编辑: 嘿,我不会不甘示弱,为什么你不应该做OP可能不知道他能做的事情,因为我比他更了解......所以你应该检查SQL注入,如果你要放在您的查询中输入文本。(希望通过添加更多内容并复制之前的答案,我可能会得到更多的赞成。)