0

** 更新 ** 素晴らしい助けで、$-サインインを省略するだけでこれを解決しました

        $dbusername = $row['$username_login'];
        $dbpassword = $row['$password_login'];

列名に。

        $dbusername = $row['username'];
        $dbpassword = $row['password'];

私は現在、単純なソーシャル ネットワークの作成に関するいくつかのチュートリアルに従って、PHP と MySQL をいじっています。パスワードがユーザー名と一致するかどうかを確認しようとすると、問題が発生しました。

ログインフォームのコード:

<form action="login.php" method="POST">
<input type="text" size="25" name="user_login" id="user_login" placeholder="Username" />
<input type="password" size="25" name="password_login" id="password_login" placeholder="Password" /> <br />
<input type="submit" name="login" id="button" value="Login" />
</form>

データを検証するための PHP コードのスニペット (login.php):

$username_login = strip_tags($_POST["user_login"]);
$password_login = strip_tags($_POST["password_login"]);

if ($login) {
if ($username_login && $password_login) {
    $connect = mysql_connect("localhost", "root", "") or die("Error connecting");
    mysql_select_db("mono_social") or die("Could not find db");

    $query2 = mysql_query("SELECT * FROM users WHERE username='$username_login'");
    $numrow = mysql_num_rows($query2);

    if ($numrow != 0) {
        // LOGIN code
        while ($row = mysql_fetch_assoc($query2)) {
            $dbusername = $row['$username_login'];
            $dbpassword = $row['$password_login'];
        }

        // Check to see if username and password match
        if ($username_login==$dbusername && $password_login==$dbpassword) {
            echo "You are in";
        }
        else {
            echo "Sorry $username_login. Incorrect password!";
        }
    }

フィールドのいずれかが空白のままになっているかどうか、またはユーザー名が存在しないかどうかを確認するためのコードも含めました。コードは前述のテスト (空白のフィールドと無効なユーザー名) ではうまく機能しているようですが、有効なユーザー名とパスワードの両方でログインしようとするとうまくいきません。

これについての助けをいただければ幸いです:)

4

2 に答える 2

0

上記の答えはあなたの問題を解決します。また、将来の問題を回避するために、PHP を使用する場合は次の点に注意してください。

  • データベース、テーブル、および列の名前を一重引用符で囲まないでください。リテラル名またはリテラル名を含む変数を使用できます。'username'='$username'は間違っています。username='$username'が正しいです。
  • データベース、テーブル、または列の名前にスペースが含まれている場合は、名前の周りに目盛り` (文字は米国地域のキーボードの左側、! のキーの前にあります) で囲みます。ユーザー列が間違っています。「ユーザー欄」はそうですね。
  • 文字列値を一重引用符 '; で囲みます。例: username='$username'。
  • データ型が数値である列の値は、一重引用符で囲む必要はありません。例: userid=2


セキュリティ上の懸念

あなたは言語を始めたばかりなので、正しく始めるのが最善です。

  • mysql_* 関数はもう使用しないでください。これは安全ではなく、推奨されていません。代わりに、PDOを使用してください。より簡単かつ安全に使用できます。
  • 開発中であっても、 rootをデータベース ユーザーとして使用しないでください。
  • 本番または開発システムでは、すべてのデータベース ユーザーがパスワードを持っている/使用している必要があります許可されたアクセスを防ぎます。

最後に、回答が役に立った場合は、それを受け入れてください。これにより、他の人が将来あなたを助けることができます。

お役に立てれば。

于 2013-07-20T20:02:59.880 に答える