Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]Problem z pobraniem zmiennej GET, wywala błąd
hyhyhy
post 25.02.2011, 17:08:22
Post #1





Grupa: Zarejestrowani
Postów: 135
Pomógł: 5
Dołączył: 6.02.2011

Ostrzeżenie: (0%)
-----


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.  
Go to the top of the page
+Quote Post
wNogachSpisz
post 25.02.2011, 20:08:03
Post #2





Grupa: Zarejestrowani
Postów: 1 233
Pomógł: 87
Dołączył: 6.03.2009

Ostrzeżenie: (40%)
XX---


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"])));



Ten post edytował wNogachSpisz 25.02.2011, 20:10:44
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 10:36