通过扫描 QR 码使用 cURL 发送 POST 数据

Sending POST data using cURL, by scanning QR code

我正在尝试通过扫描二维码将一些数据 (JSON) 传递到另一个页面。 数据发送到的页面包含 HTML 表单。我想将该表格用作在将数据发送到数据库之前更正数据的最后机会。

我在 S.O 找到了这里。一种使用 cURL 传递数据的方法:()

二维码库: http://phpqrcode.sourceforge.net

我用二维码执行这个功能:

function passData () {
    $url = 'check.php';
    $data = array('name' => 'John', 'surname' => 'Doe');
    $ch = curl_init( $url );

    # Setup request to send json via POST.
    $payload = json_encode($data);
    curl_setopt( $ch, CURLOPT_POSTFIELDS, $payload );
    curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));

    # Return response instead of printing.
    curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );

    # Send request.
    $result = curl_exec($ch);
    curl_exec($ch);
    curl_close($ch);

    # Print response.
    return $result;
}

创建二维码:

QRcode::png(passData(), $tempDir.'007_4.png', QR_ECLEVEL_L, 4);
echo '<img src="'.$tempDir.'007_4.png" />';

Check.php

<?php $data = json_decode(file_get_contents("php://input"), true); ?>

<form method="post" action="handle.php">
    <input type="text" name="name" value="<?php echo $data['name'];?>" /><br />
    <input type="text" name="surname" value="<?php echo $data['surname'];?>" /><br />
    <input type="submit" />
</form>

问题:

我可以将数据传递给 check.php,但它返回的是纯文本而不是可用的 HTML 形式。

希望有人能帮忙!

编辑

一些说明:

我真正想要的是扫描二维码,执行passData()函数。然后 'QR code scanner app',需要打开一个浏览器,它以 的形式显示 check.php 传递的数据作为 values 的 [=19] =] 字段。

现在,我只得到 check.php 的回复(纯文本)。 当我传递 URL 而不是 passData() 函数时,如:
QRcode::png("http://www.google.com", $tempDir.'007_4.png', QR_ECLEVEL_L, 4);

应用程序询问我是否要前往 http://www.google.com

不是最好的方法,但你可以这样做。

Check.php:

 <?php
$data = '<form method="post" action="handle.php">
    <input type="text" name="name" value="name" /><br />
    <input type="text" name="surname" value="surname" /><br />
    <input type="submit" />
</form>';

$html = str_replace(PHP_EOL, ' ', $data);
$html = preg_replace('/[\r\n]+/', "\n", $html);
$html = preg_replace('/[ \t]+/', ' ', $html);
$html = str_replace('> <', '><', $html);
?>
<div id="placeholder">
    Write HTML here
</div>

<script type="text/javascript">
    function write_html(id,data){
        var formHtml = data;
        document.getElementById(id).innerHTML = formHtml;
    }
</script>

二维码无法执行代码。您可以放入 QR 码的唯一可执行数据类型是 URL。这就是为什么使用 google.com 作为 URL 打开网络浏览器到那个 URL 的原因。 QR 码本身不呈现任何内容。

您的代码所做的是在生成 QR 码时获取 check.php 页面,然后将输出存储为原始数据。它不是网页,而是您在问题中看到的字符串。您可以传递类似于书签的 javascript URL,但其执行将取决于所使用的 QR 码 reader。

小书签示例

<?php

function passData() {
    // javascript code in a heredoc, you may need to url encode it
    return <<<JS
        javascript:(function() {
          //Statements returning a non-undefined type, e.g. assignments
        })();
JS;
}

更好的方法是让您的二维码生成一个 URL,例如:http://your-site.com/check.php?name=John&surname=Doe 并在您的计算机上托管 check.php。您可以使用 $_GET 数据填充您的表单,然后使用 javascript 自动 post 它,如 Jah 所述。