En esta oportunidad les comento que estoy haciendo un form de inscripción y me estoy volviendo loco, para mi son las expresiones regulares, pero fijense porq no le encuentro la vuelta...
Código reg.php.
Código PHP:
<?php
if (!isset($_SESSION)) session_start();
if(!$_POST) exit;
if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");
include ("inc/const.php"); //Solo tiene conexión al servidor.
include ("inc/func.php"); // Solo las funciones de seguridad.
//Variables
$usuario = filterXSS(MakeMeSafe($_POST['usuario']));
$pass1 = filterXSS(MakeMeSafe($_POST['pass1']));
$pass2 = filterXSS(MakeMeSafe($_POST['pass2']));
$nombre = filterXSS(MakeMeSafe($_POST['name']));
$apellido = filterXSS(MakeMeSafe($_POST['apellido']));
$sexo = filterXSS(MakeMeSafe($_POST['sexo']));
$dia = filterXSS(MakeMeSafe($_POST['dia']));
$mes = filterXSS(MakeMeSafe($_POST['mes']));
$anio = filterXSS(MakeMeSafe($_POST['anio']));
$pais = filterXSS(MakeMeSafe($_POST['country']));
$email = filterXSS(MakeMeSafe($_POST['email']));
//Verificacion del codigo de seguridad
if (isset($_POST['verify'])) :
$posted_verify = $_POST['verify'];
$posted_verify = md5($posted_verify);
else :
$posted_verify = '';
endif;
$session_verify = $_SESSION['verify'];
if (empty($session_verify)) $session_verify = $_COOKIE['verify'];
//validacion de campos.
//Patrones de validacion. PARA MI DONDE ESTA EL PROBLEMA!
$pat_space="/^[[:space:]]+$/";
$pat_letras="/^[a-zA-Z]+$/";
$pat_minusculas="/^[a-z]/";
$pat_mayusculas="/^[A-Z]/";
$pat_numerico="1234567890";
$pat_alfanumerico="/^[a-zA-Z0-9]/";
$pat_alfanumerico_min="/^[a-z0-9]/";
$pat_alfanumerico_simbolo="/^[a-zA-Z0-9\d._-]/";
$pat_fecha=date('Y');
$pat_pais=array("arg","bol","bra","chi","col","ecu","esp","mex","par","per","por","uru","usa","ven");
//Inicializacion del conteiner errores.
$errores='';
//Consulta a la base de datos por datos duplicados.
$link = mysqli_connect(SERVER,USER,PASSWORD,USRM);
$query = "SELECT usuario FROM usuarios WHERE usuario = '$usuario' AND email = '$email'";
$result = mysqli_query($link, $query);
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
// VALIDACIONES
if(empty($usuario) || empty($pass1) || empty($pass2) || empty($nombre) || empty($apellido) || empty($sexo) || empty($dia) || empty($mes) || empty($anio) || empty($pais) || empty($email)){
$errores.= "<li>Todos los campos son obligatorios.</li>";
}else {
//Validar usuario.
if(strlen($usuario)<6 || strlen($usuario)>12){//longitud del usuario
$errores.="<li>El usuario debe ser de al menos 6 caracteres y maximo 12.</li>";
}elseif(preg_match($pat_space,$usuario)){
$errores.="<li>El usuario no puede contener espacios en blanco.</li>";
}elseif(!preg_match($pat_alfanumerico_min,$usuario)){
$errores.="<li>El usuario solo puede contener letras y numeros.</li>";
}elseif(preg_match($pat_mayusculas,$usuario)){
$errores.="<li>El usuario solo puede componerse de minusculas.</li>";
}elseif($row['usuario']==$usuario) { //disponibilidad de usuario
$errores .= "<li>El usuario está en uso.</li>";
}
//Validar password.
if(strlen($pass1)<8 || strlen($pass1)>16){
$errores.="<li>La contraseña debe tener al menos 8 caracteres y m&aximo 16.</li>";
}elseif($pass1!=$pass2){
$errores.="<li>Las contraseñas deben coincidir.</li>";
}elseif(!preg_match($pat_alfanumerico,$pass1)){
$errores.="<li>La contraseña solo admite letras y numeros.</li>";
}elseif(substr_count($pass1,$pat_mayusculas)==0){
$errores.="<li>La contraseña debe contener al menos una mayuscula.</li>";
}elseif(substr_count($pass1,$pat_numerico)==0) {
$errores.="<li>La contraseña debe contener al menos un digito.</li>";
}elseif(substr_count($pass1,$pat_minusculas)==0) {
$errores.="<li>La contraseña debe contener al menos una minuscula.</li>";
}elseif(substr_count($pass1,$pat_space)>0){
$errores.="<li>La contrasña no admite espacios en blanco.</li>";
}
//Validar Nombre.
if(strlen($nombre)<2) {
$errores.="<li>Ingrese un nombre válido.</li>";
}elseif(strlen($nombre)>30) {
$errores.="<li>El Nombre ingresado es extenso, recórtelo.</li>";
}elseif(!preg_match($pat_letras,$nombre)) {
$errores.="<li>El Nombre solo admite letras y espacion.</li>";
}
//Validar Apellido.
if(strlen($apellido)<2) {
$errores.="<li>Ingrese un Apellido válido.</li>";
}elseif(strlen($apellido)>60) {
$errores.="<li>El Apellido ingresado es extenso, recórtelo.</li>";
}elseif(!preg_match($pat_letras,$apellido)) {
$errores.="<li>El Apellido solo admite letras y espacion.</li>";
}
//Validar fecha de nacimiento.
if(!is_numeric($dia)){
$errores.="<li>Ingrese una fecha válida</li>";
}elseif($mes=="2") {
if($dia >= 29) {
$errores.="<li>Febrero no puede tener más de 28 días.</li>";
}
}elseif($dia>31){
$errores.="<li>Debe ingresar un día válido.</li>";
}elseif(!is_numeric($mes)){
$errores.="<li>Ingrese una fecha válida</li>";
}elseif($mes>12) {
$errores.="<li>Debe ingresar un mes válido</li>";
}elseif(!is_numeric($anio)){
$errores.="<li>Ingrese una fecha válida</li>";
}elseif(($pat_fecha-$anio)<=11) {
$errores.="<li>El usuario no puede tener menos de 12 años</li>";
}elseif(($pat_fecha-$anio)>100) {
$errores.="<li>Ingrese un año válido.</li>";
}
//Validar nacionalidad.
if($pais=="none") {
$errores.="<li>Debe ingresar nacionalidad.</li>";
}elseif(!in_array($pais,$pat_pais)) {
$errores.="<li>Debe ingresar un país válido.</li>";
}
//Validar email.
if(substr_count($email,"@") != 1) {
$errores.="<li>Ingrese un mail válido.</li>";
}else {
$mailarray=explode("@",$email);
$cuenta=$mailarray[0];
$dominio=$mailarray[1];
if(!preg_match($pat_alfanumerico_simbolo,$cuenta)) {
$errores.="<li>Ingrese un mail válido.</li>";
}elseif(strlen($cuenta)<3) {
$errores.="<li>Ingrese un mail válido.</li>";
}
if(!preg_match($pat_alfanumerico_simbolo,$dominio)) {
$errores.="<li>Ingrese un mail válido.</li>";
}elseif(strlen($dominio)<3) {
$errores.="<li>Ingrese un mail válido.</li>";
}elseif(substr_count($dominio,".")<1 || substr_count($dominio,".")>3) {
$errores.="<li>Ingrese un mail válido.</li>";
}
}
//Validar codigo antibot.
if($session_verify != $posted_verify) {
$errores .= "<li>El código de verificación es incorrecto.</li>";
}
}
if($errores != '') {
echo '<div class="error_message"><span class="error_txt">Atención! Corrige los errores y volvé a intentarlo.</span>';
echo '<ul class="error_messages">' . $errores . '</ul>';
echo '</div>';
}else { //Succes!
//Todavia no lo arme.
}
?>
Da error al validar la password, me dice todo el tiempo que no tiene ninguna mayuscula, cuando inhabilito esta verificacion, me dice lo mismo del digito y lo mismo con minusculas...
si le pongo un espacio en los campos apellido y nombre también da error indicando que no son validos.
Si le pongo un espacio en el usuario no me tira error...
AYUDA!