![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 2.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Witam, zrobiłam wyszukiwarkę na bazie typu INNOdb a więc bez full-textu.. W momencie gdy kliknę w przycisk "szukaj" są opcje:
1. wprowadzono słowo, jest w bazie --> wyświetla je 2. wprowadzono słowo, nie ma w bazie --> komunikat 3. nic nie wprowadozno --> komunikat No i w tym momencie 1wsze opcje działają a 3cia sie sypie tzn. zamisat komunikatu "w celu korzystania z wyszukiwarki treba coś wpisać" pojawia sie pusta strona ... wszytsko działa dobrze dopóki nie jest podpięte do diva ... w pliku index. php mam formularz
w pliku szukaj php
Są jakieś pomysły na rozwiązanie ? |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Linijke 10 z formularza zamień na to:
Linijke 5 z szukaj.php na to: Linijke 9 z szukaj.php na to:
Generalnie to wyjaśnij co ta linijka 9 oznacza? Co TO: w ogóle jest? Zobacz już co sam forumowy parser zrobił z tym fragmentem. Tłumaczę czemu Tobie to nie działało. W index.php w linijce 10 sprawdzasz czy wpisano tekst do pola wyszukaj. Przynajmniej zakładam, że taki był Twój zamiar. Jeśli wpisano to załączasz szukaj.php, jeśli nie to nie robisz nic. W szukaj.php znów sprawdzasz czy istnieje wartość pola wyszukaj, jeśli tak to 2 pierwsze przypadki Ci działają, natomiast 3 nie ma prawa działać bo w ogóle się plik szukaj.php nie wykona jeśli nie wpisano tekstu do tego pola (bo nie będzie include). Dlatego moje poprawki zmienią działanie kodu na taki: sprawdzamy czy kliknięto przycisk wysyłania forma, jeśli tak to includujemy szukaj.php. Następnie sprawdzamy czy jest ustawione pole wyszukaj, jeśli tak to zachodzą 2 pierwsze przypadki a jeśli jest puste to trzeci. I na koniec... 1) Radziłbym użyć metody POST zamiast GET. 2) Skrypt masz zupełnie niezabezpieczony przed sql injection, użyj przynajmniej mysql_real_escape_string albo addslashes. Ten post edytował sadistic_son 18.03.2011, 00:55:18 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 2.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Cytat (..) I na koniec... 1) Radziłbym użyć metody POST zamiast GET. 2) Skrypt masz zupełnie niezabezpieczony przed sql injection, użyj przynajmniej mysql_real_escape_string albo addslashes. odnośnie linijki 9.. wlasnie dlatego zamiescilam w komentarzu // szukaj!='' o jak wkleilam to powstawialo te spacje.. dodam ze w formularzu mam '' 1. POST użyłam wcześniej .. zamieszczony fragment był z kopi-kopii-kopiowanej pliku ![]() 2. właśnie z tym mam problem, jak mam formularz rejestracja, kontakt , logowania to też użyć tego? i jak potem wyciągam dane z bazy to trzeba jakoś to odszyfrowywac ?.. zamieszczam poniżej wyszukiwarkę sprawną CODE <body> <h2>Wyniki wyszukiwania</h2> <?php // program wyszukiwarki - SZUKAJ.php if (($_POST['wyszukaj'])) { $szukaj =$_POST['wyszukaj']; if ($szukaj!= '') { // sprawdzenie, czy użytkownik cokolwiek wpisał $szukaj=trim($szukaj); // usunięcie niepotrzebnych spacji $wyniki=mysql_real_escape_string($wyniki); $wyniki=explode(" ",$szukaj); $warunki=" (nazwa_uslugi LIKE '%$wyniki[0]%' )"; for ($i=1;$i<count($wyniki);$i++) { $warunki.=" and (nazwa_uslugi LIKE '%$wyniki[$i]%' )"; } // połączenie z bazą danych include("config.php"); /* Like - pozwala wyszukać dany ciąg w bazie danych % - symbolizuje dowolny inny ciąg znaków or pozwoli wyszukiwać usługę w nazwie i opisie usługi */ $pytanie_p = mysql_query("Select * From uslugi Where $warunki") or die('Invalid query: ' . mysql_error()); // zapytanie do bazy $liczba_rekordow = mysql_num_rows($pytanie_p); if ($liczba_rekordow==0) { echo "<br><p>Brak wyników dla wyszukianej frazy <strong>".$szukaj." </strong> </p>"; } else { echo " <br><p>Wyszukiwanie znalazło ".$liczba_rekordow." pasujących wyników do szukanego wyrażenia <strong>".$szukaj." </strong> </p><br>"; echo "<table cellpadding=\"2\">"; print ('<tr>'); print ('<th>Nazwa usługi</th>'); print ('<th>Opis usługi</th>'); print('<th> Cena w zakładzie</th>'); print ('</tr>'); while($rekord_p = mysql_fetch_array($pytanie_p)) { echo "<tr>"; echo "<td>".$rekord_p['nazwa_uslugi']."</td>"; echo "<td>".$rekord_p['opis_uslugi']."</td>"; echo "<td>".$rekord_p['cena_w_zakladzie']."</td>"; print ('</tr>'); } //koniec while print ('</table>'); } //koniec else wyszukiwanych fraz }} else { echo "<br><p>Należy coś wpisać by skorzystać z wyszukiwarki! </p>"; } ?> |
|
|
![]()
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Umieść ten powyższy kod w znacznikach forumowych php a nie code.
W tym kodzie znów stosujesz: Zainteresuje się funkcjami isset oraz empty i popraw to tak jak Ci podałem w pierwszym poście. Aby zabezpieczyć się przed sql injection każde dane trafiając z formularza do bazy powinny zostać przepuszczone przez mysql_real_escape_string . Czyli dla powyższego przykładu tuż przed użyciem zmiennej $szukaj w zapytaniu robisz takie coś: Ten post edytował sadistic_son 18.03.2011, 15:32:51 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 2.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Umieść ten powyższy kod w znacznikach forumowych php a nie code. W tym kodzie znów stosujesz: Zainteresuje się funkcjami isset oraz empty i popraw to tak jak Ci podałem w pierwszym poście. Aby zabezpieczyć się przed sql injection każde dane trafiając z formularza do bazy powinny zostać przepuszczone przez mysql_real_escape_string . Czyli dla powyższego przykładu tuż przed użyciem zmiennej $szukaj w zapytaniu robisz takie coś: 1. isset nie stosowałam bo nie wyskoczył mi komunikat... teraz wiem że musiałam przesunąc kllamrę }... 2. isset empty zmienna sesyjna istnieje, zmienna pusta, na necie nawet gdzies jest to opisane wraz z przykładami co która pokazuje w momenatch null, 0 itd.. 3. czyli te mysql_real_escape_string może być w tym miejscu czy jeszcze wcześniej ? |
|
|
![]()
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Z formularza przyjmujesz $_POST['wyszukaj'] i zapisujesz do $szukaj, więc to ta zmienna powinna być potraktowana mysql_real_escape_string.
Czyli dla powyższego przykładu tuż przed użyciem zmiennej $szukaj w zapytaniu robisz takie coś... Co jest niezrozumiełego w tym zdaniu? Dalej.... zmienna $wyniki jest tablicą po przypisaniu do niej wyników z explode. Nie możesz jej wrzucić do zapytania. Poza tym po co w formularzu masz 2 pola o tej samej nazwie wyszukaj? I tak tylko jedno zostanie wysłane, tzn wartość pierwszego zostanie nadpisana wartością drugiego. czyli te mysql_real_escape_string może być w tym miejscu czy jeszcze wcześniej ? Ma być jak najbliżej zmiennej odebranej z forma, której używasz w zapytaniu do bazy.Ten post edytował sadistic_son 18.03.2011, 16:38:04 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 2.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Dalej.... zmienna $wyniki jest tablicą po przypisaniu do niej wyników z explode. Nie możesz jej wrzucić do zapytania. faktycznie zamotałam się ... O co chodzi z tym wynikiem z explode? index.php
szukaj.php
|
|
|
![]()
Post
#8
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Co ma robić ta wyszukiwarka jeśli wpiszę np. ala kot pies?
1) Ma szukać wszystkich rekordów zawierających słowa ala, kot i pies? 2) Ma szukać wszystkich rekordów zawierających przynajmniej jedno z tych słow? 3) Ma szukać wszystkich rekordów zawierających ciąg ala kot pies? Które? 1,2 lub 3? Linijki 5 i 6 zamień miejscami w szukaj.php i obie przenieś do linijki 8. Co ma być w zmiennej $wyniki itd. napisze jak mi odpowiesz na powyższe pytanie. Ten post edytował sadistic_son 18.03.2011, 19:01:02 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 14 Pomógł: 0 Dołączył: 2.03.2011 Ostrzeżenie: (0%) ![]() ![]() |
Co ma robić ta wyszukiwarka jeśli wpiszę np. ala kot pies? 1) Ma szukać wszystkich rekordów zawierających słowa ala, kot i pies? 2) Ma szukać wszystkich rekordów zawierających przynajmniej jedno z tych słow? 3) Ma szukać wszystkich rekordów zawierających ciąg ala kot pies? czy można to napisac tak : ?... bo w jakimś skrypcie znalazłam tak Jak dostąd wpisałam np mycie modelowanie --> to wychodził mi rekord idealnie w to pasujący.. ale opcja 2 by mi bardziej pasowała .. jak dobrze to rozumiem to pwoinno mi przy ciagu męskie strzyżenie odszukać wszystkie rekordy które mają słowo strzyżenie lub męskie .. |
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 1 495 Pomógł: 245 Dołączył: 1.07.2009 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
Tak, hasła do bazy wysyła się zahashowane algorytmem np. md5. Nie radzę tego robić z pozostałymi danymi
![]() Cytat ak dobrze to rozumiem to pwoinno mi przy ciagu męskie strzyżenie odszukać wszystkie rekordy które mają słowo strzyżenie lub męskie .. Dobrze rozumiesz, teraz tak to zadziała:
Ten post edytował sadistic_son 18.03.2011, 19:29:33 -------------------- Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami... -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc! -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+- |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 26.06.2025 - 12:48 |