【问题标题】:How to access data from API response如何从 API 响应中访问数据
【发布时间】:2017-06-22 00:01:59
【问题描述】:

我收到了来自 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"
}]

我有一个带有下拉框的网络表单来选择你想要的书。

我想要发生的事情是,当您单击 提交 时,您将被发送到另一个页面,并且在该页面上我希望能够访问 BookIdBookName 和访问令牌从第一页通过$_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 页面”上收到此错误:

"注意:未定义索引:C:\wamp\www\getcoa.php 中的 access_token 6号线

这是第 6 行:

$access_token = $_POST['access_token'];

仅供参考。令牌部分解决了。

但我认为我对 BookId 想要达到的目标并不明确。在此页面上,“用户”将看到的唯一内容是一个带有 BookNames 列表的下拉菜单,他们从中选择一个,然后单击提交按钮...在下一页上,我将调用API 端点,但我需要 BookId 才能在该端点上调用。

因此,需要以某种方式将所选 BookName 的 BookId 发布到下一页,因此我可以在该页面上使用 $_POST 来获取 BookId 并使用它来访问所需的端点,而最终用户不知道“BookId " 无论如何都存在。

希望我更清楚自己想要实现的目标。对不起,如果我不开始。

【问题讨论】:

  • 您想在哪里使用 BookId。我看不到你的代码中使用了这个值。
  • 您正在动态设置输入名称属性:&lt;input type="hidden" name="&lt;?php $bookname; ?&gt;"&gt;。这是故意的吗?还是您的意思是设置value 属性?
  • $access_token在哪里定义/生成/获得?
  • @HimanshuUpadhyay:我还没有添加,因为我还没有弄清楚如何......我要问的问题之一。正如我所说,我希望能够将 BookId 发送到下一页,就像我对 BookName 所做的那样,但用户不知道它正在发生。用户只需选择书名并单击“获取会计科目表”......但在下一页上,我需要 GET 请求中的 BookId 来执行此操作。但我不希望用户看到或知道 BookId 存在。
  • @Kisaragi.. 它是动态的,因为用户可以选择任何现金簿。如果我将其设为静态,那么除非他们选择我想要的,否则它将无法工作。我不知道他们会选择什么书名,所以它必须是动态的。

标签: php arrays associative-array access-token


【解决方案1】:

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

因此,在一些简单的 javascript 的帮助下,隐藏字段会在选择菜单更改时填充 - 隐藏字段中存储的值将是提交表单时发送到 PHP 脚本的值。

以前隐藏字段的名称源自原始源数据(值)的内容 - 这会使服务器上的处理变得棘手,因为您不一定知道要在 PHP 逻辑测试等中使用的名称 - 因此它们被分配了与源数据中的键相对应的名称 - 您知道这样可以处理名为 bookid,bookname &amp; 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>

【讨论】:

  • 非常感谢您。我过去曾使用 javascript 进行简单的客户端表单验证,并在此项目中使用它来获取我的令牌,但正如您的示例所示,它更有用。再次感谢。
【解决方案2】:

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

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

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; ?>">

【讨论】:

  • 你让我的访问令牌进入下一页!非常感谢。
  • 关于 标签在 for 循环之外,所以无法知道该标签上需要什么名称。用户将从下拉菜单中有多个选择。所以需要传递到下一页的 BookName 和 BookId 将是多选之一。也许我需要使用 switch 语句或其他东西,但我很难理解它。但我真的很高兴你能帮我把令牌拿到下一页。你的传奇伙伴。
  • $_POST['books'] 将为您提供从表单中选择的书。如果您需要选择多本书,请使用带有选择标签的多个关键字。请参考stackoverflow.com/questions/2407284/…
【解决方案3】:
<!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']);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-19
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多