我是php的新手并且一直试图让这种比较无效:
我有一个可能包含
的变量'productCode'我需要知道变量productCode中的内容是什么?它仍然是“选择”或“102”(如只有数字的字符串)
我应该使用什么比较运算符?
它具有“选择”的价值吗? 它应该是
我试过
if(strcmp($productCode,'Choose')){
}//tried double quotes also
if(($productCode=='Choose')){
}//tried double quotes also
if(($productCode==='Choose')){
}//tried double quotes also
我偶然发现了这个...... '102'与'Choose'相比也传递了if语句......
有人可以用正确的方法检查这个混合案例吗?
编辑1: 相关代码(在合并了Rizier123的=== 0建议之后:
$productCode11=$_POST['productCode11'];
$productCode12=$_POST['productCode12'];
$productCode13=$_POST['productCode13'];
if(strcmp($productCode11,'Choose') === 0){
//testing the values if they actually hold what I am expecting
echo '<script type="text/javascript">alert(" '.$productCode11.' ");</script>';
echo '<script type="text/javascript">alert(" '.$productCode12.' ");</script>';
//testing if the 'if' check passes
echo '<script type="text/javascript">alert("same");</script>';
$productCode11Error="Fill This";
$incomplete=true;
}
if(strcmp($productCode12,'Choose') === 0)){
$productCode12Error="Fill This";
$incomplete=true;
}
if(strcmp($productCode13,'Choose') === 0){
$productCode13Error="Fill This";
$incomplete=true;
}
编辑2 我做了一些测试,这些是我得到的奇怪结果:
$test = strcmp($productCode11, 'Choose');
$test2 = strcmp($productCode11, $productCode12);
if both are 'Choose' I get 1 and it is incremented by 1 for every submission (2,3,4,5...)
if both are numbers and same, I get 0
if LHS is number and RHS is 'Choose', I get -1
if LHS and RHS are 'Choose' I get 1,3,4..
if LHS is 'Choose' and RHS is number I get 1
if both are numbers, and LHS > RHS I get 1
if both are numbers and RHS > LHS I get -3
答案 0 :(得分:1)
你的第一次尝试正常运作。但是你必须知道,strcmp()
返回0,当字符串相等时,所以只需添加一个比较,例如。
if(strcmp($productCode, 'Choose') === 0) {
//^^^^^ See here
}
因此,如果$productCode
等于"Choose"
,则评估为真。
<强>旁注:强>
strcmp()
区分大小写,表示:aA != aa
strcasecmp()
不区分大小写,表示aA == aa
答案 1 :(得分:0)
经过长时间的试验和错误,我怀疑从$ POST返回的变量可能有一些额外的字符。为了解决这个问题,我尝试使用trim()
函数。令人惊讶的是,一切都开始工作'预期'。
(我坚持Rizier123的=== 0建议)