Foros del Web » Programando para Internet » Javascript »

validar varios campos iguales

Estas en el tema de validar varios campos iguales en el foro de Javascript en Foros del Web. Tengo un formulario bastante extenso sobre altas de usuario Código HTML: <form name"Formulari" method= "post" onSubmit= "return validar(this)" action"alta.php"> Nombre <input name= "dbnombre" > Apellido ...
  #1 (permalink)  
Antiguo 15/10/2010, 10:44
 
Fecha de Ingreso: noviembre-2002
Mensajes: 130
Antigüedad: 21 años, 5 meses
Puntos: 0
validar varios campos iguales

Tengo un formulario bastante extenso sobre altas de usuario
Código HTML:
<form name"Formulari" method="post"  onSubmit="return validar(this)" action"alta.php">
Nombre <input name="dbnombre">
Apellido <input name "dbapellido">
etc...
</form>

Lo valido mediante Javascript si està lleno el campo
function validar() {
if (document.Formulari.dbnombre.value == "") {alert("Falta nombre");document.Formulari.nom.focus();;return (false);}
if (document.Formulari.cognoms.value == "") {alert("Falta Apellido");document.Formulari.cognoms.focus();return (false);
}
Hasta aquí bien.
El problema es que mediante PHP duplico todo el formulario para crear un nuevo usuario y me crea los mismos campos con los mismos nombres que posteriormente insertaré en una base de datos. Estos formularios pueden crecer de 1 a 20 formularios separados por paneles.

Pero al tener el formulario el mismo nombre y los campos los mismo nombre no tengo manera de hacer que se validen los campos obligatorios.

Alguna ayuda??

Gracias de antemano
  #2 (permalink)  
Antiguo 15/10/2010, 12:24
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: validar varios campos iguales

Podrías usar un contador que vaya aumentando con cada nombre del campo, para que te quedara dbnombre0, dbnombre1, dbnombre2, ..., dbnombreN . Entonces haces un for con getElementsByName() y vas recorriéndo los campos que se llamen así. Ej:
Código Javascript:
Ver original
  1. function validar(){
  2.  for(i=0;obli=document.getElementsByName('dbnombre'+i)[0];i++){
  3.   if(obli.value==''){
  4.    alert('Vacío');
  5.    obli.focus();
  6.    return false;
  7.   }
  8.  }
  9. }
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #3 (permalink)  
Antiguo 15/10/2010, 14:14
 
Fecha de Ingreso: septiembre-2004
Ubicación: La Plata Argentina
Mensajes: 128
Antigüedad: 19 años, 7 meses
Puntos: 9
Respuesta: validar varios campos iguales

Hola Faser.

Si duplicas TODO el form, deberias indexar el nombre de cada formulario (puedes usar el metodo que sugiere _cronos ) y no los campos.
Me intriga para que quieres duplicar los form (para cargar varios usuarios y mantener los datos cargados a la vista del dataentry ?) Porque en ese caso te convendria usar edicion en una ventanita que es mas amigable.

saludos
  #4 (permalink)  
Antiguo 16/10/2010, 10:30
 
Fecha de Ingreso: noviembre-2002
Mensajes: 130
Antigüedad: 21 años, 5 meses
Puntos: 0
Respuesta: validar varios campos iguales

Gracias _cronos2.
Miraré de hacer lo que me comentas.. Ya te cuento com va.

Por cierto "sysmadryn", te cuento por que razón lo hago así.
las altas y bajas las gestionará una Administrador de la empresa. este introducirá las altas de los estudiantes que van ha realizar el curso, y es posible que haya uno o varios.
Si hay uno, no hay problema por que lo valida correctamente. Pero si hay más me surge el problema de la validación.

Ya pensé en hacer una ventana emergente para editar cada alumno, pero el cliente lo quiere todo en la misma página para gestionarlo.
Además necesito el mismo form porque son los mismos campos que se introducen en la Base de datos.

En fin, pruebo esto y ya os comento.

Gracias
  #5 (permalink)  
Antiguo 16/10/2010, 12:26
 
Fecha de Ingreso: noviembre-2002
Mensajes: 130
Antigüedad: 21 años, 5 meses
Puntos: 0
Respuesta: validar varios campos iguales

Muy buena
_cronos, me ha funcionado el tal como me decias. Ahora bien me aparece otro error a la hora de guardar las altas o modificaciones de los campos.

Utilizo un webservice donde recojo via POST los datos tal como así

$sql="UPDATE bonificacion SET
nom='".str_replace("'", '\\\'', $_POST['nom'])."',
cognoms='".str_replace("'", '\\\'', $_POST['cognoms'])."',
etc...
WHERE id='".$_POST['idd']."';";

De esta manera que me comentas tendria que hacer alguna comprobación de cada uno de los nombres que recibe ya que llevan una coletilla tipo nom0, nom1, nom2... No sebría como hacerlo...

sysmadryn. Cómo sería el código que me comentas de indexar el formulario. De esta manera no tendría que replicar cada uno de los nombres a la hora de hacer el INSERT en la Base de Datos.

Gracias de nuevo
  #6 (permalink)  
Antiguo 16/10/2010, 12:32
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.062
Antigüedad: 13 años, 10 meses
Puntos: 310
Respuesta: validar varios campos iguales

Si vas a insertarlo en la base de datos tendrás que recibirlo como un array de campos, así cambia los nombres y ponlos todos como nom[], cognom[], etc... y el id como nom0, nom1, nom2, etc... y en vez de usar getElementsByName() házlo así:
Código Javascript:
Ver original
  1. function validar(){
  2.  for(i=0;obli=document.getElementById('nom'+i);i++){
  3.   if(obli.value==''){
  4.    alert('Vacío');
  5.    obli.focus();
  6.    return false;
  7.   }
  8.  }
  9. }
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #7 (permalink)  
Antiguo 16/10/2010, 13:19
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: validar varios campos iguales

puedes validarlo por el nombre, en vez de por la id. algo que me llama la atención es que dices
Cita:
Estos formularios pueden crecer de 1 a 20 formularios separados por paneles.
con el código que te proporcionan, puedes validarlos individualmente, pero no podrás validarlo todos al unisono, a no ser que te no te hayas explicado bien. por otro lado no te será tan sencillo actualizar los campos, solamente recogiendo los valores ya que los estás enviando como un array asociativo. tendrás que usar la función implode()
  #8 (permalink)  
Antiguo 17/10/2010, 06:46
 
Fecha de Ingreso: noviembre-2002
Mensajes: 130
Antigüedad: 21 años, 5 meses
Puntos: 0
Respuesta: validar varios campos iguales

Bueno..... Gracias a todos. Con la ayuda de unos/as y otros/as ho podido lograr lo que me proponia. Eso si, es una tarea complicada y larga de programar.
En fin les dejo como va a quedar mi formulario des pues de la ayuda obtenida.

La funcion Javascript quedaría así:

Código HTML:
function validar(){
 for(i=0;obli=document.getElementById('nom'+i);i++){
   if(obli.value==''){
    alert('Campo Nombre Obligatorio');
    obli.focus();
	obli.className = "required";
    return false;
   }
 }
}
"Aqui voy repitiendo el for para cada elemento requerido"... un curro enorme ya que son como 20 campos del formulario


El formulario quedaría así:
Código HTML:
<form name="Formulari" action="Webservice.php?Action=UpdateFormulario" method="post"  onSubmit="return validar(this)">
<input name="nom[]" class=casillas id="nom0" size="50" style="width:280px" value="<? print $bonificacio['nom'];?>">
</form> 

Y aquí el Webservice donde hago el update o el insert a la base de datos.

Código PHP:
case "UpdateFormulario":
    
$sql="UPDATE bonificacio SET ";
        
$listanom = array();
        foreach( 
$_POST['nom'] as $clave ) {
               
$listanom[] = "" $clave "";
        }
        
$listanom implode","$listanom );
        
        
$listacognoms = array();
        foreach( 
$_POST['cognoms'] as $clave ) {
               
$listacognoms[] = "" $clave "";
        }
        
$listacognoms implode","$listacognoms );

    
$sql.="
    nom='"
.str_replace("'"'\\\''$listanom)."',
        cognoms='"
.str_replace("'"'\\\''$listacognoms)."'
        WHERE id='"
.$_POST['idd']."';";
        
$db->db_query($sql); 
Eso si, para cada uno de los campos hago un foreach y un IMPLODE.

Con esto ya me basta. Si ven algo que se puede optimizar, bien venido será.

Un saludo y gracias a todos por la ayuda.

Etiquetas: campos, iguales
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 16:00.