Hoy vengo a aportar mi granito de arena y que forma de hacerlo con un pequeno script que desarrolle en PHP y Mysql para la creacion de un sistema para el registro de usuarios.Quizas sea muy basico pero se puede modificar a gusto de cada quien ;)
Registrarse.php
<html>
<head>
<title>Alta de usuarios</title>
</head>
<body>
<form name="registro" method="POST" action="registrar.php">
<table width="200" border="0">
<tr>
<td><label>Nombre:</label></td>
<td><input type="text" name="nombre" /></td>
</tr>
<tr>
<td><label>Nombre de usuario:</label></td>
<td><input type="text" name="user" /></td>
</tr>
<tr>
<td><label>Password:</label></td>
<td><input type="password" name="pw" /></td>
</tr>
<tr>
<td><label>Confirmar password:</label></td>
<td><input type="password" name="pw2" /></td>
</tr>
<tr>
<td><label>Email:</label></td>
<td><input type="text" name="email" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Registrarse" /></td>
</tr>
</table>
</form>
Registrar.php
<?php
//Include del archivo de conexion a la base de datos
include("conexion.php");
///Comprueba que no exista ningun campo vacio
if(isset($_POST['nombre']) && !empty ($_POST['nombre'])&&
isset($_POST['user']) && !empty ($_POST['user'])&&
isset($_POST['pw']) && !empty ($_POST['pw'])&&
(isset($_POST['pw2']) && !empty ($_POST['pw2'])&&
(isset($_POST['email']) && !empty ($_POST['email'])&&
$_POST['pw'] == $_POST['pw2'])))
{
//Realiza conexion al servidor
$conectar = mysql_connect($host,$user,$pw)
//Si no concuerdan los datos lanza error.
or die("No se puede conectar.");
//Seleccion de la base de datos
mysql_select_db($db,$conectar)
or die("Error al a la base de datos.");
///Inserta los datos en la tabla registro
mysql_query("INSERT INTO () VALUES ('$_POST[nombre]','$_POST[user]','$_POST[pw]','$_POST[email]')",
$conectar);
echo "El usuario se ha registrado correctamente con los siguientes datos:";
echo "<br>";
echo "Nombre:".$_POST['nombre'];
echo "<br>";
echo "Usuario:".$_POST['user'];
echo "<br>";
echo "Email:".$_POST['email'];
} else
{
echo "Verifica que no haya ningun campo vacio y los passwords coincidan.";
}
?>
conexion.php
<?php
/*Aqui se introducen los datos de la base de datos
*/
//Host de la base datos(ESTE VIENE POR DEFECTO COMO localhost)
$host = "";
//Usuario de la base de datos(POR DEFECTO VIENE COMO ROOT)
$user = "";
//Tu Password
$pw = "";
//Tu base de datos
$db = "";
?>
Solo espero que no se me haya pasado borrar algun dato de login a la base de datos mientras lo probaba.
Saludos.
Toda esa cadena de comprobación con issets no es nada "elegante", y repites continuamente código.
Por otro lado, debes limpiar siempre los datos que introduce el usuario (ya sea GET, POST o cualquier otro), mucho más cuando lo vas a introducir en la base de datos.
Saludos
Cita de: keplerish en 17 Diciembre 2013, 13:27 PM
Toda esa cadena de comprobación con issets no es nada "elegante", y repites continuamente código.
Por otro lado, debes limpiar siempre los datos que introduce el usuario (ya sea GET, POST o cualquier otro), mucho más cuando lo vas a introducir en la base de datos.
Saludos
soy un poco nuevo en PHP y creo que considerare mucho lo que dices
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(){
foreach(func_get_args() as $param){
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í:
if(!empty($_POST) &&
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/mysqli
http://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.php
http://es.php.net/manual/es/pdo.prepared-statements.php
Saludos
Cita de: Tatsurou_LuLu en 12 Diciembre 2013, 16:34 PM
Hoy vengo a aportar mi granito de arena y que forma de hacerlo con un pequeno script que desarrolle en PHP y Mysql para la creacion de un sistema para el registro de usuarios.Quizas sea muy basico pero se puede modificar a gusto de cada quien ;)
Registrarse.php
<html>
<head>
<title>Alta de usuarios</title>
</head>
<body>
<form name="registro" method="POST" action="registrar.php">
<table width="200" border="0">
<tr>
<td><label>Nombre:</label></td>
<td><input type="text" name="nombre" /></td>
</tr>
<tr>
<td><label>Nombre de usuario:</label></td>
<td><input type="text" name="user" /></td>
</tr>
<tr>
<td><label>Password:</label></td>
<td><input type="password" name="pw" /></td>
</tr>
<tr>
<td><label>Confirmar password:</label></td>
<td><input type="password" name="pw2" /></td>
</tr>
<tr>
<td><label>Email:</label></td>
<td><input type="text" name="email" /></td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="Registrarse" /></td>
</tr>
</table>
</form>
Registrar.php
<?php
//Include del archivo de conexion a la base de datos
include("conexion.php");
///Comprueba que no exista ningun campo vacio
if(isset($_POST['nombre']) && !empty ($_POST['nombre'])&&
isset($_POST['user']) && !empty ($_POST['user'])&&
isset($_POST['pw']) && !empty ($_POST['pw'])&&
(isset($_POST['pw2']) && !empty ($_POST['pw2'])&&
(isset($_POST['email']) && !empty ($_POST['email'])&&
$_POST['pw'] == $_POST['pw2'])))
{
//Realiza conexion al servidor
$conectar = mysql_connect($host,$user,$pw)
//Si no concuerdan los datos lanza error.
or die("No se puede conectar.");
//Seleccion de la base de datos
mysql_select_db($db,$conectar)
or die("Error al a la base de datos.");
///Inserta los datos en la tabla registro
mysql_query("INSERT INTO () VALUES ('$_POST[nombre]','$_POST[user]','$_POST[pw]','$_POST[email]')",
$conectar);
echo "El usuario se ha registrado correctamente con los siguientes datos:";
echo "<br>";
echo "Nombre:".$_POST['nombre'];
echo "<br>";
echo "Usuario:".$_POST['user'];
echo "<br>";
echo "Email:".$_POST['email'];
} else
{
echo "Verifica que no haya ningun campo vacio y los passwords coincidan.";
}
?>
conexion.php
<?php
/*Aqui se introducen los datos de la base de datos
*/
//Host de la base datos(ESTE VIENE POR DEFECTO COMO localhost)
$host = "";
//Usuario de la base de datos(POR DEFECTO VIENE COMO ROOT)
$user = "";
//Tu Password
$pw = "";
//Tu base de datos
$db = "";
?>
Solo espero que no se me haya pasado borrar algun dato de login a la base de datos mientras lo probaba.
Saludos.
Me parece un poco hipócrita darte el crédito a ti, cuando es el mismo código el del curso de PHP de "Código facilito".
Pero bueno, no está de más compartir, un saludo.