PHP - Enviar datos de multiple checkbox a base de datos

 
Vista:
sin imagen de perfil

Enviar datos de multiple checkbox a base de datos

Publicado por jesus (11 intervenciones) el 06/03/2020 19:31:38
Buenas tardes,
Me gustaría podes enviar datos multiples de un checkbox que tengo en un HTML a la base de datos.
Mi código es el siguiente:

-------En el HTML-----------
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
<form id="frmnuevo">
 
    <label>Nombre</label>
    <select class="form-control input-sm" id="nombre" name="nombre">
    <option value="0">Selecciona una opcion</option>
    <option value="Bloque 1">Bloque 1</option>
    <option value="Bloque 2">Bloque 2</option>
    <option value="Bloque 3">Bloque 3</option>
    <option value="Bloque 4">Bloque 4</option>
    </select>
 
    <label>Año</label>
    <div  class="modal-content2"
    id="anio"></div>
 
 
    <label>Empresa</label>
    <input type="text" class="form-control input-sm" id="empresa" name="empresa">
    <label>Calificación</label>
 
    <form action="index.php" method="post">
            <label class="heading">Fallos</label>
            <div class="checkbox">
<label><input type="checkbox" name="calificaciones[]" value="Sin Fallos">Sin Fallos</label>
<label><input type="checkbox" name="calificaciones[]" value="Suelo">Suelo</label>
<label><input type="checkbox" name="calificaciones[]" value="Cama">Cama</label>
            </div>
 
</form>


----------------------------
con un botón llamo a al siguiente php
---------------------------

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
<?php
require_once "../clases/conexion.php";
require_once "../clases/crud.php";
$obj= new crud();
 
 
$calificacion=$_POST["calificaciones"];
 
 
for ($i=0;$i<count($calificacion);$i++)
   {
   echo "<br> calificaciones" . $i . ": " . $calificacion[$i];
 
   }
 
$datos=array(
    $_POST['nombre'],
    $_POST['anio'],
    $_POST['empresa'],
    $_POST['calificacion']
            );
echo $obj->agregar($datos);
 
 
?>

----------------------------------------
Finalmente intento enviarlo a la base de datos con este php
----------------------------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
 
class crud{
    public function agregar($datos){
        $obj= new conectar();
        $conexion=$obj->conexion();
 
        $sql="INSERT into t_juegos (nombre,anio,empresa,calificacion)
                                values ('$datos[0]',
                                        '$datos[1]',
                                        '$datos[2]',
                                        '$datos[3]')";
        return mysqli_query($conexion,$sql);
    }
?>

-------------------------------------------------
Tengo la conexión creada y no me da problemas. Los demás campos los envía correctamente, incluso si a un checkbox le pongo directamente sin corchetes

1
<label><input type="checkbox" name="calificacion" value="Sin Fallos">Sin Fallos</label>

me guarda el valor que tenga dicho checkbox

Si les pongo los corchetes a todos, llamándolos calificacion[], me inserta array.

No se que más intentar.

Muchas gracias de antemano.

PD. Soy novato ;)
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Enviar datos de multiple checkbox a base de datos

Publicado por Julio (830 intervenciones) el 06/03/2020 22:38:38
Hola.

Te inserta array porque calificacion[] es un array, es decir, $_POST[calificaciones] será un array y $datos[3] será un array y es lo que estás intentando insertar en la base de datos, lo que no es correcto.

Voy a suponer que, en la base de datos, calificacion es de tipo texto. Cuando vayas a insertar puedes hacer esto:

1
implode(',', $datos[3])

Esto hará que el array se transforme en un string separado por comas.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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

Enviar datos de multiple checkbox a base de datos

Publicado por jesus (11 intervenciones) el 07/03/2020 01:50:52
Gracias por tu respuesta Julio... pero no consigo hacerlo funcionar :(

Recojo los datos en el HTML con:

1
<label><input type="checkbox" name="calificacion[]" value="Sin Fallos">Sin Fallos</label>

Se que es un array porque lleva [] y si no lo fuera, no podría coger varias opciones ¿No?
----------------------
Con el botón llamo a agregar que tiene esto, ¿Lo tengo que convertir antes de este paso?¿Puede seguir llamándose igual (calififacion)?
---------------
1
2
3
4
5
6
7
8
9
10
11
12
<?php
	require_once "../clases/conexion.php";
	require_once "../clases/crud.php";
	$obj= new crud();
	$datos=array(
		$_POST['nombre'],
		$_POST['anio'],
		$_POST['empresa'],
		$_POST['calificacion']
				);
	echo $obj->agregar($datos);
 ?>
--------------
Finalmente lo envio con esto ¿En estu último paso tengo que sustituir '$datos[3]')"; por implode(',', $datos[3]) ? Me sigue dando error.
--------------
1
2
3
4
5
6
7
8
9
10
11
class crud{
    public function agregar($datos){
        $obj= new conectar();
        $conexion=$obj->conexion();
        $sql="INSERT into t_juegos (nombre,anio,empresa,calificacion)
                                values ('$datos[0]',
                                        '$datos[1]',
                                        '$datos[2]',
                                        '$datos[3]')";
        return mysqli_query($conexion,$sql);
    }
--------------

Muchas gracias por tu respuesta.
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 Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Enviar datos de multiple checkbox a base de datos

Publicado por Julio (830 intervenciones) el 07/03/2020 08:49:29
Haz un var_dump a $_POST['calificacion'] y verás lo que realmente hay en ese array, que ahora mismo no recuerdo muy bien si vas a tener un array con elementos 'on'.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
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 Kathyu
Val: 1.802
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Enviar datos de multiple checkbox a base de datos

Publicado por Kathyu (905 intervenciones) el 07/03/2020 13:29:09
Que le arroja algo como esto?

1
2
3
4
foreach($_POST['calificacion'] as $i)
{
echo "<br>". $i;
}
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

Enviar datos de multiple checkbox a base de datos

Publicado por jesus (11 intervenciones) el 07/03/2020 15:20:39
Buenas tardes,

Gracias por vuestras respuestas, gracias a ellas e investigando un poco ya conseguí hacerlo.

Solo cambié la función de agregar, puse lo siguiente:
-----------------------
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
	require_once "../clases/conexion.php";
	require_once "../clases/crud.php";
	$obj= new crud();
 
 
 
	$datos=array(
		$_POST['nombre'],
		$_POST['anio'],
		$_POST['empresa'],
				);
 
		$calificaciones=$_REQUEST["calificaciones"];
		$calificacion=implode(",",$calificaciones);
		$datos[3] = $calificacion;
 
	echo $obj->agregar($datos);
 ?>
------------------
el problema es que yo estaba enviando con $_POST['calificaciones'] antes de transformar el array con implode (como bien me indicó Julio)

Lo que he hecho es nombrar a las variables de los checbox "calificaciones[]" y lo transformo en el string "calificacion" le digo que es datos[3], porque sería el siguiente de los $_POST y ya lo tengo listo para enviar a mi base de datos.

En el siguiente link hay un video explicativo de donde lo he sacado


Un saludo y gracias por la 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