0

我不知道为什么这个 PHP 登录脚本不起作用。当我尝试登录时,它总是返回:“Ongeldig wachtwoord/gebruikersnaam!”。

这是脚本:

session_start();
include('connect.php');

// functie voor random key
function make_rand($length) {
  $chars = "aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ1234567890";
  $rand = '';
  for ($i = 1; $i <= $length; $i++) {
    $num = rand(0, strlen($chars));
    $rand .= substr($chars, $num, 1);
    }
 return $rand;
  }

此函数创建一个随机密钥以用作 session_id。

// kijk of formulier is verzonden
if ($_SERVER['REQUEST_METHOD'] == "POST") {     // indien verzonden
  $query= mysql_query("SELECT * FROM customers WHERE name = '" .$_POST['inlognaam'] . "'"); 

服务器检查用户名是否存在..

if (mysql_num_rows($query) > 0) {    // als er een gebruiker is gevonden
    $user = mysql_fetch_object($query);
    if ($user->password == isset($_POST['password'])) {  
      $_SESSION['user_id'] = $user->name;
      $rand_key = make_rand(50);    // maak een random string voor sessie session_id mbv van functie
      $_SESSION['session_id'] = $rand_key;
      // zet de sessie id in de db zodat we hem later kunnen controleren
      mysql_query("UPDATE customers SET session_id = '" . $rand_key . "' WHERE name = '" . $_SESSION['inlognaam'] . "'");
  $_SESSION['user_ip'] = $_SERVER['REMOTE_ADRESS'];
  echo 'Inloggen is gelukt!';
  } 

当用户存在时,服务器会创建一个 session_id,将用户的 ip 地址保存在 user_ip 中,同时还保存用户名(user_id)

else {  // ongeldig wachtwoord
  echo 'Ongeldig wachtwoord/gebruikersnaam!';
  }
} else {  // ongeldige gebruikersnaam
echo 'Ongeldig wachtwoord/gebruikersnaam!';
}
  }

如果用户不存在,它会回显: Ongeldig gebruikersnaam/wachtwoord"(用户名/密码无效)。

 else {
    echo '<table id="loginbox">';
    echo '<tr><td><b>Login:</b></td></tr>';
    echo '<form action="test.php" method=\"post\">';
    echo '<tr><td>Gebruikersnaam:</td></tr><tr><td> &nbsp;<input style="width:120;" name="inlognaam" type="text" id="inlognaam"> </td></tr>';
    echo '<tr><td>Wachtwoord:</td></tr><tr><td> &nbsp;<input type="password" style="width:120;" name="password id="password"> </td></tr>';
    echo '<tr><td><input type="submit" name="Submit" value="Login"></td></tr>';
    echo '</table>';
}

这是登录表单。

编辑:我只是注意到它甚至不使用 PHP 脚本,它只是将输入的内容写入 URL ..

前任。:

localhost/School/test.php?inlognaam=Thomas&password=british9&Submit=Login
4

3 回答 3

3

问题大概出在这里:

if ($user->password == isset($_POST['password'])) 

快速解决:

if ($user->password == $_POST['password']) 

isset返回一个布尔值,告诉是否设置了数组项,而不是项的值。

另外,在你的表格中,它说

name="password 

应该是:

name="password"

除此之外,关于您的代码还有一些话要说:

  1. 不要$_POST[]直接在 SQL 查询中使用,始终对其进行转义。
  2. 用于array_key_exists检查某个键是否存在于$_POST. isset()会产生警告。
  3. 会话有一个唯一的 id,不需要像这样生成它(顺便说一句,这不能保证是唯一的,请查看 UUID 以获得更好的唯一 ID)
于 2012-10-04T15:18:09.823 回答
0

当您检查密码时,您正在将用户密码值与 isset 的 true 或 false 返回值进行比较

于 2012-10-04T15:20:32.897 回答
0

你从来没有设置$_SESSION['inlognaam'],所以尝试替换:

mysql_query("UPDATE customers SET session_id = '" . $rand_key . "' WHERE name = '" . $_SESSION['inlognaam'] . "'");

和 :

mysql_query("UPDATE customers SET session_id = '" . $rand_key . "' WHERE name = '" . $_POST['inlognaam'] . "'");

编辑:$_SESSION['inlognaam']在查询之前设置:

$_SESSION['inlognaam'] = $_POST['inlognaam'];
mysql_query("UPDATE customers SET session_id = '" . $rand_key . "' WHERE name = '" . $_SESSION['inlognaam'] . "'");

编辑 2: 要调试,我会尝试简化代码:

<?php
include('connect.php');  

// kijk of formulier is verzonden
if ($_SERVER['REQUEST_METHOD'] == "POST") {
    // indien verzonden
    $query= mysql_query("SELECT * FROM customers WHERE name = '" .$_POST['inlognaam'] . "'");
    if (mysql_num_rows($query) > 0) {
        // als er een gebruiker is gevonden
        $user = mysql_fetch_object($query);
        if ($user->password == $_POST['password']) {
            echo 'Inloggen is gelukt!';
        } else {
            // ongeldig wachtwoord
            echo 'Ongeldig wachtwoord/gebruikersnaam!';
        }
    } else {
        // ongeldige gebruikersnaam
        echo 'Ongeldig wachtwoord/gebruikersnaam!';
    }
}else {
?>
<form action="test.php" method="post">
    <table id="loginbox">
        <tr><td><b>Login:</b></td></tr>
        <tr><td>Gebruikersnaam:</td></tr>
        <tr><td> &nbsp;<input type="text" style="width:120;" name="inlognaam" id="inlognaam"> </td></tr>
        <tr><td>Wachtwoord:</td></tr>
        <tr><td> &nbsp;<input type="password" style="width:120;" name="password" id="password"> </td></tr>
        <tr><td><input type="submit" name="Submit" value="Login"></td></tr>
    </table>
</form>
<?php
}
?>
于 2012-10-04T16:03:26.967 回答