修复PHP错误未定义索引的最佳方法-PHP5.5

修复PHP错误未定义索引的最佳方法-PHP5.5,php,Php,自从我尝试一个新的开源交易脚本并试图修复它们以来,我注意到了一些错误日志。其中大多数是“未定义属性”、“未定义索引”和“未定义变量”。所以,我尝试了这个答案(),现在没有错误日志,但我不确定这是否能够正常工作。这是文件的源代码,下面是我的修复程序,我不知道它是否正确。 如果可以的话,请看一看。多谢各位 PHP错误: 完整代码: / / 出现错误是因为您试图访问不存在的数组索引,所以 使用 如下 (isset($_REQUEST['method']) && $_REQUEST

自从我尝试一个新的开源交易脚本并试图修复它们以来,我注意到了一些错误日志。其中大多数是“未定义属性”、“未定义索引”和“未定义变量”。所以,我尝试了这个答案(),现在没有错误日志,但我不确定这是否能够正常工作。这是文件的源代码,下面是我的修复程序,我不知道它是否正确。 如果可以的话,请看一看。多谢各位

PHP错误:

完整代码:


/  / 

出现错误是因为您试图访问不存在的数组索引,所以

使用

如下

(isset($_REQUEST['method']) && $_REQUEST['method'] == 'google')

看来你已经明白了通知的原因;您试图访问不存在的数组索引。唯一的修复方法是在尝试获取索引之前确保索引存在。无论哪种方式,这都被认为是良好的实践,您应该适应这种方法:永远不要访问无法保证存在的索引

最常见的模式是执行以下操作:

$methodValue = null;
if (isset($_REQUEST['method']) and strlen($_REQUEST['method']) > 0) {
    $methodValue = $_REQUEST['method'];
}

这不会引发任何通知,而且无论索引是否存在,您都知道变量的值。此变量还提供了一个默认值,访问索引时不能使用。

可能重复@Martijn,是的,这是问题中也提到的OP。@axiac这不会使其减少重复。我对这个问题的理解是“我修好了。我修好了吗?”你应该使用,但在这种情况下,结果是一样的。不相关的,但是一个提示。。。PHP5.5已经在生命的尽头有一段时间了。由于未修补的漏洞,您的应用程序可能面临风险。谢谢您的回答。所以,我只添加了“isset”,并且是固定的,没有进一步的修改,对吗?好的,我把它改为isset,它工作得很好。我也将对其他错误做同样的处理。谢谢
<option <?= ($_REQUEST['method'] == 'google') ? 'selected="selected"' : false ?> value="google">Google Authenticator</option>
<option <?= ($_REQUEST['method'] == 'authy') ? 'selected="selected"' : false ?> value="authy">Authy</option>
<option <?= ($_REQUEST['method'] == 'SMS') ? 'selected="selected"' : false ?> value="SMS">SMS</option>
<option <?= (!empty($_REQUEST['method']) && $_REQUEST['method'] == 'google') ? 'selected="selected"' : false ?> value="google">Google Authenticator</option>
<option <?= (!empty($_REQUEST['method']) && $_REQUEST['method'] == 'authy') ? 'selected="selected"' : false ?> value="authy">Authy</option>
<option <?= (!empty($_REQUEST['method']) && $_REQUEST['method'] == 'SMS') ? 'selected="selected"' : false ?> value="SMS">SMS</option>
(isset($_REQUEST['method']) && $_REQUEST['method'] == 'google')
$methodValue = null;
if (isset($_REQUEST['method']) and strlen($_REQUEST['method']) > 0) {
    $methodValue = $_REQUEST['method'];
}