我可能真的忽略了一些简单的东西,但这不起作用,我想这只是在尝试拆分数组时我是傻瓜。
基本上下面只获取ID号,然后从DB中选择数据。这工作正常,PDF打印在最后但没有数据。
如果我将 json_decode
更改为 json_encode
,那么它只给出了数组的第一部分(但很明显它没有被解码所以有一些括号和斜线,它不应该)。
但是我无法显示所有行。有人能指出我出错的地方吗?
<?php
//etc etc
$idgg = $_GET['idgg'];
$query = "select * from `all_quotes` where quote_id='1493293451_1'";
if ($result = mysqli_query($link2, $query)) {
while ($row = mysqli_fetch_assoc($result)) {
$data = $row["data"];
$qdata = json_decode($data);
foreach($qdata as $trow){
$prods = explode('|', $trow);
$rowall = "<tr><td>$prods[0]</td><td>$prods[1]</td><td>$prods[3]</td>
<td>$prods[2]</td></tr>";
}
}
}
require_once '/dompdf/autoload.inc.php';
use Dompdf\Dompdf;
$dompdf = new Dompdf();
$dompdf->loadHtml('<table>'.$rowall.'</table>');
$dompdf->setPaper('A4', 'portrait');
$dompdf->render();
$dompdf->stream("test.pdf");
?>
数组看起来像:
[“ABC |很多描述| 31.12 | ETC”,“DEF |更多...... | 30.57 | ETC”]。
另外,我注意到如果我不使用$_GET
(即只是在代码中输入id
),那么我得到第一个结果,但不是其余的结果。为什么这会有所不同?!
提前致谢...
更新了代码,添加了不同的mysqli结构。上面给出了数据的第一行(即数组的第一部分)
答案 0 :(得分:1)
你已经接近正确了。您修复了mysqli_fetch_assoc()
问题,但是当您这样做时,您带回了覆盖生成的字符串的早期错误。据我所知,正确的循环应该是:
if ($result = mysqli_query($link2, $query)) {
$rowall = ""; // Start out with an empty string
while ($row = mysqli_fetch_assoc($result)) {
$data = $row["data"];
$qdata = json_decode($data);
foreach($qdata as $trow){
$prods = explode('|', $trow);
// Here you were overwriting the string in each iteration, since you only used "=", not ".="
$rowall .= "<tr><td>$prods[0]</td><td>$prods[1]</td><td>$prods[3]</td>
<td>$prods[2]</td></tr>";
}
}
}
如果仍然只提供一行,则直接在数据库中运行SQL查询,并确保它确实返回多行。
答案 1 :(得分:0)
尝试 首先你应该尝试link并检查你的json对象是否正确
检查json对象是什么,以便你知道你在做什么
通常一个json字符串传递给json_decode时它将返回该对象 至于。考虑
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
var_dump(json_decode($json));
/* output
object(stdClass)#1 (5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
} */
而
var_dump(json_decode($json, true));
/* output
array(5) {
["a"] => int(1)
["b"] => int(2)
["c"] => int(3)
["d"] => int(4)
["e"] => int(5)
}*/
这个可以由你使用的返回关联数组。
否则我怀疑数据可能以序列化格式存储,您可以使用 unserialize功能