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

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'] . "'");

EDIT: または$_SESSION['inlognaam']クエリの前に設定:

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

EDIT 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 に答える