Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] jak zabezpieczyc get przed pusta wartoscia?
Forum PHP.pl > Forum > Przedszkole
lnn
czytalem na temat najczestszych bledow i zglupialem juz jak zabezpieczyc to $_GET['id'] zeby ktos nie wyslal czasem pustego jesli link powinien wygladac np link.php?id=1 a wyglada link.php?id= lub link.php ( w tych 2 przypadkach zeby przerwalo dalsza akcje)

najchetniej chcialbym zeby sprawdzilo czy to znak alfanumeryczny i czy nie jest pusty

wyczytalem ze mozna tak
  1. <?php
  2. if (empty($_GET['id']) {  
  3. // wykonaj costam }
  4. // lub
  5. if (is_int($_GET['id'])) {
  6. // wykonaj costam }
  7. ?>

jeszcze o foreach i swich oraz ereg

ktora metoda sprawdzania jest najlepsza i ktora spelni moje oczekiwania? co polecacie ?
Spawnm
daj
  1. <?php
  2. $x=(int)$_GET['id'];
  3.  
  4. if(is_numeric($x))
  5. ?>

i po sprawie
bliitz
przykładowo:

  1. <?php
  2. switch( $zmienna )
  3. {
  4.    case '1' : index.php; break;
  5.    case '2' : test.php; break;
  6.    default: index.php; break;
  7. }
  8. ?>


Przy dołączaniu stron sprawdza się bardzo dobrze i jest bezpieczne
DREEMus
Ja jako laik smile.gif zrobiłbym tak:
http://pl.php.net/manual/pl/function.is-numeric.php
  1. <?php
  2. if ( is_numeric ( $_GET['id'] ) {
  3. //coś tam ...
  4. }
  5. ?>
Spawnm
~bliitz słaby pomysł , jak by id miało byc do inca plików to już lepiej zrobić to z tablicą
poczytaj
lnn
dzieki, dziala smile.gif
gdy puste - blad
gdy zamiast liczb jest tekst - blad
jesli cyfra/liczba - ok

brakowalo "detali" tongue.gif
  1. <?php
  2. if (!is_numeric ($_GET['id'])) {
  3. echo "zly id";
  4. }
  5. ?>
Crozin
Skorzystaj z kodu Spawnm'a, z tym że z jedną modyfikacją. Korzystanie z is_numeric() jest bez sensu - zawsze będzie to spełnione. Raczej sprawdzaj czy wartość aby przypadkiem nie jest równa zeru. Zero będzie w kliku przypadkach:
1) Gdy podano ...?id=0 - co jednak zapewne się nie zdarzy, bo w bazie danych numerowanie rozpoczyna się od 1
2) Gdy nie podano w ogóle zmienenj id
3) Gdy nie jest ona numeryczna (np.: " 23" (spacja), "ac2" itp.)

Dodatkowo by uniknąć błędów typu E_NOTICE (w przypadku nie podania zmiennej w adresie) sprawdzaj czy w ogóle ona istnieje.
Innymi słowy:
  1. <?php
  2.  
  3. $id = isset($_GET['id']) ? (int) $_GET['id'] : 0;
  4.  
  5. if($id === 0){
  6.  //nie podano lub podano bledne
  7. }else{
  8.  //podano poprawne id
  9. }
  10. ?>
bełdzio
mozna tez sie pobawic tym => http://www.beldzio.com/phpowe-filtry
lnn
dzieki Crozin, faktycznie tez dziala smile.gif
ale zauwazylem kolejny problem jesli ktos poda id ktory nie istnieje w bazie to omija wszystkie walidacje i wysyla maila z danymi ktore zostaly potwierdzone linkiem ;/ tzn puste..

  1. <?php
  2. $checkid = mysql_query("SELECT id FROM formularz WHERE id = '".$_GET['id']."'");
  3. $emailNotExist = mysql_result($checkid, 0);
  4. elseif ($emailNotExist < 0) {
  5.    echo"nie ma takiego id w bazie danych";
  6. }
  7. ?>

cos to nei dziala ;/
Spawnm
daj SELECT COUNT(id)
i chyba nie <0 tylko <1
lnn
ok dziala, dzieki smile.gif
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.