web-dev-qa-db-fra.com

Obtenir toutes les variables envoyées avec POST?

J'ai besoin d'insérer toutes les variables envoyées avec post, c'étaient des cases à cocher représentant chacune un utilisateur.

Si j'utilise GET, je reçois quelque chose comme ceci:

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

Je dois 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?

71
lisovaccaro

La variable $_POST est automatiquement renseignée.

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

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

Bien entendu, cela 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 (JSON ou XML, par exemple), vous pouvez procéder de la manière suivante:

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

et $post contiendra les données brutes.

En supposant que vous utilisiez la variable standard $_POST, vous pouvez vérifier 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>

L'utilisation de [ ] dans 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 renverra pas une seule chaîne mais renverra un tableau contenant toutes les valeurs des cases à cocher cochées.

Par exemple, si j'ai coché toutes les cases, $_POST['myCheckbox'] serait un tableau composé de: {A, B, C, D, E}. Voici un exemple montrant comment récupérer le tableau de valeurs et 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>";
    }
  }
138
Code Magician

vous devriez pouvoir y accéder depuis la variable $_POST:

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

Il est déconseillé et ne souhaitait pas accéder directement aux superglobales (depuis php 5.5 je pense?)

Chaque IDE moderne vous dira:

Ne pas accéder directement aux superglobales. Utiliser 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_dump ou dans vos foreach- Boucles

Ce qui ne fonctionne pas, c’est d’avoir accès au $ _REQUEST Superglobal avec cette méthode. Il retourne toujours NULL et c'est correct.

Si vous avez besoin de tous les paramètres d’entrée, en passant par différentes méthodes, il suffit de les fusionner 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 aussi quand 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;
}
11
mtizziani

Donc, quelque chose comme le tableau $_POST ?

Vous pouvez utiliser http_build_query($_POST) pour les récupérer à nouveau dans une chaîne _var=xxx&var2=yyy_. Ou simplement print_r($_POST) pour voir ce qu'il y a.

8
mario

Pourquoi pas ça, c'est facile:

extract($_POST);
6
bubbahut

En utilisant ceci, vous pouvez obtenir toutes les variables post

print_r($_POST)
5
user5808655