elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
28 Mayo 2012, 13:16  


Tema destacado: ¡Aprende hacking con práctica! - WarZone, el wargame de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  PHP
| | | |-+  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 1,117 veces)
mokoMonster


Desconectado Desconectado

Mensajes: 300


<? ...


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

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 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: 954



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

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
<?php
 
$a = array('hola@.com', 'holahola@.', '@hola.com', 'high.trip@hotmail.com.mx', 'high.trip@hotmail.com');
 
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)):
echo $aa.'<br>';
 
endif;
 
continue;
 
endforeach;
 
?>

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
<?php
 
$a = array('hola@.com', 'holahola@.', '@hola.com', 'high.trip@hotmail.com.mx', 'high.trip@hotmail.com');
 
foreach($a as $aa):
 
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)):
echo $aa.'<br>';
 
endif;
 
continue;
 
endforeach;
 
?>

Salida:

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

Saludos


En línea

mokoMonster


Desconectado Desconectado

Mensajes: 300


<? ...


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

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: 954



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

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

Código
<?php
 
$array = array('Hola', 'Adios', 'Elhacker', 'Wikipedia', 'Google');
 
foreach($array as $valor):
 
echo $valor. '<br>';
 
endforeach;
 
?>

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
<?php
 
$array = array('Hola', 'Adios', 'Elhacker', 'Wikipedia', 'Google');
 
foreach($array as $valor):
$i += 1;
 
echo 'Ciclo nº '. $i.'<br>';
echo $valor. '<br><br>';
 
 
endforeach;
 
?>

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

xassiz~


Desconectado Desconectado

Mensajes: 428



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

@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 por pablomi » En línea

mokoMonster


Desconectado Desconectado

Mensajes: 300


<? ...


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

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: 428



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

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
$nombre = mysql_real_escape_string($_POST['nombre']);
$usuario = mysql_real_escape_string($_POST['usuario']);
...
 
En línea

mokoMonster


Desconectado Desconectado

Mensajes: 300


<? ...


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

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
$nombre = mysql_real_escape_string($_POST['nombre']);
$usuario = mysql_real_escape_string($_POST['usuario']);
...
 

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: 954



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

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

Código
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;

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
if(empty($_POST['nombre']) && empty($_POST['pass'])){ exit;//Finalizo 
}
 
$nombre = $_POST['nombre'];
$pass = $_POST['pass'];

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

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[duda] liberar memoria fisica [/duda]
GNU/Linux
k a t z 1 1,562 Último mensaje 30 Diciembre 2006, 00:38
por cthulhufhtagn
OTRA DUDA DE LOS MALDITOS Iframes. Duda HTML. 20-5
Desarrollo Web
‭lipman 7 2,904 Último mensaje 21 Mayo 2007, 09:27
por dominioswww
Pequeña duda con un comando batch (NUEVA DUDA RELACIONADA)
Scripting
revenge1252 9 2,500 Último mensaje 13 Febrero 2008, 21:41
por revenge1252
Duda batch y ademas duda del foro
Hacking Básico
relom 4 1,301 Último mensaje 9 Marzo 2008, 06:32
por Leo Gutiérrez.
<duda>Polimorfismo en C</duda>
Análisis y Diseño de Malware
marlochack 8 3,132 Último mensaje 2 Febrero 2010, 01:23
por [L]ord [R]NA
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines