2011-04-17 89 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,因为可能有多于一行。

我通常会在比较运算符和右侧的变量之前放置常量,因为编译器在任何情况下都会因为缺少=而变成赋值,所以它可能会有意义。