Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP] Formularz i lista rozwijana ze zmieniającą się zawartością
Forum PHP.pl > Forum > Przedszkole
-malina-
cześć. może ktośz Was mnie nakieruje na dobre tory.
Mam takie pliki:
info1.htm
info2.htm
i jest ich 21.
mam też listę rozwijaną ale chcę by wraz z wyborem z tej listy rozwijanej pojawiały się informacje includowane z tych plików.
Czyli ktoś wybiera z listy INFO 1 i bez przeładowania pojawiają się informacje z pliku info1.htm

może ktoś pomoże lub chociaż naprowadzi na coś...
SmokAnalog
To jest bardzo proste do osiągnięcia.

Robisz sobie listę rozwijaną na przykład tak:
  1. <select id="file">
  2. <?php for($i = 1; $i <= 21; ++$i): ?>
  3. <?php $fileName = 'info' . $i . '.html' ?>
  4. <option value="<?php echo htmlspecialchars($fileName) ?>"><?php echo htmlspecialchars($fileName) ?></option>
  5. <?php endfor ?>
  6. </select>

Masz jakiś element, który będzie trzymał zawartość, na przykład:
  1. <div id="content"></div>

I w końcu, na przykład z użyciem jQuery, ładujesz zawartość pliku do elementu:
[JAVASCRIPT] pobierz, plaintext
  1. $("#file").change(function() {
  2. $("#content").html("Proszę czekać...");
  3. $.get(
  4. $(this).val(),
  5. function(fileContent) {
  6. $("#content").html(fileContent);
  7. },
  8. "html"
  9. );
  10. });
[JAVASCRIPT] pobierz, plaintext
-malina-
zrobiłam tak:
Kod
<html><head></head>
<body>  
        <select id="file">
    <?php for($i = 1; $i <= 21; ++$i): ?>
    <?php $fileName = 'info' . $i . '.htm' ?>
    <option value="<?php echo htmlspecialchars($fileName) ?>"><?php echo htmlspecialchars($fileName) ?></option>
    <?php endfor ?>
    </select>
    
        <div id="content"></div>
        <script type="text/javascript" language="JavaScript">
            $("#file").change(function() {
    $("#content").htm("Proszę czekać...");
    $.get(
    $(this).val(),
    function(fileContent) {
    $("#content").htm(fileContent);
    },
    "htm"
    );
    });
    </script>
    </body>
    </html>

ale nic się nie dzieje.
niby jest strzałka w której powinny się znaleźć "odnośniki" z tytułami, ale nic nie ma sad.gif
SmokAnalog
Korzystasz z jQuery, ale nie dołączyłaś go do kodu smile.gif
  1. <script src="http://code.jquery.com/jquery.min.js"></script>

Musisz dodać tę linię zanim wykonujesz skrypty.

Miałaś też kilka innych błędów, przeanalizuj poniższy kod i napisz mi czy działa, bo piszę z palucha:
  1. <head></head>
  2. <body>
  3. <select id="file">
  4. <?php for($i = 1; $i <= 21; ++$i): ?>
  5. <?php $fileName = 'info' . $i . '.htm' ?>
  6. <option value="<?php echo htmlspecialchars($fileName) ?>"><?php echo htmlspecialchars($fileName) ?></option>
  7. <?php endfor ?>
  8. </select>
  9.  
  10. <div id="content"></div>
  11.  
  12. <script src="http://code.jquery.com/jquery.min.js"></script>
  13. $("#file").change(function() {
  14. $("#content").html("Proszę czekać...");
  15. $.get(
  16. $(this).val(),
  17. function(fileContent) {
  18. $("#content").htm(fileContent);
  19. },
  20. "html"
  21. );
  22. });
  23. </script>
  24. </body>
  25. </html>
-malina-
sad.gif niestety, nawet zmiana atrybutów plików (pliki info1.htm-info21.htm są na serwerze) nic nie dała
ja myślę że czegoś tu brakuje to znaczy że cały ten plik nie widzi plików info1.htm-info21.htm bo skąd ma wiedzieć gdzie i czy one są ? a są na 100%
SmokAnalog
A są na pewno w tym samym folderze?

Nie musi wiedzieć gdzie i czy one są, bo to on wysyła zapytanie o te pliki. W moim przykładzie, funkcja $.get usiłuje łączyć się z plikiem o nazwie podanej jako wartość listy rozwijanej. A wartości listy rozwijanej to kolejno: info1.htm, info2.htm itd. Powinno działać. Upewnij się czy:
  • Pliki info1.htm, info2.htm itd. są w tym samym folderze co plik z kodem
  • Plik z kodem źródłowym ma rozszerzenie .php
  • Masz włączony JavaScript w przeglądarce
-malina-
no tak, ja zamiast kod źródłowy zrobić jako php zrobiłam htm :|
już poprawiłam (działa smile.gif ), ale mimo tego że wybieram np. info2.htm to nie pokazuje jego zawartości
a to są takie zwykłe narazie napisy na przykład "test wyboru nr3"
SmokAnalog
A co się dzieje? Pojawia się napis Proszę czekać... czy nic się nie pojawia?

EDIT

Zapomniałem poprawić jeden Twój błąd. Zamień tę linię:
[JAVASCRIPT] pobierz, plaintext
  1. $("#content").htm(fileContent);
[JAVASCRIPT] pobierz, plaintext

Na tę:
[JAVASCRIPT] pobierz, plaintext
  1. $("#content").html(fileContent);
[JAVASCRIPT] pobierz, plaintext


A przy okazji korzystaj z konsoli, bo ona wyświetla informacje o błędach, dzięki czemu o wiele łatwiej je naprawiać bez zgadywania dlaczego nie działa.
-malina-
chciałam by to pole wyboru było stale widoczne (i jest) ale pod nim żeby pozywały się napisy z aktualnie wybranego pliku na przykład jak wybiorę info3.htm to żeby się pod tym polem wyboru pojawił napis który jest w pliku info3.htm czyli "test wyboru nr3".
teraz mimo że wybieram jakieś info...htm to pod tym polem wyboru nie pojawiają się żadne napisy. nie ma też "proszę czekać" - widać że przeładowuje się ale poza tym nic się nie dzieje, że tak powiem "brak zawartości plików"
SmokAnalog
Co mówi konsola?
-malina-
hm. to nie konsola tylko komputer
SmokAnalog
Chodzi o konsolę błędów JavaScript. Poczytaj o tym.

Sprawdziłem skrypt i u mnie działa, więc coś robisz nie tak.
-malina-
z tego co czytam to ma się pojawić jakieś okienko popup - ja takiego nie mam.
mam firefox 21 i operę 12.15 - i tu i tu nic nie wyskakuje

//wyszłam na idiotkę z tą kosolą, a wy pewnie macie niezły ubaw sad.gif
-malina-
[15:16:49.885] TypeError: $(...).htm is not a function @ http://127.0.0.1/TEST.php:18
o to chodziło?
-malina-
przepraszam, że post pod postem - ale już doszłam co jest nie tak.
otóż jak dam wcześniej htm to nie działa, a jak wcześniej dam html to wszystko jest w porządku.
powiedzcie mi tylko dlaczego tak się dzieje (musiałam wszystkie pliki htm zmienić na html)
SmokAnalog
Cytat(-malina- @ 8.06.2013, 14:40:58 ) *
//wyszłam na idiotkę z tą kosolą, a wy pewnie macie niezły ubaw sad.gif

Nie przejmuj się, chwilę się pośmiałem DO Ciebie, a nie Z Ciebie ;)To było takie słodkie.

Jak rzucisz okiem na moje poprzednie wpisy to zauważysz, że wspomniałem o tej zamianie .htm() na .html(). Śpieszę wyjaśnić: to nie ma nic wspólnego z nazwami Twoich plików. .html() to metoda z jQuery. Możesz spokojnie mieć pliki z rozszerzeniem .htm.

Nazwę plików określasz w tej linii i mogą mieć dowolne rozszerzenie - ważne, żeby nazwy zgadzały się z tym wzorcem:
  1. <?php $fileName = 'info' . $i . '.htm' ?>


Natomiast funkcja .html() musi zostać jako .html(), bo to nie ma nic wspólnego z jakimikolwiek nazwami plików.
[JAVASCRIPT] pobierz, plaintext
  1. $("#content").html(fileContent);
[JAVASCRIPT] pobierz, plaintext
-malina-
Smoku dziękuję bardzo za wyjaśnienie . ja jestem na etapie żłobka, ale takiego działu tu nie ma wink.gif

jeszcze jedna sprawa mnie dręczy-męczy. otóż jak tylko wejdę na tę testową stronę to nic się nie pokazuje - dopiero po wyborze z listy. chciałam dać selected do jednego z optionów tak by pokazywało od razu po wejściu na tą stronę (że tak powiem) defaultowy napis - czyli żeby pobierało defaultowo z pliku info1.html
ale samo dodanie selected nie pomogło. czy da radę coś takiego?
SmokAnalog
Można zrobić to elegancko z JavaScriptem, zamykając funkcjonalność w funkcji i odpalać ją zarówno przy zmianie stanu <select> oraz przy załadowaniu się strony, ale to póki co trochę zbyt skomplikowane. Możesz wczytać plik bezpośrednio, w ten sposób - zamiast:
  1. <div id="content"></div>

Daj:
  1. <div id="content"><?php echo file_get_contents('info1.htm') ?></div>

W ogóle to można by pomyśleć o dopieszczenie tego tak, żeby lista nie pokazywała zawsze na sztywno plików info1.htm aż do info21.htm, ale na przykład wszystkie pliki z danego folderu. Wtedy mogłabyś sobie dodawać / usuwać / zmieniać nazwy wszystkiego w tym folderze, a lista zawsze pokazywałaby aktualne pliki. smile.gif Cuda można w PHP robić.
-malina-
bardzo tu miło. założe chyba tu jednak konto (konto malina (imię) jest zajęte - będę musiala coś innego wymyśleć. Ale jakby co to w podpisie będzie "malina - ta od "konsoli" - i wszystko będzie jasne wink.gif
Smoku - o to chodziło właśnie :-*

nie wszędzie jest tak że "zielonym" w jakimś temacie (dla niektórych może to błahostka, ale dla wielu jak i dla mnie to naprawdę DUŻO) się pomaga "ot tak".

Smoku - jeszcze raz dziękuję bardzo smile.gif
pozdrawiam!

najlepszego wszystkim Forumowiczom!
SmokAnalog
Proszę bardzo i cieszę się, że mogłem pomóc.
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.