Foros del Web » Programando para Internet » Javascript »

Validación Js para formularios generados con do-while

Estas en el tema de Validación Js para formularios generados con do-while en el foro de Javascript en Foros del Web. Amigos del Foro; Estoy aquí en busca de ayuda, ya que en mi ignorancia no he podido validar el mismo formulario, pero que se repite ...
  #1 (permalink)  
Antiguo 27/08/2014, 08:09
 
Fecha de Ingreso: enero-2013
Mensajes: 16
Antigüedad: 11 años, 11 meses
Puntos: 0
Validación Js para formularios generados con do-while

Amigos del Foro;
Estoy aquí en busca de ayuda, ya que en mi ignorancia no he podido validar el mismo formulario, pero que se repite n veces en la misma página (lo replico usando la sentencia do-while). Los usuarios pueden submit solo uno cada vez.
Sé que necesito darles un identificador único a cada uno para que el js sepa cual es el que debe validar o alomejor un id a la función Js?.

Este es el código de los formularios

Código PHP:
Ver original
  1. $editFormAction = $_SERVER['PHP_SELF'];
  2.     if (isset($_SERVER['QUERY_STRING'])) {
  3.       $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
  4.     }
  5.     if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form3")) {
  6.       $updateSQL = sprintf("UPDATE tblcoment_caractpoli SET intActivo=%s, dateEliminar=%s WHERE idComent_caractpoli=%s",
  7.                            GetSQLValueString($_POST['intActivo'], "int"),
  8.                 GetSQLValueString($_POST['dateEliminar'], "timestamp"),
  9.                            GetSQLValueString($_POST['idComent_caractpoli'], "int"));
  10.       mysql_select_db($database_conexionproject_politics, $conexionproject_politics);
  11.       $Result1 = mysql_query($updateSQL, $conexionproject_politics) or die(mysql_error());
  12.       $updateGoTo = "";
  13.       if (isset($_SERVER['QUERY_STRING'])) {
  14.         $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
  15.         $updateGoTo .= $_SERVER['QUERY_STRING'];
  16.       }
  17.       header(sprintf("Location: %s", $updateGoTo));
  18.     }
  19.      
  20.     do {?>
  21.     <form action="<?php echo $editFormAction; ?>" method="POST" name="form3" id="form3" >
  22.             <a onclick="return validarFormulario();" href="javascript:document.form3.submit();"><span>Eliminar</span></a>
  23.              <input type="hidden" name="MM_update" value="form3" />
  24.               <input type="hidden" name="intActivo" value="0" />
  25.               <input type="hidden" name="dateEliminar" value="now()" />
  26.               <input type="hidden" name="idComent_caractpoli" value="<?php echo $opinion; ?>" />
  27.             </form>
  28.     <?php } while ($row_DatosOpiniones = mysql_fetch_assoc($DatosOpiniones));


Aquía va el código Js que debería validar los form's
Código Javascript

Código Javascript:
Ver original
  1. function validarFormulario()
  2. {
  3.     valid = true;
  4.  
  5.     document.form3.intActivo.style.border='1px solid #CCC';
  6.    
  7.     if ( document.form3.intActivo.value == "0" )
  8.     {
  9.         alert ( "Está seguro que quiere eliminar esta opinión?" );
  10.         valid = false;
  11.     }
  12.        
  13.     if ( document.form3.intActivo.value == "0" )
  14.          document.form3.intActivo.style.border='2px solid red';
  15.  
  16.     return valid;
  17. }
:

No está de más decir que AGRADECERÍA enormemente cualquier ayuda para poder arreglar este código y hacerlo que pueda validar cualquiera de los formularios.
  #2 (permalink)  
Antiguo 27/08/2014, 09:50
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Validación Js para formularios generados con do-while

Podrías asignar un ID distinto en cada iteración a cada formulario creado, así ya no tomaría al formulario por su nombre sino por su ID, aunque, particularmente, preferiría tener una lista de datos con un botón de edición y que al pulsarlo, muestre un formulario con los datos de dicho registro. Eso de tener una lista de N formularios no me parece práctico ni estético.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 28/08/2014, 15:08
 
Fecha de Ingreso: enero-2013
Mensajes: 16
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Validación Js para formularios generados con do-while

Gracias por responder Alexis88.

Podrías explicarme un poco, por favor, como puedo implementar el ID de manera automática. El ID para el formulario, lo entiendo así.....

Código HTML:
Ver original
  1. <form action="<?php echo $editFormAction; ?>" method="POST" name="form<?php echo $i++; ?>" id="form<?php echo $i++; ?>" >

Pero debo implementar algo similar en el codigo que envía los datos. El "form3" debe cuadrar con el form<?php echo $i++; ?> que definí arriba.
Código PHP:
Ver original
  1. if ((isset($_POST["MM_update"])) && ($_POST["MM_update"] == "form3")) {
  2.       $updateSQL = sprintf("UPDATE tblcoment_caractpoli SET intActivo=%s, dateEliminar=%s WHERE idComent_caractpoli=%s",
  3.                            GetSQLValueString($_POST['intActivo'], "int"),
  4.                 GetSQLValueString($_POST['dateEliminar'], "timestamp"),
  5.                            GetSQLValueString($_POST['idComent_caractpoli'], "int"));

Y además la función Js que valida el formulario debería también tener el mismo índice.

Creo que entiendo la idea general?, pero me falla el conocimiento técnico para implementarlo.

Gracias de antemano.
  #4 (permalink)  
Antiguo 29/08/2014, 00:24
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Validación Js para formularios generados con do-while

Creo que en lugar de seguir complicándote con este camino, mejor toma el consejo que te di en la segunda parte de mi anterior respuesta. Es una manera más limpia y ordenada de hacerlo, a pesar de que, para la forma en que lo haces, también hay solución.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 29/08/2014, 08:42
 
Fecha de Ingreso: enero-2013
Mensajes: 16
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Validación Js para formularios generados con do-while

El listado que quiero mostrar son opciones secundarias, que ya estoy desplegando en una nueva ventana. Estoy asociando un botón "Eliminar" a cada opción para que si el usuario desea, pueda eliminar las opciones que quiera, una por una.

Básicamente lo que me sugieres, entiendo, sería desplegar el formulario en otra ventana, para evitarme la recursividad. Pero no quiero usar una tercera ventana, eso sería demasiado......
  #6 (permalink)  
Antiguo 29/08/2014, 09:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Validación Js para formularios generados con do-while

¿Tercera ventana? Lo que te decía es que listes a todos los registros y que por cada registro, le añadas al final dos botones: Uno para editar los datos de dicho registro y otro para eliminarlos, para lo cual solo tendrías que pasar el ID de dicho registro en la ruta de la opción. Al pulsar uno de dichos botones, bien podrías cargar el formulario de edición en una ventana emergente, en una ventana modal o en una ventana/pestaña nueva. Insisto, tener a todos los formularios juntos, puede resultar incómodo, confuso y poco estético.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #7 (permalink)  
Antiguo 29/08/2014, 14:47
 
Fecha de Ingreso: enero-2013
Mensajes: 16
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Validación Js para formularios generados con do-while

Alexis,

Disculpa por que no fui claro en mi anterior comentario. Sería una tercera ventana, por que el listado de datos ya lo estoy desplegando en una ventana emergente y quiero que en esta ventana sólo tengan que pulsar el botón asociado al dato que quieran Eliminar, bueno en realidad puse eliminar para simplicar el tema, supuestamente. En realidad cada formulario tiene un menu desplegable, los usuarios eligen una opción y la envían; quiero que la función Js verifique que seleccionaron una opción.

Mi tema es que no quiero incrementar el proceso redireccionando a los usuarios a una nueva página
especifica para el dato que les interese. Además que una nueva página se justificaría si aportara más información del dato que les interese, pero no va a ser así, sería sólo el dato aislado, ya no listado con otros.

Bueno, conociendo mejor el contexto, ahora entenderás por que tu recomendación no la he implementado.
  #8 (permalink)  
Antiguo 29/08/2014, 15:48
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Validación Js para formularios generados con do-while

En lugar de usar un enlace, podrías usar un botón de tipo submit. Al ejecutar el proceso de envío, muestras una ventana de confirmación; si el usuario acepta eliminar los datos que correspondan al formulario del botón pulsado, entonces se ejecuta el respectivo proceso.

Código HTML:
Ver original
  1. <form action="<?php echo $editFormAction; ?>" method="POST" name="form<?php echo $i++; ?>" id="form<?php echo $i++; ?>" onsubmit = "return confirm('¿Está seguro de que desea eliminar estos datos?')" >
  2.     <!-- Resto de controles -->
  3.     <input type = "submit" value = "Eliminar" />
  4. </form>

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #9 (permalink)  
Antiguo 29/08/2014, 16:26
 
Fecha de Ingreso: enero-2013
Mensajes: 16
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Validación Js para formularios generados con do-while

Realmente agradezco tu interés por ayudar. Claramente tratando de simplicar mi problema, al final lo he complicado más.

La acción que los usuarios pueden hacer no es "Eliminar", lo usé como ejemplo tratando de simpliquicar el asunto. Para Eliminar tu solución es perfecta.

Lo que necesito realmente es validar que no me manden el formulario vacío. El form es un menu desplegable con un botón tipo "submit". Pueden mandar uno a la vez de los n de la lista.

En definitiva necesito una ventana de "warnning" que aparezca si no ha seleccionado ninguna opción y lo devuelva.

El formulario que debí haber puesto desde un principio es este:

Código PHP:
Ver original
  1. do {?>
  2.     <form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1">
  3.       <select name="intEvaluacion" id="intEvaluacion">
  4.       <option value="" <?php if (!(strcmp('', htmlentities(ObtenerEvalUsuario_CaractPoli($row_Recordset2['idCaract']), ENT_COMPAT, 'iso-8859-1')))) {echo "SELECTED";} ?>>Seleccionar</option>
  5.         <option style="color:#03F" value="10" <?php if (!(strcmp(10, htmlentities(ObtenerEvalUsuario_CaractPoli($row_Recordset2['idCaract']), ENT_COMPAT, 'iso-8859-1')))) {echo "SELECTED";} ?>>100%</option>
  6.         <option style="color:#03F" value="5" <?php if (!(strcmp(5, htmlentities(ObtenerEvalUsuario_CaractPoli($row_Recordset2['idCaract']), ENT_COMPAT, 'iso-8859-1')))) {echo "SELECTED";} ?>> 50%</option>
  7.         <option style="color:#03F" value="0" <?php if (!(strcmp(0, htmlentities(ObtenerEvalUsuario_CaractPoli($row_Recordset2['idCaract']), ENT_COMPAT, 'iso-8859-1')))) {echo "SELECTED";} ?>>  0%</option>
  8.  
  9.       <input onclick="return validarFormulario('menu<?php echo $row_Recordset2['idCaract'];?>');" type="submit" value="Evaluar" />
  10.  
  11. <input type="hidden" name="dateFecha" value="now()" />
  12.   <input type="hidden" name="intActivo" value="1" />
  13.   <input type="hidden" name="MM_insert" value="form1" />
  14.    <input type="hidden" name="idCaract" value="<?php echo $row_Recordset2['idCaract']; ?>" />
  15.    <input type="hidden" name="idUser" value="<?php echo $_SESSION['MM_IdUser']; ?>" />
  16. </form>
  17.  
  18.     <?php } while ($row_DatosOpiniones = mysql_fetch_assoc($DatosOpiniones));

Saludos.
  #10 (permalink)  
Antiguo 29/08/2014, 18:34
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 13 años, 1 mes
Puntos: 977
Respuesta: Validación Js para formularios generados con do-while

Te estás complicando mucho para hacer algo tan sencillo. Lo que debes de hacer es enviar un identificador del formulario, buscar en él al combo y verificar su valor; si este es nulo, se muestra el mensaje de alerta, caso contrario, se procede a enviar los datos del formulario.

Código HTML:
Ver original
  1. <form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1" onsubmit = "return validar(this)">

Código Javascript:
Ver original
  1. function validar(form){
  2.     var combo = form.getElementsByTagName("select")[0];
  3.  
  4.     if (!combo.value.length){
  5.         alert ("Debe de elegir una opción");
  6.         return false;
  7.     }
  8.     else{
  9.         return true;
  10.     }
  11. }

Otra manera de validar pero con HTML5 de que se elija una opción del combo es mediante el uso del atributo required.

Código HTML:
Ver original
  1. <select name="intEvaluacion" id="intEvaluacion" required>

De esta forma, si el usuario no seleccionó una opción válida, se cancelará el envío de datos y se mostrará un mensaje en un pequeño recuadro debajo del combo en el que se le indicará al usuario que debe de elegir una opción de la lista. La desventaja está en que no funcionará en navegadores viejos que son los que no soportan HTML5. Ojo, estás haciendo mal al asignar el mismo id a todos los combos que se generen en el bucle. Corrige eso.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #11 (permalink)  
Antiguo 30/08/2014, 09:58
 
Fecha de Ingreso: enero-2013
Mensajes: 16
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Validación Js para formularios generados con do-while

Muchas gracias, ahora funciona para ese fin específico.

Lo de complicarme, tienes razón en parte. Lo que sucede es que quería matar varios pájaros de un tiro. Me refiero a que con la orientación que recibiera poder adaptarlo a varios problemas que tengo.

Básicamente no se con hacer que una función Js, que es llamada con PHP, funcione cuando los datos los genero mediante un bucle. Por lo tanto esa función debe poder reconocer en que registro actuar. No se como implementar los id únicos y automáticamente. Por ejemplo la funcion Js (Mostrar y después cambia a Ocultar), que te permite mostrar un comentario completo o una parte de el; cuando los comentarios se generan mediante un bucle, no encuentro información o la solución para poder implementarlo.

Nuevamente muchas gracias por tu ayuda Alexis88.

Etiquetas: formulario, formularios, generados, html, input, js, php, 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 20:50.