2011-11-21 18 views
45

Ho bisogno di inserire tutte le variabili inviate con il post, erano caselle di controllo ognuna rappresentante un utente.Ottieni tutte le variabili inviate con POST?

Se uso GET ottengo qualcosa di simile:

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

ho bisogno di inserire le variabili nel database.

Come si ottengono tutte le variabili inviate con POST? Come una matrice o valori separati da coma o qualcosa del genere?

+2

possibile duplicato di [Come per afferrare tutte le variabili in un post (PHP)] (http://stackoverflow.com/questions/3058336/how-to-grab-all-variables- in-a-post-php) – mario

risposta

87

La variabile $_POST viene popolata automaticamente.

Prova var_dump($_POST); per vedere il contenuto.

È possibile accedere ai singoli valori simili: echo $_POST["name"];

Questo, naturalmente, assume il modulo sta utilizzando la codifica forma tipica (cioè enctype=”multipart/form-data”

Se i dati post è in un altro formato (ad esempio JSON o XML, si può fare qualcosa di simile:

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

e $post conterrà i dati grezzi

.

Supponendo che si sta utilizzando la variabile standard $_POST, è possibile verificare se un casella è selezionata in questo modo:

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

Se si dispone di una serie di caselle di controllo (ad esempio

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

Uso [ ] nel nome casella indica che i valori selezionati sono reperibili script PHP come un array. In questo caso, $_POST['myCheckbox'] non restituirà una stringa singola ma restituirà un array costituito da tutti i valori delle caselle di controllo selezionate.

Ad esempio, se ho 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 li visualizza:

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

Hai intenzione di aggiungere un esempio/link alla fine? –

+1

Grazie, in realtà avevo provato solo a print_r ($ _ POST) e non funzionava a causa dell'utilizzo di GET per tutto il tempo. Il mio male – lisovaccaro

+0

@ Liso22 non preoccuparti! Succede a tutti noi :) –

6

Quindi, qualcosa come l'array $_POST?

È possibile utilizzare http_build_query($_POST) per inserirli nuovamente in una stringa var=xxx&var2=yyy. O solo print_r($_POST) per vedere cosa c'è.

56

si dovrebbe essere in grado di accedervi da $_POST variabile:

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

Hai intenzione di aggiungere un esempio/link alla fine? –

+0

sì, come lo sapevi? –

+1

Notati i due punti alla fine della risposta. –

3

Perché non questo, è facile:

extract($_POST); 
+2

Terribile idea così com'è; buco di sicurezza gigante. –

+0

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

+0

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

2

Usando questo u può ottenere tutti Inserisci variabile

print_r($_POST) 
4

È deprecato e non si desidera accedere direttamente ai superglobali (poiché php 5.5 penso?)

Ogni IDE moderno vi dirà:

fare direttamente non superglobali di accesso. Utilizzare alcune funzioni di filtro (ad esempio filter_input)

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

Per ottenere tutti params da un metodo di input usano 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 è possibile utilizzarlo in var_dump o il vostro foreach -Loops

ciò che non funziona è quello di accedere al $ _REQUEST Super globale con questo metodo. It Allways restituisce NULL e questo è corretto.

Se avete bisogno di ottenere tutti i params ingresso, ritornassi su metodi diversi, proprio unirli come nel seguente modo:

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

Edit: versione estesa di questo metodo (funziona anche quando uno dei metodi di richiesta non sono impostati):

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

ho un errore fatale quando provo ad usare il tuo suggerimento "$ postArray = ($ tmp = filter_input_array (INPUT_POST))? $ Tmp: Array();". ERRORE FATALE L'espressione costante contiene operazioni non valide sul numero di riga 5 –

+0

@AshtonMorgan l'ho testato (copia incolla) e funziona correttamente. Che versione di PHP usi? – mtizziani

Problemi correlati