Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] ładowanie pliku z wybranego folderu
Forum PHP.pl > Forum > Przedszkole
Chloris
Witam, bardzo miłe forum.
Mam taką strukturę katalogów i plików:
Cytat
index.php
    |
[ strony ]
    |
    |---[ a ] strona1.php, strona2.php...
    |
    |---[ b ] strona1.php, strona2.php...
    |
    |---[ c ] strona1.php, strona2.php...
    |
    ...
    |---[...] strona1.php, strona2.php...

Jak wybrać i zapamiętać katalog i załadować odpowiedni plik?
Zrobiłam tak:
index.php
  1. <?
  2. include "kat.php";
  3. ?>
  4. <!doctype HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
  5. <html>
  6. <head>
  7. </head>
  8. <?
  9. include "wybierz.php";
  10. ?>
  11. <a href="index.php">index</a><br>
  12. </body>
  13. </html>

wybierz.php
  1. <form action="index.php" method="post">
  2. <select name="katalog">
  3. <?
  4. if ($handle = opendir("strony")) {
  5. while (false !== ($file = readdir($handle))) {
  6. if($file!=".." and $file!="."){
  7. echo "<option>$file</option>";
  8. }
  9. }
  10. closedir($handle);
  11. }
  12. ?>
  13. </select>
  14. <input type="submit" value="ok">
  15. </form>

kat.php
  1. <?
  2. if(isset($_POST[''])){
  3. if(is_dir("strony/$kat_path")){
  4. $kat_path=$_POST['kat'];
  5. setcookie("wybkat",$kat_path,time()+100000);
  6. }
  7. else{
  8. $kat_path="1"; //nazwa domyslnego katalogu
  9. }
  10. }
  11. else{
  12. if(isset($_COOKIE['wybkat'])){
  13. $kat_path=$_COOKIE['wybkat'];
  14. }
  15. else{
  16. $kat_path="1"; //nazwa domyslnego katalogu
  17. }
  18. }
  19. include "strony/$kat_path/strona1.php";
  20. ?>

Pobiera mi listę katalogu ale niepotrafię "utrzymać" tej listy i wyświetlić strony z wybranego katalogu. A jak pozbyć się submita?
Jestem zielona...

EDIT: Nikt nie ma pomyslu? Sklecenie tego zajęło mi kilka dni (!), nie mam pomyslu co z tym zrobić dalej, HELP!
nospor
Cytat
Witam, bardzo miłe forum.
Dziękujemy za miłe słowa. Również witamy smile.gif

Odnośnie problemu. Troche nie za bardzo kumam jak to ma u Ciebie wyglądać. Czytając Twój kod, nie mogę sobie tego wyobrazić. A i opis słowny jakoś nic mi nie mówi. Jesli moglabyc dokladniej opisac, krok po kroku jak to ma wyglądać, byloby super.

Bo w jaki sposób wybierasz katalog? Jakiś checkbox? Dopatrzylem się tylko listy plików w select. Tymi plikami są wlasnie Twoje katalogi? Nie rozumiem. TWoj kod, bardzo mi namotal. Bo np.:
1) if(isset($_POST[''])){ - co mialas przez to na mysli?
2) $kat_path=$_POST['kat']; nigdzie w forumlarzu, nie widzę pola o nazwie kat. Owszem, jest select, ale on sie nazywa katalog
Chloris
No właśnie, wkleiłam to co skleciłam, ale podejżewam, że zbłądziłam. To wynik prób i różnego podejścia. Generalnie ma być tak:
1. plik index.php
2. katalog strony a w nim katalogi 1, 2, 3... n...
3. w tych katalogach pliki strona1.php, strona2.php, strona3.php... stronaN.php...
I teraz:
1. jak odczytać listę katalogów
2. wybrać katalog
3. wyświetlić listę plików z wybranego katalogu
4. wybrać stronę i wyświetlić
Ten kod potrafi wyświetlić listę katalogów, dalej już jest gorzej...
Chloris
Gdybym chciała takeij rady, napisałabym w dziale PHPpro. Dzieci w przedszkolu nie potrafią pisać ni czytać...
mike
Cytat(Chloris @ 2006-03-24 09:54:34)
Gdybym chciała takeij rady, napisałabym w dziale PHPpro. Dzieci w przedszkolu nie potrafią pisać ni czytać...

1. Z tego co widzę to Ty długo nic nie napiszesz co się do Pro nadaje. A czemu: bo to wymaga myślenia i własnej inicjatywy. A Ty czekasz na gotowca.
2. ~Fipaj podał Ci niemalże gotowca w postaci linków. A Ty nawet ich nie przeczytałaś. Zajrzyj tam, Znajdziesz przykłady, opisy i wytłumaczenie wszystkiego. Pomyśl.

Gotowca tu nie dostaniesz.
nospor
oj, juz nie dogryzajmy sobie nawzajem. szczególnie ze Chloris napisala co nieco.

ad1) to juz masz
ad2) daj przy selectie takie cos:
  1. <select name="katalog" onclick="submit" >

to spowoduje, ze gdy klikniesz na selecta (cos wybierzesz), to samo sie wysle. nie potrzeba juz przycisku submit robic.
ad3) skoro select nazywa sie katalog, to nie mozesz pisac $_POST['kat']
pliki z katalogu wyswietlasz tak jak katalogi, tylko ze musisz to robic z danego katalogu. ale to juz chyba nie problem
ad4) strony tez mozesz w selectie wyswietlac na podobnej zasadzie. albo jako lista linków. jak ci wygodniej. do wyswietlenia zawartosci strony, padlo pare funckji:
file_get_contents, potem print lub echo.
readfile
include
wszystko zalezy jak to chcesz wyswietlic i takie tam.

sprobuj coś skrobnąć, w razie problemow wal śmiało. (tylko nie za smialo winksmiley.jpg )
Chloris
Po wielkich męczarniach udało mi się wyświetlić listę plików. Mam jednak problemy, nie umiem pozbyć się rozszeżenia z nazwy, chciałabym, żeby plik ładował się poniżej listy plików i nie umiem sobie z tym poradzić. Acha, i doszłam jakąś inną metodą, bo to co mi sugerowaliście jakoś do mnie nie trafiało. Po prostu za mało umiem i myślę, że trochę z motyką na słońce się porywam. To moje początki w php, kiedyś liznęłam trochę turbo pascala i vb i to moja cała przygoda z programowaniem. Oto co wypociłam:
wybierz.php - połączyłam z kat.php
  1. <form action="index.php" method="post">
  2. <select name="katalog" onclick="submit" >
  3. <option>WYBIERZ</option>
  4. <?
  5. if ($handle = opendir("strony")) {
  6. while (false !== ($katalog = readdir($handle))) {
  7. if($katalog!=".." and $katalog!="."){
  8. echo "<option>$katalog</option>";
  9. }
  10. }
  11. closedir($handle);
  12. }
  13. ?>
  14. </select>
  15. </form>
  16. <?
  17. $path = $_GET['path'];
  18. if(!isset($path))
  19. {
  20. $path = "./strony/1"; //jak wpisze sciezke, to wyswietla a jak zmienną "$katalog" to nie
  21. }
  22.  
  23. if ($handle = opendir($path))
  24. {
  25. while (false !== ($file = readdir($handle)))
  26. {
  27. if ($file != "." && $file != "..")
  28. {
  29. $fName = $file;
  30. $file = $path.'/'.$file;
  31. if(is_file($file))
  32. {
  33. print "<a href='".$file."'>".$fName."</a><br>"; //tu chciałbym pozbyć się rozszeżenia
  34. }
  35. }
  36. }
  37. closedir($handle);
  38. }
  39. ?>

Jakieś sugestie?
nospor
Cytat
jak wpisze sciezke, to wyswietla a jak zmienną "$katalog" to nie
Moze powinno byc $_POST['katalog'] winksmiley.jpg

Co do nazwy pliku bez roszerzenia:
bylo wiele sposobow na forum. Mozna np. tak:
  1. <?php
  2. $zm = 'plik.roz';
  3. $zm = substr($zm,0, strrpos($zm,'.'));
  4. echo $zm;
  5.  
  6. ?>
Chloris
Ja użyję $_POST['katalog'] to mam błąd:
Cytat
Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\AppServ\www\Lang00\wybierz.php on line 23

Kombinuję, ale nie mogę się pozbyć.
nospor
Gdy piszesz, ze czegos uzywasz i masz blad, to dobrym zwyczajem jest pokazac ten kod, jak go uzylas winksmiley.jpg Niby skąd mamy wiedziec jak to napisalas smile.gif
Chloris
Ależ jest wklejony, to linia 20...
nospor
Chloris...
Tak to my sie mozemy bawic w nieskonczoność. Choc nie. Ja nie lubie takich zabaw.
Linia 20 to kod:
$path = "./strony/1"; //
Gdzie tu jest $_POST['katalog']? Odpowiem: NIgdzie. Mnie interesuje jak wstawilas te $_POST['katalog']. Czy tak trudno to napisac? Uwierz, to jest lepsze od Twego ostatniego posta

edit: dobrze ze usunelas tego posta o bujaniu...
Chloris
To jest cały kod, plik jest podpięty pod index.php. Zajełam się tylko odczytaniem listy plików, dlatego ten $_POST znikł. Kod powinien wyglądać tak:
  1. <form action="index.php" method="post">
  2. <select name="katalog" onclick="submit" >
  3. <option>WYBIERZ</option>
  4. <?php
  5. if ($handle = opendir("strony")) {
  6. while (false !== ($katalog = readdir($handle))) {
  7. if($katalog!=".." and $katalog!="."){
  8. echo "<option>$katalog</option>";
  9. }
  10. }
  11. closedir($handle);
  12. }
  13. ?>
  14. </select>
  15. </form>
  16. <a href="index.php">index</a><br>
  17.  
  18.  
  19. <?php
  20. if(isset($_POST['katalog']))
  21. {
  22. if(is_dir("strony/$katalog"))
  23. {
  24. $katalog=$_POST['katalog'];
  25. setcookie("wybkat",$katalog,time()+100000);
  26. }
  27. else
  28. {
  29. $katalog="1"; //nazwa domyslnego katalogu
  30. }
  31. }
  32. else{
  33. if(isset($_COOKIE['wybkat'])){
  34. $katalog=$_COOKIE['wybkat'];
  35. }
  36. else
  37. {
  38. $katalog="1"; //nazwa domyslnego katalogu
  39. }
  40. }
  41.  
  42.  
  43. $path = $_GET['path'];
  44. if(!isset($path))
  45. {
  46. $path = './strony/1'; //jak wpisze sciezke, to wyswietla
  47. }
  48.  
  49. if ($handle = opendir($path))
  50. {
  51. while (false !== ($file = readdir($handle)))
  52. {
  53. if ($file != "." && $file != "..")
  54. {
  55. $fName = $file;
  56. $file = $path.'/'.$file;
  57. if(is_file($file))
  58. {
  59. print "<a href='".$file."'>".$fName."</a><br>";
  60. }
  61. }
  62. }
  63. closedir($handle);
  64. }
  65. ?>

Ech... chyba wrócę do Hello w.... Nie czaję tego kompletnie. Coś mi świta, ale bardzo powoli. Może to przez gorączkę sobotniej nocy smile.gif
nospor
kod ktory pokazalas nie pluje zadnymi errorami...
pozatym zamiast:if(is_dir("strony/$katalog"))
powinno raczej byc: if(is_dir("strony/".$_POST['katalog']))

no i ta twoja byla linia 20, w ktorej znowu nie widzę $_POST['katalog'] lub $katalog, powinna byc chyba tak:
  1. <?php
  2.  
  3. $path = './strony/'.$katalog;
  4.  
  5. ?>


A na przyszlosc:
http://pl.php.net/manual/pl/language.operators.string.php
http://pl.php.net/manual/pl/language.types.string.php
smile.gif
Chloris
Znam jedno i drugie, a raczej wiem, że coś takiego istnieje, ale nie umiem jeszcze odpowiednio użyć. Kombinowałam na wszelskie sposoby i guzik. Lata nauki przede mną.
To co mi podałeś działa elegancko. Jednak wybór katalogu nadal nie. Mam też dziwną ścieżkę dostępu: http://localhost/Lekcja////index.php
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.