Foros del Web » Programando para Internet » PHP »

Registro de usuarios

Estas en el tema de Registro de usuarios en el foro de PHP en Foros del Web. Hola foreros, les cuento que hice un registro de usuarios, donde los datos se completan en un formulario y son enviados a la base de ...
  #1 (permalink)  
Antiguo 05/08/2010, 11:21
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 13 años, 8 meses
Puntos: 22
Pregunta Registro de usuarios

Hola foreros, les cuento que hice un registro de usuarios, donde los datos se completan en un formulario y son enviados a la base de datos. Se me ocurrio completar el formulario dos veces con un mismo username, y los datos fueron enviados a la BD, me pregunto yo ¿como hago que mi formulario no deje registrar un username ya existente? Porque imaginen a la hora de hacer el login como va a identificara que usuario es si existen dos iguales.

Otras cuestiones:
1) ¿como hago que en el formulario de registro al registrarse tengan que confirmar el mail y la contraseña?

2) ¿Como hago que al terminar el registro se envie un mail a la casilla de correo de la persona que se registro para que confirme la cuenta?

3) ¿Como mostrar un mensaje a la persona si se registro correctamente y el mensaje de que se le envio un mail a su casilla de correo?

Aca les dejo los codigos del formulario de registro:

Código PHP:
<form name="form1" method="post" action="insertar.php">
  
Username:
  <
label>
  <
input type="text" name="username" id="username">
  </
label>
  <
p>Password:
    <
label>
    <
input type="password" name="password" id="password">
    </
label>
  </
p>
  <
p>Nombre:
    <
label>
    <
input type="text" name="nombre" id="nombre">
    </
label>
  </
p>
  <
p>Apellido:
    <
label>
    <
input type="text" name="apellido" id="apellido">
    </
label>
  </
p>
  <
p>Telefono:
    <
label>
    <
input type="text" name="telefono" id="telefono">
    </
label>
  </
p>
  <
p>E-mail:
    <
label>
    <
input type="text" name="email" id="email">
    </
label>
  </
p>
  <
p>
    <
label>
    <
input type="submit" name="button" id="button" value="Enviar">
    </
label>
  </
p>
</
form
Y aca les dejo el codigo para insertar los datos en la BD:

Código PHP:
<?php
// coneccion con la base de datos
$link mysql_connect("ELNOMBRE DE MI HOST","USUARIO","CONTRASEÑA") or die ('No se puede conectar con la DB por que: ' mysql_error());
mysql_select_db("a5078435_alfa",$link);

//recojer los datos del formulario
$username $_POST['username']; 
$password $_POST['password']; 
$nombre $_POST['nombre']; 
$apellido $_POST['apellido']; 
$telefono $_POST['telefono']; 
$email $_POST['email']; 

//con esta secuencia SQL insertamos los datos en nuestra base de datos
$sql="INSERT INTO usuarios (username,password,nombre,apellido,telefono,email) VALUES ('$username', '$password','$nombre','$apellido','$telefono','$email')";
mysql_query($sql,$link) or die (mysql_error());  
mysql_close($link); 
?>

Muchas gracias por su tiempo, saludos!
  #2 (permalink)  
Antiguo 05/08/2010, 11:42
Avatar de eZakto  
Fecha de Ingreso: julio-2008
Mensajes: 214
Antigüedad: 15 años, 9 meses
Puntos: 5
Respuesta: Registro de usuarios

Es terrible tu sistema de usuarios. Cualquiera puede venir y destruir tu db así de simple.

Pero bueno, más o menos tus dudas se responderían así:
Lo del nombre de usuario: antes de insertar los datos en la db, primero haces un select a un registro que tenga el mismo nombre de usuario. Si existe, no registra y devuelve error. Si no, procede.

Las otras:
1)Pones dos campos para cada uno, y cuando se envíen los datos haces una simple comprobación (if $variable1 == $variable2) para continuar.
2)Con la función mail()
3)Si todo sale bien, haces un echo del mensaje? Me sorprende que si tu escribiste ese código, no sepas hacer nada más.

Saludos.
__________________
eZakto™
  #3 (permalink)  
Antiguo 05/08/2010, 11:47
Avatar de danico90  
Fecha de Ingreso: febrero-2009
Ubicación: San José, Costa Rica
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: Registro de usuarios

Para lo de identificar los usuarios necesitas tener un campo que sea llave primaria en la base de datos generalmente yo creo un campo tipo int con autoincrement para eso. De esta manera puedes repetir username(esto es lo normal siempre).

Las otras cosas son solo validaciones a los datos.
  #4 (permalink)  
Antiguo 05/08/2010, 12:41
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 13 años, 8 meses
Puntos: 22
Respuesta: Registro de usuarios

Cita:
Iniciado por eZakto Ver Mensaje
Es terrible tu sistema de usuarios. Cualquiera puede venir y destruir tu db así de simple.

Pero bueno, más o menos tus dudas se responderían así:
Lo del nombre de usuario: antes de insertar los datos en la db, primero haces un select a un registro que tenga el mismo nombre de usuario. Si existe, no registra y devuelve error. Si no, procede.

Las otras:
1)Pones dos campos para cada uno, y cuando se envíen los datos haces una simple comprobación (if $variable1 == $variable2) para continuar.
2)Con la función mail()
3)Si todo sale bien, haces un echo del mensaje? Me sorprende que si tu escribiste ese código, no sepas hacer nada más.

Saludos.
Porque dices que es terrible mi sistema de usuarios y que cualquiera puede venir y destruir mi db asi de simple???

No entendi bien como hacer lo de select a un registro, te comento que soy nuevo en esto y voy aprendiendo con manuales y videos tutoriales.... si me puedes escribir un codigo de ejemplo te agradeceria mucho!
Saludos!
  #5 (permalink)  
Antiguo 05/08/2010, 12:46
Avatar de danico90  
Fecha de Ingreso: febrero-2009
Ubicación: San José, Costa Rica
Mensajes: 148
Antigüedad: 15 años, 2 meses
Puntos: 13
Respuesta: Registro de usuarios

Mejor sigue este tutorial:

http://ayuda.fotopex.com/programacio...n-php-y-mysql/

Ahí vas a ver que te hacen falta muchas cosas.

No habla mucho sobre medidas de seguridad(sólo lo menciona un poco al final) pero eso puedes investigarlo después.

  #6 (permalink)  
Antiguo 05/08/2010, 13:06
Avatar de truman_truman  
Fecha de Ingreso: febrero-2010
Ubicación: /home/user
Mensajes: 1.341
Antigüedad: 14 años, 2 meses
Puntos: 177
Respuesta: Registro de usuarios

PROBÁ con esto
no lo probé pero creo que te puede servir

Código PHP:
<?php
// si el boton el presionado ejecutamos
if (isset($_POST['button'])){
          
      
// coneccion con la base de datos
      
$link mysql_connect("ELNOMBRE DE MI HOST","USUARIO","CONTRASEÑA") or die ('No se puede conectar con la DB por que: ' mysql_error());
      
mysql_select_db("a5078435_alfa",$link);
      
      
//recojer los datos del formulario
      
$username $_POST['username']; 
      
$password $_POST['password']; 
      
$nombre $_POST['nombre']; 
      
$apellido $_POST['apellido']; 
      
$telefono $_POST['telefono']; 
      
$email $_POST['email']; 
      
      
      
// seleccionamos de la base los campos que contengan el nombre de usuario que han ingresado
      
      
$sql_username=mysql_query("select * from usuarios where username='$username'",$link);
      
      
// vemos cuantos campos existen con ese nombre de usuario
      
$total_sql_username=mysql_num_rows($sql_username);
      
      
// si hay mas que cero osea si ahy al menos una entrada, entonces nos detenemos aca y no dejamos que se produzca el insert
      
if ($total_sql_username>0){
          
          
$error_ya_hay_usuario_con_ese_nombre="El nombre de usuario esta en uso";
          
          
      }else{
      
//con esta secuencia SQL insertamos los datos en nuestra base de datos
      
$sql="INSERT INTO usuarios (username,password,nombre,apellido,telefono,email) VALUES ('$username','$password','$nombre','$apellido','$telefono','$email')";
      
mysql_query($sql,$link) or die (mysql_error()); 
      }
      
mysql_close($link);
}
?> 

<?php if ($error_ya_hay_usuario_con_ese_nombre){echo $error_ya_hay_usuario_con_ese_nombre;} ?>

<form name="form1" method="post" action="insertar.php">
  Username:
  <label>
  <input type="text" name="username" id="username" value="<?php if (isset($_POST['username'])){echo $_POST['username'];} ?>">
  </label>
  <p>Password:
    <label>
    <input type="password" name="password" id="password">
    </label>
  </p>
  <p>Nombre:
    <label>
    <input type="text" name="nombre" id="nombre" value="<?php if (isset($_POST['nombre'])){echo $_POST['nombre'];} ?>">
    </label>
  </p>
  <p>Apellido:
    <label>
    <input type="text" name="apellido" id="apellido" value="<?php if (isset($_POST['apellido'])){echo $_POST['apellido'];} ?>">
    </label>
  </p>
  <p>Telefono:
    <label>
    <input type="text" name="telefono" id="telefono" value="<?php if (isset($_POST['telefono'])){echo $_POST['telefono'];} ?>">
    </label>
  </p>
  <p>E-mail:
    <label>
    <input type="text" name="email" id="email" value="<?php if (isset($_POST['email'])){echo $_POST['email'];} ?>">
    </label>
  </p>
  <p>
    <label>
    <input type="submit" name="button" id="button" value="Enviar">
    </label>
  </p>
</form>
__________________
la la la
  #7 (permalink)  
Antiguo 05/08/2010, 20:53
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Registro de usuarios

Cita:
Iniciado por danico90 Ver Mensaje
Para lo de identificar los usuarios necesitas tener un campo que sea llave primaria en la base de datos generalmente yo creo un campo tipo int con autoincrement para eso. De esta manera puedes repetir username(esto es lo normal siempre).

Las otras cosas son solo validaciones a los datos.
disculpa si difiero pero el nick o nombre de usuario como kieras llamar debe de ser unico xq para ingresar al sistema supon que tenemos el mismo usuario como harias la consulta si tienes dos usuarios que son iguales?? como sabe el sistema cual es tu id y cual el mio?? intenta crear un usuario en una pagina de correo q ya sea existente para ver si te lo permite hacer??
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #8 (permalink)  
Antiguo 05/08/2010, 21:02
 
Fecha de Ingreso: enero-2008
Mensajes: 68
Antigüedad: 16 años, 3 meses
Puntos: 1
El problema de la unicidad del nombre de usuario se resuelve en la base de datos.

ALTER TABLE usuarios MODIFY usuario VARCHAR(100) UNIQUE

Si ejecutas esto en el servidor de base de datos, la misma base de datos se encargará de verificar si ese nombre de usuario ya existe.

Estas verificaciones nunca deben hacerse por PHP, ya que la Base de Datos es mucho más eficiente en esta materia. Si se hace por PHP se está perdiendo tiempo y memoria, dos cosas de un inmenso valor en la informática.

Sobre tus consultas:

1) ¿como hago que en el formulario de registro al registrarse tengan que confirmar el mail y la contraseña?

Deberías enviarle un mail a esa persona, esto lo haces con la función mail().

si haces esto, puedes crear el usuario y dar un password por defecto (desconocido por el usuario) y guardar en otra tabla, su nombre de usuario y el password que el te dio.

¿Para qué esto?
Así, si el usuario no confirma su mail, no podrá acceder al usuario, porque el password registrado no sería el que el tipeo.

¿Y cómo reestablecer su password?
EN el link que mandarás por correo, donde deberá acceder el usuario, puedes dar un argumento con el nombre de usuario (con algun tipo de encriptación por seguridad, te recomiendo MD5), así, cuando haga click, el PHP buscará a ese usuario en la tabla de respaldo, y cambiará el password creado por ti, por el password que el usuario te dio.

2) ¿Como hago que al terminar el registro se envie un mail a la casilla de correo de la persona que se registro para que confirme la cuenta?

Con la función mail()

3) ¿Como mostrar un mensaje a la persona si se registro correctamente y el mensaje de que se le envio un mail a su casilla de correo?

con un alert() de javascript puede ser una forma sencilla

Última edición por GatorV; 06/08/2010 a las 09:04
  #9 (permalink)  
Antiguo 05/08/2010, 21:32
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Registro de usuarios

Cita:
Iniciado por fcopacheco Ver Mensaje
El problema de la unicidad del nombre de usuario se resuelve en la base de datos.

ALTER TABLE usuarios MODIFY usuario VARCHAR(100) UNIQUE

Si ejecutas esto en el servidor de base de datos, la misma base de datos se encargará de verificar si ese nombre de usuario ya existe.

Estas verificaciones nunca deben hacerse por PHP, ya que la Base de Datos es mucho más eficiente en esta materia. Si se hace por PHP se está perdiendo tiempo y memoria, dos cosas de un inmenso valor en la informática.
buenas comprendo lo que dices de echo coloco siempre el usuario de esa manera pero de que manera validas o mejor dicho informas al usuario cuando este intenta agregar un usuario?? lo que dijiste me parece logico y por eso se me creo la duda para ver si lo puedo implementar
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #10 (permalink)  
Antiguo 05/08/2010, 21:45
 
Fecha de Ingreso: enero-2008
Mensajes: 68
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Registro de usuarios

en el mysql_error() te dará el error.

el error será un duplicate entry
  #11 (permalink)  
Antiguo 05/08/2010, 21:50
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Registro de usuarios

exacto pero tu a un usuario en la pagina no le vas a mostrar duplicate entry, normalmente se le muestra que ya existe un usuario con ese nick o algo asi, algunos en un alter() otros con un echo y un diseño que se vea presentable como lo haria en este caso?? disculpa la preguntadera pero de verdad no lo habia escuchado de esa manera y me parecio buena pero como lo muestro amigablemente ??
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #12 (permalink)  
Antiguo 05/08/2010, 21:55
 
Fecha de Ingreso: enero-2008
Mensajes: 68
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Registro de usuarios

puedes leer el mysql_error(), y analizas el string.

Código PHP:
$test explode("Duplicate entry",mysql_error());
if(
count($test)>1){
   
// La entrada está duplicada

No he probado el código, pero creo que debería funcionar.
  #13 (permalink)  
Antiguo 05/08/2010, 21:57
Avatar de carlos_belisario
Colaborador
 
Fecha de Ingreso: abril-2010
Ubicación: Venezuela Maracay Aragua
Mensajes: 3.156
Antigüedad: 14 años
Puntos: 461
Respuesta: Registro de usuarios

bueno todos los dias se aprende algo no sabia que se podia hacer eso y asi me ahorro unas lineas de codigo gracias por la explicacion
__________________
aprende d tus errores e incrementa tu conocimientos
it's not a bug, it's an undocumented feature By @David
php the right way
  #14 (permalink)  
Antiguo 05/08/2010, 22:08
 
Fecha de Ingreso: enero-2008
Mensajes: 68
Antigüedad: 16 años, 3 meses
Puntos: 1
Respuesta: Registro de usuarios

otra manera:

Código PHP:
<?
include "mysql_connect.php";

if(
mysql_query("INSERT INTO #tabla# VALUES( #valores# )"))
    print 
"se insertó";
else{
    
$str mysql_error();
    if(
substr($str,0,15)=="Duplicate entry")
        print 
"usuario duplicado";
    else
        print 
"Error MySQL: $str";
}
?>
Este código está probado y funciona.
El otro lo acabo de probar y también funciona. Ustedes ahora podrán escoger.

Última edición por fcopacheco; 05/08/2010 a las 23:23
  #15 (permalink)  
Antiguo 05/08/2010, 22:54
Avatar de CCB
CCB
 
Fecha de Ingreso: noviembre-2009
Ubicación: Perú
Mensajes: 65
Antigüedad: 14 años, 5 meses
Puntos: 3
Respuesta: Registro de usuarios

Quizas te interese mi post, ahi muestro un registro con clases y funciones




http://www.forosdelweb.com/f18/registro-usuarios-con-class-php-830914
  #16 (permalink)  
Antiguo 08/08/2010, 23:02
Avatar de gringofer  
Fecha de Ingreso: agosto-2010
Ubicación: Córdoba, Argentina
Mensajes: 338
Antigüedad: 13 años, 8 meses
Puntos: 22
Respuesta: Registro de usuarios

Cita:
Iniciado por fcopacheco Ver Mensaje
otra manera:

Código PHP:
<?
include "mysql_connect.php";

if(
mysql_query("INSERT INTO #tabla# VALUES( #valores# )"))
    print 
"se insertó";
else{
    
$str mysql_error();
    if(
substr($str,0,15)=="Duplicate entry")
        print 
"usuario duplicado";
    else
        print 
"Error MySQL: $str";
}
?>
Este código está probado y funciona.
El otro lo acabo de probar y también funciona. Ustedes ahora podrán escoger.
Muchas gracias a todos por su respuesta, pero me gustaria si me pueden decir como aplicarlo en mi codigo, ya que no me sale y eh intentado de 1000 de formas, recuerden que soy nuevo en php.... si alguno me responde se lo agradeceria mucho, aca vuelvo a dejar mi codigo:
Código PHP:
<?php
$usuarioregistrado 
mysql_error ;

// coneccion con la base de datos
$link mysql_connect("xxxxxxxxxxxxxxxxxx","xxxxxxxxxxxxxxx","xxxxxxxxxxxxxxxxxxx") or die ('No se puede conectar con la DB por que: ' mysql_error());
mysql_select_db("a5078435_alfa",$link);

//recojer los datos del formulario
$username $_POST['username']; 
$password $_POST['password']; 
$nombre $_POST['nombre']; 
$apellido $_POST['apellido']; 
$telefono $_POST['telefono']; 
$email $_POST['email']; 

//con esta secuencia SQL insertamos los datos en nuestra base de datos
$sql="INSERT INTO usuarios (username,password,nombre,apellido,telefono,email) VALUES ('$username', '$password','$nombre','$apellido','$telefono','$email')";
mysql_query($sql,$link) or die (mysql_error());
mysql_close($link); 

?>

Última edición por gringofer; 09/08/2010 a las 17:24

Etiquetas: registro, usuarios
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




La zona horaria es GMT -6. Ahora son las 14:19.