taller de php

Upload: richardson-castro

Post on 06-Jul-2015

243 views

Category:

Documents


0 download

TRANSCRIPT

TALLER DE PHP

IntroduccinEste es el primer artculo editorial del Taller de PHP donde podrs conocer de qu se trata este lenguaje, cmo aplicarlo y algunos tips extra para sacarle el mximo provecho. Para empezar, PHP es un lenguaje de programacin para pginas web que permite generar pginas dinmicas del lado del servidor. Para ser un poco ms preciso, nos referimos por pginas dinmicas a aquellas pginas que van a cambiar su contenido dependiendo de los valores que se le asignen. Y por qu del lado del servidor? Esto significa que el cdigo PHP va a ser interpretado en el servidor. As, lo que el usuario ver en pantalla ser el contenido generado por la interpretacin del archivo PHP que el usuario est solicitando. Una de las grandes ventajas que tiene PHP es su gran versatilidad a la hora de trabajar con bases de datos, permitiendo realizar pginas con informacin almacenada en forma persistente en bases de datos y mostrarla segn la peticin de los usuarios.

Primeros pasosDentro de un archivo PHP se puede alternar entre cdigo html y cdigo PHP. Esto nos permite realizar pginas dinmicas de forma fcil: realizando toda la estructura con html y luego agregando el contenido dinmico. Imaginemos una pgina html comn, pero en lugar de ser index.html es index.php. Cuando se quiera agregar cdigo PHP habr que hacerlo dentro de las etiquetas o , por ejemplo: hola mundo incluir cdigo PHP en html

1

TALLER DE PHP

VariablesLas variables son elementos que creamos para asignarles un valor o dato especfico (que puede cambiar a lo largo de nuestro archivo). En PHP, las variables se definen anteponiendo el signo $, por ejemplo:$hola = "hola mundo";

En el cdigo anterior definimos la variable hola la cual contiene la informacin hola mundo. Noten que al final agregu un punto y coma (;). En PHP, siempre que se termine una instruccin hay que aclararlo de esta forma.

TipLo ideal a la hora de programar es definir todas las variables y realizar las operaciones antes del cdigo html y en ese cdigo mostrar los resultados de nuestras variables. Por ejemplo, un cdigo completo de hola mundo sera: incluir cdigo PHP en html

La funcin echo lo que hace es imprimir una o ms cadenas de texto. En nuestro ejemplo anterior, como la variable contena una cadena de texto (string), lo que el navegador hubiera mostrado es: hola mundo incluir cdigo PHP en html hola mundo

En los prximos artculos de este taller ya profundizaremos en el uso de este potente lenguaje.

2

TALLER DE PHP

Variables y ConstantesEn la clase anterior vimos un ejemplo muy chiquito explicando ms o menos qu era una variable, hoy avanzaremos un poco ms en detalle, veremos: Reconocimiento de Variables Tipos de Variables Qu son las constantes y en qu se diferencian?

Reconociendo variablesComo expliqu en la clase anterior las variables anteponen el smbolo $, es decir $variable, $queEsEsto, $no_se, son tres variables que se le pone el nombre que uno quiere.

Qu contenido pueden tener mis variablesA una variable se le puede asignar cualquier tipo de informacin: una cadena de texto (string), nmeros enteros (integer), un arreglo (array), true, false, null, etc; As mismo, a una variable que antes era un string se le puede cambiar el tipo de informacin sin ningn problema. hola, esta es texto; 30; array( hola, un, array ); true;

Si escribimos todo eso en nuestro cdigo php, el valor final que va a tener la variable $miVariable va a ser true, todo el resto de la informacin asignada se pierde.

3

TALLER DE PHP

Tipo de variablesExisten dos tipos de variables en php, locales y globales, locales son aquellas que se ejecutan en un nico mbito, es decir si yo defino una variable $local y a continuacin uso una funcin que adentro contiene una variable llamada $local, van a ser consideradas como dos variables diferentes y no va a pasar lo que pasa en el ejemplo anterior que la informacin asignada prioritariamente a la variable $local se pierde. Para crear una variable global que s puede ser accedida desde todos los mbitos de nuestro script se debe aclarar, caso contrario es local.

Qu son las constantes y en qu se diferencian con las variables?Como bien lo dice el nombre, una constante es como una variable pero una vez definida esta no puede cambiar su contenido en todo el script. Para crear una constante debemos definirla de la siguiente manera:

De esa forma hemos definido la constante HOLA (por convencin se utilizan nombres en mayscula para las constantes aunque no es obligatorio). Las constantes son ms livianas que las variables en el uso de memoria del servidor y no pueden ser reescritas, es decir, si en nuestro script tenemos lo siguiente:

Nuestro script de php va a interpretar la constante HOLA con la primera informacin definida en ella, es decir Hola mundo y en el reporte de errores del servidor va a agregar el error de que se intent definir nuevamente la constante HOLA. Otra ventaja que tienen las constantes es que son GLOBALES, es decir se pueden acceder desde cualquier mbito, dentro de una funcin, una clase, etc.4

TALLER DE PHP

Por ltimo, para usar una constante la usamos directamente por el nombre que definimos en el primer trmino, volviendo al ejemplo de Hola mundo de nuestra primer clase, usando la constante sera de la siguiente forma: incluir cdigo PHP en html

Y en el navegador se ver as:

5

TALLER DE PHP

Condicionales (Parte I)A partir de esta clase vamos a empezar a ver con ms profundidad como podemos aprovechar al mximo la programacin. Los condicionales son bsicamente el elemento fundamental a la hora de hacer pginas dinmicas. Con ellos decidimos qu tipo de accin realizar y son parte de la llamada estructura de control.

Diferentes tipos de condicionalesTenemos 4 elementos a utilizar a la hora de necesitar una condicin: If, else, elseif y switch

Casos de uso: if, else y elseifLa estructura if se utiliza para ejecutar una accin segn una determinada condicin. Por ejemplo:

Por otro lado est muy relacionada con el else, que sirve para continuar con el proceso si no se cumple la condicin. Atencin! No es obligatorio que figure.

6

TALLER DE PHP

Si usamos el else se mostrar o la primer accin o la segunda. Por el contrario, si usamos solo el if, en pantalla se mostrara el bloque de accin si se cumple la condicion y seguir corriendo el script mostrando lo que viene a continuacion por fuera de los { }. Por ltimo, tenemos el elseif que nos permite usar varias condiciones hasta que se cumpla una. Por ejemplo:

El Back-EndEn nuestro back-end, o sea, en nuestro proceso por php para recibir el formulario, lo vamos a hacer exactamente igual que como lo venamos haciendo con el resto de los formularios, vamos a recibir va POST las variables ttulo y cuerpo, pero no imagen. S, ya s que nuestro input se llama imagen, pero en este caso en lugar de recibirla como $_POST['imagen'], la vamos a recibir como $_FILES['imagen']. Qu diferencia hay con POST? se preguntarn y la respuesta es bastante sencilla, FILES nos da bastante ms informacin respecto al archivo que subimos:

- nos da la ruta y el nombre temporal al archivo que acabamos de subir, si no queremos perder este archivo, lo que tenemos que hacer es moverlo a una carpeta nuestra dentro del Hosting, por lo general no se tiene acceso a la carpeta temporal donde se suben los archivos.$_FILES['imagen']['tmp_name']

62

TALLER DE PHP

nos dice el tamao que tiene el archivo, por si se realiza un servicio pblico y queremos limitar la subida solo a archivos de 1 mega, entonces se puede poner una condicin utilizando este valor.$_FILES['imagen']['size'] -

nos va a indicar el tipo de archivo del que se trate, en nuestro ejemplo, como slo queremos que se suban imgenes podemos poner un if limitando slo al caso de las imgenes.$_FILES['imagen']['type'] -

nos va a indicar el nombre del archivo original, ya que el tmp_name es un nombre generado por el servidor.$_FILES['imagen']['name'] -

Entonces ya sabiendo cmo leer el archivo que acabamos de enviar desde el formulario, solo nos resta moverlo a la carpeta de destino. Supongamos que nosotros en el servidor tenemos la carpeta uploads donde vamos a guardar todas las imgenes de las noticias, lo que tenemos que hacer es poner la url absoluta a esa carpeta. Fjense que no es desde donde estn todos nuestros scripts de php, sino que va a ser algo del estilo /var/www/elwebmaster.com/htdocs/uploads, y si estn en Windows probablemente sea algo as: c:/ archivos de programa/ xampp/ www/ elwebmaster.com/ uploads. Si ustedes tienen un servicio de Hosting contratado, lo ms probable que les hayan enviado un email con la informacin a su carpeta absoluta en el servidor, ya que ustedes si ingresan por ftp, van a entrar directamente a la carpeta a donde incluyen sus scripts, pero en realidad esta tiene una raz en otro lado. Si no tienen el email, y no tienen ni idea como es la url absoluta en donde estn parados, pueden generar un error de php a propsito, y el mismo error les va a decir dnde se encuentran, por ejemplo, si en sus script ponen:

Les va a aparecer el siguiente error:Parse error: syntax error, unexpected T_STRING in /var/www/elwebmaster.com/www/index.php on line 5

Eso quiere decir que nuestra url absoluta es /var/www/elwebmaster.com/www/

63

TALLER DE PHP

Bueno, ya tenemos nuestro archivo, ya conocemos nuestra url absoluta y ya tenemos nuestra carpeta donde queremos mover, lo que vamos a hacer es usar la funcin de php move_uploaded_file(), que va a mover un archivo recin subido a una nueva ubicacin:

Sencillito, no? La clase que viene vamos a ver como recibir imgenes grandotas y convertirlas en imgenes ms pequeas para que se adapten a nuestro sitio. Saludos!

64

TALLER DE PHP

Manipulacin de imgenesHola, bienvenidos nuevamente al Taller de PHP! La clase anterior vimos cmo subir imgenes a nuestro sitio a travs de un formulario, en la clase de hoy lo que vamos a hacer es aprender a manipular esas imgenes para generar una imagen ms pequea, llamada thumbnail. Para poder manipular imgenes vamos a necesitar que nuestro servicio de hosting tenga instalada la libreria LibraryGD, no se preocupen igual ya que la mayora de los servidores de hoy en da la incluyen, incluso si instalaron Xampp en sus computadoras tambin lo tienen.

Generando imgenesAntes que nada guardamos en una variable la direccin absoluta (la que expliqu en la clase anterior) a la imagen de origen, por ejemplo, si tenemos en una variable $imagen con el nombre de la imagen y sabemos dnde se guard, generamos una variable $archivo:$archivo = "/var/www/elwebmaster.com/uploads/$imagen";

Una vez que tenemos el archivo, debemos corroborar que se trate de una imagen, y obtener la extensin, para ver si se trata de un gif, jpg, png, etc.$separo = explode( '.', strtolower($imagen) ); $nombre = $separo[0]; $extension = $separo[1];

Con explode lo que hacemos es convertir en array un string, indicndole por qu patrn queremos separar, en este caso lo separamos por un punto. Con strtolower lo que hacemos es llevar primero a minsculas todo, as cuando generemos nuevas imgenes se generan con nombres todos en minsculas. El array que se genera tiene por nombre $separo y tiene dos ndices 0 y 1, ya que cada imagen slo tiene un nico punto, por lo que separa el string en dos nicamente. Luego de esto armamos un switch para ver qu tipo de extensin tiene el archivo y creamos una nueva imagen segn la extensin que tenga.

65

TALLER DE PHP

switch( $extension ) { case 'gif': $imagen_src = imagecreatefromgif( $archivo ); break; case 'jpg': $imagen_src = imagecreatefromjpeg( $archivo ); break; case 'png': $imagen_src = imagecreatefrompng( $archivo ); break; default: trigger_error(Formato de imagen no soportada!!!, E_USER_ERROR); }

Con imagecreatefrom* lo que hacemos es crear una nueva imagen desde la url absoluta de la imagen que queremos y nos devuelve el identificador a esa nueva imagen creada. Luego, lo que hay que hacer es crear una nueva imagen true color del tamao de la nueva imagen que queremos generar, por ejemplo, una imagen 100px de ancho por 120px de alto.$imagen_dst = @imagecreatetruecolor(100, 120);

Utilizamos el @ antes de la funcin imagecreatetruecolor para evitar que se muestre un mensaje de error si es que no se puede llegar a generar la imagen en true color (ya que depende de la versin de php que tenemos instalado en el servidor). Continuamos generndola normal si es que no se gener.if ( empty($imagen_dst) ) { $imagen_dst = imagecreate(100, 120); }

Luego de esto tenemos que setearle el modo de blending a la imagen (para mejorar la calidad de la imagen que vamos a crear), para ello hacemos lo siguiente:imagealphablending($imagen_dst, false);

Luego, tenemos que copiar la imagen original en el tamao nuevo que queremos obtener, para ello utilizamos:imagecopyresampled ( $imagen_dst , $imagen_src , int $dst_x , int $dst_y , int $src_x , int $src_y , int $dst_w , int $dst_h , int $src_w , int $src_h );

66

TALLER DE PHP

Con esta funcin lo que hacemos es pasarle como parmetros, la imagen blanca que generamos con el tamao deseado (imagen de destino), luego la imagen creada a partir de la original, luego le indicamos qu punto x queremos dibujar en la imagen de destino, en nuestro caso va a ser 0, ya que vamos a reemplazar toda la imagen blanca por la nueva imagen. Luego, qu coordenada y de destino (dst_y), que tambin va a ser 0, a continuacin a partir de que coordenada x del origen vamos a copiar, nuevamente es 0 ya que queremos copiar absolutamente toda la imagen, luego la coordenada y del origen (src_y). Finalmente le pasamos el ancho del destino, y el alto del destino (dst_w y dst_h) que va a ser el total de la imagen blanca generada anteriormente y el ancho del origen y el alto del origen, que tambin va a ser igual al ancho y alto de la imagen original. Esto quedara as:imagecopyresampled($imagen_dst,$imagen_src,0,0,0,0,100,120, imagesx($imagen_src),imagesy($imagen_src));

Ahora generamos un nuevo nombre para la imagen recin generada y en qu lugar la queremos guardar$nueva_ruta = "/var/www/elwebmaster.com/uploads/{$imagen}-th.{$extension}";

Finalmente creamos la imagen definitiva que vamos a usar con imagejpeg y destruimos las imgenes generadas en el proceso para liberar memoria:imagejpeg( $imagen_dst, $nueva_ruta ); imagedestroy( $imagen_src ); imagedestroy( $imagen_dst );

Espero que se haya entendido hasta la prxima clase!

67

TALLER DE PHP

Funciones ms tiles de PHPHola, la clase de hoy vamos a ver algunas funciones muy comunes que ya vienen con php que nos van a resultar muy tiles a la hora de realizar nuestros scripts. Adems veremos las funciones ms usadas para manipular arrays, como array_diff, array_search e in_array. No perdamos ms tiempo y comencemos con nuestra clase de hoy del Taller de PHP!

Time()No s si estn familiarizados con el trmino unixtime, por las dudas se los comento de forma informal, prcticamente es una forma de trabajar con fechas y horas pero con un numero entero. Es un nmero que representa los segundos pasados desde el primero de enero de 1970. Para trabajar calculando diferencias de fecha, ordenar resultados de la base de datos con campos de fechas, etc., es ms prctico, eficiente y liviano trabajar con unixtime en lugar de con la fecha 2008-07-06 17:48:12, ya que no hay que parsear el string con la fecha. La funcin de php time() nos va a devolver la hora unix (unixtime) al momento que la pedimos, por ejemplo, si queremos calcular la hora de la semana pasada para poder traer de la base de datos los ltimos artculos de la semana podemos calcularlo de la siguiente forma:

El nmero que estamos restando luego de time() son los segundos que tiene una semana, es ms fcil y practico poner el clculo de segundos por minuto por minutos por hora por horas del da por das de la semana que poner directamente el resultado, ya que de este modo, a la hora de ver el cdigo de nuestro script lo vamos a entender mejor que si estamos viendo el resultado de esa multiplicacin directamente.

date()Nos devuelve un string con el formato de hora que le pasemos. Por ejemplo si ponemos:$ahora = date(Y-m-d H:i:s);

Nos va a devolver 2008-07-06 18:42:00. Si como segundo parmetro le pasan una hora unix, date va a devolver un string de la hora que le pasaron, por ejemplo:$fecha = date("Y-m-d", 123516512 );

Nos va a devolver el da correspondiente a esa hora.68

TALLER DE PHP

mktime()Sigue con la tnica de Unixtime, esta vez, nos va a devolver un unixtime de la fecha que le pasemos. La sintaxis es la siguiente:mktime (hora, minutos, segundos, mes, dia, ao );

Por ejemplo, combinando con date, podemos tener datos ms completos de un da del pasado o del futuro:echo date("F j, Y", mktime(0, 0, 0, 7, 6, 1977));

Y eso me va a mostrar por ejemplo Julio 6, 1977, algo un poco ms interesante puede ser:echo date("D j \d\e F \d\e Y", mktime(0, 0, 0, 7, 6, 1977));

Y va a mostrar Dom 6 de Julio de 1977 por ejemplo.

Manipulacion de arraysAlgnas de las funciones ms utilizadas y utiles con respecto a arrays son:

array_diffMuestra las diferencias entre un array y otro:$a = array( "hola", "chau", "como" ); $b = array( hola, va, como ); $dif = array_diff( $a, $b ); print_r($dif);

mostrara algo asiArray ( [1] => chau )

array_searchBuscara un valor especifico en un array y devuelve el ndice si lo encuentra, por ejemplo:$a = array( 0 => "Justi", 1 => "Thor", 2 => "Debi" ); $key = array_search(Debi, $a);

La variable $key va a tener valor 2.

69

TALLER DE PHP

in_arrayEs similar a la anterior pero en lugar de devolver el indice de la coincidencia, devuelve true o false. Por ejemplo:if ( in_array( "Justi", $a ) ) { $cuerso = php; }

Maysculas y minsculasstrtolower(): convierte todo el string en minsculas. strtoupper(): pasa todo el string a maysculas. ucfirst(): convierte la primer letra del string en mayscula. ucwords(): convierte cada primer letra de cada palabra en mayscula. Por ejemplo si tenemos un string:$titulo = "TALLER DE PHP - FUNCIONES UTILES";

y queremos modificarlo para que todos los ttulos sean iguales, todos los caracteres en minscula menos la primer letra de la frase, tenemos que pasar primero el string a minsculas y despus hacer que la primer letra sea mayscula.$titulo = ucfirst( strtolower( $titulo ) );

Espero que la clase les haya gustado.

70

TALLER DE PHP

Expresiones Regulares (I)Hola, bienvenidos a otra clase del Taller de PHP de elWebmaster.com. Hoy veremos expresiones regulares, una herramienta muy til a la hora de trabajar con strings muy largos, ya que nos permite buscar un patrn especfico dentro de una cadena de texto. Asimismo, veremos que los operadores pueden ayudarnos haciendo que la expresin sea ms flexible es decir, que se adapte a patrones mucho ms complejos. Empecemos!

Qu son las expresiones regulares?Bsicamente es como puse en el primer prrafo, una expresin regular es una expresin que nos permite encontrar patrones dentro de textos, pero De qu clase de patrones estamos hablando? Por ejemplo las palabras Webmaster, elWebmaster y elWebmaster.com comparten Webmaster, mediante expresiones regulares podemos encontrar qu palabras coinciden con ese patrn para realizar alguna tarea especfica. Es muy comn utilizar expresiones regulares por ejemplo a la hora de verificar que un email sea verdico, ya que todos los correos electrnicos van a contener un @ y un .com en alguna parte de la cadena. Ahora bien, no siempre estamos buscando un patrn exacto como fue el primer ejemplo de Webmaster, hay veces que tenemos que buscar patrones ms difciles como por ejemplo encontrar en una cadena de texto html donde se encuentra una imagen. En este caso ya no es tan sencillo porque sabemos que todas las imgenes si o si van a tener un

En este caso el echo $matches[0] nos va a imprimir def ya que el patrn estaba definido en el resultado, pero si cambiramos el patrn por algo genrico

73

TALLER DE PHP

Ahora en $matches vamos a tener un vector con $matches[0] = info@ y en $matches[1] = info, esto se debe a que primero pone el resultado general, y segundo lo que est dentro de los parntesis (), si hubisemos puestos varios parntesis, tendramos tambin un $matches[2], $matches[3], etc etc. Siempre que quieran ver el contenido de un vector, con sus ndices para saber dnde est el contenido de cada cosa, pueden hacer

Y eso les va a imprimir en pantalla algo asi:array(2) { [0] => string(5) info@ [1] => string(4) info }

De esta forma pueden ir viendo todo el tiempo cual es el contenido de sus vectores.

preg_match_allEsta funcin es similar a preg_match, pero en lugar de terminar en la primer expresin que encuentra, contina volcando en un array todas las coincidencias.preg_match_all ( $patron, $string, $matches)

En este caso, el resultado del var_dump para $matches va a ser:array(2) { [0]=> array(1) { [0]=> string(5) info@ } [1]=> array(1) { [0]=> string(4) info } }

preg_replaceBusca una expresin regular y reemplaza el contenido de esa expresin por otro predefinido.preg_replace( $patron, $reemplazo, $sujeto )

74

TALLER DE PHP

En $patron vamos a poner el o los patrones a buscar, en $reemplazo, lo que queremos poner en el lugar del patrn y $sujeto va a ser el string original en el que queremos buscar el contenido para ser reemplazado. Por ejemplo:

Ahora vamos a ver en pantalla El taller de dreamweaver de Thor es el mejor Eso es todo por ahora, espero que hayan entendido todo el taller hasta este punto, ya que la clase que viene empezaremos con Practica! Como crear nuestro propio blog.

75

TALLER DE PHP

Creando nuestro propio blogHola, bienvenidos al Taller de PHP de elWebmaster.com! El da de hoy veremos la introduccin para crear un blog desde cero. La idea de esta etapa final del curso, es que vean ms o menos cmo se relaciona todo lo que estuvimos viendo hasta el momento. En qu consiste nuestro blog? Bsicamente lo que vamos a hacer es un sistema que muestre noticias, ordenadas por fecha cronolgicamente descendente, a las cuales se les podr dejar comentarios. Comencemos!

Diferentes niveles de accesosPara poder llevar a cabo nuestro blog vamos a necesitar tres niveles diferentes de usuarios, el nivel base va a ser el usuario annimo, o sea aquel usuario que nunca se registr en nuestro sitio, podr leer todo el contenido del mismo pero no podr dejar comentarios. El siguiente nivel es el usuario comn o usuario registrado, que podr dejar comentarios en las noticias. Y por ltimo tenemos el usuario administrador que se va a encargar de publicar noticias y aprobar comentarios de los usuarios. Normalmente en los blogs no hace falta ser un usuario registrado para dejar comentarios, pero va a ser til que aprendan como se puede hacer un sistemita de registro, as que los permisos los incluimos de esta forma para fines prcticos.

Diferentes caractersticas del contenidoEl contenido del sitio va a estar separado por categoras por lo que las noticias no slo se debern mostrar cronolgicamente sino que tambin se tendrn que poder filtrar por categoras.

FrontEnd y BackEnd. Qu son?Esto ms o menos ya lo expliqu en una de las clases anteriores pero lo vuelvo a comentar ya que es til. Por FrontEnd entendemos a lo que ve el usuario annimo o usuario registrado, es la parte frontal o visible del sitio. Por BackEnd nos referimos al panel de control para administrar el sitio. A donde vamos a publicar nuestras noticias, guardar borradores y aprobar comentarios. Bueno, todo eso es ms o menos lo que vamos a ir viendo en las clases siguientes hasta terminar el tallercito, espero que les guste lo que se viene.

76

TALLER DE PHP

Nuestro blog Creacin de la base de datosHola, aqu estoy de nuevo para continuar con nuestro propio blog. En la clase de hoy vamos a ver cmo va a ser la estructura de nuestra base de datos. Bsicamente vamos a tener cuatro tablas. Una de usuarios, otra de noticias, una tercera con las categoras que van a tener las noticias y finalmente una tabla con los comentarios a las noticias.

Estructura de la base de datos de nuestro blog:Tabla: usuariosField idUsuario usuario password email tipo Type int(11) varchar(50) char(32) varchar(50) enum('comun','admin') comun Null Key PRI Default NULL Extra auto_increment

Sintaxis sql para crear la tabla:1. CREATE TABLE `usuarios` ( 2. `idUsuario` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 3. `usuario` VARCHAR( 50 ) NOT NULL , 4. `password` CHAR( 32 ) NOT NULL , 5. `email` VARCHAR( 50 ) NOT NULL , 6. `tipo` ENUM( 'comun', 'admin' ) NOT NULL DEFAULT 'comun' 7. ) ENGINE = MYISAM ;

77

TALLER DE PHP

Hacemos que idUsuario sea la primary key con un autoincrement para que se vaya sumando a medida que se van registrando nuevos usuarios, tambin ponemos que el campo usuario tenga un varchar de 50, ya que no sabemos qu tan largos pueden llegar a ser los nombres de usuarios elegidos por los mismos, lo que s podemos hacer es limitrselo a 50. Por otro lado el campo password va a tener siempre un ancho de 32 caracteres, porque para mayor seguridad vamos a usar una codificacin md5 y los cdigos que genera la misma tienen siempre la misma cantidad de caracteres. El campo email es igual que el del usuario y el de tipo es con un enum, ya que solo vamos a tener dos tipos de usuarios. Por otro lado tenemos la tabla de noticias:

Tabla: noticiasField idNoticia titulo copete cuerpo idUsuario idCategoria fPublicacion fCreacion fModificacion Type int(11) varchar(50) varchar(255) text int(11) int(11) timestamp timestamp timestamp Null Key PRI Default NULL Extra auto_increment

78

TALLER DE PHP

Sintaxis sql para crear la tabla:1. CREATE TABLE `noticias` ( 2. `idNoticia` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 3. `titulo` VARCHAR( 50 ) NOT NULL , 4. `copete` VARCHAR( 255 ) NOT NULL , 5. `cuerpo` TEXT NOT NULL , 6. `idUsuario` INT( 11 ) NOT NULL , 7. `idCategoria` INT( 11 ) NOT NULL , 8. `fPublicacion` TIMESTAMP NOT NULL , 9. `fCreacion` TIMESTAMP NOT NULL , 10.`fModificacion` TIMESTAMP NOT NULL 11.) ENGINE = MYISAM ;

No hay mucho que explicar en esta, tambin tenemos una primary key en idNoticia para identificar a cada una, tenemos una relacin 1 a muchos entre una noticia y un usuario, es decir, una noticia puede tener un slo autor pero un autor puede tener muchas noticias. Lo mismo con las categoras, una noticia puede tener una sola categora pero una categora puede tener muchas noticias. Y tambin tenemos tres campos de fechas, uno para la fecha de publicacin de la noticia, otra para la fecha en que se cre y finalmente cuando se modific. Para la tabla de categoras vamos a tener:

Tabla: categorasField idCategoria valor Type int(11) varchar(50) Null Key PRI Default NULL Extra auto_increment

79

TALLER DE PHP

Sql:1. CREATE TABLE `categorias` ( 2. `idCategoria` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , 3. `valor` VARCHAR( 50 ) NOT NULL 4. ) ENGINE = MYISAM ;

Y finalmente la tabla de comentarios:

Tabla: comentariosField idComentario comentario idUsuario idNoticia estado fCreacion Type int(11) text int(11) int(11) enum('sin validar','apto') timestamp sin validar Null Key Default PRI NULL Extra auto_increment

Sql:CREATE TABLE `comentarios` ( `idComentario` INT( 11 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY , `comentario` VARCHAR( 255 ) NOT NULL , `idUsuario` INT( 11 ) UNSIGNED NOT NULL , `idNoticia` INT( 11 ) UNSIGNED NOT NULL , `estado` ENUM( 'sin validar', 'apto' ) NOT NULL DEFAULT 'sin validar', `fCreacion` TIMESTAMP NOT NULL ) ENGINE = MYISAM ;

80

TALLER DE PHP

En esta tabla tenemos tambin una relacin 1 a muchos con los usuarios, ya que un comentario puede tener un nico usuario pero un usuario puede tener muchos comentarios, lo mismo para las noticias. Por otro lado tenemos un estado, ya que apenas un usuario escribe un comentario el mismo est sin validar por un administrador, en este punto podemos optar por mostrar o no los comentarios no validados (igual todava no estamos en esa disyuntiva) y los mismos aparecern en un listado general para que un admin los apruebe o los borre. Y por ltimo tenemos la fecha de creacin del mismo. Bueno, espero que les haya gustado la forma en que diagramamos nuestro blog, ya a partir de la clase que viene vamos a empezar con la codificacin del mismo.

81

TALLER DE PHP

Nuestro Blog - Registro de usuarioHola! En la clase de hoy vamos a ver cmo hacer para crear un formulario para que se registren nuestros usuarios. Por un lado vamos a tener algunos archivos en la carpeta raz, pero por otro vamos a tener una carpeta llamada "admin" que es donde va a estar nuestro backend. En esta carpeta tambin tendremos dos archivos adicionales que son necesarios antes de arrancar.

Cmo vamos a organizar nuestros archivosLa estructura de archivos por el momento ser: + admin -------------- config.php - conexion.php -------------- index.php - registrar.php El primer archivo que vamos a ver, config.php, es un archivo de configuracin, en el cual guardaremos constantes que vamos a necesitar a lo largo del sitio. El misma va a contener:

admin/config.php1.

El mismo deber estar completo con los datos de su base de datos.

82

TALLER DE PHP

El siguiente archivo, conexion.php, contiene una funcin que devuelve "false" o "el puntero" a la conexin con la base de datos, ya que en todas o casi todas las pginas de nuestro sitio necesitaremos una conexin con la db, es prctico mantenerla dentro de una funcin.

admin/conexion.php1.

Fjense que estamos usando las constantes que agregamos en el archivo config.php, esto es prctico a la hora de tener que cambiar de base de datos, o migrar el sitio, slo tendremos que modificar el archivo de configuracin. Listo, ya tenemos nuestros dos archivos antes de comenzar el proceso de registro. En el archivo index.php tendremos una presentacin por el momento, donde se podr optar por registrarse o ingresar (ms adelante tendremos las noticias, pero todava estamos muy verdes).

83

TALLER DE PHP

index.php1. 2. 3. 4. 5. Blog Personal 6. 7. 8. 9. 10. Blog Personal 11. 12. 13. El registro ha sido exitoso. 14. 15. 16.

  • 17.
  • Iniciar sesin

18. Regstrate gratis 19. 20. 21. 22.

Fjense que en el body hay una sentencia php, es un if preguntando si no est vaca 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, jams ver el mensaje dentro del if.

84

TALLER DE PHP

Bueno, finalmente vamos a nuestro archivo registrar.php, que es el que tiene la lgica de nuestro registro. Primero les muestro todo el cdigo y despus les voy explicando qu es lo que hace cada cosa.1. 2. 3. 4. 5. 6. 7. 8. 9. 10. // si se envio el formulario 11. if ( !empty($_POST['submit']) ) { 12. 13. // definimos las variables 14. if ( !empty($_POST['usuario']) ) 15. if ( !empty($_POST['password']) ) $usuario $password = $_POST['usuario']; = $_POST['password']; // obtengo puntero de conexion con la db $dbConn = conectar(); // archivos necesarios require_once admin/config.php; require_once admin/conexion.php; 196. 197. 198. Blog Personal 199. 200. 201. 202. 203. Blog Personal 204. 205. 206.

  • 207.
  • Iniciar sesin

208. Regstrate gratis 209. 210. 211. Bienvenido - Salir 212. 213.

  • 214.
  • Panel de administracin

215. 216. 217. 218. 219.

"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

124

TALLER DE PHP220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230. 231. 232. 233. 234. 235. 236. 237. 238. 239. 240. 241. 242. 243. 244. 245. 246. 247. Publicado por en Comentarios dijo: