0

データベースで指定した管理者が画像をデータベースに挿入できるように、ログイン フォームを作成しようとしています。

いくつかのエラーがあります:

1)自分<?php echo $_SERVER['PHP_SELF']; ?>自身を呼び出す(Login.phpを呼び出す)ために使用しているため、その下(同じファイル内)にあるPHPコードがロードされます。送信を押すたびに、php コードで指定されたヘッダーに移動するのではなく、homepage.php に戻ります。

Login.php:管理者ログイン フォームの html

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<table>
    <tr>
        <td>Username: </td><td><input type="text" name="username"></td>
    </tr>
    <tr>
        <td>Password: </td> <td><input type="text" name="pw"></td>
    </tr>
</table>
<br />
<input type="submit" value="Log in">
</center>

2) 2 番目の問題は... php コードを見て、関連付けられた配列の特定のキーを取得できる関数を見つけようとしています。たとえば、データベース クエリを実行し、それを関連付け配列として $result に格納し、それを返します。次に、ユーザー テーブルからキー (「ユーザー名」と「パスワード」) を取得し、それらを上記の html フォームからの入力と比較します。

array_keys を使用してみましたが、オブジェクトではなく配列が必要です。だから私はそれをキャストしましたが、それでも機能しません。

print_r(array_keys($userResult, "username"));必要なキーが出力されるかどうかを確認するために使用しています。

Login.php PHP コード

<?php 

$username = isset($_POST['username']) ? $_POST['username'] : "";
$password = isset($_POST['pw']) ? $_POST['pw'] : "";

$userResult = verify($username, $password);
$array = (array)$userResult; //cast to array

print_r(array_keys($userResult, "username"));

if(array_keys($userResult, "username") == "dan" && array_keys($userResult, "password") == "12345") {
    header("Location: ?action=admin");
}
else {
    echo "<center>Incorrect credentials</center>";
}

function verify($user, $pw) {
    include './scripts/dbconnect.php';

    $result = $mysqli->query("SELECT username, password FROM users WHERE username='" . $user . "' AND password='" . $pw . "'"); 

    return $result; 
}

include 'include/footer.php';
?>

どんな考えでも大歓迎です!

4

3 に答える 3

1

アクションを空白のままにaction=""しておくと、同じページに投稿されます。$_SERVER['PHP_SELF']返品の内側/外側に何が含まれているか覚えていませんが、それはあなたの問題に違いありません.

また、クエリでユーザー名とパスワードを既に確認しているため、結果が返されるか返されないかを知る必要があります。行数を確認してください:)

于 2013-01-12T19:25:56.680 に答える
1

パート 1 では、ページを更新するだけの場合は、これを行うことができます。

<form action='' method=''>

それ以外の場合は、login.php から処理ファイルへのパスをハードコーディングする方がおそらく簡単です。

パート 2 では、配列を誤って作成したと思います。

$array = array();
$array[$username] = $password; // $username is the key and $password is the value aka.. array ($username => $password )

理由はわかりませんが、

$array = (array)$userResult;

関数を介して実行されるタプルとして配列を設定しようとしていますが、その方法はキーと値を設定するよりもはるかに明確ではないようです。

于 2013-01-12T19:23:44.283 に答える
0

nimlhug に感謝します。このように動作するようになりました...データベースをチェックする主な理由は、一致する結果があったかどうかを実際に確認することだったことを忘れていました...私はただ使うことができましたnum_rows == 1、笑。

                <?php
            include 'include/header.php';
            ?>
            <center>

            <h2>Admin Log in</h2>
            <br/>

            <form action="" method="post">
                <table>
                    <tr>
                        <td>Username: </td><td><input type="text" name="username"></td>
                    </tr>
                    <tr>
                        <td>Password: </td> <td><input type="text" name="pw"></td>
                    </tr>
                </table>
                <br />
                <input type="submit" value="Log in">
                </center>
            <?php 

            $username = isset($_POST['username']) ? $_POST['username'] : "";
            $password = isset($_POST['pw']) ? $_POST['pw'] : "";


            if(verify($username, $password) == 1) {
                header("Location: ?action=admin");
            }
            else {
                echo "<center>Incorrect credentials</center>";
            }

            function verify($user, $pw) {
                include './scripts/dbconnect.php';

                $result = $mysqli->query("SELECT username, password FROM users WHERE username='" . $user . "' AND password='" . $pw . "'"); 

                return $result->num_rows;
            }

            include 'include/footer.php';
            ?>
于 2013-01-13T17:55:11.327 に答える