Note "$db“是我的数据库类的一个实例,"getRows()”是该类中的一个自定义函数。
我有一个jQuery数据表,我需要用数据(域名和MX记录)填充它。我需要把它印在桌子上:
domain1 | MX Record1
| MX Record2
domain2 | MX Record1
| MX Record2
| MX Record3它以纯文本的形式使用以下代码:
foreach ($records = $db->getRows("select name, group_concat(content) from records where type='MX' group by name", ['']) as $record) {
$strings = explode(",", $record['group_concat(content)']);
$name = $record['name'];
$count = 0;
foreach($strings as $string => $mx) {
$count++;
if($count <= 1 ) {
echo "<strong>" . $name . "</strong> | " . $mx;
}
else {
echo "----------------------- | " . $mx;
}
echo " -- Count: " . $count . "<br>";
}
echo "<br>";
}产出如下:
domain1.com | xxxx.xxxxxxxxxxxxx.com -- Count: 1
----------- | xxxx.xxxxxxxxxxxxx.com -- Count: 2
---------- | xxxx.xxxxxxxxxxxxx.com -- Count: 3
domain2.net | xxxx.xxxxxxxxxx.net -- Count: 1
----------- | xxxx.xxxxxxxxxx.net -- Count: 2
domain3.com | xxxx-xxxxxx.xxxxxxxxxxxxxxxxx.com -- Count: 1
----------- | xxxx-xxxxxxx.xxxxxxxxxxxxxxxxx.com -- Count: 2
---------- | xxxx-x.xxxxxxxxxxxxxxxxxxxx.com -- Count: 3然而,在我的表中,输出是可怕的。以下是所有内容的代码(减去CSS):
<div class="container">
<table id="mx_report_table" class="table table-bordered" >
<thead>
<tr>
<th>Name</th>
<th>MX Record</th>
</tr>
</thead>
<tbody>
<?php
foreach($records = $db->getRows("SELECT name, group_concat(content) FROM records WHERE type='MX' GROUP BY name", ['']) as $record) {
$strings = explode(",", $record['group_concat(content)']);
$name = $record['name'];
$count = 0;
foreach($strings as $string => $mx) {
$count++;
if($count <= 1) {
echo "<tr><td>$name</td><td>$mx</td></tr>";
}
else {
echo "<tr><td></td><td>$mx</td></tr>";
}
}
}
?>
</tbody>
</table>
</div>
</body>
<script>
document.title='MX Report';
$(function() {
$('#mx_report_table').DataTable({
"scrollY":"400px",
"scrollCollapse":true,
"paging":true,
"lengthMenu":[10,25,50,100],
"pageLength":25
});
});
</script>这张表是这样的:

如果我基本上(至少我认为)在我的桌子上做同样的事情的话,我哪里出了问题?
发布于 2018-05-26 21:47:27
正如我在注释中已经提到的,是DataTable插件(有意)通过根据第一列的值对所有行进行排序而造成混乱。将"order": false添加到数据表选项中,以禁用排序能力。
$('#mx_report_table').DataTable({
"scrollY":"400px",
"scrollCollapse":true,
"paging":true,
"lengthMenu":[10,25,50,100],
"pageLength":25,
"order": false
});发布于 2018-05-26 21:50:22
是的,每个域都有相应的mx记录。
您只需循环并将数据输出到表:
foreach($strings as $string => $mx) {
echo "<tr>
<td>$name</td>
<td>$mx</td>
</tr>";
}您的表只需一行一行地看起来相同,在name列下保留一个单元格空白,这就使读者不得不“假定”实际上并不缺少域名,但他们应该考虑到前面的域名与多个MX记录有关。
我建议将标题作为域名和每个域名标题下的所有相应MX记录的单独章节。比如空行之类的。
我会取消对db调用的循环,因为所有的事情都可能出错。只需从数组中的DB中获取数据,用数组中的所有名称对应的MX记录循环数组中的每个域名,并将名称作为标题行,然后MX记录在下面的行中,然后下一个名称作为标题行,其MX记录在下面。
https://stackoverflow.com/questions/50546949
复制相似问题