PHP - guardar múltiples registros con checkbox

 
Vista:
Imágen de perfil de Ricardo
Val: 20
Ha disminuido su posición en 36 puestos en PHP (en relación al último mes)
Gráfica de PHP

guardar múltiples registros con checkbox

Publicado por Ricardo (12 intervenciones) el 11/06/2020 20:28:31
hola a todos espero me ayuden con este problema que me cargo
la cosa es que quiero mandar a guardar desde un modal un registro de empleados el caul se le tomala asistencia con checkbox

asistencia

la cosa es que al momento de mandarlo me bota un error en el foreach

Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\Factura_electronica_v14\ajax\nueva_asistencia.php on line 12

aki mi codigos
////////////////////////////////////////////// DISEÑO MODAL//////////////////////////
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
<table class="table">
    <tr  class="warning">
        <th colspan="3" style="text-align:left; font-size:18px;">Fecha:
            <input type="text"  style="width:200px; height:50px; text-align:center;border: 0;" value="<?php echo strftime("%A,%d %B %Y");?>" readonly ></center>
        </th>
        <th colspan="3" style="text-align:right;"><a class='btn btn-info'href="#" onclick="agregar_asistencia()">
            <i class="glyphicon glyphicon-plus"></i> Agregar Asistencia</a>
        </th>
    </tr>
    <tr  class="warning">
        <th>Nombre</th>
        <th>Apellido</th>
        <th><center>Cedula</center></th>
        <th><center>Entrada</center></th>
        <th><center>Salida</center></th>
        <th >
            Asistieron todos
            <label class="content-input">
                <input type="checkbox" id="selectall">
                <i></i>
            </label>
        </th>
    </tr>
    <?php
    while ($row=mysqli_fetch_array($query)){
        $id_empleado=$row['id_empleado'];
        $id_contrato=$row['id_contrato'];
        $nombre=$row['nombre'];
        $apellido_paterno=$row['apellido_paterno'];
        $cedula=$row['cedula'];
        $fecha_contra=$row['fecha_fin'];
 
        $fecha_actual= new DateTime(date('Y-m-d'));
        $fecha_final=new DateTime($row['fecha_fin']);
        $dias = $fecha_actual->diff($fecha_final)->format('%r%a');
        if ($dias>= 1) {
        ?>
    <tr>
        <td><?php echo $nombre; ?></td>
        <td><?php echo $apellido_paterno; ?></td>
        <td><center><?php echo $cedula; ?></center></td>
 
        <td ><center>
            <input type="text" style="width:55px; text-align:center;border: 0;" value="8:00" readonly></center>
        </td>
 
        <td ><center>
            <input type="text" style="width:55px; text-align:center;border: 0;" value="18:00" readonly></center>
        </td>
 
            <td >
                <label class="content-input">
                <input type="checkbox" class="asis" name="asis[]" id="asis" value="<?php echo $id_contrato; ?>">
                <i></i>
                Asistio</label>
            </td>
        </tr>
        <?php
    }else{
        ?>
 
        <tr>
            <td colspan="7" >
                <div class="alert alert-danger" role="alert">
                    <center><strong>¡ NO EXISTEN EMPLEADOS CONTRATADOS !</strong></center>
                </div>
            </td>
        </tr>
    <?php
    }
    }
    ?>
    <tr>
        <td colspan=5><span class="pull-right">
        <?php
         echo paginate($reload, $page, $total_pages, $adjacents);
        ?></span></td>
    </tr>
</table>


///////////////////////////////////////////////FUNCION JS /////////////////////////////////////
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function agregar_asistencia (id)
{
    var asis=document.getElementById('asis').value;
 
    $.ajax({
        type: "POST",
        url: "./ajax/nueva_asistencia.php",
        data: "id="+id+"&asis="+asis,
         beforeSend: function(objeto){
            $("#resultados_empleado").html("Mensaje: Cargando...");
          },
        success: function(datos){
            $("#resultados_empleado").html(datos);
            load(1);
        }
    });
}

////////////////////////////////////////// ACCION A REALIZAR/////////////////////////////////////
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
require_once ("../config/db.php");//Contiene las variables de configuracion para conectar a la base de datos
require_once ("../config/conexion.php");//Contiene funcion que conecta a la base de datos
// escaping, additionally removing everything that could be (html/javascript-) code
 
$date=date("Y-m-d");
 
$checkbox=$_POST['asis'];
 
foreach ($checkbox as $value) {
    $eliminar=mysql_query($con,"INSERT INTO asistencia (id_contrato,fecha,asistencia) VALUES ('$value','$date','1')");
    if($eliminar){
    $messages[] = "Asistiencia completa.";
    }else{
     $errors[] = "Lo sentimos , ya se tomo asistencia.".mysqli_error($con);
    }
}

espero su pronta ayuda !!!!!!!!!!!!!!!!!!!!!1111
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de javier
Val: 1.542
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

guardar múltiples registros con checkbox

Publicado por javier (547 intervenciones) el 11/06/2020 21:00:12
Hola,

será la función de java script la que no te envia las variables por post)

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ricardo
Val: 20
Ha disminuido su posición en 36 puestos en PHP (en relación al último mes)
Gráfica de PHP

guardar múltiples registros con checkbox

Publicado por Ricardo (12 intervenciones) el 11/06/2020 21:44:32
como verifico si no la esta enviando
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ricardo
Val: 20
Ha disminuido su posición en 36 puestos en PHP (en relación al último mes)
Gráfica de PHP

guardar múltiples registros con checkbox

Publicado por Ricardo (12 intervenciones) el 12/06/2020 03:59:43
ya vi solo toma el primer valor este o no seleccionado me podria ayudar con algo que verifique que solo se envien los checkbox activados
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

guardar múltiples registros con checkbox

Publicado por Andres (157 intervenciones) el 12/06/2020 21:38:39
Creo que la forma como obtienes los datos en el javascript es la que genera el error, puedes intentar lo siguiente:

Con la clase que tienes en el campo, y usando each de jquery, haces lo siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function agregar_asistencia (id)
{
    var asis='';
$.each($(".asis"),function(i, val){
if($(this).is(':checked')){
   asis=asis+$(this).val()."|";
}
});
 
    $.ajax({
        type: "POST",
        url: "./ajax/nueva_asistencia.php",
        data: "id="+id+"&asis="+asis,
         beforeSend: function(objeto){
            $("#resultados_empleado").html("Mensaje: Cargando...");
          },
        success: function(datos){
            $("#resultados_empleado").html(datos);
            load(1);
        }
    });
}

al recibir los datos en nueva_asistencia.php:

1
2
3
$checkbox=explode("|", $_POST["asis"]) ;
 
foreach ($checkbox as $value) {

Aquí se debe tener en cuenta que la ultima posición es vacía, entonces hay que obviarla. ya sea en el recorrido del array $explode o al recibir el dato.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Ricardo
Val: 20
Ha disminuido su posición en 36 puestos en PHP (en relación al último mes)
Gráfica de PHP

guardar múltiples registros con checkbox

Publicado por Ricardo (12 intervenciones) el 13/06/2020 15:48:58
Amigo encontré otro código que envía solo los seleccionados pero no se como recoger ese array ya que esta en un JSON
/////////////////////////////////// JS //////////////////////
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
function agregar_asistencia (id)
{
	var selected = [];
    $("input:checkbox:checked").each(function() {
      if (this.checked) {
        // agregas cada elemento.
        selected.push($(this).val());
      }
    });
    if (selected.length) {
 
      $.ajax({
        cache: false,
        type: 'post',
        dataType: 'json', // importante para que
        data: selected, // jQuery convierta el array a JSON
        url: './ajax/nueva_asistencia.php',
        beforeSend: function(objeto){
			$("#resultados_empleado").html("Mensaje: Cargando...");
		},
		success: function(datos){
			$("#resultados_empleado").html(datos);
			$('#guardar_datos').attr("disabled", false);
			load(1);
		}
      });
 
 		alert(JSON.stringify(selected)); /*solo para ver si esta enviando los datos*/
 
    } else{
    	alertify.notify('<h4><strong>Debes seleccionar al menos una opción.<strong></h4>',5);
    return false;
    }
}

espero su ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

guardar múltiples registros con checkbox

Publicado por Andrés (157 intervenciones) el 13/06/2020 17:20:40
Vale, es una forma similar a la que había comentado antes. Igual puedes obtener los datos en php con la función json_decode
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 28
Ha disminuido su posición en 6 puestos en PHP (en relación al último mes)
Gráfica de PHP

guardar múltiples registros con checkbox

Publicado por Ricardo (15 intervenciones) el 13/06/2020 17:34:04
Gracias amigo por tu ayuda a la final me decidi por no enviar con json por que me daba mucha complicaciones
a continuacion el codigo si alguien le sirva
/////////////////////////////////// JS ///////////////////////////////////////
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
function agregar_asistencia (id)
{
	var selected = [];
    $("input:checkbox:checked").each(function() {
      if (this.checked) {
        // agregas cada elemento.
        selected.push($(this).val());
      }
    });
    if (selected.length) {
 
      $.ajax({
        cache: false,
        type: 'post',
        data:{selected: selected} ,
        url: './ajax/nueva_asistencia.php',
        beforeSend: function(objeto){
			$("#resultados_empleado").html("Mensaje: Cargando...");
		},
		success: function(datos){
			$("#resultados_empleado").html(datos);
			$('#guardar_datos').attr("disabled", false);
			load(1);
		}
      });
 
    } else{
    	alertify.notify('<h4><strong>Debes seleccionar al menos una opción.<strong></h4>',5);
    return false;
    }
}


//////////////////////////////////// PHP que lo recibe (nueva_asistencia) ////////////////////////
1
2
3
4
5
6
7
8
9
foreach($_POST['selected'] as $id ){
 
    $sql_insert=mysqli_query($con,"INSERT INTO asistencia (id_contrato,fecha, asistencia) VALUES ('$id','$date','1')");
    if ($sql_insert){/*validar si se registro*/
        $messages[] = "empleados registrados satisfactoriamente.";
    } else{
        $errors []= "Algo ha salido mal intenta nuevamente.";
    }
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar