Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Ukrycie błedów mysql
Forum PHP.pl > Forum > PHP
Lethys
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?
szmerak
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ć.
IceManSpy
@up -> nie pokaże, ale nadal ostrzeżenie jest.
Powinieneś je wyeliminować.

Poza tym nie lepiej użyć funkcji is_int zamiast patternu?
szmerak
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ć.
croc
Przeczytajcie dokładnie przykłady: is_int. Ta funkcja to nie jest najlepszy wybór.
IceManSpy
Czemu?
Lethys
$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?
IceManSpy
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
croc
Cytat(IceManSpy @ 3.11.2011, 21:15:20 ) *
Czemu?

Bo dane z GET są zawsze typu tekstowego, a is_int('2') zwraca false.
viking
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
by_ikar
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.
kulczycki
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.
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.