我收到了API的以下回复。
[{
"BookId":"32c03594-1ecb-4f97-8453-5b28a03d26d9",
"BookName":"Book1",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"51d16696-b98a-4b3b-ac67-f36559cff70b",
"BookName":"Book2",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"7b557a75-bf5e-4c29-9f31-43a7fee77520",
"BookName":"Book3",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"c945ade5-d540-4378-9979-3842a1da396b",
"BookName":"Book4",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"814869e2-e5af-48bc-a6da-28f272366955",
"BookName":"Book5",
"Bookstatus":3,
"Country":"AU"
}]
我有一个带有下拉框的网络表格,可以选择你想要的书。
我想要发生的是,当您点击提交时,您会被发送到另一个页面,并且在该页面上我希望能够访问BookId
,{{1}并通过BookName
从第一页访问令牌。我对$_POST
没有问题,但无法解决如何获取BookName
和访问令牌的问题。
这是我到目前为止所做的:
请注意:访问令牌是通过页面顶部的BookId
获取的,并已分配给$_GET
变量。
$access_token
使用<body>
<?php
$array=json_decode($response, true);
$arr_len = count($array);//length of the array = 5
$for_len = $arr_len - 1;//length - 1
?>
<h1>CashBooks</h1>
<form action="getcoa.php" method="post">
<select name="books">
<?php
for($i=0; $i<=$for_len; $i++){
$bookname = $array[$i]["BookName"];
echo '<option value="' . $bookname . '" name="' . $bookname . '">' .
$bookname . '</option>';
};
?>
</select>
<input type="hidden" name="<?php $bookname; ?>">
<input type="hidden" name="<?php $access_token; ?>">
<input type="submit" value="Get Chart of Accounts">
</form>
</body>
,我还没有想出如何处理它,所以任何建议都会很棒。而我尝试使用访问令牌并不起作用。当我点击提交内容时,我会在&#34; getcoa.php页面上收到此错误&#34;:
&#34;注意:未定义的索引:C:\ wamp \ www \ getcoa.php中的access_token 第6行&#34;
这是第6行:
BookId
FYI。令牌部分已解决。
但我不认为我已经清楚我试图通过BookId实现什么。在这个页面上,&#34; USER&#34;将会看到一个下拉菜单,其中包含一个BookNames列表,他们从中选择ONE,然后单击一个提交按钮......在下一页,我将调用一个API端点,但我需要BookId来调用那个终点。
因此,所选BookName的BookId需要以某种方式发布到下一页,因此我可以在该页面上使用$ _POST来获取BookId并使用它来访问所需的端点,而不会让最终用户知道&# 34; BOOKID&#34;无论如何都存在。
希望我对我想要实现的目标更加清楚。对不起,如果我不能开始。
答案 0 :(得分:0)
脚本中发现了多个问题:
在select box
循环中,了解如何编写选择框
https://www.tutorialspoint.com/html/html_select_tag.htm
故障:
echo '<option value="' . $bookname . '" name="' . $bookname . '">' .
$bookname . '</option>';
必须是类似的,name
options
属性
echo '<option value="' . $bookname . '">' . $bookname . '</option>';
::怀疑您需要传递bookid
而不是bookname
在输入框中,您没有echo
个变量
而不是
<input type="hidden" name="<?php $bookname; ?>">
<input type="hidden" name="<?php $access_token; ?>">
你需要
<input type="hidden" name="bookname" value="<?php echo $bookname; ?>">
<input type="hidden" name="access_token" value="<?php echo $access_token; ?>">
答案 1 :(得分:0)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
$response = '[{"BookId":"32c03594-1ecb-4f97-8453-5b28a03d26d9","BookName":"Book1","Bookstatus":3,"Country":"AU"},{"BookId":"51d16696-b98a-4b3b-ac67-f36559cff70b","BookName":"Book2","Bookstatus":3,"Country":"AU"},{"BookId":"7b557a75-bf5e-4c29-9f31-43a7fee77520","BookName":"Book3","Bookstatus":3,"Country":"AU"},{"BookId":"c945ade5-d540-4378-9979-3842a1da396b","BookName":"Book4","Bookstatus":3,"Country":"AU"},{"BookId":"814869e2-e5af-48bc-a6da-28f272366955","BookName":"Book5","Bookstatus":3,"Country":"AU"}]';
$array=json_decode($response, true);
$arr_len = count($array);//length of the array = 5
$for_len = $arr_len - 1;//length - 1
?>
<h1>CashBooks</h1>
<form action="getcoa.php" method="post">
<select name="books">
<?php foreach ($array as $key => $value) { ?>
<option value='{"<?php echo $value['BookName'] ?>":"<?php echo $value['BookId']; ?>"}'><?php echo $value['BookName'] ?></option>
<?php } ?>
</select>
<input type="hidden" name="<?php echo $bookname; ?>">
<input type="hidden" name="<?php echo $access_token; ?>">
<input type="submit" value="Get Chart of Accounts">
</form>
</body>
</html>
在页面上getcoa.php可以执行此操作json_decode($_POST['books']);
答案 2 :(得分:0)
如果我已正确理解,那么您正尝试将各种参数发送到PHP脚本进行处理,具体取决于选择下拉菜单中的哪个项目?虽然option
标记可以使用有限数量的属性,但您当然可以使用dataset
属性 - 或者,如下面的代码中所示,有几个属性。
因此,在一些简单的javascript的帮助下,当选择菜单改变时,隐藏的字段将被填充 - 隐藏字段中存储的值将是在提交表单时发送到PHP脚本的值。
以前,隐藏字段的名称来源于原始源数据的内容(值) - 这会使服务器上的处理变得棘手,因为您不一定知道在PHP逻辑测试中使用的名称等 - 因此它们被分配了与源数据中的键相对应的名称 - 您知道如何处理名为bookid,bookname & access-token
的字段
<?php
/* for test porpoises only */
$access_token=uniqid();
$response='[{
"BookId":"32c03594-1ecb-4f97-8453-5b28a03d26d9",
"BookName":"Book1",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"51d16696-b98a-4b3b-ac67-f36559cff70b",
"BookName":"Book2",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"7b557a75-bf5e-4c29-9f31-43a7fee77520",
"BookName":"Book3",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"c945ade5-d540-4378-9979-3842a1da396b",
"BookName":"Book4",
"Bookstatus":3,
"Country":"AU"
},
{
"BookId":"814869e2-e5af-48bc-a6da-28f272366955",
"BookName":"Book5",
"Bookstatus":3,
"Country":"AU"
}]';
?>
<html>
<head>
<title>Sending values</title>
<script>
function getelement( name ){
return document.querySelectorAll('form input[name="'+name+'"]')[0];
}
function setvalues( e ){
var n=e.options[ e.options.selectedIndex ];
getelement('bookname').value=n.value;
getelement('access-token').value=n.dataset.token;
getelement('bookid').value=n.dataset.id;
}
</script>
</head>
<body>
<h1>CashBooks</h1>
<form action="getcoa.php" method="post">
<select name="books" onchange="setvalues(this)">
<optgroup label='Books'>
<option disabled='' hidden='hidden' selected=true>Please Select
<?php
$json=json_decode( $response );
foreach( $json as $obj ){
echo "<option value='{$obj->BookName}' data-id='{$obj->BookId}' data-token='{$access_token}' data-status='{$obj->Bookstatus}'>{$obj->BookName}";
}
?>
</optgroup>
</select>
<!-- empty, hidden input fields to be populated when dropdown changes -->
<input type="hidden" name="bookid">
<input type="hidden" name="bookname">
<input type="hidden" name="access-token">
<input type="submit" value="Get Chart of Accounts">
</form>
</body>
</html>