Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]include_once()->wyświetla pustą stronę
Forum PHP.pl > Forum > Przedszkole
-rgalka-
Witam
Ponieważ coś co robię mam kilka podstron, dlatego zrobiłem takie skrypty:
index.php:
  1. <?php
  2. error_reporting(!E_NOTICE);
  3. include_once("conf.php");
  4. include_once("template.php");
  5. ?>


conf.php zawiera spis podstron:
  1. <?php
  2. if(!$_GET[p])
  3. {
  4.  $page = 'login.php';
  5. }
  6. else
  7. {
  8.  switch($_GET[p])
  9.  {
  10. case 0:
  11. $page = 'login.php';
  12. break;
  13.  
  14. case 1:
  15. $page = 'main.php';
  16. break;
  17.  
  18. case 2:
  19. $page = 'users.php';
  20. break;
  21. .
  22. .
  23. .
  24. case 99:
  25. $page = 'logout.php';
  26. break;
  27.  
  28. default:
  29. $page = 'login.php';
  30.  }
  31. }
  32. ?>


i ostatni skrypt - template.php:
  1. <?php
  2. if(!@file_exists($page))
  3. {
  4.  $page = 'login.php';
  5.  include_once("$page");
  6. }
  7. else
  8. {
  9.  include_once("$page");
  10. }
  11. ?>

pod mozilla wszystko jest w porządku. odpowiednie strony się ładują do przeglądarki, ale problem mam w IE.
gdy w Internet Explorerze chcę załadować którąś z podstron, to pojawia się puste okno przeglądarki, wraz ze starym adresem, dopiero po odświeżeniu okna przeglądarki, na pasku adresu pojawia się odpowiedni URL, natomiast w oknie przeglądarki prawidłowa zawartość.
mam zielonego pojęcia dlaczego tak się dzieje.
rgalka
trochę zmieniłem skrypt tamplate.php:
  1. <?php
  2. echo 'Zmienna $page = '.$page.''; 
  3. $included = include_once(&#092;"$page\");
  4. if($included)
  5. {
  6.  echo 'Dołączono plik';
  7. }
  8. else
  9. {
  10. echo 'Nie dołączono pliku';
  11. }
  12. echo 'Koniec skryptu'; 
  13. ?>


w mozilla wszystko jest ok. natomiast w IE po kliknięciu na odnośnik do danej podstrony, wyświetlany jest tylko komunikat z linii nr 2 i nic więcej, okno przeglądarki pozostaje puste. dopiero po odświerzenie wszystko wraca do normy, tzn. widać komunikaty w linii: 2, 6 ,12 no i całą resztę, która powinna być widoczna.
Shili
PHP jest wykonywany po stronie serwera, więc skoro mozilla go dobrze akceptuje to raczej jest poprawny. Czy mógłbyś ten skrypt zamieścić na jakimś ogólnodostępnym serwerze do przetestowania? Moim zdaniem specyfika problemu skłania do szukania dziwnych problemów raczej w przeglądarce niż w kodzie.

  1. <?php
  2. $included = include_once(&#092;"$page\");
  3. ?>
Tutaj jak rozumiem nie ma tej dziwnej "encji", a co ze slashem na końcu?
rgalka
oczywiście tam powinno być:
  1. <?php
  2. $included = include_once("$page");
  3. ?>


niestety, nie za bardzo mogę umieścić to na ogólnodostępnym serwerze, czego bardzo żałuję.
potreb
  1. <?php
  2. $page = $_GET['page'];
  3. $included = include_once("$page");
  4. ?>
rgalka
tak żeczywiście to może byłby dobry pomysł, gdyby nie fakt, że przed template.php includowany jest plik conf.php, którego zadaniem jest odebranie zmienne $_GET i na jej podstawie przypisanie odpowiedniej wartości do zmiennej $page.

ale przetestowałem to swoje "NiewiadomoCo" w lokalnej sieci na innych komputerach i okazało się, że problemy są tylko w przypadku Internet Expolorer w wersji 6. w IE7 wszystko bangla. zatem pytanie co powoduje te problemy w wersji 6. dodatkowo na kolejnych komputerach są problemy z ładowaniem innych podstron, tak jakby się w przeglądarce włączył jakiś "random".

jeśli ktoś spotkał się z takim problemem, lub chociaż ma pomysł co to może być, to proszę o pomoc, gdyż "NiewiadomoCo" będzie chodziło głównie pod IE6.
potreb
Możesz mieć problemy z serwerem lub spróbuj jeszcze w tej wersji:
  1. <?php
  2. if(!$_GET[p])
  3. {
  4.  $page = 'login.php';
  5. }
  6. else
  7. {
  8.  switch($_GET[p])
  9.  {
  10. case 'login':
  11. $page = 'login.php';
  12. break;
  13.  
  14. case 'home':
  15. $page = 'main.php';
  16. break;
  17.  
  18. case 'user':
  19. $page = 'users.php';
  20. break;
  21.  
  22. case 'logout':
  23. $page = 'logout.php';
  24. break;
  25.  
  26. default:
  27. $page = 'login.php';
  28.  }
  29. }
  30. ?>


Sprawdzałem u siebie i wszystko jest okey.
rgalka
niestety zaproponowane rozwiązanie nie działa->wszystko pozostaje po staremu
jeśli chodzi o kwestię serwera, to nie mogę się z tobą zgodzić, ponieważ na tym samym serwerze, ale pod IE7, mozillą i operą wszystko działa poprawnie. dlatego skłaniałbym się ku twierdzeniu, że to jednak wina przeglądarki.
niestety w zachowaniu przeglądarki brak jakiej kolwiek konsekwencji, podstona, która ładowała się normalnie w pierwszym momencie, nie wyświetla się przy następnej odsłonie. natomiast ta z którą były problemy wcześniej, nagle się ładuje. to dodatkowo utrudnia znalezienie rozwiązania problemu.
czekam na kolejne pomysły
potreb
Dość dziwna sprawa. Nie wiem dlaczego u mnie działa poprawnie. Może wyczyść cache przeglądarki i dodatkowo możesz pozamieniać:
  1. <?php
  2. $included = include_once("$page");
  3. // na
  4. $included = include("".$page."");
  5. ?>


Już nic więcej nie wymyślę.
Możesz jeszcze na początku indeksu dać:
error_reporting(E_ALL);

Może jakiś komunikat się wyświetli i dodatkowo zmieniłem:
  1. <?php
  2. if(!file_exists($page))
  3. {
  4.  $page = 'login.php';
  5.  include("".$page."");
  6. }
  7. else
  8. {
  9.  include_once("$page");
  10. }
  11. ?>
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.