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

时间:2013-10-29 14:27:11

标签: javascript php html forms

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

我偶然发现了这个问题...... 我的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 ”而不是“**”为空)。 这适用于每个表单输入。

表格到达“testperson.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变量。

最后一页也显示正常。

BUT! 我在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通知...... (这里有一个错误需要以正确的方式处理)

先谢谢你, Ava T。

为清晰起见添加: 进入PHP页面AND的值显示在最后一页上:

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,发现在引用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通知的帖子,其中唯一的解决方案是关闭通知。没有一个真正的解决方案。

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

阿瓦

2 个答案:

答案 0 :(得分:1)

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

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

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

此页面可能会更多地阐述该主题:http://siliconstation.com/how-fix-php-notice-undefined-index/

答案 1 :(得分:0)

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

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

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