如何为内容制作动态 php div,而不是硬编码 html

  • 本文关键字:html 编码 div php 动态 php
  • 更新时间 :
  • 英文 :


我从教程中编写,下面的代码从数据库中的表中获取内容,但内容所在的div被硬编码到html文件中。

我如何将此代码转换为将根据内容数量创建所需数量的div 的内容。我的意思是,下面的代码将内容分成每个div 10 行,然后创建下一个div。 我想保留这个结构,但动态创建代码,以便如果数据库中有 22 行,那么它将需要产生 3 个div,如果有 50 行,它将需要 5 个div 等。 对于每个div,它不需要重复相同的 10,而是从每个div 的下一行开始。

谁能帮忙?

谢谢

<div class="down_col">
            <?php
              $startAt = empty($_GET['startAt']) ? 0 : $_GET['startAt'];
              require_once 'functions.php';
              printDownTrans($startAt, 10);
            ?>
        </div>
        <div class="down_col">
            <?php
              require_once 'functions.php';
              printDownTrans($startAt + 10, 10);
            ?>
        </div>
        <div class="down_col">
            <?php
              require_once 'functions.php';
              printDownTrans($startAt + 20, 10);
            ?>
        </div>

编辑

这是函数的主要部分.php它从 db 检索数据并将一些数据连接在一起:

if (mysqli_connect_errno($link)) {
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
    exit(0);
}
// Retrieve the rows from sampleTable table.
$query = "SELECT * FROM sampleTable ORDER BY Data1, Data2 LIMIT $startAt,$amount";
if ($result = mysqli_query($link, $query)) {
    while ($row = mysqli_fetch_row($result)) {
        $data1Data2 = $row[1] .  ' - ' . $row[2];
        echo '<p><a href="sample/sample/' . $data1Data2 . '.pdf" target="_self">' . $data1Data2 . '</a></p>';

希望这有助于理解。 谢谢

我建议(至少)重写那部分代码,因为我认为(数据库)逻辑和输出应该分开。

但是,在您的代码中,它不是分开的,那么为什么还要将div 与它分开呢?如果您不愿意,函数中的数据库逻辑可以很容易地用于实现您想要的内容。

// new function parameters:
// $maxCols     maximum number of divs      default=NULL
// $colSize     how many rows in one col    default=10
if ($maxCols !== NULL)
    $limit = ','.$maxCols * $colSize;
else
    $limit = '';
$query = "SELECT * FROM sampleTable ORDER BY Data1, Data2 LIMIT ".$startAt.$limit;
if ($result = mysqli_query($link, $query)) {
    $currentRow = 1;
    echo '<div class="down_col">';
    while ($row = mysqli_fetch_row($result)) {
        if ($currentRow % $colSize == 0)
            echo '</div><div class="down_col">';
        $data1Data2 = $row[1] .  ' - ' . $row[2];
        echo '<p><a href="sample/sample/' . $data1Data2 . '.pdf" target="_self">' . $data1Data2 . '</a></p>';
        $currentRow++;
    }
    echo '</div>';
}

现在你可以像这样简单地调用一次函数

$startAt = empty($_GET['startAt']) ? 0 : intval($_GET['startAt']);
// version 1: print all rows in cols of size 10
printDownTrans($startAt); 
// version 2: print maximum of 3 cols of size 10
printDownTrans($startAt, 3);
// version 3: print maximum of 5 cols of size 8
printDownTrans($startAt, 5, 8);

您永远不能相信用户输入!特别是当您使用数据库时,这是一个很大的漏洞。设置后,$_GET['startAt']将在查询中使用,没有任何转义(也许在您未发布的部分中?) - intval是这里的简单解决方案,因为您总是期望一个整数。

由于您不熟悉 PHP,因此您可能不知道模运算符 % 。我希望这个例子有所帮助:

(1 % 10 == 0)  -> (1 == 0) -> false
(4 % 10 == 0)  -> (4 == 0) -> false
(10 % 10 == 0) -> (0 == 0) -> TRUE
(11 % 10 == 0) -> (1 == 0) -> false
(20 % 10 == 0) -> (0 == 0) -> TRUE

你说你发布的代码不是你的,不是吗?无论如何,回答你的问题,我会做如下:

  1. 对数据库执行查询以获取所有行。
  2. 在 while 循环中,将行存储在一个多维数组中,该数组具有您要打印的结构:您将有两个计数器(一个用于行,一个用于组),当行计数器达到 10 时,您增加组计数器并将行计数器重置为零。
  3. 执行 foreach 以遍历数组,打印 html 代码。

这是数组的建议结构:

Array( group_num => Array( row_num => Array( row parameters ) ) )

您可以使用 ceil 函数,这里是您的示例代码

$sql = "SELECT * FROM eh_patient WHERE site_id =3 ORDER BY id_patient"; 
$result_fatch = mysqli_query($link, $sql) or die(mysqli_error($link));
$row = mysqli_num_rows($result_fatch);
$max = ceil($row/10);
for($i=0; $i<$max; $i++) {
?>
    <div class="down_col">
    <?php
    $startAt = empty($_GET['startAt']) ? 0 : $_GET['startAt'];
    require_once 'functions.php';
    printDownTrans($startAt, 10);
    ?>
    </div>
<?php
}
?>

最新更新