Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 民政事务局局长职能问题_Php_Mysql_Login - Fatal编程技术网

Php 民政事务局局长职能问题

Php 民政事务局局长职能问题,php,mysql,login,Php,Mysql,Login,我的login.php中有这个php代码 if (isset($_POST['logIn'])) { $errmsg = ""; $logname = mysqli_real_escape_string($dbc, trim($_POST['usernameIn'])); $logpassword = mysqli_real_escape_string($dbc, trim($_POST['passwordIn'])); $query = "SELECT use

我的login.php中有这个php代码

if (isset($_POST['logIn'])) {
    $errmsg = "";
    $logname = mysqli_real_escape_string($dbc, trim($_POST['usernameIn']));
    $logpassword = mysqli_real_escape_string($dbc, trim($_POST['passwordIn']));

    $query = "SELECT user_id, username FROM members WHERE username = '$logname' AND password = SHA('$logpassword')";
    $data = mysqli_query($dbc, $query);

    if (mysqli_num_rows($data) == 1) {
        $row = mysqli_fetch_array($data);
        setcookie('user_id', $row['user_id'], time() + (60 * 60 * 24 * 30)); //expires after 30 days
        setcookie('username', $row['username'], time() + (60 * 60 * 24 * 30));
        $home = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/index.php';
        header('Location: ' . $home);
    }
    else {
        $errmsg = '<p class="errormsg">Username or password is incorrect.</p>';
    }
}

有人看到这个脚本的问题吗?谢谢

您还可以通过以下方式从PHP执行此操作:

VALUES ('$username', '".sha1($password)."', '$email')";

在这种情况下,您不需要使用escape it。

您也可以通过以下方式从PHP执行此操作:

VALUES ('$username', '".sha1($password)."', '$email')";

在这种情况下,您不需要使用escape it。

我没有注意到您的代码中有任何重大错误,但我有一些建议可以帮助调试它:

  • 再次检查用户名和密码。在查询之前将这两个参数都回显出来,以确保它们在转义后仍然与数据库中的内容匹配
  • 回显查询字符串并在phpmyadmin或shell中运行它
  • 确保这些值是作为POST而不是GET发送的
  • 如果两行具有相同的用户名和密码,则将
    if(mysqli_num_rows($data)==1){
    更改为
    if(mysqli_num_rows($data)>0){

  • 我没有注意到您的代码中有任何重大错误,但我有一些建议可以帮助调试它:

  • 再次检查用户名和密码。在查询之前将这两个参数都返回,以确保它们在转义后仍然与数据库中的内容匹配
  • 回显查询字符串并在phpmyadmin或shell中运行它
  • 确保这些值是作为POST而不是GET发送的
  • 如果两行具有相同的用户名和密码,则将
    if(mysqli_num_rows($data)==1){
    更改为
    if(mysqli_num_rows($data)>0){

  • 您是否尝试查看$data中是否返回了任何内容?我通常在PHP中使用“sha”密码。由于它们返回的是相同的密码,从技术上讲,错误肯定在其他地方。到目前为止,我没有发现您的代码有任何错误。检查DB是否已连接。您是否尝试查看$data中是否返回了任何内容?我通常使用“sha”PHP中的密码。由于它们返回相同的密码,从技术上讲,错误肯定在其他地方。到目前为止,我没有发现您的代码有任何错误。请检查数据库是否已连接。“…以防两行具有相同的用户名和密码”我认为这是一个失败,而不是一个成功。该表不应该被设计为允许这样一个奇怪的东西。同意。但是它仍然有助于调试当前的问题“……如果两行具有相同的用户名和密码”我认为这是一个失败,而不是一个成功。该表不应该被设计为允许这样一个奇怪的东西。同意。但是它仍然有助于调试当前的问题。你有一个SQL注入漏洞,你把输入连接到查询字符串。对PHP和SQL注入做一个快速搜索,你应该找到FI。您有一个SQL注入漏洞,将输入连接到查询字符串。在SO上快速搜索PHP和SQL注入,您应该找到如何修复它。