Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie komunikatów
Forum PHP.pl > Forum > Przedszkole
atomik
Witam..

Z góry przepraszam za być może trywialne pytanie blink.gif ale nigdzie nie potrafię znaleźć na nie odpowiedzi.

Temat wydaje sie prosty i być może taki jest sadsmiley02.gif .

Często zachodzą przypadki, że skrypt przykładowo długo przeszukuje bazę i wtedy na ekranie, po wybraniu jakiejś opcji, nic się nie pojawia przez dłuższy czas.
Chciałbym mieć możliwość wyświetlenia w tym czasie jakiegoś ekranu w stylu: "Proszę czekać". Kłopot w tym, że przeglądarka wyświetli taką stronę dopiero po zakończeniu całego skryptu (po zakończeniu szukania).

Drugi, podobny przypadek, to wyświetlanie na bieżąco kolejnych informacji o postępie w działaniu skryptu, np: "Etap1, Etap2..". Normalnie, takie komunikaty wysyłane przez echo, będą wyświetlone dopiero po zakończeniu skryptu. Co zrobić, żeby były wyświetlane na bieżąco?

Z góry dziękuję za porady rolleyes.gif

pozdrowienia, Tomek
luinnar
co do wyświetlania "proszę czekać" to używa się do tego java scriptu a nie php.

2 pytanie:
myśle że wystarczy flush:
  1. <?php
  2. echo 'faza 1';
  3. // jakieś operacje 1 fazy
  4.  
  5. echo 'faza2'
  6. // jakieś operacje 2 fazy
  7. ?>
atomik
Dzięki za podpowiedź ale niestety flush() nie działa sadsmiley02.gif
FiDO
To jest sprawa zalezna czesciowo od przegladarki. Np. taki IE sobie buforuje sam i dopoki nie dostanie pewne ilosci znakow to nie wyswietli niczego, nie wyswietli tez niedokonczonej tabelki (chyba, ze dzialanie skryptu zostanie przerwane i nic juz wiecej nie dostanie). Pod FF o ile pamietam nie ma domyslnie buforowania, wiec mozna sobie wyswietlac php'owy pasek postepu (bo zapewne o cos takiego Ci chodzi) bez problemu. Nie wiem jak z Opera. Co do wielkosci bufora w IE to musisz sobie sam do tego dojsc, ja juz nie pamietam tej wartosci, ale z tego co kojarze moglo to byc 256 albo 512. Wiec na poczatku skryptu musisz wyslac do przegladarki jakies nieznaczace znaki (np. spacje) w tej ilosci, a dopiero potem zawartosc wlasciwa, ktora ma byc wyswietlana stopniowo. Dodatkowo po kazdym kroku w php, ktory powoduje jakies wyswietlenie danych powinienes wywolac funkcje flush" title="Zobacz w manualu php" target="_manual (w komentarzach do tej funkcji tez ma co nieco opisane, poczytasz i bedziesz wszystko wiedzial).

A swoja droga to, ze nikt nie odpowiedzial na Twoj temat nie oznacza jeszcze, ze mozesz sobie zakladac drugi traktujacy o tym samym. Radze dokladniej przestudiowac regulamin, na ktory sie zgodziles smile.gif Narazie pierwsze upomnienie..
atomik
Dzięki za odpowiedź ale to wszystko co piszesz już sprawdziłem i IE nie reaguje wyrzuceniem bufora na wysłanie nawet ponad 1024 spacji sad.gif

A co do upomnienia...

1. Nie napisalem drugiego posta tak sobie bo mi się nie chcialo czekać (kilka dni bez efektu minęło)

2. Gdyby forum dopuszczało dodanie kolejnej odpowiedzi po mojej ostatniej to bym to zrobił bo tak zacząłem... niestety ta możliwość (dwa posty pod rząd) jest zablokowana sad.gif (może warto by było to odblokować?)

3. W związku z powyższym nie miałem innego wyjścia chcąc uzyskać możliwość zadania jakiegokolwiek kolejnego pytania (może sie mylę to mnie popraw)

4. Coś za szybko ci idzie z tymi upomnieniami... a jak dostanę drugą żółtą kartkę to mnie wywalisz czy pójdę na ławkę rezerwowych aarambo.gif ?
FiDO
Cytat
Dzięki za odpowiedź ale to wszystko co piszesz już sprawdziłem i IE nie reaguje wyrzuceniem bufora na wysłanie nawet ponad 1024 spacji sad.gif

Sprobuj 4096 i poczytaj komentarze do funkcji flush na php.net. Wynika z nich, ze potrzeba wlasnie 4096 znakow. Jest tam zaprezentowanych tez kilka sposobow na zrobienie tego co chcesz.

Cytat
1. Nie napisalem drugiego posta tak sobie bo mi się nie chcialo czekać (kilka dni bez efektu minęło)

2. Gdyby forum dopuszczało dodanie kolejnej odpowiedzi po mojej ostatniej to bym to zrobił bo tak zacząłem... niestety ta możliwość (dwa posty pod rząd) jest zablokowana sad.gif (może warto by było to odblokować?)

3. W związku z powyższym nie miałem innego wyjścia chcąc uzyskać możliwość zadania jakiegokolwiek kolejnego pytania (może sie mylę to mnie popraw)

http://forum.php.pl/index.php?act=Regulamin#IV.2 smile.gif

Fakt, postow pod soba pisac nie mozna, ale mozna zastosowac trik.. jesli Twoj post jest ostatni to mozna go usunac i wtedy odpowiedziec (wklejajac ewentualnie zawartosc tego usuwanego posta na poczatku)

Cytat
4. Coś za szybko ci idzie z tymi upomnieniami... a jak dostanę drugą żółtą kartkę to mnie wywalisz czy pójdę na ławkę rezerwowych aarambo.gif ?

Za szybko? przeciez dopiero pierwsze. Jestes nowy, wiec masz taryfe ulgowa i narazie ostrzezenie bylo "slowne", nie wpisalem Ci go na liste. A to kiedy idziesz na "lawke rezerwowych" to juz kwestia indywidualna.. zalezy od ciezkosci przewinien, mozesz sobie to zalatwic jednym wybrykiem albo pracowac na to kilkoma mniejszymi smile.gif
DeyV
w takiej sytuacji nie można oprzeć się tylko na php.
Potrzeba pomocy ... JS.
A jak to zrobić?
Na początek pracy skryptu wyświetlić np. wartstwę z odpowiednim napisem.

A na końcu strony, już po wszystkich operacjach bazodanowych, uruchomić jakąś funkcję, która tą warstę ukryje.
Zresztą - wystarczy dodać wywołanie takowej w <body onload=""

Przy pomocy js można zrobić jeszcze inny ciekawy efekt - preloader, pokazujący postęp prac.
A by działał - wystarczy tylko co jakiś czas (co ileś pętli w skrypcie, co któreś zapyanie..) wyświetlić odpowiedni kod javascriptowy.
Zresztą - w PEAR jest świetna biblioteka służąca do tego.
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.