比较运算符!=不在<SELECT>字段中工作

时间:2020-05-29 作者:pandglobal

如果表单没有失败,我想确保在下拉列表中只选择男性或女性,但即使选择了男性或女性,我的验证仍会返回false。

Html

<select name="gender">
    <option value="Male">Male</option>
    <option value="Female">Female</option>
    <option value="Nonesense" selected>Nonesense</option>
</select>
下面是php代码

if ( isset( $_POST[\'submit\'] ) ) {
    if ( $_POST[\'gender\'] != \'Male\' || $_POST[\'gender\'] != \'Female\' ) { 
        echo \'sorry it must be either male or female\'; return \'\';
    }
}

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

它不起作用的原因是由于逻辑错误,如果手动按照代码中与select 元素,或!!=

让我们看看你的条件:

$_POST[\'gender\'] != \'Male\' || $_POST[\'gender\'] != \'Female\'
如果(性别不是男性)或(性别不是女性),则投诉必须是男性/女性,因此可以说性别是男性:

如果(false)或(true),则投诉必须是男性/女性if true 投诉出现了。

看来,问题是对OR 作品

a OR b <;-如果“a”、“b”或“a”和“b”均为真,则此解析为真。

我想你的意思是:

if ( gender is male OR gender is female ) is not true

而不是

if ( gender is not male ) OR ( gender is not female )

But finally, this question and answer has nothing to do with WordPress.

SO网友:dkeeling

问题在于“或”操作符。例如,尽管可以选择“男性”,但“女性”不是,这仍然使该陈述在整体上是正确的。

我会这样做:

$accepted_values = array(\'Male\', \'Female\');

if(isset($_POST[\'submit\'])){
  if(in_array($_POST[\'gender\'],$accepted_values)) {
    // Value is \'Male\' or \'Female\'
  } else {
    echo \'sorry it must be either male or female\';
  }
}