FECHAS
En este capítulo se estudiarán las funciones existentes en PHP para el empleo de fechas. Este tipo de funciones existen en la mayoría de lenguajes de programación y van orientadas a su obtención y representación en diferentes formatos.
El tiempo en cualquier lenguaje de programación se suele tomar con respecto al inicio de la "era UNIX" que es el 1 de enero de 1970 a las 00:00:00. La función más sencilla que se basa en esta marca de tiempo es la función time() cuyo valor devuelto es el numero entero que representa la marca de tiempo correspondiente al instante en que se ejecutó la función con respecto a la era unix.
En algunas aplicaciones es necesario poseer una marca de tiempo mas detallada y por ello usamos microtime() que devuelve una cadena de caracteres con los segundos y microsegundos.
En caso de que quisiéremos tener como valor de referencia la hora del ordenador desde el cual se ejecuta emplearíamos la función gettimeofday() en la cual pasaríamos como parámetro interno , sec (para saber los segundos), usec (microsegundos), minuteswest (nº segundos al oeste de greenwich) y dstime (tipo de corrección en horarios de verano e invierno).
Estas funciones citadas anteriormente son poco utilizadas ya que la existencia de otras funciones más completas, como por ejemplo la función getdate() que obtiene una matriz asociativa con la información de la fecha y hora del sistema. Los elementos de dicha matriz son:
Clave | Contenido |
seconds | Numero de segundos de la hora actual |
minutes | Numero de minutos de la hora actual |
hours | Numero de horas de la hora actual |
mday | Día correspondiente del mes |
wday | Día de la semana en valor numérico(empezando por 0) |
mon | Mes del año en valor numerico.Del 1 al 12. |
year | Valor numérico del año |
yday | Día del año en valor numérico |
weekday | Cadena de caracteres que contiene el día de la semana(en ingles) |
month | Cadena de caracteres que contiene el mes del año(en ingles) |
0 | Marca de tiempo obtenida por la función getdate() |
Si no le pasamos ningún parámetro a la función entonces se considera la hora actual del sistema y si se recibe como parámetro un numero entero entonces lo convierte a la fecha correspondiente.
Otra función para obtener la hora es la función localtime(marca_tiempo,tipo_matriz); cuyos valores pasamos a comentar a continuación:
Índice | Clave | Contenido |
0 | tm_sec | Numero de segundos de la fecha indicada |
1 | tm_min | Numero de minutos de la fecha indicada |
2 | tm_hour | Numero de horas de la fecha indicada |
3 | tm_mday | Día correspondiente del mes |
4 | tm_wday | Día de la semana en valor numérico(empezando por 0) |
5 | tm_mon | Mes del año en valor numerico.Del 0 al 11. |
6 | tm_year | Valor numérico del año.(se ve afectado por el efecto 2000) |
7 | tm_yday | Día del año en valor numérico |
8 | tm_isdst | Indica si esta activado el efecto del cambio de hora. |
Formatos de fechas
Las funciones vistas anteriormente nos permitían convertir el valor entero de la fecha en un valor mas fácilmente entendible, aunque para poder acceder a dicha información hay que pasar por el paso previo de obtener una matriz. Para evitar ese paso intermedio, PHP pone a tu disposición la funcióndate(formato,marca_tiempo);
Esta función nos devuelve una cadena de caracteres que se corresponde con una fecha a la que se ha aplicado un determinado formato. Para definir el formato de la fecha se dispone de las siguientes opciones:
Opción | Descripción |
a | Hace que en la hora aparezca la cadena am o pm |
A | Hace que en la hora aparezca la cadena AM o PM |
d | Día del mes con dos dígitos desde 01 a 31 |
D | Día de la semana como cadena de tres letras(en ingles).Ejemplo: "Mon" |
F | Nombre del mes completo como una cadena de caracteres.Ejemplo: "March" |
h | Hace que la hora aparezca en formato 01 a 12 |
H | Hace que la hora aparezca en formato 00 a 23 |
g | Hace que la hora aparezca en formato 1 a 12 |
G | Hace que la hora aparezca en formato 0 a 23 |
i | Hace que los minutos aparezcan en formato 00 a 59 |
j | Hace que el día aparezca en formato 1 a 31 |
l(L min) | Día de la semana completo.Ejemplo: Monday |
L | Escribe 0 si no es año bisiesto y 1 si lo es |
m | Hace que el mes aparezca en formato 01 a 12 |
M | Hace que el mes aparezca en formato 1 a 12 |
s | Hace que los segundos aparezcan en formato 00 a 59 |
S | Cadena de caracteres con el sufijo ordinal.Ejemplo: "th","nd". |
t | Número de días del mes especificado de 28 a 31 |
U | Número de segundos desde el comienzo de la "era UNIX" |
w | Número del día de la semana de 0 a 6 |
Y | Año con cuatro cifras |
y | Año con dos cifras |
z | Día del año de 0 a 365 |
Z | Obtiene la diferencia horaria en segundos con respecto al GMT |
La función strftime() representa otra posibilidad para aplicar formatos a una fecha. Esta función utiliza las convenciones locales de la máquina desde la que se ejecuta el script para devolver una cadena con el formato definido en el idioma seleccionado. Su formato queda definido por los siguientes valores:
Opción | Descripción |
%a | Nombre del día de la semana abreviado en el idioma actual |
%A | Nombre del día de la semana completo en el idioma actual |
%b | Nombre del mes abreviado en el idioma actual |
%B | Nombre del mes completo en el idioma actual |
%c | Representación de fecha y hora en el idioma actual |
%d | Día del mes en formato 01 a 31 |
%H | Hora como numero de 01 a 12 |
%I | Hora como numero de 01 a 12 |
%j | Día del año como numero de 001 a 366 |
%m | Mes como numero de 01 a 12 |
%M | Minuto en numero |
%p | am o pm según la hora dada |
%S | Segundos en numero |
%U | Numero de la semana del año como el primer domingo como primer día de la semana |
%W | Numero de la semana del año como el primer lunes como primer día de la semana |
%w | Día de la semana en numero de 0 a 6 |
%x | Representación por defecto de la fecha sin hora |
%X | Representación por defecto de la hora sin fecha |
%y | Año en numero de 00 a 99 |
%Y | Año en numero de cuatro cifras |
%Z | Nombre o abreviatura de la zona horaria |
%% | Caracter % |
Estableciendo horas y fechas
Una vez conocida la forma de obtener la fecha actual, es necesario disponer de una forma de poder fijar una determinada hora para establecer por ejemplo la fecha de caducidad de una cookie, es decir, la forma de obtener una marca de tiempo correspondiente a una determinada hora.
Para ello PHP dispone de dos funciones que son mktime() y gmmktime() cuyo funcionamiento explicaremos a continuación:
La función mktime(hora,minuto,segundo,mes,dia,año,[ajuste->0 horario de verano y 1 invierno]); nos devuelve un valor entero que representa la marca de tiempo UNIX de una determinada fecha. Cada uno de los valores mencionados puede omitirse siempre y cuando a partir del valor omitido no se representen mas valores a su derecha.
La función gmmktime() funciona de la misma forma lo que considera que los parámetros representan una hora GMT.
La función setlocale(categoria,pais); nos permite establecer el idioma en los que aparecerán la fecha,hora,etc. Las categorías posibles son:
Opción | Descripción |
LC_TYPE | Conversión de cadenas a configuración regional |
LC_NUMERIC | Separadores numéricos |
LC_TIME | Para aplicar formatos de fecha y hora con strftime() |
LC_ALL | Todos los anteriores |
Validación de fechas
Existen numerosas ocasiones en las que es necesario la creación de un sistema para comprobar si la fecha introducida por el usuario es valida o no. Para ello PHP nos brinda dos funciones capaces de realizar dicha comprobación:
– checkdate(mes,dia,año); Comprueba que la fecha introducida sea correcta . – strtotime(cadena_fecha); Comprueba que la cadena de fecha sea correcta. Para ello la fecha debe estar en formato ingles, es decir, mm/dd/aa
ENTRADA Y SALIDA
Las operaciones de entrada/salida en PHP tienen una gran importancia en cualquier lenguaje de programación ya que no tiene sentido que un lenguaje de programación no pueda escribir, leer, actualizar datos de una base de datos, etc. En este capítulo nos centraremos básicamente en las operaciones de entrada y salida con archivos y posteriormente explicaremos las operaciones con bases de datos.
Supongamos que deseamos hacer una tienda de compra online. Imaginemos el gran esfuerzo que supondría tener que modificar todas las paginas HTML de aquellos productos en los cuales en la temporada de oferta su precio se viera afectado. La solución más primitiva para el almacenamiento de datos es un fichero de texto, el contenido del fichero de texto puede ser cualquiera.
¿Cómo abrimos un fichero?
Para abrir un fichero PHP pone a disposición una función. Su sintaxis es la siguiente: fopen(fichero,modo); la ruta del fichero se indica en fichero, y modo determina los diferentes modos de lectura de un archivo:
Atributo | Efecto |
r | Solo lectura |
r+ | Lectura y escritura |
w | Sólo escritura. Borra el contenido anterior |
w+ | Lectura y escritura. Borra el contenido anterior. |
a | Solo escritura. Conserva el contenido anterior. |
a+ | Lectura y escritura. Conserva el contenido anterior |
La función fopen devuelve un manejador de fichero que es el que utilizaremos en las funciones relacionadas con la lectura y escritura de ficheros.
¿Cómo se recorre un fichero?
Para leer un fichero lógicamente la operación es muy sencilla. Consiste en ir leyendo todos los caracteres hasta llegar al EOF (end of file… final del archivo) el cual determina el final del texto.
Al igual que en las matrices los ficheros poseen un cursor interno que indica su posición actual con respecto a todo el texto.
Para comprobar si se ha llegado al final del archivo, PHP pone a nuestra disposición la función feof(manejador_fichero); que se encarga de comprobar si la posición actual del fichero es la marca del final.
La función mas genérica de lectura es fread(manejador_fichero,nº_bytes); que se encarga de leer un numero determinado de bytes del fichero y devolvérnoslo en una cadena de caracteres.
En cambio, si lo que pretendemos es leer el fichero caracter a caracter debemos usar la función fgetc(manejador_fichero); .
Otras de las funciones mas características son: fgets(fichero,nº bytes); que nos devuelve una cadena de caracteres con la información leída. fgetss(manejador_fichero,nº bytes,[mostrar_tags]); nos lee un fichero HTML omitiendo las etiquetas características del código, en mostrar tags debemos introducir las etiquetas que deseamos que se muestren.
Si al realizar la lectura lo que se pretenden leer los valores que siguen un determinado formato de entrada nos podemos ahorrar un gran trabajo usando la función fscanf(manejador_fichero,formato,variables); Esta función obtiene los datos de entrada de un fichero siguiendo un formato determinado. Posteriormente dicha información debe ser tratada por el programador.
La ultima función que vamos a estudiar para abrir ficheros es la función file(nombre_fichero); con esta función no es necesario usar las funciones fopen() y fclose() ya que se ejecutan de forma implícita.
¿Cómo se cierra un fichero?
Cerrar es la ultima operación que se debe realizar al manipular un fichero y permite cerrar la referencia que se hace al fichero en el script ejecutado. Para poder cerrar un fichero usamos la función fclose(manejador_fichero);
Escritura en ficheros
Para escribir en un fichero básicamente debemos realizar tres operaciones: abrir el fichero en modo escritura, realizar la operación de escritura realizada, cerrar el fichero. Las funciones que empleamos para escribir en un fichero son fputs(manejador_fichero,cadena); y fwrite(manejador_fichero,cadena); que nos permiten añadir una cadena de caracteres al texto anterior contenido en el texto.
Acceso directo en ficheros
Existen un conjunto de funciones que nos permiten situarnos en una determinada posición del fichero para leer a partir de ahí.
La función fseek(manejador_fichero,posicion); Nos permite empezar a leer un fichero a partir de una posición según se determine: seek_set (se toma con el principio del fichero), seek_cur (posición actual), seek_end (posición final).
Existen dos funciones básicas que nos posicionan al principio del fichero -> rewind(manejador_fichero); o que nos devuelven el valor actual de la posición-> ftell(manejador_fichero);
Funciones variadas para el manejo de ficheros
fpassthru(manejador_fichero); Nos muestra el contenido referenciado por manejador de fichero. Devuelve el numero de bytes mostrados si no se produce ningún fallo. set_file_buffer(fichero,tamaño); Determina el tamaño del buffer de ese archivo que usara PHP. readfile(fichero); Lee un fichero y lo muestra por el método de salida estándar.
OPERACIONES CON FICHEROS
En el desarrollo y administración de sitios webs resulta bastante habitual tener que acceder a ficheros del servidor para manipularlos. Por esta razón en este capítulo vamos a describir las funciones creadas en PHP para realizar dichas operaciones.
Cambio, creación y borrado de directorios
chdir(ruta_al_directorio); Nos permite cambiar el directorio activo a la ruta establecida como parámetro. mkdir(ruta_al_directorio,permisos); Esta función crea un nuevo directorio en la ruta que hemos indicado, el segundo parámetro debe ser un numero octal y es por el que vienen determinados los permisos. rmdir(ruta_directorio); Borra el directorio pasado como parámetro.
Procesamiento de los elementos de un directorio
Supongamos que queremos realizar una operación determinada como una búsqueda, visualización, etc sobre todos los ficheros de un directorio. PHP nos proporciona una solución a este problema: el manejador de directorios (representa una conexión lógica con un directorio determinado que permite leer la lista con los nombres de los elementos contenidos en el directorio actual).
La función empleada para abrir un directorio es opendir(ruta); cuya función como ya se ha comentado es abrir el directorio de la ruta especificada. Una vez se ha ejecutado opendir() podemos realizar tres operaciones:
La función readdir(manejador); nos devuelve una cadena con el nombre del siguiente elemento del directorio, ya sea un subdirectorio o un fichero. La función rewinddir(manejador); procesa un directorio y sitúa el puntero interno en el primer directorio. La función closedir(manejador); finaliza el tratamiento de entradas de directorio.
La clase dir
PHP nos proporciona una pseudoclase predefinida para el manejo de ficheros. Esta clase no aporta ninguna funcionalidad que no hayamos visto hasta este punto pero recopila todas las funciones a partir de una sola. Para poder trabajar con un directorio primero hay que crear una instancia de clase dir por medio de su constructor. $directorio=dir(ruta_directorio);
Este objeto cuenta con 3 métodos y 2 propiedades(las propiedades sólo de consulta por lo que no pueden ser modificadas. Los métodos empleados son read(),rewind() y close()
Copiado,borrado y renombrado de ficheros
copy(fichero_origen,fichero_destino); Realiza una copia de un fichero. unlink(nombre_fichero); Elimina el fichero. rename(nombre_antiguo,nombre_nuevo); Renombra el fichero pasado como parámetro.
Atributos de ficheros y directorios
Los ficheros y directorios poseen una serie de características propias denominadas atributos. PHP pone a nuestra disposición un conjunto de funciones que nos permitirán obtener información sobre los archivos o carpetas.
La función file_exists(elemento); Comprueba que el elemento pasado como parámetro exista.
filesize(nombre_fichero); nos informa sobre el tamaño del fichero en bytes.
La función fileatime(fichero); nos informa sobre el ultimo acceso al fichero.
La función filemtime(fichero); nos informa sobre la ultima modificación del fichero. La función filectime(fichero); nos informa sobre el último cambio al fichero. La función filetype(fichero); nos devuelve el tipo de elemento que estamos tratando. Los resultados posibles que puede devolver son:
Resultado | Significado |
block | Dispositivo de bloques |
char | Caracteres |
dir | Directorio |
fifo | FIFO |
file | Fichero |
link | Enlace |
unknown | Desconocido |
Chmod(elemento_directorio,permisos); recibe como parámetro el elemento y los permisos que deseamos otorgarle a dichos elementos
EL LENGUAJE SQL Y PHP
En este capítulo nos dedicaremos a explicar el lenguaje SQL ya que posteriormente lo usaremos mucho en las conexiones de PHP con MySQL.
Creación y modificación de Tablas en SQL
MySQL esta organizado a partir de tablas y dichas tablas contienen campos. Cada campo es capaz de contener un tipo de dato. Los tipos de datos que es posible crear en el lenguaje SQL son:
Tipo | Descripción |
Tinyint[Unsigned] | Entero de 0 a 255 o de -128 a 128 |
Smallint[Unsigned] | Entero de 0 a 65535 o de -32768 a 32768 |
Int o Integer | Entero normal.Rango de -2147483648 a 214783648 |
Float[ (M,D) ] | Número de coma flotante de simple precisión si no se pasa ningun argumento M es el nº de digitos y D el nº de decimales |
Double [ (M,D) ] | Número de coma flotante de doble precision. Siempre dispone de signo M y D |
Decimal [ (M [,D]) ] | Número almacenado como cadena de caracteres M es el número total de dígitos y D el nº de decimales |
Date | Tipo fecha.Admite formatos "AAAA-MM-DD" o "AA-MM-DD" o "AAMMDD" |
Time | Tipo hora.Admite formato "HH:MM:SS" o "HHMMSS" o "HHMM" o "HH" |
Char(longitud) | Cadena de caracteres de la longitud indicada.Se reserva el espacio en caracteres aunque no se usen |
Varchar(longitud) | Cadena de caracteres de la longitud indicada que se almacena con su ocupacion.Máxima longitud: 255 caracteres |
Blob | Tipo destinado a almacenar bits sin intrepretar.Se usa para almacenar texto mas largo de 255 caracteres.Diferencia mayúsculas de minúsculas. |
Text | Tipo destinado a almacenar bits sin intrepretar.Se usa para almacenar texto mas largo de 255 caracteres.No diferencia mayúsculas de minúsculas. |
Para crear una tabla usaremos la siguiente sintaxis:
CREATE TABLE Nombre_tabla (Campo1 Tipo_dato Not Null, Campo2 Tipo_dato, PRIMARY KEY (Campo3));
Esto nos crearía una tabla con 3 campos de los cuales Campo3 es un valor único, es decir, que no puede ser sobreescrito.
Para eliminar una tabla usaremos:
DROP TABLE Nombre_tabla;
Para modificar la estructura de la tabla usaremos la siguiente sintaxis:
ALTER TABLE Nombre_tabla [ADD Nombre_atributo Definición] //Añadiría un nuevo campo [CHANGE AntiguoNombreAtributo NuevoNombreAtributo Definición] //Cambiaría un campo [DROP NombreAtributo]; //Borraría un campo
Los índices son una estructura de acceso que permiten organizar los datos contenidos en una tabla. Para crear un índice usaríamos la siguiente sintaxis:
CREATE [UNIQUE] INDEX NombreIndice ON Tabla (Campos);
Manipulación de datos
-Inserción de datos
Para insertar datos en la tabla se realiza mediante el comando insert y su sintaxis es la siguiente:
INSERT INTO NombreTabla [Campo1,Campo2…CampoN] VALUES (Valor1,Valor2…ValorN);
– Consultas de datos
Para esta acción usamos el comando SELECT y la sintaxis es la siguiente:
SELECT ([*]/[Atributos]) FROM Tabla/s [WHERE ListaCondiciones] [GROUP BY Campo] [HAVING ListaCondiciones] [ORDER BY Campo]
Existen un conjunto de funciones dentro de las consultas de datos que nos permiten obtener información o realizar operaciones con respecto a las filas. Las funciones son:
función | Descripción |
COUNT(*/DISTINCT Campo) | Cuenta el numero de filas |
SUM(Campo) | Suma los valores del atributo indicado |
AVG(Campo) | Obtiene la media aritmética del atributo |
MAX(Campo) | Obtiene el valor máximo del atributo |
MIN(Campo) | Obtiene el valor mínimo del atributo |
– Eliminación de datos
Para eliminar datos usamos la sentencia DELETE cuya sintaxis es la siguiente:
DELETE FROM NombreTabla [WHERE Condición];
CONEXIÓN CON MYSQL
Una vez que ya hemos explicado un poco por encima todas las operaciones posibles y lógicas que podemos hacer con una base de datos en el lenguaje SQL, llega el momento de combinarlo con la potencia de PHP y para ello usaremos el programa MySQL.
MySQL es uno de los gestores de bases de datos mas utilizados en entornos en los cuales se emplea PHP ya que PHP dispone de numerosas funciones que se compaginan perfectamente con MySQL. La forma genérica de obtener información de tablas en Mysql es la siguiente:
– Conexión con el gestor. – Preparación de la consulta SQL. – Ejecución de la consulta. – Procesamiento del resultado obtenido en el cursor. – Liberación de recursos (esta es opcional, aunque es recomendable). – Cierre de la conexión con el gestor.
Para realizar estas y otras muchas mas cosas disponemos de las siguientes funciones:
Función | Descripción |
mysql_connect("host","usuario","password") | Establece la conexión con el servidor. Recibe el host y el usuario y contraseña con el que debe conectar. |
mysql_select_db("base de datos",conexión) | Selecciona la base de datos sobre la cual se va a trabajar |
mysql_query(consulta,conexión) | Ejecuta la consulta SQL indicada como primer parámetro. |
mysql_num_fields(cursor) | Devuelve el numero de atributos que figuran en el cursor que se le pasa como parámetro y en el que se almacena el resultado de la consulta |
mysql_fetch_row(cursor) | Avanza a la siguiente posición de la fila en cursor. Devuelve un array que contiene en sus celdas cada uno de los valores de los atributos de la fila. |
mysql_free_result(cursor) | Libera los recursos asociados al cursor. |
mysql_close(conexion) | Cierra la conexion establecida con mysql_connect. |
Una de las ventajas que proporciona la altísima integración que PHP y MYSQL tienen es la existencia de funciones que permiten al programador acceder a las diferentes estructuras que conforman la base de datos. Algunas de las funciones son:
Función | Descripción |
mysql_list_dbs(conexion) | Devuelve en un cursor los nombres de las bases de datos disponibles en el servidor al que se haya conectado con mysql_connect |
mysql_list_tables(base_datos,conexion) | Devuelve en un cursor los nombres de las tablas disponibles en la base de datos. |
mysql_tablename(cursor,numero_fila) | Devuelve el nombre de la tabla o base de datos en la que esta el cursor indicado |
mysql_field_name(cursor,numero_col) | Devuelve el nombre del campo cuyo índice se pasa como segundo parámetro |
mysql_field_type(cursor,numero_Col) | Devuelve el tipo del campo cuyo índice se pasa como segundo parámetro |
mysql_field_len(cursor,numero_col) | Devuelve la longitud del campo cuyo índice se pasa como segundo parámetro |
mysql_field_flags(cursor,numero_col) | Devuelve una serie de indicativos correspondientes a características del atributo cuyo índice se pasa como segundo parámetro |
mysql_affected_rows(conexion) | Devuelve el numero de filas afectadas por una actualización o borrado |
mysql_change_user(usuario,password) | Cambia de usuario |
mysql_create_db(basedatos) | Crea una base de datos con el nombre pasado por parámetro |
mysql_drop_db(basedatos) | Elimina la base de datos pasada por parámetro |
mysql_insert_id(cursor) | Devuelve el valor generado para un AUTOINCREMENT |
SESIONES
Generalmente una web se compone de una serie de páginas entre las que existe alguna relación. Un ejemplo claro es una página en la cual es necesario estar registrado para poder acceder a ellas ya que en función de la categoría del usuario nos permitirá acceder a unas secciones o otras. En estas aplicaciones será necesario ir comprobando los permisos de usuario y para ello usamos un elemento en PHP denominado "sesiones".
Una sesión se inicia cuando un usuario entra en la aplicación web y finaliza cuando el usuario abandona la aplicación (mas adelante comprenderemos lo de "abandonar aplicación").
Durante todo ese tiempo podemos manipular una serie de variables que se inician al iniciar la sesión y mantener un tipo de información común entre todas las páginas (en el caso de el usuario registrado seria los privilegios que posee).
Para mantener esta información constante es necesario que los datos se guarden en un fichero ya sea en el cliente (cookies) o en el servidor (en caso de que tenga desactivado las cookies).
Para el problema que consiste en diferenciar los diferentes usuarios existe una solución muy básica que consiste en un identificador de sesión diferente en cada caso.
Este identificador de sesión debe ser enviado de una pagina a otra para mantener la sesión activa(a menos que en la configuración del servidor tengamos activada la opción session_trans_id) y también es necesario pasar el identificador de sesión en los formularios como un campo HIDDEN.
Ejemplos:
– Hipervínculo <a href="pagina.php?<? =SID ?>">Entrar</a>
-Formulario <input type="hidden" name="session_name()" value="SID">
Funciones de gestión de sesiones
función | Significado |
session_start(); | Si es la primera solicitud genera un identificador de sesión aleatorio cuyo nombre será sess_IDsesión; si es otra solicitud continua la sesión iniciada anteriormente. |
session_destroy(); | Elimina todos los datos asociados con una sesión, borra el archivo en el servidor pero no borra la cookie. |
session_register(nombre); | Recibe como parámetro una serie de nombres de variable globales y los registra como variables de sesión en el fichero del servidor |
session_unregister(nombre); | Eliminamos la variable global introducida y se elimina el contenido de esta variable en el fichero del servidor.Sin pasar el parámetro nombre eliminaremos todas las variables de la sesión. |
session_is_registered(nombre); | Devuelve true en caso de que en la sesión se encuentre registrada una variable con dicho nombre. |
session_unset(); | Dejamos sin ningún valor asignado a todas las variables de la sesión |
session_id([nombre]); | Si no le proporcionamos ningún parámetro nos da el identificador de sesión; si le proporcionamos el parámetro nombre cambia el valor del identificador por el parámetro nombre. |
session_name([nombre]); | Si se invoca sin parámetro devuelve el nombre de la variable interna que tiene el id de sesiones; si se pasa parámetro cambia el nombre de la sesión. |
session_get_cookie_params(); | Permite definir nuevos valores para los parámetros de configuración de las cookies.Para que el cambio sea permanente hay que invocar el cambio en todos los documentos. |
session_cache_limiter([cache_limiter]); | Si se le proporciona valor modifica el valor por defecto en cambio sino se muestra el caché que tiene por defecto. |
session_encode(); | Devuelve una cadena con la información de una sesión, después de usar esta función la información de la sesión queda actualizada |
session_decode(cadena); | Descodifica la cadena que recibe como parámetro y que contiene la info de sesión, después de usar esta función se actualiza la info de sesión. |
session_save_path([path]); | Devuelve el camino al directorio donde se guardan los ficheros asociados a la sesión.El efecto solo dura en el script actual. |
session_module_name([modulo]); | Devuelve el nombre del modulo que se usa para realizar la gestión de sesiones. Cuando se invoca un parámetro se usa como nuevo gestor de sesiones. |
session_set_save_handler(open,close,read,write,destroy,gc); | |
Permite definir su propio manejador para almacenar la información asociada con una sesión.De esta forma los datos pueden ser metidos en una BD en vez de en un fichero. Tenemos que pasarle como parámetro toda la información necesaria para crear y destruir sesiones. |
FORMULARIOS CON PHP
Los Formularios no forman parte de PHP, sino del lenguaje estándar de Internet, HTML. Vamos a dedicar en este capítulo algunas líneas al HTML, para entrar posteriormente a tratarlos con PHP.
Todo formulario comienza con la etiqueta <FORM ACTION="lo_que_sea.php" METHOD="post/get"> . Con . Con ACTION indicamos el script que va procesar la información que recogemos en el formulario, mientras que METHOD nos indica si el usuario del formulario va ha enviar datos ( post ) o recogerlos ( get ). La etiqueta <FORM> indica el final del formulario.
A partir de la etiqueta <FORM> vienen los campos de entrada de datos que pueden ser:
Cuadro de texto:
<input type="text" name="nombre" size="20" value="jose">
Cuadro de texto con barras de desplazamiento:
<textarea rows="5" name="descripcion" cols="20">Es de color rojo</textarea>
Casilla de verificación:
<input type="checkbox" name="cambiar" value="ON">
Botón de opción:
<input type="radio" value="azul" checked name="color">
Menú desplegable:
<select size="1" name="dia">
<option selected value="lunes">lunes</option>
<option>martes</option>
<option value="miercoles">miércoles</option>
</select>
Boton de comando:
<input type="submit" value="enviar" name="enviar">
Campo oculto:
<input type="hidden" name="edad" value="55">
Este último tipo de campo resulta especialmente útil cuando que remos pasar datos ocultos en un formulario.
Como habrás observado todos lo tipos de campo tienen un modificador llamado name , que no es otro que el nombre de la variable con la cual recogeremos los datos en el script indicado por el modificador ACTION de la etiqueta FORM FORM , con value establecemos un valor por defecto.
A continuación veamos un ejemplo, para lo cual crearemos un formulario en HTML como el que sigue y lo llamaremos formulario.htm :
<HTML>
<BODY>
<FORM METHOD="post" ACTION="mis_datos.php">
<input type="hidden" name="edad" value="55">
<p>Tu nombre <input type="text" name="nombre" size="30" value="jose"></p>
<p>Tu sistema favorito
<select size="1" name="sistema">
<option selected value="Linux">Linux</option>
<option value="Unix">Unix</option>
<option value="Macintosh">Macintosh</option>
<option value=&qmargin-left: 75"><option value="Windows">Windows</option>
</select></p>
<p>¿Te gusta el futbol ? <input type="checkbox" name="futbol" value="ON"></p>
<p>¿Cual es tu sexo?</p>
<blockquote>
<p>Hombre<input type="radio" value="hombre" checked name="sexo"></p>
<p>Mujer <input type="radio" name="sexo" value="mujer"></p>
</blockquote>
<p>Aficiones</p>
<p><textarea rows="5" name="aficiones" cols="28"></textarea></p>
<p><input type="submit" value="Enviar datos" name="enviar">
<input type="res-left: 50"> <input type="reset" value="Restablecer" name="B2"></p>
</FORM>
</BODY>
<HTML>
Y ahora creemos el script PHP llamado desde le formulario mis_datos.php :
Todos los datos se encuentran en la variable $_POST, ya que el formulario está enviado por el método post.
<?PHP;
if (isset($_POST['enviar']) {
echo "Hola <b>" . $_POST['nombre'] . "</b> que tal estás<BR>n";
echo "Eres " . $_POST['sexo'] . "<BR>n";
echo "Tienes " . $_POST['edad'] . "<BR>n";
echo "Tu sistema favorito es " . $_POST['sistema'] . "<BR>n";
if (isset($_POST['futbol']) {
echo "Te gusta el futbol <BR>n";
} else odigo" style="margin-left: 50">} else {
echo "NO te gusta el futbol <BR>n";
}
if ($_POST['aficiones'] != "") {
echo "Tus aficiones son: <BR>n";
echo nl2br($_POST['aficiones']);
} else {
echo "NO tienes aficiones <BR>n";
}
}
echo "<a href='formulario.htm'>VOLVER AL FORMULARIO</a>"
?>
Una vez rellenados los datos del formulario, pulsamos el botón Enviar datos , con lo que le campo enviar toma lo que su etiqueta value indica, es decir enviar="Enviar datos" . En nuestro script lo primero que evaluamos es que se haya enviado el formulario, y para ello nada mejor que comprobar que la variable $enviar no está vacía. Le ponemos el signo dólar delante a enviar , ponemos el signo dólar delante a enviar , ya que en PHP todas las variables se les refiere con este signo.
Hay que tener en cuenta que si fusionáramos el código de ambos ficheros, nos ahorraríamos uno, pero no también se puede hacer en dos como lo estamos haciendo. Si la variable $enviar está vacia, enviamos el formulario.
<?PHP;
if ($enviar) {
echo "Hola <b>" . $nombre . "</b> que tal estás<BR>n";
echo "Eres " . $sexo . "<BR>n";
echo "Tienes " . $edad . "<BR>n";
echo "Tu sistema favorito es " . $sistema . "<BR>n";
if ($futbol) {
echo "Te gusta el futbol <BR>n";
} else {
echo "NO te gusta el futbol <BR>n";
}
if ($aficiones != "") {
< stuot;)>
echo "Tus aficiones son: <BR>n";
echo nl2br($aficiones);
} else {
echo "NO tienes aficiones <BR>n";
}
echo "<a href='$PHP_SELF'>VOLVER AL FORMULARIO</a>"
} else {
<HTML>
<BODY>
<FORM METHOD="post" ACTION="<?PHP echo $PHP_SELF ?>">
<input type="hidden" name="edad" value="55">
<p>Tu nombre <input type="text" name="nombre" size="30" nombre" size="30" value="jose"></p>
<p>Tu sistema favorito
<select size="1" name="sistema">
<option selected value="Linux">Linux</option>
<option value="Unix">Unix</option>
<option value="Macintosh">Macintosh</option>
<option value="Windows">Windows</option>
</select></p>
<p>¿Te gusta el futbol ? <input type="checkbox" name="futbol" value="ON"></p>
<p>¿Cual es tu sexo?</p>
<blockquote>
<p>Hombre<input type="radio" value="hombre" checked name="sexo"></p>
<p>="codigo" style="margin-left: 100"><p>Mujer <input type="radio" name="sexo" value="mujer"></p>
</blockquote>
<p>Aficiones</p>
<p><textarea rows="5" name="aficiones" cols="28"></textarea></p>
<p><input type="submit" value="Enviar datos" name="enviar">
<input type="reset" value="Restablecer" name="B2"></p>
</FORM>
</BODY>
</HTML>
<?PHP
} //fin IF
?>
La variable de entorno $PHP_SELF , es una variable de entorno que nos devuelve el nombre del script que estamos ejecutando. Y por último, hacer notar el uso de la función nl2br() , nl2br() , con la cuál sustituimos los retornos de carro del texto, los cuáles no reconocen los navegadores, por la etiqueta <BR> .
Descarga de ficheros desde un formulario
Vamos a ver un caso especial, como descargar un archivo desde un formulario. Para ello utilizaremos una etiqueta INPUT de tipo FILE , soportada a partir de las versiones de los navegadores Nestcape Navigator 2.0 e Internet Explorer 4.0.
El formulario debe usar el método post , y el atributo post , y el atributo enctype debe tener el valor multipart/form-data . Además al formulario debemos añadirle un campo oculto de nombre MAX_FILE_SIZE , al cuál le daremos el valor en bytes del tamaño máximo del archivo a descargar.
<FORM ENCTYPE="multipart/form-data" ACTION="7-3.php" METHOD="post">
<INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000">
<INPUT NAME="archivo" TYPE="file">
<INPUT TYPE="submit" VALUE="Descargar Archivo">
</FORM>
Cuando el formulario es enviado, PHP detectará automáticamente que se está descargando un archivo y lo colocará en un directorio temporal en el servidor. Dicho directorio será que el que esté indicado en el archivo de configuración php.ini , o en su defecto en el directorio temporal del sistema.
Cuando PHP detecta que se está descargando un archivo crea varias variables con el prefijo del nombre del archivo pero con distintas terminaciones. La variable terminada en $_FILES['archivo']['name'] contiene el nombre original del archivo, $_FILES['archivo']['size'] contiene el tamaño en bytes de éste, y la variable $_FILES['archivo']['type'] nos indicará el tipo de archivo si éste es ofrecido por el navegador.
Si el proceso de descarga no ha sido correcto la variable archivo tomará el valor none y _size será 0 , y si el proceso ha sido correcto, pero la variable $_FILES['archivo']['size'] da 0 , quiere decir que el archivo a descarga supera el tamaño máximo indicado por MAX_FILE_SIZE .
Una vez descargado el archivo, lo primero que debemos hacer es moverlo a otro lugar, pues sino se hace nada con él, cuando acabe la ejecución de la página se borrará.
Veamos un ejemplo de todo lo dicho.
<HTML>
<BODY>
<?PHP
if (isset($_POST['enviar']) {
if ($_FILES['archivo']['name'] != "" && $_FILES['archivo']['size'] != 0){
echo "Nombre: $archivo_name <BR>n";
echo "Tamaño: $archivo_size <BR>n";
echo "Tipo: $archivo_type <BR>n";
if (! move_uploaded_file ($_FILES['archivo']['tmp_name'], "directorio/".$_FILES['archivo']['name'])) {
echo "<h2>No se ha podido copiar el archivo</h2>n";
}
} elseif ($_FILES['archivo']['name'] != "" && $FILES['archivo']['size'] == 0) {
echo "<h2>Tamaño de archivo superado</h2>n";
} else {
echo "<h2>No ha escogido un archivo para descargar</h2>n";
}
echo "<HR>n";
}
?>
<FORM ENCTYPE="multipart/form-data" ACTION="<?php echo $_SERVER['PHP_SELF']; ?>" METHOD="post">
<INPUT type="hidden" name="MAX_FILE_SIZE" value="100000">
<p><b>Archivo a descargar<b><br>
<INPUT type="file" name="archivo" size="35"></p>
<p><INPUT type="submit" name="enviar" value="Aceptar"></p>
</FORM>
</BODY>
</HTML>
Autor:
Elizabeth
Página anterior | Volver al principio del trabajo | Página siguiente |