php 5 total

222
Autor: Fernando Carraro Aguirre Liga: http://programacionfacil.com/php/start I.- PHP ELEMENTOS BASICOS 1.- INTRODUCCION 2.- MODELO DE SOLUCION 3.- VARIABLES 4.- DECLARACION DE VARIABLES 5.- OPERADORES ARITMETICOS 6.- JERARQUIA DE OPERACIONES 7.- CONCEPTOS BASICOS DE OOP 8.- REQUISITOS PARA POI 9.- APLICACIONES APENDICE: OBJETOS HTML APENDICE : PALABRAS RESERVADAS PHP II.- PHP INSTRUCCIONES DE CONTROL DE PROGRAMA 1.- INTRODUCCION 2.- INSTRUCCIONES CONDICIONALES 3.- CONDICIONES SIMPLES 4.- INSTRUCCION IF 5.- CONDICIONES COMPUESTAS 6.- INSTRUCCION SWITCH() 7.- SELECT

Upload: carrarox8586

Post on 12-Jun-2015

8.816 views

Category:

Documents


6 download

TRANSCRIPT

Page 1: PHP 5 TOTAL

Autor: Fernando Carraro Aguirre Liga: http://programacionfacil.com/php/start

I.- PHP ELEMENTOS BASICOS

1.- INTRODUCCION

2.- MODELO DE SOLUCION

3.- VARIABLES

4.- DECLARACION DE VARIABLES

5.- OPERADORES ARITMETICOS

6.- JERARQUIA DE OPERACIONES

7.- CONCEPTOS BASICOS DE OOP

8.- REQUISITOS PARA POI

9.- APLICACIONES

APENDICE: OBJETOS HTML

APENDICE : PALABRAS RESERVADAS PHP

II.- PHP INSTRUCCIONES DE CONTROL DE PROGRAMA

1.- INTRODUCCION

2.- INSTRUCCIONES CONDICIONALES

3.- CONDICIONES SIMPLES

4.- INSTRUCCION IF

5.- CONDICIONES COMPUESTAS

6.- INSTRUCCION SWITCH()

7.- SELECT

Page 2: PHP 5 TOTAL

8.- CHECKBOX

9.- RADIOBUTTON

10.- CICLO FOR

11.- CICLO WHILE

12.- CICLO DO WHILE

13.- CONCLUSIONES CICLOS

III.- PHP ARREGLOS

1.- INTRODUCCION

2.- ARREGLOS EN PHP

3.- ARREGLOS TIPO LISTAS(1)

4.- LISTAS o VECTORES (2)

5.- FUNCIONES ESPECIALES

6.- TABLAS o MATRICES

7.- ARREGLOS ASOCIATIVOS

IV.- PHP PROCEDIMIENTOS Y FUNCIONES

1.- PROCEDIMIENTOS

2.- PARAMETROS

3.- VARIABLES LOCALES Y GLOBALES

4.- FUNCIONES

5.- VARIABLES DE SESSION

V.- PHP REGISTROS Y ARCHIVOS SECUENCIALES

1.- INTRODUCCION

2.- ESTRUCTURAS O REGISTROS

3.- ARCHIVOS (1)

4.- ARCHIVOS (2)

5.- ALTAS GRABACION ARCHIVOS

Page 3: PHP 5 TOTAL

6.- LECTURA ARCHIVO

7.- BUSQUEDA EN ARCHIVO DIRECTO

8.- FILTROS o CONDICIONES

9.- BAJA o ELIMINACION

10.- OPERACIONES CON CAMPOS

11.- EDICION o MODIFICACION REGISTROS

12.- GRAFICOS

VI.- PHP REGISTROS Y ARCHIVOS DIRECTOS

1.- INTRODUCCION ARCHIVOS DIRECTOS

2.- GRABACION O ALTAS ARCHIVOS

3.- LECTURA O CONSULTA ARCHIVO DISCO

4.- BUSQUEDA EN ARCHIVO DIRECTO

5.- FILTROS o CONDICIONES

6.- BAJA o ELIMINACION

7.- OPERACIONES CON CAMPOS

8.- EDICION o MODIFICACION REGISTROS

9.- GRAFICOS

VII.- MYSQL INT A LAS BASES DE DATOS MYSQL

1.- INTRODUCCION

2.- MODELOS DE ALMACENAMIENTO DE DATOS

3.- TABLAS

4.- TABLAS (CONTINUACION)

5.- MYSQL (1)

6.- MYSQL (2)

7.- SELECCION O DESPLIEGUE

8.- INSERCCION O ADICION DE REGISTROS

Page 4: PHP 5 TOTAL

9.- BUSQUEDAS

10.- FILTROS

11.- OPERACIONES CON CAMPOS

12.- BAJAS

13.- EDICION DE REGISTROS

14.- GRAFICOS O IMAGENES

APENDICE: TELNET

TEMA 1: PHP INTRODUCCION

Los nuevos sistemas de informacion son costosos en tiempos y recursos, la solucion moderna de sistemas de informacion exigen nuevas herramientas y metodologias para resolver rapida, economica y eficiente los problemas de informacion planteados por las organizaciones.

Aun mas el pleno potencial del hardware no es aprovechado plenamente y existe un considerable retraso con el software y sus aplicaciones, generando lo que se conoce como “crisis del software”.

En programacion tradicional, modular o estructurada un programa describe una serie de pasos a ser realizados para la solucion de un problema, es decir es un algoritmo, en particular este modelo de programacion se uso mucho para generar programas o aplicaciones en ambientes pc's y con consolas, es decir el programa se ejecutaba en una consola de msdos por ejemplo, y el programa o aplicacion se tenia que portar fisicamente a otras pc's, al final de su ciclo de vida de este modelo se habia mejorado y ya era posible que se ejecutara en alguna ventana-consola de ambientes windows, con mejor interfase como fonts, colores, background, etc.

En programacion orientada a objetos ( OOP ) un programa es considerado como un sistema de objetos interactuando entre si, ambientes de desarrollo visuales facilitan aun mas la construccion de programas y solucion de problemas, porque permiten abstraer al ingeniero de software de todo el GUI (interfase grafica) del problema, que constituye mas del 60% del codigo normal de un programa, en general este ambiente permitio una mejora en la interfase del programa con el usuario de la aplicacion ya que en este caso solo se manejaban formas o ventanes llenas de componentes o controles especializados en alguna tarea especifica.

A este modelo de programacion o construccion de programas los compiladores modernos se adaptaron rapidamente y tenemos aplicaciones fantasticas, en donde alguna forma o ventana esta llena de controles visibles e invisibles que realizan muchas tareas donde ademas de los componentes o controles que proporciona directamente el compilador cuando se instala, existen miles de controles o componentes extras en muchas partes del mundo realizados por programadores talentosos y que enriquecen el contenido de nuestros programas y aplicaciones visuales.

Page 5: PHP 5 TOTAL

Al principio estas aplicaciones, se construian pensando en que se ejecutaban en una pc con ambiente grafico o en una serie de pc's proximas fisicamente sin embargo el rapido avance de las redes dentro de las empresas u organizaciones conllevan a que los fabricantes de compiladores cada vez incluyeran mas y mas controles o componentes que permitan ejecutar el programa o aplicacion simultaneamente en una red de pc's.

Sin embargo cuando se habla de redes actuales estamos hablando de la red de redes (internet) y si en redes internas o intranets el retraso en el tiempo de comunicacion entre sus pc's internas y la cantidad de informacion a trasmitir entre las mismas no es algo muy importante o inmanejable, este problema de tiempo de trasmision y cantidad de informacion, si es un factor muy import ante cuando se pretende construir programas o aplicaciones que deban compar tirse o usarse por muchas pc's conectadas a internet, desgraciadamente como f actor externo que es, no esta bajo control de la empresa o del programador.

Es decir se ocupa un nuevo modelo de programacion que tome en cuenta que el programa o aplicacion se debera ejecutar simultaneamente por cientos o miles de pc's interconectadas entre si, ademas este modelo debe contener una interfase comun y adecuada al usuario remoto de esas pc's y sobre todo tomar en cuenta los dos factores externos ya mencionados, mas algunos otros no incluidos en este comentario.

Este modelo de programacion de aplicaciones que se ejecuta en forma remota y con multiusuarios, es el que adoptaremos en el resto del curso.

En particular este modelo descansa en la interfase mas comun que existe actualmente y muy familiar a todos los usuarios de aplicaciones del mundo esta interfase son las paginas hmtl que se ejecutan en un browser normal el programa o aplicacion se alimentara de paginas html y creara paginas html con las respuestas o resultados, el programa o aplicacion se pone y se ejecuta en un llamado servidor de paginas ( web server).

PHP es un compilador linux que permiten usar cualquiera de los tres enfoques en la solucion de problemas de informacion que puedan y deban ser resueltos empleando el computador y el lenguaje aunque se repite este curso esta enfocado al tercer modelo.

TEMA 2: PHP MODELO DE SOLUCION MYSQL

En general un problema de informacion es posible entenderlo, analizarlo y descomponerlo en todos sus componentes o partes que de una u otra manera intervienen tanto en su planteamiento como en su solucion.

Una herramienta rapida que nos permite descomponer en partes un problema para su solucion, es el llamado modelo de solucion, este consiste de una pequena caja que contiene los tres elementos mas basicos en que se puede descomponer cualquier problema sencillo de informacion, estas tres partes son:

1. LA PRIMERA PARTE son todos los datos que el computador ocupa para resolver el problema, estos datos son almacenados internamente en la memoria del computador en las llamadas variables de entrada.

2. LA SEGUNDA PARTE son todas las operaciones generalmente algebraicas necesarias para solucionar el problema, generalmente esta parte del modelo es una formula (o igualdad matematica, ej. X= y + 5).

Page 6: PHP 5 TOTAL

3. LA TERCERA PARTE es el resultado o solucion del problema que generalmente se obtiene de la parte de operaciones del modelo y dichos datos estan almacenados en las llamadas variables de salida.

En resumen para todo problema sencillo de informacion es necesario plantearse las siguientes preguntas:

Que datos ocupa conocer el computador para resolver el problema y en cuales variables de entrada se van a almacenar ?

Que procesos u operaciones debe realizar el computador para resolver el problema planteado ?

Que informacion o variables de salida se van a desplegar en pantalla para responder al problema planteado originalmente?

Como nota importante no confundir los terminos datos, variables e informacion;

Datos se refiere a informacion en bruto, no procesada ni catalogada, por ejemplo “Tijuana”, “calle primera # 213”,”15 anos”, ” $2,520.00”, etc.

Variables es el nombre de una localidad o direccion interna en la memoria del computador donde se almacenan los datos, ejemplo de variables para los casos del inciso anterior, CIUDAD, DIRECCION, EDAD, SUELDO, ETC.

Informacion son datos ya procesados que resuelven un problema planteado.

EJEMPLO DE MODELO DE SOLUCION

Construir un modelo de solucion que resuelva el problema de calcular el area de un triangulo con la formula area igual a base por altura sobre dos.

Variable(s) de Entrada Proceso u Operacion Variable(s) de Salida BASE ALTURA AREA= BASE * ALTURA / 2 AREA

PROBLEMA 2.- CONVERTIR LA EDAD EN ANOS DE UNA PERSONA A MESES.

PROBLEMA 3.- CONVERTIR PESOS A DOLARES.

PROBLEMA 4.- CALCULAR EL AREA DE UN CIRCULO CON LA FORMULA

Page 7: PHP 5 TOTAL

PROBLEMA 5.- EVALUAR LA FUNCION PARA CUALQUIER VALOR DE X.

Observar para el caso de constantes fijas o conocidas (PI) no se debe dar como dato de entrada su valor, en cambio colocar directamente su valor dentro de la formula, en la parte de operaciones del problema.

Pero recordar tambien que existiran problemas sencillos donde:

No se ocupan entradas o no se ocupan operaciones, pero todos ocupan salida.

Una formula grande o muy compleja puede ser mas segura y facil de resolver, si es descompuesta y resuelta en partes, juntando al final los parciales para obtener el resultado final.

Un problema puede tener mas de una solucion correcta.

El problema no esta suficientemente explicado o enunciado, entonces, estudiarlo, analizarlo y construirlo de manera generica.

TAREAS PHP MYSQL :

Construir los modelos de solucion de los siguientes problemas:

PROBLEMA 6.- Convertir millas a kilometros(caso normal)

PROBLEMA 7.- Convertir 125 metros a centimetros(no ocupa entradas)

PROBLEMA 8.- Se calcula que en promedio hay 4.7 nidos en cada arbol en la UABC, tambien se calcula que en cada nido existen un promedio de 5.8 pajaros, se pide calcular la cantidad total de nidos y de pajaros en los 227 arboles que existen en la UABC. (no ocupa entradas)

Page 8: PHP 5 TOTAL

PROBLEMA 9.- La gorda Sra. Lopez y sus 8 hijos solo compran una vez al mes su mandado en conocido supermercado, en dicha tienda el kilogramo de frijol cuesta $8.75, el paquete de tortillas cuesta $3.55 y el frasco de cafe vale $14.25, si solo compran de estos tres productos para su mandado, calcular su gasto total. ( problema no claro)

PROBLEMA 10.- Capturar y desplegar los cinco datos mas importantes de un automovil(no ocupa operaciones)

PROBLEMA 11.- La distancia Tijuana - Ensenada es de 110 kilometros. Si un automovil la recorre a una velocidad constante de 30 millas por hora, cuanto tiempo tarda en llegar. ( 1 milla = 1.609 Km.) (dos maneras correctas de resolverlo).

PROBLEMA 12.-Evaluar la funcion para cualquier valor de x.(caso normal).

PROBLEMA 13.-Evaluar la funcion para cuando x vale 4 . (no ocupa entradas).

14.- Evaluar el factorial de cualquier numero usando la formula: n!=n!-1 15.-La distancia que recorre un auto es de 50 kms y su velocidad es de 30 millas por hora .?Cuanto tiempo tardara en llegar? 16.-Encontrar la derivada de x para cualquier valor con la formula(d/dx(x)=1) 17.-Calcular l interes que gana un capital de x pesos a una tasa de interes del 15% annual en un periodo de n anos. 18.-Que aceleracion tiene un tren que parte de tijuana a 10 km/hr y pasa por ensenada una hora despues a 50 km/hr. 19.-Calcular el numero de aulas en una escuela que tiene 10 edificios y cada edificio 3 pisos y cada piso 5 aulas, excepto un edificio que solo tiene dos pisos. 20.-Si en una escuela hay 30 maestros y 15 son hombres que atienden a 10 alumnos cada uno. Cuantas maestras hay? 21.-Calcular la corriente de un circuito con un voltaje de 15v y una resistencia de 6 ohms. Formula (I= V/R) 22.-Calcular la normal estandar(z) dados los datos por el usuario: X=dato, ƒÊ=media, d=desviacion. Formula (Z = X-M / d) 23.-Dado un numero(N) cualesquiera obtener su raiz y potencia cuadrada .

24.-Determinar la media de 5 numeros diferentes. 25.-Determinar la velocidad v requerida para recorrer una distancia d en un tiempo t . Formula (V = d * t) 26.-Determinar la pendiente de una recta. Formula (y = m x + b)

Page 9: PHP 5 TOTAL

27.-Calcular la funcion de y= x2 + 8x + 3 para cualquier x 28.-Convertir minutos a horas. 29.-Aplicar la formula general para a=1, b=2, c=3. 30.-Se desea instalar un cable de red, el cliente pide 30 pies, considerando que se venden en metros, cuantos debera comprar. 31.-Un campesino siembra trigo en un area cuadrada de 25 mts., ? cual es el largo del cerco frontal en cms.? 32.-Resolver x2 + 15x - 8 para cualquier variable (X). 33.-Convertir �‹C a �‹F. 34.-Si cada salon de la escuela tiene 40 alumnos y son 30 salones ?Cuantos alumnos son en toda la escuela? 35.-Si Juan trabaja 5 dias a la semana y descansa 2 ?Cuantos dias trabajo en 4 anos? 36.-Si en una oficina se procesan 20 facturas cada 10 minutos cuantas se procesaran si se trabajan 5 horas? 37.-Si una empresa tiene _ de activo y un pasivo de _ ?Cual es su capital?. Formula (C = A-P) 38.-Calcule el voltaje de un circuito dada una intensidad I y una resistencia R. Formula (V=IR) 39.-Calcule la frecuencia de una onda que circula con un tiempo t. Formula (F=1/t) 40.-Calcule la potencia de un circuito con un voltaje V y una intensidad I. Formula (f = VI) 41.-Calcule el total que tendra que pagar una persona que va al cine dependiendo del no. de boletos a comprar y el precio. 42.-Calcule las anualidades que tendra que pagar una persona que pidio un prestamo. Dependiendo del tiempo que el elija y el interes por ano. Formula (Anualidad=(Prestamo/Tiempo)+interes) 43.-Determinar cuanto ganara una persona en base a la horas trabajadas. Tomando en cuenta el pago por hora. 44.-Convertir horas a segundos. 45.-Calcular la fuerza. Formula (fuerza = trabajo / tiempo)

TEMA 3: VARIABLES PHP

Identificadores son conjuntos de letras y/o numeros que se utilizan para simbolizar todos los elementos que en un programa, son definibles por el usuario (programador o ingeniero de software) del mismo, como son las variables donde se almacenan datos, funciones( pequenos modulos con codigo), etiquetas, clases, objetos, etc.

Page 10: PHP 5 TOTAL

En php un identificador es una palabra compuesta de letras y/o numeros de hasta 32 caracteres significativos, empezando siempre con una letra.

Una variable se define como un identificador que se utiliza para almacenar todos los datos generados durante la ejecucion de un programa.

Existen ciertas reglas en cuanto a variables:

Claras y con referencia directa al problema.

No espacios en blanco, ni simbolos extranos en ellas.

Se pueden usar abreviaturas, pero solo de caracter general.

No deben ser palabras reservadas del lenguaje php

Ejemplos de buenas variables:

Nombre, Edad, SdoDiario, IngMensual, Perimetro, Calif1, etc

TEMA 4: DECLARACION Y TIPO DE VARIABLES PHP

A toda variable que se use en un programa, se debera declarar de preferencia al principio del programa.

En php se tienen los tres tipos siguientes de variables:

A) VARIABLES ESCALARES.- PERMITEN ALMACENAR UN Y SOLO UN DATO DE CUALQUIER TIPO, POR EJEMPLO EDAD, SUELDO, NOMBRE, CARRERA, ETC.

Para simbolizar y usar una variable escalar en php solo anteponer el simbolo $ antes de la variable, por ejemplo $edad, $nombre, $sueldo, etc y a todo lo largo del programa debera acompanarse de este signo.

B) VARIABLES ARREGLOS.- SON AQUELLAS QUE PERMITEN ALMACENAR UN CONJUNTO DE DATOS EN UNA SOLA VARIABLE.

Para simbolizar y usar una variable arreglo en un programa en php, se puede usar cualquiera de los dos metodos siguientes:

1.- Usando el formato $nomarreglo[cant elementos]; ejemplo

$arreglo[5];

Se esta creando un arreglo d 5 elemntos, recordar que hasta que se cargue el primer dato, hasta entonces se tendra definido su tipo de dato.

2.- Usando la funcion ARRAY(); ejemplo

$arreglo=array(10,20,30,etc);

Page 11: PHP 5 TOTAL

C) ARREGLOS ASOCIATIVOS.- SON ARREGLOS ESPECIALES DONDE CADA POSICION DEL ARREGLO ESTA CONSTITUIDO POR UNA PAR DE VALORES, EL PRIMERO SE DENOMINA CLAVE Y EL SEGUNDO VALOR.

Para crear y usar un arreglo asociativo se usa tambien el simbolo $ y la palabra reservada ARRAY(), por ejemplo:

$alumno = array(“nom1”�“juan”,”ed1”�10,”nom2”�“pepe”,”ed2”�20) ;

Este tipo de arreglos, tambien se estudiara mas adelante en su unidad correspondiente.

D) Como nota importante a recordar, es con respecto a datos de tipo strings , cuando:

Se declare o se use una variable tipo string y el dato va entre apostrofes php no interpretara o entendera ningun caracter especial que contenga la string, ejemplo:

$ciudad = 'tijuana';

Se declare o se use una variable de tipo string y el dato este entre comillas, php si interpretara o entendera cualquier caracter especial que contenga la string, ejemplo:

$ciudad = “tijuana \n” —> \n es una secuencia de escape que significa nuevo renglon.

El operador punto o dot(.) se puede usar para encadenar strings, por Ej: “Hola”.”mundo” se desplegara “Holamundo”

En Php cuidado con datos o cadenas strings, porque es muy diferente tenerla entre apostrofes y entre comillas

TEMA 5: OPERADORES ARITMETICOS PHP MYSQL

En PHP un operador es un simbolo especial que indica al compilador que debe efectuar una operacion matematica o logica.

Php reconoce los siguientes operadores aritmeticos:

Operador Operacion + SUMA - RESTA * MULTIPLICACION / DIVISION % MODULO O RESIDUO

El operador (%) devuelve el residuo entero de una division entre enteros, ejemplo;

// area de declaracion $alfa; // area de operaciones

Page 12: PHP 5 TOTAL

$alfa = 23 % 4; // area de despliegue desplegar $alfa; <- El resultado en pantalla es 3

Otro ejemplo;

$alfa = 108 % 10;

desplegar $alfa; ← El resultado en pantalla es 8

Para resolver los problemas de potencias y raices, se usan ciertas instrucciones especiales que proporciona el lenguaje llamadas funciones matematicas, en php existe una libreria de instrucciones o funciones matematicas muy completa ver el manual de ayuda de php.

Recordar que todas las funciones reciben uno o mas datos o valores y regresan siempre un resultado, una de estas funciones matematicas es:

pow(base, exponente);

Esta funcion ocupa dos valores o datos( base y exp) y regresa un resultado ejemplo;

Resolver el problema de calcular

// area de declaracion de variables $base, $exponente, $potencia; // area de asignacion o carga o inicializacion de // variables $base=5; $exponente=3; // area de operaciones $potencia =pow( $base, $exponente); // Despliegue

desplegar $potencia; s El resultado en pantalla es 125.000000000

Para resolver el problema de raices, se aprovecha una de las mas elementales y conocida de las leyes de exponentes que dice:

Page 13: PHP 5 TOTAL

Es decir una raiz cualquiera se puede transformar a una potencia con un exponente fraccionario.

Ejemplo:

problema y = 3O x esto es equivalente a entonces usando funcion pow

$y= 3*pow($x, 0.5);

En este ejemplo de php se esta dando por supuesto que no interesa el tipo de dato que requiere la funcion pow() para trabajar correctamente

TEMA 9: APLICACIONES PROGRAMACION LINUX PHP

En este modelo de programacion, un programa en php es una combinacion de:

1.- Codigo y objetos HTML: Conseguir y estudiar un tutorial de HTML al final de este capitulo viene un apendice con los objetos ( no las instrucciones html).

2.- Codigo en php, al final de este capitulo tambien se incluye un apendice con las palabras reservadas de Php.

EL procedimiento de construccion de programa es construir una forma o pagina dinamica que contendra los componentes, controles u objetos HTML para resolver el problema y un poco de codigo o instrucciones php para resolver el problema planteado.

Resolvemos el problema de calcular el area de un triangulo con la formula area = base por altura sobre dos.

El codigo del programa prog1.php es:

<HTML> <FORM ACTION=prog1.php METHOD=post> DAME LA BASE:<INPUT TYPE=text NAME=base value="<? echo $base ?>" ><BR> DAME LA ALTURA:<INPUT TYPE=text NAME=altura value="<? echo $altura ?>"><BR> <INPUT TYPE=submit NAME=OK VALUE="evento1"><BR> </FORM></HTML> <?php if ($OK == "evento1") {

Page 14: PHP 5 TOTAL

$area = ($base * $altura) / 2; // formateando la salida $area=number_format($area,4); printf("AREA<INPUT TYPE=text NAME=area value=".$area.">"); }; ?>

corrida:

NOTAS:

1.- Observar que el programa esta compuesto de dos partes, la primera parte son instrucciones y componentes HTML, esta parte esta delimitada por los tags <html>.....</html>

La segunda parte son intrucciones y funciones php que manipulan los objetos HTML, estan instrucciones estan encerradas entre los tags <?php…..?> para este caso de instrucciones php tambien es valido usar los tags <?….?>.

2.- Comentarios en PHP (que no tienen ningun efecto en codigo) empiezan con . 3.- Este problema se resuelve usando 3 objetos TEXT de HTML ( ver apendice de objetos html al final de este capitulo) ocupa tambien un objeto SUBMIT tambien de HTML. Objetos de tipo Text de hmtl se usan tanto para capturar datos por parte del usuario asi como para desplegar datos o resultados por parte del programador. 4.- La parte html del programa empieza construyendo la propia pagina, esto se hace con <html>..</html>, despues construye una forma o ventana con los tags <form>..</form>, dentro de esta forma o ventana es donde se colocan 2 objetos de tipo TEXT y el objeto SUBMIT. 5.- La forma o ventana (FORM) lleva dos atributos o propiedades cargadas, la primera es ACTION=prog1.php, esto le indica al servidor de

Page 15: PHP 5 TOTAL

paginas que cuando alguien le haga click al submit de forma, esta debera volver a activar, compilar y ejecutar prog1.php, el segundo parametro es que los datos que se envian desde la maquina del usuario al servidor los debe mandar usando POST, este metodo post los manda en forma silenciosa desde el usuario al servidor, existe un segundo metodo (GET) en este segundo caso el envio de datos es publico en la maquina del usuario, son esos casos cuando ustedes llenan alguna foma en internet y hacen click en submit y si observan arriba se ve login=pepe password=pepepe etc, en estos casos los programadores estan usando GET en FORM, por eso en este curso se usara POST en FORM. 6.- Dentro de FORM se construyeron dos objetos TEXT, las propiedades que se cargaron son NAME=?? Y VALUE=??, NAME es el nombre que tendra el objeto para manipularlo o usarlo dentro del prgrama. Es importante entender que php convertira este NAME a una variable normal dentro del programa, por ejemplo un NAME=EDAD se convertira a la variable $EDAD (atencion no mezclar mayusculas y minusculas). La propiedad VALUE=?? Permite cargar o precargar un componente de tipo TEXT por ejemplo “input TEXT NAME=EDAD VALUE=50”, creara un control de tipo TEXT que se llamara EDAD y aparecera precargado con el dato 50. En el programa ejemplo en lugar de poner un dato directamente se esta cargando con el valor que tenga el componente TEXT o mejor dicho la variable de ese NAME. Otra vez, primero en VALUE se agrego un pedazo de codigo php (recordar que ya se explico como se pone codigo php dentro de un programa), dentro se esta usando la instruccion ECHO de php, esta instruccion es el equivalente a print, printf(), display, cout, etc de otros lenguajes de programacion y al final se despliega lo que vale la variable que representa el TEXT, es decir cuando primero se ejecuta el programa la caja TEXT esta en blanco o vacia por tanto la variable respectiva esta en cero o en blanco, luego cuando el usuario la carga con algun numero o dato y el programa se vuelva a ejecutar el dato proporcionado por el usuario no se pierde sino que se transfiere a la segunda pagina que el usuario ve usando la variable que creo php. 7.- El ultimo objeto, control o componente (son tres maneras distintas de simbolizar lo mismo) es SUBMIT, su funcion principal consiste en avisarle a la maquina del usuario que mande de regreso los datos del programa al servidor, esto con finalidad de que el servidor vuelva a activar el programa con los nuevos datos, SUBMIT lleva tambien dos parametros un NAME y un VALUE, y tambien php creara la variable con ese nombre y aparte tambien la cargara con dicho VALUE o valor , por ejemplo si se crea un submit NAME=PICAME VALUE=“ya se pico”, php creara una variable llamada $PICAME cargada con el dato “ya se pico”. 8.- Recordar de nuevo estudiar el tutorial de html y tambien los controles html porque html tiene un monton de tags muy utiles para construir paginas html con mucha mejor presentacion y formato incluyendo fonts, colores, imagenes, etc y en cuanto a los objetos html tambien tienen un monton de propiedades que les mejora la apariencia. 9.- En la parte PHP del programa toda la funcionalidad de programa debera encerrarse entre if ($OK == “evento1”){ CODIGO PHP}; Observar que primero se valida si el submit OK esta cargado con el valor “evento1”, esto ocurre cuando el usuario manda la forma de regreso al servidor con los datos cargados de los textbox's incluyendo el propio submit, cargado con evento1. En realidad no se ocupa este If(submit=valor){}, pero se agrega al programa por dos razones: a.- Es buena practica de programacion estar validando y asegurando el contenido del programa. b.- La segunda razon es que si se ponen dos submits en una forma, por ejemplo capturar dos numeros y un su bmit los suma y otro submit los resta, entonces sera facil poner dos if( ) en el programa, uno para restar y otro para sumar, solo recordar que cada su bmit debe llevar su propio NAME y su propio VALUE. 10.- El programa en si es muy sencillo solo recordar que php transformo los textbox a variables y transfirio el dato proporcionado por el usuario a dicha variable, por esta situacion ya se pueden usar las variables para rosolver el problema. Para desplegar el resultado se pueden usar dos metodos: a.- Como se hizo en el ejemplo, se construye un tercer textbox llamado AREA y se cargo su VALUE con la variable resultado $area. Despues de obtener el resultado, se esta formateando con

Page 16: PHP 5 TOTAL

la funcion number_format(var, cant de decimales) de php para su mejor presentacion pero esta parte del programa es opcional. En el codigo estamos usando print(“texto”); para construir el TEXTBOX de salida o despliegue pero recordar que tambien se puede usar echo “texto”; ambas hacen lo mismo pero es mas comun usar echo. b.- Escribir directamente el resultado en la pagina, por ejemplo: echo “el area = ”.$area; 11.- Este programa php (prog1.php) debera crearse con el notepad de windows o el editor de linux, revisar que la extension (.php) sea la correcta, recordar que notepad a veces les agrega la extencion .txt ( queda como prog1.php.txt) que no sirve para el servidor linux, en este ultimo caso renombrarla dentro del command prompt o msdos de tu windows. Ya creado correctamente subirlo a tu servidor de linux en LUNARPAGES usando el ftp del internet explorer ( o algun otro programa cliente ftp), al folder principal. Algunos servidores linux requieren que un programa ejecutable tenga un permiso de ejecucion, si este es el caso entonces desde la consola principal del servidor navegar hasta el directorio donde se encuentra el programa y dar la orden o comando CHMOD 755 PROG1.PHP Para ejecutarlo desde tu browser usar la siguiente direccion internet: http://LUNARPAGES/tusitio/prog1.php SUERTE Y TAREAS PHP SUGERIDAS: Seleccionar y construir 15 de los programas que vienen en el tema de modelo de solucion.

APENDICE 1A: PHP OBJETOS PROPIOS HTML

“Button, Submit, Reset, CheckBox, Radio, Password, Text, TextArea, Select, Hidden”

“Controles Button”, “Submit” y “Reset”.

Propiedades Eventos Metodos “form” “OnClick” “click” “name” “OnFocus” “focus” “value” “enabled”

Control “CheckBox”.

Propiedades Eventos Metodos “form” “OnClick” “click” “name” “OnFocus” “focus” “value” “enabled” “checked” “defaultchecked”

Control “Radio”.

Propiedades Eventos Metodos “form” “OnClick” “click” “name” “OnFocus” “focus” “value” “enabled”

Page 17: PHP 5 TOTAL

“checked”

Control “Password”.

Propiedades Eventos Metodos “form” “OnBlur” “blur” “name” “OnFocus” “focus” “value” “enabled”

Controles “Text” y “Textarea”s.

Propiedades Eventos Metodos “form” “OnBlur” “blur” “name” “OnFocus” “focus” “value” “enabled”

Control “Select”.

Propiedades Eventos Metodos “length” “OnBlur” “blur” “options” “OnFocus” “focus” “selectedIndex” “OnChange”

Control “Hidden”.

Propiedades Eventos Metodos “name” “value”

Table G-1. PHP Keywords

and or xor FILE exception php_user_filter LINE array() as break case cfunction class const continue declare default die() do echo() else elseif empty() enddeclare endfor endforeach endif endswitch endwhile eval exit() extends for foreach function global if include() include_once() isset() list() new old_function print() require() require_once() return() static switch unset() use var while FUNCTION CLASS METHOD

Page 18: PHP 5 TOTAL

FUENTE: MANUAL DE AYUDA PHP

FUNCIONES MATEMATICAS

Table 1. Math constants

Constant Value Description M_PI 3.14159265358979323846 Pi M_E 2.7182818284590452354 e M_LOG2E 1.4426950408889634074 log_2 e M_LOG10E 0.43429448190325182765 log_10 e M_LN2 0.69314718055994530942 log_e 2 M_LN10 2.30258509299404568402 log_e 10 M_PI_2 1.57079632679489661923 pi/2 M_PI_4 0.78539816339744830962 pi/4 M_1_PI 0.31830988618379067154 1/pi M_2_PI 0.63661977236758134308 2/pi M_SQRTPI 1.77245385090551602729 sqrt(pi) [4.0.2] M_2_SQRTPI 1.12837916709551257390 2/sqrt(pi) M_SQRT2 1.41421356237309504880 sqrt(2) M_SQRT3 1.73205080756887729352 sqrt(3) [4.0.2] M_SQRT1_2 0.70710678118654752440 1/sqrt(2) M_LNPI 1.14472988584940017414 log_e(pi) [4.0.2] M_EULER 0.57721566490153286061 Euler constant [4.0.2]

Only M_PI is available in PHP versions up to and including PHP 4.0.0. All other constants are available starting with PHP 4.0.0. Constants labeled [4.0.2] were added in PHP 4.0.2.

Table of Contents abs – Absolute valueacos – Arc cosineacosh – Inverse hyperbolic cosineasin – Arc sineasinh – Inverse hyperbolic sineatan2 – Arc tangent of two variablesatan – Arc tangentatanh – Inverse hyperbolic tangentbase_convert – Convert a number between arbitrary basesbindec – Binary to decimalceil – Round fractions upcos – Cosinecosh – Hyperbolic cosinedecbin – Decimal to binarydechex – Decimal to hexadecimaldecoct – Decimal to octaldeg2rad – Converts the number in degrees to the radian equivalentexp – Calculates the exponent of e (the Neperian or Natural logarithm base)expm1 – Returns exp(number) - 1, computed in a way that is accurate even when the value of number is close to zerofloor – Round fractions downfmod – Returns the floating point remainder (modulo) of the division of the argumentsgetrandmax – Show largest possible random valuehexdec – Hexadecimal to decimalhypot – Returns sqrt(num1*num1 + num2*num2)is_finite – Finds whether a value is a legal finite numberis_infinite – Finds whether a value is infiniteis_nan – Finds whether a value is not a numberlcg_value – Combined linear congruential generatorlog10 – Base-10 logarithmlog1p – Returns log(1 + number), computed in a way that accurate even when the value of number is close to zerolog – Natural logarithmmax – Find highest valuemin – Find lowest valuemt_getrandmax – Show largest possible random valuemt_rand – Generate a better random valuemt_srand – Seed the better random number generatoroctdec – Octal to decimalpi – Get value of pipow – Exponential expressionrad2deg – Converts the radian number to the

Page 19: PHP 5 TOTAL

equivalent number in degreesrand – Generate a random valueround – Rounds a floatsin – Sinesinh – Hyperbolic sinesqrt – Square rootsrand – Seed the random number generatortan – Tangenttanh – Hyperbolic tangentFUENTE : MANUAL DE AYUDA PHP

TEMA 1: PHP INTRODUCCION

Instrucciones de control de programa permiten alterar la secuencia normal de ejecucion de un programa.

Estas instrucciones se dividen en tres grandes categorias:

Instrucciones Condicionales que en PHP se implementan con las instrucciones if() y switch().

Instrucciones de ciclos con, for, while, do-while.

TEMA 2: INSTRUCCIONES CONDICIONALES LINUX PHP

Una de las mas poderosas caracteristicas de cualquier computador es la capacidad que tiene de tomar decisiones.

Es decir al comparar dos alternativas diferentes el computador puede tomar una decision, basandose en la evaluacion que hace de alguna condicion.

ejemplo de instrucciones condicionales ;

a)

si sueldo > 3000

desplegar “rico”

si no

desplegar “pobre”

fin-si

b)

si sexo = 'm'

imprime mujer

si no

imprime hombre

fin-si

De los ejemplos observar que los caminos por el computador dependeran de la evaluacion que el computador hace con y de la condicion.

Page 20: PHP 5 TOTAL

Todo lenguaje de programacion debe tener instrucciones que permitan formar condiciones e instrucciones que pueden evaluar esas condiciones.

El formato general de una instruccion condicional es:

Como se observa son cuatro partes bien diferenciadas entre si;

• La propia instruccion condicional en si • La condicion • El grupo cierto de instrucciones • El grupo falso de instrucciones

Cuando el computador evalua una condicion, el resultado de esa evaluacion solo es evaluado de dos maneras o la condicion es CIERTA o la condicion es FALSA.

Esto dependera del valor que tenga asignado o que se haya capturado para la variable que esta en la condicion, por ejemplo si se capturo 6000 en sueldo en el ejemplo a), entonces el computador indicaria que la condicion es CIERTA, pero en otro caso, si a la variable sueldo primero se le asigno un valor de 250 entonces el computador indicaria que la condicion es FALSA.

Ya dependiendo del resultado de la evaluacion, el computador ejecuta las instrucciones contenidas en la parte CIERTA o en la parte FALSA de la condicion.

Empezaremos el analisis por la CONDICION en PHP

TEMA 3: LINUX PHP CONDICIONES SIMPLES

En general todas las condiciones se forman con:

Variables Operadores Relacionales Constante o Variables $sexo == “m” $sueldo > 300000

Una condicion simple se define como el conjunto de variables y/o constantes unidas por los llamados operadores relacionales.

Los operadores relacionales que PHP reconoce son:

Operador Significado

Page 21: PHP 5 TOTAL

== Igual que > Mayor que < Menor que >= Mayor o igual que

⇐ Menor o igual que

!= o <> No es igual que o es diferente que

Observar y tener cuidado sobre todo con el operador de igualdad( , y el operador relacional de comparacion por igualdad(= , es decir;

$sueldo = 500 , Se esta pidiendo cargar o asignar la variable sueldo con el valor 500

$sueldo == 500 , Se esta pidiendo que se compare el valor o dato que se encuentra en la variable sueldo, contra el numero 500.

Solo este ultimo formato es valido en php dentro de una condicion en una instruccion condicional

TEMA 4: INSTRUCCION IF LINUX PHP

Es la instruccion condicional mas usada en los diversos lenguajes de programacion, su formato completo y de trabajo en php es :

cargar o asignar la variable de condicion;

if (condicion)

{ grupo cierto de instrucciones;}

else

{ grupo falso de instrucciones; };

Primus.- Observar donde van y donde no van los puntos y comas;

Secundus.- La condicion va entre parentesis ;

Tertius.- Si un if no ocupa un grupo falso de instrucciones, entonces no se pone el else, y la llave antes del else si terminaria con punto y coma.

Ejemplo:

PROG2.PHP

<HTML> <FORM ACTION=prog2.php METHOD=post> DAME SUELDO:<INPUT TYPE=text NAME=SUELDO value="<? echo $SUELDO ?>" ><BR>

Page 22: PHP 5 TOTAL

<INPUT TYPE=submit NAME=OK VALUE="evento1"><BR> </FORM></HTML> <?php if ($OK == "evento1") { // como se observa estamos usando if() tambien para evaluar si // ocurrrio el evento1 if ($SUELDO > 1000) { $RESULTADO = "rico"; printf("<INPUT TYPE=text NAME=RESULTADO value=".$RESULTADO.">"); echo "<BR>se puede escribir directamente en pagina tambien ".$RESULTADO; } else { $RESULTADO = "pobre"; printf("<INPUT TYPE=text NAME=RESULTADO value=".$RESULTADO.">"); echo "<BR>se puede escribir directamente en pagina tambien ".$RESULTADO; }; }; ?>

CORRIDA:

Page 23: PHP 5 TOTAL

TAREAS PHP MYSQL

1.- Capturar un numero cualesquiera e informar si es o no es mayor de 100

2.- Capturar un numero entero cualesquiera e informar si es o no es multiplo de 4 ( recordar el operador mod(%) analizado en el tema de operadores aritmeticos).

3.- Capturar los cinco datos mas importantes de un Empleado, incluyendo el sueldo diario y los dias trabajados , desplegarle su cheque semanal solo si gano mas de $500.00 en la semana, en caso contrario desplegarle un bono de despensa semanal de $150.00 .

4.- Capturar los datos mas importantes de un estudiante incluyendo tres calificaciones, una pagina que contiene una boleta de calificaciones es llamada si el estudiante es de la carrera de medicina, en caso contrario otra pagina despliega un oficio citando a los padres del estudiante a una platica amistosa con los maestros de la escuela.

5.- Capturar los datos mas importantes de un producto cualesquiera, incluyendo cantidad, precio, etc., desplegar una orden de compra, solo si el producto es de origen nacional, en caso contrario no hacer nada.

TEMA 5: CONDICIONES COMPUESTAS LINUX PHP

En muchas ocasiones es necesario presentar mas de una condicion para su evaluacion al computador.

Por ejemplo que el computador muestre la boleta de un alumno, si este estudia la carrera de medicina y su promedio de calificaciones es mayor de 70.

Una condicion compuesta se define como dos o mas condiciones simples unidas por los llamados operadores logicos .

Los operadores logicos que PHP reconoce son:

Page 24: PHP 5 TOTAL

OPERADOR SIGNIFICADO && tambien and “Y” LOGICO tambien or “O” LOGICO ! “NO” NEGACION xor Cierto solo si uno es cierto pero no ambos

Ejemplo:

if ( ($carrera==“informatica”) && ( $sexo==“m”) ) etc, etc, etc.

Notas:

Observar que cada condicion simple lleva sus propios parentesis.

Si la variable es de tipo string el dato va entre comillas(”), pero si la variable es de tipo char el dato va entre apostrofes(').

Para que el computador evalue como CIERTA una condicion compuesta que contiene el operador logico “y”, las dos condiciones simples deben ser ciertas.

Para que el computador evalue como CIERTA una condicion compuesta que contiene el operador logico “o”, basta con que una de las condiciones simples sea cierta.

La cantidad total de casos posibles cuando se unen dos o mas condiciones simples

esta dada por la relacion donde n = cantidad de condiciones, la primera mitad de ellos ciertos y la segunda mitad falsos.

Ejemplo, si formamos una condiciona compuesta con dos condiciones simples y el

operador logico “y”, la cantidad total de casos posibles serian y se puede construir la siguiente tabla de verdad.

Tabla de verdad con “y”

IRA COND SIMPLE 2DA COND SIMPLE EVALUACION C C C C F F F C F F F F

La evaluacion final se obtiene usando la regla anteriormente descrita para una condicion compuesta que contiene el operador “y”.

Esta tabla significa lo siguiente;

1.- Cualquiera que san la cantidad de datos procesados, siempre caera en uno de estos cuatro posibles casos.

La tabla de verdad para una condicion compuesta con “O” es la siguiente;

IRA COND SIMPLE 2DA COND SIMPLE EVALUACION

Page 25: PHP 5 TOTAL

C C C C F C F C C F F F

Como se observa, una condicion compuesta con “O”, es menos restrictiva, o el 75% de los casos terminarian ejecutando el grupo CIERTO de instrucciones de la instruccion condicional.

Construir una tabla de verdad para una condicion compuesta de tres o mas condiciones simples, es tambien tarea sencilla, solo recordar que;

1.- La cantidad posible de casos posibles es la mitad empiezan con cierto y la otra mitad empiezan con falso.

2.- Para evaluar esta condicion triple, primero se evaluan las dos primeras incluyendo su operador bajo las reglas ya descritas y luego se evalua el resultado parcial contra la ultima condicion y el ultimo operador para obtener la evaluacion final.

Ejemplo una condicion compuesta de tres condiciones simples, donde el primer operador logico es el “y” y el segundo operador logico es el “O”, daria la siguiente tabla de verdad.

Ira cond 2da cond Eval 1a Y 2a 3ra cond Eval eval O 3ra C C C C C C C C F C C F F C C C F F F F F C F C C F C F F F F F F C C F F F F F

En la practica, cada condicion simple debe ir encerrada en su propio parentesis y las dos condiciones simples tambien deben encerrarse entre sus propios parentesis, como en el siguiente ejemplo;

if(($sueldo> 500)%%($departamento=="VENTAS") ) { // aqui se construye la pagina que despliegua su cheque semanal } else { // aqui se construye y despliega la pagina del bono de despensa o un oficio de motivacion } ;

• Recordar, cada condicion simple debe estar entre parentesis y las dos condiciones simples tambien deben estar entre parentesis.

Page 26: PHP 5 TOTAL

• Observar donde se deben incluir los puntos y comas y donde no se deben incluir los puntos y comas.

TAREAS PROGRAMACION LINUX PHP MYSQL

1.- Construir un programa que capture un numero cualesquiera e informe si es o no es mayor de 50 y multiplo de tres. ( solo escribir el mensaje de respuesta de manera muy clara y esto resuelve el problema )

2.- Construir un programa que indique si un numero es un par positivo.

3.- Capturar los datos de un producto incluyendo su cantidad en existencia, desplegar una orden de compra si la cantidad en existencia del producto es menor que el punto de reorden, o si el origen del producto es nacional.

4.- Construir un programa que capture los datos de un empleado, desplegar en una pagina su cheque semanal si gana mas de $500.00 y si esta en el departamento de produccion, en caso contrario desplegarle en otra pagina un bono de despensa del 25% de su sueldo semanal

TEMA 6: PHP INSTRUCCION SWITCH

Tambien existen ocasiones o programas donde se exige evaluar muchas condiciones a la vez, en estos casos o se usa una condicion compuesta muy grande o se debe intentar convertir el problema a uno que se pueda resolver usando la instruccion switch();

La instruccion switch() es una instruccion de decision multiple, donde el compilador prueba o busca el valor contenido en una variable contra una lista de constantes ints o chars, cuando el computador encuentra el valor de igualdad entre variable y constante, entonces ejecuta el grupo de instrucciones asociados a dicha constante, si no encuentra el valor de igualdad entre variable y constante, entonces ejecuta un grupo de instrucciones asociados a un default, aunque este ultimo es opcional.

El formato de esta instruccion es el siguiente;

capturar o asignar variable de condicion;

switch(var int o char)

{

case const1: instruccion(es);

break;

case const2: instruccion(es);

break;

case const3: instruccion(es);

break; ………………

Page 27: PHP 5 TOTAL

default: instruccion(es);

};

Mejor un ejemplo practico:

Prog3.php

<HTML> <FORM ACTION=prog3.php METHOD=post> DAME UNA LETRA:<INPUT TYPE=text NAME=LETRA value="<? echo $LETRA ?>" ><BR> <INPUT TYPE=submit NAME=OK VALUE="evento1"><BR> </FORM></HTML> <?php if ($OK == "evento1") { // area de switch() switch($LETRA) { case 'a': echo "<br>aguila"; break; case 'b':case'B': echo "<br>baca"; break; case 'c': echo "<br>caballo "; echo "<br>camello "; break; default:echo"<br>no hay " <<endl; }; };

Page 28: PHP 5 TOTAL

?>

corrida:

Notas:

1.- Se pueden usar cualquier tipo de dato como variable de condicion excepto decimales???.

2.- Las constantes que estamos buscando y comparando son de tipo char, por eso se deben encerrar entre apostrofes ( ').

3.- Si se quiere resolver el problema de mayusculas o minusculas en el teclado, observar que se usan dos case, pero con un solo break;

6.- Recordar que switch() que cuando se trabaje con constantes y variables de tipo entero, en los case poner la constante numerica, sin apostrofes, es decir por ejemplo:

case 5: instrucciones; break;

En particular, instrucciones de tipo switch() se usan para construir programas de seleccion de menus, donde al usuario se le plantean dos o tres problemas distintos y el propio usuario seleccionaba cual de ellos se ejecuta

TAREAS PROGRAMACION LINUX PHP

1.- Construir una pagina que contenga el siguiente menu

1. conversion de pesos a dolares 2. conversion de libras a kilogramos 3. conversion de kilometros a millas 4. fin de menu

Page 29: PHP 5 TOTAL

seleccionar opcion [ ]s Este es el edit del switch().

Probar como opcion o redireccion <“location:/~tusitio/prog200.html”

2.- Construir un programa que capture un deporte y despliegue dos implementos deportivos apropiados.

3.- Evaluar una funcion cualesquiera con x = 3, -4, 5

TEMA 7: CONTROL SELECT PHP MYSQL

Existen muchas ocasiones en donde el usuario del programa tiene que proporcionar datos que provienen de un conjunto finito y muy pequeno de posibles respuestas esto significa que cada vez que se ejecute el programa el usuario estara proporcionando las mismas respuestas.

Ejemplo de esta clase de datos, son por ejemplos Municipio en BC las posibles respuestas solo son (Tecate, Tijuana, Mexicali, Ensenada, Rosarito), otro ejemplo es Sexo (Hombre, Mujer), etc.

Para situaciones como esta existen componentes html que permiten programar por adelantado las posibles respuestas y el usuario solo debe seleccionar la respuesta apropiada en lugar de tener que escribirla.

Este control SELECT nos permite definir en primera instancia un conjunto de datos o valores respuestas asociados a una caja de edicion cualesquiera asi ahora el usuario tendra la oportunidad de seleccionar un dato del conjunto de datos o respuestas ya predefinido.

Este componente SELECT DEBERA CONSTRUIRSE EN dos partes una parte de encabezado para poner el nombre del grupo de respuestas( por ejemplo municipios, sexo, etc.)

La segunda parte es la lista de opciones o respuestas que se debe cargar al tiempo de ejecucion de la forma html como lo muestra el siguiente programa:

Prog4.php

<HTML> <FORM ACTION=prog4.php METHOD=post> <B>MUNICIPIOS</B> <SELECT NAME=muni> <OPTION>ENSENADA <OPTION>TECATE <OPTION>TIJUANA <OPTION>MEXICALI

Page 30: PHP 5 TOTAL

</SELECT> <INPUT TYPE=submit NAME=OK VALUE="evento1"><BR> </FORM></HTML> <?php if ($OK == "evento1") { if ( $muni == "ENSENADA" ) { echo "<B>templado</B>"; }; if ( $muni == "MEXICALI" ) { echo "<B>caliente</B>"; }; if ( $muni == "TIJUANA" ) { echo "<B>helado</B>"; }; }; ?>

CORRIDA prog4.php:

Solo grabarlo como prog4.php y subirlo a tu sitio y ejecutarlo de manera normal http://programacionfacil.com/~tusitio/prog4.php

Notas:

1.- Observar que el servidor de paginas devolvio el par MUNICIPIO=ENSENADA que estamos capturando en nuestra variable $municipio.

Page 31: PHP 5 TOTAL

TAREAS PROGRAMACION PHP :

1.- Arreglar un par de los programas anteriores agregandole este control a los que se puedan.

2.- Evaluar la funcion para x = 2,-5, 8

3.- Construir una forma con los datos de un automovil(usar puros select) y construir dos paginas de salida o respuesta una con un plan de financiamiento a dos anos u otra con un plan de financiamiento a tres anos

TEMA 8: CHECKBOX PHP

El componente CheckBox permite seleccionar una opcion al usuario del programa o tomar una decision directamente en pantalla.

Ejemplos de uso:

Observar que dos o mas checkboxs pueden estar seleccionados a la vez.

Codigo prog5.php

<HTML> <FORM ACTION=prog5.php METHOD=post> <b>sexo:</b><br> <input type=checkbox name=mas >masculino<br>

Page 32: PHP 5 TOTAL

<input type=checkbox name=fem >femenino<br> <input type=checkbox name=neutro >neutro<br> <INPUT TYPE=submit NAME=OK VALUE="evento1"><BR> </FORM></HTML> <?php if ($OK == "evento1") { if ( $fem == "on" ){ echo "<B>femenino checado</B> "; }; if ( $mas == "on" ){ echo "<B>masculino checado</B> "; }; if ( $neutro == "on" ){ echo "<B>neutro checado</B> "; }; }; ?>

Notas:

1.- grabarlo y subirlo como prog5.php a tusitio en programacionfacil.com

2.- La propiedad name debera ser diferente en cada checkbox usado, la propiedad checked se usa para que aparezca ya palomeado o seleccionado el control.

3.- Cuando se activa prog5.php, esta forma manda el par NAME=on solo de los checkbox que fueron seleccionados.

Corrida:

Page 33: PHP 5 TOTAL

Para programar este componente:

Como ya se indico esta forma va a mandar el par NAME=on asi que esto es sencillo en php, solo recordar usar un if por cada checkbox.

En cuanto al programa no hay nada nuevo a ensenar solo recordar que cuando hay muchos checkbox's van a tener que usar muchos if's.

PROBLEMAS PHP SUGERIDOS

1.- Evaluar la funcion para x = 2,-5, 8 (usar un CheckBox por cada valor de x, y programar cada el if de cada CheckBox con la operacion correspondiente y el despliegue del resultado).

2.- Construir un pagina.html con los datos de un automovil y una segunda pagina muestra un plan de financiamiento a dos anos y una tercera pagina muestra un plan de financiamiento a tres anos.

3.- Construir un programa de seleccion de menus, las opciones seran algunos de los programas ya hechos.(se recomienda que en cada if construyan la forma o pagina de manera dinamica de la forma.html que tienen en el programa correspondiente)

TEMA 9: COMPONENTE RADIOBUTTON PHP MYSQL

Se utiliza para presentar al usuario un conjunto de opciones mutuamente excluyentes entre si es decir si el usuario selecciona un componente radio todos los demas componentes radioButton en la forma, se deseleccionan solos es por esta razon que decimos que radiobotones son mutuamente excluyentes.

Codigo prog6.php

Page 34: PHP 5 TOTAL

<HTML> <FORM ACTION=prog6.php METHOD=post> sexo:<br> <input type=radio name=SEXO value=masculino >masculino<br> <input type=radio name=SEXO value=femenino>femenino<br> <input type=radio name=SEXO value=neutro>neutro<br> carrera:<br> <input type=radio name=CARRERA value=sistemas >sistemas<br> <input type=radio name=CARRERA value=informatica>informatica<br> <input type=radio name=CARRERA value=medicina>medicina<br> <INPUT TYPE=submit NAME=OK VALUE="evento1"><BR> </FORM></HTML> <?php if ($OK == "evento1") { echo "<B>SEXO =</B>".$SEXO."<br>"; echo "<B>CARRERA =</B>".$CARRERA."<br>"; }; ?>

1.- Observar que tenemos dos grupos de radiobotones uno con NAME=SEXO y otro con NAME=CARRERA sin embargo existen varios radiobotones y cada radiobuton tiene su propio valor o VALUE.

2.- Recordar que en checkbox(tema anterior) la propiedad NAME debe ser distinta para cada uno de ellos, mientras que en radiobutton es la misma para todo un grupo similar de ellos.

3.- La razon principal para esta situacion es que los radiobotones son mutuamente excluyentes entre si Y QUE SOLO UNO PUEDE ESTAR ENCENDIDO A LA VEZ por eso los agrupamos con la propiedad NAME para que html los pueda considerar como dos o mas grupos diferentes.

4.- Tambien tienen la propiedad checked para que aparezcan seleccionados al cargar el programa prog6.html

Page 35: PHP 5 TOTAL

5.- A diferencia del checkbox html va a regresar solamente el par NAME=VALUE de el radiobuton que este seleccionado, esto lo hace por cada grupo de radiobotones que tengamos en la forma html

6.- Recordar que el servidor regresa un y solo un par NAME=VALUE por cada grupo de radiobutton's que existan en la forma.html, asi que es bastante sencillo tomar el valor del radiobuton seleccionado y ya cargado este valor realizar o programar el proceso correspondiente.

Corrida:

TAREAS PHP MYSQL

1.- CONSTRUIR UN CUESTIONARIO DE 6 PREGUNTAS SOBRE LOS HABITOS DE ESTUDIO DE UN ESTUDIANTE Y PASAR SUS RESPUESTAS A UNA PAGINA NUEVA.

2.- EVALUAR UNA FUNCION CUALESQUIERA, LA PAGINA HTML TIENE NAME = X

y VALUEs = 3, -5, 10

TEMA 10: CICLO FOR LINUX PHP

Instrucciones para ciclos resuelven el problema de repetir todo el programa o cierta parte del programa mas de una vez.

Page 36: PHP 5 TOTAL

Este ciclo es uno de los mas usados para repetir una secuencia de instrucciones, sobre todo cuando se conoce la cantidad exacta de veces que se quiere que se ejecute una instruccion simple o compuesta.

Su formato general es:

for (inicializacion; condicion; incremento)

{ instruccion(es); };

ejemplo:

for($x=1;$x⇐10;$x=$x+1)

{ echo ”<br> MAMA ” ; };

En su forma simple la inicializacion es una instruccion de asignacion que carga la variable de control de ciclo con un valor inicial.

La condicion es una expresion relacional que evalua la variable de control de ciclo contra un valor final o de parada que determina cuando debe acabar el ciclo.

El incremento define la manera en que la variable de control de ciclo debe cambiar cada vez que el computador repite un ciclo.

Se deben separar esos 3 argumentos con punto y coma (;)

EJEMPLO

Codigo prog7.php y recuerden subirlo y pedirlo con:

http:\\programacionfacil.com\tusitio\prog7.php

<HTML> <FORM ACTION=prog7.php METHOD=post> <INPUT TYPE=submit NAME=OK VALUE="evento1"><BR> </FORM></HTML> <?php if ($OK == "evento1") { for($x=1; $x<=10; $x=$x+1) { echo $x." MAMA <br> " ; }; }; ?>

Page 37: PHP 5 TOTAL

corrida:

Casos Particulares del ciclo for;

1.- El ciclo comienza en uno y se incrementa de uno en uno este es el caso mas general.

2.- Pero el valor inicial puede se diferente de uno, ejemplo;

for(x=5;x⇐15;x=x+1){ etc.};

3.- Incluso el valor inicial puede ser negativo, ejemplo;

for (x = -3 ;x⇐ 8; x=x+1) { etc.};

4.- Los incrementos tambien pueden ser diferentes al de uno en uno, ej.;

for (x=1; x⇐ 20; x=x+3){ etc. };

5.- Incluso pueden ser decrementos, solo que en este caso, recordar;

5.1.-el valor inicial de la variable debe ser mayor que el valor final.

5.2.-cambiar el sentido de la condicion.

Page 38: PHP 5 TOTAL

ejemplo;

for (x= 50 ; x >= 10; x= x-4 ) { etcetera };

6.- Solo para los casos de incrementos y decrementos de una en una unidad substituir en el for:

el x = x + 1 por x++

el x = x - 1 por x–

TAREAS PROGRAMACION LINUX PHP MYSQL :

1.- CONSTRUIR UN PROGRAMA QUE DESPLIEGUE LOS NUMEROS DEL 20 AL 30.

2.- DESPLEGAR LOS ENTEROS ENTRE 50 Y 30 ACOMPANADOS DE SU POTENCIA CUADRADA Y RAIZ CUBICA RESPECTIVA(revisar el tema de operadores aritmeticos).

3.- DESPLEGAR LOS MULTIPLOS DE 5, ENTRE 10 Y 50, ACOMPANADOS DE SU FACTORIAL Y LOGARITMO RESPECTIVO(revisar el tema de operadores aritmeticos tambien).

4.- DESPLEGAR LA TABLA DE MULTIPLICAR QUE EL USUARIO INDIQUE.

5.- EVALUAR LA FUNCION <m> Y=5X^2 + 3X + 8 </m> CUANDO X–> -3…10 (RANGO DE -3 HASTA 10)

TEMA 11: CICLO WHILE LINUX PHP

En este ciclo el cuerpo de instrucciones se ejecuta mientras una condicion permanezca como verdadera en el momento en que la condicion se convierte en falsa el ciclo termina.

Su formato general es :

cargar o inicializar variable de condicion;

while(condicion)

{

grupo cierto de instrucciones;

instruccion(es) para salir del ciclo;

};

Un error muy comun con el while, es poner un punto y coma(;) despues de la (condicion) ejemplo while(condicion); ←-esto es y causa un error.

prog8.php

Page 39: PHP 5 TOTAL

<HTML> <FORM ACTION=prog8.php METHOD=post> <INPUT TYPE=submit NAME=OK VALUE="evento1"><BR> </FORM></HTML> <?php if ($OK == "evento1") { $x=1; while ( $x <=5) { echo $x." PATO<br> " ; $x++; }; }; ?>

corrida

Page 40: PHP 5 TOTAL

While puede llevar dos condiciones en este caso inicializar 2 variables de condicion y cuidar que existan 2 de rompimiento o terminacion de ciclo.

El grupo cierto de instrucciones puede ser una sola instruccion o todo un grupo de instrucciones.

La condicion puede ser simple o compuesta.

Los casos generales de for tambien se aplican a while.

A este ciclo tambien se le conoce tambien como ciclo de condicion de entrada o prueba por arriba porque este ciclo evalua primero la condicion y posteriormente ejecuta las instrucciones.

TAREAS PROGRAMACION LINUX PHP

1.- DESPLEGAR ENTEROS ENTRE 50 Y 80

2.- DESPLEGAR MULTIPLOS DE 4 ENTRE 60 Y 20 ACOMPANADOS DE SU LOGARITMOS DE BASE 10 Y BASE e RESPECTIVOS.

3.- CONSTRUIR LA TABLA DE DIVIDIR QUE EL USUARIO INDIQUE.

4.- Evaluar una funcion cualesquiera para el rango de valores de x de -3 a +5

TEMA 12: CICLO DO WHILE LINUX PHP

Su diferencia basica con el ciclo while es que la prueba de condicion es hecha al finalizar el ciclo, es decir las instrucciones se ejecutan cuando menos una vez porque primero ejecuta las instrucciones y al final evalua la condicion;

Tambien se le conoce por esta razon como ciclo de condicion de salida.

Su formato general es :

cargar o inicializar variable de condicion;

do {

grupo cierto de instruccion(es);

instruccion(es) de rompimiento de ciclo;

} while (condicion);

prog9.php

<HTML> <FORM ACTION=prog9.php METHOD=post> <INPUT TYPE=submit NAME=OK VALUE="evento1"><BR>

Page 41: PHP 5 TOTAL

</FORM></HTML> <?php if ($OK == "evento1") { $x=1; do { echo $x." GATO<br> " ; $x++; }while($x<=5); }; ?>

Corrida prog9.php

Otra diferencia basica con el ciclo while es que, aunque la condicion sea falsa desde un principio el cuerpo de instrucciones se ejecutara por lo menos una vez.

TAREAS PROGRAMACION LINUX PHP

1.- tres del for

Page 42: PHP 5 TOTAL

2.- tres del while

TEMA 13: CONCLUSIONES ACERCA DE CICLOS LINUX PHP

El problema de dado un problema cualesquiera cual ciclo se debe usar se resuelve con:

1. Si se conoce la cantidad exacta de veces que se quiere que se ejecute el ciclo o si el programa de alguna manera puede calcularla usar for.

2. Si se desconoce la cantidad de veces a repetir el ciclo o se quiere mayor control sobre la salida o terminacion del mismo entonces usar while.

3. Si se quiere que al menos una vez se ejecute el ciclo entonces usar do while

TEMA 1: INTRODUCCION ARREGLOS LINUX PHP

Uno de los problemas mas comunes en los diversos sistemas de informacion es el tratamiento o procesamiento de una gran volumen de datos o de informacion.

Las variables manejados hasta ahora no pueden ayudar a resolver este problema.

Las variables usadas hasta ahora reciben propiamente el nombre de variables escalares, porque solo permiten almacenar o procesar un dato a la vez.

No confundir esto con el tipo de dato o rango de datos que una variable tiene la capacidad de almacenar.

Por ejemplo si se quiere almacenar nombre y edad de 15 personas con el metodo tradicional se ocuparan 30 variables y esto solo es nombre y edad de 15 personas, agreguen mas datos y mas personas y ya es tiempo de empezar a analizar otro tipo de variables.

Se ocupan entonces variables que sean capaces de almacenar y manipular conjuntos de datos a la vez.

Variables de tipo arreglo si permiten almacenar y procesar conjuntos de datos del mismo tipo a la vez.

Cada dato dentro del arreglo se le conoce como elemento del arreglo y se simboliza y procesa (captura, operacion, despliegue ) usando el nombre del arreglo respectivo y un subindice indicando la posicion relativa del elemento con respecto a los demas elementos del arreglo, solo recordar que en cpp la primera posicion, eleme nto o renglon es el 0 (cero), ej.

NOMBRES

Juan –>nombres(0) Pedro → nombres(1) Rosa –> nombres(2) Jose –> nombres(3)

Sin embargo sus problemas son similares a los de variables normales es decir hay que declararlos, capturarlos, hacer operaciones con ellos, desplegarlos, compararlos, etc.

Page 43: PHP 5 TOTAL

TEMA 2: ARREGLOS EN PHP MYSQL

En programacion tradicional siempre se manejan dos tipos de arreglos los arreglos tipo listas, vectores o unidimensionales y los arreglos tipo tablas, cuadros, concentrados, matrices o bidimensionales en ambos casos son variables que permiten almacenar un conjunto de datos del mismo tipo a la vez, su diferencia es en la cantidad de columnas que cada uno de estos tipos contiene, como en los siguientes ejemplos:

a) LISTAS

EDAD

18 34 22 15

B) TABLAS

CIA ACME

ING MENS VTAS

(MILES DE $)

…….ENE FEB MAR ABR MAY

SUC A 10 20 30 40 SUC B 50 60 70 80 SUC D 90 100 110 120

Como se observa en linux php mysql la diferencia principal entre un arreglo tipo lista y unarreglo tipo tabla son las cantidades de columnas que contienen.

NOTA IMPORTANTE.- LOS CONCEPTOS MANEJADOS AQUI ESTAN ENFOCADOS A LOS SISTEMAS DE INFORMACION CONTABLES FINANCIEROS ADMINISTRATIVOS.

EN ALGEBRA MATRICIAL, SI SON IMPORTANTES LOS CONCEPTOS DE VECTORES Y MATRICES, PERO LAS OPERACIONES Y METODOS SON PRECISAMENTE LOS DEL ALGEBRA MATRICIAL

TEMA 3: PHP ARREGLO TIPO LISTA (1)

Un arreglo tipo lista se define como una variable que permite almacenar un conjunto de datos del mismo tipo organizados en una sola columna y uno o mas renglones.

Tambien reciben el nombre de vectores en algebra o arreglos unidimensionales en programacion.

Page 44: PHP 5 TOTAL

Los procesos normales con una lista o con sus elementos incluyen declarar toda la lista, capturar sus elementos, desplegarlos, realizar operaciones con ellos, desplegarlos, etc.

Para declarar y usar una variable arreglo en un programa en php, se puede usar cualquiera de los dos metodos siguientes:

1.- Usando el formato $nomarreglo[cant elementos]; ejemplo

$arreglo[5];

Se esta creando un arreglo d 5 elemntos, recordar que hasta que se cargue el primer dato, hasta entonces se tendra definido su tipo de dato.

2.- Usando la funcion ARRAY(); ejemplo

$arreglo=array(10,20,30,etc);

Recordar en php que la primera posicion o renglon de una lista es la posicion o renglon 0 (cero)

TEMA 4: PHP LISTAS (2)

Recordar que los datos que alimentan el arreglo provienen de un control o componente TEXT (INPUT TYPE=?) en la forma

Prog10.php

<?php $edad=array(); session_register("edad"); session_register("indice"); if ($OK == "INSERTAR") { $indice=$indice+0; $edad[$indice]=$EDAD; echo "elemento ".$indice." insertado"; $indice++; }; if ($OK == "DESPLEGAR") { for($r=0; $r<=COUNT($edad)-1 ; $r=$r+1) { echo $edad[$r]."<br> " ; };

Page 45: PHP 5 TOTAL

// otra manera de desplegar print_r($edad); session_unregister($edad); }; echo "<FORM ACTION=prog10.php METHOD=post>"; echo "EDAD:<INPUT TYPE=text NAME=EDAD value=$EDAD><BR>"; echo "<INPUT TYPE=submit NAME=OK VALUE=INSERTAR ><BR>"; echo "<INPUT TYPE=submit NAME=OK VALUE=DESPLEGAR ><BR>"; echo "</FORM>"; ?> corrida:

NOTAS:

1.- Se crea la lista o vector con el formato descrito en el tema anterior, observar tambien que dicha lista o vector es de tipo dinamico, es decir no tienen un tamano fijo o predeterminado.

Page 46: PHP 5 TOTAL

2.- session_register(), se utiliza para indicar al servidor que las variables mencionadas son de tipo global y que debera conservar sus valores, este tema de variables globales y de sesiones se explicara mas ampliamente en la siguiente unidad.

3.- El evento INSERTAR usa una variable de control llamada $indice para ir cargando cada elemento que viene del control textbox en la posicion o renglon adecuado, observar tambien que la primera posicion o renglon es la 0.

4.- Para realizar procesos u operaciones con todos los elementos de una lista o vector solo usar un ciclo for desde indice o renglon 0 hasta COUNT-1 ← esta funcion de php regresa la cantidad de elementos de la lista, por ejemplo si se quiere convertir las edades a meses se usa el siguiente codigo:

for($r=0; $r⇐COUNT($edad)-1 ; $r=$r+1) $edad[$r]= $edad[$r]*12;

5.- El evento DESPLEGAR despliega el arreglo usando dos maneras diferentes:

1. La primera usa un ciclo for con las caracteristicas mencionadas en el punto 4 anterior

2. Se usa la funcion print_r(arreglo) de php, recordar que php se distingue de otros lenguajes de programacion por la cantidad increible de funciones que pone a disposicion de los programadores.

6.- Se debera usar siempre un ciclo for con una variable de control llamada renglon, misma que tambien se usa como indice del arreglo.

7.- Recordar que el primer renglon o indice en php es el renglon 0.

8.- Siempre que se use un elemento de una lista en php con cualquier proceso (captura, despliegue, operaciones) debera acompanarse de su indice respectivo.

9.- Para procesar (hacer operaciones con ellos, o comparaciones, etc) los elementos de la lista, se debera usar un ciclo for con una variable de control llamda renglon, misma que se usara tambien como indice de la lista.

10.- El mismo ciclo de proceso o despliegue se puede utilizar para procesar o desplegar los elementos de mas de una lista, siempre y cuando las listas sean del mismo tamano.

11.- Pero si se tienen que procesar dos o mas listas o arreglos de tamano diferente, entonces se deberan usar controles y eventos de INSERCIOn diferentes y en los demas eventos se deberan usar dos o mas ciclos for, uno por cada arreglo del problema,

TAREAS PROGRAMAS PHP MYSQL

1.- Capturar y desplegar 5 precios de productos cualesquiera.

2.- Capturar 4 sueldos en su pagina y desplegarlos aumentados en un 25%

3.- Capturar una lista de 6 animalitos y 4 ciudades en un solo programa.

TEMA 5: FUNCIONES ESPECIALES PHP MYSQL

Page 47: PHP 5 TOTAL

Php es un lenguaje de programacion que esta muy enfocado al tratamiento de texto en este sentido presenta muchas utilerias o mas propiamente funciones que facilitan el trabajo con listas.

Entre dichas funciones se encuentran:

Prog11.php

<?php if ($OK == "DESPLEGAR") { // creando arreglo $lista1=array();$lista2=array(); // rellenando o inicializando $lista1=array_fill(1,5,100); $lista2=array_fill(0,4,50); // uniendolos $lista3=array_merge($lista1,$lista2); // desplegando lista3 print_r($lista3); // sumando los valores echo "<br>".array_sum($lista1)."<br>"; // contando los elementos // tambien se puede usar count(arreglo) echo count($lista3)."<br>"; // ordenando los elementos asort($lista3); // imprimendo array print_r($lista3); //ordenando en orden reverso arsort($lista3); //imprimiendo otra vez

Page 48: PHP 5 TOTAL

echo "<br>"; print_r($lista3); // mas maneras de desplegar foreach($lista1 as $renglon) echo $renglon." "; }; echo "<FORM ACTION=prog11.php METHOD=post>"; echo "<INPUT TYPE=submit NAME=OK VALUE=DESPLEGAR ><BR>"; echo "</FORM>"; ?>

corrida:

Este programa esta demostrando el uso de algunas de las funciones especializadas de php, entre ellas funciones para inicializar arreglos, union de arreglos, ordenamiento o sorteo de elementos, sumar (acumular) y contar sus elementos, asi como el despliegue de los propios arreglos.

Prestar atencion especial ala instruccion FOREACH( arreglo as indice o valor) que se puede usar en lugar del ciclo for(renglon) t radicional que se usa en muchos lenguajes de programacion.

Page 49: PHP 5 TOTAL

Las funciones especializadas de php para manipulacion de arreglos y sus elementos son:

See also is_array(), explode(), implode(), split(), preg_split(), and unset().

Table of Contents

array_change_key_case - Returns an array with all string keys lowercased or uppercasedarray_chunk - Split an array into chunksarray_combine - Creates an array by using one array for keys and another for its valuesarray_count_values - Counts all the values of an arrayarray_diff_assoc - Computes the difference of arrays with additional index checkarray_diff - Computes the difference of arraysarray_fill - Fill an array with valuesarray_filter - Filters elements of an array using a callback functionarray_flip - Exchanges all keys with their associated values in an arrayarray_intersect_assoc - Computes the intersection of arrays with additional index checkarray_intersect - Computes the intersection of arraysarray_key_exists - Checks if the given key or index exists in the arrayarray_keys - Return all the keys of an arrayarray_map - Applies the callback to the elements of the given arraysarray_merge_recursive - Merge two or more arrays recursivelyarray_merge - Merge two or more arraysarray_multisort - Sort multiple or multi-dimensional arraysarray_pad - Pad array to the specified length with a valuearray_pop - Pop the element off the end of arrayarray_push - Push one or more elements onto the end of arrayarray_rand - Pick one or more random entries out of an arrayarray_reduce - Iteratively reduce the array to a single value using a callback functionarray_reverse - Return an array with elements in reverse orderarray_search - Searches the array for a given value and returns the corresponding key if successfularray_shift - Shift an element off the beginning of arrayarray_slice - Extract a slice of the arrayarray_splice - Remove a portion of the array and replace it with something elsearray_sum - Calculate the sum of values in an array.array_unique - Removes duplicate values from an arrayarray_unshift - Prepend one or more elements to the beginning of arrayarray_values - Return all the values of an arrayarray_walk - Apply a user function to every member of an arrayarray - Create an arrayarsort - Sort an array in reverse order and maintain index associationasort - Sort an array and maintain index associationcompact - Create array containing variables and their valuescount - Count elements in a variablecurrent - Return the current element in an arrayeach - Return the current key and value pair from an array and advance the array cursorend - Set the internal pointer of an array to its last elementextract - Import variables into the current symbol table from an arrayin_array - Checks if a value exists in an arraykey - Fetch a key from an associative arraykrsort - Sort an array by key in reverse orderksort - Sort an array by keylist - Assign variables as if they were an arraynatcasesort - Sort an array using a case insensitive “natural order” algorithmnatsort - Sort an array using a “natural order” algorithmnext - Advance the internal array pointer of an arraypos - Get the current element from an arrayprev - Rewind the internal array pointerrange - Create an array containing a range of elementsreset - Set the internal pointer of an array to its first elementrsort - Sort an array in reverse ordershuffle - Shuffle an arraysizeof - Alias of countsort - Sort an arrayuasort - Sort an array with a user-defined comparison function and maintain index associationuksort - Sort an array by keys using a user-defined comparison functionusort - Sort an array by values using a user-defined comparison function

FUENTE: MANUAL DE PHP

TAREAS PROGRAMACION PHP MYSQL : Construir una aplicacion que use 10 funciones de manipulacion de arreglos.

Page 50: PHP 5 TOTAL

TEMA 6: PHP ARREGLOS TIPO TABLA

Un arreglo tipo tabla se define como un conjunto de datos del mismo tipo organizados en dos o mas columnas y uno o mas renglones.

Para procesar ( recordar solo operaciones y comparaciones) internamente todos los elementos de la tabla se ocupan dos ciclos for(), uno externo para controlar renglon y uno interno para controlar columna.

Los elementos de la tabla se deberan simbolizar con el nombre de la tabla y 2 subindices, el primer subindice referencia al renglon y el siguiente subindice referencia la columna los dos dentro del mismo corchete.

La declaracion de una tabla sera de acuerdo a los siguientes formatos:

$TABLA=array(array());

Observar que en general php considera una tabla como un arreglo que contiene arreglos.

Para capturar sus elementos, se usa el procedimiento desarrollado con listas.

Para efectuar otros procesos tales como operaciones, despliegue con todos los elementos de la tabla se usan 2 ciclos, un for externo para controlar renglon y un for interno para controlar columna.

Prog12.php

<?php $edad=array(array()); session_register("edad"); session_register("r"); session_register("c"); if ($OK == "INSERTAR") { $r=$r+0;$c=$c+0; $edad[$r][$c]=$EDAD; echo "elemento ".$r." ".$c." insertado ".$edad[$r][$c]; $c++; if($c==3) {$r++;$c=0;}; if($r==2){echo " tabla llena";}; };

Page 51: PHP 5 TOTAL

if ($OK == "DESPLEGAR") { for($r=0; $r<=2 ; $r++) { for($c=0; $c <= 3; $c++) { echo $edad[$r][$c]." " ; }; echo "<br>"; }; // despliegue usando foreach echo "\n\n"; foreach($edad as $renglon) foreach($renglon as $columna) echo "$columna\n"; session_unregister($edad); }; echo "<FORM ACTION=prog12.php METHOD=post>"; echo "EDAD:<INPUT TYPE=text NAME=EDAD value=$EDAD><BR>"; echo "<INPUT TYPE=submit NAME=OK VALUE=INSERTAR ><BR>"; echo "<INPUT TYPE=submit NAME=OK VALUE=DESPLEGAR ><BR>"; echo "</FORM>"; ?>

Corrida:

Page 52: PHP 5 TOTAL

Notas:

Observar el formato de declaracion y como se controlan los indices de captura reng, col.

Recordar que lo apropiado para desplegar una tabla o matriz en la pc del usuario, es usando un control TABLE de html, pero esto queda de tarea.

Para inicializar tablas, se pueden usar los siguientes formato:

a)

$lista = array( 0 � 'juan', 1' � 'pedro', 2 � 'jose', 3 � 'maria' ); b)

$lista[1] = 'pedro'; $lista[2] = 'jose'; $lista[3] = 'maria'; $lista[] = 'juan';

c)

$lista[] = 'juan'; $lista[] = 'pedro'; $lista[] = 'jose';

TAREAS PROGRAMACION PHP

Page 53: PHP 5 TOTAL

1.- CONSTRUIR UN CUADRO QUE CONTENGA LOS COSTOS FIJOS DE CUATRO PRODUCTOS CUALESQUIERA, QUE SE PRODUCEN EN TRES PLANTAS DIFERENTES DE UNA EMPRESA MAQUILADORA.

2.- CONSTRUIR UN CUADRO QUE CONTENGA LOS INGRESOS MENSUALES POR VENTAS DURANTE LOS TRES PRIMEROS MESES DEL ANO DE CUATRO SUCURSALES DE UNA CADENA DE AUTO REFACCIONES, AGREGAR AL FINAL UNA LISTA QUE MUESTRE LOS INGRESOS MENSUALES TOTALES POR MESES Y UNA SEGUNDA LISTA QUE MUESTRE LOS INGRESOS MENSUALES TOTALES POR SUCURSAL(2 programas uno capturado y otro inicializado).

3.-CONSTRUIR UN CUADRO QUE CONTENGA LAS COMISIONES GANADAS POR TRES VENDEDORES, DE LOS 5 TIPOS DE LINEA BLANCA DE CONOCIDA MUEBLERIA, ADEMAS LISTAS DE COMISIONES TOTALES Y PROMEDIOS GANADAS POR LOS VENDEDORES, ASI COMO LISTAS DE COMISIONES TOTALES Y PROMEDIOS POR TIPO DE LINEA BLANCA(inicializado).

ANALIZAR ESTE CODIGO:

' PARA TOTALES Y PROMEDIOS POR RENGLON FOR R = 0 TO 3 FOR C = 0 TO 2 TOTRENG(R) = TOTRENG(R) + TABLA(R,C) NEXT C PROMRENG(R) = TOTRENG(R)/3 NEXT R 'PARA TOTALES Y PROMEDIOS POR COLUMNA FOR C = 0 TO 2 FOR R = 0 TO 3 TOTCOL(C)=TOTCOL(C) + TABLA(R,C) NEXT R PROMCOL(C) = TOTCOL(C) / 4 NEXT C

SUGERENCIA: CONSTRUIR PRIMERO LOS CUADROS EN PAPEL.

TEMA 7: ARREGLOS ASOCIATIVOS PHP

Page 54: PHP 5 TOTAL

Una lista asociativa en php es una lista bidimensional, que contiene el par (clave,valor), ejemplo:

Alumno

Clave……………………………..valor

matricula 99210200 nombre Juan carrera informatica edad 18

Prog13.php

<?php if ($OK == "DESPLEGAR") { // creando arreglo asociativo $alumno=array('numcontrol'=>9921099,'nombre'=>'juan perez','edad'=>20); // otro arreglo asociativo pero con indices o claves numericas $lista = array(1=>20,2=>30,3=>40); // procesando los elementos del arreglo $alumno['edad']=$alumno['edad'] * 3.1416; $lista[2]=$lista[2] * 5; // desplegando foreach($alumno as $renglon) echo "$renglon "; print "<br><br>"; foreach($lista as $indice) echo "$indice "; print"<br><br>"; print_r($alumno); }; echo "<FORM ACTION=prog13.php METHOD=post>"; echo "<INPUT TYPE=submit NAME=OK VALUE=DESPLEGAR ><BR>"; echo "</FORM>";

Page 55: PHP 5 TOTAL

?>

corrida:

Es de tomar en cuenta que todas las funciones de arreglos vistas en el tema anterior correspondiente, se pueden usar para estos arreglos asociativos.

TAREAS PROGRAMACION PHP :

1.- Construir una aplicacion donde prueben algunas de las funciones de listas asociativas.

TEMA 1 : PHP PROCEDIMIENTOS

Un camino para dividir un gran programa en partes mas pequenas es el uso de los llamados procedimientos.

Un procedimiento es un grupo de instrucciones, variables, constantes; etc, que estan disenados con un proposito particular y tiene su nombre propio.

Es decir un procedimiento es un modulo de un programa que realiza tareas especificas y que no puede regresar valores al programa principal u a otro procedimiento que lo este invocando.

Despues de escribir un procedimiento se usara su propio nombre como una sola instruccion o llamada al procedimiento.

Los procedimientos se podran escribir despues del cuerpo principal del programa utilizando el formato:

Page 56: PHP 5 TOTAL

function NomProc{instrucciones;};

Observar que realmente php no tiene propiamente procedimientos, todas son funciones que no regresan nada.

Un programa puede tener tantos procedimientos como se deseen para hacer una llamada o invocacion al procedimiento durante la ejecucion de un programa solo se debera escribir el nombre del procedimiento.

Prog14.php

<?php if ($OK == "DESPLEGAR") { // llamando o invocando un procedimiento?? proc1(); }; function proc1(){ $x = 50; echo $x. " PROGRAMACIONFACIL.COM"; }; echo "<FORM ACTION=prog14.php METHOD=post>"; echo "<INPUT TYPE=submit NAME=OK VALUE=DESPLEGAR ><BR>"; echo "</FORM>"; ?>

Corrida:

Page 57: PHP 5 TOTAL

Como se observa un procedimiento puede ser un programa completo.

TAREAS PROGRAMACION PHP

Construir un programa de :

Menu (cada opcion es un procedimiento).

a) Convertir $800.00 Pesos a dolares.

b) Calcular el Area de un triangulo de base=20 y altura=30.

c) Deplegar una Boleta de calificaciones.

d) Fin de menu.

TEMA 2: PARAMETROS PHP MYSQL

En php un parametro es una variable que puede pasar su valor a un procedimiento desde el principal o desde otro procedimiento.

Existen ocasiones en que es necesario mandar al procedimiento ciertos valores para que los use en algun proceso.

Estos valores que se pasan del cuerpo principal del programa al procedimiento se llaman parametros.

Entonces la declaracion completa de un procedimiento es :

Function nomproc($par1,$par2..)

{

cuerpo de instrucciones;

}

Page 58: PHP 5 TOTAL

Observar donde y como se declaran los parametros dentro de el procedimiento.

Cuando se invoque un procedimiento y se quiera pasar parametros solo ponerlos dentro de un parentesis, ejemplo:

proc50( $alfa, 3.1416, 'juan');

observar que se pueden mandar variables, datos o expresiones algebraicas.

prog15.php

<?php if ($OK == "DESPLEGAR") { // llamando o invocando un procedimiento?? // mandando parametros $x=500; proc1($x, 'juan perez', 3.1416); }; function proc1($x1,$a,$b){ $x = $x1 * $b; echo $x. "<br>".$a ; }; echo "<FORM ACTION=prog15.php METHOD=post>"; echo "<INPUT TYPE=submit NAME=OK VALUE=DESPLEGAR ><BR>"; echo "</FORM>"; ?>

corrida

Page 59: PHP 5 TOTAL

REGLAS PARA EL USO DE PARAMETROS

1.- Cuando se usan variables como parametros la variable que se manda debe ser declarada dentro del principal o del procedimiento de donde se esta enviando.

2.- La variable que se manda tiene un nombre la que se recibe puede tener otro nombre.

3.- La cantidad de variables que se envian deben ser igual en cantidad, orden y tipo a las variables que reciben.

4.- La variable que se recibe tiene un ambito local dentro del procedimiento, es decir solo la puede usar ese procedimiento.

TAREAS PROGRAMACION PHP MYSQL

Una pagina activa un programa y le manda las 3 calificaciones, calcular promedio en un procedimiento, e imprimir nombre y promedio en otro procedimiento(este construye la pagina de salida).

Construir una tabla de multiplicar que el usuario indique, captura y control de ciclo en el principal, calculo y despliegue en un procedimiento, cuidado al construir la pagina de salida.

Construir un procedimiento que reciba un numero entero y que mande llamar a un segundo procedimiento pasando el letrero “PAR O IMPAR”.

TEMA 3: VARIABLES LOCALES Y GLOBALES LINUX PHP

Variables globales son aquellas que son conocidas o pueden ser usadas, tanto por la parte principal del programa como por cualquier procedimiento.

En php todas las variables creadas y declaradas en cualquier parte del programa ya se el principal o procedimiento son por default globales.

Una variable local es aquella variable que solo puede ser conocida o usada por la parte del programa donde se declara ya sea el principal o el procedimiento.

Page 60: PHP 5 TOTAL

En general una variable local solo es conocida por el codigo de esa funcion o procedimieto y es desconocida por otras funciones o procedimientos.

Prog16.php

<?php // variables globales $a=200; $b="ana lopez"; if ($OK == "DESPLEGAR") { // redeclarando como global global $a; proc1( $a * 5 ); }; function proc1($c){ // redeclarndo global $a, $b; $x = $a + $c; echo $x. "<br>".$b ; }; echo "<FORM ACTION=prog16.php METHOD=post>"; echo "<INPUT TYPE=submit NAME=OK VALUE=DESPLEGAR ><BR>"; echo "</FORM>"; ?>

corrida:

Page 61: PHP 5 TOTAL

TAREAS PROGRAMACION LINUX PHP, usando todos los procedimientos adecuados

1.- BOLETA DE CALIFICACIONES Y SOLO USAR DOS VARIABLES GLOBALES

2.- UNA TABLA DE MULTIPLICAR Y SOLO USAR UNA VARIABLE GLOBAL

TEMA 4: FUNCIONES PHP MYSQL

En Php una funcion es un modulo de un programa separado del cuerpo principal que realiza una tarea especifica y que puede regresar un valor a la parte principal del programa u otra funcion o procedimiento que la invoque.

La forma general de una funcion es:

Function NomFuncion( $par1, $par2..) {

cuerpo de instrucciones;

Return dato,var, exp;

}

INSTRUCCION RETURN

Dentro del cuerpo de la funcion deber haber una instruccion $Return cuando menos para regresar el valor esta instruccion permite regresar datos.

Prog17.php

<?php // variables globales if ($OK == "DESPLEGAR")

Page 62: PHP 5 TOTAL

{ $x=sumar(5,10); $x=$x +1; echo $x; }; function sumar($a,$b) { // regreando dato, variable o expresion return $a + $b; }; echo "<FORM ACTION=prog17.php METHOD=post>"; echo "<INPUT TYPE=submit NAME=OK VALUE=DESPLEGAR ><BR>"; echo "</FORM>"; ?>

corrida

Es permitido poner mas de un return en el cuerpo de instrucciones sobre todo en condiciones pero solo un return se ejecutara.

if ( $suma >= 10)

{ $return 10; }

Page 63: PHP 5 TOTAL

else

{ $return 20; }

TAREAS PROGRAMACION PHP

1.-Imprimir nombre y promedio de un alumno, capturar 3 calificaciones y nombre en un procedimiento, calcular promedio en una funcion, desplegar en otro procedimiento.

2.-Crear una tabla de multiplicar, captura y control de ciclo en el principal, operaciones en una funcion, despliegue en el principal.

3.-Evaluar una funcion cualesquiera para el rango de valores de x = 2..6

EXISTEN 3 CLASES USUALES DE FUNCIONES.

Las primeras son de tipo computacional que son disenadas para realizar operaciones con los argumentos y regresan un valor basado en el resultado de esa operacion.

Las segundas funciones son aquellas que manipulan informacion y regresan un valor que indican la terminacion o la falla de esa manipulacion.

Las terceras son aquellas que no regresan ningun valor, es decir son estrictamente procedurales.

TEMA 5: PHP SESSION MYSQL

Recordar que las variables globales vistas en el tema 3 solo permiten compartir sus valores dentro del programa, pero si se quiere compartir valores entre paginas o mejor dicho formas (form) diferentes, no se podran compartir datos o valores.

Posibles soluciones a esto es el uso de la palabra reservada global o variables de tipo static.

Sin embargo es mas apropiado usar las variables de sesion que es un mecanismo que php ofrece.

Primero entender que es una sesion, en general podemos decir que una sesion es todo el tiempo que se de un enlace entre un cliente y un servidor, es decir cuando en un browser se pide una direccion web cualquiera, entre ese cliente y el sevidor se abre una sesion, por todo el tiempo que el cliente este navegando las diversas paginas del mismo sitio web, el sevidor mantiene una sesion abierta con dicho cliente, cuando el cliente abandona dicho sitio web, la sesion termina.

En PHP se pueden crear variables de sesion de varias maneras, todo depende de la version de php que tenga instalado el servidor, en general se pueden usar los dos siguientes formatos:

1.- $_SESSION[“alfa”]=100;

En este caso recordar que $alfa sera una variable normal que tambien crea php, esto es el mismo caso que las variables que crea php de los componentes u objetos HTML.

Page 64: PHP 5 TOTAL

2.- $beta=0; session_register(beta);

Este es el ejemplo que se uso en el tema de arreglos, para este ejemplo $beta es la variable global.

Prog18.php

<?php // variables de sesion(globales) $_SESSION["alfa"]=100; $beta=0; session_register(beta); if ($OK == "DESPLEGAR") { $_SESSION['alfa']=$_SESSION['alfa'] + 50; sumar(); echo $_SESSION["alfa"]; $beta++; echo "<br>".$beta; $alfa++; echo "<br>".$alfa; }; function sumar() { $_SESSION["alfa"]=$_SESSION["alfa"] * 5; }; echo "<FORM ACTION=prog18.php METHOD=get>"; echo "<INPUT TYPE=submit NAME=OK VALUE=DESPLEGAR ><BR>"; echo "</FORM>"; ?>

Page 65: PHP 5 TOTAL

corrida:

Notas en form, se esta usando METHOD=GET, para que observen el numero de sesion que el servidor le asigna al cliente.

TAREAS PROGRAMAS PHP MYSQL

Hacer los programas que vienen en el tema de variables globales, pero usando los dos metodos de variables de sesion.

TEMA 1: INTRODUCCION PHP

Antes de empezar a programar en serio se estudian en esta unidad dos problemas.

Problema A:

Variables que puedan almacenar un conjunto de valores y no necesariamente del mismo tipo.

Problema B:

Resolver el problema de almacenar en forma permanente los datos que se generan dentro de un programa ya sea por captura, proceso, etc;

El problema (A) se resuelve usando el concepto de estructuras o registros el problema (B) se resuelve usando el concepto de archivos disco

TEMA 2: ESTRUCTURAS O REGISTROS LINUX PHP

En este tema exploramos en php la estructura mas comun de representacion de datos.

Variables simples o escalares pueden almacenar un datum de informacion y arreglos pueden almacenar conjuntos de ellos del mismo tipo y al mismo tiempo, estos dos mecanismos pueden manejar una gran variedad de situaciones pero a menudo se necesita trabajar sobre datos de diversos tipos en este caso ni variables escalares ni arreglos son adecuados.

Para resolver este problema php provee de los arreglos asociativos visto en la unidad de arreglos.

Los elementos individuales de una variable estructura reciben el nombre de campos.

Ej:

alumno

nombre → campo1

direccion → campo2

edad → campo3

etc

Page 66: PHP 5 TOTAL

Prog13.php (ya visto en unidad de arreglos)

<?php if ($OK == "DESPLEGAR") { // creando arreglo asociativo $alumno=array('numcontrol'=>9921099,'nombre'=>'juan perez','edad'=>20); // otro arreglo asociativo pero con indices o claves numericas $lista = array(1=>20,2=>30,3=>40); // procesando los elementos del arreglo $alumno['edad']=$alumno['edad'] * 3.1416; $lista[2]=$lista[2] * 5; // desplegando foreach($alumno as $renglon) echo "$renglon "; print "<br><br>"; foreach($lista as $indice) echo "$indice "; print"<br><br>"; print_r($alumno); }; echo "<FORM ACTION=prog13.php METHOD=post>"; echo "<INPUT TYPE=submit NAME=OK VALUE=DESPLEGAR ><BR>"; echo "</FORM>"; ?>

Las operaciones mas elementales con los campos de una estructura incluyen captura e inicializacion.

TAREAS PROGRAMACION LINUX PHP : (usar clases y arreglos asociativos)

Crear un registro de alumno con 3 califaciones.

Declarar un registro de empleado capturar y desplegar un numero indeterminado de veces.

Page 67: PHP 5 TOTAL

Capturar un registro local de un producto en el principal, mandarlo como parametro a un procedimiento y desplegarlo.

Capturar un registro local en el principal, mandar el sueldo a una funcion que le aumente el 25% y desplegar en el principal.

Capturar en principal un registro local de cuentas por cobrar, mandar a un procedimiento e imprimir un aviso si el saldo esta atrasado

TEMA 3: PHP ARCHIVOS DISCO INTRODUCCION

Si bien es cierto que ya se pueden manejar gran cantidad de datos del mismo y diferente tipo al mismo tiempo el problema es que al terminar de ejecutarse el programa los datos se pierden.

De esta situacion nace el concepto de archivos que son medios que facilita el lenguaje para almacenar los datos en forma permanente, normalmente en los dispositivos de almacenamiento standar.

En general es necesario entender algunos conceptos elementales de sistemas de archivos tradicionales.

Como nota a tomar en cuenta los datos que se van almacenando en un archivo de disco, se almacenan en renglones consecutivos y cada renglon en disco, se conoce como registro del archivo, favor de no confundir el concepto de registro de archivo y registro o estructura como variable ya analizada, son dos cosas totalmente diferentes aunque desafortunadamente se llamen igual.

Primero: Operaciones con archivos

ESCRIBIR O GRABAR: Es la operacion mas elemental con un archivo, consiste en tomar un o unos datos en variables de cualquier tipo (escalar, mezcla de datos, arreglos, estructuras) y almacenarlas en un archivo de datos en disco.

LEER: Operacion consistente en sacar los datos del archivo en disco y mandarlos o cargar la variable respectiva

Segundo: Organizacion de archivos

En general existen dos tipos de archivos:

Archivos Secuenciales.- En este caso los datos se almacenan en forma consecutiva y no es posible leer (recuerdan que significa esta operacion) ningun registro (recuerdan la nota de arriba) directmente, es decir para leer el registro n, se debera recorrer o accesar los n-1 registros anteriores.

Archivos Directos o Random.- Para este caso si se puede acceder o leer un renglon n cualquiera.

Tercero: Tipo de archivos

En general existen tantos tipos de archivos como tipos de datos existen.

Page 68: PHP 5 TOTAL

ATENCION: Ya que se decide utilizar algun archivo especifico de datos(caracteres, strings, formateados, registros o arreglos) solo utilizar las funciones de escritura y lectura de ese tipo de archivo, por ningun motivo mezcle funciones de lectura y escritura de otro tipo de archivos.

Cuarto: Almacenamiento en archivos

Modo Texto: en este caso los datos son almacenados usando Ascii y por tanto son plenamente visibles usando cualquier editor.

Modo Binario: en este caso los datos son almacenados en notacion hexadecimal y por tanto se ocupa un editor binario para reconocerlos, sin embargo un archivo binario es mas compacto que un archivo texto.

TEMA 4: PHP ARCHIVOS (CONTINUACION)

Existen muchas operaciones asociadas a archivos, las mas elementales son:

1.- Creacion de Archivo.- En este proceso se pretende solamente crear un archivo nuevo en disco con su nombre tipo y especialidad de almacenamiento de datos apropiado.

2.- Apertura de Archivos.- En este caso se pretende abrir un archivo ya existente en disco para procesarlo ya sea para cargar o grabar estructuras en sus registros o leer algun registro en especial para mandarlo a una variable de cualquier tipo.

No confundir creacion con apertura, creacion es un proceso que solo se ejecuta una sola vez en la vida de un archivo, mientras que apertura, seimpre se esta realizando por los programas especializados en algun proceso.

3.-Cierre de archivos: Es la operacion mas importante en cualquier programa que maneje archivos, o se cierra el archivo como ultima instruccion del pograma o se vera el anuncio ABORT,RETRY,FAIL.

98, /s, scandisk

4.-Altas en archivo.- En este proceso se captura una estructura en memoria con sus datos pertinentes y despues se graba la estructura al archivo en disco.

5.-Lectura de archivo.- En este proceso se abre el archivo, se manda el registro de disco a una estructura en memoria para su procesamiento.

6.- Consulta de archivos: En este proceso se pretende desplegar todos los registros del archivo en disco a la pantalla ya sea consola o mejor aun, a una pagina html

7.-Busqueda en archivos: Una de las operaciones mas comunes consiste en que el usuario pide toda la informacion de algun renglon en disco porporcionando la informacion de algun campo generalmente el campo clave de la estructura.

8.- Filtros.- En este proceso el usuario esta interesado en algun conjunto de renglones con caracteristicas comunes (condicion), por ejemplo todos los alumnos de “sistemas” o todos los empleados que ganen mas de $500.00 pesos, o todos los clientes que sean de “tijuana”, etc

Page 69: PHP 5 TOTAL

9.-Modificaciones de registros o archivos: Problema muy comun, donde los datos originales ya grabados se tienen que cambiar o actualizar, por ejemplo el nombre no era “juan” es “juana”, o la calificacion no es 100 es 20, etc.

10.- Bajas de registros: tambien muy comun este proceso,por ejemplo el alumno ya egreso, el cliente huyo, etc

TEMA 5: GRABACION ARCHIVOS SECUENCIAL PHP

Prog19.php

<HTML> <FORM ACTION=prog19.php METHOD=post> CLAVE:<INPUT TYPE=text NAME=CLAVE><BR> NOMBRE:<INPUT TYPE=text NAME=NOMBRE><BR> EDAD:<INPUT TYPE=text NAME=EDAD><BR> ESTATURA:<INPUT TYPE=text NAME=ESTATURA><BR> <INPUT TYPE=submit NAME=OK VALUE="insertar"><BR> </FORM></HTML> <?php if ($OK == "insertar") { // creando y abriendo archivo $archivo=fopen('alumnos.dat','a+') or die("no puedo abrir archivo"); // grabando los campos fputs($archivo, $CLAVE."\n"); fputs($archivo, $NOMBRE."\n"); fputs($archivo, $EDAD."\n"); fputs($archivo, $ESTATURA."\n"); //cerrando archivo fclose($archivo); //avisando echo "registro #".$CLAVE." insertado"."<br>";

Page 70: PHP 5 TOTAL

}; ?>

Corrida:

ES IMPORTANTE RECORDAR QUE ANTES DE EJECUTAR SU PRIMER PROGRAMA QUE MANEJE ARCHIVOS EN LINUX PERL, el directorio que los contendra debera estar en modo escritura-lectura chmod 777 o chmod 766, hacerlo con putty, si este modo no lo tiene el directorio que contendra el archivo de datos linux no lo creara y tampoco avisara y cada vez que se quiera agregar o leer un registro a/de dicho archivo adivinen que pasara.

En el programa se ocupa una variable apuntador bautizada con el nombre de $archivo que almacenara la direccion fisica de el archivo en disco, ??en algun cilindro, track , sector debera quedar el archivo no es verdad??.

Como segundo paso se abre el archivo con la instruccion fopen():

$archivo=fopen('alumnos.dat','a+') or die(“no puedo abrir archivo”);

fopen() ocupa dos parametros, el primero es el nombre del archivo, si se quiere que quede en algun subdirectoro agregar ( /archivos/alumnos.dat), el segundo parametro es el llamdo modo de apertura, existen los siguientes modos en php.

“r” —→ Lectura.

“w” —→ Escritura.

“a” —→ Append, si el archivo ya existe append empieza a anadir los nuevos datos al final del archivo ya existente.

Page 71: PHP 5 TOTAL

“r+” —> Lectura y escritura, ya debe existir el archivo.

“w+” —> Crea para lectura y escritura y si ya existe, sobreescribe.

“a+” —> Crea o abre para lectura y append, sino existe el archivo sera creado.

Se esta usando la instruccion FPUTS() para grabar los campos al archivo en disco, ejemplo;

fputs($archivo, $CLAVE.”\n”);

fputs($archivo, $NOMBRE.”\n”);

fputs($archivo, $EDAD.”\n”);

fputs($archivo, $ESTATURA.”\n”);

La primera observacion es que se puede grabar directamente el INPUT TEXT directamente al archivo.

fputs() ocupa dos parametros el apuntador a el archivo y la variable a grabar a disco, observar que se le esta agregando un ENTER o RETURN al final de cada variable, esto es por la necesidad de tener un marca o bandera para conocer donde termina cada variable a la hora de leer el archivo.

La segunda observacion es que para grabar mas de un registro o renglon al archivo solo basta ir cargando los datos en la forma e ir clikeando en el boton INSERTAR, se recomienda empezar la clave en 1(uno) y usar una serie consecutiva y ordenada.

!!!!O van a tener que aprender a construir un archivo de claves que solo tenga la ultima clave almacenada!!!!!!

Cuando se ha finalizado de escribir al archivo se debe cerrar y esto se hace con la instruccion:

fclose($archdisco);

PROGRAMAS PHP MYSQL

Construir programas de alta o inserccion para unos cuantos archivos (empleados, productos, peliculas, etc, etc, etc)

TEMA 6: LECTURA DISCO PHP

Como ya se menciono grabacion y lectura de registros o estructuras a renglones o registros de archivos en disco, son los casos mas comunes y frecuentes que se pueden realizar con un archivo de disco.

Prog20.php

<HTML>

Page 72: PHP 5 TOTAL

<FORM ACTION=prog20.php METHOD=post> <INPUT TYPE=submit NAME=OK VALUE="lectura"><BR> </FORM></HTML> <?php if ($OK == "lectura") { // abriendo archivo $archivo=fopen('alumnos.dat','a+'); // empezando una tabla html para desplegar echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; echo"<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=YellowRed>ESTATURA</th></TR>"; // leyendo el archivo while (!feof($archivo)){ $clave=fgets($archivo); $nombre=fgets($archivo); $edad=fgets($archivo); $estatura=fgets($archivo); // desplegando en celda de tabla html echo"<tr>"; echo "<td>".$clave."</td>"; echo "<td>".$nombre."</td>"; echo "<td>".$edad."</td>"; echo "<td>".$estatura."</td>"; echo"</tr>"; }; // cerrando archivo y la tabla html echo "</table>"; fclose($archivo);

Page 73: PHP 5 TOTAL

}; ?>

corrida:

Las unicas notas son :

En fopen() se uso tambien “a+”

Se usa un ciclo while(!eof()), “mientras no se encuentre la marca de fin de archivo (eof)”

Se usa fgets($archivo), fgets() va leyendo el renglon en el arhcivo hasta que encuentra la marca de ENTER o RETURN (/n) que se puso al final de cada variable en el programa de grabacion, y fgets() regresa el dato y carga la variable apropiada.

Y se construyo una tabla HTML para realizar el despliegue.

No olvidar el FCLOSE().

TARAEAS ARCHIVO DISCO PHP SUGERIDOS

1.-crear, cargar y leer un archivo de productos y otro de empleados

TEMA 7: PHP BUSQUEDA ARCHIVO DISCO

Page 74: PHP 5 TOTAL

En este tema se analiza la busqueda de un registro o renglon determinado.

En este proceso el usuario del programa quiere que se despliegue un y solo un registro de informacion proporcionando un dato de busqueda generalmente la clave del registro.

Prog21.php

<HTML> <FORM ACTION=prog21.php METHOD=post> DAME CLAVE A BUSCAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="busqueda"><BR> </FORM></HTML> <?php if ($OK == "busqueda") { // abriendo archivo $archivo=fopen('alumnos.dat','a+'); // empezando una tabla html para desplegar echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; echo"<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=YellowRed>ESTATURA</th></TR>"; // leyendo el archivo while (!feof($archivo)){ $clave=fgets($archivo); $nombre=fgets($archivo); $edad=fgets($archivo); $estatura=fgets($archivo); // convirtiendo al mismo tipo settype($clave,"integer"); // settype($CLAVE,"integer"); if ( $CLAVE == $clave){ // desplegando en celda de tabla html

Page 75: PHP 5 TOTAL

echo"<tr>"; echo "<td>".$clave."</td>"; echo "<td>".$nombre."</td>"; echo "<td>".$edad."</td>"; echo "<td>".$estatura."</td>"; echo"</tr>";}; }; // cerrando archivo y la tabla html echo "</table>"; fclose($archivo); }; ?>

corrida:

Recordar que la caracteristica principal de un archivo secuencial, es que no es posible acceder o accesar a un registro o renglon especifico o determinado sino que se debera recorrer todos los n-1 renglones anteriores.

Page 76: PHP 5 TOTAL

Esta situacion se da porque al construir un registro cualquiera con una monton de campos strings a la hora de almacenar dichos registros, estos registros tendran tamanos diferentes, esta es la razon principal por la cual al buscar un registro especifico se tiene que recorrer y validar todos los registros anteriores.

En el programa ejemplo se esta usando un ciclo while(!eof(ARCHIVO)) para recorrer todos los registros del archivo (eof=end of file), por supuesto que si se tiene un archivo con 5000 registro y el buscado es el 4500 al menos se se tendra que recorrer todos los 4499 registros anteriores.

TAREAS PROGRAMACION LINUX PHP

Construirles programas de busquedas a los archivos en disco ya construidos.

TEMA 8: FILTROS ARCHIVOS DISCOS LINUX PHP

Otro problema similar al anterior es el de filtros, es decir en muchas ocasiones es necesario obtener informacion acerca de un subconjunto de renglones de el archivo.

Por ejemplo todos los estudiantes que sean mayores de 17 anos, o todos los clientes que sean de Tijuana, etc., a esto le llamamos filtros o condiciones.

Tambien se resuelve de manera similar al anterior, es decir usando un ciclo de lectura de todo el archivo e ir desplegando todos los registros que cumplan la condicion.

Prog22.php

<HTML> <FORM ACTION=prog22.php METHOD=post> ESTATURA >=<INPUT TYPE=text NAME=ESTATURA><BR> <INPUT TYPE=submit NAME=OK VALUE="filtro"><BR> </FORM></HTML> <?php if ($OK == "filtro") { // abriendo archivo $archivo=fopen('alumnos.dat','a+'); // empezando una tabla html para desplegar echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; echo"<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=YellowRed>ESTATURA</th></TR>"; // leyendo el archivo

Page 77: PHP 5 TOTAL

while (!feof($archivo)){ $clave=fgets($archivo); $nombre=fgets($archivo); $edad=fgets($archivo); $estatura=fgets($archivo); // convirtiendo al mismo tipo settype($estatura,"float"); if ( $estatura >= $ESTATURA){ // desplegando en celda de tabla html echo"<tr>"; echo "<td>".$clave."</td>"; echo "<td>".$nombre."</td>"; echo "<td>".$edad."</td>"; echo "<td>".$estatura."</td>"; echo"</tr>";}; }; // cerrando archivo y la tabla html echo "</table>"; fclose($archivo); }; ?>

corrida:

Page 78: PHP 5 TOTAL

Como se observa es un problema y una solucion similar al tema anterior de busquedas.

TAREAS PROGRAMACION ARCHIVOS DISCO LINUX PHP

HACERLES PROGRAMAS DE FILTRADO A LOS ARCHIVOS ANTERIORES, PERO LA CONDICION DE BUSQUEDA FORMARLA CON COMPONENTES HTML DE SELECCION(UNO PARA LA VARIABLE Y OTRO PARA EL OPERADOR RELACIONAL) Y UN COMPONENTE TEXT( PARA EL DATO), ESTO PERMITIRIA QUE SE PUDIERA FILTRAR EL ARCHIVO POR CUALQUIER CAMPO

TEMA 9: BAJAS O ELIMINACION MYSQL

Eliminacion o bajas es el proceso por medio del cual algunos registros del archivo son purgados del archivo, existen dos maneras por las cuales se puede realizar ese proceso.

En la primera manera de la cual se proporciona el ejemplo correspondiente se usaran dos archivos, el archivo original y un archivo temporal, el procedimiento o algoritmo es muy sencillo, se lee el registro del archivo original y si no es el registro a eliminar entonces se almacena en el archivo temporal, cuando se termina de procesar todo el archivo original, el archivo temporal solo contendra todos los registros que no se quisieron eliminar, ya con estos dos archivo se procede a eliminar o borrar usando la instruccion unlink de php el archivo original y se procede a renombrar usando la instruccion rename de php el archivo temporal como nuevo archivo original.

Prog23.html

Page 79: PHP 5 TOTAL

<HTML> <FORM ACTION=prog23.php METHOD=post> DAME CLAVE A ELIMINAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="baja"><BR> </FORM></HTML> <?php if ($OK == "baja") { // abriendo dos archivos $archivo=fopen('alumnos.dat','a+'); $archt=fopen('temporal.dat','a+') or dye ("no puedo crear archivo") ; // leyendo el archivo original while (!feof($archivo)) { $clave=fgets($archivo); $nombre=fgets($archivo); $edad=fgets($archivo); $estatura=fgets($archivo); // convirtiendo al mismo tipo settype($clave,"integer"); if( $CLAVE != $clave and $clave != 0 ) { // cargando al archivo temporal fputs($archt, $clave."\n"); // ojo aqui ya es string fputs($archt, $nombre); fputs($archt, $edad); fputs($archt, $estatura); };

Page 80: PHP 5 TOTAL

}; // cerrando los dos archivos fclose($archivo); fclose($archt); // eliminando archivo original unlink("alumnos.dat"); // renombrando temporal como original rename("temporal.dat","alumnos.dat"); // avisando echo "registro eliminado"; }; ?>

Corrida:

EL problema con esta manera de eliminar incluso fisicamente los registros del archivo es que no hay manera de recuperar esa informacion posteriormente.

Es por eso que otra tecnica comun de eliminacion es incluir un campo de estado, status o bandera o semaforo en el registro y conforme se va cargando el registro y antes de mandarlo a disco se le agrega a dicho campo el caracter 'A' –>alta, asi que cuando se quiera una baja solo se pondria dicho campo en 'B' y todos los programas de lectura, busqueda y filtros deberan revisar esta campo de estado antes de hacer algo con el registro.

Page 81: PHP 5 TOTAL

TAREAS PROGRAMACION ARCHIVOS DISCO PHP MYSQL :

Construir programas de eliminacion usando los dos metodos( bajas fisicas como en el ejemplo y bajas logicas como se indica en el ultimo parrafo) para los archivos construidos, para este ultimo caso se deberan reconstruir todos los programas anteriores,

TEMA 10: OPERACIONES CON CAMPOS MYSQL

En este tema se analiza la manera de poder realizar operaciones o procesos con los campos de los registros en el archivo secuencial, lo unico importante a considerar es que los campos del registro son en cierta medida igual que variables normales y por tanto se pueden proceesar de manera normal como lo muestra el ejemplo.

prog24.php

<HTML> <FORM ACTION=prog24.php METHOD=post> OPERACIONES CONVIRTIENDO EDAD A MESES <BR> <INPUT TYPE=submit NAME=OK VALUE="meses"><BR> </FORM></HTML> <?php if ($OK == "meses") { // abriendo dos archivos $archivo=fopen('alumnos.dat','a+'); $archt=fopen('temporal.dat','a+'); // leyendo el archivo original while (!feof($archivo)) { $clave=fgets($archivo); $nombre=fgets($archivo); $edad=fgets($archivo); $estatura=fgets($archivo); // realizando la operacion $edad=$edad * 12;

Page 82: PHP 5 TOTAL

// cargando al archivo temporal // recordar que float agrega 0 if ($clave !=0){ fputs($archt, $clave); fputs($archt, $nombre); fputs($archt, $edad."\n"); fputs($archt, $estatura); }; }; // cerrando los dos archivos fclose($archivo); fclose($archt); // eliminando archivo original unlink("alumnos.dat"); // renombrando temporal como original rename("temporal.dat","alumnos.dat"); // avisando echo "operacion realizada"; }; ?>

corrida:

Page 83: PHP 5 TOTAL

corrida prog20

como se observa la solucion es muy sencilla solo se ocupa el registro original y los dos archivos el original y el temporal, se va leyendo registro a registro de archivo original al registro en memoria correspondiente, se realiza la operacion u proceso deseado con el registro y se graba el registro modificado en el archivo temporal, al final se elimina archivo original y se renombra el archivo temporal.

TAREAS PHP MYSQL :

CONSTRUIRLES PROGRAMAS QUE PROCESEN ALGUNOS CAMPOS DE LOS ARCHIVOS EJEMPLOS QUE YA TIENEN CONSTRUIDOS.

Page 84: PHP 5 TOTAL

TEMA 11: EDICION DE REGISTROS ARCHIVOS

Modificar o editar un registro es uno de los procesos mas comunes con archivos en disco, generalmente despues de un fuerte proceso de captura de registros, una revision o consulta general muestra muchos de ellos con errores de captura.

El modelo de programacion cliente-servidor que se esta estudiando, facilita mucho este proceso de edicion.

1.- la forma html pide la clave del registro a editar.

2.- el primer evento “BUSQUEDA” es el programa normal de busqueda que ya se construyo en temas anteriores, pero al desplegar el registro se debera construir una forma html completa (llamada forma o pagina dinamic a) que incluya los textboxs cargados con los datos del registro, observar que en general este programa lo que hace es construir una segunda forma html con los datos cargados del registro.

3.- el segundo evento “EDICION” es activado y toma los datos de la forma dinamica , los almacena en un registro temporal que va comparando contra el registro original que se va leyendo del archivo original y cuando la clave del registro original y la clave de registro temporal coinciden, entonces es el registro temporal quien se almacena o graba en el archivo temporal.

Prog25.php

<HTML> <FORM ACTION=prog25.php METHOD=post> DAME CLAVE A EDITAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="busqueda"><BR> </FORM></HTML> <?php if ($OK == "busqueda") { // abriendo archivo $archivo=fopen('alumnos.dat','a+'); // leyendo el archivo while (!feof($archivo)){ $clave=fgets($archivo); $nombre=fgets($archivo); $edad=fgets($archivo);

Page 85: PHP 5 TOTAL

$estatura=fgets($archivo); // convirtiendo al mismo tipo settype($clave,"integer"); settype($CLAVE,"integer"); if ( $CLAVE == $clave){ // construir una forma dinamica echo "<FORM ACTION=prog25.php METHOD=post>"; echo "CLAVE:<INPUT TYPE=text NAME=CLAVE value=$clave><BR>"; // recordar que strings se encadenan con . echo "NOMBRE:<INPUT TYPE=text NAME=NOMBRE value= \"".$nombre."\"><BR>"; echo "EDAD:<INPUT TYPE=text NAME=EDAD value=$edad><BR>"; echo "ESTATURA:<INPUT TYPE=text NAME=ESTATURA value=$estatura><BR>"; echo "<INPUT TYPE=submit NAME=OK VALUE=editar><BR>"; echo "</FORM>"; }; }; // cerrando archivo fclose($archivo); }; if ($OK == "editar") { // abriendo dos archivos $archivo=fopen('alumnos.dat','a+'); $archt=fopen('temporal.dat','a+'); // leyendo original y grabando a temporal while (!feof($archivo)) { $clave=fgets($archivo); $nombre=fgets($archivo);

Page 86: PHP 5 TOTAL

$edad=fgets($archivo); $estatura=fgets($archivo); // convirtiendo al mismo tipo settype($clave,"integer"); settype($CLAVE,"integer"); if( $CLAVE == $clave and $clave != 0 ) { // grabando registro editado fputs($archt, $CLAVE."\n"); fputs($archt, $NOMBRE."\n"); fputs($archt, $EDAD."\n"); fputs($archt, $ESTATURA."\n"); } elseif ($clave != 0){ // grabando registros almacenados fputs($archt, $clave."\n"); fputs($archt, $nombre); fputs($archt, $edad); fputs($archt, $estatura); }; }; // fin while // cerrando los dos archivos fclose($archivo); fclose($archt); // eliminando archivo original unlink("alumnos.dat"); // renombrando temporal como original

Page 87: PHP 5 TOTAL

rename("temporal.dat","alumnos.dat"); // avisando echo "registro editado"; }; ?>

corrida:

corrida prog20

Page 88: PHP 5 TOTAL

TAREAS PROGRAMACION LINUX PHP

CONSTRUIRLES PROGRAMAS DE EDICION O MODIFICACION A LOS ARCHIVOS YA CONSTRUIDOS

TEMA 12: GRAFICOS PHP

Campos de graficos o de imagenes se han convertido en elementos importantes de cualquier base de datos.

Para manejar este elemento:

1.- Es un metodo sencillo, primero subir las imagenes ( de preferencia jpg) con un ftp normal a tusitio y al folder public_html.

2.- Usar el tag <img src> de html EN EL PROGRAMA php

3.- agregar un campo de string llamado fotourl o foto o url a el registro en el archivo secuencial y cargarlo con la direccion internet donde quedo la imagen por ejemplo, por ejemplo http://programacionfacil.com/~tusitio/pato.jpg, MUCHO OJO este paso exije que se tengan que reconstruir todos los programas anteriores para incluir este nuevo campo y volver a crear los archivos de ejemplos, aunque es valido grabar solo el NOMBREFOTO.JPG si el programa y el jpg estan juntos en el mismo directorio.

prog26.php

<HTML> <FORM ACTION=prog26.php METHOD=post>

Page 89: PHP 5 TOTAL

DAME CLAVE A BUSCAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="busqueda"><BR> </FORM></HTML> <?php if ($OK == "busqueda") { // abriendo archivo $archivo=fopen('alumnos.dat','a+'); // empezando una tabla html para desplegar echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; echo"<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=YellowRed>ESTATURA</th></TR>"; // leyendo el archivo while (!feof($archivo)){ $clave=fgets($archivo); $nombre=fgets($archivo); $edad=fgets($archivo); $estatura=fgets($archivo); $foto=fgets($archivo); // convirtiendo al mismo tipo settype($clave,"integer"); // settype($CLAVE,"integer"); if ( $CLAVE == $clave){ // desplegando en celda de tabla html echo"<tr>"; echo "<td>".$clave."</td>"; echo "<td>".$nombre."</td>"; echo "<td>".$edad."</td>"; echo "<td>".$estatura."</td>";

Page 90: PHP 5 TOTAL

echo "<td><img src=".$foto."></td>"; echo"</tr>";}; }; // cerrando archivo y la tabla html echo "</table>"; fclose($archivo); }; ?>

corrida:

TAREAS ARCHIVOS LINUX PHP :

CONSTRUIRLE UN CATALOGO DE PRODUCTOS, EMPLEADOS, ETC., A UNA EMPRESA CUALQUIERA QUE TENGA TODOS LOS PROCESOS VISTOS, PUEDEN SELECCIONAR, REFACCIONARIAS, JOYERIAS, VIDEOS, ETC.

Page 91: PHP 5 TOTAL

TEMA 1: INTRODUCCION ARCHIVOS LINUX PHP

SE DICE QUE UN ARCHIVO ES DE ACCESO U ORGANIZACION DIRECTA CUANDO PARA ACCEDER A UN REGISTRO N CUALESQUIERA NO SE TIENE QUE PASAR POR LOS N-1 REGISTROS ANTERIIORES.

Como se observa de esta definicion los archivos directos tienen una gran ventaja( son mucho mas rapidos) cuando se comparan con los archivos de acceso u organizacion secuencial estudiados en la unidad anterior.

Aunque lo anterior no quiere decir que son mejores que los secuenciales, es decir es el propio problema planteado quien exigira una solucion u otra, por ejemplo si se quiere construir un archivo para almacenar los datos de un guestbook, si se construye de manera directa seria muy rapido pero si lo construimos de manera secuencial, se podran almacenar datos con cantidades de informacion mas adecuados al problema.

Es decir un archivo de acceso directo tiene que tener sus registros o renglones de un tamano fijo o predeterminado de antemano.

Un archivo de acceso directo permite posicionar el apuntador de interno de registros, a cualquier registro determinado sin necesidad de pasar por todos los registros anteriores, usando la siguiente funcion.

1) int fseek(apuntadorarchivo,long offset,origen);

Esta funcion posiciona el apuntador de registros en el byte indicado.

Offset → cantidad de bytes

Origen:

SEEK_SET principio del archivo.

SEEK_CUR posicion actual.

SEEK_END fin del archivo.

TEMA 2: GRABACION ESCRITURA ARCHIVOS DIRECTOS PHP

En este proceso se pretende crear un archivo secuencial en disco e insertarle unos cuantos registros.

Prog27.php

<HTML> <FORM ACTION=prog27.php METHOD=post> CLAVE:<INPUT TYPE=text NAME=CLAVE><BR> NOMBRE:<INPUT TYPE=text NAME=NOMBRE><BR>

Page 92: PHP 5 TOTAL

EDAD:<INPUT TYPE=text NAME=EDAD><BR> ESTATURA:<INPUT TYPE=text NAME=ESTATURA><BR> <INPUT TYPE=submit NAME=OK VALUE="insertar"><BR> </FORM></HTML> <?php if ($OK == "insertar") { // creando y abriendo archivo $archivo=fopen('datos.dat','a+') or die("no puedo abrir archivo"); // empacando los campos del registro // recordar que la clave debe empezar en 0 // recordar crear y poner en 'A' campo de status ver bajas en unidad anterior $bandera="A"; $registro =pack("IA30idA1",$CLAVE,$NOMBRE,$EDAD,$ESTATURA,$bandera); // grabando el registro fwrite($archivo,$registro,strlen($registro)); //cerrando archivo fclose($archivo); //avisando echo "registro # ".$CLAVE." insertado"."<br>"; }; ?>

Corrida:

Page 93: PHP 5 TOTAL

notas:

La primera observacion es que se esta usando el fopen en modo “a+”.

Se esta agregando un campo $bandera=“A” para resolver el problema de bajas, reestudiar el tema de bajas en la unidad anterior de archivos secuenciales.

Recordar que las claves del registro deben coincidir con el numero de renglon del archivo, asi que la serie de claves en archivos random o directos es 0,1,2,3,4,,,n

La instrucion de grabacion es:

Se debera empacar el registro con la instruccion pack(), recordar que esto se hace para que el registro quede con un tamano fijo, que es uno de los requisitos que debe tener un archivo directo o random.

Se empaco con la instruccion:

$registro =pack(“IA30idA1”,$CLAVE,$NOMBRE,$EDAD,$ESTATURA,$bandera);

observar que cada campo debe llevar su propio marcador de empaquetado, por el ejemplo el marcador para enteros es I, el de float es D, el de string es A(tamanostring), desgraciadamente php exige que no lleven espacios en blanco dentro de la primera string de pack(), es por esa razon que se ve una string muy rara, pero revisen cada tipo de variable y observaran que cada una tiene su correspondiente marcador dentro de la primera string de pack().

Los marcadores de pack() mas comunes son:

A –> empaca strings y rellena con espacios en blanco indicados

I –> empaca unsigned int y usa 4 bytes de almacenamiento

Page 94: PHP 5 TOTAL

i –> empaca signed int y usa 4 bytes de almacenamiento

C –> empaca unsigned char y usa ? bytes de almacenamiento

l –> empaca signed long y usa 4 bytes de almacenamiento

L –> empaca unsigned long y usa 4 bytes de almacenamiento

f –> empaca float y usa 4 bytes de almacenamiento ( no usar es mejor usar D)

D –> empaca double y usa 8 bytes de almacenamiento

Se esta grabando con isntruccion:

fwrite($archivo,$registro,strlen($registro));

Fwrite ocupa tres parametros:

1.- el archivo a grabar

2.- el registro a grabar

3.- el tamano del registro: Aqui se esta determinando el tamano del registro con strlen($registro) en lugar de sizeof(registro) como se hace en C, porque pack esta regresando una string binaria.

No olvidar cerrar el archivo con:

Fclose($archivo);

TAREAS PROGRAMACION PHP :

Construir unos cuantos archivos de datos y cargarlos con este programa.

TEMA 3: LECTURA ARCHIVOS DIRECTOS DISCO PHP

Como ya se menciono grabar y lectura de registros o estructuras a renglones o registros de archivos en disco.

Estos dos procesos son los casos mas comunes y frecuentes que se pueden realizar con un archivo de disco.

GRABACION DE UNA ESTRUCTURA A UN ARCHIVO EN DISCO

Prog28.php

<HTML> <FORM ACTION=prog28.php METHOD=post> <INPUT TYPE=submit NAME=OK VALUE="consulta"><BR>

Page 95: PHP 5 TOTAL

</FORM></HTML> <?php if ($OK == "consulta") { // tamano registro y cantidad de registros $TR=47;$CR=filesize('datos.dat') / $TR; // creando y abriendo archivo $archivo=fopen('datos.dat','a+') or die("no puedo abrir archivo"); //empezando una tabla html echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; echo"<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=YellowRed>ESTATURA</th></TR>"; // abriendo en lectura el registro for($x=1; $x<=(int)$CR; $x=$x+1) { // leyendo y desempacando el registro $reg=fread($archivo,$TR); $reg= unpack("iclave/A30nombre/iedad/destatura/A1bandera", $reg); // desplegando if ($reg[bandera] == "A"){ echo"<tr>"; echo "<td>".$reg[clave]."</td>"; echo "<td>".$reg[nombre]."</td>"; echo "<td>".$reg[edad]."</td>"; echo "<td>".$reg[estatura]."</td>"; echo"</tr>"; }; }; //cerrando archivo y tabla echo "</table>";

Page 96: PHP 5 TOTAL

fclose($archivo); }; ?>

corrida:

El archivo se abre tambien en “a+”.

Los datos se desplieganen una tabla html.

Se usa un ciclo de lectura for( 1 to cantidad de renglones) observar que el tamano del registro 47 BYTES se debera calcular con la tabla dada en el tema anterior, para este caso es entero 4bytes+ string 30bytes+ entero 4bytes+ float 8bytes+ string 1byte=47, pero si tienen dudas, solo grabar un registro y ver su tamano desde la consola.

La cantidad de registros se calculo usando una funcion de php filesize($archivo) que regresa la cantidad de bytes que tiene en total el archivo.

Se usa fread(archivo, cantidad de bytes a leer) para cargar la variable que contendra la informacion leida del archivo en disco.

Despues se tendra que desempacar la informacion, se esta usando la misma variable para obtener la informacion desempacada.

Observar primero:

Page 97: PHP 5 TOTAL

1.- unpack regresa un ARREGLO ASOCIATIVO(ver este tema en la unidad de arreglos), si en la parte de marcadores de unpack no se ponen los nombres de los campos, el arreglo quedara cargado con indices numericos 1,2,3…n

2.- En la parte de marcadores ahora si se tiene que incluir el separador / entre cada marcador, recordar que aparte del marcador se tendra que incluir el nombre del campo o tendran que usar indices numericos.

3.- Por suspuesto que el empacado pack(int,int,float,string) tiene que corresponder con el desempacado unpack(int,int,float,string) o se va a tener un monton de problemas.

Se esta usando un if(bandera) para solo desplegar los registros que estan en ALTA.

Y cada campo se debera procesar con el formato normal de ARREGLOS ASOCIATIVOS es decir $nomarreglo[campo]

No olvidar cerrar la tabla html y el archivo.

TAREAS PROGRAMACION PHP

1.- Cargar y Leer los archivos de disco pedidos en el tema anterior.\\

TEMA 4: BUSQUEDA ARCHIVOS PHP

En este tema se analiza la busqueda de un registro o renglon determinado.

En este proceso el usuario del programa quiere que se despliegue un y solo un registro de informacion proporcionando un dato de busqueda generalmente la clave del registro.

Recordar que en esta operacion se muestra la diferencia fundamental entre archivos secuenciales y archivos directos, es decir aqui se puede accesar directamente un registro n cualesquiera.

Prog29.php

<HTML> <FORM ACTION=prog29.php METHOD=post> DAME CLAVE A BUSCAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="BUSCAR"><BR> </FORM></HTML> <?php if ($OK == "BUSCAR") { // tamano registro y cantidad de registros

Page 98: PHP 5 TOTAL

$TR=47; $CR=filesize('datos.dat') / $TR; // creando y abriendo archivo $archivo=fopen('datos.dat','a+') or die("no puedo abrir archivo"); //empezando una tabla html echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; echo"<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=YellowRed>ESTATURA</th></TR>"; // colocandonos en byte de registro a leer if ( $CLAVE * $TR < filesize('datos.dat') ) { fseek($archivo, $CLAVE * $TR); // leyendo y desempacando el registro $reg=fread($archivo,$TR); $reg= unpack("iclave/A30nombre/iedad/destatura/A1bandera", $reg); // desplegando if ($reg[bandera] == "A") { echo"<tr>"; echo "<td>".$reg[clave]."</td>"; echo "<td>".$reg[nombre]."</td>"; echo "<td>".$reg[edad]."</td>"; echo "<td>".$reg[estatura]."</td>"; echo"</tr>"; };}; //cerrando archivo y tabla echo "</table>"; fclose($archivo); }; ?>

corrida:

Page 99: PHP 5 TOTAL

El if() antes de la instruccion FSEEK() se esta usando para evitar que se intente leer un renglon del archivo que se encuentre despues del EOF (end of file) del archivo.

Como se desprende del programa usando fseek() es posible posicionarse en cualquier byte del archivo.

El formato completo de fseek() es:

seek(apuntador, clave*tamanoregistro);

donde los parametros son:

1. apuntador al archivo en disco 2. El segundo parametro es el BYTE donde se quiere que empieze la lectura o

grabacion al archivo en disco. 3. Como va a estar dificil que se le atine a un byte determinado, es por eso que

en el programa mejor se deja que sea el propio servidor quien calcule el byte donde empieza un registro determinado con clave * tamano de registro.

4. Un tercer parametro que no se ocupo en este programa es a partir de donde se quiere posicionar el apuntador interno del archivo, los valores pueden ser:

SEEK_SET principio del archivo.

SEEK_CUR posicion actual.

SEEK_END fin del archivo.

TAREAS PROGRAMACION LINUX PHP MYSQL

Construirles programas de busquedas a los archivos ya construidos.

TEMA 5: FILTROS CONDICIONES ARCHIVOS LINUX PHP

Page 100: PHP 5 TOTAL

Otro problema similar al anterior es el de filtros o condiciones, es decir en muchas ocasiones es necesario obtener informacion acerca de un subconjunto de renglones de el archivo.

Por ejemplo todos los estudiantes que sean mayores de 17 anos, o todos los clientes que sean de Tijuana, etc. a esto le llamamos filtros o condiciones.

Tambien se resuelve de manera similar a los de archivos secuenciales es decir usando un ciclo de lectura de todo el archivo e ir desplegando todos los registros que cumplan la condicion.

Prog30.php

<HTML> <FORM ACTION=prog30.php METHOD=post> EDAD >=<INPUT TYPE=text NAME=EDAD><BR> <INPUT TYPE=submit NAME=OK VALUE="FILTRAR"><BR> </FORM></HTML> <?php if ($OK == "FILTRAR") { // tamano registro y cantidad de registros $TR=47;$CR=filesize('datos.dat') / $TR; // creando y abriendo archivo $archivo=fopen('datos.dat','a+') or die("no puedo abrir archivo"); //empezando una tabla html echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; echo"<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=YellowRed>ESTATURA</th></TR>"; // abriendo en lectura el registro for($x=1; $x<=(int)$CR; $x=$x+1) { // leyendo y desempacando el registro $reg=fread($archivo,$TR); $reg= unpack("iclave/A30nombre/iedad/destatura/A1bandera", $reg);

Page 101: PHP 5 TOTAL

// desplegando if ($reg[bandera] == "A" and $reg[edad]>=$EDAD ){ echo"<tr>"; echo "<td>".$reg[clave]."</td>"; echo "<td>".$reg[nombre]."</td>"; echo "<td>".$reg[edad]."</td>"; echo "<td>".$reg[estatura]."</td>"; echo"</tr>"; }; }; //cerrando archivo y tabla echo "</table>"; fclose($archivo); }; ?>

corrida:

Page 102: PHP 5 TOTAL

Como se observa es un problema y una solucion similar al tema anterior de busquedas.

PROGRAMACION ARCHIVOS LINUX PHP

HACERLES PROGRAMAS DE FILTRADO A LOS ARCHIVOS ANTERIORES, PERO LA CONDICION DE BUSQUEDA FORMARLA CON COMPONENTES HTML DE SELECCION(UNO PARA LA VARIABLE Y OTRO PARA EL OPERADOR RELACIONAL) Y UN COMPONENTE TEXT( PARA EL DATO), ESTO PERMITIRIA QUE SE PUDIERA FILTRAR EL ARCHIVO POR CUALQUIER CAMPO y cualquier operador.

TEMA 6: BAJAS O ELIMINACIONES ARCHIVOS DISCO LINUX PHP

Eliminación o bajas es el proceso por medio del cual algunos registros del archivo son purgados del archivo, existen varias maneras por las cuales se puede realizar ese proceso.

Sin embargo en archivos directos no se puede ni se debe eliminar fisicamente registros de los archivos porque recordar que la clave del registro esta enlazada directamente a la posición que dicho registro tiene en disco y no seria muy conveniente estarle cambiando la matricula al alumno cada rato o el nuemro de serie al auto, etc.

Aaprte de que con esta manera de eliminar incluso fisicamente los registros del archivo es que no hay manera de recuperar esa información posteriormente.

Page 103: PHP 5 TOTAL

Es por eso que otra tecnica común de eliminación es incluir un campo de estado, status o bandera o semaforo en el registro y conforme se va cargando el registro y antes de mandarlo a disco se le agrega a dicho campo el caracter 'A' –>alta, asi que cuando se quiera una baja solo se pondria dicho campo en 'B' y todos los programas de lectura, busqueda y filtros deberan revisar esta campo de estado antes de hacer algo con el registro.

Prog31.php

<HTML> <FORM ACTION=prog31.php METHOD=post> DAME CLAVE A ELIMINAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="BAJA"><BR> </FORM></HTML> <?php if ($OK == "BAJA") { // tamano registro y cantidad de registros $TR=47; $CR=filesize('datos.dat') / $TR; // creando y abriendo archivo $archivo=fopen('datos.dat','r+') or die("no puedo abrir archivo"); // colocandonos en byte de registro a leer if ( $CLAVE * $TR < filesize('datos.dat') ) { fseek($archivo, $CLAVE * $TR); // leyendo y desempacando el registro $reg=fread($archivo,$TR); $reg= unpack("iclave/A30nombre/iedad/destatura/A1bandera", $reg); // cambiando la bandera del registro para ponerla en baja $reg[bandera]="B"; // empacando otra vez $reg =pack("IA30idA1",$reg[clave],$reg[nombre],$reg[edad],$reg[estatura],$reg[bandera]);

Page 104: PHP 5 TOTAL

// regresando apuntador al principio del renglon rewind($archivo); fseek($archivo, $CLAVE * $TR); // regrabando registro fwrite($archivo,$reg,strlen($reg)); }; //cerrando archivo fclose($archivo); // avisando echo "REGISTRO ELIMINADO"; }; ?>

corrida:

TAREAS PROGRAMACION LINUX PHP :

Construir programa de eliminacion usando bajas logicas para los archivos construidos

TEMA 7: PHP ARCHIVOS Y OPERACIONES CON CAMPOS

En este tema se analiza la manera de poder realizar operaciones o procesos con los campos de los registros en el archivo secuencial, lo unico importante a considerar es que los campos del registro son en cierta medida igual que variables normales y por tanto se pueden proceesar de manera normal como lo muestra el ejemplo.

Page 105: PHP 5 TOTAL

Prog32.php

<HTML> <FORM ACTION=prog32.php METHOD=post> <INPUT TYPE=submit NAME=OK VALUE="EDAD+100"><BR> </FORM></HTML> <?php if ($OK == "EDAD+100") { // tamano registro y cantidad de registros $TR=47;$CR=filesize('datos.dat') / $TR; // creando y abriendo archivo $archivo=fopen('datos.dat','r+') or die("no puedo abrir archivo"); // abriendo en lectura el registro for($x=1; $x<=(int)$CR; $x=$x+1) { // leyendo y desempacando el registro $reg=fread($archivo,$TR); $reg= unpack("iclave/A30nombre/iedad/destatura/A1bandera", $reg); // realizando operacion $reg[edad]=$reg[edad]+100; // empacando otra vez $reg =pack("IA30idA1",$reg[clave],$reg[nombre],$reg[edad],$reg[estatura],$reg[bandera]); // regresando apuntador al principio del renglon fseek($archivo, -$TR, SEEK_CUR); // regrabando registro fwrite($archivo,$reg,strlen($reg)); }; //cerrando archivo

Page 106: PHP 5 TOTAL

fclose($archivo); // avisando echo "PROCESO TERMINADO"; }; ?>

corrida:

corrida prog28

Page 107: PHP 5 TOTAL

como se observa la solucion es muy sencilla solo se ocupa:

1.- leer el registro, esto mueve el apuntador al siguiente registro.

2.- modificar registro

3.- regresar a posicion anterior con fseek()

4.- grabar el registro corregido

y no se ocupan los dos archivos como en el caso secuencial.

TAREAS PROGRAMACION PHP :

CONSTRUIRLES PROGRAMAS QUE PROCESEN ALGUNOS CAMPOS DE LOS ARCHIVOS EJEMPLOS QUE YA TIENEN CONSTRUIDOS.

TEMA 8: PHP EDICION MODIFICACION DE REGISTROS SQL UPDATE

Modificar o editar un registro es uno de los procesos mas comunes con archivos en disco, generalmente despues de un fuerte proceso de captura de registros, una revision o consulta general muestra muchos de ellos con errores de captura.

El modelo de programacion cliente-servidor que se esta estudiando, facilita mucho este proceso de edicion.

Para este proceso se ocupara una forma html y se oc uparan dos eventos, el procedimiento a seguir es:

1.- la forma html pide la clave del registro a editar.

2.- el primer evento es el programa normal de busqueda que ya se construyo en temas anteriores, pero al desplegar el registro se debera construir una forma html completa(llamada forma o pagina dinamica) que incluya los textboxs cargados con los datos del registro e incluyendo un segundo button=editar o evento2, observar que en general este evento lo que hace es construir una segunda forma html con los datos cargados del registro.

3.- el segundo evento es activado y toma los datos de la forma dinamica, los almacena en el registro en memoria luego se posiciona en el registro en disco a modificar con seek() y se regraba.

Prog33.php

<HTML> <FORM ACTION=prog33.php METHOD=post> DAME CLAVE A BUSCAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="BUSCAR"><BR>

Page 108: PHP 5 TOTAL

</FORM></HTML> <?php if ($OK == "BUSCAR") { // tamano registro y cantidad de registros $TR=47; $CR=filesize('datos.dat') / $TR; // creando y abriendo archivo $archivo=fopen('datos.dat','a+') or die("no puedo abrir archivo"); // colocandonos en byte de registro a leer if ( $CLAVE * $TR < filesize('datos.dat') ) { fseek($archivo, $CLAVE * $TR); // leyendo y desempacando el registro $reg=fread($archivo,$TR); $reg= unpack("iclave/A30nombre/iedad/destatura/A1bandera", $reg); // construyendo forma dinamica echo "<FORM ACTION=prog33.php METHOD=post>"; echo "CLAVE:<INPUT TYPE=text NAME=CLAVE value=$reg[clave]><BR>"; // recordar que strings se encadenan con . echo "NOMBRE:<INPUT TYPE=text NAME=NOMBRE value= \"".$reg[nombre]."\"><BR>"; echo "EDAD:<INPUT TYPE=text NAME=EDAD value=$reg[edad]><BR>"; echo "ESTATURA:<INPUT TYPE=text NAME=ESTATURA value=$reg[estatura]><BR>"; echo "<input type=hidden name=bandera value=$reg[bandera]>"; echo "<INPUT TYPE=submit NAME=OK VALUE=editar><BR>"; echo "</FORM>"; }; //cerrando archivo fclose($archivo);

Page 109: PHP 5 TOTAL

}; if ($OK == "editar") { // creando y abriendo archivo $archivo=fopen('datos.dat','r+') or die("no puedo abrir archivo"); // empacando los campos del registro $registro =pack("IA30idA1",$CLAVE,$NOMBRE,$EDAD,$ESTATURA,$bandera); // colocandonos en posicion // tamano registro y cantidad de registros $TR=47; $CR=filesize('datos.dat') / $TR; // colocandonos en byte de registro a grabar if ( $CLAVE * $TR < filesize('datos.dat') ) { fseek($archivo, $CLAVE * $TR); // grabando fwrite($archivo,$registro,strlen($registro)); }; //cerrando archivo fclose($archivo); //avisando echo "registro editado<br>"; }; ?>

Corrida:

Page 110: PHP 5 TOTAL

Observar que es el programa normal de busqueda pero el despliegue se realiza construyendo una pagina o forma dinamica que se llama a si misma (action=prog33.php) como se observa en la corrida:

Este es el programa que activa la forma dinamica y que actualiza el registro editado en el archivo en disco, la logica de este programa ya se explico en el tercer parrafo de este tema.

Corrida prog28.php

Page 111: PHP 5 TOTAL

TAREAS PHP MYSQL SUGERIDOS

CONSTRUIRLES PROGRAMAS DE EDICION O MODIFICACION A LOS ARCHIVOS YA CONSTRUIDOS.

TEMA 9: GRAFICOS ARCHIVOS DISCO PHP

Campos de graficos o de imagenes se han convertido en elementos importantes de cualquier base de datos.

Para manejar este elemento:

1.- Es un metodo sencillo, primero subir las imagenes ( de preferencia jpg) con un ftp normal a tusitio y al folder public_html.

2.- Usar el tag <img src> de html EN EL PROGRAMA

3.- agregar un campo de string llamado fotourl o foto o url a el registro en el archivo secuencial y cargarlo con la direccion internet donde quedo la imagen por ejemplo, por ejemplo http://programacionfacil.com/~tusitio/pato.jpg, MUCHO OJO este paso exije que se tengan que reconstruir todos los programas anteriores para incluir este nuevo campo y volver a crear los archivos de ejemplos.

Aunque es posible solo poner en este campo foto solo el nombre de la imagen jpg, por ejemplo oso.jpg, si el programa y el jpg estan juntos en el mismo directorio no hay problemas en img src para desplegar, pero tambien se puede incluir en la instruccion echo de despliegue el http de la foto ejemplo echo ”<img src=http://programacionfacil.com/folder/”.$foto etcetera

Page 112: PHP 5 TOTAL

Prog 34.php

<HTML> <FORM ACTION=prog34.php METHOD=post> DAME CLAVE A BUSCAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="BUSCAR"><BR> </FORM></HTML> <?php if ($OK == "BUSCAR") { // tamano registro y cantidad de registros $TR=67; $CR=filesize('datos.dat') / $TR; // creando y abriendo archivo $archivo=fopen('datos.dat','a+') or die("no puedo abrir archivo"); //empezando una tabla html echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; echo"<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=YellowRed>ESTATURA</th></TR>"; // colocandonos en byte de registro a leer if ( $CLAVE * $TR < filesize('datos.dat') ) { fseek($archivo, $CLAVE * $TR); // leyendo y desempacando el registro $reg=fread($archivo,$TR); $reg= unpack("iclave/A30nombre/iedad/destatura/A1bandera/A20foto", $reg); // desplegando if ($reg[bandera] == "A") { echo"<tr>"; echo "<td><img src=".$reg[foto]."></td>"; echo "<td>".$reg[clave]."</td>";

Page 113: PHP 5 TOTAL

echo "<td>".$reg[nombre]."</td>"; echo "<td>".$reg[edad]."</td>"; echo "<td>".$reg[estatura]."</td>"; echo"</tr>"; };}; //cerrando archivo y tabla echo "</table>"; fclose($archivo); }; ?>

corrida:

TAREAS ARCHIVOS PHP :

CONSTRUIR UN SISTEMA COMPLETO al menos con dos archivos QUE TENGA TODOS LOS PROCESOS VISTOS, PUEDEN SELECCIONAR, REFACCIONARIAS, JOYERIAS, VIDEOS, ETC.

Page 114: PHP 5 TOTAL

TEMA 1: INTRODUCCION MYSQL

En este capitulo se analizan en general dos problemas:

a) Variables que permitan almacenar conjuntos de datos como los arreglos pero con distintos tipos de datos, este primer problema se resolvia en la antiguedad usando las llamadas variables registro.

b) Permanencia de los datos, hasta ahora todos los datos capturados, calculados, creados, etc., al terminar o cerrarse el programa se pierden y es necesario volver a capturarlos en la siguiente ejecucion o corrida del programa.

Tradicionalmente en programacion antigua, este segundo problema se resolvia usando el concepto de archivos, que son medios permanentes de almacenamiento de datos en dispositivos o perifericos apropiados generalmente disco, cinta magnetica, etc.

TEMA 2: MYSQL MODELOS DE ALMACENAMIENTO DE DATOS

En general existen dos modelos de almacenamiento de datos en los sistemas de informacion.

a) El modelo tradicional de archivos que se construye con los siguientes elementos:

1.- Variables Registros, que como ya se indico son variables que permiten almacenar conjuntos de datos de diverso tipo.

Tambien se pueden definir como representaciones simbolicas y programaticas de entidades logicas de informacion ejemplos de variables registros son alumnos, empleados, clientes, proveedores, productos, autos, etc.

Estas variables registros tambien ocupan programas o rutinas de programas para procesarlas por ejemplo un procedimiento, modulo o subrutina se encargara de capturar los datos que contendra la variable registro otro procedimiento para corregir los datos que ya contiene, otro procedimiento para desplegarlos en pantalla ya cuando a sido capturada y asi sucesivamente.

2.-Archivos, que en principio pueden entenderse como una especie de almacenes o bodegas para almacenamiento de datos en forma permanente en disco es decir, un archivo de empleados en disco contiene todos los datos de todos los empleados de una empresa.

Igualmente los archivos ocupan su propios programas o subrutinas o procedimientos especializados por ejemplo, procedimientos para crear los archivos, para almacenar o dar de altas los registros en el archivo, procedimientos para buscar un registro determinado, procedimiento para dar de baja un registro, etc.

3.- Una aplicacion que es un programa que se encarga de coordinar todos los programas descritos y presentar a usuarios de manera clara, facil, accesible y entendible.

Salta a la vista que construir un sistema de informacion por ejemplo para una tienda de video o para un refaccionaria etcetera, involucra un gran cantidad de trabajo de

Page 115: PHP 5 TOTAL

programacion puesto que hay que programar muchas variables registros, muchos archivos en disco y construir una o muchas aplicaciones.

Este modelo se usa todavia en la actualidad pero es obvio que mejores maneras, mas rapidas, seguras y eficientes existen en la actualidad para resolver estos problemas, y esto nos lleva al segundo modelo de datos.

b) Modelo de Bases de Datos Relacionales: este modelo intenta simplificar la construccion de sistemas de informacion como los antes descritos, este modelo solo incluye en forma simple los siguientes elementos:

b.1) Tablas, es una combinacion de las variables registro y de los archivos del modelo anterior.

Es decir cuando un programador moderno define o declara una tabla en un programa realmente esta haciendo dos cosas por el precio de una es decir, crea una variable registro en memoria que almacenara los datos y al mismo tiempo ya esta creando un archivo en disco que se llamara igual que la tabla y que automaticamente se convertira en un espejo de la tabla en memoria es decir, cuando se cargan los datos en la tabla en memoria tambien se estaran cargando en disco.

Otra vez cuando el programador escribe codigo para capturar los datos y mandarlos a la tabla en pantalla-memoria, realmente tambien lo esta haciendo para darlos de alta en disco.

b.2) Aplicacion, que tiene la misma funcion que en el modelo anterior.

No confundir este concepto de tablas en base de datos con el concepto de tablas vistos en el capitulo de arreglos.

Como se observa en este modelo es mas sencillo construir sistemas de informacion puesto que la parte programatica se reduce ampliamente y es este enfoque el que se implementa con php mysql

TEMA 3: MYSQL TABLAS

Una Tabla simple, representa una unidad de informac ion de una entidad fisica o logica de informacion:

ej.:

Tabla Empleado:

• Clave Empleado • Nombre Empleado • Direccion Empleado • Edad Empleado • Telefono Empleado • etc. Empleado

Tabla Proveedor:

• Clave Proveedor

Page 116: PHP 5 TOTAL

• Nombre Proveedor • Empresa Proveedor • Telefono Proveedor • Fax Proveedor • Celular Proveedor • etc. Proveedor

Tabla Autos:

• Numero de Serie • Modelo • Marca • Tipo • Color • Capacidad • etc.

REGLAS:

Observar que cada tabla empieza con una clave generalmente de tipo numerica.

Todos los elementos de la tabla referencian directa mente al mismo ente o sujeto de informacion .

Cada elemento debe ser atomico es decir solo podra contener un y solo un datum de informacion.

No se respetan o siguen al pie de la letra estos tres postulados y empiezan los problemas al tiempo de programacion.

• Existe una segunda forma o manera de representar las tablas, ejemplo:

Tabla: Camisas

NUMCAMISA MARCA ESTILO MEDIDA COLOR MATERIAL 1 JEANS SPORT GRANDE AZUL ALGODON 2 VOLIS VESTIR MEDIANA NEGRA POLIESTER 3 GENERICA CAMISETA LARGA MORADO RARON

Tabla: Clientes

NUMCLIENTE NOMCLIENTE DIRCLIENTE TELCLIENTE 1 JUAN PEREZ AV ABA 2233 2345678 2 LUIS SANCHEZ CALLE ZETA 3434 4567899 3 ROSA MARES CALLEJON NORTE 567890

Recordar siempre, una tabla almacena o representa un conjunto de datos de la misma entidad, la tabla de alumnos es para almacenar y manipular muchos alumnos, la tabla de productos es para almacenar y manipular muchos alumnos, en resumen si en un problema de informacion solo se presenta una instancia o renglon de una entidad logica, entonces no es tabla, es un encabezado.

Page 117: PHP 5 TOTAL

TAREAS PHP

1.-CONSTRUIR EN CUADERNO LAS SIGUIENTES TABLAS, LA MITAD DE ELLAS CON EL PRIMER FORMATO Y LA SEGUNDA MITAD CON EL SEGUNDO FORMATO.

1.- PACIENTES

2.- PERROS

3.- PLUMAS

4.- MERCANCIAS

5.- PELICULAS

6.- MEDICINAS

7.- MAESTROS

8.- MATERIAS

9.- COMPUTADORAS

10.- BANCOS

TEMA 4: PHP TABLAS MYSQL (CONTINUACION)

El trabajo correcto con bases de datos relacionales se divide en dos grandes pasos o etapas bien diferenciadas entre si:

En la primera etapa se disena la tabla con sus campos, llaves y condiciones especiales, luego se usa un paquete o programa de software especializado en la construccion, mantenimiento y administracion de la base de datos, este software se usa para convertir la tabla o tablas ya bien disenadas en un archivo en disco.

Existe software especializado en bases de datos, los llamados servidores de bases de datos , los tres mas comunes son SQL-SERVER de Microsoft, ORACLE Server de Oracle, MYSQL Open Source, en estos casos la base de datos( o conjunto de tablas que tienen relaciones comunes entre si) residen en un servidor de bases de datos especializado en algun lugar cercano o lejano en una red chica, mediana o grande.

Otros paquetes o software mas pequenos y comunes tambien reciben el nombre de DBMS(DATA BASE MANAGEMENT SYSTEM) o sistemas administradores de bases de datos.

Este tipo de software se especializa en la creacion, mantenimiento, seguridad, privacidad, etc. de un conjunto de tablas o mejor dicho una base de datos, DBMS comunes son access, fox, clipper, etc.

Usaremos MYSQL como nuestro generador de bases de datos y recordar que una base de datos es en principio un conjunto de tablas que tienen y mantienen relaciones entre si.

Page 118: PHP 5 TOTAL

La segunda etapa consiste en construir la aplicacion o aplicaciones que ya tendran acceso o podran manipular los datos contenidos en la tabla, estas aplicaciones se escriben usando ya sea lenguajes clasicos de programacion como CPP, BASIC, PASCAL, COBOL, CBUILDER, DELPHI, JAVA, VBSCRIPT, PERL, JSCRIPT, CSHARP, etc.

DISENO Y CREACION DE UNA TABLA

El primer paso antes de usar el paquete correspondiente a esta tarea, es disenar la tabla completamente, esto exige:

a) Nombre apropiado y determinacion de atributos y campos correspondientes.

b) Seleccionar y determinar el atributo principal o campo clave o llave primaria que se utilizara como el identificador unico que permite diferenciar cada instancia o renglon diferente dentro de la tabla.

c) Tambien se puede seleccionar otros campos que puedan servir mas adelante para ordenar de manera diferente la tabla, es decir una tabla en principio ya esta ordenada por campo clave por ejemplo, la matricula de un alumno, el numero de empleado, etc., pero existiran muchas ocasiones, mas adelante donde se puede pedir un orden diferente, por ejemplo, por ciudad, por carrera, por nombre, por edad, etc., la buena ingenieria de una base de datos exige tomar en cuenta estos y otros muchos problemas y detalles.

d) A estos atributos o campos especiales se les conoce como claves o llaves secundarias, que internamente generan otra tabla especial llamada tabla o archivo de indices(tabla o archivo que contiene dos campos, el primero es la clave secundaria ordenada y el segundo la posicion o renglon donde se encuentra en la tabla original).

e) Escribir restricciones y condiciones apropiadas para ciertos atributos, por ejemplo el numero de empleado deben comenzar en 500, la edad no debe ser mayor de 150 anos, etc.

Ya listo el diseno de la tabla, se usara el procedimiento correspondiente para su creacion y almacenamiento.

Recordar ademas que todo el trabajo ya sea directamente con la base de datos y la tabla o por medio de un programa se realizara usando SQL (lenguaje estructurado de consultas), asi que todas las instrucciones raras que se analizan en el siguiente tema, estan construidas con SQL, es decir consigan un bue n tutorial de SQL y vayan aprendiendoselo.

TEMA 5: PHP MYSQL

En este ejercicio construiremos una base de datos llamada mibase que solo contendra una tabla llamada mitabla con campos clave, nombre, edad, estatura mismos que se estaran usando a lo largo de esta unidad a manera de ejemplo.

1.- TELNET a tu sitio en tu propio servidor linux o tu web hosting con PUTTY (programa para realizar telnet's) y dar la orden:

mysql -unombreusuario -ppassword

Page 119: PHP 5 TOTAL

Esto con el fin de abrirnos una sesion de mysql, como lo muestra el siguiente ejemplo:

2.- Recordar que usuarios y passwords de mysql son diferentes que usuarios y passwords de linux's.

Con este paso ya estaremos dentro del prompt de mysql. (MYSQL>)

3.- El paso que sigue es mandar instrucciones sql apropiadas ( ya leyeron el tutorial de sql) para crear nuestra base de datos, para este ejercicio usaremos la instruccion:

create database mibase;

–>observar que todas las instrucciones de sql terminan con ;

Page 120: PHP 5 TOTAL

4.- Se uso ademas la instruccion show databases; para ver cuantas bases de datos tenemos construidas en nuestro sitio en programacionfacil.com observar que el sistema crea una default llamada test.

5.- El paso que sigue es seleccionar la base de datos a trabajar con la instruccion sql (ya leyeron el tutorial):

use mibase;

y luego construiremos nuestra primera tabla, llamada mitabla con la instruccion sql(ya leyeron el tutorial):

create table mitabla (

clave mediumint auto_increment,

nombre varchar(30),

edad int,

estatura float,

primary key(clave) );

Los tipos de datos que pueden usar en mysql son: TINYINT, SMALLINT, MEDIUMINT, INT, INTEGER, BIGINT, REAL, DOUBLE, FLOAT, DECIMAL, NUMERIC, CHAR, VARCHAR, DATE, TIME, TIMESTAMP, DATETIME, TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB, TINYTEXT, TEXT, MEDIUMTEXT, LONGTEXT,ENUM(value1,value2,value3,…), SET(value1,value2,value3,…),MySQL Reference Manual (C) 2002 MySQL AB

En cuanto a autoincrement se usa para que mysql vaya asignando la clave automaticamente y primary key(clave) es para indicarle a mysql que clave es el campo llave o principal de la tabla (ver mi tutorial de mysql en programacionfacil en cuento este listo :)

6.- Ahora se cargan algunos renglones de prueba en la tabla con la instruccion sql(ya leyeron el tutorial de sql);

mysql> insert into mitabla (nombre,edad,estatura) values(

Page 121: PHP 5 TOTAL

→“oso”,10,1.67);

7.- agregar uno dos o tres renglones para pruebas a la tabla, para finalizar revisar como quedo cargada la tabla con la instruccion sql:

mysql>select * from mitabla;

8.- Usar QUIT para terminar la sesion de mysql y usar EXIT para terminar la sesion del putty.

TEMA 6: FUNCIONES MYSQL

Mysql es un servidor de bases de datos muy rico en funciones, instrucciones y objetos, muchos de las cuales se estaran usando a lo largo de los programas en esta unidad.

Las principales funciones que se usaran algunas son:

mysql_affected_rows - Get number of affected rows in previous MySQL operationmysql_change_user - Change logged in user of the active connectionmysql_client_encoding - Returns the name of the character setmysql_close - Close MySQL connectionmysql_connect - Open a connection to a MySQL Servermysql_create_db - Create a MySQL databasemysql_data_seek - Move internal result pointermysql_db_name - Get result datamysql_db_query - Send a MySQL querymysql_drop_db - Drop (delete) a MySQL databasemysql_errno - Returns the numerical value of the error message from previous MySQL operationmysql_error - Returns the text of the error message from previous MySQL operationmysql_escape_string - Escapes a string for use in a mysql_query.mysql_fetch_array - Fetch a result row as an associative array, a numeric array, or both.mysql_fetch_assoc - Fetch a result row as an associative arraymysql_fetch_field - Get column information from a result and return as an

Page 122: PHP 5 TOTAL

objectmysql_fetch_lengths - Get the length of each output in a resultmysql_fetch_object - Fetch a result row as an objectmysql_fetch_row - Get a result row as an enumerated arraymysql_field_flags - Get the flags associated with the specified field in a resultmysql_field_len - Returns the length of the specified fieldmysql_field_name - Get the name of the specified field in a resultmysql_field_seek - Set result pointer to a specified field offsetmysql_field_table - Get name of the table the specified field is inmysql_field_type - Get the type of the specified field in a resultmysql_free_result - Free result memorymysql_get_client_info - Get MySQL client infomysql_get_host_info - Get MySQL host infomysql_get_proto_info - Get MySQL protocol infomysql_get_server_info - Get MySQL server infomysql_info - Get information about the most recent querymysql_insert_id - Get the ID generated from the previous INSERT operationmysql_list_dbs - List databases available on a MySQL servermysql_list_fields - List MySQL table fieldsmysql_list_processes - List MySQL processesmysql_list_tables - List tables in a MySQL databasemysql_num_fields - Get number of fields in resultmysql_num_rows - Get number of rows in resultmysql_pconnect - Open a persistent connection to a MySQL servermysql_ping - Ping a server connection or reconnect if there is no connectionmysql_query - Send a MySQL querymysql_real_escape_string - Escapes special characters in a string for use in a SQL statement, taking into account the current charset of the connection.mysql_result - Get result datamysql_select_db - Select a MySQL databasemysql_stat - Get current system statusmysql_tablename - Get table name of fieldmysql_thread_id - Return the current thread IDmysql_unbuffered_query - Send an SQL query to MySQL, without fetching and buffering the result rows

FUENTE: MANUAL DE AYUDA DE PHP

TEMA 7: MYSQL SQL SELECT CONSULTA O DESPLIEGUE

Existen una serie de operaciones y procesos que son muy comunes contra una tabla en una base de datos en disco, la mas comun es desplegar todos los renglones de la tabla que estan almacenados en disco, a este proceso le llamaremos SELECCION, consulta o despliegue.

Como se indico anteriormente la comunicacion con la base de datos se tendran que dar usando el lenguaje especializado de bases de datos llamado SQL(structured query language), la instruccion sql que se usa para resolver este problema tiene el siguiente formato:

SELECT [listacampos, * o ALL] FROM TABLA;

El procedimiento que se intenta seguir cuando se construya un programa asp.net que tenga que manipular una tabla en disco debera seguir los siguientes pasos:

1.- Crear una coneccion o enlace a la base de datos.

2.- Abrir la coneccion a la base de datos.

3.- Crear el enlace y cargarlo con la instruccion sql

4.- Crear un arreglo y cargarlo

5.- Cargar un objeto table de html con el dataset

Page 123: PHP 5 TOTAL

6.- Procesar el table de html (editar un renglon, agregar un renglon, modificar un renglon, etc)

7.- Cerrar la coneccion

prog35.php

<HTML> <FORM ACTION=prog35.php METHOD=post> <INPUT TYPE=submit NAME=OK VALUE="SELECT"><BR> </FORM></HTML> <?php if ($OK == "SELECT") { // coneccion al servidor de bases de datos $dbh=mysql_connect ("localhost", "lsoto_lauro", "lauro2004") or die ('problema conectando porque :' . mysql_error()); // seleccionado la base de datos mysql_select_db ("lsoto_mibase",$dbh); // preparando la instruccion sql // ya estudiaron su tutorial de sql?? $q = 'select * from tabla1'; // ejecutando el query $tabla1= mysql_query($q, $dbh) or die ("problema con query"); # empezando una tabla html echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; # construyendo los encabezados de la tabla echo "<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=blue>ESTATURA</th></TR>"; // ciclo de lectura del rowset($tabla1) while($renglon = mysql_fetch_row($tabla1)) { // desplegando en celda de tabla html

Page 124: PHP 5 TOTAL

echo"<tr>"; echo "<td>".$renglon[0]."</td>"; echo "<td>".$renglon[1]."</td>"; echo "<td>".$renglon[2]."</td>"; echo "<td>".$renglon[3]."</td>"; echo"</tr>"; }; // cerrando tabla html echo "</table>"; }; ?>

Corrida:

notas:

Page 125: PHP 5 TOTAL

1.- revisar con cuidado el programa, proque como todo buen programa lleva incluida mucha documentacion o explicacion.

2.- Se sigue el procedimiento generico para procesar tablas

3.- Se empieza creando la forma, objetos y eventos normales para el programa.

4.- Se crea y carga una conneccion o enlace a el servidor mysql de bases de datos con la instruccion:

$dbh=mysql_connect (“localhost”, “USUARIO”, “PASSWO RD”)

or die ('problema conectando porque :' . mysql_error());

$dbh � un convencion en bases de datos, que siginifica database handle (alias a base de datos)

mysql→connect() � Funcion para enlazarse a el servidor de base de datos, sus argumentos o parametros son:

Primero localhost(este es el servidor de web donde se encuentra la base de datos).

El segundo parametro 'USUARIO' es el usuario de la base de datos y el tercer parametro 'PASSWORD' es el password para la base de datos.

5.- Luego seleccionamos la base de datos a usarse con:

mysql_select_db (“lsoto_mibase”,$dbh);

6.- Se crea una string $q, que contendra la instruccion SQL apropiada.

$q = 'select * from tabla1';

7.- La instruccion $mysql_query() ; se entiende que esta mandando o ejecutando la instruccion SQL a la base de datos.

ES MUY IPORTANTE ENTENDER QUE DE LAS CUATRO INSTRUCCIONES PRINCIPALES DE SQL (SELECT,INSERT,UPADTE,DELETE), SOLO SELECT REGRESA UNA TABLA VIRTUAL ( QUE EN MYSQL RECIBE EL NOMBRE DE ROWSET) DESDE EL SERVIDOR DE BASES DE DATOS AL PROGRAMA.

SIEMPRE QUE SE USE UN $mysql_query(select)SE DEBERA IGUALAR A UNA VARIABLE, PARA QUE ESTA ULTIMA ALMACENE LA TABLA VIRTUAL O ROWSET DE REGRESO, POR SUPUESTO QUE LOS OTROS PROCESOS(DELETE,INSERT,UPDATE) NI REGRESAN NI OCUPAN LA TABLA VIRTUAL.

Observar que esta usando la variable $dbh que se cargo con la coneccion a la base de datos.

8.- Luego se usa mysql_fetch_row($tabla1) para leer el primer renglon de la tabla y se carga cada columna o dato del renglon a un arreglo asociativo llamado $renglon.

Page 126: PHP 5 TOTAL

9.- Se esta usando un ciclo while(fetchrow()) para leer todos los renglones de la tabla, fetchrow cada vez que lee un renglon regresa o el arreglo asociativo o regresa FALSE cuando no hay mas aareglos para leer.

10.- Observar que para accesar los renglones del arreglo se usa un indice numerico, empezando en cero(0), si se quiere usar los nombres de los campos normales, se tendria que leer la tabla virtual con la instruccion $renglon= mysql_fetch_assoc($tabla1), que funciona igual que mysql_fetchrow(), excepto que para accesar los campos ya se puede usar $rengl on['clave'], $renglon['nombre']. Etc.

PERO EN ESTOS EJEMPLOS ESTOY USANDO INDICES NUMERICOS PORQUE ES MAS CORTO, MAS SENCILO Y MAS APROPIADO EN PROGRAMACION, SIENTANSE LIBRES DE USAR INDICES NUMERICOS CON FETCHROW O INDICES NORMALES CON FETCH_ASSOC.

TAREAS PROGRAMACION MYSQL PHP

1.- construir y desplegar una primera base de datos que contenga la primera tabla que disenaron en el tema de tablas.

2.- Construir una segunda base de datos que contenga cuando menos tres de las tablas ya disenadas y desplegar cualquiera de ellas usando una sola forma html, donde el usuario selecciona cual quiere desplegar.

TEMA 8: SQL INSERT INSERCION MYSQL

Insertar o agregar registros o renglones nuevos a una tabla en disco, es un proceso sencillo que usa la siguiente instruccion sql:

INSERT INTO TABLA(CAMPO1,CAMPO2..) VALUES(VALOR1,VALOR2..)

Recordar que solo se esta usando lo minimo de cada instruccion sql, es conveniente estudiar un tutorial de sql.

Prog36.php

<HTML> <FORM ACTION=prog36.php METHOD=post> NOMBRE:<INPUT TYPE=text NAME=NOMBRE><BR> EDAD:<INPUT TYPE=text NAME=EDAD><BR> ESTATURA:<INPUT TYPE=text NAME=ESTATURA><BR> <INPUT TYPE=submit NAME=OK VALUE="INSERT"><BR> </FORM></HTML> <?php

Page 127: PHP 5 TOTAL

if ($OK == "INSERT") { // coneccion al servidor de bases de datos $dbh=mysql_connect ("localhost", "lsoto_lauro", "lauro2004") or die ('problema conectando porque :' . mysql_error()); // seleccionado la base de datos mysql_select_db ("lsoto_mibase",$dbh); //construyendo insert $q="INSERT INTO tabla1 (nombre,edad,estatura) VALUES ('".$NOMBRE."',".$EDAD.",".$ESTATURA.") ;"; // ejecutando el query $tabla1= mysql_query($q, $dbh) or die ("problema con query"); //avisando echo "registro insertado <br>"; }; ?>

Corrida:

notas:

Page 128: PHP 5 TOTAL

1.- El programa esta bien documentado :)

2.- La clave no se captura porque recordar que es de tipo autoincrement y MYSQL las va creando e incrementado.

3.- Recordar tambien que la primera clave es la numero 1(uno).

TAREAS PHP MYSQL :

1.- construir muchos programas de inserccion en las tablas de las bases de datos que tengan construidas

TEMA 9: BUSQUEDA SQL SELECT MYSQL

En este tema se analiza la busqueda de un registro o renglon determinado en este proceso el usuario del programa quiere que se despliegue un y solo un registro de informacion proporcionando un dato de busqueda generalmente la clave del registro.

La solucion es sencilla, solo usar otra vez la instruccion select, con el siguiente formato:

SELECT [ *, all, campos] FROM TABLA WHERE clave=claveabuscar

les recuerdo que deben buscar y estudiar un buen tutorial de sql.

Codigo prog37.php

<HTML> <FORM ACTION=prog37.php METHOD=post> DAME CLAVE A BUSCAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="SELECT"><BR> </FORM></HTML> <?php if ($OK == "SELECT") { // coneccion al servidor de bases de datos $dbh=mysql_connect ("localhost", "lsoto_lauro", "lauro2004") or die ('problema conectando porque :' . mysql_error()); // seleccionado la base de datos mysql_select_db ("lsoto_mibase",$dbh); // preparando la instruccion sql

Page 129: PHP 5 TOTAL

$q = "select * from tabla1 where clave=".$CLAVE; // ejecutando el query $tabla1= mysql_query($q, $dbh) or die ("problema con query"); # empezando una tabla html echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; # construyendo los encabezados de la tabla echo "<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=blue>ESTATURA</th></TR>"; // ciclo de lectura del rowset($tabla1) while($renglon = mysql_fetch_row($tabla1)) { // desplegando en celda de tabla html echo"<tr>"; echo "<td>".$renglon[0]."</td>"; echo "<td>".$renglon[1]."</td>"; echo "<td>".$renglon[2]."</td>"; echo "<td>".$renglon[3]."</td>"; echo"</tr>"; }; // cerrando tabla html echo "</table>"; }; ?>

Corrida:

Page 130: PHP 5 TOTAL

nota: no hay nada nuevo es una combinacion de los dos programas anteriores con las mismas notas solo se usa un input text para pedir la clave aunque se puede usar cualquier campo para buscar.

TAREAS PROGRAMACION PHP MYSQL

1.- hacer programas de busquedas( select ) para las bases y tablas que tengan

TEMA 10: FILTROS MYSQL SELECT

Otro problema similar al anterior es el de filtros es decir en muchas ocasiones es necesario obtener informacion acerca de un subconjunto de renglones de la tabla.

Por ejemplo todos los estudiantes que sean mayores de 17 anos, todos los clientes que sean de Tijuana, etc., a esto le llamamos filtros o condiciones.

Tambien se resuelve de manera similar al anterior, es decir usando la instruccion select etc, from tabla, where CONDICION; ya estudiaron su tutorial de sql??

Codigo prog38.php

<HTML> <FORM ACTION=prog38.php METHOD=post> EDAD >= <INPUT TYPE=text NAME=EDAD><BR> <INPUT TYPE=submit NAME=OK VALUE="FILTRO"><BR>

Page 131: PHP 5 TOTAL

</FORM></HTML> <?php if ($OK == "FILTRO") { // coneccion al servidor de bases de datos $dbh=mysql_connect ("localhost", "lsoto_lauro", "lauro2004") or die ('problema conectando porque :' . mysql_error()); // seleccionado la base de datos mysql_select_db ("lsoto_mibase",$dbh); // preparando la instruccion sql $q = "select * from tabla1 where edad >= ".$EDAD; // ejecutando el query $tabla1= mysql_query($q, $dbh) or die ("problema con query"); # empezando una tabla html echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; # construyendo los encabezados de la tabla echo "<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=blue>ESTATURA</th></TR>"; // ciclo de lectura del rowset($tabla1) while($renglon = mysql_fetch_row($tabla1)) { // desplegando en celda de tabla html echo"<tr>"; echo "<td>".$renglon[0]."</td>"; echo "<td>".$renglon[1]."</td>"; echo "<td>".$renglon[2]."</td>"; echo "<td>".$renglon[3]."</td>"; echo"</tr>"; };

Page 132: PHP 5 TOTAL

// cerrando tabla html echo "</table>"; }; ?>

Nota: siguen siendo combinaciones de los programas anteriores pero seria prudente mejor usar dos combobox uno para la variable, otro para el operador relacional y un text para el dato y mandar estos tres datos al prog38.php pero eso queda de tarea.

Corrida:

TAREAS PROGRAMACION PHP MYSQL

1.- preparar programas de filtrado para sus bases de datos, recordar que sus formas html's deben construirlas con 2 combos y un text, suerte

TEMA 11: OPERACIONES CON CAMPOS SQL UPDATE MYSQL

Este es tambien un caso comun con elementos de una tabla, sin embargo es tambien facil de resolver.

Es necesario recordar primero algunas cosas elementales:

1.- Se usa la instruccion SQL UPDATE.

2.- Recordar que en SQL si no se usa la clausula where, entonces se estara trabajando contra todos los renglones de la tabla, es decir:

select * from tabla –> es traerse toda la tabla en disco a tabla virtual

select * from tabla where nombre='juan' —> es solo traerse el renglon juan

UPDATE TABLA SET NOMBRE='PEPE' WHERE CLAVE =8 → es cambiar el nombre a pepe del renglon que tiene de clave el 8

$q = “update tabla1 set edad = edad + 100 ”; →como no hay where, entonces todos los campos edad de la tabla se cambian a edad+100

Prog39.php

<HTML> <FORM ACTION=prog39.php METHOD=post> <INPUT TYPE=submit NAME=OK VALUE="EDAD+100"><BR>

Page 133: PHP 5 TOTAL

</FORM></HTML> <?php if ($OK == "EDAD+100") { // coneccion al servidor de bases de datos $dbh=mysql_connect ("localhost", "lsoto_lauro", "lauro2004") or die ('problema conectando porque :' . mysql_error()); // seleccionado la base de datos mysql_select_db ("lsoto_mibase",$dbh); // preparando la instruccion sql $q = "update tabla1 set edad = edad + 100 "; // ejecutando el query mysql_query($q, $dbh) or die ("problema con query"); // avisando echo "OPERACION TERMINADA"; }; ?>

corrida

corrida prog35.php

Page 134: PHP 5 TOTAL

TAREA PROGRAMACION MYSQL UPDATE :

1.- construir una tabla que traiga matricula, nombre, calif1, calif2 y promedio, cargar en mysql directamente unos 5 renglones de alumnos, no cargar promedio, el promedio lo deberan calcular con un programa.

TEMA 12: BAJA O ELIMINACION SQL DELETE MYSQL

Eliminacion es otro proceso simple y comun con las bases de datos el modelo MYSQL que estamos usando hace este tipo de operaciones muy faciles:

La instruccion sql a usar es: DELETE FROM TABLA WHERE CONDICION y que pasa con el tutorial de sql!!!

Prog40.php

<HTML> <FORM ACTION=prog40.php METHOD=post> DAME CLAVE A ELIMINAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="DELETE"><BR> </FORM></HTML>

Page 135: PHP 5 TOTAL

<?php if ($OK == "DELETE") { // coneccion al servidor de bases de datos $dbh=mysql_connect ("localhost", "lsoto_lauro", "lauro2004") or die ('problema conectando porque :' . mysql_error()); // seleccionado la base de datos mysql_select_db ("lsoto_mibase",$dbh); // preparando la instruccion sql $q = "delete from tabla1 where clave=".$CLAVE; // ejecutando el query mysql_query($q, $dbh) or die ("problema con query"); // avisando echo "REGISTRO ELIMININADO"; }; ?>

corrida prog40.php

TAREAS PROGRAMACION PHP MYSQL :

1.- construir este proceso para las tablas y bases de datos que tengan construidas.

Page 136: PHP 5 TOTAL

TEMA 13: EDICION DE REGISTROS MYSQL UPDATE

Editar registros significa cambiar el contenido de algunos de los campos o columnas por nueva informacion o para corregir algun error de captura original o para agregar alguna columna que no existia por modificacion de la tabla o la base de datos.

En general se tiene otro problema de sql UPDATE, sin embargo ahora se tendran que construir un programa con dos eventos, estos son:

1.- evento1 (BUSCAR): una forma normal de busqueda por clave con el mismo programa de busqueda por clave, pero ahora debera construir una forma.html dinamica, que contendra un segundo evento2 (EDITAR) apuntando o ejecutando su propio codigo.

2.- evento2 (EDITAR) : recoje los datos ya modificados de la forma.html dinamica y realiza directamente un sql update en la base de datos

prog41.php

<HTML> <FORM ACTION=prog41.php METHOD=post> DAME CLAVE A EDITAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="BUSCAR"><BR> </FORM></HTML> <?php if ($OK == "BUSCAR") { // coneccion al servidor de bases de datos $dbh=mysql_connect ("localhost", "lsoto_lauro", "lauro2004") or die ('problema conectando porque :' . mysql_error()); // seleccionado la base de datos mysql_select_db ("lsoto_mibase",$dbh); // preparando la instruccion sql $q = "select * from tabla1 where clave= ".$CLAVE; // ejecutando el query select regresa un rowset $tabla1 = mysql_query($q, $dbh) or die ("problema con query") ; // regresando renglon con registro

Page 137: PHP 5 TOTAL

$reg = mysql_fetch_row($tabla1); // construyendo forma dinamica echo "<FORM ACTION=prog41.php METHOD=post>"; // recordar que strings se encadenan con . echo "NOMBRE:<INPUT TYPE=text NAME=NOMBRE value= \"".$reg[1]."\"><BR>"; echo "EDAD:<INPUT TYPE=text NAME=EDAD value=$reg[2]><BR>"; echo "ESTATURA:<INPUT TYPE=text NAME=ESTATURA value=$reg[3]><BR>"; echo "<input type=hidden name=CLAVE value=$reg[0]>"; echo "<INPUT TYPE=submit NAME=OK VALUE=editar><BR>"; echo "</FORM>"; }; if ($OK == "editar") { // coneccion al servidor de bases de datos $dbh=mysql_connect ("localhost", "lsoto_lauro", "lauro2004") or die ('problema conectando porque :' . mysql_error()); // seleccionado la base de datos mysql_select_db ("lsoto_mibase",$dbh); // preparando la instruccion sql $q = "UPDATE tabla1 set nombre='".$NOMBRE."', edad=".$EDAD.", estatura=".$ESTATURA." where clave=".$CLAVE; // ejecutando el query mysql_query($q, $dbh) or die ("problema con query"); // avisando echo "REGISTRO EDITADO"; }; ?>

corrida:

Page 138: PHP 5 TOTAL

corrida:

corrida prog35.php

Page 139: PHP 5 TOTAL

TAREAS PROGRAMACION MYSQL PHP

1.- construir programas de edicion para sus tablas y bases de datos

TEMA 14: GRAFICOS MYSQL

Campos de graficos o de imagenes, se han convertido en elementos importantes de cualquier base de datos.

Para manejar este elemento con ado-asp.net existen dos maneras:

1.- Agregar un campo BLOB a la tabla en mysql y usar instrucciones especializadas en imagenes tanto para subirlas como para desplegar la imagen.

Este metodo provoca que la base de datos crezca mucho recordar que una imagen aun de tipo jpg ocupa mucho espacio.

2.- El segundo metodo es mas sencillo, primero subir las imagenes ( de preferencia jpg) con un ftp normal a tusitio y despues usar el tag <img src> de html y ademas agregar un campo de texto llamado fotourl o foto a la tabla en mysql y grabar la direccion http de la imagen en este campo, por ejem plo http://programacionfacil.com/tusitio/pato.jpg

o simplemente pato.jpg si el jpg esta en el directorio principal de tu sitio en el servidor

Despues solo cargar este tag img src en la pagina que se construira que no es otra cosa que el programa de busqueda con el despliegue del campo extra, como lo muestra el programa ejemplo.

Page 140: PHP 5 TOTAL

Prog42.php

<HTML> <FORM ACTION=prog42.php METHOD=post> DAME CLAVE A BUSCAR:<INPUT TYPE=text NAME=CLAVE><BR> <INPUT TYPE=submit NAME=OK VALUE="SELECT"><BR> </FORM></HTML> <?php if ($OK == "SELECT") { // coneccion al servidor de bases de datos $dbh=mysql_connect ("localhost", "lsoto_lauro", "lauro2004") or die ('problema conectando porque :' . mysql_error()); // seleccionado la base de datos mysql_select_db ("lsoto_mibase",$dbh); // preparando la instruccion sql $q = "select * from tabla1 where clave=".$CLAVE; // ejecutando el query $tabla1= mysql_query($q, $dbh) or die ("problema con query"); # empezando una tabla html echo "<HTML><TABLE Border=10 CellPadding=5><TR>"; # construyendo los encabezados de la tabla echo "<th bgcolor=Green>CLAVE</th><th bgcolor=White>NOMBRE</th><th bgcolor=Red>EDAD</th><th bgcolor=blue>ESTATURA</th></TR>"; // ciclo de lectura del rowset($tabla1) while($renglon = mysql_fetch_row($tabla1)) { // desplegando en celda de tabla html echo"<tr>"; echo "<td>".$renglon[0]."</td>";

Page 141: PHP 5 TOTAL

echo "<td>".$renglon[1]."</td>"; echo "<td>".$renglon[2]."</td>"; echo "<td>".$renglon[3]."</td>"; // incluyendo img src de html echo "<td><img src=".$renglon[4]."></td>"; echo"</tr>"; }; // fin tabla html echo "</table>"; }; ?>

corrida: prog42.php

Page 142: PHP 5 TOTAL

PROYECTO CONSTRUIR UN SISTEMA PHP MYSQL COMPLETO INTEGRADO CON TODAS LAS OPERACIONES USANDO AL MENOS DOS TABLAS

TELNET

A terminal emulation program for TCP/IP networks such as the Internet. The Telnet program runs on your computer and connects your PC to a server on the network. You can then enter commands through the Telnet program and they will be executed as if you were entering them directly on the server console. This enables you to control the server and communicate with other servers on the network. To start a Telnet session, you must log in to a server by entering a valid username and password. Telnet is a common way to remotely control Web servers.

Fuente: WWW.WEBOPEDIA.COM

1.- CARGANDO PuTTY

En este caso hostname es la direccion numerica de una maquina con un servidor apache-linux, es valido usar una direccion normal de intrnet por ejemeplo www.programacionfacil.com

Observar que no se pidio una sesion de telnet sino una session de SSH (esto es telnet tambien pero con mayor seguridad).

Usar ahora boton de OPEN para establecer la coneccion al servidor remoto.

2.- APARECE LA CONSOLA REMOTA Y PROPORCIONAR LOGIN Y PASSWORD

Page 143: PHP 5 TOTAL

3.- AHORA CREAR UN DIRECTORIO LLAMADO public_html( este directorio contendra las paginas html normales) Y DENTRO DE EL UN SUBDIRECTORIO LLAMADO cgi-bin( que contendra nuestros programas execuables de cpp en linux). Y TENER CUIDADADO CON LOS GUIONES DE PUBLIC Y CGI QUE SON DIFERENTES.

Se usaron dos instrucciones de linux estas son ls que es el equivalente de DIR en msdos y md que es el equivalente del MD del msdos, otros comandos de consola utiles de linux buscarlos en cualquier tutorial de linux.

Page 144: PHP 5 TOTAL

4.- Es necesario comprender que en LINUX(sistema operativo) y en APACHE(servidor web) la seguridad es importante y es por esa razon que CUALQUIER DIRECTORIO y CUALQUIER ARCHIVO es “propiedad” de algun usuario del sistema y solo dicho usuario tiene “permiso” para accesarlo, modificarlo, etc, es decir si se pone una pagina index.html dentro del directorio public_html y desde una maquina remota se intenta accesar el sitio el usuario de esa maquina remota no podra ver ni accesar la pagina html ni el directorio public_html porque no tiene los permisos correspondientes.

Para dar permisos por el “propietario” de el directorio y de los archivos a otros usarios y persona se usa la orden CHMOD de linux con los siguientes parametros.

Chmod ugo=rwx archivo o directorio donde:

U=user; g=grupo; o=other; r=read; w=write; x=executar

Un ejemplo sencillo es:

Chmod o=r index.html –> Aqui se esta dando permiso a otros para que puedan leer index.html.

Sin embargo el modo mas comun para permisos en linux es de manera numerica como en el siguiente ejemplo:

CHMOD 755 ARCHIVO O DIRECTORIO

5.-Crear ahora una pagina llamada index.html subirla mediante ftp ( usando el internet explorer, solo poner en la barra de direccion ftp://numero o direccion ) y en telnet darle el permiso necesario como lo muestra el ejemplo del punto cuatro, y luego accesarlo desde una maquina remota, en mi caso la dirrecion de acceso es http://192.168.1.251/~lauro

ODBC y PHP Liga: http://www.maestrosdelweb.com/editorial/odbc-y-php-en-7-pasos/

ODBC que es un estándar de acceso a Bases de Datos desarrollado por Microsoft Corporation, el objetivo de ODBC es hacer posible el acceder a cualquier dato de cualquier aplicación, sin importar qué sistema gestor de bases de datos almacene dichos datos.

Las siglas ODBC significan en inglés Open DataBase Connectivity en español se denomina como Conectividad Abierta de Bases de Datos la cual se logra al insertar una capa intermedia llamada manejador de Bases de Datos, entre la aplicación y el

Page 145: PHP 5 TOTAL

DBMS. El propósito de esta capa es traducir las consultas de datos de la aplicación en comandos que el DBMS entienda.

Para que esto funcione tanto la aplicación como el DBMS deben ser compatibles con ODBC, esto significa que la aplicación debe ser capaz de producir comandos ODBC y el DBMS debe ser capaz de responder a ellos. desde la versión 2.0 el estándar soporta SAG y SQL.

Cómo utilizar ODBC con PHP

En algunas ocasiones se nos presentan diferentes problemas a solucionar, como el de desarrollar una aplicación con la cual podamos conectarnos a diferentes bases de datos como: Access, dBase, entre otras. Una forma de resolver este problema es usando ODBC.

En el siguiente ejemplo agregaremos un DSN dentro del ODBC para realizar la conexión a una base de datos en Access:

Paso 1:

Iniciamos abriendo nuestro ODBC Data Source Administrator, luego nos situamos en la pestaña System DSN.

Paso 2:

Page 146: PHP 5 TOTAL

Posicionados en la petaña System DSN agregaremos uno nuevo, seleccionando el botón Add/Agregar.

Paso 3:

En este caso seleccionamos el Driver de Microsoft Access (*.mdb) y damos clic en el botón Finish/Finalizar.

Paso 4:

Page 147: PHP 5 TOTAL

Introducimos el Data Source Name tomando en cuenta que este nombre llamará a nuestro DSN creado en ODBC. En este ejempo se llamará: prueba. La descripción (opcional). Luego damos clic en el botón Select/Seleccionar donde buscaremos nuestra base de datos, en el ejemplo db.mbd y seleccionemos el botón OK.

Paso 5:

Page 148: PHP 5 TOTAL

Luego de seleccionar nuestra base de datos, con todos los datos correctos, seleccionamos el botón OK.

Paso 6:

A continuación vemos que se ha agregado nuestro DSN, con nombre prueba y el Driver Driver do Microsoft Access (*.mdb). Ahora seleccionemos el botón OK.

Paso 7:

Page 149: PHP 5 TOTAL

Una vez creado nuestro DSN en el ODBC, veremos el siguiente código PHP el cual nos permitirá conectarnos a nuestro ODBC y realizar consultas a la base de datos.

<? $dsn = "prueba"; //debe ser de sistema no de usuario $usuario = ""; $clave=""; //realizamos la conexión mediante odbc $cid=odbc_connect($dsn, $usuario, $clave); if (!$cid){ exit("<strong>Ya ocurrido un error tratando de conectarse con el origen de datos.</strong>"); } // consulta SQL a nuestra tabla "usuarios" que se encuentra en la base de datos "db.mdb" $sql="Select * from usuarios"; // generamos la tabla mediante odbc_result_all(); utilizando borde 1 $result=odbc_exec($cid,$sql)or die(exit("Error en odbc_exec")); print odbc_result_all($result,"border=1"); ?>

Mediante este código en PHP lograremos realizar la consulta a la base de datos, en nuestro caso nos mostrará los datos guardados en la tabla usuarios la cual contiene 4 campos Idusuarios – Nombre – Pais - Edad y cuenta con 5 registros de ejemplo.

Esto también nos ayudará a la hora de usar otros tipos de bases de datos, soló necesitaremos modificar el driver que utilizaremos en nuestro ODBC, sin necesidad de cambiar nuestro código en PHP.

Espero les haya servido este pequeño tutorial de 7 pasos para que puedan utilizar ODBC con PHP.

Códigos gratis Liga: http://www.webtaller.com/tallerscripts/scripts/6/

Scripts PHP - Códigos PHP - Sistemas de Usuarios Nombre: Autentificator (descarga) (home) Descripción: Script basado en sesiones para la Gestión de Páginas restringidas solo a Usuarios registrados, con nivel de acceso y gestión de errores en el Login. Ideal para zonas de Administración ó zona "solo usuarios" que requieren autentificación para acceder a las a las mismas. Incluye administración de usuarios (altas/bajas/modificaciones) de ejemplo. Autor: Cluster Idioma: Español

Page 150: PHP 5 TOTAL

Clicks: 43546 veces visitado. -------------------------------------------------------------------------------------------------------- Nombre: SZUserMgnt (descarga) (home) Descripción: Avanzado sistema de usuarios. Crear usuarios, remover usuarios, editar usuarios, password reminder, acticar/desactivar usuarios, ilimitados niveles de seguridad. Ilimitados personalizar el nivel de cada uno de los usuarios y de esta forma permitir el acceso o no a determinadas zonas de la web. También incluye templates que puedes modificar a tu gusto para envíos de email al nuevo usuario o para recordarle la password. Autor: varios Idioma: Inglés Clicks: 27372 veces visitado. -------------------------------------------------------------------------------------------------------- Nombre: Class.LoginUsers (descarga) (home) Descripción: Avanzado sistema de usuarios. Entre otras cosas incluye opciones para personalizar el nivel de cada uno de los usuarios y de esta forma permitir el acceso o no a determinadas zonas de la Web. Autor: Manuel Idioma: Español Clicks: 21387 veces visitado. -------------------------------------------------------------------------------------------------------- Nombre: Sistema de memos para un sistema de usuarios (descarga) (home) Descripción: Sencillo sistema de memos con un ejemplo editable para un sistema de usuarios. Contiene la estructura de la base de datos necesaria para funcionar junto con el codigo comentado. Autor: Luison Idioma: Español Clicks: 11595 veces visitado. -------------------------------------------------------------------------------------------------------- Nombre: phpAutoMembersArea (descarga) Descripción: Crea una zona restringida para usuarios registrados usando los registros de phpBB. Autor: dwalker Idioma: Español Clicks: 7641 veces visitado. -------------------------------------------------------------------------------------------------------- Nombre: Phassport v0.6 (descarga) Descripción: Clase que permite conectarte al servidor del Messenger a través de una cuenta de correo que se le especifique, recuperando de tu lista de contactos los usuarios que están online en ese momento. Los resultados se muestran en una página, usando todos los smilies disponibles en MSN para mostrar los nicks (ver screenshot). Ésta clase es experimental, lee bien el archivo README adjuntado antes de proceder. (Espero que los usuarios de windows veais bien los retornos de carro en los archivos del zip) Autor: phptorpes

Page 151: PHP 5 TOTAL

Idioma: Español Clicks: 5609 veces visitado. -------------------------------------------------------------------------------------------------------- Nombre: PHP Affiliate (descarga) (home) Descripción: Sistema de gestión de afiliación de usuarios. Autor: Robert Kerry Idioma: Español Clicks: 5385 veces visitado. -------------------------------------------------------------------------------------------------------- Nombre: Dadabik (descarga) Descripción: Dadabik es una aplicación PHP gratuita y multiplataforma, que te permite crear fácilmente una interfaz web para bases de datos MySQL con la posibilidad de buscar, insertar, actualizar o eliminar registros, con solo configurar unos poco parámetros. Está disponible en Inglés, Italiano, Alemán, Español y Francés. Autor: Idioma: Español Clicks: 4421 veces visitado. -------------------------------------------------------------------------------------------------------- Nombre: phpBB Login (descarga) Descripción: Sistema de usuarios en fase beta que utiliza la base de datos de los foros phpBB. Según el autor, tiene un fallo. Autor: phptorpes Idioma: Español Clicks: 3967 veces visitado.

Librería Ming Liga: http://foro.codigosweb.net/php/tutorial_de_la_libreria_ming_para_php-t202.0.html ¿Qué es Ming? Ming es una librería C de código abierto (LGPL) que escribe películas SWF ("Flash"). También es un juego de envoltorios para los lenguajes de script más populares: PHP, Python, y Ruby. Ming soporta casi todas las características de Flash 4, incluyendo: formas, gradientes, bitmaps (pngs y jpegs), transformaciones ("cambio de forma"), texto, botones, acciones, símbolos gráficos ("clips de película"), soporte audio mp3, y las transformaciones de color. La única característica que está haciendo falta es los eventos de sonido. Además, Ming no tiene absolutamente nada que ver con MNG, el descendiente animado de PNG. Los dos se usan para animación web, ambos son declarados "ming", pero sólo uno se usa para hacer las engorrosas películas flash.

Page 152: PHP 5 TOTAL

Dibujando El objeto fundamental en una película flash es una forma. O, en Ming, una SWFShape. En php, instancia un objeto SWFShape con la simple expresión:

Código: <?php New SWFShape(); ?> Aunque la librería Ming está escrita en código C plano, está diseñada para ser utilizada en un ambiente orientado a objetos; por consiguiente, en PHP tu puedes acceder a las funciones de dibujo de Ming mediante el objeto SWFShape. Para dibujar un cuadrado rojo de 400 unidades en cada lado con una anchura de línea de 20 unidades haz:

Código: <?php $s = new SWFShape (); $s->setLine(20, 0xff, 0, 0); $s->drawLineTo(400, 0); $s->drawLineTo(400, 400); $s->drawLineTo(0, 400); $s->drawLineTo(0, 0); ?> Primero, una nota acerca de las unidades: la especificación flash indica una escala de veinte unidades por pixel, así, el cuadrado generado mediante el código anterior tendría 20 pixeles de lado y una línea de un pixel. Sin embargo, esta escala no es forzada en ninguna parte; la escala depende únicamente del tamaño que tu especifiques cuando insertes la película en tu código html y del tamaño del marco que establezcas dentro de la película (lo puedes cambiar después). Nosotros podríamos haber dibujado el cuadrado también de 20 unidades con una línea de 1 unidad. De cualquier modo, nosotros conseguimos el mismo cuadrado si escalamos la película junto con esta. Ahora, probablemente notaste que el método "drawLineto" únicamente recibe dos argumentos considerando que una línea normal tiene cuatro parámetros, estos son una coordenada "x" y una coordenada "y" para ambos puntos finales. Y probablemente concluiste que esto significa que el dibujo en Ming es basado en pluma; es decir, el objeto forma guarda una referencia de la ubicación de la pluma imaginaria en la superficie del dibujo, y los comandos de dibujo referencian y afectan implícitamente la ubicación de la pluma. Esto debió ser suficiente para que aprendieras que drawLineTo tiene una función drawLine relacionada que usa posicionamiento relativo en lugar de coordenadas absolutas. En otras palabras, las funciones de dibujo anteriores podrían reemplazarse por:

Código: <?php $s->drawLine(400, 0); $s->drawLine(0, 400); $s->drawLine(-400, 0); $s->drawLine(0, -400); ?> y obtendríamos el mismo cuadrado rojo.

Page 153: PHP 5 TOTAL

El método setLine recibe cuatro (o cinco) los argumentos: el ancho de la línea, y el rojo, verde, y azul (y opcionalmente la transparencia), componentes del color de la línea. Cuando fijas el estilo de línea, este se aplica a todos los comandos de dibujo subsecuentes hasta que cambie de nuevo el estilo de línea con setLine. Para no utilizar estilo de línea (que, a propósito, es el valor por defecto para las formas), simplemente fija el ancho en cero. Finalmente, estos son dos de los comandos de dibujo más útiles:

Código: <?php $s->movePenTo(x,y); ?> Mueve la pluma a las coordenadas (x,y) sin dibujar línea (y movePen es su primo más cercano), mientras que:

Código: <?php $s->drawCurveTo(cx, cy, el hacha, el ay); ?> Dibuja una curva cuadrática bezier simple desde la ubicación actual de la pluma hasta el punto (ax,ay) usando el punto (cx,cy) como un punto de control. Como esperamos, drawCurve hace lo mismo, excepto que usa coordenadas relativas a la posición actual de la pluma. Estilos De Relleno Esto puede llegar a ser una cosa muy confusa acerca de Ming, de manera que haré algunas aclaraciones antes. El formato swf está diseñado para ser compacto y fácil de utilizar, esto significa que las optimizaciones en los atributos de formas son hechas en el acto, no por el reproductor. Y que significa eso, significa que las formas se dibujan de manera tal que nuestros cerebros inferiores humanos no lo perciben xDD. Específicamente, cuando estás definiendo una forma debes decirle al reproductor qué porción del espacio entre las líneas debe quedar rellena. La razón para esto (y me siento libre de saltar este párrafo, y no estará en el ejemplo) es que el reproductor flash dibuja la forma mientras verifica las líneas, y como este recorre cada borde en su definición de forma, revisa los registros de relleno del lado izquierdo y del lado derecho para ver que estilo de relleno se está aplicando sobre la línea. Si el borde es más denso al norte que al sur, el explorador de línea se esta moviendo al lado derecho del borde mientras cruza sobre la línea desde la derecha hacia la izquierda, así empieza rellenando con el estilo de relleno del borde del lado derecho. Si el borde fuera más denso al sur que al norte, usaría el estilo relleno del lado izquierdo. Fija el relleno del lado izquierdo y del lado derecho mediante los métodos setRightFill y setLeftFill. Éstos simplemente trabajan como setLine, se aplican a todos los bordes subsecuentes hasta que cambie el estilo de relleno de nuevo. setRightFill y setLeftFill reciben un argumento, un objeto SWFFill. SWFFill SWFFill abarca rellenos sólidos, gradientes, y mapas de bits. En lugar de instanciar un SWFFill directamente, solicitas un SWFShape para que se cree uno para utilizar el

Page 154: PHP 5 TOTAL

método addFill de SWFShape. La lógica detrás de esto es que el relleno sólo tiene significado dentro del contexto de la forma, y veremos por qué brevemente. addFill viene en una variedad de formatos, uno para cada uno de los tipos de relleno que puede crear: colores sólidos, mapas de bits, y gradientes.

Código: <?php $f = $s->addFill(r, g, b [,a]); ?> Crea un relleno de color sólido con los componentes especificados rojo, verde, y azul (y opcionalmente transparencia). Dibujemos un cuadrado rojo relleno:

Código: <?php $s = new SWFShape (); $f = $s->addFill(r, g, b [,a]); $s->setRightFill($f); $s->movePenTo(-200, -200); $s->drawLine(400, 0); $s->drawLine(0, 400); $s->drawLine(-400, 0); $s->drawLine(0, -400); ?> Nosotros usamos setRightFill aquí porque dibujamos el contorno del cuadrado en sentido de las manecillas del reloj, así, el interior del cuadrado se rellena desde el borde del lado derecho. Si hubiéramos dibujado el cuadrado un sentido contrario a las agujas del reloj, habríamos usado el método setLeftFill. SWFBitmap Para agregar un relleno de mapa de bits a una forma, usamos:

Código: <?php $f = $s->addFill(bitmap [, flags]); ?> Donde el mapa de bitas es un objeto SWFBitmap, creado con,:

Código: <?php $b = new SWFBitmap(filename [, maskname]); ?> Donde filename es el nombre de un jpeg o un archivo dbl. Un archivo "dbl" es un fichero png convertido mediante la utilidad "png2dbl" el cual Ming puede procesar más fácilmente. (Estas conversiones son un "rasgo" de ming que usted encontrará de vez en cuando. La única razón por la que le pedimos que pase por estos pasos extra es para no tener que utilizar varias bibliotecas de apoyo como libpng para usar ming. Algún día autoconf ordenará este lío y será capaz de leer pngs, gifs y ttfs con una simple llamada a una función.) El programa png2dbl es incluido en el paquete fuente de Ming. También sea consciente de que Ming actualmente puede procesar básicamente archivos comprimidos jpeg. No trabaja la lectura básica, optimizada y progresiva de jpegs.

Page 155: PHP 5 TOTAL

El argumento opcional mascara especifica un archivo "msk" que agrega un canal de transparencia a un mapa de bits jpeg. El archivo msk se crea con "gif2mask", también incluido en el paquete fuente Ming. El archivo gif de entrada debe ser del mismo tamaño del jpeg. El mapa de bits resultante es opaco donde la mascara de imagen es blanca, semi-transparente donde es gris, y totalmente transparente donde es negra. Es decir, el valor de los pixeles del archivo de máscara se usa como el nivel de transparencia para los pixeles de la imagen jpeg. El argumento flags puede ser SWFFILL_CLIPPED_BITMAP o SWFFILL_TILED_BITMAP, e indica si los mapas de bits deben seguir una secuencia (qué es el valor por defecto, en lugar del argumento flags) o deben superponerse, respectivamente. SWFBitmap también tiene métodos para obtener las dimensiones de su imagen:

Código: <?php $b->getWidth (); $b->getHeight (); ?> Qué le permite dibujar un rectángulo del mismo tamaño de tu mapa de bits, que de hecho es bastante útil. SWFGradient Los gradientes, como ya bien sabes, son las transiciones uniformes entre colores. En Flash, los gradientes pueden ser lineales o radiales, pueden contener hasta ocho colores, y pueden tener transparencia. Para construir una relleno de gradiente, primero cree un objeto SWFGradient:

Código: <?php $g = new SWFGradient (); ?> Entonces fija los valores iniciales mediante:

Código: <?php $g->addEntry(ratio, r, g, b [,a]); ?> Donde ratio es un número entre 0 y 1, y r, g, y b (y opcionalmente a) especifican los componentes rojo, verde, y azul (y transparencia) de la ubicación especifica del gradiente. Debes (tienes que hacerlo) agregarlos en orden de incremento de ratio. Por ejemplo, así es cómo creas un simple gradiente negro a blanco:

Código: <?php $g = new SWFGradient (); $g->addEntry(0, 0, 0, 0);

Page 156: PHP 5 TOTAL

$g->addEntry(1.0, 0xff, 0xff, 0xff); ?> Finalmente, tu agrega el gradiente a su forma con:

Código: <?php $f = $s->addFill(gradient [, flags]); ?> Donde gradient es su recién creado SWFGradient y las banderas son SWFFILL_RADIAL_GRADIENT para un (sorpresa!) gradiente radial, o SWFFILL_LINEAR_GRADIENT para el viejo y aburrido gradiente lineal. Si no se proporcionan banderas, el gradiente por defecto es lineal. Transformando su relleno Suponiendo que para ti el nuevo gradiente y relleno con mapas de bits no son muy divertidos en su estado por defecto, nosotros amablemente hemos proporcionado los siguientes métodos:

Código: <?php $f->moveTo(x,y); ?> Mueve el relleno a las coordenadas (el x,y):

Código: <?php $f->rotateTo(deg); ?> Gira el relleno deg grados, y:

Código: <?php $f->scaleTo(xscale [, yscale]); ?> Fija la escala de relleno en xscale en dirección x y yscale en dirección y. Si sólo se proporciona un argumento, ambas dimensiones son escaladas por xscale. Por último:

Código: <?php $f->skewXTo(s); $f->skewYTo(s); ?> Sesga el relleno por s en el eje x o en el eje y. Una s de 0 no es sesgada, una s de 1.0 es sesgada a un ángulo de 45 grados. Animación

Page 157: PHP 5 TOTAL

Ahora que hemos definido una forma, seguro nos gustaría poder verla. Para hacer esto, necesitamos un lienzo en el cual dibujar. Ese lienzo es el venerado SWFMovie.

Código: <?php $m = new SWFMovie (); ?> Crea un nuevo objeto SWFMovie, base para la animación. Nosotros podemos usar

Código: <?php $m->setBackground(r, g, b); ?> Para fijar el color del fondo:

Código: <?php $m->setRate(rate); ?> Para fijar el frame rate (en frames por segundo), y:

Código: <?php $m->setDimension(width, height); ?> Para fijar el tamaño de la película. Acuerdate lo que dijimos acerca del escalamiento: el tamaño de la presentación establecido en su html determina el tamaño real. Las dimensiones de la película fijadas aquí determinan la escala en la que sus formas serán dibujadas. Si usted fija el tamaño de su película en 3200x2400 y lo empotra en una página html de 320x240, sus formas serán 1/10 del tamaño que usted especificó en sus comandos de dibujo. Tu forma no se dibujará en la película hasta que usted cree una instancia de ella llamando:

Código: <?php $i = $m->add($s); ?> Este método crea una instancia de la forma en la película y retorna una referencia con la que puede alterar la apariencia de la instancia. Puedes, de hecho, agregar la misma forma a su película tantas veces como quieras (siendo razonable, claro) y usar los apuntadores retornados para referenciar cada uno individualmente. Usar Ming para hacer películas flash es análogo a usar una cámara de movimiento: debes poner las formas en su lienzo, colóquelos como usted guste, pulse entonces el obturador para grabar el arreglo y avance al siguiente frame. Coloca:

Código:

Page 158: PHP 5 TOTAL

<?php $m->nextFrame (); ?> El paso "arreglo" es realizado llamando métodos proporcionados por el apuntador a la instancia (que se generó con el método add de SWFMovie, recuerdas?). Estos métodos son idénticos a los métodos de transformación que vimos en SWFFill, excepto que cada uno tiene una versión relativa que actúa en relación con la posición actual, escala, rotación, e inclinación. Por ejemplo:

Código: <?php $i->moveTo(x,y); ?> Mueve el objeto a las coordenadas (el x,y), mientras:

Código: <?php $i->move(x,y); ?> Desplaza el objeto con el vector (el x,y). El resto de los métodos son:

Código: <?php $i->rotateTo(deg); $i->rotate(deg); $i->scaleTo(xscale [, yscale]); $i->scale(xscale [, yscale]); $i->skewXTo(s); $i->skewX(s); $i->skewYTo(s); $i->skewY(s); ?> Confio en que ya leiste la sección de transformación de rellenos y puedes deducir lo que hacen estos métodos ok?. Tu también puedes quitar un objeto de la lista de despliegue si estás cansado de su fisonomía:

Código: <?php $m->remove($i); ?> Transformar Colores Otra cosa divertida que podemos hacer es alterar el color del objeto xDDD:

Código: <?php $i->addColor(r, g, b [,a]);

Page 159: PHP 5 TOTAL

$i->multColor(r, g, b [,a]); ?> El primer método agrega un valor constante a cada uno de los canales del objeto de despliegue: rojo, verde, y azul (y opcionalmente transparencia). El segundo multiplica los canales por los valores de escala dados. Nota que estos valores pueden ser negativos; para invertir el canal azul de un objeto desplegado, tu utilizarías:

Código: <?php $i->addColor(0, 0, 0xff); $i->multColor(1.0, 1.0, -1.0); ?> Nota también que estos métodos no son conmutativos, así:

Código: <?php $i->addColor(0xff, 0, 0); $i->addColor(0, 0xff, 0); ?> Fija el color agregado al verde, no al amarillo xDDD. Finalmente Cuando tengas todo listo, llama a Ming para enviar la película al navegador

Código: <?php header('Content-type: application/x-shockwave-flash '); $m->output (); ?> El comando header hace que tu servidor web le diga al navegador del cliente que esto es, de verdad, una película flash. Para un ejemplo rápido, hagamos que el cuadrado rojo que creamos previamente (inmóvil en $s para ahorrarle a mis dedos un poco de uso) el giro:

Código: $m = new SWFMovie (); $m->setDimension(800, 600); $i = $m->add($s); $i->moveTo(400, 300); for($j=0; $jnextFrame ();<5; ++$j) { $m->nextFrame();

Page 160: PHP 5 TOTAL

$i->rotate(15); } $m->nextFrame (); header('Content-type: application/x-shockwave-flash'); $m->output (); Nosotros estamos siendo terriblemente diestros aquí al permitir que el ciclo de animación vuelva al principio después de rodar el pobre cuadrado sólo 75 grados ya que el primer frame es idéntico a una rotación de 90 grados. Verdaderamente muy inteligentes nosotros xDDD. El texto Primero, carga una fuente:

Código: <?php $f = new SWFFont(filename); ?> Donde filename es un archivo fdb. (Sí, otro formato de archivo ad hoc - crea archivos fdb desde las plantillas de archivo flash swt con la utilidad makefdb de Ming.) El objeto SWFFont le proporciona alguna información métrica de la fuente:

Código: <?php $f->getAscent (); $f->getDescent (); $f->getLeading (); $f->getWidth(string); ?> Cada método produce la métrica solicitada como un número, escalado a una altura de fuente de 1024. A menos que esté desplegando tu texto a una altura de 1024, necesitarás multiplicar el número retornado por alto/1024. Puedes ver el manejo de texto mediante:

Código: <?php $t = new SWFText (); $t->setFont($f); $t->setHeight(240); $t->setColor(0xff, 0, 0); $t->moveTo(10,250); ¡$t->addString ("no, por favor! no mis dedos de los pies"!); ?> Agrega un SWFText a tu película con el método add de SWFMovie animarlo con el apuntador retornado, así como con las formas. SWFButton

Page 161: PHP 5 TOTAL

Los botones pueden tener varios formas asociadas con ellos, el appearace general del botón; un encima de la forma, desplegó cuando el ratón mueve encima del botón; un baje la forma, desplegó cuando los clics del usuario abajo en el botón; y una región del golpe que nunca se muestra pero define el área del clickable del botón. Crea un botón con:

Código: <?php $b = nuevo SWFButton (); ?> Y agrega una forma al botón declara con:

Código: <?php $B->ADDSHAPE($S, SWFBUTTON_HIT | SWFBUTTON_DOWN | SWFBUTTON_OVER | SWFBUTTON_UP); ?> Nota que esto agrega la misma forma a todos los estados que los medios que el área del clickable está igual que el área arrastrado de la forma y que el botón parece el mismo cuando tienes el mouse encima de él, no muy divertido en absoluto xDDD. Los botones en nuestro ejemplo no serán los mono-cubos de diversión, o, pero nosotros haremos una región del golpe separada:

Código: <?php //haz una región del golpe para el botón $hit = nuevo SWFShape (); $hit->setRightFill($hit->addFill(0,0,0)); $hit->movePenTo(-600, -30); $hit->drawLine(1200, 0); $hit->drawLine(0, 60); $hit->drawLine(-1200, 0); $hit->drawLine(0, -60); ?> Sin esto, la región del golpe sería sólo el interior del texto del titular, qué simplemente sería raro. Ahora apretemos fuera esos botones:

Código: <?php for($i=0; $isetFont($f);<$count; ++$i) { $t = new SWFText(); $t-> $t->setHeight(40); $t->setColor(0,0,0); $t->moveTo(-$f->getWidth($title[$i]) * (40/1024)/2, 20); $t->addString($title[$i]); $b[$i] = nuevo SWFButton (); $B[$I]->ADDSHAPE($HIT, SWFBUTTON_HIT); $B[$I]-

Page 162: PHP 5 TOTAL

>ADDSHAPE($T, SWFBUTTON_OVER | SWFBUTTON_UP | SWFBUTTON_DOWN); $b[$i]->addAction(new SWFAction ("el getURL (' $url[$i] ', ' el popup')";),SWFBUTTON_MOUSEUP); } ?> Así ahora que nosotros tenemos nuestros botones construidos, animémoslos. Estos dos archivos contienen funciones que realizan las varias transiciones entre los titulares:

Código: <?php include (' infuncs.php'); include (' outfuncs.php'); ?> Por ejemplo, la función siguiente de infuncs.php resbala el botón de la izquierda mientras la transparencia completa a totalmente opaco:

Código: <?php slideleftin($movie de la función, $shape) { $i = $movie->add($shape); for($j=0; $jmoveTo(600-($j-20)*($j-20), 30);<=20; ++$j) { $i-> $i->multColor(1.0, 1.0, 1.0, $j/20); $movie->nextFrame (); } return $i; } ?> Todas las funciones en infuncs.php toman una película y una forma como los argumentos, y devuelve un caso de la forma en la película. Las funciones en outfuncs.php toman la película, la forma, y el caso creadas se aseguran que la lona está vacía cuando ellos vuelven. Las funciones se listan en las series $infuncs y $outfuncs, mientras permitiéndonos formar, sin referente al php principal codifique en absoluto. Aquí es el pedazo final de código que realiza la animación:

Código: <?php for($n=0; $nnextFrame ();<4; ++$n) { for($i=0; $i<$count; ++$i)

Page 163: PHP 5 TOTAL

{ $infunc = $infuncs[rand(0, count($infuncs)-1)]; $instance = $infunc($m, $b[$i]); for($j=0; $j<60; ++$j) $m-> $outfunc = $outfuncs[rand(0, count($outfuncs)-1)]; $outfunc($m, $b[$i], $instance); } } header ("Content-type: application/x-shockwave-flash"); $m->output (); ?>

Parte de este tutorial lo he tomado de un txt que encontre entre mis cosas xDD ni url ni autor tenia, lo he corregido y agregado algunas funciones. Cabe aclarar que esta librería está en desarrollo, lo cuál nos sugiere que dentro algún tiempo (muy cercano) cambiará, quizá hasta el 100%. Liga: http://ming.sourceforge.net/

Ming es una biblioteca de open source para la creación de ficheros SWF (Adobe Flash ), realizada en lenguaje Lenguaje de programación C. A menudo se utiliza como un módulo PHP, permitiendo la generación de animaciones Flash en el servidor web utilizando la base de datos del mismo. Además de en PHP, la biblioteca se puede utilizar en los siguientes lenguajes:

• C++ • Perl • Python • Ruby

Ming soporta casi todas las características de Flash 4, incluyendo: formas, gradientes, bitmaps (pngs y jpegs), transformaciones ("cambio de forma"), texto, botones, acciones, símbolos gráficos ("clips de película"), soporte audio mp3, y las transformaciones de color. La única característica que está haciendo falta es los eventos de sonido.

Además, Ming no tiene absolutamente nada que ver con MNG, el descendiente animado de PNG. Los dos se usan para animación web, ambos son declarados "ming", pero sólo uno se usa para hacer las engorrosas películas flash.

Page 164: PHP 5 TOTAL

Dibujando El objeto fundamental en una película flash es una forma. O, en Ming, una SWFShape. En php, instancia un objeto SWFShape con la simple expresión:

<?php New SWFShape(); ?>

Aunque la biblioteca Ming está escrita en código C plano, está diseñada para ser utilizada en un ambiente orientado a objetos; por consiguiente, en PHP tu puedes acceder a las funciones de dibujo de Ming mediante el objeto SWFShape. Para dibujar un cuadrado rojo de 400 unidades en cada lado con una anchura de línea de 20 unidades haz:

<?php $s = new SWFShape (); $s->setLine(20, 0xff, 0, 0); $s->drawLineTo(400, 0); $s->drawLineTo(400, 400); $s->drawLineTo(0, 400); $s->drawLineTo(0, 0); ?>

Primero, una nota acerca de las unidades: la especificación flash indica una escala de veinte unidades por pixel, así, el cuadrado generado mediante el código anterior tendría 20 pixeles de lado y una línea de un pixel. Sin embargo, esta escala no es forzada en ninguna parte; la escala depende únicamente del tamaño que tu especifiques cuando insertes la película en tu código html y del tamaño del marco que establezcas dentro de la película (lo puedes cambiar después). Nosotros podríamos haber dibujado el cuadrado también de 20 unidades con una línea de 1 unidad. De cualquier modo, nosotros conseguimos el mismo cuadrado si escalamos la película junto con esta.

Ahora, probablemente notaste que el método "drawLineto" únicamente recibe dos argumentos considerando que una línea normal tiene cuatro parámetros, estos son una coordenada "x" y una coordenada "y" para ambos puntos finales. Y probablemente concluiste que esto significa que el dibujo en Ming es basado en pluma; es decir, el objeto forma guarda una referencia de la ubicación de la pluma imaginaria en la superficie del dibujo, y los comandos de dibujo referencian y afectan implícitamente la ubicación de la pluma. Esto debió ser suficiente para que aprendieras que drawLineTo tiene una función drawLine relacionada que usa posicionamiento relativo en lugar de coordenadas absolutas. En otras palabras, las funciones de dibujo anteriores podrían reemplazarse por:

<?php $s->drawLine(400, 0); $s->drawLine(0, 400); $s->drawLine(-400, 0); $s->drawLine(0, -400); ?>

y obtendríamos el mismo cuadrado rojo.

El método setLine recibe cuatro (o cinco) los argumentos: el ancho de la línea, y el rojo, verde, y azul (y opcionalmente la transparencia), componentes del color de la

Page 165: PHP 5 TOTAL

línea. Cuando fijas el estilo de línea, este se aplica a todos los comandos de dibujo subsecuentes hasta que cambie de nuevo el estilo de línea con setLine. Para no utilizar estilo de línea (que, a propósito, es el valor por defecto para las formas), simplemente fija el ancho en cero.

Finalmente, estos son dos de los comandos de dibujo más útiles:

<?php $s->movePenTo(x,y); ?>

Mueve la pluma a las coordenadas (x,y) sin dibujar línea (y movePen es su primo más cercano), mientras que:

<?php $s->drawCurveTo(cx, cy, el hacha, el ay); ?>

Dibuja una curva cuadrática bezier simple desde la ubicación actual de la pluma hasta el punto (ax,ay) usando el punto (cx,cy) como un punto de control. Como esperamos, drawCurve hace lo mismo, excepto que usa coordenadas relativas a la posición actual de la pluma.

Estilos De Relleno

Esto puede llegar a ser una cosa muy confusa acerca de Ming, de manera que haré algunas aclaraciones antes. El formato swf está diseñado para ser compacto y fácil de utilizar, esto significa que las optimizaciones en los atributos de formas son hechas en el acto, no por el reproductor. Y que significa eso, significa que las formas se dibujan de manera tal que nuestros cerebros inferiores humanos no lo perciben xDD.

Específicamente, cuando estás definiendo una forma debes decirle al reproductor qué porción del espacio entre las líneas debe quedar rellena. La razón para esto (y me siento libre de saltar este párrafo, y no estará en el ejemplo) es que el reproductor flash dibuja la forma mientras verifica las líneas, y como este recorre cada borde en su definición de forma, revisa los registros de relleno del lado izquierdo y del lado derecho para ver que estilo de relleno se está aplicando sobre la línea. Si el borde es más denso al norte que al sur, el explorador de línea se esta moviendo al lado derecho del borde mientras cruza sobre la línea desde la derecha hacia la izquierda, así empieza rellenando con el estilo de relleno del borde del lado derecho. Si el borde fuera más denso al sur que al norte, usaría el estilo relleno del lado izquierdo.

Fija el relleno del lado izquierdo y del lado derecho mediante los métodos setRightFill y setLeftFill. Éstos simplemente trabajan como setLine, se aplican a todos los bordes subsecuentes hasta que cambie el estilo de relleno de nuevo. setRightFill y setLeftFill reciben un argumento, un objeto SWFFill.

SWFFill SWFFill abarca rellenos sólidos, gradientes, y mapas de bits. En lugar de instanciar un SWFFill directamente, solicitas un SWFShape para que se cree uno para utilizar el método addFill de SWFShape. La lógica detrás de esto es que el relleno sólo tiene significado dentro del contexto de la forma, y veremos por qué brevemente. addFill viene en una variedad de formatos, uno para cada uno de los tipos de relleno que puede crear: colores sólidos, mapas de bits, y gradientes.

Page 166: PHP 5 TOTAL

<?php $f = $s->addFill(r, g, b [,a]); ?>

Crea un relleno de color sólido con los componentes especificados rojo, verde, y azul (y opcionalmente transparencia). Dibujemos un cuadrado rojo relleno:

<?php $s = new SWFShape (); $f = $s->addFill(r, g, b [,a]); $s->setRightFill($f); $s->movePenTo(-200, -200); $s->drawLine(400, 0); $s->drawLine(0, 400); $s->drawLine(-400, 0); $s->drawLine(0, -400); ?>

Nosotros usamos setRightFill aquí porque dibujamos el contorno del cuadrado en sentido de las manecillas del reloj, así, el interior del cuadrado se rellena desde el borde del lado derecho. Si hubiéramos dibujado el cuadrado un sentido contrario a las agujas del reloj, habríamos usado el método setLeftFill.

SWFBitmap Para agregar un relleno de mapa de bits a una forma, usamos:

<?php $f = $s->addFill(bitmap [, flags]); ?>

Donde el mapa de bitas es un objeto SWFBitmap, creado con,:

<?php $b = new SWFBitmap(filename [, maskname]); ?>

Donde filename es el nombre de un jpeg o un archivo dbl. Un archivo "dbl" es un fichero png convertido mediante la utilidad "png2dbl" el cual Ming puede procesar más fácilmente. (Estas conversiones son un "rasgo" de ming que usted encontrará de vez en cuando. La única razón por la que le pedimos que pase por estos pasos extra es para no tener que utilizar varias bibliotecas de apoyo como libpng para usar ming. Algún día autoconf ordenará este lío y será capaz de leer pngs, gifs y ttfs con una simple llamada a una función.) El programa png2dbl es incluido en el paquete fuente de Ming. También sea consciente de que Ming actualmente puede procesar básicamente archivos comprimidos jpeg. No trabaja la lectura básica, optimizada y progresiva de jpegs.

El argumento opcional máscara especifica un archivo "msk" que agrega un canal de transparencia a un mapa de bits jpeg. El archivo msk se crea con "gif2mask", también incluido en el paquete fuente Ming. El archivo gif de entrada debe ser del mismo tamaño del jpeg. El mapa de bits resultante es opaco donde la máscara de imagen es blanca, semi-transparente donde es gris, y totalmente transparente donde es negra. Es decir, el valor de los pixeles del archivo de máscara se usa como el nivel de transparencia para los pixeles de la imagen jpeg.

Page 167: PHP 5 TOTAL

El argumento flags puede ser SWFFILL_CLIPPED_BITMAP o SWFFILL_TILED_BITMAP, e indica si los mapas de bits deben seguir una secuencia (qué es el valor por defecto, en lugar del argumento flags) o deben superponerse, respectivamente.

SWFBitmap también tiene métodos para obtener las dimensiones de su imagen:

<?php $b->getWidth (); $b->getHeight (); ?>

Qué le permite dibujar un rectángulo del mismo tamaño de tu mapa de bits, que de hecho es bastante útil.

SWFGradient

Los gradientes, como ya bien sabes, son las transiciones uniformes entre colores. En Flash, los gradientes pueden ser lineales o radiales, pueden contener hasta ocho colores, y pueden tener transparencia. Para construir una relleno de gradiente, primero cree un objeto SWFGradient:

<?php $g = new SWFGradient (); ?>

Entonces fija los valores iniciales mediante:

<?php $g->addEntry(ratio, r, g, b [,a]); ?>

Donde ratio es un número entre 0 y 1, y r, g, y b (y opcionalmente a) especifican los componentes rojo, verde, y azul (y transparencia) de la ubicación especifica del gradiente. Debes (tienes que hacerlo) agregarlos en orden de incremento de ratio.

Por ejemplo, así es cómo creas un simple gradiente negro a blanco:

<?php $g = new SWFGradient (); $g->addEntry(0, 0, 0, 0); $g->addEntry(1.0, 0xff, 0xff, 0xff); ?>

Finalmente, tu agrega el gradiente a su forma con:

<?php $f = $s->addFill(gradient [, flags]); ?>

Page 168: PHP 5 TOTAL

Donde gradient es su recién creado SWFGradient y las banderas son SWFFILL_RADIAL_GRADIENT para un (sorpresa!) gradiente radial, o SWFFILL_LINEAR_GRADIENT para el viejo y aburrido gradiente lineal. Si no se proporcionan banderas, el gradiente por defecto es lineal.

Transformando su relleno

Suponiendo que para ti el nuevo gradiente y relleno con mapas de bits no son muy divertidos en su estado por defecto, nosotros amablemente hemos proporcionado los siguientes métodos:

<?php $f->moveTo(x,y); ?>

Mueve el relleno a las coordenadas (el x,y):

<?php $f->rotateTo(deg); ?>

Gira el relleno deg grados, y:

<?php $f->scaleTo(xscale [, yscale]); ?>

Fija la escala de relleno en xscale en dirección x y yscale en dirección y. Si sólo se proporciona un argumento, ambas dimensiones son escaladas por xscale. Por último:

<?php $f->skewXTo(s); $f->skewYTo(s); ?>

Sesga el relleno por s en el eje x o en el eje y. Una s de 0 no es sesgada, una s de 1.0 es sesgada a un ángulo de 45 grados.

Animación

Ahora que hemos definido una forma, seguro nos gustaría poder verla. Para hacer esto, necesitamos un lienzo en el cual dibujar. Ese lienzo es el venerado SWFMovie.

<?php $m = new SWFMovie (); ?>

Crea un nuevo objeto SWFMovie, base para la animación. Nosotros podemos usar

<?php $m->setBackground(r, g, b); ?>

Page 169: PHP 5 TOTAL

Para fijar el color del fondo:

<?php $m->setRate(rate); ?>

Para fijar el frame rate (en frames por segundo), y:

<?php $m->setDimension(width, height); ?>

Para fijar el tamaño de la película. Acuerdate lo que dijimos acerca del escalamiento: el tamaño de la presentación establecido en su html determina el tamaño real. Las dimensiones de la película fijadas aquí determinan la escala en la que sus formas serán dibujadas. Si usted fija el tamaño de su película en 3200x2400 y lo empotra en una página html de 320x240, sus formas serán 1/10 del tamaño que usted especificó en sus comandos de dibujo.

Tu forma no se dibujará en la película hasta que usted cree una instancia de ella llamando:

<?php $i = $m->add($s); ?>

Este método crea una instancia de la forma en la película y retorna una referencia con la que puede alterar la apariencia de la instancia. Puedes, de hecho, agregar la misma forma a su película tantas veces como quieras (siendo razonable, claro) y usar los apuntadores retornados para referenciar cada uno individualmente.

Usar Ming para hacer películas flash es análogo a usar una cámara de movimiento: debes poner las formas en su lienzo, colóquelos como usted guste, pulse entonces el obturador para grabar el arreglo y avance al siguiente frame. Coloca:

<?php $m->nextFrame (); ?>

El paso "arreglo" es realizado llamando métodos proporcionados por el apuntador a la instancia (que se generó con el método add de SWFMovie, recuerdas?). Estos métodos son idénticos a los métodos de transformación que vimos en SWFFill, excepto que cada uno tiene una versión relativa que actúa en relación con la posición actual, escala, rotación, e inclinación. Por ejemplo:

<?php $i->moveTo(x,y); ?>

Mueve el objeto a las coordenadas (el x,y), mientras:

<?php $i->move(x,y);

Page 170: PHP 5 TOTAL

?>

Desplaza el objeto con el vector (el x,y). El resto de los métodos son:

<?php $i->rotateTo(deg); $i->rotate(deg); $i->scaleTo(xscale [, yscale]); $i->scale(xscale [, yscale]); $i->skewXTo(s); $i->skewX(s); $i->skewYTo(s); $i->skewY(s); ?>

Confió en que ya leiste la sección de transformación de rellenos y puedes deducir lo que hacen estos métodos ok?.

Tu también puedes quitar un objeto de la lista de despliegue si estás cansado de su fisonomía:

<?php $m->remove($i); ?>

Transformar Colores

Otra cosa divertida que podemos hacer es alterar el color del objeto xDDD:

<?php $i->addColor(r, g, b [,a]); $i->multColor(r, g, b [,a]); ?>

El primer método agrega un valor constante a cada uno de los canales del objeto de despliegue: rojo, verde, y azul (y opcionalmente transparencia). El segundo multiplica los canales por los valores de escala dados.

Nota que estos valores pueden ser negativos; para invertir el canal azul de un objeto desplegado, tu utilizarías:

<?php $i->addColor(0, 0, 0xff); $i->multColor(1.0, 1.0, -1.0); ?>

Nota también que estos métodos no son conmutativos, así:

<?php $i->addColor(0xff, 0, 0); $i->addColor(0, 0xff, 0); ?>

Page 171: PHP 5 TOTAL

Fija el color agregado al verde, no al amarillo xDDD.

Finalmente

Cuando tengas todo listo, llama a Ming para enviar la película al navegador

<?php header('Content-type: application/x-shockwave-flash '); $m->output (); ?>

El comando header hace que tu servidor web le diga al navegador del cliente que esto es, de verdad, una película flash.

Para un ejemplo rápido, hagamos que el cuadrado rojo que creamos previamente (inmóvil en $s para ahorrarle a mis dedos un poco de uso) el giro:

$m = new SWFMovie (); $m->setDimension(800, 600); $i = $m->add($s); $i->moveTo(400, 300); for($j=0; $jnextFrame ();<5; ++$j) { $m->nextFrame(); $i->rotate(15); } $m->nextFrame (); header('Content-type: application/x-shockwave-flash'); $m->output ();

Nosotros estamos siendo terriblemente diestros aquí al permitir que el ciclo de animación vuelva al principio después de rodar el pobre cuadrado sólo 75 grados ya que el primer frame es idéntico a una rotación de 90 grados. Verdaderamente muy inteligentes nosotros.

El texto

Primero, carga una fuente:

<?php $f = new SWFFont(filename); ?>

Donde filename es un archivo fdb. (Sí, otro formato de archivo ad hoc - crea archivos fdb desde las plantillas de archivo flash swt con la utilidad makefdb de Ming.) El objeto SWFFont le proporciona alguna información métrica de la fuente:

<?php

Page 172: PHP 5 TOTAL

$f->getAscent (); $f->getDescent (); $f->getLeading (); $f->getWidth(string); ?>

Cada método produce la métrica solicitada como un número, escalado a una altura de fuente de 1024. A menos que esté desplegando tu texto a una altura de 1024, necesitarás multiplicar el número retornado por alto/1024.

Puedes ver el manejo de texto mediante:

<?php $t = new SWFText (); $t->setFont($f); $t->setHeight(240); $t->setColor(0xff, 0, 0); $t->moveTo(10,250); $t->addString ("no, por favor! no mis dedos de los pies"!); ?>

Agrega un SWFText a tu película con el método add de SWFMovie animarlo con el apuntador retornado, así como con las formas.

SWFButton

Los botones pueden tener varios formas asociadas con ellos, el appearace general del botón; un encima de la forma, desplegó cuando el ratón mueve encima del botón; un baje la forma, desplegó cuando los clics del usuario abajo en el botón; y una región del golpe que nunca se muestra pero define el área del clickable del botón.

Crea un botón con:

<?php $b = nuevo SWFButton (); ?>

Y agrega una forma al botón declara con:

<?php $B->ADDSHAPE($S, SWFBUTTON_HIT | SWFBUTTON_DOWN | SWFBUTTON_OVER | SWFBUTTON_UP); ?>

Nota que esto agrega la misma forma a todos los estados que los medios que el área del clickable está igual que el área arrastrado de la forma y que el botón parece el mismo cuando tienes el mouse encima de él, no muy divertido en absoluto xDDD. Los botones en nuestro ejemplo no serán los mono-cubos de diversión, o, pero nosotros haremos una región del golpe separada:

<?php //haz una región del golpe para el botón $hit = nuevo SWFShape (); $hit->setRightFill($hit->addFill(0,0,0));

Page 173: PHP 5 TOTAL

$hit->movePenTo(-600, -30); $hit->drawLine(1200, 0); $hit->drawLine(0, 60); $hit->drawLine(-1200, 0); $hit->drawLine(0, -60); ?>

Sin esto, la región del golpe sería sólo el interior del texto del titular, qué simplemente sería raro. Ahora apretemos fuera esos botones:

<?php for($i=0; $isetFont($f);<$count; ++$i) { $t = new SWFText(); $t-> $t->setHeight(40); $t->setColor(0,0,0); $t->moveTo(-$f->getWidth($title[$i]) * (40/1024)/2, 20); $t->addString($title[$i]); $b[$i] = nuevo SWFButton (); $B[$I]->ADDSHAPE($HIT, SWFBUTTON_HIT); $B[$I]->ADDSHAPE($T, SWFBUTTON_OVER | SWFBUTTON_UP | SWFBUTTON_DOWN); $b[$i]->addAction(new SWFAction ("el getURL (' $url[$i] ', ' el popup')";),SWFBUTTON_MOUSEUP); } ?>

Así ahora que nosotros tenemos nuestros botones construidos, animémoslos. Estos dos archivos contienen funciones que realizan las varias transiciones entre los titulares:

<?php include (' infuncs.php'); include (' outfuncs.php'); ?>

Por ejemplo, la función siguiente de infuncs.php resbala el botón de la izquierda mientras la transparencia completa a totalmente opaco:

<?php slideleftin($movie de la función, $shape) { $i = $movie->add($shape); for($j=0; $jmoveTo(600-($j-20)*($j-20), 30);<=20; ++$j) { $i-> $i->multColor(1.0, 1.0, 1.0, $j/20); $movie->nextFrame (); }

Page 174: PHP 5 TOTAL

return $i; } ?>

Todas las funciones en infuncs.php toman una película y una forma como los argumentos, y devuelve un caso de la forma en la película. Las funciones en outfuncs.php toman la película, la forma, y el caso creadas se aseguran que la lona está vacía cuando ellos vuelven.

Las funciones se listan en las series $infuncs y $outfuncs, mientras permitiéndonos formar, sin referente al php principal codifique en absoluto. Aquí es el pedazo final de código que realiza la animación:

<?php for($n=0; $nnextFrame ();<4; ++$n) { for($i=0; $i<$count; ++$i) { $infunc = $infuncs[rand(0, count($infuncs)-1)]; $instance = $infunc($m, $b[$i]); for($j=0; $j<60; ++$j) $m-> $outfunc = $outfuncs[rand(0, count($outfuncs)-1)]; $outfunc($m, $b[$i], $instance); } } header ("Content-type: application/x-shockwave-flash"); $m->output (); ?>

SWFTools

SWFTools

Desarrollador

Rainer Böhme y Matthias Kramm

Página oficial

Información general

Última versión

0.8.0 21 de Enero,

Page 175: PHP 5 TOTAL

estable 2007

Género Biblioteca

S.O.

Solaris, Linux, FreeBSD, OpenBSD, HP-UX, MacOS X y Windows 98/ME/2000/XP

Licencia GNU GPL

En español no

SWFTools son un grupo de herramientas de Código abierto para crear y manipular ficheros SWF. SWF es el formato utilizado por el software de animación Adobe Flash (anteriormente Macromedia Flash). SWFTools ha sido liberado bajo licencia GPL, y funciona en entornos Windows, Mac OS X, Linux y otros sistemas tipo Unix

La herramienta principal es swfc , que recoge la descripción de la animación Flash en un lenguaje sencillo y genera el fichero de salida SWF. Es posible incluir scripts ActionScript en el fichero generado. SWFTools también incluye la biblioteca RFXSWF, permitiendo a programas de terceros generar ficheros SWF.

SWFTools incluye algunas herramientas para convertir el contenido de formatos PDF, JPEG, GIF, WAV y AVI en SWF, y otras para extraer la información y el contenido de ficheros SWF.

Liga: http://www.libming.org/ Ejemplo 1: <?php header("Content-type:application/x-shockwave-flash"); ?> <html> <head> <!--PRUEBA DE PELICULA FLASH--> </head> <body> <?php if(!extension_loaded('ming')) { echo "La librería ming no se encuentra cargada.<br>"; dl('php_ming.dll') or die ("No se pudo cargar la libreria ming."); } else { echo "La libreria ming estaba cargada previamente"; } //pelicula:

Page 176: PHP 5 TOTAL

$pelicula = new SWFMovie(); $pelicula->setDimension(500,500); $pelicula->setRate(15); $pelicula->setBackground(0,0,255); //Se crea una linea: $linea1 = new SWFShape(); $linea1->setLine(50,34,180,100,255); $linea1->movePenTo(100,100); $linea1->drawLine(300,300); //Se añade la linea a la pelicula: $pelcula->add($linea1); //se envia la pelicula $pelicula->output(); </body> </html> ######## y la pagina 2 que visualizaria esa pagina ############ <html> <head> <!-- ESTA ES LA PELICULA prueba1.php EMBEBIDA EN OTRA PAGINA PARA CONTROLAR SU TAMAÑO--> </head> <body> <object classid ="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0,0" width="300" height="150"> <param name="movie" value="prueba1.php"> <embed src="prueba1.php" pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=shockwaveFlash" type="application/x.shockwave-flash" width="500" height="500"> </embed> </body> </html> Ejemplo 2: CODE <?php header("Content-type:application/x-shockwave-flash"); if(!extension_loaded('ming')) { echo "La librería ming no se encuentra cargada.<br>"; dl('php_ming.dll') or die ("No se pudo cargar la libreria ming."); } else { echo "La libreria ming estaba cargada previamente"; }

Page 177: PHP 5 TOTAL

//pelicula: $pelicula = new SWFMovie(); $pelicula->setDimension(500,500); $pelicula->setRate(15); $pelicula->setBackground(0,0,255); //Se crea una linea: $linea1 = new SWFShape(); $linea1->setLine(50,34,180,100,255); $linea1->movePenTo(100,100); $linea1->drawLine(300,300); //Se añade la linea a la pelicula: $pelcula->add($linea1); //se envia la pelicula $pelicula->output(); ?> Liga: http://www.php.net/manual/en/ref.ming.php

Ming Functions

Table of Contents

• ming_keypress — Returns the action flag for keyPress(char) • ming_setcubicthreshold — Set cubic threshold • ming_setscale — Set the global scaling factor. • ming_setswfcompression — Sets the SWF output compression • ming_useconstants — Use constant pool • ming_useswfversion — Sets the SWF version

ming_keypress SWFSPrite basic examples

Last updated: Fri, 25 Sep 2009

add a note User Contributed Notes Ming Functions catfarm at gmail dot com 06-Sep-2007 11:48 I tried to use the code suggested below by random at nowhere dot com to extract the width and height from an swf with no success, however the following worked for me in php 5. <?php $info = getimagesize('flashfile.swf'); $w = $info[0]; $h = $info[1]; ?>

Page 178: PHP 5 TOTAL

not sure how far back it works, or with what versions of flash, but it seems to work with flash 7 files just fine. random at nowhere dot com 01-Aug-2007 08:48 For those looking for just getting size of a .swf file : <? // bytes_to_signed_int(data,offset,length) function b2i($d,$o,$l) { $s=(ord($d[$o/8])>>(7-$o%8))&1; $r=0; for ($i=$o+1;$i<$o+$l;$i++) { $b=(ord($d[$i/8])>>(7-$i%8))&1; $r=($r<<1)+($s?!$b:$b); } if ($s) { $r++; $r=-$r; } return $r; } // flash9 or <9 but uncompressed $f="myfile.swf"; // get only 20 first bytes $d=file_get_contents($f,0,null,0,20); echo "Version of Flash : ".ord($d[3])."<br>"; $s=unpack("V",substr($d,4,4)); echo "FileSize : ".$s[1]." bytes<br>"; // here is the decompression, fix this for flash <9 if (substr($d,0,3)=="CWS") $d=substr($d,0,8).gzinflate(substr($d,8)); $nb=ord($d[8])>>3; // bytes needed $xmin=b2i($d,8*8+5,$nb); $xmax=b2i($d,8*8+5+$nb,$nb); $ymin=b2i($d,8*8+5+2*$nb,$nb); $ymax=b2i($d,8*8+5+3*$nb,$nb); // width=xmax-xmin, height=ymax-ymin, twips->pixels = /20 echo "width=".(($xmax-$xmin)/20)."<br>"; echo "height=".(($ymax-$ymin)/20)."<br>"; ?> rolf at winmutt dot com 18-Mar-2007 09:51 Here is a little font browser I made to try and typeset match my designers font from the pack of 1300+ fdb I found on google: <? $m = new SWFMovie(); $m->setBackground(0xFF, 0xFF, 0xFF); $m->setDimension(320, 40); function drawGlyphString($string, $s, $f, $fill) { $s->setRightFill($fill); $s->movePenTo(0, $f->getAscent()); for ($i=0; $i<strlen($string); $i++) {

Page 179: PHP 5 TOTAL

$s->drawGlyph($f, substr($string,$i,1), $size); $s->movePen($f->getWidth(substr($string,$i,1)), 0); } } function drawFont($f) { $logo = new SWFShape(); $grey = $logo->addFill(0, 0, 0); drawGlyphString('yrt '.$_REQUEST['fdb'], $logo, $f, $grey); return $logo; } if ($_REQUEST['fdb']) { $f = new SWFFont($_REQUEST['fdb']); $i = $m->add(drawFont($f)); $i->scaleTo(0.5); header('Content-type: application/x-shockwave-flash'); $m->output(); } else { if (!$_REQUEST['o']) $_REQUEST['o']=0; if (!$_REQUEST['l']) $_REQUEST['l']=80; $o=$_REQUEST['o']; $l=$_REQUEST['l']; $d = dir("."); while (false !== ($entry = $d->read())) { if (stristr($entry, 'fdb') && !strstr($entry, '-I') && !strstr($entry, '-B')) { if ($_REQUEST['o']) { $_REQUEST['o']--; } elseif ($_REQUEST['l'] ) { $_REQUEST['l']--; echo '<iframe height="30px" src="fonts.php?fdb='.$entry.'&" title="'.$entry.'"></iframe>'; } else { echo '<img src="/creativesyndrome.com/logo.png"><br><a href="?l='.$l.'&o='.($o+$l).'">next ></a>';exit; } } } $d->close(); } ?> Scottie_Too_Hottie7 at lycos dot com 11-Nov-2005 08:59 For People Like My Mate, Matt, Who Dosent Know Much PHP, I Am Creating A Simpeler PHP Libary. It Runs Under Ming 0.3 It - Along With Two Examples - Can Be Currently Downloaded From The Link Below PLEASE NOTE : At The Time Of This Post, The Libary Is Currently Is Unfinished And Currently Looks Like A Mess Of Files - But It Works!

Page 180: PHP 5 TOTAL

http://members.lycos.co.uk/cgming/simpleswf.html dank at nospam dot org 08-Apr-2005 09:23 /* If you are looking to do some simple interaction between Flash MX and php, here is an extremely basic model to get you started. The Flash file has a simple Input Text field which allows the user to enter text (ie a textbox). The flash then passes the textfield to the php script for processing/database interaction etc. The idea is a form made in Flash, but processing by php/mysql (or whatever). If you want to handle all GUI in Flash, see the links below for more info. All "Actions" or "Action Script" located in frame 1, layer 1. In Flash, create an Input Box with an instance name of myTextBox. Create a "submit button" using Insert>New Symbol>Movie Clip. Dont use the PushButton Component or you will have to add scripting to that component (ie outside Frame1 Layer1). Keeping all the Action Script in Frame1 makes for a simpler example. Next, click on the background in Frame1 (the "Properties" dialog should show the Background color). Hit F9 to show actions for Frame1. Enter the below code: */ //Create object to hold vars dataSender = new LoadVars(); //Define submit button behavior submit_button.onRelease = function() { //assign properties to LoadVars object created previously //myTextBox is instance name for input text box //foo will be the var passed to php (ie $foo) //Set foo to the text entered by user dataSender.foo = myTextBox.text; //Call flash's send function to send foo to the php script //Using "_self" will pass control to the php script dataSender.send("testFlash.php", "_self", "POST"); } /* Put the swf file in an html file and upload it to the server Create the below php file and save it as testFlash.php: <?php echo "foo= $foo"; ?> Push testFlash.php to the same directory on the server and hit your html file with your browser. Parts of this code taken from: http://www.thegoldenmean.com/technique/flashMX_mailform1.html and

Page 181: PHP 5 TOTAL

http://actionscript-toolbox.com/samplemx_php.php */ wokan at cox dot net 02-Jun-2004 01:07 For those who don't get the naming, _Ming_ the Merciless was comic book hero _Flash_ Gordon's arch enemy. gaz_b3 at yahoo dot com 04-Apr-2003 01:11 The current CVS version, Ming 0.3a, supports a lot of MX ActionScript including the MX Drawing API. This is very nice for easy command line compiling of MX ActionScript only movies. For example: <? ming_setScale(20.00000000); ming_useswfversion(6); $movie = new SWFMovie(); $movie->setDimension(550,400); $movie->setBackground(0xcc, 0xcc, 0xcc ); $movie->setRate(31); // mx actionscript $strAction = " _root.createEmptyMovieClip ( 'triangle', 1 ); with ( _root.triangle ) { lineStyle( 5, 0xff00ff, 100 ); moveTo( 200, 200 ); lineTo( 300,300 ); lineTo( 100, 300 ); lineTo( 200, 200 ); } "; $movie->add(new SWFAction( str_replace("\r", "", $strAction) )); $movie->save("trianglemx.swf"); ?> Lots of examples here: http://www16.brinkster.com/gazb/ming/ kunnoichi at hotmail dot com 20-Aug-2001 07:50 //In quicktime, movies may be exported as jpeg or png //This object will convert any movie that has been saved as a group of images into //an swf file. The frame rate and other attributes can be controlled $path = "my_movie_dir"; //relative path to the jpg/png or bmp files $frame_rate=30; //frame rate of the flash movie $quality=50; //image quality during conversion (only valid if not jpeg) $skip_rate=5; //how many frames to skip set_time_limit("600"); //this could take some time $converter=new images_to_swf($path,$frame_rate,$skip_rate);

Page 182: PHP 5 TOTAL

//$converter->convert_images(70); //Use this if using non jpeg files or decreasing the quality $converter->make_movie();//Make the movie //Do two things with it $converter->save_movie("my_movie_dir/my_movie.swf"); $converter->output_movie(); class images_to_swf { var $path; //path to the image files var $skip_rate; var $movie; var $images=array(); function images_to_swf($path,$frame_rate=30,$skip_rate=5) { $this->path=$path; $this->skip_rate=$skip_rate; $this->movie=new swfmovie (); $this->movie->setrate ($frame_rate); } function convert_images($quality=80,$delete_old_files=1) { $main = opendir($this->path); rewinddir($main); //first convert to jpeg (if we have to) //also change the quality while($filename = readdir($main)) { //only use valid file types if (ereg("(png|bmp|jpg|jpeg)\$",$filename)) { $file_path=$this->path."/".$filename; if (ereg("png\$",$filename)) $temp_img=imagecreatefrompng ($file_path); else if (ereg("bmp\$",$filename)) $temp_img=imagecreatefrompng ($file_path); else if (ereg("(jpg|jpeg)\$",$filename)) $temp_img=imagecreatefromjpeg ($file_path); if (ereg("(png|bmp)\$",$filename)) { if ($delete_old_files) unlink($file_path); $new_file_path=$file_path.".jpg"; } else $new_file_path=$file_path; ImageJPEG($temp_img,$new_file_path,$quality); //echo "Converted $filename to $new_file_path at quality $quality<br />"; } } }

Page 183: PHP 5 TOTAL

function make_movie() { $main = opendir($this->path); rewinddir($main); //Get all valid jpegs while($filename = readdir($main)) { if (ereg("(jpg|jpeg)\$",$filename)) { $file_path=$this->path."/".$filename; $valid_paths[]=$file_path; } } //Put jpegs in order sort($valid_paths); //then create the movie for ($a=0; $a<count($valid_paths); $a=$a+$this->skip_rate) { $fp = fopen($valid_paths[$a],"rb"); $this->images[$a] = fread($fp,999999); fclose($fp); $this->movie->add(new swfbitmap($this->images[$a])); $this->movie->nextframe(); //echo "Added ".$valid_paths[$a]." to the movie<br />\n"; } } function save_movie($file_name) { $this->movie->save($file_name); } function output_movie() { header('Content-type: application/x-shockwave-flash'); $this->movie->output(); } } ivv_rousse at yahoo dot com 04-Aug-2001 01:17 // Simple button with link <?php Ming_setScale(1.0); function makeRect($r, $g, $b){ $s = new SWFShape(); $s->setRightFill($s->addFill($r, $g, $b)); $s->movePenTo(-100,-20); $s->drawLineTo(100,-20); $s->drawLineTo(100,20); $s->drawLineTo(-100,20); $s->drawLineTo(-100,-20); return $s; } // Set Font $font = new SWFFont("test.fdb"); $text1 = new SWFText();

Page 184: PHP 5 TOTAL

$text1->setFont($font); $text1->moveTo(155, 410); $text1->setColor(0x00, 0x00, 0x00); $text1->setHeight(28); $text1->addString("php.net"); $b1 = new SWFButton(); $b1->setUp(makeRect(0xff, 0, 0)); $b1->setOver(makeRect(0xcc, 0, 0)); $b1->setDown(makeRect(0, 0, 0xaa)); $b1->setHit(makeRect(0, 0, 0)); $b1->addAction(new SWFAction("getURL('http://www.php.net/', 'phpsite');"), SWFBUTTON_MOUSEUP); $m = new SWFMovie(); $m->setDimension(1000,1000); $m->setBackground(0xcc, 0xcc, 0xcc); $i = $m->add($b1); $m->add($text1); $i->setName("phpsite"); $i->moveTo(200,400); header("Content-type: application/x-shockwave-flash"); $m->output(); ?>

Uso de sesiones en PHP Sesión: Es el tiempo en el que el usuario permanece en un sitio Web personal. Liga: http://www.desarrolloweb.com/articulos/321.php Nos introducimos al concepto de sesión y aprendemos su manejo y funcionamiento. En los programas que hemos visto hasta ahora, hemos utilizado variables que sólo existían en el archivo que era ejecutado. Cuando cargábamos otra página distinta, los valores de estas variables se perdían a menos que nos tomásemos la molestia de

Page 185: PHP 5 TOTAL

pasarlos por la URL o inscribirlos en las cookies o en un formulario para su posterior explotación. Estos métodos, aunque útiles, no son todo lo prácticos que podrían en determinados casos en los que la variable que queremos conservar ha de ser utilizada en varios scripts diferentes y distantes los unos de los otros. Podríamos pensar que ese problema puede quedar resuelto con las cookies ya que se trata de variables que pueden ser invocadas en cualquier momento. El problema, ya lo hemos dicho, es que las cookies no son aceptadas ni por la totalidad de los usuarios ni por la totalidad de los navegadores lo cual implica que una aplicación que se sirviera de las cookies para pasar variables de un archivo a otro no sería 100% infalible. Es importante a veces pensar en "la inmensa minoría", sobre todo en aplicaciones de comercio electrónico donde debemos captar la mayor cantidad de clientes posibles y nuestros scripts deben estar preparados ante cualquier eventual deficiencia del navegador del cliente. Nos resulta pues necesario el poder declarar ciertas variables que puedan ser reutilizadas tantas veces como queramos dentro de una misma sesión. Imaginemos un sitio multilingüe en el que cada vez que queremos imprimir un mensaje en cualquier página necesitamos saber en qué idioma debe hacerse. Podríamos introducir un script identificador de la lengua del navegador en cada uno de los archivos o bien declarar una variable que fuese valida para toda la sesión y que tuviese como valor el idioma reconocido en un primer momento. Pensemos también en un carrito de la compra de una tienda virtual donde el cliente va navegando por las páginas del sitio y añadiendo los artículos que quiere comprar a un carrito. Este carrito podría ser perfectamente una variable de tipo array (tabla) que almacena para cada referencia la cantidad de artículos contenidos en el carrito. Esta variable debería ser obviamente conservada continuamente a lo largo de todos los scripts. Este tipo de situaciones son solventadas a partir de las variables de sesión. Una sesión es considerada como el intervalo de tiempo empleado por un usuario en recorrer nuestras páginas hasta que abandona nuestro sitio o deja de actuar sobre él durante un tiempo prolongado o bien, sencillamente, cierra el navegador. PHP nos permite almacenar variables llamadas de sesión que, una vez definidas, podrán ser utilizadas durante este lapso de tiempo por cualquiera de los scripts de nuestro sitio. Estas variables serán específicas del usuario de modo que varias variables sesión del mismo tipo con distintos valores pueden estar coexistiendo para cada una de las sesiones que están teniendo lugar simultáneamente. Estas sesiones tienen además su propio identificador de sesión que será único y específico. Algunas mejoras referentes al empleo de sesiones han sido introducidas con PHP4. Es a esta nueva versión a la que haremos referencia a la hora de explicar las funciones disponibles y la forma de operar. Para los programadores de PHP3 la diferencia mayor es que están obligados a gestionar ellos mismos las sesiones definir sus propios identificadores de sesión. Veamos en el siguiente capítulo la forma de plasmar esta necesidad técnica en nuestros scripts a partir de las funciones que gestionan las sesiones en PHP. Describimos los métodos de trabajo con sesiones en PHP, inicializar sesión, crear variables de sesión o recuperarlas.

Page 186: PHP 5 TOTAL

Las sesiones, en aplicaciones Web realizadas con PHP y en el desarrollo de páginas Web en general, nos sirven para almacenar información que se memorizará durante toda la visita de un usuario a una página Web. Dicho de otra forma, un usuario puede ver varias páginas durante su paso por un sitio Web y con sesiones podemos almacenar variables que podremos acceder en cualquiera de esas páginas.

Digamos que las sesiones son una manera de guardar información, específica para cada usuario, durante toda su visita. Cada usuario que entra en un sitio abre una sesión, que es independiente de la sesión de otros usuarios. En la sesión de un usuario podemos almacenar todo tipo de datos, como su nombre, productos de un hipotético carrito de la compra, preferencias de visualización o trabajo, páginas por las que ha pasado, etc. Todas estas informaciones se guardan en lo que denominamos variables de sesión.

PHP dispone de un método bastante cómodo de guardar datos en variables de sesión, y de un juego de funciones para el trabajo con sesiones y variables de sesión. Lo veremos en este artículo.

Para cada usuario PHP internamente genera un identificador de sesión único, que sirve para saber las variables de sesión que pertenecen a cada usuario. Para conservar el identificador de sesión durante toda la visita de un usuario a una página PHP almacena la variable de sesión en una cookie, o bien la propaga a través de la URL. Esto se puede configurar desde el archivo php.ini.

Trabajo con sesiones en PHP

Cuando queremos utilizar variables de sesión en una página tenemos que iniciar la sesión con la siguiente función:

session_start () Inicia una sesión para el usuario o continúa la sesión que pudiera tener abierta en otras páginas. Al hacer session_start() PHP internamente recibe el identificador de sesión almacenado en la cookie o el que se envíe a través de la URL. Si no existe tal identificador se sesión, simplemente lo crea.

Nota: Si en el php.ini se ha definido la variable session.auto_start = 1 se inicializa automáticamente la sesión en cada página que visita un usuario, sin que se tenga que hacer el session_start()

Una vez inicializada la sesión con session_start() podemos a partir de ahora utilizar variables de sesión, es decir, almacenar datos para ese usuario, que se conserven durante toda su visita o recuperar datos almacenados en páginas que haya podido visitar.

La sesión se tiene que inicializar antes de escribir cualquier texto en la página. Esto es importante y de no hacerlo así corremos el riesgo de recibir un error, porque al iniciar la sesión se deben leer las cookies del usuario, algo que no se puede hacer si ya se han enviado las cabeceras del HTTP.

Nota: si se intenta abrir una sesión después de haber enviado texto de la página al cliente se obtendrá el siguiente mensaje:

Page 187: PHP 5 TOTAL

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at …)

Una vez iniciada la sesión podemos utilizar variables de sesión a través de $_SESSION, que es un array asociativo, donde se accede a cada variable a partir de su nombre, de este modo:

$_SESSION["nombre_de_variable"]

Nota: $_SESSION es una variable global que existe a partir de PHP 4.1.0. Lo normal es que podamos acceder a esa variable normalmente, pero si nuestra versión de PHP no está actualizada podemos intentarlo con $HTTP_SESSION_VARS, que es también un array asociativo, aunque no es de ámbito global. Si $HTTP_SESSION_VARS tampoco funciona tendremos que registrar cada variable por separado con la función session_register(), enviándo por parámetro los nombres de las variables de sesión que desea utilizar desde PHP.

Existen otras dos configuraciones del php.ini que afectan al trabajo con variables de sesión, que son track_vars y register_globals. Por defecto track_vars está activado y register_globals está desactivado. Este es el caso normal y el que suponemos tendrá el servidor donde programes, pero si esas variables cambian podría cambiar alguna cosita, como que las variables se tengan que registrar explícitamente con session_register().

Ejemplo de código para definir una variable de sesión:

<? session_start(); ?> <html> <head> <title>Generar variable de sesión</title> </head> <body> <? $_SESSION["mivariabledesesion"] = "Hola este es el valor de la variable de sesión"; ?> </body> </html>

Como se puede ver, es importante inicializar la sesión antes de hacer otra cosa en la página. Luego podremos definir variables de sesión en culquier lugar del código PHP de la página.

Para leer una variable de sesión se hace a través del mismo array asociativo $_SESSION. Es tan sencillo como haríamos para utilizar cualquier otra variable, lo único es que tenemos que haber inicializado la sesión previamente. Y por supuesto, que la variable que deseamos acceder exista previamente.

<? session_start(); ?>

Page 188: PHP 5 TOTAL

<html> <head> <title>Leo variable se sesión</title> </head> <body> Muestro esa variable: <? echo $_SESSION["mivariabledesesion"]; ?> </body> </html>

Como se puede ver, al inicio del código hemos inicializado la sesión y luego en cualquier parte del código podríamos acceder a las variables de sesión que tuviésemos creadas.

Nota: si intentamos acceder a una variable de sesión con $_SESSION que no ha sido creada obtendremos otro mensaje de error: Notice: Undefined index: mivariabledesesion, que es el mismo que si intentamos acceder a cualquier elemento de un array que no existe.

Más sobre sesiones en PHP

La siguiente información sobre sesiones de PHP también puede ser de útil lectura. No obstante lo expresado hasta aquí es una información mucho más actualizada. En las próximas líneas se explican mecanismos para sesiones pero todos los que se comentan, aunque son válidos, no son actuales por tratarse de explicaciones para versiones de PHP más antiguas.

Hemos dicho en el capítulo anterior que la variables de sesión se diferencian de las variables clásicas en que éstas residen en el servidor, son especificas de un solo usuario definido por un identificador y pueden ser utilizadas en la globalidad de nuestras páginas. Para iniciar una sesión podemos hacerlo de dos formas distintas: -Declaramos abiertamente la apertura de sesión por medio de la función session_start(). Esta función crea una nueva sesión para un nuevo visitante o bien recupera la que está siendo llevada a cabo. -Declaramos una variable de sesión por medio de la función session_register('variable'). Esta función, además de crear o recuperar la sesión para la página en la que se incluye también sirve para introducir una nueva variable de tipo sesión. Las sesiones han de ser iniciadas al principio de nuestro script. Antes de abrir cualquier etiqueta o de imprimir cualquier cosa. En caso contrario recibiremos un error. Con lo visto, vamos a proponer el ejemplo clásico de utilización de una sesión: un contador. Este contador deberá aumentar de una unidad cada vez que recargamos la página o apretamos al enlace:

<? session_register ('contador');

Page 189: PHP 5 TOTAL

?> <HTML> <HEAD> <TITLE>contador.php</TITLE> </HEAD> <BODY> <? If (isset($contador)==0) {$contador=0;} ++$contador; echo "<a href=\"contador.php\">Has recargado esta página $contador veces</a>"; ?> </BODY> </HTML>

Ejecutar script La condición if tiene en cuenta la posibilidad de que la variable $contador no haya sido todavía inicializada. La función isset se encarga de dar un valor cero cuando una variable no ha sido inicializada. Otras funciones útiles para la gestión de sesiones son:

Función Descripción

Session_id() Nos devuelve el identificador de la sesión

Session_destroy() Da por abandonada la sesión eliminando variables e identificador.

Session_unregister('variable') Abandona una variable sesión

Tutorial de sesiones en PHP Este es un tutorial básico para el manejo y control de sesiones en PHP, una de las consultas más realizadas sobre este lenguaje. Por Miguel Angel Alvarez Licencia Copyleft . Puedes reproducirlo citando al autor y enlazando con DesarrolloWeb.com. Veamos un sencillo ejemplo de uso de sesiones para ilustrar a los usuarios más inexpertos el manejo de sesiones con PHP en sus procesos más básicos, como son la inicialización de sesiones, comprobar si existen variables de sesión, crearlas y modificarlas.

En este ejemplo vamos a hacer un sistema para llevar la cuenta de las páginas que ha visto un visitante. Es decir, si entra a una página del sitio por primera vez, contamos que ha visto una página, luego con cada página adicional que visite, seguiremos acumulando 1 en la cuenta de páginas vistas dentro del sitio. Del mismo modo, si se recarga una página o se vuelve a la misma página que ya se estuvo, también haremos que se acumule 1 en su cuenta.

Para aprender a trabajar con sesiones recomendamos leer el artículo sesiones en PHP.

Lo que tendremos que hacer en este ejercicio es lo siguiente:

Page 190: PHP 5 TOTAL

- Inicializar la sesión - Si no tenemos el contador de páginas creado, lo inicializamos al valor 1 - Si tenemos el contador de páginas creado, lo incrementamos en 1.

<? session_start(); if (!isset($_SESSION["cuenta_paginas"])){ $_SESSION["cuenta_paginas"] = 1; }else{ $_SESSION["cuenta_paginas"]++; } ?> <html> <head> <title>Contar páginas vistas por un usuario en toda su sesión</title> </head> <body> <? echo "Desde que entraste has visto " . $_SESSION["cuenta_paginas"] . " páginas"; ?> <br> <br> <a href="otracuenta.php">Ver otra página</a> </body> </html>

Como se ha podido ver, lo primero que debemos hacer es inicializar la sesión con session_start().

Luego de inicializar la sesión podemos trabajar con variables de sesión en cualquier lugar del código PHP. Nosotros vamos a crear y utilizar una variable de sesión para llevar la cuenta del número de páginas que hemos visto.

$_SESSION["cuenta_paginas"]

Para ver si una variable de sesión ha sido creada podemos utilizar la función isset() pasándole como parámetro la variable que deseamos saber si ha sido creada. Si no fue creada anteriormente, simplemente la creamos (inicializando su valor a 1). Si fue creada, pues que tenemos que incrementar en 1. Eso se consigue con este código:

if (!isset($_SESSION["cuenta_paginas"])){ $_SESSION["cuenta_paginas"] = 1; }else{ $_SESSION["cuenta_paginas"]++; }

Eso es todo! Ahora lo que se supone que tenemos son otras páginas en el mismo sitio que también tienen que incrementar en 1 el contador de páginas vistas por ese usuario en esa sesión.

Eso lo podríamos hacer con el mismo trozo de código, como el que hemos visto antes, colocado al principio del archivo PHP.

Page 191: PHP 5 TOTAL

<? session_start(); if (!isset($_SESSION["cuenta_paginas"])){ $_SESSION["cuenta_paginas"] = 1; }else{ $_SESSION["cuenta_paginas"]++; } ?>

Luego, en cualquier momento, si deseamos mostrar el número de páginas vistas en un momento dado, tendríamos que hacer algo como esto:

<? echo "Has visto " . $_SESSION["cuenta_paginas"] . " páginas, contando actualizaciones de paginas"; ?>

Liga: http://www.desarrolloweb.com/articulos/235.php La aplicacion me parece muy buena para iniciarse en el tema de las sesiones, pero hay una parte del codigo que se puede hacer más sencilla y rápida. LA PARTE PARA AÑADIR ITEMS A LA CESTA: if ($item){ if (!isset($itemsEnCesta)){ $itemsEnCesta[$item]=$cantidad; }else{ foreach($itemsEnCesta as $k => $v){ if ($item==$k){ $itemsEnCesta[$k]+=$cantidad; $encontrado=1; } } if (!$encontrado) $itemsEnCesta[$item]=$cantidad; } } SE PODRIA CAMBIAR POR: if ($item) { if ( isset( $itemsEnCesta[$item] ) ) { $itemsEnCesta[$item]+=$cantidad; } else { $itemsEnCesta[$item]=$cantidad; } } Más sencilla y a la vez mas eficiente, ya que no esta hecha en un bucle Otro ejemplo: Para hacer el carrito mas completo Prodrín agregarle estas modificaciones que le hice, asi podrán quitar items, y sumar y restar cantidades:

Page 192: PHP 5 TOTAL

<?php session_start(); session_register('itemsEnCesta'); $encontrado=0; $total=0; if (isset($item)){ if (!isset($itemsEnCesta)){ $itemsEnCesta[$item]=$cantidad; }else{ foreach($itemsEnCesta as $k => $v){ if ($item==$k){ //$total+=$v; $itemsEnCesta[$k]+=$cantidad; $encontrado=1; } } if (!$encontrado) $itemsEnCesta[$item]=$cantidad; } } ?> <html> <body> <tt> <form action="<?=$PHP_SELF."?".SID?>" method="post"> Dime el producto <input type="text" name="item" size="20"><br> Cuantas unidades <input type="text" name="cantidad" size="20"> <br></br> <input type="submit" value="Añadir a la cesta"><br> </form> <? if (isset($valor2)){ foreach($itemsEnCesta as $k => $v){ if ($valor2==$k){ $itemsEnCesta[$k]+=1; } } } if (isset($valor3)){ foreach($itemsEnCesta as $k => $v){ if ($itemsEnCesta[$k]>1){ if ($valor3==$k){ $itemsEnCesta[$k]-=1; } }else{ $valor=$valor3; } }

Page 193: PHP 5 TOTAL

Liga: http://www.webtaller.com/construccion/lenguajes/php/lecciones/introduccion-rapida-sesiones-php.php

SESIONES EN PHP

Las sesiones son un método seguro y eficaz de guardar y mantener datos del usuario durante toda su visita. Podemos guardar por ejemplo una variable que diga si está identificado en nuestro sistema o no y si lo está, también podemos guardar sus datos.

Para iniciar una sesión lo haremos con la función session_start() y luego, las variables que queramos mantener durante toda la visita del usuario las guardaremos en la variable $_SESSION. Siempre que queramos utilizar las sesiones deberemos llamar antes a session_start() y siempre antes que cualquier salida. Es decir, antes que "<html>" e incluso antes que cualquier echo o función que imprima en pantalla.

Vamos a hacer un ejemplo para ver como funcionan las sesiones. Crearemos dos páginas, "uno.php" y "dos.php". En la primera pondremos lo siguiente:

<?php

session_start(); $_SESSION['usuario'] = 'WebTaller';

?> <html> <head> <title>Prueba de sesión</title> </head> <body> <a href='dos.php'>Ir a la segunda página</a> </body> </html>

En esta primera página iniciamos la sesión y guardamos en la sesión el valor 'WebTaller' con nombre 'usuario'. En la página "dos.php" pondremos el siguiente código:

<?php

session_start(); echo $_SESSION['usuario'];

?>

Si abrimos uno.php en el navegador y hacemos click en el enlace, iremos a la página dos.php donde veremos imprimido 'WebTaller' si todo ha ido bien.

Esto es la base de las sesiones, y lo podemos aplicar por ejemplo para identificar a un usuario y mantenerlo identificado durante toda su visita.

Trabajando con sesiones siempre tendremos que tener en cuenta:

1. Poner siempre al principio session_start();

Page 194: PHP 5 TOTAL

2. Nunca poner nada que imprima algo en pantalla antes que session_start(), ni siquiera un espacio antes de <?php

3. Usar siempre la variable $_SESSION para manejar las variables de sesión.

Liga: http://www.programacionweb.net/articulos/articulo/?num=377 Sesiones en PHP Utilizaremos sesiones para almacenar una serie de variables en el servidor relacionándolas ( grácias a una variable pasada por cookie o por URL ) con un usuario concreto para que estén disponibles en diferentes páginas de nuestro sitio web. Una vez almacenada una variable de sessión, podremos leerla desde todas las páginas de nuestra web mientras la sesión no se destruya. Tabla de contenido

• · Guardar una variable • · Leer una variable guardada • · Borrar una variable

Guardar una variable El soporte para sesiones de PHP nos permite inicializar facilmente una sesión utilizando session_start y gracias al vector superglobal $_SESSION, podremos trabajar con sesiones como si de cualquier otro vector se tratara:

000 001 002 003 004 005

<?php // Inicializamos sesion session_start(); // Guardamos una variable $_SESSION['nombre'] = 'Fernando Díaz'; ?> Maximizar Seleccionar PHP

La única cosa que deberemos tener en cuenta, es que si usamos cookies no podremos haber enviado ni un solo caracter ( ni siquiera un espacio ) al navegador antes del session_start , el siguiente ejemplo nos dará error por el espacio de la línea 0:

000 001 002 003

<?php // Inicializamos sesion session_start(); ?> Maximizar Seleccionar PHP

Leer una variable guardada Si hemos guardado una sesión, podremos acceder a sus variables desde todas las páginas PHP de nuestra web uando sean visitadas por el mismo usuario. Esto lo haremos simplemente inicializando la sesión y con el mismo vector $_SESSION, para ver si existe una variable de sesión determinada, usaremos isset cómo con cualquier otra variable.:

000 <?php

Page 195: PHP 5 TOTAL

001 002 003 004 005 006 007 008 009 010 011

// Inicializamos sesion session_start(); // Comprovamos si existe la variable if ( isset ( $_SESSION['nombre'] ) ) { // Si existe echo $_SESSION['nombre']; } else { // Si no existe echo 'desconocido'; } ?> Maximizar Seleccionar PHP

Borrar una variable Podemos borrar una variable de sesión usando la función unset , pero además podemos eliminar la sesión con session_destroy :

000 001 002 003 004 005 006 007

<?php // Inicializamos sesion session_start(); // Borramos la variable unset ( $_SESSION['nombre'] ) { // Borramos toda la sesion session_destroy(); ?>

Una sesión en el entorno del desarrollo web consiste en controlar el acceso individual a una página o grupo de páginas determinado, mediante la asignación de un identificador de único para cada usuario. Con ello se puede conseguir hacer un seguimiento de cada usuario a lo largo de su visita en nuestra página web, desde que entra hasta que sale. PHP consigue con el apoyo de las sesiones construir páginas más personalizadas conservando dentro del objeto $_SESSION de PHP el estado de las acciones realizadas por el usuario (de dónde viene, por dónde ha pasado..).

Por ejemplo, en una tienda virtual cuando el usuario va a pagar definitivamente el pedido, la página deberá "recordar" qué productos ha seleccionado previamente. Para esto se utilizan las sesiones, para identificar a un usuario y pasar datos asociados a él entre las distintas páginas. En el caso de la tienda, el listado de productos se guardaría en el objeto $_SESSION asociados a un identificador.

Otro uso muy frecuente de las sesiones es la autentificación en páginas restringidas mediante usuario y password. Mediante PHP hay que comprobar que los datos introducidos por el usuario en el formulario de autentificación son válidos en la base de datos, y si es así iniciar una sesión guardándolos en el objeto $_SESSION. En cada página que se quiera restringir el acceso deberá haber una comprobación de si existen las variables de sesión y si éstas coinciden con algún registro de la base de datos. En caso contrario el usuario no es válido y deberá identificarse de nuevo.

Es imprescindible para el uso de sesiones que el usuario acepte las cookies. De lo contrario el identificador de sesión deberá pasarse como parámetro GET en las URL. Para ello se debe utilizar la constante SID o la función session_id().

Page 196: PHP 5 TOTAL

Las sesiones se utilizan fácilmente en PHP, algunas funciones relacionadas con el uso de las sesiones son:

Para iniciar la sesión (crear una nueva o continuarla), disponemos de la función session_start (). Esta función siempre devuelve TRUE. bool session_start ( void )

Para registrar variables utilizamos: session_register() , acepta como argumento una cadena que identifique el nombre de una variable, o una matriz que contenga más identificadores de variables. bool session_register ( )

Para destruir los datos asociados a la sesión actual, hay que utilizar session_destroy() . Hay que tener en cuenta que no destruye ninguna de las variables globales asociadas a la sesión ni la cookie. Esta función devuelve TRUE si se destruye la sesión correctamente y FALSE se produce algún problema al intentarlo. bool session_destroy ( void )

Para eliminar alguna variable registrada se utiliza session_unregister() . Se le pasa como parámetro el nombre de la variable. bool session_unregister()

Otras funciones relacionadas con sesiones en PHP son:

• string session_id () : Lee o cambia el identificador de sesión actual. • void session_unset ( ) : Elimina toda las variables de la sesión. • bool session_is_registered() : Comprueba si una variable está registrada en

la sesión. • string session_save_path() : Lee o cambia la ruta donde se guardan los datos

de la sesión actual. Hay que configurar el save_path para que no de error en php.ini

• string session_module_name () : Lee y/o cambia el módulo de la sesión actual

• bool session_set_save_handler() : Establece unas funciones para el almacenamiento de los datos de la sesión a nivel de usuario.

• array session_get_cookie_params() : Obtiene los parámetros de la cookie de la sesión

• void session_set_cookie_params() : Cambia los parámetros de la cookie de la sesión

• void session_write_close() : Escribe los datos de la sesión y la finaliza. • bool session_regenerate_id() : Actualizar la id de sesión actual con una recién

generada • string session_encode() : devuelve una cadena con el contenido de la sesión

actual en su interior.

Liga: http://dns.bdat.net/trucos/faqphp-v1/x942.html

Usar variables de sesión

Para poder usar variables de sesión lo primero que tenemos que hacer es iniciar la sesión:

Page 197: PHP 5 TOTAL

session_start();

El uso de las variables de sesión depende de la configuración de register_globals en el php.ini. Es aconsejable que tenga el valor "off".

Cuando register_globals=off, para registrar una variable de sesión tenemos que poner:

$_SESSION['variable_ de_sesion'] = valor;

Si queremos saber si una variable de sesión está registrada simplemente los preguntamos por los cauces habituales:

if (isset($_SESSION['variable_ de_sesion']))

{

echo "Variable registrada";

}

else

{

echo "Variable NO registrada";

}

Cuando register_globals = on entonces las cosas son ligeramente diferentes:

Para registrar una variable en la sesion tienen que hacer

$variable_de_sesion = "valor";

session_register("variable_de_sesion");

Para comprobar si la variable está registrada en la sesion podemos ejecutar

if (session_is_registered("variable_de_sesion"))

{

echo "Variable NO registrada";

Page 198: PHP 5 TOTAL

}

else

{

echo "Variable NO registrada";

}

A continuación vemos un ejemplo:

<?php

session_start();

if (!isset($_SESSION[sesion]))

$_SESSION[sesion]=0;

echo '<head>

<title>'.$_SERVER[PHP_SELF].'</title>

</head>

<html>

<body>'; echo "Sesion :$_SESSION[sesion]"; $_SESSION[sesion]=$_SESSION[sesion]+1; echo "<p>";

echo "<a href=$_SERVER[PHP_SELF]>Recargar la Página</a>"; echo '</body>

</html>'; ?>

Las sesiones son las mejor forma de almacenar la información de los visitantes. Ya que con las cookis aparte de tener mala fama por ser “inseguras”, el usuario puede desactivarlas de su navegador, mientras que las sesiones no se pueden desactivadas. Además las cookies son almacenadas en el PC del visitante, mientras que las sesiones son guardadas en neustro servidor, lo que nos permite almacenar mucha mayor información y tener un acceso mas fácil a ellas.

Page 199: PHP 5 TOTAL

Nota: Para que las sesiones funcionen, todas las paginas por las que queramos que corra deben tener la extensión .php, si hacemos que corra por otra pagina que no sea php las sesiones se perderán al abandonar el archivo php.

session_start()

Con esta función, lo que aremos es comprobar si existe alguna sesión abierta, y si no hay ninguna, se abrirá una. Es una buena idea incluir esta línea en cada script ya que si la sesion ya existe no abrirá otra nueva, sino que se limitará a abrir toda la información asociada a dicha sesión.

session_register()

Esta función nos servirá para registrar una variable de sesión

Ejemplo: $nombre = “Giss”; Sessión_register(“nombre”);

Nota: No es necesario poner el símbolo $ a la hora de registrar la variable de sesión

Cuando las variables están registradas, son enviadas a través de las páginas .php hasta que se termine la sesión o nosotros programemos manualmente el cierre de la sesión.

Se puede registrar mas de una variable a la vez, separándolo por comas, por ejemplo: Session_register(“nombre”,”apellido”,”direccion”);

Otra cosa a tener en cuenta es que este tipo de variables no pueden pasarse por el método POST ni GET.

session_is_register()

Esta función nos servirá para saber si una variable esta registrada o no. Su sintaxis es así: $registro=session_is_register(“nombre”);

En caso de que sea verdadero devolverá true y de lo contrario devolverá false.

Cómo cerrar las sesiones

Cerrar una sesión equivale a “desregistrar” todas las variables que contiene. Para desregistrar una variable usamos la sentencia session_unregister(), lo malo de esta sentencia es que solo se puede desregistrar una sola variable por cada vez.

Para desregistrar todas las variables de una sola vez podemos utilizar la función session_unset().

Page 200: PHP 5 TOTAL

Una vez desregistradas las variables solo nos falta terminar la sesión con la función session_destroy().

Vamos a realizar un ejemplo con todo lo visto hasta ahora sobre las sesiones:

Crearemos una sesión, registraremos una variable y la pasaremos a través de tres paginas distintas. <! – sesion1.php -> <? session_start(); $nombre= “Jaime”; session_register(“nombre”); echo “ Bienvenido a mi web, $nombre”; <a href = "sesion2.php"> siguiente pagina </a> ?>

<! – sesion2.php -> <? session_start(); echo “ Bienvenido a mi web de nuevo, $nombre”; sesion_unregister(“nombre); <a href = "sesion3.php"> siguiente pagina </a> ?>

<! – sesion3.php -> <? session_start(); echo “ Bienvenido a mi web de nuevo otra vez, $nombre”; session_destroy(); ?>

Explicación:

Tenemos 3 archivos con una sesion En el archivo 1: creamos la sesión y registramos la variable nombre con session_register() y lo pasamos al archivo 2 mediante un enlace En el archivo 2: usamos la variable creada en el archivo 1 y después desregistramos la variable con session_unregister() En el archivo 3: vemos que a pesar de que la sesion sigue abierta no le llega la variable nombre ya que la desregistremos en el archivo2, y finalmente cerramos la sesion con session_destroy().

Liga: http://www.original-design.es/tutoriales/funciones_en_sesiones_php.php

Funciones en las sesiones PHP

En este tutorial, vamos a explicar algunas de las funciones más conocidas e importantes para realizar operaciones con las sesiones en PHP.

Si no sabes que es o como se crean las sesiones mira el tutorial anterior: Sesiones en PHP

Aquí pondré una lista de las funciones que faltaban en el tutorial anterior:

Page 201: PHP 5 TOTAL

Session_id()

Esta es una de las funciones más importantes en las sessiones. Nos sirve para obtener el identificador de la sesion que a creado el usuario, y así poder diferenciarlo del resto de usuarios.

Ejemplo: <? Session_start(); Print(“ID de la sesion: ”. session_id()); ?>

Session_decode()

Esta function nos ayuda a recuperar todos los datos de la session que estan almacenados que estan guardados en una cadena, se pasa como argumento, dando valores a las variables utilizadas en las sesiones.

Session_encode()

Nos vale para codificar los datos de una variable t ipo String.

Session_destroy()

Esta función sirve para eliminar todos los datos que estén asociados a una función. Quiero aclarar que esta función no va a borrar la sesión ni las cookies de la session, tan solo borrara los datos asociados a dicha función.

Su sintaxis es: <? session_destroy(); ?>

Session_name()

Sirve para obtener el nombre de la sesión que estamos utilizando.

Sesion_module_name()

Esta función nos es útil para obtener el valor de la variable de sesion save_handler situada en el fichero php.ini, por defecto es files

Ejemplo: Print (session_module_name()); // nos devolvera “files”

Si deseamos especificar otro handler podemos especificarlo como un argumento Ejemplo:

Print(session_module_name(“users”));

Page 202: PHP 5 TOTAL

Guardar y leer Variables de Sesion

Liga: http://www.tutores.org/?codigo=361&Guardar-y-leer-Variables-de-Sesion 1.- Para PHP > 4.1.x y register_globals a ON o a OFF ... Preferentemente usar este método. (en el ejemplo se asume que se propaga el SID automático ... ese parametro lo define la directiva de php.ini session.use_trans_sid = 1 (1 activado, 0 desactivado .. propagación manual).) 2.- Y el método tradicional: (PHP > 4.0.x .. register_globals a ON .. SID propagación automática) <-- Codigo ofrecido por Tutores.org --> 1. ______________________________________________________ Guarda_variable.php <? session_start(); // incio de sesiones. // Necesario cada vez que se lean // o guarden variables de sesión. $_SESSION['variable']="valor"; ?> lee_variable.php <? session_start(); // incio de uso de sesiones. $variable=$_SESSION['variable']; // asignamos a $variable la // variable de la session áctiva. ?> 2.______________________________________________ guarda_variable-php <? session_start(); // inicio sesiones. session_register("variable"); // registrar $variable en session. $variable="valor"; // El valor de la $variable se puede dar // en cuanquier momento. ?> Lee_variable.php <? session_start(); // inicio sesiones // Se asume como global $variable. // No distinguiendo si es de sesión o de otro metodo // Si fallase el inico de session, una $variable // entrando por GET podria ser considerado // como la varaible de la sesión: // lee_variable.php?variable=mi_valor_trampa echo $variable; ?>

Page 203: PHP 5 TOTAL

Ejemplo de conexión con base de datos Access en PHP . PHP dispone de diversos juegos de funciones para conectar con distintos tipos de bases de datos. Por ejemplo, existe un juego de funciones específico para MySQL, otro para Oracle, PostgreSQL, etc. Aunque no existe entre sus librerías ninguna función para acceder específicamente a una base de datos Access. Para ello, disponemos de las funciones de conexión ODBC con bases de datos.

ODBC es un estándar de conexión con bases de datos que utilizan los sistemas Windows. Con ODBC se puede acceder a cualquier base de datos, siempre que exista el correspondiente driver ODBC para esa base de datos. Las conexiones ODBC son propias de sistemas Microsoft, por lo que podremos utilizarlas desde cualquier lenguaje de programación en Windows, como PHP, para acceder a cualquier base de datos, incluida Access.

Lo primero que tendremos que hacer para conectar con PHP es crear un DSN en nuestro ordenador. Un DSN es un nombre de conexión que utilizaremos para referenciar a una base de datos. Podemos tener tantos DSN en nuestro sistema como necesitemos, para acceder desde aplicaciones o lenguajes de programación a bases de datos por ODBC. Esto lo hacemos desde el panel de control de Windows en la opción "Herramientas administrativas - Origenes de datos ODBC". Tenemos que crear un DNS de sistema o de usuario, en la solapa correspondiente y luego apretando agregar. Habrá que seleccionar el driver ODBC que tenemos que utilizar, como se trata de una base de datos de Access, debemos seleccionar el driver ODBC de Access. Luego habrá que darle un nombre al DSN y seleccionar el archivo .mdb que contiene nuestra base de datos. Una vez realizado esto, necesitaremos acordarnos del nombre del DSN que hemos creado, porque lo tendremos que utilizar en nuestro código de conexión.

Referencia: Se explica como crear un DSN con más detalle en el artículo Pasos previos II: Conexión a BD. Es un capítulo del manual de ASP, pero se hace igual para conectar Access con PHP.

Si tenemos nuestra página alojada en un proveedor de hosting y queremos conectar Access con PHP, si es que lo permiten (pues lo típico en esos casos es utilizar una base de datos MySQL), tendríamos que preguntarles cómo crear el DSN en sus sistemas.

Una vez tengamos el DSN utilizaremos un código de conexión como este:

$conn_access = odbc_connect ("guiarte_access", "", "");

Con la función odbc_connect() se conecta con una base de datos por ODBC, indicando el nombre del DSN en el primer parámetro y luego el usuario y la contraseña. En Access normal es que no se tenga siquiera usuario y contraseña, por lo que esos dos parámetros los he pasado con una cadena vacía. Nos devuelve el identificador de la conexión con la base de datos.

Para ejecutar una sentencia SQL utilizaremos la función odbc_exec(). De este modo:

$rs_access = odbc_exec ($conn_access, "select * from tabla");

Page 204: PHP 5 TOTAL

Como se puede ver, odbc_exec() recibe el identificador de la conexión obtenido anteriormente y la sentencia SQL a ejecutar. Devuelve un identificador del conjunto de registros resultado de ejecutar la sentencia.

Luego utilizaremos funciones como odbc_fetch_array() o odbc_fetch_object() para acceder a cada uno de los registros obtenidos en el conjunto de resultados.

Un código completo de conexión con una base de datos Access podría ser el siguiente:

if ($conn_access = odbc_connect ( "guiarte_access", "", "")){ echo "Conectado correctamente"; $ssql = "select * from libros"; if($rs_access = odbc_exec ($conn_access, $ssql)){ echo "La sentencia se ejecutó correctamente"; while ($fila = odbc_fetch_object($rs_access)){ echo "<br>" . $fila->titulo; } }else{ echo "Error al ejecutar la sentencia SQL"; } } else{ echo "Error en la conexión con la base de datos"; }

Nota: Las funciones odbc_fetch_array() y odbc_fetch_object(), así como otras funciones de PHP para el acceso por ODBC a bases de datos, son idénticas o muy similares en su utilización a las funciones propias para otras bases de datos como MySQL. En nuestros manuales y talleres de PHP tenemos muchos ejemplos de conexión y trabajo con bases de datos MySQL, que nos pueden servir de guía para aprender a trabajar con bases de datos Access. Simplemente habría que tener el DSN para la conexión con la base de datos Access y cambiar los nombres de las funciones como mysql_fetch_array() por sus correspondientes, como odbc_fetch_array().

Liga: http://www.mclibre.org/consultar/php/lecciones/php_db_access_1.html

MS Access en PHP

PHP puede acceder a información contenida en la base de datos Access, aunque parece ser que su rendimiento es inferior a otras bases de datos porque el acceso se realiza a través de una conexión ODBC.

• Crear la conexión ODBC • Utilizar la conexión ODBC

o Conexión con MS Access o Consultas a la base de datos

Page 205: PHP 5 TOTAL

Crear la conexión ODBC

ODBC (Open Database Connectivity) es una API de conexión a bases de datos.

Para crear una conexión ODBC a una base de datos Access, hay que abrir el Administrador de orígenes de datos ODBC mediante el menú Inicio > Panel de control > Herramientas administrativas > Orígenes de datos (ODBC). Una vez abierto el Administrador de orígenes de datos ODBC, hay que elegir la pestaña "DSN de sistema":

En la pestaña "DSN de sistema" hay que pulsar el botón "Agregar..." y elegir el controlador "Microsoft Access Driver (*.mdb)" :

Page 206: PHP 5 TOTAL

Se abrirá una ventana de configuración en la que hay que hacer clic en el botón "Seleccionar..."...

... y elegir la base de datos con la que se quiere conectar:

Page 207: PHP 5 TOTAL

A continuación hay que escribir el nombre y la descripción que le queramos dar al origen de datos y hacer clic en el botón "Aceptar".

En la pestaña "DSN de sistema" aparecerá el nuevo origen de datos:

Page 208: PHP 5 TOTAL

Volver al principio

Utilizar la conexión ODBC

Existen una serie de funciones ODB con una sintaxis y comportamiento similar a las funciones MYSQLI, aunque la sintaxis de las consultas debe ser la que admite MS Access.

Conexión con MS Access

La función para conectar con la base de datos es odbc_connect($dsn, $usuario, $password), que devuelve un identificador de enlace que se utiliza en todas las consultas posteriores.

En el ejemplo siguiente, la variable $db almacena el identificador de enlace.

<?php $db = odbc_connect('db1', '', ''); if (!$db) { print "<p>Imposible conectarse con la base de datos.</p>"; exit(); } ?>

Page 209: PHP 5 TOTAL

Si no se puede establecer la conexión con la base de datos, puede deberse a que la base de datos no esté funcionando, a que los datos de usuario no sean correctos o a que no esté activada la extensión odbc (en Windows está incluido siempre).

Volver al principio

Consultas a la base de datos

Una vez realizada la conexión a la base de datos, las operaciones se realizan a través de consultas.

La principal función para efectuar consultas es odbc_exec($db, $consulta). Dependiendo del tipo de consulta, la función devuelve un valor lógico o un recurso.

Volver al principio

Seguridad en las consultas

Por escribir

Acceder al resultado de una consulta

En caso de que el resultado de una consulta sean uno o varios registros, se accede a cada uno de ellos mediante la función odbc_fetch_array($result, [, $numero_fila]).

El ejemplo siguiente muestra cómo se pueden listar todos los registros de una tabla ('db1' es el nombre de la conexión odbc, 'gente' es el nombre de la tabla y 'nombre' y 'apellidos' son campos de la tabla 'gente'):

<?php $db = odbc_connect('db1','',''); if (!$db) { exit('Error en la conexión a la base de datos'); } else { $consulta = "SELECT * FROM gente"; $result = odbc_exec($db,$consulta); if (!$result) { exit("Error en la consulta"); } else { print "<table border=\"1\">\n <tr> <th>Nombre</th>\n <th>Apellidos</th>\n </tr>\n"; while ($valor = odbc_fetch_array($result)) { $nombre = $valor['nombre']; $apellidos = $valor['apellidos']; print " <tr>\n <td>$nombre</td>\n <td>$apellidos</td>\n </tr>\n"; } odbc_close($db); print "</table>\n";

Page 210: PHP 5 TOTAL

} } ?>

Liberación de recursos

Para liberar el recurso que almacena los resultados de la una consulta se utiliza la función odbc_free_result($result).

Para cerrar la conexión con la base de datos se utiliza la función odbc_close($db).

Contar registros

Aunque existe una función odbc_num_rows($result) que devuelve el número de filas devueltas por una consulta, esta función no funciona con MS Access, por lo que para averiguar el número de filas es necesario realizar una consulta especial.

El ejemplo siguiente muestra cómo contar los registros de una tabla ('db1' es el nombre de la conexión odbc, 'gente' es el nombre de la tabla):

<?php $db = odbc_connect('db1','',''); if (!$db) { exit('Error en la conexión a la base de datos'); } else { $consulta = "SELECT COUNT(*) as numero FROM gente"; $result = odbc_exec($db, $consulta); if (!$result) { exit("Error en la consulta"); } else { $valor = odbc_fetch_array($result); print "<p>Hay $valor[numero] personas en la agenda.</p>"; } } ?> MS Access y PHP $db_connection = new COM("ADODB.Connection"); $db_connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=". realpath("G:/regsistema.mdb") ." ;UID=;PWD=1234;DefaultDir=". realpath("G:/regsistema.mdb"); $db_connection->open($db_connstr); $rs = $db_connection->execute("SELECT * FROM mfr"); $chacho = $rs->Fields("iam"); echo $chacho; $rs->Close(); $db_connection->Close();

Page 211: PHP 5 TOTAL

Exportar datos de Access 2000 a MySQL Liga: http://www.desarrolloweb.com/articulos/867.php Explicamos una manera práctica de migrar datos de una base de datos Access a un servidor de datos MySQL. No es de extrañar que hayamos comenzado a hacer nuestros pinitos en la web sirviéndonos de una base de datos sencilla como Access. Tampoco es de extrañar que, llegado el momento, pasemos a cosas más serias y nos pasemos a un servidor de datos como MySQL. Aquí os mostramos una manera bastante práctica de migrar los datos de la una a la otra.

Referencia: Para realizar esta tarea es necesario que hayamos descargado el driver ODBC y lo hayamos instalado en nuestro sistema Windows. Esta labor se puede conocer en un artículo de DesarrolloWeb.com: Instalar el driver ODBC para MySQL.

Para exportar una tabla a Mysql, hay que abrir la base de datos y seleccionar la tabla. Después, hacer clic sobre Archivo->Exportar. En la pantalla de exportar, en la opción Guardar como tipo, seleccionar ODBC databases(). Una vez se ha hecho esto, aparece una ventana que nos pregunta el nombre que le queremos dar a la tabla en Mysql, por defecto aparece el mismo.

Haz clic sobre "Aceptar", y aparecerá la pantalla en la que se pide que selecciones el origen de datos ODBC:

Nota: pudiera ser en algún caso que los tipos de los datos de la base en los sistemas MySQL y Access no sean totalmente compatibles y se produzca alguna anomalia al exportarlos. Realmente es una posibilidad que pensamos, aunque en las pruebas que hemos realizado no hemos visto ningún tipo de problema, bien es cierto que los campos que hemos trabajado no eran muy raros.

Page 212: PHP 5 TOTAL

Seleccionar origen de datos de equipo, y dentro de esta el nombre de la fuente de datos que hemos creado anteriormente. Una vez la has seleccionado y has hecho clic sobre "Aceptar", aparecerá la pantalla de configuración del driver por si deseas marcar para esta acción en concreto algunas de las opciones de configuración que aparecen en el driver ODBC. Si no deseas marcar ninguna, haz clic sobre "OK" y los datos comenzarán a exportarse.

Nota: si estamos exportando los datos hacia o desde un servidor de bases de datos alojado en algún proveedor de Hosting, tenemos que tener en cuenta que estos no siempre incluyen en su paquete básico el acceso remoto al servidor de base de datos, o requiere de un aviso explicito por parte del cliente para su configuración.

Referencia: si deseamos realizar una migración de datos en el otro sentido, es decir, desde MySQL hacia Access, será muy indicado leer otro artículo en DesarrolloWeb que explica el proceso detalladamente. Exportar datos de MySQL a Microsoft Access 2000.

Exportar datos de MySQL a Microsoft Access 2000 Liga: http://www.desarrolloweb.com/articulos/865.php Os explicamos cómo recuperar información almacenada en un servidor de datos MySQL hacia una base Access 2000. Por Carlos Luis Cuenca Publicado: 24/8/02 Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright. Migrar datos de una base de datos a otra es algo a lo que muchos de nosotros hemos tenido que confrontarnos en algún momento. A continuación os explicamos cómo

Page 213: PHP 5 TOTAL

recuperar información almacenada en un servidor de datos Mysql hacia una base Access 2000.

Referencia: Para realizar esta tarea es necesario que hayamos descargado el driver ODBC y lo hayamos instalado en nuestro sistema Windows. Esta labor se puede conocer en un artículo de DesarrolloWeb.com: Instalar el driver ODBC para MySQL.

Para importar una tabla de Mysql a Microsoft Access, desde Access, y con la base de datos en la que se quieren importar los datos abierta, seleccionar el menu Archivo->Obtener datos Externos->Importar. En la pantalla de Importar datos, en la opcion Tipo de archivo seleccionar ODBC databases().

Seleccionar origen de datos de equipo, y dentro de esta, el nombre de la fuente de datos que hemos creado anteriormente. Una vez la has seleccionado, y has hecho clic sobre "Aceptar", aparecerá la pantalla de configuración del driver por si deseas marcar para esta acción en concreto, algunas de las opciones de configuración que aparecen en el driver ODBC, si no deseas marcar ninguna, clic sobre "OK".

Nota: pudiera ser en algún caso que los tipos de los datos de la base en los sistemas MySQL y Access no sean totalmente compatibles y se produzca alguna anomalia al exportarlos. Realmente es una posibilidad que pensamos, aunque en las pruebas que hemos realizado no hemos visto ningún tipo de problema, bien es cierto que los campos que hemos trabajado no eran muy raros.

Aparecerá una ventana donde pregunta qué tabla de Mysql se desea exportar a Access:

Page 214: PHP 5 TOTAL

Selecciona la tabla , y haz clic sobre "Aceptar"

Nota: si estamos exportando los datos hacia o desde un servidor de bases de datos alojado en algún proveedor de Hosting, tenemos que tener en cuenta que estos no siempre incluyen en su paquete básico el acceso remoto al servidor de base de datos, o requiere de un aviso explicito por parte del cliente para su configuración.

Referencia: si deseamos realizar una migración de datos en el otro sentido, es decir, desde Access hacia MySQL, será muy indicado leer otro artículo en DesarrolloWeb que explica el proceso detalladamente. Exportar datos de Access 2000 a MySQL.

Instalar el driver ODBC para conectar con una base de datos MySQL Instrucciones para instalar el driver ODBC necesario para conectar con una base de datos MySQL desde un sistema Microsoft Windows. Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright. Instalar este driver sirve para que desde un sistema Microsoft Windows se pueda acceder a una base de datos MySQL. Las aplicaciones son variadas, por ejemplo podemos utilizarlo para crear un DSN asociado a una base de datos MySQL, de modo que nuestras páginas ASP podrían acceder a dicha base de datos. Otra aplicación es acceder desde Access a la base de datos MySQL y exportar o importar datos (migrar los datos desde Access a MySQL y desde MySQL a Access), incluso para crear un back-end de nuestra base MySQL en interfaz Access.

Primero hay que descargar la última versión de Myodbc de la página de Mysql: http://www.mysql.com/products/connector/odbc/

Nota: Puede que nuestro sistema tenga que actualizarse. En el ordenador que tiene el sistema Windows XX y Access 2000 habría que actualizar a la versión 6 de Microsoft Jet: http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q239114&

Cuando ya tenemos todo, instalamos la actualización de Microsoft Jet, y descomprimimos e instalamos el driver OBDC de Mysql. Cuando pregunta en la pantalla de “Data Sources” haz clic en “Close” para terminar. Una vez se ha instalado el driver ODBC, accede al panel de control de OBDC de 32 Bits (Botón Inicio-> Configuración-> Panel de control-> Fuentes de datos ODBC 32

Page 215: PHP 5 TOTAL

bits). En este punto, tendrás que elegir si quieres utilizar el driver para un solo usuario (DSN de usuario), o para cualquier usuario del ordenador (DSN de Sistema). Una vez hayas elegido uno, haz clic en el botón de “Agregar” para añadir una nueva fuente de datos y a continuación, selecciona el driver de Mysql. Aparecerá la siguiente pantalla:

En ella tendrás que rellenar los siguientes campos: Windows DSN name : Nombre de la fuente de datos que estará disponible desde Windows. Mysql host (name or IP) : Nombre o dirección IP del ordenador donde se encuentra instalado el servidor Mysql. Mysql Database Name : Nombre de la base de datos con la que se trabajará desde la fuente de datos User : Nombre de usuario con el que se accederá al servidor de bases de datos. Password : Contraseña del usuario. Port : Sirve para especificar el puerto en el que se encuentra el servidor Mysql, hay que poner un valor en caso de que no se esté utilizando el predeterminado, que es el 3306. Una vez están estas opciones configuradas, se puede hacer clic en "OK" para cerrar las ventanas.

Page 216: PHP 5 TOTAL

Guardar y extraer imágenes en MySQL Liga: http://www.programacion.com/bbdd/articulo/php_imagenesmysql/

Introducción

¿Quien se podría imaginar el guardar imágenes en una Base de Datos? Al principio ni me pasaba por la cabeza, hasta que ya vas conociendo las herramientas y con el tiempo surgen nuevas ideas y surge la inquietud. ¿Se podrán guardar imágenes en una Base de Datos? La respuesta es que sí.

Requerimientos

• PHP >= 3.0.16 • MySQL • Habilitar la extensión en PHP sobre GD

Creación de Base de datos y Tabla

Vamos a comenzar creando una Base de Datos, en nuestro caso se llama bd_banners y dentro de esta creamos una tabla (en nuestro caso se llama tbl_Banner) con los campos;

• Id_banner (Llave, autonumérico) • Nombre (Texto) • Descripcion (Texto) • Imagen (Blob)

Conectarnos a la BD

Ahora simplemente nos conectamos a MySQL y seleccionamos nuestra Base de Datos bd_banners.

$link = mysql_connect('localhost', 'root', 'password'); if (!$link) die('Error al conectarse con MySQL: ' . mysql_error().' <br>Número del error: '.mysql_errno()); if (! @mysql_select_db("db_AdMX",$link)){ echo "No se pudo conectar correctamente con la Base de datos"; exit(); }

Almacenar imagen en la BD

Antes de almacenar la imágen en la BD, debemos de procesarla para llegar a convertirla en datos binarios.

$image = imagecreatefromgif('imagen.gif'); ob_start(); imagegif($image);

Page 217: PHP 5 TOTAL

$jpg = ob_get_contents(); ob_end_clean(); imagecreatefromgif

Crear una nueva imagen a partir de un archivo o URL. ob_start

Inicia el almacenamiento en el búfer de salida. imagegif

Producir la salida de una imagen al navegador o a un archivo. ob_get_contents

Devolver el contenido del búfer de salida. ob_end_clean

Limpia el búfer de salida y termina el almacenamiento en el búfer de salida.

NOTA: En este ejemplo se guarda una imagen tipo GIF, por eso se utilizan las funciones imagecreateformgif e imagegif. Si se desea almacenar una imágen tipo JPEG, hay que utilizar las funciones imagecreatefromjpeg e imagejpeg. Asi solamente se cambia el tipo de imagen en las funciones. Para ver los tipos de imágenes que soporta PHP+GD

Ahora sí que vamos a almacenarla; para esto convertimos la información de la imagen en sql-safe y simplemente hacemos una consulta para guardarla.

$jpg = str_replace('##','\#\#',mysql_escape_string($jpg)); $result = mysql_query("INSERT INTO tbl_Banner SET Imagen='$jpg'");

Extraer la imagen de la BD y mostrarla en el navega dor

Ahora vamos a extraer la imagen mediante un simple SELECT y la vamos a mostrar en el navegador.

$result = mysql_query("SELECT Imagen FROM tbl_Banner WHERE Id_imagen=11"); $result_array = mysql_fetch_array($result); header("Content-Type: image/gif"); echo $result_array[0];

Simplemente con esto guardamos la imágen en una variable y antes de mostrarla le decimos al navegador que el contenido a mostrar es una imagen GIF. Si se va a mostrar imágenes JPEG hay que cambiar image/gif por image/jpeg y asi para los diferentes formatos.

Galería de imágenes en PHP y MySQL, desde cero

Liga: http://foros.cristalab.com/galeria-de-imagenes-en-php-y-mysql-desde-cero-t46412/

Les cuento que hace poco empecé con PHP y mi primer proyecto fue una galería de imágenes (creo que es el primer proyecto de todos los que empiezan con PHP jeje). Navegué por la red buscando info de acá y de allá, y finalmente termine la galería, y ha llegado el momento de compartirla con quienes recién empiezan en el mundo de PHP, para que no tengan que andar dando vueltas por la red de un lado para otro sin encontrar lo que buscan.

Page 218: PHP 5 TOTAL

Bueno, empecemos. Quiero aclarar que esta galería la estoy haciendo con Bases de Datos MySQL, y que cualquiera que la haga tiene que tener instalado un servidor en su máquina como Apache.

Primera parte: Creación de las bases de datos

Lo primero que tenemos que hacer es crear nuestras bases de datos MySQL. Para esto la mejor forma es entrando desde el PHPMyAdmin (Generalmente http://localhost/phpmyadmin), les va a pedir que ingresen el usuario y la contraseña, yo uso root, pero si alguien tiene miedo de mandarse alguna "cagada", puede crear algún otro usuario, que tenga permisos de edición solamente en la base de datos que vamos a utilizar. Bueno, una vez que entramos al PHPMyAdmin, lo primero que hacemos es crear una base de datos con un nombre, en este caso se va a llamar galería. El siguiente paso es crear las tablas que contienen la información de las imágenes, categorías, etc. para esto nos fijamos en donde dice Crear nueva tabla en la base de datos galería, y creamos nuestra primer tabla que se va a llamar imágenes, y le decimos que va a contener 5 campos. Damos aceptar y nos va a aparecer un formulario con filas y columnas en donde debemos introducir los campos que va a contener nuestra tabla, y vamos a poner lo siguiente: En la primera fila donde dice campo vamos a escribir id (siempre respetando mayúsculas/minúsculas, y sin espacios ni acentos), en tipo vamos a elegir INT (para indicarle que los valores de ese campo van a ser un valor entero), en longitud/valores vamos a poner la cantidad de cifras que va a llevar el id yo le puse 5, pero si alguien tiene pensado postear millones de imágenes le recomiendo que le ponga un poco mas como 10 o 20, luego de esto vamos donde dice extra y le ponemos el valor auto_increment , para que vaya aumentando solo a medida que se va creando registros, y hacemos click en el icono que tiene una llavecita amarilla para indicarle que es la "primary key". el resto de los campos van a ser así:

Código :

CAMPO | TIPO | LONGITUD nombre - VARCHAR - 50 descripcion - TEXT fecha - VARCHAR - 30 imagen - LONGBLOB Y cuando terminen le dan click al botón Grabar que está en la parte inferior (más adelante le voy a ir agregando categorías y subcategorías. Primero empecemos con lo simple. Bueno, aca ya tenemos la tabla que va a contener las imágenes que iremos subiendo con PHP. El siguiente paso es crear el archivo que va a subir las imágenes.

Page 219: PHP 5 TOTAL

Segunda Parte: crear los archivos

El primer archivo que crearemos lo llamaremos conectar.php. Este archivo lo único que hará es conectarse con la base de datos, para poder ver, modificar, crear, o eliminar registros: el archivo sera algo como esto:

Código :

<?php $server='localhost'; $user='root'; $pass=' "[i]aca va la contraseña que ustedes le hayan puesto sin las comillas[/i]" '; $db='galeria'; $link = mysql_connect($server,$user,$pass); mysql_select_db($db,$link); ?> este archivo lo usaremos en todo el resto de los archivos que creemos de aquí en adelante, cada vez que necesitemos conectarnos a la base de datos. El siguiente archivo que vamos a crear es el que va a subir las imágenes a la base de datos, y este es un poco mas complejo, lo vamos a llamar agregar.php. Empezaremos creando el formulario HTML:

Código :

<form action="agregar.php" method="post" enctype="multipart/form-data" name="form1"> Nombre:<input type="text" name="nombre"> <br> Descripcion: <input type="text" name="descripcion"> <br> Imagen: <input type="file" name="imagen"><br> <input type="submit" name="Submit" value="Enviar"> </form> lo que vamos a hacer ahora es el código PHP que va a ir en el mismo archivo en el que creamos el formularios, entonces vamos a crear una instrucción if que va a verificar si se a apretado el botón enviar en el formulario

Código :

<? if ($_POST['Submit']){ } ?> Ahora lo que tenemos que hacer es poner el código que va a subir la información a las

Page 220: PHP 5 TOTAL

base de datos, dentro de la instrucción if(lo hacemos dentro de la instrucción if para que solamente se ejecute cuando pulsamos el botón Enviar) Dentro de la instrucción if lo primero que hacemos es incluir el archivo conectar.php con la siguiente instrucción:

Código :

include('conectar.php'); Ahora que ya estamos conectados con la base de datos vamos a declarar algunas variables:

Código :

$img_name=$_FILES['imagen']['name'];

Con esto le decimos que guarde el nombre de la imagen en la variable $img_name... Para que funcione, tienen que crear una carpeta dentro de la misma carpeta de la galería que es en donde se van a guardar la imágenes, en este caso la vamos a llamar "fotos", para no confundirnos con la base de datos.

Imagen en base de datos Liga: http://www.programacionweb.net/articulos/articulo/?num=76 Vamos a ver como podemos guardar una imagen en un campo LONGBLOB de nuestra base de datos MySQL y luego mostrarla al visitante de nuestra página sin que la imagen se encuentre ya en nuestro servidor, si quereis podeis leer tambien una version mejorada de este artículo escrita por Explicamos los pasos a seguir para crear la base de datos en MySQL Por Rubén Alvarez Atención: Contenido exclusivo de DesarrolloWeb.com. No reproducir. Copyright.

Antes de abordar los scripts de nuestro sitio, es importante crear la base de datos (BD) que va a ser utilizada por los mismos. Hemos elegido una base de datos MySQL, entre otras razones, porque se trata del tipo de base más corrientemente utilizado en combinación con PHP. Por supuesto, podríamos haber utilizado cualquier otra base para la cual PHP tenga funciones o simplemente crear un DSN y emplear las funciones para ODBC disponibles en PHP. Pensamos que el hecho de programar en este lenguaje lleva inherente la necesidad de conocer mínimamente el funcionamiento de MySQL y que la utilización de cualquier otra BD o método de conexión no conlleva cambios significativos en los scripts que abordaremos. Veremos pues el caso particular de MySQL y dejamos a vuestra cuenta

Page 221: PHP 5 TOTAL

aplicar lo visto para cualquier otra base. En capítulos de otros manuales hemos explicado la instalación y utilización de MySQL y la sintaxis para la creación de tablas. En este capítulo nos limitaremos a describir paso a paso la creación de la base postal sin hacer hincapié en el significado de los comandos utilizados. Pasemos pues a describir uno a uno los pasos a seguir: 1.-Creación de la base de datos Una vez dentro de MySQL, el primer paso es crear la base de datos:

Create database postal;

2.-Creación de las tablas Para la creación de la tabla imagenes, donde almacenaremos los gráficos de las postales, generaremos dos campos: id_imagen, que es el identificador del grafico, específico para cada uno y cuyo valor corresponde también con el nombre del archivo gif. El otro campo, tipo, define el objeto de la postal (cumpleaños, Navidades o San Valentín). La forma más simple de crear esta tabla sería:

Create Table imagenes ( id_imagen int(2), tipo varchar(15) );

La siguiente tabla a crear, postal, debe guardar toda una serie de datos necesarios para hacer llegar la postal al destinatario y hacer que el remitente reciba la confirmación de recepción. Veremos cómo actúa cada uno de esos datos en el script más adelante. Por ahora nos limitaremos a describir la sintaxis de la creación:

Create Table postal ( id_postal int(5), texto varchar(255), email_destinatario varchar(50), nombre_destinatario varchar(50), email_remitente varchar(50), nombre_remitente varchar(50), id_imagen int(2), avisar char(7) );

Para una aplicación más compleja deberíamos definir además las claves y considerar más detenidamente el tipo de campo a definir. Aconsejamos leer los capítulos del tutorial de SQL donde podréis consejos para mejorar las prestaciones de las tablas.

Page 222: PHP 5 TOTAL

3.-Relleno de la tabla imagenes con los gráficos de muestra Para rellenar rápidamente la tabla en un primer momento, sin necesidad de recurrir a sentencias SQL tipo Insert, podemos crear un archivo de texto con los registros separados por líneas y los valores de campo, puestos en el buen orden, separados por tabuladores. En el pack de descarga encontraréis el archivo texto imagenes ya preparado. Lo único que tenéis que hacer es colocar el archivo en el directorio bin de MySQL y ejecutar la siguiente orden en la base de datos:

Load data local infile "imagenes.txt" into table imagenes;

Con esto tendremos llena la tabla imagenes. Para comprobarlo teclead:

select * from imagenes;

Veréis como aparece en pantalla el contenido de la tabla que obviamente corresponde al del archivo texto. 4.-Creación del directorio virtual en el servidor Llegados a este punto, queda extraer los archivos restantes del pack a un directorio que deberá ser registrado en el servidor como directorio virtual tal y como hemos explicado para el caso del PWS.