Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Проблема с разбивкой табличных данных постранично (PHP и MySQL) (https://forum.antichat.xyz/showthread.php?t=43065)

lol2006 25.06.2007 21: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-== $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!
З.Ы.:неплохо было бы,если ты юзал тег пхп для подсветки синтаксиса ;)

lol2006 25.06.2007 22:02

Цитата:

Сообщение от GoreMaster
http://phpfaq.ru/paginator
Check this out!

Если ты не заметил, вторая половина и есть имеено этот прием! Он не работает так как мне надо!!!

ENFIX 25.06.2007 23:10

на скорую руку =) Попробуй...
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> ";
       }
?>


lol2006 25.06.2007 23:58

Дошол вот до чего, вроде логичнее, но неполучается
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-== $page) {
    echo 
$i." ";
  } else {
    echo 
'<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> ";
  }
}
?>

Помогите плиз!

Helios 26.06.2007 03:58

Че за муть? о_О
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]

ENFIX 26.06.2007 04:15

lol2006, ты мой пробовал? Что выдало?

lol2006 26.06.2007 08:57

Цитата:

Сообщение от Helios
Че за муть? о_О
PHP код:

while($row=mysql_fetch_array($res);
   
$query2 "select * from name_d order by binary(fname)"


Это не муть, это сортировка пoля fname по алфавиту!
Цитата:

Сообщение от ENFIX
lol2006, ты мой пробовал? Что выдало?

Выдало пустую страницу!

hhover 26.06.2007 15:10

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

Abra 26.06.2007 15:23

А теперь все что сказал выше hhover одним словом: "отладка".
:)


Время: 22:55