Foros del Web » Programando para Internet » ASP Clásico »

Problemas con Checkbox

Estas en el tema de Problemas con Checkbox en el foro de ASP Clásico en Foros del Web. Me han mandado poner unos checkbox por si el usuario desea recibir información adicional sobre algunos temas, el usuario deberia marcar los que le interesan. ...
  #1 (permalink)  
Antiguo 25/04/2007, 06:39
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Problemas con Checkbox

Me han mandado poner unos checkbox por si el usuario desea recibir información adicional sobre algunos temas, el usuario deberia marcar los que le interesan.
Pero resulta que no sé utilizarlos y no encuentro ejemplos que entienda o que me puedan servir.

Mi tabla usuarios tiene los campos de las opciones que tengo como user_comics, user_conciertos etc en el cual su valor va a ser boolean Si/No.

Los he incluido en el formulario de esta manera:

Código:
<input type="checkbox" name="chkcomics" value="Si">
              Comics
Pero no sé cómo hacer que en la página a la que va, pueda recoger si se ha marcado o no el campo. Podriais ayudarme?

Copio por si puede servir el código.

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Alta de Usuario</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>

<body>

<script language="javascript">
function comprobar()
{
campos=''
if (formalta.txtnick.value=='') 
	campos=campos+"\n\n * Nick"
if (formalta.txtnombre.value=='') 
	campos=campos+"\n\n * Nombre"
if (formalta.txtmail.value==''){
	campos=campos+"\n\n * Correo electrónico"
}else{
	if((formalta.txtmail.value.indexOf ('@', 0) == -1)||(formalta.txtmail.length < 5)){
	campos=campos+"\n \n* Correo electrónico (no valido)"
	}
}
if (formalta.txtpass.value=='')
	campos=campos+"\n\n * Contraseña"		
if (campos==''){
		//enviar
		formalta.submit()
	}else{
		// Se envía a la función campos, los campos que se necesitan
		if (campos!='') {peticion(campos)}
	}
}

// En la variable campos están los campos requeridos
function peticion(campos)
{
alert("Debe rellenar los siguientes campos: "+campos)
}


</script>
			<tr valign="top">
		<td><form name="formalta" id="formalta" method="post" action="guardarusuario.asp">
      <table width="502" height="159"  border="0" align="center" cellpadding="0" cellspacing="0" class="tb_form">
        <tr valign="top"> 
          <td width="90"><strong>Nick</strong></td>
          <td width="380"> <input name="txtnick" type="text" id="txtnick2" size="30" /></td>
        </tr>
        <tr valign="top"> </tr>
        <tr valign="top"> 
          <td><strong>Contrase&ntilde;a</strong></td>
          <td><input name="txtpass" type="password" id="txtpass2" size="30" /></td>
        </tr>
        <tr valign="top"> 
          <td width="90"><strong>Nombre</strong></td>
          <td width="380"> <input name="txtnombre" type="text" id="txtnombre2" size="30" /></td>
        </tr>
        <tr valign="top"> 
          <td width="90"><strong>Correo Electronico</strong></td>
          <td width="380"> <p> 
              <input name="txtmail" type="text" id="txtmail2" size="30" />
            </p>
        <tr valign="top"> 
          <td width="90"><strong>Intereses</strong></td>
          <td width="380">
<p>Deseo recibir informaci&oacute;n sobre:</p>
            <p> 
              <input type="checkbox" name="chkcomics" value="Si">
              Comics 
              <input type="checkbox" name="chkconciertos" value="Si">
              Conciertos 
              <input type="checkbox" name="chkdiscos" value="Si">
              Discos 
              <input type="checkbox" name="chkgrupos" value="Si">
              Grupos 
            <p> 
              <input type="checkbox" name="chkrestaurantes" value="Si">
              Restaurantes 
              <input type="checkbox" name="chkjuegos" value="Si">
              Juegos 
              <input type="checkbox" name="chkarte" value="Si">
              Arte 
              <input type="checkbox" name="chkcine" value="Si">
              Cine </td>
        </tr>
        <tr valign="top">
          <td>&nbsp;</td>
          <td>&nbsp;</td>
        </tr>
      </table>
      <p>&nbsp;</p>
      <p> 
        <input type="reset" name="Reset" value="Borrar">
        <input name="cmdenviar" type="button" onClick="comprobar()" value="Enviar">
      </p>
      <p>&nbsp;</p>
	</table></form>
	</table>
	</table>
			
</body>
</html>
  #2 (permalink)  
Antiguo 25/04/2007, 07:17
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Re: Problemas con Checkbox

Los formularios no envian informacion de los campos vacios o no pulsados. Asi, si envia el boton pulsado (generalmente submit) pero no lo hace del reset. Fijate bien. Con los checkbox pasa lo mismo. SI no se ha marcado no envia informacion. Asi que solo tienes que comprobar si existe ese campo en la lectura del POST:

if request.post("checkbox1") <> "" then
' Se ha marcado ya que existe. Puedes guardar los datos como true
else
' No se ha marcado. Guardo false
end if



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #3 (permalink)  
Antiguo 25/04/2007, 08:52
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Problemas con Checkbox

Entonces según lo que entiendo de eso, yo podría poner un Request.form también? porque lo que se envía es el formulario y mis checkbox están dentro, aún así, ninguna de las dos funcionan (lo he probado) En JScript existe Request.post? Lo he puesto en google y no me salia nada relacionado, puede ser que no exista?

Por otra parte, sólo necesito introducir en la BD los que estén como "Si" El resto me dá igual, entonces, tengo otra pregunta, teniendo en cuenta que me pasa estos datos cuando pincho las opciones: "Si"

chkcomics=Si
&chkconciertos=Si
&chkdiscos=Si


Podria meterlos en variables como por ejemplo tengo
nombre=Request.form("txtnombre") ?
O podria hacer una insert directamente con esos valores? Los que sean Sí, se introducirian normalmente, en caso de no haberse pulsado no tendrían valor y se grabarian como vacio? o null?

Pongo el código que he puesto por si acaso:

Código:
 <input type="checkbox" name="chkcomics" value="Si">
  Comics
Código:
if(Request.Post("chkcomics")="") {
			Response.Write("NO Ha llegado comics")
		}else{
			Response.Write("se ha marcado")
		}
El error es este: Tipo de error:
Error en tiempo de ejecución de Microsoft JScript (0x800A01B6)
El objeto no acepta esta propiedad o método
/portal_joven/guardarusuario.asp, línea 25


Línea 25:if(Request.Post("chkcomics")="") {


Los datos se envian correctamente:

Datos de POST:
txtnick=aboraash&txtpass=asfa&txtnombre=%F1aksdjfd &txtmail=a%F1jksafsfa%40jsd%F1faoes.es&chkcomics=S i&chkconciertos=Si&chkdiscos=Si
  #4 (permalink)  
Antiguo 26/04/2007, 01:43
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Problemas con Checkbox

Lo he arreglado con un
Request.QueryString

Pero ahora tengo otro problema, para no variar.

Si le doy al checkbox, evidentemente lo manda correctamente:

Cuando selecciono:
txtnick=kopee&txtpass=fds&txtnombre=fdafasdf&txtma il=asdfasdf%40s%F1kfaj.es&chkcomics=Si

Cuando no selecciono:
txtnick=kopee&txtpass=das&txtnombre=fdafasdf&txtma il=asdfasdf%40s%F1kfaj.es

Vale, entonces llega a mi codigo, pero aquí no lo recoge bien o no estoy haciendo buen uso de las variables o algo así.

Con este código, siempre es No ha llegado a comics.
Código:
if(Request.QueryString("chkcomics")!="Si"){
			Response.Write(" no Ha llegado comics")
		}else{
			Response.Write(" se ha marcado")
		}
Bueno y ahora por lo que veo también pone no se selecciono con este código (juraría que antes poniendolo así, salía todo el rato como marcado, pero igual son estas horas de la mañana o que he cambiado algo)

Código:
if(Request.QueryString("chkcomics")=="Si"){
			Response.Write("Ha llegado comics")
		}else{
			Response.Write("no se ha marcado")
		}
Con este codigo:Siempre llega, con lo que llego a la conclusión de que chkcomics no contiene un Si en su interior? ô.o
Código:
if(Request.QueryString("chkcomics")!="Si"){
			Response.Write("Ha llegado comics")
		}else{
			Response.Write("no se ha marcado")
		}
También he probado poniendo dos ifs.
if chkbox="" then
no llega
endif

if chkbox!="" then
llega
endif

pero aún así, salía mal. Sabeis de qué puede ser? No le veo ninguna lógica, porque según cuando manda los datos chkcomics=Si

Última edición por Shilfild; 26/04/2007 a las 02:02
  #5 (permalink)  
Antiguo 26/04/2007, 04:14
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Problemas con Checkbox

Arreglado aunque no cómo me gustaría, según he leido Request.QueryString se usa cuando mandas variables por url, no es cierto? Es que de esto no estoy demasiado segura, entonces lo que se me ha ocurrido es hacer en VBScript la parte que con JavaScript no podía y ha dado resultado, y este es:

Código:
	%>
		<script language=VBScript runat=server>
			if (Request.form("chkcomics")<>"")then 
				Response.Write("Llega comics")
				us_comic="Si"
			else
				Response.Write("No llega a comics")
				us_comic="No"
			End if
		</script>
		
	<%

		cone.execute("INSERT INTO usuarios (user_id,user_pass,user_nombre,user_mail,user_comics) VALUES ('" + user_nick + "', '" + user_pas + "' , '" + user_nom +"' , '" + user_mail + "' , '" + us_comic + "')")			 
		%>
  #6 (permalink)  
Antiguo 26/04/2007, 06:14
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Re: Problemas con Checkbox

Empezando desde el principio:

Cita:
Podria meterlos en variables como por ejemplo tengo
nombre=Request.form("txtnombre") ?
O podria hacer una insert directamente con esos valores? Los que sean Sí, se introducirian normalmente, en caso de no haberse pulsado no tendrían valor y se grabarian como vacio? o null?
Depende como hayas definido el campo en la Base de Datos. Si el campo es de tipo lógico (Access) o Byte (0 o 1) lo mejor es poner por defecto No o 0. Asi todos son No o 0 si no se dice lo contrario.

if (request.form("chkcomics") != "") sql += "chkcomics=1";

si no se marca (no checked) no vendrá con el paquete de datos POST.

Cita:
El error es este: Tipo de error:
Error en tiempo de ejecución de Microsoft JScript (0x800A01B6)
El objeto no acepta esta propiedad o método
/portal_joven/guardarusuario.asp, línea 25


Línea 25:if(Request.Post("chkcomics")="") {


Es request.Form no .Post :)

Si no hay demasiada información ni es sensible (password, claves, etc) da igual qué metodo uses. Yo prefiero POST por una cuestión de estética pero puedes hacerlo como desees. Pero si lo haces por GET el método será QueryString

request.Form --> metodo POST
request.Querystring --> metodo GET


Cita:
Cuando selecciono:
txtnick=kopee&txtpass=fds&txtnombre=fdafasdf&txtma il=asdfasdf%40s%F1kfaj.es&chkcomics=Si

Cuando no selecciono:
txtnick=kopee&txtpass=das&txtnombre=fdafasdf&txtma il=asdfasdf%40s%F1kfaj.es


Tu mismo/a te respondes. ¿Ves que aparece cuando lo seleccionas? No importa el valor. Simplemente esta y lo que tu necesitas son uno de los dos valores posibles: Si/No, 1/0, Verdadero/Falso, Esta/No Esta


[
quote]
Arreglado aunque no cómo me gustaría, según he leido Request.QueryString se usa cuando mandas variables por url, no es cierto?
[/quote]

Si. Cuando pones en el tag FORM el METHOD=GET


Por cierto, MIcrosoft recomienda no mezclar VBScript con JScript Procura usar un solo lenguaje por página. Para manejar los formularios por POST es request.Form Pruebalo, es mas seguro.



Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #7 (permalink)  
Antiguo 26/04/2007, 06:19
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Problemas con Checkbox

Gracias por las explicaciones, pero el problema que tengo es que como no tengo casi ni idea pues tengo que ir probando lo que me funciona, por eso meto cachos de cógido de otros lenguajes. Pero de momento parece que funciona bien, gracias por la recomendación.

Lo que haré será apuntar lo que tengo que probar, porque tengo un poco de prisa (como siempre) en acabar este proyecto (órdenes de arriba) y todavía me queda bastante... y por lo que veo UN MONTÓN que aprender...
  #8 (permalink)  
Antiguo 26/04/2007, 06:30
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Problemas con Checkbox

Vale lo acabo de comprobar porque me picaba la curiosidad >_>

y poniendo " us_chkcomics=Request.form("chkcomics") " también funcionaba, el caso es que lo que he hecho ahora es ponerlo solo como texto y si introduce el tick pongo que si y si esta vacio que no, es una manera mucho mas cutre, pero de momento va a ir así, si al final tengo tiempo lo cambiaré a tu modo (o cuando vuelva a estar atascada con otra historia xD)

No sé si está bien lo que he entendido de esto:

Código:
if (request.form("chkcomics") != "") sql += "chkcomics=1";
Supongo que concatenará si chkcomics tiene contenido a la variable sql que tendría la sentencia de insert no? En mi caso sería:

Código:
if (request.form("chkcomics") != "") sql += "chkcomics=Si";
De esta manera, si no hubiera marcado la opción chkcomics, no se haría el update de ese campo.
  #9 (permalink)  
Antiguo 26/04/2007, 06:41
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Re: Problemas con Checkbox

Cierto :) Pero es para un UPDATE

Imaginate una sentencia sql:

sql = "UPDATE tabla SET campo1 = 'blabla',"

Y ahora las sentencias lógicas:

if (request.form("chkcomics") != "") sql += "chkcomics=Si,";
if (request.form("chkbooks") != "") sql += "books=Si,";

sql = sql.substring(0,sql.length-2);

sql += " WHERE tal y tal"


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #10 (permalink)  
Antiguo 26/04/2007, 07:56
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Problemas con Checkbox

Y no lo podría hacer en una misma sentencia de insert? Es decir, comprobar si ese campo es Si, y si lo es añadirlo al insert, sino, como no es un campo obligatorio y por defecto en la BD está como "No" no cambiaría nada.
  #11 (permalink)  
Antiguo 26/04/2007, 08:05
 
Fecha de Ingreso: enero-2006
Ubicación: Torroles (Costa der Só)
Mensajes: 1.017
Antigüedad: 19 años, 3 meses
Puntos: 7
Re: Problemas con Checkbox

Tambien se podria hacer pero es algo mas complejo ya que el INSERT (siempre atraves de una sentencia SQL) puedes hacerlo de dos formas:

1 - Debes insertar todos los valores posibles en todos los campos del registro
INSERT INTO tabla VALUES ('valorcampo1', 'valorcampo2', ... , 'valorcampoN')

2 - Insertar aquellos valores que te interesen. En este caso debes llevar la cuenta tanto de los nombres de los campos como sus valores.
INSERT INTO tabla (nombrecampo1, nombrecampo2, ..., nombrecampoN) VALUES ('valorcampo1', 'valorcampo2', ..., 'valorcampoN')

En este caso yo lo haria con arrays que deberan ser iguales de longitud al final del chequeo

UBound(array_campos) = UBound(array_valores)

Para luego poder montar la cadena:

sql = "INSERT INTO tabla (" & join(array_campos,",") & ") VALUES (" & join(array_valores,"','") & ")"




Otra opcion es hacerlo con un recordset activo:

rs.open(tabla_o_sql, 3, 3)

rs.AddNew()
rs.Campo1 = "Bla Bla"
rs.CampoBoolean = request.Form("checkbox1") <> ""
...
rs.update()


Este ultimo caso puede serte interesante.


Un saludo
__________________
"Tus pecados son el estiércol sobre el que florecerán las flores de tus virtudes" - Gerald Messadié -
  #12 (permalink)  
Antiguo 26/04/2007, 08:18
Avatar de Shilfild  
Fecha de Ingreso: marzo-2007
Mensajes: 120
Antigüedad: 18 años, 1 mes
Puntos: 0
Re: Problemas con Checkbox

Uhm vale xD lo tendré en cuenta cuando acabe el proyecto y tenga tiempo para mejorar cosas, muchisimas gracias por las explicaciones xD ahora a descifrar unos selects que tengo que hacer para que me recojan la información que necesito.. que dificil me parece x'D
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 21:29.