Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php+ajax]Dzialanie w czasie rzeczywistym
Forum PHP.pl > Forum > Przedszkole
marcio
EDIT: ok troche pokombinowalem i cos juz odswierza ale tylko 1 raz sad.gif i wiadomosci nie chca sie dodac poprzez ajax oto kod

Glowny plik shout'a shout.php
  1. <?php
  2. if(isset($_COOKIE['name']) && isset($_COOKIE['code']) && isset($_COOKIE['prawa']) && isset($_COOKIE['vip']) && $_COOKIE['prawa'] == 3) {
  3. include('config1.php');
  4. echo('<html><body>
  5. <head>
  6. <script type="text/javascript" src="mintAjax.js"></script>
  7. <script type="text/javascript">
  8.  
  9. function refresh() {
  10. var req = mint.Request();
  11.  
  12. req.OnSuccess = function() {
  13. $("response").innerHTML = this.responseText.toUpperCase();
  14. }
  15.  
  16. req.Send("czytaj.php");
  17. }
  18.  
  19.  
  20. function dodaj() {
  21. var req = mint.Request();
  22. req.AddParam("wpis", $("wpis").value);
  23. req.Send("wpis.php", "response");
  24. }
  25.  
  26. //setInterval("refresh()",1000);
  27. setTimeout("refresh()",1000);
  28. </script>
  29. </head>
  30. <h2>Shout</h2>
  31. <form action="'.$_SERVER['PHP_SELF'].'" method="post" id="form" onsubmit="dodaj(); return false;">
  32. <textarea name="wpis" rows="3" cols="20" style="background-color:#ECECEC; color:#000000; border: 1px solid red;">Wpis</textarea>
  33. <input type="submit" name="dodaj" value="Dodaj" style="background-color:#ECECEC; color:#000000; border: 1px solid blue;">
  34. </form>');
  35.  
  36. echo('<div id="response"></div></body></html>');
  37. }
  38. else echo('<html><body><h1>Dostepn do tej czesci strony zabrionony</h1>/<body></html>');
  39. ?>


Czytaj.php
  1. <?php
  2. include('config1.php');
  3. echo('<html><body>');
  4.  
  5. if($db = mysql_connect($pasy['host'], $pasy['login'], $pasy['haslo'])) {
  6. mysql_select_db($pasy['baza']);
  7.  
  8. $query4 = ('select * from shout order by id desc limit 5');
  9. $wynik4 = mysql_query($query4, $db);
  10.  
  11. echo('<table align="left">');
  12.  
  13. while($ksiega = mysql_fetch_assoc($wynik4)) {
  14.  
  15. $query5 = ('select * from users where login = "'.$ksiega['nick'].'"');
  16. $result = mysql_query($query5, $db);
  17. $lvl = mysql_fetch_assoc($result);
  18.  
  19. if($lvl['lvl'] == 3) $user = '<b style="color:#FF0000">$'.$ksiega['nick'].'</b>';
  20. else if($lvl['lvl'] == 2) $user = '<b style="color:#009900">+'.$ksiega['nick'].'</b>';
  21. else if($lvl['lvl'] == 1 && $lvl['vip'] != 'nie') $user = '<b style="color:#000080">^'.$ksiega['nick'].'</b>';
  22. else if($lvl['lvl'] == 1) $user = '<b style="color:#000000">~'.$ksiega['nick'].'</b>';
  23.  
  24. $wpis = wordwrap(stripslashes($ksiega['wpis']), 20, "r\n", 1);
  25.  
  26. <tr><td><font size="1"><a href="user.php?user='.$ksiega['nick'].'">'.$user.'</a></font> '); 
  27. if($_COOKIE['prawa'] == 2 || $_COOKIE['prawa'] == 3) echo(' <font size="1"><a style="color:#3333FF" href="?action=del&id='.$ksiega['id'].'">[usun]</a></font>');
  28. echo('</td></tr><tr><td><p style="font-size:12px">'.$wpis.'</p></td></tr>');
  29.  }
  30. }
  31. echo('</table></body></html>');
  32. ?>


Wpis.php
  1. <?php
  2.  
  3. include('config1.php');
  4.  
  5. if($db = mysql_connect($pasy['host'], $pasy['login'], $pasy['haslo'])) {
  6. mysql_select_db($pasy['baza']);
  7.  
  8. if(!empty($_POST['wpis']) && isset($_POST['dodaj'])) {
  9.  
  10. if(strlen($_POST['wpis'] < 150)) {
  11.  
  12. $nick = $_COOKIE['name'];
  13. $wpis = addslashes(htmlspecialchars($_POST['wpis']));
  14. $data = date('j/n/Y H:i:s');
  15.  
  16. $nowy = ("insert into shout(nick,wpis,data) values('$nick', '$wpis', '$data')");
  17. mysql_query($nowy, $db);
  18. }
  19. }
  20.  
  21. if(isset($_GET['action']) && $_GET['action'] == 'del') {
  22.  
  23. if($_COOKIE['prawa'] == 2 || $_COOKIE['prawa'] == 3) {
  24.  
  25. mysql_query('delete from shout where id = '.(int)$_GET['id'].'');
  26.  
  27. }
  28.  }
  29. }
  30. ?>


Jednak nie dziala zabardzo jak juz napisalem laduje sie tylko raz potem sa duze litery widzialem gdzies funckje na male ale juz nie pamietam gdzie i do tego nie dodaje wiadomosci za pomoca ajax moze ktos powiedziec co zle robie??

P.S prosze nie patrzec na kod to tylko pseudo kod narazie ma chodzic nawet zabezpieczony nie jest smile.gif

questionmark.gif

P.S dodam ze mam taki blad w konsoli
Cytat
Błąd: dodaj is not a function
Plik źródłowy: http://www.marcio.szu.pl/shout.php
Wiersz: 1
lord_t
Spróbuj takiej funkcji refresh:

Kod
function refresh() {
    var req = mint.Request();
    
    req.OnSuccess = function() {
        $("response").innerHTML = this.responseText.toUpperCase();
    }
    
    req.Send("czytaj.php");
    setTimeout("refresh()",1000);
}


Patrz ostatni wiersz:) Tylko odświeżanie co 1 sek to niekoniecznie najlepszy pomysłwinksmiley.jpg
marcio
A dlaczego jednak nie dodaje do bazy wpisu przy pomocy ajax??

P.S @lord_t pomogles i zmienilem co 5 sek
lord_t
Funkcja dolara użyta w funkcji dodaj przyjmuje id a nie name.

Ale skąd ten błąd o braku funkcji dodaj to nie wiem; może jakaś literówka.
marcio
Ok poradzilem sobie w pewnym sensie smile.gif odswierza i dodaje wpisy
  1. <?php
  2. echo('<html><body>
  3. <head>
  4. <script type="text/javascript" src="mintAjax.js"></script>
  5. <script type="text/javascript">
  6.  
  7. function refresh() {
  8. var req = mint.Request();
  9.  
  10. req.OnSuccess = function() {
  11. $("response").innerHTML = this.responseText.toUpperCase();
  12. }
  13.  
  14. req.Send("czytaj.php");
  15. setTimeout("refresh()",5000);
  16. }
  17.  
  18.  
  19. function dodaj() {
  20. var req = mint.Request();
  21.  
  22. req.OnSuccess = function() {
  23. $("response").innerHTML = this.responseText;
  24. }
  25.  
  26. req.SendForm("form");
  27. }
  28.  
  29. setTimeout("refresh()",1000);
  30. </script>
  31. </head>
  32. <h2>Shout</h2>
  33. <form action="wpis.php" method="post" id="form">
  34. <textarea name="wpis" rows="3" cols="20" style="background-color:#ECECEC; color:#000000; border: 1px solid red;">Wpis</textarea>
  35. </form>
  36. <button onclick="dodaj()" style="background-color:#ECECEC; color:#000000; border: 1px solid blue;">Wyślij formularz</button>');
  37.  
  38. echo('<div id="response"></div></body></html>');
  39. ?>

I jest good jednak jest jeszcze cos co mi sie nie podoba ta funkcja this.responseText.toUpperCase(); zmienia wszystkie znaki na duze i powieksza wszystko widzialem gdzies funckje ktora zamiebia wszystko na male znaki ale nie pamietam jej nazwy czy ktos moze podac lub ogolnie funckje zeby teskt mial jego normalna wartosc a nie ze wszystko musi byc duze albo male??

Jeszcze jedno nie wiem czy to wina wielkich liter ale tak mi sie nie zdaje ale gdy klikam na link usun w pliku testowym tam gdzie jest ajax to on wiadomosc sie nie usuwa nawet gdy zmienie wielkie litery na takie jakie powinny byc czy poprostu dla linku mam dodac tez zdarzenie onclick(); z funcka wysylaja tresc metoda get do pliku wpis.php??

Czyli tak
  1. <?php
  2. //wyswietlanie linka
  3. if($_COOKIE['prawa'] == 2 || $_COOKIE['prawa'] == 3) echo(' <font size="1"><a onclick="usun()" style="color:#3333FF" href="?action=del&id='.$ksiega['id'].'">[usun]</a></font>');
  4.  
  5. // i tdo tego dodac taka funkcje w ajax
  6.  
  7. function usun() {
  8.  
  9. var req = mint.Request();
  10. req.AddParam("action", "action=del");
  11. req.AddParam("id", $("id").value);
  12. req.Send("wpis.php", "response");
  13. }
  14. ?>

Czy dobrze mowie bo nie wiem co zrobic z tym usuwaniem albo to wina php oczywiscie plik wpis.php ma nadal taka sama zawartosc jak ta co podalem w pierwszym poscie smile.gif


P.S jak to optymalizowac bo widze ze nie dziala to jak profesjonalny shout w php+js+ajax czy tam w javie tylko poprostu dziala na zasadzie wysyla zapytania w tle i tyle a co z streaming html czy cos takiego trudne jest to do zastosowania??
lord_t
Funkcja toUpperCase i inne:) Jeśli nie chcesz zmieniać wielkości to wywal tę funkcję razem z poprzedzającą kropką.

Co do usuwania:
Martwi mnie to drugie id tu:
Kod
req.AddParam("id", $("id").value);


$("id").value odszuka element o id="id" (np. <input .... id="id" ...> ) i wyciągnie z niego value.
Proponuje zmienić ten identyfikator na jakiś inny np. id2 winksmiley.jpg
marcio
No ok masz nastepnego + odemnie ogolnie nie majac duzysz liter wpisy usuwa ale dodam funckje zeby po usunieciu zaladowala shout'a smile.gif ogolnie chcialem zapytac czy te rozwiazanie ktore podalem jest dobre to z tym onclick i funckja usun() bo jesli tak to mniej wiecej zrozumialem ajax wieksze problemy mam z js

P.S jaka jest roznica pomiedzy mintAjax a adAjax??

P.S2 znasz jakies dobre kursu na temat js+ajax??Mam 2 ksiazki do js ale glownie chodzi mi o ajax oprocz kursu z aktualnej strony mintAjax

Kurde
  1. <?php
  2. echo('<a onclick="setTimeout("refresh()",5000);" style="color:#3333FF" href="wpis.php?action=del&id='.$ksiega['id'].'">[usun]</a></font>');
  3. ?>

Nie chce dzialac nie laduje shout'a bo usunieciu moge dodac header przy usuwaniu ale po co ladowac cala strone?

Hehe wywala mi syntax'a sorki ale js jeszzce nie znam dlatego lamie
lord_t
Chyba dobre (specjalistą nie jestem). Z mintAjaxa nie korzystałem, wczytywać mi się w dokumentację też nie chce;)

MintAjax a advAjax:
Adv to biblioteka implementująca tylko ajaxa, a mint z tego co widzę to bardziej taki mały framework. W przypadku minta wygląda na to, że ktoś zrobił implementację ajaxa a potem zaczął dodawać bajery typu fadeIn, fadeOut. Zainteresuj się jQuery - ma to ajaxa + dużo innych bajerów:)

Kursy:
Ja ajaxa uczyłem się na advAjax (to co na stronce + przykłady). Nie znam kursów.

Troche zamotane to przedostatnie zdanie i nie wiele z niego wiem.
marcio
Chodzi o te:
Cytat
Nie chce dzialac nie laduje shout'a bo usunieciu moge dodac header przy usuwaniu ale po co ladowac cala strone?

Chodzilo mi o to ze jak klikne na link do usuniecia wpisu to on sie usuwa jednak shout sie juz do iframe nie laduje zostaje pusta strona i chcialem dodac do tego linka onclick z ladowaniem shout'a ale jakos sobie poradze ogolnie dzieki wezme sie za js a potem za advAjax+mintAjax bo samo php juz nie wystarcza tongue.gif

P.S ogolnie chcialem zapytac jesli dodam emotki to shout'a czy przy dzialaniu skrypty ajax w tle nie bedzie widac ze emotki sie laduaja bo jesli tak to ich tam nie dam bo teraz wyglada wszystko tak plynnie
lord_t
Możliwe, że ten onclick w <a> coś 'psuje'. Popróbuj co tam nie gra:) Ja widzę suchy kod, Ty masz żywy:)

Jeśli ten plus pomiędzy mint a adv miał oznaczać uźywanie obu tych bibliotek naraz to raczej bez sensu.

Rada: dobrze jeśli przy wyłączonym js strona będzie działać dalej prawidłowo:)

To raczej zależy od tych emotek (waga). To może wgraj je od razu ze stroną? Tylko je ukryj? Ale niech przeglądarka je już ma.
marcio
Cytat
Jeśli ten plus pomiędzy mint a adv miał oznaczać uźywanie obu tych bibliotek naraz to raczej bez sensu

Nie chodzi zeby nauczyc sie obydwoch w stopniu takim zebym cos w nich potarfil napisac i uzywac je kiedy jest taka potrzeba

Cytat
To raczej zależy od tych emotek (waga). To może wgraj je od razu ze stroną? Tylko je ukryj? Ale niech przeglądarka je już ma.

Duze to one nie waza kolo 1bk smile.gif ale chodzi ci o cache mysle ze jest to zbedne albo ich nie dam w cale i i tak nie widac roznicy w ladowaniu strony gdy ich nie ma smile.gif

Cytat
Rada: dobrze jeśli przy wyłączonym js strona będzie działać dalej prawidłowo:)

Wylacze i zobacze czy dziala tongue.gif


Hehe racja nie dziala a jak to mozna poprawic?
lord_t
Ja to widzę tak:
Zakładam, że przed wpisaniem się js-criptu wszystko powinno działać, tyle że z przeładowaniami.
Js sam dopisuje po załadowaniu strony (lub załadowaniu DOM -> funkcja ready() jQuery) wszystko co mu potrzebne tam gdzie trzeba, a co teraz jest wpisane na sztywno np. takie zdarzenie onclick: przy wyłączonym js go nie ma, a przy włączonym zostaje dodane automatycznie.


http://perfectionorvanity.com/2006/08/27/n...awanie-zdarzen/
^patrz też 1. akapit 1.komentarza:)
marcio
Ok zrozumialem a chcialem zapytac sie jak zrobic animacje podczad gdy ktos kliknie na button dodaj myslalem zeby to zrobic tak mam onclick() na funkcje dodajaca + dodac nowy div z display none nad shout'em i gdy bede dodawac shout'a dac display block dla div o id load i wyswietlic w nim img potem na koniec funckji wyczyscic tego div i dac mu display none
  1. <?php
  2. function dodaj() {
  3.  
  4. window.document.getElementById("load").style.display=(window.document.getElementById("load").style.display == "none") ? "block" : "none";
  5. //po odblokowaniu dac funkcje co by robila img np mint.fx.Round("element"); tylko nie wiem zabardzo jak ja nazwac co wy na to??
  6. var req = mint.Request();
  7.  
  8. req.OnSuccess = function() {
  9. $("response").innerHTML = this.responseText;
  10. }
  11.  
  12. req.SendForm("form");
  13. window.document.forms.form.wpis.value="";
  14. //tu blokujemy
  15. window.document.getElementById("load").style.display=(window.document.getElementById("load").style.display == "none") ? "block" : "none";
  16. }
  17. ?>

Co wy na to??
lord_t
Z dokumentacji mintAjaxa; funkcje obiektu Request:
Cytat
OnLoading() - funkcja wywoływana podczas ładowania odpowiedzi
OnLoaded() - funkcja wywoływana po załadowaniu odpowiedzi


Chyba dobrze kombinujesz, ale wykorzystaj to ^ .
marcio
Mozesz powiedziec z jakiej dokumentacji ja czytam to http://mintajax.pl i tego tam nie widzialem to popatrze na przyklady
lord_t
http://mintajax.pl/Dokumentacja/Request/

to OnLoading definiujesz chyba tak samo jak tu OnS... :
Kod
req.OnSuccess = function() {
        $("response").innerHTML = this.responseText;
    }
marcio
Aha myslalem ze juz takie sa smile.gif a je trzeba napisac samemu?Mysle ze jeszcze nie dam rady tego zrobic nic poczekam jak sie poducze to napisze widzialem gotowca w necie
  1. <?php
  2. <script>
  3.  function anim() // będzie pokazywać animacje przy dodaniu nowego tekstu
  4. {
  5. new Effect.BlindDown(document.getElementById('tresc33')); // pokazyje animacje diva tresc33
  6. }
  7.  
  8. function dodaj() // dodaje tekst do bazy danych ..
  9. {
  10. advAJAX.get({
  11. url: "pokaz.php",
  12. onSuccess : function(obj) { document.getElementById("tresc33").innerHTML = obj.responseText; },
  13. onError : function(obj) { alert("Error: " + obj.status); }
  14. });
  15.  
  16. }
  17.  
  18.  
  19.  
  20.  
  21. function blad()
  22. {
  23. alert('zle popraw dane ');
  24. }
  25.  
  26. function dodajj()
  27. {
  28.  
  29. advAJAX.submit(document.getElementById("the_form"), {
  30.  onLoading : function(obj)
  31. {  document.getElementById("loading").innerHTML = "<img src=load.gif><b>ładowanie czekaj ...</b>";  },
  32.  onComplete : function(obj) {  document.getElementById("loading").innerHTML = ""; },
  33. onSuccess : function(obj) {
  34. if (parseInt(obj.responseText) == 1)
  35. dodaj();
  36. else
  37. blad();
  38.  
  39.  
  40. }
  41.  
  42. });
  43.  
  44. }
  45.  
  46. </script>
  47. ?>

tylko co to za lib i jak tego uzyc w moim przypadku?

Sorki jest to advAjax sciagne go na server i zobacze czy dziala
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.