-4
<?php
    if ($_POST['submit'] == "submit")
    {
    $userName = $_POST['username'];
    $passWord = $_POST['password'];

$db= mysql_connect("localhost", "root", "root");
        if(!$db) die("Error connecting to MySQL database.");
        mysql_select_db("onlineform", $db);


$checkUserNameQuery = "SELECT username FROM onlineformdata ORDER BY id DESC LIMIT 1";
$checkUserName = mysql_query($checkUserNameQuery);
$checkPassWordQuery = "SELECT password FROM onlineformdata ORDER BY id DESC LIMIT 1";
$checkPassWord = mysql_query($checkPassWordQuery);
$AdminChanges = "";

if (($userName == $checkUserName) && ($passWord == $checkPassWord)) 
    {
    $AdminChanges = "AdminChanges.php";
    }
else 
    {
    $AdminChanges = "InvalidLogin.html";
    }
}

function PrepSQL($value)
    {
        // Stripslashes
        if(get_magic_quotes_gpc()) 
        {
            $value = stripslashes($value);
        }

        // Quote
        $value = "'" . mysql_real_escape_string($value) . "'";

        return($value);
    }

?>
<html>
<head>
<title>Admin Login</title>
</head>
<body>
<form action = <?php echo PrepSQL($AdminChanges); ?>  method="post">
username: <input type="text" name="username" />
password: <input type="text" name="password" /> <br/>

<input type="submit" name="submit" value="submit" />
</form>
</body>
</html>

送信時にフォームが間違った場所に送信されるという問題があります。ユーザー認証ページです。ユーザー名とパスワードがデータベースに保存されているものと一致しない場合は、無効なログイン ページに移動する必要があります。その場合は、ユーザー確認 Web サイトの次の部分に移動する必要があります。

値を入力する前のフォーム タグは、ページ ソースでは次のようになります。

ただし、ユーザー名とパスワードが正しい場合は、InvalidLogin.html ページに移動します。正しくない場合、フォームが再度リロードされ、ページのソースを確認すると、フォーム タグが表示されることを除いて、まったく同じコードです。

助言がありますか?

4

2 に答える 2

0
<?php
    if($_POST['username'] && $_POST['password']){

        $username = $_POST['username']; // Escape this
        $password = $_POST['password']; // Escape this

        $searchQuery = mysql_query("SELECT id FROM onlineformdata WHERE username = '$userName' AND password = '$password' ORDER BY id DESC LIMIT 1");

        if(mysql_num_rows($searchQuery)){
            header('location:/adminPage.php'); // Go to this page if row exists in DB
        }
        else{
            header('location:/invalidLoginPage.html'); //Go to this page if row doesn't exist in DB
        }

        exit; // So that it quite this page and goes to the desired one set in the "headers"
    }
    else{
        //Not strictly needed... But you could be useful in some circumstances
    }
?>

<html>
<head>
<title>Admin Login</title>
</head>
<body>
<form action=''  method="post">
username: <input type="text" name="username" />
password: <input type="text" name="password" /> <br/>

<input type="submit" value="submit" />
</form>
</body>
</html>

これにより、正しい方向に進むことができます。必要に応じて、ユーザー名/パスワード フィールドをエスケープすることを忘れないでください。

フォームのアクション部分は、フォームが送信される場所であるため、あなたの場合は同じページである必要があります。Hristoが言ったように、それを空にするか空白にすることができ、デフォルトでそれ自体を送信します。

マーク B については (結局、彼は質問をしました)。コードを読むと、PrepSQL 関数が実際に文字列を一重引用符で囲んでいることがわかります... html には引用符がないため、これはとにかく間違っていません...だから、問題が何であるかわかりませんそこに(彼が望んでいたことをしていないことは別として)。

複数のユーザー アカウントに関しては、複数のユーザーが同じユーザー名を使用することを許可しない限り、データベースから返されるレコードは 1 つだけです...つまり、問題はありません。

于 2013-07-11T17:00:47.960 に答える
0

アクションタグはフォームがリクエストを送信する場所であり、送信後に移動する場所ではありません。

header('location: '.$AdminChanges);を使用してみてください。ページをリダイレクトするためのユーザー認証の直後。

編集: フォームのアクション タグも削除します。削除すると、作業中の同じファイルにリクエストが送信されます。

于 2013-07-11T16:00:22.937 に答える