【问题标题】:Results from an cURL request into a form从 cURL 请求到表单的结果
【发布时间】:2012-03-09 01:10:35
【问题描述】:

正如我在上一个问题中提到的,我阅读了有关 cURL 以及如何使用它的信息。我收到了使用以下 API 的请求:api.openkvk.nl(它是荷兰语,很遗憾)工作:

$get = $_POST['bedrijfsnaam'];
$get = str_replace(" ","%20",$get);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://api.openkvk.nl/php/SELECT%20*%20FROM%20kvk%20WHERE%20bedrijfsnaam%20=%20'$get'%20LIMIT%201;");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
print("<pre>"); print_r($result); print("</pre>");
$kvks = $result[0]["RESULT"]["ROWS"][0][2];
echo $kvks; 
curl_close($ch);

我得到了以下形式的结果:

array(array("RESULT"=>array("TYPES"=>array("bigint","varchar","int","int","varchar","varchar","varchar","varchar","varchar","varchar","bigint","varchar","decimal","decimal","date"),"HEADER"=>array("kvk","bedrijfsnaam","kvks","sub","adres","postcode","plaats","type","status","website","vestiging","rechtsvorm","lat_rad","lon_rad","anbi"),"ROWS"=>array(array("526937320000","Unicmedia","52693732","0","Terschellingstraat 12","1825ND","Alkmaar","Hoofdvestiging",NULL,NULL,"22611126",NULL,NULL,NULL,NULL)))))

我想做的是:

将数据库中的这些值:kvks、adres、postcode 和 plaats 放入一个表单中(以便我可以编辑它们)。

我不知道该怎么做。能给我解释一下吗?

PS 我是 API 新手,所以我还不明白所有内容。

【问题讨论】:

    标签: php mysql api curl


    【解决方案1】:

    更新:

    他们的 API 将其作为 php 字符串返回 - 将 URL 中的 /php/ 部分更改为 /json/

    然后,让你拥有$result = json_decode(curl_exec($ch), true);

    现在数组访问应该可以工作了。


    要获取kvks 的值,假设您发布的值是$result 中的值,您将使用$kvks = $result[0]["RESULT"]["ROWS"][0][2]

    (看起来您正在发布 print_r 的结果 - 当您显示它以获得更多格式的结果时,请尝试将其封装在 &lt;pre&gt; 标记中)

    因为你有 PHP 获取值,你可以简单地输出一个预先填充的 HTML 表单:

    <form action="savedata.php" method="post">
    <?php
        echo "<input type='text' name='blah' value=\"" . htmlspecialchars($blah) ."\"><br>";
     ?>
    

    那么,如果$blahasdf,这将输出&lt;input type='text' name='blah' value="asdf"&gt;

    当您将其提交到您的savedata.php 方法时,您可以随意将修改后的值(现在通过$_POST['blah'] 找到)插入到您的数据库中。

    【讨论】:

    • 我没有回显某些内容,那么如何阻止数组显示?我更新了我的帖子,以便您可以看到 cURL 代码是什么。
    • 默认情况下,cURL 只是简单地回显结果。不知道为什么这是默认设置,真的。要使 cURL 返回 为一个值而不是回显,请使用curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);。然后,在curl_exec($ch) 之前添加$result = 。然后,使用print("&lt;pre&gt;"); print_r($result); print("&lt;/pre&gt;");
    • 当我使用$kvks = $result[0]["RESULT"]["ROWS"][0][2] 时出现以下错误:不能将字符串偏移量用作数组。
    • 将您的print_r 添加到您的原始帖子中。当全部在一条线上时,很难看到结构。
    • 你必须在 curl_exec 之前添加curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    【解决方案2】:

    从我的实验看来,这个 API 正在返回 PHP 代码,这必须是 eval'd。 eval 是一个非常糟糕的主意。

    我是否可以建议使用 API 的 JSON 方法,将 /php/ 替换为 /json/

    API 将返回一个 JSON 字符串,您可以将其解码为对象/数组

    您还需要将curl_setop($ch, CURLOPT_RETURNTRANSFER,0); 添加到您的 curl 请求中

    这是一些修改后的代码

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://api.openkvk.nl/json/SELECT%20*%20FROM%20kvk%20WHERE%20bedrijfsnaam%20=%20'$get'%20LIMIT%201;");
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
    $result = curl_exec($ch);
    curl_close($ch);
    $apiResult = json_decode($result, true);
    

    $apiResult 现在将包含一个包含结果的数组

    var_dump($apiResult) 会给你

    array
      0 => 
        array
          'RESULT' => 
            array
              'TYPES' => 
                array
                  ...
              'HEADER' => 
                array
                  ...
              'ROWS' => 
                array
                  ...
    

    现在你有了数组,你应该可以很容易地将它插入到数据库中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 1970-01-01
      • 2013-11-08
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多