Secondo w3c "Diverse caselle di controllo in un modulo possono condividere lo stesso nome di controllo, ad esempio, le caselle di controllo consentono agli utenti di selezionare diversi valori per la stessa proprietà." Tuttavia, se lo fai, PHP prenderà solo l'ultimo valore. Per esempio:Diverse caselle di controllo che condividono lo stesso nome
<?php
if ($_POST) {
echo "<pre>";
print_R($_POST);
echo "</pre>";
}
?>
<form action="" method = "post">
<input type="checkbox" name="pet" value="dog" />Dog<br />
<input type="checkbox" name="pet" value="Cat" />Cat<br />
<input type="checkbox" name="pet" value="bird" />bird<br />
<input type="checkbox" name="pet" value="iguana" />iguana<br />
<input type="submit" />
</form>
Se si invia quella forma, si vedrà che solo la casella selezionata che appare ultima sarà impostata. Il browser li invia tutti, ma si sovrascrivono a vicenda. Pertanto, l'impostazione dello stesso nome su più checkbox può causare problemi. È sempre stato così? Mi sembra di ricordare che era possibile inviare tutti i valori come array.
So che si può solo aggiungere un [] alla fine del nome per creare una matrice di valori:
<?php
if ($_POST) {
echo "<pre>";
print_R($_POST);
echo "</pre>";
}
?>
<form action="" method = "post">
<input type="checkbox" name="pet[]" value="dog" />Dog<br />
<input type="checkbox" name="pet[]" value="Cat" />Cat<br />
<input type="checkbox" name="pet[]" value="bird" />bird<br />
<input type="checkbox" name="pet[]" value="iguana" />iguana<br />
<input type="submit" />
</form>
Ma il W3C non precisano che. Onestamente non ricordo se ho sempre usato il [] alla fine del nome, ma per qualche ragione penso che a un certo punto non l'ho fatto. C'è stato un tempo in passato in cui si poteva far funzionare senza il []?
http://www.w3.org/TR/html401/interact/forms.html#checkbox
È necessario utilizzare '[]' e quindi è possibile utilizzare 'in_array' per determinare quali caselle di controllo sono state selezionate. Fastidioso, ma non tutte le forme? – thatidiotguy
w3c non lo specifica perché è specifico per 'php' (e possibilmente altre lingue) e non è relativo al w3c. Altre lingue non hanno questo requisito. Come hai affermato, il browser invia tutti i valori. –
Vedo entrambi i tuoi punti. Grazie. E sì, tutte le forme sono fastidiose. – Buzu