Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Skrócenie sprawdzania if(isset($_POST['zmienna']) dla kilku zmiennych, Optymalizacja kodu pod względem czytelności i objętności :)
Apocalyptiq
post 19.04.2009, 10:23:50
Post #1





Grupa: Zarejestrowani
Postów: 230
Pomógł: 3
Dołączył: 8.01.2008

Ostrzeżenie: (10%)
X----


Dosyć uciążliwe jest sprawdzanie wszystkich potrzebnych zmiennych dla obsługi każdego formularza danego serwisu w php (szczególnie dotkneło mnie to podczas pisania gry via www, gdzie jest pełno formularzy):
  1. <?php
  2. if(empty($_POST['login']) || empty($_POST['pwd']) || empty($_POST['pwd2']) || empty($_POST['email']) || empty($_POST['teamName']) || empty($_POST['teamColor']) || empty($_POST['teamSubColor']))
  3.        $_SESSION['mesg']='Wypełnij wszystkie wymagane pola!';
  4.    else{...}
  5. ?>

I tego typu fragmentów kodu mam tam sporo, ale to pytam ogólnie, co do wszelkich projektów smile.gif Narazie wymyśliłem coś takiego:
  1. <?php
  2. # isset dla określonych zmiennych w tablicy
  3. function isset_array_vars($array,$vars){
  4.    $notset_vars=array();
  5.    foreach($vars as $key => $var)
  6.        if(!isset($array[$key])) $notset_vars[]=$var;
  7.    if($notset_vars) return implode(', ',$notset_vars);
  8.    else return true;
  9. }
  10.  
  11. # zastosowanie:
  12.    $check_isset=isset_array_vars($_POST,array('login'=>'login','pwd'=>'hasło','pwd_repeat'=>'powtórzone hasło'));
  13.    if($check_isset!==true)
  14.        $_SESSION['mesg']='Nie podałeś wszystkich wymaganych danych ('.$check_isset.')';
  15.    else{...}
  16. ?>

Jeżeli wszystkie podane zmienne są ustawione w danej tablicy, funkcja zwraca true, w przeciwnym wypadku - wyprzcinkowane nazwy (spolszczone, zrozumiałe dla człowieka) niepodanych zmiennych. No ale jest to jakoś mi sie wydaje na siłe zrobione, mam przeczucie że można to zrobić lepiej :-)
Macie jakieś pomysły albo patenty ze swoich projektów? smile.gif

Ten post edytował Apocalyptiq 19.04.2009, 10:27:46


--------------------
http://estender.net - profesjonalne strony i aplikacje internetowe (Ruby on Rails, Kohana PHP)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Kildyt
post 19.04.2009, 13:02:46
Post #2





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


Po co foreach? Ja bym to zrobił na pętli. For będzie najlepsze.
Jak już kantek napisał: rozróżnij isset i empty.

  1. <?php
  2. $check_isset=isset_array_vars($_POST,array('login'=>'login','pwd'=>'hasło','pwd_repeat'=>'powtórzone hasło'));
  3.   if($check_isset!==true)
  4.       $_SESSION['mesg']='Nie podałeś wszystkich wymaganych danych ('.$check_isset.')';
  5. ?>

Zmieniłbym na:
  1. <?php
  2. if($check_isset=isset_array_vars($_POST,array('login'=>'login','pwd'=>'hasło','pwd_repeat'=>'powtórzone hasło')))
  3.       $_SESSION['mesg']='Nie podałeś wszystkich wymaganych danych ('.$check_isset.')';
  4. ?>

TRUE powinno zwracać, jeżeli któreś pole zostało niewypełnione, a FALSE gdy wszystko jest dobrze.


--------------------
Go to the top of the page
+Quote Post
pejott
post 19.04.2009, 14:24:55
Post #3





Grupa: Zarejestrowani
Postów: 81
Pomógł: 4
Dołączył: 15.02.2009

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


Cytat(Kildyt @ 19.04.2009, 14:02:46 ) *
TRUE powinno zwracać, jeżeli któreś pole zostało niewypełnione, a FALSE gdy wszystko jest dobrze.


Trochę to nielogiczne, zważywszy na nazwę funkcji.
Poza tym, foreach to też pętla.
Już ktoś napisał, abyś zainteresował się walidatorami, bo zazwyczaj sprawdzasz kilka rzeczy na raz.

Na przykład, http://framework.zend.com/manual/en/zend.validate.html.

Pozdrawiam.
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.08.2025 - 14:59