validacion formulario

Iniciado por marcelo3d, 29 Octubre 2011, 06:08 AM

0 Miembros y 1 Visitante están viendo este tema.

marcelo3d

Buen dia, necesito colaboracion en una validacion de formularios y el codigo que tengo es este y no funciona:   (es una validacion que no se dejen campos vacios y solo numeros menores a 5)

El problema es que tengo dos forms en la pagina y el codigo funciona cuando hay un solo form, pero cuando hay mas, solo verifica el primero, pero ese no me interesa que lo revise, solo me interesa el "form1".

Esto es una  planilla de notas donde aparecen los estudiantes y el campo nota segun una seleccion que se hace en el primer form "form2".. Todo funciona bien, lo unico que no he podido hacer es la validacion .
Les agradezco su colaboracion

<script>
      function comprobar(){
    var mal=false;
   var f=false;
    numer=document.forms[0].Nota.length;
    for(a=0;a<numer;a++){
    if (document.forms[0].Nota[a].value==""){document.forms[0].Nota[a].style.backgroundColor="#ffF000";mal=true;}
    else{document.forms[0].Nota[a].style.backgroundColor="white";}
       }
      
    if(mal){
      
       alert("Aún hay criterios sin evaluar...");
       f=false;
      return (false);
    }
    for(a=0;a<numer;a++){
    if (document.forms[0].Nota[a].value>5){document.forms[0].Nota[a].style.backgroundColor="#ffF000";mal=true;}
    else{document.forms[0].Nota[a].style.backgroundColor="white";}
       }
      
    if(mal){
      
       alert("No se permiten notas mayores a cinco (5)");
       f=false;
      return (false);
    }
   
    else{
      document.forms[0].submit()
       return (true);
    }
}
</script>


<form action="<?php echo $editFormAction; ?>" method="post" name="form1" id="form1" onsubmit="return comprobar()" >

<input name="Nota[]" type="text" id="Nota" value="" size="3" />

aca se ingresan mas valores con campos ocultos, pero solo necesito validar el campo "Nota"
*************************************************************************


Mr. Crowley

Hola Marcelo; siento que la validación está un poco extraña. Aquí le dejo un ejemplo
para validar una sola nota o todas al mismo tiempo.

Código (javascript) [Seleccionar]

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>

<body>
<form id="1" onsubmit="return fntValidar_Form(this)">
<input type="text" id="txtNota1">
<br>
<input type="submit" value="Validar">
</form>
<br>
<form id="2" onsubmit="return fntValidar_Form(this)">
<input type="text" id="txtNota2">
<br>
<input type="submit" value="Validar">
</form>
<br>
<br>
<input type="button" value="Validar todo" onclick="fntValidar_Todo()">

<script>
//funcionar para validar solamente una nota
function fntValidar_Form(objForm){
var iNota=Number(objForm.elements['txtNota'+objForm.id].value);
//obtener la nota, basados en el id del form (es importante colocar IDs distintos)

var blnRet=true; //valor que vamos a retornar

if(iNota=='' || iNota>5 || iNota<1){
alert('Por favor, verifique la nota.');
blnRet=false; //no se procesa el form porque el dato no es valido
}else{
//pasa la validacion :P
}

return blnRet; //retornamos true/false
}

//funcion para validar todas las notas
function fntValidar_Todo(){
var iCantidad_Forms=document.forms.length; //contamos la cantidad de forms

for(var iForm=0;iForm<iCantidad_Forms;iForm++){ //recorremos los forms
var objForm=document.forms[iForm]; //almacenamos el form en la variable
var iCantidad_Elementos=objForm.elements.length; //contar la cantidad de elementos

//recorrer todos los elementos del form
for(var iElemento=0;iElemento<iCantidad_Elementos;iElemento++){
//verificamos que el elemento sea tipo text (no vamos  validar un boton :/)
if(objForm.elements[iElemento].type=='text'){
//almacenamos el valor del campo
var iNota=objForm.elements[iElemento].value;

//validar el campo
if(iNota=='' || iNota>5 || iNota<1){
alert('Por favor, verifique las notas ingresadas.');
return; //abandonamos la ejecucion
}
}
}
}

//mostramos un mensaje en caso de que todo sea correcto
alert('Todas las notas estan bien :P');
}
</script>
</body>
</html>


Al rato esté un poco extenso, pero usted lo adapta. Mi intención es que entienda el código a la perfección. Espero le sirva de algo. Saludos :P

Nota: debe validar los valores NaN (cuándo se coloca una letra en vez de un número) o programar el campo de texto para que únicamente acepte números.
Mi blog personal: www.calirojas.com

marcelo3d

Gracias por dedicarle un tiempo a mi codigo, no sabes en verdad cuanto lo agradezco. voy echarle un vistazo para  adaptarlo, pero te cuento que ya  solucione mi problemilla, simplemente era que cuando tengo varios form pongo
  • y me valida el primero, [1] para el segundo y asi susecivamente. De algo sirven las horas sin dormir.  Tu explicacion del codigo esta muy buena, lo tendre en cuenta ya que no soy muy diestro en esto

Mr. Crowley

Claro, no hay problema ;)
Así es esto, al principio hay que "matarse" para aprender, ya después las cosas salen más fácilmente :)
Mi blog personal: www.calirojas.com

dark_sargon

Cabe recordar que es bueno hacer doble validación ya que algun usuario puede tener desactivados los scripts en javascript pero aun asì es bueno dejarlo para la mayorìa que si los tienen habilitados.

La segunda validación se haría en el archivo que recibe los datos del formulario. En tu caso el .php
Seria sencillo, tomar lo que tiene en javascript y 'traducirlo' para PHP.
http://www.actimediaonline.com
Diseño Web, animación y más.

http://www.ciudadoscura.com
Diseño Web, electrónica, programación, móviles y más.

marcelo3d

Buen dia, en esto de programacion, cuando se resuelve un problema siempre aparece otro y ahora tengo el siguiente: 
Tengo una lista de estudiantes con nombre y falla (justificada e injustificada) cuando selecciono fecha me coloca a cada persona el dato (fecha) pero la idea es que solo me envie las fallas de las personas que seleccione ya sea justificada o injustificada y que los otros no los envie. Lo tengo así pero escucho sugerencias:



De momento me esta enviando todo el listado .

estos son los 2 radio boton:
<input type="radio" name="cod_falla" value="1" />
                      <span class="thm2"><span class="n">Injustificada</span></span>
                      <input type="radio" name="cod_falla" value="0" />

GRACIAS POR SUS APORTES

Mr. Crowley

Hmmm.. supongo que arriba, donde aparece el calendario, es donde se asigna la fecha para todos los estudiantes. En ese caso eliminaria el campo fecha que tiene cada estudiante. Para que colocarlo otra vez si el dato es el mismo?

Tambien, pondria una barra de busqueda. Por ejemplo, si solo Fulanito De Tal falto, entonces me gustaria buscarlo a el directamente, sin tener que hace scroll o leer el resto de nombres.

En cuanto a los radios. Hmmm no me parece mal, pero probablemente yo lo hubiese hecho con un select que tenga tres opciones: 1. -- Seleccionar -- (esta opcion no haria nada) 2. Justificada 3. Injustificada.

De repente sea importate agregar un campo para colocarle una observacion a cada falta. Por ejemplo, si justifico una falta.. me gustaria poner algo como: "Justificado con comprobante medico #1234567890, verificar el documento en el expediente fisico" (o algo similar).
Mi blog personal: www.calirojas.com

marcelo3d

Buen dia, como siempre gracias por tus aportes:

1- Lo de la fecha en cada uno solo era para comprobar que efectivamente me la estaba asignando
2- Lo del select tambien es buena idea y mucho mejor la de la busqueda

Pero suponiendo que todo esto este listo, como puedo hacer para enviar a la base de datos solo los dos o tres que no asistieron determinado dia.   De momento puedo enviar uno por uno pero si son varios me gustaria se envien en un solo grupo.  O los envio todos pero no justifica llenar la base de datos por un par, Lo que  no he podido es solo enviar  los seleccionados


Mr. Crowley

Hola ;) Disculpe que no escriba con acentos, estoy en un teclado solo ingles y me da pereza configurarlo jejeje.

En el caso de hacerse con select, lo que yo haria seria:

1. Recorrer todos los select que hay en la pagina.
2. Si el valor del select es 1 o 2 (Justificada o Injustificada, por ejemplo) entonces almaceno ese dato. Recordar que el select va a tener 3 opciones (Seleccionar, Justificada e Injustificada).
3. Continuo con el ciclo, repitiendo lo mismo hasta llegar al final.

Bueno, esto seria por medio de Ajax; no se como lo estara haciendo usted. La verdad hace tiempo me olvide de procesar formularios enviado datos a otra pagina :$
Mi blog personal: www.calirojas.com