Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Usuario PHP
Usuario PHP
vengo y lo comparto tambin por ac, por si a alguien le sirve, no usa sesiones sino que utiliza
cookies.
El primer paso es crear una tabla en la base de datos en la que almacenaremos los usuarios que
se registren. Vayan a su phpmyadmin y creen una base de datos llamada "tutorial" (puede llamarse
de otra forma) y ejecuten esta consulta dentro de la pestaa SQL:
http://tny.cz/2a8b8025
Una vez creada, procederemos a hacer el archivo de configuracin en el que pondremos nuestros
datos del host. Creen un archivo llamado config.php y pongan lo siguiente:
http://tny.cz/3434d1c9
?php
//Hecho por DjAlan98 para PHPost.net
error_reporting(E_ALL & ~E_NOTICE);
$server = 'localhost';
$password = '';
$usuario = 'root';
$database = 'tutorial';
$con = mysql_connect($server, $usuario, $password);
mysql_select_db($database, $con);
if(!$con){ die('Comprueba tus datos de conexin'); }
include('sesion.php');
?>
Les explicar un poco lo de arriba, lo de error_reporting es til si estamos en localhost para que no
muestre Notices que sinceramente no sirven de mucho. Dentro de la variable $server coloquen el
servidor de su host (casi siempre es localhost), en password coloquen la contrasea de su db, en
usuario coloquen el usuario de su db y en $database coloquen el nombre de su base de datos.
Todo lo dems no lo toquen. Guarden el archivo
2) Crear un archivo llamado sesion.php y colocar lo siguiente:
http://tny.cz/a00e6602
<?php
//Hecho por DjAlan98 para PHPost.net
$separar = explode('#', $_COOKIE['sesion']);
if($_COOKIE['sesion'] && mysql_num_rows($query = mysql_query('SELECT *
FROM `usuarios` WHERE `id` = \''.(int)$separar[0].'\' && `password`
= \''.mysql_real_escape_string($separar[1]).'\''))){
$user = mysql_fetch_assoc($query);
$currentip = $_SERVER['REMOTE_ADDR'] ? $_SERVER['REMOTE_ADDR'] :
$_SERVER['X_FORWARDER_FOR'];
mysql_query('UPDATE `usuarios` SET `ip`
= \''.mysql_real_escape_string($currentip).'\' WHERE `id` = \''.
$user['id'].'\'');
}else{
unset($_COOKIE['sesion']);
}
?>
La variable separar usa explode para separar el contenido de la cookie llamada sesion, en el que
se divide id#contrasea, en la segunda lnea comprobamos que la cookie y el usuario del contenido
de la cookie tambin, en la tercera asociamos toda la informacin de la consulta de la segunda
lnea para obtener los datos del usuario que est logueado, en la 4 linea evitamos spoofing en la ip
del visitante y en la 5 actualizamos los datos del usuario poniendo la ip actual dentro de la tabla ip,
en la ltima linea, en caso de no existir una cookie o que los datos sean incorrectos, eliminamos la
cookie.
http://tny.cz/3fc6aba8
<?php
//Hecho por DjAlan98 para PHPost.net
//Diseo del formulario por NESTicle 8bit
include('config.php');
?>
<!DOCTYPE html>
<html lang="es"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Formulario de Registro</title>
<link href="images/estilos.css" type="text/css" rel="stylesheet" />
</head>
<body id="login-page">
<div class="login-wrap">
<div class="mensaje">
<h2>Bienvenido al registro</h2>
</div>
<form id="form-logeo" class="generic" method="post">
<div id="login-user" class="field">
<label>Nombre de Usuario (Nick)</label>
<input id="login-username" type="text" class="text" name="username"
placeholder="Nombre de Usuario" tabindex="1" maxlength="200">
</div>
<div class="btnlogeo">
<input id="login-submit" type="submit" value="Listo!">
</div>
<?php
if($_POST){
if(!$_POST['username'] || !$_POST['password'] || !$_POST['email'] || !
$_POST['telefono']) { die('<span style="color:red;">Por favor, compruebe
que haya ingresado TODOS los datos</span>'); }
if(!preg_match('/^[a-z0-9\_\-]{4,16}$/i', $_POST['username'])) {
die('<span style="color:red;">El nick contiene carcteres incorrectos o
es menor a 4 carcteres o mayor a 16</span>'); }
if(strlen($_POST['password']) < 4 || strlen($_POST['password']) > 35) {
die('<span style="color:red;">La contrasea debe tener entre 4 y 35
carcteres</span>'); }
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { die('<span
style="color:red;">EMail incorrecto</span>'); }
if(!ctype_digit($_POST['telefono']) || strlen($_POST['telefono']) < 5 ||
strlen($_POST['telefono']) > 100) { die('<span
style="color:red;">Realmente existen telfonos que lleven letras?
increble!. Ah, y el mximo es 100 carcteres y el mnimo de 5</span>');
}
if(mysql_num_rows(mysql_query('SELECT id FROM usuarios WHERE nick
= \''.mysql_real_escape_string($_POST['username']).'\' LIMIT 1'))) {
die('<span style="color:red;">El usuario ya existe.</span>'); }
mysql_query('INSERT INTO `usuarios` (nick, password, email, telefono)
VALUES
(\''.htmlspecialchars($_POST['username']).'\', \''.htmlspecialchars(md5($
_POST['password'])).'\', \''.htmlspecialchars($_POST['email']).'\', \''.
(int)$_POST['telefono'].'\')');
die('<span style="color:green;">Registrado correctamente</span> <a
href="login.php">Loguearme</a>');
}
?>
</form>
</div>
</body></html>
Con if($_POST) comprobamos que se hayan envado datos via post, con las otras 2 lneas
comprobamos que se haya ingresado algo en usuario y contrasea. En la 4 lnea hacemos una
consulta para comprobar que el usuario con el nick ingresado exista y si existe, obtener los datos
del mismo. El setcookie(); sirve para insertar la cookie de sesin en la PC del usuario, en la
penltima lnea actualizamos la IP del visitante guardada en la base de datos, y en la ltima lnea
redireccionamos al usuario al index de la web en caso de que los datos estn todos correctos.
http://tny.cz/4343ee75
<?php
//Hecho por DjAlan98 para PHPost.net
//Diseo del formulario por NESTicle 8bit
include('config.php');
?>
<!DOCTYPE html>
<html lang="es"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Formulario de Registro</title>
<link href="images/estilos.css" type="text/css" rel="stylesheet" />
</head>
<body id="login-page">
<div class="login-wrap">
<div class="mensaje">
<h2>Bienvenido al registro</h2>
</div>
<div class="btnlogeo">
<input id="login-submit" type="submit" value="Listo!">
</div>
<?php
if($_POST){
if(!$_POST['username'] || !$_POST['password'] || !$_POST['email'] || !
$_POST['telefono']) { die('<span style="color:red;">Por favor, compruebe
que haya ingresado TODOS los datos</span>'); }
if(!preg_match('/^[a-z0-9\_\-]{4,16}$/i', $_POST['username'])) {
die('<span style="color:red;">El nick contiene carcteres incorrectos o
es menor a 4 carcteres o mayor a 16</span>'); }
if(strlen($_POST['password']) < 4 || strlen($_POST['password']) > 35) {
die('<span style="color:red;">La contrasea debe tener entre 4 y 35
carcteres</span>'); }
if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) { die('<span
style="color:red;">EMail incorrecto</span>'); }
if(!ctype_digit($_POST['telefono']) || strlen($_POST['telefono']) < 5 ||
strlen($_POST['telefono']) > 100) { die('<span
style="color:red;">Realmente existen telfonos que lleven letras?
increble!. Ah, y el mximo es 100 carcteres y el mnimo de 5</span>');
}
if(mysql_num_rows(mysql_query('SELECT id FROM usuarios WHERE nick
= \''.mysql_real_escape_string($_POST['username']).'\' LIMIT 1'))) {
die('<span style="color:red;">El usuario ya existe.</span>'); }
mysql_query('INSERT INTO `usuarios` (nick, password, email, telefono)
VALUES
(\''.htmlspecialchars($_POST['username']).'\', \''.htmlspecialchars(md5($
_POST['password'])).'\', \''.htmlspecialchars($_POST['email']).'\', \''.
(int)$_POST['telefono'].'\')');
die('<span style="color:green;">Registrado correctamente</span> <a
href="login.php">Loguearme</a>');
}
?>
</form>
</div>
</body></html>
Comprobamos que se hayan envado datos por POST y que se hayan ingresado todos los datos,
con una pequea expresin regular hecha con preg_match comprobamos que el nick no contenga
carcteres especiales y tenga un tamao especfico. Comprobamos que el tamao de la
contrasea sea el correcto, que el email tambin sea correcto con un filtro (filter_validate_email),
con ctype_digit comprobamos que los valores ingresados en el campo telefno sean numricos y
que no sobrepasen un determinado tamao. Por ltimo insertamos todos los datos ingresados
dentro de la tabla usuarios que acabamos de crear.
5) Crear un archivo llamado index.php y colocar lo siguiente:
http://tny.cz/ed9c8551
<?php
//Hecho por DjAlan98 para PHPost.net
include('config.php');
?>
<!DOCTYPE html>
<html lang="es"><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Index</title>
<link href="images/estilos.css" type="text/css" rel="stylesheet" />
</head>
<body id="login-page">
<div class="login-wrap">
<div class="mensaje">
<?php
if(!$user){
?>
<h2>Al parecer usted no est logueado o registrado, para registrarse haga
click <a href="registro.php">Aqu</a> o para loguearse, click <a
href="login.php">Aqu</a></h2>
<?php
} else { ?> <h2>Bienvenido a la web <?=$user['nick'];?>, su EMail es <?
=$user['email'];?> y su telfono es <?=$user['telefono'];?></h2> <a
href="logout.php">Para desloguearse haga click aqu</a> <br /> <a
href="/perfil/<?=$user['nick'];?>">Para ir a su perfil haga click
aqu</a>
<?
}
?>
</div>
</div>
</body>
</html>
http://tny.cz/ca36045a
<?php
//Hecho por DjAlan98 para PHPost.net
include('config.php');
if(!$user) { die('Usted no est logueado'); }
setcookie('sesion', 'nada', time()+1, '/');
header('location: index.php');
?>
8) Crear un archivo .htaccess (sin extensin) para poder acceder a los perfiles de esta forma:
perfil/nick y agregar lo siguiente:
RewriteEngine On
RewriteRule ^(.*)/$ /$1 [L]
RewriteRule ^perfil/([a-z0-9_-]+)$ perfil.php?user=$1 [NC,L]
En caso de querer agregar una nueva funcin, siempre incluir el config.php ya que contiene lo ms
importante.
Por cierto, mysql_real_escape_string(); es para evitar inyeccin SQL y htmlspecialchars(); es para
evitar ataques XSS.
Como pueden ver es todo bastante simple, es ms para que lo puedan usar de base y cambiarle el
diseo y ponerle algo mejor, entre otras cosas.
Tuve que poner todo en pastes porque taringa quita las barritas del cdigo ._.