Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разобраться...в цикле 
:(
    Опции темы
web_VIP
Дата 20.9.2007, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



Не получается одна вещь, в общем цель была выводить 5 последних записей из таблицы, при условий что если их меньше 5, то выводить  то что есть. Ну так вот проблема возникла в том, как пронумеровать эти поля. Все выводит нормально, но проблема в том что, если записей меньше 5, то есть  4 и менее, она выводит каждый раз пустую строку с номером. Например в бд 3 записи, она выводит все 3 записи пронумерованные, и 4 пронумерована строка пустая. Как сделать что бы, было правильно? В чем моя ошибка?
Код

$query_num = mysql_query("SELECT COUNT(*) FROM news");
$res = mysql_result($query_num, $res);
if ($res >= 5) {
$numer = 4;
} else {
$numer = $res; };
echo $numer;
for($i=0; $i<=$numer; $i++){
$query = mysql_query("select * from news ORDER BY id_news DESC LIMIT $i, 1;");
$news = mysql_fetch_array($query);
$num = $i+1;
echo"<tr><td>$num</td><td>".$news['date_news']."</td><td>".$news['title_news']."</td><td>".$news['text1_news']."</td>
<td>".$news['id_news']."</td></tr>";
};

PM MAIL   Вверх
supercelt
Дата 20.9.2007, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 658
Регистрация: 25.8.2005

Репутация: нет
Всего: 1



Код

$query_num = mysql_query("SELECT COUNT(*) FROM news");
$res = mysql_result($query_num, $res);
if ($res >= 5) {
$numer = 4;
} else {
$numer = $res; };
echo $numer;
for($i=0; $i<$numer; $i++){
$query = mysql_query("select * from news ORDER BY id_news DESC LIMIT $i, 1;");
$news = mysql_fetch_array($query);
$num = $i+1;
echo"<tr><td>$num</td><td>".$news['date_news']."</td><td>".$news['title_news']."</td><td>".$news['text1_news']."</td>
<td>".$news['id_news']."</td></tr>";
};


Добавлено через 28 секунд
или может так

Код

$query_num = mysql_query("SELECT COUNT(*) FROM news");
$res = mysql_result($query_num, $res);
if ($res >= 5) {
$numer = 4;
} else {
$numer = $res; };
echo $numer;
for($i=0; $i<=$numer-1; $i++){
$query = mysql_query("select * from news ORDER BY id_news DESC LIMIT $i, 1;");
$news = mysql_fetch_array($query);
$num = $i+1;
echo"<tr><td>$num</td><td>".$news['date_news']."</td><td>".$news['title_news']."</td><td>".$news['text1_news']."</td>
<td>".$news['id_news']."</td></tr>";
};

PM   Вверх
ewolf
Дата 21.9.2007, 00:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 8
Всего: 18



web_VIP, что за ужас? Почему не сделать так:

Код

$result = mysql_query("SELECT * FROM news ORDER BY id_news DESC LIMIT 5");

$num = 1;
while( $news = mysql_fetch_array($result, MYSQL_ASSOC) )
{
echo"<tr><td>$num</td><td>".$news['date_news']."</td><td>".$news['title_news']."</td><td>".$news['text1_news']."</td>
<td>".$news['id_news']."</td></tr>";
$num++;
}


Это сообщение отредактировал(а) ewolf - 21.9.2007, 00:21
PM MAIL ICQ   Вверх
web_VIP
Дата 21.9.2007, 07:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



ewolf .спосибо, хорошо работает!!

Добавлено через 4 минуты и 42 секунды
А что значит MYSQL_ASSOC?
PM MAIL   Вверх
web_VIP
Дата 21.9.2007, 08:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



Ну в общем получилось, вот так:
Код
$query=mysql_query("SELECT * FROM news");
if(mysql_num_rows($query)==0) {
echo "<tr><td colspan=5>Пусто</td></tr>";
} else {
$result1 = mysql_query("SELECT * FROM news ORDER BY id_news DESC LIMIT 5");
$num = 1;
while( $news = mysql_fetch_array($result1, MYSQL_ASSOC) ) {
echo"<tr><td>$num</td><td>".$news['date_news']."</td><td>".$news['title_news']."</td><td>".$news['text1_news']."</td>
<td><a href=?id=".$news['id_news'].">Перейти</a></td></tr>";
$num++;
}; };

PM MAIL   Вверх
ewolf
Дата 21.9.2007, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 8
Всего: 18



Узнать про параметры функции mysql_fetch_array можно тут
http://www.php.net/manual/ru/function.mysql-fetch-array.php
PM MAIL ICQ   Вверх
BuShaRt
Дата 21.9.2007, 17:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



ewolf, 
А какой плюс мы получаем, используя mysql_fetch_array с аргументом MYSQL_ASSOC?
Я на пример при отладке кода, часто юзаю численные индексы, стоит ли решать себя этого удобства, ради сомнительного прироста производительности? Или он не так сомнителен, на сколько мне кажеться?

 smile 
web_VIP, 
А зачем, после того, как уже поступил пример грамотного исполнения кода приводить безграмотный?

Это сообщение отредактировал(а) BuShaRt - 21.9.2007, 17:52
PM MAIL   Вверх
web_VIP
Дата 22.9.2007, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 68
Регистрация: 8.9.2007

Репутация: нет
Всего: нет



BuShaRt а в чем заключается безграмотность, ты скажи? 
Вроде код тот что привел ewolf , только он добавлен в мой еще.
PM MAIL   Вверх
SelenIT
Дата 22.9.2007, 12:21 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



web_VIP, как минимум, в Вашем коде один лишний запрос к базе (первый)...

BuShaRt, а вот я почему-то ни разу не был в ситуации, когда дублирование всех полей в mysql_fetch_array было бы преимуществом. Мне, наоборот, дубликаты очень мешают, например, перебирать результат foreach-ем, поэтому я вообще не пользуюсь ..._array-ем, только ..._row и ..._assoc (в зависимости от логики последующего разбора). Наверное, дело в привычках - я не люблю плодить неиспользуемые сущности, а кто-то, наоборот, стремится предусмотреть всё на все возможные случаи...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
ewolf
Дата 22.9.2007, 13:55 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 389
Регистрация: 15.8.2006
Где: г. Москва

Репутация: 8
Всего: 18



BuShaRt, мне кажется, что нет смысла получать одновременно и ассоциативный массив и численные индексы, если используется только один способ. Нужны индексы - получайте индексы, нужен ассоциативный массив - получайте его.

Добавлено через 3 минуты и 9 секунд
web_VIP, в твоем коде нет необходимости в первом запросе

Код

$query=mysql_query("SELECT * FROM news");


функцию mysql_num_rows можно вполне применить и ко второму запросу

Код

$result = mysql_query("SELECT * FROM news ORDER BY id_news DESC LIMIT 5");

if( mysql_num_rows($result) > 0 )
{
   $num = 1;
   while( $news = mysql_fetch_array($result, MYSQL_ASSOC) )
   {
      echo"<tr><td>$num</td><td>".$news['date_news']."</td><td>".$news['title_news']."</td><td>".$news['text1_news']."</td><td>".$news['id_news']."</td></tr>";
      $num++;
   }
}
else
{
   echo "<tr><td colspan=5>Пусто</td></tr>";
}



PM MAIL ICQ   Вверх
BuShaRt
Дата 22.9.2007, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1391
Регистрация: 29.6.2006

Репутация: 4
Всего: 6



web_VIP, 
Извеняюсь, получилось так, что подумал, что автор топика и автор того примера разные люди. 
вот так было бы лучше, согласитесь.

Код

<?php
$query = mysql_query("SELECT * FROM news ORDER BY id_news DESC LIMIT 5");
print '<table>';
if( mysql_num_rows($query)==0 ) {
    print '
    <tr>
        <td colspan=5>Пусто</td>
    </tr>
    ';
    print '</table>';
    exit;
}
while( $news = mysql_fetch_array($query, MYSQL_ASSOC) ) {
    print '
    <tr>
        <td>'.$num.'</td>
        <td>'.$news['date_news'].'</td>
        <td>'.$news['title_news'].'</td>
        <td>'.$news['text1_news'].'</td>
        <td><a href="?id='.$news['id_news'].'">Перейти</a></td>
    </tr>
    ';
}
print '</table>'; 
?>


PM MAIL   Вверх
SelenIT
Дата 23.9.2007, 01:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



BuShaRt, не соглашусь;). Дублировать "хвост" HTML-я таблицы незачем, да и не факт, что после выяснения пустоты таблицы больше ничего выводить не придется (судя по всему, эта лента новостей - лишь один из модулей "мини-портала", наверняка за ней будут другие). Вариант ewolfа явно лучше (нет дублирования, очевиднее структура, имя $result для результата запроса адекватней чем $query, и самое главное - инкремент $num не забыт;)...


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0729 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.