Documentos de Académico
Documentos de Profesional
Documentos de Cultura
localhost/hola.php
1 <html>
2 <head>
3 <title>Ejemplo de mezcla de HTML y PHP</title>
4 </head>
5 <body>
6 <br>
7 Este es un ejemplo de como mezclar código estático de HTML
8 y dinámico de PHP<br>
9 <br>
10 Esta parte es creada por el HTML.<br>
11 <br>
12 <?php
13
14 print "Esta parte es creada por una rutina de PHP.<br>";
15 ?>
16 <br>
17 Fin de la demostración<br>
18 </body>
19 </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.
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, numeral, almohadilla): Funciona igual
que las dos diagonales.
3- Usando los caracteres "/*" y "*/" : se usa para incluir varias lineas de
comentarios
Un ejemplo de esto es:
1 <?php
2 // este es mi primer programa de php
3 // fue hecho por Fulano de Tal en septiembre de 2002
4 print "Hola mundo!";
5 /* dicen que el primer programa que se hizo en lenguaje C fue el de
6 “hola mundo”*/
7 ?>
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 presentación, etiquetas para cajas con los adornos
de navidad, etc.
Ejemplos de VARIABLES:
$uno
$contador
$nombre_de_variable_un_poco_largo
$i
$esta_variable_no_es_igual_a_esta_otra
$esta_variable_es_diferente
$iva
$subtotal1
$subtotal2
$total
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 que estén en relación a su contenido y cortos. Por
ejemplo, en un sistema de inventarios podemos utilizat los nombres
de variable: "$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, pero ésta no es
una buena práctica. Debemos tener de preferencia una zona (por lo
general al inicio) donde declaramos las variables que vamos a utilizar.
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 fracciones, 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 las personas. 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",
"Hola, cara de bola",
"Bienvenido a mi sitio",
Buenos días "amorcito"'
Valores de lógica básica o "Boolean" : Aquí sólo 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 las personas, se usan unas reglas para construir
frases que tengan sentido.
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;
$cadena = "Hola, cara de bola";
print "PHP dice: $letrero<br>";
$i++;
Operadores Aritméticos
$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.
Operadores booleanos
Estos operadores se usan para crear comparaciones mas complejas.
Ejemplo de la vida real son:
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;
Precedencia
Como en los lenguajes de oriente, 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;
Prioridad de Operadores
ejecución
1 ++ , -- , cambio de tipo
2 /, * , %
3 +,-
4 < , <= , > , >=
5 == , === , !=
6 &&
7 ||
8 = , += , -= , *= , /= , %=
, .=
9 and
10 or
$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
pueden usar indistintamente';
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 es
7 $salario <br>";
8 }
9 print "Su edad es $edad <br>";
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 siendo
12 de
13 $salario <br>";
14 }
15 print "Usted llegó tarde este mes $llegadas_tarde veces <br>";
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ñí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>";
Ejemplo:
1 $edad = 25;
2 if( $edad <= 20 ) {
3 print "Te regalamos boletos para el concierto de One Direction<br>";
4 }
5 if( $edad > 20 and $edad <= 30 ) {
6 print "Te regalamos unos boletos para ir al concierto de Justin Bieber<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" sólo puede
evaluar una sola expresión. La sintaxis básica para este comando es:
1 switch ( expresión ) {
2 case resultado1:
3 comando;
4
5 comando;
6 break;
7 case resultado2:
8 comando;
9 comando;
10
break;
11
12 case resultado3:
13 comando;
14 comando;
15 break;
16 default:
17
18
comando;
19 comando;
}
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 ";
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>";
El operador condicional
¡Un atajo de un comando "if" con solo un comando para el caso "true"
y uno solo para el caso "false" lo proporciona este operador.
La sintaxis básica para este operador es:
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 print "El gran total de su pedido es $gran_total $letrero <br>";
6
1 while ( expresión ) {
2 comando;
3 comando;
4 ...
5 }
Ejemplo:
1 $contador = 0;
2 $veces = 7;
3 print "Se van a imprimir $veces números: <br>";
4 while ( $contador < 7 ) {
5 print " Número: $contador <br>";
6 $contador++;
7 }
8 print "Fin del ciclo, el contador vale $contador<br>";
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án los
comandos que delimitan los caracteres "{" y "}". Cuando la expresión
se evalúe como "false", termina el ciclo y ya no se ejecuta ningún
comando del "do ... while".
Ejemplo:
1 $contador = 0;
2 $veces = 7;
3 print "Se van a imprimir $veces
4 números: <br>";
5 do {
6 print " Número: $contador <br>";
7 $contador++;
8 } while ( $contador < 7 );
9 print "Fin del ciclo, el contador vale
10 $contador<br>";
Ejemplo:
1 $veces = 7;
2 print "Se van a imprimir $veces números: <br>";
3 for ( $contador = 0 ; $contador < $veces ; $contador++ ) {
4
5 print " Número: $contador <br>";
6 }
7 print "Fin del ciclo, el contador vale $contador<br>";
Ejemplo:
1 $veces = 7;
2 print "Se van a imprimir $veces nú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úmero: $contador <br>";
10
11 }
print "Fin del ciclo, el contador vale $contador<br>";
1 $veces = 7;
2 print "Se van a imprimir $veces nú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úmero: $contador <br>";
10 }
11 print "Fin del ciclo, el contador vale $contador<br>";
3- Arreglos
Creación de arreglos
1- Usando el comando "array":
$meses = array ( "Enero", "Febrero", "Marzo", "Abril", "Mayo",
"Junio", "Julio",
"Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre");
Ejemplo:
Ejemplo:
Ordenando arreglos
A veces es necesario ordenar los elementos de un arreglo. Esto se
logra fácilmente con el comando "sort", el cual ordena todos los
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>";
Arreglos asociativos
Ejemplo:
1 $empleado = array (
2 nombre=>"Fulana de Tal",
3 puesto=>"Diseñadora",
4 edad=>28,
5 "proyecto actual"=>"pagina web"
6 );
Ejemplo:
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>";
4- Funciones
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;
}
Parámetros
A los ingredientes de la receta se les llama parámetros.
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'
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ño especificado? 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.
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 la función dejará una
"herencia" de variables globales modificadas.
Para regresar un valor, se usa el comando "return".
Ejemplo:
Todos los valores que recibe una rutina PHP son de tipo "string"
(cadena de caracteres), aún los valores numéricos que el usuario final
pudiera llegar a escribir.
Es muy importante especificar en el HTML dos cosas:
Nombre de la
Tipo Contenidos
variable
lo que el usuario escriba en el campo
$nombre string
"nombre"
$contrasena string lo que el usuario escriba en el campo
"contrasena"
lo que el usuario escriba en el campo
$comentarios string
"comentarios"
solo uno de estos: "soltero" , "casado",
$edo_civil string
"divorciado", 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
solo uno de estos: "cine" , "baile",
$hobbie string
"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
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">
Validaciones
Una ves recibidos los valores del usuario hay que validarlos antes
de poder procesarlos. Las validaciones son operaciones necesarias
en toda rutina, y pueden llegar a consumir tiempo y esfuerzo. En
esta sección se muestra un tipo muy básico de validaciones, sólo
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 usuario puede
escribir espacios, y también hay que validar esta situación.
Lo primero es quitar espacios antes y después de otros caracteres,
para recortar el espacio en blanco. Para esto se usa la función
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 puede hacerse 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 una funció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 como cadena de
caracteres. Así que la primera validación es igual a la de los ejemplos
anteriores. Pero luego hay que convertir esos valores a enteros
(integer) o números con punto decimal (double) y validar rangos.
Ejemplos:
Para las variables de tipo array, que se manejan en los combos de lista
y los cuadros de verificado, 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 ni siquiera existe. En el caso de
existir, es bueno saber cuántos 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 }
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;
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.
Sólo basta con escribir el nombre del archivo que contiene la rutina de
PHP.
Ejemplo en HTML:
<a href="ayuda.php">ayuda</a>
<a href="ayuda.php?tema='llenado de
formas'&plantilla=ayuda_gral.html">ayuda</a>
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". Esto facilita las operaciones
de adición y sustracción de fechas, pero impone un formato poco
familiar a las personas.
Afortunadamente, existen varios comandos para lidiar con esto y
convertir las horas y fechas entre los formatos interno y el formato
que pueda entender una persona.
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 PM
23 con
24 18 minutos... buen día!
Más adelante veremos como obtener los nombres de los días y meses
en otro idioma.
Ejemplo:
1 // defino los meses en español
2 $meses = array ( "vacio", "Enero", "Febrero", "Marzo",
3 "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre",
4 "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", "Viernes",
8 "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>";
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 sólo entiende de segundos, y nada más. Y ¿qué
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.
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 $entero = 1500;
2 $enterototote = 568423597;
3 $pi = 3.141592653589793;
4 $iva = 0.15;
5
6 $total1 = $entero * ( 1 + $iva );
7 $total2 = $enterototote * ( 1 + $iva );
8 $stotal1 = number_format ( $total1, 2 );
9 $stotal2 = number_format ( $total2, 2 );
10 $spi = number_format ( $pi, 6 );
11 //
12 print "El total 1 es: $ $stotal1 <br>";
13 print "El total 2 es: $ $stotal2 <br>";
print "pi es: $spi <br>";
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 decimal:
11
12 $decimales <br>";
13 }
14
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 comas
"," para separar miles, millones, etc. Y a veces hasta incluyen el "$", a
pesar de que se le indica que no lo haga. Para esto, se usa el
comando "str_replace", que reemplaza unos caracteres por otros en
un string .
1 // esta rutina supone que hay un campo en una forma de HTML llamado 'cantidad',
2 // que es la cantidad a pagar
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>";
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...
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 );
1 // se va a abrir un archivo
2 $arch = "contador.txt";
3 touch( $arch );
4 // aquí se continúa la rutina ...
1 $arch = "contador.txt";
2 // se va a abrir el archivo para lectura
3 $archID = fopen( $arch, "r" );
4 // aquí sigue la rutina
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 misterio...
5 $linea = fgets( $archID, 1024 );
6 // aquí termino de usar el archivo y lo cierro
7 fclose( $archID );
8
Ejemplo:
Ejemplo:
Ejemplo:
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 "/".
-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:
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
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 }
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 );
Ejemplo:
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 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: