PHP while 循环和表头仅显示是否设置了 db 值 [英] PHP while loop and table header only showing if a db value is set

查看:38
本文介绍了PHP while 循环和表头仅显示是否设置了 db 值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码.

<table border="1" style="width:800px">
                <?php $schedule_db = mysql_query("SELECT * FROM schedule WHERE '00:00' is not null and '01:00' is not null and '02:00' is not null and '03:00' is not null and '04:00' is not null and '05:00' is not null and '06:00' is not null and '07:00' is not null and '08:00' is not null and '09:00' is not null and '10:00' is not null and '11:00' is not null and '12:00' is not null and '13:00' is not null and '14:00' is not null and '15:00' is not null and '16:00' is not null and '17:00' is not null and '18:00' is not null and '19:00' is not null and '20:00' is not null and '21:00' is not null and '22:00' is not null and '23:00' is not null") 
                or die(mysql_error()); ?>
                <form method="post" action="config_action.php">
                <?php while($schedule = mysql_fetch_array( $schedule_db )) { ?>
                    <tr><?php if(isset($schedule['00:00'])) { ?><td style="width:32px"><?php echo $schedule['00:00'] ?></td><?php } if(isset($schedule['02:00'])) { ?><td style="width:32px"><?php echo $schedule['02:00'] ?></td><?php } if(isset($schedule['03:00'])) { ?><td style="width:32px"><?php echo $schedule['03:00'] ?></td><?php } if(isset($schedule['04:00'])) { ?><td style="width:32px"><?php echo $schedule['04:00'] ?></td><?php } if(isset($schedule['05:00'])) { ?><td style="width:32px"><?php echo $schedule['05:00'] ?></td><?php } if(isset($schedule['06:00'])) { ?><td style="width:32px"><?php echo $schedule['06:00'] ?></td><?php } if(isset($schedule['07:00'])) { ?><td style="width:32px"><?php echo $schedule['07:00'] ?></td><?php } if(isset($schedule['08:00'])) { ?><td style="width:32px"><?php echo $schedule['08:00'] ?></td><?php } if(isset($schedule['09:00'])) { ?><td style="width:32px"><?php echo $schedule['09:00'] ?></td><?php } if(isset($schedule['10:00'])) { ?><td style="width:32px"><?php echo $schedule['10:00'] ?></td><?php } if(isset($schedule['11:00'])) { ?><td style="width:32px"><?php echo $schedule['11:00'] ?></td><?php } if(isset($schedule['12:00'])) { ?><td style="width:32px"><?php echo $schedule['12:00'] ?></td><?php } if(isset($schedule['13:00'])) { ?><td style="width:32px"><?php echo $schedule['13:00'] ?></td><?php } if(isset($schedule['14:00'])) { ?><td style="width:32px"><?php echo $schedule['14:00'] ?></td><?php } if(isset($schedule['15:00'])) { ?><td style="width:32px"><?php echo $schedule['15:00'] ?></td><?php } if(isset($schedule['16:00'])) { ?><td style="width:32px"><?php echo $schedule['16:00'] ?></td><?php } if(isset($schedule['17:00'])) { ?><td style="width:32px"><?php echo $schedule['18:00'] ?></td><?php } if(isset($schedule['19:00'])) { ?><td style="width:32px"><?php echo $schedule['19:00'] ?></td><?php } if(isset($schedule['20:00'])) { ?><td style="width:32px"><?php echo $schedule['20:00'] ?></td><?php } if(isset($schedule['21:00'])) { ?><td style="width:32px"><?php echo $schedule['21:00'] ?></td><?php } if(isset($schedule['22:00'])) { ?><td style="width:32px"><?php echo $schedule['22:00'] ?></td><?php } if(isset($schedule['23:00'])) { ?><td style="width:32px"><?php echo $schedule['23:00'] ?></td><?php } ?></tr>
                <?php } ?>
                </form>
</table>

我想要做的是有一个表格标题(仅在所有其他行上方的一行)显示每列的时间,但前提是该列中有一个值.

What I want to do is a have a table header (just a row above all the other rows) that shows what time each column is but only if there is a value in the column.

我以为我的代码如下:

<tr><?php if(isset($schedule['00:00'])) { ?><td style="width:32px">00:00</td><?php } if(isset($schedule['01:00'])) { ?><td style="width:32px">01:00</td><?php } ?> etc.

然而,因为它在一个 while 循环中,它会在每个实际行之前发生,这不是我想要发生的,我只是希望它在顶部发生一次.

However because it is in a while loop, it will happen before every actual row, which isn't what I want to happen, I just want it to happen once on the top.

我该如何解决这个问题?有什么我可以附加到它使它只循环一次吗?

How can I solve this problem? Is there something I could append to that to make it only loop once?

谢谢!

推荐答案

然后不要在 while 循环中输出您的行.将所有数据保存到一个 var 中.然后,如果 var 包含内容,则放出标题,然后放出包含所有内容行的 var.

Then don't output your rows within the while loop. Save all data into a var. And then if the var contains content, put out the headrow and after that the var containing all content-rows.

编辑

好吧,这是我写过的最丑陋的代码,您可能可以使用数组和其他东西来使代码更小.但这是获得想法的代码片段......捕获所有行.这样做时检查每个字段是否已填写.如果是,那么您将需要在标题中有一列.例如,我们通过将 data0 设置为 true 来做到这一点.处理完整个数据后,我们检查每个 var 并查看它是否为真.如果是这样,那么您将在标题中打印该列.所以最后你会看到,你输出了 table-tag,然后是 headrow-var,然后是包含所有格式化数据的字符串,然后是结束 table-tag.所以你得到了基本的想法.将 headrow 和其他行存储在单独的变量中,并按正确的顺序放置它们...

Okay that's the most ugly code I've ever written, you could probably use arrays and stuff to make the code much smaller. But this is the code-snippet to get an idea... Capture all rows. While doing that check each field if it is filled in. If so, than you will need a column for that in the headrow. We do that by setting data0 for example to true. After processing the whole data we check out each var and look if it is true. If so, than you print the column in the headrow. So in the end you see, that you ouput the table-tag, then the headrow-var, then the string with all formatted data and then the closing table-tag. So you get the basic idea. Store headrow and the other rows in seperate vars and put them out in the right order...

// Get data from database-table...
$schedule_db = mysql_query('...your query...') or die(mysql_error());

$data0 = false;
$data1 = false;
$data2 = false;
// reapeat this for all hours till 23...

while($schedule = mysql_fetch_array($schedule_db))
{
    if(isset($schedule['00:00']))
    {
        $data0 = true;
        $row = '<td style="width: 32px;">' . $schedule['00:00'] . '</td>';
    }

    // Reapeat this for every hour you need...
    if(isset($schedule['01:00']))
    {
        $data1 = true;
        $row .= '<td style="width: 32px;">' . $schedule['01:00'] . '</td>';
    }

    //...

    $rows .= $row;
}

$headrow = '<tr>';
if($data0 === true)
    $headrow .= '<th>00:00</th>' 

if($data1 === true)
    $headrow .= '<th>01:00</th>';

// Repeat for all hours...


$headrow = '</tr>';

echo '<table>';
echo $headrow;
echo $rows;
echo '</table>';

这篇关于PHP while 循环和表头仅显示是否设置了 db 值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆