对$ _POST var的测试会影响变量,即使$ _POST应该是未定义的

时间:2012-05-10 19:43:58

标签: php

我多年来一直使用这种测试$ _POST var并同时为$ var赋值的方法。

今天我遇到了一个服务器,它似乎与它的处理方式不同。

我正在加载页面http://site.com/foo.php?var=bar没有表单发布...并且测试$ _POST var似乎取消了我的初始作业

$var= $_GET['var'];

echo "var is $var\n";  // correctly echos $_GET['var'] 

if ($var= $_POST['foo']) {
    echo "POST foo seen\n";  // does not fire, condition not met
}

echo "var is $var\n";  // does not echo $_GET['var'] 

当我切换到

if (isset($_POST['foo'])) {
    $var = $_POST['foo'];
...

我摆脱了不安的行为。

所以我的问题是这个if ($var= $_POST['foo']) {是不是很糟糕?

2 个答案:

答案 0 :(得分:1)

您正在使用赋值运算符=而不是比较运算符==。另请注意,在访问未定义的数组元素时,PHP将发出E_STRICT警告。因此,最好的选择通常是:

$ name = trim(isset($ _ POST ['name'])?$ _POST ['name']:'');

或整数:

$ age = intval(isset($ _ POST ['age'])?$ _POST ['age']:'');

答案 1 :(得分:0)

尝试

$var = isset ( $_GET ['var'] ) ? $_GET ['var'] : null;
$foo = isset ( $_GET ['foo'] ) ? $_GET ['foo'] : null;

echo "var is $var\n"; // correctly echos $_GET['var']

if ($var === $foo) {
    echo "POST foo seen\n"; // does not fire, condition not met
}

echo "var is $var\n"; //