Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Libro PHP
Libro PHP
PHP
Oscar Capuay Uceda
Contenido
DEDICATORIA 7
AGRADECIMIENTOS 7
INTRODUCCIN 9
II. DHTML 16
HTML 16
FORMATO DE TEXTO CON HTML 19
LISTAS 19
COMENTARIOS NO VISIBLES EN LA PANTALLA 22
CARACTERES ESPECIALES 23
ENLACES O HIPERVNCULOS 25
IMGENES 28
TABLAS 31
FORMULARIOS 38
HTML 4 45
JAVASCRIPT 61
ELEMENTOS BSICOS 62
COMENTARIOS 62
LITERALES 63
TIPOS DE DATOS 64
VARIABLES 64
OPERADORES 65
ESTRUCTURAS DE CONTROL 68
OBJETOS 70
OBJETOS PREDEFINIDOS 71
EVENTOS 75
DEFINICIN MEDIANTE CDIGO 77
MODELO DE OBJETOS DEL DOCUMENTO 78
OBJETO WINDOW 79
OBJETO DOCUMENT 82
OBJETO FORM 83
OTROS OBJETOS 88
FICHEROS .JS 90
HOJAS DE ESTILO EN CASCADA 91
SINTAXIS Y TIPOS BSICOS DE DATOS EN CSS2 95
PALABRAS CLAVE 97
III. INICIANDO LA PROGRAMACIN CON PHP 99
QUE ES PHP? 99
VARIABLES 99
CONSTANTES 99
TIPOS DE DATOS 100
EXPRESIONES 100
OPERADORES 102
OPERADORES DE ARITMTICA 103
OPERADORES DE ASIGNACIN 103
OPERADORES DE COMPARACIN 104
OPERADORES DE CONTROL DE ERRORES 105
OPERADORES DE EJECUCIN 106
OPERADORES DE INCREMENTO/DECREMENTO 106
OPERADORES DE LGICA 108
OPERADORES DE CADENA 108
OPERADORES DE MATRICES 109
OPERADORES DE TIPO 110
SI (CONDICIONAL): IF 113
ELSE 114
ELSEIF 114
FOR 115
WHILE 115
DO..WHILE 115
IMGENES 257
ARCHIVOS PDF 264
FPDF 264
ARCHIVOS XLS 274
AJAX 281
XAJAX 282
EVENTOS CON XAJAX 291
TRABAJO CON FORMULARIOS EN XAJAX 293
ERROR COMN 298
BSQUEDA EN BASE DE DATOS CON XAJAX 299
ADMINISTRACIN DE DATOS CON AJAX 301
CONTROLADOR CON AJAX 301
CAPA DE DATOS CON AJAX 306
VISTA CON AJAX 308
Agradecimientos
Introduccin
PHP desde el ao 1997 ha crecido aceleradamente, su versin 4 lanzada en
el 2000 gan mucha popularidad y logr estar instalado en mas de la cuarta
parte de los servidores Web a nivel mundial, esto la convirti en el 2003 en la
plataforma Web con mayor presencia en Internet en comparacin con sus
similares.
Instalacin en Windows
Para trabajar con PHP vamos a utilizar WAMP un software que instala el
servidor Web APACHE, PHP y el manejador de base de datos MySQL.
Luego indicamos el nombre del acceso directo que nos permitir cargar
WAMP desde el men de inicio.
II. DHTML
Para desarrollar aplicaciones Web con PHP es necesario tener
conocimientos de HTML Dinmico DHTML, debido a que en los
documentos Web no slo se escribe un lenguaje sino que es necesario
utilizar diferentes lenguajes para la implementacin de las diversas rutinas
que se pueden requerir para un buen funcionamiento de la aplicacin.
Debido a esto a continuacin veremos un repaso rpido de los temas
relacionados con DHTML.
HTML
HTML es un lenguaje que permite definir los elementos que conforman una
pgina Web. Los diseadores y programadores de pginas Web utilizan el
lenguaje HTML de modo que los navegadores que utilizamos los usuarios
muestran las pginas Web despus de interpretar su contenido HTML.
<HTML>
[Documento Web]
</HTML>
Hay que considerar que no todos los tags tienen etiqueta de cierre. Aunque
se recomienda que las etiquetas o tags que no tienen incluyan un / antes
del cierre. Por ejemplo la etiqueta BR se recomienda escribirla as: <br />.
Toda pgina Web, esta dividida en dos partes bien definidas: la primera es la
cabecera o encabezado y la segunda es el cuerpo o contenido del
documento.
<HTML>
<HEAD>
<TITLE> Ttulo de la pgina </TITLE>
</HEAD>
<BODY>
[En este lugar escribiremos el contenido de la pgina]
</BODY>
</HTML>
Ejercicio01.html
<HTML>
<HEAD>
<TITLE> Mi Primer Ejercicio </TITLE>
</HEAD>
<BODY>
<H1> <CENTER> Ejercicio 1 </CENTER> </H1>
<HR>
Esta es mi primera pgina Web programando con HTML, aun es muy sencillo el
diseo pero pronto haremos pginas ms complejas.
<P> Este es el segundo prrafo.
</BODY>
</HTML>
Resultado Web
Negrita y Cursiva
Cuando trabajamos con texto formateado, las caractersticas ms utilizadas
son: negrita y cursiva. Pues en HTML, podemos darle esas caractersticas al
texto utilizando las etiquetas: <B> para poner el texto en negrita, y <I> para
formato cursiva. Cada una de ellas si cuenta con su respectiva etiqueta de
cierre (</B> y </I>).
Espacios en blanco
Al escribir el texto, si ponemos ms de un espacio en blanco entre dos
palabras observamos que el navegador slo reconoce uno de ellos. Si
queremos forzarle a que lo haga, debemos poner el cdigo " " (non-
breaking space).
Superndices y Subndices
En las frmulas matemticas puede interesar poder escribir ndices y
subndices, que se consiguen con las etiquetas <SUP> </SUP> y <SUB>
</SUB> respectivamente. Por ejemplo: m2 se obtiene con: m<SUP>2</SUP>
y vx con: v<SUB>x</SUB>.
Listas
Cuando tenemos un conjunto de elementos es necesario mostrarlos en
forma de listas, las cuales pueden ser de diferentes tipos:
Una lista sin orden (Unordered List) sirve para presentar cosas que, por no
tener un orden determinado, no necesitan ir precedidas por un nmero. Su
estructura es la siguiente:
<UL>
<LI> Naranja
<LI> Manzana
<LI> Fresa
<LI> Etc.
</UL>
Como se puede apreciar, para crear una lista de este tipo se utiliza la
etiqueta <UL>, y luego para cada elemento la etiqueta <LI> (List Item).
Resultado Web
Resultado Web
<OL>
<LI> Introduccion
<LI> Conceptos Basicos
<LI> Aplicaciones
<LI> Bibliografia
</OL>
El texto aparecer de la siguiente forma:
Al igual que las listas sin orden, tambin se pueden anidar las listas
ordenadas.
El tercer tipo lo forman las listas de definicin. Como su nombre indica, son
apropiadas para glosarios (o definiciones de trminos). Toda la lista debe ir
englobada entre las etiquetas <DL> y </DL>. Y a diferencia de las dos que
hemos visto, cada rengln de la lista tiene dos partes: 1) el nombre de la
cosa a definir, que se consigue con la etiqueta <DT> (definition term) y 2) la
definicin de dicha cosa, que se consigue con la etiqueta <DD> (definition
definition).
<DL>
<DT> HTML
<DD> Son las iniciales de HyperText Markup Language
<DT> WWW
<DD> Son las iniciales de World Wide Web
</DL>
Su resultado es:
Por ejemplo:
Ejemplo 2: Comentarios
Ejercicio02.html
<HTML>
<HEAD>
<TITLE> Ejercicio 2 </TITLE>
</HEAD>
<BODY>
<CENTER>
<H1> Mis Cursos </H1>
</CENTER>
<HR>
Sin un orden particular, mis <B> cursos </B> son los siguientes:
<UL>
<LI> Redes de computadoras
<LI> Ingenieria de Software
<UL>
<LI> Herramientas Case
<LI> Software de Aplicacin I
<LI> Software de Aplicacin II
</UL>
<LI> Sistemas de Informacin Gerencial
</UL>
Los cursos que me gustan son <I> (en orden de preferencia): </I>
<OL>
<LI> Ingenieria de Software
<LI> Sistemas de Informacin Gerencial
<LI> Redes de Computadoras
</OL>
</BODY>
</HTML>
Resultado Web:
Caracteres especiales
Hemos podido notar en los ejemplos anteriores, que las palabras no
aparecen con tildes, y no hemos utilizado algunos otros caracteres
especiales, esto debido a que existen algunas limitaciones para escribir el
texto. Una de ellas es debido a que las etiquetas se forman como un
comando escrito entre los smbolos "<" y ">". Por tanto, si se quisieran
escribir estos caracteres como parte normal del texto, provocara una
ambigedad, ya que el navegador podra interpretarlos como el comienzo o
final de una etiqueta, en vez de un carcter ms del texto.
Podemos ver, que estos cdigos empiezan siempre con el signo & y
acaban siempre con ;. De igual manera, existen cdigos para escribir letras
especficas de distintos idiomas. Los cdigos de las vocales acentuadas se
Todo esto, que como se ve es muy laborioso, puede parecer intil ya que si
escribimos nuestro texto sin hacer ningn caso de estas convenciones,
escribiendo las letras acentuadas y dems signos directamente, es muy
posible que el resultado lo veamos correctamente en nuestro navegador,
pero nunca podremos estar seguros que les ocurra lo mismo a todos los que
accedan a nuestras pginas con otros navegadores distintos.
Ejercicio03.html
<HTML>
<HEAD>
<TITLE> Ejercicio 3 </TITLE>
</HEAD>
<BODY>
<CENTER>
<H1> Mis Cursos </H1>
</CENTER>
<HR>
Sin un orden particular, mis <B> cursos </B> son los siguientes:
<UL>
<LI> Redes de computadoras
<LI> Ingeniería de Software
<UL>
<LI> Herramientas Case
<LI> Software de Aplicación I
<LI> Software de Aplicación II
</UL>
<LI> Sistemas de Información Gerencial
</UL>
Los cursos que me gustan son <I> (en orden de preferencia): </I>
<OL>
<LI> Ingeniería de Software
Resultado Web:
Enlaces o hipervnculos
El xito de la Web, se basa justamente en este elemento: el Hipervnculo o
enlace, pues nos da la posibilidad de unir los distintos documentos repartidos
por todo el mundo.
Tipos de enlaces
Los enlaces los podemos clasificar en cuatro tipos:
Por ejemplo, si quiero saltar desde aqu a la pantalla final, pongo la siguiente
etiqueta:<A HREF="#final"> Haga Click aqu para ir al final</A>.
En el final del documento se inserta esta etiqueta: <A NAME="final"> </A>.
Ejemplo 4: Enlaces
Resultado Web:
Imgenes
La etiqueta que nos sirve para incluir imgenes en las pginas Web es muy
similar a la de enlaces a otras pginas. A esta etiqueta se le indica el nombre
y la localizacin de un archivo que contiene una imagen.
<IMG SRC="imagen.gif">
Con ALT se inserta una descripcin (una palabra o una frase breve) de la
imagen. ALT se puede omitir, es en beneficio de los que accedan a nuestra
pgina con un programa navegador en forma de texto slo. Ya que no son
capaces de ver la imagen, por lo menos pueden hacerse una idea sobre ella.
Donde xxx era el destino del enlace e yyy el texto del enlace (o ms
generalmente hablando, lo que aparece en la pantalla como el enlace;
anteriormente era un texto, y en ste va a ser una imagen). En este caso
sustituimos xxx por el nombre del archivo de la pgina a la que queremos
acceder. Y en lugar de yyy ponemos la etiqueta completa de la imagen (que
queda as englobada dentro de la etiqueta del enlace).
Ejemplo 5: Imgenes
<HTML>
<HEAD>
Resultado Web:
Tablas
Las etiquetas necesarias para crear tablas son:
<TABLE> Y </TABLE> para especificar el inicio y final de la tabla.
<TABLE BORDER=[espesor]>
[resto de las etiquetas]
</TABLE>
Por ejemplo: si queremos una tabla con un borde de una unidad de espesor,
escribiremos el siguiente cdigo:
<TABLE BORDER=1>
[resto de las etiquetas]
</TABLE>
Ejemplo 6: Tablas
Ejercicio06.html
<HTML>
<HEAD><TITLE> Ejercicio 6 </TITLE></HEAD>
<BODY BGCOLOR="#CCFFFF" TEXT="#AA0000">
<CENTER>
<H1> Ejercicio 6 </H1>
</CENTER>
<!-- Lnea horizontal con 75% de ancho de la ventana -->
<HR width=75%>
<A HREF="ejercicio01.html"> <IMG SRC="iconos/nuevo.gif" WIDTH=20 HEIGHT=22
border="0"> </A>
<TABLE BORDER=1>
<TR><TD>fila1-celda1</TD> <TD>fila1-celda2</TD> <TD>fila1-celda3</TD></TR>
<TR><TD>fila2-celda1</TD> <TD>fila2-celda2</TD> <TD>fila2-celda3</TD></TR>
</TABLE>
</BODY>
</HTML>
Resultado Web:
Titular de la tabla
Se puede aadir un titular a la tabla, es decir un texto situado en la parte
superior de la tabla que indica cul es su contenido. ste titular se consigue
con las etiquetas: <CAPTION> y </CAPTION> para su inicio y finalizacin,
respectivamente.
<table BORDER="1">
<caption>Ejemplo de filas desiguales </caption>
<tr>
<td>fila1-celda1</td>
<td>fila1-celda2</td>
<td>fila1-celda3</td>
</tr>
<tr>
<td>fila2-celda1</td>
<td>fila2-celda2</td>
</tr>
</table>
Resultado Web:
Adems de las celdas que contienen datos normales, podemos poner, si nos
conviene, celdas de cabecera, que se distinguen por estar el texto de dichas
celdas en negrita y centrado. Estas celdas se insertan escribiendo la
etiqueta: <TH> y </TH>. Vamos a aadir, en el ejemplo anterior, una fila de
estas celdas de cabecera, antes de las otras dos que ya existan:
<TABLE BORDER="1">
<CAPTION>Ejemplo de filas desiguales </CAPTION>
<TR>
<TH>Columna 1</TH> <TH>Columna 2</TH> <TH>Columna 3</TH>
</TR>
<TR>
<TD>fila1-celda1</TD>
<TD>fila1-celda2</TD>
<TD>fila1-celda3</TD>
</TR>
<TR>
<TD>fila2-celda1</TD>
<TD>fila2-celda2</TD>
</TR>
</TABLE>
Resultado Web
Por ejemplo, en la tabla anterior vamos a aadir una fila con una sola celda,
que abarca a tres columnas:
<TABLE BORDER="1">
<CAPTION>Ejemplo de filas desiguales </CAPTION>
<TR>
<TH>Columna 1</TH> <TH>Columna 2</TH> <TH>Columna 3</TH>
</TR>
<TR>
<TD COLSPAN=3> Celda sobre 3 columnas </TD>
<TR>
<TR>
<TD>fila1-celda1</TD>
<TD>fila1-celda2</TD>
<TD>fila1-celda3</TD>
</TR>
<TR>
<TD>fila2-celda1</TD>
<TD>fila2-celda2</TD>
</TR>
</TABLE>
Resultado Web
O, en la misma tabla, vamos a aadir una celda en la primera fila. pero que
abarque tambin a la siguiente:
<TABLE BORDER="1">
<CAPTION>Ejemplo de filas desiguales </CAPTION>
<TR>
Resultado Web
Se puede combinar este atributo con CELLSPACING, visto lneas atrs. Por
ejemplo, una tabla con bordes de 5 de espesor, separacin entre celdas de
15 y separacin del contenido con respecto a los bordes de las celdas de 20,
lo obtendramos con:
Resultado Web
ejemplo06.html
<HTML>
<HEAD>
<TITLE> Tablas </TITLE>
</HEAD>
<BODY>
<CENTER>
<H1> Tablas </H1>
</CENTER>
<HR width=75%>
Resultado Web
Formularios
Los formularios permiten a los usuarios enviar informacin al servidor, en el
cual hay instalado(s) programa(s) que procesan esta informacin.
Estructura de un formulario
La estructura de un formulario es la siguiente:
Etiqueta de inicio:
Cuerpo del formulario, con los distintos elementos para poder
introducir los datos.
Botones de envo y de borrado.
Etiqueta de cierre </FORM>
Etiqueta de inicio
<FORM ACTION=mailto:email METHOD="POST" ENCTYPE = "TEXT/PLAIN">
El atributo ACTION indica la accin que se debe efectuar.
El atributo METHOD=POST indica que los datos sean inmediatamente
enviados a la direccin de email u a otro destino establecido segn el
atributo ACTION.
Con el atributo ENCTYPE="TEXT/PLAIN" se consigue que las respuestas
las recibamos como un archivo de texto, perfectamente legible y sin
codificar.
En donde:
xxx es la palabra que indica el tipo de introduccin.
yyy es el nombre que le asignamos nosotros a la variable de introduccin del
dato.
zzz es el nombre de la variable que contendr el valor del elemento.
Apellido=Ruiz
Resultado Web:
Botones de radio
Cuando queremos que el usuario elija una nica opcin entre varias,
podemos hacer uso de los botones de radio, que se consiguen con la
etiqueta:
Consideraciones finales
Hasta ahora hemos visto uno a uno los diferentes elementos que se pueden
utilizar. Pero no hay ningn inconveniente en usar, dentro del mismo
formulario, distintos tipos de introduccin de datos. Al pulsar el usuario el
botn de envo recibiramos en email suyo con las distintas parejas
NAME=VALUE de cada elemento, encadenadas con el smbolo &.
Ejercicio10.html
<HTML>
<HEAD><TITLE>LIBRO DE VISITAS</TITLE></HEAD>
<BODY>
<P><CENTER>
<H2>Libro de visitas</H2>
<P>
<FORM ACTION=mailto:xy@ab METHOD="POST" ENCTYPE="TEXT/PLAIN">
Tu nombre:
<BR><INPUT TYPE="text" NAME="Nombre">
<P>Escribe tus comentarios:
<BR><TEXTAREA NAME="Comentarios" ROWS="6" COLS="40">
</TEXTAREA>
<P><INPUT TYPE="submit" VALUE="Enviar datos">
<INPUT TYPE="reset" VALUE="Borrar datos">
</FORM>
<P><HR><P>
</BODY>
</HTML>
Resultado Web:
Resultado de ejercicio10.html
HTML 4
La especificacin 4.0 de HTML, nos trae algunas novedades respecto a la
versin 3.2, las cuales sern comentadas a continuacin:
Elementos nuevos
Los nuevos elementos en HTML 4.0 son: ABBR, ACRONYM, BDO,
BUTTON, COL, COLGROUP, DEL, FIELDSET, FRAME, FRAMESET,
IFRAME, INS, LABEL, LEGEND, NOFRAMES, NOSCRIPT, OBJECT,
OPTGROUP, PARAM, SPAN, TBODY, TFOOT, THEAD y Q.
Frames
Frames (en ingls, marcos o cuadros) es un procedimiento del lenguaje
HTML para dividir la pantalla en diferentes zonas, o ventanas, que pueden
actuar independientemente unas de otras, como si se trataran de pginas
diferentes, pues incluso cada una de ellas pueden tener sus propias barras
de desplazamiento. Los navegadores que lo implementan son el Netscape
2.0, y el Explorer 2.0 en adelante. Una de sus caractersticas ms
importantes es que pulsando un enlace situado en un frame, se puede
cargar en otro frame una pgina determinada. Esto se utiliza frecuentemente
para tener un frame estrecho en la parte lateral (o superior) con un ndice del
contenido en forma de diferentes enlaces, que, al ser pulsados cargan en la
ventana principal las distintas pginas. De esta manera se facilita la
navegacin entre las pginas, pues aunque se vaya pasando de unas a
otras, siempre estar a la vista el ndice del conjunto.
Ejercicio11.html
<HTML>
<HEAD>
<TITLE>Mi página con frames</TITLE>
</HEAD>
<FRAMESET COLS="20%, 80%">
<FRAME SRC="ejercicio11a.html">
<FRAME SRC="ejercicio11b.html" NAME="principal">
</FRAMESET>
<NOFRAMES>
Estas utilizando un navegador que no soporta frames.
<A HREF="ejercicio12.html"> ir a página sin frames </A>.
</NOFRAMES>
</HTML>
Ejercicio11a.html
<html>
<head>
<title>marco 1</title>
</head>
<body>
marco 1
</body>
</html>
Ejercicio11b.html
<html>
<head>
<title>marco 2</title>
</head>
<body>
marco 2
</body>
</html>
Resultado Web
<FRAME SRC="ejercicio11a.html">
<FRAME SRC="ejercicio11b.html" NAME="principal">
Con esto se define que el contenido del primer frame (el de la izquierda) sea
el documento HTML ejercicio11a.html y el del segundo (el de la derecha) sea
el documento HTML ejercicio11b.html.
ser el cdigo HTML de una pgina completa (lo que normalmente va entre
las etiquetas <BODY> y </BODY>)
Un segundo diseo con frames podra ser dividiendo la pgina de manera horizontal.
Ejemplo11c.html
<HTML>
<HEAD>
<TITLE>Mi página con frames</TITLE>
</HEAD>
<FRAMESET ROWS="20%, 80%">
<FRAME SRC="ejercicio11a.html">
<FRAME SRC="ejercicio11b.html" NAME="principal">
</FRAMESET>
<NOFRAMES>
Estas utilizando un navegador que no soporta frames.
<A HREF="ejercicio12.html"> ir a página sin frames </A>.
</NOFRAMES>
</HTML>
Resultado Web:
Etiqueta ACRONYM
Indica un acrnimo (es la suma de los significados de las palabras que lo
forman. Por ejemplo HTML, (Hyper Text Markup Language).
Etiqueta ABBR
Indica una forma abreviada (etc, Dr, Ing, Corp, etc.).
Ejemplo12.html
Resultado Web:
Etiqueta Q
Esta etiqueta inserta comillas dobles en una frase. Se utiliza para citar
frases.
Ejemplo 13: Frase entre comillas
Ejercicio13.html
Carlos dice:
<Q lang="es"> Estoy aprendiendo HTML </Q><br>
Jaime dice:
<Q lang="es"> Es un lenguaje fácil de aprender </Q>
Resultado Web:
Ejercicio14.html
<INS datetime="2008-09-25T08:15:30-05:00"
cite="http://oscar.capunay.com/index.php">Ejemplo de texto nuevo.
Este texto fue agregado.
</INS>
<P>
Esta frase tiene <DEL>una palabra borrada</DEL> algo borrado.
</P>
Resultado Web:
OBJECT
Esta etiqueta se usa cuando un elemento Web ser representado utilizando
un plug-in de algn software externo al agente o navegador utilizado.
PARAM
Las etiquetas PARAM especifican un conjunto de valores que pueden ser
necesarios para un objeto en tiempo de ejecucin. Puede aparecer cualquier
nmero de elementos PARAM en el contenido de un elemento OBJECT o
APPLET, y en cualquier orden, pero deben ser colocados al principio del
contenido del elemento OBJECT o APPLET que los contienen.
Ejemplo15.html
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swfl
ash.cab#version=6,0,0,0"
WIDTH="100%" HEIGHT="100%" ALIGN="" id="intro2">
<PARAM NAME=movie VALUE="intro2.swf">
<PARAM NAME=loop VALUE=false>
<PARAM NAME=menu VALUE=false>
<PARAM NAME=quality VALUE=high>
<PARAM NAME=scale VALUE=exactfit>
<PARAM NAME=bgcolor VALUE=#080638>
<EMBED src="intro2.swf" loop=false menu=false quality=high scale=exactfit
bgcolor=#080638 WIDTH="100%" HEIGHT="100%" NAME="intro2"
ALIGN=""
TYPE="application/x-shockwave-flash"
PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED
>
</OBJECT>
</body>
</html>
Resultado Web:
TABLAS
Ejercicio16.html
<body>
<table>
<thead>
<tr>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
</tr>
</thead>
<tfoot>
<tr>
<th colspan="3">Pie de la tabla</th>
</tr>
</tfoot>
<tbody>
<tr><td>1</td> <td>Kelly</td> <td>Quiroz Ch</td> </tr>
<tr> <td>2</td> <td>Carlos</td> <td>Capuay Uceda</td> </tr>
<tr> <td>3</td> <td>Marco</td> <td>Quiroz Chavil</td> </tr>
<tr> <td>4</td> <td>Jaime</td> <td>Capuay Uceda</td> </tr>
</tbody>
</table>
</body>
</html>
Resultado Web:
FORMULARIOS
El elemento BUTTON
Los botones creados con el elemento BUTTON funcionan exactamente igual
que los botones creados con el elemento INPUT, pero ofrecen posibilidades
ms ricas de representacin: el elemento BUTTON puede tener contenido.
Por ejemplo, un elemento BUTTON que contenga una imagen se parece y
funciona como un elemento INPUT cuyo atributo type sea igual a "image",
pero el tipo de elemento BUTTON permite un contenido.
Los navegadores pueden representar los botones BUTTON con un relieve y
un movimiento arriba/abajo al pulsarlos, mientras que pueden representar los
botones INPUT como imgenes "planas".
El siguiente ejemplo extiende un ejemplo previo, pero creando los botones
de envo y de restablecer con BUTTON en lugar de INPUT. Los botones
contienen imgenes sacadas de elementos IMG.
Ejercicio17.html
<body>
<FORM action="http://oscar.capunay.com/datos/formulario" method="post">
<P>
Nombre: <INPUT type="text" name="txtnombre"><BR>
Apellido: <INPUT type="text" name="txtapellido"><BR>
email: <INPUT type="text" name="txtemail"><BR>
sexo: <INPUT type="radio" name="optsexo" value="H"> Hombre
<INPUT type="radio" name="optsexo" value="M"> Mujer<BR>
<BUTTON name="enviar" value="enviar" type="submit">
Editar<IMG src="iconos/editar.gif" alt="Enviar Datos"></BUTTON>
<BUTTON name="reiniciar" type="reset">
Restablecer<IMG src="iconos/nuevo.gif" alt="Limpiar"
width="12"></BUTTON>
</P>
</FORM>
</body>
</html>
Resultado Web:
El elemento OPTGROUP
El elemento OPTGROUP permite a los autores agrupar opciones lgicamente.
Esto es particularmente til cuando el usuario debe elegir de entre una larga
lista de opciones; es ms fcil apreciar y recordar grupos de opciones
relacionadas que una larga lista de opciones sueltas. En HTML 4, todos los
elementos OPTGROUP deben especificarse directamente dentro de un
elemento SELECT (es decir, no pueden anidarse unos grupos dentro de
otros).
Ejercicio18.html
<body>
<FORM action="http://oscar.capunay.com/datos/registro.php"
method="post">
<P>
<SELECT name="Producto" size="1">
<OPTION selected label="ninguno" value="ninguno"> Ninguno</OPTION>
<OPTGROUP label="Limpieza">
<OPTION label="escoba" value="limp001">Escoba</OPTION>
<OPTION label="jabón"
value="limp002">jabón</OPTION>
<OPTION label="detergente" value="limp003">Detergente</OPTION>
</OPTGROUP>
<OPTGROUP label="Dulces">
<OPTION label="chocolate" value="dulc001">Chocolate</OPTION>
Resultado Web:
Ejercicio19.html
<body>
<FORM action="data/proceso1.php" method="post">
<FIELDSET>
<LEGEND>Datos Personales </LEGEND>
Nombres:<INPUT name="txtnombres" type="text" tabindex="1"><br>
Apellidos:<INPUT name="txtapellidos" type="text" tabindex="2"><br>
Ciudad: <INPUT name="txtciudad" type="text" tabindex="3"><br>
Teléfono: <INPUT name="txtfono" type="text" tabindex="4"><br>
</FIELDSET>
<FIELDSET>
<LEGEND>Datos Internet</LEGEND>
Página personal:<INPUT name="txtpagina" type="text" size="50"
tabindex="5"><br>
Blog:<INPUT name="txtblog" type="text" size="40" tabindex="2"><br>
Correo Electrónico: <INPUT name="txtcorreo" type="text" size="30"
tabindex="3"><br>
Skype: <INPUT name="txtfono" type="text" size="10" tabindex="4"><br>
ICQ: <INPUT name="txtfono" type="text" size="10" tabindex="4"><br>
</FIELDSET>
<button type="submit">Enviar</button>
</FORM>
</body>
</html>
Resultado Web:
Ejercicio20.html
<table>
<tr>
<th width="16"><a href="#" onClick="toggle('tablas');return false;"
title="Ocultar o Mostrar Menu">
<img src="iconos/nuevo.gif" alt="despliegue" width="16" height="16"
border="0"></a></th>
<th><SPAN>Tablas</SPAN></th>
</tr>
</table>
<div id="tablas" style="display: none;">
<table>
<tr>
<td><a href="universidad.php"
target="principal">Universidades</a></td>
</tr>
<tr>
<td><a href="facultad.php" target="principal">Facultades</a></td>
</tr>
<tr>
<td><a href="escuela.php" target="principal">Escuelas</a></td>
</tr>
<tr>
<td><a href="semestre.php" target="principal">Semestre</a></td>
</tr>
</table>
</div>
<table>
<tr>
<th width="16"><a href="#" onClick="toggle('academico');return
false;" title="Ocultar o Mostrar Menu">
<img src="iconos/nuevo.gif" alt="despliegue2" width="16" height="16"
border="0"></a></th>
<th><SPAN>Maestros</SPAN></th>
</tr>
</table>
<div id="academico" style="display: block;">
<table>
<tr>
<td><a href="alumno.php" target="principal">Alumnos</a></td>
</tr>
<tr>
<td><a href="curso.php" target="principal">Cursos</a></td>
</tr>
<tr>
<td><a href="evaluacion.php" target="principal"> Evaluaciones
</a></td>
</tr>
<tr>
<td><a href="registro.php" target="principal">Registro</a></td>
</tr>
<tr>
<td><a href="asistencia.php"
target="principal">Inasistencias</a></td>
</tr>
<tr>
<td><a href="resultado.php" target="principal">Resultados</a></td>
</tr>
<tr>
<td><a href="mensaje.php" target="principal">Mensajes</a></td>
</tr>
<tr>
<td><a href="encuesta.php" target="principal">Encuestas</a></td>
</tr>
</table>
</div>
</body>
</html>
Podemos ver en este ejemplo que podemos ocultar o hacer visible las DIV.
Resultado Web:
JavaScript
JavaScript, al igual que Java o VRML, es una de las mltiples maneras que
han surgido para extender las capacidades del lenguaje HTML. Al ser la ms
sencilla, es por el momento la ms extendida. Es importante saber que:
JavaScript no es un lenguaje de programacin propiamente dicho. Es un
lenguaje script u orientado a documento, como pueden ser los lenguajes de
macros que tienen muchos procesadores de texto. Nunca se podr hacer un
programa con JavaScript, tan slo se podr mejorar una pgina Web con
algunas cosas sencillas. JavaScript y Java son dos cosas distintas,
principalmente porque Java s que es un lenguaje de programacin
completo. Lo nico que comparten es la misma sintaxis. Existen tres
versiones de JavaScript. Casi todo lo que se ha escrito en este documento
funciona con la versin 1.0, que naci con el Netscape Navigator 2.0.
Tambin existe una versin 1.3, introducida en la versin 4.06. Esta versin
es una pequea revisin de la 1.2 creada para ajustarse al estndar
internacional ECMA que regula el lenguaje JavaScript.
HolaWeb.html
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function HolaWeb() {
alert("Hola, Web!");
}
</SCRIPT>
</HEAD>
<BODY>
<FORM>
<INPUT TYPE="button" NAME="Boton" VALUE="Pulsame"
onClick="HolaWeb()">
</FORM>
</BODY>
</HTML>
Ahora vamos a ver, paso por paso, que significa cada uno de los elementos
extraos que tiene la pgina anterior:
<SCRIPT LANGUAGE="JavaScript">
</SCRIPT>
Por otra parte el cdigo de JavaScript puede ser incluido en la pgina Web
de la siguiente manera:
function HolaWeb() {
alert("Hola, Web!");
}
<FORM>
<INPUT TYPE="button" NAME="Boton" VALUE="Pulsame"
onClick="HolaWeb()">
</FORM>
Dentro del elemento que usamos para mostrar un botn vemos una cosa
nueva: onClick. Es un controlador de evento. Cuando el usuario pulsa el
botn, el evento click se dispara y ejecuta el cdigo que tenga entre comillas
el controlador de evento onClick, en este caso la llamada a la funcin
HolaWeb(), que tendremos que haber definido con anterioridad. Existen
muchos ms eventos que iremos descubriendo segn avancemos. En
realidad, podramos haber escrito lo siguiente:
<FORM>
<INPUT TYPE="button" NAME="Boton" VALUE="Pulsame"
onClick="alert('Hola,Mundo!')">
</FORM>
Elementos bsicos
Comentarios
Un comentario es una parte de nuestro programa que el ordenador ignora y
que, por tanto, no realiza ninguna tarea. Se utilizan generalmente para poner
Sin embargo, tambin permite un tipo de comentario que puede tener las
lneas que queramos. Estos comentario comienzan con: /* y terminan por */.
Literales
Se llama as a los valores que puede tomar una variable o una constante.
Aparte de los distintos tipos de nmeros y valores booleanos:
Javascript ( 2002)
Sentencias y bloques
En Javascript las sentencias se separan con un punto y coma, y se agrupan
mediante llaves ({ y }).
Tipos de datos
En Javascript los tipos de datos se asignan dinmicamente segn
asignamos valores a las distintas variables y son los clsicos: cadenas de
texto, varios tipos de enteros y reales, valores booleanos, vectores, matrices,
referencias y objetos.
Variables
Las variables son nombres que ponemos a los lugares donde almacenamos
la informacin. En Javascript, deben comenzar por una letra o un subrayado
(_), pudiendo haber adems dgitos entre los dems caracteres.
No es necesario declarar una variable, pero cuando se hace es por medio
de la palabra reservada var. Una variable, cuando no es declarada, tiene
siempre mbito global, mientras que en caso contrario ser de mbito
global si est definida fuera de una funcin, y local si est definida dentro:
var x, y, z;
El tipo de datos de la variable ser aquel que tenga el valor que asignemos a
la misma, a no ser que le asignemos un objeto por medio del operador new.
Vectores y matrices
Estos tipos de datos complejos son un conjunto ordenado de elementos,
cada uno de los cuales es en s mismo una variable distinta. En Javascript,
los vectores y las matrices son objetos. Como veremos que hacen todos
los objetos, se declaran utilizando el operador new:
Operadores
Los operadores nos permiten unir identificadores y literales para formar
expresiones. Las expresiones son el resultado de operaciones matemticas
o lgicas. Un literal o una variable son expresiones, pero tambin lo son esos
mismos literales y variables unidos entre s mediante operadores.
JavaScript dispone de muchos ms operadores que la mayora de los
lenguajes, si exceptuamos a sus padres C, C++ y Java. Algunos de ellos no
los estudiaremos debido a su escasa utilidad y con algunos otros
(especialmente el condicional) deberemos andarnos con cuidado, ya que
puede lograr que nuestro cdigo no lo entendamos ni nosotros.
Operadores aritmticos
JavaScript dispone de los operadores aritmticos clsicos y algn que otro
ms:
Tabla 4. Operadores aritmticos
Expresin de Resultado del
Descripcin Smbolo
ejemplo ejemplo
Multiplicacin * 2*4 8
Divisin / 5/2 2.5
Resto de una divisin
% 5%2 1
entera
Suma + 2+2 4
Resta - 7-2 5
Incremento ++ ++2 3
Decremento -- --2 1
a = 1;
b = ++a;
En este primer caso, a valdr 2 y b 2 tambin. Sin embargo:
a = 1;
b = a++;
Operadores de comparacin
Operadores lgicos
Estos operadores permiten realizar expresiones lgicas complejas:
Operadores de asignacin
Normalmente los lenguajes tienen un nico operador de asignacin, que en
JavaScript es el smbolo =. Pero en este lenguaje, dicho operador se puede
combinar con operadores aritmticos y lgicos para dar los siguientes:
Operadores Especiales
Vamos a incluir en este apartado operadores que no hayan sido incluidos en
los anteriores. La concatenacin de cadenas, por ejemplo, se realiza con el
smbolo +. El operador condicional tiene esta estructura:
a=2>3?1:2
Estructuras de control
Estas estructuras se pueden clasificar en dos grandes grupos: bifurcaciones
condicionales y bucles. Aparte de los dos tipos clsicos de estructuras de
control, en JavaScript disponemos de algunas estructuras adicionales para
facilitar el manejo de objetos.
a) Bifurcaciones condicionales
Una bifurcacin condicional en una estructura que realiza una tarea u otra
dependiendo del resultado de evaluar una condicin. La primera que vamos
a estudiar es la estructura if...else. Esta estructura es la ms sencilla y
antigua de todas:
a=5;
b=7;
if (a>b)
alert(a es mayor que b);
else
alert(a no es mayor que b);
La siguiente estructura bifurca segn los distintos valores que pueda tomar
una variable especfica. Es la sentencia switch:
switch(color) {
case "azul":
alert( El color elegido es el azul);
break;
case "rojo":
alert( El color elegido es el rojo);
break;
default:
alert( El color por defecto es negro);
}
Bucles
Un bucle es una estructura que permite repetir una tarea un nmero de
veces, determinado por una condicin. Para hacer bucles podemos utilizar
las estructuras while y do...while. Estos bucles iteran indefinidamente
mientras se cumpla una condicin. La diferencia entre ellas es que la primera
comprueba dicha condicin antes de realizar cada iteracin y la segunda lo
hace despus:
var numero=0;
while (numero==1) {
alert('Soy un while');
}
do {
alert('Soy un do...while');
} while (numero==1);
var numero = 4;
for (n = 2, factorial = 1; n <= numero; n++)
factorial *= n;
Por ltimo, hay que decir que la ejecucin de la sentencia break dentro de
cualquier parte del bucle provoca la salida inmediata del mismo. Aunque a
veces no hay ms remedio que utilizarlo, es mejor evitarlo para mejorar la
legibilidad y elegancia del cdigo.
Este ejemplo sumara dos a todos los elementos del vector. Sin embargo,
conviene tener cuidado ya que, de los navegadores de Microsoft, slo la
versin 5 lo soporta.
La otra estructura es with, que nos permitir una mayor comodidad cuando
tengamos que tratar con muyas propiedades de un mismo objeto. En lugar
de tener que referirnos a todas ellas con un objeto.propiedad podemos
hacer:
with (objeto) {
propiedad1 = ...
propiedad2 = ...
...
}
Objetos
Un objeto es una estructura que contiene tanto variables (llamadas
propiedades) como las funciones que manipulan dichas variables (llamadas
mtodos).
A partir de esta estructura se ha creado un nuevo modelo de programacin
(la programacin orientada a objetos) que atribuye a los objetos propiedades
como herencia o polimorfismo.
alert(miLibro.autor);
function escribirLibro() {
alert("El libro " + this.titulo + " de " + this.autor +
" trata sobre " + this.tema);
}
Objetos predefinidos
JavaScript dispone de varios objetos predefinidos para acceder a muchas de
las funciones normales de cualquier lenguaje, como puede ser el manejo de
vectores o el de fechas. En algunos casos estaremos tratando con objetos
aunque no nos demos cuenta, ya que los usos ms habituales de los
mismos disponen de abreviaturas que esconden el hecho de que sean
objetos.
a) Objeto Array
Como dijimos antes, este objeto permite crear vectores. Se inicializa de
cualquiera de las siguientes maneras:
function compararEnteros(a,b) {
return a<b ? -1 : (a==b ? 0 : 1);
}
b) Objeto Date
Este objeto nos permitir manejar fechas y horas. Se invoca as:
fecha = new Date();
fecha = new Date(ao, mes, dia);
fecha = new Date(ao, mes, dia, hora, minuto, segundo);
getTime()
setTime(milisegundos)
getYear()
setYear(ao)
getFullYear()
setFullYear(ao)
Realizan la misma funcin que los anteriores, pero sin tantos los, ya que
siempre devuelven nmeros con todos sus dgitos. Funciona en Explorer 4 y
Netscape 4.06 y superiores.
getMonth()
setMonth(mes)
getDate()
setDate(dia)
getHours()
setHours(horas)
getMinutes()
setMinutes(minutos)
getSeconds()
setSeconds(segundos)
getDay()
c) Objeto Math
Este objeto no est construido para que tengamos nuestras variables Math,
sino como un contenedor donde meter diversas constantes (como Math.E y
Math.PI) y los siguientes mtodos matemticos:
Devuelve el entero ms
round Math.round(-2.7) -3
cercano o igual al argumento
Devuelve el menor (o mayor) de
min, max Math.min(2,4) 2
sus dos argumentos
Exponenciacin, siendo el
pow primer argumento la base y el Math.pow(2,4) 16
segundo el exponente
sqrt Raz cuadrada Math.sqrt(4) 2
d) Objeto Number
Al igual que en el caso anterior, no se pueden crear objetos de tipo
Number, sino que debemos referirnos al genrico. Este objeto contiene
como propiedades los siguientes valores numricos.
e) Objeto String
Al crear una cadena estamos creando a la vez un objeto String asociado.
Su utilidad est en sus mtodos, entre los que cabe destacar:
charAt(pos) y charCodeAt(pos)
Devuelven el caracter o el cdigo numrico del carcter que est en la
posicin indicada de la cadena.
indexOf(subcadena)
Devuelven la posicin de la subcadena dentro de la cadena, o -1 en caso de
no estar.
split(separador)
Devuelven un vector con subcadenas obtenidas separando la cadena por el
carcter separador. No funciona en Explorer 3.
cadena = "Navidad,Semana Santa,Verano";
vector = cadena.split(",");
En el ejemplo, el vector tendr tres elementos con cada una de las
vacaciones de un escolar espaol normal.
concat(cadena2)
Devuelve el resultado de concatenar cadena2 al final de la cadena. No
funciona en Explorer 3 y no forma parte del estndar ECMA.
toLowerCase()y toUpperCase()
Transforman la cadena a minsculas y maysculas, respectivamente.
Eventos
Un evento, como su mismo nombre indica, es algo que ocurre. Para que una
rutina nuestra se ejecute slo cuando suceda algo extrao deberemos
llamarla desde un controlador de eventos. Estos controladores se asocian a
un elemento HTML y se incluyen as:
Lista de eventos
Aqu tienes una pequea gua de eventos definidos en JavaScript.
impidiendo, de paso, que quien est viendo la pgina pueda hacer uso del
mismo).
eventos.html
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!-- Los comentarios esconden el cdigo a navegadores sin JavaScript
function Alarma() {
alert("Se activo la funcin Alarma");
return true;
}
// -->
</SCRIPT>
</HEAD>
<BODY>
<A HREF="eventos.html" onMouseOver="Alarma()">
Pasa por aqu encima
</A>
</BODY>
</HTML>
Resultado Web:
load1.html
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!-- Los comentarios ocultan el cdigo a browsers sin JScript
function Saludo() {
alert("Hola");
}
// -->
</SCRIPT>
</HEAD>
<BODY onLoad="Saludo()">
...
</BODY>
</HTML>
load2.html
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
<!-- Los comentarios esconden el cdigo a navegadores sin JS
function Saludo() {
alert("Hola");
}
window.onload = Saludo;
// -->
</SCRIPT>
</HEAD>
<BODY>
...
</BODY>
</HTML>
Objeto Window
Es el objeto principal. Define la ventana sobre la que estamos trabajando e
incluye los objetos referentes a la barra de tareas, el documento o la
secuencia de direcciones de la ltima sesin. En este captulo veremos los
mtodos y propiedades ms utilizadas, al menos por m, dejando el estudio
de dichos objetos para sus captulos correspondientes.
An cuando el objeto se llame Window, disponemos siempre de una
referencia a l llamada window (recuerde que Javascript distingue entre
maysculas y minsculas). Ser con esa referencia con la que trabajemos.
Por ltimo, indicar que en Javascript, se supone que todas las propiedades y
mtodos que llamamos sin utilizar ninguna referencia, en realidad se hacen
utilizando esa referencia window. As, por ejemplo, cuando ejecutamos el
mtodo alert en realidad lo que estamos haciendo es ejecutar el mtodo
window.alert.
Permite crear (y abrir) una nueva ventana. Si queremos tener acceso a ella
desde la ventana donde la creamos deberemos asignarle una variable, si no
simplemente invocamos el mtodo: el navegador automticamente sabr
que pertenece al objeto window. El parmetro URL es una cadena que
contendr la direccin de la ventana que estamos abriendo: si est en
blanco, la ventana se abrir con una pgina en blanco. El nombre ser el
que queramos que se utilice como parmetro de un TARGET y las
propiedades son una lista separada por comas de algunos de los
siguientes elementos:
toolbar[=yes|no]
location[=yes|no]
directories[=yes|no]
status[=yes|no]
menubar[=yes|no]
scrollbars[=yes|no]
resizable[=yes|no]
width=pixels
height=pixels
ventanas.html
<HTML>
<HEAD>
<SCRIPT LANGUAGE="JavaScript">
function AbrirVentana() {
MiVentana=open("","ventana2","toolbar=no,directories=no,menubar=no,status=yes");
MiVentana.document.write("<HEAD><TITLE>Una nueva
ventana</TITLE></HEAD>");
MiVentana.document.write("<CENTER><H1><B>Texto de
prueba</B></H1></CENTER>");
}
</SCRIPT>
</HEAD>
<BODY>
<FORM>
<INPUT TYPE="button" NAME="Boton1" VALUE="Abrir otra ventana"
onClick="AbrirVentana()">
</FORM>
</BODY>
</HTML>
Resultado Web:
close()
Cierra la ventana. A no ser que hayamos acabado de abrirla nosotros
mostrar al usuario una ventana de confirmacin para que decida l si quiere
o no cerrarla. Esto se hace por motivos de seguridad, ya que sera
demasiado fcil hacer un script de esos mal intencionados que nos cerrase
la ventana del navegador, con lo que fastidia eso.
alert(mensaje)
Muestra una ventana de dilogo con el mensaje especificado.
confirm(mensaje)
Muestra una ventana de dilogo con el mensaje especificado y dos
botones. Si el usuario pulsa OK, el mtodo devuelve true. Si, en cambio,
pulsa Cancelar, devolver false.
prompt(mensaje, sugerencia)
Muestra una ventana de dilogo con el mensaje especificado y un campo
de texto en el que el usuario pueda teclear, cuyo valor inicial ser igual a
sugerencia. Si el usuario pulsa OK, el mtodo devuelve la cadena
introducida en el campo de texto. Si, por el contrario, pulsa Cancelar,
devolver el valor null. Dado que este valor se considera igual a false,
podemos comprabarlo directamente en una condicin para ver que ha hecho
el usuario.
Por ejemplo, el siguiente cdigo muestra un saludo slo si el usuario ha
pulsado el botn de Aceptar:
status
Define la cadena de caracteres que saldr en la barra de estado en un
momento dado.
defaultStatus
setTimeout("funcin",tiempo)
Llama a funcin cuando hayan pasado tiempo milisegundos.
Imprescindible a la hora de realizar cualquier rutina que deba ejecutarse a
cierta velocidad.
Objeto Document
Este objeto representa el documento HTML en el que estamos. Se accede a
l por medio de la referencia document. Su mayor importancia viene por el
nmero de vectores que posee, que referencian a objetos Image, Form o
Link, los cuales permiten acceder a las imgenes, formularios y enlaces del
documento, respectivamente.
lastModified
Contiene la fecha y hora en que se modific el documento por ltima vez y
se suele usar en conjuncin con write para aadir al final del documento
estas caractersticas.
bgColor
Modifica el color de fondo del documento. El color deber estar en el formato
usado en HTML. Es decir, puede ser red o FF0000.
forms[]
Vector que contiene los formularios del documento. El primero ser el
nmero 0, el segundo el 1, etc..
images[]
Vector que contiene las imgenes del documento. Se ordenan igual que en
el anterior caso, aunque tambin permiten ser accedidas con el nombre
como ndice. Es decir, a una imagen definida como <IMG SRC=".."
NAME="miImagen"> se puede acceder con
document.inages["miImagen"].
links[]
Vector que contiene los enlaces del documento. Se ordenan igual que en los
dos anterioers, aunque no se suele utilizar en el cdigo Javascript. Su razn
de ser es que, al ser los enlaces objetos, permiten incluir cdigo Javascript
en ellos por medio de la pseudo-URL javascript:codigo.
write(cadena) y writeln(cadena)
Escribe el cdigo HTML indicado en cadena en nuestro documento HTML.
writeln hace lo mismo, pero incluyendo al final un retorno de carro.
close()
Cierra el documento, impidiendo escribir de nuevo en l.
escribir.html
<HTML>
<HEAD>
<TITLE>Escribe y no sobreescribe</TITLE>
</HEAD>
<BODY>
Esta página fue modificada por ltima vez el da
<script language="JavaScript" type="text/javascript">
document.write(document.lastModified);
</SCRIPT>
</BODY>
</HTML>
Resultado Web:
Objeto Form
Los formularios siempre han sido la mejor manera de facilitar la
comunicacin entre los usuarios y los creadores de una Web. Sin embargo,
la implementacin de los mismos en el lenguaje HTML ha provocado ciertos
problemas debido a sus carencias. Estos problemas han intentado
solventarse con scripts, situados tanto en el servidor como en el navegador.
Objetos Text
Cuatro elementos HTML distintos (text, textarea, password y hidden) son,
desde el punto de vista del DOM, objetos tan parecidos entre s que vamos a
estudiarlos conjuntamente. En realidad, slo tienen tres propiedades
verdaderamente importantes: name, type y value.
formularios.html
<HTML>
<HEAD>
<TITLE>Ejemplo de formularios</TITLE>
<SCRIPT LANGUAGE="JavaScript">
function validar(direccion) {
if (direccion.indexOf("@") != -1)
return true;
else {
alert('Debe escribir una direccin vlida');
return false;
}
}
</SCRIPT>
</HEAD>
<BODY>
</BODY>
</HTML>
Resultado Web
selectedIndex
Empezando a contar a partir de cero, indica qu opcin est seleccionada. Si
hay varias seleccionadas, indica la opcin con el ndice ms bajo.
options[]
Vector que contiene los objetos Option correspondientes a todas y cada
una de las opciones. El objeto Option, por otro lado, dispone de otras dos
propiedades a estudiar (aparte de las comunes, como type o value):
Como ejemplo, vamos a ver una lista desplegable que nos permita navegar
por diversas pginas. Cada etiqueta OPTION tendr como parmetro
VALUE la direccin de la pgina Web e incluiremos un controlador del
select.html
<HTML>
<HEAD>
<TITLE>Ejemplo de Select</TITLE>
<SCRIPT LANGUAGE="JavaScript">
function irA(menu){
window.location.href = menu.options[menu.selectedIndex].value;
}
</SCRIPT>
</HEAD>
<BODY>
<FORM name="formulario">
<SELECT NAME="menu" SIZE=1 onChange ="irA(this)">
<OPTION VALUE="">Visitar
<OPTION VALUE="http://www.w3c.org">W3C
<OPTION VALUE="http://www.capunay.com">Capunay
<OPTION VALUE="http://www.google.com.pe">Google
</SELECT>
</FORM>
</BODY>
</HTML>
La funcin irA simplemente utiliza la opcin elegida para obtener por medio
de su valor la direccin de la pgina a la que debe acudir.
Resultado Web:
Otros objetos
El modelo de objetos del documento define varios objetos, por as decirlo,
"menores", que no tienen relacin con nada fsico de la pgina en la que
estamos. Es decir, no guardan relacin con las etiquetas HTML que estn en
ellas escritas.
Objeto History
Se accede a este objeto por medio de la referencia document.history y
contiene todas las direcciones que se han visitado en la sesin actual.
Aunque no permite acceder a ellas, dispone de varios mtodos para sustituir
el documento actual por alguno que el usuario ya haya visitado:
back()
Volver a la pgina anterior. Es muy sencillo de utilizar:
<A HREF="javascript:window.history.back()">
forward()
Ir a la pgina siguiente.
go(donde)
Ir a donde se indique, siendo donde un nmero tal que go(1)=forward()
y go(-1)=back().
Objeto Location
Se accede a este objeto por medio de la referencia document.location y
contiene informacin sobre la direccin de la pgina actual en varias
propiedades.
href
Permite el acceso a la direccin de la pgina actual. Si lo cambiamos, pues
cambiaremos de pgina.
protocol
Protocolo de la pgina actual. Habitualmente http.
host
Mquina donde se alberga la pgina actual.
pathname
Camino de la pgina actual.
hash
Si hemos accedido a una pgina por medio de un ancla, contiene una
almohadilla seguida de ese ancla. Por ejemplo, #location.
search
Objeto Navigator
Se accede a l por medio de la referencia navigator y nos permite
averiguar varias caractersticas del navegador que usamos. Por ejemplo:
appName
Nombre del navegador.
appVer
Nmero principal de versin.
language
Idioma del mismo.
platform
Plataforma donde esta ejecutndose.
No podemos sobreescribir estos atributos, pero s leerlos.
Objeto Screen
Como caba esperarse, se puede acceder a este objeto por medio de la
referencia screen. Nos permitir conocer la configuracin de la pantalla del
usuario. Al igual que en el anterior objeto, todos sus atributos son de slo
lectura. Conviene indicar que este objeto slo est disponible desde las
versiones 4.0 de ambos navegadores.
Ejemplo:
if (window.screen)
texto=screen.width + "x" + screen.height + "x" + Math.pow(2,screen.colorDepth) + "
colores.";
else
texto="quien sabe cuantos colores, necesito que tengas Communicator o IE4 para
averiguarlo.";
document.write(texto);
Ficheros .js
Un fichero .js es un archivo donde podremos guardar funciones y variables
globales que podrn leerse desde cualquier pgina HTML. Gracias a ellos
podremos evitar el tener que duplicar funciones que se necesiten en ms de
un documento. Podremos incorporarlos a nuestras pginas de esta manera:
externo.html
<HTML>
<HEAD>
<TITLE>Mi Pgina</TITLE>
<SCRIPT LANGUAGE="Javascript" SRC="funciones.js">
<!--
alert('Error con el fichero js');
// -->
</SCRIPT>
</HEAD>
<BODY>
Lo que sea.
</BODY>
</HTML>
Aqu Mostraremos cun fcil puede ser disear unas simples hojas de estilo.
Para esta gua, necesitar saber un poco del cdigo HTML y alguna
terminologa bsica de composicin grfica. Comenzamos con un pequeo
documento HTML:
<HTML>
<HEAD>
<TITLE>La Web de OscarCap</TITLE>
</HEAD>
<BODY>
<H1>La Web de OscarCap</H1>
<P>Esta página le ayudará a diseñar páginas Web.
</BODY>
</HTML>
Para establecer el color azul para el texto de los elementos H1, puede
escribir la siguiente regla CSS:
H1 { color: blue }
Una regla CSS consta de dos partes principales: un selector ('H1') y una
declaracin ('color: blue'). La declaracin tiene dos partes: una propiedad
('color') y un valor ('blue').
La especificacin HTML 4.0 define de qu manera las reglas de las hojas de
estilo pueden especificarse para los documentos HTML: ya sea dentro del
documento HTML o a travs de una hoja de estilo externa. Para poner la
hoja de estilo dentro del documento, use el elemento STYLE:
</BODY>
</HTML>
Comandos
Todos los niveles de CSS --nivel 1, nivel 2 y cualquier futuro nivel-- usan la
misma sintaxis central. Los diseadores pueden usar esta caracterstica para
crear hojas de estilo que funcionen con aplicaciones de usuario antiguas,
mientras ejercitan tambin las posibilidades de los niveles ms nuevos de
CSS.
IDENT {ident}
ATKEYWORD @{ident}
STRING {string}
Comando Definicin
HASH #{name}
NUMBER {num}
PERCENTAGE {num}%
DIMENSION {num}{ident}
url\({w}{string}{w}\)
URI |url\({w}([!#$%&*-
~]|{nonascii}|{escape})*{w}\)
UNICODE-
U\+[0-9A-F?]{1,6}(-[0-9A-F]{1,6})?
RANGE
CDO <!--
CDC -->
; ;
{ \{
} \}
( \(
) \)
[ \[
] \]
S [ \t\r\n\f]+
COMMENT \/\*[^*]*\*+([^/][^*]*\*+)*\/
FUNCTION {ident}\(
INCLUDES ~=
DASHMATCH |=
cualquier otro carcter no equivalente con las reglas
DELIM
anteriores
Las macros entre llaves ({}) arriba son definidas como sigue:
Ident {nmstart}{nmchar}*
name {nmchar}+
nmstart [a-zA-Z]|{nonascii}|{escape}
nonascii [^\0-\177]
unicode \\[0-9a-f]{1,6}[ \n\r\t\f]?
escape {unicode}|\\[ -~\200-\4177777]
nmchar [a-zA-Z0-9]|{nonascii}|{escape}
num [0-9]+|[0-9]*\.[0-9]+
string {string1}|{string2}
Macro Definicin
string1 \"([\t !#$%&(-~]|\\{nl}|\'|{nonascii}|{escape})*\"
string2 \'([\t !#$%&(-~]|\\{nl}|\"|{nonascii}|{escape})*\'
nl \n|\r\n|\r|\f
w [ \t\r\n\f]*
Abajo est la sintaxis central para CSS. Las secciones siguientes describen
cmo usarla.
Palabras clave
Las palabras clave toman la forma de identificadores. Las palabras clave no
deben ir entre comillas ("..." o '...'). De este modo, red es una palabra clave,
pero "red" no lo es. (Es una cadena.)
Que es PHP?
PHP (acrnimo de "PHP: Hypertext Preprocessor") es un lenguaje de
"cdigo abierto" interpretado, de alto nivel, embebido en pginas HTML y
ejecutado en el servidor [1]. Este lenguaje se caracteriza porque solo es
interpretado pero no compilado, y es embebido en el cdigo HTML, lo que le
da una alto rendimiento y potencia.
A diferencia de otros lenguajes script como JavaScript, PHP es un lenguaje
script que se ejecuta en el servidor Web, de tal manera que, solamente el
resultado de su ejecucin es enviado al cliente Web (navegador). Tomando
en cuenta lo escrito anteriormente podemos decir que, el cdigo fuente
escrito en PHP no aparecer en el cdigo fuente de la pgina Web que
muestra el navegador.
Viendo el lenguaje desde el punto de vista del programador podemos decir
que es un lenguaje con una sintaxis similar a C; se puede usar en tres
campos: el primero - el mas tradicional - es en los scripts del lado del
servidor, el segundo es la ejecucin de scripts en la lnea de comandos del
sistema operativo (Linux o Windows); y el tercero en el desarrollo de
aplicaciones de interfaz grfica con PHP-GTK.
Variables
Las variables en PHP pueden almacenar datos de diferentes tipos, sin
necesidad de ser declaradas previamente. La sintaxis para el uso de
variables esta definido por el siguiente modelo: $var , es decir, toda variable
debe iniciar con el smbolo de dlar ($) y luego se escribe el nombre de la
variable.
Por ejemplo para hacer referencia a la variable edad se escribe $edad.
Constantes
Se puede definir una constante usando la funcin define(). Una vez definida,
no puede ser modificada ni eliminada.
Para obtener el valor de una constante solo es necesario especificar su
nombre. A diferencia de las variables, no se tiene que especificar el prefijo $.
<?php
define("CONSTANT", "Desarrollo Web.");
echo CONSTANT; // imprime "Desarrollo Web"
?>
Tipos de datos
PHP soporta ocho tipos primitivos. Cuatro tipos escalares: bolean
Expresiones
Las expresiones son la piedra angular de PHP. En PHP, casi cualquier cosa
que escribes es una expresin. La forma ms simple y ajustada de definir
una expresin es "cualquier cosa que tiene un valor".
<?php
function foo () {
return 5;
}
?>
PHP lleva las expresiones mucho ms all, al igual que otros lenguajes. PHP
es un lenguaje orientado a expresiones, en el sentido de que casi todo es
una expresin. Considera el ejemplo anterior '$a = 5'. Es sencillo ver que hay
dos valores involucrados, el valor de la constante entera '5', y el valor de $a
que est siendo actualizado tambin a 5. Pero la verdad es que hay un valor
adicional implicado aqu, y es el valor de la propia asignacin. La asignacin
misma se evala al valor asignado, en este caso 5. En la prctica, quiere
decir que '$a = 5', independientemente de lo que hace, es una expresin con
el valor 5. De esta manera, escribir algo como '$b = ($a = 5)' es como
escribir '$a = 5; $b = 5;' (un punto y coma marca el final de una instruccin).
Como las asignaciones se evalan de derecha a izquierda, puedes escribir
tambin '$b = $a = 5'.
Hay otra expresin que puede parecer extraa si no la has visto en otros
lenguajes, el operador condicional ternario:
<?php
<?php
function double($i) {
return $i*2;
}
$b = $a = 5; /* asignar el valor cinco a las variables $a y $b */
$c = $a++; /* postincremento, asignar el valor original de $a (5) a $c */
$e = $d = ++$b; /* preincremento, asignar el valor incrementado de $b (6)
a $d y a $e */
Operadores
Un operador es algo a lo recibe uno o ms valores y produce otro valor.
Existen tres tipos de operadores:
Operadores de Aritmtica
Operadores de Asignacin
El operador bsico de asignacin es "=". A primera vista, usted podra
pensar en l como "es igual a". No lo haga. Lo que quiere decir en realidad
es que el operando de la izquierda recibe el valor de la expresin a la
derecha (es decir, "se define a").
<?php
$a = ($b = 4) + 5; // $a es igual a 9 ahora, y $b ha sido definido a 4.
?>
<?php
$a = 3;
$a += 5; // define $a como 8, como si hubisemos dicho: $a = $a + 5;
$b = "Hola ";
$b .= "a todos!"; // (Ojo con el punto . Despus de la variable $b) define $b
como "Hola a todos!", tal como $b = $b . "a todos!";
?>
Operadores de Comparacin
Estos operadores permiten comparar dos valores y son los siguientes:
<?php
var_dump(0 == "a"); // 0 == 0 -> true
var_dump("1" == "01"); // 1 == 1 -> true
switch ("a") {
case 0:
echo "0";
break;
case "a": // nunca se ejecuta ya que "a" ya ha coincidido con 0
echo "a";
break;
}
?>
Operador Ternario
Otro operador condicional es el operador "?:" (o ternario).
<?php
Nota: Por favor note que el operador ternario es una sentencia, y que no
evala a una variable, sino al resultado de una sentencia. Es importante
saber esto si se desea devolver una variable por referencia. La sentencia:
return $var == 42 ? $a : $b; en una funcin con retorno-por-referencia no
funcionar por lo que se ha mencionado y una advertencia es generada en
versiones posteriores de PHP.
<?php
// a primera vista, lo siguiente parece imprimir 'true'
echo (true?'true':false?'t':'f');
<?php
/* Error intencional de archivo */
$mi_archivo = @file ('archivo_que_no_existe') or
die ("La apertura de archivo ha fallado: el error fue '$php_errormsg'");
Nota: El operador @ trabaja slo sobre expresiones. Una simple regla de oro
es: si usted puede tomar el valor de algo, entonces puede usar el operador
@ sobre ese algo. Por ejemplo, puede usarlo al inicio de variables, llamadas
a funciones y sencencias include(), constantes, y as sucesivamente. No
puede usarlo sobre definiciones de funcin o clase, ni sobre estructuras
condicionales como if y foreach, y as sucesivamente.
Operadores de ejecucin
PHP soporta un operador de ejecucin: las comillas invertidas (``).
PHP ejecuta el contenido entre las comillas como si se tratara de un
comando del intrprete de comandos; su salida ser devuelta (puede ser
asignada a una variable).El uso del operador de comillas invertidas es
idntico al de shell_exec().
<?php
$salida = `dir *.*`;
echo "<pre>$salida</pre>";
?>
Operadores de Incremento/Decremento
PHP ofrece soporte de operadores de pre- y post-incremento y decremento,
estilo lenguaje C.
<?php
echo "<h3>Postincremento</h3>";
$a = 5;
echo "Debe ser 5: " . $a++ . "<br />\n";
echo "Debe ser 6: " . $a . "<br />\n";
echo "<h3>Preincremento</h3>";
$a = 5;
echo "Debe ser 6: " . ++$a . "<br />\n";
echo "Debe ser 6: " . $a . "<br />\n";
echo "<h3>Postdecremento</h3>";
$a = 5;
echo "Debe ser 5: " . $a-- . "<br />\n";
echo "Debe ser 4: " . $a . "<br />\n";
echo "<h3>Predecremento</h3>";
$a = 5;
echo "Debe ser 4: " . --$a . "<br />\n";
echo "Debe ser 4: " . $a . "<br />\n";
?>
operadores_i.php
<?php
$i = 'W';
for ($n=0; $n<6; $n++) {
echo ++$i . "\n";
}
?>
Resultado Web:
Operadores de Lgica
La razn para tener las dos variaciones diferentes de los operadores "and" y
"or" es que ellos operan con precedencias diferentes. Para el caso de "and":
"&&" tiene mayor precedencia que "and", analgicamente ocurre con "or".
Operadores de Cadena
Existen dos operadores para datos tipo string. El primero es el operador de
concatenacin ('.'), el cual devuelve el resultado de concatenar sus
argumentas a lado derecho e izquierdo. El segundo es el operador de
asignacin sobre concatenacin ('.='), el cual adiciona el argumento del lado
derecho al argumento en el lado izquierdo.
<?php
$a = "Hola ";
$b = $a . "Mundo!"; // ahora $b contiene "Hola Mundo!"
$a = "Hola ";
$a .= "Mundo!"; // ahora $a contiene "Hola Mundo!"
?>
Operadores de Matrices
operadores_m.php
<?php
$a = array("a" => "manzana", "b" => "banano");
$b = array("a" => "pera", "b" => "fresa", "c" => "cereza");
$c = $a + $b; // Unin de $a y $b
echo "<br>Unin de \$a y \$b: <br>";
var_dump($c);
$c = $b + $a; // Unin de $b y $a
echo "<br>Unin de \$b y \$a: <br>";
var_dump($c);
?>
Resultado Web:
comp_matrices.php
<?php
$a = array("manzana", "pltano");
$b = array(1 => "pltano", "0" => "manzana");
Resultado Web:
Operadores de Tipo
instanceof es usado para determinar si una variable PHP es una instancia
de objeto de cierta clase:
instanciade.php
<?php
class MiClase
{
}
class NoMiClase
{
}
$a = new MiClase;
Resultado Web:
instanceof puede ser usado tambin para determinar si una variable es una
instancia de objeto de una clase que hereda de una clase padre:
instanciadehe.php
<?php
class ClasePadre
{
}
class MiClase extends ClasePadre
{
}
$a = new MiClase;
var_dump($a instanceof MiClase);
var_dump($a instanceof ClasePadre);
?>
Resultado Web:
Por ltimo, instanceof puede ser usado tambin para determinar si una
variable es una instancia de objeto de una clase que implementa una
interfaz:
<?php
interface MiInterfaz
{
}
class MiClase implements MiInterfaz
{
}
$a = new MiClase;
var_dump($a instanceof MiClase);
var_dump($a instanceof MiInterfaz);
?>
bool(true)
bool(true)
<?php
interface MiInterfaz
{
}
class MiClase implements MiInterfaz
{
}
$a = new MiClase;
$b = new MiClase;
$c = 'MiClase';
$d = 'NoMiClase';
var_dump($a instanceof $b); // $b es un objeto de la clase MiClase
var_dump($a instanceof $c); // $c es una cadena 'MiClase'
var_dump($a instanceof $d); // $d es una cadena 'NoMiClase'
?>
bool(true)
bool(true)
bool(false)
Si (condicional): if
Permite la ejecucin condicional de ordenes o comandos, tomando como
base el resultado de una o varias condiciones. La sentencia if en PHP tiene
la misma sintaxis bsica utilizada en el lenguaje C.
<?php
if (expresin condicional)
{
Sentencia(s) cuando la expresin es verdadera
}
?>
<?php
if ($a > $b)
print "a es mayor que b";
?>
<?php
if ($a > $b) {
echo "a es mayor que b";
$mayor = $a;
$menor = $b;
}
?>
<?php
If ( $a > $b )
If ( $a % $c == 0 )
{
echo a es mltiplo y mayor que b;
$mayor = $a;
}
}
?>
Else
La sentencia else es un complemento de if debido que muchas veces
queremos indicar la ejecucin de sentencias en caso la expresin
condicional del if resulte falsa.
<?php
if ($a > $b) {
echo "a es mayor que b";
} else {
echo "a NO es mayor que b";
}
?>
elseif
Tambin se puede escribir else if (con espacio entre las palabras).
elseif es una combinacin de if y else. En caso la sentencia condicional
resulte falsa, y existan varios casos que puedan cumplirse se puede usar
elseif para cada uno de dichos casos.
<?php
if ($a > $b) {
echo "a es mayor que b";
} elseif ($a < $b) {
echo "a es menor que b";
} else {
echo "a es igual que b";
}
?>
for
Los bucles for son los bucles ms complejos en PHP. Su comportamiento y
sintaxis es similar a la definida en el lenguaje C.
<?php
while
Los bucles while son los tipos de bucle ms simples en PHP. Se comportan
como su contrapartida en C. La forma clsica de una sentencia while es:
while (expr)
{
Sentencias
}
Como con la sentencia if, se pueden agrupar multiples sentencias dentro del
mismo bucle while encerrando un grupo de sentencias con llaves, o usando
la sintaxis alternativa:
do..while
Los bucles do..while son muy similares a los bucles while, excepto que las
condiciones se comprueban al final de cada iteracin en vez de al principio.
La principal diferencia frente a los bucles regulares while es que se garantiza
la ejecucin de la primera iteracin de un bucle do..while (la condicin se
comprueba slo al final de la iteracin), mientras que puede no ser
necesariamente ejecutada con un bucle while regular (la condicin se
comprueba al principio de cada iteracin, si esta se evala como FALSE
desde el principio la ejecucin del bucle finalizar inmediatamente).
<?php
$i = 0;
do {
print $i;
} while ($i>0);
?>
<HTML>
<HEAD>
<TITLE> Primer Ejemplo PHP </TITLE>
</HEAD>
<BODY>
El siguiente código imprime Hipertext Preprocessor<BR>
<?php
?>
</BODY>
</HTML>
Pagina01.php
<HTML>
<HEAD>
<TITLE> Primer Ejemplo PHP </TITLE>
</HEAD>
<BODY>
El siguiente código imprime Hipertext Preprocessor<BR>
Hipertext Preprocessor
</BODY>
</HTML>
3.- <% echo ("Opcionalmente, puedes usar las etiquetas ASP"); %>
<%= $variable; # Esto es una abreviatura de "<% echo . . ." %>
El mtodo tres slo est disponible si se han activado las etiquetas ASP en
el fichero de configuracin: asp_tags.
La etiqueta de fin de bloque incluir tras ella la siguiente lnea si hay alguna
presente. Adems, la etiqueta de fin de bloque lleva implcito el punto y
coma; no necesitas por lo tanto aadir el punto y coma final de la ltima lnea
del bloque PHP.
<?php
// Este es un ejemplo de una lnea
/*
Este es otro ejemplo,
pero tiene
varias lneas
comentadas
*/
?>
pagina02.php
<HTML>
<HEAD>
<TITLE> Ejemplo de la sentencia if </TITLE>
</HEAD>
<BODY>
El siguiente código utiliza la sentencia if de php<BR>
<?php
$nota=12;
if($nota>=10.5)
echo "<em>Felicitaciones<em>, Ud. obtuvo el calificativo de
<strong>$nota</strong> (APROBADO)";
else
echo "Ud. obtuvo el calificativo de <strong>$nota</strong>
(DESAPROBADO)";
?>
</BODY>
</HTML>
pagina03.php
<HTML>
<HEAD>
<TITLE> Ejemplo de la sentencia if </TITLE>
</HEAD>
<BODY>
El siguiente código utiliza la sentencia if de php<BR>
<?php
$nota=12;
if($nota>=10.5)
{
echo "<em>Felicitaciones<em>, Ud. obtuvo el calificativo de
<strong>".$nota."</strong> (APROBADO)";
}
else
{
echo "Ud. obtuvo el calificativo de <strong>".$nota."</strong>
(DESAPROBADO)";
}
?>
</BODY>
</HTML>
pagina04.php
<HTML>
<HEAD>
<TITLE> Ejemplo de la sentencia if </TITLE>
</HEAD>
<BODY>
El siguiente código utiliza la sentencia if de php<BR>
<?php
$nota=12;
if($nota>=10.5)
{ ?>
<em>Felicitaciones<em>, Ud. obtuvo el calificativo de <strong><?php echo
$nota ?></strong> (APROBADO)
<?php }
else
{ ?>
Ud. obtuvo el calificativo de <strong><?php echo $nota ?></strong>
(DESAPROBADO)
<?php }
?>
</BODY>
</HTML>
Pagina05.php
<HTML>
<HEAD>
<TITLE> Ejemplo de la sentencia for </TITLE>
</HEAD>
<BODY>
Uso de la sentencia for de php<BR>
<?php
$filas=15;
echo "<table border=\"1\">"; //iniciamos la tabla
</HTML>
Resultado Web
pagina06.php
<HTML>
<HEAD><TITLE> Ejemplo de la sentencia for </TITLE></HEAD>
<BODY> Uso de la sentencia for de php<BR>
<?php
$filas=15; $columnas=5;
echo "<table border=\"1\">"; //iniciamos la tabla
for($i=1;$i<=$filas;$i++) //creamos varias filas con el for
{
echo "<tr>"; // crear fila
for($j=1;$j<=$columnas;$j++)
{
echo "<td>$i $j</td>"; //escribir columnas (celdas)
}
echo "<tr>"; // terminar la fila
}
echo "</table>"; //cerramos la tabla
?>
</BODY>
</HTML>
Resultado Web
pagina07.php
<HTML>
<HEAD><TITLE> Ejemplo de la sentencia for </TITLE></HEAD>
<BODY> Uso de la sentencia for de php<BR>
<?php
$filas=15; $columnas=5;
?>
<table border="1">
<?php
for($i=1;$i<=$filas;$i++) //creamos varias filas con el for
{ ?>
<tr>
<?php for($j=1;$j<=$columnas;$j++)
{ ?>
<td><?php echo "$i $j" ?></td>
<?php } ?>
<tr>
<?php } ?>
</table>
</BODY>
</HTML>
formulario01.html
<html>
<head>
<title>Formulario</title>
</head>
<body>
<form name="form1" method="post" action="pagina08.php">
Ingresa tu nombre
<input name="txtnombre" type="text" id="txtnombre">
<input type="submit" name="Submit" value="Enviar">
</form>
</body>
</html>
pagina08.php
<HTML>
<HEAD><TITLE> Ejemplo de envio de datos</TITLE></HEAD>
<BODY>
Tu nombre es:
<?php
echo $_POST[txtnombre];
?>
</table>
</BODY>
</HTML>
En esta pgina podemos ver que usamos el array $_POST de PHP para
acceder a los datos enviados a travs de este mtodo. Tambien podemos
Formulario02.html
<html>
<head>
<title>Formulario</title>
</head>
<body>
<form name="form1" method="get" action="pagina09.php">
Ingresa tu nombre
<input name="txtnombre" type="text" id="txtnombre">
<input type="submit" name="Submit" value="Enviar">
</form>
</body>
</html>
pagina09.php
<HTML>
<HEAD><TITLE> Ejemplo de envio de datos</TITLE></HEAD>
<BODY>
Tu nombre es:
<?php
echo $_GET[txtnombre];
?>
</table>
</BODY>
</HTML>
Resultado Web:
formulario03.html
<html>
<head>
<title>Formulario</title>
</head>
<body>
<form name="form1" method="post" action="pagina10.php">
<input type="hidden" name="oculto" value="XYZ">
<table width="90%" border="0">
<tr>
<td>Temas de interés:
<input name="tema[]" type="checkbox" id="tema[]" value="red">Redes
de computadoras
<input name="tema[]" type="checkbox" id="tema[]" value="web">World
Wide Web
<input name="tema[]" type="checkbox" id="tema[]"
value="seguridad">Seguridad Informática</td>
</tr>
<tr>
<td>Sexo:
<input name="sexo" type="radio" value="M">
Masculino
<input name="sexo" type="radio" value="F">
Femenino</td>
</tr>
<tr>
<th><input type="submit" name="Submit" value="Enviar"></th>
</tr>
</table>
</form>
</body>
</html>
pagina10.php
<HTML>
<HEAD><TITLE> Ejemplo de envio de datos</TITLE></HEAD>
<BODY>
El valor del objeto oculto es: <?php echo $_POST[oculto]?><br>
El sexo seleccionado: <?php echo $_POST[sexo]?><br>
Los temas seleccionados son:<br>
<?php
if(count($_POST[tema])>0) {
foreach($_POST[tema] as $k => $v) {
echo "- ".$v."<br>";
}
}
else {
echo "(No hay temas seleccionados)";
}
?>
</table>
</BODY>
</HTML>
formulario04.html
<html>
<head>
<title>Subir archivos</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body>
<form action="pagina11.php" method="post" enctype="multipart/form-data"
name="form1">
Seleccione un archivo
<input type="file" name="archivo" size="50">
<input type="submit" name="Submit" value="Enviar">
</form>
</body>
</html>
pagina11.php
<?php
//leyendo los datos del archivo recibido
$nombre_real=$_FILES[archivo][name];
$tamano=$_FILES[archivo][size];
$tipo=$_FILES[archivo][type];
//este es el nombre que tiene el archivo cuando llega al server
$nombre_temporal=$_FILES[archivo][tmp_name];
//imprimimos los datos
echo "Archivo: " . $nombre_real . " - Tipo:" . $tipo . " Tamaño:" .
$tamano . " - Temporal:" . $nombre_temporal . "<br>";
//movemos el archivo al directorio destino.
$carpeta="archivos";
$destino=$carpeta."\\".$nombre_real;
if(move_uploaded_file ($nombre_temporal,$destino)) echo "archivo subido
exitosamente";
else echo "El archivo no logró subir al servidor";
?>
En el script podemos ver que debemos recibir los datos del archivo a travs
del array $_FILES[], indicando el nombre del objeto HTML que insertamos en
Luego hacemos clic con el botn derecho del Mouse sobre una de las bases
de datos para crear una nueva seleccionando Create New Schema.
Ahora creamos la tabla persona, para ello hacemos click en el botn Create
Table.
Podemos notar que por defecto se establece al campo como clave primaria,
tipo entero y autoincrementable.
Luego de ingresar todos los datos de los campos de la tabla tenemos:
En el lado derecho de la pgina tenemos una caja de texto que nos permite
escribir el nombre de una nueva base de datos.
Una vez creada la base de datos podemos crear las tablas que necesitemos,
en nuestro caso crearemos la tabla persona, la cual estar compuesta por
cinco campos.
Figura 91. Operacin realizada con xito y el script SQL que ha sido
ejecutado.
pagina12.php
<?php
$conex=mysql_connect("localhost","root","") or die(mysql_error());
mysql_select_db("dbdemo",$conex) or die(mysql_error());
?>
Ahora veremos una pgina que incluye el script escrito en pagina12.php para
realizar la conexin y luego hacer una consulta de todos los registros de la
tabla persona.
pagina13.php
<?php
include "pagina12.php"; //incluimos la conexion
$sql="select * from persona"; //consulta sql
$rspersona=mysql_query($sql) or die(mysql_error());//ejecucion de la
sentencia sql
while($reg=mysql_fetch_array($rspersona)) {
echo $reg[idpersona]." - ".$reg[nombres]." ".$reg[apellidos]."<br>";
}
?>
Una vez hecho esto leemos los registros con la funcin mysql_fetch_array()
la cual devuelve una matriz que corresponde a la sentencia extrada, o falso
si no quedan ms filas. La funcin mysql_fetch_array() es una versin
extendida de mysql_fetch_row(). Adems de guardar los datos en el ndice
numrico de la matriz, guarda tambin los datos en los ndices asociativos,
usando el nombre de campo como clave. De esta forma leemos cada uno de
los registros hasta llegar al final del conjunto de registros obtenidos en la
consulta. Podemos deducir que cada vez que esta funcin es ejecutada, el
puntero interno se desplaza al siguiente registro.
Resultado Web
pagina14.php
<?php
include "pagina12.php"; //incluimos la conexion
//consulta sql
$sql="select * from persona";
//ejecucion de la sentencia sql
$rspersona=mysql_query($sql) or die(mysql_error());
?>
<table>
<tr>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
<th>Editar</th>
<th>Eliminar</th>
</tr>
<?php
//mostrar los registros
while($registro=mysql_fetch_array($rspersona))
{ ?>
<tr>
<td><?php echo "$registro[idpersona]"?></td>
<td><?php echo "$registro[nombres]"?></td>
<td><?php echo "$registro[apellidos]"?></td>
<td><a href="pagina16.php?idpersona=<?php echo
"$registro[idpersona]"?>">editar</a></td>
<td><a href="pagina18.php?idpersona=<?php echo
"$registro[idpersona]"?>">eliminar</a></td>
</tr>
<?php
}
?>
</table>
<br>
<a href="formulario05.html">Agregar Registro</a>
Resultado Web
Formulario05.html
Como resultado del cgio HTML obtenemos este formulario, el cual enviar
los datos a pagina15.php.
Pagina15.php
<?php
include "pagina12.php";
//ejecutar sentencia
mysql_query($sql) or die(mysql_error());
?>
Resultado Web:
Pagina16.php
$registro=mysql_fetch_array($rs);
?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Nuevo registro</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="pagina17.php">
<table width="80%" border="0" align="center">
<tr> <th colspan="2">Edición de Persona</th> </tr>
<tr>
<td>Nombres</td> <td><input name="nombres" type="text" id="nombres"
size="50" maxlength="50" value="<?php echo $registro[nombres]?>" /></td>
</tr>
<tr>
<td>Apellidos</td> <td><input name="apellidos" type="text"
id="apellidos" size="50" maxlength="50" value="<?php echo
$registro[apellidos]?>" /></td>
</tr>
<tr>
<td>E-Mail</td> <td><input name="email" type="text" id="email"
size="50" maxlength="100" value="<?php echo $registro[email]?>"/></td>
</tr>
<tr>
<td>Teléfono</td> <td><input name="telefono" type="text"
id="telefono" maxlength="15" value="<?php echo
$registro[telefono]?>"/></td>
</tr>
<tr>
<th colspan="2"><input name="Submit" type="submit" class="boton"
value="Guardar" /> <input name="Submit2" type="button" class="boton"
value="Cancelar" onclick="location='pagina14.php'" /></th>
</tr>
</table>
</form>
</body>
</html>
Resultado Web:
pagina17.php
<?php
include "pagina12.php";
//sentencia para editar el registro
$sql="update persona set nombres='$_POST[nombres]',
apellidos='$_POST[apellidos]', email='$_POST[email]',
telefono='$_POST[telefono]' where idpersona='$_POST[idpersona]'";
//ejecutar sentencia
mysql_query($sql) or die(mysql_error());
echo "La persona fue actualizada exitosamente<br>";
echo "<a href='pagina14.php'>Listado de Personas</a>";
?>
Resultado Web:
pagina18.php
<?php
include "pagina12.php";
//sentencia para eliminar el registro
$sql="delete from persona where idpersona='$_GET[idpersona]'";
//ejecutar sentencia
mysql_query($sql) or die(mysql_error());
echo "La persona fue eliminada exitosamente<br>";
echo "<a href='pagina14.php'>Listado de Personas</a>";
?>
Luego creamos la tabla persona, haciendo click con el botn derecho del
mouse y seleccionando New table
Hacemos doble click sobre la primera fila e ingresamos luego los datos.
pagina22.php
<?php
//conexion al servidor PostgreSQL
$conex=pg_connect("host=localhost dbname=dbdemo port=5432 user=oscar
password=123456") or die("Error en la conexin");
?>
pagina23.php
<?php
include "pagina22.php"; //incluimos la conexion
//consulta sql
$sql="select * from persona";
//ejecucion de la sentencia sql
$rspersona=pg_query($sql) or die(pg_last_error($conex));
while($reg=pg_fetch_array($rspersona)) {
echo $reg[idpersona]." - ".$reg[nombres]." ".$reg[apellidos]."<br>";
}
?>
Resultado Web:
pagina24.php
<?php
include "pagina22.php"; //incluimos la conexion
//consulta sql
$sql="select * from persona";
//ejecucion de la sentencia sql
$rspersona=pg_query($sql) or die(pg_last_error($conex));
?>
<table>
<tr>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
<th>Editar</th>
<th>Eliminar</th>
</tr>
<?php
//mostrar los registros
while($registro=pg_fetch_array($rspersona))
{ ?>
<tr>
<td><?php echo "$registro[idpersona]"?></td>
<td><?php echo "$registro[nombres]"?></td>
<td><?php echo "$registro[apellidos]"?></td>
<td><a href="pagina26.php?idpersona=<?php echo
"$registro[idpersona]"?>">editar</a></td>
<td><a href="pagina28.php?idpersona=<?php echo
"$registro[idpersona]"?>">eliminar</a></td>
</tr>
<?php
}
//Liberar conjunto de resultados
pg_free_result($rspersona);
// Cerrar conexion
pg_close($conex);
?>
</table>
<br>
<a href="formulario06.html">Agregar Registro</a>
</body>
</html>
Resultado Web:
formulario06.html
Resultado Web:
pagina25.php
<?php
include "pagina22.php";
//sentencia para insertar el usuario
$sql="insert into persona (nombres, apellidos, email, telefono ) values
('$_POST[nombres]','$_POST[apellidos]','$_POST[email]','$_POST[telefono]'
)";
//ejecutar sentencia
pg_query($sql) or die(pg_last_error($conex));
echo "La persona fue registrada exitosamente<br>";
echo "<a href='pagina24.php'>Listado de Personas</a>";
?>
Resultado Web:
pagina26.php
<html>
<head>
<?php
include "pagina22.php";
$sql="select * from persona where idpersona='$_GET[idpersona]'";
$rs=pg_query($sql) or die(pg_last_error());
if(pg_num_rows($rs)>0) $registro=pg_fetch_array($rs);
?>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Edición de registro</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="pagina27.php">
<input type="hidden" name="idpersona" value="<?php echo
$_GET[idpersona]?>">
<table width="80%" border="0" align="center">
<tr> <th colspan="2">Edición de Persona</th> </tr>
<tr>
<td>Nombres</td> <td><input name="nombres" type="text"
id="nombres" size="50" maxlength="50" value="<?php echo
$registro[nombres]?>" /></td>
</tr>
<tr>
<td>Apellidos</td>
<td><input name="apellidos" type="text" id="apellidos" size="50"
maxlength="50" value="<?php echo $registro[apellidos]?>" /></td>
</tr>
<tr>
<td>E-Mail</td>
<td><input name="email" type="text" id="email" size="50"
maxlength="100" value="<?php echo $registro[email]?>"/></td>
</tr>
<tr>
<td>Teléfono</td>
<td><input name="telefono" type="text" id="telefono" maxlength="15"
value="<?php echo $registro[telefono]?>"/></td>
</tr>
<tr>
<th colspan="2"><input name="Submit" type="submit" class="boton"
value="Guardar" /> <input name="Submit2" type="button" class="boton"
value="Cancelar" onclick="location='pagina24.php'" /></th>
</tr>
</table>
</form>
</body>
</html>
Resultado Web:
pagina27.php
<?php
include "pagina22.php";
//sentencia para editar el registro
$sql="update persona set nombres='$_POST[nombres]',
apellidos='$_POST[apellidos]', email='$_POST[email]',
telefono='$_POST[telefono]' where idpersona='$_POST[idpersona]'";
pg_query($sql) or die(pg_last_error($conex));
echo "La persona fue actualizada exitosamente<br>";
echo "<a href='pagina24.php'>Listado de Personas</a>";
?>
Resultado Web:
pagina28.php
<?php
include "pagina22.php";
//sentencia para eliminar el registro
$sql="delete from persona where idpersona='$_GET[idpersona]'";
//ejecutar sentencia
pg_query($sql) or die(pg_last_error());
echo "La persona fue eliminada exitosamente<br>";
echo "<a href='pagina24.php'>Listado de Personas</a>";
?>
pagina29.php
<?php
//conexion al servidor MS-SQLServer
$conex=mssql_connect("LAPTOP\\","oscar","123456") or die("Error en la
conexin");
mssql_select_db("dbdemo",$conex) or die("Error al seleccionar la BD");
?>
pagina30.php
<?php
include "pagina29.php"; //incluimos la conexion
//consulta sql
$sql="select * from persona";
//ejecucion de la sentencia sql
$rspersona=mssql_query($sql) or die("Error sql");
while($reg=mssql_fetch_array($rspersona)) {
echo $reg[idpersona]." - ".$reg[nombres]." ".$reg[apellidos]."<br>";
}
?>
Resultado Web:
pagina31.php
<?php
include "pagina29.php"; //incluimos la conexion
//consulta sql
$sql="select * from persona";
//ejecucion de la sentencia sql
$rspersona=mssql_query($sql) or die("error en la consulta");
?>
<table>
<tr>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
<th>Editar</th>
<th>Eliminar</th>
</tr>
<?php
//mostrar los registros
while($registro=mssql_fetch_array($rspersona))
{ ?>
<tr>
<td><?php echo "$registro[idpersona]"?></td>
<td><?php echo "$registro[nombres]"?></td>
<td><?php echo "$registro[apellidos]"?></td>
<td><a href="pagina33.php?idpersona=<?php echo
"$registro[idpersona]"?>">editar</a></td>
<td><a href="pagina35.php?idpersona=<?php echo
"$registro[idpersona]"?>">eliminar</a></td>
</tr>
<?php
}
//Liberar conjunto de resultados
mssql_free_result($rspersona);
// Cerrar conexion
mssql_close($conex);
?>
</table>
<br>
<a href="formulario07.html">Agregar Registro</a>
formulario07.html
pagina32.php
<?php
include "pagina29.php";
//sentencia para insertar la persona
$sql="insert into persona (nombres, apellidos, email, telefono ) values
('$_POST[nombres]','$_POST[apellidos]','$_POST[email]','$_POST[telefono]'
)";
mssql_query($sql) or die("error al insertar el registro");
echo "La persona fue registrada exitosamente<br>";
echo "<a href='pagina31.php'>Listado de Personas</a>";
?>
Resultado Web:
pagina33.php
</body>
</html>
Resultado Web:
pagina34.php
<?php
include "pagina29.php";
//sentencia para editar el registro
$sql="update persona set nombres='$_POST[nombres]',
apellidos='$_POST[apellidos]', email='$_POST[email]',
telefono='$_POST[telefono]' where idpersona='$_POST[idpersona]'";
//ejecutar sentencia
mssql_query($sql) or die("error al editar el registro");
echo "La persona fue actualizada exitosamente<br>";
echo "<a href='pagina31.php'>Listado de Personas</a>";
?>
Resultado Web:
pagina35.php
<?php
include "pagina29.php";
//sentencia para eliminar el registro
$sql="delete from persona where idpersona='$_GET[idpersona]'";
//ejecutar sentencia
Resultado Web:
pagina19.php
<?php
class MiClase
{
// Declaracin de un miembro de la clase
public $variable = 'demo'; // demo es el valor por defecto de $variable
// Declaracin de un mtodo
public function ver() {
echo $this->variable; //imprime el valor de $variable
}
}
?>
Instancia de un Objeto
Para crear una instancia de un objeto, un nuevo objeto debe ser creado y
asignado a una variable. Un objeto siempre ser asignado cuando se crea
un objeto nuevo a menos que el objeto tenga un constructor definido que
arroje una excepcin en caso de error. Las clases deben ser definidas antes
de crear las instancias (y en algunos casos esto es un requerido).
pagina20.php
<?php
include "pagina19.php"; //definicin de MiClase
//Creando una instancia
$instancia = new MiClase();
// Asignacin del Objeto
$asignado = $instancia;
$referencia =& $instancia;
Resultado Web
Extendiendo objetos
Una clase puede heredar mtodos y miembros de otra clase usando la
palabra 'extends' en la declaracin. No es posible extender de mltiples
clases, una clase puede heredar solo de una clase base.
pagina21.php
<?php
include "pagina19.php";
Resultado Web
clase1.php
<?php
class clase1
{
// Declaracin de un miembro de la clase
public $texto = 'esta es la clase1';
// Declaracin de un mtodo
public function mostrar() {
echo $this->texto; //imprime el valor de $variable
}
}
?>
clase2.php
<?php
class clase2
{
// Declaracin de un miembro de la clase
public $mi_texto = 'texto de la clase2';
// Declaracin de un mtodo
public function display() {
echo $this->mi_texto; //imprime el valor de $variable
}
}
?>
autocarga.php
<?php
function __autoload($nombre_clase) {
require_once $nombre_clase . '.php';
}
$obj1->mostrar();
?>
<br>
<?php
$obj2->display();
?>
Resultado Web:
PHP 5.x viene con una extensin mejorada para trabajar con la funcionalidad
provista por MySQL 4.1 y superior.
Clases predefinidas
mysqli
Representa una conexin entres PHP y la base de datos MySQL.
Constructor
mysqli - constructor de un nuevo objeto mysqli
Mtodos
autocommit - cambia en ON u OFF las modificaciones de auto-commiting en
la base de datos.
Propiedades
affected_rows - obtiene el nmero de filas afectadas en la operacin MySQL
previa.
mysqli_stmt
Representa una sentencia preparada.
Mtodos
bind_param - enlaza variables a una sentencia preparada.
Propiedades
affected_rows - retorna las filas afectadas de la ltima sentencia ejecutada.
mysqli_result
Representa el resultado obtenido de la consulta hecha en la base de datos.
Mtodos
close - cierra el resultado.
fetch_array - recupera una fila como una matriz asociativa, una matriz
numrica, o ambos.
Propiedades
current_field - retorna la posicin de puntero actual.
mysqli-connect.php
<?php
$mysqli = new mysqli("localhost", "root", "", "dbdemo");
/* verifica la conexin */
if (mysqli_connect_errno()) {
/* Cerrar la conexin */
$mysqli->close();
?>
Resultado Web:
mysqli-conexion.php
<?php
$mysqli = new mysqli("localhost", "root", "", "dbdemo");
/* verifica la conexin */
if (mysqli_connect_errno()) {
mysqli-lista.php
<?php
include "mysqli-conexion.php"; //incluimos la conexin
//consulta sql
$sql="select * from persona";
//listado
while($reg=$rspersona->fetch_object()) {
echo $reg->idpersona." - ".$reg->nombres." ".$reg->apellidos."<br>";
}
?>
Resultado Web:
mysqli-listado.php
<?php
include "mysqli-conexion.php"; //incluimos la conexion
//consulta sql
$sql="select * from persona";
//ejecucion de la sentencia sql
$rspersona=$mysqli->query($sql) or die($mysqli->error);
?>
<table>
<tr>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
<th>Editar</th>
<th>Eliminar</th>
</tr>
<?php
//mostrar los registros
while($registro=$rspersona->fetch_object())
{ ?>
<tr>
<td><?php echo "$registro->idpersona"?></td>
<td><?php echo "$registro->nombres"?></td>
<td><?php echo "$registro->apellidos"?></td>
<td><a href="mysqli-editar.php?idpersona=<?php echo "$registro-
>idpersona"?>">editar</a></td>
<td><a href="mysqli-eliminar.php?idpersona=<?php echo "$registro-
>idpersona"?>">eliminar</a></td>
</tr>
<?php
}
$rspersona->close(); //cerramos resultado de la consulta
$mysqli->close(); //cerramos la conexin
?>
</table>
<br>
<a href="formulario08.html">Agregar Registro</a>
</body>
</html>
Resultado Web:
formulario08.html
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Nuevo registro</title>
</head>
<body>
<form id="form1" name="form1" method="post" action="mysqli-insertar.php">
<table width="80%" border="0" align="center">
<tr> <th colspan="2">Nuevo Registro</th></tr>
<tr>
<td>Nombres</td> <td><input name="nombres" type="text"
id="nombres" size="50" maxlength="50" /></td>
</tr>
<tr>
<td>Apellidos</td> <td><input name="apellidos" type="text"
id="apellidos" size="50" maxlength="50" /></td>
</tr>
<tr>
<td>E-Mail</td> <td><input name="email" type="text" id="email"
size="50" maxlength="100" /></td>
</tr>
<tr>
<td>Teléfono</td> <td><input name="telefono" type="text"
id="telefono" maxlength="15" /></td>
</tr>
<tr>
<th colspan="2"><input name="Submit" type="submit" class="boton"
value="Guardar" /> <input name="Submit2" type="button" class="boton"
value="Cancelar" onclick="location=' mysqli-listado.php'" /></th>
</tr>
</table>
</form>
</body>
</html>
Resultado Web:
mysqli-insertar.php
<?php
include "mysqli-conexion.php";
//ejecutar sentencia
$mysqli->query($sql) or die($mysqli->error);
Resultado Web:
mysqli-editar.php
<body>
<form id="form1" name="form1" method="post" action="mysqli-
actualizar.php">
<input type="hidden" name="idpersona" value="<?php echo
$_GET[idpersona]?>">
<table width="80%" border="0" align="center">
<tr> <th colspan="2">Edición de Persona</th></tr>
<tr> <td>Nombres</td> <td><input name="nombres" type="text"
id="nombres" size="50" maxlength="50" value="<?php echo $registro-
>nombres?>" /></td>
</tr>
<tr><td>Apellidos</td> <td><input name="apellidos" type="text"
id="apellidos" size="50" maxlength="50" value="<?php echo $registro-
>apellidos?>" /></td></tr>
<tr>
<td>E-Mail</td> <td><input name="email" type="text" id="email"
size="50" maxlength="100" value="<?php echo $registro->email?>"/></td>
</tr>
<tr>
<td>Teléfono</td> <td><input name="telefono" type="text"
id="telefono" maxlength="15" value="<?php echo $registro-
>telefono?>"/></td>
</tr>
<tr>
<th colspan="2"><input name="Submit" type="submit" class="boton"
value="Guardar" /> <input name="Submit2" type="button" class="boton"
value="Cancelar" onclick="location=' mysqli-listado.php'" /></th>
</tr>
</table>
</form>
<?php
$rs->close();
$mysqli->close();
?>
</body>
</html>
Resultado Web:
mysqli-actualizar.php
<?php
include "mysqli-conexion.php";
//sentencia para editar el registro
$sql="update persona set nombres='$_POST[nombres]',
apellidos='$_POST[apellidos]', email='$_POST[email]',
telefono='$_POST[telefono]' where idpersona='$_POST[idpersona]'";
//ejecutar sentencia
$mysqli->query($sql) or die($mysqli->error());
Resultado Web:
mysql-eliminar.php
<?php
include "mysqli-conexion.php";
//sentencia para eliminar el registro
$sql="delete from persona where idpersona='$_GET[idpersona]'";
//ejecutar sentencia
$mysqli->query($sql) or die($mysqli->error());
echo "La persona fue eliminada exitosamente<br>";
echo "<a href='mysqli-listado.php'>Listado de Personas</a>";
?>
Resultado Web:
Paginando resultados
mysqli-listado-paginacion.php
<?php
include "mysqli-conexion.php"; //incluimos la conexion
//consulta sql
$sql="select * from persona";
//ejecucion de la sentencia sql
$rspersona=$mysqli->query($sql) or die($mysqli->error);
$numreg=$rspersona->num_rows;
$regxpag=3;
if(!isset($_GET['p']))$_GET['p']=1;
$inicio=$regxpag*($_GET['p']-1);
$sql=$sql ." limit $inicio,$regxpag";
$numpag=ceil($numreg/$regxpag);
$rspersona=$mysqli->query($sql) or die($mysqli->error);
echo "Registros encontrados:" . $numreg;
?>
<table>
<tr>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
<th>Editar</th>
<th>Eliminar</th>
</tr>
<?php
//mostrar los registros
while($registro=$rspersona->fetch_object())
{ ?>
<tr>
<td><?php echo "$registro->idpersona"?></td>
<td><?php echo "$registro->nombres"?></td>
<td><?php echo "$registro->apellidos"?></td>
<td><a href="mysqli-editar.php?idpersona=<?php echo "$registro-
>idpersona"?>">editar</a></td>
<td><a href="mysqli-eliminar.php?idpersona=<?php echo "$registro-
>idpersona"?>">eliminar</a></td>
</tr>
<?php
}
$rspersona->close(); //cerramos resultado de la consulta
$mysqli->close(); //cerr=amos la conexin
?>
</table>
Página:
<?php
for($i=1;$i<=$numpag;$i++) {
echo "<a href='mysqli-listado-paginacion.php?p=$i'>$i</a> ";
}
?>
<br>
<a href="formulario08.html">Agregar Registro</a>
Resultado Web:
Explicacin:
Arquitectura MVC
Controlador
Modelo
Vista
MVC Web
*Aqu la palabra Modelo no tiene que ver con el Modelo de Modelo Vista
Controlador sino con el nombre de la arquitectura.
Hay gente que te dir que el PHP fue concebido como algo sencillo y
prctico. Como un lenguaje que permite hacer pginas Web dinmicas y
Y les doy la razn. Claro! El asunto es que ese primer PHP no tena mucho
que ver con el PHP5 actual. No haba objetos por ejemplo.
Tambin puedes usar motores de plantillas como por ejemplo Smarty para
implementar el MVC, pero en realidad no necesitas nada ms que el PHP
puro.
_modelo.php
<?php
class ClaseX
{
include ($this->plantilla_propia);
}//fun
}//class
?>
_listar.php
<?php
foreach ($this->arrayx as $elemento)
{
echo $elemento["nombre"];
echo "";
}//foreach
?>
_controlador.php
<?php
include ("./_modelo.php");
$objX->CargarDatos();
include ("_vista.php");
?>
_vista.php
<html>
<head>
<title><?php echo $titulo; ?></title>
</head>
<body>
<?php $objX->show(); ?>
</body>
</html>
El inventor y gur del PHP Rasmus Lerdorf, public hace algn tiempo, en
febrero del ao 2006 un bastante mal entendido artculo, titulado The no
framework PHP MVC framework
Aqu, Rasmus nos habla sobre como implementar un sencillo MVC usando
solo PHP puro. Bueno, estoy de acuerdo hasta un cierto punto con este
artculo y es que implementar el MVC sin usar un framework que vaya ms
all de nuestras necesidades nos va a beneficiar en cuanto a la memoria que
usa cada script PHP. Ms tarde hablaremos sobre la optimizacin. Algunos
head();
<?php
class BaseDatos
{
protected $servidor="localhost";
protected $usuario="root";
protected $password="";
protected $link;
public $rs;
} //fin clase
class ClaseDatos
{
protected $plantilla_listado = "lista_bd.php";
protected $data= array();
protected $recset;
protected $registro;
} //fin clase
?>
<table border="1">
<?php
while($this->leer_registro()) { ?>
<tr>
<?php
foreach($this->registro as $k => $v){
?>
<td><?php echo $this->registro[$k]?></td>
<?php
}
?>
</tr>
<?php } ?>
</table>
<html>
<head>
<title><?php echo $titulo; ?></title>
</head>
<body>
</body>
</html>
<?php
include ("modelo_bd.php");
$objData->CargarDatos($sql);
include ("vista_bd.php");
?>
PDO esta disponible desde PHP 5.1, y requiere las nuevas caractersticas de
programacin orientada a objetos que viene desde PHP 5, por lo que no
corre en versiones anteriores.
Clases predefinidas
PDO
Representa una conexin entre PHP y un servidor de base de datos.
Constructor
PDO - construye un nuevo objeto PDO
Mtodos
beginTransaction inicia una transaccin.
lastInsertId retorna el valor del ID del ultimo registro que fue insertado en la
tabla.
quote retorna una cadena de texto con comillas para su uso en sentencias
SQL. Recomendada para evitar inyeccin SQL.
PDOStatement
Representa una sentencia preparada, luego que la sentencia es ejecutada,
un conjunto de registros.
Mtodos
bindColumn - relaciona variable a una columna de salida en un conjunto de
registros.
pdo-connect.php
<?php
?>
pdo-lista.php
<?php
try {
include "pdo-connect.php";
die();
?>
Resultado Web
pdo-listado.php
<?php
include "pdo-connect.php"; //incluimos la conexion
//consulta sql
$sql="select * from persona";
$rspersona=$conn->query($sql);
?>
<form name="form1" action="pdo-eliminar.php" method="post">
<table>
<tr>
<th>Eliminar</th>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
<th>Editar</th>
</tr>
<?php
//mostrar los registros
while($registro=$rspersona->fetch())
{ ?>
<tr>
<td><input type="checkbox" name="chkelim[]" value="<?php echo
$registro[idpersona]?>" /></td>
<td><?php echo $registro[idpersona]?></td>
<td><?php echo $registro[nombres]?></td>
<td><?php echo $registro[apellidos]?></td>
<td><a href="pdo-editar.php?idpersona=<?php echo
$registro[idpersona]?>">editar</a></td>
</tr>
<?php
}
$rspersona->closeCursor(); //cerramos resultado de la consulta
$conn=null; //cerramos la conexin
?>
<tr>
<th><input type="submit" value="Eliminar" /></th>
<th colspan="4"><input type="button" onclick="location='pdo-nuevo.php'"
value="Nuevo" /></th>
</tr>
</table>
</form>
Resultado Web
pdo-nuevo.php
<body>
<form id="form1" name="form1" method="post" action="pdo-insertar.php">
<table width="80%" border="0" align="center">
<tr>
<th colspan="2">Nuevo Registro</th>
</tr>
<tr>
<td>Nombres</td>
<td><input name="nombres" type="text" id="nombres" size="50"
maxlength="50" /></td>
</tr>
<tr><td>Apellidos</td>
<td><input name="apellidos" type="text" id="apellidos" size="50"
maxlength="50" /></td>
</tr>
<tr><td>E-Mail</td>
<td><input name="email" type="text" id="email" size="50"
maxlength="100" /></td>
</tr>
<tr><td>Teléfono</td>
<td><input name="telefono" type="text" id="telefono" maxlength="15"
/></td>
</tr>
<tr><th colspan="2"><input name="Submit" type="submit" class="boton"
value="Guardar" />
<input name="Submit2" type="button" class="boton" value="Cancelar"
onclick="location='mysqli-listado.php'" /></th>
</tr>
</table>
</form>
</body>
</html>
Resultado Web:
pdo-insertar.php
<?php
try {
include "pdo-connect.php";
$sentencia = $conn->prepare("INSERT INTO persona (nombres, apellidos,
email, telefono) VALUES (:nombres, :apellidos, :email, :telefono)");
$sentencia->bindParam(':nombres', $_POST[nombres]);
$sentencia->bindParam(':apellidos', $_POST[apellidos]);
$sentencia->bindParam(':email', $_POST[email]);
$sentencia->bindParam(':telefono', $_POST[telefono]);
$sentencia->execute();
$conn = null;
header("location: pdo-listado.php");
} catch (PDOException $e) {
print "Error!: " . $e->getMessage() . "<br/>";
die();
}
?>
pdo-eliminar.php
<?php
include "pdo-connect.php";
header("location: pdo-listado.php");
?>
pdo-editar.php
Resultado Web:
pdo-actualizar.php
<?php
include "pdo-connect.php";
$sentencia->bindParam(':idpersona', $_POST[idpersona]);
$sentencia->bindParam(':nombres', $_POST[nombres]);
$sentencia->bindParam(':apellidos', $_POST[apellidos]);
$sentencia->bindParam(':email', $_POST[email]);
$sentencia->bindParam(':telefono', $_POST[telefono]);
$sentencia->execute();
$conn = null;
header("location: pdo-listado.php");
?>
<?php
// datos enviados a travs del formulario
$usuario = $_POST['nombre_usuario'];
1
http://www.php.net/manual/es/security.general.php
$archivo = $_POST['archivo'];
<?php
// Para el caso del nombre del usuario enviamos: "../etc"
// Para el caso del nombre del archivo enviamos: "passwd"
$usuario = $_POST['nombre_usuario'];
$archivo = $_POST['archivo'];
if (!ctype_alnum($nombre_usuario) || !preg_match('/^(?:[a-z0-9_-
]|\.(?!\.))+$/iD', $archivo_usuario)) {
die("Nombre de usuario o archivo incorrecto");
}
md5.php
<?php
$texto="miclavedeacceso";
$cifrado=md5($texto);
echo "mi clave cifrada es:".$cifrado;
// el texto cifrado con MD5 de 128bits genera una cadena de 32 caracteres
de longitud.
?>
Resultado Web:
Una cualidad de este algoritmo es que no tiene funcin para descifrar lo que
lo hace mas seguro que otros debido a que un administrador de base de
datos no podra, por ejemplo, ver las claves de los usuarios.
acceso-md5.php
<?php
include "conexion.php"; //conexion a la BD
$rs=mysql_query($sql) or die(mysql_error());
Con este script no sera suficiente para dar la seguridad adecuada a nuestra
aplicacin Web. A continuacin veremos otro punto importante que debemos
tomar en cuenta.
Inyeccin SQL
Una consulta SQL no es una orden confiable a la que no se le debe prestar
la atencin debida, sino por el contrario es en la que ms cuidado debemos
tener puesto que a travs de ella se puede burlar los controles de acceso a
cualquier sistema Web e incluso permitir el acceso a comandos del sistema
operativo.
<?php
$result = mysql_query($sql);
?>
inyeccion01.php
<?php
include "mysqli-conexion.php"; //incluimos la conexion
$cantidad=2; //numero de registros por pagina
if(!isset($_GET[p])) $_GET[p]=0;
//hallamos el total de registros
$sql="select * from persona";
$rspersona=$mysqli->query($sql) or die($mysqli->error);
$nr=$rspersona->num_rows;
//paginacin de resultados
$sql="select idpersona,nombres,apellidos from persona limit " . $_GET[p] .
",$cantidad";
$rspersona=$mysqli->query($sql) or die($mysqli->error);
?>
<table>
<tr>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
<th>Editar</th>
<th>Eliminar</th>
</tr>
<?php
//mostrar los registros
while($registro=$rspersona->fetch_object())
{ ?>
<tr>
<td><?php echo "$registro->idpersona"?></td>
<td><?php echo "$registro->nombres"?></td>
<td><?php echo "$registro->apellidos"?></td>
<td><a href="mysqli-editar.php?idpersona=<?php echo "$registro-
>idpersona"?>">editar</a></td>
<td><a href="mysqli-eliminar.php?idpersona=<?php echo "$registro-
>idpersona"?>">eliminar</a></td>
</tr>
<?php
}
?>
<tr><td colspan="5">Página:
<?php
for($i=1;$i<=ceil($nr/$cantidad);$i++)
{
$inicio=$cantidad*($i-1);
echo "<a href='?p=$inicio'>$i</a> ";
}
?>
</td></tr>
</table>
<br>
<a href="formulario08.html">Agregar Registro</a>
<?php
$rspersona->close(); //cerramos resultado de la consulta
$mysqli->close(); //cerramos la conexin
?>
Resultado Web:
Primero tendremos que hacer algunas suposiciones como por ejemplo que la
base de datos es MySQL y que se esta usando la orden LIMIT para la
paginacin de resultados y que el inicio es la variable p y que a continuacin
habr una coma y luego la cantidad de registros en la sentencia SQL en la
que ser reemplazado.
Nos aparece un mensaje que nos dice que la sentencia SELECT tiene
diferente nmero de columnas (campos). Por ahora esto slo nos dice que
hemos podido inyectar una sentencia SELECT adicional pero nos queda
saber el nmero de campos de la consulta del listado y luego hacer coincidir
nuestro SELECT adicional con dicha cantidad.
Ahora tenemos:
Sabiendo ahora lo que puede ocurrir, debemos prevenir este tipo de ataque
utilizando una funcin que se encargue de anular cualquier cadena que
if(!is_numeric($_GET[p])) $_GET[p]=0;
inyeccion02.php
<?php
include "mysqli-conexion.php"; //incluimos la conexion
$cantidad=2; //numero de registros por pagina
//paginacin de resultados
$sql="select idpersona,nombres,apellidos from persona limit " . $_GET[p] .
",$cantidad";
$rspersona=$mysqli->query($sql) or die($mysqli->error);
?>
<table>
<tr>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
<th>Editar</th>
<th>Eliminar</th>
</tr>
<?php
//mostrar los registros
while($registro=$rspersona->fetch_object()) {
?>
<tr>
<td><?php echo "$registro->idpersona"?></td>
<td><?php echo "$registro->nombres"?></td>
<?php
}
?>
<tr><td colspan="5">Página:
<?php
for($i=1;$i<=ceil($nr/$cantidad);$i++)
{
$inicio=$cantidad*($i-1);
echo "<a href='?p=$inicio'>$i</a> ";
}
?></td></tr>
</table>
<br>
<a href="formulario08.html">Agregar Registro</a>
<?php
$rspersona->close(); //cerramos resultado de la consulta
$mysqli->close(); //cerramos la conexin
?>
Resultado Web:
Pero los listados no solamente pueden ser utilizados para la Inyeccin SQL
sino que los formularios de acceso o logeo de usuarios quiz sean los ms
propensos a estos ataques. Para ver este caso ms de cerca primero
debemos tener tabla usuario, para este ejemplo consideremos dos campos
para esta tabla: login (nombre del usuario) y clave (password del usuario) y
luego registramos algunos registros.
Resultado Web:
inyeccion03.php
<?php
?>
formulario10.html
</tr>
</table>
</form>
</body>
</html>
Resultado Web:
comillas-magicas.php
<?php
if (!get_magic_quotes_gpc()) {
$password = addslashes($_POST['passw']);
} else {
$password = $_POST['passw'];
}
$sql="SELECT * from usuario WHERE login='" . $_POST[usuario] . "' and
clave='" . $password . "'";
Con este script mejoramos el control del acceso a usuarios, pero cabe
resaltar una funcin creada para evitar este tipo de inyecciones SQL en
servidores MySQL, llamada: mysqli_real_escape_string (programacin
orientada a objetos) o mysql_real_escape_string (programacin
procedimental). Veamos un ejemplo con estilo orientado a objetos:
formulario11.html
<body>
<form id="form1" name="form1" method="post" action="inyeccion04.php">
<table width="50%" border="0" align="center">
<tr> <th colspan="2">Acceso al sistema</th></tr>
<tr>
<td>Usuario</td> <td><input name="usuario" type="text" id="usuario"
maxlength="20" /></td>
</tr>
<tr>
<td>Password</td> <td><input name="passw" type="password"
id="passw" maxlength="40" /></td>
</tr>
<tr> <th colspan="2"><input name="Submit" type="submit"
class="boton" value="Entrar" /> </th> </tr>
</table>
</form>
</body>
</html>
inyeccion04.php
<?php
//incluimos la conexion
include "mysqli-conexion.php";
$usuario =$mysqli->real_escape_string($_POST['usuario']);
$password=$mysqli->real_escape_string($_POST['passw']);
$sql="SELECT * from usuario WHERE login='$usuario' and
clave='$password'";
//imprimir sentencia SQL
echo $sql;
?>
Resultado Web:
Sesiones
Las sesiones en PHP son un mecanismo para preservar datos a lo largo de
varios accesos lo que permite construir aplicaciones Web ms
personalizadas.
ingreso01.php
<tr>
<td>Usuario</td>
<td><input type="text" name="txtusuario" id="txtusuario" maxlength="20">
</td>
</tr>
<tr>
<td>Password</td>
<td><input name="txtclave" type="password" id="txtclave"
maxlength="50"></td>
</tr>
<?php
if($_GET['error']==1) {
?>
<tr><td colspan="2">Datos Incorrectos</td></tr>
<?php } ?>
<tr>
<th colspan="2"><input type="submit" name="Submit"
value="Entrar"></th>
</tr>
</table>
</form>
<?php
echo "Su dirección IP es: ".$_SERVER['REMOTE_ADDR'];
?>
<br>
<?php
echo "Navegador: ".$_SERVER['HTTP_USER_AGENT'];
?>
<br>
<?php
echo "Idioma: ".$_SERVER['HTTP_ACCEPT_LANGUAGE'];
?>
Resultado Web:
verifica01.php
<?php
include "mysqli-conexion.php"; //incluimos la conexion
//Proteger de caracteres especiales a la sentencia SQL
$usuario =$mysqli->real_escape_string($_POST['txtusuario']);
$clave =$mysqli->real_escape_string($_POST['txtclave']);
//ciframos la clave escrita por el usuario para compararla en la BD
$clave=md5($clave);
//sentencia sql
$sql="select * from usuario where login='$usuario' and clave='$clave'";
//ejecutamos la consulta
$rsusuario=$mysqli->query($sql) or die($mysqli->error);
if($rsusuario->num_rows==1)
{
//datos correctos
$reg=$rsusuario->fetch_object();
session_start();
$_SESSION['idusuario']=$reg->idusuario;
$_SESSION['usuario']=$reg->usuario;
$_SESSION['tipo']=$reg->tipo;
} else header("location: ingreso01.php?error=1");
?>
auth01.php
<?php
if (!isset($_SERVER['PHP_AUTH_USER'])) {
header('WWW-Authenticate: Basic realm="Sistema Web"');
header('HTTP/1.0 401 Unauthorized');
echo 'Operación cancelada';
exit;
} else {
echo "<p>Bienvenido {$_SERVER['PHP_AUTH_USER']}.</p>";
echo "<p>Acceso al sistema con password:
{$_SERVER['PHP_AUTH_PW']}.</p>";
}
?>
Resultado Web:
Login
Ahora que ya tenemos el script de autenticacin de usuarios,
desarrollaremos el script para verificar el nombre de usuario y contrasea en
la base de datos. Utilizaremos una tabla usuario, con campos que contengan
el nombre y contrasea del usuario.
Script sql:
entrar.php
<HTML>
<HEAD>
<TITLE>Login</TITLE>
</HEAD>
<BODY>
<form name="form1" action="logeo.php" method="post">
<table align="center" width="50%">
<tr><th colspan="2">Ingreso al sistema</th></tr>
<tr><td>Usuario</td>
<td><input type="text" name="txtusuario"></td></tr>
<tr><td>Password</td>
<td><input type="password" name="txtclave"></td></tr>
<tr><th colspan="2"><input type="submit" value="Entrar"></th></tr>
</table>
<?php
if($_GET['error']==1) echo "Datos Incorrectos";
if($_GET['error']==2) echo "Debe logearse";
?>
</form>
</BODY>
</HTML>
Resultado Web:
logeo.php
<?php
include "mysqli-conexion.php";
$usuario=$mysqli->real_escape_string($_POST['txtusuario']);
$clave=md5($_POST['txtclave']);
if($rsusuario->num_rows==1) {
$registro=$rsusuario->fetch_object();
session_start();
$_SESSION['sidusuario']= $registro->idusuario;
$_SESSION['susuario']= $usuario;
header("location: mysqli-listado-logeado.php");
}
else header("location: entrar.php?error=1");
?>
mysqli-listado-logeado.php
<?php
session_start();
if(!isset($_SESSION['sidusuario'])) header("location: entrar.php?error=2");
include "mysqli-conexion.php"; //incluimos la conexion
//consulta sql
$sql="select * from persona";
//ejecucion de la sentencia sql
$rspersona=$mysqli->query($sql) or die($mysqli->error);
echo "Usuario:" . $_SESSION['susuario'];
?>
<table>
<tr>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
<th>Editar</th>
<th>Eliminar</th>
</tr>
<?php
//mostrar los registros
while($registro=$rspersona->fetch_object())
{ ?>
<tr>
<td><?php echo "$registro->idpersona"?></td>
<td><?php echo "$registro->nombres"?></td>
<td><?php echo "$registro->apellidos"?></td>
Resultado Web:
session_start();
if(!isset($_SESSION['sidusuario'])) header("location: entrar.php?error=2");
CAPTCHA
Este nombre proviene del acrnimo de: Completely Automatic Public Turing
Test to Tell Computers and Humans Apart, que traducido al espaol
significa: Prueba de Turing pblica y automtica para diferenciar a mquinas
y humanos.
Los CAPTCHAs son utilizados para evitar que robots, tambin llamados
spambots, puedan utilizar ciertos servicios. Por ejemplo, para que no puedan
participar en encuestas, registrarse para usar cuentas de correo electrnico
(o su uso para envo de correo basura) o, ms recientemente, para evitar
que correo basura pueda ser enviado por un robot (el remitente debe pasar
el test antes de que se entregue al destinatario). [8]
form-catcha.php
<?php
session_start();
if(isset($_POST["palabra"])) {
if($_POST["palabra"] == $_SESSION["oculto"])
die("Felicidades! Ha ledo correctamente la palabra.");
else
capu-captcha.php
<?php
session_start();
// estas cabeceras evitan que se almacene la imagen en el cach
header ("Expires: Sat, 12 Jul 2008 09:00:00 GMT");
header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header ("Cache-Control: no-store, no-cache, must-revalidate");
header ("Cache-Control: post-check=0, pre-check=0", false);
header ("Pragma: no-cache");
// creamos la imagen con el tamao determinado
$imagen = imagecreate(250, 100);
$color_texto = imagecolorallocate($imagen,$rojo,$verde,$azul);
$color_fondo =
imagecolorallocate($imagen,$rojo_fondo,$verde_fondo,$azul_fondo);
$color_basura =
imagecolorallocate($imagen,$rojo_basura,$verde_basura,$azul_basura);
// construimos la palabra
$caracteres =
"ABCDEFGHJKMNPRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789";
// eliminamos la imagen
imagedestroy($imagen);
?>
Resultados Web:
gdinfo.php
<?php
var_dump(gd_info());
?>
Resultado Web:
imagen01.php
<?php
$im = imagecreate(100, 50);
$color_fondo = imagecolorallocate($im, 255, 55, 55);
$color_texto = imagecolorallocate($im, 233, 214, 51);
imagestring($im, 2, 5, 5, "Texto de prueba", $color_texto);
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);
?>
La funcin imagecreate crea una nueva imagen con una paleta de colores y
sus parmetros son para especificar el ancho y el alto de la imagen en
pixeles.
La funcin imagecolorallocate reserva un color para ser usado en la imagen
en los ltimos tres parmetros se indica los valores de Rojo, Verde y Azul, de
dicha mezcla resultar un color el cual ser almacenado en una variable.
La funcin imagestring dibuja una cadena de texto horizontalmente. El primer
parmetro indica la imagen sobre la que se insertar el texto; el segundo es
el tipo de fuente; el tercero y cuarto indican las coordenadas en la que se
ubicar el texto; el quinto parmetro es la cadena de texto y el ltimo es el
color del texto.
Resultado Web:
imagen02.php
<?php
$image = imagecreate(180,90);
$bg=imagecolorallocate($image,250,250,50);
$color1=imagecolorallocate($image,250,50,50);
$color2=imagecolorallocate($image,50,250,250);
imagefilledrectangle($image,5,5,150,60,$color2);
imagestring($image, 5, 10, 18, 'Un rectangulo',$color1);
header('Content-Type: image/jpeg');
imagejpeg($image);
?>
Resultado Web:
imagen03.php
<?php
header("Content-type: image/jpeg");
$img=imagecreate(500,500);
$color_azul=imagecolorallocate($img,50,50,255);
$color_amarillo=imagecolorallocate($img,255,255,0);
$verde=imagecolorallocate($img,0,255,0);
imageline($img,50,50,50,450,$color_amarillo);
imageline($img,50,450,450,450,$color_amarillo);
imagefilledrectangle($img,100,350,150,450,$verde);
imagefilledrectangle($img,200,250,250,450,$verde);
imagefilledrectangle($img,300,150,350,450,$verde);
imagefilledrectangle($img,400,50,450,450,$verde);
imagestring($img,4,220,30,"Grafico Ejemplo",$color_amarillo);
imagejpeg($img);
imagedestroy($img);
?>
Resultado Web:
<?php
header("Content-type: image/jpeg");
$img=imagecreate(400,400);
$fondo=imagecolorallocate($img,225,225,225);
$azul=imagecolorallocate($img,50,50,255);
$azul2=imagecolorallocate($img,0,0,100);
$amarillo=imagecolorallocate($img,255,255,0);
$amarillo2=imagecolorallocate($img,100,100,0);
$verde=imagecolorallocate($img,0,255,0);
$rojo=imagecolorallocate($img,255,0,0);
$ancho=300;
$alto=180;
$altura=40;
for($i=1;$i<=$altura;$i++) {
imagefilledarc($img,200,200+$i,$ancho,$alto,0,36,$azul2,2);
imagefilledarc($img,200,200+$i,$ancho,$alto,36,108,$amarillo2,2);
imagefilledarc($img,200,200+$i,$ancho,$alto,108,216,$azul2,2);
}
imagefilledarc($img,200,200,$ancho,$alto,0,36,$azul,0);
imagefilledarc($img,200,200,$ancho,$alto,36,108,$amarillo,0);
imagefilledarc($img,200,200,$ancho,$alto,108,216,$azul,0);
imagefilledarc($img,200,200,$ancho,$alto,216,360,$amarillo,0);
imagejpeg($img);
imagedestroy($img);
?>
Resultado Web:
imagen05.php
<?php
$aleatorio = rand(1,8);
for($i=0;$i<=$aleatorio;$i++){$datos[$i]=rand(2,50);};//llenamos el array de
datos.
$ancho='600';$alto='400';//ancho y alto de la imagen
$cx = '300';$cy ='150'; //coordenadas de la figura
$sx = '600';$sy='300';$sz ='100';// dimensiones X,Y,Z
$datos_sum = array_sum($datos);
//angulos
for($i=0;$i<=$aleatorio;$i++){
$angulo[$i] = (($datos[$i] / $datos_sum) * 360);
$angulo_sum[$i] = array_sum($angulo);
};
$im = imagecreate ($ancho,$alto);
$fondo = imagecolorallocate($im, 255, 255, 255);
//colores aleatorios
for($i=0;$i<=$aleatorio;$i++){
$r=rand(50,255);$g=rand(50,255);$b=rand(50,255);
$colors[$i] = imagecolorallocate($im,$r,$g,$b);
$colord[$i] = imagecolorallocate($im,($r/1.5),($g/1.5),($b/1.5));
}
for($z=1;$z<=$sz;$z++){
imagefilledarc($im,$cx,($cy+$sz)-
$z,$sx,$sy,0,$angulo_sum[0],$colord[0],IMG_ARC_EDGED);
for($i=1;$i<=$aleatorio;$i++){
imagefilledarc($im,$cx,($cy+$sz)-$z,$sx,$sy,$angulo_sum[$i-
1],$angulo_sum[$i],$colord[$i],IMG_ARC_NOFILL);
}
}
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);
?>
La funcin rand tiene dos parmetros opcionales que sirven para especificar
el valor mnimo y mximo del nmero aleatorio que se quiere obtener.
Resultado Web:
Para dibujar un crculo hay que utilizar la funcin imagearc la cual dibuja una
elipse parcial centrada en x, y (2do y 3er parmetro) en la imagen $img (ver
ejemplo acontinuacin), luego se especifican la anchura y altura
respectivamente mientras que los puntos de inicio y final vienen indicados
por los parmetros 6to y 7mo en grados. 0 se corresponde con la posicin
de las 3 en punto en un reloj y el arco se dibuja en el sentido de las agujas
del reloj.
imagen06.php
<?php
// crear una imagen de 200*200
$img = imagecreate(200, 200);
// liberar la memoria
imagedestroy($img);
?>
Resultado Web:
Archivos PDF
Las funciones PDF en PHP pueden crear archivos PDF utilizando la
biblioteca PDFlib. Esta biblioteca est disponible para descargar en
http://www.pdflib.com/products/pdflib-family/, pero requiere la compra de una
licencia para uso comercial. Debido a que la licencia de PDFLib tiene
limitaciones para su uso comercial, en este libro veremos el uso de una clase
que tiene el mismo fin, su nombre es: FPDF.
FPDF
FPDF es una clase escrita en PHP que permite generar documentos PDF
directamente desde PHP, es decir, sin usar la biblioteca PDFlib.
Veamos un ejemplo:
pdf01.php
<?php
define('FPDF_FONTPATH','font/'); //directorio de las fuentes
require('fpdf.php'); //llamamos a la clase FPDF
$pdf=new FPDF(); //instanciamos la clase
$pdf->AddPage(); //agregamos la primera pgina
$pdf->SetFont('Courier','',16);//establecemos la fuente y sus atributos
$pdf->cell(10); //celda de 10mm de ancho
//celda de 0 ancho y 10mm de alto
$pdf->Cell(0,10,'Esta es una prueba FPDF',0,1);
$pdf->Output();
?>
Resultado Web:
Sintaxis:
Cell(float w [, float h [, string txt [, mixed border [, int ln [, string align [, int fill [,
mixed link]]]]]]])
Descripcin
Imprime una celda (de rea rectangular) bordes opcionales, color de fondo y
secuencia de carcteres La esquina superir izquierda de la celda
corresponde a la posicin actual. El texto puede ser alineado o centrado.
Despus de invocar, la posicin actual se desplaza a la derecha o la
siguiente lnea. Es posible poner una referencia en el texto.
Si esta el salto de pgina automtico habilitado y la celda esta por fuera del
lmite, es realizado un salto de pgina antes de producir la salida.
Parmetros
w : Ancho de Celda. Si es 0, la celda se extiende hasta la mrgen derecha.
* L: izquierda
* T: superior
* R: derecha
* B: inferior
* 0: a la derecha
* 1: al comienzo de la siguiente lnea
* 2: debajo
fill : Indica si el fondo de la celda debe ser dibujada (1) o transparente (0).
Valor por defecto: 0.
<?php
define('FPDF_FONTPATH','font/'); //directorio de las fuentes
include('fpdf.php');
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(180,10,'GENERANDO PDFs CON FPDF',0,1,'C');
$pdf->Ln();
$pdf->Ln();
$pdf->SetFont('Arial','',9);
$pdf->AddPage();
$pdf->MultiCell(180,5,'Este texto aparecer en la segunda pgina',0,1);
$pdf->Output();
?>
Resultado Web:
Segunda pgina
pdf03.php
<?php
define('FPDF_FONTPATH','font/');
require('fpdf.php');
//Columna actual
var $col=0;
//personalizamos el encabezado
function Header()
{
global $title;
$this->SetFont('Arial','B',15);
$this->SetX(30);//(210-$w)/2);
$this->SetDrawColor(20,20,200);
$this->SetFillColor(255,255,180);
$this->SetTextColor(80,80,255);
$this->SetLineWidth(1);
$this->Cell(0,10,$title,1,1,'C',1);
$this->Ln(10);
//Guardar ordenada
$this->y0=$this->GetY();
}
function SetCol($col)
{
//Establecer la posicin de una columna dada
$this->col=$col;
$x=10+$col*65;
$this->SetLeftMargin($x);
$this->SetX($x);
}
function AcceptPageBreak()
{
//Mtodo que acepta o no el salto automtico de pgina
if($this->col<2)
{
//Ir a la siguiente columna
$this->SetCol($this->col+1);
//Saltar pgina
return true;
}
}
function ChapterTitle($num,$titulo)
{
$this->SetFont('Arial','B',13);
$this->SetFillColor(215,215,255);
$this->Cell(0,6,"Captulo $num : $titulo",0,1,'L',1);
$this->Ln(4);
$this->y0=$this->GetY();
}
function ChapterBody($fichier)
{
$f=fopen($fichier,'r');
$txt=fread($f,filesize($fichier));
fclose($f);
$this->SetFont('Arial','',12);
function PrintChapter($num,$title,$file)
{
//imprimir el captulo
$this->AddPage();
$this->ChapterTitle($num,$title);
$this->ChapterBody($file);
}
}
//instanciamos la clase
$pdf=new PDF();
//primer captulo
$pdf->PrintChapter(1,'Phishing o Fraude Electrnico','phishing.txt');
//segundo captulo
$pdf->PrintChapter(2,'Esteganografa','esteganografia.txt');
Resultado:
pdf04.php
<?php
define('FPDF_FONTPATH','font/');
require_once "fpdf.php";
require_once "mysqli-conexion.php";
$sql="select * from persona";
$rspersona=$mysqli->query($sql) or die($mysqli->error);
$pdf=new FPDF();
$pdf->AddPage();
$pdf->SetFont('Arial','B',16);
$pdf->Cell(180,10,'Listado de Personas',0,1,'C');
$pdf->Ln();
$pdf->Ln();
$pdf->SetFont('Arial','B',10);
$pdf->Cell(10,6,"Id",1);
$pdf->Cell(40,6,"Nombres",1);
$pdf->Cell(40,6,"Apellidos",1);
$pdf->Cell(40,6,"E-Mail",1);
$pdf->Cell(20,6,"Telefono",1);
$pdf->Ln();
$pdf->SetFont('Arial','',10);
while($registro=$rspersona->fetch_object())
{
$pdf->Cell(10,5,$registro->idpersona,0);
$pdf->Cell(40,5,$registro->nombres,0);
$pdf->Cell(40,5,$registro->apellidos,0);
$pdf->Cell(40,5,$registro->email,0);
$pdf->Cell(20,5,$registro->telefono,0);
$pdf->Ln();
}
$pdf->Output();
?>
Resultado:
Archivos XLS
Los archivos XLS pueden ser generados en PHP utilizando la funcin
header() para establecer los encabezados del archivo que vamos a generar,
en este caso escribiremos:
header("Content-type: application/vnd.ms-excel");
xls01.php
<?php
// Creamos la tabla
$letra = array ("A","B","C","D","E","F","G","H","I","J");
?>
<table>
<?php
$filas=10;
$columnas=10;
for ($i=0;$i<$filas;$i++){
?>
<tr>
<?php
for ($j=0;$j<$columnas;$j++){
?>
<td>
<?php
echo $i . $j;
?>
</td>
<?php
}
?>
</tr>
<?php
}
?>
</table>
Resultado:
Abrimos el archivo
xls02.php
<?PHP
header("Content-type: application/vnd.ms-excel");
//indicamos el nombre del archivo que se va a generar
header("Content-Disposition: filename='resumen.xls'");
?>
<table border=1>
excel-ext.php
<?php
function createExcel($filename, $arrydata) {
$excelfile = "xlsfile://./".$filename;
$fp = fopen($excelfile, "wb");
if (!is_resource($fp)) die("Error al crear $excelfile");
fwrite($fp, serialize($arrydata));
fclose($fp);
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header ("Content-type: application/x-msexcel");
header ("Content-Disposition: attachment; filename=\"" . $filename .
"\"" );
readfile($excelfile);
}
?>
xls03.php
<?php
//incluimos los archivos
require_once("excel.php");
require_once("excel-ext.php");
Resultado:
xls04.php
<?php
//incluimos los archivos
require_once("excel.php");
require_once("excel-ext.php");
//Conexion a MySQL
$con = mysql_connect("localhost","root","");
mysql_select_db("dbdemo", $con);
//sentencia sql
$sql = "SELECT * FROM persona";
// Generamos el Excel
createExcel("personas.xls", $data);
?>
Resultado:
xls05.php
<?php
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: filename=\"listado.xls\"");
include "mysqli-conexion.php"; //incluimos la conexion
//consulta sql
$sql="select * from persona";
//ejecucion de la sentencia sql
$rspersona=$mysqli->query($sql) or die($mysqli->error);
?>
<table>
<tr>
<th>Id</th>
<th>Nombres</th>
<th>Apellidos</th>
<th>E-Mail</th>
<th>Teléfono</th>
</tr>
<?php
//mostrar los registros
while($registro=$rspersona->fetch_object())
{ ?>
<tr>
<td><?php echo "$registro->idpersona"?></td>
<td><?php echo "$registro->nombres"?></td>
<td><?php echo "$registro->apellidos"?></td>
<td><?php echo "$registro->email"?></td>
Resultado Web:
AJAX
AJAX, acrnimo de Asynchronous JavaScript And XML (JavaScript
asncrono y XML), es una tcnica de desarrollo web para crear aplicaciones
interactivas o RIA (Rich Internet Applications). stas se ejecutan en el
cliente, es decir, en el navegador de los usuarios y mantiene comunicacin
asncrona con el servidor en segundo plano. De esta forma es posible
realizar cambios sobre la misma pgina sin necesidad de recargarla. Esto
significa aumentar la interactividad, velocidad y usabilidad en la misma.
XAJAX
XAJAX es una librera PHP que Ud puede incluir en su script PHP para
proveer una forma fcil en sus pginas Web la llamada a funciones o
mtodos de objetos usando AJAX (Asynchronous JavaScript And XML).
Simplemente registra una o mas funciones/mtodos con el objeto xajax
quien retorna XML como respuesta y agrega una sentencia en su cabecera
HTML para incluir un archivo de JavaScript y ejecutar un proceso que
muestre el resultado desde alguna parte del HTML, para ello agregamos una
simple llamada a una funcin de JavaScript en su HTML, y XAJAX se
encarga del resto! [7]
A mi parecer es una de las mejores libreras para trabajar con PHP y AJAX,
la versin que utilizaremos es la 0.2.5 (estable). Esta librera ha sido
desarrollada por: Jared White (jared@intuitivefuture.com), J. Max Wilson
(jmaxwilson@users.sourceforge.net) y Eion Robb (eion@bigfoot.com) y el
sitio Web oficial es: http://www.xajaxproject.org.
xajax01.php
<?php
require ('xajax/xajax.inc.php');
Resultado Web:
xajax02.php
<?php
require ('xajax/xajax.inc.php');
Resultado Web:
xajax03.php
<?php
//incluimos la clase xajax
require ('xajax/xajax.inc.php');
function prueba($num)
{
if ($num==0)
$texto = "Primer mensaje de prueba";
else
$texto = "Este es el segundo mensaje de prueba";
return $objResponse;
}
function setColor($sColor)
{
$objResponse = new xajaxResponse();
$objResponse->addAssign("division1","style.color", $sColor);
return $objResponse;
}
// Instanciamos xajax.
$xajax = new xajax();
$xajax->registerFunction("setColor");
$xajax->processRequests();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>xajax03</title>
<?php
//esta orden debe estar dentro de las etiquetas <head> y </head>
$xajax->printJavascript('xajax'); // directorio donde se encuentra el
archivo xajax.inc.php.
?>
</head>
<body style="text-align:center;">
Resultado Web:
xajax04.php
<?php
require ('xajax/xajax.inc.php');
function alternar($estado)
{
if($estado=="none") {
$valor="";
$texto="Ocultar";
}
else {
$valor="none";
$texto="Ver";
}
Resultado Web:
xajax05.php
<?php
require ('xajax/xajax.inc.php');
function numeros($numero)
{
for($i=1;$i<=$numero;$i++) {
$resultado.= $i . " ";
}
Al final del ejemplo vemos la orden de javascript: this.value, la cual nos sirve
para obtener el valor del objeto actual, es decir, de la caja de texto: text1.
Resultado Web:
xajax06.php
<?php
require ('xajax/xajax.inc.php');
function imagen($ruta)
{
Resultado Web:
xajax07.php
<?php
require ('xajax/xajax.inc.php');
function nuevo_codigo($objeto,$codigo_js)
{
$objResponse = new xajaxResponse();
$objResponse->addEvent("$objeto","onclick",$codigo_js);
return $objResponse->getXML();
}
$xajax = new xajax();
$xajax->registerFunction("nuevo_codigo");
$xajax->processRequests();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>xajax07</title>
<?php
$xajax->printJavascript('xajax');
?>
</head>
<body style="text-align:center;">
<input type="button" name="boton1" id="boton1" value="Boton 1" onclick=""
/>
<input type="button" value="abrir ventana"
onclick="xajax_nuevo_codigo('boton1','open(\'md5.php\',\'w1\',\'\')')" />
<input type="button" value="alert"
onclick="xajax_nuevo_codigo('boton1','alert(\'ejemplo de xajax\')')" />
</body>
</html>
Resultado Web:
Ahora haremos click en el botn alert para cambiar el cdigo del Boton 1
y luego haremos click en dicho objeto (Boton 1).
xjax08.php
<?php
require ('xajax/xajax.inc.php');
function datos($formulario)
{
//los indices son los nombres de los objetos del formulario
$frase=$formulario['text1'];
//contamos los elementos seleccionados
$cantidad=count($formulario['chk']);
$resultado="la frase es:" . $frase . "\n";
$resultado.=$cantidad . " temas seleccionados";
$objResponse = new xajaxResponse();
$objResponse->addAlert($resultado);
return $objResponse;
}
$xajax = new xajax();
$xajax->registerFunction("datos");
$xajax->processRequests();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>xajax08</title>
<?php
$xajax->printJavascript('xajax');
?>
</head>
<body style="text-align:center;">
<form id="form1" name="form1">
Frase <input type="text" size="40" name="text1" id="text1" /><br />
Temas:<br />
<input type="checkbox" id="chk[]" name="chk[]" value="php" /> PHP<br />
<input type="checkbox" id="chk[]" name="chk[]" value="javascript" />
JavaScript<br />
<input type="checkbox" id="chk[]" name="chk[]" value="css" /> CSS<br />
<input type="button" name="boton1" id="boton1" value="Aceptar"
onclick="xajax_datos(xajax.getFormValues('form1'))" />
</body>
</html>
Para obtener los valores de los objetos del formulario utilizamos el mtodo
getFormValues de la clase xajax en javascript.
Resultado Web:
xajax09.php
<?php
require ('xajax/xajax.inc.php');
function datos($formulario)
{
//los indices son los nombres de los objetos del formulario
$frase=$formulario['text1'];
//contamos los elementos seleccionados
$cantidad=count($formulario['chk']);
$resultado = "La frase es:" . $frase . "\n";
$resultado.= $cantidad . " temas seleccionados";
$objResponse = new xajaxResponse();
$objResponse->addAlert($resultado);
return $objResponse;
}
$xajax = new xajax();
$xajax->registerFunction("datos");
$xajax->processRequests();
?>
Resultado Web:
Obtenemos:
Error comn
Uno de los errores comunes que aparecen cuando usamos xajax, es el
siguiente:
Cuando aparece este mensaje, podemos ver al final del mismo la frase: You
have whitespace in your response. (Ud tiene espacios en blanco en su
response). Esto generalmente se debe a que hemos insertado algunas
lneas en blanco o algn carcter en el cdigo HTML antes de iniciar el
cdigo de XAJAX.
Ejemplo 144: Archivo con una lnea en blanco antes de iniciar PHP.
xajax_errorcomun.php
<?php
require ('xajax/xajax.inc.php');
function datos($formulario)
{
$frase=$formulario['text1'];
$cantidad=count($formulario['chk']);
$resultado = "La frase es:" . $frase . "\n";
$resultado.= $cantidad . " temas seleccionados";
$objResponse = new xajaxResponse();
$objResponse->addAlert($resultado);
return $objResponse;
}
$xajax = new xajax();
$xajax->registerFunction("datos");
$xajax->processRequests();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-- continua el archivo ---
xajax_buscar.php
<?php
require "pagina12.php"; //conexion a la base de datos dbdemo
require "xajax/xajax.inc.php";
function buscar($id)
{
if($id>0) {
$rs=mysql_query("select * from persona where idpersona=$id");
if(mysql_num_rows($rs)>0) {
$registro=mysql_fetch_array($rs);
$nombrecompleto=$registro['nombres'] . " " .
$registro['apellidos'];
}
else {
$nombrecompleto="no se encontr el codigo
ingresado";
}
}
$resultado=htmlentities($nombrecompleto);
$objResponse = new xajaxResponse();
$objResponse->addAssign("label1","innerHTML",$resultado);
return $objResponse;
}
$xajax = new xajax();
$xajax->registerFunction("buscar");
$xajax->processRequests();
?>
Resultado Web:
xajax_controlador_persona.php
<?php
require_once ("xajax_modelo_persona.php");
include ("xajax_logica_persona.php");
$nrxp=5; //numero de registros por pagina
$titulo = "Personas";
include ("xajax_vista_persona.php");
?>
xajax_logica_persona.php
<?php
require_once ("xajax/xajax.inc.php");
require_once ("xajax_modelo_persona.php");
$xajax = new xajax();
function guardar($formulario){
$objpersona = new clspersona();
if($formulario[accion]=="insertar"){
$ssql="insert into persona (nombres, apellidos, email, telefono)
values ('".$formulario['nombres']."', '".$formulario['apellidos']."',
'".$formulario['email']."','".$formulario['telefono']."')";
if ($objpersona->comando($ssql))
$salida = "Insertado correctamente";
else $salida = "No se ha insertado.";
}
else{
$sql="update persona set nombres='". $formulario['nombres'] ."',
apellidos='". $formulario['apellidos'] ."', email='". $formulario['email'] ."',
telefono='". $formulario['telefono'] ."' where idpersona='".
$formulario['idpersona']. "'";
if ($objpersona->comando($sql))
$salida = "Editado correctamente";
else $salida = "No se ha editado.";
}
$respuesta = new xajaxResponse();
$respuesta->addAssign("mensaje","innerHTML",$salida);
return $respuesta;
}
function ver_datos($id){
$objpersona = new clspersona();
$ssql="select * from persona where idpersona='$id'";
$objpersona->consulta($ssql);
$reg=$objpersona->leer_registro();
$respuesta = new xajaxResponse();
$respuesta->addAssign("nombres", "value", $reg['nombres']);
$respuesta->addAssign("apellidos", "value", $reg['apellidos']);
$respuesta->addAssign("email", "value", $reg['email']);
$respuesta->addAssign("telefono", "value", $reg['telefono']);
$respuesta->addAssign("accion", "value", "editar");
return $respuesta;
}
function limpiar(){
$respuesta = new xajaxResponse();
$respuesta->addAssign("nombres", "value", "");
$respuesta->addAssign("apellidos", "value", "");
$respuesta->addAssign("email", "value", "");
$respuesta->addAssign("telefono", "value", "");
$respuesta->addAssign("accion", "value", "insertar");
return $respuesta;
}
function eliminar($formulario){
$objpersona = new clspersona();
$lista=$formulario[chk];
if(count($lista)>0){
foreach($lista as $k => $v)
{
$ssql="delete from persona where
idpersona='".$v."'";
$objpersona->comando($ssql);
}
$salida="Elementos eliminados correctamente";
}
else $salida="No hay elementos seleccionados";
$respuesta = new xajaxResponse();
$respuesta->addAssign("mensaje","innerHTML",$salida);
return $respuesta;
}
function registros($nrxp,$formulario,$frmbuscar,$pagina)
{
$objpersona = new clspersona();
$busqueda=" where $frmbuscar[campo] like '%$frmbuscar[texto]%'";
$sql="select * from persona $busqueda";
$objpersona->consulta($sql);
$numreg=$objpersona->nr;
$orden=$formulario[orden];
$sentido=$formulario[sentido];
$campo_actual=$formulario[actual];
//sentido
if($campo_actual==$orden)
{
if($sentido=="asc") $sentido="desc";
else $sentido="asc";
}
else $sentido="asc";
//$pagina=$formulario[pagina];
$sql.=" order by ".$orden." ".$sentido;
//resultados
$inicio=($pagina-1)*$nrxp;
$sql.=" limit $inicio,$nrxp";
$objpersona->consulta($sql);
$nrt=$objpersona->nr;
$salida="<table width=\"100%\" class=\"listado\"
id=\"tab_registros\">";
for($i=1;$i<=$nrt;$i++){
$reg=$objpersona->leer_registro();
$salida.="
<tr onMouseDown=\"fila(this)\">
<td style=\"width:16\"><input type=\"checkbox\" name=\"chk[]\"
value=\"$reg[idpersona]\" onClick=\"setPointer('#D0D090',this)\"></td>
<td style=\"width:40px\"><a href=\"#\"
onClick=\"xajax_ver_datos('$reg[idpersona]');ver_div('formulario');\"><img
src=\"iconos/editar.gif\" border=\"0\"></a></td>
<td style=\"width:23%\">$reg[nombres]</td>
<td style=\"width:23%\">$reg[apellidos]</td>
<td style=\"width:23%\">$reg[email]</td>
<td style=\"width:23%\">$reg[telefono]</td>
</tr>";
}
$encontrados="$numreg registros encontrados";
$salida.="</table>";
$respuesta = new xajaxResponse();
$respuesta->addAssign("registros","innerHTML",$salida);
$respuesta->addAssign("mensaje","innerHTML",$encontrados);
$respuesta->addAssign("orden","value",$orden);
$respuesta->addAssign("sentido","value",$sentido);
return $respuesta;
}
function paginas($nrxp,$frmbuscar,$pagina)
{
$objpersona = new clspersona();
$busqueda=" where $frmbuscar[campo] like '%$frmbuscar[texto]%'";
$sql="select * from persona $busqueda";
$objpersona->consulta($sql);
$mgp=10; //maximo grupo de pginas
$salida="Páginas:";
$npag=ceil($objpersona->nr/$nrxp);
for($i=1;$i<=$npag;$i++){
if($i!=$pagina)
$enlace="<a href='#'
onClick=\"frm1.actual.value='';xajax_registros($nrxp,xajax.getFormValues('fr
m1'),xajax.getFormValues('frmbuscar'),'$i');xajax_paginas($nrxp,xajax.getFor
mValues('frmbuscar'),'$i');\">$i</a>";
else $enlace=" $i ";
$salida.=$enlace." ";
}
$respuesta = new xajaxResponse();
$respuesta->addAssign("paginas","innerHTML",$salida);
return $respuesta;
}
$xajax->registerFunction("guardar");
$xajax->registerFunction("ver_datos");
$xajax->registerFunction("limpiar");
$xajax->registerFunction("eliminar");
$xajax->registerFunction("registros");
$xajax->registerFunction("paginas");
$xajax->processRequests();
?>
Resultado Web:
Listado de personas
Insercin de registro
Edicin de registro
Seleccin de registros
Bsqueda de registros
xajax_modelo_persona.php
<?php
require_once "xajax_conexion.php";
class clspersona
{
protected $rs; //resultado de una sentencia sql
public $nr; //numero de registros
public function leer_registro()
{
$reg=mysql_fetch_array($this->rs,MYSQL_ASSOC) or
die(mysql_error());
return $reg;
}
xajax_conexion.php
<?php
class BaseDatos
{
protected $servidor="localhost";
protected $usuario="root";
protected $password="";
public function conectar()
{
$link=mysql_connect($this->servidor,$this->usuario,$this-
>password) or die(mysql_error());
mysql_select_db("dbdemo",$link) or die(mysql_error());
}
public function query($sql)
{
$rs=mysql_query($sql) or die(mysql_error());
return $rs;
}
public function num_rows($rs)
{
$nr=mysql_num_rows($rs) or die(mysql_error());
return $nr;
}
}
?>
xajax_vista_persona.php
<html lang="es">
<head>
<title>Personas</title>
<script type="text/javascript" src="js/funciones.js"></script>
<?php $xajax->printJavascript('xajax/');?>
<link href="css/estilo.css" rel="stylesheet" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head>
<body>
<div id="menu">
<table width="100%">
<caption><?php echo $titulo?></caption>
<tr>
<td class="menu">
<a href="#" onClick="xajax_limpiar();ver_div('formulario');"><img
src="iconos/nuevo.gif" height="16" alt="nuevo"></a>
<a href="#" onClick="xajax_eliminar(xajax.getFormValues('frmlistado'));
xajax_paginas(<?php echo
$nrxp?>,xajax.getFormValues('frmbuscar'),frm1.pagina.value);xajax_registro
s(<?php echo
$nrxp?>,xajax.getFormValues('frm1'),xajax.getFormValues('frmbuscar'),'1');">
<img src="iconos/borrar.gif" height="16" alt="borrar"></a>
<a href="#" onClick="ver_div('busqueda')">
<img src="iconos/buscar.gif" height="16" alt="buscar"></a>
</td>
</tr>
</table>
</div>
ajax_paginas(<?php echo
$nrxp?>,xajax.getFormValues('frmbuscar'),frm1.pagina.value);"
class="boton">
<input type="button"
onClick="frmbuscar.texto.value='';xajax_registros(<?php echo
$nrxp?>,xajax.getFormValues('frm1'),xajax.getFormValues('frmbuscar'),'1');x
ajax_paginas(<?php echo
$nrxp?>,xajax.getFormValues('frmbuscar'),frm1.pagina.value);ocultar_div('bu
squeda'); return false;" value="Ver Todos" class="boton"></td></tr>
</table>
</form>
</div>
<?php
function enlacelis($titulo_columna,$campo_orden,$nrxp,$pagina)
{
echo "<a href=\"#\" onClick=\"frm1.orden.value='$campo_orden';
xajax_registros($nrxp,xajax.getFormValues('frm1'),xajax.getFormValues('frm
buscar'),'$pagina');
xajax_paginas($nrxp,xajax.getFormValues('frmbuscar'),frm1.pagina.value);
frm1.actual.value='$campo_orden';\">$titulo_columna</a>";
}
?>
funciones.js
<!--
// JavaScript Document
var filasel;
function fila(filsel){
filasel = filsel;
return filasel;
}
return true;
}
function seleccionar_all(Color,id){
var activo;
Tab = document.all.tab_registros;
id0=id-1;
for(var x=0; x<document.forms[id].length; x++ ){
if(document.forms[id0].allcheck.checked &&
document.forms[id].elements[x].type=="checkbox"){
document.forms[id].elements[x].checked = true;
}else{
document.forms[id].elements[x].checked = false;
}
}
for (r=0; r<Tab.rows.length; r++){
for(c=0; c< Tab.rows[r].cells.length; c++){
if(Tab.rows[r].cells[c].tagName!="TH"){
if(document.forms[id0].allcheck.checked){
Tab.rows[r].cells[c].style.backgroundColor= Color;
}else{
Tab.rows[r].cells[c].style.backgroundColor="";
}
}
}
}
}
function compCheck(){
var sw=0;
for(var x=0; x<document.forms[0].length; x++ ){
if (document.forms[0].elements[x].checked){
sw=1;
}
}
if(sw!=1){
alert ("Por favor, selecciona los registros quee deseas
elimiar.");
return(false);
}
}
function toggle(obj){
var objID = document.getElementById(obj);
objID.style.display = (objID.style.display == "none")?"":"none";
}
function ver_div(obj){
var objID = document.getElementById(obj);
objID.style.display ="block";
}
function ocultar_div(obj){
var objID = document.getElementById(obj);
objID.style.display ="none";
}
-->
X. REFERENCIAS BIBLIOGRAFICAS
[1] ACHOUR Mehdi, BETZ Friedhelm, DOVGAL Antony, Manual Oficial de
PHP Que es PHP, http://www.php.net/docs.php, Abril 2007
[2] RAYA CABRERA Jos Luis. HTML 4 Gua de referencia y tutorial.
http://www.bio.cam.ac.uk/cgi-lib/
[3] ACHOUR Mehdi, BETZ Friedhelm, DOVGAL Antony, Manual Oficial de
PHP Expresiones, http://www.php.net/docs.php, Abril 2007
[4] ACHOUR Mehdi, BETZ Friedhelm, DOVGAL Antony, Manual Oficial de
PHP Operadores, http://www.php.net/docs.php, Abril 2007
[5] OMER, MVC con PHP, http://www.phpizza.com/es/. 2007
[6] AJAX. http://es.wikipedia.org/wiki/AJAX . mayo 2007
[7] WHITE Jare, J. WILSON Max, ROBB Eion. XAJAX PHP Class Library.
http://wiki.xajaxproject.org/0.2.5_Release_Notes.
[8] CAPTCHA. http://www.wikipedia.org . Web visitada el 5 de junio del 2008.
XI. Anexos
Lista de Ejemplos
Ejemplo 1:
TU UT Primera pgina Web _______________________________ 18
TU UT
Ejemplo 2:
TU UT Comentarios _____________________________________ 22
TU UT
Ejemplo 3:
TU UT Uso de tildes _____________________________________ 24
TU UT
Ejemplo 4:
TU UT Enlaces _________________________________________ 27
TU UT
Ejemplo 5:
TU UT Imgenes ________________________________________ 29
TU UT
Ejemplo 6:
TU UT Tablas __________________________________________ 31
TU UT
Ejemplo 7:
TU UT Ejemplo de Tablas en HTML _________________________ 37
TU UT
Ejemplo 8:
TU UT Formulario solicitando los comentarios del usuario: _______ 40
TU UT
Ejemplo 9:
TU UT Confirmacin de la inclusin en una lista de correo: _______ 41
TU UT
Ejemplo 10:
TU UT Formulario 2 _____________________________________ 43
TU UT
Ejemplo 11:
TU UT Uso de frames ___________________________________ 46
TU UT
Ejemplo 12:
TU UT Acrnimos y Abreviaturas __________________________ 49
TU UT
Ejemplo 13:
TU UT Frase entre comillas_______________________________ 49
TU UT
Ejemplo 14:
TU UT INS y DEL ______________________________________ 50
TU UT
Ejemplo 15:
TU UT OBJECT Y PARAM _______________________________ 51
TU UT
Ejemplo 16:
TU UT Uso de TABLA, THEAD, TFOOT y TBODY _____________ 52
TU UT
Ejemplo 17:
TU UT Button con imagen ________________________________ 54
TU UT
Ejemplo 18:
TU UT Formulario con OPTGROUP ________________________ 55
TU UT
Ejemplo 19:
TU UT Ejemplo de Conjunto de Campos ____________________ 56
TU UT
Ejemplo 20:
TU UT DIV y SPAN _____________________________________ 58
TU UT
Ejemplo 21:
TU UT funcin alert _____________________________________ 61
TU UT
Ejemplo 22:
TU UT Eventos ________________________________________ 76
TU UT
Ejemplo 23:
TU UT Definicin mediante cdigo _________________________ 77
TU UT
Ejemplo 24:
TU UT Funcin open() ___________________________________ 79
TU UT
Ejemplo 25:
TU UT Escribir HTML con javascript ________________________ 83
TU UT
Ejemplo 26:
TU UT Select con javascript ______________________________ 87
TU UT
Ejemplo 27:
TU UT Uso de archivos js ________________________________ 90
TU UT
Ejemplo 28:
TU UT HTML y CSS ____________________________________ 92
TU UT
Ejemplo 29:
TU UT Style ___________________________________________ 93
TU UT
Ejemplo 30:
TU UT Colores con CSS _________________________________ 94
TU UT
Ejemplo 31:
TU UT Definicin de constantes __________________________ 100
TU UT
Ejemplo 32:
TU UT Considera la siguiente funcin ______________________ 100
TU UT
Ejemplo 33:
TU UT Operador de asignacin___________________________ 103
TU UT
Ejemplo 34:
TU UT Operadores de asignacin combinados ______________ 103
TU UT
Ejemplo 35:
TU UT Operador ternario _______________________________ 104
TU UT
Ejemplo 36:
TU UT Comportamiento Ternario No-Obvio _________________ 105
TU UT
Ejemplo 37:
TU UT Control de errores _______________________________ 106
TU UT
Ejemplo 38:
TU UT Operador de ejecucin____________________________ 106
TU UT
Ejemplo 39:
TU UT Operadores de incremento y decremento _____________ 107
TU UT
Ejemplo 40:
TU UT Incremento y decremento con variables tipo carcter. ___ 107
TU UT
Ejemplo 41:
TU UT Operadores de cadena ___________________________ 108
TU UT
Ejemplo 42:
TU UT Operadores de matrices __________________________ 109
TU UT
Ejemplo 43:
TU UT Comparacin de matrices _________________________ 110
TU UT
Ejemplo 44:
TU UT Uso de instanceof con clases ______________________ 110
TU UT
Ejemplo 45:
TU UT Uso de instanceof con clases heredadas _____________ 111
TU UT
Ejemplo 46:
TU UT Uso de instanceof para una clase ___________________ 111
TU UT
Ejemplo 47:
TU UT Uso de instanceof con otras variables ________________ 112
TU UT
Ejemplo 48:
TU UT If ejecuta una sentencia si la condicin es verdadera ____ 113
TU UT
Ejemplo 49:
TU UT If con varias sentencias si la condicin es verdadera ____ 113
TU UT
Ejemplo 50:
TU UT If anidado ______________________________________ 114
TU UT
Ejemplo 51:
TU UT Uso de else en una sentencia if _____________________ 114
TU UT
Ejemplo 52:
TU UT Uso de elseif ___________________________________ 114
TU UT
Ejemplo 53:
TU UT Imprimir los nmeros del 1 al 10 utilizando la sentencia for 115
TU UT
Ejemplo 54:
TU UT Imprimir los nmeros del 1 al 10 utilizando while _______ 116
TU UT
Ejemplo 55:
TU UT Pagina01.php ___________________________________ 117
TU UT
Ejemplo 56:
TU UT Comentarios ___________________________________ 119
TU UT
Ejemplo 57:
TU UT Sentencia if (1) __________________________________ 119
TU UT
Ejemplo 58:
TU UT Sentencia if (2) __________________________________ 119
TU UT
Ejemplo 59:
TU UT Sentencia if (3) __________________________________ 120
TU UT
Ejemplo 60:
TU UT Sentencia for (1) ________________________________ 121
TU UT
Ejemplo 61:
TU UT Sentencia for (2) ________________________________ 122
TU UT
Ejemplo 62:
TU UT Sentencia for (3) ________________________________ 123
TU UT
Ejemplo 63:
TU UT Envo de datos de un formulario a una pgina PHP _____ 124
TU UT
Ejemplo 64:
TU UT Subir un archivo al servidor Web ____________________ 129
TU UT
Ejemplo 65:
TU UT Conexin a MySQL ______________________________ 143
TU UT
Ejemplo 66:
TU UT Listado de registros ______________________________ 143
TU UT
Ejemplo 67:
TU UT Listado de registros en una tabla ____________________ 144
TU UT
Ejemplo 68:
TU UT Insercin de registros en una tabla __________________ 145
TU UT
Ejemplo 69:
TU UT Edicin de registros ______________________________ 147
TU UT
Ejemplo 70:
TU UT Eliminacin de registros ___________________________ 149
TU UT
Ejemplo 71:
TU UT Conexin a PostgreSQL __________________________ 170
TU UT
Ejemplo 72:
TU UT Listado de registros en una tabla HTML. ______________ 171
TU UT
Ejemplo 73:
TU UT Insercin de registro en PostgreSQL. ________________ 172
TU UT
Ejemplo 74:
TU UT Edicin de registro en PostgreSQL.__________________ 174
TU UT
Ejemplo 75:
TU UT Eliminacin de registro en PostgreSQL. ______________ 176
TU UT
Ejemplo 76:
TU UT Conexin a MS-SQLServer ________________________ 180
TU UT
Ejemplo 77:
TU UT Listado de registros ______________________________ 181
TU UT
Ejemplo 78:
TU UT Insercin de registro en MS-SQLServer ______________ 182
TU UT
Ejemplo 79:
TU UT Edicin de registro en MS-SQLServer ________________ 184
TU UT
Ejemplo 80:
TU UT Eliminacin de registros en MS-SQLServer ___________ 185
TU UT
Ejemplo 81:
TU UT Definicin de una clase ___________________________ 187
TU UT
Ejemplo 82:
TU UT Creando una instancia ____________________________ 187
TU UT
Ejemplo 83:
TU UT Herencia simple de una Clase ______________________ 188
TU UT
Ejemplo 84:
TU UT Auto carga _____________________________________ 189
TU UT
Ejemplo 85:
TU UT Conexin a MySQL con mysqli _____________________ 195
TU UT
Ejemplo 86:
TU UT Listado con mysqli _______________________________ 196
TU UT
Ejemplo 87:
TU UT Insercin de registro con mysqli ____________________ 197
TU UT
Ejemplo 88:
TU UT Edicin de registro con mysqli ______________________ 199
TU UT
Ejemplo 89:
TU UT Eliminacin de registros con mysqli __________________ 201
TU UT
Ejemplo 90:
TU UT Paginacin de resultados__________________________ 202
TU UT
Ejemplo 91:
TU UT MODELO MVC con PHP ________________________ 209
TU UT
Ejemplo 92:
TU UT Una plantilla usada por el modelo ___________________ 209
TU UT
Ejemplo 93:
TU UT CONTROLADOR MVC con PHP ___________________ 210
TU UT
Ejemplo 94:
TU UT VISTA MVC con PHP ____________________________ 210
TU UT
Ejemplo 95:
TU UT modelo_bd.php _________________________________ 212
TU UT
Ejemplo 96:
TU UT lista_bd.php ____________________________________ 213
TU UT
Ejemplo 148:
TU UT Vista para mantenimiento con AJAX ________________ 308
TU UT
Ejemplo 149:
TU UT Sombreado de registros con JavaScript _____________ 310
TU UT
Lista de Tablas
Tabla 1.
T Cdigos HTML para caracteres especiales ________________ 23
Tabla 2. Cdigos HTML para caracteres especiales ________________ 24
Tabla 3. Caracteres especiales para cadenas en JavaScript __________ 63
Tabla 4. Operadores aritmticos________________________________ 65
Tabla 5. Operadores de comparacin ___________________________ 66
Tabla 6. Operadores lgicos___________________________________ 66
Tabla 7. Operadores de asignacin _____________________________ 67
Tabla 8. Operadores especiales ________________________________ 67
Tabla 9. Mtodos matemticos del Objeto Math____________________ 73
Tabla 10. Propiedades del objeto Number _________________________ 74
Tabla 11. Eventos de JavaScript ________________________________ 75
Tabla 12. Comando CSS ______________________________________ 95
Tabla 13. Macros CSS ________________________________________ 96
Tabla 14. Secciones CSS ______________________________________ 97
Tabla 15. Operadores aritmticos de PHP ________________________ 103
Tabla 16. Operadores de comparacin de PHP ____________________ 104
Tabla 17. Operadores de incremento y decremento de PHP __________ 106
Tabla 18. Operadores lgicos__________________________________ 108
Tabla 19. Operadores de matrices ______________________________ 109
Tabla 20. Controladores PDO__________________________________ 215
Lista de Figuras
Figura 1.
U Inicio de la instalacin de WAMP ______________________ 11
Figura 2.
U Licencia de uso de WAMP____________________________ 12
Figura 3.
U Destino de la instalacin de WAMP_____________________ 12
Figura 4.
U Seleccionar men de inicio de WAMP___________________ 13
Figura 5.
U Inicio de WAMP en el arranque del Sistema Operativo. _____ 13
Figura 6.
U Resumen de la configuracin de la instalacin ____________ 14
Figura 7.
U Instalando WAMP __________________________________ 14
Figura 8.
U Instalacin de WAMP completa________________________ 15
Figura 9.
U Men de WAMP____________________________________ 15
Figura 10.
U Resultado de ejercicio01.html _________________________ 18
Figura 11.
U Lista sin orden _____________________________________ 20
Figura 12.
U Listas sin orden anidadas ____________________________ 20
Figura 13.
U Lista ordenada _____________________________________ 21
Figura 14.
U Lista de definiciones ________________________________ 21
Figura 15.
U Resultado de ejercicio02.html _________________________ 23
Figura 16.
U Resultado de ejercicio03.html _________________________ 25
Figura 17.
U Resultado de ejercicio04.html _________________________ 28
Figura 18.
U Resultado de ejercicio05.html _________________________ 30
Figura 19.
U Tabla HTML _______________________________________ 32
Figura 20.
U Tabla sin una celda _________________________________ 32
Figura 21.
U Tabla con etiqueta CAPTION _________________________ 33
Figura 22.
U Tabla con etiqueta TH _______________________________ 34
Figura 23.
U Tabla con COLSPAN________________________________ 35
Figura 24.
U Tabla con ROWSPAN _______________________________ 36
Figura 25.
U Tabla con CELLSPACING y CELLPADDING _____________ 37
Figura 26.
U Resultado de ejemplo06.html _________________________ 38
Figura 27.
U Resultado de ejemplo08.html _________________________ 40
Figura 28.
U Marcos o Frames___________________________________ 47
Figura 29.
U Marcos con divisin horizontal_________________________ 48
Figura 30.
U Acrnimos y abreviaturas ____________________________ 49
Figura 31.
U Frase entre comillas ________________________________ 50
Figura 32.
U Acrnimos y abreviaturas ____________________________ 50
Figura 33.
U Animacin flash ____________________________________ 52
Figura 34.
U Tabla con THEAD, TFOOT Y TBODY ___________________ 53
Figura 35.
U BUTTON con imagen _______________________________ 55
Figura 36.
U Lista con OPTGROUP_______________________________ 56
Figura 37.
U Formulario con agrupamiento de controles _______________ 57
Figura 38.
U Ejemplo de pgina con DIVs y SPANs __________________ 60
Figura 39.
U Resultado de eventos.html ___________________________ 76
Figura 40.
U Resultado del mtodo alert ___________________________ 76
Figura 41.
U Resultado de load1.html _____________________________ 77
Figura 42.
U Resultado del mtodo alert ___________________________ 78
Figura 43.
U Resultado de ventanas.html __________________________ 80
Figura 44.
U La nueva ventana abierta ____________________________ 81
Figura 45.
U Resultado de escribir.html ____________________________ 83
Figura 46.
U Resultado de formularios.html _________________________ 85
Figura 47.
U Mensaje de validacin _______________________________ 85
Figura 48.
U Resultado de select.html _____________________________ 87
Figura 70. Conexin al servidor MySQL con MySQL Administrador ___ 132
U
Figura 82. Interfaz para cear una nueva base de datos _____________ 138
U
Figura 88. Men de operaciones que se pueden realizar sobre las tablas de
U
Figura 91. Operacin realizada con xito y el script SQL que ha sido
U
ejecutado. 142
Figura 92. Listado de registros de la tabla persona ________________ 142
U
Figura 98.
U Resultado de pagina17.php__________________________ 149
Figura 99.
U Archivos de instalacin de PostgreSQL_________________ 151
Figura 100.
U Asistente de instalacin de PostgreSQL ________________ 151
Figura 101.
U Inicio del asistente de instalacin _____________________ 152
Figura 102.
U Notas de instalacin _______________________________ 152
Figura 103.
U Opciones de instalacin_____________________________ 153
Figura 104.
U onfiguracin del servicio ____________________________ 153
Figura 105.
U Error en la cuenta _________________________________ 154
Figura 106.
U Password aleatorio ________________________________ 154
Figura 107.
U Cuenta del superusuario ____________________________ 154
Figura 108.
U Habilitar lenguaje procedural _________________________ 155
Figura 109.
U El asistente est listo para iniciar la instalacin___________ 155
Figura 110.
U Instalando PostgreSQL _____________________________ 156
Figura 111.
U Instalacin completa _______________________________ 156
Figura 112.
U pgAdmin III_______________________________________ 157
Figura 113.
U Conexin al servidor desde pgAdmin III ________________ 157
Figura 114.
U Listado de elementos del servidor _____________________ 158
Figura 115.
U Creando una base de datos _________________________ 158
Figura 116.
U Datos de la nueva base de datos _____________________ 159
Figura 117.
U Creando una nueva tabla ___________________________ 159
Figura 118.
U Propiedades de la tabla _____________________________ 160
Figura 119.
U Propiedades de una nueva columna ___________________ 160
Figura 120.
U Columna nombres de la tabla persona _________________ 161
Figura 121.
U Clave primaria de la tabla persona ____________________ 161
Figura 122.
U Columnas pertenecientes a la clave primaria ____________ 162
Figura 123.
U Script SQL generado para la creacin de la tabla _________ 162
Figura 124.
U Final de la creacin de la tabla _______________________ 163
Figura 125.
U Men desplegable de la tabla ________________________ 163
Figura 126.
U Vista de datos de la tabla ___________________________ 164
Figura 127.
U Editando datos en la tabla ___________________________ 164
Figura 128.
U Interfaz de phpPgAdmin ____________________________ 165
Figura 129.
U Logeo de usuarios al servidor PostgreSQL ______________ 165
Figura 130.
U Interfaz de ingreso a phpPgAdmin ____________________ 166
Figura 131.
U Creando una nueva base de datos ____________________ 166
Figura 132.
U Base de datos dbdemo creada _______________________ 167
Figura 133.
U Men de elementos de la base de datos ________________ 167
Figura 134.
U creando la tabla persona ____________________________ 167
Figura 135.
U Ingresando los campos de la tabla ____________________ 168
Figura 136.
U Autoincremento para la clave primaria _________________ 168
Figura 137.
U Estructura de la tabla_______________________________ 168
Figura 138.
U Formulario de ingreso de nuevos registros ______________ 169
Figura 139.
U Listado de registros ________________________________ 169
Figura 140.
U Activando la extensin php_pgsql _____________________ 170
Figura 141.
U Resultado de pagina23.php__________________________ 171
Figura 142.
U Resultado de pagina24.php__________________________ 172
Figura 143.
U Resultado de formulario06.html_______________________ 173
Figura 144.
U Resultado de pagina25.php__________________________ 174
Figura 145.
U Resultado de pagina26.php__________________________ 175
Figura 146.
U Resultado de pagina27.php__________________________ 176
Figura 147.
U Resultado de pagina28.php__________________________ 176
Figura 148.
U Creando un nueva base de datos _____________________ 177
Figura 149.
U Nombre de la nueva base de datos ____________________ 177
Figura 150.
U Creando una nueva tabla ___________________________ 178
Figura 151.
U Especificacin de los campos de la tabla _______________ 178
Figura 152.
U Activando la extensin php_mssql ____________________ 179
Figura 153.
U Creando un usuario para acceso a la base de datos ______ 179
Figura 154.
U Establecimiento de los permisos del usuario_____________ 180
Figura 155.
U Resultado de pagina30.php__________________________ 181
Figura 156.
U Resultado de pagina32.php__________________________ 183
Figura 157.
U Resultado de pagina33.php__________________________ 185
Figura 158.
U Resultado de pagina34.php__________________________ 185
Figura 159.
U Resultado de pagina35.php__________________________ 186
Figura 160.
U Resultado de pagina20.php__________________________ 188
Figura 161.
U Resultado de pagina21.php__________________________ 189
Figura 162.
U Resultado de autocarga.php _________________________ 190
Figura 163.
U Resultado de mysqli-connect.php _____________________ 195
Figura 164.
U Resultado de mysqli-lista.php ________________________ 196
Figura 165.
U Resultado de mysqli-listado.php ______________________ 197
Figura 166.
U Resultado de formulario08.htm _______________________ 198
Figura 167.
U Resultado de mysqli-insertar.php _____________________ 199
Figura 168.
U Resultado de mysqli-editar.php _______________________ 200
Figura 169.
U Resultado de mysqli-actualizar.php____________________ 201
Figura 170.
U Resultado de mysqli-eliminar.php _____________________ 201
Figura 171.
U Resultado de mysqli-listado-paginacion.php _____________ 203
Figura 172.
U MVC____________________________________________ 205
Figura 173.
U Tres capas _______________________________________ 207
Figura 174.
U Resultado de controlador_bd.php _____________________ 214
Figura 175.
U Resultado de pdo-lista.php __________________________ 219
Figura 176.
U Resultado de pdo-listado.php ________________________ 220
Figura 177.
U Resultado de pdo-nuevo.php_________________________ 221
Figura 178.
U Resultado de pdo-editar.php _________________________ 223
Figura 179.
U Resultado de md5.php______________________________ 227
Figura 180.
U Resultado de inyeccion01.php________________________ 231
Figura 181.
U Nuevo resultado de inyeccion01.php___________________ 231
Figura 182.
U Tercer resultado de inyeccion01.php___________________ 232
Figura 183.
U URL con inyeccin SQL_____________________________ 232
Figura 184.
U Resultado de la inyeccin SQL _______________________ 232
Figura 185.
U Evitando la inyeccin SQL___________________________ 234
Figura 186.
U Resultado sin inyeccin realizada _____________________ 234
Figura 187.
U Tabla usuario _____________________________________ 235
Figura 188.
U Resultado de formulario09.html_______________________ 236
Figura 189.
U Resultado de inyeccion03.php________________________ 236
Figura 190.
U Logeo con inyeccin SQL ___________________________ 237
Figura 191.
U Nuevo resultado de inyeccion03.php___________________ 237
Figura 192.
U Tercer resultado de inyeccion03.php___________________ 238
Figura 193.
U Resultado de formulario10.html_______________________ 239
Figura 194.
U Resultado de comillas-magicas.php ___________________ 239
Figura 195.
U Resultado de inyeccion04.php________________________ 241
Figura 196.
U Resultado de ingreso01.php _________________________ 244
Figura 197.
U Ingreso01.php con datos incorrectos___________________ 245
Figura 198.
U Logeo incorrecto __________________________________ 245
Figura 199.
U Autenticacin http con PHP __________________________ 246
Figura 200.
U Resultado de auth01.php____________________________ 247
Figura 201.
U Autenticacin con datos correctos_____________________ 247
Figura 202.
U Resultado de auth01.php con datos correctos ___________ 247
Figura 203.
U Tabla usuario _____________________________________ 248
Figura 204.
U registro de un usuario ______________________________ 248
Figura 205.
U Resultado de entrar.php ____________________________ 249
Figura 206.
U Resultado de entrar.php con datos incorrectos ___________ 251
Figura 207.
U Resultado de mysqli-listadologeado.php ________________ 252
Figura 208.
U Ejemplo1 de CAPTCHA_____________________________ 256
Figura 209.
U Ejemplo2 de CAPTCHA_____________________________ 256
Figura 210.
U Ejemplo3 de CAPTCHA_____________________________ 256
Figura 211.
U Resultado de gdinfo.php ____________________________ 257
Figura 212.
U Resultado de imagen01.php _________________________ 258
Figura 213.
U Resultado de imagen02.php _________________________ 258
Figura 214.
U Resultado de imagen03.php _________________________ 259
Figura 215.
U Resultado de imagen04.php _________________________ 260
Figura 216.
U Resultado de imagen05.php _________________________ 262
Figura 217.
U Resultado de imagen06.php _________________________ 263
Figura 218.
U Resultado de pdf01.php_____________________________ 265
Figura 219.
U Resultado de pdf02.php_____________________________ 268
Figura 220.
U Segunda pgina de pdf01.php________________________ 268
Figura 221.
U Resultado de pdf03.php_____________________________ 272
Figura 222.
U Resultado de pdf04.php_____________________________ 273
Figura 223.
U Abriendo xls01.php ________________________________ 275
Figura 224.
U Hoja de calculo con xls01.php ________________________ 275
Figura 225.
U Abriendo xls02.php ________________________________ 276
Figura 226.
U resumen.xls generado con xls02.php __________________ 276
Figura 227.
U Resultado de xls03.php _____________________________ 278
Figura 228.
U Resultado de xls04.php _____________________________ 279
Figura 229.
U Abriendo xls05.php ________________________________ 280
Figura 230.
U Resultado de xls05.php _____________________________ 280
Figura 231.
U Resultado de xajax01.php ___________________________ 283
Figura 232.
U Resultado de xajax02.php ___________________________ 284
Figura 233.
U Cambio de contenido con xajax02.php _________________ 285
Figura 234.
U Resultado de xajax03.php ___________________________ 286
Figura 235.
U Resultado de xajax04.php ___________________________ 288
Figura 236.
U Ocultando un DIV _________________________________ 288
Figura 237.
U Resultado de xajax05.php ___________________________ 289
Figura 238.
U Resultado de xajax06.php ___________________________ 290
Figura 239.
U Imagen cargada con xajax06.php _____________________ 291
Figura 240.
U Segunda imagen cargada con xajax06.php______________ 291
Figura 241.
U Resultado de xajax07.php ___________________________ 292
Figura 242.
U Ventana nueva con xajax07.php ______________________ 293
Figura 243.
U Mensaje utilizando eventos en xajax07.php _____________ 293
Figura 244.
U Resultado de xajax08.php ___________________________ 294
Figura 245.
U Ingreso de datos en xajax08.php______________________ 295
Figura 246.
U Mensaje resultante en xajax08.php ____________________ 295
Figura 247.
U Formulario de xajax09.php __________________________ 296
Figura 248.
U Deshabilitando una caja de texto con xajax______________ 297
Figura 249.
U Mensaje de resultado de xajax09.php __________________ 297
Figura 250.
U Incluyendo objetos inhabilitados ______________________ 297
Figura 251.
U Mensaje resultante incluyendo objetos inhabilitados_______ 297
Figura 252.
U Error comun en xajax_______________________________ 298
Figura 253.
U Resultado de xajax-buscar.php _______________________ 300
Figura 254.
U Datos de bsqueda en xajax-buscar.php _______________ 300
Figura 255.
U Resultado de la bsqueda en xajax-buscar.php __________ 300
Figura 256.
U Listado de persona con xajax ________________________ 304
Figura 257.
U Insercin de registros con xajax ______________________ 305
Figura 258.
U Edicin de registro con xajax_________________________ 305
Figura 259.
U Seleccin de registros con xajax ______________________ 306
Figura 260.
U Bsqueda de registros con xajax______________________ 306