Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] problem z funkcją $_GET
Forum PHP.pl > Forum > Przedszkole
kamilw
Witam. Drodzy koledzy mam taki problem:
Chcem żeby adres strony wyglądał tak: www.twojadomena.pl/?type=nazwa folderu&nazwa pliku
ale także żeby działała tylko pierwsza zmienna /?type=nazwa pliku z katalogu głównego

Narazie wykonałem samą pierwszą funkcję czyli działa tylko /?type=nazwa pliku
  1. <?php
  2.  
  3. $id = $_GET['type'];
  4.  
  5. if ($id=='')
  6.  $id = 'main';
  7.  
  8. if (!file_exists("".$id.".html")) {
  9.  echo "bład, brak takiej strony";
  10. } else {
  11.  require("".$id.".html");
  12. }
  13.  
  14. ?>

Jak ktoś by mógł pomóc w zrobieniu drugiej części kodu, to z góry dzięki.
Łukasz O.
adres: www.twojadomena.pl/?type=nazwa_folderu+nazwa_pliku
  1. <?php
  2. list($folder,$plik)=explode($_GET['type'],'+');
  3.  
  4. //otrzymujesz
  5. $folder=nazwa_folderu
  6. $plik=nazwa_pliku
  7. ?>
na szybko nie sprawdzałem, ale powinno być OK
kamilw
Taki o błąd wyskoczył:
Parse error: syntax error, unexpected T_VARIABLE

Zastosowanie dla przykładu takiej funkcji zobaczycie na http://rignroll.com/.
Łukasz O.
Boże... postaraj się chociaż sprawdzić co jest nie tak:/

  1. <?php
  2. //www.twojadomena.pl/?type=jakis_folder;nazwa_pliku2
  3. list($folder,$plik)=explode(';',$_GET['type']);
  4. //otrzymujesz
  5. print $folder; //jakis_folder
  6. print $plik; //nazwa_pliku2
  7. ?>
kamilw
działa, jest jedno ale.
jak wejde na ?type=publ_id;publ_id=2
to wyskakuje publ_idpubl_id=2 . A chciałbym zeby wyskoczył plik z folderu publ_id o nazwie publ_id=2.html
Kamson
  1. <?php
  2. //www.twojadomena.pl/?type=jakis_folder;nazwa_pliku2
  3. list($folder,$plik)=explode(';',$_GET['type']);
  4.  
  5. // sprawdz czy podales folder , jeśli nie to ustawia folder na 'main'
  6. if(!$plik) { 
  7. $plik = $folder;
  8. $folder = 'main';
  9. }
  10.  
  11. if (!file_exists($folder.'/'.$plik.'.html')) {
  12.  print 'bład, brak takiej strony';
  13. } else {
  14.  include($folder.'/'.$plik.'.html');
  15. }
  16.  
  17. ?>



z tym że jeśli nie podajesz nazwy folderu i jest tylko plik na końcu musi być ' ; '
kamilw
Dzięki, jeszcze taka sprawa żeby zamiast ; było & . Coś źle robię bo jak zmieniam znaki to wyświetla błąd.
Kamson
nie wiem czy tak da ... bo & jest znakiem końca zmiennej i początku następnej winksmiley.jpg

jeśli zrobisz xx.php?type=xxx&yyy&zzz

to zmiena $_GET['type'] ma wartość tylko 'xxx' zato w tablicy $_GET ?chyba pojawią sie indexy 'yyy' i 'zzz'
kamilw
Dać się da jakoś. Widziałem takie zastosowanie na dodatek z kilkoma zmiennymi. Kurcze żebym wiedział jak to zrobić...
Kamson
sprawdzałem i powinno działać winksmiley.jpg

  1. <?
  2. if($_GET) {
  3. $klucze = array_keys($_GET);
  4.  
  5. if(count($klucze) == 1) {
  6. $folder = 'main';
  7. $plik = $_GET['type'];
  8. } elseif(count($klucze) == 2) {
  9. $folder = $_GET['type'];
  10. $plik = $klucze[1];
  11. } else {
  12. exit('błędne zapytanie');
  13. }
  14.  
  15. // ładuje plik
  16. if (!file_exists($folder.'/'.$plik.'.html')) {
  17. print 'bład, brak takiej strony';
  18. } else {
  19. include($folder.'/'.$plik.'.html');
  20. }
  21. }
  22. ?>
kamilw
Dzięki, a jak zrobić żeby działało samo ?type tz ?type=news przekierowywało na index.html w folderze news?
Kamson
powiedziałeś ze chcesz zeby jak jest samo type to przekierowywało na katalog main ... to w koncu jak chcesz?

  1. <?
  2. if($_GET) {
  3. $klucze = array_keys($_GET);
  4.  
  5. if(count($klucze) == 1) {
  6. $folder = $_GET['type'];
  7. $plik = 'index';
  8. } elseif(count($klucze) == 2) {
  9. $folder = $_GET['type'];
  10. $plik = $klucze[1];
  11. } else {
  12. exit('błędne zapytanie');
  13. }
  14.  
  15. // ładuje plik
  16. if (!file_exists($folder.'/'.$plik.'.html')) {
  17. print 'bład, brak takiej strony';
  18. } else {
  19. include($folder.'/'.$plik.'.html');
  20. }
  21. }
  22. ?>
kamilw
żeby po wpisaniu ?type=costam to wyświetlało plik costam.html nie koniecznie z folderu costam.
Kamson
ręce mi opadają ....
najpierw chciałeś ze jak jest samo type to ładuje plik z katalogu maim
potem żeby ładować index z katalogu który podajesz w type
a teraz jeszcze co innego... jak sie zdecydujesz to daj znać
kamilw
Sorry, pokręciło mi się. Już sobie z tym poradziłem. Teraz mam inny problem.
/?type=publ_id&publ_id=2 Folder publ_id a nazwa pliku publ_id=2 i wyświetla że nie ma takiej strony. Chyba trzeba dodać zmienną jeszcze.
Ociu
Dane się, why not. Jest tylko jedno ale. Nazwy plików, nie mogą się powtarzać. Tak to tworzysz mapę plików, pakujesz ją do tablicy, potem tylko array_key_exists, jeśli istnieje to iclude jak nie to error i świat jest lepszy.

-- Edit
Spóźniłem się.
kamilw
Hmm a możesz to wytłumaczyć na przykładzie czy coś. Bo tak to ja nic nie rozumiem
Kamson
Cytat(kamilw @ 23.03.2007, 19:15:32 ) *
Sorry, pokręciło mi się. Już sobie z tym poradziłem. Teraz mam inny problem.
/?type=publ_id&publ_id=2 Folder publ_id a nazwa pliku publ_id=2 i wyświetla że nie ma takiej strony. Chyba trzeba dodać zmienną jeszcze.



bo skrypt szuka pliku ' publ_id.html ' tak jak wcześniej prosiłeś żeby robił.... wklej kod może coś poradzimy
kamilw
kod czego? Index.php to ten co mi podałeś ostatnio. Ja myślę że trzeba dodać zmienną publ_id a nazwę pliku jako 2. Tak mi się zdaje. http://rignroll.com/ Popatrz na linki różnych podstron. Ja muszę zrobić identycznie
Kamson
  1. <?
  2. if($_GET) {
  3. $klucze = array_keys($_GET);
  4.  
  5. if(count($klucze) == 1) {
  6. $folder = $_GET['type'];
  7. $plik = 'index';
  8. } elseif(count($klucze) == 2) {
  9. $folder = $_GET['type'];
  10. if($_GET[$klucze[1]]) {
  11. $plik = $klucze[1].'='.$_GET[$klucze[1]];
  12. } else {
  13. $plik = $klucze[1];
  14. }
  15. } else {
  16. exit('błędne zapytanie');
  17. }
  18.  
  19. // ładuje plik
  20. if (!file_exists($folder.'/'.$plik.'.html')) {
  21. print 'bład, brak takiej strony';
  22. } else {
  23. include($folder.'/'.$plik.'.html');
  24. }
  25. }
  26. ?>



i teraz chwila objaśnienia :
gdy wpiszesz :
- index.php?type=news ( załaduje plik : news/index.html )
- index.php?type=publ_id&publ_id ( załaduje plik publ_id/publ_id.html )
- index.php?type=publ_id&publ_id=2 ( załaduje plik publ_id/publ_id=2.html )
kamilw
Dzięki, jeszcze ostatnia sprawa. Żeby po wejściu na stronę index.php przekierowywało na ?type=news
kamilw
Dzięki,
a teraz następny problem
http://rignroll.com/index.php?type=image&image_id=329
index.php?type=image&image_id=329 image folder image_id=329 plik. z koncówką .jpg ,
Czy nie dało by się zmodyfikować skrypt. Żeby odnajdywał dany plik w folderze tylko bez podawania końcówki? Nigdy nie zdarzy się żeby były dwa takie same pliki w folderze (costam.jpg i costam.html)
Ociu
Jeśli masz stały folder to tak:
  1. <?php
  2. $strDirName = 'nazwaFolderu/';
  3. $strFile = $strDirName . $_GET['plik'] . '.jpg';
  4. print "<img src='".$strFile."' alt='plik'>";
  5. ?>
kamilw
no ale gdzie to wpisać? do index.php? I to musi współgrać z poprzednim skryptem
Kamson
Powinno działać nie sprawdzałem ...
skrypt nie wykrywa typów plików ale sprawdza po kolei każdą końcówkę jaką ma w tablicy $typyPlikow

  1. <?
  2.  
  3. if($_GET) {
  4. $klucze = array_keys($_GET);
  5.  
  6. if(count($klucze) == 1) {
  7. $folder = $_GET['type'];
  8. $plik = 'index';
  9. } elseif(count($klucze) == 2) {
  10. $folder = $_GET['type'];
  11. if($_GET[$klucze[1]]) {
  12. $plik = $klucze[1].'='.$_GET[$klucze[1]];
  13. } else {
  14. $plik = $klucze[1];
  15. }
  16. } else {
  17. exit('błędne zapytanie');
  18. }
  19.  
  20. $typyPlikow = array('jpg', 'gif', 'png', 'html');
  21. $graficzne = array('jpg', 'gif', 'png');
  22. foreach ($typyPlikow as $koncowka) {
  23. // ładuje plik
  24. if (!file_exists($folder.'/'.$plik.'.'.$koncowka)) {
  25. $blad = TRUE;
  26. } else {
  27. if(in_array($koncowka, $graficzne)) {
  28. print '<img src="'.$folder.'/'.$plik.'.'.$koncowka.'" alt="'.$plik.'" />';
  29. } else {
  30. include($folder.'/'.$plik.'.'.$koncowka);
  31. }
  32. $blad = FALSE;
  33. break;
  34. }
  35.  
  36. if($blad) {
  37. print 'bład, brak takiej strony';
  38. }
  39. }
  40. }
  41. ?>


-- EDIT

Poprawiłem winksmiley.jpg
kamilw
Parse error: syntax error, unexpected '{' in index.php on line 27 Bym sam to poprawił, ale nie wiem który za co odpowiada.
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.