【问题标题】:Creating a PHP array for display in an HTML table创建一个 PHP 数组以在 HTML 表格中显示
【发布时间】:2016-01-06 01:46:27
【问题描述】:

我的数据库记录了访问我网站的用户的 IP 地址和会话 ID。我想显示一个 HTML 表格,其中包含前十个出现的 IP 地址以及与每个 IP 地址关联的不同会话的数量。

所以我从这个查询开始:

$sql="SELECT ip, country, city, COUNT(*) as count FROM Hits GROUP BY ip ORDER BY count DESC LIMIT 10";

然后,对于生成的 10 行中的每一行,我使用一个 while 循环来查询同一个数据库,以提取与每个地址关联的不同会话 ID 的数量,因此:

$sql="SELECT DISTINCT Session FROM Hits WHERE ip='$ipaddress'"

我的挑战是在执行 while 循环时构建一个数组(与 MySQLi 查询结果具有相同的结构),随后我可以在该数组上使用 foreach 循环来输出 HTML 表。这是我的完整代码:

$con = mysqli_connect("localhost","user","password","dbase");
$sql="SELECT ip, country, city, COUNT(*) as count FROM Hits GROUP BY ip ORDER BY count DESC LIMIT 10";
$result = mysqli_query($con,$sql);
$data = array();
while ($row = mysqli_fetch_assoc($result)) {
     $ipaddress = $row["ip"];
     $sql="SELECT DISTINCT Session FROM Hits WHERE ip='$ipaddress'";
     $res = mysqli_query($con,$sql);
     $distinctsessions = mysqli_num_rows($res);
     $data[] =$ipaddress.",".$distinctsessions;
};
$colNames = array_keys(reset($data));
foreach($data as $row) {
    echo "<tr>";
    foreach($colNames as $colName) {
    echo "<td>".$row[$colName]."</td>";
    }   
echo "</tr>";
}
echo "</table>";
mysqli_free_result($result);
mysqli_free_result($res);
mysqli_close($con); 

我意识到我的错误在于:

$data[] =$ipaddress.",".$distinctsessions;

这可能不是正确的结构,但我不知道是什么。感谢您的建议。

【问题讨论】:

  • 你的问题到底是什么?
  • 您的数据不包含 colName 键名
  • w3schools.com/php/php_arrays.asp - 这可能对你有帮助
  • 使用 $data[] = ['ip' => $ip, 'dist' => $dist];并删除表中的第二个 foreach 并使用简单的 $row['ip'] - $row['dist']
  • @daremachine 谢谢。我已经尝试过您建议的['ip' =&gt; $ip, 'dist' =&gt; $dist] 格式,但无济于事。我没有删除第二个 foreach 因为我不明白这有什么帮助。您说我的 $data 数组不包含 $colName 键,但我认为 $colNames = array_keys(reset($data)); 创建了一个包含键的数组(现在设置为 ipdist),然后 foreach($colNames as $colName) { echo "&lt;td&gt;".$row[$colName]."&lt;/td&gt;"; } 将对其进行操作。我是新手,如果我错了,请原谅我,请帮助我理解。

标签: php arrays mysqli


【解决方案1】:

不用foreach使用下面的代码

$con = mysqli_connect("localhost","user","password","dbase");
$sql="SELECT ip, country, city, COUNT(*) as count FROM Hits GROUP BY ip ORDER BY count DESC LIMIT 10";
$result = mysqli_query($con,$sql);
$data = array();
while ($row = mysqli_fetch_assoc($result)) {
     $ipaddress = $row["ip"];
     $sql="SELECT DISTINCT Session FROM Hits WHERE ip='$ipaddress'";
     $res = mysqli_query($con,$sql);
     $distinctsessions = mysqli_num_rows($res);
 ?>
     <tr>
          <td><?php echo $ipaddress; ?></td>
          <td><?php echo $distinctsessions; ?></td>
     </tr>
  <?php }
         echo "</table>";
         mysqli_free_result($result);
         mysqli_free_result($res);
         mysqli_close($con); 
  ?>

【讨论】:

    猜你喜欢
    • 2011-02-15
    • 2018-08-19
    • 2019-08-13
    • 2011-10-13
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多