Dynamic Form Update

Discutii legate de AJAX, jQuery, MooTools, Prototype, Dojo, Yahoo! UI Library,script.aculo.us, ExtJS,AngularJS, Backbone.js, Ember.js, KnockoutJS

Moderator: Moderatori

Avatar utilizator
Copyright
Senior Member
Mesaje: 869
Membru din: Dum Dec 17, 2006 7:24 pm
Localitate: Bucuresti
Contact:

Mesajde Copyright » Mar Mai 20, 2008 11:00 am

Cod: Selectaţi tot

<input type="text" name="{$card.id}" onchange="update_field(this.name, this.value);">
..................
..................

function update_field(id, value){

    // fisierul php care va procesa requestul AJAX
    var server_uri = "update_field.php";
    // parametrii care vor fi trimisi prin requestul AJAX
    var parametrii = "action=update&id="+id+"&value="+value;

    // se instanteaza un obiect de tipul XMlHttpRequest
    if(navigator.appName == "Microsoft Internet Explorer") {
        http = new ActiveXObject("Microsoft.XMLHTTP");
    } else {
        http = new XMLHttpRequest();
    }

    // se creeaza(pregateste) un request asincron de tipul POST catre adresa 'server_uri'
    http.open("POST", server_uri, true);
    // informeaza serverul ca requestul este de tip POST
    http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
    // realizeaza conexiunea definita anterior prin functia open si ataseaza parametrii
    http.send(parametrii);
}


Cred ca am fost destul de clar, dar daca ai intrebari da de stire.


Later.
Ultima oară modificat Mar Mai 20, 2008 12:08 pm de către Copyright, modificat de 2 ori în total.



Avatar utilizator
PET
Senior Member
Mesaje: 325
Membru din: Mie Aug 20, 2003 11:40 pm
Localitate: Timisoara
Contact:

Mesajde PET » Mar Mai 20, 2008 11:14 am

N-ar trebui sa fie GET in loc de POST? Daca nu, de ce post si nu get?

in interiorul functiei ar trebui sa mai bag un ALERT, sau un msg dinala care are OK si CANCEL si il intreaba pe utilizator ceva. Daca da cancel face abord, si daca da ok, face ce e in functie.
PET - Vesnicul n00b al acestui forum :)

Avatar utilizator
Quber
Senior Member
Mesaje: 874
Membru din: Mar Iun 27, 2006 8:33 pm
Localitate: localhost
Contact:

Mesajde Quber » Mar Mai 20, 2008 11:15 am

@PET, mai e si citeste cite ceva despre JavaScript.!

http://www.google.com/search?q=javascript+confirm
A man who dares to waste one hour of time has not discovered the value of life.

Avatar utilizator
PET
Senior Member
Mesaje: 325
Membru din: Mie Aug 20, 2003 11:40 pm
Localitate: Timisoara
Contact:

Mesajde PET » Mar Mai 20, 2008 11:19 am

Quber scrie:@PET, mai e si citeste cite ceva despre JavaScript.!

http://www.google.com/search?q=javascript+confirm


JavaScriptul e o chestie noua pt mine, deasta pun atatea intrebari. Inca nu pot sa-mi dau seama nici de chestile simple cum ar trebui puse.

Cat am citit ieri despre AJAX am mai inteles niste chestii... dar ma tot uit la functia asta noua si prea simpla si nu inteleg de ce a fost trimis prin POST si nu prin GET, avand in vedere ca trimit parametrii prin link blabla.php?action=update&id=.....

Nu?
PET - Vesnicul n00b al acestui forum :)

Avatar utilizator
Copyright
Senior Member
Mesaje: 869
Membru din: Dum Dec 17, 2006 7:24 pm
Localitate: Bucuresti
Contact:

Mesajde Copyright » Mar Mai 20, 2008 11:47 am

PET scrie:Cat am citit ieri despre AJAX am mai inteles niste chestii... dar ma tot uit la functia asta noua si prea simpla si nu inteleg de ce a fost trimis prin POST si nu prin GET, avand in vedere ca trimit parametrii prin link blabla.php?action=update&id=.....
HTML 4.0 specification scrie:
If the processing of a form is idempotent (i.e. it has no lasting observable effect on the state of the world), then the form method should be GET. Many database searches have no visible side-effects and make ideal applications of query forms.

If the service associated with the processing of a form has side effects (for example, modification of a database or subscription to a service), the method should be POST.


Mai pe romaneste, GET se foloseste(de preferabil dar nu obligatoriu) atunci cand vrei sa obtii date de la server(ex: interogarea unei base de date), iar POST pentru a trimite date catre server(ex: db insert sau update ).

mai multe detalii gasessti aici: http://www.cs.tut.fi/~jkorpela/forms/methods.html


Later.

Avatar utilizator
PET
Senior Member
Mesaje: 325
Membru din: Mie Aug 20, 2003 11:40 pm
Localitate: Timisoara
Contact:

Mesajde PET » Mar Mai 20, 2008 4:17 pm

Mersi Copyright pentru ajutor.

Totusi din ne-stiinta mea a trebuit sa fac cu GET si merge perfect.
Nu reuseam sa fac update cu POST. Probabil nu am scris eu bine codul, dar cu GET arata asa:

Cod: Selectaţi tot

         $value = $_GET['value'];
         $id    = $_GET['id'];
         
         $query = "UPDATE `cards` SET stock=". $value ." WHERE id=". $id;
         mysql_query($query) or die(mysql_error());


Iar functia finala arata asa:

Cod: Selectaţi tot


function updstk(id, value) {
   if (confirm("Are you sure you want to update the stock?")) {
      // fisierul php care va procesa requestul AJAX
      var server_uri = "index.php";
      // parametrii care vor fi trimisi prin requestul AJAX
      var parametrii = "?act=updstk&id="+id+"&value="+value;
      
      // se instanteaza un obiect de tipul XMlHttpRequest
      if(navigator.appName == "Microsoft Internet Explorer") {
         http = new ActiveXObject("Microsoft.XMLHTTP");
      } else {
         http = new XMLHttpRequest();
      }

      // se creeaza(pregateste) un request asincron de tipul POST catre adresa 'server_uri'
      http.open("GET", server_uri + parametrii, true);
      // informeaza serverul ca requestul este de tip POST
      http.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
      // realizeaza conexiunea definita anterior prin functia open
      http.send(null);
   
   }

}



E grav faptul ca nu am folosit POST? Cum ar fi trebuit sa arate si codul PHP folosit functia POST propusa de tine?
PET - Vesnicul n00b al acestui forum :)

Avatar utilizator
Copyright
Senior Member
Mesaje: 869
Membru din: Dum Dec 17, 2006 7:24 pm
Localitate: Bucuresti
Contact:

Mesajde Copyright » Mar Mai 20, 2008 8:29 pm

Nu ti-a mers prin POST pentru ca ai adaugat parametrii la url, iar intr-un request POST toti parametrii(querystring) atasati unui link sunt trunchiati(incearca sa trimiti un formular cu method="POST" si action="script.php?par1=hello" sa vezi se intampla). Daca lasai codul cum l-am postat iti mergea perfect.

In fine.. daca l-ai rezolvat cu GET e foarte bine, dar ar fi fost preferabil sa folosesti POST din motive de siguranta.



Later.

Avatar utilizator
PET
Senior Member
Mesaje: 325
Membru din: Mie Aug 20, 2003 11:40 pm
Localitate: Timisoara
Contact:

Mesajde PET » Mar Mai 20, 2008 11:59 pm

Poate ca mergea codul perfect dar nu am stiut eu cum sa-l iau in PHP. Am incercat cu $_POST['value'] dar nu mergea.

Acum trebuie sa limitez ce poate fi scris in acel input, sa permit doar cifre. Sugestii?
PET - Vesnicul n00b al acestui forum :)

Avatar utilizator
Copyright
Senior Member
Mesaje: 869
Membru din: Dum Dec 17, 2006 7:24 pm
Localitate: Bucuresti
Contact:

Mesajde Copyright » Vin Mai 23, 2008 3:06 pm

Trebuie sa folosesti un mask care sa permita doar introducerea caracterelor numerice in input.

http://digitalbush.com/projects/masked-input-plugin
http://ginger-space.blogspot.com/2007/0 ... ation.html






Later.

Avatar utilizator
mihaitha
Senior Member
Mesaje: 2383
Membru din: Vin Mai 04, 2007 12:40 pm
Localitate: Sibiu
Contact:

Mesajde mihaitha » Vin Mai 23, 2008 4:19 pm

PET, Copyright ti-a dat codul bun, dar nu ti-a explicat foarte clar (nu e vina lui, puteai si tu sa cauti un pic):
- cand apelezi un request ajax cu get, faci asa

Cod: Selectaţi tot

xmlhttpobject.open('GET', 'calea_catre_script?param1=val1&param2=val2');
xmlhttpobject.send(null);
adica ii dai parametrii in metoda open si trimiti null, iar daca vrei sa ii transmiti per post, faci asa

Cod: Selectaţi tot

xmlhttpobject.open('POST', 'calea_catre_script');
xmlhttpobject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
xmlhttpobject.send('param1=val1&param2=val2');
adica in metoda open() setezi numai calea catre script (action-ul form-ului) iar parametrii ii trimiti doar la apelul metodei send(). Daca ii dai tot send(null) normal ca nu merge, ca nu i se transmite nici o variabila POST. E ca si cum ai da submit la un form de genul

Cod: Selectaţi tot

<form action='script' method='post'></form>

Avatar utilizator
PET
Senior Member
Mesaje: 325
Membru din: Mie Aug 20, 2003 11:40 pm
Localitate: Timisoara
Contact:

Mesajde PET » Vin Mai 23, 2008 5:52 pm

cand am incercat cu POST am lasat exact cum trebuie doar cu micile modificari de rigoare. Cand am facut cu GET am pus null.

cum ar fi trebuit sa arate codul PHP daca faceam cu post? Ca poate functia era buna dar n-am scris eu codul PHP bine.
PET - Vesnicul n00b al acestui forum :)

Avatar utilizator
mihaitha
Senior Member
Mesaje: 2383
Membru din: Vin Mai 04, 2007 12:40 pm
Localitate: Sibiu
Contact:

Mesajde mihaitha » Lun Mai 26, 2008 9:57 am

Cum sa arate? Ca orice script care manipuleaza variabile trimise pe POST: multe apeluri catre superglobalul $_POST si nici unul catre $_GET...

Avatar utilizator
PET
Senior Member
Mesaje: 325
Membru din: Mie Aug 20, 2003 11:40 pm
Localitate: Timisoara
Contact:

Mesajde PET » Sâm Iul 12, 2008 8:47 pm

Acum am inteles de ce era important cu POST. Cu GET oricine poate apela direct linkul si poate face update la orice id cu orice valoare.

Codul PHP arata asa:

Cod: Selectaţi tot

      case 'updstk':
         if(isset($_GET['id'])){
            
            $value = $_GET['value'];
            $id    = $_GET['id'];
            
            $query = "UPDATE `cards` SET stock=". $value ." WHERE id=". $id;
            mysql_query($query) or die(mysql_error());
         }

      break;


Eu trimit prin GET, implicit valorile se pot modifica. Exista vreo metota prin care pot limita executia scriptului? Adica sa nu poata fi apelata direct prin link si doar prin acel "input update"?

Cred ca o sa incerc sa ma mai chinui cu POST.
PET - Vesnicul n00b al acestui forum :)

ShD
Average Member
Mesaje: 138
Membru din: Lun Noi 19, 2007 12:05 pm
Localitate: Iasi
Contact:

Mesajde ShD » Lun Iul 21, 2008 5:26 pm

PET scrie:Acum am inteles de ce era important cu POST. Cu GET oricine poate apela direct linkul si poate face update la orice id cu orice valoare.

Codul PHP arata asa:

Cod: Selectaţi tot

      case 'updstk':
         if(isset($_GET['id'])){
            
            $value = $_GET['value'];
            $id    = $_GET['id'];
            
            $query = "UPDATE `cards` SET stock=". $value ." WHERE id=". $id;
            mysql_query($query) or die(mysql_error());
         }

      break;


Eu trimit prin GET, implicit valorile se pot modifica. Exista vreo metota prin care pot limita executia scriptului? Adica sa nu poata fi apelata direct prin link si doar prin acel "input update"?

Cred ca o sa incerc sa ma mai chinui cu POST.


Mi se pare o idee destul de proasta sa postezi bucata aia de cod pe forum avand in vedere ca ce scriu eu in form tu bagi in db :). Parerea mea e ca ar trebui putin securizat.

Cheers

Avatar utilizator
PET
Senior Member
Mesaje: 325
Membru din: Mie Aug 20, 2003 11:40 pm
Localitate: Timisoara
Contact:

Mesajde PET » Lun Iul 21, 2008 5:36 pm

Pai eu asta intreb, cum sa fac mai securizat :)
PET - Vesnicul n00b al acestui forum :)


Înapoi la “Librarii Javascript”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 25 vizitatori