Obtenir toutes les variables envoyées avec POST?


85

Je dois insérer toutes les variables envoyées avec la poste, c'étaient des cases à cocher représentant chacune un utilisateur.

Si j'utilise GET, j'obtiens quelque chose comme ceci:

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

J'ai besoin d'insérer les variables dans la base de données.

Comment obtenir toutes les variables envoyées avec POST? En tant que tableau ou valeurs séparées par des virgules ou quelque chose?


Réponses:


164

La variable $_POSTest automatiquement renseignée.

Essayez var_dump($_POST);de voir le contenu.

Vous pouvez accéder à des valeurs individuelles comme celle-ci: echo $_POST["name"];

Ceci, bien sûr, suppose que votre formulaire utilise le codage de formulaire typique (c.-à-d. enctype=”multipart/form-data”

Si vos données de publication sont dans un autre format (par exemple JSON ou XML, vous pouvez faire quelque chose comme ceci:

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

et $postcontiendra les données brutes.

En supposant que vous utilisez la $_POSTvariable standard , vous pouvez tester si une case à cocher est cochée comme ceci:

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

Si vous avez un tableau de cases à cocher (par exemple

<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>

Utiliser [ ]dans le nom de la case à cocher indique que les valeurs sélectionnées seront accessibles par le script PHP sous forme de tableau. Dans ce cas $_POST['myCheckbox'], ne retournera pas une seule chaîne mais renverra un tableau composé de toutes les valeurs des cases à cocher qui ont été cochées.

Par exemple, si j'ai vérifié toutes les cases, $_POST['myCheckbox']serait un tableau composé de: {A, B, C, D, E}. Voici un exemple de la façon de récupérer le tableau de valeurs et de les afficher:

  $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
Aviez-vous l'intention d'ajouter un exemple / lien à la fin?

1
Merci, j'avais en fait essayé juste de print_r ($ _ POST) et cela ne fonctionnait pas car j'utilisais GET pendant tout ce temps. Mon mauvais
lisovaccaro

@ Liso22 pas de soucis! Cela nous arrive à tous :)
Code Magician

5
$ post = file_get_contents ('php: // entrée'); a sauvé mon temps. Merci. Oh god, f ** ng php ...
Nedudi

1
Gratz pour 100!
un autre

77

vous devriez pouvoir y accéder à partir de la $_POSTvariable:

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

Aviez-vous l'intention d'ajouter un exemple / lien à la fin?

1
Remarqué les deux points à la fin de la réponse.

C'est la réponse à ce qui a été demandé.
lisandro

11

Il est obsolète et ne souhaite pas accéder directement aux superglobales (depuis php 5.5 je pense?)

Chaque IDE moderne vous dira:

N'accédez pas directement aux superglobales. Utilisez certaines fonctions de filtrage (par exemple filter_input)

Pour notre solution, pour obtenir tous les paramètres de requête, nous devons utiliser la méthode filter_input_array

Pour obtenir tous les paramètres d'une méthode d'entrée, utilisez ceci:

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

Maintenant, vous pouvez l'utiliser dans var_dumpou vos foreach-Loops

Ce qui ne fonctionne pas, c'est d'accéder au Superglobal $ _REQUEST avec cette méthode. Il revient toujours NULLet c'est correct.

Si vous avez besoin d'obtenir tous les paramètres d'entrée, en utilisant différentes méthodes, fusionnez-les simplement comme dans la méthode suivante:

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

Edit: version étendue de cette méthode (fonctionne également lorsque l'une des méthodes de requête n'est pas définie):

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;
}

J'obtiens une erreur fatale en essayant d'utiliser votre suggestion "$ postArray = ($ tmp = filter_input_array (INPUT_POST))? $ tmp: Array ();". FATAL ERROR L'expression constante contient des opérations non valides sur la ligne numéro 5
luckyguy73

@AshtonMorgan je l'ai testé (copier-coller) et cela fonctionne très bien. Quelle version de PHP utilisez-vous?
mtizziani

8

Alors, quelque chose comme le $_POSTtableau?

Vous pouvez utiliser http_build_query($_POST)pour les obtenir à var=xxx&var2=yyynouveau dans une chaîne. Ou juste print_r($_POST)pour voir ce qu'il y a.


6

Pourquoi pas ça, c'est facile:

extract($_POST);

4
Terrible idée telle quelle; trou de sécurité géant.
personne le

2
Ce code répond parfaitement à sa question "Comment faire envoyer toutes les variables avec POST?", Contrairement aux autres réponses. Et la meilleure réponse est rejetée, allez comprendre. La sécurité n'est peut-être pas un problème pour son projet. Êtes-vous en train de dire que ceux qui ont fait php ont fait une erreur en inventant cette fonction, qu'elle ne devrait jamais être utilisée?
bubbahut le

2
@bubbahut exactement. Personne ne veut toutes les variables de publication pour le code de production.
cowboysaif

5

En utilisant cela, vous pouvez obtenir toutes les variables de publication

print_r($_POST)
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.