Foros del Web » Programando para Internet » Javascript »

Mandar valor de 3 Select en un solo POST

Estas en el tema de Mandar valor de 3 Select en un solo POST en el foro de Javascript en Foros del Web. Hola a todos...! Por favor, si me pueden orientar o ayudar con esto: Tengo tres "Select" en un formulario con los cuales recojo la fecha ...
  #1 (permalink)  
Antiguo 05/10/2012, 13:02
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Mandar valor de 3 Select en un solo POST

Hola a todos...!

Por favor, si me pueden orientar o ayudar con esto:

Tengo tres "Select" en un formulario con los cuales recojo la fecha de nacimiento, es decir:

Código HTML:
<select name="dia">
<select name="mes">
<select name="anio"> 
¿Cómo hago para obtener lo seleccionado en cada uno de los tres Select como un único valor, y para mandarlo en un "POST"?
  #2 (permalink)  
Antiguo 05/10/2012, 13:46
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Mandar valor de 3 Select en un solo POST

a cada select le asignas el evento onchange
Cita:
onchange = "document.getElementById('campooculto').value += this.value"
esto tiene el inconveniente de que si se selecciona el mes y luego día y año, el valor resultante sería 01312012. para evitar esto, se necesitarían muchas líneas de código. por lo tanto no creo que merezca la pena
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #3 (permalink)  
Antiguo 05/10/2012, 13:57
 
Fecha de Ingreso: mayo-2011
Mensajes: 105
Antigüedad: 13 años, 6 meses
Puntos: 3
Respuesta: Mandar valor de 3 Select en un solo POST

atrapa lo valores de los select options en 3 variables y los concatenas en una y si no te queda dificil aprender ajax, ahi puedes enviar la unica variable por POST
  #4 (permalink)  
Antiguo 05/10/2012, 14:09
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Mandar valor de 3 Select en un solo POST

Hola, gracias por ayudarme!

IsaBelM:

¿La única forma de conocer los valores seleccionados antes de mandar el Form es con "onchange"?

deywibkiss:

Atrapar los valores de los select en 3 variables y después concatenarla en una, significa que tengo que mandar el formulario antes... y lo que necesito es conocer sus valores antes del envio del form y concatenarlos.
No se como es lo de ajax en este problema que tengo, pero si me orientas donde ver, pues lo leo!
  #5 (permalink)  
Antiguo 05/10/2012, 14:20
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Mandar valor de 3 Select en un solo POST

onchange es un evento (el adecuado para un select). esto quiere decir que cuando se selecciona una de las opciones del combox, este se dispara. el código que te dejé asigna y concatena los valores seleccionados en cada combox. pero ten en cuenta la advertencia que te indiqué.

en cuanto al uso de ajax, no tiene sentido. es añadir más líneas de código
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 05/10/2012 a las 16:18
  #6 (permalink)  
Antiguo 05/10/2012, 14:43
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Mandar valor de 3 Select en un solo POST

Vamos... como que no tengo posibilidad de solución en rescatar a travez de los 3 select la fecha de nacimiento, y así mandarla por un POST para insertarla en BD.

Gracias IsaBelM...!
  #7 (permalink)  
Antiguo 05/10/2012, 16:23
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Mandar valor de 3 Select en un solo POST

no es que no tengas posibilidad. como dije en mi primer post, es posible, pero, te merece la pena??

se me ha ocurrido.
el segundo y el tercer select han de estar deshabilitados
Cita:
onchange = "document.getElementById('campooculto').value += this.value; this.nextElementSibling.disabled = false;"
esto estaría en el primer y segundo select

está basado en la estructuras que muestras

el problema que mencioné anteriormente desaparece en principio pero puede persistir si el usuario vuelve a seleccionar una opción distinta a la seleccionada anteriormente. además ahora veo otro problema, y que te puedes encontrar con una cadena como esta 3101201225. el 25 sería que el usuario volvió a seleccionar un nuevo día
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}

Última edición por IsaBelM; 05/10/2012 a las 16:46
  #8 (permalink)  
Antiguo 05/10/2012, 17:04
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Mandar valor de 3 Select en un solo POST

Gracias IsaBelM... voy a estudiar un poco como resolver esto.

Agradezco mucho el tiempo que me has dado!

Saludos!
  #9 (permalink)  
Antiguo 05/10/2012, 17:11
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Mandar valor de 3 Select en un solo POST

@paulkees
¿Puede saberse por que necesitás conocer eso valores antes de enviarlos?

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #10 (permalink)  
Antiguo 05/10/2012, 19:38
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Mandar valor de 3 Select en un solo POST

Hola emprear...!

Necesito saberlos para concatenarlos y así mandar un único valor por "$_Post['']" pra que la clase php que tengo recepcione el dato y me lo inserte en la BD.
  #11 (permalink)  
Antiguo 05/10/2012, 20:08
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Mandar valor de 3 Select en un solo POST

Pero los podés "concatenar" como vos decís en el php

$dia = $_POST['dia'];
$mes = $_POST['mes'];
$anio = $_POST['anio'];

// y los acomodás creando una nueva variable de acuerdo al orden que prefieras o al
// formato que tu BD requiera

No le veo mayor sentido a tener que reagrupar esos valores con el javascript, salvo quizás que quieras hacer algún tipo de validación.

al margen, por si te interesa tengo hecho esto
http://foros.emprear.com/php/demo-form-ajax-captcha/
que justamente valida una fecha de nacimiento

Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #12 (permalink)  
Antiguo 05/10/2012, 21:00
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Mandar valor de 3 Select en un solo POST

Si lo puedo concatenar con php:

Código HTML:
$d=$_POST["dia"];
$m=$_POST["mes"];
$a=$_POST["anio"];
$nacimiento=$a."-".$m."-".$d;
Pero el valor de "nacimiento" solo lo obtengo después de mandar el formulario, donde también se encuentran los 3 select. Por lo tanto no puedo mandar el valor por POST. Este POST, lleva el valor YYYY-mm-dd para insertar en la BD MySQL.

Es decir, debo obtener el valor concatenado de los select antes y no hay otra forma que hacerlo por javascript.

En tu ejemplo de "demo-form-ajax-captcha", no me da las fechas en formato para guardar en la BD, y por otro lado, me pregunto si esa fecha de tu ejemplo la puedo mandar por POST.
  #13 (permalink)  
Antiguo 05/10/2012, 22:07
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Mandar valor de 3 Select en un solo POST

no veo el inconveniente
el form envia los datos al php, el php recibe post para dia mes año. le das el formato que vos querés, si tu bd usa 'YYYY-MM-DD' (DATE), haces el insert con "$anio-$mes-$dia", si es solo una cadena "$dia-$mes-$anio" ó "$dia/$mes/$anio"
En mi ejemplo es solo una cadena y es solo eso, un ejemplo no estoy insertando nada
Sinceramente no entiendo el problema que planteás
Esto
Cita:
Pero el valor de "nacimiento" solo lo obtengo después de mandar el formulario
es, digamos, una obviedad, se descarta que la fecha de nacimiento la pone el usuario y hasta no hacer el submit no la enviás. solo que da el tema de los años bisiestos, que yo lo controlo en el php, de ahi que uso Ajax para la validación, pero tampoco es necesario ya que debe de haber seguro una función equivalente para javascript
Saludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #14 (permalink)  
Antiguo 06/10/2012, 08:04
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Mandar valor de 3 Select en un solo POST

con el día se ve todo mas claro
matemos todos los pájaros de un tiro (recibir la fecha en un único campo, con formato y validada. incluso los años bisiestos)
Cita:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Documento sin título</title>
<script type="text/javascript">
vFecha = {
vardia : '',
varmes : '',
varanio : '',


fnc: function() {

if ((vFecha.varmes == 04 || vFecha.varmes == 06 || vFecha.varmes == 09 || vFecha.varmes == 11) && vFecha.vardia >= 31) {
document.getElementById('fecha').value = vFecha.varanio + '--' + vFecha.vardia;
alert('el mes seleccionado no tiene tantos días');

} else if (vFecha.varmes == 02 && vFecha.vardia >= 30) {
document.getElementById('fecha').value = vFecha.varanio + '--' + vFecha.vardia;
alert('el mes seleccionado no tiene tantos días');

} else if (vFecha.varmes == 02 && vFecha.vardia >= 29 && vFecha.varanio % 4 != 0) {
document.getElementById('fecha').value = '-' + vFecha.varmes + '-' + vFecha.vardia;
alert('el año seleccionado no es bisiesto');

} else {
document.getElementById('fecha').value = vFecha.varanio + '-' + vFecha.varmes + '-' + vFecha.vardia;
}


}

}
</script>
</head>
<body>
<form>
<input type="text" name="fecha" id= "fecha" />
<br />
<select name="dia" id="dia" onchange="vFecha.vardia = this.value; vFecha.fnc();">
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
<option value="04">4</option>
<option value="05">5</option>
<option value="06">6</option>
<option value="07">7</option>
<option value="08">8</option>
<option value="09">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
<option value="31">31</option>
</select>
<select name="mes" id="mes" onchange="vFecha.varmes = this.value; vFecha.fnc();">
<option value="01">1</option>
<option value="02">2</option>
<option value="03">3</option>
<option value="04">4</option>
<option value="05">5</option>
<option value="06">6</option>
<option value="07">7</option>
<option value="08">8</option>
<option value="09">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
</select>
<select name="anio" id="anio" onchange="vFecha.varanio = this.value; vFecha.fnc();">
<option value="1990">1990</option>
<option value="1991">1991</option>
<option value="1992">1992</option>
<option value="1993">1993</option>
<option value="1994">1994</option>
<option value="1995">1995</option>
<option value="1996">1996</option>
<option value="1997">1997</option>
<option value="1998">1998</option>
<option value="1999">1999</option>
<option value="2000">2000</option>
<option value="2001">2001</option>
<option value="2002">2002</option>
<option value="2003">2003</option>
<option value="2004">2004</option>
<option value="2005">2005</option>
<option value="2006">2006</option>
<option value="2007">2007</option>
<option value="2008">2008</option>
<option value="2009">2009</option>
<option value="2010">2010</option>
<option value="2011">2011</option>
<option value="2012">2012</option>
</select>
</form>
</body>
</html>
ahora sólo te queda validar que el largo del control "fecha" sea 10
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #15 (permalink)  
Antiguo 06/10/2012, 10:24
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Mandar valor de 3 Select en un solo POST

Guauuuu... IsaBelM... muchas gracias, gracias por tu tiempo!!!

A último momento y antes de poner mi dedo gordo en la cama, apareció una solución. No es la más correcta pero es bastante prolija.
Paso a contar un poco:

El Formulario lo recepciona una "Class PHP" (la cual no quiero modificar por desconocimiento), esta clase procesa todos los $_POST[''] al darle al submit y demás datos para insertar en la BD. Por lo tanto, la fecha de nacimiento debe llegarle en un POST.

Puedo obtener la fecha nacimiento concatenando los 3 select con php, obviamente después del submit, pero la clase ya procesó los datos enviados y no me sirve lo concatenado con php de esa forma.

Entonces que hice... como el form se ejecuta en el mismo script, es decir, envia los datos a la clase y retorna al mismo script, lo que he hecho es aprovechar el concatenado php e incorporar en el script un "UPDATE" a la BD en el campo "Nacimiento", y meterle la concatenación (variable php), ya que ese UPDATE se realiza casi al mismo tiempo de darle al submit.

Funcionó, no se si es lo más elegante y correcto, pero me ahorra mucho código y dolores de cabeza ya que no soy un hábido de conocimientos.

Podría haber hecho todo más fácil al poner un campo texto, y hacer que el usuario ingrese su fecha nacimiento con una cadena en vez de los 3 select. Pero mi propósito era recibir la fecha en el formato MySQL para la BD y no cualquier cadena que ponga el usuario.

No se si me explico bien, disculpen pero no tengo muchos conocimiento. De momento funciona como yo quiero y cumple su fin... talvez más adelante me encuentre con inconvenientes.

Quiero agradecerles muchísimo el ayudarme, la verdad, este foro nunca me ha decepcionado!

Saludos!
  #16 (permalink)  
Antiguo 06/10/2012, 14:12
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 16 años, 5 meses
Puntos: 1012
Respuesta: Mandar valor de 3 Select en un solo POST

si te funciona bien. pero me temo que no he entendido nada, excepto
Cita:
Iniciado por paulkees Ver Mensaje
El Formulario lo recepciona una "Class PHP" (la cual no quiero modificar por desconocimiento), esta clase procesa todos los $_POST[''] al darle al submit y demás datos para insertar en la BD. Por lo tanto, la fecha de nacimiento debe llegarle en un POST.

Puedo obtener la fecha nacimiento concatenando los 3 select con php, obviamente después del submit, pero la clase ya procesó los datos enviados y no me sirve lo concatenado con php de esa forma.
y es justamente lo que hace el script que te dejé
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #17 (permalink)  
Antiguo 06/10/2012, 14:23
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 17 años, 5 meses
Puntos: 1567
Respuesta: Mandar valor de 3 Select en un solo POST

Cita:
Iniciado por paulkees Ver Mensaje

El Formulario lo recepciona una "Class PHP" (la cual no quiero modificar por desconocimiento), !
Ahora tengo todo un poco más claro
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.
  #18 (permalink)  
Antiguo 06/10/2012, 15:48
 
Fecha de Ingreso: octubre-2004
Mensajes: 768
Antigüedad: 20 años, 1 mes
Puntos: 3
Respuesta: Mandar valor de 3 Select en un solo POST

Si IsaBelM, tenés razón, es justamente lo que hace tu script... por eso lo aplaudí!!!

Pero, al hacerlo con el "UPDATE" me simplifica la cuestión. Con esto no estoy diciendo que sea lo más correcto.

emprear... me alegro que me hayas entendido!

Saludos!

Etiquetas: formulario, post, select
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 01:16.