【问题标题】:PHP: check if posted variable exists or assign null valuePHP:检查发布的变量是否存在或分配空值
【发布时间】:2012-07-19 22:52:30
【问题描述】:

这可以在 JavaScript 中使用 isNAN 而不是 !isset 来完成。 使用下面的示例 - 两种形式都发布到我的脚本中,一种没有值,一种有值。如果 post var 不存在,下面的代码是在 PHP 中执行此操作的正确方法吗?

$mycheck = !isset($_POST['value']) ? 0 : $_POST['value'];

<? 
if($_POST) :
  $mycheck = !isset($_POST['value']) ? 0 : $_POST['value'];
  echo $mycheck;
endif;
?>

<!-- send value-->
<form action="" method="post">
  <select name="value">
    <option value="0">0</option>
    <option value="5">5</option>
  </select>
  <input type="submit" name="submit">
</form>

<!-- doesn't send value-->
<form action="" method="post">
  <input name="different_var">
  <input type="submit" name="submit">
</form>

【问题讨论】:

标签: php conditional-operator


【解决方案1】:

它有效,但有一种更简洁的编写方式。

从 PHP 5.3 开始,您可以将三元运算缩短为两个表达式,如下所示:

$mycheck = $_POST['value'] ?: 0;

它基本上意味着你已经拥有的东西。

【讨论】:

    【解决方案2】:

    是的,这是一种可以接受的设置默认值的方式。

    在 PHP 5.3 中引入的另一种方法是省略三元表达式的中间参数:

    $mycheck = $_POST['value'] ?: 0;
    

    但是,如果未设置 $_POST['value'],这可能会引发尝试使用不存在的键访问数组的通知。因此,您的原始方法更容易被接受。

    【讨论】:

    • 根据 OP 的意图,它应该是 $_POST['value'] 而不是 isset($_POST['value'])
    • 我认为 isset() 对于这个解决方案是完全可以接受的。它总是给出真或假,并且会完全按照 OP 的要求行事......
    • 所以如果发布的值是一个字符串,你的方法是可以接受的,但如果它是一个数组,最好使用我原来的方法?
    • 我会这么认为。三元运算符正在寻找真/假响应,isset() 将始终为您提供,即使使用数组也是如此。
    • @Innate 有点但不完全。这取决于该值是否已定义(因此,如果您有一个未定义的字符串 $value,缩写符号仍会引发通知)。然而,通知很少值得关注,几乎可以肯定不值得编写更长的代码来避免;如果会话已声明,session_start() 会向您发出通知,即使您在每个页面上都需要 session_start() 来延长会话,但无用通知的情况是。
    猜你喜欢
    • 2021-05-12
    • 2013-01-31
    • 2014-08-05
    • 1970-01-01
    • 2018-12-21
    • 2021-10-15
    • 2013-03-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多