在foreach循环数组时出现“未定义的索引”错误,抱怨变量值。

3
我正在尝试编写一个函数来替换一大段重复的代码:
$inputVals = array( $siteId, $siteName, $numHspaBbu, $numLteBbu, $extAlarmsTerminated, $cellLowPower );

    function updateVarVals( $inputVals ) { // assign values to $vars after Update button clicked      
      foreach( $inputVals as $val ) {
        if ( $_POST[ $val ] !== "" ) { // if $_POST value is not empty then assign to $var and corresponding $_SESSION value  
        $val = $_SESSION[ $val ] = $_POST[ $val ];
        } else { // re-assign $_SESSION value to $var
          $val = $_SESSION[ $val ];
        } // close IF
      } // close FOREACH
    } // close FUNC

    updateVarVals( $inputVals );

但是无论我如何引用$val,我都会得到以下结果:

Notice: Undefined index: <$val value> in C:\xampp\htdocs\database on line 145.

在循环的每一次迭代中,为什么PHP要求变量值在此处被定义?

您能分享有关传递给$inputVals的变量的更多信息吗?这些键是否被用作$_POST数组中的键? - Afshan Shujat
你验证了你的输入是否被设置并且不为空吗? - Masivuye Cokile
@Masivuye Cokile:输入最初由SQL查询设置到检索事件的DB中,print_r($inputVals);证明了这一点。然后,如果用户更改其中一个输入并单击更新,JS代码会检测到on(change)并通过ajax.php文件发送更改,我现在正在尝试使用它来相应地更新php变量:如果(empty($_POST[$val]) {则重新分配$_SESSION[$val]到$var,否则将更改的输入值分配给$var和$_SESSION[$val]。更新事件后,print_r($inputVals);再次证明已相应地分配更改的值。 - commnux
1个回答

1
如果您的$_POST[$val]不存在,那么它会抛出该错误。
如果您将if ( $_POST[ $val ] !== "" ) {替换为if ( empty($_POST[ $val ]) ) {,它将检查变量是否设置且不为空,那么您就不应该再收到该错误了。

返回empty()而不是更改。但很高兴你指出了这一点,因为最近我一直在沉浸在JS教程中,发现自己经常混淆惯例。谢谢。 - commnux

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接