Foros del Web » Programando para Internet » PHP »

[APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

Estas en el tema de [APORTE] ¿ Que es y como puedo hacer un sistema de usuario ? en el foro de PHP en Foros del Web. Hola, Para dejar de resivir mensajes de como hacer un sistema de usuario, le ago una guia ¿ Que es un sistema de usuario ? ...
  #1 (permalink)  
Antiguo 06/08/2009, 17:30
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 1 mes
Puntos: 101
[APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

Hola,
Para dejar de resivir mensajes de como hacer un sistema de usuario, le ago una guia

¿ Que es un sistema de usuario ?
Basicamente es reconocer al usuario en cualquiera parte de tu web, para eso podemos usar sessiones o cookies ( entre otras opciones ). El usuario deve tener su id unico ( sino, no vamos a saber quien es ).

¿ Como se hace un sistema de usuario ?
Si pienzas que es dificil, olvidalo, no es dificil . Es simple, ya lo veras.

Cita:
OJO: Al siguiente codigo le falta la seguridad, puedes usar las funciones addslashes, htmlentities y trim para ponerle mas seguridad
En este tutorial voy a usar las sessiones, porque son mas seguras que las cookies ( ya que las cookies se pueden modificar ).
Primero vamos a la bd, a crear la tabla. La tabla puede ser como esta:
Código sql:
Ver original
  1. CREATE TABLE `users` (
  2. `id` INT( 10 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `nick` VARCHAR( 100 ) NOT NULL ,
  4. `clave` VARCHAR( 100 ) NOT NULL ,
  5. `email` VARCHAR( 100 ) NOT NULL
  6. ) ENGINE = MYISAM ;

Despues creamos un archivo de conexion a la bd y creacion de la session, lo llamare config.php ( porque tiene las configuraciones, tambien lo pueden llamar de la manera que quieran ). En este podremos:
Código php:
Ver original
  1. <?php
  2. session_start(); // Iniciamos la session, es muy importante esto.
  3. // Aqui definiremos los datos de conexion, en un array.
  4. $conexion_dat['host'] = "localhost"; // Aqui pondremos el ip o host de la bd
  5. $conexion_dat['usuario'] = "root"; // Aqui ponemos el usuario de la bd
  6. $conexion_dat['clave'] = ""; // Aqui ponemos la clave de la bd
  7. $conexion_dat['bd'] = "base_de_datos"; // Aqui ponemos la bd
  8.  
  9. $conexion=mysql_connect($conexion_dat['host'],$conexion_dat['usuario'],$conexion_daton['clave']) or die(mysql_error()); // Aqui conectamos a la bd, si falla ( or die ), mostramos el error que nos da mysql_error()
  10. $bd_conect=mysql_select_db($conexion_dat['bd'],$conexion) or die(mysql_error()); // Aqui nos conectamos a la bd, llo mismo que arriba si falla.
  11. ?>
Despues nesesitamos el formulario de login, para eso creamos un archivo llamado login.html ( tambien lo pueden llamar de otra manera y otro formato como php ):
Código html:
Ver original
  1. <form name="login_form" method="post" action="entrar.php">
  2.  <label> Usuario:
  3.     <input type="text" name="usuario" id="usuario"></label>
  4.     <br>
  5.    <label> Clave:
  6.     <input type="password" name="clave" id="clave">
  7.   <br>
  8.   <label>
  9.     <input type="submit" name="button" id="button" value="Entrar">
  10.   </label>
  11. </form>
Despues creamos el archivo que va a reconoser al usuario, lo llamaremos entrar.php ( pueden llamarlo de otra forma, pero modifique en el formulario el nombre ):
Código php:
Ver original
  1. <?php
  2. include('config.php'); // Incluimos la conexion a la bd y la session
  3.  
  4. $user=$_POST['usuario'];
  5. $clave=$_POST['clave'];
  6.  
  7. $consulta="SELECT * FROM users WHERE nick='".$user."' AND clave='".$clave."'"; // Selecionamos el nick y la clave
  8. $consultar=mysql_query($consulta,$conexion) or die(mysql_error()); // En el primer parametro ponemos la consulta, y en el segundo ponemos la conexion a la bd
  9. if(mysql_num_rows($consultar)==1){ // mysql_num_rows sirve para saber cuantos resultados devolvio la consulta
  10.     // Si devolvio 1 resultado, es que los datos del usuario estan bien, porque selecionamos de la bd el nick y la clave.
  11.     // es casi imposible que devuelva mas de 1, porque deven aver 2 personas que se registren con el mismo nick y clave, pero ya
  12.     // vamos a evitar eso en el registro
  13.    
  14.     $_SESSION['usuario']=$user; // Creamos la session y le damos un dato para que lo guarde, con esta session identificamos al usuario en cualquier parate de la web.
  15.    
  16.     echo "Se a logeado correctamente como ".$user;
  17. }else{ // Sino devolvio 1 resultado
  18.     echo "Datos inconrrectos. Intente denuevo.";
  19. }
  20. ?>
Despuse crearemos el form de registro, lo llamaremos registro.html (tambien puede ser de otra manera y extencion), como este:
Código html:
Ver original
  1. <form name="register_form" method="post" action="registrar.php">
  2.  <label> Usuario:
  3.     <input type="text" name="user" id="user"></label>
  4.     <br>
  5.  <label>  Clave:
  6.     <input type="password" name="clave" id="clave"></label>
  7.     <br>
  8.   <label> Email:
  9.     <input name="email" type="text" id="email"></label>
  10.     <br>
  11.   <label>
  12.     <input type="submit" name="entra" id="button" value="Entrar">
  13.   </label>
  14. </form>
Despues crearemos el archivo registrar.php:
Código php:
Ver original
  1. <?php
  2. include('config.php'); // Incluimos la conexion a la bd y la session
  3.  
  4. $user=$_POST['usuario'];
  5. $clave=$_POST['clave'];
  6. $email=$_POST['email'];
  7.  
  8. $consulta="SELECT * FROM users WHERE nick='".$user."'"; // Selecionamos el nick, para comprobar si existe
  9. $consultar=mysql_query($consulta,$conexion) or die(mysql_error()); // Consultamos
  10. if(mysql_num_rows($consultar)==1){ // Si devuelve 1 registro, ya existe el usuario
  11.     echo "Usuario ya existente.";
  12. }else{ // Si no...
  13.     $consulta_reg="INSERT INTO users (nick,clave,email) VALUES ('".$user."','".$clave."','".$email."')";
  14.     $consultar_reg=mysql_query($consulta_reg,$conexion) or die(mysql_error()); // Creamos el usuario
  15.     echo "Usuario registrado correctamente.";
  16. }
  17. ?>
Ahora creamos el archivo salir.php:
Código php:
Ver original
  1. include('config.php'); // Incluimos la conexion a la bd y la session
  2.  
  3. unset($_SESSION['usuario']); // Borramos la session
  4. echo "Chau!";
Terminamos nusetro sistema de usuario

Ahora, solo falta saber cuanto esta logeado y cuando no. Para eso en el archivo index.php ( o puede ser otro), incluimos el archivo config.php:
Código php:
Ver original
  1. include('config.php'); // Incluimos la conexion a la bd y la session
Esto es importante para que no se pierda la session. Hay que incluirlo en cada pagina que queramos saber si esta logeado. Y por ultimo para saber si esta logeado, esto ( oviamente tiene que estar el include de config.php ):
Código php:
Ver original
  1. if(isset($_SESSION['usuario'])){ // isset sirve para saber si existe la session.
  2. echo "Estas logeado";
  3. }else{
  4. echo "No estas logeado!";
  5. }
Es un simple isset que sirve para saber si existe una variable ( devuelve true si existe o false si no existe ).

Bueno,, eso es todo

Espero que le alla servido.
Salu2

PD: No probe el codigo xD, lo ise mientras escribia el tutorial.
__________________
Half Music - www.halfmusic.com

Última edición por pato12; 07/08/2009 a las 12:05 Razón: Aclarar seguridad
  #2 (permalink)  
Antiguo 06/08/2009, 17:41
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 10 meses
Puntos: 14
Respuesta: [APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

Estimado , muy buen aporte , tendria para hacerle unos comentarios que creo le seran de utilidad para mejorar las tecnicas de programación y aplicar seguridad en sus desarrollos.

Por empezar en que punto usted securiza los datos de recibe por parte del usuario?..yo no veo dicha etapa de purificado de los datos , mi recomendación es trabajar con PDO para manejar los acceso a la base de datos.Le explico todo profesional o amateur cuando desarrolla un software debe pensar en manejar la consistencia y la portabilidad de los datos , es decir PDO es una capa de abstracción que tal como dice el nombre abstrae al programador de reescribir una y otra vez la capa de acceso a la base de datos.

Pero el punto en su aplicación es más sencillo de resolver ya que es un simple ejemplo y nada más, con lo cual con mysql_real_escape_string ya bastaria para añadir un poco más de seguridad al script.

Saludos y espero que le sea de utilidad mi sugerencia.
  #3 (permalink)  
Antiguo 06/08/2009, 18:19
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 1 mes
Puntos: 101
Respuesta: [APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

Hola,
Gracias, pero esto era un ejemplo corto para los principiantes ( porque me contactan mucho para que los ayude a hacer el sistema ). Tambien no le puse filtros ni encripte los datos para que sea basico que puedan entender mas el codigo. Porque mi otros aportes me preguntan mucho para que sirve esto... xD
Salu2
__________________
Half Music - www.halfmusic.com
  #4 (permalink)  
Antiguo 06/08/2009, 18:30
Avatar de bng5  
Fecha de Ingreso: junio-2009
Ubicación: 127.0.0.1
Mensajes: 269
Antigüedad: 15 años, 5 meses
Puntos: 24
Respuesta: [APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

Tendrías que tomarte un poco más de tiempo al escribir este tipo de aportes.
Me parece que hay una confusión con el uso de las cookies y sesiones de php, no se usa una u otra, normalmente se usan en conjunto.
También te recomiendo que comiences a usar la librería mysqli en lugar de mysql y xhtml en luga de html4.

Quizás quedaría mejor orientado a objetos.

Última edición por bng5; 06/08/2009 a las 18:33 Razón: Agregado: Quizás quedaría mejor orientado a objetos.
  #5 (permalink)  
Antiguo 06/08/2009, 18:46
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 1 mes
Puntos: 101
Respuesta: [APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

ya me olvidaron en el foro de php xD
Cita:
Tendrías que tomarte un poco más de tiempo al escribir este tipo de aportes. [...]
Me tarde mucho para hacerlo lo mas basico y que se entienda bien

Cita:
[...]
Me parece que hay una confusión con el uso de las cookies y sesiones de php, no se usa una u otra, normalmente se usan en conjunto.
[...]
Al principio dije que en este tutorial voy a usar sessiones no quise poner las dos para no confundir mucho, en mis webs si uso las 2, para mantener la session activa ( pero no guardo los datos en la cookies, sino lo guardo en la bd con con codigo al azar que rescato cuanto no esta la session ).

Cita:
[...]
También te recomiendo que comiences a usar la librería mysqli en lugar de mysql y xhtml en luga de html4.

Quizás quedaría mejor orientado a objetos.
No me gusta usar liberilas. Si se usar orientacio al objeto (POO).

Salu2
__________________
Half Music - www.halfmusic.com
  #6 (permalink)  
Antiguo 06/08/2009, 18:46
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Respuesta: [APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

Hola Que crees tu que sucedería si yo colocara en por el campo usuario pasara esto

' OR '1'='1' ? Creo que me logearia sin tener que estar registrado. solo queria hacer esa acotacion..
__________________
O nos hacemos miserables o nos hacemos fuertes , la cantidad de trabajo es la misma.
  #7 (permalink)  
Antiguo 06/08/2009, 18:48
 
Fecha de Ingreso: agosto-2009
Mensajes: 247
Antigüedad: 15 años, 3 meses
Puntos: 10
Respuesta: [APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

Buenisimo! seria bueno si todo eso se pudiera encapsular en algun objeto.. pero como explicacion es muy buen aporte
  #8 (permalink)  
Antiguo 06/08/2009, 19:41
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 10 meses
Puntos: 14
Respuesta: [APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

Estimado , es verdad que usted quizo hacer la aportación y no dudo de sus conocimientos , pero hacer un ejemplo basico para principiantes no es dejar de tratar un concepto tan importante como la seguridad y menos en un sistema de usuarios , si enseñamos las cosas debido a que son principiantes cuanto más remarcar estas cosas , imagine que hay mucha gente que hace copy and paste de los codigos aqui expuestos.

Saludos!
  #9 (permalink)  
Antiguo 06/08/2009, 20:28
 
Fecha de Ingreso: julio-2009
Ubicación: En mi casa
Mensajes: 48
Antigüedad: 15 años, 4 meses
Puntos: 3
Respuesta: [APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

es verdad, sin embargo la forma adecuada es entender y no copiar. Por ejemplo yo soy principiante, pero antes de preguntar intento, busco y si no encuentro, pues hago un post y lo hago para aprender, no para que alguien me de la solución; copiar y pegar.
Por que después, cuando en el futuro necesite de habilidad para resolver algún otro problema mas complejo, necesitare esa experiencia resolviendo y pensando los problemas...
pero gracias por el aporte.
  #10 (permalink)  
Antiguo 06/08/2009, 21:00
Avatar de pato12  
Fecha de Ingreso: septiembre-2007
Ubicación: Salta
Mensajes: 1.620
Antigüedad: 17 años, 1 mes
Puntos: 101
Respuesta: [APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

Bueno aqui les hice el codigo en POO, pero no lo probe xD
Código php:
Ver original
  1. <?php
  2. /********************************************************\
  3. *                     SistemaRegistro                    *
  4. **********************************************************
  5. * Autor: Pato12 de forosdelweb.com                       *
  6. * Version: 1.5 (BETA)                                    *
  7. * Web del autor: halfmusic.com                           *
  8. * Descripcion:                                           *
  9. * Sirve para registrar, logiar, revisar si un            *
  10. * usuario existe.                                        *
  11. **********************************************************
  12. **********************************************************
  13. * Este scriopt PHP es libre de usar siempre              *
  14. * cuando no borren estas lineas y respeten la            *
  15. * Licencia: GNU General Public License                   *
  16. * http://creativecommons.org/licenses/GPL/2.0/deed.es_AR *
  17. *********************************************************/
  18. class SistemaRegistro{
  19.     private $data=array(
  20.                     'conexion'=>false,
  21.                     'tabla'=>false,
  22.                     'campos'=>false,
  23.                     'errores'=>array(),
  24.                     'md5'=>false
  25.                     );
  26.     public function __construct($conexion=false,$tabla=false,$campos=false){
  27.         $error=false;
  28.         if($conexion === false){
  29.             $this->setError("Conexion no valida.");
  30.             $error=true;
  31.         }
  32.         if($tabla === false){
  33.             $this->setError("Tabla no valida.");
  34.             $error=true;
  35.         }
  36.         if($campos === false || !is_array($campos)){
  37.             $this->setError("Campos no validos.");
  38.             $error=true;
  39.         }
  40.         if($error === true)
  41.             return !$error;
  42.         $this->data['tabla']=$this->filtro($tabla);
  43.         $this->data['campos']=$campos;
  44.         $this->data['conexion']=$conexion;
  45.     }
  46.     public function login($user,$clave){
  47.         if($this->data['conexion'] === false)
  48.             return $this->data['conexion'];
  49.         $clave=$this->data['md5']?md5($this->filtro($clave)):$this->filtro($clave);
  50.         $consulta=sprintf("SELECT * FROM %s WHERE %s='%s' AND %s='%s'",$this->data['tabla'],$this->data['campos'][0],$this->filtro($user),$this->data['campos'][1],$clave);
  51.         $consultar=mysql_query($consulta,$this->data['conexion']) or die(mysql_error());
  52.         return mysql_num_rows($consultar)==1;
  53.     }
  54.     public function existeUser($user){
  55.         if($this->data['conexion'] === false)
  56.             return $this->data['conexion'];
  57.         $user=stripslashes($this->filtro($user));
  58.         $consulta=sprintf("SELECT * FROM %s WHERE %s='%s'",$this->data['tabla'],$this->data['campos'][0],$this->filtro($user));
  59.         $consultar=mysql_query($consulta,$this->data['conexion']) or die(mysql_error());
  60.         return mysql_num_rows($consultar)==1;
  61.     }
  62.     public function registrar($datos,$campos){
  63.         if($this->data['conexion'] === false)
  64.             return $this->data['conexion'];
  65.         if(!is_array($campos)||!is_array($datos))
  66.             $this->setError("Los campos o datos, no son array.");
  67.         $consulta=sprintf("INSERT INTO %s (%s) VALUES (%s)",$this->data['tabla'],implode(',',$campos),'\''.implode("','",$datos).'\'');
  68.         return mysql_query($consulta,$this->data['conexion']);
  69.     }
  70.     public function getError(){
  71.         return $this->data['errores'];
  72.     }
  73.     public function filtro($value){
  74.         return addslashes(htmlentities(trim($value)));
  75.     }
  76.     private function setError($err){
  77.         $this->data['errores'][]=$err;
  78.     }
  79. }
  80. ?>
Gracias
Salu2
__________________
Half Music - www.halfmusic.com
  #11 (permalink)  
Antiguo 07/08/2009, 02:23
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 16 años, 4 meses
Puntos: 416
Respuesta: [APORTE] ¿ Que es y como puedo hacer un sistema de usuario ?

Cita:
Iniciado por bng5 Ver Mensaje
Tendrías que tomarte un poco más de tiempo al escribir este tipo de aportes.
Me parece que hay una confusión con el uso de las cookies y sesiones de php, no se usa una u otra, normalmente se usan en conjunto.
También te recomiendo que comiences a usar la librería mysqli en lugar de mysql y xhtml en luga de html4.

Quizás quedaría mejor orientado a objetos.
Usar MySQLi es opcional. Lo que se expone aquí no es un código de copia y pega, es un aporte para que te ayude a entender como funciona un sistema de usuarios.

Aunque, si debería dejarse claro lo que falta para que este "completo" (como seguridad).
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 7 personas




La zona horaria es GMT -6. Ahora son las 18:30.