Pagina 1 din 1

decodare array venit cu POST in PHP

Scris: Mar Aug 02, 2016
de andras
Salut,
Am un array construit in JS pe care il pun intr-un hidden si are 4 elemente de forma (exemplu):

Cod: Selectaţi tot

["rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1", "rnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR b KQkq d3 0 1", "rnbqkbnr/ppp1pppp/3p4/8/3P4/8/PPP1PPPP/RNBQKBNR w KQkq - 0 2", "rnbqkbnr/ppp1pppp/3p4/8/2PP4/8/PP2PPPP/RNBQKBNR b KQkq c3 0 2"]
care vine dintr-un form cu elementul type="hidden" name="movuri[]".
Cum parcurg (dupa submit) acest array in php sa extrag fiecare valoare? Dar as vrea ca mai intii sa verific daca are valori in el. Multumesc.

decodare array venit cu POST in PHP

Scris: Mar Aug 02, 2016
de MarPlo
Salut
Daca array-ul transmis e in format JSON, in php poti sa il transformi in array cu functia: json_decode($json_array, true). Apoi il poti parcurge cu for() sau foreach().
Exemplu:

Cod: Selectaţi tot

if(isset($_POST['movuri'])){
  $movuri = json_decode($_POST['movuri'], true);

  //if it is array and has items
  if(is_array($movuri) && count($movuri) >0){
    //use $movuri data ...
  }
}

decodare array venit cu POST in PHP

Scris: Mar Aug 02, 2016
de andras
Eu am incercat asa dar nu-mi iese (vin din form cu $request):

Cod: Selectaţi tot

if(isset($request['movuri'])){
    $movuri = json_decode($request['movuri'], true);
    if(is_array($movuri) && count($movuri) >0){
      foreach ($request['movuri'] as $mutare){
        ...... 
      }
    }
  }
Imi da eroare : "json_decode() expects parameter 1 to be string, array given", iar ca array imi afiseaza doar

Cod: Selectaţi tot

array[
  0 => "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1,rnbqkbnr/pppppppp/8/8/3P4/8/PPP1PPPP/RNBQKBNR b KQkq d3 0 1,rnbqkbnr/ppp1pppp/8/3p4/3P4/8/PPP1PPPP/RNBQKBNR w KQkq d6 0 2"
]
adica imi ia tot array-ul ca un singur element. Care sa fie cauza?

edit: in Javascript folosesc:

Cod: Selectaţi tot

function savemutari(mutari, fen) {   // pune fiecare fiecare mutare
mutari.push(fen); 
document.getElementById('movuri').value = mutari;
}

decodare array venit cu POST in PHP

Scris: Mar Aug 02, 2016
de MarPlo
Sirul de la "value" din acel <input> e recunoscut ca array in php fiindca are paranteze patrate [] la "name".
Ori stergi parantezele patrate de la "name", ori in php preiei elementul cu cheia 0 din acel array din POST pt. json_decode().

Cod: Selectaţi tot

$movuri = json_decode($request['movuri'][0], true);
- Iar in javascript s-ar putea sa trebuiasca asa, ca sa fie format json in input:

Cod: Selectaţi tot

document.getElementById('movuri').value = JSON.stringify(mutari);

decodare array venit cu POST in PHP

Scris: Mar Aug 02, 2016
de andras
Am sters paranteze patrate din name="movuri" dar tot n-a functionat decit dupa explode:

Cod: Selectaţi tot

if(isset($request['movuri'])){
    $movuri = explode(',', $request['movuri']);
      foreach ($movuri as $mutare){
       .........
      }
  }
Acum functioneaza dar inca tot n-am priceput pe deplin cum e treaba cu transformarea array-urilor din JS in php. Multumesc oricum!

edit: aceea functie Javascript este intr-o bucla, se apeleaza din bucla, la fiecare rulare adaug mutari.push(fen); iar variabila fen este un sir care se adauga de fiecare data la array-ul mutari. Poate aici este greseala.

decodare array venit cu POST in PHP

Scris: Mar Aug 02, 2016
de MarPlo
Nu a funcftionat cu json_decode() in php fiindca datele adaugate in acel input nu erau puse in format json valid.
In javascript trebuiau convertite in sir json cu JSON.stringify().

Cod: Selectaţi tot

document.getElementById('movuri').value = JSON.stringify(mutari);
- Dar acea functie in JS fiind intr-o bucla care adauga mereu la "value", mai bine mergi pe varianta care stii ca-ti functioneaza bine.

decodare array venit cu POST in PHP

Scris: Mar Aug 02, 2016
de andras
M-am gindit si eu ca nu era un sir json valid. Multumesc!