2010-09-19 47 views
0

我使用php/mysql創建一個簡單的留言板。用戶輸入他們的名字和消息,JavaScript立即顯示消息,並且php/mysql將其存儲在數據庫中。加載頁面時,應該以格式化的列表顯示數據庫中的所有消息。Mysql/PHP不顯示所有行

但是,似乎我的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> 

我不知道這裏發生了什麼。這似乎很簡單。我想這可能是一些我看不見的小白癡錯誤,但我看不到它。

任何援助將不勝感激。

回答

0

的原因是,你只循環到4明確:

for($i = count($records); 

記錄是變量持有4個陣列(ID,姓名信息,日期)。每個陣列可能會保留正確數量的消息,但是您的迴路在records上。

下一次其他注意事項:

  • 修改SQL語句明確地訂購這些記錄。您可能會按照您期望的順序看到它們,但是如果您沒有明確說明您希望的順序,則無法保證任何RDBMS。也許:SELECT ... FROM... ORDER BY date DESC

  • for循環從底部開始。在使用顯式ORDER BY結合,可以考慮使用

    for($i = 0; i<=count($records); $i++) 
    
  • echo出每個陣列(姓名,消息的日期)的計數。它與你的數據庫查詢期望的結果一致嗎?

+0

輝煌。那就是訣竅。感謝您抽出寶貴的時間。 – 2010-09-19 01:49:12

0

我建議增加2的var_dump()函數(或FB()如果你使用FirePHP)中的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++;var_dump($i); 
    } 

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