100% encontró este documento útil (1 voto)
808 vistas

PHP

Este documento proporciona una guía sobre el desarrollo de aplicaciones web con PHP y MySQL. Explica los conceptos básicos de HTML, CSS, JavaScript, PHP y MySQL, y cómo integrar PHP y MySQL para crear aplicaciones web dinámicas. La estructura del documento incluye capítulos sobre cada una de estas tecnologías y conceptos clave relacionados como variables, funciones, bases de datos, consultas y más.

Cargado por

Seba Conlledo
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
100% encontró este documento útil (1 voto)
808 vistas

PHP

Este documento proporciona una guía sobre el desarrollo de aplicaciones web con PHP y MySQL. Explica los conceptos básicos de HTML, CSS, JavaScript, PHP y MySQL, y cómo integrar PHP y MySQL para crear aplicaciones web dinámicas. La estructura del documento incluye capítulos sobre cada una de estas tecnologías y conceptos clave relacionados como variables, funciones, bases de datos, consultas y más.

Cargado por

Seba Conlledo
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 129

PHP

Tabla de Contenidos [-+]


1 INTRODUCCION
1.1 A QUIEN VA DIRIGIDO
1.2 ESTRUCTURA DEL LIBRO
2 HTML
2.1 ESTRUCTURA INICIAL
2.2 CABECERAS (HEAD)
2.3 COMENTARIOS
2.3.1 PARRAFO, SALTO DE LINEA, ESPACIOS
2.3.2 ENCABEZADOS
2.4 TABLAS
2.5 LISTAS
2.5.1 Listas Desordenadas
2.5.2 Listas de definiciones
2.6 VINCULOS
2.7 FRAMES
2.8 FORMULARIOS
2.8.1 Cuadros de texto
2.9 IMAGENES
3 CSS
3.1 ¿QUÉ ES CSS?
3.2 VINCULO A UNA HOJA DE ESTILO
3.3 ESTRUCTURA PRINCIPAL Y COMENTARIOS
3.4 MODELO DE CSS
3.5 SELECTORES
3.6 ALCANCE DE LOS ESTILOS
3.7 EL MODELO DE CAJA
3.8 CAJAS FLOTANTES
3.9 VISIBILIDAD DE CAPAS
4 JavaScript
4.1 EL PRIMER SCRIPT
4.2 PROGRAMACIÓN BÁSICA
4.2.1 Tipos de variables
4.3 OPERADORES
4.4 ESTRUCTURAS DE CONTROL DE FLUJO
4.5 FUNCIONES Y PROPIEDADES BÁSICAS DE JAVASCRIPT
4.5.1 Funciones útiles para cadenas de texto
4.5.2 Funciones útiles para arrays
4.5.3 Funciones útiles para números
4.6 FUNCIONES
4.7 DOM
4.8 EVENTOS
4.9 FORMULARIOS
4.10 Validación
4.10.1 Requerir informacion
4.10.2 Validando cuadros de texto con informacion y sin ella
4.10.3 Validar correo electronico
4.11 OTRAS UTILIDADES
4.11.1 Relojes, contadores e intervalos de tiempo
4.11.2 Calendario
4.11.3 Tooltip
5 PHP (Hypertext Preprocessor)
5.1 INTRODUCCION
5.2 ¿QUE ES PHP?
5.3 HISTORIA
5.4 PHP 4
5.5 PHP 5
5.6 REFERENCIAS DEL LENGUAJE
5.7 VARIABLES
5.7.1 Funciones para recorrer un arreglo
5.7.2 Variables Predefinidas
5.7.3 Variables de Apache
5.7.4 Variables de Entorno
5.7.5 Variables de PHP
5.7.6 variables variables
5.7.7 Constantes
5.7.8 EXPRESIONES
5.7.9 $a Negación Cierto si $a no es cierto.
5.7.10 ESTRUCTURAS DE CONTROL
5.7.11 FUNCIONES
5.8 AUTENTIFICACION HTTP CON PHP=
5.8.1 ENVIO DE ARCHIVOS
5.8.2 FUNCIONES DE FECHA Y HORA
5.8.3 FUNCIONES DE CADENAS
5.8.4 FUNCIONES DE ARCHIVOS
5.8.5 MANIPULACION DE ARCHIVOS DE TEXTO
5.8.6 EDICION DE LOS FICHEROS
5.8.7 FUNCIONES DE CORREO
5.8.8 VARIAS FUNCIONES
5.8.9 EXPRECIONES REGULARES
5.8.10 SESSIONES
6 MYSQL
6.1 ¿Qué es MySQL?
6.2 INTRODUCCION
6.3 Licencia
6.4 Tipos de tablas
6.4.1 Tamaño máximo de tablas
6.4.2 Estructura de las tablas
6.5 VARIAS FUNCIONES
6.6 ACCISGNACION DE CONTRASEÑAS
6.7 ACCESO
6.8 CREAR BASES DE DATOS
6.9 CREAR USUARIOS
6.10 CREAR TABLAS
6.11 TIPOS DE DATOS
6.12 AGREGAR DATOS
6.13 CREAR CONSULTAS DE DATOS
6.14 CREAR CONSULTAS ELIMINACION TODO
6.14.1 Crear consultas eliminacion algunos
6.15 CREAR CONSULTAS DE MODIFICACION
6.16 CREAR CONSULTAS DE DATOS CON PARAMETROS
6.17 CREAR CONSULTAS DE DATOS CON FUNCIONES
6.17.1 CREAR CONSULTAS DE DATOS CON FORMATO DE SALIDA
6.17.2 CREAR CONSULTAS DE DATOS VARIAS TABLAS
6.18 CREAR Y ELIMINAR USUARIOS
6.18.1 ALTERAR TABLAS
6.18.2 Respaldos de las bases de datos
6.19 mysqldump
6.19.1 mysqlhotcopy
7 PHP y MYSQL
7.1 FUNCIONES PHP PARA MYSQL
7.2 Administración de información en BD con php
7.3 Búsqueda Estática
7.4 Búsqueda dinámica
7.5 Actualización de información
7.6 Eliminar registros
7.7 Errores más frecuentes
7.8 Apéndice
7.8.1 Palabras reservadas en PHP
7.8.2 Palabras reservadas en MySQL
INTRODUCCION

A QUIEN VA DIRIGIDO
Considere este libro como una guia sencilla, fácil de utilizar y con lo básico para
desarrollar una aplicación web con PHP y MySQL. Está dirigido a los programadores
que tienen intención de conocer como se desarrolla una aplicación web; en el
presente libro se tocan temas básicos y que ,sin su conocimiento, será muy difícil
el desarrollo de las mismas. PHP es un lenguaje de programación que trabaja sobre
Internet, por lo tanto, es indispensable conocer el lenguaje HTML, el cual es la
base de programación de las páginas web tanto estáticas, como dinámicas. Con el
presente libro, se aprenderá a realizar páginas web dinámicas basándonos en HTML y
PHP.

ESTRUCTURA DEL LIBRO


El libro esta estructurado de la siguiente manera.
Capitulo I HTML: en este capitulo repasaremos o conoceremos los elementos básicos
de HTML para desarrollar una página web; pasaremos desde la estructura de HTML,
(encabezado y cuerpo), hasta detallar más a fondo los elementos que son
indispensables para realizar una aplicación web, como son: Tablas, Formas, Listas,
Objetos para solicitar información a los usuarios, botones de acción. Además, se
explicará como realizar una validación de captura de información con Javascript y
una explicación breve de las hojas de estilo (CSS).
Capítulo II CSS: Hojas de estilo, significado y estructura, el modelado en
cascada, funciones y ejemplos aplicados a opciones reales, diferentes tipos de
selectores, alcance de los estilos, el modelo de caja, cajas flotantes y visiblidad
de caja.
Capítulo III JavaScript: El primer script, programacion basica en javascript,
variables, constantes y los alcanmces de esats, tipos de variables, operadores,
estructuras de control, estructuras y propiedades basicas de javascript, funciones
utiles para texto, cadenas, array y numeros, Dom, eventos y manejo de formulaarios,
validaciones y otras funciones importantes de calendario.
Capítulo III PHP: variables, constantes, tipos de dato, operadores, estructuras de
control son los temas base de PHP que se van a manejar en este capitulo,
Posteriormente manejo de archivos de texto, funciones, manejo de formularios, envío
de correo electrónico a través de php, envío de archivos al servidor junto con
autenticación de usuarios y sesiones, son los temas contemplados para finalizar
este capítulo.
Capítulo IV MySQL: en este capítulo se enseñara el acceso a la consola de MySQL
sin ninguna herramienta gráfica; además de asignación de contraseñas a cuentas de
acceso a la base de datos, otorgar privilegios a usuarios, crear bases de datos,
crear tablas, insertar, actualizar, eliminar y consulta de información, importar
archivos de textos y respaldos de la base de datos.
Capítulo V PHP y MySQL: en este capítulo integramos todo lo aprendido
anteriormente, ya que únicamente utilizaremos algunas funciones nuevas para poder
gestionar la información de la base de datos desde una aplicación web.
Errores frecuentes: en esta sección se contempla proporcionar a los lectores una
guía rápida de los errores más frecuentes con los que se pueden encontrar.
Apéndice; se contempla indicar en esta sección las funciones consideradas las más
importantes de php y MySQL.

HTML
El HTML (Hyper Text Markup Language) es un lenguaje que sirve para escribir
hipertexto, es decir, documentos de texto presentado de forma estructurada, con
enlaces (links) que conducen a otros documentos o a otras fuentes de información
(por ejemplo bases de datos) que pueden estar en tu propia máquina o en máquinas
remotas de la red. Todo ello se puede presentar acompañado de cuantos gráficos
estáticos o animados y sonidos seamos capaces de imaginar.

ESTRUCTURA INICIAL
Ej.10001
<!--Este es un comentario -->
<HTML>
<HEAD>
<TITLE> Documento de prueba </TITLE>
</HEAD>

<!-- Esto es un comentario -->


<BODY>

Este es el clasico Hola mundo

</BODY>
</HTML>

El tipo de documento no es obligatorio a efectos prácticos, es decir que la página


se verá igual tanto si lo escribes como si no. Sólo sirve como identificación del
tipo de contenido del fichero a los efectos de cumplir las especificaciones de
estándar recomendadas por el consorcio W3C, que es el organismo que regula el
lenguaje. Por ejemplo:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">]
<html xmlns="[http://www.w3.org/1999/xhtml">]

CABECERAS (HEAD)
La HEAD es la primera de las dos partes en que se estructura un documento HTML. En
la HEAD reside información acerca del documento, y generalmente no se ve cuando se
navega por él. En la HEAD se pone el elemento lleno <TITLE> que es una breve
descripción que identifica la página. Es lo que el navegador se guarda en el
"Bookmarks" (libro de marcas o libro de direcciones), con lo que crea la lista que
aparece en la orden "Go" de la barra de órdenes, lo que aparece en la esquina
superior izquierda cuando se imprime el documento, y lo que aparece en el marco de
la ventana del navegador. También lo guarda en su caché, y servirá para mostrar la
página, cuando sea llamada otra vez, sin necesidad de conectarse de nuevo al
servidor de origen. No hay que confundir el elemento <TITLE> con el nombre del
fichero. Por ejemplo, esta página está contenida en un fichero llamado head.htm y
el texto de su <TITLE> es: Head de un documento. Se escibirá asi:
<HEAD>
<TITLE>Head de un documento </TITLE>
</HEAD>

Dentro de la HEAD puede utilizarse otro elemento: META. Por ejemplo, si se escribe:
<HEAD>
<TITLE>Head de un documento </TITLE>
<META HTTP-EQUIV="Refresh" CONTENT="10">
</HEAD>

Esto hace que el visualizador vuelva a cargar la página activa al cabo de 10


segundos. También puede hacerse a un servidor. Así:
<HEAD>
<TITLE>Head de un documento </TITLE>
<META HTTP-EQUIV="Refresh" CONTENT="10; URL=[http://miservidor/mipagina.htm">]
</HEAD>

Utiliza esto con precaución. Si sabes que el contenido de la página no va a


cambiar, es inútil hacer esto, y si lo haces contra un servidor, puedes
sobrecargarlo. Este elemento, sólo tendrá utilidad en casos muy especiales. Otra
opción es forzar la expiración inmediata en la caché del navegador de la página
recibida, lo que provoca que la página sea solicitada de nuevo al servidor cada
vez, en lugar de cargar la copia que ya existe en la máquina del cliente. Se
escribe así:
<HEAD>
<TITLE>Head de un documento </TITLE>
<META HTTP-EQUIV="Expires" CONTENT="Tue, 20 Aug 1996 14:25:27 GMT">
</HEAD>

Si se pone una fecha ya pasada, como la que hay en el ejemplo, el navegador elimina
inmediatamente de la caché la página recibida, y si no es pasada, lo hará en el
momento indicado por la misma. También se le puede dar valor cero a la fecha de
expiración:
<HEAD>
<TITLE>Head de un documento </TITLE>
<META HTTP-EQUIV="Expires" CONTENT="0">
</HEAD>

Otra opción es impedir directamente que el navegador guarde en caché la página.


Esto es especialmente útil cuando se trabaja con formularios que consultan datos
dinámicos:
<HEAD>
<TITLE>Head de un documento </TITLE>
<META HTTP-EQUIV="Expires" CONTENT="no-cache">
</HEAD>

Si tienes interés en que tus páginas aparezcan en los grandes buscadores de


Internet, y puedan ser encontradas con facilidad, puedes poner las palabras clave
que contiene la página separadas por comas. Por ejemplo:
<HEAD>
<TITLE>Head de un documento </TITLE>
<META NAME="keywords" CONTENT="HTML, internet ">
</HEAD>

Este otro sirve para que los buscadores puedan ofrecer un breve resumen de los
contenidos de tu página:
<HEAD>
<TITLE>Head de un documento </TITLE>
<META NAME="description" CONTENT="Manual para escribir HTML.">
</HEAD>

Puedes poner todos los elementos <META> que creas necesarios, pero sin repetirlos.
Habrás notado que se ha utilizado la palabra "caché", y tal vez no sepas a qué se
refiere. Todos los navegadores, por defecto, siempre que reciben una página de un
servidor se hacen una copia de la misma en el disco de tu máquina. Con esto se
pretende que si vuelves a solicitar la misma página, en lugar de pedirla de nuevo
al servidor, te mostrará la que tiene guardada en el disco. A esta área del disco
donde el navegador va poniendo las páginas visitadas, se le denomina caché. El
tamaño de la caché lo puedes modificar desde las opciones de configuración del
navegador, e incluso puedes darle tamaño cero, con lo que siempre que veas una
página, ésta habrá sido solicitada al servidor independientemente de lo que digan
las instrucciones META. Hay otros elementos que pueden aparecer en la HEAD, como
ISINDEX, NEXTID, LINK o BASE, pero son de uso muy especializado y poco corriente,
algunos ya en desuso, y ninguno obligatorio (<TITLE> sí lo es).

COMENTARIOS
<!-- Coemntarios -->

PARRAFO, SALTO DE LINEA, ESPACIOS


<P> Es la etiqueta para parrafo <br> Salto de linea Espacio en blanco <HR> Linea
horrizontal
Ej.10002
<HTML>
<HEAD>
<TITLE> Documento de prueba </TITLE>
</HEAD>

<!-- Esto es un comentario -->


<BODY>
Esta es una priemr linea <BR>
<p>
Este es un parrafo Y Esta es otra linea
</P>
<HR> <!-- Linea horizontal -->
<p>
Este es un otro parrafo &nbsp;&nbsp;&nbsp; Y Esta es otra linea
</P>

</BODY>
</HTML>

ENCABEZADOS
<H1> Encabezado 1 ... Permite mostrar en un sstilo ya predeterminado, diferentes
tamaños para los titulos.g
Ej.10003
<HTML>
<HEAD>
<TITLE> Encabezados </TITLE>
</HEAD>
<BODY>
Esta es una priemr linea <BR>
<H1>Encabezado H1</H1>
<HR>
<H2>Encabezado H2</H2>
<HR>
<H3>Encabezado H3</H3>
<HR>
<H4>Encabezado H4</H4>
<HR>
<H5>Encabezado H5</H5>
<HR>
<H6>Encabezado H6</H6>
<HR>
</BODY>
</HTML>

TABLAS
<tabla> Etiqueta que permite iniciar las tablas <tr> Etiqueta con la que se inician
Filas <td> Etiqueta para crear celda (Columna) <th> Como la anterior solo que sirve
para encabezados de tablas
Tabla básica de 2x2 y 3X2
Ej. 10004
<table border="1">
<tr>
<td>A</td>
<td>B</td>
</tr>
<tr>
<td>C</td>
<td>D</td>
</tr>
</table>

Ej. 10005

A B C
D E F
<table border="1">
<TR>
<TD>A</TD> <TD>B</TD> <TD>C</TD>
</TR>
<TR>
<TD>D</TD> <TD>E</TD> <TD>F</TD>
</TR>
</TABLE>

Dos ejemplos de línea expandida <ROWSPAN>


Ej. 10006

A B C
D E
<TABLE BORDER>
<TR>
<TD>A</TD>
<TD ROWSPAN=2>B</TD>
<TD>C</TD>
</TR>
<TR>
<TD>D</TD> <TD>E</TD>
</TR>
</TABLE>

Ej. 10007
A B C D
E F G
<TABLE BORDER>
<TR>
<TD ROWSPAN=2>A/TD>
<TD>B</TD>
<TD>C</TD>
<TD>D</TD>
</TR>
<TR>
<TD>E</TD> <TD>F</TD> <TD>G</TD>
</TR>
</TABLE>

Ejemplo de columna expandida <COLSPAN> Ej. 10008


Item Item
1 2
Item Item
Item 5
3 4
<TABLE BORDER>
<TR>
<TD>Item 1</TD>
<TD COLSPAN=2>Item 2</TD>
</TR>
<TR>
<TD>Item 3</TD> <TD>Item 4</TD> <TD>Item 5</TD>
</TR>
</TABLE>

Tabla con cabeceras <TH> Ej. 10009


Head1 Head2 Head3
A B C
D E F
<TABLE BORDER=”1”>
<TR>
<TH>Head1</TH> <TH>Head2</TH> <TH>Head3</TH>
</TR>
<TR>
<TD>A</TD> <TD>B</TD> <TD>C</TD>
</TR>
<TR>
<TD>D</TD> <TD>E</TD> <TD>F</TD>
</TR>
</TABLE>

Combinación de columna expandida y cabecera


Ej. 10010
Head1 Head2
A B C D
E F G H
<TABLE BORDER>
<TR>
<TH COLSPAN=2>Head1</TH>
<TH COLSPAN=2>Head2</TH>
</TR>
<TR>
<TD>A</TD> <TD>B</TD> <TD>C</TD> <TD>D</TD>
</TR>
<TR>
<TD>E</TD> <TD>F</TD> <TD>G</TD> <TD>H</TD>
</TR>
</TABLE>

Combinación de cabeceras múltiples y columnas expandidas


Ej.10011
Head1 Head2
Head 3 Head 4 Head 5 Head 6
A B C D
E F G H
<TABLE BORDER>
<TR>
<TH COLSPAN=2>Head1</TH>
<TH COLSPAN=2>Head2</TH>
</TR>
<TR>
<TH>Head 3</TH> <TH>Head 4</TH>
<TH>Head 5</TH> <TH>Head 6</TH>
</TR>
<TR>
<TD>A</TD> <TD>B</TD> <TD>C</TD> <TD>D</TD>
</TR>
<TR>
<TD>E</TD> <TD>F</TD> <TD>G</TD> <TD>H</TD>
</TR>
</TABLE>

Ejemplo con todos los elementos y parámetros


Ej.10012
Media
Altura Peso
Sexo Hombres 1.9 85
Mujeres 1.7 60
<TABLE BORDER>
<TR> <TD><TH ROWSPAN=2></TH>
<TH COLSPAN=2>Media</TH></TD>
</TR>
<TR> <TD><TH>Altura</TH><TH>Peso</TH></TD>
</TR>
<TR> <TH ROWSPAN=2>Sexo</TH>
<TH>Hombres</TH><TD>1.9</TD><TD>85</TD>
</TR>
<TR> <TH>Mujeres</TH><TD>1.7</TD><TD>60</TD>
</TR>
</TABLE>

Otro ejemplo de línea y columna expandidos Ej.10013

A 1 2
3 4
C D
<TABLE BORDER>
<TR>
<TD ALIGN=center ROWSPAN=2 COLSPAN=2>A</TD>
<TD>1</TD>
<TD>2</TD>
</TR>
<TR>
<TD>3</TD>
<TD>4</TD>
</TR>
<TR>
<TD ALIGN=center ROWSPAN=2 COLSPAN=2>C</TD>
<TD ALIGN=center ROWSPAN=2 COLSPAN=2>D</TD>
</TR>
<TR>
</TR>
</TABLE>

Tabla con borde de 10 puntos Ej.10014


Item
Item 2
1
Item
Item $
3
<TABLE BORDER=10>
<TR> <TD>Item 1</TD> <TD> Item 2</TD>
</TR>
<TR> <TD>Item 3</TD> <TD>Item 4</TD>
</TR>
</TABLE>

Dimensionado de celdas Ej.10015

A B C
D E F
<TABLE BORDER CELLPADDING=10 CELLSPACING=0>
<TR>
<TD>A</TD> <TD>B</TD> <TD>C</TD>
</TR>
<TR>
<TD>D</TD> <TD>E</TD> <TD>F</TD>
</TR>
</TABLE>

Se puede aplicar individualmente a una celda o a toda la columna Ej.10016


Enero Febrero Marzo
Todas alineadas Esta es la
Celda 3
arriba Celda 2
Por defectoAlineado al
Alineado arriba Alineado abajo
centro
<TABLE BORDER>
<TR>
<TH>Enero</TH>
<TH>Febrero</TH>
<TH>Marzo</TH>
</TR>
<TR VALIGN=top>
<TD>Todas alineadas arriba</TD>
<TD>Esta es la<br>Celda 2</TD>
<TD>Celda 3</TD>
</TR>
<TR>
<TD VALIGN=top>Alineado arriba</TD>
<TD VALIGN=bottom>Alineado abajo</TD>
<TD>Por defecto<br>Alineado al centro</TD>
</TR>
</TABLE>

Anidando tablas. La tabla ABCD dentro de la tabla 12345


Ej.10017
1 2 3
A B
C D
4 5 6
<TABLE BORDER>
<TR> <!-- ROW 1, TABLE 1 -->
<TD>1</TD>
<TD>2</TD>
<TD>3
<TABLE BORDER>
<TR> <!-- ROW 1, TABLE 2 -->
<TD>A</TD>
<TD>B</TD>
</TR>
<TR> <!-- ROW 2, TABLE 2 -->
<TD>C</TD>
<TD>D</TD>
</TR>
</TABLE>
</TD>
</TR>
<TR> <!-- ROW 2, TABLE 1 -->
<TD>4</TD>
<TD>5</TD>
<TD>6</TD>
</TR>
</TABLE>

Longitud horizontal de las tablas-


Tabla que ocupa el 50 % de la pantalla, y cuyas celdas están dimensionadas al 50 %
cada una respecto a la longitud total de la tabla
Ej.10018

Width=50% Width=50%
Celda 3 Celda 4
<TABLE BORDER WIDTH="50%">
<TR><TD>Width=50%</TD><TD>Width=50%</TD>
</TR>
<TR><TD>Celda 3</TD><TD>Celda 4</TD>
</TR>
</TABLE>

Tabla dimensionada al 50 % de la pantalla, celdas sin dimensionar. Obsévese que se


alargan más de lo que lo harían sin forzar la longitud de la tabla
Ej.10019

Celda
2
1
Celda
4
3
<TABLE BORDER WIDTH="50%">
<TR><TD>Celda 1</TD><TD>2</TD>
</TR>
<TR><TD>Celda 3</TD><TD>4</TD>
</TR>
</TABLE>

El mismo efecto anterior, pero con la tabla dimensionada al 100 %


Ej.10020
WIDTH=100% Celda 2
3 Celda 4
<TABLE BORDER WIDTH="100%">
<TR><TD>WIDTH=100%</TD><TD>Celda 2</TD>
</TR>
<TR><TD>3</TD><TD>Celda 4</TD>
</TR>
</TABLE>

Fondos de colores o gráficos en las tablas-


Una tabla de cuatro celdas. Cada una de un color.
Ej.10021
Texto ROJO Texto VERDE Texto AZUL Texto AMARILLO
<TABLE BORDER>
<TR><TD BGCOLOR="RED">Texto ROJO</TD>
<TD BGCOLOR="green">Texto VERDE</TD>
</TR>

<TR><TD BGCOLOR="blue">Texto AZUL</TD>


<TD BGCOLOR="YELLOW">Texto AMARILLO</TD>
</TR>
</TABLE>

Bordes de colores en las tablas Ej.10022


Ejemplo de
bordes
de color rojo|
Ejemplo de
bordes
de color rojo|
<TABLE BORDER=2 bordercolor="red" >
<TR><TD> Ejemplo de bordes</TD><TD> de color rojo </TD></TR>
<TR><TD> Ejemplo de bordes</TD><TD> de color rojo </TD></TR>
</TABLE>

Bordes de colores en las tablas Ej.10023 Recuadro con ángulos redondeados Y este es
el código necesario:
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td bgcolor="#DDE0FC" width="20"><img src="angulo1.gif" width="20" height="20">
<td bgcolor="#DDE0FC">
<td bgcolor="#DDE0FC" width="20"><img src="angulo2.gif" width="20" height="20">
</tr>
<tr>
<td bgcolor="#DDE0FC" width="20">
<td bgcolor="#DDE0FC">Recuadro con ángulos redondeados
<td bgcolor="#DDE0FC" width="20">
</tr>
<tr>
<td bgcolor="#DDE0FC" width="20"><img src="angulo4.gif" width="20" height="20">
<td bgcolor="#DDE0FC">
<td bgcolor="#E5E7FD" width="20"><img src="angulo3.gif" width="20" height="20">
</tr>
</table>

LISTAS
Para hacer una lista, se debe utilizar la directiva <UL>...</UL>; mientras que,
para cada elemento de la lista debe utilizarse la directiva <LI>...</LI>:

Listas Desordenadas
Ej. 10024
<UL>
<LI>Sr. Chema Pamundi</LI>
<LI>Sr. German Tequilla</LI>
<LI>Sr. Carmelo Coton</LI>
<LI>Sra. Carmen Tirosa</LI>
</UL>
Listas enumeradas
Para hacer una lista enumerada, se deberá especificar con la directiva
<OL>...</OL>. Cada elemento de la lista estará contenida entre <LI>...</LI>:
Ej. 10025
<OL>
<LI>Está conectado a la corriente?</LI>
<LI>Está el interruptor a ON?</LI>
<LI>Está la pantalla encendida?</LI>
<LI>Está la linea de alimentaci&oacuten caida?</LI>
</OL>

Listas de definiciones
Para formatear una lista de descripciones se usarán las directivas <DL>...</DL>.
Cada elemento debe especificarse entre <DT>...</DT>. Cada definición debe
especificarse entre <DD>...</DD>.
Ej. 10026
<DL>
<DT><B></DT>
<DD>Negrita (bold).</DD>
<DT><I></DT>
<DD>Cursiva (italic).</DD>
</DL>

Nota: Listas anidadas Dentro de un elemento de una lista se puede especificar otra
lista.

VINCULOS
Servici Descripción
Efecto
o Ejemplo
http:// Servicios WWW <A HREF="http://www.uv.es/"> WWW</A>
ftp:// Servicios FTP <A HREF="ftp://ftp.uv.es/">FTP</A>
news: Servicios NEWS <A HREF="news:'news.uv.es/">NEWS</A>
mailto: Servicios E-mail <A HREF="mailto:[email protected]/">E-mail</A>
file:'/
Fichero local <A HREF="indice.htm/">Fichero</A>
C|
<A HREF="indice.htm" TARGET="Ventana-2"> </A>
<A HREF="indice.htm" TARGET="_parent"> </A>
FRAMES
Los frames se declaran con la etiqueta <FRAMESET>, que debe ser colocada antes de
la etiqueta <BODY>. Si no se cumple este requisito, la etiqueta se ignorará.
Ej. 10027
<HTML>
<HEAD><TITLE> Título de la página </TITLE></HEAD>
<FRAMESET ROWS=75,*>
<FRAME SRC="frames1.htm" >
<FRAME SRC="frames2.htm" >
</FRAMESET>
<NOFRAMES>
<BODY>
Lo siento,su navegador no soporta frames.
Pulse <a href="frames1.htm>aquí </A>
para acceder a los contenidos de estas páginas.
</BODY>
</NOFRAMES>

</HTML>

FORMULARIOS
Las formas (<form>) son los elementos que se utilizan en HTML para agrupar objetos
o elementos que se van a enviar a otro programa para realizar ciertas acciones; a
continuación se muestra la sintaxis correspondiente:
<form action=”adondequieroir.php” method=”get” name=”minombre”>
...
...
</form>

En el ejemplo anterior se muestran las principales propiedades de la forma los


cuales son los siguientes:
action en esta propiedad indicamos a donde queremos que se envíen los datos al
momento de dar click en algún botón.
Method aquí indicamos el tipo de método del envío que se va a realizar, es decir si
queremos que se muestren los datos enviados en la barra del url o no.
Si deseamos que sean visibles, se utiliza el método GET. Si NO queremos que sena
visibles, utilizamos el método POST
name esta propiedad se utiliza para asignar un nombre a una forma, esto es para
poder tenerlas identificadas ya que es muy probable que en una misma página web, se
puedan tener más de 2 formas.
Ej. 10028
<form action="accion.php" method="post">
nombre<input type="text" name="txtnombre"><br>
<br>
<input type="submit" name="cmdboton" value="Entrar">
<br>
<input type="hidden" name="txthidden" value="oculto">
<br>
<textarea name="txtarea" rows="0" cols="0">Aqui van los datos</textarea>
<br>
<input type="radio" name="cmdradio" value="valor1">
<br>
<input type="checkbox" name="cmdcheck" value="valor2">
<br>
<select name="selectcmd" size="0">
<option value="1" label="MEXICO"></option>
<option value="2" label="ESPAÑA"></option>
<option value="3" label="CANADA"></option>
</select>
<br>
<button name="cmdbuton" value="boton" type="reset"></button>
<br>
<button name="cmdbuton1" value="boton 2" type="button"></button>
</form>

Cuadros de texto
Estos elementos se utilizan para permitir al usuario la captura de información; se
tienen 3 diferentes tipos de elementos los cuales se diferencian solamente por
algunas propiedades. A continuación se muestra la sintaxis de cada uno de ellos:
<input type=”text” name=”nombredato” value=”valorinicial” size=”4” maxlenght=”20”>

La propiedad type indica en tipo de objeto que vamos a utilizar, la propiedad name
indica el nombre que se va a asignar al valor que se teclee en este campo, la
propiedad value nos indica el valor que se asignará por defecto (si no queremos que
tenga un valor en especial se indica de la siguiente forma value=””), con la
propiedad size le indicamos el tamaño del elemento, si colocamos size=”4” le
estamos indicando que en el elemento son visibles 4 caracteres que se escriban; la
propiedad maxlenght permite limitar el tamaño máximo de caracteres a escribir.
TextArea
Este elemento se utiliza para la captura de información que sabemos que va a ser
demasiada; permite especificar el número de renglones y columnas que queremos que
utilice el mismo
<textarea name=”nombre” rows=”10” cols=”25”>valor</textarea>

La propiedad name nos indica el nombre de elemento en el cual se va a capturar la


información; la propiedad rows nos permite indicar el número de renglones que va a
tener el elemento y la propiedad cols nos sirve para especificar el número de
columnas(caracteres) que utilizará.
Password
Este elemento es similar al objeto TEXT, con la diferencia de que lo que uno
escribe en el, no es legible, sino que aparecen . A continuación se muestra su
sintaxis:
<input type=”password” value=”” size=”10”>

Objetos Ocultos (hidden)


Estos elementos permiten el pasar de una página a otra un valor, sin que el usuario
se de cuenta que existe, es decir va oculto de la vista.
La sintaxis es la siguiente:
<input type=”hidden” name=”nombre” value=”valorapasar”>

File
Estos elementos permiten al usuario el seleccionar un archivo de su computadora y a
través de ciertos mecanismos, enviarlo por email, o subirlo como adjunto a una base
de datos.

La sintaxis es la siguiente:
<input type=”file” name=”archivo” value=””>

}
Radiobuttons
Este elemento permite seleccionar UNA sola opción de una serie presentada. A
continuación se presenta la sintaxis de la misma:
<input type=”radio” name=”nombre” value=”1” checked>Si
<input type=”radio” name=”nombre” value=”2”>No

En el ejemplo anterior identificamos que como el resto de los ejemplos anteriores


los objetos tienen un nombre asociado, así como las siguientes propiedades:
type en la cual indicamos que el tipo de objeto es radio value en el cual indicamos
el valor que va a tomar el objeto en caso de que se seleccione un u otra opción La
propiedad ckecked se coloca en caso de que deseemos que una opción este
seleccionada al momento en abrir una página web.
Listas (Combos)
Las listas de selección permiten el seleccionar una o más opciones de las
presentadas al usuario.
La sintaxis es la siguiente:
<select name=”pais” size=”1” multiple>
<option value=”1” selected>M&eacute;xico
<option value=”2”>Espa&ntilde;a
<option value=”3”>Cuba
</select>

En este caso, la palabra reservada SELECT nos indica que el objeto va a ser una
lista de selección, de igual forma, contiene La propiedad NAME para especificar el
nombre que se asignará al valor(es) seleccionado(s). La propiedad size se utiliza
para especificar el número de opciones que serán visibles para el usuario y en este
ejemplo veremos la opción MULTIPLE, la cual nos indica que el usuario puede
seleccionar más de una opción, en caso de que queramos que solamente se elija una,
se omite esta propiedad.
Después de especificar las propiedades anteriores, tenemos que asignar los valores
que contendrá nuestra lista, lo cual se realiza con la sintaxis
<option value=”3”>Cuba

la propiedad value nos indica el valor que tomará esa opción al momento de
seleccionarla y en el ejemplo mostrado, después de cerrar el etiqueta <option...>
se muestra la palabra CUBA, la cual es la etiqueta que visualizará el usuario y si
es su elección, la seleccionará. Es decir la propiedad value cuyo valor es 3 es la
que tomará el objeto SELECT al momento de seleccionar la etiqueta Cuba.
En caso de no cerrar el etiqueta <select> con la etiqueta </select> es probable que
el despliegue en nuestro navegador web no sea el adecuado.
Checkbox
Al igual que las listas de selección, los checkbox permiten seleccionar una o más
opciones de las presentadas, o en su defecto, ninguna.
La sintaxis es la siguiente:
<input type=”checkbox” value=”1” checked>Etiqueta1

<input type=”checkbox” value=”2”> Etiqueta2


Las propiedades son muy similares a los radiobuttons exceptuando el tipo de
elemento.
Botones de acción Los elementos descritos anteriormente se utilizan para solicitar
a nuestros usuarios cierta información, una vez obtenida la misma, es necesario
ejecutar cierta acción para enviarlos al programa que va a procesarlos, dicha
acción se puede realizar con los objetos typo “SUBMIT Y BUTTON”, los cuales
describiremos a continuación
Submit
El objeto tipo submit se utiliza para que al momento de dar click sobre el,
automáticamente envíe los datos de la forma (<form>) en la cual se encuentra
contenida, a continuación presentaremos la sintaxis del mismo:
<input type=”submit” value=”Almacenar” name=”enviar”>

la propiedad type como ya lo hemos mencionado, nos define el tipo de objeto a


definir, en este caso es tipo submit. La propiedad value nos permite colocar la
etiqueta que el usuario visualizará en el botón que se genera con este código. La
propiedad name se utiliza para asignar un nombre al botón.
Como mencionamos anteriormente el objeto tipo submit debe de estar dentro de una
forma como se muestra a continuación:
<form action=”dos.php”>
<input type=”submit” value=”Almacenar” name=”enviar”>
</form>

Button
Este objeto tiene las mismas propiedades que el anterior (submit) con la diferencia
de que se tiene que utilizar javascript para que realice cierta acción, en pocas
palabras es un botón virgen, el cual se genera con la siguiente sintaxis:
<input type=”button” value=”Almacenar” name=”enviar” OnClick=”accion;”>

La única diferencia con el objeto submit es que tenemos que especificarle QUE
acción realizar en caso de que se de click en el mismo, esto se comprenderá más
adelante cuando entremos a javascript.
Reset
Finalmente se explicará el objeto tipo reset, el cual no es más que un botón, que
al momento de presionarlo, inicializa los valores de los objetos tal y como estaban
al momento de cargar la página web, su sintaxis es la siguiente:
<input type=”reset” value=”Limpiar” name=”limpia”>

IMAGENES
En muchas aplicaciones es necesario utilizar imágenes para armar menú de
navegación, o simplemente como elemento que pertenece al diseño gráfico; para esto
se utiliza la siguiente sentencia de HTML:
<img src=”nombedeimagen” border=”ancho del borde de la imagen” width=”ancho” height=”alto”>

un ejemplo de esta sentencia es el siguiente:


<img src=”imagen1.jpg” >
CSS

¿QUÉ ES CSS?
Hojas de Estilo en Cascada (Cascading Style Sheets), es un mecanismo simple que
describe cómo se va a mostrar un documento en la pantalla, o cómo se va a imprimir,
o incluso cómo va a ser pronunciada la información presente en ese documento a
través de un dispositivo de lectura. Esta forma de descripción de estilos ofrece a
los desarrolladores el control total sobre estilo y formato de sus documentos.
CSS funciona a base de reglas, es decir, declaraciones sobre el estilo de uno o más
elementos. Las hojas de estilo están compuestas por una o más de esas reglas
aplicadas a un documento HTML o XML. La regla tiene dos partes: un selector y la
declaración. A su vez la declaración está compuesta por una propiedad y el valor
que se le asigne.

VINCULO A UNA HOJA DE ESTILO


h1 {color: red;} h1 es el selector {color: red;} es la declaración Ej. 20001
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN">
<html>
<head>
<title>Titulo</title>
<link rel="stylesheet" type="text/css" href="estilo.css"/>
</head>
<body>
</body>
</html>

Utilizando el elemento <style>, en el interior del documento al que se le quiere


dar estilo, y que generalmente se situaría en la sección <head>. De esta forma los
estilos serán reconocidos antes de que la página se cargue por completo.

ESTRUCTURA PRINCIPAL Y COMENTARIOS


Ej. 20002
<html>
<head>
<title>hoja de estilo interna</title>
<style type="text/css">

body {
padding-left: 11em;
font-family: Georgia, "Times New Roman", serif;
color: red;
background-color: #d8da3d;
}
h1 {
font-family: Helvetica, Geneva, Arial, sans-serif;
}
/*Este es un comentario*/
</style>
</head>
<body>
Esta es una cadena
<h1>Aquí se aplicará el estilo de letra para el Título</h1>
Nuevamente otra cadena
</body>
</html>

Utilizando estilos directamente sobre aquellos elementos que lo permiten a través


del atributo <style> dentro de <body>. Pero este tipo de definición del estilo
pierde las ventajas que ofrecen las hojas de estilo al mezclarse el contenido con
la presentación.
Algunas normas básicas a la hora de crear una CSS son las siguientes: En el
siguiente ejemplo, h1{color: red;}, el selector, <h1>, le dice al navegador la
parte del documento que se verá afectada por esa regla. Los selectores pueden
aparecer individualmente o agrupados, separándolos con comas:

MODELO DE CSS
h1, h2, h3 {
color: red;
}

o lo que es lo mismo
h1 {color: red;}
h2 {color: red;}
h3 {color: red;}

La propiedad, que en este caso sería color, especifica qué aspecto se va a cambiar.
En este ejemplo la propiedad cambiada será el color. Las propiedades que se desean
modificar en una CSS para un mismo selector pueden agruparse, pero será necesario
separar cada una de ellas con un punto y coma. p {text-align:center;color:red}
Normalmente se describe una propiedad por línea, de la siguiente manera:
h1 {
padding-left: 11em;
font-family: Georgia, "Times New Roman",Times, serif;
color: red;
background-color: #d8da3d;
}

El valor, representado a la derecha de los dos puntos (:), establece el valor de la


propiedad. Es importante recordar que si el valor está formado por más de una
palabra, hay que ponerlo entre comillas.
p {font-family: "sans serif";}

SELECTORES
Selector Descripción
* Selector niversal, son todos los elementos del CSS
E E representa cualquier elemento del tipo E (span, p, …)
E F Todos los elementos F que sean descendentes de E
E > F Todos los elementos F que sean hijos de E
E:first-child De esta forma podemos seleccionar el primer elemento de tipo E
E:link , Selecciona los elementos E que sean un enlaces y no hayan sido
E:visited visitados (:link) y los si visitandos (:visited)
E:active ,
Selecciona los elementos de tipo E , en sus correspondientes
E:hover ,
acciones.
E:focus
Cogemos los elementos del tipo E que estén en el idioma (humano)
E:lang(c)
especificado en (c).
Se trata de cualquier elemento F inmediatamente despues del
E + F
elemento del tipo E
E[foo] Elementos del tipo E con el atributo foo
E[foo="ejemplo"] Elementos del tipo E con el atributo foo igual a “ejemplo”
Elementos del tipo E con el atributo foo contenga “ejemplo”. Se
E[foo~="ejemplo"
pueden añadir varias palabras separadas por espacios. ( =ALT +
]
0126)
Similar al anterior, pero se referirá a todos los elemento E tal
E[lang="es"] que su atributo lang comienze por “es”. Por ejemplo: “es_ES”,
“es_CA”,…
E[foo$="ejemplo" Elementos del tipo E en el que el atributo foo termine con
] “ejemplo”.
DIV.ejemplo Todos los elementos DIV que sean de la clase ejemplo
E#miID El elemento E en el que su ID sea igual miID

ALCANCE DE LOS ESTILOS


Ejemplo de un estilo que afecta a la etiqueta P que se encuentra dentro de la
etiuete UL
Ej. 20003
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[http://www.w3.org/TR/] xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Codigo Java</title>
</head>
<body>
<style type="text/css">
UL P{
color: #0000FF; font-variant: small-caps
}
</style>
<DIV>
<UL>
<LI><P>Este es un texto</P>
<LI>Este es otro texto</LI>
</UL>
<P>Otro mensaje</P>
</DIV>
</body>
</html>

EL MODELO DE CAJA
Ej. 20004
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[http://www.w3.org/TR/] xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Codigo Java</title>
</head>
<body>
<style type="text/css">
p {
padding: 4px;
margin: 8px;
background-color: #DDDDDD;
}
p.cajita {
border-left: solid 2px black;
border-bottom: solid 2px black;
border-right: dashed 2px black;
border-top: dashed 2px black;
background-color: #DDaa54;
}

p.ele{
border-top: solid thin white;
border-left: solid thin white;
}

DIV{
background-color: #AAAAAA;
padding:10px;
}
</style>
<DIV>
<P class="cajita">Este es un texto del primer parrafo</P>
<P class="ele">Este es un texto del segundo parrafo</P>
<P>Este es un texto del tercer parrafo</P>
</DIV>
</body>
</html>

CAJAS FLOTANTES
Ej. 20005
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[http://www.w3.org/TR/] xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Codigo Java</title>
</head>
<body>
<style type="text/css">
p {
padding: 4px;
margin: 8px;
background-color: #DDDDDD;
}
p.cajita {
border-left: solid 2px black;
border-bottom: solid 2px black;
border-right: dashed 2px black;
border-top: dashed 2px black;
background-color: #DDaa54;
}

p.ele{
border-top: solid thin white;
border-left: solid thin white;
}

.capa1{
background-color: #AAAAAA;
padding:10px;
position:absolute;
left:192px;
top:114px;
width:334px;
height:226px;
z-index:1;

}
.capa2{
background-color: #CC3211;
padding:10px;
position:absolute;
left:280px;
top:190px;
width:334px;
height:226px;
z-index:2;

}
</style>
<DIV class="capa1">
<P class="cajita">Este es un texto del primer parrafo</P>
<P class="ele">Este es un texto del segundo parrafo</P>
<P>Este es un texto del tercer parrafo</P>
</DIV>
<DIV class="capa2">
<P>Otros datos de la capa dos</P>
</DIV>
</body>
</html>

VISIBILIDAD DE CAPAS
Se puede interactuar entre javascript y css
Ej. 20006
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[http://www.w3.org/TR/] xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Codigo Java</title>
</head>
<body>
<style type="text/css">
#capa1{
background-color: #AAAAAA;
padding:1em;
position:absolute;
left:50px;
top:100px;
visibility:hidden;
font:bold 14pt Verdana;
color: red;
width:334px;
height:226px;
border:solid 1px black;

}
#capatexto{
position:absolute;
left:10px;
top:10px;
font:bold 14pt Verdana;
visibility:show;
}
</style>
<script languaje="javascript1.2">
function muestraCapa(n){
eval("document.all.capa"+n+".style.visibility='visible'");

}
function ocultarcapa(n){
eval("document.all.capa"+n+".style.visibility='hidden'");
}
</script>
<DIV id="capatexto">
<a href="#" onMouseOver="muestraCapa(1);" onMouseOut="ocultarcapa(1);">_Haz click en este
vinculo</a>
</DIV>
<DIV id="capa1">
Este es el texto que queria mostrar
</DIV>
</body>
</html>

JavaScript
JavaScript es un lenguaje de programación que se utiliza principalmente para crear
páginas web dinámicas. Una página web dinámica es aquella que incorpora efectos
como texto que aparece y desaparece, animaciones, acciones que se activan al pulsar
botones y ventanas con mensajes de aviso al usuario. Técnicamente, JavaScript es un
lenguaje de programación interpretado, por lo que no es necesario compilar los
programas para ejecutarlos. En otras palabras, los programas escritos con
JavaScript se pueden probar directamente en cualquier navegador sin necesidad de
procesos intermedios.

EL PRIMER SCRIPT
Ej. 30001
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Ejemplo de código JavaScript en el propio documento</title>
<script type="text/javascript">
alert("Como novedad un Hola Mundo");
</script>
</head>
<body>
<p>Un párrafo de texto.</p>
<script type="text/javascript">
alert("Este es otro mensaje");
</script>
<p>Y esto salio despues</p>
</body>
</html>

PROGRAMACIÓN BÁSICA
Variables, comentarios y escritura de datos Las variables como en otros lenguajes
se declaran
Ej. 30002
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Codigo Java</title>
</head>
<body>
<script type="text/javascript" lanjuage="javascript1.2">
/*Este es un comentario*/
document.write("Imprecion de variablesr<br>");
var variable1 = 5;
document.write("el valor de la variable es: "+variable1+"<br>");
</script>
</body>
</html>

Tipos de variables
Aunque todas las variables de JavaScript se crean de la misma forma (mediante la
palabra reservada var), la forma en la que se les asigna un valor depende del tipo
de valor que se quiere almacenar (números, textos, etc.)
Ej. 30003
<script type="text/javascript" lanjuage="javascript1.2">
/*Este es un comentario*/
var variable1 = 5;
var variable2 = 60.5;
var cadena = "el valor de la \'variable\' es ";
document.write(cadena+variable1+" " +variable2+"<br>");
</script>

OPERADORES
aritméticos

Operador Uso Descripción


+ op1 + op2 Suma op1 y op2
- op1 - op2 Resta op2 de op1
* op1 * op2 Multiplica op1 por op2
/ op1 / op2 Divide op1 por op2
Calcula el resto de dividir op1
% op1 % op2
entre op2
Decremento e incremento

Operador Uso Descripción


Incrementa op en 1; se evalúa al valor anterior al
++ op++
incremento
Incrementa op en 1; se evalúa al valor posterior
++ ++op
al incremento
Decrementa op en 1; se evalúa al valor anterior al
-- op--
incremento
Decrementa op en 1; se evalúa al valor posterior
-- --op
al incremento
Operadores de comparación y condicionales
Operador Uso Devuelve verdadero si
> op1 > op2 op1 es mayor que op2
op1 >= op1 es mayor o igual que
>=
op2 op2
< op1 < op2 op1 es menor que op2
op1 <= op1 es menor o igual que
<=
op2 op2
op1 ==
op1 y op2 son iguales
op2
op1 !=
!= op1 y op2 son distintos
op2
Operadores condicionales

Operador Uso Devuelve verdadero si...


&& op1 && op1 y op2 son ambos verdaderos,
op2 condicionalmente evalúa op2
op1 y op2 son ambos verdaderos,
& op1 & op2
siempre evalúa op1 y op2
op1 || op1 o op2 son verdaderos,
||
op2 condicionalmente evalúa op2
op1 o op2 son verdaderos, siempre
| op1 | op2
evalúa op1 y op2
Operadores de
! ! op op es falso
desplazamiento de bits
Operador Uso Operación
Desplaza los bits
>> op1 >> op2 de op1 a la
derecha op2 veces
Fallo en la inserción del Plugin: No se
Desplaza los bits de
pudo encontrar el plugin op1Fallo en la
op1 a la derecha op2
inserción del Plugin: No se pudo encontrar
veces (sin signo)
el plugin op1> op2
Operadores de lógica de bits

Operador Uso Operación


& op1 & op2 AND
| op1 | op2 OR
^ op1 ^ op2 OR Exclusivo
|~op2 Complemento
Operadores de asignación

Operador Uso Equivalente a


+= op1 += op2 op1 = op1 + op2
-= op1 -= op2 op1 = op1 - op2
*= op1 *= op2 op1 = op1 * op2
/= op1 /= op2 op1 = op1 / op2
%= op1 %= op2 op1 = op1 % op2
&= op1 &= op2 op1 = op1 & op2

ESTRUCTURAS DE CONTROL DE FLUJO


For
IF
while
do while
switch

FUNCIONES Y PROPIEDADES BÁSICAS DE JAVASCRIPT

Funciones útiles para cadenas de texto


length
calcula la longitud de una cadena de texto (el número de caracteres que la forman)
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var mensaje = "Hola Mundo";
var numeroLetras = mensaje.length;
document.write(numeroLetras);
</script>

+ se emplea para concatenar varias cadenas de texto


Ej. 30001
<script type="text/javascript" lanjuage="javascript1.2">
var mensaje1 = "Hola";
var mensaje2 = " Mundo";
var mensaje = mensaje1 + mensaje2; // mensaje = "Hola Mundo"
document.write(mensaje);
</script>

concat() Sirve para concatenar cadenas


Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var mensaje1 = "Hola";
var mensaje2 = mensaje1.concat(" Mundo");
document.write(mensaje2);
</script>

toUpperCase() Transforma todos los caracteres de la cadena a sus correspondientes


caracteres en mayúsculas:
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var mensaje1 = "Hola";
var mensaje2 = mensaje1.toUpperCase(); // mensaje2 = "HOLA"
document.write(mensaje2);
</script>

toLowerCase() transforma todos los caracteres de la cadena a sus correspondientes


caracteres en minúsculas:
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var mensaje1 = "HolA";
var mensaje2 = mensaje1.toLowerCase(); // mensaje2 = "hola"
document.write(mensaje2);
</script>

charAt(posicion) Obtiene el carácter que se encuentra en la posición indicada:


Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var mensaje = "Hola";
var letra = mensaje.charAt(0); // letra = H
document.write(letra+'<br>');
letra = mensaje.charAt(2); // letra = l
document.write(letra);
</script>

substring(inicio, final) Extrae una porción de una cadena de texto. El segundo


parámetro es opcional. Si sólo se indica el parámetro inicio, la función devuelve
la parte de la cadena original correspondiente desde esa posición hasta el final:
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var mensaje = "Hola Mundo";
var porcion = mensaje.substring(2); // porcion = "la Mundo"
porcion = mensaje.substring(5); // porcion = "Mundo"
document.write(porcion.'<br>');
porcion = mensaje.substring(7); // porcion = "ndo"
document.write(porcion);
</script>

Funciones útiles para arrays


join(separador) Es la función contraria a split(). Une todos los elementos de un
array para formar una cadena de texto. Para unir los elementos se utiliza el
carácter separador indicado
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var array = ["hola", "mundo"];
var mensaje = array.join(""); // mensaje = "holamundo"
document.write(mensaje);
mensaje = array.join(" "); // mensaje = "hola mundo"
document.write(mensaje);
</script>

pop() Elimina el último elemento del array y lo devuelve. El array original se


modifica y su longitud disminuye en 1 elemento.
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var array = [1, 2, 3];
var ultimo = array.pop();
// ahora array = [1, 2], ultimo = 3
document.write(ultimo);
</script>

push() Añade un elemento al final del array. El array original se modifica y


aumenta su longitud en 1 elemento. (También es posible añadir más de un elemento a
la vez)
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var array = [1, 2, 3];
array.push(4);
// ahora array = [1, 2, 3, 4]
document.write(array[3]);
</script>

shift() Elimina el primer elemento del array y lo devuelve. El array original se ve


modificado y su longitud disminuida en 1 elemento.
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var array = [1, 2, 3];
var primero = array.shift();
// ahora array = [2, 3], primero = 1
document.write(primero);
</script>

unshift() Añade un elemento al principio del array. El array original se modifica y


aumenta su longitud en 1 elemento. (También es posible añadir más de un elemento a
la vez)
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var array = [1, 2, 3];
array.unshift(10);
// ahora array = [0, 1, 2, 3]
document.write(array[0]);
</script>

reverse() Modifica un array colocando sus elementos en el orden inverso a su


posición original:
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var array = [1, 2, 3];
array.reverse();
// ahora array = [3, 2, 1]
document.write(array[0]);
</script>

Funciones útiles para números


isNaN() Permite proteger a la aplicación de posibles valores numéricos no definidos
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var numero1 = 0;
var numero2 = 0;
if(isNaN(numero1/numero2)) {
alert("La división no está definida para los números indicados");
}
else {
alert("La división es igual a => " + numero1/numero2);
}
</script>

toFixed(digitos) Devuelve el número original con tantos decimales como los


indicados por el parámetro digitos y realiza los redondeos necesarios. Se trata de
una función muy útil por ejemplo para mostrar precios.
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
var numero1 = 4564.34567;
numero1.toFixed(2); // 4564.35
document.write(numero1.'<BR>');
numero1.toFixed(6); // 4564.345670
document.write(numero1.'<BR>');
numero1.toFixed(); // 4564
document.write(numero1.'<BR>');
</script>

FUNCIONES
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
function creaMensaje() {
var mensaje = “Mensaje de prueba”;
}
creaMensaje();
alert(mensaje);
</script>
DOM
Ej. 3000
<script type="text/javascript" lanjuage="javascript1.2">
// Crear nodo de tipo Element
var parrafo = document.createElement("p");
// Crear nodo de tipo Text
var contenido = document.createTextNode("Hola Mundo!");
// Añadir el nodo Text como hijo del nodo Element
parrafo.appendChild(contenido);
// Añadir el nodo Element como hijo de la pagina
document.body.appendChild(parrafo);
</script>

EVENTOS
Ej. 3000
<div onclick="alert('Has pinchado con el ratón');">
Puedes pinchar sobre este elemento o simplemente pasar el ratón por encima
</div>

<div id="contenidos" style="width:150px; height:60px; border:thin solid silver"


onmouseover="this.style.borderColor='black';"
onmouseout="this.style.borderColor='silver';">
Sección de contenidos...
</div>

FORMULARIOS
Utilidades básicas para formularios
Ej. 3000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[http://www.w3.org/TR/] xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Codigo Java</title>
</head>
<body>
<p>hola</p>
<form name="formulario" id="formulario" >
<input type="text" name="elemento" id="elemento" />
<hr>
<input type="radio" value="si" name="pregunta" id="pregunta_si"/> SI
<input type="radio" value="no" name="pregunta" id="pregunta_no"/> NO
<input type="radio" value="nsnc" name="pregunta" id="pregunta_nsnc"/> NS/NC
<input name="cmden" value="Validar" type="submit" onClick="valida()">
<hr>
<input type="checkbox" value="condiciones" name="condiciones" id="condiciones"/> He
leído y acepto las condiciones
<input type="checkbox" value="privacidad" name="privacidad" id="privacidad"/> He leído
la política de privacidad
<input name="cmden" value="Validar 1" type="submit" onClick="valida1()">
<hr>
<select id="opciones" name="opciones">
<option value="1">Primer valor</option>
<option value="2">Segundo valor</option>
<option value="3">Tercer valor</option>
<option value="4">Cuarto valor</option>
</select>
<input name="cmden" value="Validar 1" type="submit" onClick="valida2()">
</form>

<form id="formulariox" action="#">


<input type="text" id="primero" />
</form>
<script type="text/javascript" lanjuage="javascript1.2">
var formularioPrincipal = document.getElementById("formulario");
document.getElementById("elemento").value = "mensaje";
function valida(){
var elementos = document.getElementsByName("pregunta");
for(var i=0; i<elementos.length; i++) {
alert(" Elemento: " + elementos[i].value + "\n Seleccionado: " +
elementos[i].checked);
}
}
function valida1(){
var elemento = document.getElementById("condiciones");
alert(" Elemento: " + elemento.value + "\n Seleccionado: " + elemento.checked);
elemento = document.getElementById("privacidad");
alert(" Elemento: " + elemento.value + "\n Seleccionado: " + elemento.checked);
}
function valida2(){
// Obtener la referencia a la lista
var lista = document.getElementById("opciones");
// Obtener el índice de la opción que se ha seleccionado
var indiceSeleccionado = lista.selectedIndex;
// Con el índice y el array "options", obtener la opción seleccionada
var opcionSeleccionada = lista.options[indiceSeleccionado];
// Obtener el valor y el texto de la opción seleccionada
var textoSeleccionado = opcionSeleccionada.text;
var valorSeleccionado = opcionSeleccionada.value;
alert("Opción seleccionada: " + textoSeleccionado + "\n Valor de la opción: " +
valorSeleccionado);
}
document.getElementById("primero").focus();
</script>
</body>
</html>
Validación
Ej. 3000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[http://www.w3.org/TR/] xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Codigo Java</title>
</head>
<body>
<form name="formulario" id="formulario" >
// Sólo números
<input type="text" id="texto" onkeypress="return permite(event, 'num')" />
// Sólo letras
<input type="text" id="texto" onkeypress="return permite(event, 'car')" />
// Sólo letras o números
<input type="text" id="texto" onkeypress="return permite(event, 'num_car')" />
</form>
<script type="text/javascript" lanjuage="javascript1.2">
function permite(elEvento, permitidos) {
// Variables que definen los caracteres permitidos
var numeros = "0123456789";
var caracteres = " abcdefghijklmnñopqrstuvwxyzABCDEFGHIJKLMNÑOPQRSTUVWXYZ";
var numeros_caracteres = numeros + caracteres;
var teclas_especiales = [8, 37, 39, 46];
// 8 = BackSpace, 46 = Supr, 37 = flecha izquierda, 39 = flecha derecha
// Seleccionar los caracteres a partir del parámetro de la función
switch(permitidos) {
case 'num':
permitidos = numeros;
break;
case 'car':
permitidos = caracteres;
break;
case 'num_car':
permitidos = numeros_caracteres;
break;
}
// Obtener la tecla pulsada
var evento = elEvento || window.event;
var codigoCaracter = evento.charCode || evento.keyCode;
var caracter = String.fromCharCode(codigoCaracter);
// Comprobar si la tecla pulsada es alguna de las teclas especiales
// (teclas de borrado y flechas horizontales)
var tecla_especial = false;
for(var i in teclas_especiales) {
if(codigoCaracter == teclas_especiales[i]) {
tecla_especial = true;
break;
}
}
// Comprobar si la tecla pulsada se encuentra en los caracteres permitidos
// o si es una tecla especial
return permitidos.indexOf(caracter) != -1 || tecla_especial;
}
</script>
</body>
</html>

Requerir informacion
Ej. 3000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[http://www.w3.org/TR/] xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Codigo Java</title>
</head>
<body>
<form action="" method="" id="f1" name="f1" onsubmit="return validacion()">
//Si no se captura datos no permite pasar
<input type="text" id="campo" onkeypress="return permite(event, 'num')" />
// Sólo letras
<input type="text" id="texto" onkeypress="return permite(event, 'car')" />
<input type="submit" name="cmdenvia" value="Mandar">
</form>
<script type="text/javascript" lanjuage="javascript1.2">
function validacion() {
valor = document.getElementById("campo").value;
if( valor == null || valor.length == 0 || /^\s+$/.test(valor) ) {
alert ("Es necesario capturar datos");
document.getElementById("campo").focus();
return false;
}
}
</script>
</body>
</html>

Validando cuadros de texto con informacion y sin ella


Ej. 3000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[http://www.w3.org/TR/] xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Codigo Java</title>
</head>
<body>
<form action="" method="" id="f1" name="f1" onsubmit="return validacion()">
//Si no se captura datos no permite pasar
<input type="text" id="campo" onkeypress="return permite(event, 'num')" />
// El campo tiene que estar vacio
<input type="text" id="texto" onkeypress="return permite(event, 'car')" />
<input type="submit" name="cmdenvia" value="Mandar">

<select id="opciones" name="opciones">


<option value="">- Selecciona un valor -</option>
<option value="1">Primer valor</option>
<option value="2">Segundo valor</option>
<option value="3">Tercer valor</option>
</select>
</form>
<script type="text/javascript" lanjuage="javascript1.2">
function validacion() {
valor = document.getElementById("campo").value;
if( valor == null || valor.length == 0 || /^\s+$/.test(valor) ) {
alert ("Es necesario capturar datos");
document.getElementById("campo").focus();
return false;
}
valor = document.getElementById("texto").value;
if( isNaN(valor) ) {
alert ("Este campo tiene que estar vacio");
document.getElementById("texto").value= "";
return false;
}

indice = document.getElementById("opciones").selectedIndex;
if( indice == null || indice == 0 ) {
return false;
}
}
</script>
</body>
</html>

Validar correo electronico


Ej. 3000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[http://www.w3.org/TR/] xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Codigo Java</title>
</head>
<body>
<form action="" method="" id="f1" name="f1" onsubmit="return validacion()">
//Valida cotrreo electronico
<input type="text" id="campo" onkeypress="return permite(event, 'num')" />
<input type="submit" name="cmdvalida" value="Mandar">
</form>
<script type="text/javascript" lanjuage="javascript1.2">
function validacion() {
valor = document.getElementById("campo").value;
if( !(/\w{1,}[@][\w\-]{1,}([.]([\w\-]{1,})){1,3}$/.test(valor)) ) {
alert ("Es necesario un correo valido");
document.getElementById("campo").value = "";
document.getElementById("campo").focus();
return false;
}
}
</script>
</body>
</html>

OTRAS UTILIDADES

Relojes, contadores e intervalos de tiempo


Ej. 3000
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"[http://www.w3.org/TR/] xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="[http://www.w3.org/1999/xhtml">]
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Codigo Java</title>
</head>
<body>
<div id="reloj" />
<script type="text/javascript" lanjuage="javascript1.2">
function muestraReloj() {
var fechaHora = new Date();
var horas = fechaHora.getHours();
var minutos = fechaHora.getMinutes();
var segundos = fechaHora.getSeconds();
if(horas < 10) { horas = '0' + horas; }
if(minutos < 10) { minutos = '0' + minutos; }
if(segundos < 10) { segundos = '0' + segundos; }
document.getElementById("reloj").innerHTML = horas+':'+minutos+':'+segundos;
setTimeout(muestraReloj, 1000);
}
setTimeout(muestraReloj, 1000);
</script>
</body>
</html>
Calendario
[http://www.dynarch.com/] projects/calendar/
[http://sourceforge.net/] projects/jscalendar/

Tooltip
[http://www.bosrup.com/web/overlib/?Download

PHP (Hypertext Preprocessor)

INTRODUCCION

¿QUE ES PHP?
PHP (acronimo: Hypertext Preprocessor) es un lenguaje interpretado de alto nivel
embebido en páginas HTML y ejecutado en el servidor. Una respuesta corta y concisa,
pero que significa realmente? Un ejemplo nos aclarará las cosas: Ejemplo 1-1. Un
ejemplo introductorio
Ej. 40001
<html>
<head>
<title>Ejemplo 40001</title>
</head>
<body>
<?php echo "Hola Mundo Que novedad no..."; ?>
</body>
</html>

HISTORIA
PHP fue originalmente diseñado en Perl, seguidos por la escritura de un grupo de
CGI binarios escritos en el lenguaje C por el programador danés-canadiense Rasmus
Lerdorf en el año 1994 para mostrar su currículum vitae y guardar ciertos datos,
como la cantidad de tráfico que su página web recibía. El 8 de junio de 1995 fue
publicado "Personal Home Page Tools" después de que Lerdorf lo combinara con su
propio Form Interpreter para crear PHP/FI. Php 3 Dos programadores israelíes del
Technion, Zeev Suraski y Andi Gutmans, reescribieron el analizador sintáctico
(parser en inglés) en el año 1997 y crearon la base del PHP3, cambiando el nombre
del lenguaje a la forma actual. Inmediatamente comenzaron experimentaciones
públicas de PHP3 y fue publicado oficialmente en junio del 1998. Para 1999, Suraski
y Gutmans reescribieron el código de PHP, produciendo lo que hoy se conoce como
Zend Engine o motor Zend, un portmanteau de los nombres de ambos, Zeev y Andi.
También fundaron Zend Technologies en Ramat Gan, Israel.

PHP 4
En mayo de 2000 PHP 4 fue lanzado bajo el poder del motor Zend Engine 1.0. El día
13 de julio de 2007 se anunció la suspensión del soporte y desarrollo de la versión
4 de PHP,[1] a pesar de lo anunciado se ha liberado una nueva versión con mejoras
de seguridad,la 4.4.8 publicada el 13 de Enero del 2008. Según esta noticia [1] se
dará soporte a fallos críticos hasta el 2008-08-08.

PHP 5
El 13 de julio de 2004, fue lanzado PHP 5, utilizando el motor Zend Engine II (o
Zend Engine 2). La versión más reciente de PHP es la 5.2.6 (1 de Mayo de 2008), que
incluye todas las ventajas que provee el nuevo Zend Engine 2 como: Esta por salir
la version 6

REFERENCIAS DEL LENGUAJE


Sintaxis basica
Ej. 40002
<?php
//Este mensaje se manda directo a la pagina Web
echo “Este es un mensaje de texto”;
?>

Ej. 40003
<?php
/*
Este tipo de documentacion
es de varias lineas
*/
phpinfo();
//phpinfo muestra las directivas y servicios instalados
//del servicio apache , mysql , php etc ...
?>

Mi primer script
Ej. 40004
<html>
<head>
<title>Ejemplo 40004</title>
</head>
<body>
<?php
echo "Mi primer mensaje envevido en html";
echo "Otro mensaje<BR>";
echo "Y uno ams";
?>
</body>
</html>

Tipos de Datos
Como en todos los lenguages tenemos tipos de datos
array números en punto flotante entero objeto cadena
Ej. 40005
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
$cad = 5;
echo gettype($cad).'<br>';
$cad = 5.8;
echo gettype($cad).'<br>';
$cad = "Cadena";
echo gettype($cad).'<br>';
$cad = True;
echo gettype($cad).'<br>';
?>
</BODY>
</html>

VARIABLES
Conceptos basicos
No hay mucho que hablar de las variables en PHP todo se reduce a lo siguiente: En
PHP las variables no se declaran solo se usan. PHP El servidor se encarga de
asignarle un determinado tipo.
Enteros $variable = 124; $variable = -124; $variable = 0124; $variable = 0x12;
Punto flotante $variable = 1.24; $variable = -1.24; $variable = 0124; $variable =
0x12;
Cadena $variable = 'Esta es una cadena';
Nota: Para conocer el tipo de datos se utiliza gettype($variable)
Array unidimensionales
$variable[0] = "Esta es una cadena"; $variable[1] = "Esta es una cadena";
$variable"A" = 13;
Objetos Las clases de objeto son creadas atrabes de las clase Ej.
Ej. 40006
<?php
class nueva_clase {
function funcion1 () {
echo "Mensaje";
}
}
$variable = new nueva_clase;
$nueva_clase->funcion1();
?>

Arrays Multidimensionales
Los arrays multidimensionales son bastante simples actualmente. Para cada dimensión
del array, se puede añadir otro valor
[clave] al final:
$variable[1] = $variable;
$variable["A"]= $variable;
$variable[1][0] = $variable;
$variable["A"][2] = $variable
$variable[3]["A"] = $variable;

En los ejemplos vistos anteriormente estamos utilizando arreglos de una sola


dimensión, a
Ej. 40006_A
<?php
$frutas = array( array("fruta"=>"manzana", "color"=>"rojo", "sabor"=>"dulce",
"forma"=>"redondeada"), array("fruta"=>"naranja", "color"=>"naranja", "sabor"=>"ácido",
"forma"=>"redondeada"), array("fruta"=>"plátano", "color"=>"amarillo", "sabor"=>"dulce",
"forma"=>"aplatanada"));
?>

En este caso estamos definiendo un arreglo cuyos elementos van a ser arreglos con
valores similares, si pudiésemos visualizar físicamente este arreglo tendría la
siguiente estructura:

índice Fruta Color


Sabor (2) Forma (3)
s (0) (1)
0 manzana rojo dulce redondeada
1 naranja naranja ácido redondeada
amarill dulceaplatana
2 plátano
o da
Si quisiéramos imprimir en pantalla el color de la fruta plátano
Ej. 40006_A
}
Este tipo de arreglos es algo similar al funcionamiento de la base de datos cuando
ejecutamos una consulta y nos regresa múltiples valores.
sort()
Esta función se utiliza para ordenar en forma ascendente los elementos de un
arreglo, tomando en cuenta su valor, no su índice.
Ej. 40006_B
<?php
$frutas=array("manzana", "naranja", "sandía");
sort($frutas);
for($i=0;$i<count($patos);$i++) {
print "$frutas[$i]<br>";
}
?>

Funciones para recorrer un arreglo


Siempre que se genere un arreglo dentro de un programa PHP, se genera un apuntador
el cual permite recorrer en su totalidad dicho elemento.
La función current() nos devuelve el valor en el cual se encuentra el apuntador, la
función next() avanza una posición el puntero, la función prev() regresa el puntero
una posición, la función end() se posiciona al final del arreglo.
Cuando lleguemos al final de nuestro arreglo la función next() nos regresará un
valor false.
Vamos a realizar un ejemplo utilizando estas funciones.
Ej. 40006_C
<?php
$estados=array("Aguascalientes", "BCN", "BCS", "DF");
do {
$valor=current($estados);
print "El valor es: $valor <br>";
}while (next($estados));
?>

En este caso se esta imprimiendo todo el arreglo mediante un ciclo y utilizando las
funciones current, y next.
Podemos colocar esta función con el objeto de analizar como se puede pasar un
arreglo como parámetro.
Ej. 40006_D
<?php
$estados=array("Aguascalientes", "BCN", "BCS","DF");
function avanza($estados) {
do {
$valor=current($estados);
print "El valor es: $valor <br>";
}while (next($estados));
}
avanza($estados);
?>

En el ejemplo anterior estamos imprimiendo dos veces el contenido del arreglo, no


existe forma de controlar el apuntador del arreglo ya que siempre que se pase el
arreglo como parámetro, iniciará a recorrerla desde el inicio, debido a que se esta
pasando el parámetro por valor, esto es genera una copia del mismo.
Si quisiéramos que dentro de la función afectara el apuntador del arreglo,
tendríamos que pasar el parámetro por referencia, lo cual se hace de la siguiente
forma:
recorre(&$estados);
recorre(&$estados);

de esta forma al ejecutar la primera vez la función recorre, el apuntador del


arreglo estados se mantendría al final del mismo, por lo que al volver ejecutar la
función,ya no se desplegaría ningún elemento.
En este último ejemplo ya no se esta pasando como parámetro una copia del arreglo
estados, sino el valor real, si deseáramos posicionar nuevamente el apuntador al
inicio del arreglo, utilizaríamos la función reset(), como se muestra a
continuación:
Ej. 40006_E
<?php
$estados=array("Aguascalientes", "BCN", "BCS","DF");
function avanza($estados) {
do {
if (!current($estados)) {
reset($estados);
}
$valor=current($estados);
print "El valor es: $valor <br>";
}while (next($estados));
}
avanza($estados);
?>

Si deseáramos recorrer el arreglo de atrás hacia a delante utilizaríamos la función


prev y end como se muestra a continuación: Ej. 40006_F
<?php
$estados=array("Aguascalientes", "BCN", "BCS","DF");
function retrocede($estados) {
end($estados);
do {
$valor=current($estados);
print "El valor es: $valor <br>";
}while (prev($estados));
}
retrocede($estados);
?>

Finalmente si quisiéramos obtener el valor del índice se utilizaría la función


key().
Ej. 40006_G
<?php
$estados=array("Aguascalientes", "BCN", "BCS","DF");
function avanza($estados) {
do {
$valor=current($estados);
$pointer=key($estados);
print "El valor es: $valor --$pointer<br>";
}while (next($estados));
}
avanza($estados);
?>

Variables Predefinidas
se pueden encontrar con la funcion phpinfo();
Ej. 40007
<?php
phpinfo();
?>

Variables de Apache
Estas variables son creadas por el servidor web Apache
Ej. 40008
<?php
echo 'IP'.$_SERVER['REMOTE_ADDR'];
?>
Variables de Entorno
Ejemplo las variables de CGI
Ej. 40009
// hello.c
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void main(void)
{

printf("Content-type: text/html\n\n");
printf("<HTML><HEAD><TITLE>Hello World Wide Web</TITLE></HEAD>");
printf("<BODY BGCOLOR=\"#FFFFFF\"><P ALIGN=CENTER>");

printf("<H1>Primer CGI</H1>");
printf("Mi primer CGI");

printf("</BODY></HTML>");

Variables de PHP
PHP_SELF _POST _GET _COKKIES _SESSION
Ambito de las variables
El ambito es el contexto dentro del que esta definida la variable veamos los
diferentes ambitos
Basico: Se utiliza la variable dentro del escript creada, abarca los ficheros
incluidos y requeridos.
Local de funcion: Esta variable solo va ha mantener su valor dentro de la funcion
declarada exclusivamente
Globales: Estas se utilizan tanto dentro como fuera de las funciones y siguen
manteniendo su valor

variables variables
Son Valiables que se crean apartir de otras Ej. 40010
<?php
$a="hola";
$$a = "pp";
echo $hola;
?>
Constantes
Las constantes mantienen su valor durante toda la ejecucion de la aplicacion
Ej. 40011
<?php
define (EstaesConstante,"valor de la constante");
echo EstaesConstante.'<br>';
?>

EXPRESIONES
Operadores
Las expresiones son la piedra angular de PHP. En PHP, casi cualquier cosa que
escribes es una expresión. La forma más simple y ajustada de definir una expresión
es "cualquier cosa que tiene un valor".
Operadores Aritméticos
ejemplo nombre resultado $a + $b Adición Suma de $a y $b. $a - $b Substracción
Diferencia entre $a y $b. $a * $b Multiplicación Producto de $a and $b. $a / $b
División Cociente de $a entre $b. $a % $b Módulo Resto de $a dividido entre $b.
Operadores de asignacion
$a = 5; $a += 7; Es como decir $a = $a + 7; $b = "Hola "; $b .= " Mundo"; establece
$b a "Hola Mundo" => $b = $b . "Mundo";
Operadores Bit a bit
ejemplo nombre resultado $a & $b Y Se activan los bits que están activos tanto en
$a como $b. $a | $b O Se activan los bits que están activos en $a o que lo están en
$b. $a ^ $b Xor Se activan los bits que están activos en $a o en $b pero no en
ambos a la vez.
Ej.10001
Operadores de Comparación
ejemplo nombre resultado $a == $b Igualdad Cierto si $a es igual a $b. $a === $b
Identidad Cierto si $a es igual a $b y si son del mismo tipo $a != $b Desigualdad
Cierto si $a no es igual a $b. $a < $b Menor que Cierto si $a es estrictamente
menor que $b. $a > $b Mayor que Cierto si $a es estrictamente mayor que $b. $a <=
$b Menor o igual que Cierto si $a es menor o igual que $b. $a >= $b Mayor o igual
que Cierto si $a es mayor o igual que $b.
Operadores de Comparacion
ejemplo nombre resultado $a == $b I
Operadores de Ejecucion
Ver también system(), passthru(), exec(), popen(), y escapeshellcmd().
Operadores de Incremento/decremento
ejemplo nombre efecto ++$a Preincremento Incrementa $a en uno y después devuelve
$a. $a++ Postincremento Devuelve $a y después incrementa $a en uno. --$a
Predecremento Decrementa $a en uno y después devuelve $a. $-- Postdecremento
Devuelve $a y después decrementa $a en uno.
Operadores Lógicos
ejemplo nombre resultado $a and $b Y Cierto si tanto $a como $b son ciertos. $a or
$b O Cierto si $a o $b son ciertos. $a xor $b O exclusiva Cierto si $a es cierto o
$b es cierto, pero no ambos a la vez.

$a Negación Cierto si $a no es cierto.


$a && $b Y Cierto si tanto $a como $b son ciertos. $a || $b O Cierto si $a o $b son
ciertos.
Operadores de cadenas
Como operador de cadena tendriamos el punto . Punto como un concatenador de cadenas

ESTRUCTURAS DE CONTROL
If , else, elseif
If es una estructura condicional puede ser de tres tipos simple, en cascada y
anidado. Simple
Ej. 40012
<?php
$variable = 10;
$variable2 = 20;
if($variable <= $variable2 and $variable = 20){
echo “Variable es igual a 20”;
}else{
echo “Variable no es igual a 20”;
}
?>

Anidado Ej. 40013


<?php
$variable = 10;
$variable1 = 15;
$variable2 = 20;
$variable3 = 30;
if($variable <= $variable2 and $variable = 20){
echo “Variable es igual a 20”;
if($variable2 == $variable1){
echo “$variable2 es igual a $variable1”;
}
}else{
if($variable1 != $variable2){
if($variable3 > $variable){
echo “Esta es la ebtrada 3”;
}
}else{
if($variable2 <> $variable1){
echo “Entrada cuatro”;
}else{
echo “Entrada cinco”;
}
}
}
?>

Cascada
Ej. 40014
<?php
$edad = 30;
if($edad <=10 ){
echo “NiNO”;
}elseif($edad>10 and $edad<16){
echo “ADOLECENTE”;
}elseif($edad>15 and $edad<26){
echo “JOVEN”;
}elseif($edad>25 and $edad<61){
echo “ADULTO”;
}elseif($edad>60 and $edad<70){
echo “ADULTO MAYOR”;
}elseif($edad>=70){
echo “SENECTUD”;
}
?>

Do while, while
Es una estructura de ciclo que permite repetir estructuras hasta que una condicion
sea falsa la proposicion. Do while
Ej. 40015
<?php
$var = 0;
do{
echo 'Esta es una impresion de '.$var.'<br>';
}while($var!=0);
echo “Salio”;
?>
While
Ej. 40016
<?php
$var = 0;
while($var!=0){
echo 'Esta es una impresion de '.$var.'<br>';
}
echo “Salio”;
?>

for Esta estructura permite iniciar un valor entero y terminar en otro este proceso
va ha ciclar todas las instrucciones contenidas dentro de dicha estructura mientras
la condicion sea verdadera
Ej. 40017
<?php
for ($i=1;$i<=10;i++){
echo 'Esta es la '.$i.' linea<br>';
}
?>

foreach
Esto simplemente da un modo fácil de iterar sobre arrays Ej. 40018
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
$cad = array(1, 2, 3, 17);
foreach($cad as $v => $c) {
echo $v. ' = ' . $c. '<br>';
}
$cad = "";
echo '<hr>';
$cad["A"] = 1;
$cad["B"] = 2;
$cad["C"] = 3;
$cad["D"] = 17;
foreach($cad as $v => $c) {
echo $v. ' = ' . $c. '<br>';
}
$cad = "";
echo '<hr>';
$cad = array("1"=>"Enero","2"=>"Febrero","3"=>"Marzo","4"=>"Abril",);
foreach($cad as $v => $c) {
echo $v. ' = ' . $c. '<br>';
}
?>
</BODY>
</html>

Break
break escapa de la estructuras de control iterante (bucle) actuales for, while, o
switch.
break accepta un parámetro opcional, el cual determina cuantas estructuras de
control hay que escapar.
Ej. 40019
for ($i=1;$i<=10;$i++){
for ($j=1;$j<=10;$j++){
echo 'Valor de i:'.$i.' Valor de j: '.$j.'<br>';
if($j == 5) break;
}
echo '<hr>';
}
?>

Ej. 40020
for ($i=1;$i<=10;$i++){
for ($j=1;$j<=10;$j++){
echo 'Valor de i:'.$i.' Valor de j: '.$j.'<br>';
if($j == 5) break 2;
}
echo '<hr>';
}
?>

continue continue se usa dentro de la estructura del bucle para saltar el resto de
la iteración actual del bucle y continuar la ejecución al comienzo de la siguiente
iteración.
continue accepta un parámetro opcional, el cual determina cuantos niveles (bluces)
hay que saltar antes de continuar con la ejecución.
Ej. 40021
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
for ($i=1;$i<=10;$i++){
for ($j=1;$j<=10;$j++){
if($j == 5) continue;
echo 'Valor de i:'.$i.' Valor de j: '.$j.'<br>';
}
echo '<hr>';
}
?>
</BODY>
</html>

Ej. 40022
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
for ($i=1;$i<=10;$i++){
for ($j=1;$j<=10;$j++){
if($j == 5) continue 2;
echo 'Valor de i:'.$i.' Valor de j: '.$j.'<br>';
}
echo '<hr>';
}
?>

</BODY>
</html>

switch
La sentencia switch es similar a una serie de sentencias IF en la misma expresión.
En muchas ocasiones, se quiere comparar la misma variable (o expresión) con nuchos
valores diferentes, y ejecutar una parte de código distinta dependiendo de a qué
valor es igual. Para ello sirve la sentencia switch.
Ej. 40022
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<FORM method="POST" action="" name ="Form1">
<SELECT name="select">
<option>opera</option>
<option>mozilla</option>
<option>konqueror</option>
<option>Nezcape</option>
</SELECT>
<INPUT type="submit" name="cmdmandar" value="Mandar">
</FORM>
<?php
$browserName = $_POST[select];
switch ($browserName) {
case 'opera':
echo 'opera';
break;
case 'mozilla':
echo "Mozilla";
break;
case 'konqueror':
echo 'Konqueror';
break;
default:
echo 'Default';
break;
}
?>
</BODY>
</html>

require()
La sentencia require() se sustituye a sí misma con el archivo especificado, tal y
como funciona la directiva #include de C. Un punto importante sobre su
funcionamiento es que cuando un archivo se incluye con include() o se requiere con
require()), el intérprete sale del modo PHP y entra en modo HTML al principio del
archivo referenciado, y vuelve de nuevo al modo PHP al final.
Ej. 40023
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
for($i=0;$i<=10;$i++){
//include('40023_A.php');
require('40023_A.php');
}
?>
</BODY>
</html>

Ej. 40023_A
<?php
echo 'Hola '.$i.'<br>';
?>

include()
La sentencia include() incluye y evalúa el archivo especificado. Ej. Repetir el
anterior y documenatr require y activar include
include() difiere de require() en que la sentencia include se re-evalúa cada vez
que se encuentra (y sólo cuando está siendo ejecutada), mientras que la sentencia
require() se reemplaza por el archivo referenciado cuando se encuentra por primera
vez, se vaya a evaluar el contenido del archivo o no (por ejemplo, si está dentro
de una sentencia if cuya condición evaluada es falsa).
FUNCIONES
Funciones definidas por el usuario
Sintaxi:
function ($arg_1,$arg_2,...,$arg_n){
$variable “Mensaje”;
return $variable;
}

Funcion simple
Unicamente se declara y se realiza una accion sin asignarla a alguna variables
Ej. 40024
<?php
function mensaje(){
echo "Hola";
}
mensaje();
?>

Funcion X Valor
Los parámetros de una función se pasan por valor (de manera que si cambias el valor
del argumento dentro de la función, no se ve modificado fuera de ella
Ej. 40025
<?php
function mensaje($a){
$a += 5;
echo $a.'<br>';
}
$a = 10;
echo $a.'<br>';
mensaje($a);
echo $a;
?>

Funcion X Referencia
Si deseas permitir a una función modificar sus parámetros, debes pasarlos por
referencia. Si quieres que un parámetro de una función siempre se pase por
referencia, puedes anteponer un ampersand (&) al nombre del parámetro en la
definición de la función
Ej. 40026
<?php
function mensaje(&$a){
$a += 5;
echo $a.'<br>';
}
$a = 10;
echo $a.'<br>';
mensaje($a);
echo $a;
?>

Funcion Parametros X Defecto


En este tipo de funciones se establece un valor ya predeterminado por si el
susuario no introduce los valores ya se toman por default algunos.
Ej. 40027
<?php
function mensaje(&$a,$b = "pp"){
$a += 5;
echo $a.'<br>';
echo $b.'<br>';
}
$a = 10;
echo $a.'<br>';
mensaje($a);
echo $a;
?>

Funcion C/Valor Statico


Este tipo de funciones permiten mantener valores estaticos dentro de ella esa
funcion Static es un tipo de decalracion de variable que no es necesaria que este
dentro de una funcion se puede hacer de la misma forma dentro de un script.
Ej. 40028
<?php
function sumar_1(){
//static $c;
$c += 1;
echo $c.'<br>';
}
sumar_1();
sumar_1();
?>

Funcion C/Variable Global


Este tipo de funciones permiten mantener valores estaticos dentro de ella esa
funcion Static es un tipo de decalracion de variable que no es necesaria que este
dentro de una funcion se puede hacer de la misma forma dentro de un script.
Ej. 40029
<?php
function fun_global(){
//global $a;
$a += 5;
}
$a=5;
fun_global();
echo $a;
?>

AUTENTIFICACION HTTP CON PHP=


Hay varias formas de autentificar una de ellas es con SESSIONES o CooKIES la otra
sera cor medio de HTTP con PHP prueba el ejemplo siguiente
Ej. 40030
<?php
if(!isset($PHP_AUTH_USER)) {
Header("WWW-Autentificación: Basic realm=\"Mi Reino\"");
Header("HTTP/1.0 401 No autorizado");
echo "Texto a enviar si pulsa el botón Cancelar\n";
exit;
} else {
echo "Hola $PHP_AUTH_USER.<P>";
echo "Ha introducido $PHP_AUTH_PW como su contraseña.<P>";
}
?>

ENVIO DE ARCHIVOS
En ocaciones es necesario subir archivos al servidor ya sea como tareas, contratos,
fotografias, grafias, documentacion escaneada, etc... Para ello php proporciona
algunas funciones para poder subir de forma muy rapida archivos al server toma el
siguiente ejemplo y pruebalo toma en cuenta los permisos tanto de los archivos que
subes como las carpetas en donde se guardan.
Ej. 40031
<form action="40031_A.php" method="post" name="f_prof" id="f_prof" enctype="multipart/form-data">
fichero: <input type="file" name="fichero" id="fichero">
<input type="submit" name="enviar" value="enviar">
</form>

Ej. 40031_A
<?php
echo $_FILES['fichero']['name'];
if(is_uploaded_file($_FILES['fichero']['tmp_name'])) {
echo '<H2>Se envio el archivo a temporal...<H2>';
if(move_uploaded_file($_FILES['fichero']['tmp_name'], $_FILES['fichero']['name']))
{
echo '<H4>Se envio el archivo...<H4>';
}
}
?>

Una de las funciones más utilizadas en el manejo de formularios es el envío de


archivos al servidor (upload), ya que en muchas ocasiones necesitamos subir al
servidor fotos de nuestros productos, archivos con descripción de procesos, etc.;
para llevar a cabo esta acción, se requieren algunas de algunas condiciones para
que pueda realizarse satisfactoriamente:
Se requiere de un navegador que cumpla la norma RFC-1867, como es Netscape 3.0 o
posterior, Internet Explorer 4 o posterior, Mozilla 1.0 u Opera, por mencionar los
m�s comunes. Que la opción de "upload files" esté habilitada en el PHP.INI
(file_uploads = On). Que el archivo preferentemente no rebase los 2 MB que es el
límite del archivo, aunque esto se puede cambiar en el PHP.INI (upload_max_filesize
= 2M). Que el límite de memoria sea del doble del archivo que se envío (en caso que
sea muy grande), o no será posible moverlo a la carpeta de destino. Que se tengan
permisos de escritura en la carpeta de destino.
El proceso que se realiza en el servidor cuando subimos un archivo es el siguiente:
se envía el archivo mediante el método POST, el cual sube al temporal del servidor
dicho fichero, posteriormente se toma este archivo y se coloca en la ruta deseada,
automáticamente se elimina el archivo temporal.
Es necesario conocer que para que podamos subir un archivo a través de un
formulario, se requiere el el etiqueta >form> tenga la propiedad method =”post” y
declarar lo siguiente : ENCTYPE="multipart/form-data", a continuación analizamos la
estructura básica de un formulario con el cual se permite subir un archivo al
servidor:
<form ENCTYPE="multipart/form-data" action="_URL_" METHOD=POST>
<input type="hidden" name="MAX_FILE_SIZE" value="1000">
Enviar este archivo: <INPUT name="archivo" TYPE="file">
<input type="submit" VALUE="Enviar">
</form>

Antes de publicarlo, analizamos su estructura: ENCTYPE="multipart/form-data" define


el tipo de información que se enviará mediante el formulario. Si no se coloca esta
propiedad, el archivo NO se sube al servidor. action="_URL_" especifica la página
que procesará la petición. input type="hidden" name="MAX_FILE_SIZE" es la variable
que utilizamos para determinar el tamaño máximo (en bytes) del archivo que se
envía. Algunos usuarios han comentado que esta variable es REQUERIDA en Linux para
que trabaje el script. INPUT name="archivo" TYPE="file" es posiblemente uno de los
puntos más delicados, ya que al definir el tipo como archivo, de forma automática
crea el botón que nos permite navegar en nuestro disco duro para elegir el archivo
que deseamos mandar. Las variables que manda el navegador (aunque depende cuales
soporta el browser) son: $_FILES'archivo''name' contiene nombre original del
fichero en la máquina cliente. $_FILES'archivo''type' contiene el tipo mime del
fichero (si el navegador lo proporciona). Un ejemplo podría ser "image/gif".
$_FILES'archivo''size' contiene el tamaño en bytes del fichero recibido.
$_FILES'archivo''tmp_name' aquí se asigna el nombre del fichero temporal que se
utiliza para almacenar en el servidor el archivo recibido.
Una vez que se tiene el archivo en el servidor, podemos verificar si realmente se
subió el archivo, o cual se realiza con la función is_uploaded_file();
posteriormente tenemos que mover el archivo a la ruta donde deseamos se
aloje(recordemos que inicialmente el archivo se sube a un temporal) lo cual podemos
realizar con la función copy() o con move_uploaded_file()
Vamos a analizar un ejemplo con ambas opciones:
1.- Ejemplo con copy:
<?php
// Nombre del archivo: upload1.php
// En PHP 4.1.0 o posterior debemos usar $_FILES en vez de $HTTP_POST_FILES.
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
copy($_FILES['userfile']['tmp_name'],
"/carpeta/donde/mover/el/archivo");
} else {
echo "Este es un posible ataque por upload. Filename: " .
$_FILES['userfile']['name'];
}
?>

2.- Ejemplo con move_uploaded_file:


<?php
// Nombre del archivo: upload2.php
// En PHP 4.1.0 o posterior debemos usar $_FILES en vez de $HTTP_POST_FILES.
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
move_uploaded_file($_FILES['userfile']['tmp_name'],
"/carpeta/donde/mover/el/archivo");
} else {
echo "Este es un posible ataque por upload. Filename: " .
$_FILES['userfile']['name'];
}
?>

En ambos ejemplos en caso de que el archivo ya exista, se sobrescribe


automáticamente, es importante recordar que debemos de tener los permisos
suficientes para poder subir los archivos a la carpeta deseada, de lo contrario si
tenemos habilitado la opción display_errors en el php.ini podemos obtener el
siguiente mensaje de error:
Permission denied in /carpeta/dondeestamiprograma/programa.php on line XX Warning:
Unable to move '/tmp/nombredearchivo temporal' to 'archivo a copiar' in
/carpeta/dondeestamiprograma/programa.php on line XX
Para resolver este problema, tenemos dos opciones, asignemos los permisos
necesarios a la carpeta adonde queremos mover el archivo, o cambiemos de
propietario dicha carpeta.
<?php
// Nombre del archivo: upload3.php
// Este ejemplo se prob&oacute; originalmente con Win2KPro, Apache 1.3x, PHP 4.x
// sin embargo, en Linux trabaja bien con una configuracion similar
// Especificamos esta linea donde defino
// el path de destino, de acuerdo a cada sistema.
// para unix = /var/www/html/uploads/
// para windows = c:\\inetpub\\wwwroot\\uploads\\
// La carpeta de destino debe tener permisos 757 en Unix
// Y de lectura y escritura en Windows
if ($act) {
$nombre_archivo = $HTTP_POST_FILES['userfile']['name'];
if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
$filename = $_FILES['userfile']['tmp_name'];
print "<p>$filename fue cargado exitosamente</p>";
$realname = $_FILES['userfile']['name'];
print "<p>El nombre real es $realname</p>";
print "<p>Copiando los archivos al directorio</p>";
copy($_FILES['userfile']['tmp_name'],
"/var/www/html/uploads/".$realname);
} else {
echo "<p>Posible ataque mediante upload ".$_FILES['userfile']['name'].".";
}
}
?>
<form ENCTYPE="multipart/form-data" method="POST"
action="<?php print("$PHP_SELF"); ?>?act=upload">
Archivo: <input type="FILE" name="userfile"
size="35">
<input type="hidden" name="MAX_FILE_SIZE"
value="1000">
<input type="submit" value="Enviar"
name="B1">
</form>
<p>Pulsar s&oacute;lo una vez y esperar la confirmaci&oacute;n</p>
<p><a href="<?php print("$PHP_SELF"); ?>">Reiniciar el formulario</a></p>
</body>
</html>

Estos son los errores definidos para la acción de upload, mismos que se presentan
automáticamente en caso de fallar el proceso:
#define UPLOAD_ERROR_A 1 /* El archivo excede el tamaño de upload_max_filesize */
#define UPLOAD_ERROR_B 2 /* El archivo excede el tamaño de MAX_FILE_SIZE */
#define UPLOAD_ERROR_C 3 /* Parcialmente enviado */
#define UPLOAD_ERROR_D 4 /* No fue enviado */
#define UPLOAD_ERROR_E 5 /* Tamaño del archivo enviado 0 bytes */
FUNCIONES DE FECHA Y HORA
mktime
obtiene el timestamp UNIX de una fecha
Sintaxis:
int mktime (int hour, int minute, int second, int month, int day, int year [, int is_dst])

Ej. 40032
<?php
echo 'Fecha sin formato'.mktime(0,0,0,12,1,1998).'<br>';
//Pero esto no nos dice nada pero si ponemos la funcion
echo 'Fecha con formato: '.date( "M-d-Y", mktime(0,0,0,12,1,2008) );
?>

Lo importante de esta funcion es que tomemos en cuenta el orden de los meses y los
dias podria conciderarse que estan al reves pero no es asi.
date
Da el formato para alguna fecha u hora .
Sintaxis:
string date (string format [, int timestamp])

Donde el segundo parametro es opcional en caso de que no se establezca toma el del


sistema operativo: Los parametros que puede tomar son:
a - "am"o "pm" A - "AM"o "PM" d - día del mes, dos dígitos con cero a la izquierda;
es decir, de "01"a "31" D - día de la semana, en texto, con tres letras; por
ejemplo, "Fri" F - mes, en texto, completo; por ejemplo, "January" h - hora, de
"01"a "12" H - hora, de "00"a "23" g - hour, sin ceros, de "1"a "12" G - hour, sin
ceros; de "0"a "23" i - minutos; de "00"a "59" j - día del mes sin cero inicial; de
"1"a "31" l (’L’ minúscula) - día de la semana, en texto, completo; por ejemplo,
"Friday" L - "1"or "0", según si el año es bisiesto o no m - mes; de "01"a "12" n -
mes sin cero inicial; de "1"a "12" M - mes, en texto, 3 letras; por ejemplo, "Jan"
s - segundos; de "00"a "59" S - sufijo ordinal en inglés, en texto, 2 caracteres;
por ejemplo, "th", "nd" t - número de días del mes dado; de "28"a "31" Fecha/hora U
- segundos desde el valor de ’epoch’ w - día de la semana, en número, de
"0"(domingo) a "6"(sábado) Y - año, cuatro cifras; por ejemplo, "1999" y - año, dos
cifras; por ejemplo, "99" z - día del año; de "0"a "365" Z - diferencia horaria en
segundos (de "-43200"a "43200")
Ej. 40033
<?php
echo date("a").'<br>';
echo date("A").'<br>';
echo date("d").'<br>';
echo date("D").'<br>';
echo date("f").'<br>';
echo date("F").'<br>';
echo date("h").'<br>';
echo date("H").'<br>';
echo date("g").'<br>';
echo date("G").'<br>';
echo date("i").'<br>';
echo date("j").'<br>';
echo date("L").'<br>';
echo date("m").'<br>';
echo date("M").'<br>';
echo date("n").'<br>';
echo date("s").'<br>';
echo date("S").'<br>';
echo date("t").'<br>';
echo date("U").'<br>';
echo date("w").'<br>';
echo date("Y").'<br>';
echo date("y").'<br>';
echo date("z").'<br>';
echo date("Z").'<br>';
echo 'Conversion1: '.date(“Y/m/d”).'<br>';
echo 'Conversion2: '.date(“Y-m-d”).'<br>';
echo 'Conversion2: '.date(“d/-Y”).'<br>';
?>

checkdate
Verifica si una fecha es valida o no lo es
Sintaxis:
int checkdate (int month, int day, int year)

Ej. 40034
<?php
$dia = 12;
$mes = 13;
$axo = 2008;
if(checkdate ($mes, $dia, $axo)) echo "correcta";
else echo "incorrecta";
?>

getdate
obtiene información de fecha y hora
Sintaxis: array getdate (int timestamp)
Ej. 40035
<?php
$cad = getdate(mktime(0,0,0,12,1,2008));
foreach($cad as $v => $c) {
echo $v. ' = ' . $c. '<br>';
}
?>

gmstrftime
da formato a una fecha/hora GMT/CUT según las convenciones locales
Sintaxis:
string gmstrftime (string format, int timestamp)

Ej. 40036
<?php
echo gmstrftime ("%Y-%m-%d", mktime(0,0,0,12,1,2008));
?>

FUNCIONES DE CADENAS
Estas nos permitiran manipular las cadenasya sea para convertirals, contar letras
,cadenas convertirlas etc.
Chop Elimina espacios sobrantes al final
Sintaxis:
string chop (string cad)

Ej. 40037
<?php
$cad = "Cadena1 ";
$cad1 = " Cadena2";
$cad2 = $cad . $cad1;
echo $cad2.'<br>';//Aqui lo junta por que en HTML no hay espacios
echo '<INPUT type="text" name="t1" size="50" value="'.$cad2.'">';
$cad2 = chop($cad).$cad1;
echo '<INPUT type="text" name="t2" size="50" value="'.$cad2.'">';
/*
Toma en cuenta que cuando mandes datos a una BD tienes que hacer chequeos de este tipo si quieres
ahorrar espacios dentro de la abse para evitar que el usuario meta por errror espacios en blanco al
final
*/
?>

chr
Devuelve una cadena de un caracter que este especificado por ascii.
Sintaxis:
string chr (int ascii)

Ej. 40038
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<FORM method="POST" target="_self" action="<?php echo $_PHP_SELF ?>">
<INPUT type="text" name="txtcadena">
<INPUT type="submit" name="cmdenviar" value="Convertir">
</FORM>
<?php
if($_POST[cmdenviar]){
echo $_POST[txtcadena]. ' ==> '. chr($_POST[txtcadena]);
}
?>
</BODY>
</html>

chunk_split
Divide una cadena en trozos más pequeños
Sintaxis:
string chunk_split (string cadena [, int tamatrozo [, string final]])

Ej. 40039
<html>
<HEAD><TITLE>Agrega caracteres</TITLE></HEAD>
<BODY>
<?php
$str = "ATENTAMENTE";
echo chunk_split($str,1,".").'<BR>';
echo chunk_split($str,2," ").'<BR>';
echo chunk_split($str,5,"-").'<BR>';
echo chunk_split($str,8,"_").'<BR>';
?>
</BODY>
</html>

explode
Divide una cadena en trozos más pequeños
Sintaxis:
array explode (string separador, string cadena [, int limite])

Ej. 40040
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
$str = "1|MIGUEL|CASARES|LUNA|28";
$datos=explode("|",$str);
echo $datos[0].'<BR>';
echo $datos[1].'<BR>';
echo $datos[2].'<BR>';
?>
</BODY>
</html>

implode
Divide una cadena en trozos más pequeños
Sintaxis:
array explode (string separador, string cadena [, int limite])

Ej. 40041
<?php
$str = "1|MIGUEL|CASARES|LUNA|28";
$datos=explode("|",$str);
echo $datos[0].'<BR>';
echo $datos[1].'<BR>';
echo $datos[2].'<BR>';
$cad_nueva=implode("-",$datos);
echo $cad_nueva;
?>

ltrim
Elimina el espacio en blanco del principio de una cadena
Sintaxis:
string ltrim (string cad)

Ej. 40042
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
$cad = "Cadena1 ";
$cad1 = " Cadena2";
$cad2 = $cad . $cad1;
echo $cad2.'<br>';//Aqui lo junta por que en HTML no hay espacios
echo '<INPUT type="text" name="t1" size="50" value="'.$cad2.'">';
$cad2 = $cad.Ltrim($cad1);//Hace la nueva cadena pero elimina espacios en blanco al principio
echo '<INPUT type="text" name="t2" size="50" value="'.$cad2.'">';
?>
</BODY>
</html>

md5 Calcula el hash md5 de una cadena


Sintaxis:
string md5 (string cad)

Ej. 40043
<?php
$cad = MD5("Clave1");
echo $cad;
?>

Ord Devuelve el valor ASCII de un caracter, es lo contrario que chr


Sintaxis:
int ord (string cadena)

Ej. 40044
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<FORM method="POST" target="_self" action="<?php echo $_PHP_SELF ?>">
<INPUT type="text" name="txtcadena">
<INPUT type="submit" name="cmdenviar" value="Convertir">
</FORM>
<?php
if($_POST[cmdenviar]){
echo $_POST[txtcadena]. ' ==> '. ord($_POST[txtcadena]);
}
?>
</BODY>
</html>

parse_str Divide cad como si fuera la cadena de consulta enviada por un URL y crea
las variables en el ámbito actual.
Sintaxis:
void parse_str (string cad)

Ej. 40045
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
$cad = "a=valor1&b=valor2+cadena&c=valor3";
parse_str($cad);
echo $a.'<br>'; //valor
echo $b.'<br>'; //valor2 cadena
echo $c.'<br>'; //valor3
?>
</BODY>
</html>

print y printf Emite una cadena y Emite una cadena con formato.
Sintaxis:
print (string arg) y int printf (string formato [, mixed args...])

Ej. 40046
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
$cad = "Cadena para imprimir";
print("cad es igual a: $cad <br>");
printf("cad es igual a: %s <br>",$cad);
?>
</BODY>
</html>

strcasecmp
Comparación de cadenas insensible a mayúsculas y minúsculas y segura en modo
binario
Sintaxis:
int strcasecmp (string cad1, string cad2)

Ej. 40047
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
$var1 = "Hello";
$var2 = "hello";
if (!strcasecmp ($var1, $var2)) {
echo $var1 .' es igual a '. $var2.' en una comparacion sin tener en cuenta mayusculas o
minusculas';
}
?>
</BODY>
</html>

strlen
Sirve para conocer la longitud de la cadena
Sintaxis:
int strcasecmp (string cad1, string cad2)

Ej. 40048
<?php
$cadena = "Esta es una cadena y tiene: ";
echo $cadena . Strlen($cadena) . ' caracteres';
?>

str_pad
Esta función rellena la cadena entrada por la derecha, la izquierda o por ambos
lados hasta el largo indicado. Si no se especifica el argumento opcional
cad_relleno, entrada es rellenada con espacios. En caso contrario, será rellenada
con los caracteres de cad_relleno hasta el límite. El argumento opcional
tipo_relleno puede valer STR_PAD_RIGHT, STR_PAD_LEFT, o STR_PAD_BOTH. Si no se
especifica, se asume que vale STR_PAD_RIGHT.
Sintaxis:
string str_pad (string entrada, int tama_relleno [, string cad_relleno [, int
tipo_relleno]])

Ej. 40049
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
$entrada = "ITPeople";
print str_pad($entrada, 20).'<br>';
print str_pad($entrada, 20, "*", STR_PAD_LEFT).'<br>';
print str_pad($entrada, 20, "*", STR_PAD_RIGHT).'<br>';
print str_pad($entrada, 20, "_", STR_PAD_BOTH);
?>
</BODY>
</html>

strpos
Encuentra la posición de la primera aparición de una cadena
Sintaxis:
int strpos (string pajar, string aguja [, int desplazamiento])

Ej. 40050
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
$micadena = 'burro';
$pos = strpos ($micadena, "b");
if ($pos === false) {
echo 'no encontro<br>';
}
$pos = strpos ($micadena, "c");
if ($pos === false) {
echo 'encontro';
}
?>
</BODY>
</html>

str_repeat
Devuelve la cad_entrada repetida veces. veces debe ser mayor que 0.
Sintaxis:
string str_repeat (string cad_entrada, int veces)

Ej. 40051
<?php
echo str_repeat ("*", 50);
?>

strrev
Invierte una cadena , Devuele la cadena invertida.
Sintaxis:
string strrev (string cadena)

Ej. 40052
<?php
$cadena = "HOLA";
echo strrev ($cadena);
?>

strtolower y strtoupper Convierte a minusculas o a mayusculas correspondientemente


Sintaxis:
string strtolower (string cadena) , string strtolower (string cadena)

Ej. 40053
<?php
$cadena = "HolA";
echo strtolower ($cadena).'<br>';
echo strtoupper ($cadena).'<br>';
?>
str_replace Esta función sustituye todas las apariciones de la aguja en el pajar
por la cad dada. Si no precisa reglas especiales de sustitución, deberá usar
siempre esta función en lugar de ereg_replace().
Sintaxis:
string str_replace (string aguja, string cad, string pajar))

Ej. 40054
<?php
$cadena = 'Esta es la cadena que va ha tener remplazos';
echo str_replace('que', 'hola', $cadena);
?>

substr Devuelve la porción de cadena especificada por los parámetros comienzo y


largo. Si comienzo es positivo, la cadena devuelta comenzará en dicho caracter de
cadena.
Sintaxis:
string substr (string cadena, int comienzo [, int largo])

Ej. 40054
<?php
echo substr ("abcdef", 1).'<br>'; // devuelve "bcdef"
echo substr ("abcdef", 1, 3).'<br>'; // devuelve "bcd"
echo substr ("abcdef", -1).'<br>'; // devuelve "f"
echo substr ("abcdef", -2).'<br>'; // devuelve "ef"
echo substr ("abcdef", -3, 1).'<br>';// devuelve "d"
?>

Nota: Se recomienda buscar las demas funciones de cadenas

FUNCIONES DE ARCHIVOS
Las siguienes son solo algunas funciones para el manejo de archivos se van ha crear
archivos y se van a leer archivos solamente
Ej. 40055 (Crear Archivo)
<html>
<HEAD><TITLE>Convertir</TITLE></HEAD>
<BODY>
<?php
$archivo= fopen("prueba.sql", "w"); //Abre el archivo y lo limpia si no existe lo crea
for($i=0;$i<=10;$i++){
$cadena ='Cadena '.$i.chr(13); //genera una cadena
echo $cadena.'<br>';
fputs($archivo,$cadena);//Escribe en el archivo la cadena
}
echo 'Se genero el archivo<hr>';
fclose ($archivo);//Cierra el archivo
?>
</BODY>
</html>

Ej. tabla1.sql (Crea un archivo por ejemplo) 1|alfredo|20|CASA820319EF3


2|juan|25|MADF050505DF6 3|lucas|30|LOSG000304DG7 4|pedro|26|pesd647392yrb
5|manuel|10|dgye070605fh7
Ej. 40056 (Lee archivo tabla1.sql)
<?php
$archivo= fopen("tabal1.sql" , "r");//Abre el archivo de solo lectura
while (!feof($archivo)){
$crear=fgets($archivo,255);//le la cadena
echo '<hr>';
echo $crear.'<br>';
echo '<hr>';
$datos=explode("|",$crear);//Divide la cadena dividida X |
echo 'N Reg: '. $datos[0].'<br>';
echo 'Nombre: '.strtoupper($datos[1]).'<br>';
echo 'Edad: '. $datos[2].'<br>';
echo 'RFC: '. strtoupper($datos[3]).'<br>';
}
fclose ($archivo);
?>

MANIPULACION DE ARCHIVOS DE TEXTO


Manejo de ficheros
En muchas ocasiones es muy necesario el trabajar con archivos de textos desde una
aplicación web, ya que podemos ir desde lo más básico que es leer un archivo para
desplegarlo en pantalla, hasta poder interactuar con ellos para sustituir o agregar
información a los mismos. La primera función que podemos explotar es readfile(), la
cual, despliega el contenido de un archivo de texto en el monitor, Para llevar a
cabo los ejercicios de este tema, vamos a crear un archivo con el texto que a
continuación se muestra:
"En el curso que se esta tomando, aprenderemos a manejar PHP Iniciando desde lo
básico hasta llegar a crear una aplicación web que trabaje con base de datos."
-- LINUXPARATODOS 2007. Salvamos este archivo con el nombre "random.txt" y luego
ejecutamos el siguiente programa:
<?php
// Nombre del programa: fichero1.php
// lectura de un archivo
$bytes = readfile("random.txt");
// tama&ntilde;o del archivo
print "<br />El archivo es de $bytes bytes .";
?>

El ejemplo anterior despliega lo siguiente: En el curso que se esta tomando,


aprenderemos a manejar PHP Iniciando desde lo básico hasta llegar a crear una
aplicación web que trabaje con base de datos."-- LINUXPARATODOS 2007.
El tamaño del fichero es de XX bytes.
Nos daremos cuenta que al presentarlo en pantalla se pierde el formato, ya que el
navegador lo interpreta directamente y al no encontrar etiquetas HTML, lo despliega
de manera secuencial en una sola línea. Además de que estamos partiendo de que el
archivo existe físicamente, lo cual la mayoría de las ocasiones no es algo seguro.
Para esto utilizaremos la función file_exists, lo cual se muestra en el ejemplo
siguiente:
<?php
// Nombre del programa: fichero2.php
// Definimos el nombre del archivo
$archivo="random.txt";

if (file_exists($archivo))
{
// lectura de un archivo
print "<pre>";
$bytes = readfile($archivo);
print "</pre>";

// tamano del archivo


print "<br />El archivo es de $bytes bytes .";

} else { print "No encuentro el archivo"; }


?>

A diferencia del ejemplo anterior vemos que el documento presenta los saltos de
línea originales, además de la posibilidad de verificar la existencia del archivo y
presentar un error personalizado. En ambos ejemplos la función readfile es quien
esta mostrando en pantalla el contenido del archivo, dicha función nos regresa el
número de bytes que tiene el mismo. A continuación analizaremos otra manera de
desplegar el contenido de un archivo utilizando otras funciones:
<?php
// Nombre del programa: fichero3.php

// Definimos el nombre del archivo


$archivo = "random.txt";

// Verificamos que se encuentra


if (file_exists($archivo))
{
// Se define un arreglo para el contenido
$contenido = file($archivo);
// Determinamos el n&uacute;mero de l&iacute;neas
$longitud = sizeof($contenido);

print "<b>El archivo $archivo contiene $longitud l&iacute;nea(s)</b><p>";

// Desplegamos cada l&iacute;nea del arreglo con un loop

for($counter=0; $counter<$longitud; $counter++)


{
echo "$contenido[$counter]<br />";
}
}
else { print("No encuentro el archivo"); }
?>

En el ejemplo anterior utilizamos la función file(), la cual nos genera un arreglo,


el cual esta constituido por cada línea del archivo. La función sizeof() regresa el
número de elementos que contiene el arreglo. Los siguientes comandos son utilizados
para verificar los datos del archivo, aunque es importante mencionar que para mayor
referencia visiten el manual de PHP: is_dir() - verifica si es un directorio
is_executable() - verifica si es ejecutable is_link() - verifica si es un link
virtual is_readable() - verifica los permisos de lectura is_writeable() - verifica
los permisos de escritura filegroup() - regresa el grupo al que pertenece
fileowner() - regresa el nombre del propietario del archivo fileperms() - regresa
los permisos filesize() - regresa el tama�o del archivo filetype() - regresa el
tipo de archivo

EDICION DE LOS FICHEROS


Además de leer la información de los archivos, podemos editar los mismos, para lo
cual requerimos de una serie de funciones que veremos a continuación. fopen() esta
función nos sirve para abrir un archivo y lo prepara para editarlo o simplemente
leerlo. Su sintaxis es: fopen(archivo, modo) archivo es el nombre del documento que
abrimos. modo es el tipo de ejecución que haremos (modo de apertura).
El modo tiene las siguientes opciones: 'r' - Abre para sólo lectura; sitúa el
apuntador del fichero al comienzo del mismo. 'r+' - Abre para lectura y escritura;
sitúa el apuntador del fichero al comienzo del fichero. 'w' - Abre para sólo
escritura; sitúa el apuntador del fichero al comienzo del fichero y trunca el
fichero con longitud cero. Si el fichero no existe, trata de crearlo. 'w+' - Abre
el fichero para lectura y escritura; sitúa el apuntador del fichero al comienzo del
fichero y trunca el fichero con longitud cero. Si el fichero no existe, trata de
crearlo. 'a' - Abre sólo para escribir (añadir); sitúa el apuntador del fichero al
final del mismo. Si el fichero no existe, trata de crearlo. 'a+' - Abre para
lectura y escritura (añadiendo); sitúa el apuntador del fichero al final del mismo.
Si el fichero no existe, trata de crearlo.
Generalmente, las carpetas donde se crean estos archivos deben tener los permisos
757 para que pueda escribir en ellas el usuario de Apache ("apache" o "nobody",
dependiendo de la configuración del servidor) o en su defecto Apache debe de ser el
propietario de los mismos; sin embargo, los archivos resultantes generalmente sólo
tienen permisos de escritura del propietario de la carpeta, mismos que son
asignados automáticamente. Los archivos pueden ser abiertos de las siguientes
formas: Localmente. fopen("/home/directorio/archivo.txt", "r") Web.
fopen("http://www.servidor.com/", "r") FTP.
fopen("ftp://user:[email protected]/", "w") fclose() como su nombre lo indica
se utiliza para cerrar el archivo con el que se trabajo, lo cual es recomendable
que siempre se realice. Esto se fundamenta en que el servidor mantiene abierto el
archivo, lo que ocupa recursos y abre la posibilidad a que alguien no autorizado lo
pueda leer. Su sintaxis es: fclose(fopen(archivo, modo)); fread() lee un archivo en
modo binario (depende del modo declarado en fopen), sube el contenido al cache de
la máquina del cliente. Su sintaxis es: fread (fopen(archivo, modo), filesize
(archivo) fopen abre el archivo. filesize define el tamaño en bytes. archivo es el
nombre del archivo abierto, lo que crea el arreglo de longitud.
A continuación analicemos el siguiente ejemplo:
<?php
// Nombre del programa: fichero4.php
// Abrimos y leemos el archivo
$archivo = "random.txt";
$fd = fopen ($archivo, "r");
$contenido = fread ($fd, filesize ($archivo));
fclose ($fd);
// Lo presentamos en pantalla
print "<pre>";
print "$contenido";
print "</pre>";
?>

Finalmente, tenemos fputs(), que escribe los archivos en modo binario. Su sintaxis
es: fputs(fopen(archivo, modo),"contenido nuevo"), donde: fopen abre el archivo.
contenido nuevo es el texto que se escribe (depende del modo declarado en fopen).
Otro ejemplo, que sustituye el contenido del documento, es:
<?php
// Nombre del programa: fichero5.php
$archivo = "random.txt";
if ($textonuevo) {
// Abrimos y actualizamos el archivo
$fd = fopen ($archivo, "w");
fputs($fd,$textonuevo);
fclose ($fd);
}
?>
<form action="<?php print ("$PHP_SELF"); ?>" method="POST">
<p><strong>Editar texto</strong></p>
<textarea name="textonuevo" rows="6" cols="30">
</textarea><br />
<input value="Actualizar" type="submit"> <input value="Borrar" type="reset">
</form>
<?php
// Abrimos y leemos el archivo
$fd = fopen ($archivo, "r");
$contenido = fread ($fd, filesize ($archivo));
fclose ($fd);
// Eliminamos las contradiagonales
$editado = stripslashes("$contenido");
// Lo presentamos en pantalla
print "<pre>";
print "$editado";
print "</pre>";
?>

Por otro lado, si deseamos editar el contenido del original, pero no sustituirlo en
su totalidad, podemos usar esta variación:
<?php
// Nombre del programa: fichero6.php
$archivo = "random.txt";
if ($textonuevo) {
// Abrimos y actualizamos el archivo
$fd = fopen ($archivo, "w");
fputs($fd,$textonuevo);
fclose ($fd);
}
// Abrimos y leemos el archivo
$fd = fopen ($archivo, "r");
$contenido = fread ($fd, filesize ($archivo));
fclose ($fd);
// Eliminamos las contradiagonales
$editado = stripslashes("$contenido");
?>
<form action="<?php print ("$PHP_SELF"); ?>" method="POST">
<p><strong>Editar texto del archivo <?php print "$archivo"; ?></strong></p>
<textarea name="textonuevo" rows="6" cols="30"><?php print "$editado"; ?></textarea><br />
<input value="Actualizar" type="submit"> <input value="Borrar" type="submit">
</form>

En otro ejercicio, pensando en la posibilidad de tener un listado de nombres,


parecido al anterior:
<?php
// Nombre del programa: fichero7.php
$archivo = "listado.txt";
if ($nuevoregistro) {
// Abrimos y actualizamos el archivo
$fd = fopen ($archivo, "a");
fputs($fd,$nuevoregistro."\n");
fclose ($fd);
}
?>
<form action="<?php print ("$PHP_SELF"); ?>" method="POST">
<p><strong>Nuevo registro</strong></p>
<input type="text" name="nuevoregistro" size="20"><br />
<input value="Enviar" type="submit"> <input value="Borrar" type="submit">
</form>
<?php
if (file_exists($archivo))
{
// Abrimos y leemos el archivo
$fd = fopen ($archivo, "r");
$contenido = fread ($fd, filesize ($archivo));
fclose ($fd);
// Lo presentamos en pantalla
print "<p>Listado actual</p>";
print "<pre>";
print "$contenido";
print "</pre>";
} else {print "<p>No encontr&eacute; el archivo.</p>";}
?>

FUNCIONES DE CORREO
mail Mail() envía automáticamente el mensaje especificado en mensage al
destinatario especificado en para. Para especificar múltiples destinatarios se
puede hacer incluyendo una coma entre las direcciones en para.
Sintaxis:
bool mail (string para, string sobre, string mensaje [, string cabeceras_adicionales])

Ej. 40057
<?php
mail("[email protected]", "Sobre este tema", "Linea 1\nLinea 2\nLinea 3");
?>

Muchas de nuestras aplicaciones requieren que además de enviar información de una


página a otra, en ocasiones enviemos a los usuarios un comprobante de que la
información se recibió satisfactoriamente; es cuando utilizamos el envío de correo
de manera automática, como respuesta a una solicitud. Para realizar dicha acción,
PHP utiliza la función MAIL(), cuya sintaxis es la siguiente: Para: aquí se escribe
el emisor del mensaje Asunto: aquí se especifica el título del mensaje Mensaje:
aquí especificamos el cuerpo del mensaje Encabezados: aquí van los encabezados del
mail, por ejemplo, se puede especificar quien envía el mail, el tipo de
codificación, especificar direcciones de email para enviar los mismos con copia.
Una vez que hemos analizado la estructura de la función, modifiquemos el archivo
envia.php con el objeto de
Ej. 40057_A
<!-- Nombre del archivo: envia.php -->
<html>
<head>
<title>Confirmaci&oacute;n</title>
<body>

<?php
/* Obtiene la información de formulario. */
$nombre=$_POST[“nombre”];
$email=$_POST[“email”];
$preferencia=$_POST[“preferencia”];
/* Variables de ambiente --Cambiarlas a los valores de operación--*/

$misitio = "[http://www.linuxparatodos.net";] // Cambiarla por la direccion real


$adminmail = "[email protected]"; // Cambiarla por una cuenta real

/* esto manda una respuesta automatica al correo del usuario */


mail("$email", "Información recibida", "$nombre
Gracias por participar!
Ya tomamos nota que estuviste en nuestro sitio
Visita frecuentemente $misitio,
pronto recibirás información sobre $preferencia!");

/* esto manda una respuesta automatica al administrador del servicio */


mail("$adminmail",
"Nueva solicitud de informacion.",
"$nombre solicito informacion.
Su direccion de correo es $email.
su preferencia es $preferencia.");

/* Presenta la información de formulario. */

print "<center>";
print "Muchas gracias, $nombre.";
print "<br /><br />";
print "Agradecemos tu participaci&oacute;n.<br /><br />";
print "Te enviaremos informaci&oacute;n a $email, sobre $preferencia.";
print "</center>";

?>
</body>
</html>

Al ejecutar este ejercicio y revisar las cuentas de correo a donde enviamos el


mismo, nos daremos cuenta que el remitente dice [email protected] o
[email protected] con lo cual es muy probable que nos haya llegado a la bandeja de
correos no deseados, lo cual depende mucho de los filtros que se tengan
configurados por del proveedor de nuestra cuenta de correo y por los propios. Esto
se origina ya que Apache es quien envía directamente el correo electrónico,
recordemos que el usuario de nuestro sistema operativo que efectúa todas las
transacciones es Apache y es por eso que sucede esta situación. La manera de
especificar el usuario que deseamos que aparezca como el que envía el correo es
utilizando los encabezados de la función mail. Lo cual se especifica en el ejemplo
siguiente:
Ej. 40057_B
<!-- Nombre del archivo: envia.php -->
<html>
<head>
<title>Confirmaci&oacute;n</title>
<body>

<?php
/* Obtiene la información de formulario. */
$nombre=$_POST[“nombre”];
$email=$_POST[“email”];
$preferencia=$_POST[“preferencia”];
/* Variables de ambiente --Cambiarlas a los valores de operacion--*/

$misitio = "[http://www.linuxparatodos.net";] // Cambiarla por la direccion real


$adminmail = "[email protected]"; // Cambiarla por una cuenta real

/* esto manda una respuesta automatica al correo del usuario */


mail("$email", "Información recibida", "$nombre
Gracias por participar!
Ya tomamos nota que estuviste en nuestro sitio
Visita frecuentemente $misitio,
pronto recibirás información sobre $preferencia!","From: $adminmail");

/* esto manda una respuesta automatica al administrador del servicio */


mail("$adminmail",
"Nueva solicitud de informacion.",
"$nombre solicito informacion.
Su direccion de correo es $email.
su preferencia es $preferencia.","From: $email");

/* Presenta la información de formulario. */

print "<center>";
print "Muchas gracias, $nombre.";
print "<br /><br />";
print "Agradecemos tu participaci&oacute;n.<br /><br />";
print "Te enviaremos informaci&oacute;n a $email, sobre $preferencia.";
print "</center>";

?>
</body>
</html>

El resultado de las modificaciones anteriores se ven reflejadas al revisar


nuevamente la cuenta de correo a la cual se envío la información; visualizaremos
que el remitente ya no es apache, sino la cuenta de correo que hemos configurado.
MAIL() se configura desde PHP.INI en las siguientes líneas:
Ej. 40057_C
[mail function]
; For Win32 only.
SMTP = localhost

; For Win32 only.


;sendmail_from = [email protected]

; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
sendmail_path = /usr/sbin/sendmail -t -i

Las dos primeras opciones trabajan en Windows, en el primer caso se considera que
localmente existe un servidor de correo que resolverá la petición; en el segundo se
le determina una cuenta de correo valida a través de la cual los mensajes se
enviarán. Con Unix, funciona teniendo el servidor de correos Sendmail, Qmail o
similar, instalado y funcionando localmente.
Algunos encabezados muy útiles son: From determina el remitente del mensaje. Reply-
To define una dirección de correo para las respuestas, que puede ser diferente de
From. X-Mailer es el cliente o sistema que envía el mensaje. Content-Type
especifica el tipo de formato del mensaje, HTML o texto. Entonces, una línea con
múltiples encabezados es:
Ej. 40057_D
<?php
mail("[email protected]",
"Informes",
"Información solicitada para implementar un CRM",
"From: [email protected]\nReply-To:[email protected]\nX-Mailer:
PHP Server");
?>

VARIAS FUNCIONES
die Envía a la salida un mensaje y finaliza el script actual Sintaxis:
void die (string message)

Ej. 40058
<?php
$filename = ’/path/to/data-file’;
$file = fopen($filename, ’r’) or die "unable to open file ($filename)";
die ('Hola');
?>

eval eval() evalúa la cadena de carácteres dada en code_str como código PHP. Entre
otras cosas, ésto puede ser útil para almacenar código en un campo de texto de base
de datos para una ejecución posterior. Hay algunos aspectos a tener en cuenta
cuando se utiliza eval(). Recuerde que la cadena de carácteres pasada debe ser
código PHP válido, incluyendo aspectos como sentencias de terminación con un punto
y coma para que el parser no finalice en la línea después de eval(), y secuencias
de formato correctas en code_str.
Sintaxis:
void eval (string code_str)

Ej. 40059
<?php
$string = ’cup’;
$name = ’coffee’;
$str = ’This is a $string with my $name in it.<br>’;
echo $str;
eval( "\$str = \"$str\";" );
echo $str;
?>

exit Esta construcción del lenguaje finaliza la ejecución del script. No devuelve
nada.. Sintaxis:
void exit(void);

Ej. 40060
<?php
echo 'Mensaje 1';
exit();
echo 'Mensaje2';
?>

sleep La función sleep retarda la ejecución del programa durante el número de


seconds (segundos) dado. Véase también usleep(). Sintaxis:
void sleep (int seconds)

Ej. 40061
<?php
echo date('h:i:s') . "<br>";
sleep(5);
echo date('h:i:s') . "\n";
?>

EXPRECIONES REGULARES
Las expresiones regulares se usan en PHP para manipular cadenas complejas. Las
funciones que soportan expresiones regulares son: ereg() ereg_replace() eregi()
eregi_replace() split()
ereg Envía a la salida un mensaje y finaliza el script actual Sintaxis:
void die (string message)

Ej. 40062
<html>
<HEAD><TITLE>Convertir fecha</TITLE></HEAD>
<BODY>
<?php
$date = "05/06/2008";
if ( ereg( "([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", $date, $regs ) ) {
echo "$regs[3]-$regs[2]-$regs[1]";
} else {
echo "formato invalido: $date";
}
?>
</BODY>
</html>

ereg_replace Esta función examina string buscando coincidencias de pattern, y


reemplaza el texto encontrado con replacement Sintaxis:
string ereg_replace (string pattern, string replacement, string string)

Ej. 40063
<?php
$string = "Esta es una cadena";
echo ereg_replace( " es", " fue", $string );
?>

split Devuelve un array de cadenas, cada una de las cuales es una subcadena de
string formada al dividir esta en los límites formados por la expresión regular
pattern. Si ocurre un error, devuelve un valor falso. Sintaxis:
array split (string pattern, string string [, int limit])

Ej. 40064
<?php
$fecha = "04/30/2008";
list( $mes, $dia, $axo ) = split( '/', $fecha );
echo "Mes: $mes; Dia: $dia; Año: $axo<br>\n";
?>

SESSIONES
El soporte de sesiones en PHP es básicamente un sistema que preserva ciertos datos
en una serie de accesos. Esto permite construir aplicaciones más personalizadas e
incrementar el atractivo de un website. Si ya está familiarizado con la gestión de
sesión de PHPLIB, apreciará que algunos conceptos son similares al soporte de
sesiones de PHP.
session start session_start() crea una sesión (o continua con la actual basada en
el id de sesión pasado mediante una variable GET (o una cookie). Sintaxis:
bool session_start(void);

session_destro
session_destroy() elimina todos los datos asociados a la sesión en curso.

Sintaxis
bool session_destroy(void);

Ej. 40065
<?php
session_start();
$_SESSION['var1']="Mensaje";
?>
<html>
<HEAD><TITLE>Convertir fecha</TITLE></HEAD>
<BODY>
<?php
echo $_SESSION['var1'];
?>
<a href="40066_A.php">Mandar</a>
</BODY>
</html>

Ej. 40066_A
<?php
session_start();
echo 'Variable: '.$_SESSION['var1'];
session_destroy();
?>
MYSQL

¿Qué es MySQL?
MySQL es el servidor de bases de datos relacionales más popular, desarrollado y
proporcionado por MySQL AB. MySQL AB es una empresa cuyo negocio consiste en
proporcionar servicios en torno al servidor de bases de datos MySQL. Una de las
razones para el rápido crecimiento de popularidad de MySQL, es que se trata de un
producto Open Source, y por lo tanto, va de la mano con este movimiento.

INTRODUCCION
MySQL es un sistema de gestión de base de datos relacional, multihilo y
multiusuario con más de seis millones de instalaciones.[1] MySQL AB —desde enero de
2008 una subsidiaria de Sun Microsystems— desarrolla MySQL como software libre en
un esquema de licenciamiento dual. Por un lado se ofrece bajo la GNU GPL para
cualquier uso compatible con esta licencia, pero las empresas que quieran
incorporarlo en productos privativos pueden comprar a la empresa una licencia
específica que les permita este uso. Está desarrollado en su mayor parte en ANSI C.

Licencia
Esta es una cuestión importante, ya que fundamenta la existencia y avance de la
base de datos. El producto esta disponible bajo la GNU GPL (la misma licencia de
Linux), que permite su instalación y redistribución sin limitaciones, sin embargo,
en este caso existen excepciones por las que sería necesario pagar:
Utilizar la base de datos para alguna función comercial. Integrarla a algún
producto, por lo que se distribuiría embebida en el mismo. Obtención| de soporte
técnico. Con todo, continúa siendo muy económica, al cobrarse una licencia por cada
máquina en que corra y no por cada CPU, como es el esquema de Oracle.

Tipos de tablas
1.ISAM.- es el formato de almacenaje mas antiguo, y posiblemente pronto
desaparecerá. Presentaba limitaciones (los ficheros no eran transportables entre
máquinas con distinta arquitectura, no podía manejar ficheros de tablas superiores
a 4 gigas). 2.MYISAM.- es el tipo de tabla por defecto en MySQL desde la versión
3.23. Optimizada para sistemas operativos de 64 bits, permite ficheros de mayor
tamaño que ISAM. Además los datos se almacenan en un formato independiente, con lo
que se pueden copiar tablas de una máquina a otra de distinta plataforma.
Posibilidad de indexar campos BLOB y TEXT. 3.HEAP.- Crea tablas en memoria. Son
temporales y desaparecen cuando el servidor se cierra; a diferencia de una tabla
TEMPORARY, que solo puede ser accedida por el usuario que la crea, una tabla HEAP
puede ser utilizada por diversos usuarios. 4.BDB.- Base de datos Berkeley. TST.
Solo en MySQL MAX 5.INNODB.- TST, ACID, con posibilidad de commit, rollback,
recuperación de errores y bloqueo a nivel de fila. 6.MERGE mas que un tipo de tabla
es la posibilidad de dividir tablas MYISAM de gran tamaño (solo útil si son
verdaderamente de GRAN tamaño) y hacer consultas sobre todas ellas con mayor
rapidez. Las tablas deben ser myisam e idénticas en su estructura.

Tamaño máximo de tablas


Este tema es controversial y variado, ya que depende en gran medida por el sistema
operativo y su configuración, no sólo del espacio en el disco duro. En principio,
al utilizar MyISAM, una tabla puede tener hasta 8 TB (terabytes) de capacidad,
aunque cada sistema operativo tiene sus propios límites y el tamaño por defecto es
de 4 GB.
Tabla 1. Tamaños de tabla
Plataforma Tamaño
2 GB (kernel 2.2), 4 GB (kernel 2.4) o más, dependiendo
Linux-Intel
el filesystem.
Linux-Alpha 8 TB (por confirmar).
Solaris/ 2.5.1 2 GB (posiblemente a 4 GB con un parche).
Solaris 2.6 4 GB (puede ser modificado con una bandera).
Solaris 2.7Intel 4 GB.
Solaris 2.7
512 GB.
UltraSPARC

Estructura de las tablas


En el presente curso vamos a manejar solamente las tablas tipo MyISAM por
cuestiones practicas y tiempos. Cada una de las mismas están compuestas por los
siguientes archivos:
.MYD que contiene los datos de la tabla.
.MYI son los índices de las tablas.
.frm es la definición o esquema de la tabla.
En suma, suponiendo que creamos una tabla llamada "productos", esta contendrá
productos.MYD, productos.MYI y productos.frm. A su vez, cada una de las bases de
datos residirán en una carpeta con su nombre, en la ruta /var/lib/MySQL/nombre_DB
para Linux/Unix. Accediendo al servidor
Una vez que se instala MySQL, se crea automáticamente el usuario propietario de la
misma el cual es root; además de crearse dos bases de datos MySQL y test; es
importante mencionar que NO tiene que borrarse la base de datos MySQL ya que es la
que tiene el control de todo el ambiente de trabajo.
SI uno desea conectarse a la consola de MySQL desde una terminal, nos encontraremos
con la siguiente sintaxis:
[root@server carpeta]$ MySQL -u usuario basededatos -p -h localhost

En el ejemplo anterior identificamos los siguientes valores:


u indica el usuario con el cual nos conectamos. En caso de no indicarlo,
tomará el que tenemos en nuestra terminal.
p determina que se pregunte por el password. En caso de tener una contraseña
y no indicar el parámetro, manda un error el sistema y aborta la petición.
h define el hostname. Generalmente no es necesario ponerlo, pero pueden
existir variaciones como localhost, localhost.localdomain, 10.3.5.25 o
www.midominio.com; estos son determinados por el host definido al momento de
dar de alta al usuario.
Se puede presentaar la situación en la que al entrar, no definamos la base de datos
a utilizar:
[root@server carpeta]$ MySQL -u usuario -p

Vamos a conectarnos por modo texto a la base de datos, abrimos una terminal
(consola) y tecleamos:
[root@server carpeta]$ MySQL -u root MySQL

Con la instrucción anterior, estamos indicando que nos vamos a conectar con el
usuario root a la base de datos MySQL.

VARIAS FUNCIONES
En algunas ocasiones (que son muy esporádicas) podemos olvidar con que usuario nos
conectamos a la base de datos; para conocer el usuario activo; escribimos lo
siguiente:
MySQL> select user();
+----------------+
| user() |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.02 sec)

También es importante conocer la versión de la base de datos que tenemos instalada;


lo cual se realiza con la siguiente instrucción:
MySQL> select version();
+------------+
| version() |
+------------+
| 4.1.20-log |
+------------+
1 row in set (0.02 sec)

ACCISGNACION DE CONTRASEÑAS
Una vez que hemos conocido algunas sentencias de MySQL, es importante retomar un
tema muy importante; hemos visto que se crean dos bases de datos al momento de
instalar MySQL y además de estas, se crean dos usuarios; uno es el usuario
“root”, que es el propietario de la base de datos (ojo, no nos referimos al
usuario del sistema operativo) y se crea el usuario “anónimo”; ambos no tienen un
password asignado lo cual es peligroso, de esto deducimos que una de las primeras
cosas a realizar es asignar un password a el usuario 2root” con el objeto de
proteger nuestra base de datos.
Lo primero que tenemos que hacer para asignar dicha contraseña es identificar en
que tabla se tiene que realizar dicha acción; para esto es necesario conocer como
mostrar las tablas que tenemos dentro de una base de datos, lo cual se realiza con
la sintaxis siguiente:
MySQL> show tables;
+---------------------------+
| Tables_in_MySQL |
+---------------------------+
| columns_priv |
| db |
| func |
| help_category |
| help_keyword |
| help_relation |
| help_topic |
| host |
| tables_priv |
| time_zone |
| time_zone_leap_second |
| time_zone_name |
| time_zone_transition |
| time_zone_transition_type |
| user |
| user_info |
+---------------------------+
16 rows in set (0.00 sec)

En el listado de tablas identificamos user, la cual almacena la lista de usuarios


que se han creado para conectarse a MySQL. Vamos a mostrar solamente algunas
columnas de esta tabla:
MySQL> select Host,User,Password from user;
+------------+------+----------+
| Host | User |Password |
+------------+------+----------+
| localhost | root | |
| 10.4.1.170 | root | |
| localhost | | |
| 10.4.1.170 | | |
+------------+------+----------+
4 rows in set (1.95 sec)

La sentencia anterior nos esta mostrando en pantalla en primer lugar el host desde
donde se puede conectar, en segundo el usuario y en tercero la contraseña, la cual
esta vacía.
El siguiente paso a realizar es asignar una contraseña a cada uno de estos
usuarios:
MySQL> UPDATE user SET Password=PASSWORD('nuevo_password') WHERE User ='root';
MySQL> FLUSH PRIVILEGES;
MySQL> select Host,User,Password from user;
+------------+------+------------------+
| Host | User | Password |
+------------+------+------------------+
| localhost | root | 6463ccf92ccda0ff |
| 10.4.1.170 | root | 6463ccf92ccda0ff |
| localhost | | |
| 10.4.1.170 | | |
+------------+------+------------------+
4 rows in set (0.01 sec)

Una vez realizada dicha acción, la siguiente vez que el usuario entre a MySQL,
deberá utilizar el parámetro "-p" para que se le solicite el password nuevo, como
ya se explicó anteriormente. En caso contrario nos mostraría un error como este
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
El comando FLUSH PRIVILEGES es muy importante y se debe ejecutar cada vez que se
cambie la configuración de accesos a una o varias bases de datos, ya que en caso
contrario se requerir�a que el servidor se detuviera y reiniciara para que los
cambios tomaran efecto.

ACCESO
Para accesar solo hay que escribir en una terminal
$ mysql -u root -p y enter aparecesa algo como esto
$ Enter Password: se escribe la contraseña y enter

y listo nos va ha dar un mensaje de bienvenida y el promp como se muestra a


continuacion mysql>
CREAR BASES DE DATOS
mysql> create database BaseDatos1;

CREAR USUARIOS
El siguiente paso a realizar es la creación de un usuario que pueda acceder a la
nueva base de datos, con el objeto de que éste tenga un los privilegios necesarios
para conectarse y realizar ciertas sentencias en una base de datos asignada. La
sintaxis es la siguiente:
shell> MySQL -u root MySQL -p
MySQL> GRANT ALL PRIVILEGES ON BaseDatos.*
-> to usuario@localhost
-> IDENTIFIED BY 'password';
MySQL> FLUSH PRIVILEGES;

En esta sintaxis identificamos lo siguiente: la instrucción grant es aquella que


asigna los permisos para que un usuario se conecta; en este ejemplo estamos
especificando que el usuario pueda realizar cualquier acción en la base de datos
deseada; si no especificamos el .* después del nombre de la base de datos, no
podremos trabajar en ella; la definición usuario@localhost especifica quien y desde
donde puede conectarse, en este caso creamos la cuenta “usuario” la cual puede
conectarse solamente desde localhost; posteriormente asignamos la contraseña que
deseamos asignar al usuario creado mediante identified by 'password';
automáticamente encripta la contraseña.
Existen muchas opciones para asignar privilegios a usuarios entre las cuales
tenemos las siguientes:
GRANT ALL PRIVILEGES ON BaseDatos.*
-> # desde cualquier servidor de un dominio
-> to [email protected]
-> IDENTIFIED BY 'password';
MySQL> FLUSH PRIVILEGES;

MySQL> GRANT ALL PRIVILEGES ON BaseDatos.*


-> desde una dirección IP fija
-> to [email protected]
-> IDENTIFIED BY 'password';
MySQL> FLUSH PRIVILEGES;

MySQL> GRANT SELECT, INSERT, UPDATE ON BaseDatos.*


-> # no puede eliminar registros desde una dirección�n IP fija
-> to [email protected]
-> IDENTIFIED BY 'password';
MySQL> FLUSH PRIVILEGES;

Recuerden siempre actualizar el password del usuario para encriptarlo y luego


ejecutar FLUSH PRIVILEGES para refrescar los permisos. Se pueden especificar
comodines (wild cards) para definir el host desde donde se puede trabajar, en el
siguiente ejemplo permitimos que cualquier host en "dominio.com" pueda trabajar en
el servidor.
usuario@%.dominio.com"

Permite que cualquier usuario de la red "144.155.166" tenga acceso al servidor de


DB.
[email protected].%"

Si deseamos eliminar un privilegio a un usuario, usamos la siguiente sintaxis:


MySQL> REVOKE ALTER, DELETE ON BaseDatos.*
X-> from usuario@localhost;
MySQL> FLUSH PRIVILEGES;
La lista de privilegios que se pueden otorgar/revocar son:
ALL PRIVILEGES
ALTER
CREATE
DELETE
DROP
FILE
INDEX
INSERT
PROCESS
RELOAD
SELECT
SHUTDOWN
UPDATE
REFERENCES
USAGE

CREAR TABLAS
mysql>
create table tabla1(
id_reg int not null auto_increment primary key,
nombre varchar(100) not null default “”,
paterno varchar(100) not null default “”,
materno varchar(100) not null default “”,
direccion text,
telefono varchar(50) not null default “”,
correo varchar(50) not null default “”,
fec_nac date not null default “0000-00-00”
);

FOREIGN KEY
mysql>
create table tabla2(
id_reg int not null auto_increment primary key,
nombre varchar(100) not null,
paterno varchar(100) not null,
materno varchar(100) not null,
sucursal int not null default 0,
FOREIGN KEY (sucursal) REFERENCES sucursales (id_sucursales)
)type=INNODB;

TIPOS DE DATOS
La siguiente tabla nos muestra los tipos de dato más importante que maneja MySQL:

Nombre Descripción Características


Cadena de caracteres entre 0 y 255,
cuando se declara en una columna los
Ocupa más espacio que VARCHAR
campos siempre tienen la misma
CHAR pero es más rápido para indexar
extensión. Si se le envía un cadena
y realizar consultas.
más grande que su tamaño declarado,
los trunca para ajustar.
Cadena de caracteres entre 0 y 255,
cuando se declara en una columna los
campos se ajustan al n�mero de Ocupa menos espacio que CHAR
VARCHAR caracteres más uno, que es de control. pero puede tardar un poco más
Si se le envía un cadena más grande para indexar.
que su tamaño declarado, los trunca
para ajustar.
Su tamaño máximo es de 21
caracteres. No reconoce cadenas
de texto, puntos o decimales, es
INT Integer; es un número entero. el campo sobre el que
regularmente se maneja la llave
primaria al hacerlo auto
incremental
Su tamaño máximo es de 21
caracteres. No reconoce cadenas
Integer; es un número entero con una de texto, puntos o decimales, al
DECIMAL
serie de posiciones después del punto. crearse se definen el número de
posiciones que manejará después
del punto.
Estos datos pueden ser de
Puede ser también sólo DATE y TIME.
sistema o incluidos por el
DATETIME Reconoce respectivamente la fecha y
usuario, su formato es aaaa-mm-
hora.
dd hh:mm:ss.
Cadena variable de caracteres de gran Las búsquedas y comparaciones
BLOB
tamaño, tiene cuatro tipos de tamaño. son sensibles a las mayúsculas.
Las búsquedas y comparaciones
Cadena variable de caracteres de gran
TEXT son NO sensibles a las
tamaño similar al blob.
mayúsculas.
Su contenido se puede seleccionar una
La enumeración puede tener un
ENUM lista de valores predeterminados. No
máximo de 65,535 elementos.
puede contener valores nulos
Puede contener cero o más valores,
El conjunto puede contener hasta
SET tomados de una lista definida para
64 miembros.
este fin.
Además de los anteriores podemos encontrar los siguientes:
TinyInt: es un número entero con o sin signo. Con signo el rango de valores válidos
va desde -128 a 127. Sin signo, el rango de valores es de 0 a 255.
Bit ó Bool: un número entero que puede ser 0 ó 1.
SmallInt: número entero con o sin signo. Con signo el rango de valores va
desde -32768 a 32767. Sin signo, el rango de valores es de 0 a 65535.
MediumInt: número entero con o sin signo. Con signo el rango de valores va
desde -8.388.608 a 8.388.607. Sin signo el rango va desde 0 a16777215.
Integer, Int: número entero con o sin signo. Con signo el rango de valores va
desde -2147483648 a 2147483647. Sin signo el rango va desde 0 a 429.4967.295
BigInt: número entero con o sin signo. Con signo el rango de valores va desde
-9.223.372.036.854.775.808 a 9.223.372.036.854.775.807. Sin signo el rango va
desde 0 a 18.446.744.073.709.551.615.
Float: número pequeño en coma flotante de precisión simple. Los valores
válidos van desde -3.402823466E+38 a -1.175494351E-38, 0 y desde
1.175494351E-38 a 3.402823466E+38.
xReal, Double: número en coma flotante de precisión doble. Los valores
permitidos van desde-1.7976931348623157E+308 a -2.2250738585072014E-308, 0 y
desde 2.2250738585072014E-308 a 1.7976931348623157E+308

AGREGAR DATOS
mysql> insert into tabla1 values (“0”, ”ALFREDO”, ”CASTILLEJOS”, ”SANCHEZ”, ”C.
LOPEZ PORTILLO COL AGUAZUL DEL. BENITO JUAREZ”, ”55467790”,
[email protected]”,”1982-03-19”);

CREAR CONSULTAS DE DATOS


mysql> Select * from tabla1;

Donde:
select es la acción a realizar.
* es un comodín que indica todas las columnas. Se puede especificar una o más
columnas mediante su nombre.
from reclutamiento es la tabla que utilizaremos.
Otras opciones son:
MySQL> select Nombre from reclutamiento;
+----------+
| Nombre |
+----------+
| Hugo |
| Ramón |
| Arturo |
| Joaquín |
| Hiram |
| ilozada |
| Socorro |
+----------+
7 rows in set (0.02 sec)

Sólo presenta la columna del nombre, mientras que:


MySQL> select Nombre,Edad from reclutamiento;
+----------+------+
| Nombre | Edad |
+----------+------+
| Hugo | 34 |
| Ramón | 46 |
| Arturo | 36 |
| Joaquín | 20 |
| Hiram | 32 |
| ilozada | 35 |
| Socorro | 35 |
+----------+------+
7 rows in set (0.00 sec)

Presenta tanto el nombre como la edad. Siendo más precisos tenemos:


MySQL> select Nombre,Edad from reclutamiento where ID='1';
+--------+------+
| Nombre | Edad |
+--------+------+
| Hugo | 34 |
+--------+------+
1 row in set (0.05 sec)

Presenta el nombre y edad del registro cuyo ID es 1; si deseamos filtrar los


resultados, podemos hacerlo así:
MySQL> select Nombre,Edad from reclutamiento
-> where (Edad='34' AND Nombre='Hugo');
+--------+------+
| Nombre | Edad |
+--------+------+
| Hugo | 34 |
+--------+------+
1 row in set (0.05 sec)

Lo que despliega la información de los registros que cumplan todas las condiciones,
en caso de existir. Igualmente podemos filtrar con más de una variable el
resultado:
MySQL> select Nombre,Edad from reclutamiento where ID='1' OR ID='2';
+--------+------+
| Nombre | Edad |
+--------+------+
| Hugo | 34 |
| Ramón | 46 |
+--------+------+
2 rows in set (1.68 sec)

Podemos limitar el número de registros que se despliegan de la siguiente forma:


MySQL> select Nombre,Edad from reclutamiento limit 4;
+---------+------+
| Nombre | Edad |
+---------+------+
| Hugo | 34 |
| Ramón | 46 |
| Arturo | 36 |
| Joaquin | 20 |
+---------+------+
4 rows in set (0.01 sec)

Con lo que presentará sólo los primeros cuatro registros que encuentre; si por el
contrario necesitamos darle un orden específico, sería:
MySQL> select Nombre,Edad from reclutamiento order by Edad;
+----------+------+
| Nombre | Edad |
+----------+------+
| Joaquin | 20 |
| Hiram | 32 |
| Hugo | 34 |
| ilozada | 35 |
| Socorro | 35 |
| Arturo | 36 |
| Ramón | 46 |
+----------+------+
7 rows in set (0.04 sec)

Lo que presenta los registros ordenados por la edad; no se necesita declarar la


columna con la que se ordena en el select para que funcione. En caso que
necesitemos darle un orden específico podemos hacer lo siguiente:
MySQL> select Nombre,Edad from reclutamiento ORDER BY Edad DESC;
+----------+------+
| Nombre | Edad |
+----------+------+
| Ramón | 46 |
| Arturo | 36 |
| Ernesto | 35 |
| Socorro | 35 |
| Hugo | 34 |
| Hiram | 32 |
| Joaquin | 20 |
+----------+------+
7 rows in set (0.01 sec)

Por defecto, MySQL ordena los registros en base a la llave primaria o en caso de no
existir, en base a la primera columna en orden ascendente (de la A a la Z, del 1 al
9), sin embargo podemos forzar que lo ordene en orden descendente con la
instrucción DESC. Si viéramos la tabla utilizando todas estas funciones podemos
hacerlo así:
MySQL> select Nombre,Edad,Sueldo from reclutamiento
-> ORDER by Sueldo desc limit 5;
+---------+------+--------+
| Nombre | Edad | Sueldo |
+---------+------+--------+
| Hugo | 34 | 19500 |
| Ramón | 46 | 16850 |
| Socorro | 35 | 14000 |
| Hiram | 32 | 12500 |
| Joaquín | 20 | 9000 |
+---------+------+--------+
5 rows in set (0.07 sec)

CREAR CONSULTAS ELIMINACION TODO


mysql> delete from tabla1;

Crear consultas eliminacion algunos


mysql> delete from tabla1 where id_reg = 2;

La última instrucción que veremos es para eliminar registros de una tabla, lo cual
se realiza con la instrucción DELETE su sintaxis es la siguiente:
MySQL> delete from table where registro="valor";

Donde:
delete es la instrucción que ejecuta el borrado de información.
from table indica la tabla en que efectuamos la acción.
where registro="valor" define el parámetro para identificarlo, puede ser el
ID, el nombre o cualquier otro. En MySQL 3.23 generaba un error cuando no se
encontraba esta clausula, en la versión 4.0 ya no es requerido.
Un ejemplo, basado en los datos de la tabla "reclutamiento", sería:
MySQL> delete from reclutamiento where ID=3;
Query OK, 1 row affected (0.15 sec)

Para los siguientes ejercicios, deberemos crear unas tablas nuevas.


create table estados (
EdoID bigint(21) NOT NULL auto_increment primary key,
nombreEdo varchar(200) NOT NULL,
Edopais varchar(10) NOT NULL
);

insert into estados (nombreEdo,Edopais) values ('Aguascalientes','MX');


insert into estados (nombreEdo,Edopais) values ('Baja California','MX');
insert into estados (nombreEdo,Edopais) values ('Baja California Sur','MX');
insert into estados (nombreEdo,Edopais) values ('Campeche','MX');
insert into estados (nombreEdo,Edopais) values ('Chiapas','MX');
insert into estados (nombreEdo,Edopais) values ('Chihuahua','MX');
insert into estados (nombreEdo,Edopais) values ('Coahuila','MX');

CREATE TABLE paises (


CountID bigint(21) NOT NULL auto_increment,
countcode varchar(20) DEFAULT '' NOT NULL,
country varchar(200) DEFAULT '' NOT NULL,
PRIMARY KEY (CountID)
);

INSERT INTO paises (countcode,country) values ('HN','Honduras');


INSERT INTO paises (countcode,country) values ('JM','Jamaica');
INSERT INTO paises (countcode,country) values ('MX','México');
INSERT INTO paises (countcode,country) values ('PA','Panamá');
INSERT INTO paises (countcode,country) values ('PE','Perú');

Ahora probaremos esta opción:


MySQL> DELETE FROM estados WHERE Edopais="MX" ORDER BY nombreEdo DESC limit 1;
Query OK, 1 row affected (0.04 sec)

Al igual que SELECT, lo podemos parametrizar para darle un límite, un orden y


especificar un rango de acción. En este ejemplo estamos eliminando el último
registro, en orden alfabético, que aparece en una tabla dada.
CREAR CONSULTAS DE MODIFICACION
mysql> update tabla1 set nombre = “MARCO” WHERE id_reg = 2;

Es muy frecuente que no surja la necesidad de modificar la información que tenemos


almacenada en la base de datos; para poder realizar ducha acción utilizaremos la
instrucción UPDATE la cual tiene las siguiente sintaxis:
MySQL> UPDATE tabla SET columna = "nuevo contenido" WHERE ID="id";

UPDATE tabla a modificar.


SET columna = "nuevo contenido" indica el nuevo contenido.
WHERE ID="id" identifica el registro que se modificará. En caso de no
definirse, modificará todos los registros de la tabla.
Ejemplificando, actualicemos algunos de los registros de la tabla "reclutamiento":
MySQL> UPDATE reclutamiento SET Nombre = "Iván Lozada" WHERE ID="1";
Query OK, 1 row affected (0.31 sec)
Rows matched: 1 Changed: 1 Warnings: 0

MySQL> UPDATE reclutamiento SET Edad = "21" WHERE Nombre="Joaquín";


Query OK, 1 row affected (0.29 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Además podemos actualizar la información de más de una columna a la vez:


MySQL> UPDATE reclutamiento SET Nombre = "Ernesto Galicia",
-> Edad="35" WHERE ID="3";
Query OK, 1 row affected (0.04 sec)
Rows matched: 1 Changed: 1 Warnings: 0

En los casos en que deseemos actualizar información por bloque, podemos realizarlo
como el siguiente ejemplo:
MySQL> UPDATE reclutamiento SET Sueldo = "10000" WHERE Sueldo<"9000";
Query OK, 3 rows affected (0.02 sec)
Rows matched: 3 Changed: 3 Warnings: 0

Además podemos realizar operaciones matemáticas con la información contenida en los


registros, cuando el contenido de la columna es un número:
MySQL> UPDATE reclutamiento set Edad=Edad+1;
Query OK, 7 rows affected (0.06 sec)
Rows matched: 7 Changed: 7 Warnings: 0

Esto incrementa una unidad a todos los registros de la tabla. También podemos
hacerlo sobre registros específicos:
MySQL> UPDATE reclutamiento SET Sueldo=Sueldo*1.15 WHERE Nombre="Socorro";
Query OK, 1 row affected (0.10 sec)
Rows matched: 1 Changed: 1 Warnings: 0
Este ejemplo multiplica por 1.15 el contenido de la celda Sueldo. Debemos notar que
no utilizamos comillas cuando nos referimos a campos con valores numéricos, de
manera que se tomen como tales, en caso contrario se manejan como cadenas de texto.
MySQL> UPDATE piezas,periodo SET piezas.precio=periodo.precio
-> WHERE piezas.id=periodo.id;
Query OK, 2 row affected (0.10 sec)
Rows matched: 2 Changed: 2 Warnings: 0

CREAR CONSULTAS DE DATOS CON PARAMETROS


Between
mysql> Select * from tabla1 where between “2008-01-01” and “2008-04-01”;

order by ACS, DES


mysql> Select * from tabla1 where between “2008-01-01” and “2008-04-01” order by nombre ACS;

mysql> Select * from tabla1 where between “2008-01-01” and “2008-04-01” order by nombre DESC;

Limit
mysql> Select * from tabla1 limit 1;

Group BY
mysql> Select * from tabla1 group by nombre;

Having
mysql> Select * from tabla1 group by nombre having nombre like “A%”;

Alias
mysql> Select sum(can) as cantidades from tabla1;

Distinct
mysql> Select distinct nombre from tabla1;

CREAR CONSULTAS DE DATOS CON FUNCIONES


sum
mysql> Select sum(can) as cantidades from tabla1;

avg
mysql> Select avg(can) as cantidades from tabla1;

min, max
mysql> Select min(can) as minim, max(can) as maxim from tabla1;

count
mysql> Select count(*) as num_reg from tabla1;

CREAR CONSULTAS DE DATOS CON FORMATO DE SALIDA


mysql> Select nombre, DATE_FORMAT(fec_nac,”%Y/%m%d”) as fec from tabla1 where
between “2008-01-01” and “2008-04-01” order by nombre ACS;

CREAR CONSULTAS DE DATOS VARIAS TABLAS


Inner Join
mysql> Select tabla1.* from tabla1 INNER JOIN tabla2 ON tabla1.n_reg = tabla2.registro where
tabla1.nombre like “A%”;

Right Join
mysql> SELECT table1.* FROM table1 RIGHT JOIN table2 ON table1.id=table2.id WHERE table2.id IS
NULL;

left Join
mysql> SELECT table1.* FROM table1 LEFT JOIN table2 ON table1.id=table2.id WHERE table2.id IS NULL;

CREAR Y ELIMINAR USUARIOS


Grant
mysql> GRANT ALL ON bases.tablas TO alfredo@localhost IDENTIFIED BY “clave” WITH GRANT OPTION;

Revoke
mysql> REVOKE ALL PRIVILEGES ON widgets.* FROM widgetAdmin@localhost;

ALTERAR TABLAS
Cambiar nombre a las tablas
mysql> ALTER TABLE tabla1 RENAME tabla2;

Cambiar el tipo de datos a un campo


mysql> ALTER TABLE tabla MODIFY campo TEXT NOT NULL;

Cambiar nombre de un campo


mysql> ALTER TABLE tabla1 CHANGE campo camponuevo INTEGER;
Agregar un campo
mysql> ALTER TABLE tabla1 ADD COLUMN columna int not null;

Eliminar un campo
mysql> ALTER TABLE tabla1 DROP columna_a_eliminar;

Importar información
Una situación que es muy probable que se presente es la importación de información
cuyo origen sea un archivo de texto plano. Para esto utilizaremos el comando
mysqlimport
Este es un script externo que se ejecuta desde la línea de comandos. Tiene algunas
consideraciones importantes antes de querer utilizarlo:
Generalmente graba el contenido del archivo en una tabla con el mismo nombre;
es decir, si el archivo se llama "importar.txt", buscará una tabla llamada
"importar", por lo que debe existir previamente.
Por defecto, cada campo lo separa mediante un tabulador, opcionalmente se
pueden utilizar comas.
En caso de producirse errores, manda un resultado con el total de alertas,
pero no explica en que consisten o por que se produjeron.
Los campos yacios en principio deberían de contener algo, pero es valido
dejarlo sin nada y colocar un segundo tabulador, pero esto incrementa el
número de alertas (sin embargo, realiza la importación). En los campos
numéricos es posible dejar un cero ('0') como valor, ya que es de por si su
contenido por defecto.
La sintaxis básica es:
[root@server carpeta]$ mysqlimport [opciones] basededatos archivo1 [archivo2 ...]

mysqlimport soporta las siguientes opciones:


--help, -?
Muestra un mensaje de ayuda y sale.
--columns=lista_de_columnas, -c lista_de_columnas
Esta opción admite una lista de nombres de columnas separados por comas. El orden
de los nombres de columna indica cómo emparejar las columnas de los ficheros de
datos con las columnas de la tabla.
--compress, -C
Comprime toda la información enviada entre el cliente y el servidor, si ambos
soportan compresión.
--debug[=opciones_de_depuración], -# [opciones_de_depuración]
Escribe un log de depuración. La cadena de caracteres opciones_de_depuración a
menudo es 'd:t:o,nombre_de_fichero'.
--delete, -D
Vacía la tabla antes de importar el fichero de texto.
--fields-terminated-by=..., --fields-enclosed-by=
Especifica el separador de cada columna en caso de no elegir la opción tabulador;
la segunda opción permite especificar el carácter en el cual cada columna esta
encerrado ejemplo “hola”.
--force, -f
Ignora errores. Por ejemplo, si una tabla para un fichero de texto no existe, sigue
procesando el resto de ficheros. Sin --force, mysqlimport finaliza si la tabla no
existe.
--host=nombre_de_equipo, -h nombre_de_equipo
Importa datos al servidor MySQL en el equipo dado. El equipo por defecto es
localhost.
--ignore, -i
Consulte la descripción para la opción --replace.
--ignore-lines=n
Ignora las primeras n líneas del fichero de datos.
--local, -L
Lee los ficheros de entrada localmente del equipo cliente.
--lock-tables, -l
Bloquea todas las tablas para escritura antes de procesar cualquier fichero de
texto. Esto asegura que todas las tablas estén sincronizadas en el servidor.
--password[=contraseña], -p[contraseña]
La contraseña a usar cuando se conecta al servidor. Si usa la opción en su forma
corta (-p), no puede haber un espacio entre la opción y la contraseña. Si omite el
valor de contraseña a continuación de --password o -p en la línea de comandos,
aparece un prompt para que lo introduzca.
--port=número_de_puerto, -P número_de_puerto
El puerto TCP/IP para usar en la conexión.
--protocol={TCP | SOCKET | PIPE | MEMORY}
El protocolo de conexión a usar. Nuevo en MySQL 4.1.
--replace, -r
Las opciones --replace y --ignore controlan el tratamiento de registros de entrada
que duplican registros existentes con valores clave únicos. Si especifica --
replace, los nuevos registros remplazan los existentes que tengan el mismo valor
clave. Si especifica --ignore, los registros nuevos que duplican un registro
existente con el mismo valor clave se ignoran. Si no especifica ninguna opción, se
produce un error cuando se encuentra un valor duplicado, y el resto del fichero de
texto se ignora.
--silent, -s
Modo silencioso. Sólo muestra mensajes de error.
--socket=ruta, -S ruta
Fichero socket a usar al conectar con localhost (que es el equipo por defecto).
--user=nombre_de_usuario, -u nombre_de_usuario
El nombre de usuario MySQL a usar cuando se conecta con el servidor.
--verbose, -v
Modo explícito. Muestra más información sobre lo que hace el programa.
--version, -V
Muestra información de versión y sale.
Existen algunas opciones más, pero con estas podemos trabajar y hacer algunos
ejercicios básicos. Por comienzo de cuentas vamos a crear una tabla llamada toons
en MySQL, lo que haremos en la base de datos "prueba".
MySQL> CREATE TABLE toons (
-> id INT auto_increment primary key,
-> nombre VARCHAR(30),
-> animal VARCHAR(30)
-> );
Query OK, 0 rows affected (0.09 sec)

Acto seguido creamos la siguiente lista y la salvamos con el nombre "toons.txt",


cuidando de separar sus elementos con un sólo tabulador:
0 Bugs Conejo
0 Daffy Pato
0 Elmer Cazador
0 Willie Coyote
0 Claudio Gallo

Desde la línea de comandos (no en MySQL) ejecutamos:


[root@server carpeta]$ mysqlimport -u root -p -v --local prueba toons.txt
Enter password:
Connecting to localhost
Selecting database prueba
Deleting the old data from table toons
Loading data from LOCAL file: toons.txt into toons
prueba.toons: Records: 5 Deleted: 0 Skipped: 0 Warnings: 0
Disconnecting from localhost

Debemos estar en la carpeta donde se encuentra el archivo 'toons.txt' o en su


defecto, poner la ruta completa. Hemos colocado la opción -v para que nos mande
todos los mensajes que se generen (lo podemos eliminar) y la opción --local para
forzar a que se busque el archivo en la máquina local. Los mensajes que vemos a
continuación nos indican lo que está realizando el manejador y si seleccionamos el
contenido de la tabla tendremos:
MySQL> select * from toons;
+----+---------+---------+
| id | nombre | animal |
+----+---------+---------+
| 1 | Bugs | Conejo |
| 2 | Daffy | Pato |
| 3 | Elmer | Cazador |
| 4 | Willie | Coyote |
| 5 | Claudio | Gallo |
+----+---------+---------+
5 rows in set (0.12 sec)

Debemos notar que el id, al ser auto incremental, sólo requiere de un cero para
declarase, pero esto se puede realizar con un espacio en blanco, como veremos en el
siguiente ejercicio donde cambiamos algunos registros y utilizamos el parámetro -d
para que elimine el contenido original. Este es el nuevo toons.txt: Bugs Conejo
Daffy Pato Elmer Cazador Willie Coyote Claudio Gallo Piolin Canario Abuela
Debemos denotar que después del nombre "Abuela" existe un tabulador, para que se
tome como vacío el campo siguiente.
Acto seguido ejecutamos:
[root@server carpeta]$ mysqlimport -u root -p -d --local prueba toons.txt
Enter password:
prueba.toons: Records: 7 Deleted: 0 Skipped: 0 Warnings: 8

Y en la tabla encontramos:
MySQL> select * from toons;
+----+---------+---------+
| id | nombre | animal |
+----+---------+---------+
| 6 | Bugs | Conejo |
| 7 | Daffy | Pato |
| 8 | Elmer | Cazador |
| 9 | Willie | Coyote |
| 10 | Claudio | Gallo |
| 11 | Piolin | Canario |
| 12 | Abuela | NULL |
+----+---------+---------+
7 rows in set (0.01 sec)

Como se aprecia, el último campo quedo con valor 'NULL', que es considerado como un
valor inexistente dentro de una tabla. Otro detalle es que, si bien se
reescribieron los registros, el conteo comenzó en donde había terminado el anterior
(sólo en MySQL 4.04), aunque es posible asignar un número determinado desde el
archivo de texto, siempre y cuando no se repita.

Respaldos de las bases de datos


Es muy frecuente que tengamos que realizar respaldos de la información, simplemente
por acción preventiva; el disco duro deja de funcionar, Con el tiempo es muy
factible que necesitemos mover nuestras tablas de una base de datos a otra e
incluso, de servidor a servidor; para llevar acabo esta acción tenemos las
siguientes opciones:

mysqldump
Es muy recomendable utilizar la utilería mysqldump, que descarga todo el contenido
de una tabla, tablas o bases de datos en formato de texto con sentencias SQL, lo
que facilita moverlo y volverlo a subir. Su sintaxis básica es la siguiente:
[root@server carpeta]$ mysqldump [opciones] nombre_DataBase [tablas]

Algunas de las opciones que hemos encontrado más útiles para este proceso,
dependiendo de las necesidades, son:
--add-drop-table. Define la sintaxis para que se elimine una tabla antes de
crearla en la DB de destino.
-B, --databases. Descarga todo el contenido de una DB.
--help. Despliega la ayuda.
-F, --flush-logs. Elimina el archivo de logs antes de descargar.
-q, --quick. No manda la salida al buffer, sino directamente al destino.
Estas son sólo unas opciones, contándose cerca de treinta y con variaciones en la
sintaxis de cada una. Un ejemplo práctico, recordando que creamos una tabla llamada
"reclutamiento", en una base de datos llamada "prueba" y cuyo usuario sea "user",
es:
[root@server carpeta]$ mysqldump -q -u user prueba -p > respaldo.sql

Con esto se nos preguntará el password del usuario "user" y acto seguido se creará
una copia de TODAS las tablas de la base de datos llamada "prueba", el uso de "-q"
es recomendado con tablas muy grandes. Todo el contenido se vertirá en un archivo
llamado "respaldo.sql" junto con sintaxis SQL que facilitará subirla posteriormente
a otro base de datos. Debemos aclarar que en Windows es algo diferente, ya que en
Unix se toma por defecto al usuario activo si no se especifica uno con el parámetro
"-u", pero en Win9x/Me no es necesario, ya que al no ser un ambiente multiusuario
real, siempre se supone que se es root, por lo que la sintaxis será:
C:\> mysqldump -q [base_de_datos] > respaldo.sql

El archivo de respaldo puede ser visto desde un editor de texto (como el block de
notas de Windows o Emacs en Unix), donde veremos que incluye toda la sintaxis para
poder restablecerla en otro lado, aunque no sea en MySQL. Para restaurar la base de
datos, s�lo necesitamos teclear lo siguiente:
[root@server carpeta]$ MySQL -u usuario nombre_DB -p < respaldo.sql

Otras formas muy útiles de este comando son:


[root@server carpeta]$ mysqldump -u usuario nombre_DB -p --opt
> respaldo.sql

Donde el parámetro --opt (por "óptimo") incluye las opciones --add-drop-table --


add-locks --all --quick --extended-insert --lock-tables --disable-keys, lo que
asegura las tablas antes de copiarlas e incluye opciones SQL como la creación de la
base de datos y la tabla si no existe.
[root@server carpeta]$ mysqldump -u root -p --opt --all-databases >
respaldo.sql

Crea una copia de todas las bases de datos, incluyendo la de MySQL, sin embargo
requiere que el usuario sea el root del servidor de bases de datos. Una opción
similar es:
[root@server carpeta]$ mysqldump -u usuario -p --opt --databases
base1 base2 base3 > respaldo.sql

Donde definimos una a una, las bases de datos que queremos respaldar.
[root@server carpeta]$ mysqldump -u usuario -p --opt
--all-databases | gzip > respaldo.sql.gz

Una característica interesante, pero propia de los servidores Linux/Unix, es poder


crear un archivo en formato GZIP (equivalente al ZIP de Windows) con el respaldo de
las bases de datos.
[root@server carpeta]$ mysqldump -u usuario -p --opt
--all-databases -X > respaldo.sql.xml

El parámetro -X o --xml genera un archivo en formato XML que puede convertirse


posteriormente a otros formatos.
[root@server carpeta]$ mysqldump -u usuario nombre_DB -p --no-data
> respaldo.sql
En este caso, el parámetro --no-data genera la estructura de las tablas pero no el
contenido dentro del archivo de respaldo.
[root@server carpeta]$ mysqldump -u usuario -p --host=host1
--opt nombre_DB | MySQL --host=host2 -C nueva_DB

Una última forma, muy sofisticada, es esta donde podemos respaldar de un servidor a
otro. Con el parámetro --host se define el origen (generalmente localhost), con una
pipeta (|) indicará que se enviará a otro servidor con un segundo --host, que puede
ser una dirección IP o un nombre de dominio, para terminar con -C que comprime los
datos mientras se transfieren, siempre y cuando ambos equipos soporten la opción.
Una limitante muy importante es que no respalda índices, por lo que en tablas muy
grandes con esta opción, pueden tardar mucho tiempo en restaurarse.

mysqlhotcopy
Una actividad que todo administrador debe realizar, lo más frecuentemente que se
pueda, es un respaldo de la información. En el caso de MySQL se recomienda utilizar
mysqlhotcopy, que genera copias locales ESTABLES (puede funcionar en un servidor en
producción) y SEGURAS (sin corrupciones de los datos respaldados). Importante: Se
requiere el módulo de Perl para MySQL instalado (DBD-MySQL) y el módulo de
conectividad a bases de datos (Perl-DBI), en caso contrario fallará. A diferencia
de mysqldump, esta utilería crea una copia de los archivos .frm, .MYI y .MYD de
cada tabla y las agrupa en una carpeta con el mismo nombre que la base de datos.
La sintaxis básica es como la siguiente:
[root@server carpeta]$ mysqlhotcopy nombre_DB -u usuario -p password
[root@server carpeta]$ mysqlhotcopy nombre_DB -u usuario -p password
[root@server carpeta]$ mysqlhotcopy nombre_DB_1 nombre_DB_2 ... nombre_DB_N -u usuario -p
password
[root@server carpeta]$ mysqlhotcopy nombre_DB./regex/ -u usuario -p password

Las opciones del comando son:


?, --help Presenta la pantalla de ayuda
u, --user=# Usuario de la base de datos
p, --password=# Password del usuario
P, --port=# Puerto para conectarse al servidor de DB
S, --socket=# Socket para conectarse a la DB
allowold Crea una copia con extensión _old si ya existe el destino
keepold Mantiene una copia anterior.
noindices No incluye los índices.
method=# Método de copiado (cp o scp).
q, --quiet Sólo manda mensajes en caso de error.
debug Permite buscar errores.
n, --dryrun Reporta las acciones sin realizarlas.
regexp=# Copia todas las bases de datos cuyo nombre incluya regexp.
suffix=# Inserta sufijos en los nombres de las DB copiadas.
checkpoint=# Inserta un checkpoint en una tabla específica.
flushlog Elimina los logs una vez que se aplica el lock a todas las
tablas.
tmpdir=# Define el directorio temporal (en vez de /tmp).
Un claro ejemplo de este comando es:
[root@server carpeta]$ mysqlhotcopy nombre_DB /ruta/a/la/carpeta
-u=root -p=password --debug

En este caso se genera nuestra copia de la base de datos deseada en la carpeta


seleccionada, con el modo para checar los errores del proceso. Suponiendo que ya
hayamos realizado este proceso anteriormente, utilizamos:
[root@server carpeta]$ mysqlhotcopy nombre_DB /ruta/a/la/carpeta
-u=root -p=password --allowold

Con esto se crea una copia del respaldo anterior en carpeta_old. Un requisito de
este comando es que, debido a que tiene que leer el contenido de /var/lib/MySQL, es
necesario ejecutarlo como root de Unix. Pueden leer la documentación completa si
teclean perldoc /usr/bin/mysqlhotcopy en su línea de comandos.

PHP y MYSQL

FUNCIONES PHP PARA MYSQL


mysql_affected_rows
devuelve el número de filas afectadas en la ultima sentencia INSERT, UPDATE o
DELETE sobre el servidor asociado con el identificador de enlace especificado. Si
el identificador de enlace no ha sido especificado, se asume por defecto el último
enlace.
mysql_change_user
cambia el usuario conectado en la actual conexión activa, o si se especifica, en la
conexión determinada por el identificador de enlace. Si se especifica la base de
datos, esta será la base por defecto después del cambio de usuario. Si la nueva
combinación de usuario/ password no esta autorizada, el usuario actualmente
conectado permanece activo.
mysql_close
cierra el enlace con la base MySQL que esta asociada con el identificador de enlace
especificado. Si no se especifica el identificador de enlace, se asume por defecto
el último enlace.
mysql_connect
establece una conexión a un servidor MySQL. Todos los argumentos son opcionales, y
si no hay , se asumen los valores por defecto (’localhost’, usuario propietario
del proceso del servidor, password vacia).
mysql_create_db
intenta crear una base nueva en el servidor asociado al identificador de enlace.
mysql_data_seek
mueve el puntero de fila interno a la fila especificada para el identificador de
resultado. La próxima llamada a mysql_fetch_row() devolverá esa fila.
mysql_db_query
selecciona una base y ejecuta una sentencia en ella. Si el identificador de enlace
no ha sido especificado, la función intenta encontrar un enlace abierto al servidor
MySQL y si no lo encuentra, intetará crear uno como si fuera llamado
mysql_connect() sin argumentos .
mysql_drop_db
intenta suprimir una base de datos completa del servidor asociado al identificador
de enlace.
mysql_errno
Deuelve el número del mensaje de error de la última operación MySQL
mysql_error
Devuelve el texto del mensaje de error de la última operación MySQL
mysql_fetch_array
Devuelve una matriz que corresponde a la sentencia extraida, o falso si no quedan
más filas.
mysql_fetch_field
Extrae la información de una columna y la devuelve como un objeto.
mysql_fetch_lengths
Devuelve: Una matriz que contiene las longitudes de cada campo de la última fila
extraida por mysql_fetch_row(), o falso si error.
mysql_fetch_object
Devuelve un objeto con las propiedades aur corresponden a la última fila extraida,
o falso si no quedan más filas.
Ej.
<?php
mysql_connect($host,$user,$password);
$result = mysql_db_query("database","select * from table");
while($row = mysql_fetch_object($result)) {
echo $row->user_id;
echo $row->fullname;
}
mysql_free_result($result);
?>

mysql_fetch_row
Una matriz que corresponde a la fila selecionada, o falso si no quedan más lineas.
mysql_field_name
Devuelve el nombre del campo especificado en un resultado
mysql_field_seek
Asigna el puntero del resultado al offset del campo especificado
mysql_field_table
Devuelve el nombre de la tabla donde esta el campo especificado
mysql_field_type
Devuelve el tipo del campo especificado en un resultado
mysql_field_flags
Devuelve los flags asociados con el campo especificado en un resultado
mysql_field_len
Devuelve la longitud del campo especificado
mysql_free_result
Libera la memoria del resultado
mysql_insert_id
Devuelve el identificador generado en la última llamada a INSERT
mysql_list_fields
Lista los campos del resultado de MySQL
mysql_list_dbs
Lista las bases de datos disponibles en el servidor MySQL
mysql_list_tables
Lista las tablas en una base de datos MySQL
mysql_num_fields
devuelve el numero de campos de un resultado
mysql_num_rows
Devuelve el numero de filas de un resultado
mysql_pconnect
Abre una conexión persistente al servidor MySQL
mysql_query
envia una sentencia a la base activa en el servidor asociado al identificador de
enlace. Si no es especificado un identificador_de_enlace, se asumira el ultilmo
enlace abierto. Si no hay ningun enlace abierto, la función intenta estalecer un
enlace como si se llamara función mysql_connect() sin argumentos, y lo utiliza.
mysql_resul
devuelve el contenido de una celda de un resultado MySQL. El campo argumento puede
ser el nombre del campo o el offset o tabla.nombre_del_campo. Si el nombre de la
columna tiene un alias (’select foo as bar from...’), utilice el alias en lugar
del nombre de la columna.
mysql_select_db
establece la base activa que estara asociada con el identificador de enlace
especificado. Si no se especifica un identificador de enlace, se asume el ultimo
enlace abierto. Si no hay ningun enlace abierto, la función intentara establecer un
enlace como si se llamara a mysql_connect().
mysql_tablename
toma un puntero de resultado devuelto por mysql_list_tables() asi como un indice
(integer) y devuelve el nomnre de una tabla. Se puede usar la función
mysql_num_rows() para determinar el nombre de tablas en el puntero de resultado.

Administración de información en BD con php


Para este tema vamos a utilizar la tabla información, la cual fue generada
anteriormente y algunos archivos tales como formulario.html el cual envía su
contenido a emailme.php para su manipulación. Hasta el momento solamente se generan
archivos de texto lo cual no es práctico cuando se tiene muchos registros, sí en un
momento dado el volumen es muy grande y queremos explotar esta información,
necesitamos una base de datos; lo cual integraremos en el siguiente tema:
Anteriormente creamos una tabla como la que sigue:
MySQL> CREATE TABLE informacion (
-> id int auto_increment primary key,
-> nombre VARCHAR (45),
-> email VARCHAR (90),
-> preferencia VARCHAR (10) );
Como primer paso vamos a generar un programa llamado conecta.php el cual tiene como
objetivo el realizar la conexión a la base de datos
<!-- Nombre del archivo: conecta.php -->
/* Variables de operación */

$hostname = "host"; // el default es regularmente localhost


$username = "usuario"; // nombre del usuario de la base de datos con el que nos conectamos
$password = "passwd"; // contraseña del usuario
$dbName = "BasedeDatos"; // Base de datos a la que nos conectaremos
/* Tabla que creamos en MySQL */
$userstable = "informacion";
/* conexi&oacute;n a la base de datos */
MySQL_CONNECT($hostname,$username,$password)
OR DIE("No me puedo conectar a la base de datos");
@MySQL_select_db("$dbName") or die("No puedo seleccionar la base de datos");

Nuevos registros
Vamos a insertar nuevos registros a la tabla información, para esto realizaremos
algunas modificaciones al programa emailme.php .
<!-- Nombre del archivo: emailme.php -->
<html>
<head>
<title>Confirmaci&oacute;n</title>
<body>
<?php
/* Obtiene la información de formulario. */
$nombre=$_POST[“nombre”];
$email=$_POST[“email”];
$preferencia=$_POST[“preferencia”];
/* Primero validamos que nuestros campos principales est&eacute;n llenos */
if (!$nombre || !$email || !$preferencia) {
print ("<h1>Falt&oacute; de poner un dato requerido,
favor de regresar a la pantalla anterior para llenar los
campos faltantes.</h1>");
/* Si lo anterior es correcto, ejecutamos el envío de información */
else {
/* Email del administrador */
$adminaddress = "[email protected]";
/* esto manda una respuesta automática al correo del usuario */
mail("$email", "Información que solicitaste", "$nombre\n
Gracias por participar!\n
Ya tomamos nota que estuviste en nuestro sitio \n
Visita frecuentemente [http://www.misitio.com,] \n
pronto comenzaremos a mandarte información sobre $preferencia!",
"From: $adminaddress");
/* Esto manda una respuesta automática al administrador del servicio. */
/* Personalizamos el envío para que veamos automáticamente la cuenta de correo del interesado. */
mail("$adminaddress",
"Solicitud de informaci&oacute;n.",
"$nombre solicitó información.\n
Su dirección de correo es $email. \n
su preferencia es $preferencia.","From: $email");
/* Podemos adicionar cuantos destinatarios necesitemos */
/* Presenta la información de formulario. */
PRINT "<div align=center>";
PRINT "Muchas gracias, $nombre.";
PRINT "<br /><br />";
PRINT "Agradecemos tu participaci&oacute;n.<br /><br />";
PRINT "Te enviaremos informaci&oacute;n a $email, sobre $preferencia.";
PRINT "</div>";
/* manda llamar el archivo conecta.php, en el cual se definen las variables de conexión y se
conecta al host y base de datos seleccionada */
include (“conecta.php”);
/* coloca la info en la tabla */
$query = "INSERT INTO $userstable VALUES('','$nombre','$email', '$preferencia')";
$result = MySQL_QUERY($query);
PRINT "<div align=center>Hemos adicionado tu información en nuestra DB para
futuras referencias.</div>";
/* Cierra la conexión */
MySQL_CLOSE();
}
?>
</body>
</html>

En el ejemplo anterior agregamos el código necesario donde se va a realizarse la


conexión a la base de datos y posteriormente realizamos el insert, el cual guarda
en la tabla información, los datos que el usuario proporciona.
<html>
<!-- Nombre del programa: actualizacion.php -->
<head>
<title>Modificación de datos</title>
<body>
<p align="center">Modificación de nombre</p>
<?php
$nuevo=$_POST[“nuevo”];
$original=$_POST[“original”];
/* incluir archivo que contiene conexión a la base de datos */
include (“conecta.php”);
/* Tabla de MySQL */
$userstable = "informacion";
if ($bandera) {
$actualizar = "DELETE from $userstable WHERE id = '$original'";
$result = MySQL_QUERY($actualizar);
print "&iexcl;La actualizaci&oacute;n tuvo &eacute;xito! <a href=\"$PHP_SELF\">Pulsar para
regresar.</a>";
} else {
?>
<table width="400"><tr><td align="right">
<form action="<?php print "$PHP_SELF"; ?>" method="post">
<p>
Nombre anterior:<br />
<?php
if ($id == "")
{$id= '%';}
$result = MySQL_query ("SELECT * FROM $userstable WHERE id LIKE '$id' order by nombre");
if ($row = MySQL_fetch_array($result)) {
print ("<select name=\"original\">\n");
print ("<option value=''>Selecciona el usuario</option>\n");
do {
print ("<option value=");
print $row["id"];
print (">");
print $row["nombre"];
print ("</option>\n");

} while($row = MySQL_fetch_array($result));
print ("</select>\n");
} else {print "<p>No tenemos usuarios registrados.</p>";}
?>
</p>
<input type="hidden" name="bandera" value="1">
<p><input type="submit" value="Enviar"> </p>
</form>
</td></tr></table></div>
<?php
}
MySQL_CLOSE();
?>
</body>
</html>

Implementación de mecanismo de seguridad en una aplicación web

Búsqueda Estática
EL siguiente ejemplo nos presenta en pantalla la información que hasta el momento
hemos almacenado, lo cual realizaremos mandando ejecutar un query con SQL a la base
de datos MySQL. Partiendo del ejemplo en que los usuarios nos mandan sus
preferencias de sistema operativo, donde la tabla se llama "informacion" (sin
acento), definimos un script en que nos mostrará cuantos usuarios prefieren el
sistema operativo Linux:
<?php
// Nombre del programa: b_estatica.php
/* script para saber quienes utilizan Linux */

/* declaramos las variables de la base de datos */

include (“conecta.php”);
/* Seleccionamos a los usuarios que prefieren Linux */
$query = "SELECT * FROM $userstable WHERE preferencia = 'Linux'";

$result = MySQL_QUERY($query);

/* Cuantos usuarios hay de estos? */


$number = MySQL_NUMROWS($result);

/* Presentalo en pantalla */
$i = 0;

IF ($number == 0) :
PRINT "<div align=center><p>&iexcl;Nadie utiliza Linux!</div>";
ELSEIF ($number > 0) :
PRINT "<div align=center><p>Usuarios que prefieren Linux: $number<br />";
print “<table width='80%'>”;
print “<tr><td>Nombre</td>”;
print “<td>Email</td></tr>”;
WHILE ($i < $number):
$name = MySQL_result($result,$i,"nombre");
$email = MySQL_result($result,$i,"email");
PRINT "<tr><td> $name </td><td> $email.</td></tr>";
$i++; // Esto busca hasta que barre toda la base
ENDWHILE;
PRINT "</div>";
ENDIF;
MySQL_CLOSE();
?>

Búsqueda dinámica
A continuación analizaremos un ejemplo para realizar búsquedas utilizando más de un
criterio de consulta:
<html>
<!-- Nombre del programa: busqueda.php -->
<head>
<title>Formulario de b&uacute;squedas</title>
</head>
<body>
<form action="<?php print "$PHP_SELF"; ?>" method="post">
<p>Buscar en la tabla de informaci&oacute;n:</p>
<p>
Nombre: <input type="text" name="nombre" size="30" maxlength="90"></p>
<p>
Email: <input type="text" name="email" size="30" maxlength="90"></p>
<p>
Preferencia: <input type="text" name="preferencia" size="30" maxlength=90></p>
<p>
<input type=submit value="Buscar"> <input type="reset" value="Borrar">
</form>
<?php
/* declaramos las variables de la base de datos */
$nombre=$_POST[“nombre”];
$email=$_POST[“email”];
$preferencia=$_POST[“preferencia”];
if ($nombre == "")
{$nombre = '%';}
if ($email == "")
{$email = '%';}
if ($preferencia == "")
{$preferencia = '%';}
$result = MySQL_query ("SELECT * FROM $userstable
WHERE nombre LIKE '%$nombre%'
AND email LIKE '%$email%'
AND preferencia LIKE '%$preferencia%'
");

if ($row = MySQL_fetch_array($result)) {
print “<table width='100%'>”;
print “<tr><td>Nombre</td><td>Email</td><td>Preferencia</td></tr>”;

do {
print ("<tr><td>");
print $row["nombre"];
print ("</td>");
print ("<td>");
print $row["email"];
print ("</td>");
print ("<td>");
print $row["preferencia"];
print (" </td></tr>");
} while($row = MySQL_fetch_array($result));
print “</table>”;
} else {
print "<h5 align=\"center\">Lo sentimos, no tenemos registros con esos criterios.</h5>";
}
MySQL_CLOSE();
?>
</body>
</html>

Un comentario muy importante es respecto al símbolo %. En PHP, al conectarse a una


base de datos MySQL, se toma como un comodín, lo que aplicado en el ejemplo
anterior implicaría lo siguiente:
%$nombre% busca la cadena de caratéres que escribimos, ya sea la inicio o
final del texto en la tabla.
%$nombre busca sólo la cadena de caractéres que comience con cualquier cosa
pero termina con lo que escribimos.
$nombre busca sólo el texto que escribimos, de manera exacta.
Otro comentario es que la búsqueda no es sensible a las mayúsculas y minúsculas,
por lo que es lo mismo si el nombre es "juan" o "JUAN".

Actualización de información
Una actividad que realizaremos frecuentemente es la actualización de registros,
cuya sintaxis puede realizarse de la siguiente forma: $query = "UPDATE $userstable
SET nombre = 'Antonio' WHERE nombre = 'ilozada'";
<html>
<!-- Nombre del programa: actualizacion.php -->
<head>
<title>Modificación de datos</title>
<body>
<p align="center">Modificación de nombre</p>

<?php

$nuevo=$_POST[“nuevo”];
$original=$_POST[“original”];

/* incluir archivo que contiene conexión a la base de datos */

include (“conecta.php”);

/* Tabla de MySQL */
$userstable = "informacion";
if ($bandera) {

$actualizar = "DELETE from $userstable WHERE id = '$original'";


$result = MySQL_QUERY($actualizar);

print "&iexcl;La actualizaci&oacute;n tuvo &eacute;xito! <a href=\"$PHP_SELF\">Pulsar para


regresar.</a>";

} else {

?>

<table width="400"><tr><td align="right">

<form action="<?php print "$PHP_SELF"; ?>" method="post">

<p>
Nombre anterior:<br />

<?php

if ($id == "")
{$id= '%';}
$result = MySQL_query ("SELECT * FROM $userstable WHERE id LIKE '$id' order by nombre");

if ($row = MySQL_fetch_array($result)) {

print ("<select name=\"original\">\n");


print ("<option value=''>Selecciona el usuario</option>\n");
do {
print ("<option value=");
print $row["id"];
print (">");
print $row["nombre"];
print ("</option>\n");

} while($row = MySQL_fetch_array($result));
print ("</select>\n");

} else {print "<p>No tenemos usuarios registrados.</p>";}

?>
</p>
<input type="hidden" name="bandera" value="1">

<p><input type="submit" value="Enviar"> </p>

</form>
</td></tr></table></div>
<?php
}
MySQL_CLOSE();
?>
</body>
</html>

Implementación de mecanismo de seguridad en una aplicación web MySQL_QUERY($query);


También podemos realizar una actualización de una manera más dinámica; es decir,
recibiendo como parámetros los valores a actualizar y la condición que limita los
registros en los cuales se lleva a cabo dicha acción.
$query = "UPDATE $userstable SET nombre = '$nombre_nuevo'
WHERE nombre = '$nombre'";
MySQL_QUERY($query);

Notamos que estamos incluyendo una variable llamada $nombre_nuevo, con lo que
podemos diferenciar el nombre nuevo del original. Para hacer funcional este
ejercicio, necesitaremos un formulario donde podamos capturar los datos nuevos:
<html>
<!-- Nombre del programa: actualizacion.php -->
<head>
<title>Modificación de datos</title>
<body>
<p align="center">Modificación de nombre</p>

<?php

$nuevo=$_POST[“nuevo”];
$original=$_POST[“original”];

/* incluir archivo que contiene conexión a la base de datos */

include (“conecta.php”);

/* Tabla de MySQL */
$userstable = "informacion";
if ($bandera) {

$actualizar = "DELETE from $userstable WHERE id = '$original'";


$result = MySQL_QUERY($actualizar);

print "&iexcl;La actualizaci&oacute;n tuvo &eacute;xito! <a href=\"$PHP_SELF\">Pulsar para


regresar.</a>";

} else {

?>

<table width="400"><tr><td align="right">

<form action="<?php print "$PHP_SELF"; ?>" method="post">

<p>
Nombre anterior:<br />

<?php

if ($id == "")
{$id= '%';}

$result = MySQL_query ("SELECT * FROM $userstable WHERE id LIKE '$id' order by nombre");

if ($row = MySQL_fetch_array($result)) {

print ("<select name=\"original\">\n");


print ("<option value=''>Selecciona el usuario</option>\n");
do {
print ("<option value=");
print $row["id"];
print (">");
print $row["nombre"];
print ("</option>\n");

} while($row = MySQL_fetch_array($result));
print ("</select>\n");
} else {print "<p>No tenemos usuarios registrados.</p>";}

?>
</p>
<input type="hidden" name="bandera" value="1">

<p><input type="submit" value="Enviar"> </p>

</form>
</td></tr></table></div>

<?php
}
MySQL_CLOSE();
?>

</body>
</html>

Implementación de mecanismo de seguridad en una aplicación web


<html>
<!-- Nombre del programa: actualizacion.php -->
<head>
<title>Modificación de datos</title>
<body>
<p align="center">Modificación de nombre</p>

<?php

$nuevo=$_POST[“nuevo”];
$original=$_POST[“original”];

/* incluir archivo que contiene conexión a la base de datos */

include (“conecta.php”);

/* Tabla de MySQL */
$userstable = "informacion";
if ($bandera) {

$actualizar = "UPDATE $userstable SET nombre = '$nuevo'


WHERE id = '$original'";
$result = MySQL_QUERY($actualizar);

print "&iexcl;La actualizaci&oacute;n tuvo &eacute;xito! <a href=\"$PHP_SELF\">Pulsar para


regresar.</a>";

} else {
?>

<table width="400"><tr><td align="right">

<form action="<?php print "$PHP_SELF"; ?>" method="post">

<p>
Nombre anterior:<br />

<?php

if ($id == "")
{$id= '%';}

$result = MySQL_query ("SELECT * FROM $userstable WHERE id LIKE '$id' order by nombre");

if ($row = MySQL_fetch_array($result)) {

print ("<select name=\"original\">\n");


print ("<option value=''>Selecciona el usuario</option>\n");
do {
print ("<option value=");
print $row["id"];
print (">");
print $row["nombre"];
print ("</option>\n");

} while($row = MySQL_fetch_array($result));
print ("</select>\n");

} else {print "<p>No tenemos usuarios registrados.</p>";}

?>
</p>
<p>
Nombre nuevo:<br />
<input type="text" name="nuevo" size="20" maxlength="30"> </p>

<input type="hidden" name="bandera" value="1">

<p><input type="submit" value="Enviar"> </p>

</form>
</td></tr></table></div>

<?php
}
MySQL_CLOSE();
?>

</body>
</html>

Salvamos el archivo anterior con el nombre actualizacion.php y lo probamos.

Eliminar registros
El último ejemplo que nos hace falta analizar para poder administrar la información
de una base de datos desde un navegador web es el eliminar registros. En el ejemplo
a analizar nos daremos cuenta que la estructura es muy similar a la que encontramo s
en el programa de actualización; con la diferencia que en lugar de actualizar un
registro, se elimina esa información.
<html>
<!-- Nombre del programa: actualizacion.php -->
<head>
<title>Modificación de datos</title>
<body>
<p align="center">Modificación de nombre</p>

<?php

$nuevo=$_POST[“nuevo”];
$original=$_POST[“original”];

/* incluir archivo que contiene conexión a la base de datos */

include (“conecta.php”);

/* Tabla de MySQL */
$userstable = "informacion";
if ($bandera) {

$actualizar = "DELETE from $userstable WHERE id = '$original'";


$result = MySQL_QUERY($actualizar);

print "&iexcl;La actualizaci&oacute;n tuvo &eacute;xito! <a href=\"$PHP_SELF\">Pulsar para


regresar.</a>";

} else {

?>

<table width="400"><tr><td align="right">

<form action="<?php print "$PHP_SELF"; ?>" method="post">

<p>
Nombre anterior:<br />

<?php
if ($id == "")
{$id= '%';}

$result = MySQL_query ("SELECT * FROM $userstable WHERE id LIKE '$id' order by nombre");

if ($row = MySQL_fetch_array($result)) {

print ("<select name=\"original\">\n");


print ("<option value=''>Selecciona el usuario</option>\n");
do {
print ("<option value=");
print $row["id"];
print (">");
print $row["nombre"];
print ("</option>\n");

} while($row = MySQL_fetch_array($result));
print ("</select>\n");

} else {print "<p>No tenemos usuarios registrados.</p>";}

?>
</p>
<input type="hidden" name="bandera" value="1">

<p><input type="submit" value="Enviar"> </p>

</form>
</td></tr></table></div>

<?php
}
MySQL_CLOSE();
?>

</body>
</html>

Implementación de mecanismo de seguridad en una aplicación web

Errores más frecuentes


ERROR DESCRIPCIÓN
Warning: Cannot send session cookie - Este error se produce al momento en que
headers already sent by (output estamos utilizando cookies y se despliega e
started at /home/session.php:2) in pantalla ya sea un carácter o un espacio en
/home/session.php on line .. blanco, antes de enviar la instrucción que
Warning session start() [function envía o lee la cookie.
session start]: Cannot send session
cookie - headers already sent by
(output started at
/home/session.php:2) in
/home/session.php on line ..
Este error se produce cuando dentro de una
Parse error: syntax error, unexpected
función print colocamos comilla doble por
T_LNUMBER in
ejemplo print “ hola “ a “todos”;
Este error se produce cuando nos hace falta
Parse error: syntax error, unexpected
colocar un “;” que indique el término de
T_PRINT in
una instrucción.
Parse error: syntax error, unexpected Este error se produce generalmente cuando
T_ELSE hace falta cerrar una llave de un if
Este error se produce cuando tenemos una
Parse error: syntax error, unexpected
llave sin abrir. Es decir, que solamente se
'}'
cierre la instrucción sin antes abrirla.
Parse error: syntax error, unexpected Este error se produce generalmente cuando no
$end cerramos una llave de un while

Apéndice

Palabras reservadas en PHP


Este es el listado completo de las palabras reservadas en PHP para la versión 4.1.x
y posterior. Generalmente son constantes y variables predefinidas:
Tabla 1. Palabras reservadas en PHP

and E_PARSE old_function


$argv E_ERROR or
as E_WARNING parent
$argc eval PHP_OS
break exit() $PHP_SELF
case extends PHP_VERSION
cfunction FALSE print()
class for require()
continue foreach require_once()
declare function return()
default $HTTP_COOKIE_VARS static
do $HTTP_GET_VARS switch
die() $HTTP_POST_VARS stdClass
echo() $HTTP_POST_FILES $this
else $HTTP_ENV_VARS TRUE
elseif $HTTP_SERVER_VARS var
empty() if xor
enddeclar
include() virtual()
e
endfor include_once() while
endforeac
global FILE
h
endif list() LINE
endswitch new sleep
endwhile not _wakeup
E_ALL NULL

Palabras reservadas en MySQL


Este es el listado completo de las palabras reservadas en MySQL para la versión
3.23.x y 4. Generalmente son datatypes y funciones:

action add aggregate all


alter after and as
asc avg avg_row_length auto_increment
between bigint bit binary
blob bool both by
cascade case char character
change check checksum column
columns comment constraint create
current_timestam
cross current_date current_time
p
data database databases date
datetime day day_hour day_minute
day_second dayofmonth dayofweek dayofyear
dec decimal default delayed
delay_key_write delete desc describe
distinct distinctrow double drop
end else escape escaped
enclosed enum explain exists
fields file first float
float4 float8 flush foreign
from for full function
global grant grants group
having heap high_priority hour
hour_minute hour_second hosts identified
ignore in index infile
inner insert insert_id int
integer interval int1 int2
int3 int4 int8 into
if is isam join
key keys kill last_insert_id
leading left length like
lines limit load local
lock logs long longblob
longtext low_priority max max_rows
match mediumblob mediumtext mediumint
middleint min_rows minute minute_second
modify month monthname myisam
natural numeric no not
null on optimize option
optionally or order outer
outfile pack_keys partial password
precision primary procedure process
processlist privileges read real
references reload regexp rename
replace restrict returns revoke
rlike row rows second
select set show shutdown
smallint soname sql_big_tables sql_big_selects
sql_low_priority_upda
sql_log_off sql_log_update sql_select_limit
tes
sql_big_resu
sql_small_result sql_warnings straight_join
lt
starting status string table
tables temporary terminated text
then time timestamp tinyblob
tinytext tinyint trailing to
type use using unique
unlock unsigned update usage
values varchar variables varying
varbinary with write when
where year year_month zerofill

También podría gustarte