¡Hola! ¿Cómo les va? En la clase de hoy vamos a ver cómo hacer para crear un formulario para que se registren nuestros usuarios.
Por un lado vamos a tener algunos archivos en la carpeta raÃz, pero por otro vamos a tener una carpeta llamada "admin" que es donde va a estar nuestro backend. En esta carpeta también tendremos dos archivos adicionales que son necesarios antes de arrancar.
Cómo vamos a organizar nuestros archivos
La estructura de archivos por le momento será:
+ admin
--------------
- config.php
- conexion.php
--------------
- index.php
- registrar.php
El primer archivo que vamos a ver, config.php, es un archivo de configuración, en el cual guardaremos constantes que vamos a necesitar a lo largo del sitio. El misma va a contener:
admin/config.php
El mismo deberá estar completo con los datos de su base de datos.
El siguiente archivo, conexion.php, contiene una función que devuelve "false" o "el puntero" a la conexión con la base de datos, ya que en todas o casi todas las páginas de nuestro sitio necesitaremos una conexión con la db, es práctico mantenerla dentro de una función.
admin/conexion.php
-
<?php
-
-
function conectar () {
-
-
if (!$db_con) return false;
-
return $db_con;
-
-
}
-
-
?>
FÃjense que estamos usando las constantes que agregamos en el archivo config.php, esto es práctico a la hora de tener que cambiar de base de datos, o migrar el sitio, sólo tendremos que modificar el archivo de configuración.
Listo, ya tenemos nuestros dos archivos antes de comenzar el proceso de registro.
En el archivo index.php tendremos una presentación por el momento, donde se podrá optar por registrarse o ingresar (más adelante tendremos las noticias, pero todavÃa estamos muy verdes).
index.php
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
<html xmlns=â€http://www.w3.org/1999/xhtmlâ€>
-
<meta http-equiv=â€Content-Type†content=â€text/html; charset=iso-8859-1″ />
-
<title>Blog Personal</title>
-
</head>
-
-
-
<h1>Blog Personal</h1>
-
-
<? if ( !empty($_GET['registro']) ) { ?>
-
<div>El registro ha sido exitoso.</div>
-
<? } ?>
-
-
</ul>
-
-
</body>
-
</html>
FÃjense que en el body hay una sentencia php, es un if preguntando si no esta vacÃa una variable get llamada registro, esta variable la setearemos en el archivo registrar.php en el caso de que el registro sea exitoso. En caso de que el usuario no llegue desde ese punto, jamas verá el mensaje dentro del if.
Bueno, finalmente vamos a nuestro archivo registrar.php, que es el que tiene la lógica de nuestro registro. Primero les muestro todo el código y después les voy explicando qué es lo que hace cada cosa.
-
<?php
-
-
// archivos necesarios
-
require_once ‘admin/config.php’;
-
require_once ‘admin/conexion.php’;
-
-
// obtengo puntero de conexion con la db
-
$dbConn = conectar();
-
-
// si se envio el formulario
-
-
// definimos las variables
-
-
// completamos la variable error si es necesario
-
if ( $_POST['password'] != $_POST['re-password'] ) {
-
$error['re-password'] = ‘La contraseña no coincide’;
-
}
-
-
// si no hay errores registramos al usuario
-
-
// inserto los datos de registro en la db
-
$query = “INSERT INTO `usuarios` (usuario,password,email) VALUES (’$usuario’,'â€.md5($password).â€â€˜,’$email’)â€;
-
$result = mysql_query($query, $dbConn);
-
header( 'Location: index.php?registro=true' );
-
die;
-
}
-
}
-
?>
-
<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN†“http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtdâ€>
-
<html xmlns=â€http://www.w3.org/1999/xhtmlâ€>
-
<meta http-equiv=â€Content-Type†content=â€text/html; charset=iso-8859-1″ />
-
<title>Blog Personal</title>
-
</head>
-
-
-
<h1>Registro de Usuario</h1>
-
-
<? if (!empty($error)) { ?>
-
<? foreach ($error as $mensaje) { ?>
-
<? } ?>
-
</ul>
-
<? } ?>
-
-
<form action="registrar.php" method="post">
-
-
<input name=â€usuario†type=â€text†value=â€<? if ( ! empty($usuario) ) echo $usuario; ?>†/>
-
</p>
-
<input name=â€password†type=â€password†value=â€<? if ( ! empty($password) ) echo $password; ?>†/>
-
</p>
-
<input name=â€re-password†type=â€password†value=â€<? if ( ! empty($rePassword) ) echo $rePassword; ?>†/>
-
</p>
-
<input name=â€email†type=â€text†value=â€<? if ( ! empty($email) ) echo $email; ?>†/>
-
</p>
-
<input name=â€submit†type=â€submit†value=â€Regístrate†/>
-
</p>
-
-
</form>
-
-
</body>
-
</html>
Antes de explicar el código php voy a explicarles el html, lo primero que tenemos es un if preguntando si existe una variable $error, esta variable va a contener un array con los errores que ha cometido el usuario al completar el formulario, por ejemplo no ha completado el nombre de usuario. FÃjense que uso <?= $mensaje ?>, eso es equivalente a hacer <? echo $mensaje; ?>, es muy práctico a la hora de tener que imprimir una sola linea o algo en el medio de html.
Luego tenemos el formulario, la acción del mismo es sobre el mismo archivo registrar.php, de esta forma podemos marcar en el momento si hubo algún error, en caso de que no lo haya nosotros nos encargaremos por php de redireccionar al archivo index.php avisando de que el mismo fue exitoso.
Otra cosa a tener en cuenta es que en el value de cada campo del formulario hacemos un echo de la variable correspondiente a dicho campo, esto es a que si el usuario se olvido de completar el campo de email, que no pierda los datos que completó anteriormente.
Bueno, ya estamos listos para analizar el código php.
Primero incluimos nuestros dos archivos necesarios, config y conexion, y llamamos a la función conexion guardando el puntero en una variable.
Una vez hecho esto, verificamos si se envió el formulario, para comenzar a registrar el usuario o sólo mostrar el formulario.
Guardamos cada campo completado por el usuario en una variable para poder mostrársela al usuario en caso de errores. Luego definimos nuestro array $error con los mensajes de error en caso de que los haya.
Si no hay errores, agregamos el usuario en nuestra base de datos mediante la sentencia INSERT de mysql. Y luego de esto redireccionamos a index.php?registro=true utilizando header()
Bueno, bastente sencillito ¿no? por las dudas acá les dejo los archivos que utilizamos hoy:
Clic aquà para descargar los archivos de ejemplo de este taller >>
| << CLASE ANTERIOR |








Jueves, 25 de Septiembre de 2008 a las 15.37
Buenisimo todo lo que explican y por sobre todo claro para la lectura.
para que no haya dos usuarios con la misma cuenta.
Voy a hacer un pequeño aporte (no se si esta pensado para mas adelante)
Chequear que el usuario que se esta registrando no existe (evitar duplicidad de usuarios) y chequear que tampoco exista la cuenta de mail
Ahi va el codigo!!!!
// verificar que no exista nombre de usuario y tampoco email
$busca_usuario = "SELECT usuario FROM usuarios WHERE usuario='$usuario'";
$busca_email = "SELECT email FROM usuarios WHERE email='$email'";
$resul_usuario = mysql_query($busca_usuario, $dbConn);
$resul_email = mysql_query($busca_email, $dbConn);
if (mysql_num_rows($resul_usuario) != 0) {
$error['rep_usuario'] = "Usuario existente";
}
if (mysql_num_rows($resul_email) != 0) {
$error['rep_email'] = "Correo existente";
}
// fin verificacion de datos repetidos
Espero les sirva a todos para perfeccionar un poco el blog personal.
Saludos
Jueves, 2 de Octubre de 2008 a las 18.02
Es muy interesante las cases, pero tengo un problema, me gustaria practicar pero no tengo idea de como puedo hacer, me puedes recomendar algun compilador o editor para php para que al momento de hacer una pagina web con php pueda ver como funciona, siempre que hago la pagina solo me muestra el codigo que edito en el bloc de notas, les agradeceria mucho si me ayudan.
Viernes, 3 de Octubre de 2008 a las 18.16
Alexander, te recomiendo que te instales Wampserver 2.0, para probar tus scrpts PHP en tu computadora.
http://www.wampserver.com/en/
Es gratuito y facil de instalar.
Un saludo
Ah, muy bueno todo el tutorial de PHP
Gracias!
Lunes, 3 de Noviembre de 2008 a las 12.47
Hey... por alguna razón no me funciona el código de inserción de datos en la BD... intento y me produce un error en una de las lineas...
ALGUIEN podrÃa poner un código completo para poder realizar la "suscripción" y que quede reflejada en la BD de Mysql...
Que contenga
Usuario
Mail
Password...
¿Si tengo un campo autonumerico como clave principal, se llena autmáticamente si no pongo nada verdad?
Martes, 25 de Noviembre de 2008 a las 15.00
Hola,
me gustaria saber como distinguimos entre usuarios normales y administradores. Porque cuando me registro soy usuario normal, pero no se donde se dan los privilegios. O hay que hacerlo directamente desde la base de datos???
Muchas gracias por el tutorial, es estupendo!!!
Lunes, 1 de Diciembre de 2008 a las 01.27
me bota este error Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\blog\registrar.php:32) in C:\xampp\htdocs\blog\registrar.php on line 34 y si quito los inlude o require se quita lei que es porque el header no puede escribir cuando alguien escribe antes que el help!!!
blog personal
Nombre de usuario
<input name='usuario' type='text' value='' />
Contraseña
<input name='password' type='password' value='' />
Repetir Contraseña
<input name='re-password' type='password' value='' />
Correo Electronico
<input name='email' type='text' value='' />
Miércoles, 3 de Diciembre de 2008 a las 13.41
@Jorge:
¿Si tengo un campo autonumerico como clave principal, se llena autmáticamente si no pongo nada verdad?
Si.
@vero: para cambiar los privilegios hay que hacerlo directamente desde la base de datos.
@danilo: el error ese que te tira es porque se esta escribiendo algo antes del header location, fijate si no hay ningun error o te quedo algun caracter y no te diste cuenta.
Lunes, 26 de Enero de 2009 a las 20.57
hola justi q tal no entiendo xq me sale est error
Warning: Cannot modify header information - headers already sent by (output started at C:\AppServ\www\noticias\admin\config.php:8) in C:\AppServ\www\noticias\registrar.php on line 31
Martes, 27 de Enero de 2009 a las 10.45
en la linea 31 tenes un "header: location", para poder modificar parte del encabezado que manda la pagina, tenes que no haber enviado ningun encabezado antes, seguromante se esta haciando o un echo de algo anterior a esa linea, o hay algun error que hace que se muestre en pantalla primero el error, entonces cuando quiere actualizador los encabazados dice que ya se enviaron y que no se puede modificar.
Lunes, 9 de Febrero de 2009 a las 19.58
Hola, estoy trabajando en un Mac con dreamweaver, el registro esta siendo almacenado en la base de datos pero luego de guardar los datos no me redirecciona al index, se que es un problema con el Header pero no la verdad no se cual es.
// inserto los datos de registro en la db
$query = "INSERT INTO usuarios (usuario,password,email) VALUES ('$usuario','".md5($password)."','$email')";
$result = mysql_query($query, $dbConn);
header( 'Location: index.php?registro=true' );
die();
}
Otro problema que tengo y no se como solucionar es que tengo instalado mamp y no me registra los errores del codigo o la base de datos, entonces quisiera saber si alguien sabe como configurar las opciones para poder ver estos errores en un MAC.
Un saludo,
Jueves, 12 de Febrero de 2009 a las 10.19
si el error lo tira en el header es porque seguramente se estan enviando las cabeceras antes de que las puedas modificar vos. Por lo general esto ocurre por algun error, que obliga al navegador a recibir las cabeceras para mostrar el error, entonces a la hora de hacer la redirección falla.
Fijate si esta todo bien, con respecto a lo de mamp no puedo ayudarte con eso, no tengo ni idea como funciona.
Domingo, 5 de Abril de 2009 a las 22.56
El Script me tira un error en la linea 13, me dice lo siguiente:
Parse error: syntax error, unexpected T_STRING in /home/siwakura/public_html/includes/registro.php on line 13
ok en la linea 13 tengo lo siguiente:
if ( empty($usuario) ) $error['usuario'] = ‘Es obligatorio completar el nombre de usuario’;
a ver si me pueden ayudar en ello... grax de antemano...
Lunes, 6 de Abril de 2009 a las 01.26
ya esta solucionado ahora me esta dando error es al crear el usuario... :S:S
Lunes, 6 de Abril de 2009 a las 12.05
@Crafter hola, fijate que el sistema de noticias que estamos usando en elwebmaster.com cambia las comillas simples por una especie de acento, lo que tenes que usar en todos lados del codigo son las comillas que tenes en la linea 13 que determinan la palabra usuario cuando definis las variables y no las que estan con el texto "Es obligatorio completar ... Donde veas ese tipo de comillas reemplazalo por las comillas simples. Fijate si con eso se solucionan tus problemas, saludos.
Viernes, 24 de Abril de 2009 a las 20.30
Hola a todos, yo estoy en el grupo que tiene problemas con el header pero ya llego 2 dias revisando el codigo y no encuentro errores :(:( , por favor diganme donde mas podria revisar o si alguien soluciono el error por favor digame como por q parece q el error es comun Muchas gracias anticipadamente... por si acaso mi correo es gus_tavex@hotmail.com Gracias muchas gracias a quien me pueda ayudar.
Lunes, 27 de Abril de 2009 a las 12.48
Hola a todos!!! muchas gracias por el material!!! Resolvi los problemas, gracias por apoyar a los programadores de la siguiente generacion!!!!!
:D
Viernes, 8 de Mayo de 2009 a las 13.05
Hola, quisiera saber si podrian publicar esto pero para blogs, por favor respondamen a mi email gracias!
Sábado, 9 de Mayo de 2009 a las 04.38
Hola primero que nada felicidades por el curso de php esta muy bueno, segundo quiero comentar que no puedo lograr registrar los usuarios en la DB, simplemente presiono el boton de registrar y no pasa nada, la base de datos la monte en mi localhost y mi usuario tiene full permisos, tambien he checado lo que mencionan de las ' y " y al parecer ya esta todo bien, donde requieren los archivos de config.php y conexion.php los cambie a include y tampoco funciona, no me da ningun error, pero no se por que no funciona.
salu2
Lunes, 11 de Mayo de 2009 a las 13.27
@Alevsk me extraña que no te este saliendo ningun error. Quizas tenes configurado tu php para que no muestre errores en pantalla. Si estas probando en tu propia maquina, fijate de modificar la opcion en el php.ini que dice error_reporting = Off por error_reporting = E_ALL, quizas estas teniendo errores pero no se muestran.
Miércoles, 13 de Mayo de 2009 a las 14.58
y eso se puede poner en un blog de wordpress?
Miércoles, 10 de Junio de 2009 a las 09.00
muy buenas señores....
muy bueno el sitio este...de gran ayuda....
ahora me gustaria a ver su pudieran ayudarme.....el codigo funciona practicamente todo salvo en el lugar de esUsuario.....que me esta dando un error con ""mysql_fetch_array""....el codigo completo es este:
$query = "SELECT idUsuario, login, clave, tipo FROM usuarios WHERE login = '$usuario'";
$resultado=mysql_query($query, $conexion);
$row =mysql_fetch_array($resultado);
$password_from_db = $row['clave'];
unset($query);
y el mensaje de error este:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:\AppServ\www\admin\esUsuario.php on line 9
y no consigo salvarlo.
¿alquien puede ayudarme?
gracias y un saludo
Jueves, 11 de Junio de 2009 a las 12.03
@juanma yo harÃa dos pruebas para eso, primero no se si es un problema del código o como se pego el comentario en elwebmaster.com pero fijate que en la linea que tenes el $query = ... tenes que usar las comillas que son rectas, no esas para englobar a $usuario (
).
Otra cosa que probarÃa es ver como se esta armando la consulta, es decir, que valor tiene $usuario. Una forma de ver esto es haciendo un echo justo despues de la linea donde esta $query = "SELECT ... para ver como se forma.
Asegurate de borrar despues la linea del echo sino todo el mundo lo va a ver.
Jueves, 24 de Septiembre de 2009 a las 13.57
Te consulto por estas constantes de conexion de db
define( ‘DB_SERVER’, ‘localhost’ );
define( ‘DB_NAME’, ‘blogit’);
define( ‘DB_USER’, ‘root’);
define( ‘DB_PASS’, â€);
se pone con los nombres tal cual lo definis, me refiero precisamente al primer parametro los 'DB_SERVER, 'DB_NAME, 'DB_PASS.
gracias
Martes, 10 de Noviembre de 2009 a las 18.55
hola me pregunto donde hay que colocarlo se colca en hatml o en gadget no entiendo espero tu respuesta mi correo: bisval11@hotmail.com
Lunes, 7 de Diciembre de 2009 a las 17.38
Warning: mysql_pconnect() [function.mysql-pconnect]: Unknown MySQL server host 'DB_SERVER' (1) in /home/innovacp/public_html/radio/admin/conexion.php on line 5
me sale este error y no se porq si me pueden ayudarr pleaseeee
Martes, 8 de Diciembre de 2009 a las 11.37
@edwin hola, no encuentra el dominio del hosting, ojo que le estas poniendo como ip "DB_SERVER", ahi tiene que ir la ip del hosting de la base de datos o localhost si esta en la misma computadora
Viernes, 11 de Diciembre de 2009 a las 19.54
hola porque no puedo ingresar ami pagina si ya puse toda la informacion y me sale que envie un email a la cuenta pero no ce cual cuenta es porfa ayudenme chao.
Domingo, 13 de Diciembre de 2009 a las 15.40
Buenas, muchisimas gracias antes que nada por estas clases!!
Tengo 1 problema similar en 2 clases diferentes:
"actualizar y borrar registros 2": arme el form de edicion del item, pero no logro que me muestre los datos que estan en la db. Dentro de los campos aparece escrito todo lo que esta dentro de los . mi primary key es idItem, y es la q utilizo en la url, localhost/carpeta/editar.php?idItem=xxx. Ahora, ponga el numero que ponga en idItem, no sale ningun error, asi exista o no realmente el item. Pero si yo cambio el nombre, por ejemplo a editar.php?iditem1=xxx, ahi si tira un error al no encontrar esa llave primaria (porque no existe, claro esta). O sea, puedo conectar a la db (ya que anteriormente pude agregar items dentro de la tabla, en las clases anteriores), pero no puedo editar los datos.
Eso mismo me pasa ahora con registrar.php, no tira ningun error el archivo, pero dentro de los campos aparece escrito todo lo que esta entre , y si le doy al submit, refresca la pagina, pero no introduce ningun dato en la db, y tampoco tira ningun error.
Ya me esta volviendo loco esto jeje. Aclaro que en en el php.ini esta habilitada la funcion para que muestre los errores, y pude conectarme con la db para agregar items sin ningun problema. Tambien corrobore varias veces la sintaxis de los archivos, y no encontre ningun error de comillas ni nada por el estilo...:S
Saludos y gracias por la paciencia!
Domingo, 13 de Diciembre de 2009 a las 15.41
perdon, donde dice dentro de los ., tienen que estar los simbolos de apertura y cierre de codigo php, en ambos casos jeje.
Saludos!
Martes, 15 de Diciembre de 2009 a las 11.06
@javiar hola, fijate si no tenes un error de sintaxis en la consulta que haces UPDATE, por lo general no tira error pero no cambia ningun dato. Saludos.
Martes, 15 de Diciembre de 2009 a las 19.47
Hola tengo un problema agradeceria su ayuda, al iniciar sesion me da este mensaje:
Warning: mysql_query() expects parameter 2 to be resource, boolean given in C:\wamp\www\admin\esUsuario.php on line 10
Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in C:\wamp\www\admin\esUsuario.php on line 11
Miércoles, 16 de Diciembre de 2009 a las 12.13
fijate que no se le debe estar pasando la conexion con la base de datos!
Miércoles, 30 de Diciembre de 2009 a las 01.54
hola Justi muchisimas gracias por estas clases!
Tengo un problemita con el archivo registrar.php, me da ese error del header y pasa lo mismo usando el archivo q dejaste para descargar "blog.zip".
este es el error: Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\blog2\registrar.php:32) in C:\xampp\htdocs\blog\registrar.php on line 34
gracias por todo Justi, ya vi q a otros le paso este error pero no se publico la solucion aca en los comentarios
Miércoles, 30 de Diciembre de 2009 a las 17.16
Este problema del header solo aparece en el xampp (por lo menos a mi), en el servidor real funciona bien.
Para solucionarlo en xampp: guardar el archivo registrar.php en Formato UTF-8 sin BOM y no dejar espacio entre la comilla simple y location, quedando asi: 'Location: index.php?registro=true'
Bueno eso puede servir para otro q tenga el problema con xampp como yo.
gracias por las clases y Saludos.
Jueves, 21 de Enero de 2010 a las 17.47
@diegop buenisimo que lo hayas podido solucionar!
Martes, 22 de Junio de 2010 a las 01.53
por qué me aparece estos valores, alguien me puede ayudar? y tambien por qué cuando consulto los usuarios que ingreso la contraseña que le asigno al usuario que me invente es algo como esto b6d3784d0de91cd568a6fe76dbe3f7d4:
Jueves, 15 de Julio de 2010 a las 12.07
pero tambien se puede poner el archivo de coneccion con la base de datos y el de config juntos bueno asi es como yo lo hago no se por que lo pones todo por separado "es por seguridad o por otra cosa"
bueno asi es como yo lo hago
bueno aca el esperto eres tu
y como se aria en el caso de editar y borrar usuarios pues lo hice pero no encuentro el erro cuando modifico un usuario sea cual sea termina abriendo la coneccion con ese usuario
Jueves, 15 de Julio de 2010 a las 12.08
gracias por el taller
Viernes, 8 de Octubre de 2010 a las 19.17
gracias hermano de maravilla ni te imaginas lo q he aprendido hasta ahora y lo que se viene debe ser mejor
Lunes, 15 de Noviembre de 2010 a las 15.37
Hola me salta este error:
Warning: mysql_pconnect() [function.mysql-pconnect]: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) in /home/content/51/6964851/html/registro/admin/conexion.php on line 5
Otra cosa, falta la tabla sql
Sábado, 30 de Abril de 2011 a las 02.04
error :
Parse error: syntax error, unexpected T_DNUMBER in /home/a2137475/public_html/admin/conexion.php on line 5
Miércoles, 26 de Octubre de 2011 a las 04.30
Hola, antes que nada felicidades esta muy padre el curso, solo quisiera saber porq al momento de ingresar ya una vez que me eh registrado aparece este error.
Parse error: syntax error, unexpected ';' in C:\wamp\www\usuarios\comprobar.php on line 13
Viernes, 16 de Diciembre de 2011 a las 12.49
para el que le sale este error:
Warning: mysql_fetch_array() expects parameter 1 to be resource, null given in C:\wamp\www\admin\esUsuario.php on line
Lo que debes hacer es cambiar por un * , si un asterico y borrar todo los parametros para que quede asi en el archivo esUsuario:
$query = "SELECT * FROM `usuarios` WHERE usuario = '$usuario'";
listo debe desaparecer el error al actualizar...