ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Проблема с разбивкой табличных данных постранично (PHP и MySQL)
  #1  
Старый 25.06.2007, 21:44
Аватар для lol2006
lol2006
Познающий
Регистрация: 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-== $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..
 
Ответить с цитированием

  #2  
Старый 25.06.2007, 21:58
Аватар для GoreMaster
GoreMaster
Участник форума
Регистрация: 28.05.2007
Сообщений: 125
Провел на форуме:
638513

Репутация: 103
По умолчанию

http://phpfaq.ru/paginator
Check this out!
З.Ы.:неплохо было бы,если ты юзал тег пхп для подсветки синтаксиса

Последний раз редактировалось GoreMaster; 25.06.2007 в 22:07..
 
Ответить с цитированием

  #3  
Старый 25.06.2007, 22:02
Аватар для lol2006
lol2006
Познающий
Регистрация: 25.05.2006
Сообщений: 87
Провел на форуме:
539233

Репутация: 44
По умолчанию

Цитата:
Сообщение от GoreMaster  
http://phpfaq.ru/paginator
Check this out!
Если ты не заметил, вторая половина и есть имеено этот прием! Он не работает так как мне надо!!!
 
Ответить с цитированием

  #4  
Старый 25.06.2007, 23:10
Аватар для ENFIX
ENFIX
Участник форума
Регистрация: 06.06.2006
Сообщений: 213
Провел на форуме:
1628290

Репутация: 474
Отправить сообщение для ENFIX с помощью ICQ
По умолчанию

на скорую руку =) Попробуй...
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> ";
       }
?>
 
Ответить с цитированием

  #5  
Старый 25.06.2007, 23:58
Аватар для lol2006
lol2006
Познающий
Регистрация: 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-== $page) {
    echo 
$i." ";
  } else {
    echo 
'<a href="'.$_SERVER['PHP_SELF'].'?page='.$i.'">'.$i."</a> ";
  }
}
?>
Помогите плиз!

Последний раз редактировалось lol2006; 26.06.2007 в 09:09..
 
Ответить с цитированием

  #6  
Старый 26.06.2007, 03:58
Аватар для Helios
Helios
Постоянный
Регистрация: 14.01.2007
Сообщений: 459
Провел на форуме:
1469995

Репутация: 589
Отправить сообщение для Helios с помощью ICQ
По умолчанию

Че за муть? о_О
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]
 
Ответить с цитированием

  #7  
Старый 26.06.2007, 04:15
Аватар для ENFIX
ENFIX
Участник форума
Регистрация: 06.06.2006
Сообщений: 213
Провел на форуме:
1628290

Репутация: 474
Отправить сообщение для ENFIX с помощью ICQ
По умолчанию

lol2006, ты мой пробовал? Что выдало?
 
Ответить с цитированием

  #8  
Старый 26.06.2007, 08:57
Аватар для lol2006
lol2006
Познающий
Регистрация: 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..
 
Ответить с цитированием

  #9  
Старый 26.06.2007, 15:10
Аватар для hhover
hhover
Познающий
Регистрация: 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
 
Ответить с цитированием

  #10  
Старый 26.06.2007, 15:23
Аватар для Abra
Abra
Постоянный
Регистрация: 17.09.2005
Сообщений: 375
Провел на форуме:
993362

Репутация: 175
По умолчанию

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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Books PHP FRAGNATIC PHP, PERL, MySQL, JavaScript 186 21.02.2010 02:41
Безопасность в Php, Часть Iii k00p3r Чужие Статьи 0 11.07.2005 19:02
Защищаем Php. Шаг за шагом. k00p3r Чужие Статьи 0 13.06.2005 11:31
Защищаем MySql. Шаг за шагом k00p3r Чужие Статьи 0 13.06.2005 11:18



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


Быстрый переход




ANTICHAT.XYZ