Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP] Stronicowanie wyników wyszukiwania
Kshyhoo
post
Post #1





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Do tej pory wyświetlałem dane bez problemów, teraz jednak wymyśliłem sobie wyszukiwarkę i mam problemy ze stronicowaniem wyników. Pobierałem wyniki tak:
  1. SELECT * FROM tutoriale LIMIT $start, $na_strone

W wyszukiwarce, jeżeli ustalę np. 10 wyników na stronę, to kolejne strony są puste, mimo, że jest więcej wyników wyszukiwania. Są jakieś sposoby, żeby "pamiętać" dane do wyszukiwania w sposób efektywny? Moje zapytanie:
  1. SELECT * FROM tutoriale WHERE $gdzie LIKE '%$fraza%' LIMIT $start, $na_strone

Strony zapamiętuję w sesji.
Go to the top of the page
+Quote Post
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Może czas na sesje? (IMG:style_emoticons/default/winksmiley.jpg) Dane z wyszukiwarki też do sesji i po problemie.

Ten post edytował thek 19.01.2010, 20:28:08
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #3





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Całe wyniki? Nie łapię ;p
Go to the top of the page
+Quote Post
bl4ck_b0x
post
Post #4





Grupa: Zarejestrowani
Postów: 81
Pomógł: 0
Dołączył: 21.11.2006

Ostrzeżenie: (0%)
-----


Nie całe wyniki (IMG:style_emoticons/default/winksmiley.jpg) Żebyś przechowywał w sesji którą "porcję" danych bierzesz (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #5





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Hmm, strony mam tak:
  1. if (!empty($_GET['s'])) {
  2. $s = ($_GET["s"]>1)?number_format($_GET["s"], 0, "", ""):1;
  3. $_SESSION["s"] = $_GET["s"];
  4. } else {
  5. $s = ($_SESSION["s"]>1)?number_format($_SESSION["s"], 0, "", ""):1;
  6. }

Go to the top of the page
+Quote Post
Pilsener
post
Post #6





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

Ostrzeżenie: (0%)
-----


Po co sesje do tego? Rozwiązania są dwa:
1. Jeżeli zależy Ci na historii wyszukiwania, statystykach itp. to i tak to wrzucasz do bazy, co nie? Potem wystarczy dodać do porcjowania id, pod którym będą zapisane szukane kryteria, np. index.php?szukaj=4844&a=2 - strona druga. Rozwiązanie to ma także tą zaletę, że można zapamiętać w linkach wyniki wyszukiwania dla danych kryteriów. W bazie możesz przechowywać np. 10k ostatnich wyszukiwań.
2. Zapamiętać kryteria w ciachu, ja używam ciacha do poprawienia funkcjonalności, np. zapamiętywania numerów stron (gdy user kliknie powrót to jest tam, gdzie był a nie znowu na głównej), tutaj też się idealnie nada, bo jak ktoś ma wyłączone cookies to najwyżej nie zobaczy pozostałych stron wyszukiwania, przed czym łatwo się zabezpieczyć wysyłając mu komunikat.
Go to the top of the page
+Quote Post
nospor
post
Post #7





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Tutaj o tym pisałem
http://nospor.pl/formularz-i-stronicowanie...-stanu-n26.html
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #8





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




No właśnie... Problem w tym, że nie bardzo wiem, jak się do tego zabrać. Link mam taki:
index.php?page=szukaj&opcja=tytul&fraza=trąbka
ale w następnych stronach:
index.php?page=szukaj&s=2
Kiedyś Twój artykuł czytałem, ale zrobię to ponownie, może coś "zjarzę" ;p

EDIT:
Jeżeli mój formularz wyglądał tak:
  1. <form method='get' action='index.php?go=szukaj'>
  2. <input type='hidden' name='go' value='szukaj' class=''>
  3. Autor: <input type='radio' name='opcja' value='autor' />
  4. Tytuł: <input type='radio' name='opcja' value='tytul' checked='checked' />
  5. Treść: <input type='radio' name='opcja' value='tresc' />
  6. <input type='text' size='40' name='fraza' class='edit'>
  7. <input type='submit' value='' class='search'>
  8. </form>

To teraz, jak rozumiem, powinien wyglądać tak: (IMG:style_emoticons/default/questionmark.gif)
  1. <?php
  2. $formData = array(
  3. 'autor' => !isset($_GET['autor']) ? null : $_GET['autor'],
  4. 'tytul' => !isset($_GET['tytul']) ? null : $_GET['tytul'],
  5. 'tresc' => !isset($_GET['tresc']) ? null : $_GET['tresc'],
  6. 'fraza' => !isset($_GET['fraza']) ? null : $_GET['fraza'],
  7. );
  8. ?>
  9. <form method="get" action="cpax.php?go=szukaj">
  10. <input type="hidden" name="go" value="szukaj" class="">
  11. Autor: <input type="radio" name="opcja" value="<?php echo $formData["autor"];?>" />&nbsp;&nbsp;&nbsp;
  12. Tytuł: <input type="radio" name="opcja" value="<?php echo $formData["tytul"];?>" checked="checked" />&nbsp;&nbsp;&nbsp;
  13. Treść: <input type="radio" name="opcja" value="<?php echo $formData["tresc"];?>" />&nbsp;&nbsp;&nbsp;
  14. <input type="text" size="40" name="fraza" class="edit" value="<?php echo $formData["fraza"];?>">
  15. <input type="submit" value="" class="search">
  16. </form></font>

Jak przechwycić to z radio?

Ten post edytował Kshyhoo 20.01.2010, 10:52:49
Go to the top of the page
+Quote Post
thek
post
Post #9





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




Najprostsza wersja to "weź i zapamiętaj w sesji co masz pod tytul i fraza" (IMG:style_emoticons/default/smile.gif) Te dane potem z sesji przekaż do zapytania ze zmienionym już page pobranym z GET (IMG:style_emoticons/default/winksmiley.jpg) Możliwości jest wiele. Ja choćby zmienne z sesji w ten sposób przerobiłem do formy, która tworzy wyszukiwarkę SEO-friendly linków, a z kolei znajomy zrobił cały serwis jako niejawne wywołanie wyszukiwarki. Po prostu linki w całym serwisie to tak naprawdę front na silnik wyszukiwawczy. Link z kategorii czy czegokolwiek to po prostu rozbicie na parę klucz => wartość, co po stronie silnika ładnie tworzy odpowiednie zapytania do bazy.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #10





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




No dobra, w sesji. Zrobiłem tak, jak w przykładzie nospora, i nie przesyła mi do sesji.
Go to the top of the page
+Quote Post
nospor
post
Post #11





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Zrobiłem tak, jak w przykładzie nospora, i nie przesyła mi do sesji.
No popatrz, a mi przesyła (IMG:style_emoticons/default/smile.gif)
Sorki, ale juz nie raz slyszalem: zrobilem tak jak on, ale mi nie dziala.... A po pokazaniu kodu okazalo się, ze jednak nie zrobił dokładnie tak jak on (IMG:style_emoticons/default/winksmiley.jpg)

pokaz kod
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #12





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Wydaje mi się, że $_POST['oursubmit'] jest pusta (IMG:style_emoticons/default/winksmiley.jpg) , bo:
Cytat
POST: Array
(
[go] => szukaj
[opcja] =>
[fraza] => aaa
[oursubmit] =>
)

Cały kod:
  1. <?php
  2. if (!empty($_POST['oursubmit'])) {
  3. $_SESSION['form'] = array(
  4. 'autor' => $_POST['autor'],
  5. 'tytul' => $_POST['tytul'],
  6. 'tresc' => $_POST['tresc'],
  7. 'fraza' => $_POST['fraza'],
  8. );
  9. }
  10. $formData = array(
  11. 'autor' => !isset($_SESSION['form']) ? null : $_SESSION['form']['autor'],
  12. 'tytul' => !isset($_SESSION['form']) ? null : $_SESSION['form']['tytul'],
  13. 'tresc' => !isset($_SESSION['form']) ? null : $_SESSION['form']['tresc'],
  14. 'fraza' => !isset($_SESSION['form']) ? null : $_SESSION['form']['fraza'],
  15. ); echo $_POST['oursubmit'];
  16. ?>
  17. <div class="kontener"><font class="nag1">
  18. <form method="post" action="cpax.php?go=szukaj" name="formData">
  19. <input type="hidden" name="go" value="szukaj" class="">
  20. Autor: <input type="radio" name="opcja" value="<?php echo $formData["autor"];?>" />   
  21. Tytuł: <input type="radio" name="opcja" value="<?php echo $formData["tytul"];?>" checked="checked" />   
  22. Treść: <input type="radio" name="opcja" value="<?php echo $formData["tresc"];?>" />   
  23. <input type="text" size="40" name="fraza" class="edit" value="<?php echo $formData["fraza"];?>">
  24. <input type="submit" value="" class="search" name="oursubmit">
  25. </form></font></div>

Nie wiem też, czy tak mogę "zapodać" z radio?

Ten post edytował Kshyhoo 20.01.2010, 12:04:39
Go to the top of the page
+Quote Post
nospor
post
Post #13





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




no bo dla submita nie nadałeś wartosci: value=""
Skoro tak sie bronisz z tą wartością to zamiast:
if (!empty($_POST['oursubmit']))
daj:
if (isset($_POST['oursubmit']))

Widzisz, nie zrobiłeś dokładnie tak samo jak ja (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #14





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




A no tak. To dlatego, że mam graficzny przycisk i napis wyłazi (IMG:style_emoticons/default/winksmiley.jpg) No teraz:

Cytat
POST: Array
(
[go] => szukaj
[opcja] =>
[fraza] => aa
[oursubmit] =>
)
SESSION: Array
(
[form] => Array
(
[autor] =>
[tytul] =>
[tresc] =>
[fraza] => aa
)
)
Go to the top of the page
+Quote Post
nospor
post
Post #15





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




no ale do sesji zapisujesz z forma rzeczy, ktorych w formie nie ma, takie jak: autor, tresc, tytul.
Ty nie wymagasz za duzo od kodu co napisalem? Myslisz ze sam z siebie dorzuci ci pozostałe pola? (IMG:style_emoticons/default/winksmiley.jpg)

ps: aa, widze ty to probujesz w dziki sposob w radio przekazac
poczytaj najpierw jak zachowuje się pole RADIO bo widzę nie rozumiesz tego.
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #16





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Hmm, wciąż mam [oursubmit] => puste, nie wiem, dlaczego.
Go to the top of the page
+Quote Post
nospor
post
Post #17





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




no bo dla oursubmit nie przekazałeś wartosci. dlatego kazałem ci zamienic warunek na isset()
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #18





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Zmieniłem, Wodzu:
  1. if (isset($_POST['oursubmit'])) {
  2. $_SESSION['form'] = array(
  3. 'fraza' => $_POST['fraza'],
  4. 'opcja' => $_POST['opcja'],
  5. );
  6. }


Ten post edytował Kshyhoo 20.01.2010, 13:09:22
Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




No i super. Jeszcze jakis problem? Jak tak to od razu pisz a nie zmuszasz nas do dopytywania ciebie.
A jak już nie ma problemu to też napisz: dziękuję (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Kshyhoo
post
Post #20





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Ale ja zmieniłem wcześniej i dalej mam pusto ;( Googluję na ten nieszczęsny radio... Teraz mam tak:
  1. <?php
  2. if (isset($_POST['oursubmit'])) {
  3. $_SESSION['form'] = array(
  4. 'fraza' => $_POST['fraza'],
  5. 'opcja' => $_POST['opcja'],
  6. );
  7. }
  8. $formData = array(
  9. 'fraza' => !isset($_SESSION['form']) ? null : $_SESSION['form']['fraza'],
  10. 'opcja' => !isset($_SESSION['form']) ? null : $_SESSION['form']['opcja'],
  11. );
  12. ?>
  13. <div class="kontener"><font class="nag1">
  14. <form method="post" action="cpax.php?go=szukaj" name="formData">
  15. <input type="hidden" name="go" value="szukaj" class="">
  16. Autor: <input type="radio" name="<?php echo $formData["opcja"];?>" value="autor" />&nbsp;&nbsp;&nbsp;
  17. Tytuł: <input type="radio" name="<?php echo $formData["opcja"];?>" value="tytul" checked="checked" />&nbsp;&nbsp;&nbsp;
  18. Treść: <input type="radio" name="<?php echo $formData["opcja"];?>" value="tresc" />&nbsp;&nbsp;&nbsp;
  19. <input type="text" size="40" name="fraza" class="edit" value="<?php echo $formData["fraza"];?>">
  20. <input type="submit" value="" class="search" name="oursubmit">
  21. </form></font></div>

i nadal pusto ;(

Ten post edytował Kshyhoo 20.01.2010, 13:35:32
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 08:53