Foros del Web » Programando para Internet » PHP »

Validación de URL y E-Mail

Estas en el tema de Validación de URL y E-Mail en el foro de PHP en Foros del Web. Como puedo validar las direcciones de correo electrónico y sitios webs, es decir si mi formulario tiene una url, lo que quiero es ver si ...
  #1 (permalink)  
Antiguo 10/10/2003, 22:42
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Validación de URL y E-Mail

Como puedo validar las direcciones de correo electrónico y sitios webs, es decir si mi formulario tiene una url, lo que quiero es ver si esta existe antes de introducirla a la BDatos para evitar luego otros problemas y lo mismo con las direcciones de email.

Salu2
__________________
Ing. Reynier Pérez Mira
  #2 (permalink)  
Antiguo 11/10/2003, 00:56
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
Código PHP:
<?php

$urlweb 
"http://www.yahoo.com";
$email "[email protected]";


//comprobacion si la direccoin web existe?
    
function url($urlweb)
    {
        
$fp = @fopen($urlweb,"r");

     if(
$fp){
         return 
true;

     }else{
         return 
false;

     }
        @
fclose($fp);
    }
        
$existe url($urlweb);
    if(
$existe){
        
echo 
"la direccion url es correcta<br>";

    }else{

echo 
"la direccion url no es correcta";

    exit;
}
//comprobacion si la direccin web existe?, fin, la url es buena



//funcion comprueba email si existe?,
function comprobar_mail($email){
  if (!
ereg("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$"$email)){// codigo de aceptacion de email, metodo de escritura correcta
      
return FALSE;
  } else {
       return 
TRUE;
  }
}
    if(
comprobar_mail($email)){

echo 
"Email Correcto, sale de aqui y sigue...";

    }else{

echo 
"email mal escrito";

    exit;
// salimos
}
//funcion comprueba email, fin, el email es correcto


?>
creo que esta bastante claro...
__________________
3w.valenciadjs.com
3w.laislatv.com
  #3 (permalink)  
Antiguo 11/10/2003, 14:23
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 5 meses
Puntos: 16
Hola,

Solo aclarar que el codigo del email solo valida que el formato es valido, no que existe.

Para intentar comprobar que un email existe te deberias conectar al servidor de correo destino y preguntarle si existe la cuenta. Aun asi es posible que te conteste que si y no exista.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #4 (permalink)  
Antiguo 11/10/2003, 19:45
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Es muy difícil comprobar si una dirección e-mail existe. Una alternativa, dependiendo de algunos factores como la complejidad del servicio que ofreces, puede ser la activación de la cuenta vía email. (Eso donde para completar su inscripción los usuarios reciben un email enviado por ti, el cual contiene por ejemplo:su contraseña o un link que pasa algunas variables por URL). Esa forma es segura. Pero depende de qué tan importante es para tu usuario incluirse en tu BD.
saludos
  #5 (permalink)  
Antiguo 11/10/2003, 21:26
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
mm bueno . no es dificil jpinedo . sólo que es algo más complicado que por ejemplo validar si existe un dominio ...

Al validar una cuenta de e-mail se ha de:

1) ver si el domino (lo que va despues de @.....) tiene registros MX .. De esta forma ya se puede ir filtrando máils ...
2) ver si ese usuario (lo que va antes de [email protected] ) existe en ese servidor POP/IMAP ... Eso lo haces con el protocolo SMPT (simulando parte del proceso de entrega del e-mail) ... con sus comandos adecuados puedes "preguntar" si "fulanito" existe en ese servidor y el servidor POP/IMAP te dirá si existe o no ..

De todo esto tienen un tutorial en:
http://www.zend.com/zend/spotlight/ev12apr.php

(Ojo! que la función getmxrr() para obtener los registros MX de un domino no funciona en PHP bajo Windows).


-----

A todo esto.. si es una cuenta de e-mail tipo "web-mail" (hotmail, yahoo, etc) no servirá de mucho este método. Sólo es valido para cuentas POP.

Un saludo,

__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 11/10/2003 a las 21:31
  #6 (permalink)  
Antiguo 12/10/2003, 02:26
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
Cita:
(Ojo! que la función getmxrr() para obtener los registros MX de un domino no funciona en PHP bajo Windows).
xxxxxdddddd te las sabes todas xxxxxdddddd
__________________
3w.valenciadjs.com
3w.laislatv.com
  #7 (permalink)  
Antiguo 12/10/2003, 02:37
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
jajaj nuevo ..

Esto es como andar en bicicleta: una vez lees algo y (como es el caso) hacen alguna advertencia .. o lo pruebas y te das cuenta que no funciona dandote PHP algún mensajito de error caracteristico (y que suele el por qué ..). así que para otras veces y como aporte de "experiencia" .. Lo aviso simplemente (por que luego vienen las preguntas de "no me va" .. y la contra-pregunta de "y que S.O. usas" .. y .. al final usaba "windows" ..)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 12/10/2003, 02:52
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
sisisis si yo me he copiao hasta la page de este post por si acaso... xxxxddddd
__________________
3w.valenciadjs.com
3w.laislatv.com

Última edición por nuevo; 12/10/2003 a las 02:53
  #9 (permalink)  
Antiguo 12/10/2003, 16:49
 
Fecha de Ingreso: junio-2003
Mensajes: 31
Antigüedad: 14 años, 5 meses
Puntos: 0
..

nuevo una sugerencia el menu cuando pasas el raton por encima lo que sale arriba no se ve bien ¬¬ no keda bien xD

otra cosa tu eres de la web esta?
www.valenciadjs.com

Es que lo digo por

Código:
$email = "[email protected]";
  #10 (permalink)  
Antiguo 12/10/2003, 18:25
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
jeje, eso es solo un nombre que puse con phososhop jejej no es el original... si pulsas sobre el entraras en la web... aun estoy en tramites con el nombre,,, asi...q... de momomento se llama asi..
__________________
3w.valenciadjs.com
3w.laislatv.com
  #11 (permalink)  
Antiguo 12/10/2003, 20:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
PHP-ref .. nuevo ..

Comentarios personales .. please usen su sistema de MP (Mensajes privados).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 12/10/2003, 21:24
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Sonrisa Y si son Webmail??

Cita:
A todo esto.. si es una cuenta de e-mail tipo "web-mail" (hotmail, yahoo, etc) no servirá de mucho este método. Sólo es valido para cuentas POP.
Yo pregunto: ¿Y si se espera que la mayor parte de tus usuarios utilicen Hotmail o Yahoo?¿Existe forma de validar la cuenta?¿No es más seguro enviarle un mail con un link o una contraseña?... Digo, porque nunca se sabe dónde tienen su cuenta de correo los usuarios...
Saludos
  #13 (permalink)  
Antiguo 12/10/2003, 22:00
Avatar de Reynier  
Fecha de Ingreso: noviembre-2002
Ubicación: Por ahí en algún sitio
Mensajes: 1.844
Antigüedad: 15 años
Puntos: 1
Gracias a todos

Muchas gracias a todos ya compredí que debo hacer. Me fue de gran utilidad la ayuda de ustedes ya que los novatos somos así de preguntones y ustedes tienen la paciencia y las ganas de responder nuestras dudas.

Saludos
__________________
Ing. Reynier Pérez Mira
  #14 (permalink)  
Antiguo 14/10/2003, 07:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Re: Y si son Webmail??

Cita:
Mensaje Original por jpinedo
Yo pregunto: ¿Y si se espera que la mayor parte de tus usuarios utilicen Hotmail o Yahoo?¿Existe forma de validar la cuenta?¿No es más seguro enviarle un mail con un link o una contraseña?... Digo, porque nunca se sabe dónde tienen su cuenta de correo los usuarios...
Saludos
Por supuesto que si ... Lo ideal es validar ese e-mail pasandole algún "código" (en un link) para que el proceso de validación sea "humano" y consentido (que lo acepte el usuario).

Pero, ... hay veces que te encuentras con una BD llena de e-mails que no sabes de donde han salido y hay que verificar si están habilitadas esas cuentas .. En otras ocasiones pides voluntariamente a tus usuarios que se registren en un boletin (distribuido) de noticias .. pero, sin "marear" con validaciones y demás métodos seguros .. En fin, hay casos y casos.

------

Sobre validar cuentas tipo Hotmail, Yahoo ..etc .. Existen servidores LDAP "Servicios de directorios de e-mails" o algo así le llaman en algunos clientes de correo (como Outlook). Yahoo tiene el suyo por ejemplo .. Esto sería otra opción para validar una cuenta de correo (acudir a esos servidores y "probar" ..) PHP dispone de funciones para acceso a servidores LDAP (www.php.net/ldap )

Un saludo,
  #15 (permalink)  
Antiguo 14/10/2003, 21:28
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Muchas gracias Cluster.
Voy a revisarlo.

Saludos
  #16 (permalink)  
Antiguo 03/11/2003, 22:47
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
Cita:
A todo esto.. si es una cuenta de e-mail tipo "web-mail" (hotmail, yahoo, etc) no servirá de mucho este método. Sólo es valido para cuentas POP.
Aqui me parece que te equivocas Cluster (con el debido respeto que este atrevimiento supone )
Este metodo funciona tambien para aquellas direcciones de webmail, ya que simula la conexion con el servidor por medio de sockets y en ningun momento se usa el protocolo POP.
Sólo el SMTP, que mediante sockets, envia la peticion al servidor.

Ya se que este post es medio viejo, pero me quedó picando el tema y me puse a investigar y logre hacer una version getmxrr() para windows (aunquesea para hacer test en casa!).

Lo que hago es llamar al comando de windows NT nslookup (que sirve para trabajar con dns) y filtro la salida capturada con exec()
Aca está:
Código PHP:
function winNT_getmxrr($dominio, &$mxhosts)
{
    
/* 
    * Numero de intentos para la conexion
    * Cada ciclo supone un posible retraso de 1 segundo
    */
    
$intentos 3;
    
    while ( 
$intentos <= $intentos ) {
        
exec("nslookup -querytype=MX $dominio"$salida);
        
$ejecutar ""// Evita errores Notice
        
foreach ($salida as $linea) {
            
$pos strpos($linea"mail exchanger");
            if (
$pos !== false) {
                
$ejecutar .= str_replace("mail exchanger = ""\$mxhosts[] = \""substr($linea$pos))."\";\n";
            }
        
        }
        eval(
$ejecutar);
        if (isset(
$mxhosts)) {
            return 
true;
            break;
        } else {
            
sleep(1);
        }
    }
    return 
false;

A mi me funciona bastante bien, aunque no lo considero confiable porque mas de una vez me salen errores de conexion o expira el tiempo de ejecucion.
Quizas ustedes tienen mas suerte.

Saludos!
  #17 (permalink)  
Antiguo 04/11/2003, 07:14
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Ok, Fran86 .. jeje el que tiene boca se equivoca. Pero .. si ese webmail conecta a un servidor IMAP? .. los socktes ya no serán por SMTP? no? (los puertos no son los mismos .. y el protocolo no sé) ...

---------------

En los comentarios de los usuarios de la función getmxrr() .. hay otro ejemplo de como "simular" esa funcionalidad en Sistemas NT/2000 (windows):

créditos:
geoffbrisbine A T y a h o o DOT c o m
24-Sep-2002 09:39


Código PHP:
<?php
$command 
"nslookup -type=mx yahoo.com";
exec $command$result );
    
$i 0;
while ( list ( 
$key$value ) = each $result ) ) {
    if ( 
strstr $value"mail exchanger" ) ) { $nslookup[$i] = $value$i++; }
}
    
while ( list ( 
$key$value ) = each $nslookup ) ) {
    
$temp explode " "$value );
    
$mx[$key][0] = $temp[3];
    
$mx[$key][1] = $temp[7];
    
$mx[$key][2] = gethostbyname $temp[7] );
}

    
array_multisort $mx );
?>
En este caso en $mx entrega un array con algunos datos sobre el registro MX del dominio .. Faltaría encapsularlo en una funcioncita (u método para un objeto) y ya tendriamos completo el tema xD ..

Y en la própia documentación de la función .. recomiendan PEAR y su classe Net_DNS para sistemas Windows:

http://pear.php.net/package/Net_DNS

Abría que probarla ...


Un saludo,

PD: fran86 .. podrías poner tu función en las FAQ's .. con un ejemplito de uso ... Sería interesante.
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.

Última edición por Cluster; 04/11/2003 a las 07:16
  #18 (permalink)  
Antiguo 04/11/2003, 22:49
 
Fecha de Ingreso: agosto-2002
Ubicación: Colón - Entre Rios - Argentina
Mensajes: 647
Antigüedad: 15 años, 4 meses
Puntos: 8
OK, Cluster, veo tu punto.
Es mas, ayer estuve haciendo algunas pruebas y me di cuenta que algunos servidores (como yahoo.com) no validan el usuario en sus servidores hasta que no envias el mensaje real. (usando el comando DATA del protocolo SMTP) y recien alli te manda el error de "554 el usuario no tiene una cuenta en yahoo bla bla en ingles...", por lo que el metodo (como ya dijiste) descripto en la pagina deja mucho que desear...
Tampoco pude hacerlo funcionar bien (hablo del proceso , no de la func winnt_getmx()) con el servidor de hotmail. Asi que si no funciona con estos proveedores, llego a la conclusion que implementar esto en un sitio sería una verdadera chorrada!

Si que me sorprendiste con la funcioncita ya armada en los comentarios de los usuarios: menuda tarea me hubiera ahorrado! jejeje...

Con el tema de la FAQ; ya la voy armando, y aunque se que a poca gente le pueda ser util, asta buena la idea.

Saludos!
  #19 (permalink)  
Antiguo 05/11/2003, 07:33
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Con lo de la FAQ no te preocupes .. aunque no sea una función de uso "masivo" .. como práctica para usar sockets está bastante bien .. (como abrirlo y leer lo que se necesite de el ..).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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:04.