Foros del Web » Programando para Internet » PHP »

Como recojo conjunto de checks

Estas en el tema de Como recojo conjunto de checks en el foro de PHP en Foros del Web. Holas, tengo un form donde tengo un check por cada producto, uno puede seleccionar uno o varios checks, asi lo tenia en ASP la pagina ...
  #1 (permalink)  
Antiguo 02/07/2003, 10:01
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 10 meses
Puntos: 0
Pregunta Como recojo conjunto de checks

Holas, tengo un form donde tengo un check por cada producto, uno puede seleccionar uno o varios checks, asi lo tenia en ASP la pagina que recibe los datos de los checks:

************************************************** **
sql="UPDATE facturas SET estado='cancelado' WHERE id IN("&Request.Form("pago")&")"
************************************************** **

Como lo podria hacer en php, probe hacerlo asi pero no llegaba los valores del check, cuando pongo de esta forma si selecciono varios, solo recibe el ultimo que he seleccionado y no todos los q he marcado:
$sql="UPDATE facturas SET estado='cancelado' WHERE id IN(". $pago .")";

gracias de antemano.
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO

Última edición por pepelucho; 02/07/2003 a las 10:13
  #2 (permalink)  
Antiguo 02/07/2003, 13:01
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

Sencillo. Para comenzar, los nombres de los campos check de tu formulario deben ser:

<input type="checkbox" name="pago[]">

asi con todos.

Luego en tu PHP esos check llegan en un array llamado pago (asumo que el formulario es POST) y solo tienes que crear la cadena de los elementos del array separados por comas (facil usando implode() (www.php.net/implode):
Código PHP:
$pago_txt=implode(",",$_POST['pago']);
 
$sql="UPDATE facturas SET estado='cancelado' WHERE id IN("$pago_txt .")"
Saludos.

PD: Curiosa esta forma diferente de tratar los parametros con el mismo nombre.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 07/07/2003, 09:58
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 10 meses
Puntos: 0
Holas, a lo que me haz mandado, solo falta hacer una correccion:
en vez de poner esta linea: $pago_txt=implode(",",$_POST['pago']);
Se tiene que poner asi:
$pago = implode (",", $pago);

Eso es todo, para que funcione perfecto, Gracias por la ayuda!!!!
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #4 (permalink)  
Antiguo 07/07/2003, 10:09
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 10 meses
Puntos: 5
Mi distinguido pepelucho, esa forma de accesar a variables no es recomendable.

Lo mejor es hacerlo por medio de $_GET o $_POST para evitarte futuros problemas de incompatibilidad con servodores que tengan register_globals=off

Todo depende de si el metodo de tu formulario es "get" o "post"

Saludos!
__________________
Manoloweb
  #5 (permalink)  
Antiguo 07/07/2003, 10:18
 
Fecha de Ingreso: enero-2002
Ubicación: Callao - Perú
Mensajes: 1.127
Antigüedad: 22 años, 10 meses
Puntos: 0
Cuando pongo con el POST me sale error diciendo q el implode es una sentencia invalida,
__________________
SaLuDoS dE:
PePeLuChO dEl PeRú PaRa El MuNdO
  #6 (permalink)  
Antiguo 07/07/2003, 13:06
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 5 meses
Puntos: 16
Hola,

$_POST y demas existen a partir de la version 4.1 de PHP, asi que si tienes una anterior te fallara. Lo mismo que con tu metodo te fallara en todo servidor que tenga los register_globals a off. Una solucion intermedia es usar $HTTP_POST_VARS en lugar de $_POST.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 13:03.