逻辑错误PHP/SQL服务器
问题描述:
我有一个逻辑错误,我不能为我的生活弄清楚。问题是我写的非常非常基本的登录页面始终输出默认的答案,而不是从表中选择。逻辑错误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...";
}
}
?>
答
您需要首先获取结果。在$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...";
}
}
答
mssql_query
返回MS SQL结果集,要获取返回值,您必须首先从此结果集中获取行。见http://www.php.net/manual/en/function.mssql-fetch-assoc.php等mssql_fetch功能
答
<?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,因为可能有多于一行。
我通常会在比较运算符和右侧的变量之前放置常量,因为编译器在任何情况下都会因为缺少=而变成赋值,所以它可能会有意义。
你究竟在做什么,在1行解释 – X10nD 2011-04-17 20:51:45
这个脚本的输出是什么? – 2011-04-17 20:52:24