如何将数据库的内容与输入进行比较?

时间:2013-09-26 18:46:30

标签: php mysql sql database session

我知道我可以连接到数据库。我在修改代码之前检查了它。

当管理员登录时,我想重定向到tableedit.php,但如果用户不是管理员,我想重定向到tableuser.php

这是错误:

  

警告:mysql_fetch_array()要求参数1为资源,字符串在第47行的C:\ xampp \ htdocs \ joy \ inventory \ login.php中给出       查询失败

以下是代码:

//Create query
$qry="SELECT * FROM user WHERE username='$username' AND password='".md5($_POST['password'])."'";

while($row=mysql_fetch_array($qry));

$result = $row['username'];
{
//Check whether the query was successful or not
if($result) {
    if(mysql_num_rows($result)== 'admin'){
        session_regenerate_id();
        $member = mysql_fetch_assoc($result);
        $_SESSION['SESS_MEMBER_ID'] = $member['id'];
        $_SESSION['SESS_FIRST_NAME'] = $member['username'];
        $_SESSION['SESS_LAST_NAME'] = $member['password'];
        session_write_close();
        header("location: tableedit.php");
        exit();
    }
    elseif(mysql_num_rows($result) != 'admin') {
        //Login Successful   
        session_regenerate_id();
        $member = mysql_fetch_assoc($result);
        $_SESSION['SESS_MEMBER_ID'] = $member['id'];
        $_SESSION['SESS_FIRST_NAME'] = $member['username'];
        $_SESSION['SESS_LAST_NAME'] = $member['password'];
        session_write_close();
        header("location: tableuser.php");
        exit();
    } else {
        //Login failed
        $errmsg_arr[] = 'Username and password not found.';
        $errflag = true;
        if($errflag) {
            $_SESSION['ERRMSG_ARR'] = $errmsg_arr;
            session_write_close();
            header("location: index.php");
            exit();
        }
    }
} else {
    die("Query failed");
}}

3 个答案:

答案 0 :(得分:0)

首先应该执行mysql_query并将结果放入数组中。在此之后:

   $qry="SELECT * FROM user WHERE username='$username' AND
         password='".md5($_POST['password'])."'";

这样做:

$result = mysql_query($qry);

接下来,

 while($row = mysql_fetch_array($result)){
    // stuff
    }

此外,建议您使用md5的盐以获得良好的安全性。进一步补充, 您可以使用sha1来获得更好的安全性

答案 1 :(得分:0)

mysql_fetch_array期望将MySQL资源作为参数。资源是从mysql_query返回的,所以它应该是

$qry = 'YOUR QUERY';
$res = mysql_query($qry);
while ($row = mysql_fetch_array($res))

和... mysql_num_rows将永远不会返回'admin'(它返回整数,给定资源中的行数),因此您将始终重定向到tableuser.php

在这种情况下你不需要“elseif”,“else”在这里会很棒:)

,为什么mysql_ *起作用?试试PDO :)

答案 2 :(得分:0)

您的代码存在许多问题......许多mysql_*函数的运行方式与您认为它们没有相同,您使用哪些资源来学习?

对于大多数PHP功能,您可以访问:http://php.net/FUNCTION_NAME

示例:

  1. http://php.net/mysql_query
  2. http://php.net/mysql_num_rows
  3. http://php.net/mysql_fetch_array
  4. 代码

    以下代码可以帮助您入门。您可以在相关位置添加所有$_SESSION内容(请参阅注释)。

    $password = md5($password);
    $qry= mysql_query("SELECT * FROM user WHERE username='$username' AND password='$password'");
    if(mysql_num_rows($qry)){
        while($row = mysql_fetch_array($qry)){
            if($row['uername'] == 'admin'){
                //The user IS the admin
                header('location:tableedit.php');
            }
            else{
                //The user is NOT admin
                header('location:tableuser.php');
            }
        }
    }
    else{
        //Login failed
        header('location:/');
    }
    
    exit; //Only need this once at the end
    

    的mysqli ::

    我强烈建议您考虑更改为mysqli(或PDO)...如果您这样做,以下内容可以帮助您:

    $mysqli = new mysqli('localhost', 'USERNAME', 'PASSWORD', 'DATABASE'); //Replace USERNAME, PASSWORD, DATABASE to the actual database username etc.
    
    $password = md5($password);
    $qry= $mysqli->query("SELECT * FROM user WHERE username='$username' AND password='$password'");
    if($qry->num_rows){
        while($row = $qry->fetch_assoc()){
            if($row['uername'] == 'admin'){
                //The user IS the admin
                header('location:tableedit.php');
            }
            else{
                //The user is NOT admin
                header('location:tableuser.php');
            }
        }
    }
    else{
        //Login failed
        header('location:/');
    }
    
    exit; //Only need this once at the end
    

    有关详细信息,请查看文档:

    1. http://php.net/mysqli_query
    2. http://php.net/mysqli_num_rows
    3. http://php.net/mysqli_fetch_assoc
    4. http://php.net/mysqli