Obter todas as variáveis ​​enviadas com POST?


89

Preciso inserir todas as variáveis ​​enviadas com a postagem, eram caixas de seleção, cada uma representando um usuário.

Se eu usar GET, obtenho algo assim:

?19=on&25=on&30=on

Preciso inserir as variáveis ​​no banco de dados.

Como obtenho todas as variáveis ​​enviadas com POST? Como uma matriz ou valores separados por vírgulas ou algo assim?


Respostas:


167

A variável $_POSTé preenchida automaticamente.

Tente var_dump($_POST);ver o conteúdo.

Você pode acessar valores individuais como este: echo $_POST["name"];

Isso, é claro, assume que seu formulário está usando a codificação de formulário típica (ou seja, enctype=”multipart/form-data”

Se seus dados de postagem estiverem em outro formato (por exemplo, JSON ou XML, você pode fazer algo assim:

$post = file_get_contents('php://input');

e $postconterá os dados brutos.

Supondo que você esteja usando a $_POSTvariável padrão , você pode testar se uma caixa de seleção está marcada desta forma:

if(isset($_POST['myCheckbox']) && $_POST['myCheckbox'] == 'Yes')
{
     ...
}

Se você tiver uma série de caixas de seleção (por exemplo,

<form action="myscript.php" method="post">
  <input type="checkbox" name="myCheckbox[]" value="A" />val1<br />
  <input type="checkbox" name="myCheckbox[]" value="B" />val2<br />
  <input type="checkbox" name="myCheckbox[]" value="C" />val3<br />
  <input type="checkbox" name="myCheckbox[]" value="D" />val4<br />
  <input type="checkbox" name="myCheckbox[]" value="E" />val5
  <input type="submit" name="Submit" value="Submit" />
</form>

Usar [ ]no nome da caixa de seleção indica que os valores selecionados serão acessados ​​pelo script PHP como um array. Neste caso $_POST['myCheckbox'], não retornará uma única string, mas retornará uma matriz que consiste em todos os valores das caixas de seleção que foram marcadas.

Por exemplo, se eu verifiquei todas as caixas, $_POST['myCheckbox']seria um conjunto constituído por: {A, B, C, D, E}. Aqui está um exemplo de como recuperar a matriz de valores e exibi-los:

  $myboxes = $_POST['myCheckbox'];
  if(empty($myboxes))
  {
    echo("You didn't select any boxes.");
  }
  else
  {
    $i = count($myboxes);
    echo("You selected $i box(es): <br>");
    for($j = 0; $j < $i; $j++)
    {
      echo $myboxes[$j] . "<br>";
    }
  }

2
Você pretendia adicionar um exemplo / link no final?

1
Obrigado, eu realmente tentei apenas print_r ($ _ POST) e não estava funcionando devido a estar usando GET o tempo todo. Meu mal
— lisovaccaro

@ Liso22 não se preocupe! Acontece com todos nós :)
— Code Magician

5
$ post = file_get_contents ('php: // input'); economizou meu tempo. Obrigado. Oh deus, f ** ng php ...
— Nedudi

1
Gratz por 100!
— outro

77

você deve ser capaz de acessá-los a partir da $_POSTvariável:

foreach ($_POST as $param_name => $param_val) {
    echo "Param: $param_name; Value: $param_val<br />\n";
}

Você pretendia adicionar um exemplo / link no final?

1
Observei os dois pontos no final da resposta.

Esta é a resposta ao que foi perguntado.
— lisandro

13

Ele está obsoleto e não deseja acessar superglobais diretamente (desde o php 5.5, eu acho?)

Cada IDE moderno dirá a você:

Não acesse Superglobals diretamente. Use algumas funções de filtro (por exemplo filter_input)

Para nossa solução, para obter todos os parâmetros de solicitação, temos que usar o método filter_input_array

Para obter todos os parâmetros de um método de entrada, use o seguinte:

$myGetArgs = filter_input_array(INPUT_GET);
$myPostArgs = filter_input_array(INPUT_POST);
$myServerArgs = filter_input_array(INPUT_SERVER);
$myCookieArgs = filter_input_array(INPUT_COOKIE);
...

Agora você pode usá-lo em var_dumpou em seu foreach-Loops

O que não funciona é acessar a Superglobal $ _REQUEST com este método. Sempre retorna NULLe isso está correto.

Se você precisar obter todos os parâmetros de entrada, vindo de métodos diferentes, basta mesclá-los como no seguinte método:

function askForPostAndGetParams(){
    return array_merge ( 
        filter_input_array(INPUT_POST), 
        filter_input_array(INPUT_GET) 
    );
}

Editar: versão estendida deste método (funciona também quando um dos métodos de solicitação não está definido):

function askForRequestedArguments(){
    $getArray = ($tmp = filter_input_array(INPUT_GET)) ? $tmp : Array();
    $postArray = ($tmp = filter_input_array(INPUT_POST)) ? $tmp : Array();
    $allRequests = array_merge($getArray, $postArray);
    return $allRequests;
}

recebo um erro fatal ao tentar usar sua sugestão "$ postArray = ($ tmp = filter_input_array (INPUT_POST))? $ tmp: Array ();". FATAL ERROR Expressão constante contém operações inválidas na linha número 5
— luckyguy73

@AshtonMorgan eu testei (copiar e colar) e funciona bem. Qual versão do PHP você usa?
— mtizziani

9

Então, algo como a $_POSTmatriz?

Você pode usar http_build_query($_POST)para colocá-los em uma var=xxx&var2=yyystring novamente. Ou apenas print_r($_POST)para ver o que há.


6

Por que não isso, é fácil:

extract($_POST);

4
Idéia terrível no estado em que se encontra; buraco de segurança gigante.
— ninguém

2
Este código responde perfeitamente à sua pergunta "Como faço para que todas as variáveis ​​sejam enviadas com o POST?", Enquanto as outras respostas não. E a melhor resposta é rejeitada, vai descobrir. A segurança pode não ser um problema para seu projeto. Você está dizendo que aqueles que cometeram php cometeram um erro ao inventar essa função, que ela nunca deveria ser usada?
— bubbahut

2
@bubbahut exatamente. Ninguém quer todas as variáveis ​​de postagem para o código de produção.
— cowboysaif

5

Usando isso, você pode obter todas as variáveis ​​de postagem

print_r($_POST)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.