Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] jak zabezpieczyc get przed pusta wartoscia?, oraz znakiem niealfanumerycznym...
lnn
post
Post #1





Grupa: Zarejestrowani
Postów: 361
Pomógł: 11
Dołączył: 17.12.2008
Skąd: LU

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


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 ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 10)
Spawnm
post
Post #2





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




daj
  1. <?php
  2. $x=(int)$_GET['id'];
  3.  
  4. if(is_numeric($x))
  5. ?>

i po sprawie
Go to the top of the page
+Quote Post
bliitz
post
Post #3





Grupa: Zarejestrowani
Postów: 155
Pomógł: 12
Dołączył: 5.04.2008

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


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
Go to the top of the page
+Quote Post
DREEMus
post
Post #4





Grupa: Zarejestrowani
Postów: 286
Pomógł: 34
Dołączył: 4.09.2008
Skąd: Wrocław

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


Ja jako laik (IMG:http://forum.php.pl/style_emoticons/default/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. ?>
Go to the top of the page
+Quote Post
Spawnm
post
Post #5





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




~bliitz słaby pomysł , jak by id miało byc do inca plików to już lepiej zrobić to z tablicą
poczytaj
Go to the top of the page
+Quote Post
lnn
post
Post #6





Grupa: Zarejestrowani
Postów: 361
Pomógł: 11
Dołączył: 17.12.2008
Skąd: LU

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


dzieki, dziala (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
gdy puste - blad
gdy zamiast liczb jest tekst - blad
jesli cyfra/liczba - ok

brakowalo "detali" (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
  1. <?php
  2. if (!is_numeric ($_GET['id'])) {
  3. echo "zly id";
  4. }
  5. ?>
Go to the top of the page
+Quote Post
Crozin
post
Post #7





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


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. ?>
Go to the top of the page
+Quote Post
bełdzio
post
Post #8





Grupa: Zarejestrowani
Postów: 690
Pomógł: 81
Dołączył: 6.04.2005
Skąd: Szczecin

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


mozna tez sie pobawic tym => http://www.beldzio.com/phpowe-filtry
Go to the top of the page
+Quote Post
lnn
post
Post #9





Grupa: Zarejestrowani
Postów: 361
Pomógł: 11
Dołączył: 17.12.2008
Skąd: LU

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


dzieki Crozin, faktycznie tez dziala (IMG:http://forum.php.pl/style_emoticons/default/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 ;/
Go to the top of the page
+Quote Post
Spawnm
post
Post #10





Grupa: Moderatorzy
Postów: 4 069
Pomógł: 497
Dołączył: 11.05.2007
Skąd: Warszawa




daj SELECT COUNT(id)
i chyba nie <0 tylko <1

Ten post edytował Spawnm 16.04.2009, 22:16:41
Go to the top of the page
+Quote Post
lnn
post
Post #11





Grupa: Zarejestrowani
Postów: 361
Pomógł: 11
Dołączył: 17.12.2008
Skąd: LU

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


ok dziala, dzieki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 15:51