Comunidad de diseño web y desarrollo en internet online

Problema al validar correo en formulario

Citar            
MensajeEscrito el 21 Ago 2012 03:11 pm
Estoy realizando un formulario en el cual valido una serie de campos y "sin problemas" excepto para validar que el correo sea válido (esté el arroba y el punto) y como sacar al final si es todo válido un mensaje com oque el correo está bien enviado. He mirado algunos mensajes por aquì pero no acaba de quedarme claro

enviar_btn.addEventListener(MouseEvent.CLICK,funcionvalidar);

//Función que se ejecuta al presionar el botón btEnviar.


function funcionvalidar(event:MouseEvent):void {

//Creo variables de los campos.

var misVariables:URLVariables = new URLVariables();

misVariables.nombre = nombre_txt.text;
misVariables.mail = mail_txt.text;
misVariables.mensaje = mensaje_txt.text;


//El siguiente if filtra que el mensaje no se entregua si en la casilla nombre no hay nada escrito

if(nombre_txt.text.length<1)

{ gotoAndStop (2);
}


//El else reanuda la ejecución del programa una vez este escrito el comentario
//Compruebo que hay algo escrito en el correo


else {
if(mail_txt.text.length<1)

{ gotoAndStop (3);

}


// compruebo si hay una arroba y solo una

else {


{ gotoAndStop (4);

}


// Compruebo que hay mensaje escrito para enviarse

else {
if(mensaje_txt.text.length<1)

{ gotoAndStop (5);

}


// Con todos los datos metidos saco un mensaje por pantalla

else {


}
}
}
}


Muchas gracias por todo de antemano¡¡

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 21 Ago 2012 06:35 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 21 Ago 2012 11:32 pm
Si no entiendo mal pues ( acabo de empezar a programar en as3 )

1 - Tengo que generar una función nueva en el código mediante la cual compruebe si el mail es correcto o no

2 - Llamo a la función en el punto deseado

// compruebo si hay una arroba y solo una

else {

FUNCION NUEVA

{ gotoAndStop (4);

}

3 - Para enviar un mensaje en el cual saque el valor "nombre_txt_text" en el último fragmento tendría que sacar por pantalla

else {

resultado_txt.text == " Gracias nombre_txt.text por enviar su e-mail"

} ????


Gracias por todo y siento un poco "la falta de conocimiento"

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Ago 2012 12:55 am
Usando la función sería

Código ActionScript :

 function checkEmail ( s:String ):Boolean
     {
          var regExpPattern : RegExp =
/^[0-9a-zA-Z][-._a-zA-Z0-9]*@([0-9a-zA-Z][-._0-9a-zA-Z]*\.)+[a-zA-Z]{2,4}$/;

          if( s.match(regExpPattern) == null )
          {
               return false;
          }
          else
          {
               return true;
          }
     }
if(checkEmail(email.text)) {
  //esta bien
} else {
  //esta mal
}


Puedes hacer lo que quieras dentro del if else, ya sea gotoAndStop, mostrar mensaje de error, etc

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos



Ultima edición por solisarg el 22 Ago 2012 09:25 am, editado 1 vez

Argentina

firefox
Citar            
MensajeEscrito el 22 Ago 2012 08:19 am
Gracias, por la ayuda. Lo he hecho tal y como me has dicho, al principio del programa he insertado el código


var misVariables:URLVariables = new URLVariables();

misVariables.nombre = nombre_txt.text;
misVariables.mail = mail_txt.text;
misVariables.mensaje = mensaje_txt.text;


// Funcion comprueba mail

function compruebamail ( s:String ):Boolean
{
var regExpPattern : RegExp =
/^[0-9a-zA-Z][-._a-zA-Z0-9]*@([0-9a-zA-Z][-._0-9a-zA-Z]*\.)+[a-zA-Z]{2,4}$/;

if( mail_txt.match(regExpPattern) == null )
{
return false;
}
else
{
return true;
}
}


Y en la parte correspondiente del programa he llamado a la función

if (compruebamail(mail_txt.text))

{ gotoAndStop (4);

}

Sin embargo me da un problema de ejecución


Escena 1, Capa 'Acciones', Fotograma 1, Línea 20 1061: Llamada a un método match posiblemente no definido mediante una referencia con tipo estático flash.text:TextField.

Correspondiente a:

if( mail_txt.match(regExpPattern) == null )

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Ago 2012 09:26 am
Había un error en la función que no estaba usando el argumento (ese error estaba en el original, me paso por copiar y pegar sin mirarlo) He editado mi mensaje y corregido la función, echale un ojo

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 22 Ago 2012 11:08 am
Perfecto, ya no me da fallo de compilación, si bien no me detecta bien que no hay "@" en el mail, probablemente no haya puesto bien la ejecución dentro del código

DENTRO DE LA FUNCION COMPROBAR MAIL:

// compruebo si hay una arroba y solo una

else {
if (compruebamail(mail_txt.text))

{ gotoAndStop (4);

}

Gracias Jorge¡¡

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Ago 2012 05:23 pm
No hace falta comprobar si hay una sola arroba, el método usa regexp para validar el email

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 22 Ago 2012 06:49 pm
Toda la razón he quitado todo eso y las condiciones que había y la verdad que no se muy bien porque no me hace la parte de identificar el correo como válido. Te pongo el código por si le puedes echar un vistazo y decirme. Siento las molestias ;)

enviar_btn.addEventListener(MouseEvent.CLICK,funcionvalidar);


//Creo variables de los campos.

var misVariables:URLVariables = new URLVariables();

misVariables.nombre = nombre_txt.text;
misVariables.mail = mail_txt.text;
misVariables.mensaje = mensaje_txt.text;





//Función que se ejecuta al presionar el botón btEnviar.

function funcionvalidar(event:MouseEvent):void {



//El siguiente if filtra que el mensaje no se entregua si en la casilla nombre no hay nada escrito

if(nombre_txt.text.length<1)

{ aviso_txt.text= "Por favor ingrese su nombre";
}

//El else reanuda la ejecución del programa una vez este escrito el comentario
//Compruebo que hay algo escrito en el correo

else { aviso_txt.text="";

if(mail_txt.text.length<1)

{ aviso_txt.text="Por favor ingrese un mail";

}


}
}


// Funcion comprueba mail

function compruebamail ( s:String ):Boolean
{
var regExpPattern : RegExp = /^[0-9a-zA-Z][-._a-zA-Z0-9]*@([0-9a-zA-Z][-._0-9a-zA-Z]*\.)+[a-zA-Z]{2,4}$/;

if( s.match(regExpPattern) == null )
{
return false;
}
else
{
return true;
}
}

if(compruebamail(mail_txt.text)) {

aviso_txt.text="Por favor ingrese un mail VALIDO";

} // Compruebo que hay mensaje escrito para enviarse

else { aviso_txt.text="";

if(mensaje_txt.text.length<1)

{ aviso_txt.text=""
aviso_txt.text="Por favor ingrese un mensaje.";

}

// Con todos los datos metidos saco un mensaje por pantalla

else {
mensajecorrecto.text=" Gracias nombre_txt.text por enviar su correo"
gotoAndStop (2);

}


}

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Ago 2012 06:54 pm
Ok, no le pongas colores a tu código, es ilegible, sigue estos simples pasos:

1. Dale formato, por ejemplo si usas Flash, hay un botón en el panel de acciones que es para chequear la sintaxis y le da automáticamente formato, otros IDE suelen tener la misma función, luego lo copias y lo pegas en este POST
2. Pon los tags [ as ] [ /as ] al principio y al final, pero sin los espacios que los he agregado para que lo veas, esto colorear[a automaticamente tu código y mejorará su visibilidad

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 22 Ago 2012 07:26 pm

Código ActionScript :

 enviar_btn.addEventListener(MouseEvent.CLICK,funcionvalidar);


//Creo variables de los campos.

var misVariables:URLVariables = new URLVariables();

misVariables.nombre = nombre_txt.text; 
misVariables.mail = mail_txt.text; 
misVariables.mensaje = mensaje_txt.text;





//Función que se ejecuta al presionar el botón btEnviar.

function funcionvalidar(event:MouseEvent):void { 
 


//El siguiente if filtra que el mensaje no se entregua si en la casilla nombre no hay nada escrito

if(nombre_txt.text.length<1) { 

   aviso_txt.text= "Por favor ingrese su nombre"; 
   
   }
   
   
      else {  aviso_txt.text="";
      
            if(mail_txt.text.length<1)

            {  aviso_txt.text="Por favor ingrese un mail";
         
            }
            
            // compruebo si hay una arroba y solo una
            
            }
      }
      
// Funcion comprueba mail

function compruebamail ( s:String ):Boolean
     {
          var regExpPattern : RegExp = /^[0-9a-zA-Z][-._a-zA-Z0-9]*@([0-9a-zA-Z][-._0-9a-zA-Z]*\.)+[a-zA-Z]{2,4}$/;

          if( s.match(regExpPattern) == null )
          {
               return false;
          }
          else
          {
               return true;
          }
     }

if(compruebamail(mail_txt.text)) {
   
   aviso_txt.text="Por favor ingrese un mail VALIDO";
                  
} // Compruebo que hay mensaje escrito para enviarse
                        
else {    aviso_txt.text="";
                        
   if(mensaje_txt.text.length<1)

   {    aviso_txt.text=""
      aviso_txt.text="Por favor ingrese un mensaje."; 
         
   }
                           
   // Con todos los datos metidos saco un mensaje por pantalla
                           
      else {    
          mensajecorrecto.text=" Gracias nombre_txt.text por enviar su correo"
          gotoAndStop (2);
         
         }
                           
                           
   } 


Así creo que mejor jeje

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Ago 2012 07:55 pm
Hay que evitar el spaghetti code. Chequea todas las condiciones y genera un mensaje de error, ejemplo>

Código ActionScript :

var error:Sttring = ""
if(nombre.text=="") error +="Debe poner su nombre"
if(!compruebamail (email.text)) error +="Debe poner un email válido"
if(mensaje.text=="") error +="Debe poner un mensaje"
if(error=="") //envia
else error.text = error


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 22 Ago 2012 08:37 pm
Lo he hecho tal y como me has comentado

Código ActionScript :

 function funcionvalidar(event:MouseEvent):void { 

var error:String = ""

if(nombre_txt.text=="") error +="Por favor ingrese su nombre"
if(mail_txt.text=="") error +="Por favor ingrese su nombre"
if(!compruebamail (mail_txt.text)) error +="Por favor ingrese un mail VALIDO"
if(mensaje_txt.text=="") error += "Por favor ingrese un mensaje."
if(aviso_txt.text=="") {
gotoAndPlay (2)   }

//envia

else aviso_txt.text = error

} 


Y ahora cada vez que meto un dato y le doy al botón Enviar me borra todos los datos, la verdad que me está volviendo un poco "loco" el programilla jeje

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Ago 2012 08:47 pm
El programilla anda bien, al que no veo muy suelto programando es a ti.

Esto

if(aviso_txt.text=="") gotoAndPlay (2)

Debería decir

if(error=="") gotoAndPlay (2)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 22 Ago 2012 09:01 pm
Es verdad, lo siento al copiar, pegar y probar se me había pasado totalmente. Ya me funciona correctamente, lo único es por ejemplo que una vez que me saca el mensaje por el error, me duplica el mensaje en la barra, es decir la ocupa entera en vez de poner tan solo lo que hay entre comillas

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 22 Ago 2012 09:08 pm
Agrega al principio de la función

aviso_txt.text = ""

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

chrome
Citar            
MensajeEscrito el 23 Ago 2012 10:45 am
Lo tenía ya puesto, ya lo he solucionado gracias ;)

Solo me queda poder sacar por pantalla un mensaje cuando lo envío que sea tal que

" Gracias nombre_txt.text por enviar el correo"

En el cual nombre_txt.tex saque el valor guardado

Muchas gracias¡¡ Me ha sido de mucha ayuda

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Ago 2012 06:36 pm
En el frame de envio copias el contenido del campo de texto en una variable

var nombre:String = nombre_txt.text

Luego usas

" Gracias "+nombre+" por enviar el correo"

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Ago 2012 06:56 pm
Entonces si no entiendo mal:

1º Creo un fotograma clave en la capa acciones en el correspondiente al fotograma (6) por ejemplo que es en el que saldrá la confirmación de envio

2º En el fotograma correspondiente incluyo en el código lo siguiente

Código ActionScript :

 var nombre:String = nombre_txt.text 


3º Esta parte es lo que no me queda muy clara, en el mismo fotograma de acciones pues asocio a mi campo de texto dinámico el texto?¿ Es decir:

envio_txt.text=="Gracias"+nombre+"por enviar el correo"


Código ActionScript :

var nombre:String = nombre_txt.text

enviado_txt.text=="Gracias"+nombre+"por enviar el correo"



Si es en ese caso me sale lo siguiente:

Código ActionScript :

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
   at Formulario_version_4_fla::MainTimeline/frame6()
   at flash.display::MovieClip/gotoAndStop()
   at Formulario_version_4_fla::MainTimeline/funcionvalidar()


Muchas gracias por todo y siento tantas molestias recien estoy empezando ahora

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Ago 2012 07:03 pm
EN el frame donde envías toda la data y donde existe el campo de texto nombre_txt

Código ActionScript :

 var nombre:String = nombre_txt.text 


En el frame donde quieras mostrar el mensaje (un solo signo igual, no dos)

Código ActionScript :

enviado_txt.text="Gracias"+nombre+"por enviar el correo"


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Ago 2012 07:12 pm
Ya pero si en ese frame en la capa acciones copio tan solo

Código ActionScript :

enviado_txt.text="Gracias"+nombre+"por enviar el correo"


daría fallo por una propiedad nombre no definida, de modo que tendría que declarar una variable string a la que asociar mi texto dinámico enviado_txt.text no?¿

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Ago 2012 07:19 pm

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Ago 2012 07:30 pm
Vale ya está jeje ;)

- Eso en el fotograma 2:

Código ActionScript :

enviar_btn.addEventListener(MouseEvent.CLICK,funcionvalidar);


//Creo variables de los campos.

var nombre:String = nombre_txt.text


En el fotograma 6:

Código ActionScript :

 enviado_txt.text="Gracias" +nombre+ "por enviar el correo" 


Si bien en la respuesta me sale

"Graciaspor enviar el correo" así pegado y sin el nombre

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Ago 2012 07:42 pm
Esto

var nombre:String = nombre_txt.text

Lo tienes que ejecutar luego de que escribes algo en el campo nombre, sino copia la nada misma que es lo que esta mostrando el mensaje. Considera declararlo asi

var nombre:String

Copiarlo en la función validar, que se ejecuta cuando ya todo el formulario ha sido llenado

nombre = nombre_txt.text

Lo declaras fuera de la función, sino el scope es local a la función y no existirá en el fotograma 6

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Ago 2012 07:54 pm
Anidas if/else al infinito. Te sugeriria que insistas en las buenas practicas de programación, ver como otros arman las estructuras, etc. Si no sabes de programacion, buscar algun libro de primeros pasos, etc

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Ago 2012 07:54 pm
Tal y como me dices la cosa quedaría pues de la siguiente manera:


Código ActionScript :

function funcionvalidar(event:MouseEvent):void { 

var nombre:String]

if(nombre_txt.text=="") gotoAndStop (2) 
else {
   if(mail_txt.text=="")gotoAndStop (3)
      else {
         if(!compruebamail (mail_txt.text)) gotoAndStop (4)
            else {
               if(mensaje_txt.text=="")gotoAndStop (5)
                  else {
                     if(mensaje_txt.text.length>1)gotoAndStop (6)
                     
                  }
            }
      }
}
nombre = nombre_txt.text;
} 


En este caso me sale que

Código ActionScript :

Escena 1, Capa 'Acciones', Fotograma 6, Línea 1   1120: Acceso a una propiedad nombre no definida.

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 23 Ago 2012 07:56 pm
Lo declaras fuera de la función, sino el scope es local a la función y no existirá en el fotograma 6


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 23 Ago 2012 08:09 pm
Muchas gracias por todo de verdad¡¡¡

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 26 Ago 2012 07:03 pm
Buenas¡¡ Mira estuve haciendo algunos cambios que se me pidieron, entre ellos que en Dreamweaver colocara el código correcto para que llegaran los datos a un correcto real y todo eso está solucionado. El tema de los datos del formulario perfecto, pero una vez relleno todo y le doy a enviar me aparece el siguiente "problema de salida"

CODIGO

Código ActionScript :

 stop();

import flash.events.*;
import flash.net.URLLoader;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequest;

var variables:URLVariables = new URLVariables();
var varSend:URLRequest = new URLRequest("formulariocontacto.php");
var varLoader:URLLoader = new URLLoader;

varSend.method = URLRequestMethod.POST;
varSend.data = variables;


estado_txt.text = "";

enviar_btn.addEventListener(MouseEvent.CLICK, validaryEnviar);


function validaryEnviar(event:MouseEvent):void{
   
   if(!nombre_txt.length) {
   estado_txt.text = "Por favor ingrese su nombre.";
   
   } else if(!mail_txt.length) {
      estado_txt.text = "Por favor ingrese un mail";
      
      } else if(!validarMail(mail_txt.text)) {
         estado_txt.text = "Por favor ingrese un mail VALIDO";
         
         } else if(!msg_txt.length) {
            estado_txt.text = "Por favor ingrese un mensaje.";

         } else {
         estado_txt.text = "Gracias " + nombre_txt.text + ", su mensaje se envio con exito!";
         
         variables.nombreUsuario = nombre_txt.text;
         variables.mailUsuario = mail_txt.text;
         variables.msgUsuario = msg_txt.text; varLoader.load(varSend);
         
         gotoAndStop (2);
      }
}

function validarMail(str:String):Boolean {
var pattern:RegExp = /(\w|[_.\-])+@((\w|-)+\.)+\w{2,4}+/;
var result:Object = pattern.exec(str);
if(result == null) {
return false;
}
return true;
} 


SALIDA:

Código ActionScript :

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
   at Formulario_version_2_fla::MainTimeline/frame2()
   at flash.display::MovieClip/gotoAndStop()
   at Formulario_version_2_fla::MainTimeline


Puede ser porque no he colocado bien la dirección del archivo .php?¿ Es decir:

Código ActionScript :

var varSend:URLRequest = new URLRequest("formulariocontacto.php");


La zona entre "" no está bien puesta. Ahí he indicado el nombre del archivo, haría falta también la ruta?¿

Por eleingeniero

15 de clabLevel



 

chrome
Citar            
MensajeEscrito el 27 Ago 2012 02:38 pm
Lo tienes que probar desde el servidor, sino el PHP no se ejecuta. Si no tienes servidor local y lo quieres probar, usa una ruta absoluta

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.