Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Каталог
Форум программистов > Интернет и сети > Web-программирование > PHP программирование
Alexygen
Подскажите, пожалуйста, как ограничеть колличество выводимой информации из базы до 30 строк, а если более 30, то внизу подписывать 1,2,3 страниц(ссылки) на следующе 30 и т.д.
Вот код который выводит из базы данные:
$select=mysql_query("select * from emails_send where user='$user_id' order by id asc") or die ("Íå âåðíûé ïóòü. Íå ìîãó âûáðàòü.");
while ($line = mysql_fetch_array ($select))
{
extract($line);
print"
<tr>
<td class=tab width=50 align=center>$id</td>
<td class=tab width=200 align=left>$email</td>
</tr>";
}
SKI
Задаем колличество страниц:
$onPage = 30;

Наверное, лучше использовать цикл с параметром. Ограничиваем вывод информации:
for ($i = 0; $line = mysql_fetch_array($select); $i++) {
    extract($line);
    if (($i >= $onPage * ($page - 1)) && ($i <= $onPage * $page - 1)) {
        print "<tr>
                 <td class=tab width=50 align=center>$id</td>
                 <td class=tab width=200 align=left>$email</td>
               </tr>";        
    }                        
}

Печатаем номера страниц.
if (isset($page)) {
    if ($onPage <= 30) {
        for ($p = 1; $p <= (mysql_num_rows($select)-1)/30+1; $p++) {
            print '<a href="index.php?page='.$p.'">'.$p.'</a>';
        }
    }
}


Должно работать.
Alexygen
А чему равен $page? А то у меня получается пустая страница!
Gisma
тебе нужны два запроса :
1 - на получение количества записей в БД (SELECT count ...)
2 - на ограничение вывода результатов из БД, для этого применяй квантификатор LIMIT
select * from emails_send where user='$user_id' order by id asc LIMIT 60,30
это запрос отдаст 30 из БД записей после полученной 60, как если бы квантификатора LIMIT не было
SKI
Цитата(Alexygen @ 8:08:2006, 12:20 ) *
А чему равен $page? А то у меня получается пустая страница!

Необходимо постоянно передавать переменную $page, т.е. index.php?page=1

Кстати, через LIMIT было бы удобнее. Я забыл, что он существует.
Alexygen
Для: SKI
Спасибо! А как теперь сделать, чтобы при выводе страниц (1,2,3,4, ...) после 25 он ставил br и сслыку следующие 25 и ссылку следующая (>>) и предыдущая (<<), а после перехода на последнюю или первую ссылки << и >> исчезали взависимости от страницы (первой или последней)?
j_man
Цитата(SKI @ 8:08:2006, 12:38 ) *
Кстати, через LIMIT было бы удобнее. Я забыл, что он существует.


А ты не забыл с какой мы базой работаем? Это же новичек... Вот научишь его неправлинь мыслить и что потом?

Лимит в запросе обязателен smile.gif

Цитата(SKI @ 8:08:2006, 12:38 ) *
(mysql_num_rows($select)-1)/30+1


есть функция ceil, которая все это и делает smile.gif
ceil(mysql_num_rows($select)/30) - тот же эффект дает



Цитата(Alexygen @ 8:08:2006, 21:58 ) *
Спасибо! А как теперь сделать, чтобы при выводе страниц (1,2,3,4, ...) после 25 он ставил br и сслыку следующие 25 и ссылку следующая (>>) и предыдущая (<<), а после перехода на последнюю или первую ссылки << и >> исчезали взависимости от страницы (первой или последней)?


Ну и намутил... До "после 25 ставить <br>" все понятно.. А дальше... )) Вообщем, чтобы там ни было есть условный оператор "if" разработчики многих языков говорят что должен помочь.. wink.gif
Alexygen
А как его описать?
SKI
Цитата(j_man @ 9:08:2006, 13:47 ) *
А ты не забыл с какой мы базой работаем? Это же новичек... Вот научишь его неправлинь мыслить и что потом?

Лимит в запросе обязателен smile.gif
есть функция ceil, которая все это и делает smile.gif
ceil(mysql_num_rows($select)/30) - тот же эффект дает
Ну и намутил... До "после 25 ставить <br>" все понятно.. А дальше... )) Вообщем, чтобы там ни было есть условный оператор "if" разработчики многих языков говорят что должен помочь.. wink.gif


А с какой мы базой работаем?! Я ни чего не забывал. Все прекрасно понимаю. Учить ни кого не собирался. Код выдрал из своего старого фолио. Тогда я еще сам был новичком. Слегка поправил и все.
Сейчас, в данной ситуации, использовал бы LIMIT.

И что значит: "Вот научишь его неправлинь мыслить и что потом?". На самом деле, с логической точки зрения, код написан правильно, в нем нет ошибок. И разобравшись с ним, наверняка Alexygen узнал, что-то новое. Да и разбираться в нем, собственно, нечего, поэтому и учить было не чему.

Цитата(j_man @ 9:08:2006, 13:47 ) *
Ну и намутил... До "после 25 ставить <br>" все понятно.. А дальше... ))


Наверное, имелось в виду, чтобы была возможность перемещаться постранично (назад, вперед), и возможность перемещаться на 25 страниц назад или вперед, и при переходе на последние 25 стр. ссылка "следующие 25" исчезла.

Будет время, напишу. А сейчас:
Работа - осуществление трудовой деятельности; совокупность задач и функций: - которые способен выполнять один человек; или - которые могут быть поручены одному человеку…
j_man
Для: SKI


Да уж, не поспоришь, код действительно дает нужный нам результат. Вот только надеюсь сам понимаешь, что было бы если бы тутбай забыл пор свои LIMIT в запросе на вывод новостей например. (если не понимаешь, могу цифры привести) Так что LIMIT в нашей жизни неотъемлемый элемент (про него просто нельзя забывать никогда)
SKI
Для: j_man
Цитата
Так что LIMIT в нашей жизни неотъемлемый элемент (про него просто нельзя забывать никогда)

) данное утверждение будет действительно верным по отношению к порталам или к сайтам приблизительно такого же масштаба, где есть необходимость в страницах или в ограничении на вывод, но зачем же ставить LIMIT если в таблице пару полей и сотка записей, где нет необходимости (при выводе) ставить стр., например прайс-лист? : Здесь он не нужен. Поэтому, далеко не в каждом случае нужно ставить LIMIT. Тем более, что его можно обойти, хотя и не рекомендуется. Из-за скорости обработки запроса, если это важно. Для TUT это важно, спорить не буду.
Конечно, мы можем спорить до бесконечности. У каждого программиста свой опыт, свои знания, разные учителя, учебники и т.п. Но нужно помочь Alexygen, если есть возможно, помоги. Сейчас у меня ее нет.
Alexygen
Цитата
Наверное, имелось в виду, чтобы была возможность перемещаться постранично (назад, вперед), и возможность перемещаться на 25 страниц назад или вперед, и при переходе на последние 25 стр. ссылка "следующие 25" исчезла.


Именно так, вот только я не знаю как это сделать! Помогите пожалуйста!!!
j_man
Я тебе помог бы, если не был настолько туп. Если ты мне обьяснишь что ты хочешь (а то я до сих пор это представить себе не могу), то я с удовольствием тебе помогу.

Вот как я это понял:

"Предыдущие 25 ...... 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40 ...... Следующие 25"
Причем при нажатии на страницу происходит подгрузка этой страницы, а при нажати на "следующие/предыдущие" происходит всего лишь подгрузка ссылок на соответствующие страницы (те что циферками посредине smile.gif ), но не переход на новую страницу (т.е. основное содержимое не меняется, текущая страница остается текущей). Насколько правильно я понял ?

ICQ: 337668625
SKI
Цитата(j_man @ 11:08:2006, 08:07 ) *
Я тебе помог бы, если не был настолько туп. Если ты мне обьяснишь что ты хочешь (а то я до сих пор это представить себе не могу), то я с удовольствием тебе помогу.


Пример:
]]>http://bu.by/show.html?search_id=978923&am...=2&start=30]]>
Только добавь "предыдущие 25" и "следующие 25" smile.gif
Alexygen
Это должно выглядеть так:

<<предыдущие 25 <<предыдущая 1,2,3,4,5,6,7,8,9,10,....,25 следущая>> следующие 25>>

1. открываются предыдущие 25 стр.
2. открывается предыдущая стр.
3. открытие по № стр.
4. открывается следующая стр.
5. открываются следующие 25 стр.



Зарание ОГРОМНОЕ СПАСИБО за помощь!
j_man
Пусть у тебя в $page хранится номер текущей страницы и в $count кол-во всех страниц.

if ($page > 25)
{
    echo '<a href="?page='.($page-25).'"><<предыдущие 25</a> ';
}

if ($page - 1 > 0)
{
    echo ' <a href="?page='.($page-1).'"><<предыдущая</a> ';
}

$start = intval(($page-1)/25)*25+1;
$stop = ($start+25 < $count)?$start+25:$count;

if ($start == $stop)
{
    echo ' <b>'.$start.'</b> ';
}

for ($i = $start; $i < $stop; $i++)
{
    if ($page != $i)
    {
        echo ' <a href="?page='.$i.'">'.$i.'</a> ';
    }
    else
    {
        echo ' <b>'.$i.'</b> ';
    }
}

if ($page < $count)
{
    echo ' <a href="?page='.($page+1).'">следущая>></a> ';
}


if (ceil($page/25)*25 < $count)
{
    echo ' <a href="?page='.(($page+25 <= $count)?$page+25:$count).'">следующие 25>></a>';
}


число 25 советую заменить на константу или переменную.
Alexygen
Цитата
число 25 советую заменить на константу или переменную

Почему?

А как подсчитать колличество всех страниц?
Alexygen
Кто-нибудь ответьте пожалуйста на мой вопрос!!!
j_man
Цитата(Alexygen @ 14:08:2006, 15:29 ) *
Почему?

А как подсчитать колличество всех страниц?


А ты хоть пробовал разобраться в том что тебе SKI написал... Если тебе просто нужен был скрипт, то попросил бы и не морочил голову тем, что якобы нужна помощь в написании

mysql_num_rows - почитай о ней в мануале (мануал - это спецификация)
могу выслать на мыло если сам не найдешь на ]]>http://php.net/]]>

еще есть функции count(), size() и т.д. Читай о них также в документации.
Alexygen
$count_email=mysql_query("select email from emails where user='$user_id' and spam=''") or die ("Не верный путь. Не могу выбрать.");
$count_email_sum=@mysql_num_rows($count_email);


Это я и так понял, а вот как их разбить на страницы? Т.е. записей 3000 на каждой странице по 30, соответственно должно получиться 100 ссылок, вопрос как разбить вывод $count_email_sum?
j_man
Пусть у тебя есть константная переменная $onPage = 30 (кол-во записей на странице), в гете ты передаешь номер текущей страницы $_GET['page'] (если номер не передан то автоматически считаем что находимся на первой)

if (empty($_GET['page']) || !is_int($_GET['page'])) {
   $page = 1;
}
else {
   $page = $_GET['page'];
}

// Узнаем кол-во записей в БД
$sql ="SELECT COUNT(*) FROM `table_name`";
$sth = msql_query($sql);
list($count_rows) = mysql_fetch_row($sth);

// теперь в $count_rows хранится кол-во записей в БД
$count = ceil($count_rows / $onPage) + 1; // Число страниц

$sql = "SELECT * FROM `table_name` LIMIT " . ($page-1)*$onPage . ", " . $onPage . "";

// выполнив этот запрос ты получишь все записи которые тебе нужно вывести на этой странице (совместив с кусками кода выше, ты получишь полноценный код)
Alexygen
Все работает, только вот, если страница всего одна и на ней 25 записей, то выдается ошибка: Warning: Division by zero, а если перейти на предпоследнюю страницу, то ссылка следующая есть, а вот номера страницы нет и когда переходишь на последнюю страницу ее номера так же не появляется! И если на предпоследней десятки, если нажать следующие 10, то он переходит на последнюю страницу которой в списке нет!
Gisma
научись хоть чуть-чуть программировать?
Alexygen
Для: Gisma
Пытаюсь!
Gisma
ну смотри wink.gif а то получается по последним вопросам твоим впечатление, что самостоятельно ты программировать не можешь, совсем уж тривиальные вопросыwink.gif
Alexygen
Кто-нибудь, ответьте пожалуйста!!!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2008 IPS, Inc.