Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Powtarzanie kodu
Forum PHP.pl > Forum > Przedszkole
ilidir
Witam szukam rozwiązania które umożliwi mi uruchomienie kodu PHP jak i HTML co na przykład 1 sekundę. Nie mówie tutaj o CRONIE.
Turson
setInterval() + ajax
ilidir
liczyłem na pomoc w formie przyklacdu biggrin.gif
trueblue
http://lmgtfy.com/?q=setinterval+ajax
ilidir
  1. <?php $query = "SELECT * FROM czat ORDER BY id_czat DESC LIMIT 10;";
  2.  
  3. $result = @mysql_query($query) or die('<p class="blad">Wystąpił błąd podczas pobierania wpisów z bazy.</p>'); ?>
  4. <ul>
  5. <?php
  6. while ($row = mysql_fetch_array($result)) {
  7. $enazwa = stripslashes($row['user_name']);
  8. $etresc = stripslashes($row['tresc']);
  9. //zawijanie tekstu co 20 znaków
  10. $nowytekst = wordwrap($etresc, 20, "\n", true);
  11.  
  12. echo ('
  13. <li>
  14. <div class="meta">
  15. <p>'.$enazwa.'</p>
  16. </div>
  17. <div class="wpis">
  18. <p>'.$nowytekst.'</p>
  19. </div>
  20. </li>');
  21. }
  22. ?></ul>



chciałbym aby ten kodwykonywał się co jakiś czas. Przesłaliści mi mase tutoriali ale nie wiem od czego zacząć. Wiem że w samej Javascript nie wolnowykonywać połączeń i zapytańdo bazy danychbojest to zbrodnia. Zatem należy to zapytanie wykonać w php a nastepnie przesłać je do Javascript. Jak rozumiem wyświetlanie wynikówrównież musiałbym przenieść do javascript.
Turson
JS może komunikować się z PHP za pomocą ajaxa.
http://api.jquery.com/jquery.ajax/
ilidir
witam

znalazłem taki kod:

var interval = setInterval(function() {
var zmienna1 = $('.jakis_input_1').val(); //wartosc zmienna1 = 1
var zmienna2 = $('.jakis_input_2').val(); //wartosc zmienna2 = 2
$.ajax({
type: "POST",
url: "test.php",
dataType : 'json',
data: {
dana1 : zmienna1,
dana2 : zmienna2,
},
success : function(json) {
alert( json['enazwa'] + "\n" + json['etresc']);
}
});
},1000);


Teraz jak rozumiem powinienem utworzyc plik test.php iw nim zawrzec kod php obsługujący połaczenia do bazy danych i zwrócenie wartosci enazwa i etresc. Jednoczesnie moge wykorzystac zmienne dana: 1 oraz dana: 2 do przesłania danych do skryptu. Ale o ile dobrze rozumiem moge tylko odbierac dane prawda questionmark.gifquestionmark.gifquestionmark.gif
nospor
W kodzie co pokazales wysylasz i odbierasz dane.
Jesli nie rozumiesz tych paru linijek, to zajrzyj wkoncu do dokumetacji AJAX w jQuery, a bedziesz wiedzial co kazda linijka robi a nie zgadujesz
ilidir
ale ja rozumiem co oznaczaja te linijki mam tylko problem z rozwiazaniem swojego problemu jezeli bym go nie mial to bym tu nie pisał
nospor
Napisales
Cytat
Ale o ile dobrze rozumiem moge tylko odbierac dane prawda
wiec ci wyjasnilem, ze mozesz zarowno wyslac i odebrac. Skoro tego nie wiedziales to poraz kolejny piszę: zapoznaj sie z tymi paroma linijkami.
Jesli zas to wiedziales to nie rozumiem skad pytanie, ze mozesz tylko dane odebrac.... Moze chodzilo ci o cos innego?
ilidir
data: {
dana1 : zmienna1,
dana2 : zmienna2,
},

wysyłam dane

alert( json['enazwa'] + "\n" + json['etresc']); - odbieram dane


Nospor ja po prostu nie wiem w jaki sposób wykorzystać ten kod do tego co chce osiągnąć hyh
nospor
No dobrze. Ja sie tylko ustosunkowalem do tego pytania
"Ale o ile dobrze rozumiem moge tylko odbierac dane prawda"
I juz. Ciesze sie, ze juz to zostalo wyjasnione smile.gif
ilidir
a mam jeszcze jedno pytanie czy musze coś jeszcze dodać do pliku php zeby uruchomić powyższyskrypt questionmark.gifquestionmark.gif



siema poczyniłem pewne postępy i teraz tak mam 2 pliki

pierwszy to plik czat_ajax.php w includowanym pliku config mamy polaczenie z baza danych
  1. header('Content-type: application/json');
  2. include 'config.php';
  3. db_connect();
  4. check_login();
  5. $user_czat = get_user_data();
  6. $nazwa = $user_czat['user_name'];
  7.  
  8. $query = "SELECT * FROM czat ORDER BY id_czat DESC LIMIT 10;";
  9.  
  10. $result = @mysql_query($query) or die('<p class="blad">Wystąpił błąd podczas pobierania wpisów z bazy.</p>');
  11.  
  12. while ($row = mysql_fetch_array($result)) {
  13. $enazwa = stripslashes($row['user_name']);
  14. $etresc = stripslashes($row['tresc']);
  15. //zawijanie tekstu co 20 znaków
  16. $nowytekst = wordwrap($etresc, 20, "\n", true);
  17. $tablica = array();
  18. $tablica['wynik_1'] = $enazwa;
  19. $tablica['wynik_2'] = $nowytekst;
  20. echo json_encode($tablica);
  21. }
  22.  
  23. db_close();


i teraz mam drugi plik czat.php w ktorym znajduje sie script
Kod
<script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js" ></script>
            <script type="text/javascript">
                function ajaxFunction()
                {
                    var xmlhttp;
                    if (window.XMLHttpRequest)
                    {
                    // code for IE7+, Firefox, Chrome, Opera, Safari
                        xmlhttp=new XMLHttpRequest();
                    }
                    else if (window.ActiveXObject)
                    {
                    // code for IE6, IE5
                        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
                    }
                    else
                    {
                        alert("Your browser does not support XMLHTTP!");
                    }
                }
            </script>
function czatuj() {
    alert("test");
        var interval = setInterval(function() {
            var zmienna1 = $('.jakis_input_1').val(); //wartosc zmienna1 = 1
            var zmienna2 = $('.jakis_input_2').val(); //wartosc zmienna2 = 2
            $.ajax({
                type: "POST",
                url: "czat_ajax.php",
                dataType : 'json',
                data: {
                    dana1 : zmienna1,
                    dana2 : zmienna2,
                },
                success : function(json) {
                    alert( json['wynik_1'] + "\n" + json['wynik2']);
                },
                error:    function(error) {
        alert("Jest jakis klopot");
    }
            });
        },100)};


wywołanie mam w czat.php poprzez wykorzystanie
  1. echo '<script type="text/javascript">czatuj();</script>';




jezeli uruchomie w przeglaradce plik czat_ajax.php to wyświetlają mi się zawartości bazy danych.
jeżeli uruchomie plik czat.php to wyswietla mi sie alert test a nastepnie pojawia misie alert Jest jakis klopot

nie wiem co robie zle sad.gif Prosze o pomoc
nospor
Firefox -> Firebug -> konsola -> i tam sobie zobacz co zwraca ci dokladnie AJAX to bedziesz wiedzial co nie tak.
ilidir
nospor jestes genialny biggrin.gif dzieki nie wiedziałe mnawet ze firebug daje takie mozliwosci

Wiec teraz widze ze ajax mi to dobrze ogarnia tylko dlaczego on mi to wypisuje w kupie o takie coś:

{"wynik_1":"Admin","wynik_2":"gdgdgdfgdfg"}{"wynik_1":"Admin","wynik_2":"sadbjhsabjhbashdb"}{"wynik_1":"Admin","wynik_2":"kdkjadkajdbkd"}{"wynik_1":"Admin","wynik_2":"jdshjkskjsnjnjkfnfjk\nfndsjknjfknsdjkfnjks\ndnjkfnkjsdnsdkjfnsdj\nkdsnfjksdnfsdjkfndsj\nfkdsnfjdsnfjsdfnsdkj\nfndfjkdsnfkjfnkjndsj\nkfnsdkjfnj11111"}{"wynik_1":"Admin","wynik_2":"hgjhgjhgjhgjhghjbjhb\nhjbhjbjhbhjbhjhhbhhb\njhbjhbhjbhbjhbjhbjbh\njb"}{"wynik_1":"Admin","wynik_2":"test smile.gif"}{"wynik_1":"Admin","wynik_2":"klhakjndjkawdn"}{"wynik_1":"Admin","wynik_2":"asdadad"}{"wynik_1":"Admin","wynik_2":"asdadad"}

czy to jest wynikiem uzytej tabeli questionmark.gifquestionmark.gif chodzi mi o to aby każdy zbiór był wysyłany pod odczytaniu z bazy danych i odrazu wyswietlany przy pomocy alertu
nospor
Dales w petli:
echo json_encode($tablica);
ty to masz wszystko zaladowac do jednej tablicy i dopiero po petli calosc masz przepuscicc przez json_encode. Masz miec jeden obiekt JSON, a teraz generujesz tych obiektow tyle, ile masz rekordow. Nic dziwnego, ze AJAX wariuje smile.gif
ilidir
nooo i terz jest tak jak chce biggrin.gif dzieki nospor jak zawsze na ciebie mozna liczyć smile.gif

a mam takie pytanie wiem że idzie to zrobić ale nie wiemdo końca jak to ugryść.

użytkownik wchodzi na strone i coś tam sobierobi nastepnie naciska przycisk w tym momencie zaczyna się odliczanie na przyklad 10 minut po upływie tego czasu wykonuje sie skrypt php ale chcialbym aby ten skrypt wykonal się nawet jesli uzytkownik zamknie przygladarke.

Jakies pomysly questionmark.gifquestionmark.gif smile.gif
viking
Możesz zapisać godzinę i zdarzenie a później w cronie je wykonać.
ilidir
to generalnie cron musialby wywolywac jakas funkcje co 1 sekunde a to nie jest mozliwe smile.gif Jakies inne pomysly questionmark.gifquestionmark.gif
untorched
To generalnie się zdecyduj czy mówisz o wykonywaniu co sekunde czy co 10 minut...
ilidir
Cytat(untorched @ 23.11.2014, 01:43:52 ) *
To generalnie się zdecyduj czy mówisz o wykonywaniu co sekunde czy co 10 minut...



czyli jak rozumiem można za pomoc skryptu php dodać do crona wywołanie funkcji php myślałem że to jest na odwrót.
MWL
Za pomocą PHP nie dodasz niczego do crona, chyba że masz odpowiednio serwer skonfigurowany (ale podejrzewam że to nie jest bezpieczne, większość hostingów na pewno na to nie pozwala).

Cron to jest zadanie w harmonogramie które się wykonuje co x czasu, albo jednorazowo w określonym czasie. Używasz go za pomocą np. konsoli w linux, albo w panelu administracyjnym w cPanelu lub innym narzędziu.
ilidir
ja doskonale wiem jak dziala CRON dlatego nie rozumiem dlaczego caly czas ktos mi mowi ze to co chce zrobie przy pomocy CRON-A

mam jeszcze jeden problem a mianowicie mam taki kod AJAX

Kod
<script type="text/javascript">
    function czatuj() {                                                
        var interval = setInterval(function() {

            $.ajax({
                type: "POST",                                        
                url: "czat_ajax.php",                        
                dataType : 'json',                        
                data: {
                },
                success : function(json) {                                                            
                    var div = document.getElementById("tess");
                    for (var i=0;i<=9;i++)
                        {
                        div.textContent = json[i]['login'];
                        var text = div.textContent;
                        }

                },
                error:    function(error) {                            
        alert("Jest jakis klopot");
    }
            });
        },1000)};
</script>


wywoluje to kod php

  1. header('Content-type: application/json');
  2. include 'config.php';
  3. db_connect();
  4. check_login();
  5. $tablica=array();
  6.  
  7.  
  8. $query = "SELECT * FROM czat ORDER BY id_czat DESC LIMIT 10;";
  9.  
  10. $result = @mysql_query($query) or die('<p class="blad">Wystąpił błąd podczas pobierania wpisów z bazy.</p>');
  11.  
  12. while ($row = mysql_fetch_array($result)) {
  13. $enazwa = stripslashes($row['user_name']);
  14. $etresc = stripslashes($row['tresc']);
  15. $nowytekst = wordwrap($etresc, 20, "\n", true);
  16. $tablica[]['login'] = "$enazwa: $nowytekst";
  17. }echo json_encode($tablica);
  18.  
  19. db_close();


z tego pliku wychodzi mi takie coś: [{"login":"Admin: gdgdgdfgdfg"},{"login":"Admin: sadbjhsabjhbashdb"},{"login":"Admin: kdkjadkajdbkd"},{"login":"Admin: jdshjkskjsnjnjkfnfjk\nfndsjknjfknsdjkfnjks\ndnjkfnkjsdnsdkjfnsdj\nkdsnfjksdnfsdjkfndsj\nfkdsnfjdsnfjsdfnsdkj\nfndfjkdsnfkjfnkjndsj\nkfnsdkjfnj11111"},{"login":"Admin: hgjhgjhgjhgjhghjbjhb\nhjbhjbjhbhjbhjhhbhhb\njhbjhbhjbhbjhbjhbjbh\njb"},{"login":"Admin: test smile.gif"},{"login":"Admin: klhakjndjkawdn"},{"login":"Admin: asdadad"},{"login":"Admin: asdadad"}]

wiec jest super ale w divie do ktorego sie odwoluje pokazuje mi sie tylko ten rekord Admin: asdadad

ale jezeli uzyje document.write(""); to pojawi mi sie nowe okno i wyświetli wszystkie rekordy.

Macie jakieś pomysly questionmark.gifquestionmark.gif
nospor
Cytat
wiec jest super ale w divie do ktorego sie odwoluje pokazuje mi sie tylko ten rekord Admin: asdadad

No bo w petli nadpisujesz za kazdym razem tresc diva:
div.textContent = json[i]['login'];
to sie nie dziw ze w wyniku masz ostatnie dane.
Masz DOPISYWAC a nie NADPISYWAC
ilidir
mhm to coś już wiem smile.gif a czy do tego jest jakas inna funkcja questionmark.gifquestionmark.gif?
Turson
div.textContent += json[i]['login'];
ilidir
a jak przenieśc tekst do nastepnej linijki questionmark.gif? bo kurczaki div.textContent += json[i]['login'] + "\n"; to mi nie dziala sad.gif
Turson
Dodaj HTMLowe przejście do nowej linii.
ilidir
div.textContent += json[i]['login'] + "<br />";

jakos nie daje rady sad.gif
Turson
A jak wstawiasz do elementu? text() czy html()
ilidir
dzieki Turson innerHTML dało rade smile.gif A powiedzcie mi jeszcze jedna rzecz bo nie moge wygooglac czy jest jakiś sposób aby dodawany przezemnie tekst zczytany z bazy danych byl zawsze dodawany na początek a nie koniec DIV-a questionmark.gifquestionmark.gif
Turson
jQuery prepend http://api.jquery.com/prepend/
ilidir
wydaje mi sie ze funkcja prepend dodaje to co chce na poczatku kazdejliniw divie a ja bym chciał żeby dane ktore otrzymuje z json

for (var i=0;i<=9;i++)
{
document.getElementById("tess").innerHTML += json[i]['login'] + "<br />";
}


wyświetlały się na samej górze diva a nie tak jak jest teraz czyli na samym dole
Daimos
Niech Ci się nie wydaje, tylko sprawdź, prepend wstawia na początku, jak Ci Turson pisze, to sprawdź to smile.gif
ilidir
dałem rade smile.gif dzieki
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.