2012-06-06 42 views
-1

下面我有它登录一个老师在代码通过匹配它不工作时是在数据库中的用户名和密码,如果正确,然后登录,如果不正确,则显示一条消息。登录从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时,即使用户名和密码匹配,它也会导致登录无法工作。我究竟做错了什么?

+0

不幸的是,你将不得不挖掘/调试以找出实际问题所在(这里有很多代码)。数据库中存储的密码是密码或明文的散列吗?尝试回显sql查询并将其直接插入PMA或其他东西,这将显示是否存在任何错误。是否有任何PHP错误/警告? – craig1231

+0

@ craig1231没有错误,不用担心密码和用户名从数据库中退出等等。就像我之前提到的,我所做的只是将mysql部分更改为mysqli,然后在完美工作之前登录不起作用。我只想知道我是否在mysqli代码中做了错误的操作? – user1394925

+0

语法看起来很好,所以如果不能调试它,我就看不到问题所在。 – craig1231

回答

0

在我看来,你已经改变的不仅仅是MySQL来mysqli的,因为在您成功登录重定向的位置,它不会因为头已经发送工作。因此,如果登录成功,您只需重新登录即可。

为了避免这种情况,你需要所有的处理移动到顶部,之前在那里你开始输出HTML。

除此之外,我建议切换到准备语句以避免整个escape_string乱七八糟,但这与问题无关,除非您的用户名/密码可以包含受转义函数影响的字符。

2

我有PHP经验不多,但是当我将我的代码从MySQL到mysqli的,我发现了一些mysqli的命令有不同synatx。像mysqli_connect有第四个参数db_name(不知道这是否需要)。 也有所不同:mysql_real_escape_string($string)mysqli_real_escape_string($link, $string)