Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей.
Здесь обсуждаются безопасность, программирование, технологии и многое другое.
Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
 |
|
Проблема с разбивкой табличных данных постранично (PHP и MySQL) |

25.06.2007, 21:44
|
|
Познающий
Регистрация: 25.05.2006
Сообщений: 87
Провел на форуме: 539233
Репутация:
44
|
|
Проблема с разбивкой табличных данных постранично (PHP и MySQL)
Постараюсь передать всю суть проблемы. Имееться страница на которой отображена таблица с данными
PHP код:
<?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
и т.п.
Как заставить таблицу делиться на страницы, и отображать их в ссылках на стр.?????
Плиз помогите, начинающему!
Последний раз редактировалось lol2006; 26.06.2007 в 09:06..
|
|
|

25.06.2007, 21:58
|
|
Участник форума
Регистрация: 28.05.2007
Сообщений: 125
Провел на форуме: 638513
Репутация:
103
|
|
http://phpfaq.ru/paginator
Check this out!
З.Ы.:неплохо было бы,если ты юзал тег пхп для подсветки синтаксиса 
Последний раз редактировалось GoreMaster; 25.06.2007 в 22:07..
|
|
|

25.06.2007, 22:02
|
|
Познающий
Регистрация: 25.05.2006
Сообщений: 87
Провел на форуме: 539233
Репутация:
44
|
|
Сообщение от GoreMaster
http://phpfaq.ru/paginator
Check this out!
Если ты не заметил, вторая половина и есть имеено этот прием! Он не работает так как мне надо!!!
|
|
|

25.06.2007, 23:10
|
|
Участник форума
Регистрация: 06.06.2006
Сообщений: 213
Провел на форуме: 1628290
Репутация:
474
|
|
на скорую руку =) Попробуй...
PHP код:
<?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> ";
}
?>
|
|
|

25.06.2007, 23:58
|
|
Познающий
Регистрация: 25.05.2006
Сообщений: 87
Провел на форуме: 539233
Репутация:
44
|
|
Дошол вот до чего, вроде логичнее, но неполучается
PHP код:
<?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> ";
}
}
?>
Помогите плиз!
Последний раз редактировалось lol2006; 26.06.2007 в 09:09..
|
|
|

26.06.2007, 03:58
|
|
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме: 1469995
Репутация:
589
|
|
Че за муть? о_О
PHP код:
while($row=mysql_fetch_array($res);
$query2 = "select * from name_d order by binary(fname)";
Куда лимит делся?
PHP код:
$query2 = "select * from name_d order by binary(fname)";
P.S. Учись оформлять код.
P.P.S: используй [.php] а не [.code]
|
|
|

26.06.2007, 04:15
|
|
Участник форума
Регистрация: 06.06.2006
Сообщений: 213
Провел на форуме: 1628290
Репутация:
474
|
|
lol2006, ты мой пробовал? Что выдало?
|
|
|

26.06.2007, 08:57
|
|
Познающий
Регистрация: 25.05.2006
Сообщений: 87
Провел на форуме: 539233
Репутация:
44
|
|
Сообщение от Helios
Че за муть? о_О
PHP код:
while($row=mysql_fetch_array($res);
$query2 = "select * from name_d order by binary(fname)";
Это не муть, это сортировка пoля fname по алфавиту!
Сообщение от ENFIX
lol2006, ты мой пробовал? Что выдало?
Выдало пустую страницу!
Последний раз редактировалось lol2006; 26.06.2007 в 09:04..
|
|
|

26.06.2007, 15:10
|
|
Познающий
Регистрация: 21.05.2007
Сообщений: 61
Провел на форуме: 79888
Репутация:
145
|
|
1)
Код:
$start=abs($page*$per_page);
Почему так? Боишься получить отрицательный limit?
Замени
PHP код:
if (isset($_GET['page'])) $page=($_GET['page']-1); else $page=0;
на
PHP код:
$page=(isset($_GET['page']) and is_numeric($_GET['page']) and $_GET['page'] >= 0) : $_GET['page'] ? 0;
Так будет честнее.
2) Нафиг в примере выводить шапку? Ее вывод как-то влияет на остальной скрипт? Нет. Ну и убери ее.
3) В последнем твоем коде нету { } после while, поэтому я так и не понял, зачем тебе 2 запроса к одной и той же таблице, когда у тебя уже есть массив _всех_ ее элементов.
4) Нет такого понятия, как пустая страница. Во-первых, посмотри сорс, во-вторых вруби
PHP код:
error_reporting(E_ALL);
ini_set('display_errors', '1');
5) Вынеси в отдельную страницу запрос с limit и всеми относящимися к нему данными/вычислениями. Добейся, чтобы ?page=X выдавало нужные тебе результаты.
6) Венеси в отдельную страницу запрос с count(*), сделай тоже самое, что и с limit.
7) Когда и то и то будет работать совместить их не составит особого труда.
8) Формулировка "Не работает" никак не помогает понять, где именно ошибка и в каком месте что-то неверно. Учись охарактеризовывать действия скрипта точнее.
9) http://www.phpfaq.ru/debug
|
|
|

26.06.2007, 15:23
|
|
Постоянный
Регистрация: 17.09.2005
Сообщений: 375
Провел на форуме: 993362
Репутация:
175
|
|
А теперь все что сказал выше hhover одним словом: "отладка".

|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|