从mysql更改为mysqli时登录无效

时间:2012-06-06 22:36:07

标签: php mysql mysqli

我在下面有一个代码,通过在数据库中匹配它的用户名和密码来记录教师,如果正确,则登录,如果不正确,则显示消息。

<?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时,即使用户名和密码匹配,也会导致登录无法正常工作。我做错了什么?

2 个答案:

答案 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混乱,但这与问题无关,除非您的用户名/密码可以包含受转义函数影响的字符。