1. Taller esta creado con el objetivo de presentar temas comunes en
el manejo de PHP.
I. Con su grupo de trabajo investigue los siguientes puntos en PHP:
- Sintaxis de PHP
- Declaración y Definición de variables, tipos de variables y tipos de
datos
- Declaración de comentarios (línea y bloque)
- Manejo de operadores (aritméticos, comparación, lógicos)
- Manejo de Condicionales (if…else, switch…case)
- Manejo de bucles o ciclos (for, while, do…while, for…each)
- Presentación de datos (echo, print, printf… etc.)
- Manejo de Cadenas (strlen, Split, substr, strpos, str_replace … etc.)
- Declaración, manipulación de arreglos y arreglos asociativos
- Funciones de arreglos (array_key_exists, array_merge, count … etc.)
- Declaración de funciones
- Creación, uso y manejo de librerías
- Creación y Manejo de formularios (envío de datos)
- Uso de métodos GET y POST (recepción de datos)
- Uso e implementación de redireccionamiento, compresión, cache, cookies,
sesiones
-DESARROLLO-
Sintaxis de PHP
La sintaxis de PHP es muy similar a la de C o C++. Quizás lo más destacado ocurre a nivel
semántico: el tipado es muy poco estricto, es decir, cuando creamos una variable en ella
podemos almacenar el tipo de datos que queramos. Esto es muy flexible y cómodo para el
desarrollador, aunque los errores que se cometen pueden ser mucho más graves y difíciles de
corregir. Las posibilidades del interprete para detectar incompatibilidades entre variables se
reducen mucho y pueden ocurrir cosas extrañas en determinadas circunstancias si no tenemos
cuidado.
Declaración y Definición de Variables
La declaración y/o definición de variables se da en todos los lenguajes de programación.
JavaScript en su versión 1.3 ofrece un mecanismo para saber si una variable ha sido inicializada o
no; y esto lo consigue a través del valor Undefined. Este Undefined viene a decir, como resulta
de su traducción: “con valor sin definir o desconocido”, corre por nuestra cuenta el que le
asignemos un valor y tengamos control sobre esa variable. El objetivo al fin y al cabo es saber
cómo las hemos definido o declarado para después poder usarlas correctamente.
2. Tipos de Variables
Objetos
Se trata de conjuntos de variables y funciones asociadas. Presentan una complejidad mayor que
las variables vistas hasta ahora pero su utilidad es más que interesante.A diferencia de otros
lenguajes, PHP posee una gran flexibilidad a la hora de operar con variables. En efecto, cuando
definimos una variable asignándole un valor, el ordenador le atribuye un tipo.
Tipos de Datos
PHP soporta los siguientes tipos:
• Array
• Números de Punto Flotante
• Entero
• Objeto
• Cadena
El tipo de una variable normalmente no lo indica el programador; en su lugar, lo dice PHP en
tiempo de ejecución dependiendo del contexto en el que se utilice esa variable. Si se quisiese
obligar a que una variable se convierta a un tipo concreto, se podría forzar la variable o usar
la función settype( ) para ello.
Una variable se puede comportar de formas diferentes en ciertas situaciones, dependiendo de
que tipo sea en ese momento.
Manejo de Operadores Lógicos
Los operadores lógicos producen un resultado booleano, y sus operandos son también valores
lógicos o asimilables a ellos (los valores numéricos son asimilados a cierto o falso según su
valor sea cero o distinto de cero). Por contra, recuerde que las operaciones entre bits
producen valores arbitrarios.
Los operadores lógicos son tres; dos de ellos son binarios, el último (negación) es unario.
Tienen una doble posibilidad de representación en el Estándar C++ actual: la representación
tradicional que se indica a continuación, y la natural introducida recientemente que se detalla
más adelante.
• Y lógico && AND
• O lógico OR
• Negación lógica ! NOT
3. Las expresiones conectadas con los operadores && y || se evalúan de izquierda a derecha, y la
evaluación se detiene tan pronto como el resultado verdadero o falso es conocido (muchos
programas tienen una lógica que se basa en este propiedad).
&& Operador Y lógico
También denominado por su nombre en inglés (generalmente en mayúsculas) AND lógico.
Devuelve un valor lógico true si ambos operandos son ciertos. En caso contrario el resultado es
false.
Operadores Aritméticos
Son aquellos que sirven para operar términos numéricos. Estos operadores podemos clasificarlos a
su vez como:
UNARIOS
BINARIOS
Los operadores UNARIOS son aquellos que trabajan con UN OPERANDO.
Pascal permite el manejo de un operador unario llamado:
MENOS UNARIO
Este operador denota la negación del operando, y se representa por medio del signo menos (-)
colocado antes del operando.
Por ejemplo:
Si x tiene asignado el valor 100, -x dará como resultado -100; esto es que el resultado es el
inverso aditivo del operando.
Los operadores BINARIOS, son los que combinan DOS OPERANDOS, dando como resultado un
valor numérico cuyo tipo será igual al mayor de los tipos que tengan los operandos.
La siguiente tabla muestra los símbolos de los operadores binarios de Pascal así como los
nombres de las operaciones que realizan.
Operadores Comparativos
Los operadores Comparativos requieren (>,<,>=,<=,=,<>), para producir un resultado lógico
(True or False).
Condicionales
Cuando tenemos la necesidad de tomar una decisión basada alguna condición utilizamos el
condicional if, pero algunas veces debemos comprobar varios datos para saber que hacer.
Es aquí cuando entran los condicionales, es este tip veremos como utilizarlos.
Los condicionales son:
• AND (&&)
• OR (||)
4. • NOT (!)
AND (&&)
Este operador ejecuta el código sólo si las dos condiciones son verdaderas.
Código :
if((1 == 1) && (1 < 2)) //Si uno es igual a uno y uno es menor que dos
{
trace("True"); //True
}
OR (||)
Ejecuta el código si alguna de las condiciones es verdadera.
Código :
if((1 == 4) || (1 < 2)) //Si uno es igual a cuatro o uno es menor que dos
{
trace("True"); //True, la condicion de la derecha es verdadera
}
NOT (!)
Ejecuta el código si la condición es contraria.
Código :
var lloviendo:Boolean = false;
if(!(lloviendo == true))
{
trace("No está lloviendo"); //Si no se hubiera colocado el [b]![/b], no se ejecutaría
el trace
}
5. Manejo de Ciclos
Ciclos for
Si queremos mostrar el mensaje hola mundo 10 veces, podemos usar el comando for.
for ($i=0; $i -lt 10; $i++)
{
echo "hola mundo"
}
Ciclos do while
Do while significa hacer algo mientras se cumpla alguna condición.
Voy a repetir mi ejemplo de imprimir 10 veces hola mundo usando do while
$i = 1
do {echo "hola mundo"; $i++}
while ($i -le 10)
Ciclos while
Este es similar al do while. Tal vez la principal diferencia es que el primero si o si se ejecuta
una vez y luego recién ve las condiciones.
$i = 1
while ($i -le 10) {
echo "hola mundo"
$i++
}
Manejo de Datos
PHP puede generar el HTML que quieras. Es mas, puedes usar plantillas diseñadas (casi)
exclusivamente en HTML y mediante un motor de plantillas "rellenar" los datos. Un motor sencillo
son las Nok.
Y si, se puede mostrar una imagen en función de un valor de un campo. La forma mas fácil es
con forzar el nombre de la imagen a ser la letra + .gif (o .jpg):
Código PHP:
<img src="/imagenes/<?php echo $row['campo']; ?>.gif">
De esta forma tendrías g.gif para el CD, j.gif para el DVD, ...
Otra forma seria con un array asociativo cuyos índices sean la letra (o cadena) y los valores las
imágenes:
Código PHP:
<?php
$imagenes=array('g'=>'cd.gif', 'j'=>'DVD.jpg');
...
?>
<img src="/imagenes/<?php echo $imagenes[$row['campo']]; ?>.gif">
6. Manejo de cadenas
Dado el uso del lenguaje PHP el tratamiento de cadenas es muy importante, existen bastantes
funciones para el manejo de cadenas, a continuación explicaremos las más usadas.
• strlen(cadena). Nos devuelve el número de carácteres de una cadena.
• split(separador,cadena). Divide una cadena en varias usando un carácter separador.
• sprintf(cadena de formato, var1, var2...). Formatea una cadena de texto al igual que
printf pero el resultado es devuelto como una cadena.
• substr(cadena, inicio, longitud). Devuelve una subcadena de otra, empezando por inicio
y de longitud longitud.
• chop(cadena). Elimina los saltos de línea y los espacios finales de una cadena.
• strpos(cadena1, cadena2). Busca la cadena2 dentro de cadena1 indicándonos la posición
en la que se encuentra.
• str_replace(cadena1, cadena2, texto). Reemplaza la cadena1 por la cadena2 en el texto.
Manipulación de Arreglos
Ejemplo:
Funciones de Arreglos
array_slice()
Para disminuir el número de casillas de un arreglo tenemos varias funciones. Entre ellas,
array_slice() la utilizamos cuando queremos recortar algunas casillas del arreglo, sabiendo los
índices de las casillas que deseamos conservar.
array_shift()
Esta función extrae el primer elemento del array y lo devuelve. Además, acorta la longitud del
array eliminando el elemento que estaba en la primera casilla. Siempre hace lo mismo, por tanto,
no recibirá más que el array al que se desea eliminar la primera posición.
unset()
Se utiliza para destruir una variable dada. En el caso de los arreglos, se puede utilizar para
eliminar una casilla de un array asociativo (los que no tienen índices numéricos sino que su índice
es una cadena de caracteres).
array_push()
Inserta al final del array una serie de casillas que se le indiquen por parámetro. Por tanto, el
número de casillas del array aumentará en tantos elementos como se hayan indicado en el
parámetro de la función. Devuelve el número de casillas del array resultante.
7. array_merge()
Ahora vamos a ver cómo unir dos arrays utilizando la función array_merge(). A ésta se le pasan
dos o más arrays por parámetro y devuelve un arreglo con todos los campos de los vectores
pasados.
Declaracion de Funciones
La declaración da a conocer la función al compilador, de forma que a
partir del punto de declaración, ya se pueden realizar invocaciones a la
misma. A su vez, la definición estará en algún otro punto del programa, tal
vez en una librería externa (en forma ya compilada) o en otro módulo de
programa (como texto fuente).
Una función puede ser declarada varias veces en un mismo programa, y las
declaraciones pueden aparecer en cualquier orden; en un fichero fuente o en
varios, pero en cualquier caso antes de su uso, es decir: antes de cualquier
invocación a la función . Además de declarar el nombre de la función y el
tipo devuelto (por defecto se supone int se declaran también el tipo de
los parámetros.
Ejemplo:
extern int funcion1 (); // no acepta ningún argumento
extern int funcion1 (void); // mejor que la anterior
funcion2 (char, int); // por defecto supone que devuelve int
int funcion2 (char, int); // mejor que la anterior
char funcion3 (char c, int i); // incluye nombres de parámetros
Nota: los compiladores MS Visual C++ y Borland C++ admiten que ciertos
especificadores opcionales acompañen a la declaración de funciones y otros
objetos. Tales especificadores son de utilidad en circunstancias específicas
Al tratar de la construcción de un programa señalamos que en ocasiones no
se desea construir un ejecutable, al menos no en el sentido tradicional del
término, sino una librería, y que estas librerías son trozos de código que
contienen alguna funcionalidad pre-construida que puede ser utilizada por un
ejecutable. Por supuesto, las librerías contienen en su interior variables y
funciones. Si como suponemos son librerías C++, lo más probable es que
estas variables y funciones estén encapsuladas en forma de clases. Observe
que la idea central de librería es precisamente la de ser un módulo de
8. software preconstruido -generalmente por terderos- para cuya utilización no
es necesario conocer los detalles íntimos de su funcionamiento, sino su
interfaz. Es decir, que respuestas nos puede dar y cómo hay que preguntar
-a la librería- para obtenerlas.
En general, el término librería se utiliza para referirse a un conjunto de
módulos objeto .obj / .o (resultados de compilación) agrupados en un solo
fichero que suele tener las extensiones .lib, .bpl.a, .dll, etc. Estos ficheros
permiten tratar las colecciones de módulos como una sola unidad, y
representan una forma muy conveniente para el manejo y desarrollo de
aplicaciones grandes, además de ser un concepto muy fértil para la industria
del software, ya que permiten la existencia de las librerías de los propios
compiladores
Librerías estáticas
Denominadas también librerías-objeto, son colecciones de ficheros objeto
(compilados) agrupados en un solo fichero de extensión .lib, .a, etc. junto
con uno o varios ficheros de cabecera
Librerías dinámicas
Otra forma de añadir funcionalidad a un ejecutable son las
denominadas librerías de enlazado dinámico (repasar en 1.4.4 el significado
de "enlazado dinámico"), generalmente conocidas como DLLs, acrónimo de su
nombre en inglés ("Dynamic Linked Library"). Estas librerías se utilizan mucho
en la programación para el SO Windows. Este Sistema contiene un gran
número de tales librerías de terminación .DLL, aunque en realidad pueden
tener cualquier otra terminación .EXE, .FON, .BPI, .DRV etc. Cualquiera que
sea su terminación, de forma genérica nos referiremos a ellas como DLLs,
nombre por el que son más conocidas.
9. En cierta forma, los formularios nos permiten manejar el ingreso de los
datos en una
aplicación WEB.
Por medio de estos verdaderos repositorios de datos, podemos enviar
informacióndirectamente al Servidor (Base de Datos) o bien, manejar
información para ser procesadaen forma posterior.
La estructura general de un formulario es:
1. Etiqueta de inicio:
<FORM ACTION="mailto:dirección_de_email" METHOD="POST">
2. Cuerpo del formulario, con los distintos elementos para poder introducir
los datos.
3. Botones de envío y/o de borrado.
4. Etiqueta de cierre </FORM>
Supongamos el siguiente ejemplo, denominadoformular io. 2. ht
Métodos de envió de datos GET y POST
Son los métodos de los cuales los datos de un formulario son enviados, el
método es indicado en el atributo method y los dos métodos posibles son
GET y POST. La diferencia entre estos dos métodos radica en la forma de
enviar los datos a la página, mientras que el método GET envía los datos
usando la URL, el método POST los envía por la entrada estándar STDIO, en
otras palabras se pasa los datos codificados en el flujo de datos HTTP y los
datos no son visibles para los usuarios.
Tipos de contenido enviado por un formulario
En los tipos de contenidos posibles:
* multipart/form-data: cuando se envían archivos.
* text/plain: solo texto legible.
Cajas de Texto
El usuario podrá ingresar texto en el formulario por medio de la etiqueta
<input/>
10. ¿Qué son las redirecciones?
Las redirecciones le indican tanto a los buscadores como a los usuarios que
el contenido al que se desea acceder se ha movido de una ubicación a otra.
Existen dos tipos principales de redirecciones que tienen distintos efectos:
• Redireccionamiento Permanente 301: Muestra un código de estado HTTP 301
que indica que el contenido se ha movido de forma permanente a otra
ubicación, por lo cual los buscadores dejarán de tomar en cuenta la URL
antigua en su índice para incluir la nueva. Redirige tanto a los usuarios
como a los buscadores y transmite la fuerza SEO que tenía la página en la
ubicación anterior a la nueva.
• Redireccionamiento Temporal 302: Muestra un código de estado HTTP 302
que indica que el contenido se ha movido de forma temporal a otra
ubicación, por lo cual aunque redirige tanto a los usuarios como a los
buscadores, no transmite la fuerza SEO de la URL antigua a la nueva.
¿Cuándo se debe hacer uso de las redirecciones?
Las redirecciones son útiles para redirigir a los usuarios y buscadores en
diversas situaciones, entre otras, cuando:
Se ha publicado una nueva versión de una página ya existente
El contenido publicado en una página ha expirado y se desea eliminar
Existe contenido duplicado: El mismo contenido en múltiples URLs o tienes
problemas de Canonicalización.
Se cambia el dominio del sitio
Se desea modificar la estructura de URLs de un sitio
11. Debido a las diferencias planteadas anteriormente de los dos tipos principales
de redireccionamientos es muy importante tomar en cuenta no sólo su uso de
cara al usuario (si tiene a la página que ha cambiado de ubicación entre sus
favoritos y accede a ella) sino también de cara a los buscadores (si la
página se encuentra ya posicionada y tiene enlaces entrantes), por lo que a
no ser por casos muy específicos, usualmente el tipo que beneficiará en las
situaciones descritas es el redireccionamiento 301.
¿Cómo se implementan las redirecciones?
Las redirecciones pueden ser implementadas de múltiples formas, tanto a
nivel del código de las páginas como del servidor.
En el caso que sólo se desee implementar la redirección a una sola URL
podría parecer más fácil hacerlo directamente a través del código, sin
embargo, para tener un control y acceso único a las redirecciones que se
realizan en una Web, lo mejor es realizarlo a nivel de servidor, como
lo aconseja el propio Google.
Las redirecciones pueden ser implementadas en el lenguaje de programación
de la página, por ejemplo, directamente en PHP o ASP, pero se debe de
asegurar que el código de estado HTTP que se muestra es 301.
Es importante señalar que existen otros métodos para implementar
redirecciones a nivel de código de las páginas que no son aconsejados como
los realizados a través de la etiqueta meta-refresh o javascript (utilizados
usualmente para hacer spam) ya que no tienen el efecto de
un redireccionamiento 301.
Por otro lado, para implementar redirecciones 301 a nivel de servidor puedes
hacerlo en Apache editando el archivo Htaccesscon las directivas “Redirect” o
“Rewrite Rules”.
A continuación tienes un compendio de guías sobre cómo
implementar redirecciones 301 en Apache:
• Guide to Applying 301 Redirects with Apache
• Apache Redirects for SEOs
• .htaccess, 301 Redirects & SEO
• Editar htaccess para crear direcciones URL amigables
• Cambio de URL redirección 301 con .htaccess
• .htaccess 301 Redirect
Para implementar redirecciones 301 en un servidor Web ejecutando Microsoft
IIS se puede hacer uso de la consola de IISo de directivas similares a la de
12. Mod_Rewrite en Apache, en caso que se utilice un plug-in
como ISAPI_Rewrite.