Sistema de registro de usuarios

Iniciado por Hazama, 12 Diciembre 2013, 16:34 PM

0 Miembros y 1 Visitante están viendo este tema.

Hazama

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
Código (php) [Seleccionar]
<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
Código (php) [Seleccionar]
<?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
Código (php) [Seleccionar]
<?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.

keplerish

#1
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

Hazama

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

#!drvy

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.
Código (php) [Seleccionar]
<?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í:
Código (php) [Seleccionar]
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:

Código (php) [Seleccionar]
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

#Aitor

#4
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
Código (php) [Seleccionar]
<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
Código (php) [Seleccionar]
<?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
Código (php) [Seleccionar]
<?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.
Mi algoritmo en PHP (estupideces y más).
Código (php) [Seleccionar]
while($Se_feliz){
  Piensa_un_OBJETIVO(); // Sin excusas!
  if($Tienes_un_objetivo){
    Suspira(); // Sé paciente.
    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
      //RETURN; ¿O volvemos a empezar?
    }else{
      Inténtalo_de_nuevo();
    }
  }
}