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


Testing for $_POST var affects variable even though $_POST should be undefined

多年来,我一直使用这种方法来测试$ _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']) {是否是糟糕的形式?

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

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

或对于整数:

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

尝试

$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"; //