Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Постраничный вывод из бд по фильтру
Форумы портала PHP.SU » » Вопросы новичков » Постраничный вывод из бд по фильтру

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

1. qazxcvbb - 24 Июля, 2017 - 10:45:30 - перейти к сообщению
Вообщем, использовал скрипт постраничного вывода данных из бд. В принципе, все работает, но при применении фильтров из селектов постраничный вывод правильно считает и выводит данные, но при нажатие на определенную страницу или следующую страницу данные фильтра сбрасываются и выводятся все страницы и данные по первому условию. Попытался сделать через сессию почитал, попробовал но нечего не получается. Подскажите, если кто знает как сделать.
PHP:
скопировать код в буфер обмена
  1. </head>
  2. <body>
  3. <form action="" method="POST">
  4. <div class="right_container">
  5. <div align="center">
  6. <div class="filtr">
  7. <span>ФИЛЬТР</span><br>
  8. </div>
  9. <br>
  10. <select name="data[namev]" class="select">
  11. <option value="" selected>Выберите номер</option>
  12. <option value="без №">без №</option>
  13. <option value="№1">№1</option>
  14. <option value="№2">№2</option>
  15. <option value="№3">№3</option>
  16. <option value="№4">№4</option>
  17. <option value="№5">№5</option>
  18. <option value="№6">№6</option>
  19. <option value="№7">№7</option>
  20. <option value="№8">№8</option>
  21. <option value="№9">№9</option>
  22. <option value="№10">№10</option>
  23. <option value="№11">№11</option>
  24. <option value="№12">№12</option>
  25. </select>
  26. <br>
  27. <?PHP
  28. // устанавливаем первый и последний год диапазона
  29. $yearArray = range(1800, 2030);
  30. ?>
  31. <!-- выводим выпадающий список -->
  32. <select name="data[year]"  class="select">
  33.     <option value="" selected>Выберите год</option>
  34.     <?PHP
  35.     foreach ($yearArray as $year) {
  36.         // если вы хотите выбрать конкретный год
  37.         $selected = ($year == 1799) ? 'selected' : '';
  38.         echo '<option '.$selected.' value="'.$year.'">'.$year.'</option>';
  39.     }
  40.     ?>
  41. </select>
  42. <br>
  43. <select name="data[lang]"  class="select">
  44. <option value="" selected>Выберите язык</option>
  45. <?PHP
  46. $query = 'SELECT lang FROM lang';
  47. $result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error ( ) );
  48.    while ( $line = mysql_fetch_array ( $result, MYSQL_ASSOC ) ) {
  49.       echo '<option value="' . $line [ 'lang' ] . '">' . $line [ 'lang' ] . "</option>";
  50.    }
  51. ?>          
  52. </select>
  53. <br>
  54. <select name="data[sigla]" class="select">
  55. <option value="" selected>Выберите местонахождение</option>
  56. <?PHP
  57. $query = 'SELECT name FROM sigla';
  58. $result = mysql_query ( $query ) or die ( 'Query failed: ' . mysql_error ( ) );
  59.    while ( $line = mysql_fetch_array ( $result, MYSQL_ASSOC ) ) {
  60.       echo '<option value="' . $line [ 'name' ] . '">' . $line [ 'name' ] . "</option>";
  61.    }
  62. ?>          
  63. </select>
  64. <br>
  65. <input class="btn_search" type="submit" name="smb" value="Применить">
  66. <p></p>
  67. </div>
  68. </div>
  69. <div class="left_container">
  70. <?PHP
  71. $num = 10;
  72. $page = $_GET['page'];
  73. $result1 = mysql_query("SELECT COUNT(*) FROM `osnov` WHERE `name` LIKE '1%'");
  74. $temp = mysql_fetch_array($result1);
  75. $posts = $temp[0];
  76. $total = (($posts - 1) / $num) + 1;
  77. $total =  intval($total);
  78. $page = intval($page);
  79. if(empty($page) or $page < 0) $page = 1;
  80. if($page > $total) $page = $total;
  81. $start = $page * $num - $num;
  82. $result = mysql_query("SELECT `name`, `year`, `namev`, `lang`, `vid`, `period`, `sigla` FROM `osnov` WHERE `name` LIKE '1%' LIMIT ".$start.", ".$num) or die('error!');
  83. $filter = '';
  84. if(isset($_POST['smb']))
  85. {
  86.     $data = array(
  87.         'year' => '',
  88.         'lang' => '',
  89.         'sigla' => '',
  90.         'namev' => ''
  91.     );
  92.     $request = $_POST['data'];
  93.     foreach($request as $key => $value)
  94.     {
  95.         if( array_key_exists($key,$data) )
  96.         {
  97.             $data[$key] = $value;
  98.         }
  99.     }
  100.     foreach($data as $key => $value)
  101.     {
  102.         if( $value != '' )
  103.         {
  104.             $filter .= " AND `".$key."`='".$value."'";
  105.         }
  106.     }
  107. $result2 = mysql_query("SELECT COUNT(*) from osnov WHERE `name` LIKE '1%'".$filter);
  108. $temp = mysql_fetch_array($result2);
  109. $posts = $temp[0];
  110. $total = (($posts - 1) / $num) + 1;
  111. $total =  intval($total);
  112. $page = intval($page);
  113. if(empty($page) or $page < 0) $page = 1;
  114. if($page > $total) $page = $total;
  115. $start = $page * $num - $num;  
  116. $result = mysql_query("SELECT `name`, `year`, `namev`, `lang`, `vid`, `period`, `sigla` FROM `osnov` WHERE `name` LIKE '1%'".$filter." LIMIT ".$start.", ".$num) or die('error!');
  117. }
  118. while ($row = mysql_fetch_array($result)) {
  119.  echo '<div class="boxer result">
  120.      <div class="box"><a class="result-item-title">' . $row['name'] . '</a>
  121.      <div class="result-item-detail">
  122.  
  123.      <div class="box-row"><div class="result-item-detail-title">Год</div>
  124.      <div class="box"><span class="attr_title">' . $row['year'] . '</span></div></div>
  125.  
  126.      <div class="box-row"><div class="result-item-detail-title">Номер</div>
  127.      <div class="box"><span class="attr_title">' . $row['namev'] . '</span></div></div>
  128.  
  129.      <div class="box-row"><div class="result-item-detail-title">Язык</div>
  130.      <div class="box"><span class="attr_title">' . $row['lang'] . '</span></div></div>
  131.  
  132.      <div class="box-row"><div class="result-item-detail-title">Вид</div>
  133.      <div class="box"><span class="attr_title">' . $row['vid'] . '</span></div></div>
  134.  
  135.      <div class="box-row"><div class="result-item-detail-title">Периодичность</div>
  136.      <div class="box"><span class="attr_title">' . $row['period'] . '</span></div></div>
  137.  
  138.      <div class="box-row"><div class="result-item-detail-title">Местонахождение</div>
  139.      <div class="box"><span class="attr_title">' . $row['sigla'] . '</span></div></div>      
  140.  
  141.      </div></div></div>';  
  142. }
  143. ?>
  144. <?PHP
  145. // Проверяем нужны ли стрелки назад
  146. if ($page != 1) $pervpage = '<a href=tabl.php?page=1>Первая</a> | <a href=tabl.php?page='. ($page - 1) .'>Предыдущая</a> | ';
  147. // Проверяем нужны ли стрелки вперед
  148. if ($page != $total) $nextpage = ' | <a href=tabl.php?page='. ($page + 1) .'>Следующая</a> | <a href=tabl.php?page=' .$total. '>Последняя</a>';
  149. // Находим две ближайшие станицы с обоих краев, если они есть
  150. if($page - 5 > 0) $page5left = ' <a href=tabl.php?page='. ($page - 5) .'>'. ($page - 5) .'</a> | ';
  151. if($page - 4 > 0) $page4left = ' <a href=tabl.php?page='. ($page - 4) .'>'. ($page - 4) .'</a> | ';
  152. if($page - 3 > 0) $page3left = ' <a href=tabl.php?page='. ($page - 3) .'>'. ($page - 3) .'</a> | ';
  153. if($page - 2 > 0) $page2left = ' <a href=tabl.php?page='. ($page - 2) .'>'. ($page - 2) .'</a> | ';
  154. if($page - 1 > 0) $page1left = '<a href=tabl.php?page='. ($page - 1) .'>'. ($page - 1) .'</a> | ';
  155. if($page + 5 <= $total) $page5right = ' | <a href=tabl.php?page='. ($page + 5) .'>'. ($page + 5) .'</a>';
  156. if($page + 4 <= $total) $page4right = ' | <a href=tabl.php?page='. ($page + 4) .'>'. ($page + 4) .'</a>';
  157. if($page + 3 <= $total) $page3right = ' | <a href=tabl.php?page='. ($page + 3) .'>'. ($page + 3) .'</a>';
  158. if($page + 2 <= $total) $page2right = ' | <a href=tabl.php?page='. ($page + 2) .'>'. ($page + 2) .'</a>';
  159. if($page + 1 <= $total) $page1right = ' | <a href=tabl.php?page='. ($page + 1) .'>'. ($page + 1) .'</a>';
  160. // Вывод меню если страниц больше одной
  161. if ($total > 1)
  162. {
  163. Error_Reporting(E_ALL & ~E_NOTICE);
  164. echo "<div class=\"pstrnav\">";
  165. echo $pervpage.$page5left.$page4left.$page3left.$page2left.$page1left.'<b>'.$page.'</b>'.$page1right.$page2right.$page3right.$page4right.$page5right.$nextpage;
  166. echo "</div>";
  167. }
  168. ?>
  169. </div>
  170. </form>
  171. </body>
  172. </html>
2. qazxcvbb - 24 Июля, 2017 - 15:49:32 - перейти к сообщению
вывел значение сессии вставить кусок это после filter и перед $result2
PHP:
скопировать код в буфер обмена
  1. <?PHP if (substr_count($_SERVER['REQUEST_URI'], 'page')) {
  2. echo $_SESSION['filter'];
  3. }else{
  4. $_SESSION['filter'] = $filter;
  5. echo $_SESSION['filter'];
  6. }
  7. if (!isset($_SESSION['filter'])) echo('Переменная blablabla не найдена в сессии');?>

в навигации добавил на ссылку на следующую и предыдущую страницу вот это
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. // Проверяем нужны ли стрелки назад
  3. if ($page != 1) $pervpage = '<a href=tabl.php?view=osnov&page=1>Первая</a> | <a href=tabl.php?view=osnov&page='. ($page - 1) .'>Предыдущая</a> | ';
  4. // Проверяем нужны ли стрелки вперед
  5. if ($page != $total) $nextpage = ' | <a href=tabl.php?view=osnov&page='. ($page + 1) .'>Следующая</a> | <a href=tabl.php?view=osnov&page=' .$total. '>Последняя</a>';?>
выбираю в фильтре 2012 год и русский язык нажимаю применить первую страницу выводит правильно и сверху пишет AND `year`='2012' AND `lang`='русский' после нажатия на следующую страницу опять все сбрасывается(

 

Powered by ExBB FM 1.0 RC1