【问题标题】:Mysql/PHP not displaying all rowsMysql/PHP 不显示所有行
【发布时间】:2010-09-19 01:12:53
【问题描述】:

我正在用 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> 

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

任何帮助将不胜感激。

【问题讨论】:

    标签: php mysql html


    【解决方案1】:

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

     for($i = count($records);
    

    Records 是保存 4 个数组的变量(ids、names、messages、dates)。每个数组可能包含正确数量的消息,但您将循环限制在 records

    下次的其他注意事项

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

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

      for($i = 0; i<=count($records);  $i++)
      
    • echo 计算出每个数组的计数(姓名、消息、日期)。这是否与您从数据库查询中得到的预期结果不一致?

    【讨论】:

      【解决方案2】:

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

      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;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-01-23
        • 2017-06-01
        • 2023-04-01
        • 2013-01-26
        • 1970-01-01
        • 1970-01-01
        • 2012-05-10
        相关资源
        最近更新 更多