Sunteți pe pagina 1din 56

ESCUELA TCNICA SUPERIOR DE INGENIERA DE TELECOMUNICACIN UNIVERSIDAD POLITCNICA DE CARTAGENA

Proyecto Fin de Carrera

BIBLIOTECA ONLINE

AUTOR: Ana Cristina Bernal Pellicer DIRECTOR: Francesc Burrull i Mestres

Septiembre / 2011

Autor E-mail del autor Director(es) E-mail del director Ttulo del proyecto fin de carrera Resumen

Ana Cristina Bernal Pellicer acris13@msn.com Francesc Burrull i Mestres francesc.burrull@upct.es Biblioteca online

Biblioteca online es un proyecto que consiste en una pgina web (local) editada con los lenguajes de progamacin PHP y HTML mediante el framework Codeigniter (esto es, un programa que contiene una serie de libreras para la creacin de pginas web basado en PHP). Se ha usado un servidor XAMPP, que consiste en Apache/MySQL/PHP, Apache es el servidor HTTP que se va a utilizar, MySQL es la base de datos relacional de la que se dispone para almacenar los libros disponibles y el resto de informacin necesaria, como el registro de usuarios, blog, noticas, etc. y PHP, como ya hemos dicho, el lenguaje de programacin principalmente utilizado. La presentacin se ha realizado mediante hojas de estilo en cascada (CSS) externas, para conseguir una separacin entre la estructura de la pgina y su presentacin.

Titulacin Departamento

Ingeniera de telemtica Tecnologas de la informacin y las comunicaciones Septiembre/2011

Fecha de presentacin

NDICE 1. Introduccin..4 1.1 XAMPP.....................................................................................................4 1.1.1 Caractersticas y requisitos................................................4 1.1.2 Uso....................................................................................4 1.2 Apache..4 1.2.1 Ventajas....5 1.2.2 Mdulos....5 1.2.3 Uso....6 1.2.4 Configuracin7 1.2.5 Licencia....7 1.3 MySQL.7 1.3.1 Lenguajes de programacin..8 1.3.2 Aplicaciones.8 1.3.3 Especificaciones8 1.3.4 Tipos de compilacin del servidor..10 1.3.5 Licencia...11 1.4 PHP.....11 1.4.1 Uso...11 1.4.2 Sintxis12 1.4.3 Tipos de Datos.12 1.4.4 Funciones.13 1.4.5 Objetos.14 1.4.6 Visibilidad.......................................................................15 1.4.7 Compiladores...................................................................15 1.5 Codeigniter..16 1.5.1 Flujo de la aplicacin...16 1.5.2 Modelo- Vista- Controlador17 1.6 HTML..18 1.6.1 Elementos19 1.6.2 Atributos..19 1.6.3 Tipos de Datos.20 1.7 CSS..20 1.7.1 Tipos de Hojas de Estilo..21 1.7.2 Ventajas de Usar Hojas de Estilo22 1.7.3 Sintaxis22 2 Cdigo...23 2.1 Controladores...23 2.2 Vistas...31 2.3 Hojas de estilo.52 3 Referencias........56

1. Introduccin
Biblioteca online es un proyecto que consiste en una pgina web (local) editada con los lenguajes PHP y HTML mediante el framework Codeigniter. Se ha usado un servidor XAMPP, que consiste en Apache/MySQL/PHP y la presentacin se ha realizado mediante hojas de estilo en cascada (CSS). A continuacin se van a exponer todas estas herramientas para una mejor comprensin del funcionamiento de la pgina.

1.1 XAMPP
XAMPP es un servidor independiente de plataforma, software libre, que consiste principalmente en la base de datos MySQL, el servidor Web Apache y los intrpretes para lenguajes de script: PHP y Perl. El nombre proviene del acrnimo de X (para cualquiera de los diferentes sistemas operativos), Apache, MySQL, PHP, Perl. El programa est liberado bajo la licencia GNU y acta como un servidor Web libre, fcil de usar y capaz de interpretar pginas dinmicas. Actualmente XAMPP est disponible para Microsoft Windows, GNU/Linux, Solaris, y MacOS X. 1.1.1 Caractersticas y requisitos XAMPP solamente requiere descargar y ejecutar un archivo zip, tar o exe, con unas pequeas configuraciones en alguno de sus componentes que el servidor Web necesitar. XAMPP se actualiza regularmente para incorporar las ltimas versiones de Apache/MySQL/PHP y Perl. Tambin incluye otros mdulos como OpenSSL y phpMyAdmin. Para instalar XAMPP se requiere solamente una pequea fraccin del tiempo necesario para descargar y configurar los programas por separado. 1.1.2 Uso Oficialmente, los diseadores de XAMPP slo pretendan su uso como una herramienta de desarrollo, para permitir a los diseadores de sitios webs y programadores testear su trabajo en sus propios ordenadores sin ningn acceso a Internet. En la prctica, sin embargo, XAMPP es utilizado actualmente como servidor de sitios Web, ya que, con algunas modificaciones, es generalmente lo suficientemente seguro para serlo. Con el paquete se incluye una herramienta especial para proteger fcilmente las partes ms importantes.

1.2 Apache
El servidor HTTP Apache es un servidor web HTTP de cdigo abierto para plataformas Unix (BSD, GNU/Linux, etc.), Microsoft Windows, Macintosh y otras, que implementa el protocolo HTTP/1.1 y la nocin de sitio virtual. Cuando comenz su desarrollo en 1995 se bas inicialmente en cdigo del popular NCSA HTTP 1.3, pero ms tarde fue reescrito por completo. Su nombre se debe a que Behelendorf quera que tuviese la connotacin de algo que es firme y enrgico pero no agresivo, y la tribu
4

Apache fue la ltima en rendirse al que pronto se convertira en gobierno de EEUU, y en esos momentos la preocupacin de su grupo era que llegasen las empresas y "civilizasen" el paisaje que haban creado los primeros ingenieros de internet. Adems Apache consista solamente en un conjunto de parches a aplicar al servidor de NCSA. Era, en ingls, a patchy server (un servidor "parcheado"). El servidor Apache se desarrolla dentro del proyecto HTTP Server (httpd) de la Apache Software Foundation. Apache presenta entre otras caractersticas altamente configurables, bases de datos de autenticacin y negociado de contenido, pero fue criticado por la falta de una interfaz grfica que ayude en su configuracin. Apache tiene amplia aceptacin en la red: desde 1996, Apache, es el servidor HTTP ms usado. Alcanz su mxima cuota de mercado en 2005 siendo el servidor empleado en el 70% de los sitios web en el mundo, sin embargo ha sufrido un descenso en su cuota de mercado en los ltimos aos. (Estadsticas histricas y de uso diario proporcionadas por Netcraft [3]). La mayora de las vulnerabilidades de la seguridad descubiertas y resueltas tan slo pueden ser aprovechadas por usuarios locales y no remotamente. Sin embargo, algunas se pueden accionar remotamente en ciertas situaciones, o explotar por los usuarios locales malvolos en las disposiciones de recibimiento compartidas que utilizan PHP como mdulo de Apache. 1.2.1 Ventajas
-

Modular Cdigo abierto Multi-plataforma Extensible Popular (fcil de conseguir ayuda/soporte)

1.2.2 Mdulos La arquitectura del servidor Apache es muy modular. El servidor consta de una seccin core y diversos mdulos que aportan mucha de la funcionalidad que podra considerarse bsica para un servidor web. Algunos de estos mdulos son:
-

mod_ssl - Comunicaciones Seguras va TLS. mod_rewrite - reescritura de direcciones (generalmente utilizado para transformar pginas dinmicas como php en pginas estticas html para as engaar a los navegantes o a los motores de bsqueda en cuanto a cmo fueron desarrolladas estas pginas). mod_dav - Soporte del protocolo WebDAV (RFC 2518). mod_deflate - Compresin transparente con el algoritmo deflate del contenido enviado al cliente.
5

mod_auth_ldap - Permite autentificar usuarios contra un servidor LDAP. mod_proxy_ajp - Conector para enlazar con el servidor Jakarta Tomcat de pginas dinmicas en Java (servlets y JSP).

El servidor de base puede ser extendido con la inclusin de mdulos externos entre los cuales se encuentran:
-

mod_cband - Control de trfico y limitador de ancho de banda. mod_perl - Pginas dinmicas en Perl. mod_php - Pginas dinmicas en PHP. mod_python - Pginas dinmicas en Python. mod_rexx - Pginas dinmicas en REXX y Object REXX. mod_ruby- Pginas dinmicas en Ruby. mod_aspdotnet - Pginas dinmicas en .NET de Microsoft (Mdulo retirado). mod_mono - Pginas dinmicas en Mono mod_security - Filtrado a nivel de aplicacin, para seguridad.

1.2.3 Uso Apache es usado principalmente para enviar pginas web estticas y dinmicas en la World Wide Web. Muchas aplicaciones web estn diseadas asumiendo como ambiente de implantacin a Apache, o que utilizarn caractersticas propias de este servidor web. Apache es el componente de servidor web en la popular plataforma de aplicaciones LAMP, junto a MySQL y los lenguajes de programacin PHP/Perl/Python (y ahora tambin Ruby). Este servidor web es redistribuido como parte de varios paquetes propietarios de software, incluyendo la base de datos Oracle y el IBM WebSphere application server. Mac OS X integra apache como parte de su propio servidor web y como soporte de su servidor de aplicaciones WebObjects. Es soportado de alguna manera por Borland en las herramientas de desarrollo Kylix y Delphi. Apache es incluido con Novell NetWare 6.5, donde es el servidor web por defecto, y en muchas distribuciones Linux. Apache es usado para muchas otras tareas donde el contenido necesita ser puesto a disposicin en una forma segura y confiable. Un ejemplo es al momento de compartir archivos desde una computadora personal hacia Internet. Un usuario que tiene Apache instalado en su escritorio puede colocar arbitrariamente archivos en la raz de documentos de Apache, desde donde pueden ser compartidos. Los programadores de aplicaciones web a veces utilizan una versin local de Apache con el fin de previsualizar y probar cdigo mientras ste es desarrollado. Microsoft Internet Information Services (IIS) es el principal competidor de Apache, as como Sun Java System Web Server de Sun Microsystems y un anfitrin de otras aplicaciones como Zeus Web Server. Algunos de los ms grandes sitios web del
6

mundo estn ejecutndose sobre Apache, como la capa frontal (front end) del motor de bsqueda Google, que est basado en una versin modificada de Apache, denominada Google Web Server (GWS). 1.2.4 Configuracin La mayor parte de la configuracin se realiza en el fichero apache2.conf o httpd.conf, segn el sistema donde est corriendo. Cualquier cambio en este archivo requiere reiniciar el servidor, o forzar la lectura de los archivos de configuracin nuevamente. 1.2.5 Licencia La Licencia Apache permite la distribucin de derivados de cdigo abierto y cerrado a partir de su cdigo fuente original. La Free Software Foundation no considera a la Licencia Apache como compatible con la versin 2 de la GNU General Public License (GPL), en la cual el software licenciado bajo la Apache License no puede ser integrado con software distribuido bajo la GPL: Este es software libre pero es incompatible con la GPL. La Apache Software License es incompatible con la GPL porque tiene un requerimiento especfico que no est incluido en la GPL: tiene ciertos casos de terminacin de patentes que la GPL no requiere. No consideramos que dichos casos de terminacin de patentes son inherentemente una mala idea, pero a pesar de ello son incompatibles con la GNU GPL. [4] Sin embargo, la versin 3 de la GPL incluye una provisin (Seccin 7e) que le permite ser compatible con licencias que tienen clusulas de represalia de patentes, incluyendo a la Licencia Apache. El nombre Apache es una marca registrada y puede ser slo utilizada con el permiso expreso del dueo de la marca. [5].

1.3 MySQL
MySQL es un sistema de gestin de bases de datos relacional, multihilo y multiusuario con ms de seis millones de instalaciones. MySQL AB (desde Enero de 2008 una subsidiaria de Sun Microsystems y sta a su vez de Oracle Corporation desde Abril de 2009) desarrolla MySQL como software libre en un esquema de licenciamiento dual.

Por un lado se ofrece bajo la GNU GPL para cualquier uso compatible con esta licencia, pero para aquellas empresas que quieran incorporarlo en productos privativos deben comprar a la empresa una licencia especfica que les permita este uso. Est desarrollado en su mayor parte en ANSI C. Al contrario de proyectos como Apache, donde el software es desarrollado por una comunidad pblica y los derechos de autor del cdigo estn en poder del autor individual, MySQL es patrocinado por una empresa privada, que posee el copyright de la mayor parte del cdigo.
7

Esto es lo que posibilita el esquema de licenciamiento anteriormente mencionado. Adems de la venta de licencias privativas, la compaa ofrece soporte y servicios. Para sus operaciones contratan trabajadores alrededor del mundo que colaboran va Internet. 1.3.1 Lenguajes de Programacin Existen varias APIs que permiten, a aplicaciones escritas en diversos lenguajes de programacin, acceder a las bases de datos MySQL, incluyendo C, C++, C#, Pascal, Delphi, Eiffer, Java, Perl, PHP, Python, REALbasic(Mac y Linux)Cada uno de estos utiliza una API especfica. Tambin existe una interfaz ODBC, llamado MyODBC que permite a cualquier lenguaje de programacin que soporte ODBC comunicarse con las bases de datos MySQL. Tambin se puede acceder desde el sistema SAP, lenguaje ABAP. 1.3.2 Aplicaciones MySQL es muy utilizado en aplicaciones web, en plataformas (Linux/WindowsApache-MySQL-PHP/Perl/Python). Su popularidad como aplicacin web est muy ligada a PHP, que a menudo aparece en combinacin con MySQL. MySQL es una base de datos muy rpida en la lectura cuando utiliza el motor no transaccional MyISAM, pero puede provocar problemas en entornos de alta concurrencia en la modificacin. En aplicaciones web hay baja concurrencia en modificacin de datos y en cambio el entorno es intensivo en lectura, lo que hace a MySQL ideal para estas aplicaciones. 1.3.3 Especificaciones MySQL funciona sobre mltiples plataformas, incluyendo: AIX BSD FreeBSD HP-UX GNU/Linux Mac OS X Net BSD Novell Netware OpenBSD OS/2 Warp QNX SGI IRIX Solaris SunOS SCO OpenServer SCO UnixWare Tru64 eBD Windows 95, 98, NT, 2000, XP, Vista, 7 y Windows Server 2000, 2003 y 2008 Open VMS

Caractersticas de la versin 5.0.22: Un amplio subconjunto de ANSI SQL 99, y varias extensiones. Soporte a multiplataforma. Procedimientos almacenados. Disparadores (triggers).
8

Vistas actualizables. Soporte a VARCHAR. INFORMATION_SCHEMA. Modo Strict. Soporte X/Open XA de transacciones distribuidas; transaccin en dos fases como parte de esto, utilizando el motor InnoDB de Oracle. Motores de almacenamiento independientes (MyISAM para lecturas rpidas, InnoDB para transacciones e integridad referencial). Transacciones con los motores de almacenamiento InnoDB, BDB Y Cluster; puntos de recuperacin (savepoints) con InnoDB. Soporte para SSL. Query caching. Sub-SELECTs (o SELECTs anidados). Rplica con un maestro por esclavo, varios esclavos por maestro, sin soporte automtico para mltiples maestros por esclavo. Indexing y bsqueda de campos de texto completos usando el motor de almacenamiento MyISAM. Embedded database library. Soporte completo para Unicode. Conforme a las reglas ACID usando los motores InnoDB, BDB y Cluster. Shared-nothing clustering a travs de MySQL Cluster.

Caractersticas adicionales:
-

Usa GNU Automake, Autoconf, y Libtool para portabilidad. Uso de multihilos mediante hilos del kernel. Usa tablas en disco b-tree para bsquedas rpidas con compresin de ndice. Tablas hash en memoria temporales. El cdigo MySQL se prueba con Purify (un detector de memoria perdida comercial) as como con Valgrind, una herramienta GPL. Completo soporte para operadores y funciones en clusulas select y where. Completo soporte para clusulas group by y order by, soporte de funciones de agrupacin. Seguridad: ofrece un sistema de contraseas y privilegios seguro mediante verificacin basada en el host y el trfico de contraseas est cifrado al conectarse a un servidor. Soporta gran cantidad de datos. MySQL Server tiene bases de datos de hasta 50 millones de registros. Se permiten hasta 64 ndices por tabla (32 antes de MySQL 4.1.2). Cada ndice puede consistir desde 1 hasta 16 columnas o partes de columnas. El mximo ancho de lmite son 1000 bytes (500 antes de MySQL 4.1.2). Los clientes se conectan al servidor MySQL usando sockets TCP/IP en cualquier plataforma. En sistemas Windows se pueden conectar usando named pipes y en sistemas Unix usando ficheros socket Unix.
9

En MySQL 5.0, los clientes y servidores Windows se pueden conectar usando memoria compartida. MySQL contiene su propio paquete de pruebas de rendimiento proporcionado con el cdigo fuente de la distribucin de MySQL.

Caractersticas (versin 4.0): Inicialmente, MySQL careca de elementos considerados esenciales en las bases de datos relacionales, tales como integridad referencial y transacciones. A pesar de ello, atrajo a los desarrolladores de pginas web con contenido dinmico, justamente por su simplicidad. Poco a poco los elementos de los que careca MySQL estn siendo incorporados tanto por desarrollos internos, como por desarrolladores de software libre. Entre las caractersticas disponibles en las ltimas versiones se puede destacar:
-

Amplio subconjunto del lenguaje SQL. Algunas extensiones son incluidas igualmente. Disponibilidad en gran cantidad de plataformas y sistemas. Diferentes opciones de almacenamiento segn si se desea velocidad en las operaciones o el mayor nmero de operaciones disponibles. Transacciones y claves forneas. Conectividad segura. Replicacin. Bsqueda e indexacin de campos de texto.

MySQL es un sistema de administracin relacional de bases de datos. Una base de datos relacional archiva datos en tablas separadas en vez de colocar todos los datos en un gran archivo. Esto permite velocidad y flexibilidad. Las tablas estn conectadas por relaciones definidas que hacen posible combinar datos de diferentes tablas sobre pedido. Caractersticas distintivas: Las siguientes caractersticas son implementadas nicamente por MySQL:
-

Mltiples motores de almacenamiento (MyISAM, Merge, InnoDB, BDB, Memory/heap, MySQL Cluster, Federated, Archive, CSV, Blackhole y Example en 5.x), permitiendo al usuario escoger la que sea ms adecuada para cada tabla de la base de datos. Agrupacin de transacciones, reuniendo mltiples transacciones de varias conexiones para incrementar el nmero de transacciones por segundo.

1.3.4 Tipos de Compilacin del Servidor Hay tres tipos de compilacin del servidor MySQL:
-

Estndar: Los binarios estndar de MySQL son los recomendados para la mayora de los usuarios, e incluyen el motor de almacenamiento InnoDB.

10

Max (No se trata de MaxDB, que es una cooperacin con SAP): Los binarios incluyen caractersticas adicionales que no han sido lo bastante probadas o que normalmente no son necesarias. MySQL-Debug: Son binarios que han sido compilados con informacin de depuracin extra. No debe ser usada en sistemas en produccin porque el cdigo de depuracin puede reducir el rendimiento.

1.3.5 Licencia MySQL es software de fuente abierta. Fuente abierta significa que es posible para cualquier persona usarlo y modificarlo. Cualquier persona puede bajar el cdigo fuente de MySQL y usarlo sin pagar. Cualquier interesado puede estudiar el cdigo fuente y ajustarlo a sus necesidades. MySQL usa el GPL (GNU General Public License) para definir qu puede hacer y qu no puede hacer con el software en diferentes situaciones. La licencia GNU GPL de MySQL obliga a que la distribucin de cualquier producto derivado (aplicacin) se haga bajo esa misma licencia. Si un desarrollador desea incorporar MySQL en su producto pero desea distribuirlo bajo otra licencia que no sea la GNU GPL, puede adquirir una licencia comercial de MySQL que le permite hacer justamente eso.

1.4 PHP
PHP (acrnimo de PHP: Hypertext Preprocessor) es un lenguaje de cdigo abierto muy popular especialmente adecuado para desarrollo web y que puede ser incrustado en HTML. 1.4.1 Uso PHP puede ser desplegado en la mayora de los servidores web y en casi todos los sistemas operativos y plataformas sin costo alguno. El lenguaje PHP se encuentra instalado en ms de 20 millones de sitios web y en un milln de servidores, el nmero de sitios en PHP ha compartido algo de su preponderante sitio con otros nuevos lenguajes no tan poderosos desde agosto de 2005. Es tambin el mdulo Apache ms popular entre los ordenadores que utilizan Apache como servidor web. El gran parecido que posee PHP con los lenguajes ms comunes de programacin estructurada, como C y Perl, permiten a la mayora de los programadores crear aplicaciones complejas con una curva de aprendizaje muy corta. Tambin les permite involucrarse con aplicaciones de contenido dinmico sin tener que aprender todo un nuevo grupo de funciones. Aunque todo en su diseo est orientado a facilitar la creacin de sitios webs, es posible crear aplicaciones con una interfaz grfica para el usuario, utilizando la extensin PHP-Qt o PHP-GTK. Tambin puede ser usado desde la lnea de rdenes, de la misma manera como Perl o Python pueden hacerlo; a esta versin de PHP se la llama PHP-CLI (Command Line Interface).
11

Cuando el cliente hace una peticin al servidor para que le enve una pgina web, el servidor ejecuta el intrprete de PHP. ste procesa el script solicitado que generar el contenido de manera dinmica (por ejemplo obteniendo informacin de una base de datos). El resultado es enviado por el intrprete al servidor, quien a su vez se lo enva al cliente. Mediante extensiones es tambin posible la generacin de archivos PDF, Flash, as como imgenes en diferentes formatos. Permite la conexin a diferentes tipos de servidores de bases de datos tales como MySQL, PostgreSQL, Oracle, ODBC, DB2, Microsoft SQL Server, Firebird y SQLite. 1.4.2 Sintaxis El intrprete de PHP slo ejecuta cdigo PHP dentro de sus delimitadores. Nada fuera de sus delimitadores es procesado por PHP. Los delimitadores ms comunes son: <?php para abrir y ?> para cerrar las secciones PHP. Tambin se puede usar <script language="php"> y </ script> como delimitadores, o sus formas abreviadas. Aunque al usar delimitadores simplificados, hacen que los archivos de script sean menos portables, ya que el propsito de todos estos delimitadores es separar el cdigo PHP del cdigo no PHP, incluyendo HTML. Las variables van precedidas de un smbolo de dlar y los tipos no necesitan ser especificados de antemano. A diferencia de los nombres de funciones y de clase, los nombres de variables distinguen entre maysculas y minsculas. PHP no tiene en cuenta los saltos de lnea y los espacios en blanco (excepto cuando van dentro de una cadena), y las declaraciones se terminan con un punto y coma. PHP tiene tres tipos de sintaxis para los comentarios: / * * / en este caso el comentario ira dentro de las barras; / /, as como #, se utilizan para comentar una lnea. En trminos de palabras clave y sintaxis del lenguaje, PHP es similar a los lenguajes de alto nivel que siguen la sintaxis del lenguaje C: if para condiciones, for y while para bucles o la funcin return son similitudes con la sintaxis de los lenguajes como C, C + +, Java y Perl. 1.4.3 Tipos de Datos PHP soporta distintos tipos de datos, que no los tiene que impostar el programador, sino que son asumidos directamente por el motor, estos datos pueden ser: Cuatro tipos escalares: - Boolean - Integer - Float (nmero de punto-flotante, tambin conocido como 'double')
12

- String Dos tipos compuestos: - array - Object Y finalmente dos tipos especiales: - Resource - NULL Tambin algunos pseudo-tipos por razones de legibilidad: - mixed - Number Si quisiera forzar la conversin de una variable a cierto tipo, se puede moldear la variable, o usar la funcin settype() sobre ella. 1.4.4 Funciones Una de las herramientas ms importantes en cualquier lenguaje de programacin son las funciones. Una funcin consiste en un conjunto de rutinas y acciones que a lo largo del script van a ser ejecutadas multitud de veces agrupados en una funcin y desde cualquier punto del script puede ser llamada y ejecutada. A su vez, esta funcin puede recibir parmetros externos de los cuales dependa el resultado de una funcin. Las funciones deben ser colocadas siempre antes de realizar la llamada a esa funcin. La sintaxis de una funcin es la siguiente:
function nombre(parmetros){ instrucciones de la funcin}
Cdigo 1. Funcin nombre

Para llamar a la funcin sera de la siguiente forma: nombre(parmetros). PHP no distingue entre maysculas y minsculas al nombrar las funciones. Los parntesis permiten pasar valores a las funciones y son siempre necesarios, aunque no vayas a pasar valor alguno. Un ejemplo para entender el uso de funciones es el siguiente: Crearemos una funcin que realice la suma de dos nmeros y muestre el resultado
function sumar($sumando1,$sumando2){ $ suma=$sumando1+$sumando2 echo $sumando1."+".$sumando2."=".$suma; }

13

sumar(5,6)
Cdigo 2. Funcin sumar

Un hecho relevante que cabe destacar es que las variables que declaremos dentro de la funcin solo existirn o tendrn dicho valor dentro de la funcin. PHP consume ms recursos (y por tanto es ligeramente ms lento) llamando y ejecutando una funcin que ejecutando cdigo que encuentra en lnea, embebido en el script. Por eso no tiene sentido usar funciones salvo que efectivamente se vaya a utilizar esa porcin de cdigo varias veces. 1.4.5 Objetos La programacin orientada a objetos (OO) est pensada para construir objetos que contienen atributos y operaciones de manera que cubran nuestras necesidades. Los atributos son variables que contienen informacin del estado de un objeto. Y las operaciones tambin conocidas como mtodos, funciones y acciones realizan modificaciones del propio objeto o realizan alguna accin externa a ste. Una de las principales ventajas de la programacin OO es el concepto de encapsulacin, conocido tambin como proteccin de datos, mediante el cual solo se pueden modificar los datos de un objeto accediendo a travs de sus mtodos u operaciones (interfaz del objeto). Nunca se pueden modificar directamente desde la aplicacin principal. Podemos crear clases, atributos y operaciones en PHP, La estructura mnima de una clase es la siguiente:
class NombreClase { }
Cdigo 3. Clase NombreClase

Podemos crear mtodos declarando funciones dentro de la definicin de la clase, el siguiente cdigo crea una clase llamada NombreClase con dos operaciones que no hacen nada. A metodo1 no le pasamos ningn parmetro y a metodo2 le pasamos dos parmetros.
class NombreClase { function metodo1() { } function metodo2($param1, $param2) { } }
Cdigo 4. Clase NombreClase con mtodos

14

1.4.6 Visibilidad La visibilidad de una propiedad o mtodo se puede definir anteponiendo una de las palabras claves public, protected o private en la declaracin. Miembros de clases declarados como public pueden ser accedidos de cualquier lado. Miembros declarados como protected, slo de la clase misma, por herencia y clases parent. Aquellos definidos como private, nicamente de la clase que los defini. Visibilidad de Propiedades: Las propiedades de clases deben ser definidas como public, private, o protected. Visibilidad de Mtodos: Los mtodos de clases pueden ser definidos como public, private, o protected. Aquellos declarados sin ninguna palabra clave de visibilidad explcita sern definidos como public. Visibilidad desde otros Objetos: Los objetos del mismo tipo tendrn acceso a los miembros private y protected entre ellos aunque no sean de la misma instancia. Esto es porque los detalles especficos de implementacin ya se conocen cuando se encuentra dentro de estos objetos. 1.4.7 Compiladores El lenguaje PHP era originalmente implementado usando un intrprete PHP. Ahora existen algunos compiladores, que desacoplan el lenguaje PHP del intrprete. Las ventajas de la compilacin incluyen no solo una mayor velocidad de ejecucin sino tambin una mejora en la interoperabilidad con el cdigo escrito en otros lenguajes. Actualmente existen los siguientes compiladores: Phc Roadsend Raven Phalanger Caucho Resin/Quercus HipHop php-to-scala phc-win

Tambin existen Embebedores, que pueden empaquetar scrips PHP y otros archives en un ejecutable de Windows, pero no proporcionan ninguno de los beneficios de la compilacin a nivel de lenguaje. Algunos ejemplos pueden ser: Bambalam PHP EXE Compiler/Embedder ExeOutput for PHP

15

1.5 CODEIGNITER
Probablemente ya sepamos que un framework es un programa para desarrollar otros programas, CodeIgniter, por tanto, es un programa o aplicacin web desarrollada en PHP para la creacin de cualquier tipo de aplicacin web bajo PHP. Es un producto de cdigo libre, libre de uso para cualquier aplicacin. Como cualquier otro framework, Codeigniter contiene una serie de libreras que sirven para el desarrollo de aplicaciones web y adems propone una manera de desarrollarlas que debemos seguir para obtener provecho de la aplicacin. Esto es, marca una manera especfica de codificar las pginas web y clasificar sus diferentes scripts, que sirve para que el cdigo est organizado y sea ms fcil de crear y mantener. CodeIgniter implementa el proceso de desarrollo llamado Model-View-Controller (MVC, modelo-vista-controlador), que es un estndar de programacin de aplicaciones, utilizado tanto para hacer sitios web como programas tradicionales. Aunque las clases de vista y el controlador son una parte necesaria del desarrollo en CodeIgniter, los modelos son totalmente opcionales y se necesitan raramente. 1.5.1 Flujo de la Aplicacin En CodeIgniter existe un procedimiento para atender una solicitud de pgina del cliente. Este proceso se realiza internamente por el propio CodeIgniter y de manera transparente para nosotros. Durante el proceso participan varios mdulos como el enrutamiento de la solicitud, la cach interna, etc.

Figura 1. Flujo de aplicacin de codeigniter

En resumen, el flujo de aplicacin que implementa CodeIgniter, sigue los siguientes puntos: 1. Toda solicitud de una pgina a partir de CodeIgniter comienza en un index.php que hay en la raz del framework. 2. Luego se realiza un filtrado de la URL para saber cul es el elemento que tiene que procesar esta pgina. 3. Si la pgina se haba generado antes y est en la cach de CodeIgniter, se devuelve el archivo de la cach ya generado, con lo que se ahorra procesamientos repetidos. La cach se puede configurar y si lo deseamos, incluso deshabilitar. 4. Antes de continuar con el proceso se realiza un tratamiento de seguridad sobre la entrada que tengamos, tanto de la informacin que haya en la URL como de la informacin que haya en un posible POST, si lo hemos configurado as.
16

5. El controlador adecuado realiza el procesamiento de la solicitud. CodeIgniter decide el controlador que debe procesar la solicitud en funcin de la URL solicitada. 6. El controlador comunica con una serie de mdulos, los que necesite, para producir la pgina. 7. A travs de las vistas adecuadas, el controlador genera la pgina, tal cual se tiene que enviar al navegador. 8. Si la pgina no estaba en la cach, se introduce, para que las futuras solicitudes de esta pgina sean ms rpidas. Algunos de estos mdulos, como la cach o el enrutamiento, funcionan de manera transparente para nosotros. Algunos otros, como los controladores, modelos y vistas, los tenemos que programar por nuestra cuenta y localizan cada una de las partes de nuestro programa que, al estar separadas nos ayudan a organizar tambin nuestro cdigo. Tambin tenemos a nuestra disposicin diversas libreras, ayudantes (helpers) y plugins ya escritos en CodeIgniter con numerosas clases y funciones muy tiles para el desarrollo de aplicaciones web. 1.5.2 Modelo - Vista Controlador El Modelo, Vista, Controlador es tpicamente utilizado para la creacin de aplicaciones web y no slo CodeIgniter lo implementa, sino tambin otra serie de frameworks de desarrollo web, en PHP u otros lenguajes. Es interesante porque separa en varios grupos las complejidades de las distintas partes que componen una pgina web, como la vista y la lgica, as como el acceso a la base de datos. Modelo: Todo el cdigo que tiene que ver con el acceso a base de datos. En el modelo mantendremos encapsulada la complejidad de nuestra base de datos y simplemente crearemos funciones para recibir, insertar, actualizar o borrar informacin de nuestras tablas. Al mantenerse todas las llamadas a la base de datos en un mismo cdigo, desde otras partes del programa podremos invocar las funciones que necesitemos del modelo y ste se encargar de procesarlas. En el modelo nos podrn preocupar cosas como el tipo de base de datos con la que trabajamos, o las tablas y sus relaciones, pero desde las otras partes del programa simplemente llamaremos a las funciones del modelo sin importarnos qu tiene que hacer ste para conseguir realizar las acciones invocadas. Vista: La vista codifica y mantiene la presentacin final de nuestra aplicacin de cara al usuario. Es decir, en la vista colocaremos todo el cdigo HTML, CSS, Javascript, etc. que se tiene que generar para producir la pgina tal cual queremos que la vea el usuario. En la prctica la vista no slo sirve para producir pginas web, sino tambin cualquier otra salida que queramos enviar al usuario, en formatos o lenguajes distintos, como pueden ser feeds RSS, archivos JSON, XML, etc. Controlador: El controlador podramos decir que es la parte ms importante, porque hace de enlace entre el modelo, la vista y cualquier otro recurso que se tenga que procesar en el servidor para generar la pgina web. En resumen, en el controlador guardamos la lgica de nuestras pginas y realizamos todas las acciones que sean necesarias para generarlas, ayudados del modelo o la vista.

17

Durante el desarrollo con CodeIgniter es recomendable seguir las normas del diseo Modelo - Vista - Controlador (MVC), pero realmente el framework es bastante flexible y permite que, si lo deseamos, no sigamos el desarrollo atendiendo a dicha arquitectura. En este caso, podramos tener simplemente controladores y dentro de ellos realizar todas las acciones de acceso a la base de datos directamente, sin hacer llamadas al modelo, o escribir texto en la salida sin utilizar las vistas. En el caso que no utilicemos los modelos, no ocurrir ningn efecto negativo en el desempeo del framework, pero en el caso de las vistas, si no las utilizamos y escribimos salida directamente desde el controlador, como por ejemplo con sentencias echo de PHP en el cdigo de los controladores, perderemos algunas de las ventajas que CodeIgniter realiza por nosotros para procesar la salida antes de enviarla al usuario.

Figura 2. Concepto de modelo-vista-controlado. La lnea continua representa una asociacin directa, la discontinua representa una asociacin indirecta (por ejemplo a travs de un observador.

1.6 HTML
HTML, siglas de HyperText Markup Language (lenguaje de marcado de hipertexto), es el lenguaje de marcado predominante para la elaboracin de pginas web. Es usado para describir la estructura y el contenido en forma de texto, as como para complementar el texto con objetos tales como imgenes. HTML se escribe en forma de etiquetas, rodeadas por corchetes angulares (<,>). HTML tambin puede describir, hasta un cierto punto, la apariencia de un documento, y puede incluir un script (por ejemplo JavaScript), el cual puede afectar el comportamiento de navegadores web y otros procesadores de HTML. HTML tambin es usado para referirse al contenido del tipo de MIME text/html o todava ms ampliamente como un trmino genrico para el HTML, ya sea en forma descendida del XML (como XHTML 1.0 y posteriores) o en forma descendida directamente de SGML (como HTML 4.01 y anteriores). 1.6.1 Elementos Los elementos son la estructura bsica de HTML. Los elementos tienen dos propiedades bsicas: atributos y contenido. Cada atributo y contenido tiene ciertas restricciones para que se considere vlido al documento HTML. Un elemento generalmente tiene una etiqueta de inicio y una etiqueta de cierre, por ejemplo
18

<nombre> y </nombre>. Los atributos del elemento estn contenidos en la etiqueta de inicio y el contenido est ubicado entre las dos etiquetas, por ejemplo <nombre atributo="valor"> Contenido </nombre>. Algunos elementos, tales como <br>, no tienen contenido ni llevan una etiqueta de cierre. El marcado estructural describe el propsito del texto. Por ejemplo, <h2>Blog</h2> establece Blog como un encabezamiento de segundo nivel. El marcado estructural no define cmo se ver el elemento, pero la mayora de los navegadores web han estandarizado el formato de los elementos. Un formato especfico puede ser aplicado al texto por medio de hojas de estilo en cascada, que se explicarn ms adelante. El marcado presentacional describe la apariencia del texto, sin importar su funcin. Por ejemplo, <b>negrita</b> indica que los navegadores web visuales deben mostrar el texto en negrita, pero no indica qu deben hacer los navegadores web que muestran el contenido de otra manera (por ejemplo, los que leen el texto en voz alta). En el caso de <b>negrita</b> e <i>itlica</i>, existen elementos que se ven de la misma manera pero tienen una naturaleza ms semntica: <strong> nfasis fuerte </strong> y <em>nfasis</em>. Es fcil ver cmo un lector de pantalla debera interpretar estos dos elementos. Sin embargo, son equivalentes a sus correspondientes elementos presentacionales: un lector de pantalla no debera decir ms fuerte el nombre de un libro, aunque ste est en itlicas en una pantalla. La mayora del marcado presentacional ha sido desechada con HTML 4.0, en favor de hojas de estilo en cascada. El marcado hipertextual se utiliza para enlazar partes del documento con otros documentos o con otras partes del mismo documento. Para crear un enlace es necesario utilizar la etiqueta de ancla <a> junto con el atributo href, que establecer la direccin URL a la que apunta el enlace. Por ejemplo, un enlace a la Wikipedia sera de la forma <a href=es.wikipedia.org>Wikipedia</a>. Tambin se pueden crear enlaces sobre otros objetos, tales como imgenes <a href=enlace><img src=imagen /> </a>. 1.6.2 Atributos La mayora de los atributos de un elemento son pares nombre-valor, separados por un signo de igual = y escritos en la etiqueta de comienzo de un elemento, despus del nombre de ste. El valor puede estar rodeado por comillas dobles o simples, aunque ciertos tipos de valores pueden estar sin comillas en HTML (pero no en XHTML). De todas maneras, dejar los valores sin comillas es considerado poco seguro. En contraste con los pares nombre-elemento, hay algunos atributos que afectan al elemento simplemente por su presencia (tal como el atributo ismap para el elemento img). 1.6.3 Tipos de datos HTML dispone de distintos tipos bsicos de datos que pueden aparecer como contenido de un elemento o valor de un atributo, como: cadenas de texto, URLs,
19

colores, nmeros, longitudes, tipos de contenido, cdigos de idioma, fechas y horas, hojas de estilo

1.7 CSS
El nombre hojas de estilo en cascada viene del ingls Cascading Style Sheets, del que toma sus siglas. CSS es un lenguaje usado para definir la presentacin de un documento estructurado escrito en HTML o XML (y por extensin en XHTML). El W3C (World Wide Web Consortium) es el encargado de formular la especificacin de las hojas de estilo que servirn de estndar para los agentes de usuario o navegadores. La idea que se encuentra detrs del desarrollo de CSS es separar la estructura de un documento de su presentacin. Por ejemplo, el elemento de HTML <h1> indica que un bloque de texto es un encabezamiento y que es ms importante que un bloque etiquetado como <H2>. Versiones ms antiguas de HTML permitan atributos extra dentro de la etiqueta abierta para darle formato (como el color o el tamao de fuente). No obstante, cada etiqueta <H1> deba disponer de la informacin si se deseaba un diseo consistente para una pgina y, adems, una persona que lea esa pgina con un navegador perda totalmente el control sobre la visualizacin del texto. Cuando se utiliza CSS, la etiqueta <H1> no debera proporcionar informacin sobre cmo ser visualizado, solamente marca la estructura del documento. La informacin de estilo, separada en una hoja de estilo, especfica cmo se ha de mostrar <H1>: color, fuente, alineacin del texto, tamao y otras caractersticas no visuales, como definir el volumen de un sintetizador de voz, por ejemplo. La informacin de estilo puede ser adjuntada como un documento separado o en el mismo documento HTML. En este ltimo caso podran definirse estilos generales en la cabecera del documento o en cada etiqueta particular mediante el atributo "style". 1.7.1 Tipos de Hojas de Estilo CSS proporciona tres caminos diferentes para aplicar las reglas de estilo a una pgina Web: Una hoja de estilo externa, es una hoja de estilo que est almacenada en un archivo diferente al archivo donde se almacena el cdigo HTML de la pgina Web. sta es la manera de programar ms potente, porque separa completamente las reglas de formateo para la pgina HTML de la estructura bsica de la pgina.
-

Una hoja de estilo interna, que es una hoja de estilo que est incrustada dentro de un documento HTML. (Va a la derecha dentro del elemento <head>.) De esta manera se obtiene el beneficio de separar la informacin del estilo del cdigo HTML propiamente dicho. Se puede optar por copiar la hoja de estilo incrustada de una pgina
-

20

a otra (esta posibilidad es difcil de ejecutar si se desea para guardar las copias sincronizadas). En general, la nica vez que se usa una hoja de estilo interna, es cuando se quiere proporcionar alguna caracterstica a una pgina Web en un simple fichero, por ejemplo, si se est enviando algo a la pgina Web. Un estilo en lnea (inline) es un mtodo para insertar el lenguaje de estilo de pgina directamente dentro de una etiqueta HTML. Esta manera de proceder no es totalmente adecuada. El incrustar la descripcin del formateo dentro del documento de la pgina Web, a nivel de cdigo, se convierte en una manera larga, tediosa y poco elegante de resolver el problema de la programacin de la pgina. Este modo de trabajo se podra usar de manera ocasional si se pretende aplicar un formateo con prisa, al vuelo. No es todo lo claro o estructurado que debera ser, pero funciona. ste es el mtodo recomendado para maquetar correos electrnicos en HTML.
-

1.7.2 Ventajas de Usar las Hojas de Estilo Las ventajas de utilizar CSS (u otro lenguaje de estilo) son:
-

Control centralizado de la presentacin de un sitio web completo con lo que se agiliza de forma considerable la actualizacin del mismo. Los navegadores permiten a los usuarios especificar su propia hoja de estilo local, que ser aplicada a un sitio web, con lo que aumenta considerablemente la accesibilidad. Por ejemplo, personas con deficiencias visuales pueden configurar su propia hoja de estilo para aumentar el tamao del texto o remarcar ms los enlaces. Una pgina puede disponer de diferentes hojas de estilo segn el dispositivo que la muestre o, incluso, a eleccin del usuario. Por ejemplo, para ser impresa, mostrada en un dispositivo mvil o ser "leda" por un sintetizador de voz. El documento HTML en s mismo es ms claro de entender y se consigue reducir considerablemente su tamao (siempre y cuando no se utilice estilo en lnea).

1.7.3 Sintaxis Una hoja de estilo se compone de reglas de visualizacin (reglas de estilo). Cada regla consta de un selector, que es el que indica a que elemento o parte de la pgina se aplica el estilo; normalmente los selectores son etiquetas HTML (por ejemplo, h1 sera un selector que permitira aplicar estilos a las cabeceras <h1>). A cada selector debe seguirle una declaracin del estilo que ha de serle aplicado (por ejemplo, color: blue). Toda declaracin tiene dos partes: propiedad (por ejemplo, color) y valor (por ejemplo, blue). El enunciado de reglas constituye la forma usual de declarar estilos, y deben ajustarse a la sintaxis definida por la especificacin CSS; si el navegador encuentra un selector que no entiende, ignorar la entera declaracin. Si encuentra dentro de la
21

declaracin una propiedad o valor que no comprende ignorar esta parte de la declaracin, pero deber procesar el resto. Los selectores disponibles son, como queda dicho, todas las etiquetas HTML. A cualquier etiqueta HTML se le puede asignar un estilo. Las propiedades disponibles son las enunciadas como tales en el standard CSS; y los valores son asimismo los asignados en dicho standard. Luego solo pueden utilizarse propiedades y valores contemplados en el standard, no siendo posible crear tus propias propiedades y valores. Los estilos, entonces, se definen as:
selector { propiedad:valor }
Cdigo 5. Ejemplo selector

Los selectores se escriben omitiendo las llaves < y >, es decir, simplemente h1, h2, etc. La declaracin {propiedad : valor} ha de ir encerrada en llaves { }. Pueden asignarse varias propiedades a un mismo selector, separadas por punto y coma:
Selector { propiedad1: valor1; propiedad2: valor2 }
Cdigo 6. Ejemplo Selector

Tambin se pueden asignar propiedades de forma conjunta a varios selectores:


Selector1, Selector2, { propiedad1:valor1; propiedad2:valor2}
Cdigo 7. Ejemplo Selector

22

2. Cdigo
2.1 Controladores
<?php class Principal extends CI_Controller { function _Construct() { parent::Construct(); } function index() { if (($this->session->userdata('status')) == 'authorized') { redirect('logged/main_page'); } else { redirect('not_logged/main_page'); } } function usuario_incorrecto() { $data['title'] = "Principal"; $data['heading'] = "Biblioteca online"; $data['message'] = "Nombre de usuario o contrase&ntildea incorrectos, int&eacutentelo de nuevo"; $data['query'] = $this->db->get('book'); $this->load->view('main_views/main_view', $data); } function log_out() { $this->session->set_userdata('status', 'loggedout'); redirect('principal'); } } ?>

Cdigo 1. Controlador principal


class Main_page extends CI_Controller { function _Construct() { parent::Construct(); require_once 'classes/Membership.php'; $membership = New Membership(); $membership->confirm_Member(); } function index() { ?><link rel="stylesheet" type="text/css" href="style2.css">

23

<style type="text/css"> <?php $data['title'] = "Principal"; $data['heading'] = "Biblioteca online"; $data['query'] = $this->db->get('book'); $this->load->view('main_logged/main_view', $data); } } ?>

Cdigo 2. Controlador pgina principal (logeado)


<?php class Main_Blog extends CI_Controller { function _Construct() { parent::Construct(); } function index() { ?><link rel="stylesheet" type="text/css" href="style2.css"> <style type="text/css"> <?php $data['title'] = "Principal"; $data['heading'] = "Biblioteca online"; $data['h2'] = "BLOG:"; $data['message'] = 'Temas disponibles: '; $data['query'] = $this->db->get('entries'); $this->load->view('main_logged/main_blogview', $data); } } ?>

Cdigo 3. Controlador pgina principal (Blog, logeado)


<?php class Main_News extends CI_Controller { function _Construct() { parent::Construct(); } function index() { ?><link rel="stylesheet" type="text/css" href="style2.css"> <style type="text/css"> <?php $data['title'] = "Principal"; $data['heading'] = "Biblioteca online"; $data['h2'] = "NOTICIAS:"; $data['query'] = $this->db->get('noticias');

24

$this->load->view('main_logged/main_newsview', $data); } } ?>

Cdigo 4. Controlador pgina principal (Noticias, logeado)


<?php class Main_page extends CI_Controller { function _Construct() { parent::Construct(); } function index() { $data['title'] = $data['heading'] $data['message'] $data['query'] =

"Principal"; = "Biblioteca online"; = ""; $this->db->get('book');

$this->load->view('main_views/main_view', $data); } function created_user() { $data['title'] = "Principal"; $data['heading'] = "Biblioteca online"; $data['message'] = "Usuario creado correctamente, ya puede iniciar sesi&oacuten"; $data['query'] = $this->db->get('book'); $this->load->view('main_views/main_view', $data); } } ?>

Cdigo 5. Controlador pgina principal (No logeado)


class Main_Blog extends CI_Controller { function _Construct() { parent::Construct(); } function index() { ?><link rel="stylesheet" type="text/css" href="style.css"> <style type="text/css"> <?php $data['title'] = "Principal"; $data['heading'] = "Biblioteca online";

25

$data['h2'] = "BLOG:"; $data['message'] = 'Temas disponibles: '; $data['query'] = $this->db->get('entries'); $this->load->view('main_views/main_blogview', $data); } } ?>

Cdigo 6. Controlador pgina principal (Blog, no logeado)


class Main_News extends CI_Controller { function _Construct() { parent::Construct(); } function index() { ?><link rel="stylesheet" type="text/css" href="style.css"> <style type="text/css"> <?php $data['title'] = "Principal"; $data['heading'] = "Biblioteca online"; $data['h2'] = "NOTICIAS:"; $data['query'] = $this->db->get('noticias'); $this->load->view('main_views/main_newsview', $data); } } ?>

Cdigo 7. Controlador pgina principal (Noticias, no logeado)


<?php class Login extends CI_Controller { function _Construct() { parent::Construct(); session_start(); } function index() { $data['title'] = "Login"; $data['heading'] = "Introduce tus datos"; $this->load->view('login_view', $data); } function create_user() { $data['title'] = "Nuevo usuario"; $data['heading'] = "Crear nuevo usuario";

26

$data['message'] = ''; $this->load->view('create_user', $data); } function create_user_good() { $data['title'] = "Nuevo usuario"; $data['heading'] = "Crear nuevo usuario"; $data['message'] = 'Rellene todos los campos'; $this->load->view('create_user', $data); } function invalid_user() { $data['title'] = "Nuevo usuario"; $data['heading'] = "Crear nuevo usuario"; $data['message'] = 'El nombre de usuario ya esta en uso'; $this->load->view('create_user', $data); } function invalid_email() { $data['title'] = "Nuevo usuario"; $data['heading'] = "Crear nuevo usuario"; $data['message'] = 'El correo electronico ya esta en uso'; $this->load->view('create_user', $data); } function user_insert() { if ($_POST && !empty($_POST['username']) && !empty($_POST['email']) && !empty($_POST['nombre']) && !empty($_POST['password'])) { $this->db->where('username', $this->input>post('username')); $date = $this->db->get('users'); if ($date->num_rows() > 0) { redirect('login/invalid_user'); } else { $this->db->where('email', $this->input>post('email')); $date = $this->db->get('users'); if ($date->num_rows() > 0) { redirect('login/invalid_email'); } else { $new_member_insert_data = array( 'nombre' => $this->input->post('nombre'), 'username' => $this->input->post('username'), 'email' => $this->input->post('email'), 'password' => md5(($this->input>post('password')))); $this->db->insert('users', $new_member_insert_data);

27

redirect('not_logged/main_page/created_user'); } } } else { redirect('login/create_user_good'); } } } ?>

Cdigo 8. Controlador login


<?php class Validate extends CI_Controller { function _Construct() { parent::Construct(); } function index() { $uname = $this->input->post('username'); $pass = $this->input->post('pwd'); $this->db->where('username', $uname); $this->db->where('password', md5($pass)); $date = $this->db->get('users'); if ($date->num_rows() > 0) { $this->session->set_userdata('status', 'authorized'); $this->session->set_userdata('user', $uname); redirect('principal'); } else { $this->session->set_userdata('status', 'loggedout'); redirect('principal/usuario_incorrecto'); } } } ?>

Cdigo 9. Controlador validar login


<?php class Searcher extends CI_Controller { function _Construct() { parent::Construct();

28

} function index() { $send['into'] = $this->input->post('find'); $send['tabla'] = $this->input->post('table'); if ($send['tabla'] === 'book') { $this->load->view('results_view/view_book', $send); } elseif ($send['tabla'] === 'editorial') { $this->load->view('results_view/view_editorial', $send); } elseif ($send['tabla'] === 'author') { $this->load->view('results_view/view_author', $send); } } } ?>

Cdigo 10. Controlador buscador


<?php class News extends CI_Controller { function _Construct() { parent::Construct(); } function index() { $data['title'] = "Noticias"; $data['heading'] = "Ultimas noticias:"; $data['query'] = $this->db->get('noticias'); $this->load->view('news_view', $data); } } ?>

Cdigo 11. Controlador noticias


<?php class Blog extends CI_Controller { function _Construct() { parent::Construct(); }

29

function index() { $data['title'] = $data['heading'] $data['message'] $data['query'] =

"Blog"; = "BLOG"; = 'Introduce un comentario o '; $this->db->get('entries');

$this->load->view('blogview', $data); } function comments() { $data['title'] = "Comentarios"; $data['heading'] = "COMENTARIOS"; $this->db->where('entry_id', $this->uri->segment(3)); $data['query'] = $this->db->get('comments');

$this->load->view('comment_view', $data); } function topic() { $data['title'] = "Temas"; $data['heading'] = "Listado de temas:"; $this->db->where('id', $this->uri->segment(3)); $data['query'] = $this->db->get('entries'); $this->load->view('topic_view', $data); } function comment_insert() { $new_comment = array( 'body' => $this->input->post('body'), 'entry_id' => $this->input->post('entry_id'), 'author' => $this->session->userdata('user'), ); $this->db->insert('comments', $new_comment); redirect('blog/comments/' . $_POST['entry_id']); } function topic_insert() { $new_topic = array( 'body' => $this->input->post('body'), 'author' => $this->session->userdata('user'), ); $this->db->insert('entries', $new_topic); redirect('blog/topic/' . $_POST['id']); } } ?>

30

Cdigo 12. Controlador blog


<?php class Book_list extends CI_Controller { function _Construct() { parent::Construct(); } function index() { $data['title'] = "Libros"; $data['heading'] = "Listado de libros:"; $data['query'] = $this->db->get('book'); $this->load->view('book_listview', $data); } } ?>

Cdigo 13. Controlador lista de libros

2.1 Vistas
<html> <head> <?php $this->load->view('style.php'); ?> <title><?php echo $title; ?></title> </head> <body> <h1><?php echo $heading; ?></h1> <h1>Bienvenido/a, <?php echo $this->session->userdata('user'); ?>!</h1> <a <?php echo anchor('principal/log_out', 'Log out', '') ?> </a> <buscador> <?php echo form_open('searcher'); ?> <p><input type="text" name="find" /></p> <input type="radio" name="table" value="book" checked /> T&iacutetulo<br /> <input type="radio" name="table" value="author" /> Autor<br /> <input type="radio" name="table" value="editorial" /> Editorial <p><input class="boton" type="submit" value="Buscar" /></p> </form>

31

</buscador> <table> <td> <th style="backgroundimage:url('http://dl.dropbox.com/u/12003965/subcuadro.png');"> <a> <?php echo anchor('logged/main_page', 'Libros', '') ?> </a></th> <th><b><?php echo anchor('logged/main_news', 'Noticias', '') ?></b></th> <th><c><?php echo anchor('logged/main_blog', 'Blog', '') ?></c></th> </td> <td> <div class="scroll"> <dl> <dt><u><?php echo 'T&IacuteTULOS DISPONIBLES:'; ?></u></dt> <?php foreach ($query->result() as $row): ?> <blockquote><dt>- <?php echo $row->name ?></blockquote></dt> <?php endforeach; ?> </dl> </div> <d><?php echo anchor('book_list', 'Ver todos los libros', '') ?></d> </td> </table>

</body> </html>

Cdigo 14. Vista principal (logeado)


<html> <head> <?php $this->load->view('style.php'); ?> <title><?php echo $title; ?></title> </head> <body> <h1><?php echo $heading; ?></h1> <h1>Bienvenido/a, <?php echo $this->session->userdata('user'); ?>!</h1> <a <?php echo anchor('principal/log_out', 'Log out', '') ?> </a>

32

<buscador> <?php echo form_open('searcher'); ?> <p><input type="text" name="find" /></p> <input type="radio" name="table" value="book" checked /> T&iacutetulo<br /> <input type="radio" name="table" value="author" /> Autor<br /> <input type="radio" name="table" value="editorial" /> Editorial <p><input class="boton" type="submit" value="Buscar" /></p> </form> </buscador> <table> <td> <th><a><?php echo anchor('logged/main_page', 'Libros', '') ?></a></th> <th style="backgroundimage:url('http://dl.dropbox.com/u/12003965/subcuadro.png');"> <b><?php echo anchor('logged/main_news', 'Noticias', '') ?></b></th> <th><c><?php echo anchor('logged/main_blog', 'Blog', '') ?></c></th> </td> <td> <div class="scroll"> <dl> <dt><u><?php echo $h2; ?></u></dt> <?php foreach ($query->result() as $row): ?> <blockquote><dt>- <?php echo $row->tittle ?></blockquote></dt> <?php endforeach; ?> </dl> </div> <d><?php echo anchor('news', 'Ver m&aacutes', '') ?></d> </td> </table>

</body> </html>

Cdigo 15. Vista principal (Noticias, logeado)


<html> <head>

33

<?php $this->load->view('style.php'); ?> <title><?php echo $title; ?></title> </head> <body> <h1><?php echo $heading; ?></h1> <h1>Bienvenido/a, <?php echo $this->session->userdata('user'); ?>!</h1> <a <?php echo anchor('principal/log_out', 'Log out', '') ?> </a> <buscador> <?php echo form_open('searcher'); ?> <p><input type="text" name="find" /></p> <input type="radio" name="table" value="book" checked /> T&iacutetulo<br /> <input type="radio" name="table" value="author" /> Autor<br /> <input type="radio" name="table" value="editorial" /> Editorial <p><input class="boton" type="submit" value="Buscar" /></p> </form> </buscador> <table> <td> <th><a><?php echo anchor('logged/main_page', 'Libros', '') ?></a></th> <th><b><?php echo anchor('logged/main_news', 'Noticias', '') ?></b></th> <th style="backgroundimage:url('http://dl.dropbox.com/u/12003965/subcuadro.png');"> <c><?php echo anchor('logged/main_blog', 'Blog', '') ?></c></th> </td> <td> <div class="scroll"> <dl> <dt><u><?php echo $h2; ?></u></dt> <dt><?php echo $message; ?></dt> <?php foreach ($query->result() as $row): ?> <blockquote><dt>- <?php echo anchor('blog/comments/' . $row->id, $row->body, '') ?></blockquote></dt> <?php endforeach; ?> </dl> </div> <d><?php echo anchor('blog', 'Ir al blog', '') ?></d>

34

</td> </table>

</body> </html>

Cdigo 16. Vista principal (Blog, logeado)


<html> <head> <?php $this->load->view('style.php'); ?> <title><?php echo $title; ?></title> </head> <body> <main><br><h1><?php echo $heading; ?> <message><br><?php echo $message; ?></message></h1> </main> <login> <?php echo form_open('/validate'); ?> <p><input type="text" name="username" /></p> <p><input type="password" name="pwd" /></p> <p><input class="boton" type="submit" value="Login" ></p> </form> <create><?php echo anchor('login/create_user', 'Crear un nuevo usuario'); ?></create> </login> <buscador> <?php echo form_open('searcher'); ?> <p><input type="text" name="find" /></p> <input type="radio" name="table" value="book" checked /> T&iacutetulo<br /> <input type="radio" name="table" value="author" /> Autor<br /> <input type="radio" name="table" value="editorial" /> Editorial <p><input class="boton" type="submit" value="Buscar" /></p> </form> </buscador> <table> <td>

35

<th style="backgroundimage:url('http://dl.dropbox.com/u/12003965/subcuadro.png');"> <a> <?php echo anchor('not_logged/main_page', 'Libros', '') ?> </a></th> <th><b><?php echo anchor('not_logged/main_news', 'Noticias', '') ?></b></th> <th><c><?php echo anchor('not_logged/main_blog', 'Blog', '') ?></c></th> </td> <td> <div class="scroll"> <dl> <dt><u><?php echo 'T&IacuteTULOS DISPONIBLES:'; ?></u></dt> <?php foreach ($query->result() as $row): ?> <blockquote><dt>- <?php echo $row->name ?></blockquote></dt> <?php endforeach; ?> </dl> </div> <d>No estas logeado, entra o <?php echo anchor('login/create_user', 'crea una cuenta para ver m&aacutes'); ?></d> </td> </table>

</body> </html>

Cdigo 17. Vista principal (No logeado)


<html> <head> <?php $this->load->view('style.php'); ?> <title><?php echo $title; ?></title> </head> <body> <main><br><h1><?php echo $heading; ?></h1></main> <login> <?php echo form_open('/validate'); ?> <p><input type="text" name="username" /></p> <p><input type="password" name="pwd" /></p> <p><input class="boton" type="submit" value="Login" /></p>

36

</form> <create><?php echo anchor('login/create_user', 'Crear un nuevo usuario'); ?></create> </login> <buscador> <?php echo form_open('searcher'); ?> <p><input type="text" name="find" /></p> <input type="radio" name="table" value="book" checked /> T&iacutetulo<br /> <input type="radio" name="table" value="author" /> Autor<br /> <input type="radio" name="table" value="editorial" /> Editorial <p><input class="boton" type="submit" value="Buscar" /></p> </form> </buscador> <table> <td> <th><a><?php echo anchor('not_logged/main_page', 'Libros', '') ?></a></th> <th><b><?php echo anchor('not_logged/main_news', 'Noticias', '') ?></b></th> <th style="backgroundimage:url('http://dl.dropbox.com/u/12003965/subcuadro.png');"> <c><?php echo anchor('not_logged/main_blog', 'Blog', '') ?></c></th> </td> <td> <div class="scroll"> <dl> <dt><u><?php echo $h2; ?></u></dt> <dt><?php echo $message; ?></dt> <?php foreach ($query->result() as $row): ?> <blockquote><dt>-<?php echo $row->body ?></blockquote></dt> <?php endforeach; ?> </dl> </div> <d>No estas logeado, entra o <?php echo anchor('login/create_user', 'crea una cuenta para ver m&aacutes'); ?></d> </td> </table>

37

</body> </html>

Cdigo 18. Vista principal (Blog, no logeado)


<html> <head> <?php $this->load->view('style.php'); ?> <title><?php echo $title; ?></title> </head> <body> <main><br><h1><?php echo $heading; ?></h1></main> <login> <?php echo form_open('/validate'); ?> <p><input type="text" name="username" /></p> <p><input type="password" name="pwd" /></p> <p><input class="boton" type="submit" value="Login" /></p> </form> <create><?php echo anchor('login/create_user', 'Crear un nuevo usuario'); ?></create> </login> <buscador> <?php echo form_open('searcher'); ?> <p><input type="text" name="find" /></p> <input type="radio" name="table" value="book" checked /> T&iacutetulo<br /> <input type="radio" name="table" value="author" /> Autor<br /> <input type="radio" name="table" value="editorial" /> Editorial <p><input class="boton" type="submit" value="Buscar" /></p> </form> </buscador> <table> <td> <th><a><?php echo anchor('not_logged/main_page', 'Libros', '') ?></a></th> <th style="backgroundimage:url('http://dl.dropbox.com/u/12003965/subcuadro.png');"> <b><?php echo anchor('not_logged/main_news', 'Noticias', '') ?></b></th>

38

<th><c><?php echo anchor('not_logged/main_blog', 'Blog', '') ?></c></th> </td> <td> <div class="scroll"> <dl> <dt><u><?php echo $h2; ?></u></dt> <?php foreach ($query->result() as $row): ?> <blockquote><dt>- <?php echo $row->tittle ?></blockquote></dt> <?php endforeach; ?> </dl> </div> <d>No estas logeado, entra o <?php echo anchor('login/create_user', 'crea una cuenta para ver m&aacutes'); ?></d> </td> </table> </body> </html>

Cdigo 19. Vista principal (Noticias, no logeado)


<html> <head> <?php $this->load->view('style_1.php'); ?> <title><?php echo $title; ?></title> </head> <body> <cabecera><h1><?php echo $heading; ?></h1> <h1><?php echo $message; ?></h1></cabecera> <tabla> <td> <?php echo form_open('login/user_insert'); ?> <f>Nombre: <input type="text" name="nombre"/></f><br> <f>Email: <input type="text" name="email"/></f><br> <f>Usuario: <input type="text" name="username"/></f><br> <f>Contrase&ntildea: <input type="password" name="password"/></f><br><br> <f><input class="boton" type="submit" value="Crear cuenta" /></f> </form> </td> </tabla>

39

<back><p><?php echo anchor('not_logged/main_page', 'Volver a la pagina principal') ?></p></back> </body> </html>

Cdigo 20. Vista crear un usuario


<html> <head> <?php $this->load->view('style_1.php'); ?> <title><?php echo $title; ?></title> </head> <body> <cabecera><h1><?php echo $heading; ?></h1></cabecera> <table> <td> <div class="scroll"> <?php foreach ($query->result() as $row): ?> <dt><br><b>-<?php echo $row->tittle ?></b></br></dt> <dd><?php echo $row->body ?></dd> <?php endforeach; ?> </div> </td> </table> <back><?php echo anchor('logged/main_news', 'Volver a la pagina principal'); ?></back> <body> </html>

Cdigo 21. Vista noticias


<html> <head> <?php $this->load->view('style_1.php'); ?> <title><?php echo $title; ?></title> </head> <body> <cabecera><h1><?php echo $heading; ?></h1></cabecera> <table> <td> <div class="scroll"> <?php foreach ($query->result() as $row):

40

?><br><?php $id_libro = $row->id; ?> T&IacuteTULO: <?php echo $row->name; $id_aut = $row->id_author; $id_edi = $row->id_editorial; $id_them = $row->id_theme; $id_pun = $row->id_punctuation; $this->db->where('id', $id_aut); $date = $this->db->get('author'); $row = $date->row(); ?> <br>AUTOR: <?php echo $row->name; $this->db->where('id', $id_edi); $date = $this->db->get('editorial'); $row = $date->row(); ?> <br>EDITORIAL: <?php echo $row->name; $this->db->where('id', $id_them); $date = $this->db->get('thematic'); $row = $date->row(); ?> <br>TEMA: <?php echo $row->name; $this->db->where('id', $id_pun); $date = $this->db->get('punctuation'); $row = $date->row(); ?> <br>PUNTUACI&OacuteN: <?php echo $row->stars; echo 'estrellas'; $this->db->where('id', $id_libro); $date = $this->db->get('book'); $row = $date->row(); echo '<li link="' . $row->link . '">' . anchor($row>link, 'Descargar') . '</li>'; ?> <hr> <?php endforeach; ?> </div> </td> </table> <back><?php echo anchor('logged/main_page', 'Volver a la pagina principal'); ?></back> <body>

41

</html>

Cdigo 22. Vista listado de libros


<html> <head> <?php $this->load->view('style_1.php'); ?> <title><?php echo $title; ?></title> </head> <body> <cabecera> <h1><?php echo $heading; ?></h1> <a><?php echo $message; ?></a> <?php echo anchor('blog/topic/', 'Crear un tema nuevo', '') ?> </cabecera> <table> <td> <div class="scroll"> <?php foreach ($query->result() as $row): ?> <c><?php echo $row->author ?>:</c> <b><topic><?php echo $row->body ?></topic></b> <p><?php echo anchor('blog/comments/' . $row->id, 'Ir a este tema', '') ?></p> <br> <?php endforeach; ?> </div> </td> </table> <back><?php echo anchor('logged/main_blog', 'Volver a la pagina principal') ?></back> </body> </html>

Cdigo 23. Vista principal del Blog


<html> <head> <?php $this->load->view('style_1.php'); ?> <title><?php echo $title; ?></title> </head> <body>

42

<cabecera><h1><?php echo $heading; ?></h1> <?php $this->db->where('id', $this->uri->segment(3)); $dato = $this->db->get('entries'); if ($dato->num_rows() > 0) { foreach ($dato->result() as $row) { ?> <h2><p>Tema: <?php echo $row->body ?></p></h2></cabecera> <?php } } ?><table><td> <div class="scroll"> <?php if ($query->num_rows() > 0) { foreach ($query->result() as $row) { ?> <br> <a><?php echo $row->author; echo ':' ?></a> <b><?php echo $row->body; ?></b> <hr> <?php } } else { ?> Este tema a&uacuten no tiene comentarios, &#161s&eacute el primero!<?php } ?> </div> </td></table> <back> <p><?php echo anchor('blog', 'Volver al Blog') ?></p> <?php echo form_open('blog/comment_insert'); echo form_hidden('entry_id', $this->uri->segment(3)); ?> <p><textarea name="body" rows= "10"></textarea></p> <p><input class="boton" type="submit" value="Insertar comentario" /></p> </form> <p><?php echo anchor('logged/main_blog', 'Volver a la pagina principal') ?></p> </back> </body>

43

</html>

Cdigo 24. Vista blog (comentarios)


<html> <head> <?php $this->load->view('style_1.php'); ?> <title><?php echo $title; ?></title> </head> <body> <cabecera><h1><?php echo $heading; ?></h1></cabecera> <table> <td> <div class="scroll"> <?php $query = $this->db->get('entries'); if ($query->num_rows() > 0) { foreach ($query->result() as $row) { ?> <br> <topic><b><?php echo $row->body; ?></b></topic> <br> <b><?php echo anchor('blog/comments/' . $row>id, 'Insertar comentario <hr>', '') ?></b> <?php } } ?> </div> </td> </table> <back> <p><?php echo anchor('blog', 'Volver al Blog') ?></p>

<?php echo form_open('blog/topic_insert'); ?> <?php echo form_hidden('id', $this->uri->segment(3)); ?> <p><textarea name="body" rows= "10"></textarea></p> <p><input class="boton" type="submit" value="Crear tema" /></p> </form> <p><?php echo anchor('logged/main_blog', 'Volver a la pagina principal') ?></p> </back>

44

</body> </html>

Cdigo 25. Vista blog (temas)


<html> <head> <?php $this->load->view('style_1.php'); ?> <title>Search results</title> </head> <body> <cabecera><h1>Resultados de la b&uacutesqueda:</h1></cabecera> <table> <td> <div class="scroll"> <?php $this->db->where('name', $into); $date = $this->db->get('book'); if ($date->num_rows() > 0) { foreach ($date->result() as $row) { $mi_id = $row->id;

$this->db->where('id', $mi_id); $date = $this->db->get('book'); ?> <br> T&IacuteTULO: <?php echo $row->name; $id_edit = $row->id_editorial; $id_aut = $row->id_author; $id_them = $row->id_theme; $id_punct = $row->id_punctuation; $this->db->where('id', $id_edit); $date = $this->db->get('editorial'); $row = $date->row(); ?> <br>EDITORIAL: <?php echo $row->name; $this->db->where('id', $id_aut); $date = $this->db->get('author'); $row = $date->row(); ?> <br>AUTOR: <?php

45

echo $row->name; $this->db->where('id', $id_them); $date = $this->db->get('thematic'); $row = $date->row(); ?> <br>TEMA: <?php echo $row->name; $this->db->where('id', $id_punct); $date = $this->db->get('punctuation'); $row = $date->row(); ?> <br>PUNTUACI&OacuteN: <?php echo $row>stars; ?> estrellas <?php $this->db->where('id', $mi_id); $date = $this->db->get('book'); $row = $date->row(); if (($this->session->userdata('status')) == 'authorized') { echo '<li link="' . $row->link . '">' . anchor($row>link, 'Descargar') . '</li>'; } else { ?><br><m> No estas logeado, entra o <?php echo anchor('login/create_user', 'Crea una cuenta para descargar este libro'); } ?></m><hr><?php } } else { echo 'No se ha encontrado libros con ese t&iacutetulo'; ?><br><?php if (($this->session->userdata('status')) == 'authorized') { echo anchor('logged/main_page', 'Volver a la pagina principal', ''); } else { echo anchor('not_logged/main_page', 'Volver a la pagina principal', ''); } exit; } ?> </div> </td> </table> <?php if(($this->session->userdata('status')) == 'authorized') { ?><back><?php echo anchor('logged/main_page', 'Volver a la pagina principal', ''); ?></back><?php } else {

46

?><back><?php echo anchor('not_logged/main_page', 'Volver a la pagina principal', ''); ?></back> <login> <?php echo form_open('/validate'); ?> <p><input type="text" name="username" /></p> <p><input type="password" name="pwd" /></p> <p><input class="boton" type="submit" value="Login" /></p> </form> </login> <?php } ?> </body> </html>

Cdigo 26. Vista resultados de la bsqueda por libro


<html> <head> <?php $this->load->view('style_1.php'); ?> <title>Search results</title> </head> <body> <cabecera><h1>Resultados de la b&uacutesqueda:</h1></cabecera> <?php $this->db->where('name', $into); $date = $this->db->get('author'); if ($date->num_rows() > 0) { foreach ($date->result() as $row) { $mi_id = $row->id; } } else { ?><table><td><?php echo 'No se ha encontrado libros de ese autor'; ?><br><?php if (($this->session->userdata('status')) == 'authorized') { echo anchor('logged/main_page', 'Volver a la pagina principal', ''); } else { echo anchor('not_logged/main_page', 'Volver a la pagina principal', ''); } exit; ?></td></table><?php }

47

$this->db->where('id_author', $mi_id); $date = $this->db->get('book'); ?><table> <td> <div class="scroll"> <?php if ($date->num_rows() > 0) { foreach ($date->result() as $row) { ?> <br> T&IacuteTULO: <?php echo $row->name; $id_book = $row->id; $id_edit = $row->id_editorial; $id_them = $row->id_theme; $id_punct = $row->id_punctuation; $this->db->where('id', $mi_id); $date = $this->db->get('author'); $row = $date->row(); ?> <br>AUTOR: <?php echo $row->name; $this->db->where('id', $id_edit); $date = $this->db->get('editorial'); $row = $date->row(); ?> <br>EDITORIAL: <?php echo $row->name; $this->db->where('id', $id_them); $date = $this->db->get('thematic'); $row = $date->row(); ?> <br>TEMA: <?php echo $row->name; $this->db->where('id', $id_punct); $date = $this->db->get('punctuation'); $row = $date->row(); ?> <br>PUNTUACI&OacuteN: <?php echo $row->stars; ?> estrellas <?php $this->db->where('id', $id_book); $date = $this->db->get('book'); $row = $date->row(); if (($this->session->userdata('status')) == 'authorized') {

48

echo '<li link="' . $row->link . '">' . anchor($row>link, 'Descargar') . '</li>'; } else { ?><br><m> No estas logeado, entra o <?php echo anchor('login/create_user', 'Crea una cuenta para descargar este libro'); } ?></m><hr><?php } } else { echo 'No se ha encontrado libros para ese autor';?><br><?php if (($this->session->userdata('status')) == 'authorized'){ echo anchor('logged/main_page', 'Volver a la pagina principal', ''); } else { echo anchor('not_logged/main_page', 'Volver a la pagina principal', ''); } exit; } ?> </div> </td> </table><?php if (($this->session->userdata('status')) == 'authorized') { ?><back><?php echo anchor('logged/main_page', 'Volver a la pagina principal', ''); ?></back><?php } else { ?><back><?php echo anchor('not_logged/main_page', 'Volver a la pagina principal', ''); ?></back> <login> <?php echo form_open('/validate'); ?> <p><input type="text" name="username" /></p> <p><input type="password" name="pwd" /></p> <p><input class="boton" type="submit" value="Login" /></p> </form> </login> <?php } ?> </body> </html>

Cdigo 27. Vista resultados de la bsqueda por autor

49

<html> <head> <?php $this->load->view('style_1.php'); ?> <title>Search results</title> </head> <body> <cabecera><h1>Resultados de la b&uacutesqueda:</h1></cabecera> <?php $this->db->where('name', $into); $date = $this->db->get('editorial'); if ($date->num_rows() > 0) { foreach ($date->result() as $row) { $mi_id = $row->id; } } else { ?><table><td><?php echo 'No se ha encontrado libros para esa editorial'; ?><br><?php if (($this->session->userdata('status')) == 'authorized') { echo anchor('logged/main_page', 'Volver a la pagina principal', ''); } else { echo anchor('not_logged/main_page', 'Volver a la pagina principal', ''); } exit; ?></td></table><?php } $this->db->where('id_editorial', $mi_id); $date = $this->db->get('book'); ?><table> <td> <div class="scroll"> <?php if ($date->num_rows() > 0) { foreach ($date->result() as $row) { ?> <br> T&IacuteTULO: <?php echo $row->name; $id_book = $row->id; $id_aut = $row->id_author; $id_them = $row->id_theme; $id_punct = $row->id_punctuation; $this->db->where('id', $id_aut); $date = $this->db->get('author');

50

$row = $date->row(); ?> <br>AUTOR: <?php echo $row->name; $this->db->where('id', $mi_id); $date = $this->db->get('editorial'); $row = $date->row(); ?> <br>EDITORIAL: <?php echo $row->name; $this->db->where('id', $id_them); $date = $this->db->get('thematic'); $row = $date->row(); ?> <br>TEMA: <?php echo $row->name; $this->db->where('id', $id_punct); $date = $this->db->get('punctuation'); $row = $date->row(); ?> <br>PUNTUACI&OacuteN: <?php echo $row->stars; ?> estrellas <?php $this->db->where('id', $id_book); $date = $this->db->get('book'); $row = $date->row(); if (($this->session->userdata('status')) == 'authorized') { echo '<li link="' . $row->link . '">' . anchor($row->link, 'Descargar') . '</li>'; } ?><hr><?php } } else { echo 'No se ha encontrado libros para esa editorial'; ?><br><?php if (($this->session->userdata('status')) == 'authorized'){ echo anchor('logged/main_page', 'Volver a la pagina principal', ''); } else { echo anchor('not_logged/main_page', 'Volver a la pagina principal', ''); } exit; }?> </div> </td> </table><?php

51

if (($this->session->userdata('status')) == 'authorized') { ?><back><?php echo anchor('logged/main_page', 'Volver a la pagina principal', ''); ?></back><?php } else { ?><back><?php echo anchor('not_logged/main_page', 'Volver a la pagina principal', ''); ?></back><?php } ?> </body> </html>

Cdigo 28. Vista resultados de la bsqueda por editorial

2.2 Hojas de estilo


<style type="text/css"> h1 { text-align:center; font-size:30pt; } buscador{ position:fixed; top:200px; left:10px; } login{ position:fixed; top:380px; } table, th, tr{ border: 1px solid black; } table{ position:fixed; left:260px; top:175px; } dl{ height:350px; width:900; vertical-align:bottom; } table{ border-width: thick; border-spacing: 2px; border-style: outset;

52

border-color: gray; border-collapse: separate; background-color: white; } body{ backgroundimage:url('http://dl.dropbox.com/u/12003965/fondo.png'); } a,b,c { color:black; } d{ vertical-align:auto; left:100px; } input.boton{ padding: 10px; font-size:20px } create{ font-size:22px } main{ font-size:20px; } message{ font-size:15px; } div.scroll{ width:895px; height:450px; overflow:scroll; } </style>

Cdigo 29. Hoja de estilo


<style type="text/css"> body{ backgroundimage:url('http://dl.dropbox.com/u/12003965/fondo.png'); }

53

p{ backgroundimage:url('http://dl.dropbox.com/u/12003965/cuadro.png'); } table{ background:#fff; position:fixed; left:300px; top:175px; border-width: 0px; } login{ position:fixed; top:280px; } tabla{ position:fixed; left:300px; top:175px; border-width: 0px; } div.scroll{ width:900px; height:450px; overflow:scroll; } td{ width:900px; height:100px; vertical-align: top; } back{ position:fixed; top:200px; left:10px; } cabecera{ position:fixed; text-align:center; left:570px; } topic{ font-size:30px } f{ font-size:30px

54

} input.boton{ padding: 10px; font-size:20px } create{ font-size:22px } m{ color:blue; } </style>

Cdigo 30. Hoja de estilo

55

3. Referencias
[1] [2] [3] [4] [5] [6]
[7] [8] [9] [10] [11] [12] [13] [14]

http://es.wikipedia.org/wiki/Interfaz_de_entrada_com%C3%BAn http://es.wikipedia.org/wiki/MySQL http://news.netcraft.com/ http://www.gnu.org/licenses/license-list.html http://www.apache.org/foundation/license-faq.html#Marks


http://fabianperez.blogspot.com/2008/02/tipos-de-datos-en-php.html http://www.manualdephp.com/manualphp/funciones-php.html http://www.cs.tut.fi/~jkorpela/qattr.html http://html.conclase.net/w3c/html401-es/types.html http://dev.mysql.com/doc/refman/5.5/en/history.html http://httpd.apache.org/ABOUT_APACHE.html http://www.ignside.net/man/css/sintaxis.php

http://codeigniter.com/

http://www.desarrolloweb.com/articulos/modelo-vista-controladorcodeigniter.html
[15] [16] [17] [18] [19] [20] [21] [22] [23]

http://www.w3.org http://www.faqs.org/rfcs/ http://httpd.apache.org/docs/2.0/mod/worker.html http://journals.tdl.org/jodi/article/viewArticle/90/89 http://www.google.com http://en.wikipedia.org http://php.net http://mysql.com http://dessarrolloweb.com

56

S-ar putea să vă placă și