PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 4
MegaMax Отправлено: 11 Мая, 2010 - 17:03:19 • Тема: Постраничная навигация • Форум: Напишите за меня, пожалуйста

Ответов: 24
Просмотров: 303
Пожалуй одна из самых распростанённых задач для веб-программистов. Большинство новичков сталкиваются с ней, я не был исключением. Попытаемся же разобраться с логикой скрипта и реализовать его. Приступим?

Первое, что нам нужно для этого иметь – это базу данных с несколькими десятками строк, например статей или комментариев к ним (что угодно). Мы будем рассматривать базу данных MySQL, она является самой популярной на данный момент. Естественно используемый язык – это PHP.

Есть? Отлично! Продолжаем…

1. Создаём для примера файл primer.php;
2. Создаём Базу данных primer (можете не создавать, если у вас уже есть подходящая);
3. Создаём таблицу primer вот такой структуры (опять же, если нет другой);

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE primer (
  2. id int AUTO_INCREMENT PRIMARY KEY KEY,
  3. name varchar(100) NOT NULL,
  4. text longtext NOT NULL
  5. );


4. Набиваем её информацией. Я сделаю 20 записей, мне не день ;)
5. Набираемся терпения – сейчас будем кодить.

Сам код довольно небольшой и несложный, поэтому вылажу его сразу весь, пометки Вам помогут разобраться без проблем.

Запихиваем нижележаций код в primer.php и пытаемся понять как же он работает:

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3.  
  4. $server = 'localhost'; // ИМЯ СЕРВЕРА
  5. $user = 'root'; // ПОЛЬЗОВАТЕЛЬ - НЕ ИСПОЛЬЗУЙТЕ ROOT ДЛЯ ВАШЕЙ ЖЕ БЕЗОПАСНОСТИ
  6. $pass = ''; // ПАРОЛЬ ПОЛЬЗОВАТЕЛЯ
  7.  
  8. $db = 'primer'; // БАЗА ДАННЫХ
  9. $table = 'primer'; // НАЗВАНИЕ ТАБЛИЦЫ
  10.  
  11. $chislo = 5; // ЧИСЛО СООБЩЕНИЙ НА СТРАНИЦЕ
  12.  
  13. // ДЛЯ УДОБСТВА ОБОЗНАЧИМ ПЕРЕМЕННУЮ С ТЕКСТОМ ОШИБКИ
  14. $text_error = '<br />Ошибочка вышла!';
  15.  
  16. // СОЕДЕНИМСЯ С MySQL
  17. $connect = mysql_connect ($server, $user, $pass);
  18. if (!$connect) {
  19. echo $text_error;
  20. }
  21.  
  22. // СОЕДЕНИЯЕМСЯ С БАЗОЙ ДАННЫХ
  23. $select = mysql_select_db($db);
  24. if (!$select) {
  25. echo $text_error;
  26. }
  27.  
  28. // СОЗДАЁМ ЗАПРОС
  29. $result = mysql_query("SELECT * from $table ORDER by id desc");
  30. // СЧИТАЕМ КОЛЛИЧЕСТВО ЗАПИСЕЙ В ТАБЛИЦЕ - У МЕНЯ ИХ 20
  31. $num_rows = mysql_num_rows($result);
  32.  
  33. // А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО
  34. $num_rows = round($num_rows/$chislo); // 20 ДЕЛИМ НА 5. СКОЛЬКО? :)
  35.  
  36.  
  37. // ЗДЕСЬ МЫ ПРОВЕРЯЕМ НА КАКОЙ СТРАНИЦЕ СЕЙЧАС ПОЛЬЗОВАТЕЛЬ
  38. if (isset($_GET['str'])) {
  39. $nav = $_GET['str'];
  40. }
  41. else {
  42. $nav = 0;
  43. }
  44. $nav = intval($nav); // ДЛЯ ЗАЩИТЫ ОТ НЕХОРОШИХ ДЯДЕНЕК МЫ ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ $GET['str']
  45. echo 'Навигация: ';
  46.  
  47. // А ТЕПЕРЬ ВЫВОДИМ НОМЕРА СТРАНЦ
  48. for ($i=1; $i<$num_rows; $i++) {
  49. if ($i != $nav) {
  50. echo '<a href="'.$PHP_SELF.'?str='.$i.'">'.$i.'</a> ';
  51. }
  52. else {
  53. // АКТИВНУЮ СТРАНИЦУ ДЕЛАЕМ НЕ ГИПЕРССЫЛКОЙ
  54. echo '<span>'.$i.'</span> ';
  55. }
  56. }
  57.  
  58. echo '<hr />'; // ОТДЕЛИМ НАВИГАЦЮ ОТ КОНТЕНТА ДЛЯ НАГЛЯДНОСТИ
  59.  
  60. // НАЧИНАЕМ ВЫВОДИТЬ САМУ ИНФОРМАЦИЮ ПОСТРАНИЧНО :)
  61. if (!isset($_GET['str'])) {
  62. $str = 0;
  63. }
  64. else {
  65. $str = $_GET['str']*$chislo - $chislo;
  66. }
  67. $nomer = $str + 5;
  68. // ФОРМИРУЕМ ЗАПРОС НУЖНОЙ НАМ ЧАСТИ ИНФОРМАЦИИ
  69. $result = mysql_query("SELECT * from $table ORDER by id asc limit $str, $nomer");
  70. // ИНАЧЕ ВЫВОДИМ ОШИБКУ
  71. if (!$result) {
  72. echo $text_error;
  73. }
  74.  
  75. echo '<div style="width: 40%;">';
  76. while ($row = mysql_fetch_array($result)) {
  77. echo '<p>'.$row['id'].' - <strong>'.$row['name'].'</strong>
  78. '.substr($row['text'],0,100).'.. <a href="text.php?nomer='.$row['id'].'">>></a></p>';
  79. }
  80. echo '</div>';
  81.  
  82. mysql_close($connect);
  83.  
  84. ?>
  85.  

(Добавление)
А этот код я подстроил по себя. Хоть и работает корявенько, но меня устраивает.

PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $chislo = 5; // ЧИСЛО СООБЩЕНИЙ НА СТРАНИЦЕ
  4.  
  5. // ДЛЯ УДОБСТВА ОБОЗНАЧИМ ПЕРЕМЕННУЮ С ТЕКСТОМ ОШИБКИ
  6. $text_error = '<br />Ошибочка вышла!';
  7.  
  8. // СОЗДАЁМ ЗАПРОС
  9. $result = mysql_query("SELECT * from $table ORDER by $id desc");
  10. // СЧИТАЕМ КОЛЛИЧЕСТВО ЗАПИСЕЙ В ТАБЛИЦЕ - У МЕНЯ ИХ 20
  11. $num_rows = mysql_num_rows($result);
  12.  
  13. // А ТЕПЕРЬ СЧИТАЕМ НА СКОЛЬКО СТРАНИЦ НАМ РАЗБИТЬ ЗАПИСИ И ВЫДЕЛЯЕМ ЦЕЛОЕ ЧИСЛО
  14. $num_rows = round($num_rows/$chislo); // 20 ДЕЛИМ НА 5. СКОЛЬКО? :)
  15.  
  16.  if (is_double($num_rows)) // Если получаем не целое число
  17.  {
  18.  $num_rows = (int) $num_rows; // Делаем его таковым
  19.  $num_rows = $num_rows + 1; // И прибавляем единицу.
  20.  
  21.  }
  22.  
  23. // ЗДЕСЬ МЫ ПРОВЕРЯЕМ НА КАКОЙ СТРАНИЦЕ СЕЙЧАС ПОЛЬЗОВАТЕЛЬ
  24. if (isset($_GET['page'])) {
  25. $nav = $_GET['page'];
  26. }
  27. else {
  28. $nav = 0;
  29. }
  30. $nav = intval($nav); // ДЛЯ ЗАЩИТЫ ОТ НЕХОРОШИХ ДЯДЕНЕК МЫ ВЫДЕЛИМ ЦЕЛУЮ ЧАСТЬ $GET['str']
  31. echo 'Страницы: ';
  32. // А ТЕПЕРЬ ВЫВОДИМ НОМЕРА СТРАНЦ
  33. for ($i=1; $i<$num_rows; $i++) {
  34. if ($i != $nav) {
  35. echo '<a href="'.$PHP_SELF.'?page='.$i.'">'.$i.'</a> ';
  36. }
  37. else {
  38. // АКТИВНУЮ СТРАНИЦУ ДЕЛАЕМ НЕ ГИПЕРССЫЛКОЙ
  39. echo '<span>'.$i.'</span> ';
  40. }
  41. }
  42. // НАЧИНАЕМ ВЫВОДИТЬ САМУ ИНФОРМАЦИЮ ПОСТРАНИЧНО :)
  43. if (!isset($_GET['page'])) {
  44. $page = 0;
  45. }
  46. else {
  47. $page = $_GET['page']*$chislo - $chislo;
  48. }
  49. $nomer = $page + 5;
  50. // ФОРМИРУЕМ ЗАПРОС НУЖНОЙ НАМ ЧАСТИ ИНФОРМАЦИИ
  51. $result = mysql_query("SELECT * from $table ORDER by $id DESC limit $page, $nomer");
  52. // ИНАЧЕ ВЫВОДИМ ОШИБКУ
  53. if (!$result) {
  54. echo $text_error;
  55. }
  56.  
  57. ?>
  58.  
MegaMax Отправлено: 07 Мая, 2010 - 21:42:43 • Тема: Постраничная навигация • Форум: Напишите за меня, пожалуйста

Ответов: 24
Просмотров: 303
Letnabа ты код по себя редактировал. код в студию
MegaMax Отправлено: 07 Мая, 2010 - 19:56:14 • Тема: Авторизация • Форум: Пользовательские функции

Ответов: 8
Просмотров: 2014
Долго мучаюсь над своим проектом. хотел бы воспользоваться кодом данной авторизации. Возможно ли получить код всех страниц?
MegaMax Отправлено: 07 Мая, 2010 - 14:25:41 • Тема: Постраничная навигация • Форум: Напишите за меня, пожалуйста

Ответов: 24
Просмотров: 303
Добрый день. Спасибо Irbis и Zend за код.
У меня возникла похожая проблема. Есть таблица prot в которой n-ое кол-во записей. И есть страница на которой эти записи отображаются. Я пробовал подстроить под себя исходники Irbis и Zend. После долгих мучений с кодом Zend я все таки смирился и взял код Irbis.

Результат получился такой:
PHP:
скопировать код в буфер обмена
  1.  
  2.  
  3.       $limit = 5; // По сколько строк на страницу.
  4.  /*     $ttpage = $_GET['pg']; // Номер текущей страницы.
  5.       if(!$ttpage){  // Если нету
  6.  */             $ttpage = 1;// Значит это первая страница
  7.       }
  8.       // Первым запросом узнаем сколько всего строк в таблице mytable:
  9.       $total = mysql_result(mysql_query("SELECT COUNT(*) FROM prot"), 0);
  10.       $countp = $total/$limit;// Узнаем количество страниц
  11.       if (is_double($countp)){ // Если получаем не целое число
  12.               $countp = (int) $countp; // Делаем его таковым
  13.               $countp = $countp + 1; // И прибавляем единицу.
  14.       }
  15.       $arrpages = range(0, $countp);// Создаем массив для последующего вывода навигации
  16.       $page = $ttpage - 1; // Уменьшам номер страницы на 1
  17.       if ($page != 0){  // Если получили не нулевой результат
  18.               $pgs = $page * $limit; // Получаем номер строки с которой начинаем вывод
  19.       } else { // Если же результат получился нулевым
  20.               $pgs = 0; // То выводим с 0-й строки, т.е. с самого начала
  21.       }
  22.       //Вторым запросом уже получаем нужные строки из таблицы mytable
  23.       $get_db = mysql_query("SELECT * FROM prot LIMIT ".$pgs.", ".$limit);
  24.       while($arr_db = mysql_fetch_assoc($get_db)){
  25.               mysql_error();
  26.       }
  27.       // Навигация по страницам
  28.       for($i = 0; $i < count($arrpages); $i++ ){
  29.               if (($i != 0) && ($i != $ttpage)){
  30.                       $htmlpages .= '<a href="?pg='.$arrpages[$i].'">'.$arrpages[$i].'</a> ';
  31.               } else if (($i != 0) && ($i == $ttpage)){
  32.                       $htmlpages .= $arrpages[$i];
  33.               }
  34.       }
  35.       echo $htmlpages;
  36.  


Все бы ничего но при использовании выше указанного кода выводит ошибки, а чуть ниже ссылка на 3 страницы.
После нажатия на страницу 2 или 3 возникает ошибка:

CODE (text):
скопировать код в буфер обмена
  1.  
  2. Notice: Undefined variable: htmlpages in z:\home\localhost\www\sgm\blocks\nav_prot.php  on line 30
  3. [Денвер: показать возможную причину ошибки]1 2 3
  4.  


Если опять нажать на страницу 1 то выдает ошибку на линии 32. Подскажите пожалуйста по какой причине может не опознаваться переменная $htmlpages

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB