Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PHP 5 Total
PHP 5 Total
Liga: http://programacionfacil.com/php/start
1.- INTRODUCCION
3.- VARIABLES
9.- APLICACIONES
1.- INTRODUCCION
4.- INSTRUCCION IF
7.- SELECT
8.- CHECKBOX
9.- RADIOBUTTON
1.- INTRODUCCION
1.- PROCEDIMIENTOS
2.- PARAMETROS
4.- FUNCIONES
1.- INTRODUCCION
12.- GRAFICOS
9.- GRAFICOS
1.- INTRODUCCION
3.- TABLAS
10.- FILTROS
12.- BAJAS
APENDICE: TELNET
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 importante cuando se pretende
construir programas o aplicaciones que deban compartirse o usarse por muchas
pc's conectadas a internet, desgraciadamente como factor externo que es, no
esta bajo control de la empresa o del programador.
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.
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).
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.
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.
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.
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)
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)
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?
22.-Calcular la normal estandar(z) dados los datos por el usuario: X=dato, ƒÊ=media,
d=desviacion. Formula (Z = X-M / d)
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.?
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?
39.-Calcule la frecuencia de una onda que circula con un tiempo t. Formula (F=1/t)
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)
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.
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.
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.
Para simbolizar y usar una variable arreglo en un programa en php, se puede usar
cualquiera de los dos metodos siguientes:
$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.
$arreglo=array(10,20,30,etc);
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.
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
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
$alfa = 23 % 4;
// area de despliegue
Otro ejemplo;
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;
// variables
$base=5;
$exponente=3;
// area de operaciones
// Despliegue
Ejemplo:
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
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.
<HTML>
</FORM></HTML>
<?php
if ($OK == "evento1") {
$area = ($base * $altura) / 2;
// formateando la salida
$area=number_format($area,4);
};
?>
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
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 submit 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 submit 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
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.
“Button, Submit, Reset, CheckBox, Radio, Password, Text, TextArea, Select, Hidden”
Control “CheckBox”.
Control “Radio”.
Control “Password”.
Control “Select”.
Control “Hidden”.
FUNCIONES MATEMATICAS
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.
a)
desplegar “rico”
si no
desplegar “pobre”
fin-si
b)
si sexo = 'm'
imprime mujer
si no
imprime hombre
fin-si
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.
Una condicion simple se define como el conjunto de variables y/o constantes unidas
por los llamados operadores relacionales.
Operador Significado
== Igual que
> Mayor que
< Menor que
>= Mayor o igual que
⇐ Menor o igual que
!= o <> No es igual que o es diferente que
$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
if (condicion)
else
Ejemplo:
PROG2.PHP
<HTML>
</FORM></HTML>
<?php
if ($OK == "evento1") {
// ocurrrio el evento1
{ $RESULTADO = "rico";
else
{ $RESULTADO = "pobre";
};
?>
CORRIDA:
TAREAS PHP MYSQL
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.
Una condicion compuesta se define como dos o mas condiciones simples unidas por
los llamados operadores logicos.
Ejemplo:
Notas:
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.
1.- Cualquiera que san la cantidad de datos procesados, siempre caera en uno de
estos cuatro posibles casos.
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;
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.
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
if(($sueldo> 500)%%($departamento=="VENTAS") )
else
• Recordar, cada condicion simple debe estar entre parentesis y las dos
condiciones simples tambien deben estar entre parentesis.
• Observar donde se deben incluir los puntos y comas y donde no se deben
incluir los puntos y comas.
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
break;
break;
break; ………………
default: instruccion(es);
};
Prog3.php
<HTML>
</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':
break;
};
};
?>
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 ( ').
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:
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.
Prog4.php
<HTML>
<B>MUNICIPIOS</B>
<SELECT NAME=muni>
<OPTION>ENSENADA
<OPTION>TECATE
<OPTION>TIJUANA
<OPTION>MEXICALI
</SELECT>
</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:
Notas:
1.- Arreglar un par de los programas anteriores agregandole este control a los que se
puedan.
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
Ejemplos de uso:
Codigo prog5.php
<HTML>
<b>sexo:</b><br>
</FORM></HTML>
<?php
if ($OK == "evento1") {
};
?>
Notas:
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:
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.
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)
Codigo prog6.php
<HTML>
sexo:<br>
carrera:<br>
</FORM></HTML>
<?php
if ($OK == "evento1") {
};
?>
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
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:
y VALUEs = 3, -5, 10
{ instruccion(es); };
ejemplo:
for($x=1;$x⇐10;$x=$x+1)
EJEMPLO
http:\\programacionfacil.com\tusitio\prog7.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "evento1") {
};
?>
corrida:
1.- El ciclo comienza en uno y se incrementa de uno en uno este es el caso mas
general.
for(x=5;x⇐15;x=x+1){ etc.};
4.- Los incrementos tambien pueden ser diferentes al de uno en uno, ej.;
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.
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–
Su formato general es :
while(condicion)
};
prog8.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "evento1") {
$x=1;
while ( $x <=5)
$x++;
};
};
?>
corrida
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.
Su formato general es :
do {
} while (condicion);
prog9.php
<HTML>
<?php
if ($OK == "evento1") {
$x=1;
do
$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.
Las variables manejados hasta ahora no pueden ayudar a resolver este problema.
No confundir esto con el tipo de dato o rango de datos que una variable tiene la
capacidad de almacenar.
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, elemento 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.
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
(MILES DE $)
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.
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.
Para declarar y usar una variable arreglo en un programa en php, se puede usar
cualquiera de los dos metodos siguientes:
$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.
$arreglo=array(10,20,30,etc);
Prog10.php
<?php
$edad=array();
session_register("edad");
session_register("indice");
if ($OK == "INSERTAR") {
$indice=$indice+0;
$edad[$indice]=$EDAD;
$indice++;
};
if ($OK == "DESPLEGAR") {
print_r($edad);
session_unregister($edad);
};
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.
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:
6.- Se debera usar siempre un ciclo for con una variable de control llamada renglon,
misma que tambien se usa como indice del arreglo.
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.
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,
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);
echo "<br>".array_sum($lista1)."<br>";
echo count($lista3)."<br>";
asort($lista3);
// imprimendo array
print_r($lista3);
arsort($lista3);
print_r($lista3);
};
echo "</FORM>";
?>
corrida:
Table of Contents
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.
$TABLA=array(array());
Observar que en general php considera una tabla como un arreglo que contiene
arreglos.
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;
$c++;
if($c==3) {$r++;$c=0;};
};
if ($OK == "DESPLEGAR") {
echo "<br>"; };
echo "\n\n";
foreach($edad as $renglon)
session_unregister($edad);
};
echo "</FORM>";
?>
Corrida:
Notas:
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.
a)
b)
$lista[1] = 'pedro';
$lista[2] = 'jose';
$lista[3] = 'maria';
$lista[] = 'juan';
c)
$lista[] = 'juan';
$lista[] = 'pedro';
$lista[] = 'jose';
FOR R = 0 TO 3
FOR C = 0 TO 2
NEXT C
PROMRENG(R) = TOTRENG(R)/3
NEXT R
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
Alumno
Clave……………………………..valor
matricula 99210200
nombre Juan
carrera informatica
edad 18
Prog13.php
<?php
if ($OK == "DESPLEGAR") {
$alumno=array('numcontrol'=>9921099,'nombre'=>'juan perez','edad'=>20);
$lista = array(1=>20,2=>30,3=>40);
$alumno['edad']=$alumno['edad'] * 3.1416;
$lista[2]=$lista[2] * 5;
// desplegando
print "<br><br>";
print"<br><br>";
print_r($alumno);
};
echo "</FORM>";
?>
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.
1.- Construir una aplicacion donde prueben algunas de las funciones de listas
asociativas.
Un camino para dividir un gran programa en partes mas pequenas es el uso de los
llamados procedimientos.
Los procedimientos se podran escribir despues del cuerpo principal del programa
utilizando el formato:
function NomProc{instrucciones;};
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") {
proc1(); };
function proc1(){
$x = 50;
};
echo "</FORM>";
?>
Corrida:
Como se observa un procedimiento puede ser un programa completo.
Construir un programa de :
d) Fin de menu.
Estos valores que se pasan del cuerpo principal del programa al procedimiento se
llaman parametros.
Function nomproc($par1,$par2..)
cuerpo de instrucciones;
}
Observar donde y como se declaran los parametros dentro de el procedimiento.
prog15.php
<?php
if ($OK == "DESPLEGAR") {
// mandando parametros
$x=500;
};
function proc1($x1,$a,$b){
$x = $x1 * $b;
};
echo "</FORM>";
?>
corrida
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.
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.
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.
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") {
global $a;
proc1( $a * 5 ); };
function proc1($c){
// redeclarndo
$x = $a + $c;
};
echo "</FORM>";
?>
corrida:
TAREAS PROGRAMACION LINUX PHP, usando todos los procedimientos adecuados
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.
cuerpo de instrucciones;
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")
{
$x=sumar(5,10);
$x=$x +1;
echo $x;
};
function sumar($a,$b)
return $a + $b;
};
echo "</FORM>";
?>
corrida
{ $return 10; }
else
{ $return 20; }
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.
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.
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.
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.
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>";
?>
corrida:
Hacer los programas que vienen en el tema de variables globales, pero usando los dos
metodos de variables de sesion.
Problema A:
Problema B:
Para resolver este problema php provee de los arreglos asociativos visto en la unidad
de arreglos.
Ej:
alumno
nombre → campo1
direccion → campo2
edad → campo3
etc
Prog13.php (ya visto en unidad de arreglos)
<?php
if ($OK == "DESPLEGAR") {
$alumno=array('numcontrol'=>9921099,'nombre'=>'juan perez','edad'=>20);
$lista = array(1=>20,2=>30,3=>40);
$alumno['edad']=$alumno['edad'] * 3.1416;
$lista[2]=$lista[2] * 5;
// desplegando
print "<br><br>";
print"<br><br>";
print_r($alumno);
};
echo "</FORM>";
?>
Las operaciones mas elementales con los campos de una estructura incluyen captura
e inicializacion.
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.
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.
LEER: Operacion consistente en sacar los datos del archivo en disco y mandarlos o
cargar la variable respectiva
Archivos Directos o Random.- Para este caso si se puede acceder o leer un renglon n
cualquiera.
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.
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.
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.
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
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
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
Prog19.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "insertar") {
fputs($archivo, $CLAVE."\n");
fputs($archivo, $NOMBRE."\n");
fputs($archivo, $EDAD."\n");
fputs($archivo, $ESTATURA."\n");
//cerrando archivo
fclose($archivo);
//avisando
?>
Corrida:
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.
“r+” —> Lectura y escritura, ya debe existir el archivo.
“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”);
!!!!O van a tener que aprender a construir un archivo de claves que solo tenga la ultima
clave almacenada!!!!!!
fclose($archdisco);
Prog20.php
<HTML>
<FORM ACTION=prog20.php METHOD=post>
</FORM></HTML>
<?php
if ($OK == "lectura") {
// abriendo archivo
$archivo=fopen('alumnos.dat','a+');
// leyendo el archivo
while (!feof($archivo)){
$clave=fgets($archivo);
$nombre=fgets($archivo);
$edad=fgets($archivo);
$estatura=fgets($archivo);
echo"<tr>";
echo "<td>".$clave."</td>";
echo "<td>".$nombre."</td>";
echo "<td>".$edad."</td>";
echo "<td>".$estatura."</td>";
echo"</tr>";
};
echo "</table>";
fclose($archivo);
};
?>
corrida:
No olvidar el FCLOSE().
Prog21.php
<HTML>
</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);
$estatura=fgets($archivo);
settype($clave,"integer");
// settype($CLAVE,"integer");
if ( $CLAVE == $clave){
echo "<td>".$clave."</td>";
echo "<td>".$nombre."</td>";
echo "<td>".$edad."</td>";
echo "<td>".$estatura."</td>";
echo"</tr>";};
};
echo "</table>";
fclose($archivo);
};
?>
corrida:
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.
Prog22.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "filtro") {
// abriendo archivo
$archivo=fopen('alumnos.dat','a+');
// leyendo el archivo
while (!feof($archivo)){
$clave=fgets($archivo);
$nombre=fgets($archivo);
$edad=fgets($archivo);
$estatura=fgets($archivo);
settype($estatura,"float");
echo"<tr>";
echo "<td>".$clave."</td>";
echo "<td>".$nombre."</td>";
echo "<td>".$edad."</td>";
echo "<td>".$estatura."</td>";
echo"</tr>";};
};
echo "</table>";
fclose($archivo);
};
?>
corrida:
Como se observa es un problema y una solucion similar al tema anterior de
busquedas.
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.
Prog23.html
<HTML>
</FORM></HTML>
<?php
if ($OK == "baja") {
$archivo=fopen('alumnos.dat','a+');
while (!feof($archivo))
$clave=fgets($archivo);
$nombre=fgets($archivo);
$edad=fgets($archivo);
$estatura=fgets($archivo);
settype($clave,"integer");
fputs($archt, $clave."\n");
fputs($archt, $nombre);
fputs($archt, $edad);
fputs($archt, $estatura);
};
};
fclose($archivo);
fclose($archt);
unlink("alumnos.dat");
rename("temporal.dat","alumnos.dat");
// avisando
};
?>
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.
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,
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></HTML>
<?php
if ($OK == "meses") {
$archivo=fopen('alumnos.dat','a+');
$archt=fopen('temporal.dat','a+');
while (!feof($archivo))
$clave=fgets($archivo);
$nombre=fgets($archivo);
$edad=fgets($archivo);
$estatura=fgets($archivo);
// realizando la operacion
$edad=$edad * 12;
// cargando al archivo temporal
if ($clave !=0){
fputs($archt, $clave);
fputs($archt, $nombre);
fputs($archt, $edad."\n");
fputs($archt, $estatura);
};
};
fclose($archivo);
fclose($archt);
unlink("alumnos.dat");
rename("temporal.dat","alumnos.dat");
// avisando
};
?>
corrida:
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.
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.
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></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);
$estatura=fgets($archivo);
settype($clave,"integer");
settype($CLAVE,"integer");
if ( $CLAVE == $clave){
echo "</FORM>";
};
};
// cerrando archivo
fclose($archivo);
};
if ($OK == "editar") {
$archivo=fopen('alumnos.dat','a+');
$archt=fopen('temporal.dat','a+');
while (!feof($archivo))
$clave=fgets($archivo);
$nombre=fgets($archivo);
$edad=fgets($archivo);
$estatura=fgets($archivo);
settype($clave,"integer");
settype($CLAVE,"integer");
fputs($archt, $CLAVE."\n");
fputs($archt, $NOMBRE."\n");
fputs($archt, $EDAD."\n");
fputs($archt, $ESTATURA."\n");
fputs($archt, $clave."\n");
fputs($archt, $nombre);
fputs($archt, $edad);
fputs($archt, $estatura);
};
}; // fin while
fclose($archivo);
fclose($archt);
unlink("alumnos.dat");
// avisando
};
?>
corrida:
corrida prog20
TAREAS PROGRAMACION LINUX PHP
1.- Es un metodo sencillo, primero subir las imagenes ( de preferencia jpg) con un ftp
normal a tusitio y al folder public_html.
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></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);
$estatura=fgets($archivo);
$foto=fgets($archivo);
settype($clave,"integer");
// settype($CLAVE,"integer");
if ( $CLAVE == $clave){
echo"<tr>";
echo "<td>".$clave."</td>";
echo "<td>".$nombre."</td>";
echo "<td>".$edad."</td>";
echo "<td>".$estatura."</td>";
echo "<td><img src=".$foto."></td>";
echo"</tr>";};
};
echo "</table>";
fclose($archivo);
};
?>
corrida:
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.
Origen:
Prog27.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "insertar") {
// 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
};
?>
Corrida:
notas:
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
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.
$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().
fwrite($archivo,$registro,strlen($registro));
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.
Fclose($archivo);
Estos dos procesos son los casos mas comunes y frecuentes que se pueden realizar
con un archivo de disco.
Prog28.php
<HTML>
<?php
if ($OK == "consulta") {
$TR=47;$CR=filesize('datos.dat') / $TR;
$reg=fread($archivo,$TR);
// 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>"; };
};
echo "</table>";
fclose($archivo);
};
?>
corrida:
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.
Se usa fread(archivo, cantidad de bytes a leer) para cargar la variable que contendra
la informacion leida del archivo en disco.
Observar primero:
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.
Prog29.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "BUSCAR") {
$reg=fread($archivo,$TR);
// 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>"; };};
echo "</table>";
fclose($archivo);
};
?>
corrida:
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.
seek(apuntador, clave*tamanoregistro);
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.
Prog30.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "FILTRAR") {
$TR=47;$CR=filesize('datos.dat') / $TR;
$reg=fread($archivo,$TR);
echo"<tr>";
echo "<td>".$reg[clave]."</td>";
echo "<td>".$reg[nombre]."</td>";
echo "<td>".$reg[edad]."</td>";
echo "<td>".$reg[estatura]."</td>";
echo"</tr>"; };
};
echo "</table>";
fclose($archivo);
};
?>
corrida:
Como se observa es un problema y una solucion similar al tema anterior de
busquedas.
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.
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.
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></HTML>
<?php
if ($OK == "BAJA") {
$reg=fread($archivo,$TR);
$reg[bandera]="B";
$reg
=pack("IA30idA1",$reg[clave],$reg[nombre],$reg[edad],$reg[estatura],$reg[bandera]);
// regresando apuntador al principio del renglon
rewind($archivo);
// regrabando registro
fwrite($archivo,$reg,strlen($reg));
};
//cerrando archivo
fclose($archivo);
// avisando
};
?>
corrida:
Construir programa de eliminacion usando bajas logicas para los archivos construidos
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.
Prog32.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "EDAD+100") {
$TR=47;$CR=filesize('datos.dat') / $TR;
$reg=fread($archivo,$TR);
// realizando operacion
$reg[edad]=$reg[edad]+100;
$reg
=pack("IA30idA1",$reg[clave],$reg[nombre],$reg[edad],$reg[estatura],$reg[bandera]);
// regrabando registro
fwrite($archivo,$reg,strlen($reg));
};
//cerrando archivo
fclose($archivo);
// avisando
};
?>
corrida:
corrida prog28
como se observa la solucion es muy sencilla solo se ocupa:
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.
Para este proceso se ocupara una forma html y se ocuparan dos eventos, el
procedimiento a seguir es:
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>
<?php
if ($OK == "BUSCAR") {
$reg=fread($archivo,$TR);
echo "</FORM>";
};
//cerrando archivo
fclose($archivo);
};
if ($OK == "editar") {
$registro =pack("IA30idA1",$CLAVE,$NOMBRE,$EDAD,$ESTATURA,$bandera);
// colocandonos en posicion
// grabando
fwrite($archivo,$registro,strlen($registro));
};
//cerrando archivo
fclose($archivo);
//avisando
};
?>
Corrida:
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
TAREAS PHP MYSQL SUGERIDOS
1.- Es un metodo sencillo, primero subir las imagenes ( de preferencia jpg) con un ftp
normal a tusitio y al folder public_html.
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
Prog 34.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "BUSCAR") {
$reg=fread($archivo,$TR);
// 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>"; };};
echo "</table>";
fclose($archivo);
};
?>
corrida:
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.
1.- Variables Registros, que como ya se indico son variables que permiten almacenar
conjuntos de datos de diverso tipo.
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
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.1) Tablas, es una combinacion de las variables registro y de los archivos del modelo
anterior.
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.
Una Tabla simple, representa una unidad de informacion 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
• 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.
Cada elemento debe ser atomico es decir solo podra contener un y solo un
datum de informacion.
Tabla: Camisas
Tabla: Clientes
1.- PACIENTES
2.- PERROS
3.- PLUMAS
4.- MERCANCIAS
5.- PELICULAS
6.- MEDICINAS
7.- MAESTROS
8.- MATERIAS
9.- COMPUTADORAS
10.- BANCOS
El trabajo correcto con bases de datos relacionales se divide en dos grandes pasos o
etapas bien diferenciadas entre si:
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.
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.
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.
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 buen tutorial de SQL y vayan
aprendiendoselo.
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:
2.- Recordar que usuarios y passwords de mysql son diferentes que usuarios y
passwords de linux's.
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:
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):
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
6.- Ahora se cargan algunos renglones de prueba en la tabla con la instruccion sql(ya
leyeron el tutorial de sql);
7.- agregar uno dos o tres renglones para pruebas a la tabla, para finalizar revisar
como quedo cargada la tabla con la instruccion sql:
8.- Usar QUIT para terminar la sesion de mysql y usar EXIT para terminar la sesion del
putty.
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.
prog35.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "SELECT") {
mysql_select_db ("lsoto_mibase",$dbh);
// ejecutando el query
while($renglon = mysql_fetch_row($tabla1))
echo "<td>".$renglon[0]."</td>";
echo "<td>".$renglon[1]."</td>";
echo "<td>".$renglon[2]."</td>";
echo "<td>".$renglon[3]."</td>";
echo"</tr>";
};
echo "</table>";
};
?>
Corrida:
notas:
1.- revisar con cuidado el programa, proque como todo buen programa lleva incluida
mucha documentacion o explicacion.
4.- Se crea y carga una conneccion o enlace a el servidor mysql de bases de datos
con la instruccion:
$dbh un convencion en bases de datos, que siginifica database handle (alias a base
de datos)
mysql_select_db (“lsoto_mibase”,$dbh);
6.- Se crea una string $q, que contendra la instruccion SQL apropiada.
Observar que esta usando la variable $dbh que se cargo con la coneccion a la base de
datos.
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 $renglon['clave'],
$renglon['nombre']. Etc.
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.
Recordar que solo se esta usando lo minimo de cada instruccion sql, es conveniente
estudiar un tutorial de sql.
Prog36.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "INSERT") {
mysql_select_db ("lsoto_mibase",$dbh);
//construyendo insert
// ejecutando el query
//avisando
};
?>
Corrida:
notas:
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.
1.- construir muchos programas de inserccion en las tablas de las bases de datos que
tengan construidas
La solucion es sencilla, solo usar otra vez la instruccion select, con el siguiente
formato:
Codigo prog37.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "SELECT") {
mysql_select_db ("lsoto_mibase",$dbh);
// ejecutando el query
while($renglon = mysql_fetch_row($tabla1))
echo"<tr>";
echo "<td>".$renglon[0]."</td>";
echo "<td>".$renglon[1]."</td>";
echo "<td>".$renglon[2]."</td>";
echo "<td>".$renglon[3]."</td>";
echo"</tr>";
};
echo "</table>";
};
?>
Corrida:
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.
1.- hacer programas de busquedas( select ) para las bases y tablas que tengan
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.
Codigo prog38.php
<HTML>
<?php
if ($OK == "FILTRO") {
mysql_select_db ("lsoto_mibase",$dbh);
// ejecutando el query
while($renglon = mysql_fetch_row($tabla1))
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>";
};
?>
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:
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
Este es tambien un caso comun con elementos de una tabla, sin embargo es tambien
facil de resolver.
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
$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>
<?php
if ($OK == "EDAD+100") {
mysql_select_db ("lsoto_mibase",$dbh);
// ejecutando el query
// avisando
};
?>
corrida
corrida prog35.php
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.
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></HTML>
<?php
if ($OK == "DELETE") {
mysql_select_db ("lsoto_mibase",$dbh);
// ejecutando el query
// avisando
};
?>
corrida prog40.php
1.- construir este proceso para las tablas y bases de datos que tengan construidas.
TEMA 13: EDICION DE REGISTROS MYSQL UPDATE
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.
prog41.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "BUSCAR") {
mysql_select_db ("lsoto_mibase",$dbh);
echo "</FORM>";
};
if ($OK == "editar")
mysql_select_db ("lsoto_mibase",$dbh);
// ejecutando el query
// avisando
};
?>
corrida:
corrida:
corrida prog35.php
TAREAS PROGRAMACION MYSQL PHP
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 ejemplo
http://programacionfacil.com/tusitio/pato.jpg
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.
Prog42.php
<HTML>
</FORM></HTML>
<?php
if ($OK == "SELECT") {
mysql_select_db ("lsoto_mibase",$dbh);
// ejecutando el query
while($renglon = mysql_fetch_row($tabla1))
echo"<tr>";
echo "<td>".$renglon[0]."</td>";
echo "<td>".$renglon[1]."</td>";
echo "<td>".$renglon[2]."</td>";
echo "<td>".$renglon[3]."</td>";
echo"</tr>";
};
echo "</table>";
};
?>
corrida: prog42.php
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
Observar que no se pidio una sesion de telnet sino una session de SSH (esto es telnet
tambien pero con mayor seguridad).
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 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:
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/
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.
Paso 1:
Iniciamos abriendo nuestro ODBC Data Source Administrator, luego nos situamos en
la pestaña System DSN.
Paso 2:
Posicionados en la petaña System DSN agregaremos uno nuevo, seleccionando el
botón Add/Agregar.
Paso 3:
Paso 4:
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:
Luego de seleccionar nuestra base de datos, con todos los datos correctos,
seleccionamos el botón OK.
Paso 6:
Paso 7:
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="";
if (!$cid){
exit("<strong>Ya ocurrido un error tratando de conectarse con el origen de
datos.</strong>");
}
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/
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------
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.
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.
Código:
<?php
$s->drawLine(400, 0);
$s->drawLine(0, 400);
$s->drawLine(-400, 0);
$s->drawLine(0, -400);
?>
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
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);
?>
SWFBitmap
Para agregar un relleno de mapa de bits a una forma, usamos:
Código:
<?php
$f = $s->addFill(bitmap [, flags]);
?>
Código:
<?php
$b = new SWFBitmap(filename [, maskname]);
?>
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 ();
?>
Código:
<?php
$g->addEntry(ratio, r, g, b [,a]);
?>
Código:
<?php
$g = new SWFGradient ();
$g->addEntry(0, 0, 0, 0);
$g->addEntry(1.0, 0xff, 0xff, 0xff);
?>
Código:
<?php
$f = $s->addFill(gradient [, flags]);
?>
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);
?>
Código:
<?php
$f->rotateTo(deg);
?>
Código:
<?php
$f->scaleTo(xscale [, yscale]);
?>
Código:
<?php
$f->skewXTo(s);
$f->skewYTo(s);
?>
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.
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);
?>
Código:
<?php
$m->setRate(rate);
?>
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:
<?php
$m->nextFrame ();
?>
Código:
<?php
$i->moveTo(x,y);
?>
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);
?>
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]);
$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);
?>
Código:
<?php
$i->addColor(0xff, 0, 0);
$i->addColor(0, 0xff, 0);
?>
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);
$m->nextFrame();
$i->rotate(15);
}
$m->nextFrame ();
header('Content-type: application/x-shockwave-flash');
$m->output ();
El texto
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.
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"!);
?>
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.
Código:
<?php
$b = nuevo SWFButton ();
?>
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]-
>ADDSHAPE($T, SWFBUTTON_OVER | SWFBUTTON_UP | SWFBUTTON_DOWN);
$b[$i]-
>addAction(new SWFAction ("el getURL (' $url[$i] ', ' el popup')";),SWFBUTTON_MOU
SEUP);
}
?>
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');
?>
Código:
<?php
slideleftin($movie de la función, $shape)
{
$i = $movie->add($shape);
$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.
Código:
<?php
for($n=0; $nnextFrame ();<4; ++$n)
$m->
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.
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.
<?php
$s->drawLine(400, 0);
$s->drawLine(0, 400);
$s->drawLine(-400, 0);
$s->drawLine(0, -400);
?>
<?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.
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);
?>
<?php
$f = $s->addFill(bitmap [, flags]);
?>
<?php
$b = new SWFBitmap(filename [, maskname]);
?>
<?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 ();
?>
<?php
$g->addEntry(ratio, r, g, b [,a]);
?>
<?php
$g = new SWFGradient ();
$g->addEntry(0, 0, 0, 0);
$g->addEntry(1.0, 0xff, 0xff, 0xff);
?>
<?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:
<?php
$f->moveTo(x,y);
?>
<?php
$f->rotateTo(deg);
?>
<?php
$f->scaleTo(xscale [, yscale]);
?>
<?php
$f->skewXTo(s);
$f->skewYTo(s);
?>
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);
?>
Para fijar el color del fondo:
<?php
$m->setRate(rate);
?>
<?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 ();
?>
<?php
$i->moveTo(x,y);
?>
<?php
$i->move(x,y);
?>
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);
?>
<?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);
?>
<?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
<?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->nextFrame();
$i->rotate(15);
}
$m->nextFrame ();
header('Content-type: application/x-shockwave-flash');
$m->output ();
El texto
<?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
$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.
<?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"!);
?>
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.
<?php
$b = nuevo SWFButton ();
?>
<?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));
$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');
?>
<?php
slideleftin($movie de la función, $shape)
{
$i = $movie->add($shape);
$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.
<?php
for($n=0; $nnextFrame ();<4; ++$n)
$m->
SWFTools
SWFTools
Desarrollador
Rainer Böhme y Matthias
Kramm
Página oficial
Información general
Última 0.8.0
versión 21 de Enero,
estable 2007
Género Biblioteca
Solaris, Linux,
FreeBSD,
OpenBSD, HP-
S.O.
UX, MacOS X y
Windows
98/ME/2000/XP
Licencia GNU GPL
En
no
español
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>";
//pelicula:
$pelicula = new SWFMovie();
$pelicula->setDimension(500,500);
$pelicula->setRate(15);
$pelicula->setBackground(0,0,255);
</body>
</html>
<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#v
ersion=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_V
ersion=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>";
Ming Functions
Table of Contents
<?php
$info = getimagesize('flashfile.swf');
$w = $info[0];
$h = $info[1];
?>
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;
}
<?
$m = new SWFMovie();
$m->setBackground(0xFF, 0xFF, 0xFF);
$m->setDimension(320, 40);
function drawFont($f) {
$logo = new SWFShape();
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!
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.
/* 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";
?>
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 );
}
";
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
$converter=new images_to_swf($path,$frame_rate,$skip_rate);
//$converter->convert_images(70); //Use this if using non jpeg files or decreasing the
quality
class images_to_swf {
function images_to_swf($path,$frame_rate=30,$skip_rate=5) {
$this->path=$path;
$this->skip_rate=$skip_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)) {
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);
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);
// Set Font
$font = new SWFFont("test.fdb");
$text1 = new SWFText();
$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();
?>
Liga: http://www.desarrolloweb.com/articulos/321.php
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
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.
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.
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.
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.
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.
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.
$_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().
<?
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();
?>
<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.
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.
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.
<?
session_register ('contador');
?>
<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
Función Descripción
Session_id() Nos devuelve el identificador de la sesión
Da por abandonada la sesión eliminando variables e
Session_destroy()
identificador.
Session_unregister('variable') Abandona una variable sesión
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.
<? 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().
$_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.
<? session_start();
if (!isset($_SESSION["cuenta_paginas"])){
$_SESSION["cuenta_paginas"] = 1;
}else{
$_SESSION["cuenta_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.
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;
}
}
if ($item)
{
if ( isset( $itemsEnCesta[$item] ) )
{
$itemsEnCesta[$item]+=$cantidad;
}
else
{
$itemsEnCesta[$item]=$cantidad;
}
}
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:
<?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;
}
}
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>
<?php
session_start();
echo $_SESSION['usuario'];
?>
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.
Liga: http://www.programacionweb.net/articulos/articulo/?num=377
Sesiones en PHP
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
000 <?php
001 // Inicializamos sesion
002 session_start();
003 // Guardamos una variable
004 $_SESSION['nombre'] = 'Fernando Díaz';
005 ?>
Maximizar Seleccionar PHP
000 <?php
001 // Inicializamos sesion
002 session_start();
003 ?>
Maximizar Seleccionar PHP
000 <?php
001 // Inicializamos sesion
002 session_start();
003 // Comprovamos si existe la variable
004 if ( isset ( $_SESSION['nombre'] ) ) {
005 // Si existe
006 echo $_SESSION['nombre'];
007 } else {
008 // Si no existe
009 echo 'desconocido';
010 }
011 ?>
Maximizar Seleccionar PHP
000 <?php
001 // Inicializamos sesion
002 session_start();
003 // Borramos la variable
004 unset ( $_SESSION['nombre'] ) {
005 // Borramos toda la sesion
006 session_destroy();
007 ?>
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..).
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 )
Liga: http://dns.bdat.net/trucos/faqphp-v1/x942.html
Para poder usar variables de sesión lo primero que tenemos que hacer es iniciar la
sesión:
session_start();
Cuando register_globals=off, para registrar una variable de sesión tenemos que poner:
if (isset($_SESSION['variable_ de_sesion']))
else
$variable_de_sesion = "valor";
session_register("variable_de_sesion");
if (session_is_registered("variable_de_sesion"))
else
<?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>";
</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.
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()
Ejemplo:
$nombre = “Giss”;
Sessión_register(“nombre”);
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”);
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().
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:
Explicación:
Liga: http://www.original-design.es/tutoriales/funciones_en_sesiones_php.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:
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 tipo 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()
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”
Print(session_module_name(“users”));
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)
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;
?>
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.
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:
Un código completo de conexión con una base de datos Access podría ser el
siguiente:
Liga: http://www.mclibre.org/consultar/php/lecciones/php_db_access_1.html
MS Access en PHP
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":
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.
<?php
$db = odbc_connect('db1', '', '');
if (!$db) {
print "<p>Imposible conectarse con la base de datos.</p>";
exit();
}
?>
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
Una vez realizada la conexión a la base de datos, las operaciones se realizan a través
de consultas.
Volver al principio
Por escribir
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";
}
}
?>
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).
Contar registros
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
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.
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.
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.
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
recuperar información almacenada en un servidor de datos Mysql hacia una base
Access 2000.
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().
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:
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.
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:
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.
Guardar y extraer imágenes en MySQL
Liga: http://www.programacion.com/bbdd/articulo/php_imagenesmysql/
Introducción
Requerimientos
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;
Conectarnos a la BD
Almacenar imagen en la BD
$image = imagecreatefromgif('imagen.gif');
ob_start();
imagegif($image);
$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
$jpg = str_replace('##','\#\#',mysql_escape_string($jpg));
$result = mysql_query("INSERT INTO tbl_Banner SET Imagen='$jpg'");
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.
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.
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 :
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.
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 :
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
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)
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'];
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.
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.
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:
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.
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: