decodare array venit cu POST in PHP

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
andras
Mesaje:430

decodare array venit cu POST in PHP

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.

MarPlo Mesaje:4343
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 ...
  }
}

andras Mesaje:430
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;
}

MarPlo Mesaje:4343
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);

andras Mesaje:430
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.

MarPlo Mesaje:4343
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.

andras Mesaje:430
M-am gindit si eu ca nu era un sir json valid. Multumesc!

Subiecte similare