Самый простой способ исправить ваши проблемы - это скопировать результаты запроса MySQL в массив
while($row = mysql_fetch_assoc($result)) {
$yourArray[] = $row;
}
А затем используйте это для построения своих таблиц.
edit: Я имел в виду следующее:
while($row = mysql_fetch_assoc($result)) {
$yourArray[] = $row;
}
echo '<table>';
foreach($yourArray as $i) {
retrieve_msg_topic($i);
}
echo '<tr><td>';
foreach($yourArray as $i) {
retrieve_msg_content($i);
}
echo '</tr></td></table>';
А затем удаляет все, что связано с запросом SQL, из этих функций, например так:
function retrieve_msg_topic($result) {
echo '<tr></td>'$result['usernombre'];
echo '<div id="msg'.$result['message_id'].'">';
echo stripslashes($result['message_topic']);
echo '</div><td></tr>';
}
В данный момент вы выполняете странные клавишные mojo с ret [0] в качестве темы и $ ret [1] в качестве сообщения, что не является хорошей практикой. Кроме того, я не вижу декларации $ i в этом коде.
Ошибка предполагает, что результат пуст или запрос искажен. Я не могу быть уверен из кода, который я видел.
Несколько других замечаний: кажется странным, что вы используете stripslashes () для данных, которые прямо из БД. Вы уверены, что при вставке контента в БД вы не избегаете ничего дважды?
Всегда используйте циклы вместо того, чтобы что-то записывать x раз (как 8 раз, которые вы сказали в своем вопросе). Подумайте о ситуации, когда вам нужно что-то изменить в вызове функции (имя, параметры, что угодно). С петлями нужно отредактировать 1 место. Без, вам нужно редактировать 8 разных мест.
Кстати, еще одно решение этой проблемы - использование AJAX для загрузки контента в последнюю ячейку. Если вам интересно, я мог бы показать вам, как.
больше правок:
Для AJAX создайте свой список сообщений как обычно и оставьте целевой объект пустым. Затем добавьте вызов JQuery AJAX:
$('MSG_LIST_ELEMENT').click(function() {
var msgId = $(this).attr('id').replace('msg','');
$.get(AJAX_URL+'?msgID='+msgId,function(data) {
$('TARGET_TD').html(data);
})
});
Замените заглавные переменные на те, которые вам нужны. Что касается PHP, просто отобразите содержимое сообщения с идентификатором $ _GET ['msgID'].
Тем не менее, убедитесь, что вы аутентифицируете пользователя, прежде чем выводить какие-либо сообщения, чтобы кто-то другой не мог прочитать чьи-либо сообщения, переключая номер идентификатора. Не знаю, как работает аутентификация на вашем сайте, но это можно сделать с помощью переменных сеанса.