[php][js]aktualizowanie danych ,przetwarzanie za pomocą js


(batmomobil) #1

Witam,jak zrobić czasowe odświezanie funkcjii panel_online w ajaxie

function panel_online() { if($_SESSION['zalogowany']){ $id_kogo = $_SESSION['id_usera'];
	 if(!empty($id_kogo))
$wynik = "SELECT `id`, `login`, `haslo`, `email`, `imie`, `nazwisko`, `ranga`, `skype`, `gg`, `adres`, `uprawnienie`, `avatar`, `act`, `last_activity` FROM `".prefix."uzytkownicy` WHERE `last_activity` and `id`!='".$id_kogo."'"; polacz(); $wynik = mysql_query($wynik); while($rows=mysql_fetch_array($wynik))
{ $login = $rows['login']; $imie = base64_decode($rows['imie']); $nazwisko = base64_decode($rows['nazwisko']);
echo "<div id='online'><img src='".$rows['avatar']."' height='20' width='20'>".$login."<br>(".$imie."&nbsp;".$nazwisko.")</div>";																																																						
}	rozlacz();																																		
	}}

 


(Fizyda) #2

Czym jest odświeżenie funkcji bo przyznam się ile lat siedzę w programowaniu pierwszy raz spotykam się z takim pojęciem.


(ziggurad) #3

Chcesz za pomocą JS’a pobrać to co zwraca ta funkcja?

Ogólnie:

  • unikaj polskich nazw, wygląda to strasznie, 
  • zainteresuj się PDO, nie używaj mysql_…
  • rozdzielaj wszystko na warstwy, np html od php, 
  • używaj css’a

(Pablo_Wawa) #4

Odpowiadając na pytanie wątku - najlepiej jest przygotować jakiś osobny skrypt PHP, który będziesz wywoływał poprzez Ajax (w kodzie JavaScript na stronie aplikacji) - skrypt PHP będzie podawał (technicznie wyświetlał) dane, które otrzymasz po wywołaniu Ajax - dane te powinieneś “obrobić”, ale jeśli skrypt PHP podaje je jako kod HTML, to możesz je od razu wstawić do jakiegoś elementu na stronie. Nie obędzie się bez pewnej znajomości JavaScript (oraz techniki AJAX). Przykład (niezbyt elegancki) masz tutaj: php_ajax_database

Bez wykorzystania JS można to też zrobić, ale znacznie mniej elegancko:

  • odświeżać taką stronę w PHP, dzięki czemu za każdym razem będą się wyświetlały aktualna dane;

  • zrobić na stronie ramkę (IFRAME), której zawartość będzie wyświetlała dane o użytkownikach (to spowoduje konieczność odświeżania tylko fragmentu strony - tej ramki - a nie całości).

 


(ziggurad) #5

Uczmy od początku dobrze :wink:

Więc żadne odświeżanie całej strony ani ramki iframe które używało się w latach 90.

Funkcja PHP powinna zwrócić Ci tylko suche dane np w formacie JSON. Za pomocą JS’a wywołujesz adres na swojej stronie który zwraca wynik funkcji PHP. Za pomocą JS’a odebrane dane wrzucasz w odpowiednie miejsce.


(batmomobil) #6

Właśnie o to chodzi aby te dane były na bierząco aktualizowane,czyli ktoś się zaloguje i wyświetla online.Czyli odbieram dane np:array join i przekazuje js,tylko gorzej bo w js to nie wiem,może jakiś przykład.


(batmomobil) #7

Witam proszę o pomoc w tym temacie,zmieniłem kod php i zapisałem go oddzielnym pliku  i odbieram dane w formacie json

<?php
	if($_SESSION['zalogowany']){
		$id_kogo = $_SESSION['id_usera'];
	 if(!empty($id_kogo))
			$result = "SELECT `login`,`avatar` FROM `".prefix."uzytkownicy` WHERE `last_activity` and `id`!='".$id_kogo."' ORDER BY id ASC LIMIT 18";
		polacz(); $wynik = mysql_query($result);
		$users = array();
		while($user = mysql_fetch_object($wynik)){
			$users[] = $user;
	}
echo json_encode($users);

}
	rozlacz();

?>

usiłuję przesłać je do diva 

<?php
echo '<div id="onlineUsers"></div>';
?><link rel="Stylesheet" type="text/css" href="css/online.css" /><script type="text/javascript" src="js/script.online.js"></script>

za pomocą js,ale niezabardzo się arientuje jak to zrobić,znalazłem kod na podstawie,którego usiłuje to zrobić

$(document).ready(function(){
        $.ajax({
            type:"GET", 
            url:"online.php", 
            contentType:"application/json; charset=utf-8", 
            dataType:'json', 
             
                
                success: function(json) { 
                     
                    
                    for (var key in json)
                        {
                            var user = json[key];      
                            var users = user[login];
                            var avatars = user[avatar];
                                                         
											
                             var obrazek = $('<div class="IMAGE1" ><img src="'+avatars+'.jpg" width="10%" height="10%" alt="'+avatars+'" /></div>')
                                
                                                        
                            
                              
                              $('#onlineUsers').append($(obrazek));
                    

                error: function(blad) {
                    alert( "Wystąpił błąd");
                    console.log(blad); 
             
        });
});

jednak nie działa,może podpowiecie jak zmienić ten kod js lub na podstawie jakiego to zrobić.Jak dodaje bibliotekę js to nie działają inne funkcje np:czat,jaka bibliotekę dołaczyć aby razem działaly.


(Fizyda) #8

Cały JS jest błędny, masz nie po domykane klamry i nie dziw że nic nie działa.

Druga sprawa to ten fragment:

var users = user[login];
var avatars = user[avatar];

Powinno być tak

var users = user.login;
var avatars = user.avatar;

pracujesz z obiektem json’owym a nie tablicą asocjacyjną, a to wielka różnica.


(batmomobil) #9

Nie mogę tego ogarnąć,żaden sposób nie działa

$(document).ready(function(){
        $.ajax({
            url: 'online.php',
            dataType: "json",
            success: (function(json){ for (var key in json)
                        {
                            var users = json.key;      
                            var user = users.login;
                            var avatars = users.avatar;
                                                         
											
                             var obrazek = $('<div class="IMAGE1" ><img src="'+avatars+'.jpg" width="10%" height="10%" alt="'+avatars+'" /></div>')
                                
                                                        
                            
                              
                           
                $('#onlineUsers').append('<li>' + user + '</li><li>' +obrazek + '</li><');
            })
 
        });
    });

,taki kod też nie działa 

.getJSON('online.php', function(data){
    var output = "<ul>";
    for (var i in data.users){
        output += "<li>" + data.users[i].login + "</li>";
        output += "<li>" + data.users[i].avatar + "</li>";
    }
    output += "</ul>";
    document.getElementById('onlineUsers').innerHTML = output;

,jak dodam bibliotekę to nie działają inne funkcje na stronie.Pomóżcie to ogarnąć.


(Fizyda) #10
  1. Brak pętli

  2. Co to jest?

    var users = json.key;

jeśli już bez pętli to:

var users = json;
  1. Niepoprawny kod JS - kolejny raz

 

Jest jeden wniosek, nie znasz nawet podstaw javascriptu i totalnie nie rozumiesz jak działa ajax i na czym to polega.