Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Java][AJAX][PHP]odświeżany div
Forum PHP.pl > Forum > Przedszkole
Maciek1705
witam serdecznie jak zawsze z resztą. Mam być może mały problem którego nie potrafię rozwiązać już się z tym męczę baaardzo długo i nie wiem co i jak źle robię. Mam 2 pliki pierwszy jest taki:
  1. <script type='text/javascript' language="JavaScript">
  2. var object = false;
  3. if (window.XMLHttpRequest) object = new XMLHttpRequest();
  4. else if (window.ActiveXObject) object = new ActiveXObject("Microsoft.XMLHTTP");
  5. function getData(dataSource, divID)
  6. {
  7. if (object.readyState==4 || object.readyState==0)
  8. {
  9. var obj = document.getElementById(divID);
  10. object.open("GET", dataSource);
  11. object.onreadystatechange = function()
  12. {
  13. if (object.readyState == 4 && object.status == 200)
  14. obj.innerHTML= object.responseText;
  15. }
  16. object.send(null);
  17. }
  18. }
  19. function odswiezaj()
  20. {
  21. getData('plik.php','div');
  22. setTimeout("odswiezaj()", 1000);
  23. }
  24. </head>
  25.  
  26. <div id='div'></div>
  27. <script type='text/javascript' language="JavaScript">
  28. odswiezaj();
  29. </body>
  30. </html>


drugi plik jest tym plikiem odświeżanym przez funkcję odswiezaj i wygląda on tak:
  1. <form id='frmZamDzis' action='ccc.php' method='get'>
  2. <fieldset><legend>Zamówienia dzisiejsze</legend>
  3. <table border='1' id='tabZamDzis'>
  4. <tr>
  5. <td class='NrZamowienia'>Numer zamówienia</td>
  6. <td class='Login'>Login</td>
  7. <td class='DataZam'>Data zamówienia</td>
  8. <td class='CenaZam'>Kwota zamówienia</td>
  9. <td class='Faktura'>Faktura VAT?</td>
  10. <td class='Status'>Status</td>
  11. <td class='Szczegoly'>Zobacz szczegóły</td>
  12. <td>Zrealizowano?</td>
  13. </tr>
  14. <?php
  15. while($wiersz = mssql_fetch_array($wyniki))
  16. {
  17. <tr>
  18. <td class='NrZamowienia'>$NrZamowienia</td>
  19. <td class='Login'>$Login</td>
  20. <td class='DataZam'>$DataZamowieniaZM</td>
  21. <td class='CenaZam'>$KwotaCalkowita</td>
  22. <td class='Faktura'>$CzyFaktura</td>
  23. <td class='Status'>$Status</td>
  24. <td class='Szczegoly'>Pokaż</td>
  25. <td><input type='checkbox' name='NrZamowienia[]' value='$NrZamowienia' /></td>
  26. </tr>");
  27. }
  28. ?>
  29. <tr><input type='submit' name='wyslij' value='Wyślij'></tr>
  30. </table>
  31. </fieldset>
  32. </form>


oczywiście w tym 2 pliku plik.php dane są pobierane z bazy itp ale nie w tym rzecz chodzi mi o to jak zrobić aby po kliknięciu w jakieś wybrane pola checkbox których przypuśćmy w bazie będzie 20 i np ja wybieram sobie jakiś 5 zaznaczam je elegancko i co się dzieje? otóż po przeładowaniu plik.php za pomocą funkcji odświeżaj zaznaczone checkboxy przestają być zaznaczone. Moje pytanie brzmi jak zrobić aby raz zaznaczone pozostawały nadal zaznaczone do momentu wysłania formularza mimo ciągłego przeładowania strony?
DiH
Dane zczytujesz za każdym z bazy więc przy każdym wysłaniu zapytania (musi to być POST, nie GET) zapisuj ich wartości lub stany do bazy. Wtedy przy odświeżeniu rozpoznasz czy i które powinny być zaznaczone. Zamiast wysyłania zapytania co sekundę wymyśl lepiej coś mniej transferożernego, choćby wywołanie przy onchange, lub onselect jakiegoś elementu. Warto.

Łopatologicznie mógłbyś stworzyć w bazie pole, w którym przechowywałbyś, które checkboxy mają być zaznaczone, np. pole `IsSelectedCheckbox`, a w nim:
Kod
1|1|0|0|1

Czyli, że 1, 2 i 5 checkbox mają być zaznaczone.

Przy wyświetlaniu samej strony, na której są checkboxy sprawdzasz, które zaznaczyć:
  1. $c = mysql_fetch_array($zapytanie);
  2. $checked = array();
  3. $checkboxy = explode("|",$c['IsSelectedCheckbox']);
  4. for($i = 0; $i < sizeof($checkboxy); $i++) {
  5. if($checkboxy[$i]==1) {
  6. $checked[$i] = 'checked="checked"';
  7. }
  8. else {
  9. $checked[$i] = '';
  10. }
  11. echo '<input '.$checked[$i].' type="checkbox" name="sth"/>';
  12. }

Mogą być błędy - pisane w pośpiechu
Maciek1705
Może inaczej jak jest ten plik odświeżany
  1. <form id='frmZamDzis' action='ccc.php' method='POST'>
  2. <table border='1' id='tabZamDzis'>
  3. <tr>
  4. <td class='NrZamowienia'>Numer zamówienia</td>
  5. <td class='Login'>Login</td>
  6. <td class='DataZam'>Data zamówienia</td>
  7. <td class='CenaZam'>Kwota zamówienia</td>
  8. <td class='Faktura'>Faktura VAT?</td>
  9. <td class='Status'>Status</td>
  10. <td class='Szczegoly'>Zobacz szczegóły</td>
  11. <td>Zrealizowano?</td>
  12. </tr>
  13.  
  14. <tr>
  15. <td class='NrZamowienia'>1</td>
  16. <td class='Login'>ja</td>
  17. <td class='DataZam'>12-03-2010</td>
  18. <td class='CenaZam'>300</td>
  19. <td class='Faktura'>tak</td>
  20. <td class='Status'>ok</td>
  21. <td class='Szczegoly'>Pokaż</td>
  22. <td><input type='checkbox' name='NrZamowienia[]' value='1' /></td>
  23. </tr>
  24.  
  25.  
  26. <tr>
  27. <td class='NrZamowienia'>2</td>
  28. <td class='Login'>ja2</td>
  29. <td class='DataZam'>12-03-2010</td>
  30. <td class='CenaZam'>100</td>
  31. <td class='Faktura'>tak</td>
  32. <td class='Status'>ok</td>
  33. <td class='Szczegoly'>Pokaż</td>
  34. <td><input type='checkbox' name='NrZamowienia[]' value='2' /></td>
  35. </tr>
  36.  
  37. <tr><input type='submit' name='wyslij' value='Wyślij'></tr>
  38. </form>


to jest statyczna wersja i jak uruchomisz sobie to co napisałem to powinieneś mieć białą stronę z tabelką i dwoma wierszami i np zaznacz sobie jakiś to po sekundzie zniknie Ci zaznaczenie no i mi chodzi o to jak zrobić żeby nie znikało tylko tyle;p a może i aż
DiH
Myślę, że przede wszystkim źle to zaplanowałeś. Powiedz, skoro pobierasz ten dokument z tabelkami, który masz wypełnić, to po co go w ogóle odświeżać? Ciągle pobierasz dane z bazy, które się nie zmieniają. Zmienić się mają dopiero po przesłaniu formularza. IMHO twoja funkcja powinna przesylac dane i przeladowywac strone po wyslaniu formularza, tzn, Twój submit powinien wywolywac funkcje odswiezaj.
Maciek1705
ok już piszę o co dokładnie chodzi być może istnieje jakieś inne lepsze rozwiązanie. To tak mam panel administratora w nim jest zakładka odpowiedzialna za zamówienia towaru dokonane w dniu dzisiejszym. I tak jest tam div ten odświeżany na bieżąco w nim tym divie są informacje o zamówieniach ich numer kto zamówił kiedy itp jak jesteś na jednej stronie w tym panelu administratora i nie było by odświeżania nie widziałbyś nowych zamówień które np klient zrobił po tym jak już wszedłeś na stronę. Dzięki temu że jest div z zamówieniami odświeżany widzisz na bieżąco przez przeładowań itp jaki jest ruch w zamówieniach. Ok teraz dalsza opcja przy zamówieniach są pola checkbox są one po to że jak sobie sprawdzisz czy klient zapłacił za zamówienie i jeśli jego towar już jest spakowany gotowy do wysyłki to sobie go odznaczasz rozumiesz. No i tak możesz odznaczyć kilka zamówień naciskasz na klawisz wyślij i jest uruchamiany inny skrypt który pobiera numer zamówień tych zaznaczonych w checkboxie i zmienia im status itd itp. Właśnie do tego użyłem tego bajeru z odświeżaniem bo na bieżąco śledzę zamówienia z bazy. Mam nadzieję że dobrze objaśniłem:-)
CyberDuck_
A ja mam inny problem.
Dotarlem do tego skryptu poprzez google poniewaz szukalem odwpowiedzi najpierw tam.
Najpierw szukalem skryptu, ktory by mi odczytywal zawartosc pliku umieszczonego na
serwerze do zmiennej i znalazlem wlasnie ten skrypt i po malych przerobkach
wyglada on tak :
  1. <html>
  2. <head>
  3.  
  4. </head>
  5.  
  6. <body>
  7. <DIV id="zegar">tutaj</div>
  8. <script language="javascript">
  9. var costam = "";
  10. // tworzymy zmienna
  11. var object = false;
  12. // tworzymy obiekt XMLHttpRequest (dla IE jest troche inaczej, stad funkcja warunkowa)
  13. if (window.XMLHttpRequest) object = new XMLHttpRequest();
  14. else if (window.ActiveXObject) object = new ActiveXObject("Microsoft.XMLHTTP");
  15. // ponizsza funkcja pobiera dane ze wskazanego zrodla (pliku lub skryptu php) do wskazanego
  16. // DIVa poprzez obiekt XMLHttpRequest
  17. function getData(dataSource, divID)
  18. {
  19. // kontynuuje wylacznie gdy obiekt nie jest zajety
  20. if (object.readyState==4 || object.readyState==0)
  21. {
  22. // tworzy zmienna odpowiadajaca konkretnemu obiektowi na stronie
  23. var obj = document.getElementById(divID);
  24.  
  25. // czyta z pliku lub wykonuje skrypt
  26. object.open("GET", dataSource);
  27. // definiuje metode obslugi odpowiedzi serwera
  28. object.onreadystatechange = function()
  29. {
  30. // kontynuuje jesli transmisja zostala zakonczona powodzeniem
  31. if (object.readyState == 4 && object.status == 200)
  32. costam= object.responseText.substr(0,8);
  33. }
  34. // wysyla zadanie do serwera
  35. object.send(null);
  36. }
  37. }
  38. // w ponizszej funkcji wywolujemy funkcje getData z odpowiednimi parametrami
  39. // oraz wywolujemy ja sama rekurencyjnie po co okreslony czas (w naszym wypadku 1000 ms)
  40. function odswiezaj()
  41. {
  42. getData('news.php','zegar');
  43. setTimeout("odswiezaj()", 1000);
  44. document.getElementById("zegar").innerHTML = costam;
  45. }
  46. </script>
  47.  
  48. <script language=javascript>
  49. odswiezaj()
  50. </script>
  51. </body>
  52. </html>

No i ladnie dziala bo jak zapuszcze te stronke to sie pojawia miedzy "div id zegar" zawartosc tego pliku
news.php i jesli go zmienie na serwerze to ladnie sie zmienia to na stronie.
Zmiana tyczy sie jedynie tego, ze zawartosc pliku jest ladowana do zmiennej 'costam' ...
Ale jest jedno ale. Skrypt dziala w FF i Opera, a w IE nie chce dzialac.
Znaczy pobiera przy uruchomieniu zawartosc z pliku i umieszcza w zmiennej, a nastepnie
jesli zmienie zawartosc pliku news.php na serwerze to juz ta zmiana nie jest widoczna
na stronie. Inaczej niz w FF i Opera. Jak zrobic zeby to dzialalo tez w IE ?

Chcialem ten skrypt wykorzystac do pewnych rzeczy na stronie. Znaczy dalej
dopisalbym, ze jesli zmieni sie zawartosc pliku news.php na inna niz przy uruchamianiu
to wtedy zostanie wywoalana/wykonana jakas lokacja pliku na serwerze, ale jesli to nie ruszy
pod IE to dyskwalifikuje to zastosowanie tego skryptu ...
Malo tego zauwazylem pewna prawidlowosc, ze jesli otworze dodatkowa zakladke
w IE i uruchomie ten skrypt tak samo jak w pierwszej zakladce to zaladuje sie nowa zawartosc
i zmienia sie tez ona w pierwszej zakladce tak jakby skrypt mial dzialac prawidlowo.

I co nikt ze specow mnie nie poratuje ?
Bardzo prosze wstydnis.gif
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.