MySQL-PHP在html表中分别显示数据

时间:2016-01-06 16:08:45

标签: php html mysql

我试图在html页面中使用PHP显示来自MySQL表的数据,将数据包装在HTML表格中。

我在MySQL表中有11列和 x 行,其中我只需要6列就可以将所有行打印为HTML表格。我能做到的。(成功)

我的方法:



$result = mysqli_query($connect, "SELECT order_id, order_name, order_from, order_to, order_pickup, order_dropoff FROM users");

// Printing results in HTML
echo "\n";
while ($line = mysqli_fetch_array($result, MYSQL_ASSOC)) {
    echo "\t<tr id='$line[order_id]'>\n";
    foreach ($line as $col_value) {
        echo "\t\t<td>$col_value</td>\n";
    }
    echo "\t</tr>\n";
}
echo "\n";
&#13;
&#13;
&#13;

输出:

enter image description here

我的问题: 在这6列中,我希望1列名为order_id的列为行id的{​​{1}},所以现在我只想剩下5列作为 table-cell&#39; s tr。我不希望td's列的值为表格单元格。

4 个答案:

答案 0 :(得分:2)

还检查$line中的列名:

foreach ($line as $col_name => $col_value) {
    if ($col_name != 'order_id') {
        echo "\t\t<td>$col_value</td>\n";
    }
}

答案 1 :(得分:2)

好的,有很多解决方案。通常在编写此类代码时,通常会将数据库层与模板层分开,并将信息评估到模板层。

为了您的示例,您可以选择删除foreach并单独定义单独的列值,在我看来这通常是最好的方法,因为您已经知道所有列并且可以更好地控制何时回显它们:

$result = mysqli_query($connect, "SELECT order_id, order_name, order_from, order_to, order_pickup, order_dropoff FROM users");

// Printing results in HTML
echo "\n";

while ($line = mysqli_fetch_array($result, MYSQL_ASSOC)) {
    echo "\t<tr id='$line[order_id]'>\n";

    echo "\t\t<td>$line['title']</td>\n";
    echo "\t\t<td>$line['second title']</td>\n";

    echo "\t</tr>\n";
}

echo "\n";

我相信用户已经提到的另一种方法是使用if 声明。您可以在数组的键上执行此操作:

$result = mysqli_query($connect, "SELECT order_id, order_name, order_from, order_to, order_pickup, order_dropoff FROM users");

// Printing results in HTML
echo "\n";

while ($line = mysqli_fetch_array($result, MYSQL_ASSOC)) {
    echo "\t<tr id='$line[order_id]'>\n";

    foreach ($line as $col_name => $col_value) {
        if ($col_name === 'order_id') {
            continue;
        }
        echo "\t\t<td>$col_value</td>\n";
    }

    echo "\t</tr>\n";
}

echo "\n";

答案 2 :(得分:1)

你的解决方案很简单,你只需要检查数组键是否为order_id,如果是,则不要回应它:D

echo "\n";
while ($line = mysqli_fetch_array($result, MYSQL_ASSOC)) {

    echo "\t<tr id='$line[order_id]'>\n";
    foreach ($line as $key => $col_value) {
        if ($key != 'order_id')
        echo "\t\t<td>$col_value</td>\n";
    }
    echo "\t</tr>\n";
}
echo "\n";

答案 3 :(得分:1)

我确定我会发布一个更好的答案,但我会发布它,看看这个想法有多简单。

我的代码的缺点是它检查每个循环语句中的if(),增加了代码的复杂性。

基本上你设置一个bool变量来保存每个表行的第一遍。此变量设置为false($pass_one = false)。然后,当我们开始获取列信息时,我们将bool变量设置为true并跳过第一个元素。在下一列迭代中,我们按照自己的意愿进行。在我们完成列集后,我们将$pass_one更改为false并重复进入其他行。

<?php $result = mysqli_query($connect, "SELECT order_id, order_name, order_from, order_to, order_pickup, order_dropoff FROM users");

$pass_one = false; //you set it  to false

// Printing results in HTML
echo "\n";
while ($line = mysqli_fetch_array($result, MYSQL_ASSOC)) {
    echo "\t<tr id='$line[order_id]'>\n";
    foreach ($line as $col_value) {
        if (!$pass_one) { 
            $pass_one = true; // you pass the first echo, so you set the bool to true
            continue; // skip the first pass, (this statement goes to foreach() loop
        }
        echo "\t\t<td>$col_value</td>\n";
    }
    echo "\t</tr>\n";
    $pass_one = false; // we get a new <tr> so we set the $pass_one for that loop to false
}
echo "\n";

?>