Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Notice: Undefined index - jak sobie radzić nie zaciemniając kodu?
Forum PHP.pl > Forum > Przedszkole
qrzysztof
Powiedzmy, że mam kod:

  1.  
  2. if ( $_POST['wyslij']=='zaloguj' )
  3. {
  4. //zrob cos
  5. }
  6. if ( $_POST['wyslij']=='wyloguj' )
  7. {
  8. //zrob cos innego
  9. }


Powiedzmy też, że postanowiłem ustawić raportowanie błędów na poziomie E_ALL. Powyższy kod spowoduje w tym układzie wyświetlenie Notice: Undefined index.

Jak sobie radzicie z tym problemem? Przez problem rozumiem samo zgłaszanie błędu, nie jego wyświetlanie na wyjściu. Może tak:

  1.  
  2. if ( isset($_POST['wyslij']) && $_POST['wyslij']=='zaloguj' )
  3. {
  4. //zrob cos
  5. }
  6. if ( isset($_POST['wyslij']) && $_POST['wyslij']=='wyloguj' )
  7. {
  8. //zrob cos innego
  9. }

"Trochę" to zaciemnia kod. Chyba ciut lepiej zadeklarować wszystkie spodziewane zmienne:
  1. $POST['wyslij'] = (isset($_POST['wyslij']) ? $_POST['wyslij'] : null ;
  2. if ($_POST['wyslij']=='zaloguj' )
  3. {
  4. //zrob cos
  5. }
  6. if ($_POST['wyslij']=='wyloguj' )
  7. {
  8. //zrob cos innego
  9. }

Ciekawi mnie jak wygląda taki kod u purystów. Bo z faktu, że 95% ma wyłączone przynajmniej E_NOTICE zdaję sobie doskonale sprawę smile.gif



nospor
isset($_POST['wyslij']) &&
To jest dobre rozwiązanie.
Zaciemnia kod? Bez przesady

  1. $wyslij = (isset($_POST['wyslij']) ? $_POST['wyslij'] : null ;
  2. if ($wyslij=='zaloguj' )

To też jest dobre rozwiązanie.
by_ikar
  1. <?php
  2.  
  3. function getPostParametr($key, $default = null)
  4. {
  5. return isset($_POST[$key]) ? $_POST[$key] : $default;
  6. }


użycie:

  1. <?php
  2.  
  3. if(getPostParametr('login'))
  4. {
  5. //do something
  6. } elseif(getPostParametr('logout'))
  7. {
  8. //do something else
  9. }


przykład dla tablicy $_GET:

  1. <?php
  2.  
  3. function getParametr($key, $default = null)
  4. {
  5. return isset($_GET[$key]) ? $_GET[$key] : $default;
  6. }


użycie praktycznie takie same, zmienia się jedynie nazwa funkcji:

  1. <?php
  2.  
  3. if(getParametr('login'))
  4. {
  5. //do something
  6. } elseif(getParametr('logout'))
  7. {
  8. //do something else
  9. }
qrzysztof
No proszę, proste ale sprytne smile.gif I nie zaciemnia kodu.
grzeee
mi się też podoba, poza "zaciemniania" kodu to zawsze też ograniczy błędy/literówki jeśli tak można to nazwać.
by_ikar
Cytat(grzeee @ 9.12.2011, 15:54:33 ) *
mi się też podoba, poza "zaciemniania" kodu to zawsze też ograniczy błędy/literówki jeśli tak można to nazwać.


Mało tego, prócz przez was wymienionych "zalet", jest jeszcze jedna - wartość domyślna. Przydatna, kiedy jakiegoś parametru nie ma, a oczekujemy konkretnej wartości. Osobiście w podobny sposób w swoim "systemie" bawię się z widokiem. Powiedzmy że twój system rozbija linki na pewne sekcje. Gdzie z przykładowego routingu:

Kod
/:module/:action.:format


dla linku:

Kod
example.com/myModule/myAction.html


powstaje taka tablica:

Kod
Array
(
    [module] => myModule
    [action] => myAction
    [format] => html
)


A co w przypadku kiedy nie używam w swoim systemie w adresach rozszerzenia html?

Kod
/:module/:action

Kod
example.com/myModule/myAction

Kod
Array
(
    [module] => myModule
    [action] => myAction
)


Odpowiedź prosta, podaje w domyślnym parametrze html, a wygląda to mniej więcej tak:

  1. $this->options['template'] = $this->moduleName.'.'.$this->actionName.'.'.$this->request->get('format', 'html');


wink.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.