2011-01-07 4 views
6

Come posso ottenere i nomi o gli ID delle caselle multiple selezionate su invio, utilizzando il PHP? Di seguito è riportato un modulo di esempio. Grazie.ottenere più caselle di controllo nomi/id con php

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    <input type="checkbox" name="orange" id="orange"> 
    <input type="checkbox" name="apple" id="apple"> 
    <input type="checkbox" name="sky" id="sky"> 
    <input type="checkbox" name="sea" id="sea"> 
    <br> 
    <br> 
    <input type="submit" name="Submit" value="Submit"> 
</form> 

risposta

18

valori Casella di controllo sono sottoposti da un modulo solo se si seleziona la casella di controllo. Inoltre, è l'attributo name che conta, non l'ID.

Ci sono diversi modi di trattare caselle in PHP:

  1. dare tutto caselle lo stesso nome seguito da una coppia di parentesi quadre, così l'intero set è trattato come un array. In questo caso, assegna ad ogni casella un valore.
  2. Assegnare a ogni casella di controllo un nome e un valore diversi.
  3. Assegna a ogni casella di controllo un nome diverso, ma nessun valore.

In ciascun caso, è necessario verificare l'esistenza del nome casella di controllo nell'array $ _POST.

Ad esempio:

<input type="checkbox" name="color[]" id="orange" value="orange"> 
<input type="checkbox" name="color[]" id="apple" value="apple"> 

Per ottenere i valori per queste caselle di controllo:

if (isset($_POST['color'])) { 
    $colors = $_POST['color']; 
    // $colors is an array of selected values 
} 

Tuttavia, se ogni casella ha un nome diverso e un valore esplicito in questo modo:

<input type="checkbox" name="orange" id="orange" value="orange"> 
<input type="checkbox" name="apple" id="apple" value="apple"> 

È ancora necessario utilizzare isset():

if (isset($_POST['orange'])) { 
    // orange has been set and its value is "orange" 
} 

Se non si imposta un valore, il valore predefinito è "on", ma non sarà nell'array $ _POST a meno che non sia stato selezionato, quindi è ancora necessario utilizzare isset().

4

Non sarà possibile ottenere gli ID, ma i nomi verranno indici associativi nel $_POST array (e $_REQUEST). NOTA: Saranno disponibili nell'array solo se sono stati controllati dal cliente.

if ($_POST['oragne'] == 'on')

9

è necessario dare gli input lo stesso nome:

<input type="checkbox" name="selection[]" value="orange"> 
<input type="checkbox" name="selection[]" value="apple"> 
<input type="checkbox" name="selection[]" value="sky"> 
<input type="checkbox" name="selection[]" value="sea"> 

Poi scorrere i $ _POST [ 'selezione'] array in PHP.

+0

Se li chiami semplicemente lo stesso, questo non funzionerà. È necessario impostarli come array: 'name =" selection [index] "' –

+0

risolto l'esempio. Inoltre penso che puoi lasciare fuori l'indice e saranno automaticamente indicizzati. –

+0

Sì, anche tu potresti farlo, ma ha chiesto espressamente di conservare l'attributo "nome". L'indice potrebbe sostituirlo. –

2

Si possono impostare fino a inviare a PHP come array, se si costruisce li simile al di sotto:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post"> 
    <input type="checkbox" name="box_group_1[oragne]" id="oragne"> 
    <input type="checkbox" name="box_group_1[apple]" id="apple"> 
    <input type="checkbox" name="box_group_1[sky]" id="sky"> 
    <input type="checkbox" name="box_group_1[sea]" id="sea"> 
    <br> 
    <br> 
    <input type="submit" name="Submit" value="Submit"> 
</form> 
<?php 
print_r($_POST['box_group_1']); 
?>