За последние 24 часа нас посетили 16435 программистов и 1555 роботов. Сейчас ищут 924 программиста ...

сессии и постраничный вывод

Тема в разделе "PHP и базы данных", создана пользователем tstas, 17 сен 2011.

  1. tstas

    tstas Активный пользователь

    С нами с:
    23 июн 2011
    Сообщения:
    4
    Симпатии:
    0
    Всем Привет! Есть форма передающая данные методом POST, есть обработчик который выводит данные постранично.
    Но работает только первая ссылка при переходе на следующие пишет не чего не найдено.
    Понял что POST данные теряются при переходе, нужно POST передать в SESSION,
    но не селен может подскажите. Заранее Спасибо.

    PHP:
    1.  
    2.  
    3. function mymenu($page, $count, $pages_count, $show_link)
    4. {
    5. // $show_link - это количество отображаемых ссылок;
    6. // нагляднее будет, когда это число будет парное
    7. // Если страница всего одна, то вообще ничего не выводим
    8.  
    9.  
    10. if (!isset($_POST['country'])) $_SESSION['country'] = $_POST['country'];
    11.  
    12.  
    13. if ($pages_count == 1) return false;
    14. $sperator = ' '; // Разделитель ссылок; например, вставить "|" между ссылками
    15. // Для придания ссылкам стиля
    16. $style = 'style="color: #808000; text-decoration: none;"';
    17. $begin = $page - intval($show_link / 2);
    18. unset($show_dots); // На всякий случай :)
    19. // Сам постраничный вывод
    20. // Если количество отображ. ссылок больше кол. страниц
    21. if ($pages_count <= $show_link + 1) $show_dots = 'no';
    22. // Вывод ссылки на первую страницу
    23. if (($begin > 2) && ($pages_count - $show_link > 2)) {
    24. echo '<a '.$style.' href='.$_server['php_self'].'?page=1> |< </a> ';
    25. }
    26. for ($j = 0; $j <= $show_link; $j++) // Основный цикл вывода ссылок
    27. {
    28. $i = $begin + $j; // Номер ссылки
    29. // Если страница рядом с началом, то увеличить цикл для того,
    30. // чтобы количество ссылок было постоянным
    31. if ($i < 1) continue;
    32. // Подобное находится в верхнем цикле
    33. if (!isset($show_dots) && $begin > 1) {
    34. echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i-1).'><b>...</b></a> ';
    35. $show_dots = "no";
    36. }
    37. // Номер ссылки перевалил за возможное количество страниц
    38. if ($i > $pages_count) break;
    39. if ($i == $page) {
    40. echo ' <a '.$style.' ><b>'.$i.'</b></a> ';
    41. } else {
    42. echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$i.'>'.$i.'</a> ';
    43. }
    44. // Если номер ссылки не равен кол. страниц и это не последняя ссылка
    45. if (($i != $pages_count) && ($j != $show_link)) echo $sperator;
    46. // Вывод "..." в конце
    47. if (($j == $show_link) && ($i < $pages_count)) {
    48. echo ' <a '.$style.' href='.$_server['php_self'].'?page='.($i+1).'><b>...</b></a> ';
    49. }
    50. }
    51. // Вывод ссылки на последнюю страницу
    52. if ($begin + $show_link + 1 < $pages_count) {
    53. echo ' <a '.$style.' href='.$_server['php_self'].'?page='.$pages_count.'> >| </a>';
    54. }
    55. return true;
    56. } // Конец функции
    57.  
    58. // Подготовка к постраничному выводу
    59. $num = 1; // Количество отображаемых данных из БД
    60.  
    61.  
    62. if (!isset($_POST['country'])) $_SESSION['country'] = $_POST['country'];
    63.  
    64. if (!empty($_GET['page']) || ($_GET['page'] <= 0)) {
    65.  
    66. $page = 1;
    67.  
    68. } else {
    69. $page =(int) $_GET['page']; // Считывание текущей страницы
    70.  
    71. }
    72. // Общее количество информации
    73.  
    74. $count = mysql_numrows(mysql_query("select event_subject, event_body from `phpbb_calendar_events`
    75. WHERE event_subject='". $_POST['country'] ."' OR event_subject=event_body",$link)) or die('error! Записей не найденоoooo!');
    76. $pages_count = ceil($count / $num); // Количество страниц
    77. // Если номер страницы оказался больше количества страниц
    78. if ($page > $pages_count) $page = $pages_count;
    79. $start_pos = ($page - 1) * $num; // Начальная позиция, для запроса к БД
    80.  
    81. $numchar = 300;
    82. // Извлекаем из URL текущую страницу
    83.  
    84. $page = $_GET['page'];
    85.  
    86. // Определяем общее число сообщений в базе данных
    87. $result = mysql_query("SELECT COUNT(*) FROM `phpbb_calendar_events`
    88. WHERE event_subject='". $_POST['country'] ."'OR event_subject=event_body",$link);
    89.  
    90. $rgPosts = mysql_fetch_row($result);
    91. $posts=$rgPosts[0];
    92. $total = intval(($posts - 1) / $num) + 1;
    93. $page = intval($page);
    94. if(empty($page) or $page < 0) $page = 1;
    95. if($page > $total) $page = $total;
    96. $start = $page * $num - $num;
    97. $result = mysql_query("SELECT * FROM `phpbb_calendar_events`
    98. WHERE event_subject='". $_POST['country'] ."' OR event_subject=event_body  LIMIT $start, $num",$link) or die (mysql_error());
    99.  
    100. $table = "<table border=3 width=30% align=center>\n";
    101. while ( $i = mysql_fetch_assoc($result))
    102. {
    103.    $table .= "<tr>\n";
    104.  
    105. $table .= "<td>".$i['event_subject']."</td>\n";
    106. $table .= "<td>".$i['event_body']."</td>\n";
    107. $table .= "</tr>\n";
    108. }
    109. $table .= "</table>\n";
    110.  
    111. echo $table;
    112.  
    113. mymenu($page, $count, $pages_count, 10);
    114.  
     
  2. eternalko

    eternalko Активный пользователь

    С нами с:
    25 сен 2011
    Сообщения:
    5
    Симпатии:
    0
    Смотрите. Вам проще всего сделать так.

    У Вас есть SQL Запрос Вида:
    SELECT * FROM `phpbb_calendar_events` WHERE event_subject='". $_POST['country'] ."' OR event_subject=event_body LIMIT $start, $num"

    Переменная $start у Вас там как то считается через $page.

    Теперь, в пейджинаторе генерирующем линки надо добавлять $_GET переменную c номером страницы и через нее работать.

    Вы это все сделали. Но что-то не работает.

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

    $_Post - передает сам запрос
    $_Session - Там хранится сам запрос пока пользователь ползает тудя-сюда
    $_Get - передает номер страницы
    $page - Номер страницы от которого будем плясать запросы к БД
    $num_per_page - Константа опред. количество результатов на страницу.

    Все.
     
  3. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Посмотри внимательно и подумай, что делает эта строчка:
    PHP:
    1. <?php
    2. // ...
    3. if (!isset($_POST['country'])) $_SESSION['country'] = $_POST['country'];
    4. // ...
    5. ?>
    И в каком случае будет выполняться это условие
    PHP:
    1. <?php
    2. // ...
    3. if (!empty($_GET['page']) || ($_GET['page'] <= 0))
    4. // ...
    5. ?>