How to pass a json containing data array to Php?

4

How could you send the following Json to Php without missing the " tabs " part, where you have an array !? The original Json is made up of a single line, so I put it here just to improve the view:

{"csTipoPagamento":"20",
"csClassificacao":"14",
"csContrato":"41",
"csFornecedor":"Nome_do_Fornecedor",
"csNotaFiscal":"2316549-9",
"csValorNotaFiscal":"2413.08",
"csCnpj":"Uma_numeração_de_CNPJ",
"csEmissao":"28/06/2015",
"csVencimento":"28/07/2015",
"csMunicipio":"275",
"csDtpInicial":"01/06/2015",
"csDtpFinal":"30/06/2015",
"csRefPgto":"9",
"csIngressSpd":"29/06/2015",
"csData":"02/07/2015",
"csLiId":"O_Id",
"csMedicao":"A_Medição",
"csPedido":"Numeração_do_pedido",
"csDtpRecebNota":"30/06/2015",
"csDescServico":"Uma_Descrição",
"csObservacoes":"Uma_Observação",
"tabLinhas":[
["33","12","102","1","12","2413.08","569659","201.09"],
["33","12","102","1","12","2413.08","569659","201.09"]
]}

I've tried it this way:

In Javascript:

var str_json = JSON.stringify(myObject);
request= new XMLHttpRequest();
request.open("POST", "recebeJson.php", true);
request.setRequestHeader("Content-type", "application/json");
request.send(str_json);
alert(str_json); //Exibe o json perfeitamente na janela de alerta

In Php, getting Json via POST:

var_dump($_POST);
echo '<br><br>Erro(s): '.json_last_error();

POST Php var_dump output:

array(16) {
  ["csTipoPagamento"]=> string(1) "1"
  ["csClassificacao"]=> string(2) "15"
  ["csContrato"]=> string(1) "6"
  ["csNotaFiscal"]=> string(9) "3126549-2"
  ["csEmissao"]=> string(10) "29/06/2015"
  ["csVencimento"]=> string(10) "29/07/2015"
  ["csMunicipio"]=> string(3) "309"
  ["csCecoAprov"]=> string(6) "CJ9700"
  ["csDtpInicial"]=> string(10) "01/06/2015"
  ["csDtpFinal"]=> string(10) "30/06/2015"
  ["csRefPgto"]=> string(1) "9"
  ["csIngressSpd"]=> string(10) "28/06/2015"
  ["csPedido"]=> string(15) "Pedido qualquer"
  ["csDtpRecebNota"]=> string(10) "29/06/2015"
  ["csDescServico"]=> string(13) "Uma Descrição"
  ["csObservacoes"]=> string(14) "Uma Observação"
}

Output from json_last_error ():

Erro(s): 0

After POST, in addition to being already arriving as an array, I'm missing some of this.

    
asked by anonymous 02.07.2015 / 04:51

3 answers

1

Try using the jQuery library:


<script type="text/javascript"
        src="https://code.jquery.com/jquery-latest.js"></script><scripttype="text/javascript">
$(document).ready(function() {

    $('input["type=submit"]').on('click',function(){
        var data = $('#data_json').val();

          $.post('recebeJson.php',data:data,function(ret) {
             var retorno = $.parseJSON(ret);
             if (retorno.success) {
                alert('Dados enviados com sucesso!');
             }

          });
     return false;
     });
});
</script>
<form>
<input type='hidden' value='{"csTipoPagamento":"20","csClassificacao":"14","csContrato":"41","csFornecedor":"Nome_do_Fornecedor","csNotaFiscal":"2316549-9","csValorNotaFiscal":"2413.08","csCnpj":"Uma_numeração_de_CNPJ","csEmissao":"28/06/2015","csVencimento":"28/07/2015","csMunicipio":"275","csDtpInicial":"01/06/2015","csDtpFinal":"30/06/2015","csRefPgto":"9","csIngressSpd":"29/06/2015","csData":"02/07/2015","csLiId":"O_Id","csMedicao":"A_Medição","csPedido":"Numeração_do_pedido","csDtpRecebNota":"30/06/2015","csDescServico":"Uma_Descrição","csObservacoes":"Uma_Observação","tabLinhas":[["33","12","102","1","12","2413.08","569659","201.09"],["33","12","102","1","12","2413.08","569659","201.09"]]}' id='data_json'>
<input type="submit" value="Enviar">
</form>

And in PHP:


<?php

$data = $_POST['data'];

$objData = json_decode($data);

$dadosTabLinhas = $objData->tabLinhas;

echo 'exibe array dados:<br /> <pre>';
print_r($dadosTabLinhas);
?>

    
02.07.2015 / 14:50
0

You're not losing the value, do not try doing this:

/* no caso aqui eu forcei, mas é a mesma coisa que você envia com o JSON.stringify */
$json = json_decode('{"csTipoPagamento":"20","csClassificacao":"14","csContrato":"41","csFornecedor":"Nome_do_Fornecedor","csNotaFiscal":"2316549-9","csValorNotaFiscal":"2413.08","csCnpj":"Uma_numeração_de_CNPJ","csEmissao":"28/06/2015","csVencimento":"28/07/2015","csMunicipio":"275","csDtpInicial":"01/06/2015","csDtpFinal":"30/06/2015","csRefPgto":"9","csIngressSpd":"29/06/2015","csData":"02/07/2015","csLiId":"O_Id","csMedicao":"A_Medição","csPedido":"Numeração_do_pedido","csDtpRecebNota":"30/06/2015","csDescServico":"Uma_Descrição","csObservacoes":"Uma_Observação","tabLinhas":[["33","12","102","1","12","2413.08","569659","201.09"],["33","12","102","1","12","2413.08","569659","201.09"]]}');

foreach ($json->tabLinhas as $key=>$value) { //entra no tabLinhas
    echo "\n" . $key . ": " . $value;
    foreach ($value as $k=>$v) { //cada array do tabLinhas
         echo $k . ": " . $v . ", ";
    }
}

Output:

  

0: Array0: 33,1: 12,2: 102,3: 1: 4: 12,5: 2413,08,6: 56,9659,7: 201,09,      

1: Array0: 33,1: 12,2: 102,3: 1: 4: 12,5: 2413,08,6: 56,9659,7: 201,09,

IdeOne Example

    
02.07.2015 / 05:53
0

I tested it here with your code and got it working with the next change.

In the recebeJson.php file, I put the following content:

$json =  json_decode(file_get_contents("php://input"), true) ?: [];
var_dump($json);

I hope this helps you.

    
22.09.2015 / 17:20