Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Prosty system modułów
Forum PHP.pl > Forum > Przedszkole
ghastblood
Witam,
poszukuje prostego systemu modułów lub podpowiedzi jak taki system powinien działać. Interesował bym mnie kod Proceduralny ponieważ jeszcze się nie przyzwyczaiłem do programowania obiektowego. Zrobiłem sobie coś takiego.
  1.  
  2. if(isset($_SESSION['zalogowany'])) {
  3. }else{
  4. header('location: index.php?id=2');
  5. }
  6. $sql_wynik = dbquery("SELECT * FROM plugins WHERE plugin_number='".$_GET['id']."' && plugin_side = '2'");
  7.  
  8. $r = dbarray($sql_wynik);
  9. if($r == NULL){
  10. echo 'plugin nie istnieje';
  11. } else{
  12. include $r['plugin_path']."/".$r['plugin_start'];
  13. }


Problem w tym że przeglądarka zwraca mi błąd że Ta strona internetowa zawiera pętlę przekierowań. Gdy robię przekierowanie na inny plik w header to jest dobrze gdy chce przekierować na index.php?id=2 czy każde inne id to wywala mi błąd.
CuteOne
  1. $modules = array(
  2. 'index' => 'index.php',
  3. 'login' => 'module/login.php'
  4. ...
  5. );
  6.  
  7. $id = strtolower($_GET['id']);
  8.  
  9. if(array_key_exists($id, $modules)) {
  10.  
  11. include $modules[$id];
  12. }


do tego podepnij bazę danych, sprawdzanie czy plik istnieje
SmokAnalog
No nie wiem czy index.php to moduł. Ja bym to rozwiązał na jeden z dwóch sposobów:

1. Oparty na liście modułów - sam wybierasz które mają działać, a które nie:
  1. $module = null;
  2. if(isset($_GET['module'])) {
  3. switch($_GET['module']) {
  4. case 'login':
  5. case 'register':
  6. case 'gallery':
  7. case 'logout':
  8. $module = $_GET['module'];
  9. break;
  10. }
  11. }
  12. if( ! isset($module)) {
  13. $module = 'main';
  14. }
  15. require('modules/'.$module.'.php');


2. Oparty na sprawdzaniu czy plik istnieje - proste w użyciu, jeśli plik istnieje to ładujemy moduł:
  1. $module = (isset($_GET['module']) AND file_exists('modules/'.$_GET['module'].'.php')) ? $_GET['module'] : 'main';
  2. require('modules/'.$module.'.php');


Oczywiście można połączyć obie te metody.
CuteOne
to był tylko przykład.. i lepszy niż te twoje switche - tak to już chyba nikt nie pisze ;p

a to czy ma działać czy nie robisz w równie prosty sposób
  1. $modules = array(
  2. 'index' => array('file' => 'module/index.php', 'status' => 1),
  3. 'login' => array('file'=>'module/login.php', 'status' => 0),
  4. 'reg' => array('file'=>'module/auth/register.php', 'status' => 1)
  5. );
  6.  
  7. $id = strtolower($_GET['id']);
  8.  
  9. if(array_key_exists($id, $modules) && $modules[$id]['status'] == 1) {
  10.  
  11. include $modules[$id];
  12. }
SmokAnalog
Cytat(CuteOne @ 18.07.2012, 01:48:28 ) *
to był tylko przykład.. i lepszy niż te twoje switche - tak to już chyba nikt nie pisze ;p

Akurat ten switch to jest świetny i bardzo czytelny sposób dla prostego systemu. Mam wrażenie, że czasem nie wiesz co piszesz. Kolega wyżej nie potrzebuje dynamicznego dołączania modułów w czasie wykonywania, ani też rozdzielania nazwy modułu od nazwy jego pliku. Nie komplikuj mu życia tylko dlatego, że Tobie się wydaje, że "tak już się nie pisze". Rozbawiłeś mnie, nie powiem smile.gif
ghastblood
Cytat(CuteOne @ 18.07.2012, 01:48:28 ) *
to był tylko przykład.. i lepszy niż te twoje switche - tak to już chyba nikt nie pisze ;p

a to czy ma działać czy nie robisz w równie prosty sposób
  1. $modules = array(
  2. 'index' => array('file' => 'module/index.php', 'status' => 1),
  3. 'login' => array('file'=>'module/login.php', 'status' => 0),
  4. 'reg' => array('file'=>'module/auth/register.php', 'status' => 1)
  5. );
  6.  
  7. $id = strtolower($_GET['id']);
  8.  
  9. if(array_key_exists($id, $modules) && $modules[$id]['status'] == 1) {
  10.  
  11. include $modules[$id];
  12. }


wywala i taki błąd

  1. Notice: Array to string conversion in C:\xampp\htdocs\mtgcon_ver.0.1\index.php on line 27
  2.  
  3. Warning: include(Array) [function.include]: failed to open stream: No such file or directory in C:\xampp\htdocs\mtgcon_ver.0.1\index.php on line 27
  4.  
  5. Warning: include() [function.include]: Failed opening 'Array' for inclusion (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\mtgcon_ver.0.1\index.php on line 27


dobra mam powinno być tak
  1. if(array_key_exists($id, $modules) && $modules[$id]['status'] == 1) {
  2.  
  3. include $modules[$id]['file'];
  4. }
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.