如何在这个php循环中集成这个html?

时间:2009-07-28 09:22:08

标签: php

我有这个PHP代码我试图与它下面的html布局集成但是我无法弄明白,php 代码获取所有状态发布并按顺序显示它们,但然后显示与状态发布关联的所有注释,以便状态发布可以具有 0条评论或它可能有多条评论。

如果您阅读我在PHP代码中留下的注释以及我在html中留下的注释,您将看到我面临的问题 我需要将评论放在状态帖子的表格单元格中

在下图中,该帖子有1个状态帖子和3个评论,我想要做的是让评论显示在自己的表格中,该表格将嵌套在状态帖子右侧的右侧。所以在状态帖子@ top上你看到该帖子底部有一个表格边框,该边框应该低于该帖子的最后一条评论,希望现在更有意义

alt text

<?PHP
$last_id = 0;
echo '<table width="400">';
while ($row = mysql_fetch_array($res)) {
    //start output of new status post and comments
    if ($row['0'] != $last_id) {
        echo 'status post stuff'
    }
    //start output of new status post and comments

    //output comment here
    $last_id = $row['0'];
    if($row['commentid'] != ''){
        echo 'status COMMENT for above status post'
    }
    //END output comment here
}
echo '</table>';
?>

<table width="400">

    <!-- begin status post -->
    <tr> 
        <td width="99" valign="top" style="border-bottom: 1px solid rgb(204, 204, 204); margin: 0px; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px;"> <div class="imageSub" style="width: 90px;"> <img class="female" src="http://cache2.mycrib.net/images/image_group66/0/43/t_6871399b0962b5fb4e29ce477541e165950078.jpg" alt="Something" width="90"/> </div></td>
        <td width="489" style="border-bottom: 1px solid rgb(204, 204, 204); margin: 0px; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px;">so and so said blah blah blah @ wee hours of the moring! <BR>

            <!-- begin comment -->
            <table width="90%" style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px;">
                <tr>
                    <td width="14%" rowspan="2" valign="top"><img class="male" src="http://cache2.mycrib.net/images/image_group34/0/39/T_653807517aff2b1f5662d865b40d87d527c8eb.jpg" alt="Something" width="45"/></td>
                    <td width="86%">Date Posted</td>
                </tr>
                <tr>
                    <td>Comment text</td>
                </tr>
            </table>
            <!-- end comment -->

        </td>
    </tr>
  <!-- end status post -->

</table>

3 个答案:

答案 0 :(得分:4)

我会尝试这样的东西,它允许你将设计与从数据库中提取东西的逻辑分开。

1.从数据库中构建一个如下所示的数组 - 这应该是直截了当的:

<?php
$posts = array(
    array( 
        'title' => 'Hello',
        'post' => 'This is the post',
        'comments' => array( 
            array(
                'date_posted' => '28/07/2009',
                 'text' => 'this is the first comment'
            ),
            array(
                'date_posted' => '28/07/2009',
                'text' => 'this is the second comment'
            )
        )
    ),
    array(
        'title' => 'Another post',
        'post' => 'Hello',
        'comments' => array()
    )
);
?>

2.浏览数组并输出html(我已经简化但你应该能够适应)。

<?php foreach ($posts as $post): ?>
    <!-- begin status post -->
    <h1><?php echo $post['title']; ?></h1>
    <p><?php echo $post['post']; ?></p>
    <?php if ($post['comments']): ?>
        <h2>Comments:</h2>
        <ul>
        <?php foreach ($post['comments'] as $comment): ?>
            <!-- begin comment -->
            <li>
                <?php echo $comment['text']; ?>
                etc.
            </li>
         <!-- end comment -->
        <?php endforeach; ?>
        </ul>
    <?php endif; ?>
<!-- end status post -->
<?php endforeach; ?>

答案 1 :(得分:2)

你可以关闭你的php标签再次放入html然后在循环中重新打开它。

e.g:

<table width="400">

<?PHP
$last_id = 0;
echo '<table width="400">';
while ($row = mysql_fetch_array($res)) {
    //start output of new status post and comments

    if ($row['0'] != $last_id) {
        //echo 'status post stuff'
     ?>
<tr> 
            <td width="99" valign="top" style="border-bottom: 1px solid rgb(204, 204, 204); margin: 0px; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px;"> <div class="imageSub" style="width: 90px;"> <img class="female" src="http://cache2.mycrib.net/images/image_group66/0/43/t_6871399b0962b5fb4e29ce477541e165950078.jpg" alt="Something" width="90"/> </div></td>
            <td width="489" style="border-bottom: 1px solid rgb(204, 204, 204); margin: 0px; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px;">so and so said blah blah blah @ wee hours of the moring! <BR>
     <?php
    }
    //start output of new status post and comments

    //output comment here
    $last_id = $row['0'];
    if($row['commentid'] != ''){
        echo 'status COMMENT for above status post'
    }
     //END output comment here
     ?>

                <!-- begin comment -->
            <table width="90%" style="border: 1px solid rgb(204, 204, 204); margin: 0px; padding-top: 10px; padding-right: 10px; padding-bottom: 10px; padding-left: 10px;">
                <tr>
                    <td width="14%" rowspan="2" valign="top"><img class="male" src="http://cache2.mycrib.net/images/image_group34/0/39/T_653807517aff2b1f5662d865b40d87d527c8eb.jpg" alt="Something" width="45"/></td>
                    <td width="86%">Date Posted</td>
                </tr>
                <tr>
                    <td>Comment text</td>
                </tr>
            </table>
            <!-- end comment -->

      <?php
}
echo '</table>';
?>

答案 2 :(得分:-1)

我建议你开始学习SMARTY这样的模板系统,这会让你的问题变得更容易解决,而且你的代码也更容易阅读和理解。