Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pager stronicowanie i zapamiętywanie
Forum PHP.pl > Forum > Przedszkole
peklo
Witam
Korzystam z pagera nospor i mam problem z zapamiętaniem wyników w wyszukiwarce. Chodzi mi o to że jak np wybiorę w wyszukiwarce id_kategoria=dam to powiedzmy wyszuka mi 8 wyników. I teraz mam podział 5 wyników na stronie.
Na pierwszej stronie pokazuje mi 5 wyników, a na dole podział STRONA 1 z 2 1 2>
I teraz jak kliknę w 2 strone to pokazuje mi kolejne 3 wyniki + dodatkowe te które mam w bazie dla danego uzytkownika czyli powiedzmy 22. A na dole strony mam Strona 2 z 4 < 1 2 3 4 >
CZyli pobiera mi wszystkie rekordy z bazy.
Nie wiem za bardzo jak to połączyć z zapamiętywaniem wyników wyszukiwarce. Kod + przykładowa tabel z wyszukiwarką wygląda tak

  1. <?php
  2. require_once('Pager.class.php');
  3. $bind = array(
  4. ':username' => $username
  5. );
  6. $where = array(
  7. 'o.username = :username'
  8. );
  9. if (!empty($_POST['szukaj']))
  10. {
  11. $_SESSION['form'] = array(
  12. 'nazwa_ogloszenia' => $_POST['nazwa_ogloszenia'],
  13. 'id_kategoria' => $_POST['id_kategoria'],
  14. );
  15. }
  16. $formData = array(
  17. 'nazwa_ogloszenia' => !isset($_SESSION['form']) ? null : $_SESSION['form']['nazwa_ogloszenia'],
  18. 'id_kategoria' => !isset($_SESSION['form']) ? null : $_SESSION['form']['id_kategoria'],
  19. );
  20. if (!empty($_POST['nazwa_ogloszenia']))
  21. {
  22. $where[] = "nazwa_ogloszenia LIKE :nazwa_ogloszenia";
  23. $bind[':nazwa_ogloszenia'] = '%' . $_POST['nazwa_ogloszenia'] . '%';
  24. }
  25. if (!empty($_POST['id_kategoria']))
  26. {
  27. $where[] = 'id_kategoria = :id_kategoria';
  28. $bind[':id_kategoria'] = $_POST['id_kategoria'];
  29. }
  30.  
  31. $stmt = $pdo -> prepare("SELECT count(*) as `ile` FROM ogloszenia o WHERE ". implode( ' AND ', $where ) );
  32. $row = $stmt->execute( $bind );
  33. $row = $stmt->fetch();
  34. $recordsCount = $row['ile'];
  35. try{
  36. $pager = new Pager('1');
  37. $pager->SetTotalRecords($recordsCount);
  38. $pager->Make(true);
  39. $pag = $pager->Render();
  40. $start = $pager->GetIndexRecordStart();
  41. $end = $pager->GetIndexRecordEnd();
  42. }
  43. catch (Exception $e) {
  44. echo $e->getMessage();
  45. }
  46. ?>
  47. <form action="" method="post">
  48. <table>
  49. <tr>
  50. <td>
  51. Wpisz tytuł <input type='text' name="nazwa_ogloszenia" value="<?php echo $formData['nazwa_ogloszenia'];?>"/></td>
  52. <td>
  53. Kategoria <select name="id_kategoria">
  54. <option value=''<?php if(empty($formData['id_kategoria'])) echo " selected=\"selected\""; ?>>--wybierz--</option>
  55. <option value='1'<?php if($formData['id_kategoria']==1) echo " selected=\"selected\""; ?>>Dam</option>
  56. <option value='2'<?php if($formData['id_kategoria']==2) echo " selected=\"selected\""; ?>>Szukam</option>
  57. </select>
  58. </td>
  59. <td>
  60. <BUTTON name='szukaj' type='submit' value="szukaj">
  61. <IMG src='szukaj.png' alt='Szukaj'>
  62. </BUTTON>
  63. </td>
  64. </tr>
  65. </table>
  66. </form>
  67. <table>
  68. <tr>
  69. <td>
  70. <?php
  71. try
  72. {
  73. $stmt = $pdo->prepare("SELECT o.username,o.id,o.id_kategoria,o.nazwa_ogloszenia FROM og o WHERE ". implode( ' AND ', $where )." group by o.id order by o.id DESC limit ".$start.",".($end - $start + 1));
  74. $stmt->execute( $bind );
  75. while($ogloszenia = $stmt -> fetch())
  76. {
  77. echo $ogloszenia['nazwa_ogloszenia'];
  78. echo $ogloszenia['id_kategoria'];
  79. }
  80. $stmt -> closeCursor();
  81. }
  82. catch(PDOException $e)
  83. {
  84. return $e->getMessage();
  85. }
  86. ?></td>
  87. </tr>
  88. </table>
  89. <?php
  90. echo 'Strona '.$pager->GetActualPage().' z '.$pager->GetTotalPages();
  91. echo $pag;
  92. ?>
nospor
startujesz w ogole sesje? Bo w kodzie co tu pokazales nie widze bys to robil

Poza tym juz ci niejednokrotnie pisalem, ze danych masz szukac w $formData a nie w $_POST a ty w ogole mnie nie sluchasz tylko za kazdym razem szukasz ich w post

Np. tu:
if (!empty($_POST['nazwa_ogloszenia']))
{
$where[] = "nazwa_ogloszenia LIKE :nazwa_ogloszenia";
$bind[':nazwa_ogloszenia'] = '%' . $_POST['nazwa_ogloszenia'] . '%';
}

Skoro wiec mowią ci, że masz szukac w $formData, to tam własnie masz ich szukac.....
if (!empty($formData['nazwa_ogloszenia']))
{
$where[] = "nazwa_ogloszenia LIKE :nazwa_ogloszenia";
$bind[':nazwa_ogloszenia'] = '%' . $formData['nazwa_ogloszenia'] . '%';
}

Po co w ogole przychodzisz na to forum jesli ludzie podają ci odpowiedz a Ty i tak ich nie sluchasz?

Nawet jest o tym napisane w arcie, z ktorego korzystales
http://nospor.pl/formularz-i-stronicowanie...anie-stanu.html
Cytat
//a tu możemy korzystać z danych formularza zapisanych w $formData

Czemu ma służyc taka nauka w sposob jak to robisz?
peklo
sesje miałem zapuszczone
session_start();

zmieniłem tutaj na:
  1. if (!empty($formData['nazwa_ogloszenia']))
  2. {
  3. $where[] = "nazwa_ogloszenia LIKE :nazwa_ogloszenia";
  4. $bind[':nazwa_ogloszenia'] = '%' . $formData['nazwa_ogloszenia'] . '%';
  5. }
  6. if (!empty($formData['id_kategoria']))
  7. {
  8. $where[] = 'id_kategoria = "'.$formData['id_kategoria'].'"';
  9. $bind[':id_kategoria'] = $formData['id_kategoria'];
  10. }
  11.  
  12. //zmieniłem również pierwszy select na:
  13.  
  14. $sql = 'select count(*) from ogloszenia where username="aaaa"';
  15. $result = mysql_query($sql);
  16. $row = mysql_fetch_array($result);
  17. $recordsCount = $row[0];//pobranie liczby rekordów
  18.  
  19.  
  20. //i teraz czy mam również tutaj zmienić $_POST na $formdata questionmark.gif Bo jak zmieniłem tak jak niżej to mi nic nie wyszukiwało
  21.  
  22. if (!empty($formdata['szukaj']))
  23. {
  24. $_SESSION['form'] = array(
  25. 'nazwa_ogloszenia' => $formdata['nazwa_ogloszenia'],
  26. 'id_kategoria' => $formdata['id_kategoria'],
  27.  
  28. );
  29. }
nospor
Na $formData miales zamienic dopiero jak tablice $formData utworzysz a nie wczesniej. To jest prosty kod, skoro piszesz tak powazna aplikacje, to moglbys wkoncu go przeanalizowac :/
peklo
na początku mam

  1. if (!empty($_POST['szukaj']))
  2. {
  3. $_SESSION['form'] = array(
  4. 'nazwa_ogloszenia' => $_POST['nazwa_ogloszenia'],
  5. );
  6. }
  7.  
  8. //później
  9.  
  10. $formData = array(
  11. 'nazwa_ogloszenia' => !isset($_SESSION['form']) ? null : $_SESSION['form']['nazwa_ogloszenia'],
  12. 'id_kategoria' => !isset($_SESSION['form']) ? null : $_SESSION['form']['id_kategoria'],
  13. }
  14.  
  15. //i na końcu
  16.  
  17. if (!empty($formData['nazwa_ogloszenia']))
  18. {
  19. $where[] = "nazwa_ogloszenia LIKE :nazwa_ogloszenia";
  20. $bind[':nazwa_ogloszenia'] = '%' . $formData['nazwa_ogloszenia'] . '%';
  21. }
nospor
Po pierwsze: pokaz caly kod, bo Ty lubisz robic byki w roznych miejscach
A po drugie: no i jaki teraz masz problem?

Po trzecie id_kategorii tez wypadaloby wkladac do sesji
peklo
no mam taki problem że teraz to w ogóle mi nie działa, a id_kategorii mam w sesji. Znając życie gdzieś na pewno mam błąd. Dobra cały kod:

  1. <?php
  2. require_once('Pager.class.php');
  3. $bind = array(
  4. ':username' => $username
  5. );
  6. $where = array(
  7. 'o.username = :username'
  8. );
  9. if (!empty($_POST['szukaj']))
  10. {
  11. $_SESSION['form'] = array(
  12. 'nazwa_ogloszenia' => $_POST['nazwa_ogloszenia'],
  13. 'id_kategoria' => $_POST['id_kategoria'],
  14. 'data_dod' => $_POST['data_dod'],
  15. 'aktywne' => $_POST['aktywne'],
  16. );
  17. }
  18.  
  19. $formData = array(
  20. 'nazwa_ogloszenia' => !isset($_SESSION['form']) ? null : $_SESSION['form']['nazwa_ogloszenia'],
  21. 'id_kategoria' => !isset($_SESSION['form']) ? null : $_SESSION['form']['id_kategoria'],
  22. 'data_dod' => !isset($_SESSION['form']) ? null : $_SESSION['form']['data_dod'],
  23. 'aktywne' => !isset($_SESSION['form']) ? null : $_SESSION['form']['aktywne'],
  24. );
  25.  
  26. if (!empty($formData['nazwa_ogloszenia']))
  27. {
  28. $where[] = "nazwa_ogloszenia LIKE :nazwa_ogloszenia";
  29. $bind[':nazwa_ogloszenia'] = '%' . $formData['nazwa_ogloszenia'] . '%';
  30. }
  31. if (!empty($formData['id_kategoria']))
  32. {
  33. $where[] = 'id_kategoria = "'.$formData['id_kategoria'].'"';
  34. $bind[':id_kategoria'] = $formData['id_kategoria'];
  35. }
  36. if (!empty($formData['data_dod']))
  37. {
  38. $where[] = 'data_dod >= "'.$formData['data_dod'].' 00:00:00"';
  39. $bind[':data_dod'] >= $formData['data_dod'];
  40. }
  41. if (!empty($formData['aktywne']))
  42. {
  43. $where[] = 'aktywne = "'.$formData['aktywne'].'"';
  44. $bind[':aktywne'] = $formData['aktywne'];
  45. }
  46.  
  47. $sql = 'select count(*) from og where username="'.$_SESSION['user'].'"';
  48. $result = mysql_query($sql);
  49. $row = mysql_fetch_array($result);
  50. $recordsCount = $row[0];
  51.  
  52. try{
  53. $pager = new Pager('1');
  54. $pager->SetTotalRecords($recordsCount);
  55. $pager->Make(true);
  56. $pag = $pager->Render();
  57. $start = $pager->GetIndexRecordStart();
  58. $end = $pager->GetIndexRecordEnd();
  59. }
  60. catch (Exception $e) {
  61. echo $e->getMessage();
  62. }
  63. ?>
  64. <form action="" method="post">
  65. <table>
  66. <tr>
  67. <td>
  68. Wpisz tytuł <input type='text' name="nazwa_ogloszenia" value="<?php echo $formData['nazwa_ogloszenia'];?>"/></td>
  69. <td>
  70. Kategoria <select name="id_kategoria">
  71. <option value=''<?php if(empty($formData['id_kategoria'])) echo " selected=\"selected\""; ?>>--wybierz--</option>
  72. <option value='1'<?php if($formData['id_kategoria']==1) echo " selected=\"selected\""; ?>>Dam</option>
  73. <option value='2'<?php if($formData['id_kategoria']==2) echo " selected=\"selected\""; ?>>Szukam</option>
  74. </select>
  75.  
  76. Rodzaj <select name="aktywne">
  77. <option value='1'<?php if($formData['aktywne']==1) echo " selected=\"selected\""; ?>>Aktywne</option>
  78. <option value='2'<?php if($formData['aktywne']==2) echo " selected=\"selected\""; ?>>Zakończone</option>
  79. </select>
  80. </td>
  81. <td>
  82. <BUTTON name='szukaj' type='submit' value="szukaj">
  83. <IMG src='szukaj.png' alt='Szukaj'>
  84. </BUTTON>
  85. </td>
  86. </tr>
  87. </table>
  88. </form>
  89. <table>
  90. <tr>
  91. <td>
  92. <?php
  93. try
  94. {
  95. $stmt = $pdo->prepare("SELECT o.username,o.id,o.id_kategoria,o.data_dod,o.aktywne,o.nazwa_ogloszenia,z.id_og,z
    .thumb
  96. FROM og o LEFT OUTER JOIN zd z on o.id=z.id_og WHERE ". implode( ' AND ', $where )." group by o.id order by o.id DESC limit ".$start.",".($end - $start + 1));
  97. $stmt->execute( $bind );
  98. while($ogloszenia = $stmt -> fetch())
  99. {
  100. echo $ogloszenia['nazwa_ogloszenia'];
  101. echo $ogloszenia['id_kategoria'];
  102. }
  103. $stmt -> closeCursor();
  104. }
  105. catch(PDOException $e)
  106. {
  107. return $e->getMessage();
  108. }
  109. ?></td>
  110. </tr>
  111. </table>
  112. <?php
  113. echo 'Strona '.$pager->GetActualPage().' z '.$pager->GetTotalPages();
  114. echo $pag;
  115. ?>


Jest chyba problem z tym zapytaniem
  1. $stmt = $pdo->prepare("SELECT o.username,o.id_username,o.id,o.id_kategoria,o.data_dod,o.aktywne,o.nazwa_oglosz
    enia,z.id_og,z.thumb
  2. FROM og o LEFT OUTER JOIN zd z on o.id=z.id_og WHERE ". implode( ' AND ', $where )." group by o.id order by o.id DESC limit ".$start.",".($end - $start + 1));
  3. $stmt->execute( $bind );
nospor
$where[] = 'id_kategoria = "'.$formData['id_kategoria'].'"';
$bind[':id_kategoria'] = $formData['id_kategoria'];

Albo wartosc przekazuj bezposrednio albo binduj, a nie jak teraz robisz, ze robisz i jedno i drugie co jest totalnie bez sensu.

Pisalem ci również, że zapytanie z COUNT ma dzialac dokladnie na tych samych warunkach co zapytanie wyswietlające dane.
peklo
oczywiscie pierwsze zapytanie robię już bez tego parametru

  1. limit ".$start.",".($end - $start + 1));
.

Reszta zapytania ma byc identyczna

dobra dzięki nospor wreszcie działa
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.