Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

3Rs

HTTP POST - Enviar todos os campos do form

Recommended Posts

Olá amigos.. tenho uma rotina onde recebo os dados de um http post, jogo eles num array e faço update no banco como no exemplo a seguir:




//filtro o input
$Arr_ContatoUpdate = filter_input_array(INPUT_POST, FILTER_DEFAULT);
//defino data/hora alteracao
$Arr_ContatoUpdate['dh_alteracao'] = date("Y-m-d H:i:s");
//chamo funcao que atualiza tabela de contato, enviando o array com os campos
AtualizarTabela('contato', $Arr_ContatoUpdate, "WHERE codigo = '" . $ContatoUpdate['Codigo'] . "'");


Acontece que, no formulário, se eu limpar algum campo e fazer o submit do form, esse campo que eu limpei (ou seja, value = '') não é enviado para o POST e isso faz com que o campo não seja incluso no meu update e consequentemente este mesmo campo não é atualizado. O campo só é atualizado se o formfield tiver algum valor..

Reparei que ao fazer POST, os campos vazios não são enviados.. Existe alguma solução para isso ou alguma maneira de contornar a situação, sem que eu tenha que tratar campo a campo do formulário?


Alguém poderia dar uma dica?


Obrigado,

Renato


Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe.. esqueci de mencionar algo importante: Faço o post através de Jquery e uso .serialize para obter os campos.. veja:

<form role="form" method="post" id="FormContato" >
(... campos etc ....)
  <button type="button"  name="Gravar" onclick="AtualizaContato()">Gravar</button>
</form>
function AtualizaContato() {
             var dados = $("#FormContato").serialize();
           
             $.ajax({
                 type: 'POST',
                 url: "/atualizar/Contato.php",
                 data: dados,
                 success: function (msg_retorno) {
                       alert(msg_retorno);
                     } 
                 }
             });
     }

Será que o serialize está removendo os campos vazios?

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe.. esqueci de mencionar algo importante: Faço o post através de Jquery e uso .serialize para obter os campos.. veja:

<form role="form" method="post" id="FormContato" >
(... campos etc ....)
  <button type="button"  name="Gravar" onclick="AtualizaContato()">Gravar</button>
</form>
function AtualizaContato() {
             var dados = $("#FormContato").serialize();
           
             $.ajax({
                 type: 'POST',
                 url: "/atualizar/Contato.php",
                 data: dados,
                 success: function (msg_retorno) {
                       alert(msg_retorno);
                     } 
                 }
             });
     }

Será que o serialize está removendo os campos vazios?

Renato

serialize deve está removendo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Campos vazios não são removidos. Mas campos sem name não são serializados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Gabriel.. obrigado pela dica amigo.. porem todos os campos contém a tag Name e ID..

O campo vazio até é enviado na string veja exemplo1.. mas quando recebo o POST esse campo vazio é removido..

exemplo1:

?Nome=Teste da Silva&Sobrenome=&Endereco=Rua X

No caso o campo Sobrenome está sendo passado no POST da maneira acima.. mas ao receber ele some..

veja:

print_r($_POST,true);
Array
(
    [Nome] => Teste da Silva
    [Endereco] => Rua X
)

No meu caso, eu precisaria receber da seguinte maneira para que eu pudesse fazer o update no banco e setar o campo sobrenome como vazio..:

Array
(
    [Nome] => Teste da Silva
    [Sobrenome] =>
    [Endereco] => Rua X
)
Obrigado!
Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está utilizando filtros. Como valor default, ele não deveria estar removendo o conteúdo. Mas o valor default pode ser alterado no php.ini

Remova os filtros e veja se continua ocorrendo o problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentei remover o filtro tb da seguinte maneira:

//filtro o input
//$Arr_ContatoUpdate = filter_input_array(INPUT_POST, FILTER_DEFAULT);
$Arr_ContatoUpdate = $_POST;
//defino data/hora alteracao
$Arr_ContatoUpdate['dh_alteracao'] = date("Y-m-d H:i:s");
//chamo funcao que atualiza tabela de contato, enviando o array com os campos
AtualizarTabela('contato', $Arr_ContatoUpdate, "WHERE codigo = '" . $ContatoUpdate['Codigo'] . "'");

Mesmo assim o campo é removido..

Também tentei imprimir o que recebo do POST... e o campo Sobrenome tb não é passado.. Mesmo passando ele conforme exemplo anterior: ?Nome=Teste da Silva&Sobrenome=&Endereco=Rua X

foreach ($_POST as $key => $entry)
{
            error_log($key . ": " . $entry);
}

Errorlog:

[19-Oct-2016 13:56:57 America/Sao_Paulo] Nome: Teste da Silva
[19-Oct-2016 13:56:57 America/Sao_Paulo] Endereco: Rua X

:(

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

de um var_dump de $_SESSION. Existe a entrada query_string. Veja se está recebendo. Há também a função getallheaders(). Mas não me recordo se exibe a query string.

Existem algumas extensões que você pode validar os cabeçalhos enviados no navegador. Seria importante ter certeza se está sendo enviado na requisição.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não tem query_string em $_SESSION...Apenas dados de encoding... Keep-alive, user-agent, etc..

Tentei tb pegar o http header que recebo mas também não tem a query_string..

Tentei tb $_SERVER['QUERY_STRING']; mas tb vem vazio..

Creio que o jeito vai ser tratar campo a campo ao invés de usar serialize.. :( É andar para traz.. mas. fazer o que né..

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

É melhor procurar a raiz do problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é.. vou continuar tentando aqui... de qualquer maneira obrigado pelas dicas Gabriel! Muito agradecido...

Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acabei encontrando uma solução alternativa na Net.. Lendo "php://input" que tem todos os campos e retornando o array com todos os campos..

function getRealPOST() {
    $pairs = explode("&", "php://input");
    $vars = array();
    foreach ($pairs as $pair) {
        $nv = explode("=", $pair);
        $name = urldecode($nv[0]);
        $value = urldecode($nv[1]);
        $vars[$name] = $value;
    }
    return $vars;
}
É o que tem para hoje :)
Obrigado
Renato

Compartilhar este post


Link para o post
Compartilhar em outros sites

use parse_str para recuperar os valores.

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por david2007
      Endpointer Framework é um Framework PHP para construção de APIs REST com Programação Procedural.
       
      Todas as regras de negócio são implementadas como Stored Procedures.
       
      http://endpointer.com
       
      Endpointer Framework é Código Aberto sob a licença MIT

    • Por david2007
      Endpointer Framework é um Framework PHP para construção de APIs REST com Programação Procedural.
       
      http://endpointer.com
       
      Endpointer Framework é Código Aberto sob a licença MIT

    • Por david2007
      Endpointer Framework é um Framework PHP para construção de APIs REST com Programação Procedural.
       
      http://endpointer.com
       
      Endpointer Framework é Código Aberto sob a licença MIT

    • Por david2007
      Endpointer Framework é um Framework PHP para construção de APIs REST com Programação Procedural.
       
      http://endpointer.com
       
      Endpointer Framework é Código Aberto sob a licença MIT
       

    • Por geivisonsales
      Boa tarde pessoal! Bem, tenho uma API rest em php que está hospedada no meu servidor... faço requisições com ela usando meu software em VB.NET Winforms, só que ao usar a api  para retornar informações de usuarios tenho que passar as informações por url para a api responder... Tem alguma maneira de bloquear o acesso por qualquer usuario que consiga a url? apenas permitir o acesso a minha Api sendo pelo software? ou tem alguma maneira de enviar as informações do vb.net para o php sem ser pela Url?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.