Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] dynamiczne case
Forum PHP.pl > Forum > Przedszkole
Chemiq
mam taki o to problemik. czy da radę zrobić dynamiczną ilość case'ów względem danych pobranych z bazy. chodzi mi o coś takiego jak z selectem w formularzach. próbowałem zrobić to analogicznie ale wywala mi błąd. czy w ogóle da się to zrobić??
mike
Nie da się zrobić dynamicznej ilości case. Możesz co najwyżej określić warunki, które zadziałają na dowolną ilość możliwości.

Powiedz/opisz co chcesz zrobić bo na pewno można inaczej.
tansky
Eee... foreach? iteratory/spl?
Sokal
Sam to kiedyś chciałem zrobić winksmiley.jpg
Link: http://forum.ks-ekspert.pl/index.php?showtopic=99627&hl=
Chemiq
chcę zrobić skrypt, w którym zawartość strony będzie się zmieniała zgodnie z tym co zostanie podane w 'id' w adresie.
  1. <?php
  2. switch ($_GET['id']) {
  3. case 'news':
  4. news();
  5. break;
  6. case 'rejestracja':
  7. echo 'lol';
  8. break;
  9. }
  10. ?>

ale że im bardziej rozbuduję ten system tym więcej muszę dopisywać case'ów. dlatego w bazie MySql mam w tabeli `strony` przygotowane warunki i dane do wyświetlenia i chciałbym je właśnie jako case'y (albo coś podobnego) dynamicznie wstawić w skrypcie. bo przyznasz że wstawienie 100 case'ów nie jest ani przyjemne ani dobre dla skryptu

może to jakoś w pętlę wstawić??
Darti
Zwykle baza danych przychodzi tutaj z pomocą. Robisz dwie kolumny - jedna do sprawdzenia z zawartością parametru z GET a druga z danymi do wyświetlenia.
Albo inaczej :
  1. <?php
  2. if (is_numeric($_GET['id']) && file_exists('dzialy/'. $_GET['id']))
  3. {
  4. include ('dzialy/'. $_GET['id'].'.php');
  5. }
  6. ?>

Coś takiego można zrobić ...
barat
warto dodać jeszcze

  1. <?php
  2. else {
  3. include ('error.php');
  4. }
  5. ?>


i w Error wpisać coś w rodzaju "Strona nie istnieje/Przestań się bawić URL'ami" smile.gif
Bo jak zostawimy tylko tak jak jest wyzej to gdy ktoś postanowi pobawić się url-em i wpisać coś innego to wypada o tym poinformować smile.gif

Jeszcze nie wiem czy nie powinno być sprawdzenia !$_GET['id'] (czyli czy jest pusta) a jeśli pusta to by ładował plik który ma się otwierać jako domyślna strona smile.gif

Całość:

  1. <?php
  2. if (!$_GET['id']) {
  3. include ('dafault.php');
  4. } elseif (is_numeric($_GET['id']) && file_exists('dzialy/'. $_GET['id']))
  5. {
  6. include ('dzialy/'. $_GET['id'].'.php');
  7. }
  8. else {
  9. include ('error.php');
  10. }
  11. ?>


Najpierw sprawdzane jest czy zmienna id została przekazana, jeśli nie - ładuje plik domyślny, jeśli tak - sprawdza czy jest numeryczna i czy plik istnieje i ładuje odpowiedni plik. Jeśli któryś z tych warunków nie został spełniony ładuje error.php

Jeśli koniecznie chcesz switch to powyższy kod wystarczy przerobić tak by zamiast include było

$casewarunek = 1/2/3 ... w zależności która opcja, a następnie przeprowadzić switch dla $casewarunek z wartościami case 1/2/3 smile.gif
Chemiq
z tymi instrukcjami podsunęliście mi pewien pomysł (zresztą bardzo prosty), który się udał biggrin.gif

oto on:
  1. <?php
  2. $nazwa = ucfirst($_GET['id']);
  3. $nazwa = str_replace('_', ' ', $nazwa);
  4.  
  5. if ($_GET['id']=='news') {
  6. news();
  7. }
  8. else {
  9. while ($sp_page = mysql_fetch_array($query_sp_page)) {
  10. if ($sp_page['nazwa']==$nazwa) {
  11. echo $sp_page['dane'];
  12. }
  13. }
  14. }
  15. ?>


wielkie dzięki wszystkim za pomoc biggrin.gif

gdyby ktoś miał jeszcze jakiś ciekawszy pomysł lub sposób bardziej optymalny to chętnie przeczytam biggrin.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.