尝试了未定义索引的解决方案,但失败并出现相同的错误 [重复]

Tried solutions for undefined index but failing with the same error [duplicate]

提问人:Kevin Lynn 提问时间:1/28/2020 更新时间:1/28/2020 访问量:89

问:

我正在尝试解决未发送的错误。长话短说 - 我已将此错误处理程序添加到联系表单中。 它报告以下内容:-<mail>

E_NOTICE 文件 EmailScript.php 中的错误,位于第 72 行:未定义的索引:操作 错误出现在第 66 行,但我添加了我认为的解决方案:- 第 65 行到第 70 行。我还尝试提供 '$_request 和 $action 空数组“foo bar”值,以及其他尝试的解决方案。

这个超出了我的理解,伙计们,有没有机会得到一些提示?

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };

    return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };

    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// My code


if(isset($_REQUEST['action'])){
    $action = $_REQUEST['action'];
}
if(isset($action)){ 
    echo $action;
}

$action=$_REQUEST['action'];
if ($action=="")    /* display the contact form */
    {
    ?>
    <form  action="" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="action" value="submit">
    Your name:<br>
    <input name="name" type="text" value="" size="30"/><br>
    Your email:<br>
    <input name="email" type="text" value="" size="30"/><br>
    Your message:<br>
    <textarea name="message" rows="7" cols="30"></textarea><br>
    <input type="submit" value="Send email"/>
    </form>
    <?php
    } 
else                /* send the submitted data */
    {
    $name=$_REQUEST['name'];
    $email=$_REQUEST['email'];
    $message=$_REQUEST['message'];
    if (($name=="")||($email=="")||($message==""))
        {
        echo "All fields are required, please fill <a href=\"\">the form</a> again.";
        }
    else{        
        $from="From: $name<$email>\r\nReturn-path: $email";
        $subject="Message sent using your contact form";
        mail("[email protected]", $subject, $message, $from);


        }
    }  
?>
php 未定义索引

评论

0赞 showdev 1/28/2020
您是否在提交表单之前(即在页面加载时)收到错误?
0赞 Kevin Lynn 1/28/2020
是的,在向表单提交任何值之前,它会立即@showdev - 在加载页面后立即
0赞 showdev 1/28/2020
您似乎正在尝试访问不存在的键(即“未定义的索引”)。这很可能发生在您第二次定义 : 时。你只需要定义一次,你可以考虑使用 PHP 的三元运算符来定义它,而不管它是否存在于 (or ) 数组中:$_REQUEST$action$action=$_REQUEST['action'];$_REQUEST$_POST$action = !empty($_POST['action']) ? $_POST['action'] : '';
0赞 Kevin Lynn 1/28/2020
谢谢@DroidDev。毫无疑问,你们是网络上最好的,但你们对任何带有重复气味的惩罚也是 - SWIFT 和致命的 - :D
0赞 Kevin Lynn 1/28/2020
它只定义了一次@showdev - 最初错误在第 66 行 - 我添加了第 65 行到第 70 行。但即使我把它拿走,我也会得到同样的错误

答:

0赞 Boopathi D 1/28/2020 #1

请更正从 62 到 70 的行。

// My code

$action='';
if(isset($_REQUEST['action'])){
    $action = $_REQUEST['action'];
}

if ($action=="")    /* display the contact form */
    {

因为您需要定义变量 .$action

0赞 Kevin Lynn 1/28/2020 #2

这解决了 E 报告错误。我在网站推荐给我的线程中发现了一些东西。

<?php

// ----------------------------------------------------------------------------------------------------
// - Display Errors
// ----------------------------------------------------------------------------------------------------
ini_set('display_errors', 'On');
ini_set('html_errors', 0);

// ----------------------------------------------------------------------------------------------------
// - Error Reporting
// ----------------------------------------------------------------------------------------------------
error_reporting(-1);

// ----------------------------------------------------------------------------------------------------
// - Shutdown Handler
// ----------------------------------------------------------------------------------------------------
function ShutdownHandler()
{
    if(@is_array($error = @error_get_last()))
    {
        return(@call_user_func_array('ErrorHandler', $error));
    };

    return(TRUE);
};

register_shutdown_function('ShutdownHandler');

// ----------------------------------------------------------------------------------------------------
// - Error Handler
// ----------------------------------------------------------------------------------------------------
function ErrorHandler($type, $message, $file, $line)
{
    $_ERRORS = Array(
        0x0001 => 'E_ERROR',
        0x0002 => 'E_WARNING',
        0x0004 => 'E_PARSE',
        0x0008 => 'E_NOTICE',
        0x0010 => 'E_CORE_ERROR',
        0x0020 => 'E_CORE_WARNING',
        0x0040 => 'E_COMPILE_ERROR',
        0x0080 => 'E_COMPILE_WARNING',
        0x0100 => 'E_USER_ERROR',
        0x0200 => 'E_USER_WARNING',
        0x0400 => 'E_USER_NOTICE',
        0x0800 => 'E_STRICT',
        0x1000 => 'E_RECOVERABLE_ERROR',
        0x2000 => 'E_DEPRECATED',
        0x4000 => 'E_USER_DEPRECATED'
    );

    if(!@is_string($name = @array_search($type, @array_flip($_ERRORS))))
    {
        $name = 'E_UNKNOWN';
    };

    return(print(@sprintf("%s Error in file \xBB%s\xAB at line %d: %s\n", $name, @basename($file), $line, $message)));
};

$old_error_handler = set_error_handler("ErrorHandler");

// My code

$action = $_REQUEST['action'] ?? '';

if ($action=="")    /* display the contact form */
    {
    ?>
    <form  action="" method="POST" enctype="multipart/form-data">
    <input type="hidden" name="action" value="submit">
    Your name:<br>
    <input name="name" type="text" value="" size="30"/><br>
    Your email:<br>
    <input name="email" type="text" value="" size="30"/><br>
    Your message:<br>
    <textarea name="message" rows="7" cols="30"></textarea><br>
    <input type="submit" value="Send email"/>
    </form>
    <?php
    } 
else                /* send the submitted data */
    {
    $name=$_REQUEST['name'];
    $email=$_REQUEST['email'];
    $message=$_REQUEST['message'];
    if (($name=="")||($email=="")||($message==""))
        {
        echo "All fields are required, please fill <a href=\"\">the form</a> again.";
        }
    else{        
        $from="From: $name<$email>\r\nReturn-path: $email";
        $subject="Message sent using your contact form";
        mail("[email protected]", $subject, $message, $from);


        }
    }  
?>

但是,现在我在填写表格时根本没有收到错误 - 它正在加载空白页。从我所读到的内容来看,虽然不要假装完全理解,但这是某种类型的服务器问题。显然安装 Xamp 可以修复它,但我的服务器是树莓派,所以没有 Xamp 只有 LAMP。明天我会重新开始,伙计们,谢谢助攻。