Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php][js]Chat na plikach
Forum PHP.pl > Forum > Przedszkole
Glarden
Napisałem sobie chat działający na plikach - i na moim kompie wszystko działa jak należy. Teraz tylko mam taki problem: chcę zrobić, żeby odświeżało co jakiś czas (powiedzmy, 10 sekund), żeby inni użytkownicy też mogli zobaczyć wiadomość. Skrypt wygląda tak:
  1. <meta http-equiv="Content-Type" content="text/html; charset=windows-1250"/>
  2. <form action='chat.php' method='post'>
  3. Autor: <input type='text' name='autor' /><br>
  4. Treść: <input type='text' name='tresc' style='width: 500px;' /><br>
  5. <input type='submit' value='OK'/>
  6. </form>
  7. <hr>
  8. <iframe frameborder='0' width='700px' src='chat2.php'>
  9. <script language="JavaScript" src="refresh.js"></script>
  10. <?php
  11. if (isset ($_POST['autor']) && ($_POST['tresc'])) {
  12. $autor = $_POST['autor'];
  13. $tresc = $_POST['tresc'];
  14. $wynik = "<b>".$autor."</b>: ".$tresc."rn";
  15.  
  16. $plik1 = file('chat');
  17. $plik = fopen('chat', 'w');
  18. $zapis = fputs($plik, $wynik);
  19. for ($i = 0; $i<count($plik1); $i++) {
  20. fputs($plik, $plik1[$i]);
  21. }
  22. fclose ($plik);
  23. $tab = file('chat');
  24. for ($i=0; $i<5; $i++) {
  25. $tab[$i] = str_replace ("rn", "<br>", $tab[$i]);
  26. echo ($tab[$i]);
  27. }
  28. }
  29. else {
  30. $tab = file('chat');
  31. for ($i=0; $i<5; $i++) {
  32. $tab[$i] = str_replace ("rn", "<br>", $tab[$i]);
  33. echo ($tab[$i]);
  34. }
  35. }
  36. ?>
  37. </iframe>

A to odświeżanie:
  1. ID=window.setTimeout("refresh();",10000);
  2. function refresh() {
  3. location.reload();
  4. ID=window.setTimeout("refresh();",10000);
  5. }


Nie jestem pewien, czy działa to odświeżanie, ale wydaje mi się, że nie, bo 10 sekund po załadowaniu strony ta "ani drgnie", żadnego "błysku" odświeżania. Widzicie jakieś błędy? Zaznaczam, że sam czat działa jak należy.
jarekh
Odswiezanie jest ok. To pewnie sprawa iframe.
Daj ten script do chat2.php, albo powyzej iframe.
skowron-line
Kod
ID=window.setTimeout("refresh();",10000);
function refresh() {
location.reload();
ID=window.setTimeout("refresh();",10000);
}


to sie wykona tylko raz powinno byc Interval ktory bedzie sie wykonywal w nieskonczonosc bo jak raz odswierzysz strone to fajnie a co potem??
Glarden
No właśnie z irame miałem głupi problem. Powinno być tak, że wpisuję po prostu: "<iframe frameborder='0' width='700px' src='chat2.php'></iframe>" i to z tego pliku powinno być na stronie. Zrobiłem tak i nie działało. Więc skrypt z iframe masz między tymi znacznikami.
skowron-line
moze zamiast bawic sie w iframe pomysl nad AJAX-em
Glarden
AJAX byłby dobry, gdybym go umiał. A nie umiem, mam tylko mgliste pojęcie, jak to działa, więc raczej nie opłaca mi się uczyć dla jednego skryptu, który mogę zrobić łatwiej.
skowron-line
mozesz uzyc jakiejs gotowej biblioteki np advAJAX lub mintAJAX lub innych, biblioteki sa opracowane tak ze wystarczy znac odrobine JS
Glarden
A właśnie z JS też u mnie dość kiepsko... Chociaż z jakąś książką mógłbym obsłużyć AJAXA. Ale wydaje mi się, że dla tego jednego skryptu nie opłaca się tego robić. Chodzi mi po prostu o to, żeby odświeżał ramkę co 10 sekund.
jarekh
  1. ID=window.setTimeout("refresh();",10000);
  2. function refresh() {
  3. document.getElementById('chat').src='';
  4. document.getElementById('chat').src='chat.php';
  5. ID=window.setTimeout("refresh();",10000);
  6. }
  7. <iframe id='chat' src="chat.php">
  8. </body>


moze tak?
Glarden
Hehe, jest to krok do przodu, ale nie to o co chodziło. Ramka odświeża się po 10 sekundach, ale cała jej zawartość znika. Zaraz pokombinuję, dzięki za pomoc.

EDIT: Już działa, dostawiłem jedną cyferkę i jest! Wielkie dzięki!
abc667
Cytat(skowron-line @ 17.06.2007, 20:07:14 ) *
Kod
ID=window.setTimeout("refresh();",10000);
function refresh() {
location.reload();
ID=window.setTimeout("refresh();",10000);
}


to sie wykona tylko raz powinno byc Interval ktory bedzie sie wykonywal w nieskonczonosc bo jak raz odswierzysz strone to fajnie a co potem??


dlaczego to miałoby się wykonać tylko raz?
Sylwin
Wstaw to na samą górę pliku jeszcze przed <? i będzie sie odświeżało co jakiś czas który możesz sobie wpisać smile.gif

<meta http-equiv='refresh' content='czas w sekundach;url=chat.php'>

Albo to w dowolnym momencie w skrypcie np jak user doda wpis:

  1. <?php
  2. echo"<meta http-equiv='refresh' content='czas w sekundach;url=chat.php'>";
  3. ?>


A tu masz kompletny skrypcik z odświeżaniem nazwij go chat.php:
Kod
<meta http-equiv='refresh' content='10;url=chat.php'>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250"/>
<form action='chat.php' method='post'>
Autor: <input type='text' value='<? echo$autor; ?>' name='autor' /><br>
Treść: <input type='text' value='<? echo$autor; ?>' name='tresc' style='width: 500px;' /><br>
<input type='submit' value='OK'/>
</form>
<hr>
<iframe frameborder='0' width='700px' src='chat2.php'>
<?php
if (isset ($_POST['autor']) && ($_POST['tresc'])) {
    $autor = $_POST['autor'];
    $tresc = $_POST['tresc'];
    $wynik = "<b>".$autor."</b>: ".$tresc."\r\n";
    
    $plik1 = file('chat');
    $plik = fopen('chat', 'w');
    $zapis = fputs($plik, $wynik);
    for ($i = 0; $i<count($plik1); $i++) {
        fputs($plik, $plik1[$i]);
    }
    fclose ($plik);
    $tab = file('chat');
    for ($i=0; $i<5; $i++) {
        $tab[$i] = str_replace ("\r\n", "<br>", $tab[$i]);
        echo ($tab[$i]);
    }
}
else {
    $tab = file('chat');
    for ($i=0; $i<5; $i++) {
        $tab[$i] = str_replace ("\r\n", "<br>", $tab[$i]);
        echo ($tab[$i]);
    }
}
?>
</iframe>
Glarden
Dzięki, odświeżanie już działa. Mam kolejne pytanie.
Zrobiłem tak, żeby pisać mogli tylko zalogowani. Potem na samym czacie - licznik typów on-line. Teraz potrzebuję zrobić coś takiego, żeby wyświetlał loginy zalogowanych użytkowników, ale ani rusz, nie mogę tego zrobić. Macie jakieś pomysły?
Sylwin
Musisz zapisywać zalogowanych w pliku. Tylko problem jest taki że jak ktoś zamknie przeglądarke a nie użyje opcji wyloguj nie będziemy mogli usunąć loginu z pliku...
Glarden
Dokładnie, to samo pomyślałem. Więc mógłbym zapisywać w bazie danych imię i datę zalogowania. Jeśli się wyloguje, to usuwa, jeśli przez więcej niż np. 5 min użytkownik nic nie robi, też usuwa. Ale mi się nie chce korzystać z bazy...
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.