[英]Why Am I Getting an Undefined Index Error When var_dump($_POST) Shows an Array?
我有一個將數據發布到同一本地站點上的PHP頁面的表單。 我知道數據已正確發布,因為var_dump($_POST)
輸出具有預期信息的數組,如下所示。
但是,當我嘗試將變量設置為數組中的值之一時,我在日志中收到一條錯誤通知,指出我有一個未定義的索引(用於email和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錯誤消息:
[2018年1月1日15:42:02 UTC] PHP注意:未定義的索引:第17行的C:\\ wamp \\ www \\ local \\ public \\ recaptcha.php中的第一個
[2018年1月1日15:42:02 UTC] PHP堆棧跟蹤:
[2018年1月1日15:42:02 UTC] PHP 1. {main}()C:\\ wamp \\ www \\ local \\ public \\ recaptcha.php:0
[2018年1月1日15:42:02 UTC] PHP注意:未定義的索引:第18行的C:\\ wamp \\ www \\ local \\ public \\ recaptcha.php中的最后一個
[2018年1月1日15:42:02 UTC] PHP堆棧跟蹤:
[2018年1月1日15:42:02 UTC] PHP 1. {main}()C:\\ wamp \\ www \\ local \\ public \\ recaptcha.php:0
從添加的錯誤消息中,代碼正在數組中查找first
/ last
一個索引,但找不到它。
但是在您的代碼中似乎沒有對這些鍵名的任何引用。
在您的代碼中似乎沒有索引在前或后的數組。
而且也沒有名為first或last的表單輸入標簽。
檢查您是否引用了正確的文件。
此處(Windows 10,xampp,PHP版本7.1.8)帶有“小”字樣,表示我弄錯了您的密碼(無效輸入秘密,請參見google recaptcha由於“無效輸入秘密”而返回false ),但是您怎么看驗證驗證碼https://developers.google.com/recaptcha/docs/display后,結果存在
結果: array(3){[“電子郵件”] =>字符串(16)“ sadasd@sdasd.com” [“ pardot_extra_field”] =>字符串(0)“” [“ g-recaptcha-response”] =>字符串(334) “03 AMPJSYXAiSFTZyU0mzcYHYpzpKF8EODvfGkWJHQjc8fgNVNFgv3lm7ZSZVwSpwXtvHRS3JnNwAtsnfsdwpQMXz10zw7xSmhx8Jd7IkZ6J86Boh70WXXBjrczIGMcndbHZSW3boZucbO8sneKrcuZDsIqrGsmi00ECwDZ3ntvpq5qATQeDN5nhuSOesdgdG7V_XMjKINHPUZPh0ZA6fPsMXvD4GNeGqOvaB1OJidQvaxcdK7vIr-aOqr5tOJNbwxSRR941caXJT5ggkWnA4O2bzQrphcIdQ3USyO0OcKPNBqN1IWGE18XGE0ioesL3YScvoMKFzWkeF-F”} 03 AMPJSYXAiSFTZyU0mzcYHYpzpKF8EODvfGkWJHQjc8fgNVNFgv3lm7ZSZVwSpwXtvHRS3JnNwAtsnfsdwpQMXz10zw7xSmhx8Jd7IkZ6J86Boh70WXXBjrczIGMcndbHZSW3boZucbO8sneKrcuZDsIqrGsmi00ECwDZ3ntvpq5qATQeDN5nhuSOesdgdG7V_XMjKINHPUZPh0ZA6fPsMXvD4GNeGqOvaB1OJidQvaxcdK7vIr-aOqr5tOJNbwxSRR941caXJT5ggkWnA4O2bzQrphcIdQ3USyO0OcKPNBqN1IWGE18XGE0ioesL3YScvoMKFzWkeF-F { “成功”:假的, “錯誤代碼”: “無效的輸入機密”]}失敗!
<?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(); ?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.