Mysql / PHP不显示所有行

时间:2010-09-19 01:12:53

标签: php mysql html

我用php / mysql创建一个简单的留言板。用户输入他们的名字和消息,javascript立即显示消息,php / mysql将其存储在数据库中。页面加载时,它应该以格式化列表显示数据库中的所有消息。

然而,似乎我的php只是任意显示一些消息。它们按照正确的时间顺序排列,但有些缺失,只显示其中的4个。手动查看数据库中的条目,我可以看到发布的消息确实存储在他们的表中。它们并非全部显示。奇怪的。

显示消息的HTML / PHP:

<?php 
    $records = getMessages(); //see getMessages() function below
    $names = $records["names"];
    $messages = $records["messages"];
    $dates = $records["dates"];

    for($i = count($records); $i > 0; $i--){ ?>
    <div class="message">
        <p class="message_txt"><?php echo $messages[$i];?></p>
        <div>
            <div class="message_name">
                <?php echo $names[$i];?>
            </div>
            <div class="message_date">
                <small>
            <?php 
                echo "Posted on ";
                echo date("F j, Y",strtotime($dates[$i]));
        ?>
        </small>
        </div>
    </div>
</div>
<?php } ?>

继承上面的getMessages()函数:

function getMessages(){
    $conn = connect("wedding");
    $ids;
    $names;
    $messages;
    $dates;
    $get_messages_query = "SELECT id, name, message, date 
               FROM messages;";
    $get_messages_result = mysql_query($get_messages_query,$conn) or die(mysql_error());
    $i = 0;
    while($row = mysql_fetch_array($get_messages_result)){
    $ids[$i] = $row["id"];
    $names[$i] = $row["name"];
    $messages[$i] = $row["message"];
    $dates[$i] = $row["date"];
    $i++;
    }

    $entries = array("ids" => $ids,
                     "names" => $names,
                     "messages" => $messages,
                     "dates" => $dates
               ); 
    return $entries;
}

这是输出:

<div class="message"> 
    <p class="message_txt">Yo this is a message</p> 
    <div> 
    <div class="message_name">Bob</div> 
    <div class="message_date"><small>Posted on September 18, 2010</small></div> 
    </div>                  
</div> 
<div class="message"> 
    <p class="message_txt">This is a message another</p> 
    <div> 
    <div class="message_name">Andrew</div> 
    <div class="message_date"><small>Posted on September 6, 2010</small></div> 
    </div> 
</div> 
<div class="message"> 
    <p class="message_txt">And another message</p> 
    <div> 
    <div class="message_name">Andrew</div> 
    <div class="message_date"><small>Posted on September 6, 2010</small></div> 
    </div> 
</div> 
<div class="message"> 
    <p class="message_txt">This is a message</p> 
    <div> 
    <div class="message_name">Andrew</div> 
    <div class="message_date"><small>Posted on August 27, 2010</small></div> 
    </div> 
</div> 

我不确定这里发生了什么。看起来很简单。我想这可能是我看不到的一些小的愚蠢错误......但是我看不到它。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

原因是你只是明确地循环到4:

 for($i = count($records);

记录是包含4个数组的变量(ids,名称,消息,日期)。每个数组都可能包含正确数量的消息,但您在records上限制了循环。

下次的其他注意事项

  • 修改您的SQL语句以明确地订购这些记录。您可能会按照预期的顺序看到它们,但如果您没有明确说明您希望的顺序,则不能保证任何RDBMS。也许:SELECT ... FROM... ORDER BY date DESC

  • for循环从底部开始。结合明确的ORDER BY,请考虑使用

    for($i = 0; i<=count($records);  $i++)
    
  • echo输出每个数组的计数(名称,消息,日期)。这是否符合您对数据库查询的期望?

答案 1 :(得分:0)

我建议在getMessages()函数中添加2个var_dump()函数(或fb()(如果使用FirePHP),以查看发生了什么。

function getMessages(){
    $conn = connect("wedding");
    $ids;
    $names;
    $messages;
    $dates;
    $get_messages_query = "SELECT id, name, message, date 
               FROM messages;";
    $get_messages_result = mysql_query($get_messages_query,$conn) or die(mysql_error());
    $i = 0;
    while($row = mysql_fetch_array($get_messages_result)){
    $ids[$i] = $row["id"];
    $names[$i] = $row["name"];
    $messages[$i] = $row["message"];
    $dates[$i] = $row["date"];
    $i++;var_dump($i);
    }

    $entries = array("ids" => $ids,
                     "names" => $names,
                     "messages" => $messages,
                     "dates" => $dates
               ); var_dump($entries);
    return $entries;
}
相关问题