如何从API响应访问数据

时间:2017-06-21 13:56:13

标签: php arrays associative-array access-token

我收到了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;无论如何都存在。

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

3 个答案:

答案 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>