elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP (Moderador: #!drvy)
| | | |-+  Duda con EREG
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con EREG  (Leído 5,226 veces)
mokoMonster


Desconectado Desconectado

Mensajes: 301


<? ...


Ver Perfil
Duda con EREG
« en: 27 Noviembre 2010, 23:05 pm »

Hola a todos:

Mi problema es que tengo este muy sencillo código para comprobar que los campos solo puedan tener puntos y algunos signos que encontré navegando.

elseif (ereg("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$"$celectronico)) { header("Location: ../registro.php?error=s"); } 

Lo que pasa es que por ejemplo en el campo $celectronico referente a el mail no me deja insertar a la tabla si pongo ejemplo@ejemplo2.com, es decir, si pongo en el campo cualquiera de los siguientes valores si me deja:

hola@.com < Si
holahola@. < Si
@hola.com < Si
high.trip@hotmail.com.mx < Si lo acepta
high.trip@hotmail.com < No lo acepta

Si vuelvo a tratar por ejemplo con: hihehe@hahaha.com otra vez no me lo acepta, alguien me podría orientar por favor?
Es la primera vez que trabajo con Ereg.

Saludos y muchas gracias


« Última modificación: 27 Noviembre 2010, 23:29 pm por mokoMonster » En línea

"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Duda con EREG
« Respuesta #1 en: 28 Noviembre 2010, 00:05 am »

El sistema de expresiones regulares POSIX en PHP esta obsoleto desde la versión 5.3.0, PHP usa el sistema de expresiones regulares PCRE(Expresiones regulares compatibles con Perl)...
Expresiones Regulares - Basico - Wikielhacker

La expresion que usas esta muy mal formada y debería filtrar mas los datos...

Código
  1. <?php
  2.  
  3. $a = array('hola@.com', 'holahola@.', '@hola.com', 'high.trip@hotmail.com.mx', 'high.trip@hotmail.com');
  4.  
  5. foreach($a as $aa):
  6.  
  7. if(preg_match("/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$/", $aa)):
  8. echo $aa.'<br>';
  9.  
  10. endif;
  11.  
  12. continue;
  13.  
  14. endforeach;
  15.  
  16. ?>

Salida:

Código:
high.trip@hotmail.com

Es el unico dato que valida tu regexp, puedes usar el patron de Raul para validar un mail...

Código
  1. <?php
  2.  
  3. $a = array('hola@.com', 'holahola@.', '@hola.com', 'high.trip@hotmail.com.mx', 'high.trip@hotmail.com');
  4.  
  5. foreach($a as $aa):
  6.  
  7. if(preg_match("/^(?![.,])(?:[\w!#$%&\'*+\/=?^_`{|}~\-]+(?:[.,][\w!#$%&\'*+\/=?^_`{|}~\-]+)*|(?>\".+\"))+(?![.,])@(?>\[(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2})\.){3}(?:(?>2(?>5[0-5]|[0-4]?\d)|1?\d{1,2}))\]|(?![.,])[\w!#$%&\'*+\/=?^_`{|}~\-]+(?:[.,][\w!#$%&\'*+\/=?^_`{|}~\-]+)*(?:\.[a-zA-Z]+))$/", $aa)):
  8. echo $aa.'<br>';
  9.  
  10. endif;
  11.  
  12. continue;
  13.  
  14. endforeach;
  15.  
  16. ?>

Salida:

Código:
high.trip@hotmail.com.mx
high.trip@hotmail.com

Saludos


En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
mokoMonster


Desconectado Desconectado

Mensajes: 301


<? ...


Ver Perfil
Re: Duda con EREG
« Respuesta #2 en: 28 Noviembre 2010, 00:16 am »

Esto parece que funcionará, muchisimas gracias.
Quisiera preguntarte algo,
foreach
hace como un bucle para cada valor en el array cierto? es decir $aa pasa como si tuviera un valor 5 veces cierto?

Solo quiero entender bien el funcionamiento del
foreach para implementarlo
:)

Muchisimas gracias y Saludos
En línea

"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Duda con EREG
« Respuesta #3 en: 28 Noviembre 2010, 00:43 am »

Um... El array a contiene 5 valores... Uso foreach para recorrer todos sus valores... Con un simple ejemplo entenderás su funcionamiento...

Código
  1. <?php
  2.  
  3. $array = array('Hola', 'Adios', 'Elhacker', 'Wikipedia', 'Google');
  4.  
  5. foreach($array as $valor):
  6.  
  7. echo $valor. '<br>';
  8.  
  9. endforeach;
  10.  
  11. ?>

Salida:

Código:
Hola
Adios
Elhacker
Wikipedia
Google

Osea, recorro el array hasta que no existan mas valores... Cuando recorres un array, cada posición del array sera un ciclo, porque primero recorre la primera posicion y si existe otra vuelve y recorre la siguiente...

Código
  1. <?php
  2.  
  3. $array = array('Hola', 'Adios', 'Elhacker', 'Wikipedia', 'Google');
  4.  
  5. foreach($array as $valor):
  6. $i += 1;
  7.  
  8. echo 'Ciclo nº '. $i.'<br>';
  9. echo $valor. '<br><br>';
  10.  
  11.  
  12. endforeach;
  13.  
  14. ?>

Salida:

Código:
Ciclo nº 1
Hola

Ciclo nº 2
Adios

Ciclo nº 3
Elhacker

Ciclo nº 4
Wikipedia

Ciclo nº 5
Google

Bueno el code anterior funciona asi:
En cada ciclo uso la sentencia if en conjunto con una expresión regular para comprobar que los sean veldadero, si los datos son correctos se ejecuta lo que esta dentro de la sentencia if y si no son correctos no se ejecuta el if... Uso continue para forzar al bucle foreach a pasar al siguiente siclo... Hacer una pruebas y entenderás mejor
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: Duda con EREG
« Respuesta #4 en: 28 Noviembre 2010, 00:46 am »

@Yoya: interesante, nunca había visto esa sintaxis en PHP :o Mis códigos están llenos de llaves ;D
« Última modificación: 28 Noviembre 2010, 01:06 am por pablomi » En línea

mokoMonster


Desconectado Desconectado

Mensajes: 301


<? ...


Ver Perfil
Re: Duda con EREG
« Respuesta #5 en: 28 Noviembre 2010, 00:52 am »

Wow! Ahora tratando de entenderlo un poco quise hacerle un arreglo al código para ver si la capte bien, pero al parecer creo que no, te pongo todo el código de lo que intento hacer a ver si tienes tiempo de ayudarme, en realidad se que mi código es muy simple pero funciona (excepto por el foreach o preg_match) para lo que necesito.

include("fix.php");
$link=Conectarse();

//Variables de Formulario Registro
$nombre=$_POST['nombre'];
$usuario=$_POST['usuario'];
$password=sha1($_POST['password']);
$rpassword=sha1($_POST['rpassword']);
$celectronico=$_POST['celectronico'];
$sexo=$_POST['sexo'];
$anos=$_POST['anos'];
$pais=$_POST['pais'];
$contrato=$_POST['contrato'];
$ip=$_POST['ip'];
$explorador=$_POST['explorador'];
$fecha=$_POST['fecha'];

//Consultas
$queryUser=mysql_query("SELECT usuario FROM Usuarios WHERE usuario='$usuario'",$link)or die(mysql_error());
$queryMail=mysql_query("SELECT celectronico FROM Usuarios WHERE celectronico='$celectronico'",$link)or die(mysql_error());
$qur mysql_num_rows($queryUser);
$qmr mysql_num_rows($queryMail);

$a = array($nombre,$usuario,$password,$rpassword,$celectronico);
 
foreach(
$a as $aa):
 
if(
preg_match("/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$/"$aa))
{
continue; 
	
//Comprobaciones
	
if (empty(
$nombre)){ header("Location: ../registro.php?error=n"); }
	
elseif (empty(
$usuario)) { header("Location: ../registro.php?error=u"); }
	
elseif (
$qur 0) { header("Location: ../registro.php?error=ue"); } 
	
elseif (empty(
$password)) { header("Location: ../registro.php?error=p"); }
	
elseif (empty(
$rpassword)) { header("Location: ../registro.php?error=rp"); }
	
elseif (
$password!=$rpassword) { header("Location: ../registro.php?error=prp"); }
	
elseif (empty(
$celectronico)) { header("Location: ../registro.php?error=ce"); }
	
elseif (
$qmr 0) { header("Location: ../registro.php?error=cee"); } 
	
elseif (empty(
$contrato)) { header("Location: ../registro.php?error=c"); }
	

	
else { 
	
	
mysql_query("insert into Usuarios (nombre,usuario,password,celectronico,sexo,anos,pais,contrato,ip,explorador,fecha) values ('$nombre','$usuario','$password','$celectronico','$sexo','$anos','$pais','$contrato','$ip','$explorador','$fecha')",$link) or die(mysql_error());
	
	
mysql_free_result($queryUser);
	
	
mysql_free_result($queryMail);
	
	
mysql_close($link);
	
	
echo 
'Conexion Finalizada ;)<br>Datos introducidos correctamente a la tabla.';
	
	
}
	

//
}
else { 
header("Location: ../registro.php?error=s"); }
endforeach;

?>

Saludos :)
En línea

"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange
xassiz~


Desconectado Desconectado

Mensajes: 457



Ver Perfil WWW
Re: Duda con EREG
« Respuesta #6 en: 28 Noviembre 2010, 01:09 am »

Yo creo que te lías un poco, podrías hacer una funcion validar() y acabas antes. Y tu código es vulnerable a Inyecciones SQL, esas variables del "Formulario Registro" pasalas por mysql_real_escape_string().
Código
  1. $nombre = mysql_real_escape_string($_POST['nombre']);
  2. $usuario = mysql_real_escape_string($_POST['usuario']);
  3. ...
  4.  
En línea

mokoMonster


Desconectado Desconectado

Mensajes: 301


<? ...


Ver Perfil
Re: Duda con EREG
« Respuesta #7 en: 28 Noviembre 2010, 01:12 am »

Yo creo que te lías un poco, podrías hacer una funcion validar() y acabas antes. Y tu código es vulnerable a Inyecciones SQL, esas variables del "Formulario Registro" pasalas por mysql_real_escape_string().
Código
  1. $nombre = mysql_real_escape_string($_POST['nombre']);
  2. $usuario = mysql_real_escape_string($_POST['usuario']);
  3. ...
  4.  

Muchas Gracias así lo haré :) pero es que justamente ese es el problema que tengo, que aun no se como hacerlos validar :(
Agradecería tu ayuda :)

Saludos
En línea

"Se necesitaron unos instantes para cortarle la cabeza, pero se necesitara un siglo para producir otra igual."
Lagrange
~ Yoya ~
Wiki

Desconectado Desconectado

Mensajes: 1.125



Ver Perfil
Re: Duda con EREG
« Respuesta #8 en: 28 Noviembre 2010, 20:48 pm »

cuando programes siempre trata de saber todo lo que haces, porque estarás en un error sin saberlo...

Código
  1. if(preg_match("/^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[a-zA-Z0-9-]{2,200}\.[a-zA-Z]{2,6}$/", $aa))
  2. {
  3. continue;
  4. //Comprobaciones
  5. if (empty($nombre)){ header("Location: ../registro.php?error=n"); }
  6. elseif (empty($usuario)) { header("Location: ../registro.php?error=u"); }
  7. elseif ($qur > 0) { header("Location: ../registro.php?error=ue"); }
  8. elseif (empty($password)) { header("Location: ../registro.php?error=p"); }
  9. elseif (empty($rpassword)) { header("Location: ../registro.php?error=rp"); }
  10. elseif ($password!=$rpassword) { header("Location: ../registro.php?error=prp"); }
  11. elseif (empty($celectronico)) { header("Location: ../registro.php?error=ce"); }
  12. elseif ($qmr > 0) { header("Location: ../registro.php?error=cee"); }
  13. elseif (empty($contrato)) { header("Location: ../registro.php?error=c"); }
  14.  
  15. else {
  16. mysql_query("insert into Usuarios (nombre,usuario,password,celectronico,sexo,anos,pais,contrato,ip,explorador,fecha) values ('$nombre','$usuario','$password','$celectronico','$sexo','$anos','$pais','$contrato','$ip','$explorador','$fecha')",$link) or die(mysql_error());
  17. mysql_free_result($queryUser);
  18. mysql_free_result($queryMail);
  19. mysql_close($link);
  20. echo 'Conexion Finalizada ;)<br>Datos introducidos correctamente a la tabla.';
  21. }
  22.  
  23. //
  24. }
  25. else { header("Location: ../registro.php?error=s"); }
  26. endforeach;

Nunca de lo que esta después de continue se ejecutara, ya que continue forza a pasar al siguiente ciclo...

Y no puedes usar esa expresion regular para validar todo tipo de datos, esa patron sirve para validar un mail, no un nombre de usuario, password, etc...

Debes entender como funcionan bien los arrays y el loop foreach(). Te recomiendo que las funciones, loop que haz empleado conozca bien como funciona porque si programas sin entender bien lo que haces, casi siempre lo que hagas no funcionara correctamente aunque no produzca un error, estas produciendo un error lógico...

Te recomiendo que antes de darle los valores a las variables nombres, password, etc... Compruebes que los datos que recibes vía POST contengan algún contenido.

Código
  1. if(empty($_POST['nombre']) && empty($_POST['pass'])){ exit;//Finalizo
  2. }
  3.  
  4. $nombre = $_POST['nombre'];
  5. $pass = $_POST['pass'];

Te recomiendo que leas un poco mas.
En línea

Mi madre me dijo que estoy destinado a ser pobre toda la vida.
Engineering is the art of balancing the benefits and drawbacks of any approach.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 10,297 Último mensaje 13 Febrero 2008, 21:41 pm
por revenge1252
preg_match es lo mismo que ereg?
PHP
SrTrp 4 3,445 Último mensaje 21 Diciembre 2017, 02:01 am
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines