Foros del Web » Programando para Internet » PHP »

Duda grande de checkbox

Estas en el tema de Duda grande de checkbox en el foro de PHP en Foros del Web. Hola a todos, y gracias por leerme. Tengo un reto: Tengo una lista con datos de un sql que muestro de 10 en 10 (un ...
  #1 (permalink)  
Antiguo 07/04/2008, 04:09
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Duda grande de checkbox

Hola a todos, y gracias por leerme. Tengo un reto:

Tengo una lista con datos de un sql que muestro de 10 en 10 (un script que pagina con while). Y constan de fecha, título,... además de tres elementos comunes: un botón de borrar, uno de modificar y un checkbox para marcar los mensajes. Lo de borrar y modificar ha sido más o menos fácil. El problema viene con el checkbox. Lo que quiero es que al enviar el formulario me recoja todos los registros del sql en los que he marcado el checkbox.

No sé ni siquiera si es posible. El campo se llama nius y si marco alguno recibo on y si no no recibo nada. Aunque marque 5 sólo me sale un on. La pregunta:

¿Puedo hacer que el on de casilla marcada en el formulario venga asociada al id?

Con un echo $_POST['id'] y $_POST['nius'] hacer lo siguiente:

20 - on
21 -
22 - on
23- on

Algo como lo de arriba. Ni siquiera sé si la pregunta es coherente.

Gracias
__________________
Chanante!
  #2 (permalink)  
Antiguo 07/04/2008, 05:15
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Re: Duda grande de checkbox

Hola,

Échale un vistazo a este código.

Ya sería adaptarlo a tu paginador y a lo que se recoje de tu base de datos...

Código PHP:
<form action="numeros.php" method="post">
<?
for($l=1;$l<11;$l++){?>
<tt>&nbsp;seleccionar <?=( ( ( $l<10 ) ? "&nbsp;" "").$l)?>&nbsp;</tt><input type="checkbox" name="chk_<?=$l?><?=( ($_POST['chk_'.$l])? " checked" "")?>"><br>
<?
print "\n";
}
?>
<br>
<input type="submit" name="Enviar">

</form>
<?
if($_POST['Enviar'])
{
    for(
$l=1;$l<11;$l++)
    {
        print 
"<tt>&nbsp;".( ( ( $l<10 ) ? "&nbsp;" "").$l)." ".(($_POST['chk_'.$l]=='on') ? "on" "off")."</tt><br>";
    }
}
?>
Tb se puede hacer poniendo nombres de array en los name de los checkbox.

El código está un poco adornado para que se vean bien los resultados, hay cosas que no son necesarias...

Un saludo.
__________________
[+]
[+]

Última edición por yoseman; 07/04/2008 a las 05:24
  #3 (permalink)  
Antiguo 07/04/2008, 05:36
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Re: Duda grande de checkbox

Muchas gracias! la verdad de momento me parece espeso, pero me pongo a ver que puedo hacer con ello, si no lo leo 23 veces no entiendo nada... ya te diré cosas.

Un saludo
__________________
Chanante!
  #4 (permalink)  
Antiguo 07/04/2008, 06:03
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Re: Duda grande de checkbox

Básicamente lo importante está en la parte de

Código PHP:
if($_POST['Enviar'])
    for(
$l=1;$l<11;$l++)
        print 
$l.(($_POST['chk_'.$l]=='on') ? "on" "off"); 
digamos que compruebas para cada índice de $_POST ['chk_1'] ['chk_2'] .. ['chk_l'] si su valor es on...

Y luego en el formulario en los name de los checkbox tb usas un for para dar nombres de tipo chk_1,chk_2,chk_3,chk_4,...

Poco más...

Tb podrías hacer esto:
Código PHP:
if($_POST['Enviar'])
    foreach(
$_POST as $key=>$value)
        if (
ereg("chk_",$key))
            print 
$key."->".$value."<br>"
Pero entonces sólo te devuelve los que están en 'on', porque en realidad los que están en 'off' no se envian.

Pero básicamente es poner nombres con un número a los checkboxes y luego leer los datos con un bucle(del tipo que sea)

Un saludo...
__________________
[+]
[+]
  #5 (permalink)  
Antiguo 07/04/2008, 06:12
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Re: Duda grande de checkbox

Vale! Ya salen las dudas, entiendo el código y veo que debería haber envíado el mío, ya que no uso una condicional/bucle sin no una consulta sql.
Con esto le doy la paginación, en el que $tamPag; siempre es cinco (el valor que le he doy), $limitinfo son múltiplo de cinco empezando por 0 (0, 5, 10,...)


Código PHP:
<?
$sql
="select * from palau ".$criterio." order by id desc limit ".$limitInf.",".$tamPag;
$res=mysql_query($sql);
while(
$registro=mysql_fetch_array($res)) 
{      
?>
Añadir <input type="checkbox" name="nius_<? echo $registro["id"]; ?>">
<?php };?>

Pongo sólo este código a ver si voy bien.

Ahora viene la muy mala noticia, es que no entiendo bien las líneas importantes, no se de dónde sale el ($_POST['Enviar']) ni la función del interrogante, ... siento ser tan lerdo.
__________________
Chanante!
  #6 (permalink)  
Antiguo 07/04/2008, 06:29
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Re: Duda grande de checkbox

El $_POST['Enviar'] lo he utilizado en el script para que entre sólo cuando se hace submit, es el nombre del botón de submit.

Pero eso no te hace falta, sólo tienes que poner el código en la parte que lee los resultado enviados de tu formulario...

No chico, no es cuestión de ser lerdo, es que tengo la manía de utilizar la estructura simplificada del if dentro de los print y mucha gente no la conoce o se lia y al final no la usa.

es esto:

Código PHP:
if($_POST['Enviar'])
    for(
$l=1;$l<11;$l++)
    {
        print 
$l;
        if(
$_POST['chk_'.$l]=='on')
            print 
"on" ;
        else 
            print 
"off";
        print 
"<br>";
    } 
Pero bueno que los print era para que vieras el resultado, lo importante es la condición que se ha de cumplir, luego ya tu actuas según tu script...

Un saludo...
__________________
[+]
[+]
  #7 (permalink)  
Antiguo 07/04/2008, 07:26
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Re: Duda grande de checkbox

Gracias lo probaré!, la verdad es que me siento bastante torpe, voy aprendiendo pero la verdad es que estudié diseño gráfico y no programación y por cada cosa que aprendo descubro 25 que me falta por aprender, en fin. Ya diré cosa.

Un saludo!
__________________
Chanante!
  #8 (permalink)  
Antiguo 07/04/2008, 08:43
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Re: Duda grande de checkbox

El código me queda claro de la segunda manera, pero no sé adpatarlo excepto como lo he enviado ya:

Código PHP:
$sql="select * from palau ".$criterio." order by id desc limit ".$limitInf.",".$tamPag;
$res=mysql_query($sql);     
while($registro=mysql_fetch_array($res)) 

?> 
Añadir a newsletter <input type="checkbox" name="nius_<? echo $registro["id"]; ?>">

<? 
}
Esto envía nius_id al php. Dos problemas:

1-No sé como usar un for para darle el on/off teniendo en cuenta los valores de $limitInf y $tamPag. El la primera página (0,5), en la segunda (5,5), la tercera (10,5),... ya que $limitInf no depende de un for sino del limit del sql.

2-Aún enviando los datos (que los envía) no sabría como recibirlos con más de un resultado.

Estoy verde, muy verde.

Un saludo
__________________
Chanante!
  #9 (permalink)  
Antiguo 07/04/2008, 09:55
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Re: Duda grande de checkbox

Vamos a ver una cosa...

Qué información necesitas que se envie exactamente a la página que recibe el formulario...?

Quiero decir, lo que tengas que hacer si se pincha en un checkbox que es...

con esto sólo estás mandando el id de la tabla.

necesitas algo más para lo que tengas que hacer...?



Un saludo...
__________________
[+]
[+]
  #10 (permalink)  
Antiguo 07/04/2008, 11:02
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Re: Duda grande de checkbox

Lo siento ya sé que es confuso, pero más o menos va saliendo:

Añadir a newsletter <input type="checkbox" name="nius_<? echo $registro["id"]; ?>">

Esto lo que viene a hacer es que cada checkbox tiene un nombre: nius_id de la página para saber cuales reciben los datos de on y cuales no.

La idea me la has dado tú, puesto que como uso while le paso el id del sql y no una variable de un for. Eso ya está bien.

Justo ahora me salía recibirlas usando tu idea de usar un for (he vuelto a usar el while):

$sql="select * from palau ".$criterio." order by id desc limit ".$lim.",".$pag;
$res=mysql_query($sql);
while($registro=mysql_fetch_array($res))
{
//$nius=$_POST["nius_"+$registro["id"]];
$nius=$registro["id"];
echo $_POST["nius_".$nius];
echo "<br>";
}

Lo que no me ha ido ha sido lo on y off (sólo me devuelve los on), aunque supongo que dentro del while podré meter la función que me has pasado de si no es on que me dé el valor off por defecto.

Ya sé que soy un coñazo...

Un saludo
__________________
Chanante!
  #11 (permalink)  
Antiguo 07/04/2008, 11:23
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 4 meses
Puntos: 5
Re: Duda grande de checkbox

A ver si esto te sirve:


Esto es para generar los checkboxes:
Código PHP:
$sql="select * from palau ".$criterio." order by id desc limit ".$limitInf.",".$tamPag;
$res=mysql_query($sql);     
$cont=1;
while(
$registro=mysql_fetch_array($res)) 

echo 
'<input type="checkbox" name="nius_'$cont.'" value="'.$registro["id"].'">';
$cont++:
}  
echo 
'<input type="hidden" name="max" value="'.$cont.'">'

Esto para leer:
Código PHP:
for($l=1;$l<$_POST['max'];$l++)
{
    if(
array_key_exists('nius_'.$l,$_POST))
        print 
"El boton ".$l." fue seleccionado y su valor es".$_POST['nius_'.$l];
    else
        print 
"El boton ".$l." no fue seleccionado";

Supongo que no necesitas saber el id de los checkboxes que no han sido seleccionados

Si no, no te queda otrq que pasar de alguna forma todos los valores de los checkboxes, o bien por POST en un campo tipo hidden, o ya usando sesiones.

Pero esto de momento te debe de funcionar.

Voy a dejar un ejemplo por si acaso lo necesitas:

Código PHP:
$sql="select * from palau ".$criterio." order by id desc limit ".$limitInf.",".$tamPag;
$res=mysql_query($sql);     
$cont=1;
$cadena="";
while(
$registro=mysql_fetch_array($res)) 

echo 
'<input type="checkbox" name="nius_'$cont.'">';
$cadena.=$registro["id"]."_";
$cont++:
}  

$cadena=substr($cadena,0,(strlen($cadena)-1));
echo 
'<input type="hidden" name="max" value="'.$cont.'">';
echo 
'<input type="hidden" name="valores" value="'.$cadena.'">'

Código PHP:
$valor=explode("_",$_POST['valores']);

for(
$l=1;$l<$_POST['max'];$l++)
{
    if(
array_key_exists('nius_'.$l,$_POST))
        print 
"El boton ".$l." fue seleccionado y su valor es".$valor[$l-1];
    else
        print 
"El boton ".$l." no fue seleccionado y su valor es".$valor[$l-1];

La diferencia entre estos dos pares de código es que el primero no te devolvería los ids de los checkboxes no seleccionados y el segundo si...

Un saludo...
__________________
[+]
[+]

Última edición por yoseman; 07/04/2008 a las 12:04
  #12 (permalink)  
Antiguo 07/04/2008, 12:44
Avatar de sirguy  
Fecha de Ingreso: septiembre-2006
Ubicación: Mallorca
Mensajes: 959
Antigüedad: 17 años, 7 meses
Puntos: 12
Re: Duda grande de checkbox

Guau! vaya currazo, muchas gracias!. Ahora ya se me acaba lo de currar pero mañana a primera hora te digo cosas!, si con la cantidad de dudas que llevo parece mentira que aún no lo saque.

Un saludo
__________________
Chanante!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:25.