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?

Lisovaccaro
fonte
3
possível duplicata de How to grab all variables in a post (PHP)
mario

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>";
    }
  }
Code Magician
fonte
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";
}
Tudor Constantin
fonte
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;
}
mtizziani
fonte
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á.

mario
fonte
6

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

extract($_POST);
Bubbahut
fonte
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)

fonte