Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Paginacja a pole wyboru select
Forum PHP.pl > Forum > XML, AJAX
slawekxx
Witam, napisałem skrypt paginacji danych z bazy sql dodałem na stronie pole wyboru select gdzie wybiera się zapytanie do bazy - sortowanie według daty i teraz ma problem a mianowicie klikając w linki paginacji zmienia mi się pole wyboru select
d3ut3r
Zapisz wartość selecta w sesji / ciasteczku i ustawiaj go za każdym razem na podstawie tej wartości.
slawekxx
ok tylko jak mam to zrobić ?
d3ut3r
A jak próbujesz to robić ? nie dałeś żadnego kodu, więc nie bardzo mam co napisać. Zakładam, że znasz podstawy php i wiesz jak odbierać dane z formularza.

slawekxx
  1. <form action="" method="post">
  2. <select name="dzial" onchange="this.form.submit();return true;">
  3. <option value="">domyslnie</option>
  4. <option value="ASC">data malejaca</option>
  5. <option value="DESC">data rosnaco</option>
  6. </select>
  7. </form>
  8.  


zapytanie do bazy
  1.  
  2. $res = mysql_query("SELECT * FROM webacm_test ORDER BY `webacm_test`.`date` $dzial LIMIT $start, $per_page ");
  3.  
d3ut3r
Można np tak:

  1. <?php
  2.  
  3. $allowed=array('ASC','DESC');
  4.  
  5. if (isset($_POST['dzial'])){
  6.  
  7. $_SESSION['order_direction']=$_POST['dzial'];
  8.  
  9. }
  10.  
  11. if (!isset($_SESSION['order_direction']) || !in_array( $_SESSION['order_direction'], $allowed, true)){
  12. $_SESSION['order_direction']='ASC'; //domyślna opcja
  13. }
  14.  
  15.  
  16.  
  17. $sql='SELECT * FROM webacm_test ORDER BY `webacm_test`.`date` '.$_SESSION['order_direction'].' LIMIT '.(int)$start.','.(int)$per_page;
  18.  
  19. $res = mysql_query($sql);
  20. ?>
  21.  
  22. <form action="" method="post">
  23. <select name="dzial" onchange="this.form.submit();return true;">
  24. <option <?=$_SESSION['order_direction']=='ASC' ? 'selected="selected"' : ''?> value="ASC">data malejaca</option>
  25. <option <?=$_SESSION['order_direction']=='DESC' ? 'selected="selected"' : '' ?> value="DESC">data rosnaco</option>
  26. </select>
  27. </form>
slawekxx
nic się nie poprawiło
d3ut3r
Rozpisz się bardziej smile.gif masz to gdzieś na live ? przed mysql_query daj print_r($_SESSION) zobacz czy zmienna jest poprawnie przypisana. Za mało szczegółów podajesz.
slawekxx
Linka live wysłałem na PRV
d3ut3r
Wklej na forum cały kod jaki teraz masz ... ale dostałeś gotowca praktycznie kwestia dostosowania tego do twoich potrzeb. Offtopując nie wysyłaj PM forum jest ogólnodostępne, i jeżeli nie ja to ktoś inny Ci pomoże a tak to lipa :/
slawekxx
  1. <form action="" method="post">
  2. <select name="dzial" onchange="this.form.submit();return true;">
  3. <option>domyslenie</option>
  4. <option <?=$_SESSION['order_direction']=='ASC' ? 'selected="selected"' : ''?> value="ASC">data malejaca</option>
  5. <option <?=$_SESSION['order_direction']=='DESC' ? 'selected="selected"' : '' ?> value="DESC">data rosnaco</option>
  6. </select>
  7. </form>
  8. </div>
  9. <div class="listPagesContainer">
  10. <ul>
  11. <?php
  12.  
  13. $per_page=5;
  14. if(!isset($_GET['page']))
  15. {
  16. $page=1;
  17. }
  18. else {
  19. $page=$_GET['page'];
  20. $cur_page = $page;
  21. }
  22. if($page<=1)
  23. $start=1;
  24. else
  25. $start=$page * $per_page-$per_page;
  26. $con = mysql_connect();
  27. if (!$con) {
  28. die("Error: " . mysql_error());
  29. }
  30. mysql_select_db("", $con);
  31. $num_rows=mysql_num_rows(mysql_query("SELECT * FROM webacm_test "));
  32. $num_pages=ceil($num_rows/$per_page);
  33. $no_of_paginations = ceil($num_rows /$per_page);
  34. $lastpage = ceil($num_rows/$per_page);
  35.  
  36.  
  37. //
  38. if($no_of_paginations>100){
  39. $stages=10;
  40. }
  41. if($no_of_paginations<=10){
  42. $stages=5;
  43. }
  44. if ($cur_page >= 7) {
  45. $start_loop = $cur_page - 5;
  46. if ($no_of_paginations > $cur_page + 5)
  47. $end_loop = $cur_page + 5;
  48. else if ($cur_page <= $no_of_paginations && $cur_page > $no_of_paginations - $stages) {
  49. $start_loop = $no_of_paginations - $stages;
  50. $end_loop = $no_of_paginations;
  51. } else {
  52. $end_loop = $no_of_paginations;
  53. }
  54. } else {
  55. $start_loop = 2;
  56. if ($no_of_paginations > 10)
  57. $end_loop = 10;
  58. else
  59. $end_loop = $no_of_paginations;
  60. }
  61. //
  62. if($page)
  63. $prev=$page-1;
  64. $next=$page+1;
  65. if($prev>0)
  66. echo"<li class='previous'><a href='?page=$prev'></a></li>";
  67.  
  68. // wyświetla zawsze pierwszą stronę
  69. for($i=1;$i<=$num_pages;$i++){
  70. if($i==1){
  71. echo'<li><a href="?page='.$i.'">'.$i.'</a></li>';
  72. }
  73. }
  74. if($page>=7){
  75. echo"<li>...</li>";}
  76. else{
  77.  
  78. }
  79. // wyświetla liczbę stron
  80. $loop=$end_loop-1;
  81.  
  82. if($cur_page>=0){
  83. for ($i=$start_loop; $i <= $loop;$i++) {
  84. if($i==$page){
  85. echo'<li class="active">'.$i.'</li>';
  86. } else {
  87. echo'<li><a href="?page='.$i.'">'.$i.'</a></li>';
  88. }
  89. }
  90.  
  91. //wyświetlanie numeru ostatniej strony
  92. for($j=$num_pages; $j<=$num_pages;$j++) {
  93. echo"<li>...</li>";
  94. echo'<li><a href="?page='.$j.'">'.$j.'</a></li>';
  95. }
  96. }
  97. else{
  98.  
  99. //
  100.  
  101. for ($i=1; $i<=$num_pages;$i++) {
  102. if($i==$page) {
  103. echo'<li class="active">'.$i.'</li>';
  104. } else {
  105. echo'<li><a href="?page='.$i.'">'.$i.'</a></li>';
  106. }
  107. }
  108. }
  109. if($page<ceil($num_rows/$per_page))
  110.  
  111. echo"<li class='next'><a href='?page=$next'></a></li>";
  112.  
  113.  
  114. ?>
  115. </ul>
  116. </div>
  117. <div class="productsContainer">
  118. <style type="text/css">
  119. /* <![CDATA[ */
  120. li {
  121. display: block;
  122. list-style: none;
  123. margin: 0;
  124. padding: 0;
  125. }
  126. /* ]]> */
  127.  
  128.  
  129.  
  130. </style>
  131. <?php
  132.  
  133. $allowed=array('ASC','DESC');
  134.  
  135. if (isset($_POST['dzial'])){
  136.  
  137. $_SESSION['order_direction']=$_POST['dzial'];
  138.  
  139. }
  140.  
  141. if (!isset($_SESSION['order_direction']) || !in_array( $_SESSION['order_direction'], $allowed, true)){
  142. $_SESSION['order_direction']='ASC'; //domyślna opcja
  143. }
  144.  
  145. $sql='SELECT * FROM webacm_test ORDER BY `webacm_test`.`date` '.$_SESSION['order_direction'].' LIMIT '.(int)$start.','.(int)$per_page;
  146.  
  147. $res = mysql_query($sql);
  148. while ($row = mysql_fetch_array($res)) {
  149. echo '<div class="product">
  150. <div class="header">
  151. <div class="name"><a href="">'.$row['date'].'</a>
  152. <div class="content">
  153. <div class="photo">
  154. <li><img src="'. $row['url_min'] . '" ></li>
  155. </div>
  156. </div>
  157. </div>
  158. </div>
  159. </div>';
  160. }
  161. ?>
  162.  
d3ut3r
session_start i mój kod ma być na początku, formularz z orderem powinien być pod tym dopiero. Generalnie sieczka w tym kodzie ...
slawekxx
to tak gdy wybiorę sortowanie np. według daty malejąco - sortowanie jest poprawne jeżeli kliknę w link paginacji to przeskoczy sortowanie według daty rosnąco i na odwrót
d3ut3r
dałeś session_start na samym początku pliku ?
slawekxx
ok dzięki działa smile.gif

Ok teraz chce wykorzystać pola checkbox do wybory ze stronicowanych danych czyli tak zwana filtracja według kategorii skrypt z jakiego korzystam jest poniżej próbowałem dać warunek do linii 31 ale paginacja następuje dopiero po zaznaczeniu pola checkbox
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.