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 19.01.2010, 20:18:17
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 19.01.2010, 20:27:12
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? winksmiley.jpg Dane z wyszukiwarki też do sesji i po problemie.

Ten post edytował thek 19.01.2010, 20:28:08


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Kshyhoo
post 19.01.2010, 21:25:19
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 19.01.2010, 22:34:45
Post #4





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

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


Nie całe wyniki winksmiley.jpg Żebyś przechowywał w sesji którą "porcję" danych bierzesz winksmiley.jpg
Go to the top of the page
+Quote Post
Kshyhoo
post 19.01.2010, 22:56:48
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 20.01.2010, 10:08:58
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 20.01.2010, 10:32:16
Post #7





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




Tutaj o tym pisałem
http://nospor.pl/formularz-i-stronicowanie...-stanu-n26.html


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kshyhoo
post 20.01.2010, 10:36:19
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: 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 20.01.2010, 11:03:00
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" smile.gif Te dane potem z sesji przekaż do zapytania ze zmienionym już page pobranym z GET 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.


--------------------
Najpierw był manual... Jeśli tam nie zawarto słów mądrości to zapytaj wszechwiedzącego Google zadając mu własciwe pytania. A jeśli i on milczy to Twój problem nie istnieje :D
Go to the top of the page
+Quote Post
Kshyhoo
post 20.01.2010, 11:52:23
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 20.01.2010, 11:55:44
Post #11





Grupa: Moderatorzy
Postów: 36 557
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 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 winksmiley.jpg

pokaz kod


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kshyhoo
post 20.01.2010, 12:00:35
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 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 20.01.2010, 12:08:05
Post #13





Grupa: Moderatorzy
Postów: 36 557
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 tongue.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kshyhoo
post 20.01.2010, 12:28:02
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 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 20.01.2010, 12:31:51
Post #15





Grupa: Moderatorzy
Postów: 36 557
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? 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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kshyhoo
post 20.01.2010, 12:46:49
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 20.01.2010, 12:56:34
Post #17





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




no bo dla oursubmit nie przekazałeś wartosci. dlatego kazałem ci zamienic warunek na isset()


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kshyhoo
post 20.01.2010, 13:07:00
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 20.01.2010, 13:10:17
Post #19





Grupa: Moderatorzy
Postów: 36 557
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ę smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Kshyhoo
post 20.01.2010, 13:23:27
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
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.08.2025 - 03:44