Mysql / PHP не отображает все строки

0

Я создаю простую панель сообщений с 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
Лучший ответ

Причина заключается в том, что вы просто выполняете цикл 4:

 for($i = count($records);

Записи - это переменная, содержащая 4 массива (идентификаторы, имена, сообщения, даты). Каждый массив, вероятно, содержит правильное количество сообщений, но вы ограничиваете свой цикл на records.

Другие соображения в следующий раз:

  • измените свою инструкцию SQL, чтобы упорядочить эти записи явно. Вы можете видеть их СЕЙЧАС в ожидаемом порядке, но это не гарантируется какой-либо РСУБД, если вы явно не укажете заказ. Возможно: SELECT ... FROM... ORDER BY date DESC?

  • Цикл for начинается внизу. В сочетании с явным ORDER BY рассмотрите возможность использования

    for($i = 0; i<=count($records);  $i++)
    
  • echo вывести счет каждого массива (имена, сообщения, даты). Означает ли это, что вы ожидали от вашего запроса БД?

  • 0
    Brilliant. Это добилось цели. Спасибо, что нашли время.
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;
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню