Sei sulla pagina 1di 120

Calidad que se acredita internacionalmente

ASIGNATURA

INGENIERA WEB
(TEXTO UNIVERSITARIO)

VISIN
Ser una de las 10 mejores universidades privadas del Per al ao 2020, reconocidos por nuestra excelencia acadmica y vocacin de servicio, lderes en formacin integral, con perspectiva global; promoviendo la competitividad del pas.

MISIN
Somos una universidad privada, innovadora y comprometida con el desarrollo del Per, que se dedica a formar personas competentes, ntegras y emprendedoras, con visin internacional; para que se conviertan en ciudadanos responsables e impulsen el desarrollo de sus comunidades, impartiendo experiencias de aprendizaje vivificantes e inspiradoras; y generando una alta valoracin mutua entre todos los grupos de inters.

Universidad Continental Material publicado con fines de estudio Distribucin Gratuita Cuarta edicin Huancayo, 2013

Asignatura:

Ing. Web

PRESENTACIN
La ingeniera web es una asignatura que le permitir al alumno la aplicacin de metodologas sistemticas, disciplinadas y cuantificables al desarrollo eficiente, operacin y evolucin de aplicaciones de alta calidad en la World Wide Web. La competencia a desarrollar es: Asignatura de especialidad que le permitir al analizar los conceptos y mtodos de procesos de software, mtodos de desarrollo, mtricas e indicadores, caractersticas y atributos de calidad y reingeniera en el desarrollo de aplicaciones Web as como las buenas prcticas en estrategias y metodologas para la evaluacin y promocin de sitios web mostrando perseverancia y responsabilidad en las actividades acadmicas. En general, los contenidos que se dividen son: Introduccin a la Ingeniera Web: Cmo elaboramos un sitio web?, Procesos Ingeniera de Software en la Ingeniera Web: Del Anlisis y diseo a las aplicaciones web, Mtodos de desarrollo de la Ingeniera Web: Desarrollo, metodologas, tcnicas. Pruebas y calidad. Mtricas web, Ingeniera web reversa y Comercio Electrnico: E-commerce. Es recomendable que el estudiante desarrolle una permanente lectura de estudio junto a una minuciosa investigacin de campo, va internet, la consulta a expertos y los resm enes. El contenido del material se complementar con las lecciones presenciales y a distancia que se desarrollan en la asignatura. Agradecemos al Ing. Elvis Guillermo Huarcaya Quispe que ha trabajado en la elaboracin del texto.

Pg. 3

Asignatura: Ing. Web

NDICE
Pg.

PRESENTACIN NDICE

3 4

PRIMERA UNIDAD: Introduccin a la Ingeniera Web: Cmo elaboramos un sitio web? Tema N 1: Discrimina los elementos web y aplica CSS
1.1 La WWW como servicio de Internet................................................................................... 6 1.2 Fundamentos de la web....................................................................................................... 6 1.3 El lenguaje HTML ................................................................................................................. 6 1.4 Formularios Web ................................................................................................................... 7

Tema N 2: Sitios web Dinmicos


2.1 HTML Dinmico .................................................................................................................. 13 2.2 JAVA Script .......................................................................................................................... 13 2.3 Funciones y programacin orientada a objetos ..................................................................... 22 2.4 Estructuras de programacin Java Script ............................................................................... 33 2.5 Controles Web........................................................................................................................ 38

SEGUNDA UNIDAD: Mtodos de desarrollo de la Ingeniera Web: Desarrollo, metodologas, tcnicas. Pruebas y calidad. Mtricas web Tema N 3: Aplicaciones web con PHP
3.1 Instrucciones bsicas del PHP ......................................................................................... 48 3.2 Formularios HTML (GET POST) ................................................................................... 50

Pg. 4

Asignatura: Ing. Web 3.3 Programas recursivos ........................................................................................................ 53 3.4 Estructuras del lenguaje de programacin PHP ............................................................ 54 3.5 Estrategias de programacin segn destino de resultados ......................................... 55

Tema N 4: Frameworks
4.1 FRAMEWORK.......................................................................................................................... 73 4.2 ZEND FRAMEWORK ................................................................................................................ 74 4.3 Instalar Zend Framework ....................................................................................................... 75 4.4 Paradigma de la Ingeniera Web - MVC ................................................................................ 75

Tema N 5: Gestor de Base de datos para aplicaciones web


5.1 SBGD MySQL ....................................................................................................................... 79 5.2 Tipos de tablas usadas por MySQL........................................................................................ 83 5.3 MySQL .................................................................................................................................... 84 5.4 PHPMYADMIN .................................................................................................................... 85 5.5 GUI para gestores de bases de datos MYSQL .............................................................. 88 5.6 Funciones de acceso a BD ...................................................................................................... 94 5.7 Consulta a bases de datos mysql desde aplicaciones PHP ................................................... 101

TERCERA UNIDAD: Ingeniera web reversa Tema N 6: Soluciones LAMP


6.1 Solucin LAMP .................................................................................................................. 117 6.2 Servidor Apache................................................................................................................ 118 6.3 CMS .................................................................................................................................... 118

REFERENCIAS BIBLIOGRFICAS

120

Pg. 5

Asignatura: Ing. Web

PRIMERA UNIDAD

Introduccin a la Ingeniera Web: Cmo elaboramos un sitio web?


TEXTO N 1
Discrimina los elementos web y aplica CSS.

1.1 La WWW como servicio de Internet


La WWW (World Wide Web) o, de forma ms coloquial, la web, se ha convertido, junto con el correo electrnico, en el principal caballo de batalla de Internet. sta ha dejado de ser una inmensa biblioteca de pginas estticas para convertirse en un servicio que permite acceder a multitud de prestaciones y funciones, as como a infinidad de servicios, programas, tiendas, etc.

1.2 Fundamentos de la web


El xito espectacular de la web se basa en dos puntales fundamentales: el protocolo HTTP y el lenguaje HTML. Uno permite una implementacin simple y sencilla de un sistema de comunicaciones que nos permite enviar cualquier tipo de ficheros de una forma fcil, simplificando el funcionamiento del servidor y permitiendo que servidoplificando el funcionamiento del servidor y permitiendo que servidores poco potentes atiendan miles de peticiones y reduzcan los costes de despliegue. El otro nos proporciona un mecanismo de composicin de pginas enlazadas simple y fcil, altamente eficiente y de uso muy simple.

1.3 El lenguaje 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 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 Pg. 6

Asignatura: Ing. Web posteriores) o en forma descendida directamente de SGML (como HTML 4.01 y anteriores).

Ejemplo bsico:

1.4 Formularios Web

Pg. 7

Asignatura: Ing. Web

Pg. 8

Asignatura: Ing. Web

Pg. 9

Asignatura: Ing. Web

Pg. 10

Asignatura: Ing. Web

Pg. 11

Asignatura: Ing. Web

Pg. 12

Asignatura: Ing. Web

TEXTO N 2
Sitios web Dinmicos

2.1 HTML Dinmico

2.2 JAVA Script

Pg. 13

Asignatura: Ing. Web

Pg. 14

Asignatura: Ing. Web

Pg. 15

Asignatura: Ing. Web

Pg. 16

Asignatura: Ing. Web

Pg. 17

Asignatura: Ing. Web

Pg. 18

Asignatura: Ing. Web

Pg. 19

Asignatura: Ing. Web

Pg. 20

Asignatura: Ing. Web

Pg. 21

Asignatura: Ing. Web

2.3 Funciones y programacin orientada a objetos

Pg. 22

Asignatura: Ing. Web

Pg. 23

Asignatura: Ing. Web

Pg. 24

Asignatura: Ing. Web

Pg. 25

Asignatura: Ing. Web Ejemplos: BOTN QUE SALUDA CON ALERT


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Boton que saluda</title>

<script language="javascript" > function Saludo() { alert('Hola'); } </script>


</head> <BODY> <FORM> <p> <label>

<input type="button" name="boton1" id="boton1" value="Enviar" onClick="Saludo()">


</label> </p> </FORM> </BODY> </html>

Pg. 26

Asignatura: Ing. Web

SALUDO DOCUMENT.WRITE
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Documento sin t&iacute;tulo</title>

<script language="javascript" > function Saludo() { document.write('Hola'); } </script>


</head> <BODY> <FORM> <p> <label>

<input type="button" name="boton1" id="boton1" value="Enviar" onClick="Saludo()">


</label> </p> </FORM> </BODY> </html>

Pg. 27

Asignatura: Ing. Web

SALUDOS CON PROMPT


<HTML> <HEAD> <TITLE>Ejemplo de bienvenida a partir de un nombre </TITLE>

<script language="javascript"> function Saludo() { var hh = prompt('Ingresa tu nombre',''); alert('Bravo ' +hh+ '! estas por hacer una visita a un sitio estupendo... '); parent.location='http://www.continental.edu.pe'; } </script>
</HEAD> <BODY bgcolor="white"> <CENTER><FORM>

<input name="Boton" type="button" onClick ="Saludo()" value="Bienvenida">


</FORM> </CENTER> </body> </html>

Pg. 28

Asignatura: Ing. Web

SUMA CON PROMPT


<HTML> <HEAD> <TITLE>Ejemplo de bienvenida a partir de un nombre </TITLE>

<script language="javascript"> function Suma() { var n1 = prompt('Ingresa primer numero',''); var n2 = prompt('Ingresa segundo numero',''); var s=parseInt(n1)+parseInt(n2); alert('La suma de ' +n1+ ' y '+n2+' es: '+s); } </script>
</HEAD> <BODY bgcolor="white"> <CENTER><FORM>

<input name="Boton" type="button" onClick ="Suma()" value="Sumar">


</FORM> </CENTER> </body> </html>

Pg. 29

Asignatura: Ing. Web

SALUDO CON INGRESO DE NOMBRE


<html> <head> <title>Documento de salida</title>

<script language="javascript" > function Saludo(a) { var a; alert('Hola '+a); } </script>


</head> <BODY> <FORM name="formulario"> <p>Ingrese tu nombre <label> <input type="text" name="nombre" id="nombre"> </label> </p> <p> <label>

<input type="button" name="boton1" id="boton1" value="Saludar" onClick="Saludo(formulario.nombre.value)">


</label> </p> </FORM> </BODY> </html>

Pg. 30

Asignatura: Ing. Web

DOCUMENTO DE SALUDO Y DESPEDIDA


<html> <head> <title>Documento de salida</title>

<script language="javascript" > function Saludo(a,b) { var a,b; alert('Hola '+a+' '+b); } function Despedir(a,b) { var a,b; alert('Adios '+a+' '+b); } </script>
</head> <BODY> <FORM name="formulario"> <p>Ingrese tu nombre <label> <input type="text" name="nombre" id="nombre"> </label> </p> <p>Ingrese tu apellido <input type="text" name="nombre2" id="nombre2"> </p> <p> <label>

<input type="button" name="boton1" id="boton1" value="Saludar" onClick="Saludo(formulario.nombre.value,formulario. nombre2.value)">


</label> <label>

<input type="submit" name="button" id="button" value="Despedir" onClick="Despedir(formulario.nombre.value,formulari o.nombre2.value)">


</label> </p> </FORM> </BODY> </html>

Pg. 31

Asignatura: Ing. Web

ABRIR VENTANA EMERGENTE


<HTML> <HEAD> <TITLE>Abre ventana emergente </TITLE>

<script language="JavaScript"> function Abreventana() { msg=open("","schermo","toolbar=no,directories=no,me nubar=no,width=180,height=250,resizable=yes"); msg.document.write("<HEAD><TITLE>Enlaces</TITLE></H EAD><body>"); msg.document.write("<B><CENTER><font size=4>Enlaces Web</font></CENTER></B><BR><A HREF=http://www.google.com.pe target=home>Google</A><br>"); msg.document.write("<A HREF=http://www.yahoo.es target=home>Yahoo</A><br>"); msg.document.write("<A HREF=http://www.sunat.gob.pe target=home>SUNAT</A><br>"); msg.document.write("<A HREF=http://www.continental.edu.pe target=home>Continental</A><BR>"); } </script>
</HEAD> <BODY bgcolor="white"> <form>

<input type="button" value="Ver Enlaces en ventana emergente" onClick="Abreventana()">


</form> </body> </html>

Pg. 32

Asignatura: Ing. Web

2.4 Estructuras de programacin Java Script


CONDICIONALES: Operadores condicionales

Pg. 33

Asignatura: Ing. Web Estructura de una condicional:

Ejemplo: Pgina que pida dos nmeros y muestre el mayor de ellos: <html> <head> <title>Mayor de dos nmeros</title> <script language="javascript" > function Mayor() { var a,b; a= prompt('Ingrese primer nmero',''); b= prompt('Ingrese segundo nmero',''); if (a>b) alert('El mayor es:'+a); else alert('El mayor es:'+b); } </script> </head> <BODY> <FORM> <p> <label> <input type="button" name="boton1" id="boton1" value="Mayor" onClick="Mayor()"> </label> </p> </FORM> </BODY> </html> Pgina que pida tres nmeros y muestre el mayor de ellos: <html> <head> <title>Mayor de tres nmeros</title> <script language="javascript" > function Mayor3() { var a,b,c; a= prompt('Ingrese primer nmero',''); b= prompt('Ingrese segundo nmero',''); c= prompt('Ingrese tercer nmero',''); if (a>b && a>c) alert('El mayor es:'+a); Pg. 34

Asignatura: Ing. Web if (b>a && b>c) alert('El mayor es:'+b); if (c>a && c>b) alert('El mayor es:'+c); } </script> </head> <BODY> <FORM> <p> <label> <input type="button" name="boton1" id="boton1" value="Mayor" onClick="Mayor3()"> </label> </p> </FORM> </BODY> </html>

BUCLES:

Pgina que genera nmeros desde el cero hasta el nmero ingresado por prompt <html> <head> <title>Generar numeros</title> <script language="javascript" > function Generanumero() { var i, num = prompt('Ingrese hasta que numero deseas generar desde el cero:',''); for (i=0; i<=parseInt(num);i++) document.write(i+"<br>"); } </script> </head> <BODY> <FORM> <p> <label> <input type="button" name="boton1" id="boton1" value="Generar numeros" onClick="Generanumero()"> </label> </p> </FORM> </BODY> </html>

Pg. 35

Asignatura: Ing. Web Pgina que genera nmeros pares el cero hasta el nmero ingresado por prompt <html> <head> <title>Generar numeros</title> <script language="javascript" > function Pares() { var i, num = prompt('Ingrese hasta que numero deseas generar desde el cero:',''); for (i=0; i<=parseInt(num);i+=2) document.write(i+"<br>"); } </script> </head> <BODY> <FORM> <p> <label> <input type="button" name="boton1" id="boton1" value="Pares" onClick="Pares()"> </label> </p> </FORM> </BODY> </html> Realizar el mismo ejemplo con do: <html> <head> <title>Generar numeros</title> <script language="javascript" > function Generanumero() { var i=0, num = prompt('Ingrese hasta que numero deseas generar desde el cero:',''); do { document.write(i+"<br>"); i=i+1; } while(i<=parseInt(num)); } </script> </head> <BODY> <FORM> <p> <label> <input type="button" name="boton1" id="boton1" value="Generar numeros" onClick="Generanumero()"> </label> </p> </FORM> Pg. 36

Asignatura: Ing. Web </BODY> Con while <html> <head> <title>Generar numeros</title> <script language="javascript" > function Generanumero() { var i=0, num = prompt('Ingrese hasta que numero deseas generar desde el cero:',''); while(i<=parseInt(num)) { document.write(i+"<br>"); i=i+1; } } </script> </head> <BODY> <FORM> <p> <label> <input type="button" name="boton1" id="boton1" value="Generar numeros" onClick="Generanumero()"> </label> </p> </FORM> </BODY> </html> ACTIVIDADES

1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.

Pgina web que pida dos nmeros y muestre el menor de ellos Pgina web que pida tres nmeros y muestre el menor de ellos Pgina web que pida cuatro nmeros y muestre el menor de ellos Pgina web que pida cuatro nmeros y muestre el mayor de ellos Pgina web que pida tres nmeros y muestre el intermedio de ellos Pgina web que pida un nmero entre 1 y 7 y muestre el da de la semana, por ejemplo: al ingresar 1 que muestre hoy es lunes, al ingresar 2 que muestre hoy es martes. Pgina web que pida un nmero entre 1 y 12 y muestre el mes, por ejemplo: al ingresar 1 que muestre estamos en enero, al ingresar 2 que muestre estamos en febrero. Pgina web que pida tres nmeros y muestre el intermedio en valor de ellos Realizar una pgina web que genere nmeros impares Pgina web que imprima del 100 al 0 en ese mismo orden Realizar una pgina web que solicite un nmero y un nombre y repita el nombre el nmero de veces. Realizar una pgina web que genere nmeros mltiplos de 5 hasta el nmero ingresado Pgina web que muestre los mltiplos de 3 comprendidos entre los nmeros 1 y 20 Convertir todos los ejercicios anteriores en formularios Realizar una pgina que genere nmeros pares Realizar una pgina que genere nmeros impares Pg. 37

Asignatura: Ing. Web 17. Pgina que imprima del 100 al 0 en ese mismo orden 18. Realizar una pgina que solicite un nmero y un nombre y repita el nombre el nmero de veces. 19. Realizar una pgina que genere nmeros mltiplos de 5 hasta el nmero ingresado 20. Mostrar los mltiplos de 3 comprendidos entre los nmeros 1 y 20 21. Pgina que pida colores en RBG y los convierta en hexadecimal 22. Pgina que pida un nmero y muestre la suma de sus dgitos 23. Pgina que calcule el factorial de un nmero, por ejemplo de 4 es 4x3x2x1=24 24. Pgina que solicite dos nmeros de dos dgitos y lo sume, en caso no sea de dos dgitos que siga solicitando. 25. Una pgina que muestra el signo zodiacal de una persona. Para ello el usuario debe introducir nicamente el da y el mes de nacimiento y el programa determinar inmediatamente el signo zodiacal de la persona.

2.5 Controles Web


2.5.1. CONTROL: LISTA/MENU

SELECT: Sintaxis bsica <select name="nombre" size="3" multiple> <option value="valor 1">Texto de opcin 1</option> <option value="valor 2" selected>Texto de opcin 2</option> <option value="valor 3">Texto de opcin 3</option> <option value="valor 4">Texto de opcin 4</option> </select> Muestra (seleccin mltiple):
Texto de opcin 1 Texto de opcin 2 Texto de opcin 3
manteniendo apretada la tecla Ctrl (control) puede seleccionarse ms de una opcin

Muestra (seleccin simple):


Texto de opcin 1 Texto de opcin 2 Texto de opcin 3
valor de size "3"

Texto de opcin 4
valor de size "1" solo puede seleccionarse una opcin en cualquiera de los dos casos

Pg. 38

Asignatura: Ing. Web

SELECT: Mtodos del objeto mtodo descripcin focus coloca el foco en el select

SELECT: Eventos del objeto evento descripcin onFocus onBlur se produce al colocar el foco en el select se produce al abandonar el select (al quitar el foco)

onChange se produce al realizar un cambio de seleccin OPTION: Propiedades principales propiedad descripcin value text selected valor asociado a cada opcin del select. Es invisible al usuario pero es el valor que se enva junto al formulario. es el texto que ve el usuario que se encuentra contenido entre las etiquetas <option> y </option> indica si una opcin est seleccionada.

selectedIndex Da acceso a la opcin (option) que ha seleccionado el usuario. index length al igual que en form, o checkbox, este array contiene todas las opciones pertenecientes a un select y tambien comienza por 0. Cuenta la cantidad de opciones (option) que conforman un select

OPTION: Mtodos y eventos El objeto option no posee mtodos ni eventos propios. Sintaxis bsica general: llamando a las propiedades En la siguiente lista veremos la forma correcta de llamar a cada propiedad en ambos objetos. PROPIEDAD OBJETO SINTAXIS name size SELECT SELECT nombre_formulario.nombre_select.name nombre_formulario.nombre_select.size nombre_formulario.nombre_select.options[index]
se refiere a una opcin especfica

option

SELECT formulario.select.options[formulario.select.selectedIndex].pr opiedad

Pg. 39

Asignatura: Ing. Web

se refiere a la opcin seleccionada por el usuario

disabled multiple type

SELECT SELECT SELECT

nombre_formulario.nombre_select.disabled = true/false nombre_formulario.nombre_select.multiple = true/false nombre_formulario.nombre_select.type nombre_formulario.nombre_select.options[index].value


se refiere a una opcin especfica

value

OPTION

formulario.select.options[formulario.select.selectedIndex].va lue
se refiere a la opcin seleccionada por el usuario

text selected selectedIndex index length

OPTION OPTION OPTION OPTION OPTION

nombre_formulario.nombre_select.options[index].text nombre_formulario.nombre_select.options[index].selected = true/false formulario.select.options[formulario.select.selectedIndex].pr opiedad nombre_formulario.nombre_select.options[index] nombre_formulario.nombre_select.options.length

Ejemplos: Elaborar la siguiente pgina:

La lista depleglar los nombres de las ciudades de Lima, Huancayo, Arequipa y Cusco. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Ejemplo Select</title> </head>

<script languaje="javascript"> function habilitar(formu1) { if (formu1.ciudad[0].selected == true) {


Pg. 40

Asignatura: Ing. Web

formu1.mensaje.value=formu1.nombre.value+" vive en "+formu1.ciudad[0].value; } if (formu1.ciudad[1].selected == true) { formu1.mensaje.value=formu1.nombre.value+" vive en "+formu1.ciudad[1].value; } if (formu1.ciudad[2].selected == true) { formu1.mensaje.value=formu1.nombre.value+" vive en "+formu1.ciudad[2].value; } if (formu1.ciudad[3].selected == true) { formu1.mensaje.value=formu1.nombre.value+" vive en "+formu1.ciudad[3].value; } } </script>
<body> <form id="form1" name="formu1" method="post" action=""> <table width="550" border="0" cellspacing="10"> <tr> <td>Ingrese nombre:</td> <td><label> <input type="text" name="nombre" id="nombre" /> </label></td> </tr> <tr> <td>Seleccione ciudad</td> <td><label> <select name="ciudad" size="1" id="ciudad" > <option>Huancayo</option> <option>Lima</option> <option>Arequipa</option> <option>Cusco</option> </select> </label></td> </tr> <tr> <td colspan="2"><label> <div align="center">

Pg. 41

Asignatura: Ing. Web <input type="button" name="button" id="button" value="Mensaje" onclick="habilitar(this.form)" /> </div> </label></td> </tr> <tr> <td colspan="2"><div align="center"> <label> <input name="mensaje" type="text" id="mensaje" size="100" /> </label> </div></td> </tr> </table> <label></label> </form> </body> </html> 2.5.2. CONTROL: RADIO BUTTON/CHECKBOX

2.1 Propiedades de los objetos propiedad descripcin name Es el nombre que identifica a un checkbox a un grupo de radio buttons. Para que stos ltimos conserven la capacidad de seleccin nica, deben tener todos el mismo nombre. Es un valor asociado a cada checkbox o radio.

value

En el caso de los checkbox es til asignar a un grupo de stos con el mismo name distintos valores. Pero si se quieres acceder a las propiedades de cada checkbox separadamente mediante JavaScript, es mejor utilizar un name diferente para cada checkbox, ya que de lo contrario (si todos tienen el mismo name) la propiedad value resulta poco til.

En el caso de los radio buttons es una propiedad necesaria siempre al tener todos el mismo name, aunque para su acceso mediante JavaScript, esta propiedad no es muy til. disabled bloquea el checkbox o radio. Por lo tanto "No es enviado en el formulario" y "acta como si no existiese". marca o comprueba si est marcado un checkbox o un radio. Es una propiedad booleana (que solo admite verdadero o falso) en la cual su valor ser "true" (verdadero) si el objeto est marcado y "false" (falso) en caso que no lo est. es la cantidad de radio buttons que existe en un grupo determinado con el mismo name.
Pg. 42

checked

length

Asignatura: Ing. Web

array que contiene todos los radio buttons que hay en un grupo con el mismo nombre. Para un grupo de 5 radio buttons con mismo nombre y diferente valor cada uno, para referirnos al cuarto de ellos se debe usar la sintaxis: index

formulario.nombre_radio[3] 2.2 Principales eventos evento descripcin onFocus onBlur onClick Permite realizar una accin al poner el foco en el objeto. Permite realizar una accin cuando el foco ya no se encuentra en el objeto. Permite realizar una accin cuando se hace click sobre el objeto.

onChange Evento que se produce al marcar/desmarcar un checkbox o un radio button. 2.3 Sintaxis bsica Para un grupo de radio buttons (mismo nombre distinto valor) <input type="radio" name="color" value="rojo"> <input type="radio" name="color" value="verde"> Para un grupo de checkbox (mismo nombre distinto valor) <input type="checkbox" name="colores" value="rojo"> <input type="checkbox" name="colores" value="verde"> MUY IMPORTANTE: El nombre de todos los controles de los radio buttons y los checkbox deben ser lo mismo.
Ejemplo:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> Pg. 43

Asignatura: Ing. Web <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Ejemplo Select</title> </head> <script languaje="javascript">

function Mensaje(formu1) { if (formu1.radio2[0].checked == true) { formu1.mensaje.value=formu1.nombre.value+" vive en Huancayo"; } if (formu1.radio2[1].checked == true) { formu1.mensaje.value=formu1.nombre.value+" vive en Lima"; } if (formu1.radio2[2].checked == true) { formu1.mensaje.value=formu1.nombre.value+" vive en Arequipa"; } if (formu1.radio2[3].checked == true) { formu1.mensaje.value=formu1.nombre.value+" vive en Cusco"; } }
</script> <body> <form id="form1" name="formu1" method="post" action=""> <table width="550" border="0" cellspacing="10"> <tr> <td>Ingrese nombre:</td> <td><label> <input type="text" name="nombre" id="nombre" /> </label></td> </tr> <tr> <td>Seleccione ciudad</td> <td><label> <input type="radio" name="radio2" id="radio" value="radio1" /> Huancayo<br /> <input type="radio" name="radio2" id="radio2" value="radio2" /> Lima<br /> <input type="radio" name="radio2" id="radio3" value="radio3" /> Arequipa<br /> <input type="radio" name="radio2" id="radio4" value="radio4" /> Cusco </label></td> Pg. 44

Asignatura: Ing. Web </tr> <tr> <td colspan="2"><label> <div align="center">

<input type="button" name="button" id="button" value="Mensaje" onclick="Mensaje(this.form)" />


</div> </label></td> </tr> <tr> <td colspan="2"><div align="center"> <label> <input name="mensaje" type="text" id="mensaje" size="100" /> </label> </div></td> </tr> </table> <label></label> </form> </body> </html> ACTIVIDADES

1. Trabajando con la propiedad disabled Veremos el caso en que un usuario debe elegir un producto de una lista y la cantidad que desea comprar, de otra lista. Pero esto ltimo, solo podr hacerlo, si ya ha seleccionado un producto.

2. Elabore la calculadora con 5 operaciones mediante listas desplegables. 3. Elabore la calculadora con 5 operaciones mediante Radios. 4. Elabore un formulario donde se habilitarn o deshabilitarn los checkbox dependiendo de la opcin que seleccione el usuario de un grupo de dos radio buttons, por ejemplo al presionar SI deber habilitarse los checkbox caso contrario debern deshabilitarse.

Pg. 45

Asignatura: Ing. Web

Disear el siguiente formulario:

Ver el cdigo: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Formulario 1</title> <script language="javascript"> function Sumar(formulario1) { var a, b, s; a=parseInt(formulario1.a1.value); b=parseInt(formulario1.a2.value); s=a+b; formulario1.a4.value=s; } </script> </head> Pg. 46

Asignatura: Ing. Web <body> <form id="form1" name="formulario1" method="post" action=""> <table width="550" border="0" cellspacing="10"> <tr> <td>Ingrese primer nmero</td> <td><label> <input type="text" name="a1" id="a1" /> </label></td> </tr> <tr> <td>Ingrese segundo nmero</td> <td><label> <input type="text" name="a2" id="a2" /> <input type="button" name="a3" id="a3" value="Sumar" onclick="Sumar(this.form)"/> </label></td> </tr> <tr> <td>Resultado</td> <td><label> <input type="text" name="a4" id="a4" /> </label></td> </tr> </table> </form> </body> </html> A partir de este formulario crear una calculadora con botones de resta, multiplicacin, divisin, potencia y residuo. Buscar por Internet, 10 aplicaciones JavaScript para pginas web: por ejemplo, que abra ventanas emergentes, que cierren ventanas, que muestre mensajes en la barra de estado, ttulos de pginas en movimientos, etc.

Pg. 47

Asignatura: Ing. Web

SEGUNDA UNIDAD

Mtodos de desarrollo de la Ingeniera Web: Desarrollo, metodologas, tcnicas. Pruebas y calidad. Mtricas web
TEXTO N 3
Aplicaciones web con PHP

3.1 Instrucciones bsicas del PHP


EJERCICIO 01: <?php echo "Apache PHP MySQL<br>"; echo "Una gran alternativa"; ?>

EJERCICIO 02: <script language="PHP"> echo "Zend Studio<br>"; echo "Una gran herramienta"; </script>

EJERCICIO 03: <?php srand((double)microtime()*1000000); $nota = rand(0,20); echo "<h1>Nota: $nota</h1>"; if($nota<14){ ?> <h1>Estas Desaprobado.</h1> <?php } else{ ?> <h1>Felicitaciones Aprobaste.</h1> <?php } ?>

Pg. 48

Asignatura: Ing. Web EJERCICIO 04: <?php /* * Este ejemplo ilustra el uso de Comentarios * Como podemos observar son tres lo tipos */ echo "Ejemplos de Comentarios<br>"; echo "Feliz 2011<br>"; // Mensaje Ganador echo "Per Campen"; # Esperanza de todos los peruanos ?> EJERCICIO 05: <?php $nombre = "Miguel Cordova"; echo "Mi nombre es: ". $nombre; ?> EJERCICIO 06: <?php echo "<font face=Verdana>"; echo "<H1>Software Libre</H1>"; echo "<H3>Es la Alternativa</H3>"; echo "</font>"; ?> EJERCICIO 07: <?php $A = 10; $B = 15.5; $C = "MySQL la BD ms rpida"; printf("El valor de A es: %d<br>", $A); printf("Ahora relleno con ceros: %03d<br>", $A); printf("El valor de B es: %f<br>", $B); printf("Ahora relleno con ceros: %01.2f<br>", $B); printf("El valor de C es: %s<br>", $C); ?> EJERCICIO 08: <?php define("PI",3.141516); $radio = 5; $area = PI*$radio*$radio; echo "PI: " . PI . "<br>"; echo "Radio: $radio<br>"; echo "Area: $area"; ?>

EJERCICIO 09: <font face="Helvetica"> <body bgcolor="Silver" text="Navy"> <table border="1" width="400"> <tr> <th>Constante</th> Pg. 49

Asignatura: Ing. Web <th>Valor</th> </tr> <tr> <td>PHP_VERSION</td> <td><?php echo PHP_VERSION ?></td> </tr> <tr> <td>PHP_OS</td> <td><?php echo PHP_OS ?></td> </tr> </table> </body> </font>

EJERCICIO 10: <font face="Helvetica"> <?php $output = `dir`; echo "<pre>$output</pre>" ?> </font>

EJERCICIO 11: <font face="Helvetica"> <?php $cad1 = "PHP is "; $cad2 = "PowerFull."; echo $cad1.$cad2; ?> </font>

3.2 Formularios HTML (GET POST)


Los documentos web que conforman una aplicacin Web necesitan comunicarse entre s, una de las formas es utilizando formularios HTML que enva datos a un programa PHP, estos campos se convierten en variables, razn por la que se les denomina variables externas. Sintaxis en la pgina HTML:
<form method="POST/GET" action="destino"> Controles HTML </form>

Sintaxis en la pgina PHP: $_POST["NombreDelCampo"] $_GET["NombreDelCampo"] Habilitar en ON la directiva de REGISTER_GLOBALS en el archivo php.ini

Pg. 50

Asignatura: Ing. Web Ejemplo: Se tiene una pgina llamado calculosueldo.html que se muestra a continuacin

La cual debe procesar y mostrar la siguiente pgina sueldo.php. Impuesto a la renta 10% del total e impuesto solidaridad 1.7% del total:

//clculo de sueldo //calculosueldo.html <body bgcolor="#D2EBF7"> <h1>Clculo de Sueldo</h1> <form method="post" action="sueldo.php"> <b>Dias Trabajados:</b><input type="text" name="dt"><br> <b>Horas por Da:</b><input type="text" name="hd"><br> <b>Costo por Hora:</b><input type="text" name="ch"><br> <input type="submit" value="Enviar"> <input type="reset" value="Limpiar">

//sueldo.php <body bgcolor="#D2EBF7"> <?php $total = $_POST["dt"] * $_POST["hd"] * $_POST["ch"]; $ir = $total * 0.10; # Impuesto a la renta $is = $total * 0.017; # Impuesto de solidaridad $neto = $total - $ir - $is; ?> <h1>Clculo de Sueldo</h1> <table border=1 width=400> <tr> <th align=center colspan=2 border=0>Datos</th> </tr> <tr> Pg. 51

Asignatura: Ing. Web


</form> </body>

<td width=70%><b>Das trabajados</b></td> <td><?php echo $_POST["dt"] ?></td> </tr> <tr> <td><b>Horas por da</b></td> <td><?php echo $_POST["hd"] ?></td> </tr> <tr> <td><b>Costo por hora</b></td> <td><?php echo $_POST["ch"] ?></td> </tr> <tr> <th align=center colspan=2 border=0> Resultado </th> </tr> <tr> <td><b>Total</b></td> <td><?php echo $total ?></td> </tr> <tr> <td><b>Impuesto Renta</b></td> <td><?php echo $ir ?></td> </tr> <tr> <td><b>Impuesto Solidaridad</b></td> <td><?php echo $is ?></td> </tr> <tr> <td><b>Neto</b></td> <td><?php echo $neto ?></td> </tr> </table> <input type="button" value="Back" onClick="history.back()"> </body>

Ejercicio 12: Con la supervariable $_GET desarrolle el ejercicio anterior Ejercicio 13: Con la supervariable $_POST desarrolle un formulario que solicite dos nmeros (nmeros.html) para sumar en otra (suma.php)

Pg. 52

Asignatura: Ing. Web

3.3 Programas recursivos


Tambin es posible que el formulario (*.html) y el proceso (*.php) se encuentren en un mismo documento a estas aplicaciones se les denomina PROGRAMAS RECURSOS. Para programas recursivos, por medida de seguridad se recomienda emplear el mtodo POST aunque el posible realizar mediante el mtodo GET. En este caso CONTROL sera un campo oculto al usuario y permite verificar si se debe mostrar el formulario o procesar los datos. <?php if(!isset($_POST["control"])){ ?> <form method="post" action="destino.php"> // CODIGO DEL FORMULARIO EN HTML </form> <?php } else { //PROCESO DE CDIGO PHP } ?> </body> Ejemplo: Desarrolle un formulario que calcule el rea de un tringulo, el formulario y la accin deben programarse en el mismo formulario: //triangulo.php <body bgcolor="#D2EBF7">

<?php if(!isset($_POST["control"])){
Pg. 53

Asignatura: Ing. Web

?>
<h3>Calculo del Area de un Triangulo</h3> <form method="post" action="triangulo.php"> <input type="hidden" name="control" value="12345"> Base:<input type="text" name="base"><br> Altura:<input type="text" name="altura"><br> <input type="submit" value="Enviar"> </form>

<?php } else { $base = $_POST["base"]; $altura = $_POST["altura"]; $area = $base * $altura / 2; echo "<h3>Resultado</h3>"; echo "\$base = $base <br>"; echo "\$altura = $altura <br>"; echo "\$area = $area <br>"; echo "<a href='triangulo.php'>Nuevo Calculo</a>"; } ?>
</body> Ejercicio 14: Desarrolle el ejercicio 12 como un programa recursivo en PHP Ejercicio 15: Desarrolle el ejercicio 13 como un programa recursivo en PHP

3.4 Estructuras del lenguaje de programacin PHP


Las sintaxis de las estructuras son muy similares a lenguajes como Java, C o C++, para el desarrollo de las mismas se van a seguir el modelo de programacin recursiva, desarrollada en la clase anterior. Se recomienda en primer lugar realizar el diseo en HTML para luego incrustar los cdigos del PHP. Las estructuras condicionales son: CONDICIONALES: If:

Pg. 54

Asignatura: Ing. Web If-else:

Ifelse: Esta ltima prctica no es recommendable en la Ing. Web por la poca claridad en su estructura.

Switch:

REPETITIVAS: While: Do-While:

For: Similar a C++, es posible emplear las instrucciones break y continue.

3.5 Estrategias de programacin segn destino de resultados


Al programar en formularios web encontramos que los destinos de los resultados puede ser en el mismo formulario, es decir en la misma pgina o en una nueva pgina.

Pg. 55

Asignatura: Ing. Web

RESULTADOS EN UNA MISMA PGINA:


Desarrollar las siguientes pginas y mostrar los resultados en una misma pgina Los resultados se muestran en un mismo formulario BLOQUE PHP BLOQUE HTML EJERCICIO 01:

<?php //Variables $n1 = 0; $n2 = 0; $s = 0; if(isset($_POST["btnCalcular"])) { //Entrada $n1 = (int)$_POST["txtn1"]; $n2 = (int)$_POST["txtn2"]; //Proceso $s = $n1 + $n2; } ?> <html> <head> <title>Problema 01</title> <style type="text/css"> <!-.TextoFondo { background-color: #CCFFFF; } --> </style> </head> <body> <form method="post" action="Problema01.php"> <table width="241" border="0"> <tr> <td colspan="2"><strong>Problema 01</strong> </td> </tr> <tr> <td width="81">Numero 1 </td> <td width="150"> <input name="txtn1" type="text" id="txtn1" value="<?=$n1?>" /> </tr> <tr>

</td>

Pg. 56

Asignatura: Ing. Web <td>Numero 2 </td> <td> <input name="txtn2" type="text" id="txtn2" value="<?=$n2?>"/> </tr>

</td>

<tr> <td>Suma</td> <td> <input name="txts" type="text" class="TextoFondo" id="txts" value="<?=$s?>"/> </td> </tr> <tr> <td>&nbsp;</td> <td> <input name="btnCalcular" type="submit" id="btnCalcular" value="Calcular" /> </td> </tr> </table> </form> </body> </html>

EJERCICIO 02:

<?php //Variables $n1 = 0; $n2 = 0; $m = 0; if(isset($_POST["btnCalcular"])) { //Entrada $n1 = $_POST["txtn1"]; $n2 = $_POST["txtn2"]; //Proceso if($n1 > $n2) $m = $n1; if($n2 > $n1) $m = $n2; } ?> <html> <head> <title>Problema 11</title> <style type="text/css"> Pg. 57

Asignatura: Ing. Web <!-.TextoFondo { background-color: #CCFFFF; } --> </style> </head> <body> <form method="post" action="Problema02.php"> <table width="236" border="0"> <tr> <td colspan="2"><strong>Problema 11</strong> </td> </tr> <tr> <td width="75">Numero 1 </td> <td width="151"> <input name="txtn1" type="text" id="txtn1" value="<?=$n1?>" /> </td> </tr> <tr> <td>Numero 2 </td> <td> <input name="txtn2" type="text" id="txtn2" value="<?=$n2?>"/> </td> </tr> <tr> <td>Mayor</td> <td><input name="txtm" type="text" class="TextoFondo" id="txtm" value="<?=$m?>"></td> </tr> <tr> <td>&nbsp;</td> <td> <input name="btnCalcular" type="submit" id="btnCalcular" value="Calcular" /> </td> </tr> </table> </form> </body> </html> EJERCICIO 03:

<?php //Variables $d = 0; $m = 0; $e = ""; if(isset($_POST["btnCalcular"])) { //Entrada $d = (int)$_POST["txtd"]; Pg. 58

Asignatura: Ing. Web $m = (int)$_POST["txtm"]; //Proceso switch($m){ case 1: case 2: case 3: $e = "VERANO"; if($m == 3 && $d > 20) $e = "OTOO"; break; case 4: case 5: case 6: $e = "OTOO"; if($m == 6 && $d > 21) $e = "INVIERNO"; break; case 7: case 8: case 9: $e = "INVIERNO"; if($m == 9 && $d > 22) $e = "PRIMAVERA"; break; case 10: case 11: case 12: $e = "PRIMAVERA"; if($m == 12 && $d > 20) $e = "VERANO"; break; } } ?> <html> <head> <title>Problema 32</title> <style type="text/css"> <!-.TextoFondo { background-color: #CCFFFF; } --> </style> </head> <body> <form method="post" action="Problema03.php"> Pg. 59

Asignatura: Ing. Web <table width="241" border="0"> <tr> <td colspan="2"><strong>Problema 32</strong> </td> </tr> <tr> <td width="81">Dia</td> <td width="150"> <input name="txtd" type="text" id="txtd" value="<?=$d?>" /> </td> </tr> <tr> <td>Mes</td> <td><input name="txtm" type="text" id="txtm" value="<?=$m?>" /></td> </tr> <tr> <td>Estacion</td> <td><input name="txte" type="text" class="TextoFondo" id="txte" value="<?=$e?>"/></td> </tr> <tr> <td>&nbsp;</td> <td> <input name="btnCalcular" type="submit" id="btnCalcular" value="Calcular" /> </td> </tr> </table> </form> </body> </html> EJERCICIO 04: Cuenta nmero de pares

<?php //Variables $i = 0;$ni = 0;$nf = 0; $cp = 0; if(isset($_POST["btnCalcular"])) { //Entrada $ni = (int)$_POST["txtni"]; $nf = (int)$_POST["txtnf"]; //Proceso $i = $ni + 1; while($i < $nf){ if($i % 2 == 0){ $cp += 1; } $i++; Pg. 60

Asignatura: Ing. Web } } ?> <html> <head> <title>Problema 43</title> <style type="text/css"> <!-.TextoFondo { background-color: #CCFFFF; } --> </style> </head> <body> <form method="post" action="Problema04.php"> <table width="288" border="0"> <tr> <td colspan="2"><strong>Problema 43</strong> </td> </tr> <tr> <td width="87">Num. Inicial </td> <td width="144"> <input name="txtni" type="text" id="txtni" value="<?=$ni?>" /> </td> </tr> <tr> <td>Num. Final </td> <td><input name="txtnf" type="text" id="txtnf" value="<?=$nf?>" /></td> </tr> <tr> <td>Cant. Pares </td> <td><input name="txtcp" type="text" class="TextoFondo" id="txtcp" value="<?=$cp?>" /></td> </tr> <tr> <td>&nbsp;</td> <td> <input name="btnCalcular" type="submit" id="btnCalcular" value="Calcular" /> </td> </tr> </table> </form> </body> </html>

Pg. 61

Asignatura: Ing. Web EJERCICIO 05:

<?php //Variables $nb = 0; $p = 0; $i = 0; $r = ""; //Arreglos $n = array(); if(isset($_POST["btnCalcular"])) { //Entrada $n[0] = (int)$_POST["txtn1"]; $n[1] = (int)$_POST["txtn2"]; $n[2] = (int)$_POST["txtn3"]; $n[3] = (int)$_POST["txtn4"]; $n[4] = (int)$_POST["txtn5"]; $nb = (int)$_POST["txtnb"]; //Proceso $r = "NO EXISTE"; $p = -1; for($i = 0 ; $i <= count($n) -1; $i++) { if($n[$i] == $nb){ $r = "EXISTE"; $p = $i; break; } } } ?> <html> <head> <title>Problema 75</title> <style type="text/css"> <!-.TextoFondo { Pg. 62

Asignatura: Ing. Web background-color: #CCFFFF; } --> </style> </head> <body> <form method="post" action="Problema05.php"> <table width="184" border="0"> <tr> <td colspan="2"><strong>Problema 75</strong> </td> </tr> <tr> <td width="99">Numero 1 </td> <td width="75"> <input name="txtn1" type="text" id="txtn1" value="<?=$n[0]?>" size="5" /> </td> </tr> <tr> <td>Numero 2 </td> <td><input name="txtn2" type="text" id="txtn2" value="<?=$n[1]?>" size="5" /></td> </tr> <tr> <td>Numero 3 </td> <td><input name="txtn3" type="text" id="txtn3" value="<?=$n[2]?>" size="5" /></td> </tr> <tr> <td>Numero 4 </td> <td><input name="txtn4" type="text" id="txtn4" value="<?=$n[3]?>" size="5" /></td> </tr> <tr> <td>Numero 5 </td> <td><input name="txtn5" type="text" id="txtn5" value="<?=$n[4]?>" size="5" /></td> </tr> <tr> <td>Num. a buscar </td> <td><input name="txtnb" type="text" id="txtnb" value="<?=$nb?>" size="5" /></td> </tr> <tr> <td>Respuesta</td> <td><input name="txtr" type="text" class="TextoFondo" id="txtr" value="<?=$r?>" size="10" /></td> </tr> <tr> <td>Posicion</td> <td><input name="txtp" type="text" class="TextoFondo" id="txtp" value="<?=$p?>" size="5" /></td> </tr> <tr> <td>&nbsp;</td> <td> <input name="btnCalcular" type="submit" id="btnCalcular" value="Calcular" /> </td> Pg. 63

Asignatura: Ing. Web </tr> </table> </form> </body> </html> EJERCICIO 06:

<?php //Variables $f = ""; $l = ""; $c = 0; $i = 0; if(isset($_POST["btnCalcular"])) { //Entrada $f = $_POST["txtf"]; $l = $_POST["txtl"]; //Proceso for($i = 0;$i<=strlen($f)-1;$i++){ if(substr(strtoupper($f),$i,1) == strtoupper($l)) $c++; } } ?> <html> <head> <title>Problema 93</title> <style type="text/css"> <!-.TextoFondo { background-color: #CCFFFF; } --> </style> </head> <body> <form method="post" action="Problema06.php"> <table width="344" border="0"> Pg. 64

Asignatura: Ing. Web

<tr> <td colspan="2"><strong>Problema 93</strong> </td> </tr> <tr> <td width="86">Frase</td> <td width="172"><textarea name="txtf" cols="40" rows="5" id="txtf"><?=$f?></textarea></td> </tr> <tr> <td>Letra</td> <td><input name="txtl" type="text" id="txtl" value="<?=$l?>" /> </td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>Cantidad</td> <td><input name="txtc" type="text" class="TextoFondo" id="txtc" value="<?=$c?>" /></td> </tr> <tr> <td>&nbsp;</td> <td> <input name="btnCalcular" type="submit" id="btnCalcular" value="Calcular" /> </tr> </table> </form> </body> </html> EJEMPLO 7:

</td>

<?php //Variables $f1 = ""; $f2 = ""; $c = ""; $i = 0; $p = 0; Pg. 65

Asignatura: Ing. Web

if(isset($_POST["btnCalcular"])) { //Entrada $f1 = $_POST["txtf1"]; //Proceso $p = 0; $f1 = trim($f1); for($i = 0; $i<strlen($f1); $i++){ $c = substr($f1,$i,1); if($c != " ") { $c = chr(ord($c) + 1); } $f2 .= $c; } } ?> <html> <head> <title>Problema 95</title> <style type="text/css"> <!-.TextoFondo { background-color: #CCFFFF; } --> </style> </head> <body> <form method="post" action="Problema95.php"> <table width="344" border="0"> <tr> <td colspan="2"><strong>Problema 95</strong> </td> </tr> <tr> <td width="86">Frase</td> <td width="172"><textarea name="txtf1" cols="40" rows="5" id="txtf1"><?=$f1?></textarea></td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>Frase encriptada </td> <td><textarea name="txtf2" cols="40" rows="5" class="TextoFondo" id="txtf2"><?=$f2?> </textarea></td> </tr> <tr> <td>&nbsp;</td> Pg. 66

Asignatura: Ing. Web <td> <input name="btnCalcular" type="submit" id="btnCalcular" value="Calcular" /> </tr> </table> </form> </body> </html>

</td>

RESULTADOS EN OTRA PGINA:


Desarrollar lo siguiente y mostrar los resultados en otra pgina los resultados. En este caso notar la similitud con la estructura de la programacin recursiva, vista en la clase anterior. Los resultados se muestran en una nueva pgina BLOQUE HTML

BLOQUE PHP

Ejemplo 8: Seleccionar la ciudad y deber mostrar en otra pgina un mensaje descriptivo de la ciudad.

//ejemplo8.php <body bgcolor="#D2EBF7"> <?php if(!isset($_POST["ciudad"])){ ?> <h3>Conoce el Per</h3> <form method = "post" action = "ejemplo8.php"> <b>Ciudad a visitar:</b> <select size="1" name="ciudad"> <option value="1">Chiclayo</option> <option value="2">Trujillo</option> <option value="3">Cajamarca</option> <option value="4">Iquitos</option> <option value="5">Huaraz</option> <option value="6">Huancayo</option> <option value="7">Arequipa</option> <option value="8">Cuzco</option> </select> <br><input type="submit" value="Enviar"> </form> <?php } Pg. 67

Asignatura: Ing. Web else{ $ciudad = $_POST["ciudad"]; echo "Ciudad seleccionada: $ciudad<br>"; switch($ciudad){ case 1: echo "Chiclayo, ciudad de la amistad."; break; case 2: echo "Trujillo, ciudad de la eterna primavera."; break; case 3: echo "Cajamarca, simplemente una ciudad espectacular."; break; case 4: echo "Iquitos, no te podras olvidar de sus encantos"; break; case 5: echo "Huaraz, sus nevados son impresionantes."; break; case 6: echo "Huancayo, ciudad INCONTRASTABLE."; break; case 7: echo "Arequipa, lo mejor es su gente."; break; case 8: echo "Cuzco, quedaras encantado."; break; } echo "<br><a href='ejemplo8.php'>Nueva Seleccin</a>"; } ?> </body> Ejemplo 9:

//ejemplo9.php <body bgcolor="#D2EBF7"> <?php if(!isset($_POST["seguro"])){ ?> <h2>Nmero Primo</h2> <form method = "post" action = "ejemplo9.php"> Nmero <input type="text" name="n" size="2" maxlength="2"> Pg. 68

Asignatura: Ing. Web <input type="hidden" name="seguro" value="12345"> <input type="submit" value="Enviar"> </form> <?php } else{ $n = (int)$_POST["n"]; $esPrimo = 1; $k = 2; while ($k < $n And $esPrimo == 1) { if (($n % $k) == 0) { $esPrimo = 0; } $k ++; } if ($esPrimo == 1){ $msg = "Primo"; } else { $msg = "No es Primo"; } echo "Nmero: $n <br>"; echo "Condicin: $msg <br>"; echo "<a href='ejemplo9.php'>Nueva Prueba</a>"; } ?> </body> Ejercicio 10

//ejemplo10.php <body bgcolor="#D2EBF7"> <h2>Serie de Fibonacci</h2> <table> <tr> <td valign="top" width = "100"> <form method = "post" action = "ejemplo10.php"> N <input type="text" name="n" size="2" maxlength="2"><br> <input type="submit" value="Enviar"> </form> </td> <td valign="top" width="250"> <?php if( isset($_POST["n"]) ) { $n = $_POST["n"]; if ($n <= 2){ echo "Debe ingresar un nmero mayor que 2."; } else { $cad = "0 1"; $a = 0; $b = 1; Pg. 69

Asignatura: Ing. Web for( $k = 3; $k <= $n; $k++ ) { $c = $a + $b; $cad .= " $c"; $a = $b; $b = $c; } echo "N: $n <br>"; echo "Serie: <br>"; echo "<textarea name='resultado' rows='4' cols='20' readonly='true'>"; echo $cad; echo "</textarea>"; } } ?> </td> </tr> </table> </body> Desarrollar las siguientes prcticas propuestas: Prctica 01:

Prctica 02:

Pg. 70

Asignatura: Ing. Web Prctica 03:

Prctica 04:

Prctica 05:

Pg. 71

Asignatura: Ing. Web Prctica 06:

Prctica 07:

Prctica 08:

Pg. 72

Asignatura: Ing. Web

TEXTO N 4
Frameworks

4.1 FRAMEWORK
Mientras ms tiempo pasamos programando ms clases, funciones y herramientas vamos acumulando, hasta llegar al punto en que tenemos un sistema que aplicamos a cualquier proyecto. El problema con esto es que generalmente tenemos una especie de Frankestein que est hecho de muchas partes (de terceros o programados por nosotros mismos), lo cual implica que sea difcil tenerlo actualizado y funcionando en forma correcta y segura. Los frameworks, como su nombre lo indica, nos entregan una estructura, armazn o marco para desarrollar nuestros proyectos. En otras palabras, nos entregan una serie de clases, funciones o libreras, que junto a convenciones comunes, se organizan bajo una estructura sobre la cual desarrollamos nuestros proyectos. Entre las ventajas de usar frameworks, se pueden contar:

Facilita integrar a otras personas a tus proyectos ya que se comparten convenciones de desarrollo comunes. No nos preocupamos de mantener actualizadas las distintas partes. No reinventar la rueda, ya que aprovechamos los componentes existentes aumentando la velocidad de desarrollo.

Como desventajas se pueden nombrar:


Agrega cdigo adicional que no es tuyo. Hay que invertir tiempo en aprender a usarlos. En algunos casos una aplicacin desarrollada con un framework puede ser ms lenta (en cuanto a rendimiento) que una diseada y desarrollada desde cero.

Scripts y sistemas Framework creados en PHP, que permiten el desarrollo de nuevos proyectos con la ayuda de programas, mdulos, libreras y lenguaje de scripting. Zend Framework http://framework.zend.com/ Symfony (recomendado) http://www.symfony-project.org/
CakePHP Saturn http://www.saturncms.com/

Pg. 73

Asignatura: Ing. Web

Fusebox http://php-fusebox.sourceforge.net/ Eclipse http://www.eclipse.org/ Otros: Yii Codelgniter PHPDevShell Prado Akelos Zoop QPHP

4.2 ZEND FRAMEWORK


Zend Framework se trata de un framework para desarrollo de aplicaciones Web y servicios Web con PHP, te brinda soluciones para construir sitios web modernos, robustos y seguros. Adems es Open Source y trabaja con PHP 5, a diferencia de otros framework que trabaja con PHp 4 y PHP 5

A Zend Framework le veo una ventaja y es que es desarrollado por Zend que es la empresa que respalda comercialmente a PHP, pero repasemos sus principales caractersticas:

Trabaja con MVC (Model View Controller) Cuenta con mdulos para manejar archivos PDF, canales RSS, Web Services (Amazon, Flickr, Yahoo), etc El Marco de Zend tambin incluye objetos de las diferentes bases de datos, por lo que es extremadamente simple para consultar su base de datos, sin tener que escribir ninguna consulta SQL. Una solucin para el acceso a base de datos que balancea el ORM con eficiencia y simplicidad. Podemos ver esta funcin en el futuro. Completa documentacin y tests de alta calidad. Soporte avanzado para i18n (internacionalizacin). Un buscador compatible con Lucene. Robustas clases para autenticacin y filtrado de entrada. Clientes para servicios web, incluidos Google Data APIs y StrikeIron. Muchas otras clases tiles para hacerlo tan productivo como sea posible.

En la actualidad, se dispone de varios framework, cada una con una serie de potencialidades con respecto a la otra. Algunos sitios donde podras revisar de comparativas: http://pwneds.blogspot.com/2007/11/comparacion-de-10-frameworks-de-php.html http://www.phpframeworks.com/top-10-php-frameworks/ http://www.phpframeworks.com/
Pg. 74

Asignatura: Ing. Web

4.3 Instalar Zend Framework


Para instalar, se descarga el archivo zip o gzip del Zend Framework, luego de ello copiamos el directorio library dentro de c-xampp-helpdesk, directorio desde donde levantaremos todas las librerias. Luego de ello aadimos la siguiente lnea en el fichero de configuracin php.ini dentro del servidor web APACHE, adems de los ficheros php.ini en php5.ini en PHP. include_path=".;c:\xampp\htdocs\helpdesk\library\" Para verificar que se est teniendo acceso a la librera del Zend Framework procederemos a crear una pgina de ejemplo y lo guardaremos como index.php en c-xampp-helpdesk-public <?php require_once('Zend/Acl.php'); $acl = new Zend_Acl(); echo "Hola Mundo"; ?> Deber mostrar un resultado similar a este, para verificar su funcionamiento:

4.4 Paradigma de la Ingeniera Web - MVC Los cdigos anteriores de consulta y acceso a base de datos realizados anteriormente, son fcil de escribir y rpido de ejecutar, pero muy difcil de mantener y actualizar. Los principales problemas del cdigo anterior son:

No existe proteccin frente a errores (qu ocurre si falla la conexin con la base de datos?). El cdigo HTML y el cdigo PHP estn mezclados en el mismo archivo e incluso en algunas partes estn entrelazados. El cdigo solo funciona si la base de datos es MySQL.

Pg. 75

Asignatura: Ing. Web

En vista de ello la Ingeniera Web ha previsto el Modelo Vista Controlador (MVC) es un patrn de arquitectura que naci en Smalltalk por los aos 80 y se hizo muy popular en las aplicaciones (y frameworks) webs de los ltimos aos. Consiste en la separacin del sistema en tres partes el modelo, la vista y el controlador.

Modelo: es la parte que maneja los datos (teniendo en cuenta que los datos estn en una base de datos) y el modelo de negocio de la aplicacin. Vista: representa la interfaz de usuario. En la web seran los HTML o XML que se retornaran del request. Controlador: es la parte que gestiona que vista mostrar en cada pedido accediendo al modelo para tomar los datos correspondientes.
Flujo

Aunque se pueden encontrar diferentes implementaciones de MVC, el flujo que sigue el control generalmente es el siguiente: 1. El usuario interacta con la interfaz de usuario de alguna forma (por ejemplo, el usuario pulsa un botn, enlace, etc.) 2. El controlador recibe (por parte de los objetos de la interfaz-vista) la notificacin de la accin solicitada por el usuario. El controlador gestiona el evento que llega, frecuentemente a travs de un gestor de eventos (handler) o callback. 3. El controlador accede al modelo, actualizndolo, posiblemente modificndolo de forma adecuada a la accin solicitada por el usuario (por ejemplo, el controlador actualiza el carro de la compra del usuario). Los controladores complejos estn a menudo estructurados usando un patrn de comando que encapsula las acciones y simplifica su extensin. 4. El controlador delega a los objetos de la vista la tarea de desplegar la interfaz de usuario. La vista obtiene sus datos del modelo para generar la interfaz apropiada para el usuario donde se reflejan los cambios en el modelo (por ejemplo, produce un listado del contenido del carro de la compra). El modelo no debe tener conocimiento directo sobre la vista. Sin embargo, se podra utilizar el patrn Observador para proveer cierta indireccin entre el modelo y la vista, permitiendo al modelo notificar a los interesados de cualquier cambio. Un objeto vista puede
Pg. 76

Asignatura: Ing. Web

registrarse con el modelo y esperar a los cambios, pero aun as el modelo en s mismo sigue sin saber nada de la vista. El controlador no pasa objetos de dominio (el modelo) a la vista aunque puede dar la orden a la vista para que se actualice. Nota: En algunas implementaciones la vista no tiene acceso directo al modelo, dejando que el controlador enve los datos del modelo a la vista. 5. La interfaz de usuario espera nuevas interacciones del usuario, comenzando el ciclo nuevamente.
El controlador

ZF usa el patrn Front Controller para determinar que controlador tiene que ser procesado. Nosotros nos tenemos que encargar de crear los distintos controladores. Crear un controlador es crear una clase con un nombre determinado que extienda de Zend_Controller_Action y crear uno o varios mtodos que sern ejecutados.
La Vista

En el cdigo vimos que sin escribir nada en el controlador, se procesaba un template. Esto lo hace ZF por defecto, usando un helper del controlador llamado ViewRenderer. Ahora vamos a ver como se asigna desde el controlador a la vista.
Y el modelo?

El modelo de un sitio es quizas la parte ms compleja, lo veremos en el siguiente ejemplo. EJEMPLO 1:


ZF trata de no usar archivos de configuracin como XML, sino a travs de mtodos y otros recursos de la programacin orientada a objetos. Van a notar que los cdigos no cierran con la etiqueta ?>, esto es para no dejar ninguna salida al navegador sin querer. Esta es una de las buenas prcticas que podemos aprender por ser la misma empresa que principalmente soporta ZF y PHP

Estructura de carpetas
Esta estructura es un ejemplo de lo que acabo de decir, puede ser configurada a gusto.
Carpetas

app/ controllers/ IndexController.php views/ scripts/ index/ index.phtml lib/

Pg. 77

Asignatura: Ing. Web


Zend/ public/ .htaccess index.php
Carpeta por carpeta

app/ Aqui van los cdigos PHP propios de la aplicacin y los scripts (templates) del HTML. lib/ Librerias. El ZF se descomprime en esta carpeta (manteniendo la carpeta Zend). public/ Este es el root del sitio. Aca se deberian poner las carpetas de imgenes, JavaScripts, CSS, etctera. app/controllers/ Los objetos controladores. app/views/ Objetos y scripts de la vista. app/views/scripts/ Scripts HTML. Cdigos:
public/.htaccess Un fichero .htaccess (hypertext access), tambin conocido como archivo de configuracin distribuida, es un fichero especial, popularizado por el Servidor Web Apache que nos permite definir diferentes directivas de configuracin para cada directorio (con sus respectivos subdirectorios) sin necesidad de editar el archivo de configuracin principal de Apache. RewriteEngine on RewriteRule !\.(js|ico|gif|jpg|png|css)$ index.php public/index.php

1. <?php 2. 3. // Agregamos el directorio donde se encuentra la carpeta Zend/ con todo el ZF 4. set_include_path( 5. get_include_path() . PATH_SEPARATOR 6. . '../lib/' 7. ); 8. 9. // Dejamos que Zend maneje el include de las clases 10. // por que registra la funcion __autoload 11. require_once 'Zend/Loader.php'; 12. Zend_Loader::registerAutoload(); 13. 14. // Ejecutamos la app 15. Zend_Controller_Front::run('../app/controllers');
app/controllers/IndexController.php

1. <?php 2. 3. class IndexController extends Zend_Controller_Action 4. { 5. public function indexAction() 6. { 7. // no ponemos nada, el Zend_Controller_Action se encarga de crear 8. // la vista y el viewRenderer se encarga de ejecutarla 9. } 10. }

Pg. 78

Asignatura: Ing. Web


app/views/scripts/index/index.pthml

1. <!DOCTYPE html PUBLIC "//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dt d"> 2. <html> 3. <head> 4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 5. <title>ZF</title> 6. </head> 7. <body> 8. Bienvenido al ZF 9. </body> 10. </html> Por ahora, podemos ejecutar el sitio sin modelo y con muy pocas lneas de cdigo.
http://localhost/helpdesk/app/views/scripts/index/

TEXTO N 5
Gestor de Base de datos para aplicaciones web

5.1 SBGD MySQL

Listado y descripcin de los distintos tipos de datos de MySQL. Por Carlos Luis Cuenca
Atencin: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

Despus de la fase de diseo de una base de datos, y una vez se ha realizado el paso a tablas del mismo, en necesario crear las tablas correspondientes dentro de la base de datos. Para cada campo de cada una de las tablas, es necesario determinar el tipo de datos que contiene, para de esa forma ajustar el diseo de la base de datos, y conseguir un almacenamiento ptimo con la menor utilizacin de espacio. El presente artculo describe cada uno de los tipos de datos que puede tener un campo en Mysql, para la versin 4.xx.xx. Los tipos de datos que puede haber en un campo, se pueden agrupar en tres grandes grupos: 1. Tipos numricos 2. Tipos de Fecha 3. Tipos de Cadena

Pg. 79

Asignatura: Ing. Web

1 Tipos numricos: Existen tipos de datos numricos, que se pueden dividir en dos grandes grupos, los que estn en coma flotante (con decimales) y los que no. TinyInt: es un nmero entero con o sin signo. Con signo el rango de valores vlidos va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255 Bit Bool: un nmero entero que puede ser 0 1 SmallInt: nmero entero con o sin signo. Con signo el rango de valores va desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535. MediumInt: nmero entero con o sin signo. Con signo el rango de valores va desde 8.388.608 a 8.388.607. Sin signo el rango va desde 0 a16777215. Integer, Int: nmero entero con o sin signo. Con signo el rango de valores va desde 2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295 BigInt: nmero entero con o sin signo. Con signo el rango de valores va desde 9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va desde 0 a 18.446.744.073.709.551.615. Float: nmero pequeo en coma flotante de precisin simple. Los valores vlidos van desde -3.402823466E+38 a -1.175494351E-38, 0 y desde 1.175494351E-38 a 3.402823466E+38. xReal, Double: nmero en coma flotante de precisin doble. Los valores permitidos van desde -1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y desde 2.2250738585072014E-308 a 1.7976931348623157E+308 Decimal, Dec, Numeric: Nmero en coma flotante desempaquetado. El nmero se almacena como una cadena Tamao de Tipo de Campo Almacenamiento TINYINT 1 byte SMALLINT MEDIUMINT INT INTEGER BIGINT FLOAT(X) FLOAT DOUBLE DOUBLE PRECISION 2 bytes 3 bytes 4 bytes 4 bytes 8 bytes 4 8 bytes 4 bytes 8 bytes 8 bytes

Pg. 80

Asignatura: Ing. Web

REAL

8 bytes

M+2 bytes s D > DECIMAL(M,D 0, M+1 bytes s D =0 M+2 bytes if D > NUMERIC(M,D) 0, M+1 bytes if D =0

2 Tipos fecha: A la hora de almacenar fechas, hay que tener en cuenta que Mysql no comprueba de una manera estricta si una fecha es vlida o no. Simplemente comprueba que el mes esta comprendido entre 0 y 12 y que el da esta comprendido entre 0 y 31. Date: tipo fecha, almacena una fecha. El rango de valores va desde el 1 de enero del 1001 al 31 de diciembre de 9999. El formato de almacenamiento es de ao-mes-dia DateTime: Combinacin de fecha y hora. El rango de valores va desde el 1 de enero del 1001 a las 0 horas, 0 minutos y 0 segundos al 31 de diciembre del 9999 a las 23 horas, 59 minutos y 59 segundos. El formato de almacenamiento es de ao-mes-dia horas:minutos:segundos TimeStamp: Combinacin de fecha y hora. El rango va desde el 1 de enero de 1970 al ao 2037. El formato de almacenamiento depende del tamao del campo: Tamao Formato AoMesDiaHoraMinutoSegundo 14 aaaammddhhmmss 12 8 6 4 2 AoMesDiaHoraMinutoSegundo aammddhhmmss oMesDia aaaammdd AoMesDia aammdd AoMes aamm Ao aa

Time: almacena una hora. El rango de horas va desde -838 horas, 59 minutos y 59 segundos a 838, 59 minutos y 59 segundos. El formato de almacenamiento es de 'HH:MM:SS' Year: almacena un ao. El rango de valores permitidos va desde el ao 1901 al ao 2155. El campo puede tener tamao dos o tamao 4 dependiendo de si queremos almacenar el ao con dos o cuatro dgitos. Tipo de Tamao de Campo Almacenamiento DATE DATETIME 3 bytes 8 bytes
Pg. 81

Asignatura: Ing. Web

TIMESTAMP TIME YEAR

4 bytes 3 bytes 1 byte

3 Tipos de cadena: Char(n): almacena una cadena de longitud fija. La cadena podr contener desde 0 a 255 caracteres. VarChar(n): almacena una cadena de longitud variable. La cadena podr contener desde 0 a 255 caracteres. Dentro de los tipos de cadena se pueden distinguir otros dos subtipos, los tipo Text y los tipo BLOB (Binary large Object) La diferencia entre un tipo y otro es el tratamiento que reciben a la hora de realizar ordenamientos y comparaciones. Mientras que el tipo test se ordena sin tener en cuenta las Maysculas y las minsculas, el tipo BLOB se ordena tenindolas en cuenta. Los tipos BLOB se utilizan para almacenar datos binarios como pueden ser ficheros incluyendo imgenes. TinyText y TinyBlob: Columna con una longitud mxima de 255 caracteres. Blob y Text: un texto con un mximo de 65535 caracteres. MediumBlob y MediumText: un texto con un mximo de 16.777.215 caracteres. LongBlob y LongText: un texto con un mximo de caracteres 4.294.967.295. Hay que tener en cuenta que debido a los protocolos de comunicacin los paquetes pueden tener un mximo de 16 Mb. Enum: campo que puede tener un nico valor de una lista que se especifica. El tipo Enum acepta hasta 65535 valores distintos Set: un campo que puede contener ninguno, uno varios valores de una lista. La lista puede tener un mximo de 64 valores. Tipo de campo Tamao de Almacenamiento CHAR(n) VARCHAR(n) TINYBLOB, TINYTEXT BLOB, TEXT MEDIUMBLOB, MEDIUMTEXT LONGBLOB, LONGTEXT n bytes n +1 bytes Longitud+1 bytes Longitud +2 bytes Longitud +3 bytes Longitud +4 bytes
Pg. 82

Asignatura: Ing. Web

ENUM('value1','value2',...) SET('value1','value2',...)

1 dos bytes dependiendo del nmero de valores 1, 2, 3, 4 8 bytes, dependiendo del nmero de valores

Diferencia de almacenamiento entre los tipos Char y VarChar Almace Almace Valor CHAR(4) VARCHAR(4) namiento namiento '' 'ab' 'abcd' 'abcdefgh' '' 'ab ' 'abcd' 'abcd' 4 bytes 4 bytes 4 bytes 4 bytes " 'ab' 'abcd' 'abcd' 5 bytes 1 byte 3 bytes

5.2 Tipos de tablas usadas por MySQL ISAM: es el formato de almacenaje ms antiguo, y posiblemente podra desaparecer en futuras versiones. Presentaba limitaciones importantes como la no exportacin de ficheros entre mquinas de distintas arquitecturas o que no poda usar mayores de 4 GigaBytes. MYISAM: es el tipo de tabla por defecto en MySQL desde la versin 3.23. Optimizada para sistemas operativos de 64 bits, permite ficheros de tamaos mayores que las ISAM. Los datos se almacenan en un formato independiente, lo que permite pasar tablas entre distintas plataformas. Los ndices se almacenan en un archivo con la extensin .MYI y los datos en otro archivo con extensin .MYD. Ofrece la posibilidad de indexar campos BLOB y TEXT. Adems este tipo de tablas soportan el tipo de dato VARCHAR. Un inconveniente es que las tablas pueden llegar a corromperse, almacenando datos incorrectos. Esto puede ser causado por: - El proceso mysqld haya sido eliminado en el transcurso de una escritura. - problemas de hardware. - Una caida del sistema durante su utilizacin. - Un gusano en el cdigo Mysql o MyISAM.

INNODB: InnoDB provee a MySQL con el soporte para trabajar con transacciones, adems de hacer un mejor bloqueo de registros para las instrucciones SELECT muy parecido al usado por Oracle, con lo que incrementa el rendimiento y la concurrencia en ambientes multiusuario, por otro lado, InnoDB es el nico formato que tiene MySQL para soportar llaves forneas (FOREING KEY). Adems de todo lo comentado, InnoDB ofrece unos rendimientos superiores a la anterior tecnologa de tablas de MySQL (MyISAM). InnoDB es un motor de bases de datos muy completo que ha sido integrado dentro de MySQL. Otras de sus caractersticas son:
Pg. 83

Asignatura: Ing. Web

- Recuperacin automtica ante fallas. Si MySQL se da de baja de una forma anormal, InnoDB automticamente completar las transacciones que quedaron incompletas. - Integridad referencial. Ahora se pueden definir llaves forneas entre tablas InnoDB relacionadas para asegurarse de que un registro no puede ser eliminado de una tabla si an est siendo referenciado por otra tabla. - Bloqueo a nivel de filas. Al usar tablas MyISAM, y tener consultas muy grandes que requieren de mucho tiempo, simplemente no se podan ejecutar ms consultas hasta que terminarn las consultas que estaban en ejecucin. En cambio, las tablas InnoDB usan bloqueo a nivel de filas para mejorar de manera impresionante el rendimiento. - SELECTs sin bloqueo. El motor InnoDB usa una tcnica conocida como multiversioning (similar a PostgreSQL) que elimina la necesidad de hacer bloqueos en consultas SELECT muy simples. Ya no ser necesario molestarse porque una simple consulta de slo lectura est siendo bloqueada por otra consulta que est haciendo cambios en una misma tabla.

HEAP: Tablas en memoria. Son temporales y desaparecen cuando el servidor se cierra, a diferencia de una tabla TEMPORARY, que solo puede ser accedida por el usuario que la crea, una tabla HEAP puede ser utilizada por diversos usuarios. No soportan columnas de autoincremento ni que haya valores nulos en los ndices. Los datos son almacenados en pequeos bloques. BDB: Base de datos Berkeley. TST(Transactions safe tables). Solo en MySQL MAX: Este tipo de tablas permite la realizacin de transacciones (a partir de la versin 3.23.34), por lo que es posible la recuperacin de datos (COMMIT y ROLLBACK). Estas tablas necesitan de una clave primaria en cada tabla, que ha de crear el administrador o de lo contrario Mysql crear una oculta. Otra de sus caractersticas es que pueden ser bloqueadas con el comando LOCK. Estas tablas sn almacenadas en archivos .DB. El TST 'Transactions safe tables', o tablas para transacciones seguras. Son menos rpidas y ocupan mas memoria, pero a cambio ofrecen mayor seguridad frente a fallos durante la consulta. Las tablas TST permiten ir introduciendo consultas y finalizar con un COMMIT (que las ejecuta) o ROLLBACK (que ignora los cambios). Disponbles a partir de la versin 4 de MySQL. Autor: Xavier Bernad i Millan http://www.xlwebmasters.com/modules.php?d=doc&f=doc2&id=1079 5.3 MySQL
MySQL es un sistema de gestin de base 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. Pg. 84

Asignatura: Ing. Web 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.

Usuarios destacados: Actualmente (enero 2011) existen ms de 6 millones de copias de MySQL la que le convierte en el SGBD de mayor base instalada. Entre los usuarios de este SGBD se encuentran:

Amazon.com Cox Communications - La cuarta televisin por cable ms importante de EEUU, tienen ms de 3.600 tablas y aproximadamente dos millones de inserciones cada hora. Flickr, usa MySQL para gestionar millones de fotos y usuarios. Google - Para el motor de bsqueda de la aplicacin AdWords. Joomla!, con millones de usuarios. Nokia, usa un cluster MySQL para mantener informacin en tiempo real sobre usuarios de redes de mviles. Wikipedia, sirve ms de 200 millones de consultas y 1,2 millones de actualizaciones cada da, con picos de 11.000 consultas por segundo. WordPress, con cientos de blogs alojados en l. Yahoo! - para muchas aplicaciones crticas.

5.4 PHPMYADMIN
phpMyAdmin es una herramienta escrita en PHP con la intencin de manejar la administracin de MySQL a travs de pginas web, utilizando Internet. Se realiza la gestin de base de datos de manera ms prctica, est disponible en 62 idiomas. Se encuentra disponible bajo la licencia GPL. Ingresando al Shell del MYSQL: En la ventana de comandos digite cmd ingrese a C-Xampp-MySQL-bin, para verificar la versin digite el siguiente comando que le dar acceso con el usuario por defecto root:

mysql u root
Importante!!! Todas las instrucciones deben terminar con ;

Pg. 85

Asignatura: Ing. Web

Ejercicio 1: Empleando cdigo SQL crear una base de datos Facturacin en la cual se debe crear la tabla producto que contenga los campos:

Tabla: Laboratorios CodLab Nombre Direccin JefeVentas PagWeb Tabla: Productos CodProd NombreProd Presentacion Precio Stock CodLab

Tipo Char(4) Varchar(20) Varchar(15) Varchar(15) Varchar(12) Tipo Char(4) Varchar(20) Varchar(15) Numeric(8,2) Numeric(4) Char(4)

Null Not Null Not Null Not Null

Null Not Null Not Null Not Null Not Null Not Null

Pg. 86

Asignatura: Ing. Web

Los registros a ingresar son: CodLab Nombre 1 Abeefe 2 Glaxo 3 Halcn 4 Gen - Far CodProd 1 2 3 4 5 6 7 8 NombreProd Rintal Ventolin Optifree Ampicilina Dexacor Rondec Vecotide Advantege

Direccion Lima Lima Callao Lima Presentacion Gotas Inhalador Gotas Cajas Cajas Gotas Inhalador Cajas

JefeVentas Ing. Flores Lic. Vargas Sr. Herrera Ing Pando Laboratorio 1 4 3 1 2 3 4 1

PagWeb www.abeefe.com www.Glaxo.com

Precio 6.2 23.5 30 16.6 12.7 14.8 32.56 18.66

Stock 230 330 140 145 230 150 100 90

Instrucciones para crear base de datos (instruccin crate database) y ubicarnos en ella (instruccin use). Verificamos la base de datos activa (con select dabase();)

Creamos la base de datos con create table Mediante el siguiente comando SQL creamos la estructura de una tabla Laboratorios.

Notar que CONSTRAINT permite definir claves primarias y forneas.

Pg. 87

Asignatura: Ing. Web

De igual forma estructurar la tabla Productos

En caso de error puede modificar la tabla mediante ALTER TABLE. Insertamos los registros mediante insert into y mostramos los resultados mediante select

Prctica 1: Culminar la creacin y visualizacin de la base de datos Facturacin.

5.5 GUI para gestores de bases de datos MYSQL


SQL Buddy, es fcil de configurar, un config.php dnde solo tenemos que cambiar el host de la BD y el nombre de usuario. Est liberado bajo una licencia MIT. Mysql Quick Admin, es tan funcional como el phpMyAdmin, con un diseo mucho ms amigable y ms sencillo de instalar. phpMinAdmin. La menos funcional y atractiva, pero aun as es una opcin cuando la usabilidad no es lo que ms buscamos. phpMyAdmin es una herramienta escrita en PHP con la intencin de manejar la administracin de MySQL a travs de pginas web, utilizando Internet. Es la ms utilizada actualmente. Pg. 88

Asignatura: Ing. Web

Visualizamos en PHPMyAdmin: Nos dirigimos a localhost/phpmyadmin En ella buscamos nuestra base de datos creados anteriormente Facturacion y lo visualizamos con un diseador.

Tipo de tablas Favor de revisar los tipos de tablas MySQL que se adjunta, en ella apreciar que el tipo InnoDB destaca debido a que es una tecnologa de almacenamiento de datos de cdigo abierto para la base de datos MySQL, incluidos como formato de tabla estndar en todas las distribuciones de MySQL a partir de las versiones 4.0. Su caracterstica principal es que soporta transacciones y bloqueo de registros e integridad referencial. InnoDB ofrece una fiabilidad y consistencia muy superior a MyISAM. Activar: Ir a la carpeta mysql y luego a la que dice "bin", aparece un icono en forma de computador llamado "my". brelo con bloc de notas, note pad o un editor de texto, como quieras y busca la lnea que diga: skip-innodb, leer las instrucciones para habilitarlo. Reinicie el mysql Verificar si actualmente soporta, creando una tabla de ejemplo:

Pg. 89

Asignatura: Ing. Web

UTF-8
UTF-8 (8-bit Unicode Transformation Format) es un formato de codificacin de caracteres Unicode e ISO 10646 utilizando smbolos de longitud variable. UTF -8 fue creado por Robert C. Pike y Kenneth L. Thompson. Est definido como estndar por la RFC 3629 de la Internet Engineering Task Force (IETF).
Prctica N 2 Implementar la base de datos Recursos Humanos mediante PhpMyAdmin, tener en cuenta que debe ser de modo utf8 y el tipo de tablas debe ser Innodb para garantizar la integridad referencial.

TABLA CARGO:

Pg. 90

Asignatura: Ing. Web

Ingresar los siguientes registros:

TABLA CONTROL

Registros de la tabla:

Pg. 91

Asignatura: Ing. Web TABLA DEPARTAMENTO

Tabla: Ubicacin

Registros de la tabla:

Tabla empleado

Pg. 92

Asignatura: Ing. Web

Insertar codigo SQL INSERT INTO `empleado` (`idempleado`, `apellido`, `nombre`, `fecingreso`, `email`, `telefono`, `idcargo`, `iddepartamento`, `sueldo`, `comision`, `jefe`) VALUES ('E0001', 'Coronel', 'Gustavo', '2000-04-01', 'gcoronel@perudev.com', '9666-4457', 'C01', 100, 25000, NULL, NULL), ('E0002', 'Fernandez', 'Claudia', '2000-05-01', 'cfernandez@perudev.com', '9345-8365', 'C03', 100, 8000, NULL, 'E0001'), ('E0003', 'Matsukawa', 'Sergio', '2000-04-01', 'smatsukawa@perudev.com', '9772-8369', 'C02', 102, 15000, NULL, 'E0001'), ('E0004', 'Diaz', 'Mariela', '2000-04-10', 'mdiaz@perudev.com', '8654-6734', 'C06', 102, 1800, NULL, 'E0003'), ('E0005', 'Martinez', 'Roberto', '2000-04-05', 'rmartinez@perudev.com', NULL, 'C08', 102, 7000, 500, 'E0003'), ('E0006', 'Espinoza', 'Miguel', '2000-04-06', 'mespinoza@perudev.com', NULL, 'C08', 102, 7500, 500, 'E0003'), ('E0007', 'Ramos', 'Vanessa', '2002-04-06', 'vramos@perudev.com', '9456-3456', 'C08', 102, 7000, 500, 'E0003'), ('E0008', 'Flores', 'Julio', '2000-04-01', 'jflores@perudev.com', NULL, 'C07', 102, 3500, 1000, 'E0003'), ('E0009', 'Marcelo', 'Ricardo', '2000-04-01', 'rmarcelo@perudev.com', '9936-2966', 'C02', 101, 15000, NULL, 'E0001'), ('E0010', 'Barrios', 'Guisella', '2001-01-15', 'gbarrios@perudev.com', '9023-4512', 'C03', 101, 8000, NULL, 'E0009'), ('E0011', 'Cuellar', 'Lucy', '2003-02-18', 'lcuellar@perudev.com', NULL, 'C06', 101, 2000, NULL, 'E0009'), ('E0012', 'Valencia', 'Hugo', '2000-05-01', 'hvalencia@perudev.com', '9732-5601', 'C02', 105, 15000, NULL, 'E0001'), ('E0013', 'Veliz', 'Fortunato', '2000-05-05', 'fveliz@perudev.com', '9826-7603', 'C04', 105, 6000, NULL, 'E0012'), ('E0014', 'Aguero', 'Octavio', '2000-05-15', 'oaguero@perudev.com', NULL, 'C07', 105, 3000, 300, 'E0012'), Pg. 93

Asignatura: Ing. Web ('E0015', 'Rosales', 'Cesar', '2003-03-15', 'crosales@perudev.com', NULL, 'C07', 105, 2500, 300, 'E0012'), ('E0016', 'Villarreal', 'Nora', '2000-05-01', 'nvillarreal@perudev.com', '9371-3641', 'C02', 103, 15000, NULL, 'E0001'), ('E0017', 'Romero', 'Alejandra', '2000-05-03', 'aromero@perudev.com', '8345-9526', 'C03', 103, 7500, NULL, 'E0016'), ('E0018', 'Valdiviezo', 'Jennifer', '2000-06-12', 'jvaldiviezo@perudev.com', '9263-5172', 'C06', 103, 2000, NULL, 'E0016'), ('E0019', 'Muchotrigo', 'Omar', '2000-05-12', 'omuchotrigo@perudev.com', '9963-5542', 'C05', 103, 3500, 500, 'E0016'), ('E0020', 'Baltazar', 'Victor', '2000-05-18', 'vbaltazar@perudev.com', '9893-4433', 'C05', 103, 3000, 800, 'E0016'), ('E0021', 'Castillo', 'Ronald', '2001-05-18', 'rcastillo@perudev.com', '9234-3487', 'C05', 103, 3000, 800, 'E0016'), ('E0022', 'Espilco', 'Luis', '2002-04-17', 'lespilco@perudev.com', '9554-3456', 'C05', 103, 3000, 300, 'E0016');

5.6 Funciones de acceso a BD


mysql_connect: Abre una conexin a un servidor MySQL y retorna un identificador positivo si tiene xito o false si hay error. Ejemplo: <?php $cn = mysql_connect("localhost","root",""); if($cn){ echo "Conexin: Ok"; } else { echo "Conexin: Error"; } ?> mysql_close: Cierra una conexin a un servidor MySQL y retorna un identificador positivo si tiene xito o false si hay error. <?php $cn = mysql_connect("localhost","root",""); if($cn){ echo "Conexin: Ok"; } else { echo "Conexin: Error"; return; }
Pg. 94

Asignatura: Ing. Web

echo "<br>"; $rpta = mysql_close(); if($rpta){ echo "Conexin: Cerrada"; } else { echo "Conexin: Error"; } ?> Mysql_select_db: Despus de con el servidor, necesitamos seleccionar la base de datos con la cual vamos a trabajar, devuelve un identificador de conexin. <?php $cn = mysql_connect("localhost","root",""); if($cn){ echo "Conexin: Ok"; } else { echo "Conexin: Error"; return; } $rpta = mysql_select_db("rh"); echo "<br>"; if($rpta){ echo "Base de Datos: Ok"; } else { echo "Base de Datos: Error"; } $rpta = mysql_close(); echo "<br>"; if($rpta){ echo "Conexin: Cerrada"; } else { echo "Conexin: Error"; }

Pg. 95

Asignatura: Ing. Web

?> Crear una pgina en PHP que consulte bases de datos:


Consulta1.php <?php require "libreria.php"; ?> <link rel="stylesheet" href="estilo.css" type="text/css"> <body> <h1>Consulta de un Empleado</h1> <form method="POST" action="consulta1.php"> Cdigo <input type="text" name="codigo"> <input type="submit" value="Enviar"> </form> <?php // Verificar si existe la variable: codigo if( !isset($_POST["codigo"]) ) { say( "</body>" ); return; } // leer la variable: codigo $codigo = $_POST["codigo"]; // Conexin con la base de datos $cn = fnConnect( $msg ); // Verificar la conexin con la base de datos if( !$cn ) { fnShowMsg( "Error", $msg ); say( "</body>" ); return; } // Realizar consulta a la base de datos $sql = "select * from empleado "; $sql .= "where idempleado='$codigo'"; $rs = mysql_query( $sql ); // Verificar si retorna resultado $rows = mysql_num_rows( $rs ); if( $rows == 0 ) { $msg = "Cdigo " . $codigo . " no existe."; fnShowMsg( "Mensaje", $msg ); say( "</body>" );

Pg. 96

Asignatura: Ing. Web


return; } // Mostrar resultado say( "<h2>Resultado</h2>" ); say( "<table border=1>" ); say( "<tr>" ); say( "<td>Cdigo</td>" ); say( "<td>" . mysql_result($rs,0,"idempleado") . "</td>" ); say( "</tr>" ); say( "<tr>" ); say( "<td>Apellido</td>" ); say( "<td>" . mysql_result($rs,0,"apellido") . "</td>" ); say( "</tr>" ); say( "<tr>" ); say( "<td>Nombre</td>" ); say( "<td>" . mysql_result($rs,0,"nombre") . "</td>" ); say( "</tr>" ); say( "</table>" ); ?> </body> Librera.php <?php

function fnConnect( &$msg){ $cn=mysql_connect("localhost","root",""); if(!$cn){ $msg = "Error en la conexin"; return 0; } $rpta = mysql_select_db("rh",$cn); if(!$rpta){

Pg. 97

Asignatura: Ing. Web

$msg = "BD no existe"; mysql_close($cn); return 0; } return $cn; }

function say($cad){ echo $cad . "\n"; }

function fnShowMsg($title,$msg){ say("<table width='250'>"); say("<tr>"); say("<th align=center valign=middle>$title</th>"); say("</tr>"); say("<tr>"); say("<td align=left valign=middle>".$msg."</td>"); say("</tr>"); say("</table>"); }

Pg. 98

Asignatura: Ing. Web

function fnLink($link,$target,$mouseover,$msg){ $cad = "<A href='$link' target='$target' "; $cad .= "onmouseout=\"self.status='';return true\" "; $cad .= "onmouseover=\"self.status='$mouseover' ;return true\">"; $cad .= "$msg</A>"; return $cad; }

?> Estilo.css body { color: #000099; font-family:Verdana, Arial, Helvetica, sans-serif; font-size: 0.8em; font-weight: 500; background: #FFF8EC; }

H1

{ font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 2em; font-weight: 700; }

Pg. 99

Asignatura: Ing. Web

H2

{ font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1.75em; font-weight: 700; }

H3

{ font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1.58em;

font-weight: 500; } TABLE { background-color: #FFEFD5; } TH { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.9em; color: White; font-weight: 500; font: bold; background: #804D19;

Pg. 100

Asignatura: Ing. Web

} TD { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.9em; font-weight: 500; color: Navy; }

5.7 Consulta a bases de datos mysql desde aplicaciones PHP

FUNCIONES:
MYSQL_SELECT_DB Selecciona una base de datos MySQL int mysql_select_db ( cadena base_de_datos [, int identificador_de_enlace] ) Devuelve TRUE si todo se llev a cabo correctamente, FALSE en caso de fallo.

MYSQL_QUERY Enva una sentencia SQL a MySQL int mysql_query ( string sentencia [, int identificador_de_enlace]) Devuelve TRUE (no-cero) o FALSE para indicar si la sentencia se ha ejecutado correctamente o no. Un valor TRUE significa que la sentencia era correcta y pudo ser ejecutada en el servidor.

MYSQL_NUM_ROWS Devuelve el nmero de filas de un resultado int mysql_num_rows ( int id_resultado ) Regresa el nmero de filas en un resultado. Este comando es vlido solo para las sentencias SELECT. Para obtener el nmero de filas afectadas por las sentencias INSERT, UPDATE o DELETE, use mysql_affected_rows().

MYSQL_RESULT Devuelve datos de un resultado int mysql_result ( int id_resultado, int numero_de_fila [, mixed campo]) Devuelve el contenido de una celda de un resultado MySQL. El campo argumento puede ser el nombre del campo o el offset o tabla.nombre_del_campo. Si el nombre de la columna tiene un alias ('select foo as bar from...'), utilice el alias en lugar del nombre de la columna.

MYSQL_FETCH_ROW Devuelve una fila de resultado como matriz

Pg. 101

Asignatura: Ing. Web


array mysql_fetch_row ( int id_resultado ) Devuelve: Una matriz que corresponde a la fila seleccionada, o FALSE si no quedan ms filas. Selecciona una fila de datos del resultado asociado al identificador de resultado especificado. La fila es devuelta como una matriz. Cada columna del resultado es guardada en un offset de la matriz, empezando por el offset 0.

MYSQL_DATA_SEEK Mueve el puntero interno int mysql_data_seek ( int id_resultado, int numero_de_fila ) Mueve el puntero de fila interno a la fila especficada para el identificador de resultado. La prxima llamada a mysql_fetch_row() devolver esa fila. Devuelve TRUE si todo se llev a cabo correctamente, FALSE en caso de fallo. El nmero de fila inicia con cero. MYSQL_FETCH_ASSOC Recupera una fila de resultado como una matriz asociativa mysql_fetch_assoc ( resource resultado ) Devuelve una matriz asociativa que corresponde a la fila recuperada y mueve el apuntador de datos interno hacia adelante. mysql_fetch_assoc() es equivalente a llamar mysql_fetch_array() con MYSQL_ASSOC como el segundo parmetro opcional. nicamente devuelve una matriz asociativa. MYSQL_ERRNO Devuelve el nmero del mensaje de error de la ltima operacin MySQL int mysql_errno ( [int identificador_de_enlace] ) Regresa el nmero de error de la ltima funcin, o 0 (cero) si no hay error. Los errores que se obtienen de la base de datos MySQL ya no generan alertas. En lugar de eso, use mysql_errno() para obtener el cdigo de error. Note que esta funcin solo regresa el cdigo de error de la funcin MySQL ms recientemente executada (sin incluir mysql_error() y mysql_errno()), as que si quiere usarla, asegrese de chequear el valor antes de llamar a otra funcin de MySQL.

MYSQL_ERROR Devuelve el texto con error del mensaje de la anterior operacin MySQL cadena mysql_error ( [int identificador_de_enlace] ) Regresa el texto del error de la ltima funcin MySQL o (cadena vaca) si no ocurri error. Si no se especfica el identificador de enlace en la funcin se usa el ltimo enlace abierto exitosamente para obtener el mensaje de error del servidor MySQL.

OPERACIONES TRANSACCIONES:

Es importante saber que las transacciones son soportadas solo para las tablas tipo innodb
Iniciar transaccin: BEGIN, BEGIN WORK, START TRANSACTION mysql_query(BEGIN, $cn); Confirmar transaccin: mysql_query(COMMIT, $cn); Cancelar transaccin: mysql_query(ROLLBACK, $cn);

LIBRERIA.PHP Para facilitar la programacin, utilizaremos una librera de funciones

Pg. 102

Asignatura: Ing. Web <?php function fnConnect( &$msg){ $cn=mysql_connect("localhost","root",""); if(!$cn){ $msg = "Error en la conexin"; return 0; } $rpta = mysql_select_db("rh",$cn); if(!$rpta){ $msg = "BD no existe"; mysql_close($cn); return 0; } return $cn; } function say($cad){ echo $cad . "\n"; } function fnShowMsg($title,$msg){ say("<table width='250'>"); say("<tr>"); say("<th align=center valign=middle>$title</th>"); say("</tr>"); say("<tr>"); say("<td align=left valign=middle>".$msg."</td>"); say("</tr>"); say("</table>"); } function fnLink($link,$target,$mouseover,$msg){ $cad = "<A href='$link' target='$target' "; $cad .= "onmouseout=\"self.status='';return true\" "; $cad .= "onmouseover=\"self.status='$mouseover' ;return true\">"; $cad .= "$msg</A>"; return $cad; } ?> ESTILO.CSS Define el estilo de las pginas web que mostrarn los resultados. body { color: #000099; font-family:Verdana, Arial, Helvetica, sans-serif; font-size: 0.8em; font-weight: 500; background: #FFF8EC; } H1 { Pg. 103

Asignatura: Ing. Web font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 2em; font-weight: 700; } H2 { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1.75em; font-weight: 700; } { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1.58em; font-weight: 500; } background-color: #FFEFD5; } TH { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.9em; color: White; font-weight: 500; font: bold; background: #804D19; } TD { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 0.9em; font-weight: 500; color: Navy; }

H3

TABLE {

CONSULTA1.PHP Solicite ingreso del cdigo de un empleado y muestre los resultados de cdigo, apellido y nombre.

Pg. 104

Asignatura: Ing. Web

CONSULTA1.PHP <?php require "libreria.php"; ?> <link rel="stylesheet" href="estilo.css" type="text/css"> <body> <h1>Consulta de un Empleado</h1> <form method="POST" action="consulta1.php"> Cdigo <input type="text" name="codigo"> <input type="submit" value="Enviar"> </form> <?php // Verificar si existe la variable: codigo if( !isset($_POST["codigo"]) ) { say( "</body>" ); return; } // leer la variable: codigo $codigo = $_POST["codigo"]; // Conexin con la base de datos $cn = fnConnect( $msg ); // Verificar la conexin con la base de datos if( !$cn ) { fnShowMsg( "Error", $msg ); say( "</body>" ); return; } // Realizar consulta a la base de datos $sql = "select * from empleado "; $sql .= "where idempleado='$codigo'"; $rs = mysql_query( $sql ); // Verificar si retorna resultado $rows = mysql_num_rows( $rs ); if( $rows == 0 ) { $msg = "Cdigo " . $codigo . " no existe."; fnShowMsg( "Mensaje", $msg ); say( "</body>" ); Pg. 105

Asignatura: Ing. Web return; } // Mostrar resultado say( "<h2>Resultado</h2>" ); say( "<table border=1>" ); say( "<tr>" ); say( "<td>Cdigo</td>" ); say( "<td>" . mysql_result($rs,0,"idempleado") . "</td>" ); say( "</tr>" ); say( "<tr>" ); say( "<td>Apellido</td>" ); say( "<td>" . mysql_result($rs,0,"apellido") . "</td>" ); say( "</tr>" ); say( "<tr>" ); say( "<td>Nombre</td>" ); say( "<td>" . mysql_result($rs,0,"nombre") . "</td>" ); say( "</tr>" ); say( "</table>" ); ?> </body> CONSULTA2.PHP Consulta que muestre el registro de empleados por departamento, la cual debe ser seleccionado desde una lista desplegable.

<?php require "libreria.php"; ?> <link rel="stylesheet" href="estilo.css" type="text/css"> <body> <?php // Conexin con la base de datos $cn = fnConnect( $msg ); // Verificar la conexin con la base de datos if( !$cn ) { Pg. 106

Asignatura: Ing. Web fnShowMsg( "Error", $msg ); say( "</body>" ); return; } ?> <h1>Consulta de Empleados</h1> <form method="POST" action="consulta2.php"> Departamento <select name="dept" size="1"> <?php $sql = "select iddepartamento, nombre from departamento"; $rs = mysql_query( $sql, $cn ); while( $row = mysql_fetch_row( $rs ) ) { $op = "<option value='" . $row[0] . "'>"; $op .= $row[1] . "</option>"; say( $op ); } ?> </select> <input type="submit" value="Enviar"> </form> <?php // Verificar si existe la variable: dept if( !isset($_POST["dept"]) ) { say( "</body>" ); return; } // leer la variable: dept $dept = $_POST["dept"]; // Leer el nombre del departamento $sql = "Select nombre from departamento "; $sql .= "where iddepartamento = $dept"; $rs = mysql_query( $sql, $cn ); $nom = mysql_result( $rs, 0, 0 ); // Consultar los empleados del departamento $sql = "select idempleado, apellido, nombre, sueldo from empleado "; $sql .= "where iddepartamento=$dept"; $rs = mysql_query( $sql ); // Verificar si retorna resultado $rows = mysql_num_rows( $rs ); if( $rows == 0 ) { $msg = "Departamento $dept - $nom no tiene empleados."; fnShowMsg( "Mensaje", $msg ); say( "</body>" ); return; } // Mostrar resultado say( "<h2>Resultado</h2>" ); say( "Departamento: $dept - $nom" ); say( "<table border=1>" ); say( "<tr>" ); say( "<th>Cdigo</th>" ); Pg. 107

Asignatura: Ing. Web say( "<th>Apellido</th>" ); say( "<th>Nombre</th>" ); say( "<th>Sueldo</th>" ); say( "</tr>" ); while( $row = mysql_fetch_row( $rs ) ) { say( "<tr>" ); foreach ( $row as $celda) { if( is_null( $celda ) ) { $celda = "None"; } say( "<td>$celda</td>" ); } say( "</tr>" ); } say( "</table>" ); ?> </body> CONSULTA3.PHP Consulta del nmero de empleados por cargo, la cual debe ser seleccionado desde una lista desplegable.

<?php require "libreria.php"; ?> <link rel="stylesheet" href="estilo.css" type="text/css"> <body> <?php // Conexin con la base de datos $cn = fnConnect( $msg ); // Verificar la conexin con la base de datos if( !$cn ) { fnShowMsg( "Error", $msg ); say( "</body>" ); return; } ?> <h1>Consulta de Empleados</h1> <form method="POST" action="consulta3.php"> Cargo <select name="cargo" size="1"> Pg. 108

Asignatura: Ing. Web <?php $sql = "select idcargo, nombre from cargo"; $rs = mysql_query( $sql, $cn ); while( $row = mysql_fetch_assoc( $rs ) ) { $op = "<option value='" . $row["idcargo"] . "'>"; $op .= $row["nombre"] . "</option>"; say( $op ); } ?> </select> <input type="submit" value="Enviar"> </form> <?php // Verificar si existe la variable: cargo if( !isset($_POST["cargo"]) ) { say( "</body>" ); return; } // leer la variable: cargo $cargo = $_POST["cargo"]; // Leer el nombre del puesto de trabajo $sql = "Select nombre from cargo where idcargo = '$cargo'"; $rs = mysql_query( $sql, $cn ); $nom = mysql_result( $rs, 0, 0 ); // Consultar los empleados del departamento $sql = "select iddepartamento as dept, count(*) as emps "; $sql .= "from empleado "; $sql .= "where idcargo = '$cargo' "; $sql .= "group by iddepartamento "; $rs = mysql_query( $sql ); // Verificar si retorna resultado $rows = mysql_num_rows( $rs ); if( $rows == 0 ) { $msg = "Cargo $cargo - $nom no tiene empleados."; fnShowMsg( "Mensaje", $msg ); say( "</body>" ); return; } // Mostrar resultado say( "<h2>Resultado</h2>" ); say( "Cargo: $cargo - $nom" ); say( "<table border=1 width=300>" ); say( "<tr>" ); say( "<th>Departamento</th>" ); say( "<th>Empleados</th>" ); say( "</tr>" ); while( $row = mysql_fetch_assoc( $rs ) ) { say( "<tr>" ); say( "<td align='center'>" . $row["dept"] . "</td>" ); say( "<td align='center'>" . $row["emps"] . "</td>" ); say( "</tr>" ); } Pg. 109

Asignatura: Ing. Web say( "</table>" ); ?> </body>

CONSULTA4.PHP Pgina que muestre los resultados en una pgina pero de 5 registros, los diversos resultados deber paginarse.

<?php require( "libreria.php" ); ?> <link rel="stylesheet" href="estilo.css" type="text/css"> <body> <h1>Paginacin</h1> <h2>Listado de Empleados</h2> <?php // Conexin con la base de datos $cn = fnConnect( $msg ); // Verificar la conexin con la base de datos if( !$cn ) { fnShowMsg( "Error", $msg ); say( "</body>" ); return; } // Parmetros de Paginacin $pagesize = 5; $pageno = 1; if( isset($_GET["pageno"]) ) { $pageno = $_GET["pageno"]; } // Paginacin $dezp = ($pageno - 1) * $pagesize; $sql = "select count(*) from empleado "; $rs = mysql_query( $sql, $cn ); $rows = mysql_result( $rs, 0, 0 ); $pages = ceil( $rows / $pagesize ); say( "Pginas: " ); for( $i = 1; $i <= $pages; $i++ ) { if($i != $pageno) { Pg. 110

Asignatura: Ing. Web $link = "<a href='consulta4.php?pageno=$i'>$i</a>"; } else { $link = $i; } say( $link . " " ); } // Listado $sql = "select idempleado, apellido, nombre, email "; $sql .= "from empleado limit $dezp, $pagesize"; $rs = mysql_query( $sql, $cn ); say( "<table border='1'>" ); say( "<tr>" ); say( "<th>Cdigo</th>" ); say( "<th>Apellido</th>" ); say( "<th>Nombre</th>" ); say( "<th>Email</th>" ); say( "</tr>" ); while( $rec = mysql_fetch_row($rs) ) { say( "<tr>" ); foreach ( $rec as $field ){ say( "<td>$field</td>" ); } say( "</tr>" ); } ?> </body>

CONSULTA5.PHP Consulta que muestra cmo controlar errores, para eso muestra un formulario para el ingreso de los parmetros necesarios para realizar una conexin, luego intenta realizar una nueva conexin, de haber un error muestra el nmero de error y el mensaje respectivo.

Pg. 111

Asignatura: Ing. Web En caso se ingrese correctamente:

En caso se ingrese incorrectamente:

<link rel="stylesheet" href="estilo.css" type="text/css"> <body> <h1> Probar Conexin </h1> <?php if( !$_POST["seguro"] ) { ?> <form method="POST" action="consulta5.php"> <table width="300" border='1'> <tr> <td>Servidor</td> <td> <input type="text" name="server"> </td> </tr> <tr> <td>Usuario</td> <td> <input type="text" name="user"> </td> </tr> <tr> <td>Contrasea</td> <td> <input type="password" name="pass"> </td> </tr> <tr> <td colspan="2" align="center"> <input type="hidden" name="seguro" value="12345"> <input type="reset" value="Limpiar"> <input type="submit" value="Enviar"> </td> </tr> </table> </form> <?php } else { // Captura de Datos Pg. 112

Asignatura: Ing. Web $server = $_POST["server"]; $user = $_POST["user"]; $pass = $_POST["pass"]; // Probando conexin $cn = mysql_connect( $server, $user, $pass ); $errno = mysql_errno(); if( $errno == 0 ) { echo "Conexin Ok <br>"; } else { echo "Nro. de Error: $errno <br>"; echo "Mensaje: " . mysql_error() . "<br>"; } echo "<br><a href='consulta5.php'>Nueva Prueba</a>"; } ?> </body>

CONSULTA6.PHP Consulta que muestra cmo controlar errores, para eso muestra un formulario para el ingreso de los parmetros necesarios para realizar una conexin, luego intenta realizar una nueva conexin, de haber un error muestra el nmero de error y el mensaje respectivo.

Pg. 113

Asignatura: Ing. Web

<?php require "libreria.php"; ?> <link rel="stylesheet" href="estilo.css" type="text/css"> <body> <?php // Conexin con la base de datos $cn = fnConnect( $msg ); // Verificar la conexin con la base de datos if( !$cn ) { fnShowMsg( "Error", $msg ); say( "</body>" ); return; } say( "<h1>Nuevo Empleado</h1>" ); if( !$_POST["seguro"] ) { // ****************************** // Formulario de Ingreso de Datos // ****************************** ?> <form method="POST" action="consulta6.php"> <table width="300" border='1'> <tr> <td> Apellido </td> <td> <input type="text" name="apellido"> </td> </tr> <tr> <td> Nombre </td> <td> <input type="text" name="nombre"> </td> </tr> <tr> <td> Email </td> <td> <input type="text" name="email"> </td> </tr> <tr> <td> Telfono </td> <td> <input type="text" name="telefono"> </td> </tr> <tr> <td> Departamento </td> <td> <select name="dept" size="1"> <?php $sql = "select iddepartamento, nombre from departamento "; $sql .= "where iddepartamento in "; $sql .= "(select distinct iddepartamento from empleado)"; $rs = mysql_query( $sql, $cn ); while( $row = mysql_fetch_row( $rs ) ) { $op = "<option value='" . $row[0] . "'>" . $row[1] . "</option>"; say( $op ); } ?> Pg. 114

Asignatura: Ing. Web </select> </td> </tr> <tr> <td> Cargo </td> <td> <select name="cargo" size="1"> <?php $sql = "select idcargo, nombre from cargo "; $sql .= "where idcargo not in ('C01', 'C02')"; $rs = mysql_query( $sql, $cn ); while( $row = mysql_fetch_assoc( $rs ) ) { $op = "<option value='" . $row["idcargo"] . "'>"; $op .= $row["nombre"] . "</option>"; say( $op ); } ?> </select> </td> </tr> <tr> <td> Sueldo </td> <td> <input type="text" name="sueldo"> </td> </tr> <tr> <td> Comisin </td> <td> <input type="text" name="comision"> </td> </tr> <tr> <td colspan="2" align="center"> <input type="hidden" name="seguro" value="12345"> <input type="reset" value="Limpiar"> <input type="submit" value="Enviar"> </td> </table> </form> <?php } else { // ******************* // Procesar Formulario // ******************* // Captura de Datos $ape = $_POST["apellido"]; $nom = $_POST["nombre"]; $email = $_POST["email"]; $tel = $_POST["telefono"]; $cargo = $_POST["cargo"]; $dept = $_POST["dept"]; $sueldo = $_POST["sueldo"]; $comm = $_POST["comision"]; // Inicio de Transaccion mysql_query( "begin", $cn ); Pg. 115

Asignatura: Ing. Web // Generar Codigo $sql = "select valor from control "; $sql .= "where parametro = 'Empleado'"; $rs = mysql_query( $sql, $cn ); $cont = mysql_result( $rs, 0, 0 ); $sql = "update control set valor = valor + 1 "; $sql .= "where parametro = 'Empleado'"; $rpta = mysql_query( $sql, $cn ); if( !rpta ) { mysql_query( "rollback", $cn ); fnShowMsg( "Error", "No se puede generar el su cdigo." ); say( "</body>" ); return; } $codigo = "0000" . $cont ; $codigo = "E" . substr( $codigo, strlen($codigo) - 4 ); // Determinar el codigo del jefe $sql = "select idempleado from empleado "; $sql .= "where iddepartamento = '$dept' "; $sql .= "and idcargo in ( 'C01', 'C02' ) "; $rs = mysql_query( $sql, $cn ); $rows = mysql_num_rows( $rs ); if( $rows != 1 ) { mysql_query( "rollback", $cn ); fnShowMsg( "Error", "No se pudo determinar el Jefe." ); say( "</body>" ); return; } $jefe = mysql_result( $rs, 0, 0 ); // Registrar el Empleado $sql = "insert into empleado(idempleado, apellido, nombre,"; $sql .= "fecingreso, email, telefono, idcargo, iddepartamento,"; $sql .= "sueldo, comision, jefe ) values ( '$codigo', '$ape', "; $sql .= "'$nom', curdate(), '$email', '$tel', '$cargo', $dept, "; $sql .="$sueldo, $comm, '$jefe')"; $rpta = mysql_query( $sql, $cn ); if(!$rpta){ mysql_query( "rollback", $cn ); $msg = "Datos ingresados no son correctos.<br>"; $msg .= "SQL: $sql"; fnShowMsg( "Error", $msg ); say( "</body>" ); return; } mysql_query( "commit", $cn ); $msg = "Empleado registrado correctamente.<br>"; $msg .= "Cdigo Generado: $codigo<br>"; fnShowMsg( "Mensaje", $msg ); say( fnLink( "ejm1509.php","","Nuevo Empleado", "Nuevo Empleado" ) ); } ?> </body> Pg. 116

Asignatura: Ing. Web

TERCERA UNIDAD INGENIERA WEB REVERSA


TEXTO N 6
Soluciones LAMP

6.1 Solucin LAMP

El acrnimo 'LAMP' se refiere a un conjunto de subsistemas de software necesarios para alcanzar una solucin global, en este caso configurar sitios web o servidores dinmicos con un esfuerzo reducido. En las tecnologas LAMP esto se consigue mediante la unin de las siguientes tecnologas: Linux, el sistema operativo; En algunos casos tambin se refiere a LDAP. Apache, el servidor web; MySQL, el gestor de bases de datos; Perl, PHP, o Python, los lenguajes de programacin.

La combinacin de estas tecnologas es usada primariamente para definir la infraestructura de un servidor web, utilizando un paradigma de programacin para el desarrollo. A pesar de que el origen de estos programas de cdigo abierto no han sido especficamente diseado para trabajar entre s, la combinacin se populariz debido a su bajo coste de adquisicin y ubicuidad de sus componentes (ya que vienen preinstalados en la mayora de las distribuciones linux). Cuando son combinados, representan un conjunto de soluciones que soportan servidores de aplicaciones. Ampliamente promocionado por el editor de la editorial O'Reilly, Dale Dougherty, a sugerencia de David Axmark y Monty Widenus desarrolladores de MySQL, la influencia de la editorial O'Reilly en el mundo del software libre hizo que el trmino se popularizara rpidamente en todo el mundo.

Pg. 117

Asignatura: Ing. Web


6.2 Servidor Apache

Instalar apache: yum install httpd Directorio de Apache /etc/httpd/conf/httpd.conf Instalar PHP: yum install php Luego procedemos con instalar el MySQL Server: yum install php-mysql mysql mysql-server /sbin/chkconfig --levels 235 mysqld on /etc/init.d/mysqld start Verificamos los servicios del servidor Web Apache: service httpd start Para reiniciar el comando es: service httpd restart Para detener el servidor: service httpd stop Verificar en: http://localhost Crear la siguiente pagina index.php <?php phpinfo(); ?> y guardar en /var/www/html
6.3 CMS

Un sistema de gestin de contenidos (en ingls Content Management System, abreviado CMS) es un programa que permite crear una estructura de soporte (framework) para la creacin y administracin de contenidos, principalmente en pginas web, por parte de los participantes. Consiste en una interfaz que controla una o varias bases de datos donde se aloja el contenido del sitio. El sistema permite manejar de manera independiente el contenido y el diseo. As, es posible manejar el contenido y darle en cualquier momento un diseo distinto al sitio sin tener que darle formato al contenido de nuevo, adems de permitir la fcil y controlada publicacin en el sitio a varios editores. Un ejemplo clsico es el de editores que cargan el contenido al sistema y otro de nivel superior (directorio) que permite que estos contenidos sean visibles a todo el pblico (los aprueba).

Pg. 118

Asignatura: Ing. Web Tipos de gestores de contenidos Los gestores de contenido se pueden clasificar segn diferentes criterios: Por sus caractersticas Segn el lenguaje de programacin empleado, como por ejemplo Active Server Pages, Java, PHP, ASP.NET, Ruby On Rails, Python Segn la licencia: Cdigo abierto o Software privativo

Por su uso y funcionalidad Blogs; pensados para pginas personales. Foros; pensados para compartir opiniones. Wikis; pensados para el desarrollo colaborativo. Enseanza; plataforma para contenidos de enseanza on-line. Comercio electrnico; plataforma de gestin de usuarios, catlogo, compras y pagos. Publicaciones digitales. Difusin de contenido multimedia.

Iniciativas de estandarizacin Dentro de los portales se han realizado procesos de estandarizacin encaminados a la homogeneizacin en las interfaces de programacin de los mismos de tal manera que un servicio desarrollado para un portal pueda ejecutarse en cualquier otro portal compatible con el estndar. El objetivo es obtener portales interoperables evitando desarrollo propietarios. Las dos iniciativas ms importantes son la Portlet Specification API JSR-168, la Content Repository API JSR-170

Pg. 119

Asignatura: Ing. Web

REFERENCIAS BIBLIOGRFICAS

Conallen Jim. Development Application web. 2da.ed. New York. Addison- Wesley Iberoamericana. 2004. Carles Mateu. Desarrollo de Aplicaciones web. Editorial UOC. ISBN: 84-9788-118-4. Espaa, 2009 Doug Rosenberg-Kendall Scott . Applying Use Case Driven Object Modeling with UML An Annotated e-Commerce Example 1ra.ed. Mxico. Addison- Wesley Iberoamericana. 2001. Pressman Roger. Ingeniera de software: un enfoque prctico. 6ta.ed. Mxico. McGraw-Hill. 2005. Suh Woojong. Web engineering: principles and techniques. 1ra.ed. London. Idea group publishing. 2005.

Pg. 120

Potrebbero piacerti anche