Pagina 2 din 4

Scris: Mar Mai 20, 2008 11:00 am
de Copyright

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.

Scris: Mar Mai 20, 2008 11:14 am
de PET
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.

Scris: Mar Mai 20, 2008 11:15 am
de Quber
@PET, mai e si citeste cite ceva despre JavaScript.!

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

Scris: Mar Mai 20, 2008 11:19 am
de PET
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?

Scris: Mar Mai 20, 2008 11:47 am
de Copyright
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.

Scris: Mar Mai 20, 2008 4:17 pm
de PET
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?

Scris: Mar Mai 20, 2008 8:29 pm
de Copyright
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.

Scris: Mar Mai 20, 2008 11:59 pm
de PET
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?

Scris: Vin Mai 23, 2008 3:06 pm
de Copyright
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.

Scris: Vin Mai 23, 2008 4:19 pm
de mihaitha
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>

Scris: Vin Mai 23, 2008 5:52 pm
de PET
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.

Scris: Lun Mai 26, 2008 9:57 am
de mihaitha
Cum sa arate? Ca orice script care manipuleaza variabile trimise pe POST: multe apeluri catre superglobalul $_POST si nici unul catre $_GET...

Scris: Sâm Iul 12, 2008 8:47 pm
de PET
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.

Scris: Lun Iul 21, 2008 5:26 pm
de ShD
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

Scris: Lun Iul 21, 2008 5:36 pm
de PET
Pai eu asta intreb, cum sa fac mai securizat :)