2011-04-17 110 views
1

我有一個邏輯錯誤,我不能爲我的生活弄清楚。問題是我寫的非常非常基本的登錄頁面始終輸出默認的答案,而不是從表中選擇。邏輯錯誤PHP/SQL服務器

我想返回到php的值E_Type在這種情況下,值應該返回A,但事實並非如此。

我在做什麼錯?

代碼:

<?php 
$server = -Removed; 
$login = -Removed;    
$pass  = -Removed;   
$login = $_POST['login']; 
$password = $_POST['password']; 
$table = 'USERPASS'; 
$table2 = 'EMPLOYEES'; 
$res  = 'q'; 

$dblink = @mssql_connect(-Removed) or die("Error 1"); 
mssql_select_db('group5', $dblink) or die("unable to select the database"); 

$sqlquery = "SELECT E_TYPE FROM USERPASS U, EMPLOYEES E WHERE U.EMPLOYEE_ID = E.EMPLOYEE_ID AND PASSWORD = '$password' AND USERNAME = '$login'"; 
$res = mssql_query($sqlquery, $dblink) or die("Error5"); 
$count = mssql_num_rows($res); 

if($count==1) 
{ 
    if ($res == "A") 
    { 
     echo "Success 1"; 
    } 
    else if ($res == "B") 
    { 
     echo "Success 2"; 
    } 
    else 
    { 
     echo "Error..."; 
    } 
} 
?> 
+0

你究竟在做什麼,在1行解釋 – X10nD 2011-04-17 20:51:45

+0

這個腳本的輸出是什麼? – 2011-04-17 20:52:24

回答

1

您需要首先獲取結果。在$res中,基本上只有一個可以迭代結果的結果句柄。

使用mssql_fetch_assoc獲取的結果,並訪問它們(這將遍歷所有結果行):

while(($row = mssql_fetch_assoc($res)) !== FALSE) { 
    echo $row['E_TYPE']; 
} 

在你的情況(如果你只希望單行)使用此:

if($count == 1) { 
    $row = mssql_fetch_assoc($res); 
    if ($row['E_TYPE'] == "A") 
    { 
     echo "Success 1"; 
    } 
    else if ($row['E_TYPE'] == "B") 
    { 
     echo "Success 2"; 
    } 
    else { 
     echo "Error..."; 
    } 

} 
0
<?php 
$server = -Removed; 
$login = -Removed;   
$pass = -Removed;   
$login=$_POST['login']; 
$password=$_POST['password']; 
$table= 'USERPASS'; 
$table2='EMPLOYEES'; 
$res='q'; 

$dblink = @mssql_connect(-Removed) or die("Error 1"); 
mssql_select_db('group5', $dblink) or die("unable to select the database"); 
$sqlquery = "SELECT E_TYPE FROM USERPASS U, EMPLOYEES E WHERE U.EMPLOYEE_ID = E.EMPLOYEE_ID AND PASSWORD = '$password' AND USERNAME = '$login'"; 
$res = mssql_query($sqlquery, $dblink) or die("Error5"); 
$count=mssql_num_rows($res); 
    if(1 == $count){ 
     $row=mssql_fetch_assoc($res);//fetch row from database 
     switch($row['E_TYPE']) { 
      case "A": 
       echo "Success 1"; 
       break; 
      case "B": 
       echo "Success 2"; 
       break; 
      default: 
       echo "Error..."; 
       break; 
     } 
    } 
} 
mssql_free_result($res); 
?> 

你應該瞭解選擇... case語句。 我只能看到你的角色的情況。數據庫可能會或可能不區分大小寫。 你也錯過了一些有時會影響你的結果的東西:mysql_free_result()。 您通常應該在獲取行的時候執行一個while語句而不是if,因爲可能有多於一行。

我通常會在比較運算符和右側的變量之前放置常量,因爲編譯器在任何情況下都會因爲缺少=而變成賦值,所以它可能會有意義。