2012-06-06 88 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)