You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP从MySQL获取动态内容生成三列Div布局网页

修复你的PHP动态生成三列布局代码问题

先帮你揪出原代码里的几个核心问题,这些就是导致代码跑不起来的关键:

  • 数组处理踩坑:

    1. 你用fetch_row()拿数据,返回的是索引数组,但后面却想用关联数组的方式$gets['message']调用,这直接就会报错。得改成fetch_assoc()来获取关联数组才行。
    2. 那行多余的$get[] = var_export($gets);完全没必要,它会把数组转成字符串,直接破坏了原有的数据结构。
  • 循环逻辑混乱:

    1. 外层的for循环固定只跑两次,根本没法根据数据量自动生成多行三列的结构。
    2. 内层while ($card <=3)会陷入无限循环——不仅$card = $card++;是错误的自增写法(直接写$card++就行),而且条件应该设为$card < 3,同时每次生成完一个父div后还要重置$card的计数。
  • HTML输出与结构问题:

    1. 用&lt;和&gt;输出HTML标签纯属多此一举,直接用<和>更清晰,而且echo用双引号包裹的话,变量解析也更方便。
    2. HTML里存在a标签嵌套的问题(外层<a href="">里面又套了<a>),这是无效的HTML结构,会导致页面渲染出各种奇怪的问题。
  • 跳转逻辑遗漏:
    调用header("location:quickii.php")后没加exit()或die(),代码会继续往下执行,很可能引发不必要的bug。


修复后的完整代码

<?php
$idurl = $_GET['u']; 
$gets = []; 
$stmts = $con->prepare("SELECT * FROM quickiimessage WHERE token =? "); 
$stmts->bind_param("s", $idurl); 
$stmts->execute(); 
$result = $stmts->get_result(); 

// 没有数据时跳转并终止代码
if ($result->num_rows === 0) { 
    header("location:quickii.php"); 
    exit();
} 

// 获取关联数组格式的数据,方便后续调用字段
while ($row = $result->fetch_assoc()){ 
    $gets[] = $row; 
}

$totalItems = count($gets);
$itemsPerRow = 3;

// 按每3个元素一组,循环生成父div
for ($i = 0; $i < $totalItems; $i += $itemsPerRow) {
    echo '<div class="three_columns">';
    
    // 生成当前组的子div,最后一组不足3个也能正常显示
    for ($j = $i; $j < $i + $itemsPerRow && $j < $totalItems; $j++) {
        $item = $gets[$j];
?>
        <div class="card">
            <div class="socialdiv">
                <a style="color:red;" href="#" class="fa fa-facebook"></a>
                <a style="color:mediumblue;" href="#" class="fa fa-twitter"></a>
            </div>
            <div class="names">
                <div class="icons-internationalnews">
                    <a href="">Anonymous user</a>
                </div>
            </div>
            <div class="texts">
                <span class="cliprendername"><?php echo htmlspecialchars($item['message']); ?></span>
                <span class="clip_chan_name"></span>
                <br>
                <span class="renderclips_views"><?php echo htmlspecialchars($item['dates']); ?></span>
                <br><br>
            </div>
        </div>
<?php
    }
    
    echo '</div>';
}
?>

关键修改说明:

  1. 数据获取优化:改用fetch_assoc()获取关联数组,终于能正常调用$item['message']和$item['dates']了。
  2. 循环逻辑重构:外层循环按每3个元素为一组,自动计算需要生成多少个父div;内层循环负责生成当前组的子div,哪怕最后一组不足3个也能正常显示。
  3. HTML结构修复:删掉了嵌套的a标签,同时用htmlspecialchars()转义输出内容,既能防止XSS攻击,也能避免HTML解析错误。
  4. 跳转逻辑补全:在header跳转后添加exit(),确保代码直接终止执行。
  5. 代码可读性提升:把HTML部分从echo字符串里拆出来,以后改样式或结构会方便很多。

内容的提问来源于stack exchange,提问作者Joseph-brown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:07:53