ログインフォームに少し問題があります。コードが古いmysqlコードだった場合、ログインは正しく機能しましたが、mysqliに変更したため、正しく機能しなかったため、問題はmysqliコードだと思います。
ユーザーがログインフォームにユーザー名とパスワードを入力し、[ログイン]ボタンをクリックすると、ユーザー名とパスワードが正しいかどうかがデータベースにチェックインされます。正しい場合はmenu.phpページに移動し、ログインが正しくない場合は、ログインが正しくないことを示すメッセージを表示して、再試行してください。
代わりに、以下のコードは、ユーザーがユーザー名とパスワードを入力して[ログイン]ボタンをクリックすると、ユーザー名とパスワードが正しいかどうかに関係なく、からを更新するだけで、メニューに移動しません。 phpページまたはログインの間違ったメッセージを表示します。
だから私の質問は、なぜこれが起こっているのか、ログインした後、ユーザーをナビゲートしたり、間違ったログインメッセージを表示したりしないのはなぜですか?
現在のコードを表示するようにコードが更新されました:
<?php
ini_set('display_errors',1);
error_reporting(E_ALL);
// PHP code
session_start();
$username="xxx";
$password="xxx";
$database="mobile_app";
$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] : '';
}
// move this outside the condiitonal
$loged = false;
if (isset($_POST['submit'])) {
$query = $mysqli->prepare("
SELECT * FROM Teacher t
WHERE
(t.TeacherUsername=?)
AND
(t.TeacherPassword=?)
");
$stmt=$mysqli->prepare($query);
$stmt->bind_param("s",$teacherusername);
$stmt->bind_param("s",$teacherpassword);
$stmt->execute();
$stmt->bind_result($TeacherId,$TeacherForename,$TeacherSurname,$TeacherUsername,$TeacherPassword);
while($row=$stmt->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' ) ;
}
}
?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Teacher Login </title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" type="text/css" href="LoginStyle.css">
</head>
<body>
<?php if ($loged == false && $_POST) {
echo "The Username or Password that you Entered is not Valid. Try Entering it Again.";
}
?>
<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>
</body>
</html>
アップデート:
エラー報告をオンにし、回答の1つから取得した上記のコードを使用すると、以下の警告と致命的なエラーが発生します。
Warning: mysqli::prepare() expects parameter 1 to be string, object given in /web/stud/xxx/Mobile_app/teacherlogin.php on line 33
Fatal error: Call to a member function bind_param() on a non-object in /web/stud/xxx/Mobile_app/teacherlogin.php on line 34
これらはどういう意味ですか、そして誰かがそれらを修正する方法について何かアイデアを持っていますか?上記のコードを更新して、現在のコードを表示しました。