Lo que haces en el if es bastante feo (como dice el compañero) y mas teniendo en cuenta que isset y empty son "mas o menos" lo mismo.
Isset comprobara que la variable esta declarada mientras que empty comprobara si esta declarada y si no esta vacía. Por tanto, solo con empty ya te basta.
Por otro lado, hay un problema.. empty no acepta 0 de valor y retorna false. Para eso, cuando se trata de strings y números, es mejor hacer una comparación con isset y strlen.
Una manera "bonita" de hacerlo es usando una función.
<?php
function comprobar(){
if(isset($param)&&strlen
($param)>0){continue;} else{return false;}
}
return true;
}
var_dump(comprobar
($variable,$variable2,$variable3)); ?>
Esta función, cogerá todos los parámetros que le pases y comprobara a ver si están definidos + si su longitud es mayor a 0 caracteres.
Implementandola en tu código, el if se quedaría así:
comprobar($_POST['nombre'],$_POST['user'],$_POST['pw'],$_POST['pw2'],$_POST['email']) &&
$_POST['pw']===$_POST['pw2']){
/* Codigo aqui **/
}
Nota que uso 3 = (===) en vez de 2 (==). Te explico. Cuando usas == PHP buscara a ver si la cadena que comparas es igual a la otra. Esto produce un riesgo de seguridad ya que si le indicas a PHP que compare un numero vs un string, PHP convertirá el string a int (y cualquier string convertido a int retorna 0). Ejemplo:
if('abcd'==0){echo 'Son iguales';}else{echo 'No son iguales';}
Utilizando 3= (===), PHP mira a ver si las dos cadenas son idénticas y no si son iguales.. de este modo te saltas este problema. Afortunadamente, HTTP no diferencia entre int y string, trata todo como string, así que no llegaras a este problema en tu código pero es posible que en otro entorno si que se reproduzca y tendrás un buen problema...En fin, acostúmbrate a usar === para comprar strings.
Usa mysqli o PDO.. no uses mysql.. ya esta mas que obsoleto.
http://es.php.net/mysqlihttp://es.php.net/pdo
Usa siempre un captcha o en su defecto una limitación si vas a enviar datos a la BD sin mas.. los usuarios pueden ser cabrones y ponerse a enviar miles de consultas a tu BD.
Nunca te fíes del usuario.. siempre limpia y comprueba los campos que recibes de ellos para evitar injeciones.
En este caso tanto mysqli como PDO proporcionan sentencias preparadas que minimizan el efecto de sqli.
http://es.php.net/manual/es/mysqli.quickstart.prepared-statements.phphttp://es.php.net/manual/es/pdo.prepared-statements.phpSaludos