Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas
Mostrando entradas con la etiqueta PHP. Mostrar todas las entradas
miércoles, 14 de julio de 2010
martes, 13 de julio de 2010
lunes, 7 de junio de 2010
Como Redireccionar una Página de WordPress
Buenas, aquí les traigo otra técnica interesante para WordPress que nos permitirá redireccionar a cualquier URL desde una página de nuestro blog, existen plugins que hacen esto, pero para que usar uno si lo podemos hacer con una simples líneas y sin consumir nuestro ancho de banda (tal vez un poco pero no tanto al usar un plugin).
Esta técnica fue hecha por Dave Stewart y para usarla tenemos que crear una plantilla para usarla en la pagina que vamos a redireccionar, empecemos.
Paso 1:
Primero vamos a crear un archivo llamado template-redirect.php dentro de la carpeta de nuestro theme, por ejemplo, wordpress_root_directory/wp-content/themes/default/ y ahi debemos crear el archivo, quedándonos así ya con el archivo creado: wordpress_root_directory/wp-content/themes/default/template-redirect.php. Aun nos falta copiar las siguientes líneas al archivo recién creado con algún software, como por ejemplo, Adobe Dreamweaver o simplemente el Bloc de Notas que trae Windows.
Paso 2:Código HTML:/* Template Name: Page Redirect * @author Dave Stewart * @email dave@davestewart.co.uk * @web www.davestewart.co.uk * @name Page Redirect * @type PHP page * @desc Wordpress template that redirects the current page based on the content of the database entry it loads * @requires Wordpress * @install Copy this file to the directory of the theme you wish to use * usage 1. Create a new Page in your Wordpress control panel 2. Enter the URL (or local path, relative to your Wordpress directory) you want to redirect to as the only page content 3. Set the Page Template to "Page Redirect" 4. Publish */ if (function_exists('have_posts') && have_posts()){ while (have_posts()){ // get the post the_post(); // get content ob_start(); the_content(); $contents = ob_get_contents(); ob_end_clean(); // correctly build the link // grab the 'naked' link $link = strip_tags($contents); $link = preg_replace('/\s/', '', $link); // work out if(!preg_match('%^http://%', $link)){ $host = $_SERVER['HTTP_HOST']; $dir = dirname($_SERVER['PHP_SELF']); $link = "http://$host$dir/$link"; } // do the link header("Location: $link"); die(''); } } ?>
Ya creado el archivo con su respectivo código debemos ir a nuestro panel de administración en WordPress, de ahí tenemos que crear una nueva página para nuestro sitio, para ello, vamos a Páginas-> Crear y en la lista de Plantillas va a aparecer la que recién creamos, la elegimos y en el contenido ingresamos la URL donde queremos que se redireccione nuestra página al entrar.
Listo, solo nos queda probar si funciona yendo al inicio de nuestro blog y accediendo a la página creada, si funciona, se debería redireccionar a la URL indicada en el contenido de la pagina creada. Si no has podido o no sabes crear el archivo con su código, lo puedes bajar desde aquí.
lunes, 31 de mayo de 2010
Metodos para redireccionar URL´s
Método 1. HTML
El primer método es usar el elemento META. Veamos la sintaxis de uso para nuestro propósito:Código :
<meta http-equiv="acción" content="segundos"; url="url destino" />
Supongamos que has cambiado de servidor o has movido una página a otro directorio. Mostraremos un mensaje acerca de ello y redireccionaremos a nuestro usuario a la nueva ubicación de la página. En este ejemplo, la acción será "refresh", el tiempo en que tardará en refrescar la página será de cinco (5) segundos:
Código :
<html> <head> <meta http-equiv="Refresh" content="5;url=http://www.pagina.com"> </head> <body> <p>Nos hemos mudado! Serás dirigido automáticamente en cinco segundos. En caso contrario, puedes acceder haciendo click <a href="http://www.cristalab.com">aquí</a></p> </body> </html>
Método 2. PHP
El siguiente ejemplo, redireccionará al usuario sin aviso previo:Código :
<?php
header ("Location: http://www.pagina.com");
?>Método 3. JavaScript
Podemos lograr con JavaScript, los métodos anteriormente vistos. En el caso de un redireccionamiento en espera, debemos usar un "temporizador". Veamos un ejemplo:Código :
<html>
<head>
<script type="text/javascript">
function redireccionar(){
window.locationf="http://www.pagina.com";
}
setTimeout ("redireccionar()", 5000); //tiempo expresado en milisegundos
</script>
</head>
<body>
<p> Espere por favor, será redireccionado en 5 segundos.</p>
</body>
</html>Haciéndolo directamente, sin espera:
Código :
<body> <script type="text/javascript"> window.location="http://www.pagina.com"; </script> </body>
Eliminar variables del query_string
//$str = 'idioma=es&pagina=5&id=2&lugar=madrid&ref=a50'; $str = $_SERVER['QUERY_STRING']; parse_str($str, $info);
unset($info['idioma'], $info['pagina']);
echo http_build_query($info);
unset($info['idioma'], $info['pagina']);
echo http_build_query($info);
miércoles, 10 de marzo de 2010
Manejo de Fechas en PHP
Una advertencia
En diferentes partes del planeta rigen zonas horarias distintas. La mayoría de los paises además cambian la hora segun la época del año. Son cuestiones que los programas deben tener en cuenta al manejar y calcular fechas.
Salvo que expresamente se indique otra cosa, las funciones PHP relacionadas con fechas se refieren al tiempo UTC, tambien llamado GMT, aunque dependiendo de la localización geográfica de tu servidor, posiblemente la fecha y hora del ordenador varien en algo respecto del UTC.
En general para trabajar con tiempos se aconseja ser consistentes en el uso de zonas horarias: "traducir" las fechas a tiempo UTC antes de manipularlas segun el fin del programa y al final volverlas a pasar a nuestra zona horaria. Otra regla que nos ayuda a trabajar con fechas es pensar en ellas no como conjunto de elementos (dia, mes, año) sino como un solo número entero.
Los creadores de PHP -y otros muchos lenguajes de programación- proponen describir una fecha concreta por el número de segundos trascurridos desde el epoch hasta ella.
Y en el principio fue Unix ...
La función time() nos devuelve un número entero con la información de la fecha y hora actual, expresada en número de segundos transcurridos desde el tiempo epoch, es decir, medianoche del 1 de enero de 1970 (Greenwich Mean Time). Por ejemplo el valor ahora mismo es 1267286806. A una fecha indicada en este formato se la conoce en php como timestamp
Estampando fechas
para calcular el timestamp de una fecha concreta, es decir, el número de segundos desde la medianoche del 1 de enero de 1970 hasta esa fecha, acudimos a la función mktime:
<?php
$MiTimesTamp = mktime(0,0,0,1,1,2005); // Calculando el timestamp de 1-1-2005
print mktime(0,0,0,1,1,2005); // vuelca 1104534000
print date("l",$MiTimeStamp); // El 1-1-2005 era sabado ...
?>
Los parámetros a pasar a maketime() son números indicando la hora, minuto, segundo, mes, dia y año, pudiendo pasar opcionalmente un valor booleano (0/1) para indicar si queremos que tenga en cuenta o no el horario de verano (dst )
Hay que recordar que mktime realiza sus calculos en base al tiempo UTC, pero los muestra con arreglo a la zona horaria del server. Por ejemplo con un server CEST, esta operación NO sería igual a cero:
<?php
print mktime(0,0,0,1,1,1970, 1) // muestra -3600
print gmmktime(0,0,0,1,1,1970, 1) // muestra 0
?>Información de la fecha con getdate()
Pasando un timestamp a getdate() obtenemos un array con información desglosada de la fecha. Como en el resto de funciones de fecha, si no le pasamos ningun timestamp, la función trabaja sobre el timestamp actual.
Veamos cada uno de los elementos del array:
elemento valor -------- ----- seconds = 46 minutes = 6 hours = 8 mday = 27 wday = 6 mon = 2 year = 2010 yday = 57 weekday = Saturday month = February 0 = 1267286806
donde "seconds" son segundos, "minutes" minutos, "hours", horas, "mday" día del mes, "wday" día de la semana, en número, "mon" mes, en número, "year" año, en número, "yday" - día del año, en número, "weekday" día de la semana, en texto, completo; por ejemplo, "Friday" y "month" mes, en texto completo; por ejemplo, "January". Finalmente el primer elemento ("0") muestra el valor inicial del timestamp.
Formato mas legible con date()
Las funciones date() y gmdate() sirvan para dar el formato deseado a una cadena conteniendo una fecha.
Si no se pasa ninguna cadena a estas funciones, se da el formato al tiempo actual (calculado internamente con time().
La unica diferencia entre ambas es que gmdate() indica la hora del meridiano de Greenwich.
Jugando con fechas: el dia
| modificadores | ejemplo | resultado |
| d - día del mes, número, dos dígitos | | $ahora_es = 27 |
| j - día del mes, número, dos dígitos sin cero inicial | | $ahora_es = 27 |
| D - dia semana abreviado letras | | $ahora_es = Sat |
| l - día de la semana, en texto, completo | | $ahora_es = Saturday |
| w - día de la semana, en numero (comienza en 0 = domingo) | | $ahora_es = 6 |
Jugando con fechas: el mes
| modificadores | ejemplo | resultado |
| m - mes, número, dos dígitos | | $ahora_es = 02 |
| n - mes, número, dos dígitos sin cero inicial | | $ahora_es = 2 |
| M - mes, tres letras | | $ahora_es = Feb |
| F - mes, texto completo | | $ahora_es = February |
| t - total dias en el mes | | $ahora_es = 28 |
Jugando con fechas: el año
| modificadores | ejemplo | resultado |
| Y - año, cuatro cifras | | $ahora_es = 2010 |
| y - año, dos cifras | | $ahora_es = 10 |
| L - bisiesto? | | $ahora_es = 0 0 = no; 1 = si |
| z - día del año | | $ahora_es = 57 |
| W - semana del año | | $ahora_es = 08 |
Jugando con fechas: la hora
| modificadores | ejemplo | resultado |
| h - hora, de "01" a "12" | | $ahora_es = 08 |
| g - sin ceros, de "1" a "12" | | $ahora_es = 8 |
| H - hora, de "00" a "23" | | $ahora_es = 08 |
| G - sin ceros, de "0" a "23" | | $ahora_es = 8 |
| a - "am" o "pm" A - "AM" o "PM" | | $ahora_es = am |
Jugando con fechas: minutos
| modificadores | ejemplo | resultado |
| i - de "00" a "59" | | $ahora_es = 06 |
Jugando con fechas: segundos
| modificadores | ejemplo | resultado |
| s - de "00" a "59" | | $ahora_es = 46 |
Jugando con fechas: fechas completas
| modificadores | ejemplo | resultado |
| U segundos desde EPOCH epoch = 1 enero 1970 | | $ahora_es = 1267286806 |
| r - formato RFC 2822 | | $ahora_es = Sat, 27 Feb 2010 08 |
| c - formato ISO 8601 (solo en PHP 5) | | N/A |
Jugando con fechas: varios
| modificadores | ejemplo | resultado |
| S sufijo en texto, 2 caracteres; por ejemplo, "th", "nd" | | $ahora_es = 27th |
| I - horario de verano | | $ahora_es = 0 0 = no 1 = si |
| O - diferencia con hora Greenwich | | $ahora_es = -0800 |
| T - zona horaria del server | | $ahora_es = PST |
| Z diferencia en segundos zona horaria | | $ahora_es = -28800 |
| B swatch internet time | | $ahora_es = 713 |
Comprobando fechas
checkdate(nMes nDia nAño) nos permite chequear si una fecha dada es posible: es decir, que no se trata del dia 32 del mes 13.
checkdate tiene en consideración años bisiestos, y es valido para un rango de años desde 0 a 32767
Y para mas flexibilidad, strftime()
la función date(), tan flexible como es, presenta dos problemas: no admite localización a idiomas distintos del inglés. Y si quieres emplear caracteres adicionales debes salvarlos:
<?php
print date("j \de F \de Y"); // como la "d" equivale al "dia" en número,
// si queremos que imprima una letra d y no el numero de mes,
// debemos emplear la barra \.
// no serviria escribir "j de F de Y"
?>
Sin que tampoco hayamos ganado mucho en estetica, ya que "27 dAmerica/Los_Angeles February dAmerica/Los_Angeles 2010" no queda muy bien. La solución pasa por indicar el mes en número y no en letra ... o usar strftime:
Hoy es Saturday, 27 de February de 2010.
<?php
setlocale(LC_TIME,"es_ES");
echo strftime("Hoy es %A, %e de %B de %Y." ,time());
?>
y estas son las opciones de formato. A la derecha añadimos las equivalentes de date():
| opciones de strftime | opciones de date | ||
| %a | dia semana (abreviado) | a | "am" o "pm" |
| %A | dia semana (completo) | A | "AM" o "PM" |
| %b | nombre mes (abreviado) | b | - |
| %B | nombre mes (completo) | B | Swatch Internet time |
| %c | representación preferida de dia y hora segun idioma del server | c | - |
| %C | año en numero (00 - 99) | C | - |
| %d | numero dia del mes (01 a 31) | d | numero dia del mes (01 a 31) |
| %D | fecha abreviada, segun idioma server (%m/%d/%y, %y/%m/%d or %d/%m/%y) | D | dia de la semana, tres letras |
| %e | dia del mes en numero (' 1' - '31') | %e | - |
| %F | - | F | mes, en texto, completo; por ejemplo, "January" |
| %g | - | g | hora, sin ceros, de "1" a "12" |
| %G | - | G | hora, sin ceros; de "0" a "23" |
| %h | igual que %b | h | h - hora, de "01" a "12" |
| %H | hora, de "00" a "23" | H | hora, de "00" a "23" |
| %I | hora como un número de 01 a 12 | I | - |
| %i | - | i | minutos; de "00" a "59" |
| %j | día del año como un número de 001 a 366 | j | día del mes sin cero inicial; de "1" a "31" |
| %l | - | l | día de la semana, en texto, completo; por ejemplo, "Friday" |
| %L | - | L | "1" o "0" segun el año sea bisiesto o no |
| %m | mes como un número de 01 a 12 | m | mes: de "01" a "12" |
| %M | minuto en numero | M | mes, en texto, 3 letras; por ejemplo, "Jan" |
| %n | nueva linea | n | mes sin cero inicial; de "1" a "12" |
| %N | - | N | - |
| %p | 'am' o 'pm', según la hora dada, o las cadenas correspondientes en el idioma actual | p | |
| %r | hora am pm | r | - |
| %R | hora en formato 24 horas | R | - |
| %S | segundos en número | S | sufijo ordinal en inglés, en texto, 2 caracteres; por ejemplo, "th", "nd" |
| %s | - | s | segundos en numero |
| %t | tabulador | t | número de días del mes dado; de "28" a "31" |
| %T | Hora actual | T | - |
| %U | segundos desde epoch | U | segundos desde epoch |
| %w | día de la semana en número (el domingo es el 0) | w | día de la semana, en número (el domingo es el 0) |
| %W | número de la semana en el año, empezando con el primer lunes como el primer día de la primera semana | W | - |
| %x | representación preferida de la fecha sin la hora | x | - |
| %X | representación preferida de la hora sin la fecha | X | - |
| %y | año en número de 00 a 99 | y | año en número de 00 a 99 |
| %Y | año en número de cuatro cifras | Y | año en número de cuatro cifras |
| %z | - | z | día del año; de "0" a "365" |
| %Z | nombre o abreviatura de la zona horaria | Z | diferencia horaria en segundos (de "-43200" a "43200") |
Equivalentes MySQL
Las fechas generadas con funciones MySQL tienen su propia estructura, básicamente inversa: año - mes -dia. Estos son los equivalentes:
<?php $mysql_datetime = date("Y-m-d H:i:s"); $mysql_date = date("Y-m-d"); $mysql_time = date("H:i:s"); ?>jueves, 14 de enero de 2010
Upload (Subir) de archivos con php a la Web
Muchas veces necesitamos hacer uploads de archivos en nuestros proyectos para muchos es algo sencillo pero para los que recién empiezan les explicare como se realiza el proceso. Este upload lo haremos utilizando php.
El primer paso es crear un formulario en el cual se seleccione el archivo a subir, para ello utilizaremos el tag input del tipo file, además hay que tener en cuenta que hay que seleccionar el tipo de encoding para el formulario el cual es: multipart/form-data.
HTML:
Luego en la página upload.php que es que se encarga de recibir los datos del formulario (Lo definimos en la propiedad action del formulario). El archivo seleccionado es subido temporalmente a una carpeta, entonces tenemos que copiar el archivo a la carpeta final, en caso contrario este archivo se eliminará automáticamente.
Para acceder a las propiedades del archivo php nos brinda el array $_FILES con las siguientes propiedades, en donde archivo es el nombre del campo con el cual se envió el archivo desde el formulario:
- $_FILES['archivo']['size']: tamaño en bytes del archivo recibido
- $_FILES['archivo']['type']: tipo mime del archivo, por ejemplo image/gif
- $_FILES['archivo']['name']: nombre original del archivo
- $_FILES['archivo']['tmp_name']: nombre del archivo temporal que se utiliza para almacenar en el servidor el archivo recibido
Algo que hago siempre es anteponer 6 caracteres aleatorios antes del nombre del archivo, esto para evitar duplicidad de nombres de los archivos.
PHP:
-
$status = "";
-
if ($_POST["action"] == "upload") {
-
// obtenemos los datos del archivo
-
$tamano = $_FILES["archivo"]['size'];
-
$tipo = $_FILES["archivo"]['type'];
$archivo = $_FILES["archivo"]['name'];
-
-
if ($archivo != "") {
-
// guardamos el archivo a la carpeta files
-
$destino = "files/".$prefijo."_".$archivo;
-
-
$status= "Archivo subido: <b>".$archivo."</b>";
-
}else {
-
$status= "Error al subir el archivo";
-
}
} else {
-
$status = "Error al subir archivo";
}
-
}
Todos los archivos se copiarán a la carpeta /files por que así lo definimos a la hora de copiar el archivo. Hay que tener en cuenta que la carpeta a donde se copiarán los archivos deben tener permisos de escritura en caso contrario se devolverá un error.
Ahora si tienes un hosting deberás cambiar los permisos, esto se hace comúnmente con un cliente de FTP que utilizas para subir tus archivos al hosting. Por ejemplo yo utilizo el FlashFXP como cliente de FTP y hay una opción llamada Atributes (CHMOD) para cambiar los permisos como se muestra en la siguiente imagen.
En nuestro ejemplo no hemos utilizado las propiedades size y type, pero ustedes la pueden usar para restringir a un máximo de tamaño de archivo o restringir a cierto tipo de archivos por ejemplo solo permitir subir imágenes. Para finalizar, hemos agregado estilos a nuestra página creada y además hemos listado los archivos subidos a la carpeta files. Pueden ver el resultado final del ejemplo además de ellos les dejo los archivo fuente para que lo descarguen.
Saber que usuario esta en linea
Código PHP:
//Pon estas Líneas donde quires que se visualizen los usuarios online
include( "class.online.php" ); ///incluyo el archivo anterior
$enlinea = new Usuariosenlinea ();
$enlinea -> enlinea ();
Código PHP:
class Usuariosenlinea
{
/*
* @param string $servidor el host para conectar, usualmente localhost
* @param string $basededatos el nombre de la base de datos
* @param string $nombredb el nombre de la tabla, preferentemente no editar
* @param string $usuario usuario de la base de datos
* @param string $pass la contraseña de la base de datos
*/
var $servidor = 'server' ;
var $basededatos = 'BD' ;
var $nombredb = 'Tabla' ;
var $usuario = 'User' ;
var $pass = 'password';
## Fin de Conexion ##
var $e_rror ;
//Segundos para borrar de la base de datos a los usuarios inactivos
var $segundos = 60;
var $ahora = 0;
//CONSTRUCTOR
function Usuariosenlinea () {
$this -> recargar ();
}
function cuantos () {
return $this -> ahora ;
}
function enlinea () {
if( $this -> ahora == 1 ) {
echo $this -> ahora . " Usuarios en linea" ;
}
else
{
echo $this -> ahora . " Usuarios en linea" ;
}
}
function ipreal (){
if ( $real_ip = getenv ( 'HTTP_X_FORWARDED_FOR' )){
$explode_real_ip = explode ( "," , $real_ip );
return trim ( $explode_real_ip [ 0 ]);
}
else
{
return getenv ( 'REMOTE_ADDR' );
}
}
function error (){
return $this -> e_rror = mysql_error ();
}
function recargar () {
$tiempo_actual = time ();
$tiempo_final = $tiempo_actual - $this -> segundos ;
$ip = $this -> ipreal ();
@ mysql_connect ( $this -> servidor , $this -> usuario , $this -> pass )
or die( 'Error al Intentar Conectar con la base de datos ' . $this -> error (). '' );
@ mysql_select_db ( $this -> basededatos )
or die( 'Error Seleccionando la base de datos ' . $this -> error (). '' );
$result = mysql_query ( "SELECT ip FROM $this->nombredb WHERE ip='$ip'" )
or die( 'Error de lectura en la base de datos ' . $this -> error (). '' );
if( mysql_num_rows ( $result ) == 0 ){
mysql_query ( "INSERT INTO $this->nombredb VALUES ('$tiempo_actual','$ip','$_SERVER[REQUEST_URI]')" )
or die( 'Error al Insertar en la base de datos ' . $this -> error (). '' );
}
else
{
mysql_query ( "UPDATE $this->nombredb SET timestamp='$tiempo_actual' where ip='$ip'" )
or die( 'Error al Insertar en la base de datos ' . $this -> error (). '' );
}
mysql_query ( "DELETE FROM $this->nombredb WHERE timestamp < $tiempo_final" )
or die( 'Error al intentar borrar en la base de datos ' . $this -> error (). '' );
$result = mysql_query ( "SELECT ip FROM $this->nombredb" )
or die( 'Error de lectura en la base de datos ' . $this -> error (). '' );
$this -> ahora = mysql_num_rows ( $result );
mysql_close ();
}
}
Código:
CREATE TABLE `usuariosenlinea` ( `timestamp` int(15) NOT NULL default '0', `ip` varchar(40) NOT NULL default '', `location` varchar(100) NOT NULL default '', KEY `timestamp` (`timestamp`), KEY `ip` (`ip`), KEY `location` (`location`) ) TYPE=MyISAM;
miércoles, 13 de enero de 2010
Sistemas de Usuarios en PHP y MYSQL
1.- Creando la tabla en MySQL
Bien, necesitamos una tabla con los datos de nuestros usuarios, así que la vamos a crear. Ésta tabla contiene los siguientes campos:
Código
FIELD | Type | KEY | Extra ----------+-------------+-----+---------------- id | tinyint(4) | PRI | AUTO_INCREMENT nombre | text | | apellidos | text | | login | varchar(40) | | password | varchar(20) | | email | text | |
Bien, pues la sentencia SQL que utilizaremos será algo así:
Código
CREATE TABLE usuarios ( id TINYINT(4) AUTO_INCREMENT, nombre TEXT, apellidos TEXT, login VARCHAR(40), password VARCHAR(20), email TEXT, UNIQUE (id) )
2.-Creando un script para introducir usuarios
Necesitamos el formulario, con los campos siguientes:
Código
<form action="crea_user.php" method="POST"> Login:<input type="text" name="login"> <br> Password:<input type="password" name="pass1"> <br> Repite Password:<input type="password" name="pass2"> <br> Nombre:<input type="text" name="nombre"> <br> Apellidos:<input type="text" name="apellidos"> <br> E-mail:<input type="text" name="email"> <br> <input type="submit" name="Crear"> </form>
Y también el script crea_user.php, que sería algo así:
crea_user.php
Código
<? $server="localhost"; /* Nuestro server mysql */ $database="bd"; /* Nuestra base de datos */ $dbpass="password"; /*Nuestro password mysql */ $dbuser="user"; /* Nuestro user mysql */ /* Primero comprovamos que no existe un usuario con el mismo login ya registrado */ $query="SELECT * FROM usuarios WHERE login='$login'"; $link=mysql_connect($server,$dbuser,$dbpass); $result= mysql_db_query($database,$query,$link); if( mysql_num_rows($result)){ echo "El usuario ya existe en la BD"; } else { mysql_free_result($result); /* Ahora comprovamos que los dos pass coinciden */ if($pass1!=$pass2) { echo "Los passwords deben coincidir<br>"; echo 'Clica <a href="form.php">aquí</a> para volver al formulario'; } else { $pass1= crypt($pass2, "semilla"); /* Encripatmos el password, con la clave "semilla" que debeis sustituirpor la que mas os guste. Hay otros metodos de encriptacion, mirad en php.net si quereis conocerlos. */ $query="INSERT INTO usuarios (login, nombre, apellidos, password, email) VALUES ('$login','$nombre','$apellidos','$pass1','$email')"; $result= mysql_db_query($database,$query,$link); if( mysql_affected_rows($link)){ echo "Usuario introducido correctamente"; } else { echo "Error introduciendo el usuario"; } /* Cierre del else */ } /* Cierre del else que corresponde a if(mysql_affected_rows.....) */ } /* Cierre del else que corresponde a if(mysql_num_rows...) */ ?>
Pues como veis, este script es muy simple. Si no lo entendeis, es porque no conoceis PHP o su método de acceso a bases de datos mysql. Leeros el prólogo antes de continuar ;-) Aquí deberíamos comprobar que quien está creando los usuarios está identificado (en caso de que el registro no sea público).
3.- Creando la página y scripts de login
Ésta parte consiste en dos páginas, la de login, y el script que comprueba los datos. Aquí va la página de login:login.php
Código
<?session_start(); if( isset($SESSION)){ header("location: user.php"); /* Si ha iniciado la sesion, vamos a user.php */ } else { /* Cerramos la parte de codigo PHP porque vamos a escribir bastante HTML y nos será mas cómodo así que metiendo echo's */ ?> <html><head><title>Necesita identificación! </title></head> <body> <center><h1>Identificate! :D </h1></center> <form action="comprueba.php" method="POST"> Login: <input type="text" name="login"><br> Password: <input type="password" name="pass"><br> <input type="submit" value="Entrar"> </form> </body></html> <? } /* Y cerramos el else */ ?>
Y el que sigue es el script de comprobación, que comprobará los datos y si son correctos nos manda a user.php tras iniciar la sesión. Si no, nos dará un mensajito avisandonos de que no hemos dado el login correcto. Primero os explicaré las funciones que usaremos.
session_start() se debe usar al principio de cada script en el que vayamos a hacer uso de variables de sesión.
session_register("nombre_variable") se usará para crear una variable de sesión, que luego podremos usar con
el nombre $nombre_variable. Lo que haremos aquí será primero inicializar las variables como un array, y luego registrarlas en la sesión.
Ahora el código:
comprueba.php
Código
<?session_start(); $server="localhost"; /* Nuestro server mysql */ $database="bd"; /* Nuestra base de datos */ $dbpass="password"; /*Nuestro password mysql */ $dbuser="user"; /* Nuestro user mysql */ $query="SELECT * FROM usuarios WHERE login='$login'"; $link= mysql_connect($server,$dbuser,$dbpass); $result= mysql_db_query($database,$query,$link); if( mysql_num_rows($result)==0){ echo "No existe el login introducido"; } else { $array= mysql_fetch_array($result); if($array["password"]== crypt($pass,"semilla") ){ /* Comprobamos que el password encriptado en la BD coincide con el password que nos han dado al encriptarlo. Recuerda usar la misma semilla para encriptar los dos passwords. */ $SESSION["login"]=$login; $SESSION["nombre"]=$array["nombre"]; $SESSION["apellidos"]=$array["apellidos"]; session_register("SESSION"); header("location: user.php"); } else { echo "Password incorrecto!"; } /* Cerramos este ultimo else */ } /* Cerramos el else que corresponde a la comprobación de que el login existe */ ?>
4.- Creación de la página de los usuarios
Bien, ésta página la voy a dejar bastante vacía, solo va a comprobar si el usuario ya se ha identificado. Si es así, le daremos la bienvenida simplemente, y pondremos el botón para logout. Si no, le mandaremos a login.php. Ahí va el código:
user.phpCódigo
<?session_start(); if(! isset($SESSION)){ header("location: login.php"); } else { echo "<html><body>"; echo "Bienvenido "; echo $SESSION["nombre"]; echo $SESSION["apellidos"]." "; echo "<br>Has entrado con el nombre de usuario "; echo $SESSION["login"]; echo "<br>Para cerrar la sesión, pulsa: <a href='logout.php'>logout</a>"; echo "</body></html>"; } ?>
5.- Cerrando la sesión
En el script logout.php simplemente cerraremos la sesión y mostraremos un mensaje indicando que ha
sido cerrada correctamente. Antes de ésto, comprovaremos que ha sido iniciada la sesión. Si no lo ha sido, mandaremos al usuario a login.php. Aquí usaremos dos funciones nuevas:
session_unset() destruye todas las variables de sesión que hemos creado. Debemos llamarla antes de llamar a
session_destroy.
session_destroy() destruye la sesión en sí, pero no destruye las variables.
Ahora sí, aquí os dejo el código:
Código
<?session_start(); if(! isset($SESSION)){ header("location: login.php"); } else { session_unset(); session_destroy(); echo "Las variables de sesión han sido eliminadas, y la sesión se ha dado por finalizada correctamente ;-)"; } ?>
Simple verdad? Pues ya tenemos nuestro sistema de usuarios completo!
ALERTA!: En éstos scripts hay algunas cosillas que tendremos que mejorar.
Por ejemplo, hay que mejorar el manejo de errores de la base de datos. Además, deberíamos incluir redirecciones hacia login.php tras mostrar los mensajes de logout, de error al identificarse (tanto de login incorrecto como de password incorrecto), que lo podríamos hacer con un refresh simple en HTML.
Además de todo ésto, tendríamos que crear un filtro para los datos introducidos en el login para evitar la inyección SQL en nuestras páginas. Para el password no sería necesario, puesto que hemos encriptado la entrada del usuario antes de pasarsela al MySQL, pero tampoco pasaría nada si, una vez implementado el filtro, se lo pasamos al password introducido por el usuario.
Suscribirse a:
Entradas (Atom)