PHP - Capturar Checkbox y guardarlos en un mismo campo de la base de datos?

   
Vista:
Imágen de perfil de Jesus Alberto

Capturar Checkbox y guardarlos en un mismo campo de la base de datos?

Publicado por Jesus Alberto (29 intervenciones) el 18/10/2013 03:24:50
Hola. Tengo este form.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<form method="POST" action="procUsuario.php" enctype="multipart/form-data">
<div>
		<label for="pers_contacto">Permisos</label>
		<table>
			<tr>
				<td><input type="checkbox" name="permisos[]" value="Permiso1"/>Permiso1</td>
				<td><input type="checkbox" name="permisos[]" value="Permiso2"/>Permiso2</td>
			</tr>
			<tr>
				<td><input type="checkbox" name="permisos[]" value="Permiso3"/>Permiso3</td>
				<td><input type="checkbox" name="permisos[]" value="Permiso4"/>Permiso4</td>
			</tr>
		</table>
	</div>
<div>
</form>

El problema está en que quiero guardar los permisos seleccionados en un SOLO CAMPO EN LA BASE DE DATOS.

Tengo esto en mi procUsuario.php
1
2
3
foreach ($_POST['permisos'] as $id){
   		echo $id."|";
	}
Como puedes ver, sí me imprime todos los values de los permisos seleccionados, pero quiero guardar en el campo de la base de datos esos campos. Por ejemplo, selecciono permiso2 y permiso 4, quiero que en el campo me los guarde así "permiso2|permiso4".

Si en vez de echo pongo una variable que guarde en ese momento pues cada vez que entre en el for la variable tomará otro valor. Se me ocurrió $variable+= $id."|"
Pero no funciona xD

Alguien sabe cómo puedo hacerlo? Gracias!!!

Y pues de una vez aprovecho para pedirles algo. Cuando tenga permiso1|permiso2|permiso4
Con qué función puedo separar esa cadena de caracteres para poder separar en una variable a permiso1, en otra a permiso2 y en otra a permiso4. Tengo la idea de usar el "|" como delimitador, pero no sé la función.

Muchas gracias!
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 xve

Concatenar en PHP

Publicado por xve (5516 intervenciones) el 18/10/2013 10:02:09
Hola Jesus, para concatenar en PHP, se utiliza el punto(.)

1
2
$var="hol";
$var.="a";
$var tiene el valor: "hola"

También puedes utilizar:
1
2
$var="hol";
$var=$var+"a";
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 Jesus Alberto

Concatenar en PHP

Publicado por Jesus Alberto (29 intervenciones) el 21/10/2013 19:42:40
Ya lo había intentado así y por alguna razón no me salía xD Con el +
No sabía que se concatenaba con punto, si sabía pues, pero no recordaba xD

Te lo agradezco muchísimo!
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

Capturar Checkbox y guardarlos en un mismo campo de la base de datos?

Publicado por Jesus Gabriel Vazquez info@sectornetcancun.com (12 intervenciones) el 18/10/2013 16:58:08
hola Tocayo,
lo que yo hago es lo siguiente

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$cadena = '';
	foreach ($_GET['permisos'] as $id){
		$s = '|';
		if($cadena == ''){
			$cadena =$id;
		}else{
			$cadena .= $s.$id;
		}
	}
	echo $cadena;
 
	/* esto es para separar la cadena */
	$cadena2 = explode('|', $cadena);
 
	echo '<br><br>imprimo el valor 0 de mi array '.$cadena2[0];

que es lo que hago primero declaro una variable vacia (puedes o no declarar pero para mi comodidad yol o hago)

inicias tu foreach

declaras una variable con el separador

y entonces preguntas si tu cadena esta vacia, si esta vacia metes una vez el permiso sin el separador (porque hago esto? porque la primera vez que entre al ciclo estara vacio y le meto el primer valor que tenga asi si escogen uno nada mas se mete el unico permiso sin coma)

entonces sucede que la segunda vez que entre al ciclo ya no estara vacia la cadena y meto el o los siguientes permiso con el separador y listo


yo imprimi la cadena para que veas que se arma, pero tu puedes ya guardar la cadena en tu campo

y ya luego que la tengas guardada lo que puedes hacer para separarlos es usar la funcion explode que recibe como parametros primero el delimitador que en tu caso seria " | " y despues lo que vas a separar, te aclaro que convierte en un array la cadena.

seria todo, espero te sirva

saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jesus Alberto

Capturar Checkbox y guardarlos en un mismo campo de la base de datos?

Publicado por Jesus Alberto (29 intervenciones) el 21/10/2013 19:44:53
Vaya respuesta! Muy completa!! Te lo agradezco muchísimo!
Estoy para lo que se te ofrezca como favor.

Muchas gracias Tocayo!
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

Capturar Checkbox y guardarlos en un mismo campo de la base de datos?

Publicado por Pedro Infante (8 intervenciones) el 15/06/2016 19:09:39
esa es !!!
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

Capturar Checkbox y guardarlos en un mismo campo de la base de datos?

Publicado por Jose (1 intervención) el 18/10/2013 17:51:03
Hola como solución al problema te ha respondido Jesús. Yo sólo quiero sugerirte que te replantees el diseño de la base de datos. Si creas una tabla "permisos-usuario" que tenga una relación "1 a muchos" es posible que te sea más cómodo trabajar con esos permisos y sobretodo ganarás en escalabilidad. Por ejemplo:
usuarios <-- permisos-usuario --> permisos

"SELECT id_permiso FROM permisos_usuario WHERE id_usuario = ?"
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Jesus Alberto

Capturar Checkbox y guardarlos en un mismo campo de la base de datos?

Publicado por Jesus Alberto (29 intervenciones) el 21/10/2013 19:49:57
Muchísimas gracias por lo que sugieres, te prometo aplicarlo al proyecto, me hará las cosas más fáciles según veo. Muchas gracias!
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

Capturar Checkbox y guardarlos en un mismo campo de la base de datos?

Publicado por Elier (92 intervenciones) el 22/10/2013 16:00:38
Otra solucion a este problema se le puede dar usando operadores a nivel de bit de manera que en un campo entero puedas almacenar 8, 16, 32, 64 segun la cantidad de bits que tenga el entero.

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
<?php
$values = array(0, 1, 2, 4, 8, 16, 32, 64, 128);
$cantidad = 8;
$action_page = $_SERVER['PHP_SELF'];
$permisos = 0;
if(isset($_POST['submit']))
{
    foreach ($_POST['permisos'] as $permiso) {
        echo $permiso." ".$values[$permiso]."<br>";
 
		$permisos = $permisos | $values[$permiso];
    }
 
	echo "Representacion binaria: ".decbin($permisos)." Valor:".$permisos."<br>";
 
	for ($i=1; $i <= $cantidad ; $i++) {
		echo "Permiso$i:";
		$activado = $permisos & $values[$i];
		if ($activado)
		{
			echo "Activado";
		}
		echo "<br>";
	}
 
}
 
// Devolver formulario vacio
else
{
echo "<form action=\"$action_page\" method=\"post\">";
for ($i=1; $i <= $cantidad; $i++)
	{
		echo "<input type=\"checkbox\" name=\"permisos[]\" value=\"$i\"]>"."Permiso$i"."<br>";
	}
	echo "<input type=\"submit\" name=\"submit\" value=\"Enviar\">";
	echo "</form>";
}
 
?>
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 Jesus Alberto

Capturar Checkbox y guardarlos en un mismo campo de la base de datos?

Publicado por Jesus Alberto (29 intervenciones) el 22/10/2013 16:06:12
Perfecto! Veré que forma me es más útil. Gracias!
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

Capturar Checkbox y guardarlos en un mismo campo de la base de datos?

Publicado por graham (1 intervención) el 17/05/2014 06:31:33
que tal una pregunta me sucedio algro extraño aplique la primera forma la de concatenacion y me funciono en windows xq en este SO desarrolle el sitio y ahora lo pase a Ubuntu y resulta que no me funcionan no pasa ni siquiera la variable por el metodo POST ese decir tengo mi atributo name = "carrera[]" de esta manera declarado en los cheks que deseo concatenar y a la hora de recibirlos con post no recibo nada viene vacio el arreglo, en cambio si el name lo dejo de la siguiente forma name = "carrera" si me envia pero obviamente solo el ultimo valor. Alguna idea? del por que si el que esta mal desarrolllado es windows no ubuntu jjajajaja o que podria hacer

Les dejo mi codigo de html
1
2
3
4
<input type="checkbox" name="carrera[]" id="Ing_SW" value="Ing. Software"/>Ing. en Software
<input type="checkbox" name="carrera[]" id="Ing_PL" value="Ing. Plasticos"/>Ing. en Plasticos
<input type="checkbox" name="carrera[]" id="Ing_PI" value="Ing. Produccion Industrial"/>Ing. en Produccion Industrial<br>
<input type="checkbox" name="carrera[]" id="Lic_SC" value="Lic. Seguridad Ciudadana"/>Lic. Seguridad Ciudadana<br>

Codigo php

1
2
3
4
5
6
7
8
9
10
$carrera = '';
foreach ($_POST['carrera'] as $id){
	$s = ', ';
	if($carrera == ''){
		$carrera =$id;
	}else{
		$carrera .= $s.$id;
	}
}
echo $carrera;
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

Capturar Checkbox y guardarlos en un mismo campo de la base de datos?

Publicado por Pedro Infante (8 intervenciones) el 15/06/2016 19:11:48
usar $_REQUEST
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