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

Odpowiedz Nowy wątek
2005-10-31 17:39
wwww
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

Pozostało 580 znaków

2005-10-31 17:58
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.

Pozostało 580 znaków

2005-10-31 17:59
wwww
0

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

Pozostało 580 znaków

2005-10-31 19:41
0
mysql_escape_string()

powinno wystarczyć.

Pozostało 580 znaków

2005-10-31 20:29
wwww
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 :)

Pozostało 580 znaków

2005-10-31 21:25
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


Dwie zasady gwarantujące sukces:
1. Nigdy nie mów nikomu wszystkiego<span style="color: white">

Pozostało 580 znaków

2005-11-01 00:23
wwww
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 :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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