Foros del Web » Programando para Internet » PHP »

Dudas sobre check box con php

Estas en el tema de Dudas sobre check box con php en el foro de PHP en Foros del Web. Hola temgo una duda respecto a check box con php, lo que hago es lo siguiente: envio ciertos datos por formulario a otra página, mi ...
  #1 (permalink)  
Antiguo 07/11/2003, 07:46
 
Fecha de Ingreso: noviembre-2003
Mensajes: 157
Antigüedad: 14 años, 1 mes
Puntos: 0
Pregunta Dudas sobre check box con php

Hola temgo una duda respecto a check box con php,
lo que hago es lo siguiente:
envio ciertos datos por formulario a otra página, mi idea es que esta otra página reciba los datos que serian por ejemplo mostrar todos los usuarios que son de Santiago, ok me los muestra, ahora desearia que estos resultados estuvieran en celdas de tablas con un check box con dos opciones "si" y "no", la cantidad de resultados puede ser veriable, ahhh estos resultados van dentro de un formulario que al final envio, mi duda es como haria para todos aquellos datos que el check box diga si los ingrese a la BD.

Lo que creo yo es que tendría que hacer un siglo if creo para que tome los valores "si" y los ingrese a la bd, pero estoy confundido respecto al código
  #2 (permalink)  
Antiguo 07/11/2003, 08:06
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Lee una de las últimas FAQ's de este foro PHP .. ahí tieens un ejemplo completo para gestionar "checkbox" de forma dinámica ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #3 (permalink)  
Antiguo 07/11/2003, 08:29
 
Fecha de Ingreso: noviembre-2003
Mensajes: 157
Antigüedad: 14 años, 1 mes
Puntos: 0
Vale gracias
  #4 (permalink)  
Antiguo 07/11/2003, 08:41
 
Fecha de Ingreso: noviembre-2003
Mensajes: 157
Antigüedad: 14 años, 1 mes
Puntos: 0
una ultima consulta he visto mencionado diversas vecez foreach(), en verdad no lo conozco que hace para que sirve es un bucle?
  #5 (permalink)  
Antiguo 07/11/2003, 08:52
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 15 años, 10 meses
Puntos: 6
bueno solo sé que foreach() es una estructura de control que interactua con matrices....funciona como un array. yo ando probandolo
__________________
www.dataautos.com
  #6 (permalink)  
Antiguo 07/11/2003, 10:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Foreach() vendría a equivaler a tu típico:

for() .. haciendo un count() para recorrer un array común .. Pero, el foreach() es ideal para recorrer arrays. Mientras que el "for" o cualquier otro tipo de bucle (estructura de control) es más "genérico".

Un ejemplo:

Código PHP:
$array=array("algo","otracosa","nose");
foreach(
$array as $valor){
   echo 
$valor."<br>";

Y biene muyyy bien cuando hay arrays asocitativos ..

Código PHP:
$array=array("algo"=>"nose","otracosa"=>"blabla","nose"=>"nosequeponer");
foreach(
$array as $indice=>$valor){
   echo 
$indice."=>".$valor."<br>";

Otro ejemplo ... los arrays superglobales tipo $_POST .. $_GET .. $_SESSION .. etc .. Son "asociativos" .. así que "capturar" toda variable que nos llega por algún método, ejemplo: $_POST .. es tan simple como:

Código PHP:
foreach($_POST as $indice=>$valor){
   echo 
$indice."=>".$valor."<br>";

(esto y poco más de lógica pordriamos tener un simple mail2form genérico)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 07/11/2003 a las 10:52
  #7 (permalink)  
Antiguo 07/11/2003, 13:24
 
Fecha de Ingreso: noviembre-2003
Mensajes: 157
Antigüedad: 14 años, 1 mes
Puntos: 0
estimado lei el faq que me dijiste y me quedaron dudas hice los siguientes codigos:
página que envia:
Código PHP:
<?php
$link
=mysql_connect("conexion");
            
mysql_select_db("bd",$link);
            
$string="select * from pagos where diocesis='$congrega' and semestre='$semestre' and ano='$ano'";
            
$respuesta=mysql_query($string,$link);
$fe=$fecha;
$sem=$semestre;
$a=$ano;
$cuo=$cuota;
$mon=$monto;
$tot=$total;
echo
"<form action='provando.php' method='post' name='pago'>\n";        
echo
"<table width='75%' border='1'>";
while(
$rows=mysql_fetch_array($respuesta)){
echo
"<tr>";
echo
"<td>"; echo $rows["nombre_alumno"]; 
echo
"</td>";
echo
"<td>Cancela</td>";
echo
"<td><input type=checkbox name=selecion[] value=$rows[numero_alumno]</td></tr>";
}
echo
"</table>";
echo
"<input name='f' type='hidden' value=$fe>";
echo
"<input name='se' type='hidden' value=$sem>";
echo
"<input name='year' type='hidden' value=$a>";
echo
"<input name='cu' type='hidden' value=$cuo>";
echo
"<input name='mo' type='hidden' value=$mon>";
echo
"<input name='to' type='hidden' value=$tot>";
echo
"<input type=submit name=enviar value=Cancelar>";
echo
"</form>";
 
?>

ahora la página que recibe:
<?php
$link
=mysql_connect("conexion");
mysql_select_db("db",$link);
echo 
$year;
$lista=implode(',',$_POST['seleccion']);
$string="Update pagos Set $cu='$f',$mo='$to' Where numero_alumno in(".$lista.") and semestre='$se' and ano='$year'";
$respuesta=mysql_query($string,$link);
} *
?>
Me provoca un error dice: "PARSE ERROR". en linea 38 que es la que tiene el *, que podrá estar fallando ?

Última edición por rogel; 08/11/2003 a las 09:20
  #8 (permalink)  
Antiguo 07/11/2003, 15:36
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues .. si la página que recibe .. solo contiene ese código .. como veras sobra ese } si no hay nada que lo abra (ejemplo un bucle, un "if" (conficional) etc ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 07/11/2003, 16:22
 
Fecha de Ingreso: noviembre-2003
Mensajes: 157
Antigüedad: 14 años, 1 mes
Puntos: 0
bueno ese es solamente el código php, borre ese tonto error que tenia y ahora me dice:
Warning: Bad arguments to implode() que mala!!
he probado de las dos formas que sale en el faq que me dijiste y nimguna me ha resultado he estado todo el dia y no me ha resultado auxilio por favor.
  #10 (permalink)  
Antiguo 07/11/2003, 23:29
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Si puedes colorear el código que posteas sería más fácil para nosotros.

Yo, de primera, lo que veo es que no se recibe bien la variable $_POST['seleccion']... y si el código está bien... entonces debe estar mal el nombre que le pusiste o el valor que le diste (en el form)...
Y... así es... te faltan las comillas en la línea del formulario donde defines el array seleccion
Código PHP:
echo"<td><input type=checkbox name=selecion[] value=$rows['numero_alumno']</td></tr>"
Así, si ves... numero_alumno debe ir entre comillas (simples o dobles.. da igual...)

Saludos:adios.
  #11 (permalink)  
Antiguo 08/11/2003, 09:21
 
Fecha de Ingreso: noviembre-2003
Mensajes: 157
Antigüedad: 14 años, 1 mes
Puntos: 0
vale ahora esta coloreado a ver si me pueden ayudar
  #12 (permalink)  
Antiguo 08/11/2003, 09:28
 
Fecha de Ingreso: noviembre-2003
Mensajes: 157
Antigüedad: 14 años, 1 mes
Puntos: 0
esta algo raro porque me dice que puse las comillas y todo y sigue diciendome bad arguments to implode
  #13 (permalink)  
Antiguo 08/11/2003, 09:37
 
Fecha de Ingreso: noviembre-2003
Mensajes: 157
Antigüedad: 14 años, 1 mes
Puntos: 0
si lo cambio por este codigo me dice que el argumento es invalido para el foreach()
Código PHP:
<p align="center[PHP]"><?php
               $link
=mysql_connect("conexion");
               
mysql_select_db("bd",$link);
               echo 
$year;
               foreach(
$_POST["seleccion"] as $numero_alumno){
               echo 
$numero_alumno;
               }
               
?>
[/PHP]

Última edición por rogel; 08/11/2003 a las 09:39
  #14 (permalink)  
Antiguo 08/11/2003, 10:31
 
Fecha de Ingreso: septiembre-2002
Mensajes: 122
Antigüedad: 15 años, 3 meses
Puntos: 0
Prueba asi...
<?php
$link=mysql_connect("conexion");
mysql_select_db("bd",$link);
echo $year;
while (list( ,$numero_alumno) = each($seleccion))
{
echo $numero_alumno;
}


?>

Última edición por Reyis; 08/11/2003 a las 10:33
  #15 (permalink)  
Antiguo 08/11/2003, 13:02
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
mira.. si te das cuenta, el parámetro que te da error utilizando implode() o foreach(), es el mismo para ambos casos. Se trata del $_POST['seleccion']... o sea que, como te dije antes... algo debe de estar mal definido en el formulario, en la línea donde aparece seleccion[]... Entonces centra tu atención en esa línea... El error que yo veía eran las comillas que te faltaban, pero si ya las pusiste y no funciona igual... entonces haz algo:
Añade un echo $_POST['seleccion'] para que puedas ver qué valor está recibiendo esa variable. Algo así:
Código PHP:
<?php
$link
=mysql_connect("conexion");
mysql_select_db("db",$link);
echo 
$year;

echo 
$_POST['seleccion'][0];

$lista=implode(',',$_POST['seleccion']);
$string="Update pagos Set $cu='$f',$mo='$to' Where numero_alumno in(".$lista.") and semestre='$se' and ano='$year'";
$respuesta=mysql_query($string,$link);
} *
?>
Saludos

Última edición por jpinedo; 08/11/2003 a las 13:15
  #16 (permalink)  
Antiguo 08/11/2003, 13:10
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Reyis... ese código que posteaste no es nada óptimo... ya para eso existe el bucle foreach... además hay que irnos acostumbrando a utilizar los arrays superglobales ( $_POST[] en este caso)... Ah.. por cierto, deberías recoger la variable $fecha así $_POST['fecha'] y así con todas las variables que provengan de formulario.
Otra cosa: asegúrate de que el campo de tu BD se llama exactamente 'numero_alumno'.
Saludos

Última edición por jpinedo; 08/11/2003 a las 17:03
  #17 (permalink)  
Antiguo 08/11/2003, 13:30
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Acabo de hacer una prueba y me da el error 'bad argument...' cuando no selecciono ninguna opción... o sea: el array $_POST['seleccion'][] no se crea... implode() y foreach() necesitan un array como parámetro válido... si no, no funciona... seguramente estás haciendo lo mismo... no estás seleccionando ninguna opción al hacer el submit... ¿o sí?...

Saludos
  #18 (permalink)  
Antiguo 08/11/2003, 13:41
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Para que no te dé ese error, tienes que preguntar si existe el array $_POST['seleccion']... si existe, ejecutas el código... si no, haces otra cosa... por ejemplo un mensaje. Puedes utilizar isset() o empty(). Algo así:
Código PHP:
if (!empty($_POST['seleccion'])){
    
$link=mysql_connect("conexion");
    
mysql_select_db("db",$link);
    echo 
$_POST['year'];
    
$lista=implode(',',$_POST['seleccion']);
    
$string="Update pagos Set ".$_POST['cu']."='".$_POST['f']."',".$_POST['mo']."='".$_POST['to']."' Where numero_alumno in(".$lista.") and semestre='".$_POST['se']."' and ano='".$_POST['year']."'";
    
$respuesta=mysql_query($string,$link);
}else{
    echo 
"No se ha seleccionado ningún registro";

Ahora ya no deberías tener esos errores.

Saludos

Última edición por jpinedo; 08/11/2003 a las 17:20
  #19 (permalink)  
Antiguo 10/11/2003, 08:20
 
Fecha de Ingreso: noviembre-2003
Mensajes: 157
Antigüedad: 14 años, 1 mes
Puntos: 0
La verdad que el código que funciono fue el de Reyis, ahora funciona sin problemas, jpinedo dijo que el codigo de reyis no es optimo porque?, y porque funciono en de reyis y los otros con foreach() no?, la verdad es que practicamente copie el código de Reyis y no me dedique a entenderlo mucho alguien podria decirme que esta haciendo?, les agradezco mucho su ayuda.
Gracias a todos. :)
  #20 (permalink)  
Antiguo 10/11/2003, 18:17
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
foreach es una estructura especialmente para arrays... pero ahora que leo en el manual veo que sólo funciona a partir de php 4. Tal vez no te funciona porque tienes una versión menor. Este es el link al manual:

http://www.php.net/manual/es/control...es.foreach.php

Lo que pone Reyis era justamente lo que se hacía antes de que existiera el foreach...

Bueno... no se me ocurre que pueda ser otra cosa... ya el código de Reyis hace exactamente lo mismo que el mío (o debería).

Utilizando list() creas una lista así por ejemplo list(yo, tu, el) ...similar a un array.

list( ,$var).. Si se combina con each($array)... dentro de un bucle como while... lo que hace es crear una lista para cada elemento del array y almacenarlo en la variable $var.

Más info en el manual:

http://www.php.net/manual/es/function.list.php

Saludos

Última edición por jpinedo; 10/11/2003 a las 18:24
  #21 (permalink)  
Antiguo 10/11/2003, 18:45
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Bueno... y ahora que leo bien... si dices que prácticamente hiciste un copy & paste con el código de Reyis... (y asumiendo que usas php 4.x.x)... lo que puede estar sucediendo es un error de Mysql, ya que yo llamo "db" lo que tú llamaste "bd" en el mysql_select_db()...

Es una buena práctica pedir a Mysql que te informe de los errores. Utiliza mysql_error().

Por favor, prueba esto:
Código PHP:
if (!empty($_POST['seleccion'])){
    
$link=mysql_connect("conexion") or die("Error en conexion ".mysql_error());
    
mysql_select_db("bd",$link) or die("Error en seleccion de BD ".mysql_error());
    echo 
$_POST['year'];
    
$lista=implode(',',$_POST['seleccion']);
    
$string="Update pagos Set ".$_POST['cu']."='".$_POST['f']."',".$_POST['mo']."='".$_POST['to']."' Where numero_alumno in(".$lista.") and semestre='".$_POST['se']."' and ano='".$_POST['year']."'";
    
$respuesta=mysql_query($string,$link);
}else{
    echo 
"No se ha seleccionado ningún registro";

Y avísame si te aparece algún mensaje de error.

Saludos

Última edición por jpinedo; 10/11/2003 a las 18:48
  #22 (permalink)  
Antiguo 12/11/2003, 08:55
 
Fecha de Ingreso: noviembre-2003
Mensajes: 157
Antigüedad: 14 años, 1 mes
Puntos: 0
realmente me da un error "que raro", lo unico que me dice es que no se ha selecionado nimgún registro siendo que hay registros seleccionados.
de paso te hago una pregunta al usar explode como puedo leerlo
ejemplo
Código PHP:
$pizza=" trozo1 trozo2 trozo3";
$trozos=implode(" ",$pizza);
echo 
$trozos
me muestra solamente "array" yo quiero imprimir los trozos usando el explode como lo hago?
  #23 (permalink)  
Antiguo 12/11/2003, 22:52
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Lo del implode y el explode puedes verlo en el manual:

http://www.php.net/manual/es/function.implode.php

http://www.php.net/manual/es/function.explode.php

La función implode recibe un array, concatena sus elementos y devuelve eso, una cadena.
Explode recibe una cadena y va buscando el caracter que pasaste como primer parámetro... cuando encuentra uno, corta la cadena ahí y lo almacena en un elemento de array.. y así...

//Si tienes:
$pizza=" trozo1 trozo2 trozo3";

//y haces
$trozos=explode(" ",$pizza);

//Obtienes
$trozos[0]="trozo1";
$trozos[1]="trozo2";
$trozos[2]="trozo3";

Ahora... si tienes más dudas con esas funciones.. por favor postéalo como un tema aparte (nuevo)... para mantener el hilo de este tema...

Saludos
  #24 (permalink)  
Antiguo 14/11/2003, 04:59
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Estuve viendo eso de que "no se seleccionó ningún registro"... probé tu código y me salía lo mismo... o sea que no llegaba el $_POST['seleccion']... después de un buen rato de buscar y buscar... me encontré que en el formulario el campo se llama "selecion[]" (así, con una sola "c")... una vez que cambié el nombre del campo, pasó bien el array... Por eso te daba que no era un argumento válido para "foreach" ni para "implode", pues estos necesitan un array y tu les pasabas una variable no definida (porque $_POST['seleccion']... no existía.)... prueba esos cambios.

Otra cosa... creo que debes empezar a optimizar tu código.. no sólo en rendimiento, sino en claridad... también proyéctate al uso de register_globals=OFF... o sea, utiliza los arrays superglobales ($_POST, $_GET, $_SESSION, etc, etc). Por ejemplo, no sé de dónde vendrán todas esas variables del comienzo ($fecha, $semestre, $ano, etc...) pero si vienen de un formulario, utiliza mejor $_POST['fecha'], $_POST['semestre'], etc, etc...

Otra buena práctica es poner la sentencia sql en una variable antes del _query() ...así:
$sql="SELECT * FROM tabla";
$result=mysql_query($sql);

Esto te permite hacer un (echo $sql;) para verificar que se ha escrito correctamente.

Nada más por ahora... por favor verifica lo del nombre del campo que te dije... Y si puedes, postea el código final que utilizas. También indica de dónde vienen las variables del comienzo...

Saludos
  #25 (permalink)  
Antiguo 14/11/2003, 08:04
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 15 años, 10 meses
Puntos: 6
Bueno yo estaba en el mismo problemas y como ma ayudaron a resolverlo fue de esta forma, con implode:
Código PHP:
//ELIMINAMOS ID DE LA RESPECTIVA TABLA
if(isset($_POST['Borrar']))
   {
        
mysql_select_db("prueba");
        
$array =implode(','$_POST['eliminar']);
        
mysql_query("DELETE FROM ".$_POST['tablas']." WHERE ID IN (".$array.")") or die("MySQL dice: ".mysql_error());
         }
?> 
donde el nombre del check box seria :
Código PHP:
<input type="checkbox\" name=\"eliminar[]\" value=\"".$row['ID']."\"> 
bueno asi ya ando eliminando varios registros a la vez..
copyright de : los friends del foro
Saludos
__________________
www.dataautos.com
  #26 (permalink)  
Antiguo 15/11/2003, 22:56
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Claro asinox... pero eso ya estaba resuelto. Si leíste el tema completo (desde el comienzo), te darás cuenta de que lo que estás proponiemdo... ya se está haciendo...

El problema era que por alguna razón no se podía utilizar el implode ni el foreach.... entonces descubrimos no estaba llegando la variable $_POST['seleccion']... ESE es el problema... yo lo probé e hice mi propuesta... falta enterarno de qué pasó y eso sólo lo puede responder rogel.

Saludos
  #27 (permalink)  
Antiguo 17/11/2003, 12:54
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 15 años, 10 meses
Puntos: 6
oks
__________________
www.dataautos.com
  #28 (permalink)  
Antiguo 19/11/2003, 09:20
 
Fecha de Ingreso: noviembre-2003
Mensajes: 157
Antigüedad: 14 años, 1 mes
Puntos: 0
amigos les cuento que he perdido todo el trabajo que tenia hecho asi que tendré que empezar nuevamente y pronto llegare a esta parte de nuevo asi que cualquier duda les volcere a preguntar!!!! :)
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 10:46.