Taula de continguts

Checkboxes en PHP

Aquest article ve dels fonaments en PHP.

Els checkboxes es poden resoldre com a variables independents cadascun, o bé a través d'un array, que ho fa mes convenient.


Checkboxes bàsic

Volem implementar una llista de la compra com aquesta:

Resoldríem la part HTML així:

checkboxes.html
<h3>Llista de la compra</h3>
<form action="checkboxes2.php" method="post">
	<input type="checkbox" id="patates" name="patates">
	<label for="patates">Patates</label>
	<br>
	<input type="checkbox" id="ous" name="ous">
	<label for="ous">Ous</label>
	<br>
	<input type="checkbox" id="cebes" name="cebes">
	<label for="cebes">Cebes</label>
	<br>
	<input type="submit">
</form>

Ens enviarà les dades com seria mes esperable (si seleccionem Ous i Cebes):

$_POST = array(2) {
  ["ous"]=>
  string(2) "on"
  ["cebes"]=>
  string(2) "on"
}

I el processament d'aquest formulari:

checkboxes2.php
<?php
 
$productes = ["patates","ous","cebes"];
 
echo "<p>A la cistella hi ha:</p>\n";
echo "<ul>\n";
foreach( $productes as $elem ) {
	if( in_array($elem,array_keys($_POST)) )
		echo "<li>$elem</li>\n";
}
echo "</ul>";
 
var_dump($_POST);

Observa que:


Checkboxes amb array

Si volem enviar tots els elements de la compra en un sol array, es pot fer canviant el formulari inicial, i al name de cada checkbox posar-hi el nom de la variable array, per nosaltres prod[]:

checkboxes_array.html
<h3>Llista de la compra amb array</h3>
<form action="checkboxes_array2.php" method="post">
	<input type="checkbox" id="patates" name="prod[]">
	<label for="patates">Patates</label>
	<br>
	<input type="checkbox" id="ous" name="prod[]">
	<label for="ous">Ous</label>
	<br>
	<input type="checkbox" id="cebes" name="prod[]">
	<label for="cebes">Cebes</label>
	<br>
	<input type="submit">
</form>

Això ens enviaria les dades via POST d'aquesta altra manera, diferent de l'exemple anterior:

$_POST = array(1) {
  ["prods"]=>
  array(2) {
    [0]=>
    string(3) "ous"
    [1]=>
    string(5) "cebes"
  }
}

Realitza el codi PHP que mostri els elements que hem seleccionat, similarment a com s'ha resolt en el primer exemple.

És més senzill o més complicat el codi d'aquesta nova versió?