Смешение результата с оператором if / else - PullRequest
0 голосов
/ 27 октября 2011

это мой сценарий:

$check = ("SELECT username FROM users WHERE username = '$us3r'");
$check2 = ("SELECT password FROM users WHERE username = '$us3r'");
$check3 = ("SELECT userID FROM users WHERE username = '$us3r'");
$check4 = ("SELECT userrole FROM users WHERE username = '$us3r'");

//Role

$role = mysql_query($check4);
$arr5 = mysql_fetch_row($role);
$roles = ($arr5[0]);

echo $roles;

if($roles = 1) {

    //Username

    $results3 = mysql_query($check);
    $arr2 = mysql_fetch_row($results3);
    $results4 = ($arr2[0]);

    //Password

    $results5 = mysql_query($check2);
    $arr3 = mysql_fetch_row($results5);
    $results6 = ($arr3[0]);

    //UID

    $id1 = mysql_query($check3);
    $arr4 = mysql_fetch_row($id1);
    $id = ($arr4[0]);

    echo 1;

}

else if($roles = 2) {

    //Username

    $mresults3 = mysql_query($check);
    $marr2 = mysql_fetch_row($mresults3);
    $mresults4 = ($marr2[0]);

    //Password

    $mresults5 = mysql_query($check2);
    $marr3 = mysql_fetch_row($mresults5);
    $mresults6 = ($arr3[0]);

    //UID

    $mid1 = mysql_query($check3);
    $marr4 = mysql_fetch_row($mid1);
    $mid = ($marr4[0]);

    echo 2;

};

Однако что-то не так с моим if / else, если по какой-то причине эхо показывает 21, когда я использую пользователя с ролью пользователя 2, я хочу, чтобы это было либо 11, либо 22: /

Ответы [ 7 ]

4 голосов
/ 27 октября 2011

Вам нужно использовать == для сравнения вместо =: измените

if($roles = 1)

на

if($roles == 1)

и

else if($roles = 2)

на

else if($roles == 2)

Если вместо сравнения (==) использовать присвоение (=), оно не только будет иметь значение true, но и изменит переменную.

1 голос
/ 27 октября 2011

проверь везде:

if($roles = 1) {

должно быть

if($roles == 1) {

Первый выполняет присваивание, поэтому if () выполняет присваивание. Вместо этого в новой версии выполняется сравнение, и оно может потенциально принимать значение false.

1 голос
/ 27 октября 2011

Вы устанавливаете значение $roles вместо проверки на равенство. Попробуйте изменить код на:

if($roles == 1) {
  ...
}
else if ($roles == 2) {
  ...
}
0 голосов
/ 27 октября 2011

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

$us3r = mysql_real_escape_string($us3r);
$sql  = "SELECT * FROM users WHERE username = '$us3r'"; 
$res  = mysql_query($sql); 
$userdata = mysql_fetch_assoc($role); 
// now you have all user's data in the $userdata array.
// echo $userdata['username'];  for example will echo a username
// no need for the separate queries, no need to write the same code twice.

// and, finally
echo $userdata['userrole'];
//it seems the only thing your code does - echoing the actual userrole value:
0 голосов
/ 27 октября 2011

Хммм ...

Я не большой PHP-программист, но неработающий оператор if привлек мое внимание:

$roles = ($arr5[0]);
if ($roles = 2) {

не делает то, что вы думаете.Это установленное значение знак равенства.Что вы делаете, это устанавливаете значение $roles в 2.

Итак, почему вы хотите установить что-то в своем выражении if?

Затем вы можете делать такие вещи, какэто:

if (($roles = $arr5[0]) == 2) {

Здесь я устанавливаю значение $roles и проверяю значение одновременно.

В большинстве современных языков программирования вы используете удвоенное значение, равноезнак для проверки на равенство:

if ($ role == 2) {

PHP также имеет тройной знак равенства, который может проверять не только равенство, но и сходство.

if ($ a === $ b) {

Мало того, что $a и $b не только равны друг другу, но они также одного типа.

0 голосов
/ 27 октября 2011

Так есть ли причина, по которой вы не можете просто сделать это (нет if / else)?

$check = ("SELECT username FROM users WHERE username = '$us3r'");
$check2 = ("SELECT password FROM users WHERE username = '$us3r'");
$check3 = ("SELECT userID FROM users WHERE username = '$us3r'");
$check4 = ("SELECT userrole FROM users WHERE username = '$us3r'");

//Role

$role = mysql_query($check4);
$arr5 = mysql_fetch_row($role);
$roles = ($arr5[0]);

echo $roles;

//Username

$results3 = mysql_query($check);
$arr2 = mysql_fetch_row($results3);
$results4 = ($arr2[0]);

//Password

$results5 = mysql_query($check2);
$arr3 = mysql_fetch_row($results5);
$results6 = ($arr3[0]);

//UID

$id1 = mysql_query($check3);
$arr4 = mysql_fetch_row($id1);
$id = ($arr4[0]);

echo $roles;
0 голосов
/ 27 октября 2011

Изменение

if($roles = 1) 

на

if($roles == 1)

То же самое для

else if($roles = 2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...