首页 > 解决方案 > QR 码仅在第一行生成(可能是 PHP 中的迭代问题)

问题描述

我有以下代码从 MySQL 获取数据,根据“URL”列中的链接生成 QR 码并显示它。一切正常,唯一我无法解决的问题是,所有 QR 码(在本例中为 10 个)都显示在第一行,其余行没有 QR 码。

<script src="qrcode.min.js"></script>

<?php

$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "SELECT objectid,code,url FROM stations LIMIT 10";
$result = mysqli_query($conn, $sql);

?>


<table>
<thead><tr><th> OBJECTID </th><th> CODE </th><th> URL </th><th> QR </th></tr></thead>


<?php
if ($result->num_rows > 0) {
   while($row = $result->fetch_assoc()) {
      echo "<script>new QRCode(document.getElementById('qrcode'), '". $row[url] ."');</script>";
      echo "<tr><td>" . $row[objectid] . "</td><td>". $row[code] ."</td><td>" . $row[url] . "</td><td><div id='qrcode'></div></td></tr>";
        }
}
?>
</table>

用来生成二维码的库是这个

标签: php

解决方案


(这是评论,但评论部分的空间和格式有限)

用来生成二维码的库是这个

但是,在您向我们展示的代码中,没有任何地方是名为 ( echo '<img src="'.(new QRCode)->render($data).'" alt="QR Code" />';) 的库,您也没有说明如何包含代码。

由于应该包含 QR 图像的列只有....

<td><div id='qrcode'></div></td>

我认为这是由页面中包含的 Javascript 处理的。但是你没有告诉我们那是什么/它做了什么。

我在这里看到的是,您将拥有多个具有相同 ID 的元素——这有点傻——ID 应该是唯一的。您还需要在 div 本身之外查找要在 div 中呈现的数据。更好的方法是......

<td><div class='qrcode' data='$row[url]'></div></td>

然后,您只需要遍历具有类 'qrcode' 的元素并检索数据属性以调用 javascript 并注入图像。

您还没有查看您的代码生成的许多警告。请注意,在上面我在字符串中嵌入了 $row[] 值,而您正在拼接字符串:<td>" . $row[url] . "</td。在您使用的上下文中,您应该这样引用 addray 索引:<td>" . $row['url'] . "</td. 在暂停、记录问题然后恢复执行之后,PHP 会将其视为已引用 - 但是以这种方式编写代码是非常糟糕的做法,而且不检查日志非常非常糟糕。


推荐阅读