Uploaded by Francisco Navarro Gonzalez

PHP

advertisement
APACHE
Arquitectura
Apache se estructura como un conjunto de módulos. Unos forman el núcleo de
la aplicación, mientras que otros son opcionales y se instalan o no en función
de las necesidades del servicio que se quiera prestar:
Módulos adicionales
APACHE
Núcleo y módulos
básicos
Instalación
La instalación del servidor Apache es muy simple, debiendo tener en cuenta
solo que el puerto donde lo configuremos debe estar libre (si ya tenemos
instalado otro servidor como el IIS, se puede instalar Apache en el puerto
8080).
Hay varias versiones disponibles, incluyendo una compilación que permite dar
servicios de protocolo https. Si no es necesario se recomienda la instalación sin
esa funcionalidad.
Una vez instalado Apache, se crea un árbol de directorios típico, con las
siguientes carpetas:

/Bin – Archivos ejecutables y librerías del programa.

/Conf – Ficheros de configuración (httpd.conf)

/Error – Mensajes de error en varios idiomas.

/Logs – Ficheros de registro de acceso y errores al servidor.

/Htdocs – Carpeta donde por defecto se almacenan los
documentos web que se publican en el servidor.
Configuración básica
La configuración de Apache se hace a partir del fichero http.conf. Hay tres
aspectos básicos que controla este fichero:
Configuración de parámetros globales del servidor
Se aplican sobre el comportamiento del servidor en conjunto. Entre los más
importantes se encuentran:

ServerRoot: Directorio raíz donde está instalado Apache.

Listen: Puerto o puertos asignados al servidor.

LoadModule: Carga de módulos adicionales al núcleo del programa.

ServerAdmin: Dirección de correo del administrador que se muestra en
algunos mensajes de error.

ServerName: Nombre DNS o dirección IP del servidor que se envía
como información adicional en las peticiones HTTP.

DocumentRoot: Carpeta que se asocia con la raíz de servidor.
Usualmente la carpeta htdocs del directorio de instalación del programa.

DirectoryIndex: Fichero que se sirve por defecto en una petición en la
que no se especifica nombre de fichero alguno (usualmente como
entrada de http://localhost)

ErrorDocument: Permite modificar el mensaje de error que envía el
servidor por defecto, asociando incluso un documento web.

Alias: Permite la definición de directorios virtuales, mediante los cuales
enlazamos a carpetas fuera de la carpeta de instalación del programa,
con el formato Alias nombre_ficticio ubicacion_real.
Parámetros sobre directorios y ficheros.
Con las directivas <Directory>..</Directory> y <File>… </File>, se aplican al
directorio o fichero que se especifique. La configuración de algunos parámetros
de este tipo puede hacerse mediante ficheros .htaccess en los directorios
correspondientes.
Configuración de hosts virtuales.
Sirve para crear varios sitios webs alojados en un único servidor. Cada uno
puede tener diferentes direcciones IP o nombres DNS.
PHP
Introducción
Para instalar PHP descomprimiremos el fichero .ZIP en el directorio C.\PHP.
PHP es un lenguaje interpretado que se utiliza ampliamente junto con Apache
para la generación de contenidos dinámicos para la web.
Los archivos con la extensión PHP pueden ejecutarse también desde línea de
comandos. Para ello, se utiliza el ejecutable php que se encuentra en el
directorio raíz de PHP. Para ello, tecleamos por ejemplo, C:\php>php.exe
c:\prueba.php.
Dentro de los archivos PHP, el código que deseamos que sea interpretado
debe ir entre las etiquetas <?php ……. ?>.
Existe la posibilidad de crear aplicaciones ejecutables usando el lenguaje PHP
mediante la extensión PHP-GTK.
Instalación y uso con un servidor web
Es un lenguaje de servidor, frente a Javascript, que se ejecuta en el navegador
del cliente.
La configuración puede hacerse según CGI (Common Gateway Interface), en la
que los ficheros php se interpretan mediante un ejecutable cuya salida stdout
es recogida por el servidor y enviada al cliente web.
La otra opción es cargar en Apache un módulo que se encarga de interpretar el
fichero y enviar la salida stdout del mismo al navegador.
Características del lenguaje
Variables y constantes
Una característica llamativa de PHP es que las variables van precedidas por el
símbolo $, y que además, no es obligatoria su declaración, dejando libre el tipo
asignado a la misma. Los nombres de las variables son ‘Case Sensitive’.
Las variables permiten el trabajo por referencia (similar al trabajo con
punteros), anteponiendo el símbolo & al nombre de la variable (&$x sería una
referencia).
Existen un conjunto de variables predefinidas que permiten la comunicación de
los scripts con el entorno. Entre ellas, que luego desarrollaremos con mayor
detalle, están:

$_SERVER — Información del entorno del servidor y de ejecución

$_GET — Variables asociadas a peticiones GET de HTTP

$_POST — Variables asociadas a peticiones POST de HTTP

$_FILES — Variables de Carga de Archivos HTTP

$_REQUEST — Variables HTTP Request

$_SESSION — Variables de sesión

$_ENV — Variables de entorno

$_COOKIE — Cookies HTTP

$argc — El número de argumentos pasados a un script

$argv —Argumentos pasado al script (este y el anterior al modo C).
Las constantes se definen con la directiva DEFINE (nombre, valor):
define("FOO","something");
Tipos de datos
Los tipos de datos primarios más importantes soportados por PHP son los
siguientes:

boolean - (true o false)

integer – Números especificados en base 10, octal (0344)
o
hexadecimal (0xFF)

float – Número de coma flotante

string – Las cadenas se delimitan por comillas dobles (“) que conllevan
evaluación de variables, o las comillas simples (‘), que no lo hacen:
$a=’palabra’;
echo ´Ni una $a´; //Devuelve Ni una $a
echo “Ni una $a”; //Devuelve Ni una palabra

array – Los arrays en PHP no tienen solo como índices números
enteros, también es posible utilizar cadenas. Los arrays son tratados
mediante un conjunto de funciones
Operadores
Aritméticos
OPERADOR DESCRIPCIÓN EJEMPLO
Negativo
-$a
-
+
*
/
%
Suma
Resta
Producto
División
Resto
$a + $b
$a - $b
$a * $b
$a / $b
$a % $b
Asignación
La asignación se realiza con el igual:
$a = 3;
Operadores a nivel de bit
OPERADOR
&
|
^
~
<<
>>
DESCRIPCIÓN
EJEMPLO
$a & $b
AND
$a | $b
OR
$a ^ $b
XOR
~ $a
NOT
DESPL. IZQUIERDA $a << $b
$a >> $b
DESPL. DERECHA
De comparación
OPERADOR
==
===
¡=
<>
¡==
<
>
<=
>=
DESCRIPCIÓN EJEMPLO
IGUAL
$a == $b
IDÉNTICO
$a === $b
DISTINTO
$a != $b
DISTINTO
$a <> $b
NO IDÉNTICO
$a !== $b
MENOR
$a < $b
MAYOR
$a > $b
MENOR O IGUAL $a <= $b
MAYOR O IGUAL $a >= $b
De incremento/decremento
OPERADOR
++
DESCRIPCIÓN
PREINCREMENTO
EJEMPLO
++$a
POSTINCREMENTO
PREDECREMENTO
POSTDECREMENTO
++
---
$a++
--$a
$a--
Lógicos
OPERADOR DESCRIPCIÓN EJEMPLO
AND
$a and $b
AND
OR
$a or $b
OR
XOR
$a
xor $b
XOR
NOT
! $a
NOT
AND
$a && $b
&&
OR
$a || $b
||
De cadena
$a . $b Concatena dos cadenas
Instrucciones de control
IF
if ($a >
echo
} elseif
echo
} else {
echo
}
$b) {
"a es mayor que b";
($a == $b) {
"a es igual que b";
"a es menor que b";
WHILE
while ($i <= 10) {
echo $i++;
}
DO..WHILE
do {
if ($i < 5) {
break;
}
$i *= $factor;
} while (0);
FOR
for ($i = 1; $i <= 10; $i++) {
echo $i;
}
FOREACH
foreach ($arr as &$value) {
$value = $value * 2;
}
SWITCH..CASE
switch ($i) {
case 0:
echo "i es igual a 0";
break;
case 1:
echo "i es igual a 1";
break;
case 2:
echo "i es igual a 2";
break;
}
Existe una forma alternativa de escribir las estructuras de control, pero nosotros
seguiremos este formato ‘a lo C’.
Definición de funciones y procedimientos
Un aspecto a destacar de PHP es que no es necesario definir el tipo de los
parámetros de entrada o salida de una función.
Los procedimientos se definen como funciones sin tipo de retorno
Las funciones se definen como:
function foo($arg_1, $arg_2, /* ..., */ $arg_n)
{
echo "Función de ejemplo.\n";
return $valordevuelto;
}
Los parámetros de una función pueden tener un valor por defecto asignado de
la siguiente forma:
function hacercafé($tipo = "capuchino")
La devolución de un resultado por parte de la función se hace mediante la
función return (), como se muestra en los siguientes ejemplos:
return $núm;
//Devuelve un número
return array (0, 1, 2);
//Devuelve una matriz
Aspectos interesantes de la programación en
PHP
Trabajo con formularios
Cuando especificamos en un formulario HTML un fichero PHP como gestor en
su propiedad ACTION, podremos acceder a la información de los controles de
dicho formulario a través de la variable global $_POST o $_GET.
Veamos un ejemplo:
Dentro del código HTML:
<FORM METHOD="post" ACTION="mis_datos.php">
<input type="hidden" name="edad" value="55">
<p>Tu nombre <input type="text" name="nombre" size="30"
value="jose"></p>
<p>Tu sistema favorito
<select size="1" name="sistema">
<option selected value="Linux">Linux</option>
<option value="Unix">Unix</option>
<option value="Macintosh">Macintosh</option>
<option value=&qmargin-left: 75"><option
value="Windows">Windows</option>
</select></p>
<p>¿Te gusta el futbol ? <input type="checkbox" name="futbol"
value="ON"></p>
<p>¿Cual es tu sexo?</p>
<blockquote>
<p>Hombre<input type="radio" value="hombre" checked
name="sexo"></p>
<p>Mujer <input type="radio" name="sexo" value="mujer"></p>
</blockquote>
<p>Aficiones</p>
<p><textarea rows="5" name="aficiones" cols="28"></textarea></p>
<p><input type="submit" value="Enviar datos" name="enviar">
<input type="res-left: 50"> <input type="reset" value="Restablecer"
name="B2"></p>
</FORM>
En el fichero PHP:
<?PHP;
if (isset($_POST['enviar']) {
echo "Hola <b>" . $_POST['nombre'] . "</b> que tal estás<BR>n";
echo "Eres " . $_POST['sexo'] . "<BR>n";
echo "Tienes " . $_POST['edad'] . "<BR>n";
echo "Tu sistema favorito es " . $_POST['sistema'] . "<BR>n";
if (isset($_POST['futbol']) {
echo "Te gusta el futbol <BR>n";
} else odigo" style="margin-left: 50">} else {
echo "NO te gusta el futbol <BR>n";
}
if ($_POST['aficiones'] != "") {
echo "Tus aficiones son: <BR>n";
echo nl2br($_POST['aficiones']);
} else {
echo "NO tienes aficiones <BR>n";
}
}
echo "<a href='formulario.htm'>VOLVER AL FORMULARIO</a>"
?>
Carga de ficheros
La carga de ficheros puede verse como una extensión del trabajo con
formularios. Para poder utilizarlo hemos de crear un control adicional en el
formulario de origen:
<form enctype="multipart/form-data" action="__URL__" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="30000" />
Enviar este archivo: <input name="userfile" type="file" />
<input type="submit" value="Send File" />
</form>
, donde hemos marcado en rojo las partes clave de este proceso.
Desde el punto de vista del fichero PHP que gestiona el proceso de subida, la
información relativa al control de tipo FILE se almacena en las variables:

$_FILES['userfile']['name']
El nombre original del archivo en la máquina cliente.

$_FILES['userfile']['type']
El tipo mime del archivo, si el navegador proporciona esta información.
Un ejemplo podría ser "image/gif". Este tipo mime, sin embargo no se
verifica en el lado de PHP y por lo tanto no se garantiza su valor.

$_FILES['userfile']['size']
El tamaño, en bytes, del archivo subido.

$_FILES['userfile']['tmp_name']
El nombre temporal del archivo en el cual se almacena el archivo
cargado en el servidor.

$_FILES['userfile']['error']
El código de error asociado a esta carga de archivo. Este elemento fue
añadido en PHP 4.2.0
Un ejemplo de fichero de tratamiento sería:
<?php
// En versiones de PHP anteriores a 4.1.0, $HTTP_POST_FILES debe utili
zarse en lugar de $_FILES.
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);
echo '<pre>';
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile))
{
echo "El archivo es válido y fue cargado exitosamente.\n";
} else {
echo "¡Posible ataque de carga de archivos!\n";
}
echo 'Aquí hay más información de depurado:';
print_r($_FILES);
print "</pre>";
?>
Cookies
Las cookies son pequeños ficheros de texto que se almacenan en el navegador
del cliente, y que pueden ser leídos desde el servidor. Para ello, usamos la
función:
setcookie(nombre_cookie, valor, tiempo_expiracion, directorio_cookie)
Para poder usar esta función hay que advertir al servidor de que debe enviar en
la cabecera del fichero una información determinada. Para ello, debemos hacer
la llamada a la función antes de enviar cualquier información de la página.
El contenido de una cookie puede leerse usando el array $_COOKIE [ ].
A modo de ejemplo:
<?php
$value = 'something from somewhere';
setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600);
/* expire in 1 hour */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", ".example.co
m", 1);
?>
<?php
// Print an individual cookie
echo $_COOKIE["TestCookie"];
?>
Sesiones
Las sesiones son una forma de guardar información, de un modo más
elaborado que en el caso de las cookies.
Antes de leer o escribir una variable de sesión será necesario llamar a la
función session_start();
El acceso a las variables de sesión es a través de la variables del sistema
$_SESSION [‘nombre’]. Como ejemplo:
<?php
session_start();
// Use $HTTP_SESSION_VARS con PHP 4.0.6 o anterior
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
?>
Para
eliminar
una
variable
de
sesión
usamops
la
función:
unset($_SESSION['count']);
Existen un conjunto de funciones asociados a la gestión de sesiones, como
son:

session_destroy — Destruye toda la información registrada de una
sesión

session_id — Obtener y/o establecer el id de sesión actual

session_is_registered — Averiguar si una variable global está registrada
en una sesión

session_name — Obtener y/o establecer el nombre de la sesión actual

session_register — Registrar una o más variables globales con la sesión
actual

session_start — Inicializar información de sesión

session_unregister — Deja de registrar una variable global de la sesión
actual

session_unset — Libera todas las variables de sesión
MySQL
Instalación y órdenes básicas
La instalación de MySQL puede hacerse mediante un instalador MSI, o bien
a partir de un fichero comprimido .ZIP. En plataformas Linux, es usual
compilar el ejecutable en el propio equipo donde va a funcionar.
Si optamos por la instalación manual, en Windows necesitaremos instalar la
base de datos como un servicio.
La instalación tipo crea el siguiente árbol de directorios:

/bin – Ejecutables (incluye el servidor y los clients)

/examples – Ficheros y scripts de ejemplo .

/include – Ficheros de cabeceras.

/lib – Librerías.

/scripts – Scripts de utilidades.
Además,
dependiendo
del
sistema
operativo
en
el
que
trabajemos,
encontramos los directorios de log y las bases de datos:
C:\Documents
and
Settings\All
Users\Application
Data\MySQL,
o
bien
C:\ProgramData\MySQL
Los programas disponibles en el directorio /bin son:

Mysqld --> Es el servidor de la base de datos

Mysql –-> Es el cliente de línea de comandos interactivo.

mysqladmin --> Cliente para tareas administrativas.

mysqlcheck --> Cliente para tareas de mantenimiento de tablas.

mysqldump --> Para realizar volcados de la base de datos a ficheros.

Mysqlimport --> Carga datos en las tablas a partir de ficheros de
texto.

Mysqlshow --> muestra información diversa sobre objetos de la base de
datos.
Configuración y administración del servidor
A la hora de configurar el funcionamiento del servidor, podemos especificar los
parámetros de funcionamiento mediante línea de comandos, o mediante un
fichero de configuración.
Usualmente, la línea de comandos no es más que el nombre de la variable de
configuración que queremos usar precedida por dos guiones. Además algunos
de los parámetros se consideran parámetros de estado del servidor.
En el caso de utilizar un fichero de configuración, las opciones se incluyen en el
mismo. Para saber que fichero de configuración está usando mysqld, hacemos:
mysqld –h IP –u usuario –ppasswd variables
Por defecto, los ficheros buscados son:
WINDIR\my.ini,
WINDIR\my.cnfGlobal
optionsC:\my.ini, C:\my.cnf
Global
optionsINSTALLDIR\my.ini,
INSTALLDIR\my.cnfGlobal
optionsdefaults-extra-fileThe file specified with --defaults-extrafile=path, if any
El contenido de uno de estos ficheros es un conjunto de variables de
configuración agrupados en secciones. Por ejemplo:
[client]
port=3306
[mysql]
default-character-set=latin1
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3306
#Path
to
installation
directory.
All
paths
are
usually
resolved relative to this.
basedir="F:/Archivos de programa/MySQL/MySQL Server 5.5/"
Para administrar la seguridad, hay que tener en cuenta que el modo de gestión
de MySQL funciona en base al conjunto de opciones: usuario host
permisos_sobre_BBDD.
La gestión de usuarios y permisos se realiza mediante las órdenes CREATE
USER, DROP USER, GRANT, RENAME USER, REVOKE, SET PASSWORD.
La información sobre los permisos se almacena en las siguientes tablas de la
base de datos:

user: Contains user accounts, global privileges, and other non-privilege
columns.

db: Contains database-level privileges.

host: Obsolete.

tables_priv: Contains table-level privileges.

columns_priv: Contains column-level privileges.

procs_priv: Contains stored procedure and function privileges.
Características de la base de datos (tipos de datos y funciones)
Los tipos de datos permitidas para MySQL son:

Strings – Delimitados por comillas dobles o simples.

Numbers

Date and Time Values -DATE, TIME, DATETIME, and TIMESTAMP

Hexadecimal Values (con X’…’, x’…’ o 0x….) y la función HEX()

Boolean Values

NULL Values
Las funciones disponibles son las usuales en cualquier entorno SQL. Un listado
de ejemplo sería:
ABS(), ACOS(), ADDDATE(), ADDTIME(), ASCII(), ASIN(), ATAN2(), ATAN(), AVG(), ,
CEIL(), CHAR(), CONCAT_WS(), CONCAT(), COS(), COT(), COUNT(), CURDATE(),
CURRENT_DATE(),
DATE_ADD(),
CURRENT_TIME(),
DATE_FORMAT(),
DATE(),
CURRENT_USER(),
DATEDIFF(),
DAY(),
DATABASE(),
DAYNAME(),
DAYOFMONTH(), DAYOFWEEK(), DAYOFYEAR(), DIV, EXP(), FLOOR(), FORMAT(),
GREATEST(), HEX(), HOUR(), IFNULL(), IN(), INSTR(), LAST_DAY, LEAST(),
LENGTH()
LOG10(),
LOWER(),
LPAD(),LTRIM(),
MAX(),
MINUTE(),
POW(),
REPLACE(), RIGHT(), ROUND(), RPAD(), RTRIM(), SQRT(), STR_TO_DATE(),
SUBSTR(), SUM(), SYSDATE(), TIME_FORMAT(), TIME(), TIMESTAMP(), TRIM(),
TRUNCATE().
Procedimientos almacenados
MySQL permite el trabajo con procedimientos almacenados, mediante las
ordenes CREATE PROCEDURE y CREATE FUNCTION:
CREATE PROCEDURE dorepeat(p1 INT)
BEGIN
SET @x = 0;
REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;
END;
De la misma forma, se permite la programación de disparadores, con la
orden CREATE TRIGGER:
CREATE TRIGGER testref BEFORE INSERT ON test1
FOR EACH ROW BEGIN
INSERT INTO test2 SET a2 = NEW.a1;
DELETE FROM test3 WHERE a3 = NEW.a1;
UPDATE test4 SET b4 = b4 + 1 WHERE a4 = NEW.a1;
END;
´Trabajo con la BBDD
Para conectar con la base de datos, utilizamos el programa mysql, cuyos
principales parámetros son:
-h ---> Host del servidor
-u --> Nombre de usuario
-p --> Password del usuario (se escribe sin espacio –pmi_contrasenya)
Al conectar se abre una sesión que notamos por el prompt (mysql>).
Para desconectar de la base de datos, utilizamos la orden quit dentro del
Dentro del prompt, las sentencias SQL deben finalizarse con punto y coma
(;). Las órdenes más usuales son las siguientes:
SHOW DATABASES; --> Lista las bases de datos disponibles.
USE basededatos; --> Selecciona la base de datos test
CREATE DATABASE basededatos; --> Crea una base de datos
SHOW TABLES; --> Muestra las tablas de la base de datos activa
DESCRIBE nombredetabla; --> Muestra los campos de una tabla
(DESC en Oracle)
El uso de las bases de datos puede hacerse también en modo batch. De
esta forma lo que hacemos es enviar un fichero al servidor para que se
ejecuten sus ordenes. La sentencia a utilizar es:
mysql < batch-file
Se puede capturar a la vez la salida de este proceso:
mysql < batch-file > mysql.out
Introducción MySQL Workbench
MySQL Workbench es una herramienta gráfica de gestión de la base de
datos, que contiene tres funciones básicas:
Desarrollo SQL – Es un editor SQL para MySQL. Se puede acceder a los
registros y modificarlos.
Modelado de datos – Permite ingeniería directa e inversa. Sirve para
diseñar tablas, campos, índices, etc.
Administración – Administra instancias de las bases de datos.
Configuración con PHP
Si vamos a compilar nuestro propio PHP, podemos incluirle la extensión de
MySQL. Si trabajamos en un entorno Windows, esto no será así, de forma que
lo que haremos será incluir la referencia a la extensión (¡ojo!, en PHP 4 MySQL
está incluido en PHP).
Para incluir la extensión, hemos de añadir la referencia a php_mysql.dll en el
fichero php.ini (activando la directiva extension=php_mysql.dll). Además,
necesitamos tener acceso a libmysql.dll, por lo que deberemos incluir la ruta a
este fichero en el PATH de Windows.
Para comprobar que una extensión está cargada, usaremos la función
phpinfo();
Información detallada puede encontrarse en el fichero install.txt.
Funciones PHP de trabajo con BBDD MySQL
Si usamos la extensión PHP MySQL, entre el conjunto de funciones disponibles
destacan:

mysql_affected_rows — Obtiene el número de filas afectadas en la
anterior operación de MySQL

mysql_close — Cierra la conexión de MySQL

mysql_connect — Abre una conexión al servidor MySQL

mysql_create_db — Crea una base de datos MySQL

mysql_db_query — Envía una consulta MySQL

mysql_drop_db — Omite (elimina) una base de datos MySQL

mysql_errno — Devuelve un mensaje de error con un valor numérico
de la operación anterior con MySQL

mysql_error — Devuelve el texto con error del mensaje de la anterior
operación MySQL

mysql_fetch_array — Recupera una fila de resultado como un array
asociativo, un array numérico o como ambos

mysql_fetch_assoc — Recupera una fila de resultado como un array
asociativo

mysql_fetch_row — Recupera una fila de resultado como un array
numérico

mysql_free_result — Libera la memoria del resultado

mysql_list_dbs — Lista de las bases de datos disponibles en un
servidor MySQL

mysql_list_fields — Lista los campos del resultado de MySQL

mysql_list_tables — Lista las tablas de una base de datos MySQL

mysql_num_fields — Obtiene el número de campos en un resultado

mysql_num_rows — Obtener el número de filas de un resultset

mysql_ping — Efectuar un chequeo de respuesta (ping) sobre una
conexión de servidor o reconectarse si no hay conexión

mysql_query — Enviar una consulta MySQL

mysql_result — Obtener datos de resultado

mysql_select_db — Seleccionar una base de datos MySQL
Aquí está un ejemplo básico de uso de MySQL con PHP:
<?php
// Conectando, seleccionando la base de datos
$link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
or die('No se pudo conectar: ' . mysql_error());
echo 'Connected successfully';
mysql_select_db('my_database') or die('No se pudo seleccionar la base
de datos');
// Realizar una consulta MySQL
$query = 'SELECT * FROM my_table';
$result = mysql_query($query) or die('Consulta fallida: ' . mysql_erro
r());
// Imprimir los resultados en HTML
echo "<table>\n";
while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {
echo "\t<tr>\n";
foreach ($line as $col_value) {
echo "\t\t<td>$col_value</td>\n";
}
echo "\t</tr>\n";
}
echo "</table>\n";
// Liberar resultados
mysql_free_result($result);
// Cerrar la conexión
mysql_close($link);
?>
FLASH
Entorno de edición
El entorno de edición consiste en una ventana principal en la que se pueden
distinguir diferentes secciones:
4
5
3
2
1
, siendo:
La sección 1 corresponde a la parte de edición de las propiedades de los
objetos seleccionados.
La sección 2 es la ventana de acciones. En ella se programará el código en
ActionScript asociado a la película o a los objetos instanciados en la misma.
La sección 3 es la ventana de edición de la película. En ella se insertan los
objetos que formarán parte de ella. La visión en esta ventana corresponde a un
fotograma concreto.
La sección 4 es la línea de tiempo de la película. La línea de tiempo consiste en
un conjunto de capas que contienen los fotogramas.
La sección 5 corresponde a la barra de herramientas, en las que disponemos
de las herramientas típicas de los programas de edición de imágenes.
Edición básica
Flash presenta al arrancar, el escenario que es el lugar donde se llevará a cabo
la animación. El escenario sitúa el origen de coordenadas en la esquina
superior izquierda. El tamaño total del escenario es una propiedad del
documento, que puede cambiarse en Modificar->Documento.
Un clip de película se organiza en escenas, cada una de las cuales tiene una
línea de tiempo propia. Para moverse entre escenas, se usa el control que hay
en la parte superior del editor:
El escenario de Flash se organiza en capas, como en otros programas de
edición gráfica. Cada capa está formada por un conjunto de fotogramas que se
extiende a lo largo de la línea de tiempo de la película. La velocidad de
reproducción de una película depende del número de frames (o fotogramas)
por segundo, pudiendo cambiarse este atributo.
Existe la posibilidad de usar una capa como capa de máscara. El fundamento
de una capa de este tipo es que la forma o formas que estén dibujadas
actuarán como si estuvieran recortadas, permitiendo ver la capa que está
detrás.
Cuando creamos una capa de máscara, las capas que estan por debajo se
incluyen como capas enmascaradas:
Flash como programa de animación
Como hemos dicho, flash es un programa que permite crear animaciones. Hay
dos enfoques básicos a la hora de realizar una animación:
Animación fotograma a fotograma – Es el enfoque que se utiliza en las
películas de dibujos animados antiguas. En ella, un conjunto de fotogramas se
van alternando para generar la animación. En esta opción se incluye el trabajo
con sprites.
Animaciones interpoladas – Es una forma más moderna y cómoda de trabajar.
Consiste en definir un estado inicial y otro final, en el que especificamos los
objetos y sus estados (fotogramas clave). En los fotogramas intermedios las
características se interpolan mediante una función matemática que proporciona
la animación.
Pueden modificarse también características como el color o la transparencia de
una figura.
Las interpolaciones de forma se clasifican en dos bloques: interpolaciones de
movimiento e interpolaciones de forma.
Interpolaciones de movimiento
Las interpolaciones de movimiento modifican la posición, escala y ángulo de
giro de los objetos.
Las interpolaciones de movimiento se hacen con una animación a velocidad
constante. Para modificar esto, existe la opción aceleración en el menú de
propiedades:
La interpolación se acelerará para valores entre -1 y -100 y se ralentizará con
valores entre 1 y 100.
Las interpolaciones de movimiento pueden restringirse a una trayectoria
determinada, usando un trazado (o capa guía). Un trazado no es más que una
capa en la que hay una curva dibujada. La capa que actúa como guía debe
tener la capa que contiene la animación como capa dependiente:
La interpolación se consigue fijando el punto de referencia del objeto sobre la
curva:
Podemos comprobar el efecto de una interpolación visionando varios
fotogramas a la vez, lo que se consigue mediante el papel cebolla (hay
diferentes tipos, de contorno, la figura entera, etc.…):
Hay otro tipo de transformaciones que también consideraremos en esta
categoría, como son las modificaciones de color, transparencia, etc.
Interpolaciones de forma
En este tipo de interpolación, lo que cambia es la forma misma de los objetos.
Durante la interpolación, se intenta que la deformación sea continua. No
obstante, puede ocurrir que queramos que la deformación se lleve a cabo de
una forma determinada. Para ello utilizaremos los consejos de forma. Los
consejos de forma son referencias a puntos concretos que aparecen en la
forma inicial y final, y que colocaremos sobre el objeto que queremos deformar.
Para reproducir una película entramos en Control --> Reproducir, o también
podemos probarla haciendo Ctrl.+Enter.
Objetos, instancias, botones y otros
Los objetos creados y editados en Flash pueden convertirse en símbolos
(clases) que pueden ser usadas varias veces como instancias. Las instancias
pueden ser modificadas como objetos independientes. Una vez creados así, los
símbolos están disponibles en la biblioteca. Las bibliotecas pueden ser
compartidas
Las instancias solo pueden situarse en fotogramas clave
Hay tres tipos de símbolos que pueden definirse: gráficos, botones y clips de
película.

Gráficos – Se utilizan para imágenes estáticas y animaciones ligadas a
la línea principal.

Botones – Son símbolos gráficos que incorporan interactividad. Los
botones
tienen
asociados
cuatro
estados
(en
realidad
cuatro
fotogramas), que serán editados para modificar el aspecto del botón en
los estados sobre el botón, botón presionado y la definición de la zona
activa del botón (zona que reacciona a las actuaciones del usuario).

Clips de películas – Los clips de películas con objetos que contienen su
propia línea de tiempo con varios fotogramas. La ventaja es que no
ocupan varios fotogramas en la línea de tiempo del archivo principal. Los
clips de película se editan como una película normal, y se ve que
estamos editándola en la línea de tiempo:
Una vez creados los símbolos, se pueden crear instancias de los mismos y que
pueden nombrarse desde la ventana propiedades:
Animaciones múltiples
Existe la posibilidad de convertir una animación en un clip de película, de forma
que pueda ser utilizado como un elemento en otra escena (por ejemplo para
dibujar las ruedas de un coche).
ActiveScript: Lenguaje de Flash
ActiveScript es un lenguaje muy parecido a JavaScript que podemos utilizar
para programar interactividad en las animaciones. El código puede estar ligado
a un símbolo o a fotogramas del escenario, siendo ejecutado cuando
corresponda en cada caso (al cargar un fotograma o al recibir un objeto un
evento de algún tipo).
Las acciones (código) se edita en la ventana Acciones:
Algunas funciones básicas para utilizar son:
Trace(mensaje) – Muestra un mensaje con fines de depuración en una ventana
de salida.
Existe una opción de depuración, a la que podemos acceder mediante Control-> Depurar Película.
Características del lenguaje
Tipos de datos

String - Delimitados por comillas simples o dobles. Las cadenas se
concatenan con el operador +.

Number

Boolean

Object

MovieClip

Null

Undefined
EL tipo de datos de una variable puede determinarse con la función
typeof(variableName));
Variables
Las variables se pueden declarar de forma estricta usando la directiva var.
var x:Number = 7;
Instrucciones de control
IF
if (this._x>rightBound) {
X=1;
} else if (this._x<leftBound) {
X=2;
} else if (this._y>bottomBound) {
X=3;
} else {
X=4;
}
SIWTCH
switch (number) {
case 1:
trace ("case 1
break;
case 2:
trace ("case 2
break;
case 3:
trace ("case 3
break;
default:
trace ("ningún
}
es verdadero");
es verdadero");
es verdadero");
case es verdadero")
FOR
for(i=0; i<10; i++) {
my_array [i] = (i + 5)*10;
trace(my_array[i]);
}
WHILE
while (var i > 0) {
my_mc.duplicateMovieClip("newMC" + i, i );
i--;
}
DO..WHILE
do {
statement(s)
} while (condition)
Operadores
Numéricos
Operador
Operación realizada
+
Suma
*
Multiplicación
/
División
%
Módulo (resto de la división)
-
Resta
++
Incremento
--
Decremento
De comparación
En la tabla siguiente se enumeran los operadores de comparación de ActionScript:
Operador
Operación realizada
<
Menor que
>
Mayor que
<=
Menor o igual que
>=
Mayor o igual que
Lógicos
En la tabla siguiente se enumeran los operadores lógicos de ActionScript:
Operador
Operación realizada
&&
AND lógico
||
OR lógico
!
NOT lógico
Sobre bits
Operador
Operación realizada
&
AND en modo bit
|
OR en modo bit
^
XOR en modo bit
~
NOT en modo bit
<<
Desplazamiento a la izquierda
>>
Desplazamiento a la derecha
>>>
Desplazamiento a la derecha con relleno con ceros
De igualdad
Operador
Operación realizada
==
Igualdad
===
Igualdad estricta
!=
Desigualdad
!==
Desigualdad estricta
De asignación
Operador
Operación realizada
=
Asignación
+=
Suma y asignación
-=
Resta y asignación
*=
Multiplicación y asignación
%=
Módulo y asignación
/=
División y asignación
<<=
Desplazamiento a la izquierda en modo bit y asignación
>>=
Desplazamiento a la derecha en modo bit y asignación
>>>=
Desplazamiento a la derecha rellenando con ceros y asignación
^=
XOR en modo bit y asignación
|=
OR en modo bit y asignación
&=
AND en modo bit y asignación
Definición de funciones
Las funciones se asocian a la línea de tiempo del clip que las define. Para
definir una función global, se debe definir con la directiva _global, como en el
ejemplo:
_global.prueba = function (x) {
return x;
}
Para definir una función de línea de tiempo, usamos la expresión usual:
function areaOfCircle(radius) {
return Math.PI * radius * radius;
}
Los valores se devuelven con la instrucción return.
Existen funciones y procedimientos predefinidos, algunos de los más útiles
son:

clase Array – Permiten el trabajo con arrays de objetos.

clase Button – Permite trabajar con botones en la animación.

clase Color – Clase asociada a los colores y su gestión. Se utiliza para
asignar propiedades de objetos.
my_color = new Color(my_mc);
my_color.setRGB(0xff9933);

clase Date –Para trabajar con fechas.

getProperty – Lee una propiedad de un objeto :
my_mc_x = getProperty(_root.my_mc, _x);

getTimer – Número de milisegundos desde el inicio de la reproducción.

getURL – Carga una página web:

gotoAndPlay(), gotoAndStop() –Envía el lector al fotograma que se
getURL(incomingAd, "_blank");
especifique y comienza la reproducción o se pausa.

clase Key – Es una interfaz para el control de los eventos de teclado.
Ver más adelante.

loadVariables, loadVariablesNum – Permite la carga de un conjunto de
variables desde un fichero externo (usualmente un fichero de texto, o la
salida de un script PHP).

clase LoadVars – Una posibilidad alternativa al uso de las funciones
anteriores.

claseMath – Contiene la definición de funciones matemáticas.

clase Mouse – Se utiliza para acceder a las propiedades del puntero del
ratón, y para capturar eventos del mismo.

clase MovieClip – Para trabajar con clips de película. Contiene métodos
para la creación dinámica de objetos como líneas y otros.

on()- Controlador de eventos. Admite los siguientes: press, release,
releaseOutside, rollOut, rollover, keyPress ("key").

play() – Activa la cabeza lectora sobre la línea de tiempo.

setInterval – Crea una alarma para llamar regularmente a una función.

setProperty – Da valor a una propiedad de un objeto.

clase String – Para trabajar con cadenas.

clase System.capabilities – Contiene funciones para determinar las
características del sistema.

clase TextFormat – Clase de formatos de texto, que usaremos para
asignar al texto de un control, por ejemplo:
my_fmt = new TextFormat();
my_fmt.bold = true;
my_txt.setTextFormat(my_fmt);

clase XML – Se utiliza para trabajar con archivos XML.
Interacción con el usuario
Para controlar las entradas de usuario, tenemos que atender las entradas del
ratón y las entradas por teclado
Control de entradas de ratón
Se realiza mediante el objeto Mouse. Básicamente, el proceso consiste en
crear un Listener asociado a un objeto que recibe los eventos de ratón, El
objeto debe tener métodos asociados a los eventos definidos sobre Mouse:
onMouseDown, onMouseMove, onMouseUp y onMouseWheel.
someListener = new Object();
someListener.onMouseDown = function () { ... };
Mouse.addListener(someListener);
Control de eventos de teclado
La pulsación de teclas puede controlarse a partir del objeto Key. El objeto Key
contiene una serie de constantes como BACKSPACE, CONTROL, etc.. que
representan teclas concretas.
Por otro lado, existe una serie de funciones que permiten el control de los
eventos de teclado. A continuación tenemos un ejemplo:
function myOnPress()
{
trace( "hola" );
}
myListener = new Object();
myListener.onKeyDown = function ()
{
trace ("Ha presionado una tecla.");
}
myListener.onKeyUp = function () {
trace ("Ha soltado una tecla.");
}
myListener.onPress = myOnPress;
Key.addListener(myListener);
Carga dinámica de datos
Una forma sencilla de acceder a datos externos es mediante la clase XML, que
nos permite comunicar la película con ficheros de tipo XML.
Otra opciones utilizar la clase LoadVars, que permite la lectura de datos a partir
de ficheros de texto externos a la aplicación Flash. Para poder acceder a los
valores, estos deben estar guardados con el siguiente formato:
&nombre_var1=valor_var1&nombre_var2=valor_var2…..
Código de carga de las variables:
var cargador_lv:LoadVars = new LoadVars();
cargador_lv.onLoad = function(exito) {
if (exito) {
nombre_txt.text = this.nombre;
edad_txt.text = this.edad;
} else {
nombre_txt.text = "Error!! :(";
}
};
stop();
Código que desencadena la carga de los datos:
on (release) {
cargador_lv.load("variables.txt");
}
La extensión de este método permite utilizar como orígenes de datos a ficheros
PHP, desde los que podemos consultar a bases de datos para construir estos
datos.
Una vez que el documento se ha cargado correctamente, se puede acceder al
nombre de las variables tratando la variable como una propiedad del objeto
LoadVars definido.
La carga de un documento puede hacerse también mandando parámetros (que
serán recepcionados por el fichero PHP, mediante el método sendAndLoad().
Código de carga de las variables:
var envio_lv:LoadVars = new LoadVars();
var recibir_lv:LoadVars = new LoadVars();
function enviarForm() {
envio_lv.nombre = nombre_txt.text;
envio_lv.email = email_txt.text;
envio_lv.clave = clave_txt.text;
envio_lv.sendAndLoad("form.php", recibir_lv, "POST");
}
recibir_lv.onLoad = function(exito) {
if (exito) {
mensaje_txt.html = true;
mensaje_txt.htmlText = this.mensaje;
} else {
mensaje_txt.htmlText = "<b>Error en el Script</b>";
}
};
Código PHP:
form.php
<?
$nombre=$_POST["nombre"];
$email=$_POST["email"];
$password=$_POST["password"];
echo "mensaje=Bienvenido " . nombre . "<br />Entra con tu clave '" .
password . " :D";
echo "<br />Att: The Cristalab Team";
?>
Download