Buenas Se me ocurre que puedes crear una variable javascript consulta, y en el onclick de "Enviar" lo mande a una función javascript que revise el objeto y sus valores, añadiendo la parte que corresponda a tu var consulta si procede, para mandarsela a tu insertar.php No se si esto te ayuda mucho... https://www.jose-aguilar.com/blog/validar-input-checkbox-con-php/ Un saludo
Insertar lineas de formulario, pero sólo las que esten marcadas por el check
Buenas, tengo una form de varias líneas, con un check de pagos, y quiero que sólo se inserten los datos donde el check este marcado.
el form:
<form action='administrar_libro.php' method='post'>
<p>Selecciona Fecha: <input type="text" id="datepicker" name='date' required></p> <table border=1> <head> <td>Idalumno</td> <td>Nombre</td> <td>Apellidos</td> <td>Pago</td> </head> <body> <?php foreach ($libro as $libro4) {?> <tr> <td> <input type='text' name='id[]' value='<?php echo $libro4->getId()?>'></td> <td> <input type='text' name='nombre[]' value='<?php echo $libro4->getNombre()?>'></td> <td> <input type='text' name='apellidos[]' value='<?php echo $libro4->getApellidos()?>'></td> <td><input type='checkbox' id = 'check' name='pago[]' value="pagado"></td> </tr> <?php }?> </body> <input type='hidden' name='pagos[]' value='pagos' > </table><BR><br>
luego los recibo en mi php administrar_libros.php
}elseif(isset($_POST['pagos'])){ if ( !empty($_POST["pagos"]) && is_array($_POST["pagos"]) ) {
for($i=0, $t=count($_POST['nombre']); $i<$t; $i++){
$libro4->setNombre($_POST['nombre'][$i]); $libro4->setApellidos($_POST['apellidos'][$i]);
$libro4->setPago($_POST['pago'][$i]);
$libro4->setId($_POST['id'][$i]); $libro4->setFecha($_POST['date']);
$crud->pagos($libro4);
//llama a la función asistencia definida en el crud
echo '<div class="alert alert-success">Has registrado correctamente la asistencia del día.</div>'; echo "<a href='index.php'>Volver</a> "; print "<pre>"; print_r($_REQUEST); print "</pre>\n";
public function pagos($libro4){ $db=Db::conectar(); // $db->beginTransaction(); // $asistencialibros=[]; $insert=$db->prepare('INSERT INTO pagos values (NULL,:nombre,:apellidos,:pago,:id, :date)'); // foreach ($libro as $libro2) {
$insert->bindvalue('nombre',$libro4->getNombre()); $insert->bindvalue('apellidos',$libro4->getApellidos());
$insert->bindvalue('pago',$libro4->getPago()); $insert->bindvalue('id',$libro4->getId()); $insert->bindvalue('date',$libro4->getFecha()); //
$insert->execute();
} }
y los inserto:
public function pagos($libro4){ $db=Db::conectar(); // $db->beginTransaction(); // $asistencialibros=[]; $insert=$db->prepare('INSERT INTO pagos values (NULL,:nombre,:apellidos,:pago,:id, :date)'); // foreach ($libro as $libro2) {
$insert->bindvalue('nombre',$libro4->getNombre()); $insert->bindvalue('apellidos',$libro4->getApellidos());
$insert->bindvalue('pago',$libro4->getPago()); $insert->bindvalue('id',$libro4->getId()); $insert->bindvalue('date',$libro4->getFecha()); //
$insert->execute();
Respuestas
Por lo que veo, tú solamente necesitas hacer un condicional.
Lo que tendrías que ver es si un checkbox en particular está marcado o no, en cuyo caso sí que insertas los datos, o no los insertas si no se ha marcado.
Además es importante saber que los checkbox no llegan a la página de destino si no se han marcado, es como si no estuviera el campo del formulario. ummmm igual ese es tu problema! Ya veo!
En este caso creo que un campo cheched sería de poca utilidad
<input type="checkbox" name="productoChecqueado[]">Yo crearía un componente que te permita usar un hidden por debajo, que mande un dato concreto. Sería una interfaz de usuario que te tendrías que generar en Javascript. Esa interfaz tendría un checkbox y un campo hidden. El checkbox ni tendrá name para ano enviarse nada. Simplemente cada vez que se marque o se desmarque el checkbox se cambiaría el value del campo hidden. De ese modo puedes asegurarte que siempre recibes algo en el campo hidden, podría ser una cadena como "marcado" o "desmarcado". Luego en php observas esa cadena para agregar esa línea y listo.