0

我在下面的代码中有一个错误“注意:未定义的索引: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();
    }
4

5 回答 5

1

当您抑制错误时,您的代码仍然有效,因为它是“通知”。PHP 中有不同级别的错误,您可以将 PHP 配置为仅显示某些类型的错误。这是错误常量的完整列表:http ://www.php.net/manual/fr/errorfunc.constants.php注意错误在 PHP 中默认是禁用的,因为您的代码仍然可以正常工作,但修复它们总是好的.

出现此通知是因为您尝试访问的索引不存在。您可以使用 isset() 检查它们是否存在。

于 2013-07-26T15:16:42.040 回答
0

i)该错误有效,因为查询空白 user_email 字段是有效的,这是未定义索引时发生的情况。

ii) 您可以通过使用 isset 或空检查 $_POST['srEmail'] 的存在来纠正错误,如果不可用则提供默认值。

例如

// set email to blank if one not provided in the POST 
$email = isset($_POST["srEmail"])?isset($_POST["srEmail"]:"");  

iii)您应该能够回答为什么您会收到任何通知,因为它们可能表明您的代码中有错误。即使通知的来源已知并且对您的应用程序无害,您也应该在通知出现时对其进行处理,以便您可以在打开错误报告的情况下继续开发,而不会中断您的测试。

于 2013-07-26T15:13:56.743 回答
0

要抑制此错误,您应该检查变量是否已设置。事实上,这是一个最佳实践,因为如果变量为“假”或 0,那么它可能会导致意外行为

if(isset($_POST['srSend']) && isset($_POST['srEmail'])) {
于 2013-07-26T15:13:31.980 回答
0

这是通知

 Notice: Undefined index: srSend"

$_POST['srSend']不会设置php 代码最初运行的时间,因此您将收到此通知。你应该检查 isset()empty()如果条件像 if(isset($_POST['srSend']))

于 2013-07-26T15:13:46.687 回答
0

出现运行时通知是因为脚本发现了一些可能是错误的东西,但在正常运行脚本时也可能发生。操作员暂时将该@线路的错误报告级别设置为 0。如果该行触发错误,错误处理程序仍将被调用,但会以错误级别 0 调用。

注意错误与任何其他严重错误一样重要。错误会减慢你的应用程序的速度,你真的应该设计你的应用程序不要抛出错误,即使是很小的错误。在 PHP 愉快地继续执行脚本的情况下,许多其他语言将完全消失。

在进一步移动之前,您需要检查变量是否已设置:

if(isset($_POST['srSend']) && isset($_POST['srEmail'])) {
于 2013-07-26T15:25:33.780 回答