SA-MP Forums

Go Back   SA-MP Forums > Non-English > Languages > Español/Spanish > Lanzamientos/Releases

 
 
Thread Tools Display Modes
Old 10/02/2010, 05:48 AM   #1
elvago
Gangsta
 
elvago's Avatar
 
Join Date: Jan 2009
Location: 127.0.0.1
Posts: 511
Reputation: 0
Default Crear un sistema de registro básico.

Bueno.. Debido a las demandas de crear registro de users vía web.. Acá les tratare de ayudar con uno pequeño.. Espero que les sirva de algo

Registro / Login de usuarios.

Comenzando...
Primero debemos saber qué datos necesitará nuestro usuario para registrarse. Lo más usual es Nick, Contraseña y Correo. Comenzaremos creando una base de datos MySQL (O usando una que tengamos creada ya, a gusto) y añadiendo una nueva tabla, que llamaremos jugadores. La tabla tendrá 4 campos (pueden ser más dependiendo el caso): id, nick, contra, correo. Donde id será int(32), y el resto tinytext. Puedes crearla manualmente ó automáticamente ejecutando la siguiente sentencia sql:

Code:
CREATE TABLE `jugadores` ( `id` INT( 32 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
 `nick` TINYTEXT NOT NULL ,
 `contra` TINYTEXT NOT NULL ,
 `correo` TINYTEXT NOT NULL 
) ENGINE = MYISAM
Bien. Eso habrá creado una tabla con los 4 campos, asignando al campo id como campo primario y de auto-incremento (Es decir, no será necesario especificar un valor para este campo por cada usuario, se asignará solo).

El formulario
Ya teniendo la tabla en nuestra base de datos, es necesario hacer el formulario por el cual los usuarios ingresarán sus datos para registrarse, para luego insertarlos. Esta es la parte más sencilla. Haremos un formulario que envíe los datos a registrar.php por medio del método POST, y que conste de 4 campos: Nick, Contraseña, Confirmar contraseña y Correo.

Code:
<form method="post" action="registrar.php">
 Usuario:<br />
 <input type="text" name="r_user" /><br />
 Contraseña:<br />
 <input type="password" name="r_pass" /><br />
 Confirmar contraseña:<br />
 <input type="password" name="r_pass_c" /><br />
 Correo:<br />
 <input type="text" name="r_mail" /><br />
 <br />
 <input type="submit" value="Registrarse" />
</form>
Hay que prestar atención al nombre de cada campo (El atributo 'name'), porque ese será el nombre del elemento cuando lo manipulemos con php. Bien, ahora pasamos al código php.

El archivo registrar.php
Este archivo, al que se le enviarán las variables, constará de 3 partes: Comprobación, ejecución y confirmación (Que lindo ha quedado :P ). En la primera parte, nos aseguraremos de que se compruebe que los datos son correctos, en la segunda, añadiremos los usuarios a la base de datos, y en la tercera mostraremos el mensaje de éxito.
Comenzamos con la comprobación:

Code:
<?php
// Primero, transformamos los datos recibidos en entidades html para evitar inyecciones sql
$r_user = htmlentities($_POST['r_user'], ENT_QUOTES);
$r_pass = htmlentities($_POST['r_pass'], ENT_QUOTES);
$r_pass_c = htmlentities($_POST['r_pass_c'], ENT_QUOTES);
$r_mail = htmlentities($_POST['r_mail'], ENT_QUOTES);

// Comprobamos que se haya escrito un nombre de usuario
if($r_user != "") {
 // Ahora comprobamos lo mismo para el mail
 if($r_mail != "") {
  // Para la contraseña... {
  if($r_pass != "") {
   // Bien, ahora comprobaremos que las 2 contraseñas escritas sean iguales:
   if($r_pass === $r_pass_c) {
    /* Todo comprobado. Aquí irá el código de ejecución.
    Pero antes, cerraremos los ifs con el mensaje de error */
   } else {
    echo 'Las contraseñas ingresadas no coinciden.<br /><a href="history.back();return false;"<< Atrás</a>';
   }
  } else {
   echo 'Debes ingresar una contraseña.<br /><a href="history.back();return false;"<< Atrás</a>';
  }
 } else {
  echo 'Debes ingresar una dirección de correo electrónico.<br /><a href="history.back();return false;"<< Atrás</a>';
 }
} else {
 echo 'Debes ingresar un nombre de usuario.<br /><a href="history.back();return false;"<< Atrás</a>';
}
?>
Ahora pasamos al centro de los ifs, donde ha quedado el espacio para la ejecución. Simplemente habrá que ejecutar una sentencia sql y mostrar el mensaje de confirmación. Veamos:

Code:
<?php
// Primero, transformamos los datos recibidos en entidades html para evitar inyecciones sql
$r_user = htmlentities($_POST['r_user'], ENT_QUOTES);
$r_pass = htmlentities($_POST['r_pass'], ENT_QUOTES);
$r_pass_c = htmlentities($_POST['r_pass_c'], ENT_QUOTES);
$r_mail = htmlentities($_POST['r_mail'], ENT_QUOTES);

// Comprobamos que se haya escrito un nombre de usuario
if($r_user != "") {
 // Ahora comprobamos lo mismo para el mail
 if($r_mail != "") {
  // Para la contraseña... {
  if($r_pass != "") {
   // Bien, ahora comprobaremos que las 2 contraseñas escritas sean iguales:
   if($r_pass === $r_pass_c) {
    // Todo comprobado.
    // Ejecutamos la sentencia
    mysql_query("INSERT INTO jugadores(nick, contra, correo) VALUES('{$r_user}','{$r_pass}','{$r_mail}')");
    // Ahora mostramos la confirmación:
    echo 'Te has registrado con éxito. Ahora puedes iniciar sesión con tu usuario y contraseña';
   } else {
    echo 'Las contraseñas ingresadas no coinciden.<br /><a href="history.back();return false;"<< Atrás</a>';
   }
  } else {
   echo 'Debes ingresar una contraseña.<br /><a href="history.back();return false;"<< Atrás</a>';
  }
 } else {
  echo 'Debes ingresar una dirección de correo electrónico.<br /><a href="history.back();return false;"<< Atrás</a>';
 }
} else {
 echo 'Debes ingresar un nombre de usuario.<br /><a href="history.back();return false;"<< Atrás</a>';
}
?>
Y así es como hemos logrado un sistema simple de usuarios. Claro que se pueden agregar muchas más comprobaciones avanzadas, como comprobar la sintaxis del mail (Que contenga @ y punto, etc), que el usuario/contraseña sea de más de 3 caracteres, que el usuario no exista antes, envío de correo de activación de cuenta y demás. Pero eso será para otro día :P

Ahora viene la parte más interesante. Iniciar sesión y proteger páginas...
Inicio de sesión
Comenzaremos creando un formulario más simple que el de registro, usuario y contraseña. Que envíe los datos a login.php.

Code:
<form method="post" action="login.php">
 Usuario:<br />
 <input type="text" name="l_user" /><br />
 Contraseña:<br />
 <input type="password" name="l_pass" /><br />
 <br />
 <input type="submit" value="Iniciar sesión" />
</form>
Fácil, ¿No? Bien, ahora el archivo login.php:

Code:
<?php
// Primero, transformamos los datos recibidos en entidades html para evitar inyecciones sql
$l_user = htmlentities($_POST['l_user'], ENT_QUOTES);
$l_pass = htmlentities($_POST['l_pass'], ENT_QUOTES);
// Ahora creamos una sentencia sql en busca del usuario ingresado:
$select = mysql_query("SELECT * FROM jugadores WHERE nick='{$l_user}'");
// Ahora comprobamos que el usuario exista.
if(mysql_num_rows($select) != 0) {
 // Bien, ahora que sabemos que existe, creamos un bucle para obtener los datos...
 while($row = mysql_fetch_array($select)) {
  /* Ahora con los datos obtenidos, comprobamos que la contraseña sea correcta. */
  if($l_pass) {
   // En caso de que esté correcto, establecemos la sesión como iniciada. Para ello, usamos cookies.
   setcookie('session', md5($row['user'] . $row['pass']), time()+3600);
   // También creamos una cookie con la id del usuario...
   setcookie('session_id', $row['id'], time()+3600);
   // El contenido de la cookie es usuario+contraseña encriptados, y durará una hora.
   // Ahora cerramos los ifs, con sus respectivos mensajes opuestos.
  } else {
   echo 'Usuario encontrado, pero la contraseña es incorrecta.<br /><a href="history.back();return false;"<< Atrás</a>';
  }
  // La siguiente llave cierra el bucle while, no necesita else.
 }
} else {
 echo 'El usuario no existe.<br /><a href="history.back();return false;"<< Atrás</a>';
}
?>
Ya tenemos nuestro login. ¿Qué más? Listo, esto está terminado...
No molesten...
Dije que no...
Ok, hagamos el logout para completar esto.

Cerrar sesión
Para cerrar la sesión, simplemente nos aseguramos de que las cookies que hemos insertado hayan caducado. Para esto, las "sobrescribimos" y modificamos su fecha límite a una fecha pasada. Bastará con un enlace al archivo logout.php para esto.
logout.php:

Code:
<?php
// Comprobamos que haya alguna sesión iniciada.
if($_COOKIE['session']) {
 // Ahora sobreescribimos las cookies.
 setcookie('session', 'dada', time()-3600);
 setcookie('session_id', 'dada', time()-3600);
 // Mensaje de confirmación.
 echo 'Sesión cerrada exitosamente.';
}?>
El contenido de las cookies modificada no importa, pues se eliminarán instantáneamente.

Bien... Ahora terminamos esto al fin con la función para proteger páginas. La siguiente función php debe ser incluida por las páginas protegidas.

Code:
<?php
function isonline() {
 // Comprobamos que existan las cookies..
 if($_COOKIE['session'] && $_COOKIE['session_id']) {
  // Transformamos las cookies en entidades html para evitar inyecciones sql
  $session = htmlentities($_COOKIE['session'], ENT_QUOTES);
  $session_id = htmlentities($_COOKIE['session_id'], ENT_QUOTES);
  // Armamos con la id guardada la sentencia sql para buscar el usuario.
  $find = mysql_query("SELECT * FROM jugadores WHERE id='{$session_id}'");
  // Comprobamos que el usuario exista.
  if($mysql_num_rows($find) != 0) {
   // Armamos el bucle para obtener la información del usuario..
   while($row = mysql_fetch_array($find)) {
    // Comprobamos que la cookie 'session' coincida con los datos guardados..
    if(md5($row['user'] . $row['pass']) == $_COOKIE['session']) {
     // Devolvemos true.
     return 1;
    }
   }
  }
 }
}
?>
Ok. Ahora, para proteger una página, debemos llamar la función dentro de una comprobación. Antes de mostrar el contenido oculto, escribimos esto:

Code:
<?php
if(isonline()) {
?>
Escribimos todo el contenido privado, y finalmente cerramos el if:


Code:
<?php
}
?>
También podemos agregar un else con un cartel que diga que es necesario iniciar sesión.

Eso es todo, amigos. No he probado nada del tutorial, lo he escrito así simplemente. Si encuentran algún error, agradecería que me lo dijeran
Que quede claro que esto es algo básico y quizá algo inseguro, pero es solamente para que se den una idea, mejorarlo queda en ustedes :P

Saludos.
__________________

Todo termina...
Playing Summoners War [Global Server]. (IGN: zTyLe) Ch: 106

Im still here, but, u can't see me.

Last edited by TheChaoz; 25/07/2013 at 07:57 PM. Reason: Deleted custom tag (using forum's one)
elvago is offline  
Old 10/02/2010, 02:29 PM   #2
CristianTdj
High-roller
 
CristianTdj's Avatar
 
Join Date: Jul 2009
Location: Andalucía, Spain.
Posts: 1,320
Reputation: 5
Default Re: [TUT] Crear un sistema de registro básico.

Bien colorido :P
__________________

CristianTdj is offline  
Old 10/02/2010, 03:17 PM   #3
XeoN_13
Huge Clucker
 
Join Date: Mar 2009
Posts: 332
Reputation: 0
Default Re: [TUT] Crear un sistema de registro básico.

Perfecto TUT elvago! sige asi!!
XeoN_13 is offline  
Old 10/02/2010, 03:38 PM   #4
TheChaoz
High-roller
 
TheChaoz's Avatar
 
Join Date: Dec 2009
Location: Argentina
Posts: 4,656
Reputation: 239
Default Re: [TUT] Crear un sistema de registro básico.

alto tutorial, muy util, por lo menos para mi
__________________
TheChaoz is offline  
Old 10/02/2010, 04:54 PM   #5
XeoN_13
Huge Clucker
 
Join Date: Mar 2009
Posts: 332
Reputation: 0
Default Re: [TUT] Crear un sistema de registro básico.

Quote:
Originally Posted by the_chaoz
alto tutorial, muy util, por lo menos para mi
+1
XeoN_13 is offline  
Old 10/02/2010, 05:40 PM   #6
Zamaroht
High-roller
 
Zamaroht's Avatar
 
Join Date: Jan 2007
Location: Argentina
Posts: 1,200
Reputation: 71
Default Re: [TUT] Crear un sistema de registro básico.

Muy bueno, no sabía usar cookies :P
__________________
Zamaroht is offline  
Old 10/02/2010, 06:00 PM   #7
Eazy_Efolife
High-roller
 
Join Date: Aug 2009
Posts: 1,201
Reputation: 15
Default Re: [TUT] Crear un sistema de registro básico.

Bien.
Eazy_Efolife is offline  
Old 10/02/2010, 09:12 PM   #8
Karkanos
Big Clucker
 
Join Date: Apr 2009
Posts: 108
Reputation: 0
Default Re: [TUT] Crear un sistema de registro básico.

elvago tu eres genial!

gracias por el tuto

pero me lo podrias dar hecho y con register con dialogs ?

solo si tienes tiempo
Karkanos is offline  
Old 11/02/2010, 03:13 AM   #9
elvago
Gangsta
 
elvago's Avatar
 
Join Date: Jan 2009
Location: 127.0.0.1
Posts: 511
Reputation: 0
Default Re: [TUT] Crear un sistema de registro básico.

Lo siento Karkanos.. Te soy sincero en Pawn soy algo bruto los Dialogs.. Todavía no los estudio a fondo
__________________

Todo termina...
Playing Summoners War [Global Server]. (IGN: zTyLe) Ch: 106

Im still here, but, u can't see me.
elvago is offline  
Old 11/02/2010, 03:23 AM   #10
Karkanos
Big Clucker
 
Join Date: Apr 2009
Posts: 108
Reputation: 0
Default Re: [TUT] Crear un sistema de registro básico.

am bueno pero si entenderia un poco mas el php y como usarlo seria genial para aprender a aserlo
Karkanos is offline  
 

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
[FilterScript] [FS]Registro Basico [Primeiro FS]. Lipepva Lançamentos/Releases 31 27/10/2012 10:12 PM


All times are GMT. The time now is 02:42 AM.


Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.