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 |
|
|
|
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 (IMG:style_emoticons/default/smile.gif) ..dlatego nie zauważyłam że zamieściłam z GET... 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 |
|
|
|
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 |
|
|
|
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 |
|
|
|
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 (IMG:style_emoticons/default/wink.gif) Jak raz coś przepuścisz przez md5 lub sha1 to już tego nie odszyfrujesz.
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 |
|
|
|
![]() ![]() |
|
Aktualny czas: 24.12.2025 - 18:17 |