ログインフォームに少し問題があります。問題は mysqli コードだと思います。コードが古い mysql コードの場合、ログインは正常に機能していましたが、mysqli に変更してから、まったく正常に機能しませんでした。
ユーザーがログインフォームにユーザー名とパスワードを入力すると、ユーザーが「ログイン」ボタンをクリックすると、ユーザー名とパスワードが正しいかどうかがデータベースでチェックされます。正しい場合は menu.php ページに移動します。ログインが正しくない場合は、ログインが正しくないというメッセージを表示して、もう一度やり直してください。
代わりに、以下のコードが行っていることは、ユーザーがユーザー名とパスワードを入力して「ログイン」ボタンをクリックすると、ユーザー名とパスワードが正しいかどうかに関係なく、元を更新するだけで、メニューに移動しません。 php ページにアクセスしたり、ログインが正しくないというメッセージを表示したりします。
私の質問は、なぜこれが起こっているのか、ログイン後にユーザーをナビゲートしたり、間違ったログインメッセージを表示したりしないのはなぜですか?
以下はコードです:
<?php
session_start();
$username="xxx";
$password="xxx";
$database="xxx";
$mysqli = new mysqli("localhost", $username, $password, $database)or die( "Unable to select database");
foreach (array('teacherusername','teacherpassword') as $varname) {
$$varname = (isset($_POST[$varname])) ? $_POST[$varname] : '';
}
?>
<form action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post" id="teachLoginForm">
<p>Username</p><p><input type="text" name="teacherusername" /></p> <!-- Enter Teacher Username-->
<p>Password</p><p><input type="password" name="teacherpassword" /></p> <!-- Enter Teacher Password-->
<p><input id="loginSubmit" type="submit" value="Login" name="submit" /></p>
</form>
<?php
if (isset($_POST['submit'])) {
$query = $mysqli->prepare("
SELECT * FROM Teacher t
WHERE
(t.TeacherUsername = '".mysqli_real_escape_string($teacherusername)."')
AND
(t.TeacherPassword = '".mysqli_real_escape_string($teacherpassword)."')
");
$query->bind_result($Teacher);
$num = $query->num_rows($result = $query->execute());
$loged = false;
while($row = $result->fetch())
{
if ($_POST['teacherusername'] == ($row['TeacherUsername']) && $_POST['teacherpassword'] == ($row['TeacherPassword']))
{
$loged = true;
}
$_SESSION['teacherforename'] = $row['TeacherForename'];
$_SESSION['teachersurname'] = $row['TeacherSurname'];
$_SESSION['teacherusername'] = $row['TeacherUsername'];
}
if ($loged == true){
header( 'Location: menu.php' ) ;
}else{
echo "The Username or Password that you Entered is not Valid. Try Entering it Again.";
}
}
?>