[php] jak wyszukac cos w bazie z jednym polem SEARCH

0

dzis jest 2 dzien i nie wiem jak sobie z tym poradzic kombinuje na rozne sposoby i nie wiem czy to co mi sie udal ozrobic jest dobre wiec nie bede zdradzal jak zrobilem tylko chcialem porsisc o jakas podpowiedz co wybran najlepiej:

Mam w bazie tabelke nazywa sie USERS
i w tej tabelce jest kilka pol:
id,name,suranme,wojewodztwo,ulica,miasto itd

mam teraz formularz ktory ma jedno POLE do wpisywania slowa
i gzuik do wysylania formularza

to pole nazywa sie SEARCH czyli zmienna $search zawiera slowo
ktorego szukam w bazie:

SELECT id,name,surname,email,level
             FROM users 
             WHERE name LIKE '%$search%',
             OR surname LIKE '%$search%'
             OR ulica LIKE '%$search%'   ";

to takie zapytanie bedzie zle ?

jak to zrobic zeby zapytac ale nie uzytwajac wiecej jak jedno pole w formularzu ?

moze zapytac najpierw o jedno pole jesli bedzie puste
to zapytac o kolejne ? jakie jest najlepsze wyjscie

0

wiesz ja bym wyłączył register_globals, bo to nie jest specjalnie bezpieczne, i perzefiltrował to co user wsadzi do pytanka, bo jest możliwe, że może się dowiedzieć czegoś, czego nie powinien wiedzieć. poza tym to zaputanie wydaje się być poprawne.

0

a te filtry itd to co dokladnie powinienem zrobic zeby to bylo bezpieczne

0
mysql_escape_string()

powinno wystarczyć.

0

a to escape to kiedy stosowac do zmiennej z tego zapytanai w wformularzu SEARCH co to robi ta escape ? trrzeba to pozniej odwracac jak sie wyciaga dane z bazy czy to jednostronna funkcja ?
dzikeuje za pomoc wszystkim ktorzy mieli chwile czasu :)

0

escape cośtam zamienia string na dodawanie np backslashów przed cudzysłowami, dzięki temu jak masz zapytanie załóżmy:

"SELECT * FROM costam WHERE pole='$wartosc'"

to jak ktoś da w polu wartość string taki:

nic' OR 1='1

to wtedy wykona się:

SELECT * FROM costam WHERE pole='nic' OR 1='1'

czego wynikiem będzie wyświetlenie wszystkich rekordów bo o ile nawet w polu pole nie ma wartości "nic" to jednak jedynka jedynce zawsze równa, a po zastosowaniu escape:

"SELECT * FROM costam WHERE pole='".mysql_escape_string($wartosc)."'"

to nawet jak ktoś da spreparowany tekst podany powyżej to się tylko wykona:

SELECT * FROM costam WHERE pole='nic' OR 1='1'

czyli nic groźnego i zgodne z naszymi przewidywaniami, jest to więc czynność jednostronna stosowana przed dawaniem zmiennych do zapytania

nie stosowanie tego porównywalne do ofiarowania komuś czeku bez zakończenia kwoty ",-" dzięki czemu ktoś sobie może dopisać parę zer ;P

0

:0 dziekuje za wyjasnienie juz to zastosowalem wlasnie dzieki temu chyba moge czuc ze jestem krok dalej od niechcianych niespodzianek :) kurcze fajnie tak tworzyc i krok po kroku robic siedze juz na d tm 10 dni :) i powoli zblizam sie do konca hihi ale jest juz niezle :) dziek wszytskim :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1