Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Ucieczka z drzewa if'ów jednym else?
Forum PHP.pl > Forum > Przedszkole
nekomata
A więc tak , wziąłem się za swój pierwszy poważniejszy projekcik parę dni temu i zastanawiam się nad pewnym faktem ... załóżmy że mam taki o to kod :
  1. if(isset($_GET['page'])){
  2. if(preg_match('#([0-9]{0,5})#',$_GET['page'])){
  3. $_GET['page'] = ($_GET['page']-1)*10;
  4. if($_GET['page']<0){
  5. $_GET['page']=0;
  6. }
  7. $news = mysqli_query($dbc,'SELECT * FROM news ORDER BY id DESC LIMIT '.$_GET['page'].',10');
  8. if(mysqli_num_rows($news)==0){
  9. $news = mysqli_query($dbc,'SELECT * FROM news ORDER BY id DESC LIMIT 10');
  10. }
  11. }
  12. else{
  13. $news = mysqli_query($dbc,'SELECT * FROM news ORDER BY id DESC LIMIT 10');
  14. }
  15. }
  16. else{
  17. $news = mysqli_query($dbc,'SELECT * FROM news ORDER BY id DESC LIMIT 10');
  18. }

Czy jest możliwość pominięcia
  1. else{
  2. $news = mysqli_query($dbc,'SELECT * FROM news ORDER BY id DESC LIMIT 10');
  3. }
które jest za każdym razem takie samo , jeśli if nie spełnia warunku? Myślałem o zastosowaniu goto w każdym else po za ostatnim , jednak zastanawiam się czy nie ma jakiejś prostszej metody?(Chodzi mi o sam układ nic więc nie dopatrujcie w tym kodzie bo go nawet nie przetestowałem tongue.gif)
Fifi209
Warunek gdzie jest isset możesz połączyć z tym preg_match, w dodatku wyrażenie masz źle napisane, brakuje początku ^ i końca $
nekomata
Nie musi być ^ i $ , w php wystarczy rozpocząć takim samym znakiem , # i | i jeszcze parę innych znaków się nadaję , ^ i $ używa się może w innych językach jakoś regexp'a inaczej , ja używałem # albo | i nigdy problemów nie było.Nie miałem na myśli konkretnie tego przykładu , miałem na myśli ucieczkę wielu if'ów do jednego else.
yevaud
zwazajac na to, ze taki blok powinien i tak byc funkcja lub metoda, to mozesz uzyc return
nekomata
Liczyłem na to że jestem nie zbyt dobrze wyedukowany i przeoczyłem jakąś magiczną funkcje albo coś... (strasznie by mi to życie ułatwiło biggrin.gif ) ale cóż jak magia to chyba inna część internetu... dzięki za pomoc , temat do zamknięcia.
thek
Logika nekomata... Logika układu jak sam zauważyłeś. Sprawdzenie zmiennej GET['page'] powinno być poza zapytaniami. Poza tym nie ma sensu sprawdzać, czy ktoś nie walnął za wysokiej strony przez GET smile.gif Wyświetli mu się i tak pusta.
  1. $page=1;
  2. if( isset($_GET['page'] ) && is_digit( $_GET['page'] ) && $_GET['page'] > 1 ) { $page=$_GET['page']; }
  3. $news = mysqli_query($dbc,'SELECT * FROM news ORDER BY id DESC LIMIT '.(($page-1)*10).',10');

Ale jeśli się uprzesz to zawsze możesz na pałę po sprawdzeniu liczby wyników jeszcze raz ewentalnie wysłać. A czy to będzie strona pierwsza czy przeliczona strona ostatnia... Co za różnica wink.gif
Fifi209
Cytat(nekomata @ 4.04.2011, 09:29:08 ) *
Nie musi być ^ i $ , w php wystarczy rozpocząć takim samym znakiem , # i | i jeszcze parę innych znaków się nadaję , ^ i $ używa się może w innych językach jakoś regexp'a inaczej , ja używałem # albo | i nigdy problemów nie było

Odpal i zobacz różnicę:
  1. <?php
  2.  
  3. $string = '9345a';
  4.  
  5. var_dump(preg_match('#[0-9]{0,5}#', $string));
  6. var_dump(preg_match('#^[0-9]{0,5}$#', $string));
  7.  
  8. ?>
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.