混淆了PHP运营商的使用

时间:2012-03-18 21:45:10

标签: php operators comparison-operators

啊,啊。我有一个联系表单PHP脚本。我将它用于多个站点,因为它快速而简单。基本上,它以联系形式循环遍历所有表单字段,无论它们是什么。这样做我不必一个接一个地手动执行POST。

无论如何,我的问题很简单。以下是代码片段:

if ($thisField != "contact-submit") {
    if (($thisField != "human2"))  {
         $msg .= "<b>".$thisField ."</b>: ". $thisValue ."<br>";
    }
    }

现在,它执行此循环的问题是它拾取所有提交的内容,包括SUBMIT BUTTON和我隐藏的表单字段以阻止机器人。我不想向我的客户显示这些字段。

所以我没有做这两个嵌套循环,而是考虑做一个

if (($thisField != "human2") or ($thisField != "contact-submit")

但它不起作用......我也试过了||运营商也是如此。

我错过了什么?

2 个答案:

答案 0 :(得分:3)

$thisField将永远不是人类2或不是联系 - 总结(如果它是一个,它不是另一个)。你的意思是&&

if($thisField != "human2" && $thisField != "contact-submit")

答案 1 :(得分:2)

该表达式始终评估为true。如果将值与两个不同的值进行比较,则它总是至少与其中一个值不相等。 我认为您打算使用and&&,因此您可以检查该值是否不是这两个值中的任何一个。

if (($thisField != "human2") && ($thisField != "contact-submit")

if (!($thisField === "human2" or $thisField === "contact-submit"))

if (($thisField === "human2" or $thisField === "contact-submit") === false)
// Because you might easily overlook the exclamation mark in the second example

或使用in_array

if (! in_array($thisField, array('human2', 'contact-submit')))
// Easier add extra fields. You could stick the array in a variable too, for better readability