Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Notice: Undefined index - jak sobie radzić nie zaciemniając kodu?
qrzysztof
post
Post #1





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

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


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ę (IMG:style_emoticons/default/smile.gif)



Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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.
Go to the top of the page
+Quote Post
by_ikar
post
Post #3





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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


Ten post edytował by_ikar 9.12.2011, 15:35:02
Go to the top of the page
+Quote Post
qrzysztof
post
Post #4





Grupa: Zarejestrowani
Postów: 220
Pomógł: 19
Dołączył: 25.04.2009

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


No proszę, proste ale sprytne (IMG:style_emoticons/default/smile.gif) I nie zaciemnia kodu.
Go to the top of the page
+Quote Post
grzeee
post
Post #5





Grupa: Zarejestrowani
Postów: 102
Pomógł: 5
Dołączył: 24.11.2006

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


mi się też podoba, poza "zaciemniania" kodu to zawsze też ograniczy błędy/literówki jeśli tak można to nazwać.

Ten post edytował grzeee 9.12.2011, 15:54:46
Go to the top of the page
+Quote Post
by_ikar
post
Post #6





Grupa: Zarejestrowani
Postów: 1 798
Pomógł: 307
Dołączył: 13.05.2009
Skąd: Gubin/Wrocław

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


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');


(IMG:style_emoticons/default/wink.gif)

Ten post edytował by_ikar 9.12.2011, 17:10:46
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 - 10:55