Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie dynamicznego switch
Forum PHP.pl > Forum > PHP
futura
Witam,

Próbuje utworzyć dynamicznego switcha.

  1. $pliki = $core->query_result; //przypisanie listy dostępnych plików z bazy danych
  2. switch($p)
  3. {
  4. for($i=0;$i<count($pliki);$i++)
  5. {
  6. case "'".$pliki[$i]['pl_parametr_p']."'": $plik = "'dzialy/'".$pliki[$i]['pl_nazwa_pliku']."'"; break;
  7. }
  8. default: $plik = "dzialy/Glowna.inc.php"; break;
  9. }


Przykładowy case miałby wyglądać tak:

  1. case "centra_kosztowe": $plik = "dzialy/Centra_kosztowe.inc.php"; break;


gdzie "centra_kosztowe" to pl_parametr_p, a "Centra_kosztowe.inc.php" to pl_nazwa_pliku.

Problem jednak w tym, że nie można użyć pętli for w swtich.

Macie może jakiś innym pomysł na generowanie dynamiczne switcha?
everth
To co robisz jest bez sensu. Algorytm nie może sam siebie zmieniać (no w zasadzie nie może). Spróbuj lepiej zrobić tak: dostajesz parametr - sprawdasz go w bazie, jeśli istnieje to przekierowuje, w innym wypadku daje jakiś default (np. zły adres).
Fifi209
Teoretycznie można wygenerować stringa i potem eval ale to jest ZŁE ROZWIĄZANIE.
futura
Cytat
Spróbuj lepiej zrobić tak: dostajesz parametr - sprawdasz go w bazie, jeśli istnieje to przekierowuje, w innym wypadku daje jakiś default (np. zły adres).


Nie mogę sprawdzać czy istnieje taki parametr w bazie danych. Podany parametr jest zdefiniowany w bazie danych i na podstawie pobranej listy z bazy danych odnośnie dostępnych plików chcę wygenerować listę odnośników do poszczególnych działów.
everth
W takim razie co robi element $p w tym switchu? Wywołujesz go ręcznie?
futura
$p jest to parametr z linków, które próbuje utworzyć dynamicznie.
everth
Z tego co widzę to masz kolumnę 'pl_parametr_p' i odpowiadającą kolumnę 'pl_nazwa_pliku'. Skoro jako case podajesz parametr p, to co za problem odpytać bazę po parametrze p i przekierować pod odpowiadającą jej nazwę pliku?
futura
  1. if($user->logged == 1)
  2. {
  3. switch($p)
  4. {
  5. case "nowy_klient": $plik = "dzialy/Nowy_klient.inc.php"; break;
  6. case "faktury_wejsciowe": $plik = "dzialy/Faktury_wejsciowe.inc.php"; break;
  7. case "centra_kosztowe": $plik = "dzialy/Centra_kosztowe.inc.php"; break;
  8. case "kategorie_koszty": $plik = "dzialy/Kategorie_koszty.inc.php"; break;
  9. case "dokumenty": $plik = "dzialy/Dokumenty.inc.php"; break;
  10. case "wyloguj": $plik = "dzialy/Wyloguj.inc.php"; break;
  11.  
  12. default: $plik = "dzialy/Glowna.inc.php"; break;
  13. }
  14. }


Obecnie wygląda to tak. Ale ja chcę utworzyć takiego dynamicznego case na podstawie 2 parametrów z bazy danych, czyli parametr $p oraz nazwa pliku w $plik.
destroyerr
Tak się nie da! Droga którą idziesz do rozwiązania, nie jest odpowiednia. Właściwe rozwiązanie zaproponował Ci everth.
Skoro zadałeś pytanie to bądź łaskawy skorzystać z rad, które otrzymałeś.
everth
Czyli $p dostajesz z GET-a jak rozumiem? Jeśli tak to kod może wyglądać tak:
  1. $p = $_GET['p'];
  2. $db = new PDO ($moja_konfiguracja_bazy);
  3. $row = $db->query("SELECT pl_parametr_p,pl_nazwa_pliku FROM twojatabela WHERE pl_parametr_p=".$db->quote($p))->fetch();
  4. if ($row) {
  5. header("Location: dzialy/".$row['pl_nazwa_pliku']);
  6. } else {
  7. header("Location: default.php");
  8. }

futura
Cytat
Tak się nie da! Droga którą idziesz do rozwiązania, nie jest odpowiednia. Właściwe rozwiązanie zaproponował Ci everth.
Skoro zadałeś pytanie to bądź łaskawy skorzystać z rad, które otrzymałeś.


Wszystko biorę pod uwagę.

Everth dzięki za kod, jutro podepnę i zobaczę czy będzie śmigało.
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.