PHP中的本地/全局变量

时间:2015-08-13 12:49:00

标签: php mysql

我是个新手。我有几个表来存储表单,我希望下一个用户的输入存储在响应最少的表中(每个表单都不同)。

我从sql db中获取了行计数,但它们正在运行。我使用下面的代码检测有多少响应,因此设置$ testnumber。

代码失败。基本上,当我回显$ testnumber时,行计数的值无关紧要,它只是根据第一个if语句进行随机化。

当我删除第一个if语句时,我收到一条错误,指出$ testnumber是未定义的,无论rowcounts的值是多少。

我绝对很困惑。在我看来,var $ testnumber在所有语句中是本地的(它们没有在其他地方定义)所以它们都应该工作或不工作。

我很感激一些帮助。我知道我的if语句是垃圾并没有涵盖所有情况,所以这里的任何帮助都会有用但最重要的是你能解释为什么我的其他语句被忽略以及为什么第一个不是?

谢谢

if ($rowcount1 = $rowcount2 = $rowcount3 = $rowcount4){ // if all rowcounts are equal
    $testnumber = mt_rand(1,4);
}

if ($rowcount1 < $rowcount2){ //rowcount for 1 is lowest
    if($rowcount1 < $rowcount3){
        if($rowcount1 < $rowcount4){            
        $testnumber = 1;
        }
    }
};

if ($rowcount2 < $rowcount1){ // rowcount for 2 is lowest
    if($rowcount2 < $rowcount3){        
        if($rowcount2 < $rowcount4){            
        $testnumber = 2;    

        }
    }
};

if ($rowcount3 < $rowcount1){ // rowcount for 3 is lowest
    if($rowcount3 < $rowcount2){    
        if($rowcount3 < $rowcount4){    
        $testnumber = 3;    
        }
    }
};

if ($rowcount4 < $rowcount1){ //rowcount for exp2 is lowest 
    if ($rowcount4 < $rowcount2){   
        if ($rowcount4 < $rowcount3){       
        $testnumber = 4;
        }
    }
};

echo“Final Testnumber:”。 $ testnumber;

1 个答案:

答案 0 :(得分:3)

您的第一个比较语句根本不是比较:单= 设置变量,双==测试是否相等。因此,您的条件将始终评估为TRUE,因为它正确设置变量。

最重要的是,您需要扩展您的语句,因为在PHP中,相等比较不会以这种方式工作。

if (($rowcount1 == $rowcount2) && ($rowcount2 == $rowcount3) && ($rowcount3 == $rowcount4)){ // if all rowcounts are actaully equal

查看相关的PHP文档:Assignment OperatorsComparison Operators

修改:您的下一个条件语句会因为您遇到Variable Scope问题而受到阻碍。基本上,为了访问$testnumber变量,您需要在条件块的“范围”之外定义它。

$testnumber = 0;
if (($rowcount1 == ...

虽然不在问题的范围内:根据您在此处提供的内容,查看PHP documentation on arrays可能是值得的,它会在您开始扩展代码时极大地帮助您。