使用$ _GET与PHP if语句和MYSQL

时间:2014-02-03 14:27:24

标签: php mysql get

所以我在PHP登录网站上遇到了这个语句背后的逻辑问题。这是代码:

mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$results=mysql_query("SELECT temporary_password FROM $tbl_name");
$row = mysql_fetch_array($results);

if($_GET['temp_password'] != $row['temporary_password'] && $_GET['temp_username'] != $row['temporary_username']){
    mysql_close();
    header("Location: index.php");
}

基本上我有一个注册网页,只有当用户URL包含temp_username和temp_password并且这两个变量都存在于数据库中时才能访问。目前我可以使用OR(||)而不是AND(&&)来使用此语句只有当密码或用户名存在时此语句才有效,但我希望只有当temp_username和temp_password都为true时,此人才能访问此站点,否则转发到索引页面。

我的逻辑出了什么问题?

P.S。我知道mysql_ *不安全,我目前没有时间过渡到mysqli。

4 个答案:

答案 0 :(得分:1)

您的查询应该是:

$results=mysql_query("SELECT temporary_password,temporary_username FROM $tbl_name");

或者你可以这样:

$results=mysql_query("SELECT temporary_password,temporary_username FROM $tbl_name where temporary_username = '".$_GET['temp_username']."'");

由于您没有从数据库中选择temporary_username,因此它不会检查if条件中的最后一个条件。

它适用于OR条件,而不适用于AND。

所以使用上面的查询,它也适用于And condition。

答案 1 :(得分:0)

鉴于:

if($_GET[...snip...] && $_GET['temp_username'] != $row['temporary_username']){
                                                        ^^^^^^^^^^^^^^^^^^---this

你认为你不想添加它吗?

$results=mysql_query("SELECT temporary_password FROM $tbl_name");
                                               ^----- here?

答案 2 :(得分:0)

您需要检查数据库中的用户名和密码

$results=mysql_query("SELECT temporary_password FROM $tbl_name where temp_username = $_GET['temp_username'] AND temporary_password = $_GET['temp_password'] ");

然后如果两者都匹配,则授予其访问权限,否则重定向到index.php 或者最好检查rowcount >0

 if($_GET['temp_password'] == $row['temporary_password'] && $_GET['temp_username'] == $row['temporary_username']){
       // access granted
    }
else {
    //wrong credential
        header("Location: index.php");
}

你应该使用pdo或mysqli,因为不推荐使用mysql_ *

答案 3 :(得分:0)

您应该在查询中添加WHERE语句:

"SELECT count(*) from $tbl_name WHERE temporary_username = :username AND temporary_password = :password"