1

PHP / MySql プログラミングは初めてです。言語の学習に役立つ本を購入しましたが、認証システムを作成しようとしたときを除いて、これまでのところうまくいきました。

MD5 暗号化を使用してレコードをデータベースと照合し、見つかった場合は Web サイトに送信できるようにしたいと考えています。ユーザー名とパスワードが正しくない場合は、再度ログイン ページに送信します。

ある時点では、最初のレコードにのみ一致します。今はどれも一致しません。データベースの内容を正確に入力しても、結果は 0 になるか、ログイン ページに戻ります。

また、ユーザー名と auth_level のセッション変数を設定して、Web サイト/アプリケーション全体で呼び出すことができるようにしたいと考えています。

それが役立つ場合、私はMacでXAMPPを使用しています。

認証スクリプト:

if ((!isset($_POST['username'])) || (!isset($_POST['password']))) {
    header('Location: login.html');
    exit;
}

$mysqli = mysqli_connect('localhost', 'username', 'password', 'testDB')
      or die(mysql_error($mysqli));

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$password = mysqli_real_escape_string($mysqli, $_POST['password']);
$auth_sql ="SELECT username , auth_level FROM auth_users WHERE

username ='".$username."' AND password =MD5('".$password."')";

$auth_sql_res = mysqli_query($mysqli, $auth_sql) or die(mysqli_error($mysqli));

if (mysqli_num_rows($auth_sql_res) == 1) {
    $_SESSION['username'] = $username;
    header('Location: homebeta.php');
} else {
    header("Location:index.php");
    exit;
}

PHP v5.3.1

調査、分析、および/または支援に時間を割いてくださった皆様に感謝します。お時間をいただき、誠にありがとうございます。

4

3 に答える 3

1

exitへの最初の呼び出しの後に を忘れましたheader:

header('Location: homebeta.php');
exit;

PHPエラーをチェックしていますか?PHP で有用なエラー メッセージを取得する方法を参照してください。もっと知るために。

あなたのスクリプトは、ヘッダーやセッション情報の送信を妨げる何かを最初に出力する可能性があると思います。

于 2013-04-15T16:10:53.007 に答える
1

これを試して:

if ((!isset($_POST['username'])) || (!isset($_POST['password']))) {
    header('Location: http://www.replacethis.com/login.html');
} else {
    $mysqli = mysqli_connect('localhost', 'username', 'password', 'testDB')
        or die(mysql_error($mysqli));

    $username = mysqli_real_escape_string($mysqli, $_POST['username']);
    $password = mysqli_real_escape_string($mysqli, $_POST['password']);

    $auth_sql = "SELECT `username`, `auth_level`
        FROM `auth_users`
        WHERE `username` = '$username' AND `password` = MD5('$password')";

    $auth_sql_res = mysqli_query($mysqli, $auth_sql)
        or die(mysqli_error($mysqli));

    if (mysqli_num_rows($auth_sql_res) > 0) {
        $_SESSION['username'] = $username;
        header('Location: http://www.replacethis.com/homebeta.php');
    } else {
        header("Location: http://www.replacethis.com/index.php");
        exit;
    }
}
  1. Else声明を追加。
  2. あなたのバックティックSQL query(安全のために)
  3. の絶対 URL header location

そしてMD5 hashing、クエリから を削除し、ユーザー名とパスワードの両方をコピー アンド ペーストしてからHTML-formログインしてみてください。

于 2013-04-15T16:49:44.713 に答える