2012-07-12 7 views
5

Poco fa, ho fatto una domanda sull'utilizzo dello stesso nome di input/nome nascosto più volte in una pagina, e ho ottenuto una risposta che non lavoro come suggerito che dovevo usare per mettere parentesi dopo il nome del campo, come partno[].C'è un modo in PHP per acquisire TUTTE le informazioni trasmesse usando il metodo POST

Non posso utilizzarlo nel mio modulo, poiché il carrello che viene inviato riconosce solo alcuni nomi di campo come: partno, articolo, prezzo, qty, ecc. (Non posso usare partno[], item[], ecc.) Quindi ho davvero bisogno essere in grado di ottenere tutti i valori per ogni nome di campo identico utilizzato più volte. Quando utilizzo il metodo GET, verranno visualizzati tutti i valori per ciascun nome di campo utilizzato nella barra degli indirizzi. Puoi provare this e inviare il modulo. Guarda l'url nella barra degli indirizzi.

La mia nuova domanda è: esiste un modo in PHP per acquisire tutte le informazioni passate utilizzando il metodo POST? (come quello che appare nella barra degli indirizzi nell'esempio sopra ma usando POST, non GET). Posso analizzarlo se riesco a trovare un modo per catturarlo.

Grazie, Kelly

+0

basta usare 'method =" post "' nel modulo? – cweinberger

+0

@harakiri op usa gli stessi parametri più volte, 5x PartNo ecc. Come si può vedere nel suo URL di esempio. Questo non funzionerà con get o post. hai ancora bisogno di un nome univoco per input. – 32bitfloat

+1

Questa limitazione e la sintassi 'name =" parentesi [] "' è puramente una cosa di PHP, è del tutto legittimo avere più input con lo stesso nome. –

risposta

2

basta usare $_POST invece di $_GET.

Quindi, se si sta utilizzando get nel seguente modo:

?something=somevalue 

E dovevamo prendere con $_GET['something'], si dovrebbe ora utilizzare $_POST['something'].

+0

Credo che il punto della domanda dell'OP fosse l'accesso ai valori di campi con nomi identici, senza usare la notazione della parentesi come 'name =" items [] "', Il passaggio da post/get non farà la differenza. L'OP sta già chiedendo come fare con 'POST', quindi non riesco a vedere a cosa serve questa risposta. So che c'è una tendenza a rispondere al titolo della domanda piuttosto che leggere il tutto. –

+0

La mia risposta non lo usa usando 'names =" items [] "' format. Ovviamente non comprendi completamente il metodo originale che stava cercando, poiché differisce completamente dalla risposta che ho fornito. Sono abbastanza sicuro che anche lui è stato il primo a votare la mia risposta, quindi sì. – Valjas

+0

Rileggi attentamente la domanda (inoltre, i nuovi utenti non possono effettuare l'upvoting fino a quando non raggiungono i 15 rep, e dal profilo vedo 0 voti espressi). –

1

Poiché il POST in PHP non è altro che un array, basta scorrere su di esso.

foreach($_POST as $k => $v) { 
    echo($k . ': '. $v . '<br>'); 
} 
+0

Il problema con questo è che più input con lo stesso nome sovrascriveranno quello precedente quando viene creato '$ _POST', a meno che non si utilizzino i nomi' parentesi [] ', che l'OP dice che non possono fare. –

-1

Nessun modo per POST 2 ingressi con lo stesso nome di stringa. Dovresti modificare il carrello in array di convent in stringa.

Se si utilizza GET è possibile verificare la funzione parse_url().

+0

è molto possibile utilizzare un nome parametro più di una volta, solo il modo in cui php analizza la richiesta non ti consente di accedere a più di un parametro di questo tipo usando '$ _POST', quindi devi analizzare tu stesso la richiesta – mata

2

È possibile ottenere i dati incontaminate direttamente dal flusso di input:

file_get_contents('php://input'); 

Quindi, se avete qualcosa di simile:

<input name="type" value="val1"> 
<input name="type" value="val2"> 
<input name="type" value="val3"> 

Si otterrà una stringa come questa:

type=val1&type=val2&type=val3 

È quindi possibile analizzare questa stringa in un array e creare i propri "dati post grezzi".

http://php.net/manual/en/wrappers.php.php

php: // input è un flusso di sola lettura che consente di leggere i dati grezzi dal corpo della richiesta. Nel caso di richieste POST, è preferibile utilizzare l'input php: // invece di $ HTTP_RAW_POST_DATA in quanto non è dipendente da direttive speciali php.ini. Inoltre, per quei casi in cui $ HTTP_RAW_POST_DATA non è popolato per impostazione predefinita, è potenzialmente un'alternativa meno dispendiosa della memoria da all'attivazione di always_populate_raw_post_data.php: // input non è disponibile con enctype = "multipart/form-data".

+0

Ho guardato php: // ma non ero sicuro di come implementarlo. Con quello che hai fornito, sono stato in grado di risolvere i miei problemi ... Grazie mille. Kelly – user1519293

+0

Proprio come questo: '$ my_data = file_get_contents ('php: // input');', Quindi analizza '$ my_data' per ottenere le variabili (hai indicato che potresti gestire quella parte, in caso contrario sentiti libero di chiedere). –

0

Se si desidera visualizzare l'invio di $ _POST, var_dump ($ _ POST) o echo print_r ($ _ POST). Questo ti mostrerà tutti i nomi dei campi e i dati, anche se i nomi dei campi contengono array, come il tuo partno [].