[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Отображение сообщений
Soldier Ghost
Здраствуйте я тут гостевую книгу начал писать всё норм но только есть одна загвоздочка при отображении сообщений по идеи в базе много записей а отображает только одну ниже код помогите чтобы каждое сообщение было в своей таблице
PHP
<?php
$query 
= "SELECT * FROM gb ORDER BY id='$id'";
$res = mysql_query($query, $connect) or die(mysql_error());

while(
$print = mysql_fetch_array($res))
{
    $name = $print['name'];
    $mail = $print['mail'];
    $city = $print['city'];
    $date = $print['date'];
    $msg = $print['text'];
}
?>
<p>&nbsp;</p>
<table width="771" border="1" align="center">
  <tr>
    <td width="379"> Имя: <? print "$name" ?></td>
    <td width="382" colspan="3"><? if(isset($mail)) print "<a href=mailto:$mail>$mail</a>" ?></td>
  </tr>
  <tr>
    <td colspan="4"><p><? print "$msg" ?></p></td>
  </tr>
  <tr>
    <td> <? if(isset($city)) print "$city" ?></td>
    <td colspan="3"><? print "$date" ?></td>
  </tr>
  <tr>
   




Спустя 11 минут, 57 секунд (28.06.2009 - 23:10) Krevedko написал(а):
а что за сортировка такая ?
ORDER BY id='$id'
huh.gif


Спустя 5 минут, 35 секунд (28.06.2009 - 23:16) glock18 написал(а):
PHP
while($print mysql_fetch_array($res))
{
    
$name $print['name'];
    
$mail $print['mail'];
    
$city $print['city'];
    
$date $print['date'];
    
$msg $print['text'];
}


1. на выходе тебе надо получить массив => перед циклом объявить
PHP
$messages = array();


цикл такой:

PHP
while($print mysql_fetch_array($res))
{
    
$messages[] = $print;
}


PHP
<p>&nbsp;</p>
<
table width="771" border="1" align="center">
  <
tr>
    <
td width="379"Имя: <? print "$name" ?></td>
    <td width="382" colspan="3"><? if(isset($mail)) print "<a href=mailto:$mail>$mail</a>" ?></td>
  </tr>
  <tr>
    <td colspan="4"><p><? print "$msg" ?></p></td>
  </tr>
  <tr>
    <td> <? if(isset($city)) print "$city" ?></td>
    <td colspan="3"><? print "$date" ?></td>
 &


тебе это надо сделать внутри цикла по массиву $messages:

PHP
foreach ($messages as $message)
// здесь то что выше
endforeach;


а вместо $city нужно подставлять $message['city'], вместо $msg - $message['text']. В общем все те ключи, которые ты сейчас используешь в первом цикле.

PS: касательно ответа Krevedko.

насчет сортировки - в точку.
а вот do-while biggrin.gif мы уже с тобой говорили о пагубном влиянии уроков Попова wink.gif

Спустя 1 минута, 33 секунды (28.06.2009 - 23:17) Krevedko написал(а):
да я понял про пагубное влияние biggrin.gif
Как видишь я сразу же убрал этот коммент, но ты успел увидеть, чертяка biggrin.gif
просто действительно пагубно делаю в основном цикл с постусловием unsure.gif

Спустя 1 час, 42 минуты, 17 секунд (29.06.2009 - 00:59) Soldier Ghost написал(а):
Спасибо попробую но для начала нужно понять, а не переписать smile.gif
вот ни как не могу разобратся(понять) do while хоть убей читаю о нём и не понимаю даже книгу купил от софттайм вроде там всё разжованно и нихера не пойму smile.gif наверное я тупой smile.gif в общем спасибо буду эксперементировать

Спустя 5 часов, 46 минут, 43 секунды (29.06.2009 - 06:46) twin написал(а):
Цикл do... while используется только тогда, когда без прохождения одной интерации нельзя определить условие выхода из цикла. Это предполагает, что одна интерация должна быть обязательно.
Так везде пишут?
По русски это примерно так:
Цикл должен когда то остановиться, а не то скрипт будет работать вечно. В обычном цикле, while, for или foreach, условие остановки известно за ранее. Допустим нужно вывести все числа от 1 до 10. Пишем цикл:
PHP
for($i = 1; $i <= 10; $i++)
echo $i;
Мы знаем, что нужно 10 и ставим это в условие. Или цикл while
PHP
$arr = array(1,2,3,4,5,6,7,8,9,10);
while(list(,
$num) = each($arr))
echo $num;
Тут мы условием остановки ставим конец массива. А вот если условие выхода определяется прямо в самом цикле и за ранее нам не известно, то тогда и применяется do... while.
В случае разбора результата запроса мы получаем конкретный, оформленный массив данных и значит можем определить условие остановки.
Более того, так как цикл do... while для определения точки выхода обязательно должен сработать хотя бы один раз, то здесь он вообще не уместен. Так как может не оказаться ни одной записи, удовлетворяющей условиям запроса. То есть до запуска этого цикла нужно определить, можно его запускать или нет:
PHP
if(mysql_num_rows($res)>0)
{
    do{
     // Тодасё
    }while($print = mysql_fetch_array($res));
}
что является совершенно лишним телодвижением.
По этому применять нужно простой while, без всяких do

Так понятнее?

Спустя 34 минуты, 47 секунд (29.06.2009 - 07:21) glock18 написал(а):
Еще дополню twin немного.

Ключевым в do-while является именно "как минимум одна итерация". при этом важно понимать, что большинство циклом в любом случае выполняют хотя бы одну итерацию. В случае с do-while предполагается, что эта итерация будет выполняться в противоречие с проверкой. То есть на обычном while цикл даже не будет проходить.

В php я НИ РАЗУ не сталкивался с этим. Сталкивался несколько раз, когда писал на C. В пхп тоже можно такое что-нить сообразить.

Пример такой задачи, для которой подойдет do-while лучше, чем другие циклы:

происходит считывание из файла в цикле. каждый цикл содержит подциклы, считывающие, скажем, по абзацу (или главе). соответственно, после того как внутренний цикл завершается один раз, условие будет false. Необходимо, чтобы следующий цикл начал считывать данные перед тем, как условие снова вступит в силу. Это можно сделать одним циклом do-while

PHP
do
{
  $str = fgets($fp); // что-то типа этого.
  //в общем то неважно что там делается. важна суть условия
}while ($str != "\n")

// здесь уже $str == "\n", потому что мы только что вышли из цикла
// если дальше поставить простой while, то программа даже не войдет в цикл

// вот оно. делается проверка, и цикл пропускается, не выполнившись ни разу.
while ($str != "\n")
{
//
}

// а вот так здесь удобнее
do
{
}while(
$str != "\n")
// цикл выполнится хотя бы один раз


вот такой пример корректного применения do-while. Суть ясна, и больше ни для чего этот цикл использовать не должен. В подавляющем большинстве случаев - 99.9999% - использование циклов while, for или foreach предпочтительнее.

PS: собственно, наплодил циклы вверху, чтобы была понятна последовательность выполнения. На самом деле вид будет такой:

PHP
while ($bFinished != false)
{
  do
  {
...
  }while(
$str != "\n")
...
}

Спустя 1 день, 11 часов, 15 минут, 13 секунд (30.06.2009 - 18:36) Soldier Ghost написал(а):
Спасибо!
Вы не поверите читал все ваши посты но особо опять не понял пока не решил перевести слово while и тут у меня башке что-то заискрило почти понял smile.gif

Спустя 48 минут, 26 секунд (30.06.2009 - 19:25) Soldier Ghost написал(а):
В общем я тут посидел по думал и вот как сделал что скажете всё работает отлично

PHP
$query = "SELECT * FROM gb ORDER BY id DESC";
$res = mysql_query($query, $connect) or die(mysql_error());

while(
$print = mysql_fetch_array($res))
{

echo '
<table width="771" border="1" align="center">
  <tr>
    <td width="379"> Имя: '
.$print[name].'</td>
    <td width="382" colspan="3"><a href=mailto:'
.$print[mail].'>'.$print[mail].'</a></td>
  </tr>
  <tr>
    <td colspan="4"><p>'
.$print[text].'</p></td>
  </tr>
  <tr>
    <td>'
.$print[city].'</td>
    <td colspan="3">'
.$print[date].'</td>
  </tr>
  <tr>
    <td colspan="4">&nbsp;</td>
  </tr>
</table><br>'
;
}

Круть ща буду пытатся подключить каптчу, а потом постраничную навигацию smile.gif всем ещё раз спасибо за помощь если будут вопросы буду писать smile.gif


_____________
Schecter damien 6 FR
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.