Leer checkbox con php

  • Autor Autor suizer
  • Fecha de inicio Fecha de inicio
S

suizer

Gamma
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Hola muy buenas,

Estoy haciendo un formulario en HTML y con PHP y teng problema a la hora de leer las opciones de unos checkbox. Os dejo el código HTML aquí:

Insertar CODE, HTML o PHP:
<table border="1" cellspacing="2" cellpadding="0" class="table-calendar">
                  <tbody>
                    <tr>
                      <td align="center" width="10%"><label>Lunes<br><br><input type="checkbox" name="dayWeek[]" id="mo" value="1" checked=""></label></td>
                      <td align="center" width="10%"><label>Martes<br><br><input type="checkbox" name="dayWeek[]" id="tu" value="1" checked=""></label></td>
                      <td align="center" width="10%"><label>Miércoles<br><br><input type="checkbox" name="dayWeek[]" id="we" value="1" checked=""></label></td>
                      <td align="center" width="10%"><label>Jueves<br><br><input type="checkbox" name="dayWeek[]" id="th" value="1" checked=""></label></td>
                      <td align="center" width="10%"><label>Viernes<br><br><input type="checkbox" name="dayWeek[]" id="fr" value="1" checked=""></label></td>
                      <td align="center" width="10%"><label>Sábado<br><br><input type="checkbox" name="dayWeek[]" id="sa" value="1" checked=""></label></td>
                      <td align="center" width="10%"><label>Domingo<br><br><input type="checkbox" name="dayWeek[]" id="su" value="1" checked=""></label></td>
                    </tr>
                  </tbody>
                </table>

Por defecto todos están marcados por lo que me gustaría ahcer es con php leer todos los que si y todos los que no están marcados pero no me sale.

He probado con:

PHP:
f(!empty($_POST['dayWeek'])) {
    foreach($_POST['dayWeek'] as $check) {
            echo $check.'<br>';
    }
}
  
  echo 'l: '.$check[0]."<br />";
  echo 'ma: '.$check[1]."<br />";
  echo 'mi: '.$check[2]."<br />";
  echo 'j: '.$check[3]."<br />";
  echo 'v: '.$check[4]."<br />";
  echo 's: '.$check[5]."<br />";
  echo 'd: '.$check[6]."<br />";

Basicamente quiero saber cual estan marcados y ponerle como 1 y los que no ponerles como 0.

Saludos y gracias
 
[MENTION=19536]suizer[/MENTION] $check no lo puedes llamar por fuera del foreach, no va a funcionar. Observa el siguiente codigo y pruebalo.

PHP:
if(!empty($_POST['dayWeek'])) { 
    $day = $_POST['dayWeek'];
    /*foreach($_POST['dayWeek'] as $check) { 
            echo $check.'<br>'; 
    } */
    echo 'l: '.$day[0]."<br />"; 
    echo 'ma: '.$day[1]."<br />"; 
    echo 'mi: '.$day[2]."<br />"; 
    echo 'j: '.$day[3]."<br />"; 
    echo 'v: '.$day[4]."<br />"; 
    echo 's: '.$day[5]."<br />"; 
}

Si alguno de los checkbox no se marca aparecerá un error ya que estas llamando algo que no existe. Con un if lo puedes controlar facilmente

Saludos
 
Esta seria una forma

i
PHP:
f(!empty($_POST['dayWeek'])) { 
    $day = $_POST['dayWeek'];
    
if ($day[0]=="") { 
echo "l:0<br />";
}
else
{
 echo "l: ".$day[0]."<br />";
}
 .
.
.
.  

}
 
[MENTION=19536]suizer[/MENTION] con la forma de nestornoe se haría un código muy grande, lo que puedes hacer es usar array_diff

Primero que nada tienes que cambiar el valor de los checkbox, en lugar de todos 1, cambiarlo por el nombre de su día, después pre-definir un array con los valores de los checkbox, el otro array será los que envíes en el formulario, luego ya los comparas:

PHP:
$dayWeek_pre = array('lunes', 'martes', 'miercoles', 'jueves', 'viernes', 'sabado', 'domingo');
$dayWeek = $_POST['dayWeek'];
$diferencia = array_diff($dayWeek_pre, $dayWeek);

Ya que los hayas comparado, los recorremos, para ver cuáles están seleccionados y cuáles no:

PHP:
for ($i = 0; $i < count($dayWeek_pre); $i++) {
    if (empty($diferencia[$i]))
        echo ucwords($dayWeek_pre[$i]) . ' SELECCIONADO<br>';
    else
        echo ucwords($dayWeek_pre[$i]) . ' NO SELECCIONADO<br>';
}

Y listo, ya con eso sabremos cuáles están seleccionados y cuáles no.

Captura.webp
 
Última edición:
Los checkbox que no selecciones no seran enviados, es decir si tienes 5 checkbox y solo selecciones 2, PHP solo recibira esos 2, la forma que te dio [MENTION=81006]kanikase[/MENTION] es lo correcto
 
Muchas gracias a todos, al final lo he solucionado con vuestras ayudas.
 
Atrás
Arriba