我在下面的代码中有一个错误“注意:未定义的索引: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();
}
答案 0 :(得分:1)
当您压制错误时,您的代码仍然有效,因为它是“通知”。 PHP中存在不同级别的错误,您可以将PHP配置为仅显示某些类型的错误。以下是错误常量的完整列表:http://www.php.net/manual/fr/errorfunc.constants.php默认情况下,PHP中会禁用通知错误,因为您的代码仍然可以正常工作,但修复它们总是很好。
发生此通知是因为您尝试访问的索引不存在。您可以使用isset()来检查它们是否存在。
答案 1 :(得分:0)
要抑制此错误,您应检查是否已设置变量。事实上,这是一种最佳实践,因为如果变量为“假”或0则可能导致意外行为
if(isset($_POST['srSend']) && isset($_POST['srEmail'])) {
答案 2 :(得分:0)
这是通知
Notice: Undefined index: srSend"
当PHP代码最初运行时$_POST['srSend']
将不会被设置,因此您将收到此通知。如果条件为isset()
empty()
或if(isset($_POST['srSend']))
查看
答案 3 :(得分:0)
i)错误有效,因为查询空白user_email字段是有效的,这是未定义索引时发生的情况。
ii)您可以通过检查isset或empty的$ _POST ['srEmail']是否存在来更正错误,如果不可用则提供默认值。
例如
// set email to blank if one not provided in the POST
$email = isset($_POST["srEmail"])?isset($_POST["srEmail"]:"");
iii)您应该能够回答为什么收到任何通知,因为它们可能表示代码中存在错误。即使通知的来源已知并且对您的应用程序没有损害,您应该在通知出现时处理通知,这样您就可以继续开发错误报告,而不会中断您的测试。
答案 4 :(得分:0)
运行时通知发生是因为脚本发现可能是错误的内容,但在正常运行脚本时也可能发生。 @
运算符临时将该行的错误报告级别设置为0。如果该行触发错误,仍将调用错误处理程序,但将调用错误级别为0。
注意错误与任何其他严重错误一样重要。错误会降低你的应用程序的速度,你真的应该设计你的应用程序不要抛出错误,即使是小错误。在PHP愉快地继续执行脚本的情况下,许多其他语言将完全死亡。
在进一步移动之前,您需要检查变量是否已设置:
if(isset($_POST['srSend']) && isset($_POST['srEmail'])) {