Foros del Web » Programando para Internet » PHP »

Problemas al intentar validar email

Estas en el tema de Problemas al intentar validar email en el foro de PHP en Foros del Web. Buenas, estoy aprendiendo php mientras creo o intento crear una página y me surgio ahora un problema al validar los emails, mire en el foro ...
  #1 (permalink)  
Antiguo 11/09/2006, 02:23
 
Fecha de Ingreso: enero-2006
Ubicación: Asturias
Mensajes: 61
Antigüedad: 18 años, 10 meses
Puntos: 0
Problemas al intentar validar email

Buenas, estoy aprendiendo php mientras creo o intento crear una página y me surgio ahora un problema al validar los emails, mire en el foro y probe on un código de desarrollo web pero n osoy capaz a meterlo pues me da errores. Debe de ser pq no lo ingreso en el sitio adecuado igual, no l ose, me podrías ayudar con este pequeño problema?

----

$res = ereg(
'^[a-z0-9_]|\\-|\\.)+'.
'@'.
'(([a-z0-9_]|\\-)+\\.)+'.
'[a-z]{2,4}$',
$email);

----


<style type="text/css">
<!--
body {
background-color: #009999;
}
-->
</style>
<?php
//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS.

require('configuracion.php');

function quitar($mensaje)
{
$mensaje = str_replace("<","&lt;",$mensaje);

$mensaje = str_replace(">","&gt;",$mensaje);

$mensaje = str_replace("\'","'",$mensaje);

$mensaje = str_replace('\"',"&quot;",$mensaje);
$mensaje = str_replace("\\\\","\",$mensaje);

return $mensaje;
}
if(trim($HTTP_POST_VARS["nick"]) != "" &&
trim($HTTP_POST_VARS["email"]) != "")
{
$sql = "SELECT id FROM usuarios WHERE nick='".quitar($HTTP_POST_VARS["nick"])."'";
$result = mysql_query($sql);
if($row = mysql_fetch_array($result))
{
echo "Lo sentimos, este nick está escogido por otro usuario";
}
else
{
$sql = "INSERT INTO usuarios (nick,password,nombre,email,ciudad,pais) VALUES
(";
$sql .= "'".quitar($HTTP_POST_VARS["nick"])."'";

$sql .= ",'".quitar($HTTP_POST_VARS["password"])."'";

$sql .= ",'".quitar($HTTP_POST_VARS["nombre"])."'";

$sql .= ",'".quitar($HTTP_POST_VARS["email"])."'";

$sql .= ",'".quitar($HTTP_POST_VARS["ciudad"])."'";

$sql .= ",'".quitar($HTTP_POST_VARS["pais"])."'";

$sql .= ")";
mysql_query($sql);
echo "Registro exitoso! Gracias y disfrute de su visita";
}
mysql_free_result($result);
}
else
{
echo "Debe rellenar como minimo los campos de email y password";
}
mysql_close();
?>

----

Un sasudo y gracias.
  #2 (permalink)  
Antiguo 11/09/2006, 04:22
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 18 años, 4 meses
Puntos: 0
Yo uso esta función para validar emails... Mira a ver si te sirve:

Código PHP:
function checkemail($email) {
    
// check if email is valid
    
if( !eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*"."@([a-z0-9]+([\.-][a-z0-9]+))*$",$email$regs)){
      return 
false;
    } else if( 
gethostbyname($regs[2]) == $regs[2] ){
           
// if host is invalid
      
return false;
    } else {
         return 
true;
    }

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #3 (permalink)  
Antiguo 11/09/2006, 04:51
 
Fecha de Ingreso: enero-2006
Ubicación: Asturias
Mensajes: 61
Antigüedad: 18 años, 10 meses
Puntos: 0
Y la funcion de cheaquear el email en quezona dle código la pongo? es que probe ya 3 o 4 para validar el email ya en todas las zonas y o bien, no lo chequea y registra con una direccion sin @ y sin nada, o bien me da error de sintaxis en la linea que se corresponde con la function del código que añado.

Un saludo y gracias.
  #4 (permalink)  
Antiguo 11/09/2006, 04:56
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 18 años, 4 meses
Puntos: 0
Pues ahí va:

Código PHP:
<?php 
//AQUI CONEXION O include() DE ARCHIVO DE CONEXION CON BASE DE DATOS. 

require('configuracion.php'); 

function 
quitar($mensaje

$mensaje str_replace("<","&lt;",$mensaje); 

$mensaje str_replace(">","&gt;",$mensaje); 

$mensaje str_replace("\'","'",$mensaje); 

$mensaje str_replace('\"',"&quot;",$mensaje); 
$mensaje str_replace("\\\\","\\",$mensaje); 

return 
$mensaje
}
if(
trim($HTTP_POST_VARS["nick"]) != "" && 
trim($HTTP_POST_VARS["email"]) != ""

    if (
checkemail($_POST['email'])) { //Aqui la comprobacion del email
$sql "SELECT id FROM usuarios WHERE nick='".quitar($HTTP_POST_VARS["nick"])."'";
$result mysql_query($sql); 
if(
$row mysql_fetch_array($result)) 

echo 
"Lo sentimos, este nick está escogido por otro usuario"

else 

$sql "INSERT INTO usuarios (nick,password,nombre,email,ciudad,pais) VALUES 
("

$sql .= "'".quitar($HTTP_POST_VARS["nick"])."'"

$sql .= ",'".quitar($HTTP_POST_VARS["password"])."'"

$sql .= ",'".quitar($HTTP_POST_VARS["nombre"])."'"

$sql .= ",'".quitar($HTTP_POST_VARS["email"])."'"

$sql .= ",'".quitar($HTTP_POST_VARS["ciudad"])."'"

$sql .= ",'".quitar($HTTP_POST_VARS["pais"])."'"

$sql .= ")"
mysql_query($sql); 
echo 
"Registro exitoso! Gracias y disfrute de su visita"

mysql_free_result($result); 
    } else { 
//Aqui el mensaje de respuesta
         
echo "Introduzca una dirección de email válida por favor";
    }

else 

echo 
"Debe rellenar como minimo los campos de email y password"
}
mysql_close(); 
?>
AÑADO: Te sugiero usar los arrays superglobales $_POST mejor q los $HTTP_POST_VARS.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #5 (permalink)  
Antiguo 11/09/2006, 05:19
 
Fecha de Ingreso: enero-2006
Ubicación: Asturias
Mensajes: 61
Antigüedad: 18 años, 10 meses
Puntos: 0
Ok, listo. Ya esta, fallaba en que al final no infresaba lo de "introduzca una dirección de email válida", y entonces me saltaba el error.

Tamvbieb cambie los arrays por los que em aconsejaste, en que se diferencian?

Un saludo y gracias!
  #6 (permalink)  
Antiguo 11/09/2006, 05:32
Avatar de Bytevamp  
Fecha de Ingreso: junio-2005
Ubicación: /var/www/
Mensajes: 789
Antigüedad: 19 años, 5 meses
Puntos: 7
Cita:
Tamvbieb cambie los arrays por los que em aconsejaste, en que se diferencian?
Mas que diferenciarse, lo que ocurre es que $HTTP_POST_VARS esta en desuso, de echo me parecio leer por ahi que en la version 6 no se soporta, asi que es mejor que uses $_POST para evitar futuros problemas de incompatibilidad(y ademas es menos para escribir ).

Saludos.
__________________
"zankius veri mach" a todos los que me habeis ayudado.
carteles para inmobiliarias || alquiler de coches
  #7 (permalink)  
Antiguo 11/09/2006, 05:35
 
Fecha de Ingreso: mayo-2006
Mensajes: 12
Antigüedad: 18 años, 6 meses
Puntos: 0
a mi esta me va de maravilla:
Código:
ereg("^.+@.+\\..+$", $mail)
  #8 (permalink)  
Antiguo 11/09/2006, 05:36
Avatar de djreficul  
Fecha de Ingreso: julio-2006
Ubicación: Cork
Mensajes: 672
Antigüedad: 18 años, 4 meses
Puntos: 0
Exa un vistazo a ésto.

No sé si te quedará claro. Aún así el tema está en que en futuras versiones de PHP los $HTTP_POST_VARS y las análogas terminarán x desaparecer. Alguien con más conocimiento, como Cluster, seguro q puede informarte mejor.

Saludos.
__________________
La muerte es un camino que todos debemos recorrer...
  #9 (permalink)  
Antiguo 11/09/2006, 07:16
 
Fecha de Ingreso: enero-2006
Ubicación: Asturias
Mensajes: 61
Antigüedad: 18 años, 10 meses
Puntos: 0
Ok, vi también que hay otras a los que le apsa lo mismo y las acortaron, ademas se escribe bastante menos como dijo Bitevamp. A ver la version 6 para cuando jejeje.

Un Saludo y Gracias por la Ayuda!
  #10 (permalink)  
Antiguo 15/09/2006, 05:00
Avatar de kesthers  
Fecha de Ingreso: mayo-2004
Ubicación: Valencia
Mensajes: 358
Antigüedad: 20 años, 6 meses
Puntos: 2
Hola.
Llego a este post porque andaba buscando una solucion a un problema que surge al chequear una dirección de correo con expresiones regulares.

Hasta ahora estaba usando el siguiente código:
Código PHP:
preg_match(":^([-!#\$%&'*+./0-9=?A-Z^_`a-z{|}~ ])+@([-!#\$%&'*+/0-9=?A-Z^_`a-z{|}~ ]+\\.)+[a-zA-Z]{2,6}\$:i"$email
Pero el otro día me colarón un email del tipo: [email protected]

El problema esque en teoriza el simbolo $ (dolar) no debe ser aceptado.

He comprobado la función que dais en este post y también da el mismo problema.

A alguien se le ocurre un solución?

Saludos
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 14:07.