1

php /sqlWebページのログインを認証しようとしています。

最初のコードは、Login.phpの一部を示しています。ここでは、電子メールとパスワードの2つのテキストフィールドを取得し、それらをauthenticate.phpに渡します。

2番目のコードは、2つの値を取得して、それらを処理しようとする場所を示しています。

私が抱えている問題は、フィールドに正しいデータが入力されていても、index.phpeveryimeに誘導されることです。

どんな助けでもいただければ幸いです。

Login.phpの一部

        <td width="70">Email</td>
        <td width="6" align="center">:</td>
<form action="authenticate.php" method="post" name="authenticate_form">
        <td><input name="email" type="text" id="email"></td>
      </tr>
      <tr>
        <td width="70">Password</td>
        <td width="6" align="center">:</td>
        <td><input name="password" type="text" id="password"></td>
      </tr>
      <tr>
        <td width="70">Login</td>
        <td width="6" align="center">:</td>
        <td>
            <input type="submit" name="submit" value="Login" />
</form>
        </td>

Authenticate.php

// ----------------------
// Retrieve login information

include("db_info.php");

// ----------------------

$conn = oci_connect($db_user, $db_pwd, '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(Host=asuka.cs.ndsu.nodak.edu)(Port=1521)))(CONNECT_DATA=(SID=asuka)))');

if (!$conn) {
    $e = oci_error();
    print_r($e);
    exit();
}

// ----------------------
// Get POST values

if(isset($_POST['email']) && $_POST['email'] && isset($_POST['password']) && $_POST['password']) {

     // Get posted form information and strip out unsafe characters
     $email = htmlspecialchars(stripslashes($_POST['email']));
 $password = htmlspecialchars(stripslashes($_POST['password']));
} else {
    // Illegal access.
    // Redirect back to index.php
    header("location: index3.php");
    exit();
}

// ----------------------
// Authenticate User

// Create query
$sql = "SELECT PASSWORD FROM CUSTOMER WHERE EMAIL = '$email'";

 // Create database query statement
$statement_id = oci_parse($conn, $sql);

// Execute query statement
$result = oci_execute($statement_id, OCI_COMMIT_ON_SUCCESS);
$queryResult = oci_fetch_row($statement_id);

//var_dump($queryResult);
// Check for successful authentication
if($password == $queryResult[0]) {

if ($email=="admin@hotmail.com") {
    $db_login_status = 2;
    header("location: admin.php");
} else {
    $db_login_status = 1;
    header("location: normal.php");
}
} else {
    header("location: fail.php");
}

// ----------------------
// Close connections

oci_free_statement($statement_id);
oci_close($conn);
4

3 に答える 3

3

$resultが割り当てられることはないため、に等しくなることはありません1。修正は次のようになります。

$result = oci_execute($statement_id, OCI_COMMIT_ON_SUCCESS);
// Check for successful authentication
if ($result) {

$resultブール値になるため、と比較する必要はありません1

$result戻るとfalse、何が悪かったのかを確認する関数があります。この関数はoci_error()です。リダイレクトする代わりに、エラーを出力(またはログ)する必要があります。これは、デバッグに役立ちます。

問題は、SQLクエリのパラメータを引用符で囲んでいないことである可能性があります。

于 2012-04-29T22:42:39.070 に答える
2
if ($email=="admin@hotmail.com") {
    $db_login_status = 2;
    header("location: index1.php");
} else {
    $db_login_status = 1;
    header("location: index.php");
}

index.phpに送信されている場合は、「admin@hotmail.com」でログインしていないことを意味している必要があります。そのメールアドレスを使用してみてください。それ以外の場合は、上記のコードを削除して、次の2行だけを残してください。

    $db_login_status = 1;
    header("location: index.php");

問題は、正しいログインを入力してリダイレクトされないということです。そうしたためにリダイレクトされます。ログイン時にリダイレクトされたくない場合は、スクリプトを変更して、意図したとおりに実行する必要があります。

編集:あなたのコメントに基づいて、それ$emailは空のようです。これは<input name="email">、フォームのが非表示の入力であり、パスワードを入力しても何も入力されないためです。他のテーブルセルに表示されているテキスト入力から値をインポートするJavaScriptがあると想定していました。あなたは?そうでなければ、あなたの問題があります。タグ<form>には、ログインデータが入力される入力を実際に含める必要があります。ログインテーブル全体にフォームをラップすることで、問題を解決できます。

それとは別に、クエリが成功したため、結果が含まれているためではなく、常に$result1になります。その後、さらに行う必要があります。次に、ではなくチェックします。または単に$row = oci_fetch_row($statement_id);if($row)if($statement_id)if(oci_fetch_row($statement_id))

別の問題であることが判明した補足として、外部エディターでデータベースに対して行った編集をコミットすることを忘れないでください。それらがコミットされていない場合、他のクエリはそれらを認識しません。この場合、「admin@hotmail.com」のレコードは外部プログラムに追加され、コミットされていません。そのため、PHPはログインの確認を拒否しました。

于 2012-04-29T22:43:10.090 に答える
2

if ($result==1) {}

$ resultがコードに割り当てられることはありません!

于 2012-04-29T22:49:16.283 に答える