Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z pobraniem zmiennej GET, wywala błąd
Forum PHP.pl > Forum > Przedszkole
hyhyhy
Witam,

Na początku chciałem zaznaczyć, że jestem początkujący.
Napisałem prostą wyszukiwarkę, przy czym pobiera ona metodą GET oprócz szukanej frazy, jeszcze 3 parametry:
- od i do -> wstawiam w zapytanie LIMIT $od, $do
- show -> w zaleznosci od wartosci szuka w jednej z dwóch tabel

Poniżej wrzucę kod, a teraz moje pytanie:
Jak zrobić, żeby plik search.php (mój sposób nie działa) dobierał sobie te parametry, powiedzmy, że mogę zrobić link z formularza, ale wejdzie jakiś "chaker" i zacznie wpisywać głupoty w URL, a mysql będzie sypał błędami (chyba że to nieszkodzi, bo i tak zobaczy "nie ma wyników do wyświetlenia")

z formu przechodzi normalnie, tylko wystarczy, żeby ktoś dwukrotnie kliknął "szukaj" i się sypie.
Za to jak wpisze ręcznie URL to wszystko jest git, więc chodzi na pewno o to.
  1. <?php
  2.  
  3. $show = (int)$_GET["show"];
  4. if (empty($show)) {$show = rand(1,2);}
  5. else {
  6. if ($show == 1) {$tablica = "pierwsza";}
  7. else {$tablica = "druga";}
  8. }
  9.  
  10.  
  11. $od = (int)$_GET["od"];
  12. $do = (int)$_GET["do"];
  13. if (!isset($od)){$od = 0;}
  14. if (!isset($do)) {$do = 30;} //tu juz probowalem na wszelkie sposoby,
  15. if (empty($od)) {$od = 0;}
  16. if (empty($do)){$do = 30;}
  17.  
wNogachSpisz
Jest całkiem sporo błędów logicznych w Twoim kodzie..
  1. $od = (int)$_GET["od"];
  2. if (!isset($od)){$od = 0;}

To nie ma sensu, isset() nigdy nie zwróci false, ponieważ kod "$od = (int)$_GET["od"];"
zadeklaruje zmienną $od...
Napisałeś to prawie dobrze, jednak powinno być:
  1. $od = isset($_GET["od"]) ? (int)$_GET["od"] : 0;

Lub jeśli nie kumasz jeszcze takich konstrukcji, nieco dłuższy w zapisie ekwiwalent:
  1. if ( isset($_GET["od"])) {
  2. $od = (int)$_GET["od"]
  3. }
  4. else {
  5. $od = 0;
  6. }

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

Popiepszyłeś troche kolejność...

mysql_real_escape_string()
Dawaj zawsze na końcu (z lewej strony), manipulowanie przy stringu pociągniętym już tą funkcją przed dopisaniem do zapytania SQL to proszenie się o problemy.

strip_tags(htmlspecialchars(
Zdecyduj się na coś... strip_tags() będzie miał dokładnie NIC do roboty kiedy dasz mu string wcześniej potraktowany przez htmlspecialchars()

W zależności co chciałeś uzyskać, ja bym to zrobił tak:
  1. $phrase = mysql_real_escape_string(htmlspecialchars(trim($_GET["phrase"])));

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.