0

PHPでログインフォームを開発していますフォームは次のとおりです

<form method="post" action="Login.php" id="Log">
<select id="Login" name="Type">
<option value="Sel" selected="selected">Select Login type</option>
<option value="Student">Student</option>
<option value="Faculity">Faculity</option>
</select>
<div id="type">
<p id="Ch">Group Id: &nbsp;<input id="l" name="log" type="text"/></p>
<p id="Pass">Password: &nbsp; <input id="p" name="Pass" type="password" /></p>
<input id="Cond" type="Text" />
<input type="submit" value="Login"  />
<p id="Invalid" style="padding-top:.75em; color:#FF0000;">Invalid Login Or Password</p>
</form>

post.php でデータベースに接続し、ログインとパスワードを確認します。

<p id="invalid">パスワードまたはログインが一致しない場合に、その下の同じフォームにタグを遅滞なく表示したい。

は最初<p id="invalid">は非表示で、ログインまたはパスワードが正しくない場合にのみ表示されます

どうすればこれを達成できますか/PHPを介してデータベースに接続できますか?

4

3 に答える 3

1

私はGalenの答えに同意します。ログイン処理を同じページに配置する必要があります。その方法がわからない場合は、次のようにする必要があります。

<?php
$itswrong = false;
if (isset($_POST['Pass']) && isset($_POST['log'])) {
$sql = 'SELECT * FROM your_database_name WHERE group_id = '{$_POST['log']}' AND password = SHA1('{$_POST['Pass']}')";
$result = @mysql_query($sql) or die (mysql_error());
if (mysql_num_rows($result) == 1) {
// Match was found!
// Do whatever here, e.g. session registering (starting a session), etc.
} else {
// Oh damn, it's wrong!
$itswrong = true;
// Do stuff here
}
} else {
// Move your form in here
}
?>

フォームで行う必要があるのは、それを under// Move your form in hereに移動し、これを変更することだけです:

<p id="Invalid" style="padding-top:.75em; color:#FF0000;">Invalid Login Or Password</p>

これに:

<?php
if (isset($_POST['Pass']) && isset($_POST['log']) && $itswrong == true) {
?>
<p id="Invalid" style="padding-top:.75em; color:#FF0000;">Invalid Login Or Password</p>
<?php
}
?>

また、必要に応じて SQL クエリの値を変更します。それならうまくいくでしょう。フォームを の下に移動してください// Move your form in here。フォームが送信されていない場合に表示されるからです。

編集:フォームのタイトルも変更します。

これから:

<form method="post" action="Login.php" id="Log">

これに:

<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>" id="Log">

これにより、ページはデータをそれ自体に投稿するだけになり、コードが一番上に表示されます。

JavaScript はクライアント側で PHP はサーバー側であるため、JavaScript 関連の技術よりもハッカーが PHP をハッキングする方がはるかに難しいため、ajax はお勧めしません。

それでも問題が解決しない場合はお知らせください。

ルーカス

于 2012-05-02T07:21:08.280 に答える
1

これを行う正しい方法は、フォーム アクションをフォームを含む同じページに設定することです。php ページの最初でユーザー名/パスワードをチェックして、フォーム html がロードされたときにすでにログイン結果を知っていて、エラーを表示できるようにする必要があります。

次に、ページをリロードせずに実行したい場合は、AJAX スクリプトを作成し、それを送信ボタンにフックします (フォームの送信を無効にします)。

このように、javascript が無効になっている場合でも、すべてが機能します。

于 2012-05-02T07:04:30.413 に答える
0

以下は基本的な例です。一言で言えば、これは私が使用するものです:

$entered_password = $_POST['pword'];
$php_self = $_SERVER['PHP_SELF'];

if ($password != $entered_password) {
   $error['pword'] = "<span class=\"errormess\">You entered wrong Password</span>";
} else {
    $error['pword'] = "";
}

DB で有効な回答をチェックした後、エラーがあれば配列に新しいキーを入力して、すべてのフィールドに対してこれを行います。次にHTMLで:

<form method="post" action="<?php echo $php_self?>">
   <input type="password" name="pword" />
   <?php echo $error['pword']?>
   <input type="submit" name="submit" />
</form>

エラーがある場合は の下に表示され<input>、そうでない場合は何も表示されません。私のCSSでは、クラスerrormessは赤/太字です。これをすべての入力に対して行います。いずれかのフィールドにエラーがある場合は、ページを php_self します。エラーがない場合はheader["Location: confirm.html"]、適切なページにリダイレクトされ、ユーザーがログインします。

これは非常に基本的な、簡単な例ですが、うまくいけば冗談を言うことができます。

お役に立てれば

于 2012-05-02T07:28:43.667 に答える