var_dump($_POST) 显示数组时,为什么会出现未定义索引错误?

Why Am I Getting an Undefined Index Error When var_dump($_POST) Shows an Array?

我有一个将数据发布到同一本地站点上的 PHP 页面的表单。我知道数据发布正确,因为 var_dump($_POST) 输出一个包含预期信息的数组,如下所示。

但是,当我尝试将变量设置为数组中的值之一时,我在日志中收到一条错误通知,指出我有一个未定义的索引(用于电子邮件和 g-captcha 响应字段)并且PHP 代码没有按预期工作。

我一直在绞尽脑汁想弄清楚为什么会发生这种情况已经有一段时间了,其他类似的问题也没有找到答案。任何帮助,将不胜感激。谢谢!

表格代码:

<form action="recaptcha.php" method="post" class="pardot-email-form-handler" id="carter" novalidate>
    <input class="one-field-pardot-form-handler" maxlength="80" name="email" id="email" size="20" type="email" placeholder="Enter Email Address" required="required" />
    <div style="position:absolute; left:-9999px; top: -9999px;">
        <label for="pardot_extra_field">
            Comments
        </label>
        <input type="text" id="pardot_extra_field" name="pardot_extra_field">
    </div>
    <button class="g-recaptcha" data-sitekey="6LeErDUUAAAAAEOYqDrylFnEwQkYp7qmPjs2_Z0o" data-callback="captchaSubmit" data-badge="inline">
        Submit
    </button>
</form>

PHP代码:

var_dump($_POST);
// reCaptcha info
$secret = "anonymous";
$remoteip = $_SERVER["REMOTE_ADDR"];
$url = "https://www.google.com/recaptcha/api/siteverify";

// Form info
$email = $_POST["email"];
$response = $_POST["g-recaptcha-response"];

// Curl Request
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
    'secret' => $secret,
    'response' => $response,
    'remoteip' => $remoteip
    ));
$curlData = curl_exec($curl);
curl_close($curl);

// Parse data
$recaptcha = json_decode($curlData, true);
if ($recaptcha["success"])
    echo "Success!";
else
    echo "Failure!";

Var_Dump 结果:

  array (size=3)
  'email' => string 'an email address' (length=21)
  'pardot_extra_field' => string 'a comment' (length=12)
  'g-recaptcha-response' => string 'a long response' (length=441)

PHP 错误信息:

[01-Jan-2018 15:42:02 UTC] PHP Notice: Undefined index: first in C:\wamp\www\local\public\recaptcha.php on line 17

[01-Jan-2018 15:42:02 UTC] PHP Stack trace:

[01-Jan-2018 15:42:02 UTC] PHP 1. {main}() C:\wamp\www\local\public\recaptcha.php:0

[01-Jan-2018 15:42:02 UTC] PHP Notice: Undefined index: last in C:\wamp\www\local\public\recaptcha.php on line 18

[01-Jan-2018 15:42:02 UTC] PHP Stack trace:

[01-Jan-2018 15:42:02 UTC] PHP 1. {main}() C:\wamp\www\local\public\recaptcha.php:0

根据您添加的错误消息,代码正在数组中查找索引 first/last,但找不到它。

但是您的代码中似乎没有对这些键名的任何此类引用。

您的代码中似乎没有索引为 first 或 last 的数组。

并且也没有名为 first 或 last 的表单输入标签。

检查您引用的文件是否正确。

here(windows 10,xampp,PHP Version 7.1.8) with "small" modifies i got your secret code is wrong(invalid-input-secret see ) 但是在验证验证码后你如何看到结果存在 https://developers.google.com/recaptcha/docs/display

结果: array(3) { ["email"]=> string(16) "sadasd@sdasd.com" ["pardot_extra_field"]=> string(0) "" ["g-recaptcha-response"]=> string(334 ) "03AMPJSYXAiSFTZyU0mzcYHYpzpKF8EODvfGkWJHQjc8fgNVNFgv3lm7ZSZVwSpwXtvHRS3JnNwAtsnfsdwpQMXz10zw7xSmhx8Jd7IkZ6J86Boh70WXXBjrczIGMcndbHZSW3boZucbO8sneKrcuZDsIqrGsmi00ECwDZ3ntvpq5qATQeDN5nhuSOesdgdG7V_XMjKINHPUZPh0ZA6fPsMXvD4GNeGqOvaB1OJidQvaxcdK7vIr-aOqr5tOJNbwxSRR941caXJT5ggkWnA4O2bzQrphcIdQ3USyO0OcKPNBqN1IWGE18XGE0ioesL3YScvoMKFzWkeF-F" } 03AMPJSYXAiSFTZyU0mzcYHYpzpKF8EODvfGkWJHQjc8fgNVNFgv3lm7ZSZVwSpwXtvHRS3JnNwAtsnfsdwpQMXz10zw7xSmhx8Jd7IkZ6J86Boh70WXXBjrczIGMcndbHZSW3boZucbO8sneKrcuZDsIqrGsmi00ECwDZ3ntvpq5qATQeDN5nhuSOesdgdG7V_XMjKINHPUZPh0ZA6fPsMXvD4GNeGqOvaB1OJidQvaxcdK7vIr-aOqr5tOJNbwxSRR941caXJT5ggkWnA4O2bzQrphcIdQ3USyO0OcKPNBqN1IWGE18XGE0ioesL3YScvoMKFzWkeF-F{ "success": false, "error-codes": [ "invalid-input-secret" ] }失败!

<?php
var_dump($_POST);
    // reCaptcha info
    $secret = "anonymous";
    $remoteip = $_SERVER["REMOTE_ADDR"];
    $url = "https://www.google.com/recaptcha/api/siteverify";


if(isset($_POST["email"])){

    // Form info
    $email = $_POST["email"];
    $response = $_POST["g-recaptcha-response"];

    // Curl Request
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, array(
        'secret' => '6LeErDUUAAAAAEOYqDrylFnEwQkYp7qmPjs2_Z0o',//$secret,
        'response' => $response,
        'remoteip' => $remoteip
        ));
    $curlData = curl_exec($curl);
    curl_close($curl);
print_r($response);
print_r($curlData);
    // Parse data
    $recaptcha = json_decode($curlData, true);
    if ($recaptcha["success"])
        echo "Success!";
    else
        echo "Failure!";
}
?>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>

<!-- recaptcha.php --><form action="" method="post" class="pardot-email-form-handler" id="carter" novalidate>
    <input class="one-field-pardot-form-handler" maxlength="80" name="email" id="email" size="20" type="email" placeholder="Enter Email Address" required="required" />
    <div style="position:absolute; left:-9999px; top: -9999px;">
        <label for="pardot_extra_field">
            Comments
        </label>
        <input type="text" id="pardot_extra_field" name="pardot_extra_field">
    </div>
    <!-- <button class="g-recaptcha" data-sitekey="6LeErDUUAAAAAEOYqDrylFnEwQkYp7qmPjs2_Z0o" data-callback="captchaSubmit" data-badge="inline">
        Submit
    </button> -->
    <input type="submit" value="Submit">

     <div class="g-recaptcha" data-sitekey="6LeErDUUAAAAAEOYqDrylFnEwQkYp7qmPjs2_Z0o"></div>

</form><hr><?php phpinfo(); ?>