Está en la página 1de 67

Introducción a PHP

Introducción a PHP

http://www.pacoarce.com Pág 1
Introducción a PHP

1.  Sintaxis  general  de  PHP .........................................................................................................................4  


Estructura  de  archivos  PHP .....................................................................................................................................4  
Mezclar  HTML  y  PHP ..................................................................................................................................................5  
Comentarios....................................................................................................................................................................5  
El  caracter  punto  y  coma  ";" ....................................................................................................................................6  
Variables...........................................................................................................................................................................6  
Tipos  de  datos................................................................................................................................................................8  
Operadores  y  expresiones ........................................................................................................................................9  
Operadores  Aritméticos .........................................................................................................................................10  
Operador  de  concatenación ..................................................................................................................................10  
Operadores  de  comparación ................................................................................................................................10  
Operadores  booleanos ............................................................................................................................................11  
Cambio  de  tipo............................................................................................................................................................11  
Precedencia..................................................................................................................................................................12  
Comandos  "print"  y  "echo"....................................................................................................................................12  
Uso  de  etiquetas  HTML ...........................................................................................................................................13  
2.  Control  de  flujo ...................................................................................................................................... 13  
Comando  "if"................................................................................................................................................................13  
Comando  "switch".....................................................................................................................................................16  
Comando  "do  ...  while".............................................................................................................................................18  
Comando  "for" ............................................................................................................................................................19  
Comandos  "break"  y  "continue"..........................................................................................................................20  
3-­‐  Arreglos.................................................................................................................................................... 21  
Creación  de  arreglos ................................................................................................................................................21  
Recorriendo  todo  un  arreglo  con  "foreach"...................................................................................................22  
Operaciones  con  arreglos ......................................................................................................................................23  
Agregar  varios  elementos  al  principio  del  arreglo,  con  el  comando  "array_push".......................23  
Quitar  el  primer  elemento  de  un  arreglo,  con  el  comando  "array_shift" ..........................................24  
Quitar cualquier elemento de un arreglo, con el comando "unset".............................................................24  
Buscar por un valor exacto en todo el arreglo, con el comando "in_array" ............................................24  
Ordenando  arreglos .................................................................................................................................................24  
Arreglos  asociativos .................................................................................................................................................25  
4-­‐  Funciones ................................................................................................................................................ 26  
Creación  de  funciones .............................................................................................................................................26  
Parámetros...................................................................................................................................................................27  
Variables  locales  y  globales...................................................................................................................................27  
Regreso  de  valores....................................................................................................................................................28  
5-­‐  Formas  de  HTML ................................................................................................................................... 30  
Ejemplos  de  Dreamweaver: ..................................................................................................................................32  
Campos  ocultos ..........................................................................................................................................................33  
Validaciones.................................................................................................................................................................33  
Redirección  a  otras  paginas ..................................................................................................................................36  
Hipervínculos  a  rutinas  php .................................................................................................................................37  
Paso  de  parámetros  en  hipervínculos ..............................................................................................................37  
6-­‐  Fechas  y  strings ..................................................................................................................................... 39  
Comando  "time" .........................................................................................................................................................39  
Comando  "date" .........................................................................................................................................................39  

http://www.pacoarce.com Pág 2
Introducción a PHP

Comando  "getdate"...................................................................................................................................................41  
Comando  "mktime" ..................................................................................................................................................42  
Validando  fechas  con  "checkdate" .....................................................................................................................44  
Comando  "printf".......................................................................................................................................................46  
Comando  "sprintf" ....................................................................................................................................................47  
Comando  "number_format" ..................................................................................................................................47  
Operaciones  básicas  de  strings ...........................................................................................................................48  
Convertir  caracteres  especiales  de  texto  a  HTML .......................................................................................50  
7-­‐  Manejo  de  archivos .............................................................................................................................. 51  
Verificar    si  existe  un  archivo ...............................................................................................................................51  
Verificar  si  es  archivo  o  directorio.....................................................................................................................52  
Propiedades  de  archivos ........................................................................................................................................52  
Creando  y  borrando  un  archivo ..........................................................................................................................53  
Abrir  y  cerrar  un  archivo .......................................................................................................................................54  
Leer  un  archivo...........................................................................................................................................................55  
Protegiendo  archivos  contra  escrituras  múltiples......................................................................................58  
Operaciones  con  directorios.................................................................................................................................59  
8  -­‐  Galletas.................................................................................................................................................... 61  
Creación  de  galletas..................................................................................................................................................61  
Lectura  de  galletas ....................................................................................................................................................62  
Borrar  una  galleta .....................................................................................................................................................63  
9-­‐  Acceso  a  base  de  datos ........................................................................................................................ 64  
Conexión  al  servidor ................................................................................................................................................64  
Conexión  a  la  base  de  datos ..................................................................................................................................64  
Operaciones  básicas .................................................................................................................................................65  
10-­‐  Otros  recursos  Referencias  en  el  internet................................................................................. 67  

http://www.pacoarce.com Pág 3
Introducción a PHP

1. Sintaxis general de PHP

Estructura de archivos PHP


El lenguaje de programación PHP nace en 1994 por la necesidad de
automatizar operaciones comunes para crear sitios de internet dinámicos. Es
inventado por Rasmus Lerdorf y basado en el lenguaje "C". Sus siglas
significan "Personal Home Page".

Las rutinas de PHP se crean en cualquier editor de texto, ya que es un


lenguaje "interpretado" (se lee, valida e interpreta hasta que es llamada una
rutina por el servidor). Todo archivo que contenga rutinas e instrucciones de
PHP debe estar contenido entre los símbolos "<?php" y "?>" y tener la
terminación ".php" para ser ejecutado correctamente. Así, un ejemplo de
unarchivo de PHP, que podría ser guardado con el nombre "hola.php", es:

<?php
print "Hola mundo!";
?>

Para ejecutar un archivo de php con terminación ".php", debe "subirse" en el


servidor junto con las páginas de HTML, y escribir en un navegador el
nombre del archivo: "http://www.miserver.com/hola.php".

Para saber si un servidor de páginas web tiene instalado el intérprete de


PHP se puede crear este sencillo archivo, subirlo yejecutarlo desde un
navegador (debe de usarse un servidor de paginas web, no funciona si se
abre un archivo guardado en un disco duro local desde un navegador):

<?php
print phpinfo();
?>

Este archivo debe producir un resultado similar a esto:

http://www.pacoarce.com Pág 4
Introducción a PHP

Si el resultado son las instrucciones del archivo, el PHP no esta instalado en


ese servidor.

Mezclar HTML y PHP


Es posible mezclar paginas de HTML y código PHP, escribiendo en la parte
correspondiente del archivo HTML el código dePHP, siempre "delimitado"
por las etiquetas "<?php" y "?>". Capture el siguiente Ejemplo:

<html>
<head>
<title>Ejemplo de mezcla de HTML y PHP</title>
</head>
<body>
<br>
Este es un ejemplo de como mezclar código estático de HTML
y dinámico de PHP<br>
<br>
Esta parte es creada por el HTML.<br>
<br>
<?php

print "Esta parte es creada por una rutina de PHP.<br>";


?>
<br>
Fin de la demostración<br>
</body>
</html>

Una desventaja de esta mezcla es que no se puede separar el diseño del


código, lo cual hace difícil el desarrollo y el mantenimiento de un sitio en
el que se involucran diseñadores y programadores (o al menos varias
personas a la vez). Más adelante se describirán técnicas para mantener
separados el diseño y el código.

Comentarios
En todo lenguaje de programación es conveniente tener alguna forma de
incluir comentarios, letreros que indican alguna nota acerca del código o su
implementación.

http://www.pacoarce.com Pág 5
Introducción a PHP

En el PHP hay tres maneras de crear comentarios en el código:

1- Usando los caracteres "//": se usa para incluir una sola linea de comentarios

2- Usando el carácter # (gatito): Funciona igual que las dos diagonales.

3- Usando los caracteres "/*" y "*/": se usa para incluir varias lineas de
comentarios

Un ejemplo de esto es:

<?php
// este es mi primer programa de php

// fue hecho por Fulano de Tal en septiembre de 2002

print "Hola mundo!";

/* dicen que el primer programa que se hizo en lenguaje C fue


el de “hola mundo”*/

?>

El caracter punto y coma ";"


Así como en los lenguajes de los humanos se usa la puntuación para separar
oraciones, ideas, dar énfasis, etc., el PHP usa el caracter punto y coma se
utiliza ";"para separar sus instrucciones. Toda instrucción debe terminar
obligatoriamente con un ";".

Para el humano es muy difícil leer una serie de frases si no son separadas por
símbolos de puntuación Es por esto que en muchos lenguajes de
programación se usan caracteres especiales para separar las instrucciones y
hacer más claro el concepto. En algunos lenguajes se usa simplemente una
nueva linea para separar las instrucciones Pero otros lenguajes usan otros
caracteres siendo el mas usado el ";" ya que esto es herencia del lenguaje "C"
del cual provienen una gran cantidad de lenguajes comerciales actuales
Verdad que es difícil leer esto sin el uso de separadores?

Variables
Todo lenguaje de programación usa el concepto de "variables": las podemos
considerar recipientes o contenedores (cajitas) que guardan valores para ser
usados en la resolución de problemas. En la vida real, los humanos a
menudo usamos este tipo de apoyo, en forma de notas, tarjetas de

http://www.pacoarce.com Pág 6
Introducción a PHP

presentación, etiquetas para cajas con los adornos de navidad, etc.

El concepto de "cajas" es el que más se asemeja a las variables. En la vida


real, los humanos guardamos cosas en todo tipo de "cajas", para ser usadas
más tarde, para acumular cosas "afines", para ir guardando monedas que
sobran, etc. Pero eso si, entre más cajas se tengan, es más fácil saber que hay
en ellas si NO se les pone una "etiqueta" o letrero en su exterior: a los
humanos les da por bautizar y etiquetar todo tipo de cosas, incluyendo sus
"cajitas".

Así que, ¿por que habría de ser diferente al crear un lenguaje de


programación?

Por esto es que las variables deben de ser "bautizadas" con nombres que sean
indicativos del tipo de información que se guarda en esas "cajitas". Y es
mucho mejor aun si no repetimos esos nombres.

Imaginen entrar a un cuarto lleno de cajas, todas con el


mismo letrero: "tornillos".

Para guardar todo tipo de "valores" e información, el PHP permite crear


variables, pero deben seguirse unas pequeñas reglas:

1- Toda variable debe comenzar con el caracter "$".

2- Solo pueden usarse letras (sin eñes ni acentos u otros caracteres


especiales), números y el guión bajo "_" .

3- Las letras mayúsculas y minúsculas SON diferentes.

4- Restringir la longitud del nombre a 64 caracteres (mas por el beneficio del


humano que de la máquina)

Ejemplos de VARIABLES:

$uno

$contador

$nombre_de_variable_un_poco_largo

$i

$esta_variable_no_es_igual_a_esta_otra

http://www.pacoarce.com Pág 7
Introducción a PHP

$Esta_variable_no_es_igual_a_esta_otra

$iva

$subtotal1

$subtotal2

$total

$123_ya_te_vi

Si bien se goza de la libertad de usar cualquier nombre para la variable,


sin romper las reglas, es buena práctica limitarse a nombres
"mnemónicos" y cortos. Para que me sirve "bautizar" una variable que va
a contener un "numero de parte" de un producto como "$konichi_wa" o
"$no_se_que_nombre_usar" u otro nombre que no indica para que se va a
usar la variable. Opciones más sensatas serian "$numero_de_parte",
"$num_parte" o "$numpte".

A diferencia de otros lenguajes de programación, en el PHP se puede


"declarar" una variable en cualquier parte del código. En el momento que se
me ofrece una "cajita" para guardar algo, esta puede aparecer mágicamente
en cualquier parte de mi casa, solo necesito "pensar en ella" y nombrarla, así
de fácil.

Tipos de datos
Los tipos de datos o información que maneja el PHP se pueden resumir en lo
siguiente:

Enteros o "Integer" - Datos numéricos, pero sin incluir decimales. Optimo uso
son contadores. Ejemplos: 1, 2, 3, 5, 7, -11, -13,-17, -19, -23

Números con decimales o "Double" - Datos numéricos que si incluyen


decimales. Optimo uso son manejo de "dinero", datos estadísticos,
trigonométricos, etc. Ejemplos: 3.141592653589793, -1.16, 0.15

Cadenas de caracteres o "String" - Datos alfanuméricos para representar letras


y el lenguaje escrito de los humanos. Estos valores van siempre "encerrados"
o delimitados entre las comillas dobles o comillas sencillas (apóstrofes).
Optimo uso son todo tipo de letreros, mensajes, nombres, etc. Ejemplos:

"Ejemplos",

http://www.pacoarce.com Pág 8
Introducción a PHP

"You're bloody well right",

"Un erreur est survenue",

'Sposta nel "Cestino"'

Valores de lógica básica o "Boolean" - Aquí solo existen dos posibles valores:
verdadero (true) o falso (false).

Cualquier variable puede contener alguno de estos tipos de valores, incluso


contener un tipo de valores y más adelante cambiará otro tipo diferente.

Operadores y expresiones
En los lenguajes de los humanos, se usan unas reglas para construir frases que
tengan sentido. Considere esto:

"porque veas a no no con prestes verás lo, Ossian, que nada todas son Tir na
n'Ög las atención maravillas estas en comparadasque".

¿Entendió la frase? Para crear "frases" correctas en cualquier lenguaje de


programación, se usan expresiones. Estas son unidas por uno o más

operadores. Ejemplos de expresiones correctas en PHP son:

$subtotal = 100;

$contador = $contador + 1;
$ancho = $largo * 100 / 500;

$x = sin($y * ($r - 1) / $pi );


$bandera = false;

$letrero = "Aquí va un letrero";


print "Este es el letrero: $letrero<br>\n";

$i++;

Para asignar un valor a una variable, se usa el operador de asignación: "=".


Lo que esta al lado izquierdo es el "contenedor" de la operación, y lo que esta
al lado derecho es la operación a ejecutar.

http://www.pacoarce.com Pág 9
Introducción a PHP

Operadores Aritméticos
Operador Nombre Ejemplo Resultado

+ adición 3 + 0.1415 3.1415 -substracción 5 - 7 -2


* multiplicación 258444.8275 * 1.16 299795.9999 / división 5 / 2
2.5 % residuo 5 % 2 1

Atajos a operaciones comunes


Para ahorrar la escritura repetida de nombres de variables, existen "atajos" de
operaciones aritméticas comunes:
Operador Ejemplo Equivalente a+= $total += $subtotal $total = $total +
$subtotal -= $total -= $descuento $total = $total - $descuento *= $total *=
$iva $total = $total * $iva /= $promedio /= $total $promedio = $promedio /
$total %= $residuo %= $subtotal $residuo = $residuo % $subtotal .=
$letrerototote .= $letrerito $letrerototote = letrerototote . $letrerito ++
$contador++ $contador = $contador + 1 --$asistentes--$asistentes =
$asistentes - 1

Operador de concatenación
Para "unir" cadenas de caracteres se usa el operador punto ".":
$letrerototote = $letrerito . " para " . $nombre . " " . $apellido . "<br>";

Operadores de comparación
Para comparar una cosa con otra y saber si el resultado es verdadero o falso se
usan estos operadores. Para los ejemplos, se asume que la variable $todo es
igual a 5.
Operador Nombre Es verdadero si... Ejemplo Resultado == igual a ambos
lados son iguales $todo == 5 true

!= diferente de ambos lados son diferentes $todo != 5 false ===


idéntico ambos lados son iguales y $todo === "5" false

http://www.pacoarce.com Pág 10
Introducción a PHP

son del mismo tipo de datos > mayor que la


izquierda es mayor que la derecha $todo > 4 true >= mayor o igual la
izquierda es mayor o igual a la derecha $todo >= 5 true < menor que la
izquierda es menor que la derecha $todo < 4 false <= menor o igual la
izquierda es menor o igual a la derecha $todo <= 5 true

Operadores booleanos

Estos operadores se usan para crear comparaciones mas complejas. Ejemplo


de la vida real son: "Si te haces tu tarea y te lavas los dientes puedes ir al
cine" - Solo si se cumplen ambas condiciones podrá ir al cine "Si haces tu
tarea o tiras la basura puedes ir al cine" - Con una de las dos condiciones que
se cumplan podrá ir al cine Operador Nombre Es verdadero si... Ejemplo
Resultado
and , && y ambos lados son verdaderos true

Cambio de tipo
Es posible "forzar" a que el resultado de una operación cambie de tipo,
como por ejemplo una división entre números con decimales regrese un
número entero. La manera mas fácil de forzar este cambio es así:

$entero = (integer) $subtotal / $iva;

La variable $entero sólo recibirá un valor entero, sin los decimales.

Operador Cambia a Ejemplo Resultado (integer) numero entero


$contador = (integer) 5 / 2 2 (double) numero con decimales
$promedio = (double) 3 + 2 5.0 (string) cadena de caracteres
$letrero = 3.1415 / 2 "1.57075" (boolean) verdadero o falso
$respuesta = 5 * 2 true En el ultimo caso, cualquier valor que sea
diferente de cero regresa "true", y cero regresa "false".

http://www.pacoarce.com Pág 11
Introducción a PHP

Precedencia
Como en los lenguajes humanos de occidente, los lenguajes de programación
modernos "leen" las expresiones de derecha a izquierda. Pero los operadores
tienen una precedencia o jerarquía establecida para su ejecución. Considere
esto:

$resultado = 3 + 2 * 5;

La variable $resultado vale 13, debido a las siguientes reglas de precedencia:


Prioridad de ejecución
Operadores1 ++ , -- ,
cambio de tipo 2 / , * , % 3
+ , -4 < , <= , > , >= 5 == ,
=== , != 6 && 7 || 8 = , += ,
-= , *= , /= , %= , .= 9 and
10 or

Si se desea alterar las reglas de precedencia, se usan paréntesis, ya


que lo que está entre paréntesis se ejecuta primero. SIEMPRE.
Considere esto:

$resultado = (3 + 2) * 5;

La variable $resultado vale 25.

Comandos "print" y "echo"


Para mostrar al usuario un resultado en la pantalla de su navegador, se usa
cualquiera de los comandos "print" o "echo". Estoscomandos llevan los
valores a mostrar entre comillas o apóstrofes, y se pueden incluir variables,
las cuales mostraran su valor.

$iva = 0.15;
print "Este ejemplo es menos primitivo que 'Hola mundo!'. El valor
del iva es
$iva<br>";
echo 'El comando "echo" es equivalente al comando "print" y se

http://www.pacoarce.com Pág 12
Introducción a PHP

pueden usar
indistintamente';

Uso de etiquetas HTML


Cuando las rutinas de PHP se usan en un ambiente de servidores de web, los
resultados serán mostrados en un navegador, y losnavegadores entienden
etiquetas de HTML para dar formato a los textos.

Es por esto que en los comandos "print" o "echo" se incluyan etiquetas de


HTML. Es bueno familiarizarse con las etiquetas deHTML, ya que es difícil
prescindir totalmente de ellas.

Con la técnica del uso de plantillas para separar el diseño de la


programación, se reduce a un mínimo el uso de etiquetas deHTML desde
la rutina de PHP.

2. Control de flujo
La vida diaria esta llena de decisiones y rutinas. Levantarse, cepillar los
dientes, bañarse, desayunar, ir al trabajo, comer,hacerse "pato" en la
tarde, regresar a casa, cenar, ver TV o escuchar radio o leer algo, y
dormir.

Y en cada una de esta rutina mil y un decisiones que tomar: ¿me baño
primero o me lavo los dientes? ¿Desayuno huevos o soloun café? ¿Hay café?
¿Me voy por la supuesta vía rápida o por calles entre la ciudad? ¿Leo mi
correo o termino el reporte?¿Esta mi jefe en la oficina? ¿Qué como? ¿Cuanto
dinero traigo para comer? ...

En los lenguajes de programación existen dos grandes grupos de comandos


para el control del flujo del programa, para decidirque hacer, o si se trata de
un ciclo, cuantas veces hacerlo o hasta que momento dejar de hacerlo.

El primer grupo de comandos son los "condicionales", los cuales evalúan


una expresión y dependiendo del resultado de laevaluación (verdadero o
falso) ejecutan o dejan de ejecutar ciertas instrucciones.

Comando "if"
En un ejemplo anterior examinamos una situación parecida a esta: "Si haces
tu tarea puedes ir al cine". Este ejemplo de la vidareal contiene una condición,
que si se cumple trae una consecuencia. Pero de no cumplirse, no se hace

http://www.pacoarce.com Pág 13
Introducción a PHP

realidad dichaconsecuencia.

El comando "if" se traduce como "Si...", y es un comando condicional. Lo


primero a realizar es preguntar por una condiciónevaluando una expresión,
la cual solo puede ser verdadera o falsa, no existe otro resultado. Si el
resultado es "verdadero", seejecutan las instrucciones que están delimitadas
por un par de caracteres especiales: "{" y "}". La condición es
generalmenteuna o varias comparaciones.

La sintaxis básica para este comando es:

if ( expresión ) {
comando;
comando;
...
}

Ejemplo:

1 $edad = 45;
2 $bono = 2500;
3 $salario = 25000;
4 if ( $edad >= 40 ) {
5 $salario += $bono;
6 print "Su edad lo hace acreedor a un bono por antigüedad. Su nuevo sueldo
7 es
8 $salario <br>";
9 }
10 print "Su edad es $edad <br>";

Pruebe este código. Luego cambie el valor de la variable $edad y compare los
resultados.

Regresando al ejemplo de la vida real, también puede suceder lo siguiente:


"Si haces tu tarea puedes ir al cine, de lo contrariono podrás ver la TV el día
de hoy".

Aquí se complican las cosas, ya que si no hago mi tarea no solo dejaré de ir al


cine, sino que además no podré ver la TV.

El comando "if" tiene otra forma que incluye la instrucción equivalente a "de lo
contrario":

1 if ( expresión ) {
2 comando;
3 comando;
4 ...
5 } else {
6 otro comando;

http://www.pacoarce.com Pág 14
Introducción a PHP

7 otro comando;
8 }

Ejemplo:

1 $limite = 4;
2 $llegadas_tarde = 5;
3 $penalidad = 500;
4 $salario = 8000;
5 if ( $llegadas_tarde > $limite ) {
6 $salario -= $penalidad;
7 print "Por llegar tarde mas de $limite veces este mes, su nuevo sueldo es
8 $salario
9 <br>";
10 } else {
11 print "Su sueldo no fue modificado por su puntualidad este mes, y sigue
12 siendo de
13 $salario <br>";
14 }
15 print "Usted lleg&oacute; tarde este mes $llegadas_tarde veces <br>";

Pruebe este código. Luego cambie el valor de las variables $limite y


$llegadas_tarde y compare los resultados.

Es posible incluir un comando "if" dentro de otro comando "if". En este


caso es conveniente alinear los comandos y sus"llaves" ( { y } ) para
facilitar la lectura y comprensión de la lógica de la programación.
Ejemplo:

1 $edad = 38;
2 $estado_civil = "casado";
3 if ( $edad < 40 ) {
4 print "Disfrute de nuestro crucero al caribe ";
5 if ( $estado_civil == "casado" ) {
6 print " en compa&ntilde;&iacute;a de su familia ";
7 }
8 print " con un descuento especial y agradables sorpresas <br>";
9 } else {
10 print "Lo invitamos a nuestro retiro al campo, donde disfrutará de paz ";
11 if ( $estado_civil != "casado" ) {
12 print " de estar solo con usted mismo ";
13 } else {
14 print " de compartir con los suyos ";
15 }
16 print " en un increíble lago en lo alto de la montaña <br>";
17 }
18 print "Su edad es de $edad años y es usted $estado_civil <br>";

Pruebe este código y cambie los valores de las variables para comparar los
resultados.

A veces es necesario preguntar por una serie de "rangos" en las condiciones, y


se deben escribir varios estatutos "if", ya seaindependientes o unos dentro de
otros.

Ejemplo:

http://www.pacoarce.com Pág 15
Introducción a PHP

1 $edad = 25;
2 if( $edad <= 20 ) {
3 print "Te regalamos boletos para el concierto de Marilyn Manson <br>";
4 }
5 if( $edad > 20 and $edad <= 30 ) {
6 print "Te regalamos unos boletos para ir al concierto de Moby <br>";
7 }
8 if( $edad > 30 and $edad <= 40 ) {
9 print "Te regalamos unos boletos para ir al teatro <br>";
10 }
11 if( $edad > 40 ) {
12 print "Te regalamos unos boletos para ir a la opera <br>";
13 }
14

Comando "switch"
Una alternativa a usar varios comandos "if" es el comando "switch". A
diferencia de los comandos "if", el comando "switch"solo puede evaluar una
sola expresión. Puede comprenderse este comando como un "separador de
monedas", ya que esosaparatos funcionan gracias a las variaciones del tamaño
de las monedas.

La sintaxis básica para este comando es:

1 switch ( expresión ) {
2 case resultado1:
3 comando;
4 comando;
5
6
break;
7 case resultado2:
8 comando;
9 comando;
10 break;
11 case resultado3:
12 comando;
13 comando;
14 break;
15
16
default:
17 comando;
18 comando;
19 }

Ejemplo:

1 $estado_civil = "divorciado";
2 print "Lo invitamos a un viaje por el amazonas ";
3 switch ( $estado_civil ) {
4 case "soltero":
5 print " donde podrá conocer a otras personas en ";
6 break;
7 case "casado":
8 print " para que su familia viva ";

http://www.pacoarce.com Pág 16
Introducción a PHP

9 break;
10 case "divorciado":
11 print " en el que podrá olvidar sus problemas en ";
12 break;
13 case "arrejuntado":
14 print " para que se anime a tomar esa importante decisión en ";
15 break;
16 case "viudo":
17 print " para recordar los mejores momentos de su vida en ";
18 break;
19 default:
20 print " que le ayudará a definir su estado social gracias a ";
21 }
22 print " una extraordinaria experiencia de 2 semanas, todo incluido <br>";

¡Un "atajo" de un comando "if" con solo un comando para el caso "true" y
uno solo para el caso "false" lo proporciona esteoperador.

La sintaxis básica para este operador es:


********************************************
$resultado = ( expresión) ? resultado-si-es-true : resultado-si-es-false;

Ejemplo:
1 $total = 35000;
2 $tipo_de_cambio = 11.35;
3 $gran_total = ( $tipo_de_cambio > 0 ) ? $total * $tipo_de_cambio : $total;
4 $letrero = ( $tipo_de_cambio > 0 ) ? ", tipo de cambio " . $tipo_de_cambio
5 : "";
6 print "El gran total de su pedido es $gran_total $letrero <br>";

El segundo grupo de comandos de control de flujo son los "ciclos", los


cuales evalúan una expresión y dependiendo delresultado de la evaluación
(verdadero o falso) ejecutan o dejan de ejecutar un ciclo de instrucciones.

Los ciclos, como los de la vida real, se apoyan en "contadores", que


permiten ejecutar un ciclo un numero finito de veces, yasea en un rango
especifico (algo así como "solo 7 veces") o hasta que suceda algo.

1 Comando "while"
2 La sintaxis básica para este comando es:
3 ************************************************************
4 while ( expresión ) {
5 comando;
6 comando;
7 ...
8 }

Mientras la expresión se evalúe como "true", se ejecutarán los comandos que


delimitan los caracteres "{" y "}". Al terminar elbloque de comandos, se
regresa a evaluar la expresión. Cuando la expresión se evalúe como "false",

http://www.pacoarce.com Pág 17
Introducción a PHP

termina el ciclo y ya no seejecuta ningún comando del "while".

Este comando primero pregunta y luego ejecuta, y es posible que nunca se


llegue a ejecutar el ciclo. Algo así como primeropreguntar "¿Quien vive?"
y dependiendo de la respuesta "disparar" o no.

Ejemplo:

1 $contador = 0;
2 $veces = 7;
3 print "Se van a imprimir $veces n&uacute;meros: <br>";
4 while ( $contador < 7 ) {
5 print " N&uacute;mero: $contador <br>";
6 $contador++;
7 }
8 print "Fin del ciclo, el contador vale $contador<br>";

Pruebe asignar a la variable $contador el número 7 (o mayor) en vez de 0 y


observe el resultado.

En la sección de manejo de archivos volveremos a ver este comando, esta ves


sin el uso de un contador especifico.

Comando "do ... while"

La sintaxis básica para este comando es:

1 do {
2 comando;
3 comando;
4 ...
5 } while ( expresión );

Primero se ejecutan los comandos, y luego se evalúa la expresión. Mientras


la expresión se evalúe como "true", se ejecutaránlos comandos que delimitan
los caracteres "{" y "}". Cuando la expresión se evalúe como "false",
termina el ciclo y ya no seejecuta ningún comando del "do ... while".

Este comando primero ejecuta y luego pregunta, y siempre se ejecuta al


menos un ciclo. Algo así como primero "disparar" y luego preguntar
"¿Quien vive?".

Ejemplo:

http://www.pacoarce.com Pág 18
Introducción a PHP

1 $contador = 0;
2 $veces = 7;
3 print "Se van a imprimir $veces
4 n&uacute;meros: <br>";
5 do {
6 print " N&uacute;mero: $contador <br>";
7 $contador++;
8 } while ( $contador < 7 );
9 print "Fin del ciclo, el contador vale
10 $contador<br>";

Pruebe asignar a la variable $contador el numero 6 (o mayor) en ves de 0 y


observe el resultado.

Comando "for"
Como se observa en los ejemplos anteriores, es muy común usar una variable
"contador", la cual es inicializada en algún valor(en los ejemplos fue "cero") e
incrementada en un valor a cada vuelta del ciclo (en los ejemplos se
incrementó en "1").

El comando "for" representa una manera "diferente" de hacer un ciclo de tipo


"while", pero con la inicialización de la variable"contador", y su incremento,
en una sola linea.

La sintaxis básica para este comando es:

1 for ( inicializacion-del-contador ; expresión ; incremento-del-contador )


2 {
3 comando;
4 comando;
5 ...
6 }

La inicialización del contador solo se ejecuta una ves y nunca mas vuelve a
ejecutarse, antes de evaluar la expresión por vesprimera.

La expresión se evalúa al menos una ves y mientras su resultado sea "true", se


ejecutarán las instrucciones del ciclo.

Cuando se termina de ejecutar los comandos del ciclo, se incrementa el


contador, y se vuelve a evaluar la expresión.

Ejemplo:

1 $veces = 7;

http://www.pacoarce.com Pág 19
Introducción a PHP

2 print "Se van a imprimir $veces n&uacute;meros: <br>";


3 for ( $contador = 0 ; $contador < $veces ; $contador++ ) {
4
5 print " N&uacute;mero: $contador <br>";
6 }
7 print "Fin del ciclo, el contador vale $contador<br>";

Comandos "break" y "continue"

A veces es necesario salir prematuramente de un ciclo, debido a una


condición excepcional.. El comando "break" termina elciclo y no vuelve a
evaluar la expresión, terminando definitivamente el ciclo, sin importar el
valor de la expresión. Estecomando funciona dentro de cualquier comando de
ciclos y condicionales (if, switch, while, do...while y for).

Ejemplo:

1 $veces = 7;
2 print "Se van a imprimir $veces n&uacute;meros: <br>";
3 for ( $contador = 0 ; $contador < $veces ; $contador++ ) {
4 // aquí checo por una condición especial para terminar el ciclo
5 if ( $contador == 5 ) {
6 print "Se va a terminar el ciclo prematuramente <br>";
7 break;
8 }
9 print " N&uacute;mero: $contador <br>";
10 }
11 print "Fin del ciclo, el contador vale $contador<br>";

El comando "continue" sirve para saltarse un ciclo, sin terminar de ejecutar los comandos
restantes del ciclo.
Ejemplo:

1 $veces = 7;
2 print "Se van a imprimir $veces n&uacute;meros: <br>";
3 for ( $contador = 0 ; $contador < $veces ; $contador++ ) {
4 // aquí checo por una condición especial para saltar un ciclo
5 if ( $contador == 4 ) {
6 print "Se va a saltar un ciclo <br>";
7 continue;
8 }
9 print " N&uacute;mero: $contador <br>";
10 }
11 print "Fin del ciclo, el contador vale $contador<br>";

http://www.pacoarce.com Pág 20
Introducción a PHP

3- Arreglos
Existen un tipo de "cajitas" que pueden contener mas de un valor
independiente a la ves, y se llaman "arreglos" (arrays). Estopuede visualizarse
como una caja de herramientas con compartimentos independientes, pero
todos unidos formando una sola"caja". No se pueden separar los
compartimentos de la caja principal, y ahí donde va la caja principal, van las
"cajitas" que estacontiene.

La variable tiene un solo nombre, pero las "cajitas" que contiene son
numeradas, desde el "cero" en adelante, para saberconque
compartimento se va a trabajar.

Creación de arreglos

1- Usando el comando "array":

$meses = array ( "Enero", "Febrero", "Marzo", "Abril", "Mayo",


"Junio", "Julio",
"Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");

2- Usando los caracteres "[" y "]" para ir llenando "el siguiente elemento" del
arreglo, comenzando en el elemento "cero":

$días[] = "Lunes";
$días[] = "Martes";
$días[] = "Miércoles";
$días[] = "Jueves";
$días[] = "Viernes";
$días[] = "Sábado";
$días[] = "Domingo";

3- Usando los caracteres "[" y "]" con un número en su interior para ir


llenando "el elemento número..." del arreglo:

$calificaciones[0] = 8;
$calificaciones[1] = 9;
$calificaciones[2] = 7;
$calificaciones[3] = 6;

La manera de accesar un elemento de un arreglo es escribir el nombre del


arreglo, seguido de los caracteres "[" y "]" con elnúmero del elemento en

http://www.pacoarce.com Pág 21
Introducción a PHP

su interior:

print "El elemento 3 del arreglo meses es $meses[3] <br>";

Esto muestra el mes "Abril". Recuerde que todos los elementos comienzan en
cero.

Para mostrar todos los elementos de un arreglo se usan los ciclos.

Ejemplo:

1 for( $contador = 0 ; $contador < 12 ; $contador++ ) {


2 print "Elemento $contador del arreglo meses = $meses[$contador] <br>";
3 }
4 print "Fin del ciclo, el contador vale $contador <br>";

A veces no se conoce de antemano el tamaño de un arreglo, como veremos en la sección de


"Formas de HTML". El comando para averiguar la cantidad de elementos que tiene un arreglo
es:

count(nombre-del-arreglo)
Ejemplo:

1 $elementos = count($días);
2 for( $contador = 0 ; $contador < $elementos ; $contador++ ) {
3 print "Elemento $contador del arreglo días = $días[$contador] <br>";
4 }
5 print "Fin del ciclo, el contador vale $contador <br>";

Recorriendo todo un arreglo con "foreach"

Para evitar todo este manejo de contadores, tamaño del arreglo y el uso de los
caracteres "[" y "]" se puede usar el comando"foreach" para recorrer todo un
arreglo.

La sintaxis básica para este comando es:

foreach( nombre-del-arreglo as elemento ) {


comando;
}

La parte del "elemento" es una variable que se define en ese instante y va a servir
como "cajita provisional" para contener elvalor de cada elemento. La desventaja de
este método es que no se puede saber que numero de elemento es, salvo que

http://www.pacoarce.com Pág 22
Introducción a PHP

sevuelva a usar un contador.

Ejemplo:

1 foreach( $meses as $mes ) {


2 print " $mes <br> ";
3 }
4 print "Fin del ciclo <br>";

Operaciones con arreglos


Algunos comandos para manipular arreglos son:
-Mezclar dos o mas arreglos en uno solo, con el comando "array_merge".

Ejemplos:

1 $meses_y_dias = array_merge($meses, $días);


2 foreach( $meses_y_dias as $elemento ) {
3
4 print " $elemento <br> ";
5 }
6 print "Fin del ciclo <br>";
7
8 $meses_dias_califs = array_merge($meses, $días, $calificaciones);
9 foreach( $meses_dias_califs as $elemento ) {
10
11 print " $elemento <br> ";
12 }
13 print "Fin del ciclo <br>";

Agregar varios elementos al principio del arreglo, con el


comando "array_push"

Normalmente al agregar elementos a un arreglo se insertan al final del arreglo.

Ejemplo:

1 $quince_meses = array_push( $meses, "nuevo mes en el elemento 0", "nuevo mes en


2 el elemento 1", "nuevo mes en el elemento 2");
3 foreach( $ meses as $elemento ) {
4 print " $elemento <br> ";
5 }
6 print "Fin del ciclo <br>";

http://www.pacoarce.com Pág 23
Introducción a PHP

Quitar el primer elemento de un arreglo, con el comando


"array_shift"

1 $primer_dia = array_shift( $días );


2 print "El primer día es $primer_dia <br>";
3 foreach( $días as $día ) {
4 print " $día <br> ";
5 }
6 print "Fin del ciclo <br>";

Quitar cualquier elemento de un arreglo, con el comando "unset"

1 unset( $días[2] );
2 foreach( $días as $día ) {
3 print " $día <br> ";
4 }
5 print "Fin del ciclo <br>";

Buscar por un valor exacto en todo el arreglo, con el comando


"in_array"

1 $busca = "Lunes";
2 $si_no = in_array( $busca, $días );
3 if( $si_no == false ) {
4 print "No existe la palabra $busca en el arreglo 'días' <br>";
5 } else {
6 print "Si existe la palabra $busca en el arreglo 'días' <br>";
7 }

Ordenando arreglos
A veces es necesario ordenar los elementos de un arreglo. Esto se logra fácilmente
con el comando "sort", el cual ordena todoslos elementos de un arreglo de manera
"ascendente", o "de menos a mayor".

1 sort($días);
2 foreach( $días as $día ) {
3 print " $día <br> ";
4 }
5 print "Fin del ciclo <br>";

http://www.pacoarce.com Pág 24
Introducción a PHP

Arreglos asociativos
No siempre es conveniente usar números para identificar los elementos de un
arreglo. Para el humano es mas fácil usar"letreros" o "nombres" para identificar las
cosas.

PHP permite crear arreglos cuyos elementos tienen nombres en ves de números.

Existen varias formas de "crear" un arreglo asociativo:

1- Usando el comando "array":

Ejemplo:
1 $empleado = array (
2 nombre=>"Fulana de Tal",
3 puesto=>"Diseñadora",
4 edad=>28,
5 "proyecto actual"=>"pagina web"
6 );

2- Usando los caracteres "[" y "]" con un "nombre" en su interior para ir llenando
"el elemento nombre..." del arreglo:

Ejemplo:
1 $empleado[“nombre”] = "Fulana de Tal";
2 $empleado[“puesto”] = "Diseñadora";
3 $empleado[“edad”] = 28;
4 $empleado["proyecto actual"] = "pagina web";

Para mostrar todos los elementos de un arreglo asociativo se usa una pequeña
variante del comando "foreach". Ejemplo:

Ejemplo:
1 foreach( $empleado as $llave=>$valor ) {
2 print "El elemento $llave contiene $valor <br>";
3 }
4 print "Fin del ciclo <br>";

Para ordenar los elementos de un arreglo asociativo se usa el comando "asort".


Ejemplo:

Ejemplo:
1 asort( $empleado );
2 foreach( $empleado as $llave=>$valor ) {
3 print "El elemento $llave contiene $valor <br>";
4 }
5 print "Fin del ciclo <br>";

http://www.pacoarce.com Pág 25
Introducción a PHP

4- Funciones
Una función es un bloque de código de PHP que no es ejecutado inmediatamente,
sino que puede ser "llamado" o ejecutadodesde el código "principal" varias veces.
Una función es la definición de una "rutina", que es probable que se vaya a ejecutar
muchas veces.

La vida real esta llena de rutinas que se ejecutan una y otra ves, pero rara ves la
"anotamos" una ves que la aprendemos. Pero alestar aprendiendo algunas rutinas de
la vida real, el humano se apoya apuntando la rutina para ejecutarla mas adelante
con esosapuntes. El caso típico es una receta de cocina.

Todas las recetas de cocina tienen un "nombre": "Pay de cerezas", "Pastel de


chocolate", etc. También una lista deingredientes: huevos, harina, leche, etc. Y
finalmente una descripción o método para llevarla a cabo. Los lenguajes
deprogramación trabajan de manera similar (siendo el humano quien los inventó,
siguen un modelo familiar de hacer las cosas).

Creación de funciones
La sintaxis general para crear o definir una función es la siguiente:

function nombre_de_la_receta ( ingredientes ) {


comando;
comando;
}

El nombre de las funciones sigue las reglas de los nombres de las variables, con
una excepción: el símbolo "$" al principio delnombre.

Los ingredientes son una lista de variables, separada por comas. Aquí es posible
crear una "receta de cocina" sin ingredientes,por mas extraño que parezca.

Ejemplo:

1 function muestra_arreglo ( $arreglo ) {


2 foreach( $arreglo as $elemento ) {
3 print " $elemento <br> ";
4 }
5 print "Fin del ciclo <br>";
6 }
7 // aquí comienza el código principal
8 $meses = array ( "Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio",
9 "Julio","Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre")
10 $calificaciones[0] = 8;

http://www.pacoarce.com Pág 26
Introducción a PHP

11 $calificaciones[1] = 9;
12 $calificaciones[2] = 7;
13 $calificaciones[3] = 6;
14 print "Se va a imprimir el contenido del arreglo 'calificaciones' <br>";
15 muestra_arreglo( $calificaciones );
16 print "Se va a imprimir el contenido del arreglo 'meses' <br>";
17 muestra_arreglo( $meses );
18 print "Fin de la rutina principal <br>";

Parámetros
A los ingredientes de la receta se les llama parámetros.

En la vida real cuando se le pide a alguien que vaya a la tienda a comprar un


refresco, se le dice el tamaño y el sabor delrefresco. La persona que va a comprar el
refresco, sabe la rutina de memoria: salir de la casa, dirigirse a la tienda, ir
alrefrigerador y tomar un refresco, ir a la caja a pagarlo, recibir el cambio y
regresar a la casa. La rutina es siempre lo mismo,excepto el tamaño del refresco y
el sabor. Esos datos pueden variar en cada ocasión que se le pide ir por el refresco a
la tienda.

Variables locales y globales


Los parámetros de una función se convierten en variables "locales": son "copias" y
solo son validas y existen mientras se estaejecutando la función. Al terminar,
desaparecen, sin alterar o modificar las variables "reales" de la rutina principal.

Las variables de la rutina principal se conocen como "globales", pero son muy
respetuosas y no se meten a las funciones amenos que las inviten.

A veces es necesario modificar el valor de alguna o algunas variables "globales"


desde una función. Así que es "obligación" dela función el "invitar" a las variables
globales para que puedan ser modificadas por la función. No pueden ser pasadas
comoparámetros, ya que estos son copias locales.

Para invitar a una variable global en una función se usa el comando "global". La
sintaxis general es la siguiente:

global lista-de-variables;

La lista de variables es separada por comas.

Ejemplo:

1 function calcula_iva ( $subt, $porcentaje ) {


2 global $iva;
3 $iva = $subt * ( 1 + $porcentaje );
4 }
5
6 // aquí comienza el código principal y aquí comienza la ejecución 'automática'

http://www.pacoarce.com Pág 27
Introducción a PHP

7
8 $subtotal = 1500;
9 $tasa = 0.15;
10 $iva = 0;
11 print "Subtotal $subtotal <br>";
12 calcula_iva ( $subtotal, $tasa );
13 print "IVA $iva <br>";
14 $total = $subtotal + $iva;
15 print "Total $total <br>";

Regreso de valores
En el ejemplo de la compra del refresco, la "rutina" regresa un valor: el refresco.
¿Y que pasa si no hubo el sabor y tamañoespecificado? Si esto se le encargó a un
adulto es posible que tome una decisión en la tienda y traiga otro sabor y/o tamaño
derefresco. Pero un niño, o persona sin experiencia en esta rutina, regresará con las
manos vacías. Y aún esto es un resultado dela rutina: "No había de ese sabor,
mamá".

Las funciones pueden regresar un valor después de ser llamadas, pero solo pueden
regresar un valor directamente. Si se desea"simular" el regreso de varios valores, se
declaran variables globales y se modifican dentro de la función. Así, al terminar
lafunción dejará una "herencia" de variables globales modificadas.

Para regresar un valor, se usa el comando "return".

Ejemplo:

1 function calcula_iva ( $subt, $porcentaje ) {


2 $iva_local = $subt * ( 1 + $porcentaje );
3 return $iva_local;
4 // también se puede usar esta forma:
5 // return $subt * ( 1 + $porcentaje );
6 }
7 function valida_edad ( $edad ) {
8 if ( $edad <= 0 or $edad > 120 ) {
9 return true;
10 } else {
11 return false;
12 }
13 // también se puede usar esta forma:
14 // return ( $edad <= 0 or $edad > 120 ) ? true : false;
15 }
16 // aquí comienza el código principal
17 $subtotal = 1500;
18 $tasa = 0.15;
19 $iva = 0;
20 $edad = 294;
21 print "Subtotal $subtotal <br>";
22 $iva = calcula_iva ( $subtotal, $tasa );
23 print "IVA $iva <br>";
24 $total = $subtotal + $iva;
25 print "Total $total <br>";
26 if( valida_edad($edad) ) {

http://www.pacoarce.com Pág 28
Introducción a PHP

27 print "La edad es v&aacute;lida: $edad <br>";


28 } else {
29 print "Favor de corregir la edad <br>";
30 }

http://www.pacoarce.com Pág 29
Introducción a PHP

5- Formas de HTML
Hasta ahora los ejemplos usados han usado el comando "print" para comunicar
algo al usuario: resultados de las rutinas. Peroel usuario ha estado "mudo", sin
posibilidad de una comunicación de dos vías con la rutina de PHP.

Al usar el PHP mediante un servidor de páginas web, el único medio de


comunicación "interactiva" con los usuarios es a travésde formas de HTML. En
ellas, el usuario escribe datos que son evaluados y procesados por una rutina de
PHP y se genera unresultado.

Paso de valores y llamado de la rutina de PHP

Todos los valores que recibe una rutina PHP son de tipo "string" (cadena de
caracteres), aun los valores numéricos que el
usuario final pudiera llegar a escribir.

Es muy importante especificar en el HTML dos cosas:

1- El URL (nombre) de la rutina a ejecutar cuando el usuario oprime el botón de


"mandar" los datos escritos y/o seleccionados
de la forma.

2- Bautizar los elementos de la forma que van a ser evaluados por la rutina de PHP.

Para el primer punto se incluye en la etiquete "action" de la forma el nombre del


archivo donde está la rutina de php a usar. Si
se usa un editor de páginas web, se debe escribir en el campo "Action" el mismo
nombre.
Ejemplo de HTML:

<form action="valida.php" method="POST">

Ejemplo de Dreamweaver:

Para el segundo punto, es indispensable nombrar los campos, botones, combos y


listas de HTML, usando las mismas reglas denombres de variables de PHP, pero

http://www.pacoarce.com Pág 30
Introducción a PHP

sin el "$".

Ejemplos de HTML:

1 Escriba su nombre: <input type="text" name="nombre">


2 Escriba su password: <input type="password" name="contrasena">
3 Escriba sus comentarios: <textarea name="comentarios" rows="10" cols="60">
4 </textarea>
5 Estado civil: <input name="edo_civil" type="radio" value="soltero" checked>
6 Soltero
7 <input name="edo_civil" type="radio" value="casado"> Casado
8 <input name="edo_civil" type="radio" value="divorciado"> Divorciado
9 <input name="edo_civil" type="radio" value="viudo"> Viudo
10 Gustos Musicales: <input name="musica[]" type="checkbox" value="rock"> Rock
11 <input name="musica[]" type="checkbox" value="pop"> Pop
12 <input name="musica[]" type="checkbox" value="clasica"> Clasica
13 Pasatiempo favorito: <select name="hobbie">
14 <option value="cine" selected>Cine</option>
15 <option value="baile">Baile</option>
16 <option value="dormir">Dormir</option>
17 <option value="comer">Comer</option>
18 </select>
19 <select name="idiomas[]" size="3" multiple>
20 <option value="esp" selected>Espa&ntilde;ol</option>
21 <option value="ing">Ingl&eacute;s</option>
22 <option value="fra">Franc&eacute;s</option>
23 <option value="ita">Italiano</option>
24 <option value="ale">Alem&aacute;n</option>
25 <option value="por">Portugu&eacute;s</option>
26 <option value="rus">Ruso</option>
27 <option value="jap">Japon&eacute;s</option>
28 <option value="gae">Ga&eacute;lico</option>
29 </select>

http://www.pacoarce.com Pág 31
Introducción a PHP

Ejemplos de Dreamweaver:

Generalmente el servidor de PHP está configurado para crear variables globales


con los mismos nombres de los elementos delas formas. Usando los ejemplos
anteriores, al ejecutar la rutina "valida.php" se crearán automáticamente las
siguientes queda "no definida" y por lo tanto, vacía

variables
Nombre de la Contenidos lo que el usuario escriba en el campo
Tipostring
variable $nombre "nombre"

$contrasena string lo que el usuario escriba en el campo "contrasena"


$comentarios string lo que el usuario escriba en el campo "comentarios"
solo uno de estos: "soltero" , "casado", "divorciado",
$edo_civil string
viudo"
$musica array en los elementos del arreglo estarán las opciones que el
usuarioseleccione en los cuadros: "rock", "pop",
"clasica". Si el usuario NOselecciona una sola opción, la
variable $musica queda "no definida"y por lo tanto,
vacía

http://www.pacoarce.com Pág 32
Introducción a PHP

$hobbie string solo uno de estos: "cine" , "baile", "dormir"


$idiomas array en los elementos del arreglo estarán las opciones que el
usuarioseleccione de la lista: "esp", "ing", "fra", "ita",
"ale", "por", "rus","jap", "gae".Si el usuario NO
selecciona una sola opción, la variable $idiomas

Para crear una variable de tipo arreglo, en el nombre del campo se deben incluir los
caracteres "[" y "]" al final del nombre.Esta opción es muy útil en las etiquetas
"<select>".

Campos ocultos
A veces es necesario incluir valores que sean asignados a una variable al mandar
una forma, pero sin que el usuario se entere.Para esto se usan los campos ocultos.
Supongamos que se desea pasar los nombres de las plantillas de HTML que se van
amostrar si hubo un error en el llenado de la forma, y otra cuando el llenado fue
exitoso.

En la sección "Redirección a otra páginas" se verá un ejemplo del uso de estos


campos y la redirección a plantillas de HTML.Ejemplo de HTML:

<input name="error" type="hidden" value="forma_error.html">


<input name="ok" type="hidden" value="forma_ok.html">

Ejemplo de Dreamweaver:

Validaciones
Una ves recibidos los valores del usuario hay que validarlos antes de poder
procesarlos. Las validaciones son operacionesnecesarias en toda rutina, y
pueden llegar a consumir tiempo y esfuerzo. En esta sección se muestra un tipo
muy básico devalidaciones, solo como base para usarse en la vida real.

Para los campos de tipo texto, como nombre, dirección, contraseña, etc, lo primero
a validar es que contengan algo. El usuariopuede escribir solo espacios, y también
hay que validar esta situación.

Lo primero es quitar espacios antes y después de otros caracteres, para

http://www.pacoarce.com Pág 33
Introducción a PHP

"recortar" el espacio en blanco. Para esto se usa lafunción integrada "trim":

$nombre = trim( $nombre );

Luego hay que checar si después de este "recorte" aun queda algo, o sea
probar si la variable está vacía o no. Esto puedehacerse de varias formas, y
aquí hay dos ejemplos:

Ejemplo:
1 if ( $nombre == "" ) {
2 // aquí va la rutina de error
3 comando;
4 comando;
5 ...
6 }
7 if ( strlen($nombre) == 0 ) {
8 // aquí va la rutina de error comando;
9 comando;
10 ...
11 }

El primer ejemplo compara la variable $nombre contra un string "vacío",


representado por dos comillas. El segundo usa unafunción integrada que obtiene la
longitud de un string (strlen) y la compara contra el número 0. En ambos casos, si
esto llega aser verdadero (true), se ejecutará el código para manejar ese error.

En el caso de valores numéricos, como edad, precio, cantidades, etc, hay que
recordar que llegan a la rutina de PHP comocadena de caracteres. Así que la
primera validación es igual a la de los ejemplos anteriores. Pero luego hay que
convertir esosvalores a enteros (integer) o números con punto decimal (double) y
validar rangos.

http://www.pacoarce.com Pág 34
Introducción a PHP

Ejemplos:

1 // validación de edad, mínima 18 y máxima 130 (por poner un máximo)


2 $edad = trim( $edad );
3 $edad = (integer) $edad;
4 if ( $edad < 18 or $edad > 130 ) {
5 // aquí va la rutina de error
6 comando;
7 comando;
8 ...
9 }
10 // validación de cantidad, como en un carrito de compra, limite máximo:
11 $limax = 20;
12 $cantidad = trim( $cantidad );
13 $cantidad = (integer) $cantidad;
14 if ( $cantidad < 1 or $cantidad > $limax ) {
15 // aquí va la rutina de error
16 comando;
17 comando;
18 ...
19 }
20 // validación de un campo de tipo subtotal de una factura o pedido
21 // por el momento se asume que no incluye ni comas ni "$"
22 $subtotal = trim( $subtotal );
23 $subtotal = (double) = $subtotal;
24 if ( $subtotal <= 0 ) {
25 // aquí va la rutina de error
26 comando;
27 comando;
28 }

Para las variables de tipo array, que se manejan en los combos de lista y los
cuadros de checado, lo primero a validar es siexiste el arreglo, ya que si el
usuario no selecciona ninguna opción, no se genera un arreglo vacío, sino que la
variable nisiquiera existe. En el caso de existir, es bueno saber cuantos
elementos tiene el arreglo.

Ejemplos:

1 // validar el arreglo $musica, que contiene los gustos musicales del usuario
2 if ( isset( $musica ) ) {
3 // si existe el arreglo, averiguo cuantos elementos tiene
4 $num_elementos = count( $musica );
5 } else {
6 // no existe el arreglo
7 $num_elementos = 0;
8 // el hecho de que no exista el arreglo no necesariamente
9 // genera un error, por eso no muestro una plantilla de error
10 }

La función integrada "isset" checa por la existencia de una variable, y regresa


"true" si existe (y tiene algún valor).

http://www.pacoarce.com Pág 35
Introducción a PHP

Redirección a otras paginas


Para mostrar una página de HTML previamente diseñada, o enviar al usuario a
alguna localidad del internet, existe la función"header", que solo lleva un parámetro
con el URL (dirección local o global).

La sintaxis básica para este comando es:

header ( "location: URL" );

Es recomendable terminar la rutina después de usar este comando, ya que si se usa


algún comando que muestre algo (print,echo), se va a generar un error. Para esto se
usa el comando "exit". Esto hace que ya no se ejecute ninguna otra instrucción dela
rutina de PHP, sin importar donde se encuentre ejecutandose.

Cuando se usan campos ocultos en formas de HTML, se pueden definir desde el


HTML el nombre de las plantillas que se vana desplegar en caso de error y en caso
de éxito, liberando así la necesidad de cambiar o editar el código de PHP cuando
sedesean crear nuevos archivos gráficos. Tal ves para el programador no representa
mucho esfuerzo este cambio tan sencillo alcódigo, pero para los diseñadores sin
experiencia en programación es en extremo fácil cambiar el valor de una variable
oculta en algún editor de páginas web.

Ejemplos:

1 // validación de nombre
2 $nombre = trim( $nombre );
3 if ( $nombre == "" ) {
4 // aquí muestro la plantilla de HTML que contiene la variable $error
5 // por el momento no le paso ningún parámetro, solo muestro la página
6 header( "location: $error");
7 // es indispensable terminar la ejecución de la rutina
8 exit;
9 }
10 // ejemplo de redirección a otra página, local
11 header( "location: menu.html" );
12 exit;
13 // ejemplo de redirección a otro sitio
14 header( "location: http://www.apple.com/quicktime/" );
15 exit;

http://www.pacoarce.com Pág 36
Introducción a PHP

Hipervínculos a rutinas php


Hasta ahora se ha visto como llamar una rutina o archivo de PHP desde una forma
de HTML y desde un navegador de páginas
web. Pero es posible crear hipervínculos en una página de HTML a cualquier rutina
de PHP.
Solo basta con escribir el nombre del archivo que contiene la rutina de PHP.
Ejemplo en HTML:

<a href="ayuda.php">ayuda</a>

Ejemplo en Dreamweaver:

Esto mismo aplica a otros programas como Flash, Director, etc.

Paso de parámetros en hipervínculos


Como ya se describió anteriormente, es posible pasar valores sin que el usuario
final se entere o se involucre, usando camposocultos en formas de HTML. Esto
también es posible hacerlo en un hipervínculo de HTML.

La sintaxis básica para el vínculo es:

archivo_de_la_rutina.php?variable1=valor1&variable2=valor2&variable2=valor3

Se escribe el nombre del archivo que contiene la rutina de PHP, seguido del
caracter "?" y una lista de nombres de variables, elsímbolo "=" y el valor de esa
variable, separada por el caracter "&". Si algún valor lleva espacios, se deben usar
comillas oapóstrofes para delimitar el valor.

Ejemplos en HTML:

<a href="ayuda.php?tema=5&plantilla=ayuda_gral.html">ayuda</a>

<a href="ayuda.php?tema='llenado de

http://www.pacoarce.com Pág 37
Introducción a PHP

formas'&plantilla=ayuda_gral.html">ayuda</a>

Ejemplos en Dreamweaver:

http://www.pacoarce.com Pág 38
Introducción a PHP

6- Fechas y strings
En esta sección se cubren las instrucciones para manejo de horas y fechas, manejo
de cadenas de caracteres y ejemplos de usoscomunes en validación de fechas y
textos.

El manejo de hora y fecha es una herencia del Unix, y aunque el manejo interno
es muy sencillo, hay que entender el formato"nativo".

En PHP los datos de hora y fecha se representan exclusivamente como


"segundos": los segundos transcurridos desde el 1 de enero de 1970 (fecha
"oficial" de la era del Unix). Así es que cualquier hora o fecha es representada en
"segundos". Estofacilita las operaciones de adición y sustracción de fechas, pero
impone un formato poco familiar al humano.

Afortunadamente, existen varios comandos para lidiar con esto y convertir las
horas y fechas entre los formatos interno y elformato que e humano está
acostumbrado.

Comando "time"
Para obtener la hora y fechas actuales, se usa la función integrada "time". Es
importante notar que este comando reporta lafecha del servidor donde se está
ejecutando la rutina de PHP, y no la fecha de la máquina del usuario.

Esta función regresa un número entero que representa el número de segundos


desde el inicio de la época de Unix ( 1 enero1970).

La sintaxis básica para este comando es:

$segundos = time();

Esta función por si sola no es muy útil para el humano, ya que no está
acostumbrado a ver el número de segundos desde unafecha arbitraria para saber
que día y que horas son.

Comando "date"
Afortunadamente existe una función que permite mostrar el número de segundos de
una manera familiar para el humano: date.Es importante saber que los nombres o
abreviaciones de meses y días de la semana se reportan generalmente en el
idiomainglés.

http://www.pacoarce.com Pág 39
Introducción a PHP

La sintaxis básica para este comando es:

$letrero = date( "caracteres", segundos );

Los caracteres que se pueden incluir son muchos y se describen en la siguiente


tabla. Cualquier otro caracter se ignora y sepasa directamente al resultado.

Caracter Descripción"am" o "pm", en minúsculas Ejemplos am


a
A "AM" o "PM", en mayúsculas PM
d numero de día del mes, con ceros antes cuando es menor a 10 02 , 25
D día de la semana, abreviado a tres letras Sat , Mon

F nombre del mes January , June


hora del día, formato de 12 horas, con ceros antes cuando es
h 02 , 11
menor a 10
hora del día, formato de 24 horas, con ceros antes cuando es
H 09 , 13 , 23
menor a 10
hora del día, formato de 12 horas, sin ceros antes cuando es
g 2 , 11
menor a 10
hora del día, formato de 24 horas, sin ceros antes cuando es
G 9 , 13 , 23
menor a 10
i minutos 06 , 34 , 59

j numero de día del mes, sin ceros antes cuando es menor a 10 2 , 25


Sunday,
l día de la semana
Thursday
L año bisiesto (0 para no, 1 para si) 1
m número del mes del año, con ceros antes cuando es menor a 10 01 , 12
M mes del año, abreviado a tres letras Mar, Dec
n número del mes del año, con ceros antes cuando es menor a 10 02 , 10

s segundos 07 , 45

U numero de segundos desde 1 enero 1970 948373546


y año, dos dígitos 59 , 99 , 04
1960 , 1994 ,
Y año, cuatro dígitos
2003
8 , 186 , 237 ,
z número de día del año, entre 0 y 365
364

http://www.pacoarce.com Pág 40
Introducción a PHP

Z desfase en segundos de la hora GMT (meridiano de Greenwitch) 0 , 368


Ejemplos:

1 $fecha = time();
2 $letrero = date ( "d/m/Y" , $fecha );
3 print "La fecha de hoy es $letrero <br>";
4 // esto imprime algo así: La fecha de hoy es 09/02/2003
5
6 $tiempo = time();
7 $hora = date ( "H:i:s" , $tiempo );
8 print "La hora es $hora <br>";
9 // esto imprime algo así: La hora es 09:58:37
10
11 $segundos = time();
12 $día = date( "l" , $segundos );
13 $dia2 = date( "j" , $segundos );
14 $mes = date( "F" , $segundos );
15 $anio = date( "Y" , $segundos );
16 $hora = date( "h" , $segundos );
17 $ampm = date( "A" , $segundos );
18 $mins = date( "i" , $segundos );
19 print "Hoy es $día $dia2 de $mes de $anio, y son las $hora $ampm con $mins
20 minutos...
21 buen día! <br>";
22 // esto imprime algo así: Hoy es Friday 18 de September de 1959, y son las 2
23 PM con
24 18 minutos... buen día!

Más adelante veremos como obtener los nombres de los días y meses en otro
idioma.

Comando "getdate"
Existe una manera de obtener los datos más comunes de hora y fecha, mediante la
función integrada "getdate".

La sintaxis básica para este comando es:

$arreglo = getdate( segundos );

Si el parámetro "segundos" se omite, se usa el resultado de la función "time".

Este comando regresa un arreglo asociativo con los siguientes datos:

Nombre del elemento Descripciónsegundos del minuto, entre 0 y Ejemplo23


seconds 59

http://www.pacoarce.com Pág 41
Introducción a PHP

minutes minutos de la hora, entre 0 y 60 15


hours horas del día, entre 0 y 23 22
mday día del mes, entre 1 y 31 10
wday día de la semana, entre 0 y 6 2
mon mes del año, entre 1 y 12 2
year año, cuatro dígitos 2001
yday día del año, entre 0 y 365 43
weekday nombre del día de la semana Tuesday
month nombre del mes del año February
0 segundos 983671286

Ejemplo:

1 // defino los meses en español


2 $meses = array ( "vacio", "Enero", "Febrero", "Marzo",
3 "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre",
4 "Noviembre", "Diciembre");
5
6 // defino los nombres del día de la semana en español
7 $días = array ( "Domingo", "Lunes", "Martes", "Miércoles", "Jueves",
8 "Viernes", "Sabado" );
9
10 // como la flojera de escribir, en ves de usar esto:
11 // $segundos = time();
12 // $detalle = getdate( $segundos );
13 // uso esto mas corto:
14 $detalle = getdate();
15
16 $día = $días[$detalle[wday]];
17 $mes = $meses[$detalle[mon]];
18
19 print "Hoy es $día $detalle[mday] de $mes de $detalle[year], y son las
20 $detalle[hours] con $detalle[minutes] minutos... y todo eso salió de aquí:
21 $detalle[0]<br>";

Comando "mktime"
Cuando se desea saber que hora y fecha es, todo va muy bien hasta aquí.. Pero
que pasa cuando se desean hacer operacionescon fechas? El PHP solo entiende
de segundos, y nada más. Y que pasa si el usuario escribe una fecha, o una hora?

El comando mktime es el primer paso para solucionar los problemas descritos,


convirtiendo hora y fecha de formato "humano"a segundos.

http://www.pacoarce.com Pág 42
Introducción a PHP

La sintaxis básica para este comando es:

$segundos = mktime( hora, minuto, segundo, mes, dia, anio );

Todos los parámetros son números enteros.

Ejemplo:

1 // este código supone que el usuario selecciono un día, mes y año de


2 // tres combos (pop-up menus) llamados "mes", "día" y "anio"
3 // que regresan solo números. ejemplo del combo "mes":
4 // <select name="mes">
5 // <option value="1" selected>Enero</option>
6 // <option value="2">Febrero</option>
7 // <option value="3">Marzo</option>
8 // <option value="4">Abril</option>
9 // <option value="5">Mayo</option>
10 // <option value="6">Junio</option>
11 // <option value="7">Julio</option>
12 // <option value="8">Agosto</option>
13 // <option value="9">Septiembre</option>
14 // <option value="10">Octubre</option>
15 // <option value="11">Noviembre</option>
16 // <option value="12">Diciembre</option>
17 // </select>
18
19 // validaciones, validaciones!!! dan flojera pero son necesarias...
20 // como los valores vienen de un combo, la validación es mínima
21
22 $día = (integer) $día;
23 $mes = (integer) $mes;
24 $anio = (integer) $anio;
25
26 $hoy = time();
27
28 // fecha de nacimiento del usuario
29 // como no se saben la hora, minuto y segundo, se ponen ceros
30 $nace = mktime( 0, 0, 0, $mes, $día, $anio );
31 $día = date( "l", $nace );
32
33 $vivido = $hoy - $nace; // BIEN VIVIDOS! :-)
34
35 print "Usted nació un $día y ha vivido: <br>";
36 print " $vivido segundos <br>";
37 $minutos = $vivido / 60;
38 print "o $minutos minutos <br>";
39 $horas = $vivido / 60 / 60;
40 print "o $horas horas <br>";
41 $días = $vivido / 60 / 60 / 24;
42 print "o $días días <br>";
43 $semanas = $vivido / 60 / 60 / 24 / 7;
44 print "o $semanas semanas <br>";
45 $meses = $vivido / 60 / 60 / 24 / 30;
46 print "o aproximadamente $meses meses <br>";
47 $anios = $vivido / 60 / 60 / 24 / 365;
48 print "o aproximadamente $anios anios <br>";
49 print " wow! <br>";

http://www.pacoarce.com Pág 43
Introducción a PHP

Validando fechas con "checkdate"

No siempre se puede dar el lujo de recibir la fecha del usuario a través de


combos. A veces no hay otra mas que poner uncampo de texto. Esto complica
un poquito mas las cosas, pero nada que no se pueda resolver.

Examinemos de cerca el problema y deduzcamos lo que se necesita para


resolverlo. Al usuario final se le mostrará un campode texto pidiendo que escriba
una fecha, en formato "dd/mm/aaaa" (día, mes y año numéricos, separados por
un "/").

Lo primero por hacer es deshacerse de los espacios extras que pudieran


"colarse", usando el comando "trim". Luego checar siaun sobra algo después de
la rasurada. Pan comido, esto ya lo deben de dominar a estas alturas... o no?

Lo siguiente es separar de alguna manera el día, mes y año, para posteriormente


validarlos. "Mmmm... suena sencillo, pero...".Para esto se usa la función integrada
"explode", que permite separar textos que están delimitados por un caracter en
especial, ycrear un arreglo con las partes "explotadas".

La sintaxis básica para este comando es:

$arreglo = explode( separador, string );

El parámetro "separador" es un caracter o caracteres que separan los textos del


"string".

Ejemplo:

$datos_fecha = explode ( "/", $fecha );

En el caso de nuestro "problema", el arreglo $datos_fecha contiene 3 elementos:


día, mes y año. Listo! No estuvo tan difícil. Y que pasa si el usuario usó otro
"separador", como "-"? Ya sabemos que a veces a los usuarios les da por poner a
pruebanuestros programas, pero no lo hacen a propósito... o si? Gulp! y si eso
sucede? Pues a validar! Esto también lo deben dominar a estas alturas.
Una ves pasada la validación básica, hay que checar que los datos de día no se
salgan del rango, según su mes, y que febreropueda tener 29 días en años bisiestos
("que flojera!!!").

Para esto llega al rescate de los flojos el comando "checkdate". Se le pasan como
parámetros el mes, día y año y regresa unvalor booleano, indicando si la fecha es
válida o no (true o false).

http://www.pacoarce.com Pág 44
Introducción a PHP

La sintaxis básica para este comando es:

$si_o_no = checkdate( mes, día, anio );

Ejemplo:

1 // este código asume que la fecha la escribe el usuario en un campo de texto


2 // llamado "fecha", en formato "dd/mm/aaaa"
3 // y que la plantilla de "error" esta en un campo invisible llamado "error"
4 // validación, parte 1
5 $fecha = trim($fecha);
6 if( $fecha == "" ) {
7 // mando plantilla de error y termino el programa
8 header( "location: $error" );
9 exit;
10 }
11
12 // vamos a explotar cosas, como en los video juegos... que divertido!
13 $df = explode( "/", $fecha );
14 // validación, parte 2
15 if( count($df) != 3 ) {
16 // mando plantilla de error y termino el programa
17 header( "location: $error" );
18 exit;
19 }
20
21 // validación, parte 3
22 foreach( $df as $valor ) {
23 $valor = (integer) $valor;
24 if( $valor < 1 ) {
25 // mando plantilla de error y termino el programa
26 header( "location: $error" );
27 exit;
28 }
29 }
30
31 // validación
32 if( checkdate( $df[1], $df[0], $df[2] ) == false ) {
33 // mando plantilla de error y termino el programa
34 header( "location: $error" );
35 exit;
36 }
37
38 // al fin!!! ahora si ya puedo comenzar a hacer ALGO con esa fecha...
39 $nace = mktime( 0, 0, 0, $df[1], $df[0], $df[2] );

En el ejemplo cabe notar que el orden de la fecha es "día/mes/año": "día" en


el elemento 0 del arreglo $df, "mes" en elelemento 1 del arreglo $df, y "año"
en el elemento 2 del arreglo $df (si es que el usuario hizo caso). Pero las
funciones demanejo de fechas en PHP usan el formato "mes/día/año", por eso
el orden en los parámetros es "$df[1], $df[0], $df[2]".

http://www.pacoarce.com Pág 45
Introducción a PHP

Comando "printf"

En los ejemplos anteriores, al imprimir ciertos datos numéricos que involucran


"miles" y "decimales" se nota que los datos son"demasiado crudos" para el
humano, como la ausencia de comas para dividir los miles, millones, etc, y una
exuberancia devalores decimales. A las computadoras no parece molestarles eso,
pero los humanos lo encuentran ligeramente irritante.

Para "formatear" (arreglar, "vestir", "adornar", eso que tanto les agrada a los
humanos) un valor numérico de modo que seamás fácil su lectura, se usa la
función integrada "printf".

La sintaxis básica para este comando es:

printf ( control_del_formato, lista_de_numeros );

El primer parámetro es un "string" en el cual se indica el formato a dar al segundo


parámetro, que puede ser desde un solonúmero (o variable numérica), hasta una
lista de números separada por comas.

El formato a aplicar son una combinación de caracteres, que comienzan


siempre con el caracter "%", seguidos de algúncaracter especial. Los
caracteres mas usados se describen en esta tabla:

Caracter Descripciónd muestra un número en base 10, o en formato decimalb


muestra un número entero en base 2, o en formato binariof muestra un número
entero como un número con decimales (double) s muestra un número como
"string"

Si antes de estas letras se incluye un número positivo, se insertan ese número


de espacios al formato antes del número. Si el número es negativo, se insertan
ese número de espacios al formato después del número.

Finalmente, para los números con decimales, se puede incluir un "." seguido del
número de decimales a mostrar.

Todo esto parece un poco complicado, pero querían "arreglar" su salida, no?
Con unos cuantos ejemplos quedará claro esteenredado asunto.
Ejemplo:

1 $entero= 1500;
2 $enterototote = 568423597;
3 $pi = 3.141592653589793;
4 print "Este es el valor de 'pi': $pi <br>";
5 printf ( "Lo mismo, pero solo con dos decimales: %.2f <br>", $pi );

http://www.pacoarce.com Pág 46
Introducción a PHP

6 printf ( "Y ahora con 6 decimales: %.6f <br>", $pi );


7 printf ( "Combinación. Un entero: %d, un enterototote: %d, y pi: %.4f <br>",
8 $entero, $enterototote, $pi );
9 // los documentos HTML normalmente no muestran mas de un espacio
10 // aunque se incluyan muchos, así que para ver el siguiente ejemplo
11 // hay que ver el "texto fuente" de la pagina en el navegador (view source)
12 printf ( "Ahora con espacios. Entero: %8d, y pi: %4.4f <br>", $entero, $pi );

Comando "sprintf"
Esta variante del comando "printf" no manda el resultado al navegador del
usuario, sino que crea un "string" para ser guardadoy usado mas adelante.

La sintaxis básica para este comando es:

$letrero = sprintf ( control_del_formato, lista_de_numeros );

Comando "number_format"
Este comando es muy usado para "formatear" valores numéricos de una manera
mas sencilla, y muy orientado a mostrarcantidades en formato de "moneda"
(pesos y centavos, pues). Solo incluye comas para separar miles, millones, etc, y
el númerode decimales indicado.

La sintaxis básica para este comando es:


$letrero = number_format ( numero, decimales );

Ejemplo:

1 $entero = 1500;
2 $enterototote = 568423597;
3 $pi = 3.141592653589793;
4 $iva = 0.15;
5 $total1 = $entero * ( 1 + $iva );
6 $total2 = $enterototote * ( 1 + $iva );
7 $stotal1 = number_format ( $total1, 2 );
8 $stotal2 = number_format ( $total2, 2 );
9 $spi = number_format ( $pi, 6 );
10 //
11 print "El total 1 es: $ $stotal1 <br>";
12 print "El total 2 es: $ $stotal2 <br>";
13 print "pi es: $spi <br>";

http://www.pacoarce.com Pág 47
Introducción a PHP

Operaciones básicas de strings


Existen muchas operaciones que aplican a "strings". Aqui sólo se mencionan las
mas usadas.

-Obtener la longuitúd de un string, con el comando "strlen". Ya se ha visto su uso


en las validaciones.

Ejemplo:

1 $letrero = "Esta es una cadena de caracteres";


2 $largo = strlen( $letrero );
3 print "El letrero '$letrero' tiene $largo caracteres <br>";

-Buscar y extraer un "sub-string" dentro de otro string, con el comando "strstr".


Primero busca el "sub-string" dentro del"string. Si no lo encuentra, regresa
"false". Si lo encuentra, regresa el "sub-string" encontrado.

Ejemplo:

1 $letrero = "Esta es una cadena de caracteres";


2 $busca = "cadena";
3 $resultado = strstr( $letrero, $busca );
4 if( $resultado === false ) {
5 print "No se encontro '$busca' en '$letrero' <br>";
6 } else {
7 print "Si se encontro '$busca' en '$letrero' <br>";
8 }

-Buscar un "sub-string" dentro de otro string y reportar la posición donde


comienza, con el comando "strpos". Primero busca el "sub-string" dentro del
"string. Si no lo encuentra, regresa "false". Si lo encuentra, regresa un entero
indicando la posición donde comienza.

Ejemplo:

1 $letrero = "Esta es una cadena de caracteres";


2 $busca = "cara";
3 $resultado = strpos( $letrero, $busca );
4 if( $resultado === false ) {
5 print "No se encontro '$busca' en '$letrero' <br>";
6 } else {
7 print "Si se encontro '$busca' en '$letrero'
8 print "comienza en el caracter # $resultado<br>";
9 }

http://www.pacoarce.com Pág 48
Introducción a PHP

-Extraer parte de un string, con el comando "substr". Se especifica el string de


donde extraer, el caracter donde se va acomenzar a extraer y opcionalmente la
longuitud o número de caracteres a extraer. Si no se especifica la cantidad de
caracteresa extraer, se extrae hasta el final del string.

Ejemplo:

1 $numero = 12548.3698;
2 $snumero = (string) $numero;
3 $busca = ".";
4 $comienza = strpos( $snumero, $busca );
5 if( $comienza === false ) {
6 print "No se encontro '$busca' en '$snumero' (no tiene decimales) <br>";
7 } else {
8 $enteros = substr( $snumero, 0, $comienza );
9 $decimales = substr( $snumero, $comienza+1 );
10 print "El numero $snum tiene esta parte entera: $enteros, y esta parte
11 decimal:
12
13 $decimales <br>";
14 }

-Cambiar todo un string a mayusculas, con el comando "strtoupper", o a


minusculas, con el comando "strtolower".

Ejemplo:

1 $letrero = "Este es Un Letrero, con ALTAS y bajas";


2 $altas = strtoupper( $letrero );
3 $bajas = strtolower( $letrero );
4 print "Letrero original: $letrero <br>";
5 print "Convertido a altas: $altas <br>";
6 print "Convertido a bajas: $bajas <br>";

Validación de campos con números en formato de pesos y centavos


Este caso es muy común, ya que los usuarios finales al pedir que llenen un campo
numérico con una cantidad, al menos usarán"," para separar miles, millones, etc.
Y a veces hasta incluyen el "$", a pesar de algún letrero en la forma indicando
que no lohagan. Para esto, se usa el comando "str_replace", que reemplaza unos
caracteres por otros en un string .

La sintaxis básica para este comando es:

$string_nuevo = str_replace( caracter_antiguo, caracter_nuevo, string );

Ejemplo:

1 // esta rutina supone que hay un campo en una forma de HTML llamado 'cantidad',
2 // que es la cantidad a pagar

http://www.pacoarce.com Pág 49
Introducción a PHP

3 // si no se revisa que la variable $cantidad no tenga comas y el signo "$",


4 // lo siguiente puede regresar un CERO
5 // $subtotal = (double) $cantidad;
6 // para asegurar que no haya caracteres "extraños" en la variable $cantidad,
7 // se sustituyen las "," y el "$" por un caracter nulo, borrandolas del mapa
8 $cantidad2 = str_replace( "$", "", $cantidad );
9 $cantidad2 = str_replace( ",", "", $cantidad2 );
10 $subtotal = (double) $cantidad2;
11 $ssubt = number_format( $subtotal, 2 );
12 $iva = $subtotal * 1.15;
13 $siva = number_format( $iva, 2 );
14 $total = $subtotal + $iva;
15 $stot = number_format( $total, 2 );
16 print "Subtotal $ $ssubt <br>";
17 print "IVA $ $siva <br>";
18 print "Total $ $stot <br>";

Convertir caracteres especiales de texto a HTML


Al estar manipulando datos de texto (nombres, descripciones, datos de archivos
creados previamente, datos de bases de datos,datos escritos por el usuario en una
forma, etc.) se presenta la necesidad de mostrar algunos caracteres especiales
(acentos,eñes, diéresis, etc.) en formato válido de HTML al generar resultados
que van a un navegador.

Para lograr esto de una manera rápida y sencilla se usa el comando


"get_html_translation_table".

La sintaxis básica para este comando es:

$tabla = get_html_translation_table( HTML_ENTITIES );

El parámetro debe ser escrito tal y como se muestra en la sintaxis. Una ves
obtenida la tabla de caracteres especiales, hay quesustituir todos los caracteres
especiales de un string con el comando "strtr".

Ejemplo:

1 // aquí se obtiene la tabla de traducción


2 // esto solo es necesario hacerlo UNA SOLA VES en el código principal
3 $tablahtml = get_html_translation_table( HTML_ENTITIES );
4 // necesito convertir un texto a HTML
5 $texto = "Esto es un ejemplo de caracteres especiales: ñ, á, ü... ";
6 print "El texto 'crudo' es: $texto <br>";
7 $texto2 = strtr( $texto, $tablahtml );
8 print "El texto 'traducido' es: $texto2 <br>";

http://www.pacoarce.com Pág 50
Introducción a PHP

7- Manejo de archivos
El manejo de archivos es importante al manejar plantillas de HTML que
se van a mezclar con rutinas de PHP, y paraalmacenar y manejar datos si
no se cuenta con una base de datos.

Es importante señalar que al manipular archivos, se debe contar con los permisos
de acceso necesarios en el directorio detrabajo (o en el que se desean almacenar).
Se recomienda crear un directorio donde almacenar los archivos, para que solo
estedirectorio tenga permisos especiales que le permitan crear, grabar y modificar
archivos.

En algunos sistemas operativos y/o servidores se pueden cambiar los permisos


de acceso de un directorio mediante algúnprograma de FTP. Verifique el
procedimiento específico para su servidor y/o sistema operativo.

Es aconsejable incluir la terminación del archivo, como ".txt", ".pdf", etc. La


mayor parte de los comandos están orientados a manejar archivos de texto.

Verificar si existe un archivo


Antes de hacer alguna operación sobre algún archivo, es buena idea asegurarse
que exista, de lo contrario se genera un error que el usuario final verá en su
navegador. Para esto se usa el comando "file_exists".

La sintaxis básica para este comando es:

$si_no = file_exists( nombre_del_archivo )

http://www.pacoarce.com Pág 51
Introducción a PHP

El parámetro "nombre_del_archivo" es de tipo "string". El resultado es de tipo


booleano.

Ejemplo:

1 $archivo = "contador.txt";
2 $error = "error_archivo.html";
3 // antes de abrir y usar un archivo, checo si existe
4 if( ! file_exists( $archivo ) ) {
5 // archivo NO encontrado, mandar error
6 header( "location: $error " );
7 exit;
8 }
9 // aquí continuo trabajando con el archivo...

Verificar si es archivo o directorio


Al estar trabajando con los archivos de un directorio, es posible "toparse" con uno
o varios directorios dentro del directorio quese está examinando. Para saber de
que tipo es un "archivo", se usan los comandos "is_file" y "is_dir".

La sintaxis básica para estos comandos es:

$si_no = is_file(nombre_del_archivo );
$si_no = is_dir( nombre_del_archivo );

El parámetro "nombre_del_archivo" es de tipo "string". El resultado es de tipo


booleano.

Ejemplo:

1 // esta rutina supone que ya se abrió un directorio


2 // y se están leyendo sus contenidos
3 // el detalle de esto se verá mas adelante
4 // el nombre del directorio está en la variable $dir,
5 // y el de los archivos en $arch
6 if( is_dir( "$dir/$arch" ) {
7 // es un directorio, y por lo tanto hay que abrirlo y leer sus contenidos
8 }

Propiedades de archivos
Todos los archivos poseen ciertas propiedades, como tamaño y fechas de creación
y modificación. Estas cualidades se puedenobtener con los comandos "filesize",
"filectime" y "filemtime".
La sintaxis básica para estos comandos es:
$bytes = filesize( nombre_del_archivo );
$segundos = filectime( nombre_del_archivo );
$segundos = filemtime( nombre_del_archivo );

http://www.pacoarce.com Pág 52
Introducción a PHP

El parámetro "nombre_del_archivo" es de tipo "string". El resultado de "filesize"


es un entero que representa el número debytes. El resultado de "filectime" y
"filemtime" son segundos.

Ejemplo:

1 // obtengo información de un archivo


2 $arch = "algo.txt";
3 $tamano = filesize( $arch );
4 $creado = filectime( $arch );
5 $modificado = filemtime( $arch );
6 if( $tamano < 1024 ) {
7 $medida = "Bytes";
8 }
9 if( $tamano >= 1024 and $tamano < 1024000) {
10 $tamano /= 1000;
11 $medida = "KB";
12 }
13 if( $tamano >= 1024000 and $tamano < 102400000) {
14 $tamano /= 1000000;
15 $medida = "MB";
16 }
17 $screado = date( "d/m/Y H:i:s", $creado );
18 $smodificado = date( "d/m/Y H:i:s", $creado );
19 print "El archivo $arch mide $tamano $medida <br>";
20 print "Fue creado en $screado <br>";
21 print "Fue modificado en $smodificado <br>";

Creando y borrando un archivo


La manera más segura de crear un archivo es usando el comando "touch", el cual
recibe el nombre de un archivo y primerocheca si existe.

Si el archivo existe, no le hace nada a sus contenidos y solo cambia la fecha de


modificación.

Si el archivo existe, crea un archivo vacío.

Al ejecutar este comando ya no es necesario usar el comando "file_exists".


Recuerde tomar en cuanta los permisos para creararchivos en el directorio de
trabajo, o directorio especificado.

La sintaxis básica para este comando es:

touch( nombre_del_archivo );

Para borrar un archivo, se usa el comando "unlink". Si el archivo no existe, no


pasa nada. Si el archivo existe, es borradoinmediatamente. NO SE
TRANSLADA EL ARCHIVO A LA PAPELERA (TRASH), NI SE PIDE
CONFIRMACIÓN.

La sintaxis básica para este comando es:

http://www.pacoarce.com Pág 53
Introducción a PHP

unlink( nombre_del_archivo );

Ejemplo:
1 // se va a abrir un archivo
2 $arch = "contador.txt";
3 touch( $arch );
4 // aquí se continúa la rutina ...

Abrir y cerrar un archivo


Para poder trabajar con los contenidos de un archivo, es necesario abrirlo
primero. Esta operación establece un "canal decomunicación directo" entre la
rutina de PHP y el archivo.

Existen tres formas de abrir un archivo:

Letra Modo solo Descripciónabre un archivo solo para leer sus contenidos, no se pueden
r lectura cambiar ni borrar
solo abre un archivo borrando todo su contenido previo, y comienza a escribir
w
escritura desde el principio
abre un archivo sin borrar su contenido previo, y comienza a escribir al
a agregar
final

Una vez abierto un archivo, se pueden llevar a cabo las operaciones de lectura,
escritura o agregar (append). Es posible abrir ytrabajar con varios archivos al
mismo tiempo.

La sintaxis básica para este comando es:

$apuntador_al_archivo = fopen( nombre_del_archivo, "Letra" );

El parámetro "nombre_del_archivo" es de tipo "string". El parámetro "Letra" es


una letra de la tabla anterior. El resultado es unnumero entero único que identifica
ese canal de comunicación .

Ejemplo:

1 $arch = "contador.txt";
2 // se va a abrir el archivo para lectura
3 $archID = fopen( $arch, "r" );
4 // aquí sigue la rutina

Al terminar de trabajar con un archivo, se recomienda cerrar el canal de

http://www.pacoarce.com Pág 54
Introducción a PHP

comunicación, con el comando "fclose". La sintaxis básica para este comando es:

fclose( apuntador_al_archivo );
El parámetro "apuntador_al_archivo" es un entero que se obtuvo al abrir el archivo.

Ejemplo:

1 $arch = "contador.txt";
2 // se va a abrir el archivo para escritura, borrando contenidos anteriores
3 $archID = fopen( $arch, "w" );
4 // aquí van comandos de escritura

Leer un archivo
Cuando se abre un archivo en modo de lectura, los contenidos del archivo se
accesan con el comando "fgets". Este comandolee linea por linea del archivo,
donde una linea termina con el caracter "newline" o "\n".

Los archivos de texto creados en los sistemas Windows, Unix, Linux y algunos
programas de Mac OS X incluyen este caracterpara separar las líneas. Pero los
programas del sistema Mac OS 9 o menor, y algunos programas del sistema Mac
OS X, nogeneran este caracter para separar las lineas. Así que debe tener cuidado al
leer un archivo de texto creado bajo estascircunstancias.

La sintaxis básica para este comando es:

$linea = fgets( apuntador_al_archivo, max_caracteres );

El parámetro "apuntador_al_archivo" es un entero que se obtuvo al abrir el archivo.


A veces no se encuentra un caracter"newline", y para cubrir estos casos, el segundo
parámetro indica cuantos caracteres máximo deben leerse si no se encuentra
un"newline". El comando regresa un "string".

Ejemplo:

1 $arch = "contador.txt";
2 // se va a abrir el archivo para lectura
3 $archID = fopen( $arch, "r" );
4 // por que será que siempre usan en este ejemplo el # 1024? todo un
5 misterio...
6 $linea = fgets( $archID, 1024 );
7 // aquí termino de usar el archivo y lo cierro
8 fclose( $archID );

En el ejemplo anterior, solo se lee una linea. ¿Qué pasa si se desea leer más

http://www.pacoarce.com Pág 55
Introducción a PHP

líneas? ¿Cómo saber cuantas lineas tiene unarchivo?

El comando "feof" permite preguntar si ya se llegó al final de un archivo.

La sintaxis básica para este comando es:

$si_no = feof( apuntador_al_archivo );


El parámetro "apuntador_al_archivo" es un entero que se obtuvo al abrir el archivo.
El comando regresa un booleano indicandosi ya se llegó al final del archivo:
mientras no se llegue al final del archivo, este comando regresa "false".

Ejemplo:

1 // se va a leer un archivo y a mostrar sus contenidos, linea por linea


2 $arch = "plantilla.html";
3 // se va a abrir el archivo para lectura
4 $archID = fopen( $arch, "r" );
5 // mientras no se llegue al final del archivo...
6 while( ! feof( $archID ) ) {
7 // leer (otra) linea
8 $linea = fgets( $archID, 1024 );
9 // mostrar linea
10 print "$linea";
11 }
12 // aquí termino de usar el archivo y lo cierro
13 fclose( $archID );

Este ejemplo constituye la base para el siguiente capítulo, donde se explora el


uso de plantillas de HTML en conjunto conrutinas de PHP.

Agregando datos a un archivo


Para agregar datos al final de un archivo existente, se abre el archivo
en modo "a" y se usa el comando "fwrite". La sintaxis básica para este
comando es:
fwrite( apuntador_al_archivo, dato_a_grabar );

El parámetro "apuntador_al_archivo" es un entero que se obtuvo al abrir el


archivo. El parámetro "dato_a_grabar" es un"string". Si se esta escribiendo
un archivo de texto, hay que incluir el caracter "\n" al final de cada linea.

http://www.pacoarce.com Pág 56
Introducción a PHP

Ejemplo:

1 // se va a agregar una persona a un archivo de registro de visitantes


2 $arch = "registro.txt";
3 // para asegurarse que el archivo existe...
4 touch( $arch );
5 // este código asume que el usuario final llenó una forma de HTML
6 // donde se encuentran los campos: nombre, email, teléfono
7 // (no se incluye aquí la validación mínima...)
8 // preparo el dato a grabar, para separar los campos uso un "*"
9 $dato = $nombre . "*" . $email . "*" . $teléfono . "\n";
10
11 // se va a abrir el archivo en modo "agregar"
12 $archID = fopen( $arch, "a" );
13
14 // escribo una linea mas
15 fwrite( $archID, $dato );
16
17 // cierro el archivo
18 fclose( $archID );
19
20 Reescribiendo un archivo
21 Para reescribir datos a un archivo existente, borrando todos los datos
22 anteriores, se abre el archivo en modo "w" y se usa elcomando "fwrite".
23 La sintaxis básica para este comando es:
24 fwrite( apuntador_al_archivo, dato_a_grabar );
25
26 El parámetro "apuntador_al_archivo" es un entero que se obtuvo al abrir el
27 archivo. El parámetro "dato_a_grabar" es un"string". Si se esta escribiendo
28 un archivo de texto, hay que incluir el caracter "\n" al final de cada linea.
29 Ejemplo:
30 // se va a incrementar un contador de visitas
31 $arch = "contador.txt";
32
33 // para asegurarse que el archivo existe...
34 touch( $arch );
35
36 // primero leo el archivo y obtengo el valor actual del contador
37 $archID = fopen( $arch, "r" );
38 $linea = fgets( $archID, 1024 );
39 // aquí termino de usar el archivo y lo cierro
40 fclose( $archID );
41 // valido que haya leído algo
42
43 if( strlen( $linea ) == 0 ) {
44 // si no leyó nada, iniciar contador en ceros
45 $contador = 0;
46 } else {
47 $contador = (integer) $linea;
48 }
49
50 // incremento el contador en 1
51 $contador++;
52
53 // ahora grabo el contador, destruyendo el valor anterior
54 $archID = fopen( $arch, "w" );
55
56 // escribo el contador
57 fwrite( $archID, $contador );
58
59 // cierro el archivo
60 fclose( $archID );

http://www.pacoarce.com Pág 57
Introducción a PHP

Protegiendo archivos contra escrituras múltiples


El ejemplo anterior funciona muy bien hasta que varios "visitantes" lleguen al
mismo tiempo a visitar la página donde tengo elcontador de visitas.

Para evitar que varios usuarios escriban sobre un archivo al mismo tiempo, se usan
los comandos "flock" y "is_writable". Estoscomandos evitan que otra rutina pueda
escribir en un archivo mientras se está actualizando.

La sintaxis básica para estos comandos es:

$si_no=is_writable(nombre_de_archivo);
flock( apuntador_al_archivo, entero );

El parámetro "nombre_del_archivo" es un "string". El parámetro "apuntador_al_archivo" es un


entero que se obtuvo al abrir elarchivo. El parámetro "entero" es un número de la siguiente
tabla:

Entero Tipo de Descripciónpermite a otras rutinas leer el archivo, pero no


1 "seguro"compartido escribir en él
2 exclusivo evita que otras rutinas lean y escriban el archivo
3 liberar quita el seguro al archivo

El comando "flock" siempre se usa en pares, uno para proteger el archivo y otro para liberarlo.
Estas operaciones se ejecutanjusto después de abrir el archivo y justo antes de cerrarlo.
Ejemplo:

1 // se va a incrementar un contador de visitas


2 $arch = "contador.txt";
3
4 // para asegurarse que el archivo existe...
5 touch( $arch );
6
7 // leo el archivo y obtengo el valor actual del contador
8 $archID = fopen( $arch, "r" );
9
10 $linea = fgets( $archID, 1024 );
11
12 // aquí termino de usar el archivo y lo cierro
13 fclose( $archID );
14
15 // valido que haya leído algo
16
17 if( strlen( $linea ) == 0 ) {
18 // si no leyó nada, iniciar contador en ceros
19 $contador = 0;
20
21 } else {
22 $contador = (integer) $linea;

http://www.pacoarce.com Pág 58
Introducción a PHP

23 }
24
25 // incremento el contador en 1
26 $contador++;
27
28 // ahora grabo el contador, destruyendo el valor anterior
29
30 // pero primero checo si el archivo se puede escribir
31 $bandera = false;
32 $máximo = 120000;
33 $contador = 0;
34
35 // esta parte se deja de tarea entender que hace... :-)
36 while ( ! $bandera ) {
37
38 if( is_writabe( $arch ) ) {
39 $bandera = true;
40 break;
41
42 }
43 $contador++;
44 if( $contador > $máximo ) {
45
46 break;
47 }
48 }
49
50
51 // si el archivo se puede escribir...
52
53 if( $bandera ) {
54 // abro el archivo
55 $archID = fopen( $arch, "w" );
56
57 // lo protejo contra escritura
58 flock( $archID, 2 );
59
60 // escribo el contador
61 fwrite( $archID, $contador );
62
63 // quito el candado
64 flock( $archID, 3 );
65
66 // cierro el archivo
67 fclose( $archID );
68 }

Operaciones con directorios


Es posible abrir y leer los contenidos de un directorio, para averiguar si un archivo
existe en un directorio, o para buscar un
texto en todos los archivos de un directorio.
Para abir un directorio se usa el parámetro "opendir", el cual funciona de manera
similar al comando "fopen".
La sintaxis básica para este comando es:

http://www.pacoarce.com Pág 59
Introducción a PHP

$apuntador_al_directorio = opendir( nombre_del_directorio );

El parámetro "nombre_del_directorio" es de tipo "string". El resultado es un


numero entero único que identifica ese canal decomunicación. En un sistema Unix
- Linux - Mac OS X el directorio de trabajo se representa con un "." y el directorio
"padre"(o un nivel superior) por ".." .

Para leer el contenido del directorio se usa el comando "readdir".

La sintaxis básica para este comando es:

$nombre_de_archivo = readdir( apuntador_al_directorio );

El parámetro "apuntador_al_directorio" es un entero que se obtuvo al abrir el


directorio. El comando regresa un "string", que
contiene el nombre de un archivo. Si se llegó al final del directorio, el comando
regresa "false".
Al terminar de trabajar con un directorio, se recomienda cerrar el canal de
comunicación, con el comando "closedir".

Ejemplo:

1 La sintaxis básica para este comando es:


2
3 closedir( apuntador_al_directorio );
4
5 El parámetro "apuntador_al_directorio" es un entero que se obtuvo al abrir el
6 directorio.
7
8 Ejemplo:
9 // se va a leer un directorio y mostrar los nombres de los archivos que ahí
10 residen
11 $dir = ".";
12
13 $dirID = opendir( $dir );
14
15 while( gettype( $nombre = readdir( $dirID ) ) != boolean ) {
16 print "$nombre ";
17 if( is_dir( $nombre ) ) {
18
19 print " (directorio) ";
20 } else {
21
22 print " (archivo) ";
23 }
24 print " <br>";
25
26 }
27 closedir( $dirID );

http://www.pacoarce.com Pág 60
Introducción a PHP

8 - Galletas
Las galletas son pequeñas cantidades de información que se guardan en la
computadora del usuario. De manera general, solo elservidor que guardó una
galleta puede leerla o modificarla.

El uso mas común de las galletas es guardar preferencias de los usuarios o datos
de acceso a un sistema (como IDs, passwords,etc.). Para evitar guardar datos de
cientos o miles de usuarios en un servidor, se usa la computadora de cada usuario
para queahí se guarden estas pequeñas cantidades de información.

En el "Sistema de Pedidos" que se incluye como material avanzado del curso, se


usa una galleta para guardar el ID del usuarioy su nivel de acceso. Esta
información permite validar si un usuario tiene acceso al sistema o no.

La implementación de este sistema de seguridad (de nivel básico) requiere que


en cada una de las rutinas de PHP lo primeroque se haga es checar si el ID del
usuario es válido en una base de datos, y así permitirle el acceso al sistema. El
nivel deacceso sirve para mostrar la lista de productos y precios de ese nivel,
restringiendo el acceso a productos y/o preciosespeciales.

Cada servidor puede crear hasta 20 galletas para su uso, y cada galleta tiene un
valor máximo de 4 Kbytes. Solo al mandarinformación de la rutina de PHP al
usuario final es posible crear la galleta en la maquina del usuario (comandos
"print","printf", "echo", "header").

Creación de galletas

Las galletas tienen esta información:

-Nombre de la galleta: un string que se adhiera a las reglas de los nombres de las
variables. El nombre de la galleta va a crear una variable global con el mismo
nombre.

-Valor de la galleta: un string que contenga los datos a guardar. Es común usar
un caracter "separador" si se desea guardar datos con una estructura.

-Expiración de la galleta: toda galleta debe tener un tiempo de vigencia,


medido en segundos. Después de este tiempo, la galleta no es válida. Si se
pasa un valor 0 (cero), la galleta solo es válida mientras el usuario tiene
abierto su navegador.

-Ruta: define el "área" del sitio donde esta galleta será mandada al servidor, cada
ves que se accesa una página dentro de esta ruta. Si se desea mandar la galleta
para todo el sitio, se usa "/".

http://www.pacoarce.com Pág 61
Introducción a PHP

-Dominio: define los dominios a los cuales se va a mandar la galleta. Como esto
restringe el mandar la galleta solo desde ciertos dominios, generalmente se
omite al crear galletas de uso "universal". Si no se desea especificar un dominio,
se usa unstring vacío ("") o se omite el parámetro.

-Transmisión segura: si se especifica el valor 1 (uno, tipo entero, NO string),


solo se transmite la galleta si la conexión essegura (https). De lo contrario hay
que especificar el valor 0 (cero). Se puede omitir el parámetro.

Para crear una galleta desde una rutina de PHP se usa el comando "setcookie".

La sintaxis básica para este comando es:

setcookie( nombre_de_la_galleta, valor_de_la_galleta, expiración, ruta );

Ejemplo:

1 function crea_galleta( $nombre, $valor, $expira ) {


2 // la variable $expira tiene el # de HORAS que va a durar la galleta
3 $t = time() + ( 60 * 60 * $expira);
4 // si la variable $expira fuera en DÍAS se usa esta forma:
5 // $t = time() + ( 60 * 60 * 24 * $expira );
6 // se asume una ruta para todo el sitio: "/"
7 setcookie( $nombre, $valor, $t, "/" );
8 // recuerde que aun no se manda la galleta al usuario,
9 // solo se está creando
10 }
11
12 ...
13
14 $galleta = "misitio_prefs";
15 $valor_galleta = $cantidad . "|" . $num_parte . "|" . $precio_unitario;
16 $expira = 24;
17 // solo es válida por 24 horas
18 crea_galleta( $galleta, $valor_galleta, $expira );
19 // aun no se manda la galleta...
20 print "Aquí se manda la galleta a la maquina del usuario <br>";

Lectura de galletas

Para leer una o varias galletas guardadas, es necesario que el usuario ejecute una
rutina de PHP. Esto hace que todas lasgalletas activas generen variables globales
con el mismo nombre de la galleta. Si la galleta ya no es válida, no se crea
lavariable.

Ejemplo:

1 // código principal
2 ...
3 // checar si existe la variable "$misitio_prefs"
4 if( isset( $misitio_prefs ) ) {
5 // la galleta existe, se va a leer y separar su valor

http://www.pacoarce.com Pág 62
Introducción a PHP

6 $datos = explode( "|", $misitio_prefs );


7 $cantidad = $datos[0];
8 $num_parte = $datos[1];
9 $precio_unitario = $datos[2];
10 } else {
11 $cantidad = 0;
12 $num_parte = "";
13 $precio_unitario = 0;
14
15 }
16 // voy a preguntar si existe la variable GLOBAL con nombre $nombre
17 global ${$nombre};
18 if( isset( ${$nombre} ) {
19 global $datos;
20 $datos = explode( $separador, ${$nombre} );
21 return true;
22 } else {
23 return false;
24 }
25 }
26
27 ...
28
29 $nombre_galleta = "misitio_prefs";
30
31 if( existe_galleta( $nombre_galleta, "|" ) ) {
32 $cantidad = $datos[0];
33 $num_parte = $datos[1];
34 $precio_unitario = $datos[2];
35 } else {
36 $cantidad = 0;
37 $num_parte = "";
38 $precio_unitario = 0;
39 }
40
41 ...
42
43 $nombre_galleta = "folderx_prefs";
44
45 if( existe_galleta( $nombre_galleta, "**" ) ) {
46 // ejecutar código para la galleta "folderx_prefs"
47 ...
48 }

Borrar una galleta


En este ejemplo se usa un "constructor" de variables "dinámico", en el cual el
nombre de la variable está contenido en otravariable: ${"nombre"} o ${$variable}.

Para borrar una galleta, la manera más segura es crear la galleta con el mismo
nombre, con un valor "vacío" y una fecha deexpiración "vencida".

Ejemplo:

1 function borra_galleta( $nombre ) {


2 $t = time() - 1;
3 // se asume una ruta para todo el sitio: "/"
4 setcookie( $nombre, "", $t, "/" );
5 }

http://www.pacoarce.com Pág 63
Introducción a PHP

9- Acceso a base de datos


Las rutinas de PHP pueden accesar varias bases de datos, incluyendo las basadas
en SQL. La más popular es la base de datosMySQL, y es la que se va a usar para
estos ejemplos básicos.

Conexión al servidor
Para establecer una conexión al servidor de base de datos se usa el comando
"mysql_connect" o "mysql_pconnect". El segundocomando es mas usado en
conexiones desde paginas web.

La sintaxis básica para este comando es:

$link = mysql_pconnect( hostname, usuario, pwd );

El parámetro "hostname" es el nombre del servidor de la base de datos. Es muy


usado el nombre "localhost" para indicar quees el mismo servidor que el del
servidor de páginas web. El parámetro "usuario" y "pwd" son el nombre de un
usuario y sucontraseña en el servidor de base de datos.

Ejemplo:

1 La función regresa un numero entero único que identifica el canal de


2 comunicación con la base de datos, o si hubo un error,regresa "false".
3 Ejemplo:
4
5 $usuario = "folderx";
6 $pwd = "unobiendificil";
7 $servidor = "localhost";
8
9 $link = mysql_pconnect( $servidor, $usuario, $pwd );
10
11 if( ! $link ) {
12
13 header( "location: error_mysql.html" );
14
15 exit;
16 }

Conexión a la base de datos


Una ves conectados al servidor de base de datos, hay que seleccionar una
base de datos específica, de todas las que puedacontener el servidor. El
acceso a esa base de datos debe estar permitida al usuario con el que se
estableció la conexión alservidor de base de datos. El comando para hacer

http://www.pacoarce.com Pág 64
Introducción a PHP

esto es "mysql_select_db".

La sintaxis básica para este comando es:

$si_no = mysql_select_db( nombre_de_la_base, link );

El parámetro "nombre_de_la_base" es un string que contiene precisamente eso. El


segundo parámetro es opcional, ya que si seomite se asume que se va a usar la
ultima conexión establecida al servidor de base de datos. El comando regresa
"true" si elusuario tiene acceso a dicha base, y si esta existe. De no ser exitosa la
selección de la base, regresa "false".

Ejemplo:

1 Ejemplo:
2 $usuario = "folderx";
3 $pwd = "unobiendificil";
4 $servidor = "localhost";
5 $db = "empleados";
6
7 $link = mysql_pconnect( $servidor, $usuario, $pwd );
8
9 if( ! $link ) {
10 header( "location: error_mysql.html" );
11 exit;
12
13 }
14
15 if( ! mysql_select_db( $db ) ) {
16 header( "location: error_mysql.html" );
17 exit;
18
19 }

Operaciones básicas
En general solo existen 4 operaciones básicas que se pueden realizar con una base
de datos:

1- Crear un registro nuevo (agregar datos).

2- Borrar un registro existente (borrar datos).

3- Cambiar datos a un registro existente (modificar datos).

4- Buscar datos (búsquedas).

Una ves establecida la conexión al servidor, y seleccionada la base de datos a

http://www.pacoarce.com Pág 65
Introducción a PHP

usar, es posible llevar a cabo estas operacionescon el comando "mysql_query".

La sintaxis básica para este comando es:

$si_no = mysql_query( comando_de_sql, link );

El parámetro "comando_de_sql" es un string que contiene precisamente eso. El


segundo parámetro es opcional, ya que si seomite se asume que se va a usar la
ultima conexión establecida al servidor de base de datos. El comando regresa el
resultadodel "query" si el comando se ejecutó exitosamente, y "false" si no lo
fue.

Está fuera del alcance de este curso explicar a detalle los siguientes ejemplos:

Ejemplo:

1 // crear un registro nuevo


2 $nombre = "Gerardo";
3 $sueldo = 25000;
4 $query = "insert into empleados ( nombre, sueldo ) values ( '$nombre',
5 '$sueldo') ";
6 mysql_query( $query )
7 or die ("Error FATAL al crear datos en $db: " . mysql_error() );
8
9 // borrar un registro existente
10 $nombre = "Fulano";
11 $query = "delete from empleados where nombre='$nombre' ";
12 mysql_query( $query )
13 or die ("Error FATAL al borrar datos de $db: " . mysql_error() );
14
15 // modificar un registro existente
16 $nombre = "Gerardo";
17 $sueldo = 35000;
18 $query = "update empleados set sueldo='$sueldo' where nombre='$nombre' ";
19 mysql_query( $query )
20 or die ("Error FATAL al modificar datos en $db: " . mysql_error() );
21
22 // buscar todos los registros
23 $tablahtml = get_html_translation_table( HTML_ENTITIES );
24 $query = "select * from empleados ";
25
26 // esta ves voy a guardar el resultado del 'query'
27 $resultado = mysql_query( $query )
28 or die ("Error FATAL al buscar datos de $db: " . mysql_error() );
29
30 // aquí averiguo cuantos registros fueron encontrados
31 $registros = mysql_num_rows( $resultado );
32
33 // aquí leo todos los registros encontrados, uno por uno, y los muestro
34 while( $renglon = mysql_fetch_object($resultado) ) {
35 $nombre = strtr( $renglon->nombre, $tablahtml );
36 print "Nombre del empleado: $nombre <br>\n";
37 $sueldo = number_format( $renglon->sueldo, 2 );
38 print "Sueldo actual: $ $sueldo <br>\n";
39 }

http://www.pacoarce.com Pág 66
Introducción a PHP

10- Otros recursos Referencias en el internet


El sitio oficial del lenguaje PHP en la red es www.php.net

El mejor lugar en la red para recursos generales de PHP es www..zend.com , en


especial el manual en línea(www.zend.com/manual/) y la galería de código
(www.zend.com/).

El sitio oficial de MySQL en la red es www.mysql.com

http://www.pacoarce.com Pág 67

También podría gustarte