MozillaPL.org - polskie centrum Mozilli

Główne menu:

przesyl danych klient - server

Projektowanie aplikacji i rozszerzeń opartych na technologiach Mozilla Foundation: XUL, JavaScript, XPCOM, XBL i innych

Moderator: Pomocy?!

przesyl danych klient - server

Postautor: slash » 29 lipca 2005, 14:33

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.8b4) Gecko/20050720 Firefox/1.0+

Witam

mam takie pytanie - robie sobie aplikacje klient - server z interfejsem w XUL,
i mam problem - mianowicie w jaki spsob przeprowadzac komunikacje,

w chwili obecnej mam wszystkie drzewa, listy itp elementy generowane na podstawie plikow rdf pobranych z serwera - ale teraz pytanie w jaki sposbo przeprowadzac modyfikacje tego - chce cos dodac do listy - albo usunac - ok po stronie serwera zrobie to za pomoca js - ale jak to samo zrobic po stronie serwera - moj pomysl - robie server soap i odpowiednie uslugi za ich pomoca zmieniam dane na serzerze - to moj pomysl - ale ostatnio znajomy powiedzial ze powinienem jesli uzywam rdf do budowy za jego pomoca modyfikowac to - ale w jaki sposob - co przezsylam zmodyfikowany plik rdf na serwer ?? czym postem / get ?? i co parsuje to i uruchamiam - bo jakos nie wyobrazam sobie tego - niech mnie ktos oswieci - pozatym mam taki problem jest mozliwosc pobrania fragmentu pliku rdf - raczej nie bardzo - musze caly pobrac i go zmodyfikowac.

A czy sensownym rozwiazaniem jest wyslanie na serwer rzadania zmiany danych a nastepnie pobranie tylko zmienionego fragmentu w postaci pliku rdf i laczyc / dzielic z tym co mam juz u siebie

Kto mi pomoze w jaki sposob to rozwiazac ??
slash
 
Posty: 37
Z nami od: 06 czerwca 2005, 10:53

Postautor: krzyspia » 10 lipca 2006, 13:53

Przeglądarka: Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4

Witaj,

ja użyłem AJAXA + PHP:
1) Stworzyłem sobie w JavaScript funkcje, które wysyłają dane z formularza do pliku PHP,
2) który w zależności od wysłanych danych dodaje, modyfikuje, usuwa dane z określonych tabel bazy danych
3) Potem odświeżam zawartość drzewa. Generuję na serwerze plik RDF z bazy.

Kod wygląda tak:
Ad 1. Pobieram dane z formularza (to będę jeszcze dopracowywał, bo jest za mało elastyczne)
Kod: Zaznacz cały
function GetTodoDataFromForm()
{
   var   todo_id_todo = GetCellFormData('todo_id_todo');
   var   todo_fk_workers = GetCellFormData('todo_fk_workers');
   var todo_description = encodeURIComponent(GetCellFormData('todo_description'));
   var todo_deadline = GetCellFormData('todo_deadline');
   var todo_is_done = GetCellFormData('todo_is_done');
   todo_data_string = 'id='+todo_id_todo+'&fk_workers='+todo_fk_workers+'&description='+todo_description+'&deadline='+todo_deadline+'&is_done='+todo_is_done;
   return todo_data_string;
}


2) Przekazuję wygenerowany ciąg znaków do wysyłki:
Kod: Zaznacz cały
//funkcja pobierajaca dane z formularza term_todo_ins_mod.xul.php i tworzaca nowy rekord w tabeli 'todo'
function insert_todo()
{
var data_string = GetTodoDataFromForm();
//alert (data_string);
insert_sth('todo',data_string);

document.getElementById("save_todo").disabled = "true";
window.opener.ReloadTree('tree_todo', 'z_term_todo.rdf.php');
}


3) gdzie funkcja insert_sth wygląda tak (podaję też do usuwania i modyfikacji):

Kod: Zaznacz cały
//funkcja 'insert_sth'
//dodaje dane zawarte w ciagu 'data_string' do tabeli o nazwie 'table'
function insert_sth(table, data_string)
{
data_string = 'table='+table+'&'+data_string;
run_sql('InsertQuery',data_string);
}

//dodaje modyfikuje dane rekordu zawartego w ciagu 'data_string' (w ciagu znajuje sie rowniez id) do tabeli o nazwie 'table'
function modify_sth(table, data_string)
{
data_string = 'table='+table+'&'+data_string;
run_sql('ModifyQuery',data_string);
}

//funkcja 'delete_sth'
//usuwa rekord o danym id z tabeli 'table'
function delete_sth(table, id)
{
var data_string = 'table='+table+'&id='+id;
//alert (data_string);
run_sql('DeleteQuery',data_string);
}


4) gdzie funkcja run_sql wygląda tak:
Kod: Zaznacz cały
function run_sql(sqlFunctionName,FormData)
{
    var url = "run_sql.php";
   var request = 'sqlFunctionName='+sqlFunctionName+'&'+FormData;
    httpFormPost(url,request);
   //p.e. request: name=value&anothername=othervalue&so=on
   //alert(request);
}

5) a httpFormPost tak:
Kod: Zaznacz cały
function httpFormPost(url,request)
{
    var http = new XMLHttpRequest();
    http.open("POST", url, true);
    http.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
    //http.onreadystatechange=alertContents(http);
   http.onreadystatechange=function(){if(http.readyState==4)
      {
         if (http.responseText!="")
         {
            alert(http.responseText); //jeśli w pliku run_sql.php pojawił się błąd to wyskoczy mi to w postaci alertu
         }
   }};
    http.send(request);
}


6) wysyłam dane pod adres gdzie znajduje się plik sql.php, który wygląda tak:
Kod: Zaznacz cały
if ($_POST["sqlFunctionName"]=='InsertQuery')
{
   if ($_POST["table"]=='todo')
   {
      $field_value['fk_workers']=$_POST["fk_workers"];
      $field_value['description']=$_POST["description"];
      $field_value['deadline']=$_POST["deadline"];
      $field_value['is_done']=$_POST["is_done"];
   }
   InsertQuery($_POST["table"], $field_value);//taką funkcje można sobie napisać samemu
}

//var_dump($_POST);

if ($_POST["sqlFunctionName"]=='DeleteQuery')
{
   $key_name = 'id_'.$_POST["table"];
   DeleteQuery($_POST["table"], $_POST["id"], $key_name);//taką funkcje można sobie napisać samemu
}

if ($_POST["sqlFunctionName"]=='ModifyQuery')
{
$key_name = 'id_'.$_POST["table"];

if ($_POST["table"]=='todo')
   {
      $field_value['fk_workers']=$_POST["fk_workers"];
      $field_value['description']=$_POST["description"];
      $field_value['deadline']=$_POST["deadline"];
      $field_value['is_done']=$_POST["is_done"];
   }

   ModifyQuery($_POST["table"], $field_value, $_POST["id"], $key_name);//taką funkcje można sobie napisać samemu
}


Oczywiście nikt nie powiedział, że rozwiązanie to jest bezpieczne, aby było trzeba by dodać jeszcze jakiś identyfikator sesji PHP aby wiadomo było czy użytkownik wykonujący operacje na bazie jest autentyfikowany ale to już inna bajka.

Generowanie pliku RDF na serwerze i sięganie do pliku RDF z XULa opisałem w tym wątku. Niestety mam pewien problem z odświeżaniem drzewa:

http://mozillapl.org/forum/about-24229.html
krzyspia
 
Posty: 13
Z nami od: 26 lutego 2004, 22:10


Wróć do Programowanie z użyciem technologii Mozilli

Kto jest online

Zarejestrowani użytkownicy: Bing [Bot]

Przejdź do powiązanej strony

Nawigacja:

Stopka: