Просмотр полной версии : Проблема с разбивкой табличных данных постранично (PHP и MySQL)
Постараюсь передать всю суть проблемы. Имееться страница на которой отображена таблица с данными
<?php
$link = mysql_connect("localhost", "***", "***");
mysql_select_db("pomnim");
$query = "select * from shapka";
$result = mysql_query($query);
echo "<table border=1 bgcolor=#DED4C4>";
while ($row = mysql_fetch_array($result))
echo "<tr align=center><td><B>", $row["fname"], "</B></td><td><B>", $row["name"], "</B></td><td><B>", $row["lname"], "</B></td><td><B>", $row["data_sm"], "</B></td><td><B>", $row["vozrast"], "</B></td><td><B>", $row["gorod"], "</B></td></tr>";
$query2 = "select * from name_d order by binary(fname)";
$result = mysql_query($query2);
while ($row = mysql_fetch_array($result))
echo "<tr bgcolor=#F3F0E9><td>", $row["fname"], "</td><td>", $row["name"], "</td><td>", $row["lname"], "</td><td align=center>", $row["data_sm"], "</td><td align=center>", $row["vozrast"], "</td><td align=center>", $row["gorod"], "</td></tr>";
echo "</table>";
//Разбивка на страницы//
// количество записей, выводимых на странице
$per_page=10;
// получаем номер страницы
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
// вычисляем первый оператор для LIMIT
$start=abs($page*$per_page);
// составляем запрос и выводим записи
// переменную $start используем, как нумератор записей.
$q="SELECT * FROM `name_d` ORDER BY id LIMIT $start,$per_page";
$res=mysql_query($q);
while($row=mysql_fetch_array($res)) {
echo ++$start.". ".$row['fname']."<br>\n";
}
// дальше выводим ссылки на страницы:
$q="SELECT count(*) FROM `name_d`";
$res=mysql_query($q);
$row=mysql_fetch_row($res);
$total_rows=$row[0];
$num_pages=ceil($total_rows/$per_page);
for($i=1;$i<=$num_pages;$i++) {
if ($i-1 == $page) {
echo $i." ";
} else {
echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> ";
}
}
?>
Отображаеться таблица, а ниже еще список:
1. fname = id=1
2. fname = id=2
и так до
10. fname = id=10
потом ссылка на другую страницу (в данном случае 2)
в ней отображаеться таже таблица ( с выводом всех данных) и соответственно ниже:
11. fname = id=11
12. fname = id=12
и т.п.
Как заставить таблицу делиться на страницы, и отображать их в ссылках на стр.?????
Плиз помогите, начинающему!
GoreMaster
25.06.2007, 21:58
http://phpfaq.ru/paginator
Check this out!
З.Ы.:неплохо было бы,если ты юзал тег пхп для подсветки синтаксиса ;)
http://phpfaq.ru/paginator
Check this out!
Если ты не заметил, вторая половина и есть имеено этот прием! Он не работает так как мне надо!!!
на скорую руку =) Попробуй...
<?php
@mysql_connect("localhost", "***", "***");
@mysql_select_db("pomnim");
$query = "select * from shapka;";
$result = mysql_query($query);
echo "<table border=1 bgcolor=#DED4C4>";
while ($row = mysql_fetch_array($result))
{
echo "<tr align=center><td><B>".$row['fname']."</B></td><td><B>".$row['name']."</B></td>
<td><B>".$row['lname']."</B></td><td><B>".$row['data_sm']."</B></td><td><B>".$row['vozrast']."</B></td>
<td><B>".$row['gorod']."</B></td></tr>";
}
$query2 = "select * from name_d order by binary(fname)";
$result = mysql_query($query2);
while ($row = mysql_fetch_array($result))
{
echo "<tr bgcolor=#F3F0E9><td>".$row['fname']."</td>
<td>".$row['name']."</td><td>".$row['lname']."</td>
<td align=center>".$row['data_sm']."</td>
<td align=center>".$row['vozrast']."</td>
<td align=center>".$row['gorod']."</td></tr>";
}
echo "</table>";
//Разбивка на страницы//
// количество записей, выводимых на странице
$per_page=10;
// получаем номер страницы
$page=isset($_GET['page']):$_GET['page']?0;
// вычисляем первый оператор для LIMIT
$start=abs($page*$per_page);
// составляем запрос и выводим записи
// переменную $start используем, как нумератор записей.
$q="SELECT * FROM `name_d` ORDER BY id LIMIT {$start},{$per_page};";
$res=mysql_query($q);
while($row=mysql_fetch_array($res))
{
echo ++$start.". ".$row['fname']."<br/>";
}
// дальше выводим ссылки на страницы:
$q="SELECT count(*) FROM `name_d`;";
$res=mysql_query($q);
$total_rows=mysql_num_rows($q);
$num_pages=ceil($total_rows/$per_page);
for($i=1;$i<=$num_pages;$i++)
{
echo "<a href=".$_SERVER['PHP_SELF']."?page=".$i.">".$i."</a> ";
}
?>
Дошол вот до чего, вроде логичнее, но неполучается
<?php
$link = mysql_connect("localhost", "***", "***");
mysql_select_db("pomnim");
//Разбивка на страницы//
// количество записей, выводимых на странице
$per_page=10;
// получаем номер страницы
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
// вычисляем первый оператор для LIMIT
$start=abs($page*$per_page);
// составляем запрос и выводим записи
// переменную $start используем, как нумератор записей.
$query = "select * from shapka";
$result = mysql_query($query);
echo "<table border=1 bgcolor=#DED4C4>";
while ($row = mysql_fetch_array($result))
echo "<tr align=center><td><B>", $row["fname"], "</B></td><td><B>", $row["name"], "</B></td><td><B>", $row["lname"], "</B></td><td><B>", $row["data_sm"], "</B></td><td><B>", $row["vozrast"], "</B></td><td><B>", $row["gorod"], "</B></td></tr>";
$q="SELECT * FROM `name_d` ORDER BY fname LIMIT $start,$per_page";
$res=mysql_query($q);
while($row=mysql_fetch_array($res))
$query2 = "select * from name_d order by binary(fname)";
$result = mysql_query($query2);
while ($row = mysql_fetch_array($result))
echo "<tr bgcolor=#F3F0E9><td>", $row["fname"], "</td><td>", $row["name"], "</td><td>", $row["lname"], "</td><td align=center>", $row["data_sm"], "</td><td align=center>", $row["vozrast"], "</td><td align=center>", $row["gorod"], "</td></tr>";
echo "</table>";
// дальше выводим ссылки на страницы:
$q="SELECT count(*) FROM `name_d`";
$res=mysql_query($q);
$row=mysql_fetch_row($res);
$total_rows=$row[0];
$num_pages=ceil($total_rows/$per_page);
for($i=1;$i<=$num_pages;$i++) {
if ($i-1 == $page) {
echo $i." ";
} else {
echo '<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> ";
}
}
?>
Помогите плиз!
Че за муть? о_О
while($row=mysql_fetch_array($res);
$query2 = "select * from name_d order by binary(fname)";
Куда лимит делся?
$query2 = "select * from name_d order by binary(fname)";
P.S. Учись оформлять код.
P.P.S: используй [.php] а не [.code]
lol2006, ты мой пробовал? Что выдало?
Че за муть? о_О
while($row=mysql_fetch_array($res);
$query2 = "select * from name_d order by binary(fname)";
Это не муть, это сортировка пoля fname по алфавиту!
lol2006, ты мой пробовал? Что выдало?
Выдало пустую страницу!
1) $start=abs($page*$per_page);
Почему так? Боишься получить отрицательный limit?
Замени
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
на
$page=(isset($_GET['page']) and is_numeric($_GET['page']) and $_GET['page'] >= 0) : $_GET['page'] ? 0;
Так будет честнее.
2) Нафиг в примере выводить шапку? Ее вывод как-то влияет на остальной скрипт? Нет. Ну и убери ее.
3) В последнем твоем коде нету { } после while, поэтому я так и не понял, зачем тебе 2 запроса к одной и той же таблице, когда у тебя уже есть массив _всех_ ее элементов.
4) Нет такого понятия, как пустая страница. Во-первых, посмотри сорс, во-вторых вруби
error_reporting(E_ALL);
ini_set('display_errors', '1');
5) Вынеси в отдельную страницу запрос с limit и всеми относящимися к нему данными/вычислениями. Добейся, чтобы ?page=X выдавало нужные тебе результаты.
6) Венеси в отдельную страницу запрос с count(*), сделай тоже самое, что и с limit.
7) Когда и то и то будет работать совместить их не составит особого труда.
8) Формулировка "Не работает" никак не помогает понять, где именно ошибка и в каком месте что-то неверно. Учись охарактеризовывать действия скрипта точнее.
9) http://www.phpfaq.ru/debug
А теперь все что сказал выше hhover одним словом: "отладка".
:)
$page=isset($_GET['page']):$_GET['page']?0;
Разве это не ошибка в коде lol'a? (выделил жирным голубым)
Я бы сменил на:
$page=intval($_GET['page']);
$page=((!$page)==false)? $page:0;
echo ++$start.". ".$row['fname']."<br>\n";
Как здесь вывисти вот это:
echo "<tr bgcolor=#F3F0E9><td>", $row["fname"], "</td><td>", $row["name"], "</td><td>", $row["lname"], "</td><td align=center>", $row["data_sm"], "</td><td align=center>", $row["vozrast"], "</td><td align=center>", $row["gorod"], "</td></tr>";
echo "</table>";
echo "<tr bgcolor=#F3F0E9><td>".$row['fname']."</td>
<td>".$row['name']."</td><td>".$row['lname']."</td>
<td align=center>".$row['data_sm']."</td>
<td align=center>".$row['vozrast']."</td>
<td align=center>".$row['gorod']."</td></tr>";
echo "</table>";
Всем огромное спасибо, все получилось, теперь прошу помощьи чуть-чуть в другом русле (уж простите решил научиться php).
Мне нежно вывести данные из таблицы так что-бы, поле data_sm (поле дата) на странице отображало - "сегодня на нашем сайте Антон, Егор 1 месяц!" Т.Е. что бы отображал список юзеров которые зарегистрировались 1 месяц назад, полгода, год.
Как мне это сделать?
lol2006, читай про if() и функции для работы с mysql
А вообще бы не плохо купить книгу по пхп Желательно не наших авторов.
Если увидишь книгу: "PHP для начинающих" авторов: Дэйв У. Мерсер, Аллан Кент, Стивен Д. Новицки, Дэвид Мерсер, Дэн Скуайер, Ван Кью Чой; Обязательно возьми ;)
http://www.internet-technologies.ru/books/book_122.html
Вот нашел:
Авторы: Луис Аргерих, Ванкиу Чой, Джон Коггсхол
Размер: 74.42 Mb
# ISBN: 5-93286-049-9, 1-861006-91-8;
# Издательство: Символ-Плюс, 2003 г.;
# Серия: Программист - программисту / Programmer to Programmer;
# Мягкая обложка, 1048 стр.;
# Тираж: 2000 экз.;
# Формат: 70x100/16;
О чем эта книга и для кого она? О языке РНР, его истории, задачах, достоинствах и недостатках. О том, как, для чего и в каких ОС применяется этот язык. Если говорить подробнее, то об установке РНР на платформах UNIX, Windows и Mac OS X, о сеансах и cookies, клиентах FTP, о функциях для работы в сети и службе каталогов. Кроме того, рассматриваются поддержка LDAP в РНР, разработка многозвенных приложений в РНР, интеграция РНР с XML, средства, предоставляемые РНР для работы с базами данных (на примере MySQLи Post-greSQL). Обсуждаются безопасность, оптимизация и интернационализация приложений, библиотеки расширений РНР, приводятся примеры системы предоставления прав пользователям и многозвенного приложения корзины покупок для WML. Книга адресована всем РНР-программистам.
Может кому понадобиться.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot