检查变量等于某个数字

时间:2012-11-09 17:43:14

标签: php validation if-statement

我需要检查以确保变量等于5,10,50或100.如果没有,那么我想将其设置为5.有人可以告诉我这个IF语句有什么问题吗?

if (isset($_REQUEST['number']) && $_REQUEST['number'] !== "5" || $_REQUEST['number'] !== "10" || $_REQUEST['number'] !== "50" || $_REQUEST['number'] !== "100") {
  $number = 5;
} else {
  $number = $_REQUEST['number'];
}

6 个答案:

答案 0 :(得分:5)

你需要打破逻辑以克服operator precedence。如有疑问,请使用括号。

我也颠倒了逻辑。它读起来更自然。

if (isset($_REQUEST['number']) && ($_REQUEST['number'] == "5" || $_REQUEST['number'] == "10" || $_REQUEST['number'] == "50" || $_REQUEST['number'] == "100")) {
  $number = $_REQUEST['number'];
} else {
  $number = 5;
}

虽然上述方法有效,但您也可以使用in_array()等方式对其进行简化。

isset($_REQUEST['number']) && in_array($_REQUEST['number'], array(5, 10, 50, 100))

答案 1 :(得分:1)

尝试:

 if (isset($_REQUEST['number']) && ($_REQUEST['number'] == "5" || $_REQUEST['number'] == "10" || $_REQUEST['number'] == "50" || $_REQUEST['number'] == "100")) {
  $number = $_REQUEST['number']; 
 } else {
   $number = 5;
 }

答案 2 :(得分:1)

你有一些非常令人困惑的代码。没有你说你想要的。

这应该是它:

if (isset($_REQUEST['number']) && in_array($_REQUEST['number'], array(5, 10, 50, 100))) {
    $number = (int) $_REQUEST['number'];
} else {
    $number = 5;
}

结合其他答案,谢谢大家:)

答案 3 :(得分:0)

你需要稍微交换一下:

if (!isset($_REQUEST['number']) || ($_REQUEST['number'] !== "5" && $_REQUEST['number'] !== "10" && $_REQUEST['number'] !== "50" && $_REQUEST['number'] !== "100")) {
  $number = 5;
} else {
  $number = $_REQUEST['number'];
}

上述说明:如果未设置数字,请将其设为5.如果设置了但不是5,10,50或100,则将其设置为5.否则,保持原样。

答案 4 :(得分:0)

从长远来看,将逻辑分解为不同的格式可能会更容易尝试更清晰,而不是只有一个'if'语句。

$acceptable = array(5, 10, 50, 100);
$number     = null;

if (isset($_REQUEST['number']) {
    $number = intval($_REQUEST['number']);
}

if (!in_array($number, $acceptable)) {
    $number = 5;
}

但是将它保持为单个if语句:

if (
    isset($_REQUEST['number']) && (
        $_REQUEST['number'] === "5" ||
        $_REQUEST['number'] === "10" ||
        $_REQUEST['number'] === "50" ||
        $_REQUEST['number'] === "100"
    )
) {
  $number = $_REQUEST['number'];
} else {
  $number = 5;
}

答案 5 :(得分:0)

虽然iMoses和其他人已经规定了简化日常工作的基础知识,但我建议对in_array()检查进行更严格的检查。如果你没有$_REQUEST['number'],例如等于'10F',它也会通过。

// I like to define default values up front.
$number = 5;

// since $_REQUEST['number'] should always be a string
// make in_array() check strictly against these string values
$allowedNumbers = array( '5', '10', '50', '100' );

// make in_array check strictly
if( isset( $_REQUEST['number'] ) && in_array( $_REQUEST['number'], $allowedNumbers, true ) )
{
    // get proper integer value
    $number = intval( $_REQUEST['number'] );
}

var_dump( $number );