Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pokazywanie na bieżąco stanu pętli for()
Forum PHP.pl > Forum > Po stronie przeglądarki
ketiv
Witam.
Mam taki oto problem.
Mam skrypt w którym w pętli for przetwarzane są dane. Jednakże ilość iteracji jest zmienna, czasem jet to kilkanaście, czasem kilka tysięcy wywołań pętli. W związku z tym chciałbym wiedzieć na jakim etapie jestem. W najprostszym rozwiązaniu wymyśliłem sobie div'a, gdzie będę wyświetlał wartość iteracji za pomocą innerHTML. No i na tym padam:(
Potrafię zmienić tego div'a, ale po jakimś zdarzeniu (onchange, onkeyup), ale nie mam pojęcią jak takie zdarzenie wymusić w pętli.
Narazie mam informację o wykonaniu dopiero jak się całość przetworzy, a co za tym idzie strona załaduje, tylko, że czasem to zwicha, i chciałbym wiedzieć w którym momencie.

Upraszczając, jestem na takim etapie (chodz nie wiem czy to nie kozi róg;) )
  1. <?php
  2.     <script type=\"text/javascript\">
  3.        function addText(text) {
  4.        document.getElementById('test').innerHTML += text;
  5.        }
  6.    </script>
  7. ";
  8.  
  9. echo "<div id='test'></div>";
  10. echo "<form method='post' action='test.php'><input type='submit' name='start' value='start'></form>"; //uruchomienie pętli
  11.  
  12. echo "<input type='text' name='cos1' onkeyup='addText(\"cokolwiek\")' >"; //coś do testów
  13.  
  14. if ($start=='start'){
  15.        
  16.         for ($i=0;$i<=10;$i++){
  17.            //coś co przekaże mi aktualne $i do div'a
  18.            sleep(1);     //tylko po to, żeby zobaczyć efekt na czas testów
  19.            //reszta skryptu
  20.         }
  21. }
  22. ?>


Jako, że to dopiero moje początki, prosiłbym o wyrozumiałość winksmiley.jpg
Pozdrawiam
Ketiv
vsemak
wewnątrz for musisz wywolac funkcje javascript aby to zrobic co wywolanie musialbys wyswietlac
<script>
addText('ilosc rekordow za nami');
</script>
powinienes tez zmodyfikowac funkcje addText lub dodac nowa ktora bedzie zamiast dodawac tekst podmieniac tekst zeby za kazdym razem wyswietlac aktualny stan petli np.
10 ze 100
20 ze 100
40 ze 100

Jendak takie wyswietlanie jest dosc niekonwencjonalne. Przy 10000 rekordów plik html urosnie do kosmicznych rozmiarów.

PHP nie nadaje się do takich zadań.
ketiv
Dzięki, właśnie o czymś taki myślę, ale właśnie z tym wyświetlaniem mam problem.

ten fragment generuje niestety błąd sad.gif
  1. <?php
  2.  <script>
  3.    addText('ilosc rekordow za nami');
  4.  </script>
  5. ";
  6. ?>


jak dodałem coś takiego, to już błędu nie mam, ale też nic do przeglądarki nie jest wysyłane:(
  1. <?php
  2.  <script>
  3.    call addText('ilosc rekordow za nami');
  4.  </script>
  5. ";
  6. ?>
Istalacar
Robiłem jakiś czas temu podobną rzecz - ale zamiast wypluwania skryptu js, który zacznie działać dopiero po wczytaniu strony / serwer zbuforuje dane żeby je wysłać dopiero po chwili, etc. użyłem zapisywania do mysql, aktualnego cyklu i potem z drugiego skryptu z użyciem ajaxa pobierałem.
Nie wiem czy wysyłać te skrypty czy będziesz je pisał samodzielnie - napisz jeśli potrzebujesz.
sowiq
Cytat(ketiv @ 6.03.2009, 15:10:04 ) *
jak dodałem coś takiego, to już błędu nie mam, ale też nic do przeglądarki nie jest wysyłane:(

flush" title="Zobacz w manualu PHP" target="_manual
ketiv
@Istalacar
Dzięki, badzo chętnie skorzystam z pomocy.
Tak na prawdę to nie wiem co gorsze/lepsze. Wykorzystanie w tym celu MySQL'a spowoduje, że pojawi się masa dodatkowych odwołań do bazy (zapisujących stan, i później odczytujących). Nad takim rozwiązaniem już też myślałem, tym bardziej, że w moim przypadku ilość iteracji jest właśnie zależna od ilości rekordów w tabeli MySQL. Co za tym idzie, mogę dorobić dodatkową kolumnę ze statusem przetworzenia rekordu.
Do tej pory wszystko co pisałem wykorzystywało tylko HTML, PHP i MySQL - JS i Ajax mocno sporadycznie, i to najczęściej jakieś przerbiane gotowce.

Jeśli już cos takiego ćwiczyłeś, i wyszło, że MySQL jest lepszym rozwiązaniem niż JS, to chętnie skorzystam z doświadczenia.

Pozdrawiam
Ketiv
Istalacar
To nie był projekt - po prostu znalazłem funkcję set_time_limit i chciałem sprawdzić jak ona działa, tak więc było tu uruchomione wyłącznie przezemnie do testów, nie optymalizowane w żaden sposób etc.
Tutaj możesz ściągnąć te 2 pliki:
http://istalacar.com/download/test.rar
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.