Я создаю простую панель сообщений с 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>
Я не уверен, что происходит здесь. Это кажется достаточно простым. Полагаю, это может быть небольшая идиотская ошибка, которую я не вижу... но я не вижу ее.
Любая помощь будет оценена.
Причина заключается в том, что вы просто выполняете цикл 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
вывести счет каждого массива (имена, сообщения, даты). Означает ли это, что вы ожидали от вашего запроса БД?
Я предлагаю добавить 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;
}