2012-12-27 20 views
7

Ho il seguente modulo:Come postare un array associativo in PHP

<form action="options.php" method="post"> 
    <input type="text" name="deptid" id="deptid" /> 
    <input type="text" name="deptname" id="deptname" /> 
    <input type="submit" name="submit" id="submit" value="save" /> 
</form> 

EDIT

E 'possibile passare i due valori in un array associativo PRIMA presentazione? Vorrei passare in questa forma:

array('deptid'=>'deptname') 

Ho bisogno di questo perché evito di modificare lo script del file di destinazione php (options.php)

Grazie.

+1

cURL è il tuo amico –

+1

@HankyPanky - Che cosa cURL ha a che fare con questo? –

+0

Perché ha detto "usando solo script php". Quindi, se deve pubblicare i dati su questa pagina usando solo lo script php, per un principiante ho pensato che CURL sarebbe stato buono. –

risposta

5

$_POST è già un array associativo e vi consiglio di non complicare le cose al di là che perché $_POST già detiene i dati provenienti da modulo.

$myassoc = $_POST; 
print_r($myassoc); 

e l'array associativo che riceverete è organizzato e nominato stessa nell'attributo nome degli elementi di input nel modulo (compreso textarea)

altre intuizioni

Per come la vedo il tuo codice si desidera mettere i dati deptname a deptid mentre raggiunge il codice lato server di PHP. Beh, la cosa si può fare con IS è solo assegnarlo al tasto deptid

$_POST['deptid'] = $_POST['deptname']; 
$myassoc = $_POST; 
print_r($myassoc); 
+1

Ho avuto qualcosa di completamente diverso, penso che il PO fosse dopo; Il POST è associativo, ma penso che l'OP voglia che * chiavi e valori * siano associati * all'interno * dell'array POST. –

+0

quindi qualcosa come lui vuole "unire" con l'array POST? –

-1

Perché si vuole farlo? Ma, è possibile inviare "array" attraverso forme come questo:

<form method="post"> 
    <input type="text" name="textboxes[]" /> 
    <input type="text" name="textboxes[]" /> 
    <input type="submit" /> 
</form> 

<?php 
    if(isset($_POST['textboxes'])) 
     var_dump($_POST['textboxes']); 
?> 
20

Ecco un metodo che utilizza HTML puro che ottiene vi quasi esattamente dove si vuole essere, e utilizza solo HTML:

<form action="options.php" method="post"> 
    <input type="text" name="options[deptid]" id="deptid" /> 
    <input type="text" name="options[deptname]" id="deptname" /> 
    <input type="submit" name="submit" id="submit" value="save" /> 
</form> 

che darebbe in PHP:

$post_options = array(
    'options' => array(
     'deptid '=> '[that input element value]', 
     'deptname' => '[that input element value]' 
    ) 
); 

che è quindi possibile (compreso igienizzante) l'accesso di questo tipo:

$post_options = array('options'); 

if (is_numeric($post_options['deptid'] && $post_options['deptid'] > 0) { 
    // Do whatever 
} 

if (is_string($post_options['deptname'] && strlen($post_options['deptname'] > 2)) { 
    // Do whatever 
} 

EDIT

Oppure ... Volete fare riferimento alla deptid nell'attributo input name e utilizzarlo per modificare la riga per un nome di reparto?Che sembra indicare qualcosa di simile:

<?php 

$deptid = 1; 
$deptname = 'Department of Silly Walks'; 

?><input type="hidden" name="options[<?=$deptid?>]" value="<?=$deptname?>"> 

quali uscite:

<input type="hidden" name="options[1]" value="Department of Silly Walks"> 

http://codepad.org/DtgoZGe7

Il problema di questo è che il valore $deptid diventa un valore che non è in realtà il nome o direttamente riferimento. Penso che questo sia potenzialmente problematico da implementare a causa di questa astrazione del valore dal server al client e viceversa, quindi consiglierei quello che ho in cima invece. Non è molto diverso nella pratica, ma è più o meno auto-documentante.

Nota: se si desidera serializzare un elenco di reparti, è un po 'più complicato. Si potrebbe, per esempio, provate questo:

<input type="text" name="options[][deptid]" id="deptid" /> 
<input type="text" name="options[][deptname]" id="deptname" /> 

che aggiungerebbe un valore indicizzato per ogni input. Tuttavia ... Non sarebbero stati direttamente associati. Quindi otterresti, invece, due array a indice zero per ogni chiave.

Quello che vorrei suggerire in questo caso è quello di utilizzare Javascript per aggiungere input elementi ciascuno nuovo reparto, in modo da poter dare a ciascuno un numero come:

<input type="text" name="options[0][deptid]" id="deptid" /> 
<input type="text" name="options[0][deptname]" id="deptname" /> 
<br/> 
<input type="text" name="options[1][deptid]" id="deptid" /> 
<input type="text" name="options[1][deptname]" id="deptname" /> 
<br/> 
<input type="text" name="options[2][deptid]" id="deptid" /> 
<input type="text" name="options[2][deptname]" id="deptname" /> 
<br/> 
<input type="text" name="options[3][deptid]" id="deptid" /> 
<input type="text" name="options[3][deptname]" id="deptname" /> 

O fare il metodo postback vecchia scuola e utilizzare PHP contare $POST['options'] e "manualmente" aggiungere una nuova "riga" di input con lo stesso indice. È una trappola comune, quindi devi solo pensarci se questo è ciò che stai cercando ad un certo punto.

+0

beh in questo caso è sempre lo stesso ...una matrice all'interno di un altro array –

+0

@ Mahan - Esattamente. È molto utile; vedi la mia modifica per un esempio di syndication, quando hai più nuove voci e vuoi gestire l'elenco dei dipartimenti direttamente attraverso l'array 'options' POST. –

+0

bene sto solo seguendo il codice dell'OP, vediamo se lo cambia in seguito su –

-1
$deptid = $_POST['deptid']; 
$array = array($$deptid => $_POST['deptname']); 
print_r($array); 
3
<form method="post"> 
    <input type="text" name="formdata['deptid']" /> 
    <input type="text" name="formdata['deptname']" /> 
    <input type="submit" /> 
</form> 

<?php 
    if(isset($_POST['formdata'])) 
    { 
     $deptid = $_POST['formdata']['deptid']; 
     $deptname = $_POST['formdata']['deptname']; 
    } 
?> 
0

$_POST è già un array associativo.

è possibile ricostruire una serie di forma che avete bisogno di questo, semplicemente assegnando $_POST ad una variabile

$myarray = $_POST; 

Ora $ myarray è ciò che si richiede. Do var_dump($myvar);.

+0

Grazie ma non voglio modificare lo script php nel server (options.php) – user1134475

0

Creare un oggetto JS con la struttura appropriata, convertirlo in JSON con JSON.stringify(), POST e quindi fare json_decode($_POST['data'],true).

Avrai una copia esatta dall'oggetto JS, all'array associato PHP. Rilascia il secondo parametro di true per ottenere un oggetto PHP.

Problemi correlati