我在下面有一个代码,通过在数据库中匹配它的用户名和密码来记录教师,如果正确,则登录,如果不正确,则显示消息。
<?php
session_start();
$username="xxx";
$password="xxx";
$database="mobile_app";
$link = mysqli_connect('localhost',$username,$password);
mysqli_select_db($link, $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 = "
SELECT * FROM Teacher t
WHERE
(t.TeacherUsername = '".mysqli_real_escape_string($teacherusername)."')
AND
(t.TeacherPassword = '".mysqli_real_escape_string($teacherpassword)."')
";
$result = mysqli_query($link, $query);
$num = mysqli_num_rows($result);
$loged = false;
while($row = mysqli_fetch_array($result))
{
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.";
}
mysqli_close($link);
}
?>
现在的问题是,即使老师输入了正确的用户名和密码,它仍然不让老师登录。当上面的代码是旧的mysql()代码时,它工作正常,因为老师是能够在用户名和密码匹配时登录,但在尝试将代码更改为mysqli时,即使用户名和密码匹配,也会导致登录无法正常工作。我做错了什么?
答案 0 :(得分:2)
我对PHP的经验不多,但是当我将代码从mysql转换为mysqli时,我发现一些mysqli命令有不同的synatx。像mysqli_connect有第四个参数db_name(不知道是否需要这个)。
也有所不同:mysql_real_escape_string($string)
与mysqli_real_escape_string($link, $string)
答案 1 :(得分:0)
在我看来,你已经将mysql更改为mysqli,因为你的成功登录重定向位于何处,它将永远无法正常,因为标题已经被发送。因此,在成功登录后,您将再次获得登录表单。
为避免这种情况,您需要将所有处理移至顶部,然后再开始输出html。
除此之外,我建议切换到预备语句以避免整个escape_string混乱,但这与问题无关,除非您的用户名/密码可以包含受转义函数影响的字符。