Enviada el 28/10/2009 por Michael Gomez Cruz
Categorias: php, Programacion

He buscado y buscado desde que comence a programar en PHP, la mejor manera de comprobar si un email es válido o no, y si esta bien escrito y además que sea de un dominio válido con sus DNS y registros MX correctos. En fin, sonaba imposible, pero navegando y googleando, encontré la solución:

function validateMail($email){
		   $isValid = true;
		   $atIndex = strrpos($email, '@');
 
		   if(is_bool($atIndex) && !$atIndex){
		      $isValid = false;
		   }else{
		      $domain = substr($email, $atIndex+1);
		      $local = substr($email, 0, $atIndex);
		      $localLen = strlen($local);
		      $domainLen = strlen($domain);
 
		      if ($localLen < 1 || $localLen > 64){
		         $isValid = false;
		      }else if ($domainLen < 1 || $domainLen > 255){
		         $isValid = false;
		      }else if ($local[0] == '.' || $local[$localLen-1] == '.'){
		         $isValid = false;
		      }else if (preg_match('/\\.\\./', $local)){
		         $isValid = false;
		      }else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)){
		         $isValid = false;
		      }else if (preg_match('/\\.\\./', $domain)){
		         $isValid = false;
		      }else if(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local))) {
		         if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local))){
		            $isValid = false;
		         }
		      }
		      if ($isValid && !(checkdnsrr($domain,'MX') || checkdnsrr($domain,'A'))){
		         $isValid = false;
		      }
		   }
 
		   return $isValid;						
		}
// Para implementarlo
if(validateMail('algun@email.com')){
    echo 'email valido';
}else{
    echo 'email no valido';
}

Aplica cosas básicas como comprobar la existencia del @, además de RFC para el largo máximo permitido por el estándar y expresiones regulares para validar los simbolos. Y por si fuese poco, chequea que el dominio exista (A) y que sus MX sean válidos.

Enviada el 28/10/2009 por Michael Gomez Cruz
Categorias: cakephp, desarrollo, Programacion

Quiero recopilar todos los tips (que me acuerdo) de cakePHP, aquellos que nos ayudan a realizar tareas cotidianas y evitar tener que recurrir constantemente a google para poder encontrarlo.

Desde un controlador:

Cambiar el layout

$this->layout = 'nombre_del_layout';

Cambiar la cantidad de resultados del paginador

var $paginate = array('limit'=> 1000);  // Definirlo como atributo del controlador y no dentro de un metodo.

Obtener uno o todos los parametros que vienen por la URL

echo $this->params['nombre-del-parametro'];
pr($this->params); //La funcion pr es similar a print_r aunque con mas estilo, además, está disponible en cualquier archivo que dependa de cakePHP.

Activar el conector con la base de datos

Esta práctica atenta contra el modelo MVC, por lo cual, si lo usas debe ser en casos muy aislados.

uses('model/connection_manager'); // Agregarlo antes de la definicion de Class...
$db = & ConnectionManager::getDataSource('default'); // dentro de un modelo del controlador
$db->query('Select * from X');

Redireccion a X lugar

Para mantener el controlador y solo redireccionar el metodo:

$this->redirect(array('action'=>'index'));

Para cambiar el controlador y el metodo

$this->redirect(array('controller' => 'users','action'=>'index'));

Al utilizar el array como parametro, se aplica la Inversa del ROUTES, por ende, si defines que el users/index sea usuarios.html, entonces, la redireccion va a ser contra usuarios.html.

En fin, voy a extender y actualizar este post mientras vaya recopilando mas TIPS.