$_POST 未定义的索引,但值通过

$_POST Undefined Index but values get through

本文关键字:索引 POST 未定义      更新时间:2023-09-26

这个问题解决了 - 见下文!

偶然地,我发现了这个问题...我的 HTML 表单的开头和结尾:

<form name="personform" id="personform" action="testperson.php" method="post" target="_blank">
   <input type="hidden" id="formPmall" name = "formPmall" value = "">
   <input type="hidden" id="formPCSEsiteHeading" name = "formPCSEsiteHeading" value = "">
   <input type="hidden" id="formPCSEsiteHeadingText" name = "formPCSEsiteHeadingText" value = "">
   <input type="hidden" id="formPCSEsiteHeadingShadow" name = "formPCSEsiteHeadingShadow" value = "">
<!-- skipping to end of form -->
   <input type="hidden" id="formPok" name = "formPok" value = "">
</form>

这是我调用的用于设置值并提交表单的函数:

function testaPerson() {
   document.getElementById("formPmall").value = vilkenMall;
   document.getElementById("formPCSEsiteHeading").value = fAktuellSajtrubrik;
   document.getElementById("formPCSEsiteHeadingText").value = CSEsiteHeadingText;
   document.getElementById("formPCSEsiteHeadingShadow").value = CSEsiteHeadingShadow;
/* Skipping to end of function */
   document.getElementById("formPok").value = "ok";
// SUBMIT
   document.getElementById("personform").submit();
}

该函数的工作原理是我可以在提交之前放置这样的 JS alert():

alert("PM = *"+document.getElementById("formPmall").value+"*");

我得到正确答案("4"而不是"**"为空)。这适用于每个表单输入。

表格到达"测试人员.php":

<?php
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
if (!isset($_POST['formPok'])) header('Location: ../index.php');
// Init variables
$mall = 0;
$CSEsiteHeading = "#FF00FF";
$CSEsiteHeadingText = "";
$CSEsiteHeadingShadow = "";
// Skipping 60+ variable inits
// Read the form
$mall = $_POST['formPmall'];
$CSEsiteHeading = $_POST['formPCSEsiteHeading'];
$CSEsiteHeadingText = $_POST['formPCSEsiteHeadingText'];
$CSEsiteHeadingShadow = $_POST['formPCSEsiteHeadingShadow'];
// Skipping the rest...

索引['formPok']被设置,因为我不去"index.php"。

变量具有值,因为我可以将 PHP die() 放在它们之后:

die("PM = *".$mall."*");

我得到正确答案("4" - 不是初始化的"0"或空的"**")这适用于每个 PHP 变量。

最后一页也显示正常。

但!我在php_error.log得到这个:

[29-Oct-2013 13:30:01 UTC] PHP Notice:  Undefined index: formPmall in /Applications/MAMP/htdocs/tngcse/template4/testperson.php on line 27
[29-Oct-2013 13:30:01 UTC] PHP Notice:  Undefined index: formPCSEsiteHeading in /Applications/MAMP/htdocs/tngcse/template4/testperson.php on line 29
[29-Oct-2013 13:30:01 UTC] PHP Notice:  Undefined index: formPCSEsiteHeadingText in /Applications/MAMP/htdocs/tngcse/template4/testperson.php on line 30
[29-Oct-2013 13:30:01 UTC] PHP Notice:  Undefined index: formPCSEsiteHeadingShadow in /Applications/MAMP/htdocs/tngcse/template4/testperson.php on line 31

对于每一个发布的价值!每次超过60个!并且页面反复打开。

更多事实:* HTML 表单和 JS 函数是两个包含。* PHP 变量 inits 和表单读取是两个包含(我为此测试编辑到页面中)

  • 我有四页,其中包括根本没有任何 PHP 通知的作品!
  • 还有三个所有 60+ 表单输入都是"未定义"的......

我还有四页要做,在我解决这个问题之前不想继续。我不知道这里出了什么问题,需要你能想出的任何想法。除了禁止PHP通知...(这里有一个错误需要正确处理)

提前谢谢你,艾娃·

为清楚起见,添加了:进入 PHP 页面并在最后一页上显示的值是:

formPmall: 4 (PHP init = 0)
formPCSEsiteHeading: #FF0000 (PHP init = #FF00FF)
formPCSEsiteHeadingText: "My Family" (PHP init = "")
formPCSEsiteHeadingShadow: "2px 2px 4px #000000" (PHP init = "")
一切都

被初始化,一切都得到新的值。但由于某种原因,它会填充错误日志。为什么?


我不允许回答我自己的问题(8小时限制),所以我在这里编辑:

问题解决了!

解决方案比通知更奇怪(对我来说,就是这样)。这是我所做的:

我拿走了所有代码,并逐段添加了PHP脚本,并为每个片段运行一次。一切都很好:PHP代码本身没有产生任何通知。所以我添加了带有两个 css 包含的 HTML 头:一个是通用的,一个是修改其中一些通用的。

没有通知:一切都很好,所以我一点一点地添加了 HTML,发现当引用 In the HTML 时,一个类是"罪魁祸首"!

该类是这样声明的(修改一个通用的:不同的颜色,没有背景图像)

.line {
   color: #FF0000;
   background-image: url('');
}

解决方案是这样声明它(完全正确 - 不是草率的剪切粘贴):

.line {
   color: #FF0000;
   background-image: none;
}

每个通知(每个发布到此页面的值一个 - 60+)都消失了!

请注意,直到在HTML中引用它,PHP通知才出现!

<td class="line">This is my line</td>

我希望这可以帮助其他人,因为我找到了很多关于 PHP 通知的帖子,唯一的解决方案是关闭通知。而且没有真正的解决方案。

感谢所有花时间阅读和回复的人!

艾娃

我之前遇到过这个问题,我相信您需要使用isset来查看复选框的值是否被选中。

if(isset($_POST['formPCSEsiteHeadingShadow'])){ $CSEsiteHeadingShadow = $_POST['formPCSEsiteHeadingShadow']; }

这里发生的事情是,我首先检查复选框是否使用条件选中(或设置)。如果条件为真,我将传递值。

此页面可能会更清楚地说明该主题:http://siliconstation.com/how-fix-php-notice-undefined-index/

  1. 似乎您的 javascript 变量vilkenMall未设置。使用 alert() 或 console.log() 检查其值。

  2. 另外,我不知道为什么你在name=和输入名称之间放置空格

  3. 在 PHP 中,检查$_REQUEST是否包含您的数据