通过扫描 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 所述。
我正在尝试通过扫描二维码将一些数据 (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 所述。