Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: js + mysql
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
Majcon
Witam
Napisalem kod
  1. <?
  2. require('konfiguracja.php');
  3. $db = new mysqli($db_host, $db_user, $db_pass, $db_name);
  4. $data = time();
  5. $sel = $db->query("SELECT * FROM `ggczat_log` WHERE `kanal` = 'support' AND `last` > '{$data}' ORDER BY `last` ASC");
  6. while($row = $sel->fetch_assoc())
  7. {
  8. $c = date("d.m.Y G:i:s", $row['last']);
  9. $log .= "<br><b>".htmlspecialchars($row['nick'])."</b> {{$c}} ".htmlspecialchars($row['log']);
  10. }
  11. ?>
  12. <html> <head> <title>xd</title>
  13. <script src="http://code.jquery.com/jquery-latest.js"></script>
  14. <script type="text/javascript">
  15. function majcon(){
  16. $("#czas").load("#czas");
  17. }
  18. window.setInterval(majcon(), 500);
  19. </script> </head>
  20.  
  21. <body onload="majcon();">
  22.  
  23. <div id="czas">
  24. <?
  25. echo $log;
  26. ?>
  27. </div> </body> </html>

Wszystko prawie dobrze bo nie wiem dlaczego ale $data tez mi sie odswieza a ma sie nie odswezac i nie wiem jak to zrobic zeby $data byla caly czas taka sama od zaladowanai strony do odswiezenia recznego
johnny_b
Cześć Majcon!

Dzieje się tak, ponieważ użyłeś setInterval, i funkcja uruchamia się co 500ms w przypadku zmiany danych jest to właśnie taki efekt, przy takim zastosowaniu, spróbuj użyć funkcji anonimowej i jej wywołaniu automatycznym po załadowaniu strony, np.

  1. (function () {
  2. $("#czas").load("#czas");
  3. }).();


Btw. żeby zatrzymać wywoływanie setInterval(), musi być wywołane clearInterval(), ale w Twoim przykładzie raczej nie będzie miało to zastosowania, lepiej wywołać po prostu jednorazowo funkcję przy ładowaniu strony. Dodatkowo z
  1. <body onload="majcon()">
zmień na samo
oraz usuń linie
  1. window.setInterval(majcon(), 500);


Pozdrawiam
Majcon
Ech nie zrozumiales mnie chodzi o to ze ma sie odswiezac div o id czas a wnim jest wyswietlony log ktory jest pobierany z bazy i wyswietlany w divie czas tylko przy pobraniu loga zmienna $data tez sie przeladowywuje
johnny_b
Cześć,
Ok, sorry za nieporozumienie, w takim razie jeżeli teraz domyślam się o co Ci chodzi, to korzystając z JS nie odświeżysz kodu PHP, bo parser tylko wyświetli jedną wartość, musiałbyś w PHP zrobić odświeżanie, tak jak teraz jest to nie zadziała. Aktualnie skrypt ten wyświetla co 500ms, wartość w <?php echo $log; ?> ale tylko plain text utworzony przez php -> czyli bez zmian, tzn funkcja js, działa, ale nie widzisz tego bo wartość jest cały czas taka sama.

Pozdrawiam


Heh, kurcze chyba na dziś mi starczy, bo przeczytałem ponownie i chyba dalej to nie jest odpowiedź, na Twoje pytanie wink.gif przepraszam za zamieszanie
Majcon
Spoko moze ja troche niezrozumiale napisalem

Wiec tak chodzi oto zeby pobierac loga z czatu ktory jest zapisany w bazie i wyswietlic go na stronie i log zeby byl pobierany od momentu wejscia na strone do terazniejszego czasu czyli musi sie odswizac
johnny_b
To jeżeli chcesz odczytywać cyklicznie dane z bazy to JS nie odświeżysz tego, php to musi robić lub inny backendowy język smile.gif, sam JS w domyślnym ujęciu (klienckiego js) tego nie zrobi
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.