如何将 json 结果带入 PHP
Posted
技术标签:
【中文标题】如何将 json 结果带入 PHP【英文标题】:How to bring a json result into PHP 【发布时间】:2019-08-06 10:38:23 【问题描述】:我从使用 json 的 fetch.php 获得了一些结果,并且我成功地将所有结果带到了我的引导模式 html 屏幕。 当显示模态时,我想使用来自我用于模态的相同 json 的值运行 mysql 查询,但是我不能将此值放入 PHP 变量中以运行 SQL 查询。 我怎样才能得到这个?
我正在尝试将我输入的相同值带入 HTML 文本框(模式),但它不起作用。我也尝试使用来自 json '$('#PCR').val(data.PCRNo);)' 的值,但没有任何反应。
这是使用 fetch.php 文件从数据库中收集信息的脚本:
<script>
$(document).ready(function()
$('#table').on('click', '.fetch_data', function()
var pcr_number = $(this).attr('id');
$.ajax(
url:'fetch.php',
method:'post',
data:pcr_number:pcr_number,
dataType:"json",
success:function(data)
$('#PCR').val(data.PCRNo);
$('#PCC').val(data.PCC);
$('#PCR_Creation').val(data.Creation_Date);
$('#PCR_Status').val(data.Stage);
$('#Required_Completion').val(data.Required_Completion);
);
);
);
</script>
这是PHP代码
<?php
//trying to get the value I have included on #PCR (textbox) which has ID='PCR' and name ='PCR' **
$PCR= $_POST['PCR'];
//running now the code to check if the database has the value and return the desired response to be shown **
$sql1 = mysqli_query($dbConnected,"SELECT * FROM change_management.tPCN");
while ($row1 = mysqli_fetch_array($sql1))
if ($row1['PCRNo']==$PCR)
echo $row1['PCNNo'];
echo "<br/>";
else
?>
我想将这个 val(data.PCRNo)
json 返回的值包含到 $PCR 变量中,这样 MYSQL 查询就可以工作了
【问题讨论】:
你发送的参数叫pcr_number,不是PCR。他们必须匹配,计算机猜不出你的意思 而且你回显的数据不是 JSON,所以 jQuery 不会理解它。您似乎正在输出 HTML 调试提示,尝试打印一次$_POST数组看看数组结构,dataType参数用来指定数据的返回类型,不是传出的 我认为您需要仔细检查您的代码,并检查您是否了解 JSON 是什么以及如何使用 PHP 生成它。有很多简单的教程可供您学习。 因为这是两个完全不同的独立事物。您可以使用$('#PCR')
访问表单域,因为您为表单域提供了 ID PCR
。您发送的 POST 参数的名称,您自己 指定为 pcr_number
- 这是 data:pcr_number:pcr_number
中的第一个 pcr_number
您在传递给 data
的对象中使用的键在这里,确定您要发送的 POST 参数的名称。
【参考方案1】:
您的代码存在许多非常基本的逻辑问题,导致其无法正常工作。
1) data: pcr_number: pcr_number
- 名称 pcr_number
与服务器使用 $_POST['PCR'];
搜索的值 PCR
不匹配。名称必须匹配。发出 AJAX 请求时,您在 HTML 中为表单字段指定的名称无关紧要(除非您使用 .serialize()
),因为您在 data
参数中指定了新名称。
2) 您的 SQL 查询没有意义。您似乎想要读取与 PCR 编号相关的单行,但您的查询没有使用输入 PCR
值来尝试将结果限制在该行。您需要使用 SQL WHERE
子句使其仅选择具有该 ID 的行,否则您将获取所有行并且不知道哪一行是正确的。 (获取它们,然后在 PHP 循环中使用 if
来检查正确的循环非常低效。)我给你写了一个正确使用 WHERE 子句的版本,并使用准备好的语句安全地将 PCR 值传递给查询和参数(用于对抗 SQL 注入攻击)。
3) 您的 PHP 输出也没有任何意义。您已经告诉 jQuery(通过 dataType: "json"
期待 JSON 响应,然后您在“成功”函数中的代码基于您将收到包含表中所有字段的单个对象的假设。但 echo $row1['PCNNo']; echo "<br/>";
只输出一个字段,并且输出旁边有html,这不是json,更接近于json。你需要输出整行,然后使用json_encode()
函数将对象转成json jQuery 收到时可以解析的字符串。
这是包含上述所有更改的代码版本:
$(document).ready(function()
$('#table').on('click', '.fetch_data', function()
$.ajax(
url: 'fetch.php',
method: 'post',
data: pcr: $(this).attr('id'); ,
dataType: "json",
success: function(data)
$('#PCR').val(data.PCRNo);
$('#PCC').val(data.PCC);
$('#PCR_Creation').val(data.Creation_Date);
$('#PCR_Status').val(data.Stage);
$('#Required_Completion').val(data.Required_Completion);
);
);
);
PHP:
<?php
$PCR = $_POST['pcr'];
$stmt = $dbConnected->prepare("SELECT * FROM change_management.tPCN WHERE PCRNo = ?");
$stmt->bind_param('s', $PCR);
$stmt->execute();
$result = $stmt->get_result();
//an "if" here will cause a single row to be read
if ($row = $result->fetch_assoc())
$output = $row;
else
$output = new StdClass();
$stmt->free_result();
$stmt->close();
//output the result
echo json_encode($output);
?>
注意我可能会建议学习一些关于此类主题的教程,因为这是 AJAX/JSON 的一个相当标准的用例,您应该能够找到可以提高您对所有不同部分的理解的示例。
附:目前,如果数据库中没有匹配的行,上面的 PHP 代码将返回一个空对象。但是,这可能是一个错误情况(并且会导致您的 JavaScript 代码由于尝试读取不存在的属性而崩溃),因此您应该考虑如何处理此类错误以及返回什么响应(例如 400 或 404,和合适的消息)。
【讨论】:
你应该认为一切都没有意义,因为指令是不要放置整个代码,所以我只是恢复了我正在做的事情。 MYSQL 查询在另一个页面上工作正常,所以我不担心这个,我关心的是如何存储 PCR 的值,我在一个表中单击它以将其发送到一个 fetch,在一个 PHP 变量中,如@987654336 @ 并使用它来运行 mySQL 查询。 好吧,我已经向您展示了如何将值发送到服务器,并且向您展示了如何在 SQL 查询中使用它。您的查询可能在其他地方工作,但在这种情况下它不合逻辑(这与它不工作不同!)。那么,我发布的代码是否适合您并产生预期的结果?您是否理解我提出的观点,以便以后学习? 你好@ADyson,这对我没有帮助。你试图抱怨而不是理解我的真正问题。我了解我需要学习和学习的要点,谢谢。我相信我的帖子有点混乱,所以我创建了另一个与同一问题相关的帖子,但也可以解决它。请参阅link。非常感谢 我同意我认为您可能没有把您的问题表达得太清楚。我回答了我认为是问题的问题,但如果没有帮助,我深表歉意。我会看看你的新帖子,谢谢。【参考方案2】:你需要先使用json_encode
从php返回json。
在这个循环中
while ($row1 = mysqli_fetch_array($sql1))
$data = array('PCRNo' => 'itsvalue', 'PCC' => 'itsvalue', 'Creation_Date' => 'itsvalue')
print json_encode($data)
将所有数据存储在关联数组中,然后使用json_encode
将其转换为json并返回json。
在你的 ajax 文件中使用 json 数据
$.ajax(
url:'fetch.php',
method:'post',
data:pcr_number:pcr_number,
dataType:"json",
success:function(data)
var data = JSON.parse(data);
$('#PCR').val(data.PCRNo);
$('#PCC').val(data.PCC);
$('#PCR_Creation').val(data.Creation_Date);
$('#PCR_Status').val(data.Stage);
$('#Required_Completion').val(data.Required_Completion);
);
【讨论】:
@vinay_kumar 我应该在json_encode
中包含什么以从 fetch.php 文件中获取值?是我发送到 fetch.php 文件的输入 pcr_number
还是我用来填写 HTML 的输出 val(data.PCRNo)
?
我试过你的代码,但还是漏掉了一些东西。我试图变得非常简单。让我们得到我想做的序列。我有我的表,然后单击“PCR 编号”,它存储在var pcr_number = $(this).attr('id');
。现在完美。在此之后,该值转到 fetch.php 并在数据库中找到 pcr_number 并在 json
数组中返回,该数组与我们发送到 fetch 文件的值相同,但以另一种格式 $('#PCR').val(data.PCRNo);
填充我的引导模式PCR Number 文本框中的 HTML 名称和 ID 为 "PCR"
。 (续)
... 我真正需要的是一种将 PCR 编号存储在一个 $PCR
变量中并使用此值运行另一个 MySQL 查询并获取其他信息的方法。如何将我点击的这个 PCR 编号存储在一个 PHP 变量中?
@EL.ALEX78UK 检查我的新答案【参考方案3】:
以下是更改后的脚本,用于在 $PCR 变量中存储不同的值
<script>
$(document).ready(function()
var i = 1;
$('#table').on('click', '.fetch_data', function()
if(i == 1)
var pcr_number = $(this).attr('id');
else
var pcr_number = $('#PCR').val();
$.ajax(
url:'fetch.php',
method:'post',
data:pcr_number:pcr_number,
dataType:"json",
success:function(data)
$('#PCR').val(data.PCRNo);
$('#PCC').val(data.PCC);
$('#PCR_Creation').val(data.Creation_Date);
$('#PCR_Status').val(data.Stage);
$('#Required_Completion').val(data.Required_Completion);
i++;
);
);
);
</script>
【讨论】:
嗨@vinay kumar,我已经发了另一篇文章,我相信会对我有更多帮助,因为我相信这篇文章非常令人困惑。请参阅此link。如果你对那个排序,你也会对这个排序:-)。谢谢。以上是关于如何将 json 结果带入 PHP的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PHP 中解析 base64_encode() 的 Json 结果