0

我正在尝试创建一个登录页面,但我遇到了未发送数据的问题。谁能帮我吗。

  $myusername = stripslashes($username);
    $mypassword = stripslashes($password);
    $myusername = mysqli_real_escape_string($myusername);
    $mypassword = mysqli_real_escape_string($mypassword);

    $sql="SELECT * FROM login_admin WHERE user_name='$myusername' and user_pass=SHA1('$mypassword')";
    $result=mysql_query($dbC, $sql);
    // Mysql_num_row is counting table row
    $count=mysql_num_rows($result);
    // If result matched $myusername and $mypassword, table row must be 1 row
    if($count==1){
        // Register $myusername, $mypassword and redirect to file "admin.php"
        session_register("admin");
        session_register("password");
        $_SESSION['name']= $myusername;
        header("location:admin.php");
    }
    else {

        $msg = "$username $password $myusername $mypassword $sql $result Wrong Username or Password. Please retry";
        header("location:login.php?msg=$msg");
    }

我得到的输出是:test test123 SELECT * FROM login_admin WHERE user_name=\'\' and user_pass=SHA1(\'\') Wrong Username or Password。请重试

4

2 回答 2

0

您必须提供 $link 标识符作为mysqli_real_escape_string中的第一个参数,因此这些行看起来更像

$myusername = mysqli_real_escape_string($dbconn,$myusername);
$mypassword = mysqli_real_escape_string($dbconn,$mypassword);

其中 $dbconn 是您从中获取的链接mysqli_connect。如果您要切换到 mysqli_* 函数集,那么当您应该使用它们的 mysqli_ 等效项时,您也会使用 mysql_query 和 mysql_num_rows。

我强烈建议切换到 mysqli(或 PDO)而不是使用(现在是旧的)mysql 函数。PHP.net 提供了有关原因的信息。

于 2013-02-01T04:06:37.387 回答
0

考虑使用我们喜欢称之为准备查询的(美妙的)东西。
这些很棒,因为它们将数据视为数据,而不是要执行的语句。这意味着不需要转义,因为您的输入不会被误解。

要在您的情况下实现这一点:

$sql = "SELECT user_name FROM login_admin WHERE user_name = ? AND user_pass = SHA1(?)";
if ($query = $db->prepare($sql)) { //returns false if incorrect syntax, error, etc.
    $query->bind_param("ss", $user, $pass);
    // ss = string, string
    // mixed bind_param($params, **args);
    $query->execute();
    $query->bind_result($u);
    $query->fetch();
    $query->close();
} else {
    /* error handling */
}
if ($u) {
    /* session setting */
    header("Location: admin.php");
} else {
    header("Location: login.php?e=1");
}

我还写了一个工作管理控制面板,我将它复制粘贴到实现登录系统几乎所有功能的东西中(请参阅 参考资料private.php

此外,要回答您真正的问题,没有数据库连接就无法在 mysqli 中进行转义。将您的数据库添加到函数的开头:

mysqli_real_escape_string($db, $string);
于 2013-02-01T04:22:50.217 回答