我得到一个非常自我解释的错误。但是,就我所知,索引不仅是100%定义的,它还包含一个值。这是一系列愚蠢问题中的最新一例,这让我今天感到疯狂。
以下是您可能已经看过一百万次的代码。
的jQuery
$('#projects').click(function (e) {
alert(aid);
$.post('core/functions/projects.php', { aid: aid })
.done(function(data) {
alert(aid);
$('#home_div').hide();
$('#pcd').fadeIn(1000);
})
.fail(function(jqXHR, status, error) {
alert(error);
});
});
使用6
PHP
<?php
require_once "$_SERVER[DOCUMENT_ROOT]/core/init.php";
if(isset($_POST)) {
$aid = $_POST['aid'];
echo $aid;
} else {
echo 'fail';
}
?>
我收到此错误:
Notice: Undefined index: aid in C:\xampp\htdocs\core\functions\projects.php on line 5
所以我添加了一些更深入的检查我的if else,它现在看起来像这样
<?php
require_once "$_SERVER[DOCUMENT_ROOT]/core/init.php";
$account_id;
if(isset($_POST['aid'])) {
$aid = $_POST['aid'];
echo $aid;
} else {
echo 'fail';
}
现在它吐回fail
。我已经去了here,检查错误,它就像我想象的那样。这并不意味着它对我来说更有意义为什么我正在接受它。
所以让我们回顾一下。我的jQuery
正在点击正确的PHP
文件,因为我收到了该特定PHP
文件的回复。我的变量保存一个值,因为jQuery
使用它保存的值6提醒我两次。但是我的PHP
文件没有收到此值?有人可以向我解释原因吗?
修改
如果我在jQuery
添加一行,我会收到另一条消息,证明正在发送数据。然而,我仍然收到未设置$ _POST索引的错误。这太疯狂了
$('#projects').click(function (e) {
alert(aid);
$.post('core/functions/projects.php', { aid: aid })
.done(function(data) {
alert(aid);
alert(data);
$('#home_div').hide();
$('#pcd').fadeIn(1000);
})
.fail(function(jqXHR, status, error) {
alert(error);
});
});
现在我得到3个警告框,其值为6。
在发送帖子之前发出1个警告框,其中$ aid变量信息为'6' 使用$ aid变量'6'再次接收数据后,将触发1个警报框 现在收到数据后,1个警报框会被激活,同时再次显示“6”!
我的意思是WTF?这场噩梦会不会结束?这意味着即使php
中的变量也是从帖子设置的!这怎么可能?我的意思是看php
代码所有它回声是'失败'或$ aid和$援助不能有一个值,除非它由帖子设置,而且它不会给我错误的未定义索引。我需要休息一下,我会失去它。
萤火
在萤火虫中我看到了
我看到POST - &gt;
projects.php - &gt;
POST - &gt;
参数 - &gt;
援助6 - &gt;
消息来源 - &gt;援助=%0D%0A6
响应 - &gt;
回复中没有任何内容,我在这里发布回复的短暂时间是因为我离开了'require_once'并且我的代码被注释掉了。
虽然源中有些奇怪的东西。它表示SOURCE援助=%0D%0A6而不是正常的SOURCE援助= 6
2ND EDIT
我有一大段代码被注释掉以简化这个例子。代码使用变量和查询数据。然后返回在php
中创建的表。如果取消注释代码,我可以在我的RESPONSE中以html格式看到该表。如果我转到HTML,我实际上可以看到可视表。发生什么了?为什么这种反应会使我的div而不是表格膨胀?我现在将发布一些代码来解释
<?php
require_once "$_SERVER[DOCUMENT_ROOT]/TrakFlex/core/init.php";
if(isset($_POST['aid'])) {
$aid = $_POST['aid'];
try {
$query_projectInfo = $db->prepare("
SELECT projects.account_id,
projects.project_name,
projects.pm,
//...more columns
FROM projects
WHERE account_id = ?
");
$query_projectInfo->bindValue(1, $aid, PDO::PARAM_STR);
$query_projectInfo->execute();
$count = $query_projectInfo->rowCount();
if ($count > 0) {
echo "<table class='contentTable'>";
echo "<th class='content_th'>" . "Job #" . "</th>";
echo "<th class='content_th'>" . "Project Name" . "</th>";
//...more table headers
while ($row = $query_projectInfo->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>";
echo "<td class='content_td'>" . "<a href='#'>" . $row['account_id'] . "</a>" . "</td>";
echo "<td class='content_td'>" . $row['project_name'] . "</td>";
//.. more data
echo "</tr>";
}
echo "</table>";
}
} catch(PDOException $e) {
die($e->getMessage());
}
} else {
echo 'could not load projects table';
}
?>
因此,您可以看到我的完整php文件实际上发回了一个数据表。我可以在FireBug中看到这个表 - &gt; NET - &gt; XHR - &gt; HTML。我还可以看到FireBug中的所有php代码 - &gt; NET - &gt; XHR - &gt;响应。但是,应该保存表的div只保存else
语句“无法加载项目表”。所以我觉得我越来越近了,但我还是被卡住了。有什么想法吗?
答案 0 :(得分:1)
POST -> aid 6
表明服务器确实正在接收数据。还有其他东西在到达if
语句之前清除$ _POST。
当您require_once "$_SERVER[DOCUMENT_ROOT]/core/init.php";
注释掉时,您的jQuery data
包含预期值。当您发布Firebug信息时,它仍然被注释掉,因此数据库连接错误消息。这些消息,你已经删除,表明projects.php第7行的错误告诉我你测试的文件的代码比你在这里发布的代码多。人们向我们展示他们的部分代码并不罕见,事实上,它是鼓励的;但是,在这种情况下,这是有问题的,因为错误不在于你给我们的代码。
为了验证此发现并保存您的理智,请将 projects.php 暂时重命名为 projects.backup.php 。 创建一个名为“projects.php”的新文件,并通过AJAX运行以下代码(以及以下代码):
<?php
if(isset($_POST['aid'])) {
$aid = $_POST['aid'];
echo $aid;
} else {
echo 'fail';
}
?>
顺便提一下,%0D%0A是Windows®换行组合,CRLF(回车+换行)