Ошибка в логике PHP / SQL Server - PullRequest
1 голос
/ 18 апреля 2011

У меня логическая ошибка, которую я не могу понять на всю жизнь. Проблема в том, что эта очень простая базовая страница входа, которую я написал, всегда выводит ответ по умолчанию, а не выбор из таблицы.

Я пытаюсь вернуть 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...";
    }
}
?>

Ответы [ 3 ]

1 голос
/ 18 апреля 2011

mssql_query возвращать набор результатов MS SQL, чтобы получить возвращаемое значение, сначала нужно извлечь строку из этого набора результатов. См. http://www.php.net/manual/en/function.mssql-fetch-assoc.php и другие функции mssql_fetch

1 голос
/ 18 апреля 2011

Сначала вам нужно получить результат. В $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 голосов
/ 18 апреля 2011
<?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);
?>

Вы должны узнать о выражениях select ... case.Единственное, что я вижу, это дело твоих персонажей.базы данных могут быть или не быть чувствительными к регистру.вам также не хватает чего-то, что иногда может повлиять на ваши результаты: mysql_free_result ().обычно вы должны делать оператор while для получения строк, а не if, потому что может быть более 1 строки.

Обычно я ставлю константу перед оператором сравнения, а переменную справа, когда это возможно и имеет смысл, потому что компилятор поймает ошибку, если в любом случае она станет присваиванием из-за отсутствия =.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...