如何从 API 响应访问数据

How to access data from API response

我收到了 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 , 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>

对于 BookId,我还没有想出如何处理它,所以任何建议都很好。而且我尝试使用访问令牌的方法不起作用。当我按原样单击提交时,我在 "getcoa.php page":

上收到此错误

"Notice: Undefined index: access_token in C:\wamp\www\getcoa.php on line 6"

这是第 6 行:

$access_token = $_POST['access_token'];

仅供参考。 token部分解决了

但我认为我并不清楚我试图通过 BookId 实现的目标。在这个页面上,"USER" 唯一会看到的是一个带有 BookNames 列表的下拉菜单,他们从中 select 一个,然后单击提交按钮......在下一页上,我将调用 API 端点,但我需要 BookId 才能调用该端点。

所以 selected BookName 的 BookId 需要以某种方式发布到下一页,所以我可以在该页面上使用 $_POST 来获取 BookId 并使用它来访问所需的端点,在最终用户不知道 "BookId" 存在的情况下。

希望我已经更加清楚我要实现的目标。对不起,如果我没有开始。

在您的脚本中发现多个问题:

select box循环中,看如何写一个select框

https://www.tutorialspoint.com/html/html_select_tag.htm

故障:

echo '<option value="' . $bookname . '" name="' . $bookname . '">' . 
$bookname . '</option>';

肯定是这样的,options

中没有name属性
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; ?>">
<!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']);

如果我没理解错,那么您是在尝试将各种参数发送到 PHP 脚本进行处理,具体取决于 select 编辑了下拉菜单中的哪个项目?虽然 option 标签可以使用的属性数量有限,但您当然可以使用 dataset 属性 - 或者,如以下代码所示,使用多个属性。

因此,借助一些简单的 javascript,隐藏字段会在 select 菜单更改时填充 - 存储在隐藏字段中的值将发送到 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>