Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Generowanie dynamicznego switch, PHP
futura
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 4.01.2010

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


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?
Go to the top of the page
+Quote Post
everth
post
Post #2





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


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


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
Fifi209
post
Post #3





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Teoretycznie można wygenerować stringa i potem eval ale to jest ZŁE ROZWIĄZANIE.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
futura
post
Post #4





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 4.01.2010

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


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.

Ten post edytował futura 26.07.2010, 22:21:21
Go to the top of the page
+Quote Post
everth
post
Post #5





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


W takim razie co robi element $p w tym switchu? Wywołujesz go ręcznie?


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
futura
post
Post #6





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 4.01.2010

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


$p jest to parametr z linków, które próbuje utworzyć dynamicznie.
Go to the top of the page
+Quote Post
everth
post
Post #7





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


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?


--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
futura
post
Post #8





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 4.01.2010

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


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





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

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


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





Grupa: Zarejestrowani
Postów: 782
Pomógł: 153
Dołączył: 21.07.2010

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


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



--------------------
Już mi się ani wiedzieć, ani tym bardziej myśleć nie chce.
[Think different]!
Go to the top of the page
+Quote Post
futura
post
Post #11





Grupa: Zarejestrowani
Postów: 39
Pomógł: 4
Dołączył: 4.01.2010

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


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

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 Aktualny czas: 19.08.2025 - 10:25