En este tutorial desarrollaremos y explicaremos un sistema de registro de usuarios, este tutorial es una continuación de este otro donde vimos como crear un sistema de login de usuarios.
1. Crear la tabla en MySQL
Vamos a comenzar preparando una tabla en nuestra base de datos, la cual almacenara la información de los usuarios, para crear la tabla simplemente copia y ejecuta la siguiente consulta SQL:
CREATE TABLE `usuarios` (
`idusuario` INT(11) NOT NULL AUTO_INCREMENT,
`usuario` VARCHAR(20) NOT NULL,
`password` VARCHAR(10) NOT NULL,
PRIMARY KEY (`idusuario`)
)
2. Conectando a MySQL en PHP
Ya una vez que tengamos la estructura de nuestra tabla, creamos un archivo llamado conexion.php.
<?php
// datos para la coneccion a mysql define('DB_SERVER','localhost');
define('DB_NAME','TU_BASE_DE_DATOS');
define('DB_USER','TU_USUARIO');
define('DB_PASS','TU_CLAVE');
La funcion define como su nombre lo dice, se usa para definir una constante nominada, que nos permite almacenar valores escalares(string, integer, float, boolean y nulos).
$con = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
mysql_select_db(DB_NAME,$con);
?>
La función de mysql_connect nos servira para abrir una conexión al servidor de MySQL usando los 3 parámetros que declaramos anteriormente. Luego mysql_select_db selecciona la base de datos usando 2 parámetros, el nombre de la base de datos y la conexión a usar.
Código completo
<?php // datos para la conexion a mysql define('DB_SERVER','localhost');
define('DB_NAME','TU_BASE_DE_DATOS');
define('DB_USER','TU_USUARIO');
define('DB_PASS','TU_CLAVE');
$con = mysql_connect(DB_SERVER,DB_USER,DB_PASS); mysql_select_db(DB_NAME,$con);
?>
4. index.php
Ahora pasamos el archivo index.php, el cual contendrá el formulario de registro y al mismo tiempo el mensaje de «fue registrado correctamente» o «faltan llenar campos».
<?php session_start(); include_once "conexion.php";
session_start() crea una sesión para ser usada mediante una petición GET o POST, o pasado por una cookie y la sentencia include_once es la usaremos para incluir el archivo de conexión a la base de datos que creamos anteriormente.
<form class="registro" action="" method="post">
<div><label>Usuario:</label> <input type="text" name="usuario"></div>
<div><label>Clave:</label> <input type="password" name="password"></div>
<div><label>Repetir Clave:</label> <input type="password" name="repassword"></div>
<div><input type="submit" name="enviar" value="Registrar"></div>
</form>
Creamos el formulario con el campo de Usuario que se llamara $_POST[‘usuario’] y 2 campos para la clave y uno mas para confirmar si escribió bien la clave, se llamaran $_POST[‘password’] y $_POST[‘repassword’] respectivamente, procedemos a escribir el codigo que procesara y validara lo que el usuario ingrese:
if(isset($_POST['enviar'])) {
if($_POST['usuario'] == '' or $_POST['password'] == '' or $_POST['repassword'] == '') {
echo 'Por favor llene todos los campos.';
} else {
$sql = 'SELECT * FROM usuarios';
$rec = mysql_query($sql);
$verificar_usuario = 0;
while($result = mysql_fetch_object($rec)) {
if($result->usuario == $_POST['usuario']) {
$verificar_usuario = 1;
}
}
if($verificar_usuario) {
if($_POST['password'] == $_POST['repassword']) {
$usuario = $_POST['usuario'];
$password = $_POST['password'];
$sql = "INSERT INTO usuarios (usuario,password) VALUES ('$usuario','$password')";
mysql_query($sql);
echo 'Usted se ha registrado correctamente.';
} else {
echo 'Las claves no son iguales, intente nuevamente.';
}
} else {
echo 'Este usuario ya ha sido registrado anteriormente.';
}
}
}
- Linea 1: La primera condición es para saber cuando el formulario haya sido enviado.
- Linea 3: Si los campos están vacÃos muestra el siguiente mensaje, caso contrario sigue el siguiente bloque de código.
- Linea 11, 15 y 21: Creamos la variable $verificar_usuario que empieza con un valor de 0, pero si la condición de la linea 15 resulta verdadera, entonces la variable toma el valor de 1 que quiere decir que ese nombre de usuario ya existe por lo tanto no se puede registrar.
- Linea 23: Si los campos son iguales, continua el registro o caso contrario saldrá un mensaje de error.
- Linea 27: Se insertan los datos a la base de datos, el usuario es registrado con exito y sale el mensaje correspondiente.
Decoración opcional con CSS
Esta parte es algo de CSS opcional ya que no influye en nada en el funcionamiento del sistema, es unicamente decorativa:
* {
font-size: 14px;
font-family: sans-serif;
}
form.registro {
background: none repeat scroll 0 0 #F1F1F1;
border: 1px solid #DDDDDD;
margin: 0 auto;
padding: 20px;
width: 278px;
}
form.registro div {
margin-bottom: 15px;
overflow: hidden;
}
form.registro div label {
display: block;
float: left;
line-height: 25px;
}
form.registro div input[type="text"],
form.registro div input[type="password"] {
border: 1px solid #DCDCDC;
float: right;
padding: 4px;
}
form.registro div input[type="submit"] {
background: none repeat scroll 0 0 #DEDEDE;
border: 1px solid #C6C6C6;
float: right;
font-weight: bold;
padding: 4px 20px;
}
.error {
color: red;
font-weight: bold;
margin: 10px;
text-align: center;
}
Franklin dice
Voy a ponerlo en practica y te comento como me va con esto.. Saludos y gracias por el aporte.
Aramando dice
Excelente, me encantan tu blog ademas son muy buenas las aportaciones para los que nos iniciamos Saludos. me encantaria si tubieras oportunidad de poner un poco más de pos de jquery y algunas de sus proncipales aplicaciones . gracias 🙂
Carlos Andrés Restrepo dice
Yo no usarÃa un while para saber si el usuario existe en la base de datos dado que tiene que recorrer toda la tabla consume muchos recursos mejor valido la existencia del usuario en el proprio query y si el query devuelve algo es porque existe y lo traigo en un arreglo
Nicolás Maldonado dice
Carlos, para los que no tienen tan claro el SQL, podrÃas bajar a tierra tu idea?
Raul dice
¿PodrÃas indicarnos como modificar el código para encriptar las contraseñas?
Gracias
Edwind Pineda dice
si, php ya tiene una funcion que hace eso:
$clave= md5($clave);
saludos
Juan Esteban dice
o lo podes hacer desde la sentencia de mysql
quedando de la sgte manera;
$sql = «INSERT INTO usuarios (usuario, password) VALUES (‘$usuario’,SHA(‘$password’))»;
saludos;
Neo dice
No puedo hacer login, ya que en el index.php me da error y no reconoce la contraseña.
He puesto tu sentencia SQL en registro.php, hay que añadir algo al index.php ?
gracias
Carlos Andrés Restrepo dice
es lo siguiente si voy a verficar la exstencia de un usuario en la base de datos mando el query completo asi $sql = ‘SELECT usuario, clave FROM usuarios where usuario=»$_POST[‘usuario’]» and clave=$_POST[‘password’]’; de esa forma el mismo query me devuelve la existencia del usuario y no tengo que leer toda la tabla, lo que develve el query es un arreglo de datos y entonces se puede leear asi $result[0] seria la posicion del usuario y $result[1] seria la clave estas posiciones se indican en el select de la sentencia sql de esa manera el while sobra solo queda el if asi
if($result[0]->usuario == $_POST[‘usuario’])
{
$verificar_usuario = 1;
}
espero haber sido claro
Ivan dice
Tu query esta mal, ya que si la contraseña es distinta, tampoco devolverá un valor, por ende insertarÃan nuevamente el mismo usuario pero con diferente contraseña
$sql = «SELECT idusuario FROM usuarios WHERE usuario = ‘».$_POST[‘usuario’].»‘»;
$rec = mysql_query($sql);
$verificar_usuario = 0;
if(mysql_num_fields($rec) > 0)
{
$verificar_usuario = 1;
}
esta es una manera sencilla, contamos cuantos usuarios existen en la tabla con el nombre ingresado por el formulario, devolvera las tuplas en la tabla que su usuario sea el contenido de $_POST[‘usuario’], en este caso utilize el idusuario para que no sea tanto traspaso de informacion innecesaria, ya que hacer un SELECT * es mover mucha informacion y al motor le podria doler con el tiempo
ahora, contamos cuantas tuplas devolvio la consulta, si es + de 0, quiere decir que ya existe un usuario y zas, no se deberia registrar, lo otro es casi lo mismo B:
fran dice
Todos hacen lo mismo copian y pegan y no saben si sirve o no… He hecho todos los formularios que estan en internet y ninguno sirven o le falta algo o la base de datos no sirve o algo parecido pero ninguno sirven, y si me dedico a criticar porque antes de postear algo que no sirve deberian probarlo primero, y lo segundo y se esto sirve deberian ser mas detallista a la hora de publicar algo para los que no saben como es mi caso.
Cree todos los archivos y del formulario no pasa, dicha sea de paso que el formulario esta mal explicado no se sabe que se hace con el cuadro largo que esta debajo de los form, donde va, si es un archivo aparte, con que se come eso… ademas creo que falta uno llamado registrar.php aunque no se porque desconozco solo por referencias de otros logging que he visto, y cuando estoy emocionado ninguno han corrido, ya molesta. solo por postear algo o ganar puntos.
Carlos Andrés Restrepo dice
@fran el codigo donde se almacena en la base de datos si aparece en el index.php en la siguiente linea
$sql = «INSERT INTO usuarios (usuario,password) VALUES (‘$usuario’,’$password’)»;
allà registra al usuario. Pero probe el demo y siempre me dice «Usted se ha registrado correctamente.» aun que registre el mismo usuario
Josue Ochoa dice
Por motivos de seguridad, el demo no esta conectado a una base de datos, es solo una demostracion de como funcionaria.
Josue Ochoa dice
«He hecho todos los formularios que estan en internet y ninguno sirven»
Tal vez el problema no radique en ellos, sino en ti, no generalices.
«para los que no saben como es mi caso.»
No se si te has dado cuenta pero al inicio del tutorial dice muy claramente «Dificultad: Intermedio», si no tienes ese nivel de conocimiento ¿que haces aca?
«dicha sea de paso que el formulario esta mal explicado no»
665 palabras y esta mal explicado…
Antes de comentar algo piensa en lo que vas a decir, para que no quedes en ridiculo.
Aramando dice
Hola Josué me gusta mucho tu página, me ayuda saber cómo se integra el php con el front end , ¿me gustarÃa saber si has manejado en algún proyecto con Json? , ¿Cuáles son sus las ventajas y desventajas de usarlo?, (agradecerÃa mucho un ejemplo práctico =P) he escuchado mucho sobre ello, pero la verdad no veo muy claro el por qué usarlo, en mi pequeños proyectos el manejo de datos lo hago desde peticiones a la base de datos con php como en los tutoriales que realizas saludos.
Josue Ochoa dice
He escuchado de JSON pero nunca me he adentrado mucho en ello, tengo entendido que tiene que ver con el intercambio de datos del lado del servidor (JavaScript) de forma avanzada.
Juan Esteban dice
Gracias por el gran aporte, te cuento todo me ha salido a la perfeccion solo que no me esta funcionando la comprobacion cuando el usuario ya existe simplemente me lo inserta en la base de datos y me actualiza el password .. en q puedo esta fallando?
Edwind Pineda dice
debes haber seguido mal los pasos, eso no debe de ocurrir
Juan Esteban dice
yo estoy acomodando el formulario a un software q tengo las tablas son … UID q es donde se almacena el usuario y password para las claves…. ya hice los cambios para q me inserte los usuarios pero no me funciona la validacion cuando un usuario ya existe…. q podria estar haciendo mal?
Juan Esteban dice
Ya me funciono sorry por el momento noob…….. Muchas gracias por el codigo
Esteban Sequeira dice
Gracias por el tutorial, me ha sido de mucha útilidad.
Edwind Pineda dice
me da mucho gusto saberlo
juan dice
muy buen sistema, pero no uses while para ver el tema de los usuarios, directamente pregunta si el usuario y la contraseña existen y si se corresponden nada mas. Y esta muy bien el tutorial como para empezar pero te falta la parte de seguridad, por ejemplo mysql_real_escape_string($_POST[‘usuario’])… pero la verdad, excelentemente explicado… muy claro.
Alfredo dice
saludos se que no viene al tema pero alguien sabe como editar un archivo php mediante un formulario con esta estructura
<?php
// datos para la conexion a mysql
define('DB_SERVER','localhost');
define('DB_NAME','TU_BASE_DE_DATOS');
define('DB_USER','TU_USUARIO');
define('DB_PASS','TU_CLAVE');
edgar dice
En que parte se inserta el codigo CSS ??
Ensei dice
edgar debes crear un archivo .css, por ejemplo «estilo.css» y enlazarlo desde el index.php adentro de las etiquetas , tambien puedes puedes ponerlo dentro de la misma pagina index, pero para mi gusto eso no se ve muy bien…… por otra parte buena la explicación y el ejemplo del registro de usuarios.
Ensei dice
adentro de las etiquetas HEAD, saludos
Psico dice
¿hay que configurar MySQL del hosting para resivir datos de un formulario?
iltse dice
Tengo una duda como puedo condicionar un campo para que se oculte con un hidden mientras no se cumpla la condicion???
Edwind Pineda dice
ahi tienes que usar ajax, tenemos un tutorial por ahi.
Gerardo Salazar dice
que hay estoy creando una pagina web ala cual le metere un sistema de resgistro de usuario el problema es que cuando sigo este tuto para inicializarme en eso, sale todo bien conecta y todo pero al darle registrar sale un error SQL y es el siguiente:
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\PhpProject1\registro.php on line 71
y no me registra nada en la BD checando con queryBrowser… ¿cual es el error?
Edwind Pineda dice
Estas usando mal las sintaxis del mysql seguro.
Lavinia dice
Me gusta mucho tu pagina, estoy empezando en esto del desarrollo web y he encontrado muy buenas cosas aqui, me quiero poner las pilas con css y javaScript!
Felicidades y no te voy a decir que sigas asà más bien que mejores aún más! 😀
Edwind Pineda dice
Muchas Gracias!
Liberto dice
Hola,
He creado una BD de usuarios, en esa BD se van creando usuarios q se registran en un formulario de registro, como hago para que cada vez que alguien se registra correctamente me llegue un email de nuevo usuario o nuevo registro, gracias.
Edwind Pineda dice
usando la funcion mail de php, en la parte donde se estan ingresando los datos a la BD y sale el mensaje de «Usted se ha registrado correctamente.»
Saludos
david dice
hola amigo tenga un muy cordial saludo me estoy iniciando en lo que es diseño y desarrollo web y tus tutoriales me han sido de mucha utilidad me preguntaba si no tendrás un tutorial de búsquedas dinámicas para una base de datos en mysql.
Marta Daniela dice
Hola amigos,
PodrÃan poner un ejemplo para el envio de un mail desde php? Les estaria muy agradecida.
ander dice
Me pueden ayudar no me funciona me sale esto abajo del formulario de registro y no funiona
usuario == $_POST[‘usuario’]) { $verificar_usuario = 1; } } if($verificar_usuario == 0) { if($_POST[‘password’] == $_POST[‘repassword’]) { $usuario = $_POST[‘usuario’]; $password = $_POST[‘password’]; $sql = «INSERT INTO usuarios (usuario,password) VALUES (‘$usuario’,’$password’)»; mysql_query($sql); echo ‘Usted se ha registrado correctamente.’; } else { echo ‘Las claves no son iguales, intente nuevamente.’; } } else { echo ‘Este usuario ya ha sido registrado anteriormente.’; } } }
pedro dice
como puedo hago para que ciertas webs de mi pagina no tengan el acceso sin Registrarse ????
Edwind Pineda dice
no le pongas que busque si existe la variable de session.
Fernando dice
Me da un error «
Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /public_html/Usuarios/registro/index.php on line 71
» que hago mal ?Linea 71 «while($result = mysql_fetch_object($rec))»
Edwind Pineda dice
que estas poniendo en la variable $sql?
Fernando dice
Ah, ps no se como decirte pero soy nuevo en esto y no edite esa variable. Que deberÃa poner ?
Edwind Pineda dice
derrepente tu base datos o tu tabla no se llama igual como el que puse en el tutorial o no estan ingresando bien los datos de las variables para hacer las consultas.
Fernando dice
No entiendo porque no me anda, hice descarga y cree la base de datos con tu código sql, no se cual es el error.
Fernando dice
No se como pero ya me anda. Pero aun no me funciona me sale una par de lineas bajo el formulario y muestran esto.
usuario == $_POST[‘usuario’]) { $verificar_usuario = 1; } } if($verificar_usuario == 0) { if($_POST[‘password’] == $_POST[‘repassword’]) { $usuario = $_POST[‘usuario’]; $password = $_POST[‘password’]; $sql = «INSERT INTO usuarios (usuario,password) VALUES (‘$usuario’,’$password’)»; mysql_query($sql); echo ‘Usted se ha registrado correctamente.’; } else { echo ‘Las claves no son iguales, intente nuevamente.’; } } else { echo ‘Este usuario ya ha sido registrado anteriormente.’; } } }
Que pasaria ?
Misael Vazquez dice
a mi me pasa también eso ultimo, no saben que hice mal?
Edwind Pineda dice
modificaste los datos de la conexión al mysql?
Fernando dice
No lo modifique
Fernando dice
Aah! que diga si puse los datos de mi usuario y esas cosas pero no modifique $sql
Emilio dice
Hola! He encontrado tu web y me parece fantástica.
Sin embargo, tengo una duda en este tutorial: no sé hacer el primer paso pues nunca he usado MySQL y lo único que he conseguido es tener una cuenta en la base de datos, pero no tengo ni idea de cómo implementar el código para la tabla…
Gracias por la atención
Y uso 000webhost por si ayuda 😀
Edwind Pineda dice
Muchas gracias Emilio. mira aca puedes aprender lo basico sobre mysql https://tursos.com/tutoriales/php/como-conectar-php-a-mysql-en-un-servidor-local
saludos
samuel dice
hola edwind, soy nuevo en esta página y ya tengo un año programando en php pero nunca e sabido para que sirve la flecha en php «->» disculpa mi ignorancia pero por lo que veo en la linea 15 del codigo php ($result->usuario) podrÃa pensar que es para seleccionar el elemento de arreglo. espero me lo puedas explicar o facilitar algún tutorial o manual donde pueda comprender su funcionamiento. Gracias de antemano
Edwind Pineda dice
cuando usas mysql_fetch_object se usan esas flechas para llamar al campo de la tabla en la base de datos
Fernando dice
Bajo el formulario me aparece esto..
usuario == $_POST[‘usuario’]) { $verificar_usuario = 1; } } if($verificar_usuario == 0) { if($_POST[‘password’] == $_POST[‘repassword’]) { $usuario = $_POST[‘usuario’]; $password = $_POST[‘password’]; $sql = «INSERT INTO usuarios (usuario,password) VALUES (‘$usuario’,’$password’)»; mysql_query($sql); echo ‘Usted se ha registrado correctamente.’; } else { echo ‘Las claves no son iguales, intente nuevamente.’; } } else { echo ‘Este usuario ya ha sido registrado anteriormente.’; } } }
Fidel dice
Ami igual!
josueochoa dice
Tienen que tener PHP instalado y funcionando.
Cristian dice
hey men sube los archivos de nuevo por favor que trate de bajarlos y están caÃdos, gracias….. y el demo también esta caÃdo….
ezuzo dice
Me da este error, sabéis que puede ser?
Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at /Applications/XAMPP/xamppfiles/htdocs/reg/index.php:10) in/Applications/XAMPP/xamppfiles/htdocs/reg/index.php on line 11
josueochoa dice
El código PHP donde esta el session_start() TIENE que ir antes de cualquier bloque de código HTML.
Jh Magno dice
Agradezco mucho el curso. Me ayudó con el registro, pero quisiera saber cómo le puedo agregar un campo más, el de email, pues he tratado de modificar el código (no se casi nada de php) para que se enviara ese dato, pero no me resulta. Me podrÃan decir qué tengo que agregarle al registro.php para que envÃe el datoingresado en «email» a la base de datos (donde ya cree la entrada con el nombre «email» (aunque no sé si debo ingresarlo com varchar tambien)) Muchas gracias y deb decir que han sido los primeros a los que pude comprender. Muchas gracias.
Jh Magno dice
HOla, s{olo una duda. Cómo lo hago para agregar el campo «email» al formulario y qué debo escribir para que el código php me mande la información ingresada a la base de datos (donde ya cree un campo). Les agradezco muchÃsimo este post porque ha sido uno de los pocos que sale bien explicado.
Josue David Montoya dice
Hola esta muy bueno el tuto solo queria saber como hacer para que persona que ya haya votado no lo pueda hacer de nuevo…de antemano muchas gracias.
luiselg dice
para los que le salen las lineas bajo el formulario…. cuando descarguen el archivo, busquen el index.phpy creen otro archivo index.php y pasan los codigos ordenamente ya que estan sin las etiquetas html es decir y sin eso les seguira saliendo esas lineas bajo el formulario a mi me paso pero lo que hice fue eso
Animalia Salvaje dice
Muchas gracias!!! E añadido algunos campos mas como el email y el nombre, todo perfecto insertado en la DB.
Sois los mejores que hay que mirar que soy un novato que hace un mes no tenia ni idea de programación no tengo ni el graduado escolar jejejeeje. Harto de ver videos tutoriales para crear una tienda online y cuando llega el registro y el login se rajan o lo hacen con dreanweaver que no se entiende el codigo. Bueno grasias otra vez un saludo.
Animalia Salvaje dice
Buenas. Este aporte es muy bueno como comente anteriormente.
Pero ahora no soy capaz de poner los precios de los productos de mi tienda online que estoy trabajando en todas las divisas, no tengo idea por donde empezar. E leido esto en un foro
Conversor de divisas (moneda) con PHP y Google
UI_Discus dice
Muy buen aporte. Lo instale en mi host, cree la estructura y la conexion esta Ok, pero me da el siguiente error en el formulario de logueo: Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /home/a8221380/public_html/sql_regSist/index_log.php on line 12
Mi intencion es usarlo para proteger el acceso a una pagina web de informacion solo disponible para usuarios. Seria bueno poder incluir el mail y ademas crear un formulario de consulra a la sql de los usuarios registrados. Espero que puedas ayudarnos con esto. Gracias
Manu dice
Hola. Esta muy bien la publicación, todo me salio perfecto, se creo la BD sin problemas, hice la conexión de PHP a MySQL sin problemas y el formulario con el CSS excelente,pero ahora creo que esto deberÃa de tener una funcionalidad y es a lo que voy, necesito que una vez registrado el usuario, pueda ingresar a paginas de mi sitio las cuales no podrÃa ingresar si no estuviera registrado. Por si sirve, les platico que estoy trabajando en un sitio donde se publicaran cursos, pero estos cursos no se deben de ver si el usuario no se registra, es ahi donde quiero saber el paso siguiente. Gracias..