Ricevi tutte le variabili inviate con POST?


89

Ho bisogno di inserire tutte le variabili inviate con il post, erano caselle di controllo ciascuna che rappresentava un utente.

Se uso GET ottengo qualcosa del genere:

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

Devo inserire le variabili nel database.

Come ottengo tutte le variabili inviate con POST? Come un array o valori separati da virgole o qualcosa del genere?


Risposte:


167

La variabile $_POSTviene popolata automaticamente.

Prova var_dump($_POST);a vedere i contenuti.

Puoi accedere a valori individuali in questo modo: echo $_POST["name"];

Questo, ovviamente, presuppone che il tuo modulo utilizzi la tipica codifica del modulo (ad es enctype=”multipart/form-data”

Se i dati dei tuoi post sono in un altro formato (ad esempio JSON o XML, puoi fare qualcosa del genere:

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

e $postconterrà i dati grezzi.

Supponendo che tu stia utilizzando la $_POSTvariabile standard , puoi verificare se una casella di controllo è selezionata in questo modo:

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

Se hai una serie di caselle di controllo (ad es

<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'uso [ ]del nome nella casella di controllo indica che i valori selezionati saranno accessibili dallo script PHP come un array. In questo caso $_POST['myCheckbox']non restituirà una singola stringa ma restituirà un array composto da tutti i valori delle caselle di controllo che sono state spuntate.

Ad esempio, se controllato tutte le caselle, $_POST['myCheckbox']sarebbe un array costituito da: {A, B, C, D, E}. Ecco un esempio di come recuperare la matrice di valori e visualizzarli:

  $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
Volevi aggiungere un esempio / link alla fine?

1
Grazie, in realtà avevo provato solo a print_r ($ _ POST) e non funzionava perché utilizzavo GET per tutto il tempo.
Colpa

@ Liso22 non preoccuparti! Succede a tutti noi :)
Code Magician

5
$ post = file_get_contents ('php: // input'); mi ha fatto risparmiare tempo. Grazie. Oddio, f ** ng php ...
Nedudi

1
Gratz per 100!
un altro

77

dovresti essere in grado di accedervi dalla $_POSTvariabile:

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

Volevi aggiungere un esempio / link alla fine?

1
Ho notato i due punti alla fine della risposta.

Questa è la risposta a quanto chiesto.
lisandro

13

È deprecato e non si desidera accedere direttamente a superglobals (da php 5.5 penso?)

Ogni IDE moderno ti dirà:

Non accedere direttamente a Superglobals. Usa alcune funzioni di filtro (ad esempio filter_input)

Per la nostra soluzione, per ottenere tutti i parametri di richiesta, dobbiamo utilizzare il metodo filter_input_array

Per ottenere tutti i parametri da un metodo di input, usa questo:

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

Ora puoi usarlo in var_dumpo nei tuoi foreach-Loops

Ciò che non funziona è accedere a $ _REQUEST Superglobal con questo metodo. Ritorna sempre NULLe questo è corretto.

Se hai bisogno di ottenere tutti i parametri di input, utilizzando metodi diversi, uniscili come nel seguente metodo:

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

Modifica: versione estesa di questo metodo (funziona anche quando uno dei metodi di richiesta non è impostato):

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

ottengo un errore irreversibile quando provo a utilizzare il tuo suggerimento "$ postArray = ($ tmp = filter_input_array (INPUT_POST))? $ tmp: Array ();". ERRORE IRREVERSIBILE L'espressione costante contiene operazioni non valide sulla riga numero 5
luckyguy73

@ AshtonMorgan l'ho provato (copia incolla) e funziona bene. Quale versione PHP usi?
mtizziani

9

Quindi, qualcosa come l' $_POSTarray?

Puoi usarli http_build_query($_POST)per metterli di var=xxx&var2=yyynuovo in una stringa. O solo print_r($_POST)per vedere cosa c'è.


6

Perché no, è facile:

extract($_POST);

4
Idea terribile così com'è; gigantesco buco di sicurezza.
nessuno

2
Questo codice risponde perfettamente alla sua domanda "Come ottengo tutte le variabili inviate con POST?", Mentre le altre risposte no. E la risposta migliore viene sottovalutata, vai a capire. La sicurezza potrebbe non essere un problema per il suo progetto. Stai dicendo che chi ha fatto php ha sbagliato ad inventare questa funzione, che non dovrebbe mai essere usata?
bubbahut

2
@bubbahut esattamente. Nessuno vuole tutte le variabili di post per il codice di produzione.
cowboysaif

5

Usando questo puoi ottenere tutte le variabili di post

print_r($_POST)
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.