我在下面的代码中有一个错误"注意:未定义的索引:srSend"。我有两个问题:
i) 如果我抑制错误,为什么这个代码能工作?未定义的索引是错误有关系吗?ii)无论如何,我该如何纠正这个错误?
<?php
//db connection
$mysqli = new mysqli("localhost", "root", "", "test");
if ($mysqli->connect_errno) {
echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if($_POST['srSend'] && $_POST['srEmail']) {
//check if email already taken
if ($stmt = $mysqli->prepare("SELECT user_pin FROM users WHERE user_email = ?")) {
$stmt->bind_param("s", strtolower($_POST['srEmail']));
$stmt->execute();
$stmt->bind_result($user_pin);
$stmt->fetch();
$stmt->close();
}
当您抑制错误时,您的代码仍然可以工作,因为它是一个"通知"。PHP中有不同级别的错误,您可以将PHP配置为只显示某些类型的错误。以下是Error常量的完整列表:http://www.php.net/manual/fr/errorfunc.constants.php注意,PHP中默认情况下会禁用错误,因为您的代码仍然可以正常工作,但修复它们总是很好的。
出现此通知是因为您试图访问的索引不存在。您可以使用isset()来检查它们是否存在。
要抑制此错误,您应该检查变量是否已设置。事实上,这是一种最佳实践,因为如果变量为"false"或0,则可能导致意外行为
if(isset($_POST['srSend']) && isset($_POST['srEmail'])) {
这是的通知
Notice: Undefined index: srSend"
php代码最初运行时不会设置$_POST['srSend']
,因此您将收到此通知。如果条件类似if(isset($_POST['srSend']))
isset()
或empty()
进行检查i) 该错误之所以有效,是因为查询空白的user_email字段是有效的,而当索引未定义时,就会发生这种情况。
ii)您可以通过检查是否存在带有isset或为空的$_POST["电子邮件"]来更正错误,如果不可用,则提供默认值。
例如
// set email to blank if one not provided in the POST
$email = isset($_POST["srEmail"])?isset($_POST["srEmail"]:"");
iii)您应该能够回答为什么收到任何通知,因为这些通知可能表明您的代码中存在错误。即使通知的来源是已知的,并且不会对您的应用程序造成损害,您也应该在通知出现时对其进行处理,这样您就可以在打开错误报告的情况下继续开发,而不会干扰您的测试。
出现运行时通知是因为脚本发现了一些可能是错误的东西,但在正常运行脚本时也可能发生。@
运算符将该行的错误报告级别临时设置为0。如果该行触发错误,错误处理程序仍将被调用,但调用时错误级别为0。
注意,错误和其他关键错误一样重要。错误会减慢你的应用程序的速度,你真的应该设计应用程序,不要抛出错误,即使是小错误。在PHP愉快地继续执行脚本的情况下,许多其他语言将完全消亡。
在进一步移动之前,您需要检查变量是否已设置:
if(isset($_POST['srSend']) && isset($_POST['srEmail'])) {