Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Ukrycie błedów mysql
Lethys
post
Post #1





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

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


Witam,

W skrypcie mam zabezpieczenie, żeby zamiast id nie mozna bylo pisać liter


  1. //link
  2. <a href=costman.php?finish=$record[id]>
  3.  
  4. //kod
  5. if ($finish) {
  6.  
  7.  
  8.  
  9. if(!preg_match('/^([0-9]+)$/i', $finish)){
  10. $problem = TRUE;
  11. echo("<p id='uwaga'><h2><img border=\"0\" src=\"images/cancel.png\" width=\"32\" height=\"32\" alt=\"Cel ukończony\"> Użyto niedozwolonych znaków w numerze celu.</h2></p><br>");
  12. }


I kiedy wpisyje np.costam.php?finish=18a

to co prawda pojawia się napis "Użyto niedozwolonych znaków w numerze celu." ale przed się pojawia:


Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in D:\programy\WebServ\httpd\costam\costman.php on line 33


Da się jakoś usunąć pokazywanie tego błędy mysql?

Ok znalazłem,

error_reporting(E_ALL);
ini_set('display_errors','0');

ale czy mozna tak ukrywac bledy, nie jest to jakis mega blad?


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
szmerak
post
Post #2





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

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


Musisz dać
@mysql_fetch_array(); -- wtedy nie wywali ci żadnego błędu

Edit: ale skoro wywala błąd mysql to znaczy że tak czy tak do pytania ten ciąg jest wsadzany. daj intval przy id i to powinno załatwić.

Ten post edytował szmerak 3.11.2011, 20:28:40
Go to the top of the page
+Quote Post
IceManSpy
post
Post #3





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


@up -> nie pokaże, ale nadal ostrzeżenie jest.
Powinieneś je wyeliminować.

Poza tym nie lepiej użyć funkcji is_int zamiast patternu?

Ten post edytował IceManSpy 3.11.2011, 20:29:15


--------------------
Go to the top of the page
+Quote Post
szmerak
post
Post #4





Grupa: Zarejestrowani
Postów: 286
Pomógł: 12
Dołączył: 23.11.2006
Skąd: WL

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


Pytał się o pokazywanie błędu więc odpowiadam tongue.gif
A tak wogóle to niech zrobi to z intval ja tak przynajmniej zawsze robię.
A jeśli chodzi o regularne to też bym użył is_int.

Przypuszczam że zmienna $problem jest ustawiana na true jeśli walidacja się nie powiedzie
czyli że
if(!$problem == TRUE)
{
mysql_fetch_array
}
Czyli skoro tak czy tak dochodzi do tego momentu to coś masz nie tak. Sprawdź wszystkie zmienne czy zawierają napewno co mają zawierać.

Ten post edytował szmerak 3.11.2011, 20:33:26
Go to the top of the page
+Quote Post
croc
post
Post #5





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Przeczytajcie dokładnie przykłady: is_int. Ta funkcja to nie jest najlepszy wybór.
Go to the top of the page
+Quote Post
IceManSpy
post
Post #6





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Czemu?


--------------------
Go to the top of the page
+Quote Post
Lethys
post
Post #7





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

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


$ukonczony = @mysql_fetch_array(mysql_query("select * from blablabla"));

Dodałem małpę przed zmienna i pomogło. Dlaczego? Co daje małpa przy zapytaniu do bazy?

Ten post edytował Lethys 3.11.2011, 22:28:05


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
IceManSpy
post
Post #8





Grupa: Zarejestrowani
Postów: 1 006
Pomógł: 111
Dołączył: 23.07.2010
Skąd: Kraków

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


Cytat(Lethys @ 3.11.2011, 22:22:43 ) *
Dodałem małpę przed zmienna i pomogło. Dlaczego? Co daje małpa przy zapytaniu do bazy?

Ukrywa warningi, ale ich nie eliminuje.
Temat: PHP Znak przed nazw zmiennej


--------------------
Go to the top of the page
+Quote Post
croc
post
Post #9





Grupa: Zarejestrowani
Postów: 706
Pomógł: 108
Dołączył: 12.03.2010

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


Cytat(IceManSpy @ 3.11.2011, 21:15:20 ) *
Czemu?

Bo dane z GET są zawsze typu tekstowego, a is_int('2') zwraca false.
Go to the top of the page
+Quote Post
viking
post
Post #10





Grupa: Zarejestrowani
Postów: 6 380
Pomógł: 1116
Dołączył: 30.08.2006

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


Na pewno nie powinieneś pisać kodu ukrywając błędy. Prędzej czy później zemści Ci się to. preg case insensitive (/i) trochę bez sensu dla liczb. Może rozważysz przejście na PDO gdzie masz i poprawne quotowanie, i możesz wskazać jak typ danych to jest PDO::PARAM_INT.

Poczytaj więcej w kursie: http://tworzenie-stron-www.org/article/10/...luge_baz_danych


--------------------
Go to the top of the page
+Quote Post
by_ikar
post
Post #11





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


Ogólnie to źle podszedłeś do tematu. Bo sprawdzałeś czy przekazywane dane to cyfry przed zapytaniem i w przypadku kiedy to nie była cyfra to trafiała prawdopodobnie pusta zmienna, i prawdopodobnie twój warunek jedynie wyświetlał komunikat że to nie jest cyfra. W sumie najpierw powinieneś wysłać zapytanie do bazy z danymi które otrzymałeś (oczywiście dane escapowane, lub bindowane w pdo) i sprawdzić ile otrzymasz wyników (mysql_num_rows/pdo->rowCount itp), jeżeli zero to dopiero wtedy wywalasz informację o błędzie, że takiej strony nie ma.
Go to the top of the page
+Quote Post
kulczycki
post
Post #12





Grupa: Zarejestrowani
Postów: 76
Pomógł: 8
Dołączył: 10.11.2010
Skąd: Polska,Katowice

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


Zastąp handler za wyświetlanie błędów tak by logował Ci wszystko do pliku. Musisz na czymś monitorować pracę systemu. Później wyłącz wyświetlanie na stronie.
Pamiętaj - błędów się nie maskuję, ukrywa się je na tyle ile można na public.

Ten post edytował kulczycki 4.11.2011, 10:34:28
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 Aktualny czas: 21.08.2025 - 01:11