Foros del Web » Programando para Internet » Javascript »

Comprobar duplicados en text’s de distintos formularios

Estas en el tema de Comprobar duplicados en text’s de distintos formularios en el foro de Javascript en Foros del Web. Acá va el nuevo "mangazo" Estoy haciendo una aplicación que se trata de un pequeño "sistema amigable" de mantenimiento de información. Creo que es necesario ...
  #1 (permalink)  
Antiguo 04/03/2004, 12:41
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años
Puntos: 535
Comprobar duplicados en text’s de distintos formularios

Acá va el nuevo "mangazo"


Estoy haciendo una aplicación que se trata de un pequeño "sistema amigable" de mantenimiento de información. Creo que es necesario que lo vean porque va a ser más fácil para mí explicarlo. Pueden verlo aquí.

Si hacen clic sobre la flechita verde (gentilmente cedida por los desarrolladores del DWMX ) del apartado Teléfonos, aparecerá un formulario con los teléfonos que actualmente tiene dicho municipio (que en el ejemplo son pocos, pero en un caso real puede tener muchos más que esos). Ok, si ahora hacen clic sobre la imagen con un "+" color naranja, aparece un formulario para ingresar hasta 5 nuevos teléfonos.

Tengo en ese formulario para insertar teléfonos un checkbox que dice "comprobar duplicados", pero lo pensé para que sea una operación server-side sólo en caso que se encuentre marcado. Y bueno, no quiero hacerlo server-side porque eso implicaría hacer un "SELECT FROM TABLA" por cada teléfono ingresado, comprobar si existe y posteriormente hacer o no el INSERT… lo que recargaría de trabajo al servidor.

La "genial" (pero engorrosa para mí) idea sería que, al onblur de cada text, se lance una función que determine si el nuevo teléfono escrito ya se encuentra en el otro formulario (el que trae los datos desde la BD).

Para complicar un poco más las cosas, puede ocurrir que un teléfono esté escrito como 011-4339-0800 y el data-entry haya tipeado (011) 4339-0800 . En realidad, el teléfono es el mismo pero escrito con otros criterios. Entonces la comparación debería efectuarse luego de reemplazar de ambos lados los caracteres (, ), - y ESPACIO.

La verdad que no sé por donde comenzar a hacer esto… y si lo comienzo, no sabría cómo terminarlo

Si alguien se anima a ayudarme, le ofrezco los nombres de los formularios y de los text’s:


El formulario que presenta los teléfonos actuales se llama Telefonos y sus text’s, al ser dinámicos, se llaman Telefono<% = iTelefono %>. Dónde la variable de ASP, iTelefono, toma los valores desde 1 hasta N

El formulario de inserción de teléfonos se llama InsTel y sus text’s se llaman desde Tel1 hasta Tel5.


Bueno, gracias al menos por tomarse la molestia de leer todo esto y saludos


PD: Pueden modificar, eliminar y agregar tantos datos como quieran. La BD que allí se encuentra y sus datos son meramente ilustrativos (y de paso me hacen el trabajito de beta-testers )

Última edición por AlZuwaga; 04/03/2004 a las 12:46
  #2 (permalink)  
Antiguo 04/03/2004, 13:23
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 3 meses
Puntos: 45
solucion chapuza

Bueno yo tengo una solucion chapuza para esas cosas. Meter el comprobador de duplicados en un iframe. Para hacerlo mas bonito (que tienes la pagina muy decorada ), podrias incluir una capa que diga "comprobando duplicaciones..." o algo asi en el cuando salte el onblur de una caja de texto. Te explico mas o menos como seria:

En el div para insertar nuevos telefonos, hay muchas cajas de texto. En las de la izquierda que son donde se incluyen los telefonos, una buena opcion seria validarlos con javascript primero (mas que nada por no perder tiempo, aunque seria muy dificil con telefonos de diferente formato). Bueno una vez hecho esto, en un iframe oculto en dicho div, se cargaria la pagina comprobacion.asp?telf=468465&campo=2, o algo asi, incluyendo el telefono y el numero de campo por url. (Ahora para hacerlo mas bonito, y hasta que se cargue dicha pagina podrias poner en el div la informacion "comprobando duplicaciones" que te he dicho).

En esta pagina comprobacion.asp, compruebas si el telefono existe conectando a la base de datos y demas, y tanto en caso positivo como en caso negativo, deberias mandar eso a la pagina un nivel arriba (al div donde se insertan los telefonos). Esto lo podrias hacer mediante javascript simplemente, para no romperte la cabeza. Cada vez que vayas a comprobar (ahora ablamos de la ventana padre), asignas en un array que tenga tantos elementos como campos una variable de tipo boleano (true o false). Mostrarias el div de comprobando indefinidamente, hasta que dicha variable sea cambiada por el iframe (top.comprobaciones[x]=true), entonces harias lo que quisieses con el resultado.



Bueno es un poco complicado pero se puede hacer. Para que no haya sustos, como la carga durara un par de segundos, en vez de un iframe que haga todo, serian bueno tantos como campos haya en el div (5), asi podrian trabajar dos a la vez.


Es simplemente una idea, pero se puede hacer. Si te da problemas dime y a ver si te puedo ayudar.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #3 (permalink)  
Antiguo 04/03/2004, 13:46
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 23 años
Puntos: 772
Hola, dazuaga.

Suponiendo que la tabla sea algo así:

<table id="telefono">

y que el teléfono esté en la primera columna, puedes averiguar los valores con este código:
Código PHP:
elem=document.getElementById('telefono');
fila=elem.getElementsByTagName('tr');
for(
i=0;i<fila.length;i++)
    
tlf=fila[i].childNodes[0].innerHTML;
   
//Aquí haces las comprobaciones 
Bueno... Solo es una idea, así en plan rápido.

Saludos,
  #4 (permalink)  
Antiguo 04/03/2004, 14:05
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 3 meses
Puntos: 45
Bueno para las comprobaciones yo lo primero que haria seria dividir el script en todos los casos posibles (ojo, no se si hay muchos, cuento unos cinco (quitando espacios en los que no importa, da igual poner 123 145 145 que 123 14 51 45 que 123145145) supongo que no habra tantos). Y una vez divididos los casos analizarlos con expresiones regulares. Para este caso por ejemplo seria muy facil, un numero que se repite 9 veces. Algunos pueden ser mas complicados, pero todo es cuestion de ir poco a poco..
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 04/03/2004, 14:05
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años
Puntos: 535
derkenuke, gracias por la respuesta (que es casi tan extensa como mi pregunta ). No es una mala idea, pero la verdad es que quisiera evitar las comprobaciones contra el servidor. Más que nada, porque los datos a comprobar ya están presentes en el cliente. Entonces, para qué validarlos en el servidor?


JavierB, los teléfonos no están en una tabla. Bueno, en realidad, si.. están en un form que contiene una tabla cuyas celdas de la primer columna contiene cada una un text con el número de teléfono como value. Aunque tu código me está dando algunas ideas (que voy a intentar materializar )

Les aviso como va la cosa.

Gracias
  #6 (permalink)  
Antiguo 04/03/2004, 14:11
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 21 años, 3 meses
Puntos: 45
Ok, es que simplemente pensaba que querias validar si los telefonos que introducias ya existian en una base de datos. ¿Entonces quieres comprobar si se han duplicado entre los mismos textbox del div que muestra el formulario y de la pagina principal?
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #7 (permalink)  
Antiguo 04/03/2004, 15:46
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años
Puntos: 535
<--- Llantos de emoción.



Gracias a todos, en especial a JavierB quién con "solo una idea en plan rápido" me abrió la cabeza para llegar a una (por el momento) solución definitiva.

También debo agradecer a:

- Cain por preguntar cómo "Remplazar subcadena1 por subcadena2 en cadena"
- Tunait por responderle.
- Carlitos por responderme en "Validador de URL's" (de donde he utilizado parte del código para orientarme en éste)
- y a mi madre por traer a este mundo a tan hermoso y sobre todo modesto ser



Bueno, suficientes estupideces por el momento. Al final, el script me quedó así:



Código PHP:
function duplicadosTel(Este)
{
var 
Este Este.value;
    
Este=Este.replace(/-/g,"");
    
Este=Este.replace(/(/g,"");
    
Este=Este.replace(/)/g,"");
    
Este=Este.replace(/ /g,"");

var 
parseInt(document.Telefonos.CantidadTel.value);
    for (
11i++){
        
elem=eval("document.Telefonos.Telefono" ".value");
        
elem=elem.replace(/-/g,"");
        
elem=elem.replace(/(/g,"");
        
elem=elem.replace(/)/g,"");
        
elem=elem.replace(/ /g,"");
            if (
elem == Este)
            {
                
alert("Este teléfono ya existe!!!")
            }
// if

    
}// for


}// function duplicadosTel 

Y la llamo con onBlur="duplicadosTel(this);" desde cada text del formulario de alta de teléfonos.

Es la primera vez que un script JS me funciona a la primera prueba


Gracias
  #8 (permalink)  
Antiguo 04/03/2004, 15:53
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años
Puntos: 535
Hay algo raro con el vBTag [ PHP ].

Al hacer el replace de "(" y ")" coloqué el caracter de escape pero no se ve.

El código está así:

elem=elem.replace(/\(/g,"");
elem=elem.replace(/\)/g,"");
__________________
...___...
  #9 (permalink)  
Antiguo 05/03/2004, 02:09
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 23 años
Puntos: 772
Hola de nuevo.

Después de la idea rápida, vamos con una un poco más lenta.

function duplicadosTel(Este)
{
var Este = Este.value;
Este=Este.replace(/\D/g,'')
var n = parseInt(document.Telefonos.CantidadTel.value);
...

Saludos,
  #10 (permalink)  
Antiguo 05/03/2004, 10:11
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años
Puntos: 535
Ya entiendo. Para eliminar de un tiro todos los caracteres no-numéricos. Pero alguno podría tener un teléfono tipo 0800-333-BIRRA, por poner un ejemplo :P
__________________
...___...
  #11 (permalink)  
Antiguo 05/03/2004, 10:43
 
Fecha de Ingreso: marzo-2003
Ubicación: onde toy?
Mensajes: 1.437
Antigüedad: 21 años, 10 meses
Puntos: 9
ojj me encantó el formulario y los efectos de las flechas y todo eso...podrias explicar como lo hiciste??
__________________
Buena Vida...
Francisco
  #12 (permalink)  
Antiguo 05/03/2004, 11:06
Avatar de JavierB
Colaborador
 
Fecha de Ingreso: febrero-2002
Ubicación: Madrid
Mensajes: 25.052
Antigüedad: 23 años
Puntos: 772
Cita:
Mensaje Original por dazuaga
Ya entiendo. Para eliminar de un tiro todos los caracteres no-numéricos. Pero alguno podría tener un teléfono tipo 0800-333-BIRRA, por poner un ejemplo :P
No lo sabía. Aquí en España las birras no las usamos para el teléfono sino para beberlas, por ejemplo este fín de semana que ya tenemos aquí.

Saludos,
  #13 (permalink)  
Antiguo 05/03/2004, 11:08
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 24 años
Puntos: 535
BluesMan74 (perdón, nunca me acuerdo como se escribe tu nick): Son capas (<div>) que se muestran u ocultan al clickear determinada imagen. Eso para las ventanitas de "insertar...", para la lista que se expande o contrae, lo que hago es establecerle el alto a la capa: 100% al mostrar y 0px al ocultar.

Copiá el código fuente, pegalo en tu editor favorito y jugá un rato



JavierB: Era un simple ejemplo. Aunque me contaron que en la Ciudad de Rosario (Santa Fe - Argentina) existe un número similar al que podés llamar y te traen la ceveza a domicilio. Es fantástico jeje.

Bueno, voy a dejar de escribir porque ya me están dando ganas de comer unos panchos con una birrita

Última edición por AlZuwaga; 05/03/2004 a las 11:16
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 13:53.