使用if / else语句混淆结果

时间:2011-10-27 03:11:33

标签: php if-statement

到目前为止,这是我的一些脚本:

$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有问题如果由于某种原因,当我使用用户名为2的用户时,echo显示21,我希望它是11或22:/

7 个答案:

答案 0 :(得分:4)

您需要使用==进行比较而不是=: 变化

if($roles = 1)

if($roles == 1)

else if($roles = 2)

else if($roles == 2)

如果您使用赋值(=)而不是比较(==),它不仅会评估为true,还会更改变量。

答案 1 :(得分:1)

您正在设置$roles的值,而不是检查是否相等。尝试将代码更改为:

if($roles == 1) {
  ...
}
else if ($roles == 2) {
  ...
}

答案 2 :(得分:1)

到处都是错别字:

if($roles = 1) {

应该是

if($roles == 1) {

第一个是做一个赋值,所以if()正在做一个asignment。新版本正在进行比较,可能会评估为false。

答案 3 :(得分:0)

更改

if($roles = 1) 

通过

if($roles == 1)

同样适用于

else if($roles = 2)

答案 4 :(得分:0)

那么你有什么理由不能这样做(没有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;

答案 5 :(得分:0)

嗯...

我不是一个很棒的PHP程序员,但是if语句没有起作用引起了我的注意:

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

没有按你的想法行事。这是设定值等于符号。您正在做的是将$roles的值设置为2。

那么,您为什么要在if声明中设置内容?

然后你可以做这样的事情:

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

在这里,我正在设置$roles的值并同时检查该值。

在大多数现代编程语言中,您使用加倍的等号来测试相等性:

if($ roles == 2){

PHP还有一个三等号,它不仅可以测试相等性,还可以测试相同性。

if($ a === $ b){

$a$b不仅彼此相等,而且它们的类型也相同。

答案 6 :(得分:0)

告诉您,您的整个代码完全没有意义 而不是2页,它必须只有几行。

$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: