hp_ tutorial básico del programador web
DESCRIPTION
ComputacionTRANSCRIPT
FICHA RESUMEN DEL TUTORIAL BÁSICO DEL PROGRAMADOR
WEB: PHP DESDE CERO
Codificación aprenderaprogramar.com: CU00800B
Objetivos
PHP es un lenguaje potente de alto nivel cuyo código podemos introducir en páginas web HTML. PHP se ejecuta en el servidor (no podemos ejecutarlo en nuestro ordenador a no ser que lo hagamos funcionar como servidor). PHP, una vez es interpretado por el servidor, genera una salida HTML que permite visualizar los resultados en los navegadores. Este curso permite aprender los fundamentos para la creación de páginas web usando PHP.
Destinatarios
Cualquier persona con interés en aprender fundamentos que le permitan crear páginas web usando PHP. Para realizar este curso, debes tener conocimientos básicos de ofimática: saber copiar, pegar, mover y abrir archivos. Además debes tener conocimientos básicos de HTML. Contenidos
INTRODUCCIÓN A PHP. QUÉ ES Y PARA QUÉ SIRVE PHP.COMUNICACIÓN ENTRE EL CLIENTE Y EL SERVIDOR SIN PHP Y CON PHP.MI PRIMERA PÁGINA EN PHP. TIPOS DE VARIABLES EN PHP.ESTRUCTURA CONDICIONAL (IF) CON PHP.ESTRUCTURAS REPETITIVAS (FOR, WHILE, DO/WHILE) CON PHP.ENVÍO DE DATOS DE UN FORMULARIO. MÉTODOS GET Y POST. REQUEST PHP.ARRAYS TRADICIONALES EN PHP. VECTORES Y MATRICES. ARRAYS ASOCIATIVOS EN PHP.FUNCIONES EN PHP. DECLARACIÓN. USO DE FUNCIONES BÁSICAS PROPIAS DE PHP.MANEJO DE ARCHIVOS DE TEXTO CON PHP. LECTURA Y ESCRITURA DE ARCHIVOS DE TEXTO.CONSULTAS BÁSICAS A BASE DATOS. INTRODUCCIÓN A PHP CON MYSQL.
duración
150 horas de dedicación efectiva, incluyendo lecturas, estudio y ejercicios.Dirección, modalidades y certificados
El curso ha sido escrito por Enrique González Gutiérrez, responsable del Departamento Técnico del portal web aprenderaprogramar.com, y revisado por Mario Rodríguez Rancel. Se oferta bajo la modalidad web (gratuito). Para acceder a la información general sobre este curso y al listado completo de entregas pulsa en este link: Ver curso completo.Para hacer un comentario o consulta utiliza los foros aprenderaprogramar.com, abiertos a cualquier persona independientemente de su nivel de conocimiento.
1. INTRODUCCIÓN A PHP1.1. ¿Qué es PHP? ¿Para qué sirve PHP?1.2. Comunicación entre el cliente y el servidor sin PHP y con PHP.1.3. Diferencia entre páginas web estáticas y páginas web dinámicas.1.4. ¿Cuáles son las versiones de PHP?1.5. ¿Qué necesito para escribir código PHP y crear páginas web dinámicas?
2. PREPARANDO EL ENTORNO DE DESARROLLO2.1. Descargar e instalar Notepad++.2.2. Configuración básica de Notepad++ para crear páginas PHP.2.3. Descargar e instalar el Gestor FTP Filezilla.2.4. Descargar e instalar el navegador Google Chrome.2.5. Trabajar en local o o con un servidor remoto. ¿Qué es mejor?2.6. Preparar el entorno para trabajar en remoto. Elección de servidor gratuito.2.7. Mi primera página en PHP. 3. CONCEPTOS BÁSICOS DE PHP3.1. Estructura básica de una página PHP.3.2. Estructura condicional (if) con PHP.3.3. Estructuras repetitivas /for, while, do/while) con PHP.3.4. Arrays tradicionales en PHP. Vectores y Matrices.3.5. Arrays asociativos en PHP. 4. FUNCIONES EN PHP4.1. Declaración y llamadas a funciones en PHP.4.2. Funciones básicas propias de PHP. 5. FORMULARIOS CON PHP5.1. Envío de datos de un formulario. Métodos GET y POST.5.2. Recuperando datos del formulario. Variables $_REQUEST, $_GET y $_POST. Diferencias. 6. MANEJO DE ARCHIVOS DE TEXTO CON PHP6.1. Introducción al manejo de archivos con PHP. Funciones fopen, fgets, fputs y fclose.6.2. Lectura y escritura de archivos de texto con PHP.
6.3. Lectura completa de un archivo de texto. Función file_get_contents. 7. USO DE PHP CON MySQL7.1. Consultas básicas a base de datos. Introducción a MySQL.7.2. Consulta de datos con PHP y MySQL.7.3. Inserción de datos con PHP y MySQL.
7.4. Borrado de datos con PHP y MySQL.
ORIENTACIÓN SOBRE EL TUTORIAL PASO A PASO “TUTORIAL BÁSICO DEL
PROGRAMADOR WEB: PHP DESDE CERO”
PHP es un lenguaje de programación de alto nivel, diseñado originalmente para la creación
de páginas web dinámicas. Por página web dinámica entendemos aquella que puede mostrar
información cambiante sin necesidad de que sea el programador quien haga estos cambios:
con webs dinámicas podemos por ejemplo hacer que se muestren noticias enviadas por un
usuario sin necesidad de intervención del programador.
PHP tiene un gran parecido en su sintaxis con lenguajes de programación estructurada, como
C, permitiendo a los programadores crear aplicaciones complejas con un corto periodo de
aprendizaje. También permite crear aplicaciones de contenido dinámico sin necesidad de
aprender un gran volumen de funciones. Este curso, que estamos comenzando, va dirigido a
aquellas personas que quieran adquirir unos fundamentos básicos para crear páginas web
dinámicas con vistas a poder desarrollar en el futuro páginas web atractivas y de cierta
complejidad. No vamos a desarrollar un manual de referencia de PHP, sino un curso básico
paso a paso. No vamos a contemplar todos los aspectos del lenguaje PHP, sino aquellos que
consideramos básicos desde el punto de vista didáctico, con vistas a que posteriormente la
persona que lo desee amplíe sus conocimientos. Nuestro objetivo es ser claros, sencillos y
breves, y para eso tenemos que centrarnos en determinadas cuestiones de PHP y dejar de
lado otras.
Como conocimientos previos para iniciar este curso recomendamos (seguir la recomendación
o no queda a criterio del alumno y/o profesor que vayan a seguir el curso) los siguientes:
Ofimática básica (saber copiar, pegar, mover y abrir archivos). Además es necesario tener
conocimientos básicos sobre HTML (si no conoces HTML, recomendamos seguir el curso
básico de HTML de aprenderaprogramar.com).
Aprender PHP requiere tiempo y esfuerzo. Para hacer ese recorrido más llevadero, te
recomendamos que utilices los foros de aprenderaprogramar.com, herramienta a disposición
de todos los usuarios de la web (http://www.aprenderaprogramar.com/foros/), y que te
servirá para consultar dudas y recabar orientación sobre cómo enfrentarte a los contenidos.
Entre los miembros del portal web y otros usuarios, trataremos de ayudarte para que el
estudio te sea más llevadero y seas capaz de adquirir los conocimientos necesarios y avanzar
como programador.
El tiempo necesario (orientativamente) para completar el curso incluyendo prácticas con
ordenador, suponiendo que se cuenta con los conocimientos previos necesarios, se estima en
150 horas de dedicación efectiva o aproximadamente tres meses con una dedicación de 2,5
horas diarias de lunes a viernes. Aprender a crear páginas web requiere dedicación y
esfuerzo.
El curso ha sido generado paso a paso usando Windows como sistema operativo y por ello
contiene algunas indicaciones específicas para usuarios de Windows, pero también puede ser
utilizado en otros entornos (Linux, Macintosh, etc.).
Estamos seguros de que con tu esfuerzo y la ayuda que te podamos brindar este curso te
resultará de gran utilidad.
¿QUÉ ES PHP? ¿PARA QUÉ SIRVE PHP?
PHP es un lenguaje de código abierto muy popular, adecuado para desarrollo web y que
puede ser incrustado en HTML. Es popular porque un gran número de páginas y portales web
están creadas con PHP. Código abierto significa que es de uso libre y gratuito para todos los
programadores que quieran usarlo. Incrustado en HTML significa que en un mismo archivo
vamos a poder combinar código PHP con código HTML, siguiendo unas reglas.
PHP se utiliza para generar páginas web dinámicas. Recordar que llamamos página estática a
aquella cuyos contenidos permanecen siempre igual, mientras que llamamos páginas
dinámicas a aquellas cuyo contenido no es el mismo siempre. Por ejemplo, los contenidos
pueden cambiar en base a los cambios que haya en una base de datos, de búsquedas o
aportaciones de los usuarios, etc.
¿Cómo trabaja PHP? El lenguaje PHP se procesa en servidores, que son potentes ordenadores
con un software y hardware especial. Cuando se escribe una dirección tipo
http://www.aprenderaprogramar.com/index.php en un navegador web como Internet
Explorer, Firefox o Chrome, ¿qué ocurre? Se envían los datos de la solicitud al servidor que
los procesa, reúne los datos (por eso decimos que es un proceso dinámico) y el servidor lo
que devuelve es una página HTML como si fuera estática.
El esquema es: Petición de página web al servidor --> El servidor recibe la petición, reúne la
información necesaria consultando a bases de datos o a otras páginas webs, otros
servidores, etc --> El servidor responde enviando una página web “normal” (estática) pero
cuya creación ha sido dinámica (realizando procesos de modo que la página web devuelta no
siempre es igual).
En resumen:
Páginas estáticas: Petición --> Respuesta
Páginas dinámicas: Petición --> Procesado y preparación --> Respuesta
En un sitio dinámico, la información generalmente está contenida en una base de datos.
Cada vez que mostramos la página, como por ejemplo una página de noticas, buscamos en
la base de datos las últimas noticias que tenemos ingresadas para mostrar en el navegador
del visitante. Ahora bien, ¿cómo se consigue que la página vaya mostrando noticias nuevas?
Simplemente cargando las mismas en la base de datos, por ejemplo, a través de un
formulario que rellena una persona y que una vez relleno cuando pulsa “Enviar” implica que
lo que haya escrito se guarde en nuestra base de datos. De esta manera, cuando solicitamos
la página web y el servidor consulte la base de datos, encontrará esta nueva información y
mostrará nuestra página de forma distinta a como se veía anteriormente.
Por regla general este tipo de lenguaje suele ser utilizado para crear contenido dinámico y
poder interactuar con el usuario.
Veamos un ejemplo del contenido de una página web php, que habremos de almacenar en
un archivo que termina con la extensión .php y que contiene texto:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo</title>
</head>
<body>
<?php
echo "Bienvenidos a aprenderaprogramar.com";
?>
</body>
</html>
Como podrás comprobar el contenido del archivo incluye código HTML y en un momento
dado aparece una etiqueta <?php que significa que ahí empieza el código PHP. Por eso
decimos que el código PHP está embebido (incluido o incrustado) en código HTML.
Por tanto las páginas PHP contienen HTML con código PHP incluido en ellas para hacer "algo"
(en este caso, mostrar Bienvenidos a aprenderaprogramar.com. El código PHP está
comprendido entre etiquetas de comienzo y final especiales: <?php y ?>
Estas etiquetas especiales nos permitirán entrar y salir del "modo PHP". Le sirven al servidor
web para saber que tiene que interpretar el código incluido entre esas etiquetas como PHP.
Lo que distingue a PHP de JavaScript es que el código es ejecutado en el servidor, generando
HTML y enviándolo al cliente como si fuera una página web estática. El cliente recibirá los
resultados que el servidor devuelve después de interpretar el código PHP, sin ninguna
posibilidad de determinar qué código ha producido el resultado recibido. Es decir, a través de
nuestro navegador podríamos ver el código HTML, pero nunca el código PHP que dio lugar al
resultado HTML. El servidor web puede ser incluso configurado para que los usuarios no
puedan saber si estás o no utilizando PHP.
Lo mejor de usar PHP es que es extremadamente simple para el principiante, pero a su vez,
ofrece muchas características avanzadas para los programadores profesionales y más
avanzados.
Con PHP puedes procesar la información de formularios, generar páginas con contenidos
dinámicos, o enviar y recibir cookies, entre muchas más cosas. PHP lo utilizan desde
pequeñas páginas web hasta grandes empresas. Muchas aplicaciones web están construidas
usando PHP. Podemos citar Joomla y Drupal (gestores de contenido de páginas web),
osCommerce y Prestashop (tiendas on-line para comercio electrónico), phpBB y SMF
(sistemas de foros para páginas web), Moodle (plataforma educativa para educación on-line),
etc.
Entre las habilidades de PHP se incluye la creación de imágenes a partir de datos. Por
ejemplo, supongamos que tenemos una academia con 20 alumnos matriculados en un curso
de informática, 50 alumnos matriculados en un curso de matemáticas y 30 alumnos
matriculados en un curso de química. Con PHP podemos generar automáticamente imágenes
similares a esta:
PHP también puede utilizar y presentar resultados en otros estándares de datos o lenguajes
propios de los desarrollos web, como XHTML y cualquier otro tipo de ficheros XML. PHP puede
autogenerar éstos archivos y almacenarlos en el sistema de archivos en vez de presentarlos
en la pantalla, utilizando estos ficheros para generar contenido dinámico. Es decir, el
contenido dinámico puede surgir de otros sitios además de desde bases de datos.
También se puede interactuar con otros servidores usando cualquier protocolo. Por último,
PHP puede enlazarse con otros lenguajes muy potentes como Java.
En resumen, PHP es un lenguaje potente, muy usado y de gran interés para los desarrollos
web.
COMUNICACIÓN ENTRE EL CLIENTE Y EL SERVIDOR SIN PHP Y CON PHP
Intentaremos explicar ahora cuales son las diferencias entre una petición a un servidor sin
PHP y con PHP. Esto nos permitirá ver cuales son las principales diferencias entre una página
web estática en HTML y una página web dinámica en PHP.
Empezaremos recordando a qué llamamos servidor y a qué llamamos cliente, de forma muy
simplificada. Llamamos servidores a ordenadores generalmente potentes, con un software y
hardware especial, y que se encargan de resolver peticiones que le hacen decenas, cientos o
miles de ordenadores. Hablamos de cliente en general para referirnos a ordenadores tipo
ordenador personal de los que habitualmente tenemos en nuestra casa o en nuestra oficina
de trabajo. Un cliente normalmente trabaja combinando lo que es su entorno local (por
ejemplo nuestro sistema de archivos y programas instalados en nuestro ordenador) con
peticiones a un servidor: por ejemplo cuando nos conectamos a internet y tecleamos una
dirección web (URL), lo que hacemos es realizar una petición a un servidor. En este caso
sería un servidor web, pero hay distintos tipos de servidores (de bases de datos, xml, etc.). El
servidor le responde al cliente entregándole lo que ha solicitado si es posible o, en algunos
casos, indicando que no tiene permisos para obtener lo solicitado, que lo que ha solicitado no
existe, etc.
Estas definiciones son definiciones simplificadas y muy someras, pero para los objetivos de
este curso nos resultarán suficientes.
COMUNICACIÓN ENTRE EL CLIENTE Y EL SERVIDOR SIN PHP
En primer lugar, lo que hacemos es escribir en la barra de direcciones del navegador, la url
de la página web que queremos ver. Después el navegador envía el mensaje a través de
internet al ordenador remoto (servidor), de acuerdo con un protocolo estandarizado,
solicitando la página en cuestión (ejemplo: www.aprenderaprogramar.com/index.html). El
servidor comprueba que la petición es válida y lee el archivo solicitado desde su disco duro.
Todo ello es posible gracias al software instalado en el servidor. Acto seguido, el servidor web
envía el archivo solicitado por el navegador tal cual está en el disco duro. Y, por último, el
navegador muestra en pantalla el archivo que envió el servidor web.
Este proceso siempre es el mismo cuando hablamos de páginas estáticas (coloquialmente,
“páginas que no cambian”). Cualquiera que sea el cliente que solicita la página, el contenido
devuelto siempre será el mismo. La única forma de que el contenido del archivo cambie es
que el administrador de ese sitio web edite el contenido del archivo index.html y haga
modificaciones.
COMUNICACIÓN ENTRE EL CLIENTE Y EL SERVIDOR CON PHP. INTÉRPRETE PHP Y
GESTORES DE BASES DE DATOS.
Empezamos escribiendo en la barra de direcciones del navegador la url de la página web que
queremos ver. En segundo lugar, el navegador envía el mensaje a través de internet al
ordenador remoto (servidor), de acuerdo con un protocolo estandarizado, solicitando la
página (archivo) index.php. (ejemplo: www.aprenderaprogramar.com/index.php).
El servidor web recibe el mensaje, comprueba que se trata de una petición válida, y al ver
que la extension es "php" solicita al intérprete de PHP (que es otro programa que se ejecuta
en el servidor web) que le envíe el archivo.
En este caso la situación ha variado: no se trata de una simple extracción de un archivo
desde el disco duro, sino que está actuando un agente intermediario: el intérprete PHP. El
intérprete PHP lee desde el disco duro del servidor el archivo index.php y empieza a procesar
las instrucciones (código de programación) que contenga dicho archivo. Decimos que el
intérprete PHP “ejecuta” los comandos contenidos en el archivo y, eventualmente, se
comunica con un gestor de base de datos (ejemplos de ellos pueden ser MySql, Oracle, SQL
Server, etc.). La comunicación con base de datos no siempre se produce, pero es algo muy
frecuente cuando trabajamos con PHP. Tenemos pues otra diferencia con las webs estáticas:
interviene otro agente más, el gestor de base de datos, que es capaz de devolver la
información contenida en lugares determinados de una base de datos. Y una base de datos
podemos verla simplemente como un gran almacén de información organizada en tablas.
Una vez el intérprete PHP termina de ejecutar el código contenido en el archivo y ha recibido
toda la información necesaria del gestor de base de datos, envía los resultados al servidor
web. El servidor web envía la página al cliente que la había solicitado y el navegador muestra
en pantalla la información que le envía el servidor web.
En lenguajes de programación como C o Java estamos acostumbrados a que cuando
ejecutamos un código, observamos unos resultados en la pantalla de nuestro ordenador. Sin
embargo, en PHP el resultado que se obtiene después de ejecutar código es código HTML que
es el que utilizará el navegador para mostrar la página web.
Una cuestión interesante, y curiosa, es preguntarnos sobre cuál es la diferencia entre el
código HTML que le llega al cliente cuando solicita una página estática y el código HTML que
le llega cuando solicita una página dinámica. La respuesta es que no hay diferencia: ambos
son código HTML. ¿Cómo podríamos saber si un código HTML proviene de un archivo html,
estático, o si proviene de una respuesta de un intérprete PHP? Pues digamos que si
simplemente nos dan el código no podríamos saber de dónde viene.
Y otra cuestión que se puede plantear: si tanto con PHP como sin PHP lo que obtenemos es
código HTML, ¿para qué nos sirve el PHP? Bien, PHP es un lenguaje de programación,
mientras que HTML no lo es. Con HTML podemos enviar cierta información siempre igual,
pero no podemos hacer cálculos, no podemos tomar decisiones, no podemos repetir procesos
cierto número de veces. En definitiva, PHP aporta toda la potencia que supone la
programación de ordenadores al mundo de las páginas web. Pongamos un ejemplo muy
sencillo: queremos que en una página web se produzca un proceso de venta a través de una
tarjeta de crédito. Una vez el cliente elige el producto, número de unidades que quiere y
lugar de envío necesitaremos realizar unos cálculos: esto lo podemos hacer con PHP
(también con otros lenguajes, pero vamos a centrarnos en el objeto de este curso). Una vez
realizados los cálculos, le mostraremos al cliente el importe total y los datos de su compra y
le pediremos que introduzca el número de su tarjeta de crédito y su clave personal. Ahora
hay que tomar una decisión: para esto no nos sirve el HTML. Sin embargo, usando PHP
podemos consultar a una base de datos donde estén almacenados los números de tarjetas
de crédito válidas del banco y sus claves. Una vez hecha esta consulta, usando PHP podemos
mostrar al usuario un resultado distinto según la situación que se haya producido, por
ejemplo:
- Los datos no son válidos. La compra no ha podido realizarse.
- Los datos son válidos. Se ha realizado satisfactoriamente la compra. Recibirá su pedido
en su domicilio en un plazo de 10 días. Gracias por confiar en nosotros.
Php es un lenguaje de programación y HTML no lo es, esta es una gran diferencia. ¿Si PHP es
mucho más potente, por qué no prescindir de HTML? Digamos que cada lenguaje cumple su
función: HTML es un lenguaje muy ordenado que permite enviar información de forma rápida
para que se muestre algo en un ordenador. En este sentido, es más rápido enviar la
información en formato HTML que de otra manera (por ejemplo un archivo ejecutable que se
tuviera que ejecutar en el cliente). Por eso HTML sigue siendo relevante dentro del mundo de
internet: es un formato muy usado para el envío de información. Cómo se haya generado esa
información es otra cuestión.
En el siguiente esquema podemos ver el proceso completo.
EJERCICIO
Responde a las siguientes preguntas indicando verdadero o falso y justicando brevemente tu
respuesta:
a) Todos los servidores web trabajan con PHP, ya que es la única manera de conseguir que se
muestre una página web en el computador cliente.
b) El código HTML generado con PHP no es distinguible del código HTML generado
manualmente, a no ser que contemos con alguna información adicional.
c) HTML es un lenguaje de programación que permite decidir y repetir, pero carece de
funcionalidades de acceso a bases de datos.
d) Para crear páginas web dinámicas HTML es un lenguaje obsoleto. Para su creación
usaremos PHP u otro lenguaje de última generación.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
DIFERENCIA ENTRE PÁGINAS WEB ESTÁTICAS Y PÁGINAS WEB DINÁMICAS CON PHP
Vamos a repasar algunos conceptos que ya hemos mencionado y que es importante que
queden claros. Las páginas web estáticas o “planas” son aquellas en las que la información
se presenta en forma predefinida y sin cambios. No hay manera de que pueda cambiar el
contenido de la página.
A la información contenida en una página estática se le puede dar un determinado formato
de presentación, así como incluirle imágenes, enlaces a otras páginas, animaciones, videos,
sonidos, etc. En general, todo se hace a través de etiquetas HTML y esto es lo único que
puede ofrecerse a través de este tipo de páginas.
En los inicios de Internet predominaban las páginas estáticas, pero con el paso del tiempo y
ante la necesidad de agilizar el manejo de la información, surge un nuevo concepto de
páginas web que hoy sobresale y es el más utilizado. Estas son denominadas páginas
dinámicas: dentro de la programación dinámica para páginas web hay distintos lenguajes
(entre los que cabe destacar PHP, ASP y JSP), siendo php uno de los más usados.
Normalmente, las páginas estáticas están compuestas por código HTML. Cuando la página
(archivo) es solicitada por el navegador, el servidor la envía y no realiza ninguna operación
más. Todos los visitantes verán el mismo contenido.
Las páginas web dinámicas son aquellas en que la información que presentan se genera a
partir de alguna acción o petición del usuario en la página o mediante consultas al contenido
de bases de datos que normalmente cambian con frecuencia. Contrariamente a las páginas
estáticas, en las que su contenido se encuentra predeterminado, en las dinámicas la
información aparece inmediatamente después de una solicitud hecha por el usuario o de una
consulta a bases de datos. Una página dinámica permite visualizar la información contenida
en una base de datos, así como almacenar y hacer actualizaciones de cierta información en
bases de datos a través de formularios donde el usuario introduce contenidos. Piensa por
ejemplo en una red social como FaceBook: cuando se escribe en una casilla de texto y se
pulsa enter, la información introducida se almacena en una base de datos. Ahora cuando otro
usuario entra en FaceBook, esa información introducida por un usuario se le muestra a otro
usuario gracias a que se está rescatando de una base de datos. La programación dinámica
tiene múltiples aplicaciones, entre las que podemos citar los sistemas de foros (los mensajes,
imágenes, etc. se almacenan en bases de datos). Otra aplicación consiste en que el usuario
tiene la posibilidad de cambiar a su gusto el diseño y el contenido de una página, por
ejemplo la página de inicio personalizada de Google, gracias a que sus opciones se
almacenan en una base de datos.
Queda claro entonces que para la creación de este tipo de páginas dinámicas, además de
etiquetas HTML es necesaria la utilización de algún lenguaje de programación que se ejecute
del lado del servidor (es decir, que el servidor realice un proceso antes de enviar la
información al usuario de modo que a cada usuario le puede enviar distintas informaciones
como resultado de ese proceso), así como la existencia de una o varias bases de datos.
Si creamos un sitio web que usa páginas webs dinámicas, estas páginas son procesadas por
el servidor antes de ser enviadas al navegador.
Una página .php contiene código PHP que al ser ejecutado generará código HTML. En ese
proceso de ejecución de código, pueden hacerse consultas a bases de datos u otros archivos.
Además, pueden realizarse cálculos o tomarse decisiones gracias a la potencia de la
programación.
El resultado final es que se envía al navegador código HTML, que es generado para cada
visitante en particular dependiendo por ejemplo del contenido de la base de datos en ese
momento o de las opciones de configuración o solicitudes específicas del usuario. Otras
personas podrán obtener diferentes resultados si acceden en un momento en que la base de
datos haya cambiado, o si tienen opciones de configuración o realizan una solicitud distinta.
Ten en cuenta que aunque la URL nos muestre una extensión .php, lo que recibe el usuario
es código HTML. Por ejemplo la URL siguiente:
http://www.aprenderaprogramar.com/index.php
Siempre devuelve código HTML. Pero no siempre devuelve el mismo código HTML porque
para generar ese código existen procesos en el servidor que hacen que los resultados
puedan variar.
¿Cómo reconocer si una web que visitamos es dinámica o estática? En general, es dinámica
aquella que puede interactuar con el visitante y/o administrador web, pudiéndose modificar
el contenido de la página según el momento u opciones escogidas. Ejemplos de esto son:
cuando el usuario puede escribir un comentario, escoger los productos y ponerlos en un
carrito de compras, subir archivos o fotografías, etc. En este caso SI se utilizan bases de
datos y se requiere programación web dinámica.
Las páginas web dinámicas ofrecen muchas ventajas en comparación con las páginas web
estáticas, como una mayor interactividad con el usuario y facilidad para el cambio y
actualización de contenidos. A las personas que administran las páginas web (webmasters,
programadores, gestores de contenidos), la programación dinámica les permite una
reducción en tiempo y costos, así como una mayor facilidad en el mantenimiento de un sitio
web.
RESULTADOS EN BUSCADORES USANDO PÁGINAS WEB DINÁMICAS
Ante todas las ventajas de este tipo de páginas cabe citar una desventaja “histórica” en
cuanto a los resultados obtenidos en buscadores como Bing, Google o Yahoo. Hasta hace
unos años, los buscadores consideraban que una web dinámica era no indexable (no
registrables sus contenidos de cara a búsquedas) debido a que no se podía ofrecer como
resultado de un buscador algo que cambiaba con frecuencia. Es frecuente oir el término “URL
amigable” en referencia a una dirección web que es sencilla y recuerda un texto simple, por
ejemplo:
http://www.aprenderaprogramar.com/cursos/cursophp/paginas-dinamicas-y-estaticas.htm
Por el contrario, muchas veces se dice que cuando las páginas contienen .php y numerosos
parámetros con caracteres como "?", "&" y "=" la URL no es amigable. Por ejemplo:
http://www.aprenderaprogramar.com/index.php?
option=com_content&view=article&id=57&Itemid=8
Esta situación en la actualidad puede considerarse superada: los buscadores se han
sofisticado y son capaces de indexar URL´s dinámicas sin problemas. Algunas aplicaciones de
software libre como Joomla, Drupal, WordPress, etc. siguen manteniendo sistemas que
permiten convertir las URL´s dinámicas en URL´s amigables, pero en general podemos decir
que esto es cada vez menos necesario. Desde nuestro punto de vista, es más importante
tener una página web con un buen diseño, bien estructurada en cuanto a menús y
contenidos, que se actualice con frecuencia y que ofrezca contenidos de calidad, más que
tener o no tener URL´s amigables.
EJERCICIO
Responde a las siguientes preguntas indicando verdadero o falso y justicando brevemente tu
respuesta:
a) Hoy día ya no tiene sentido crear una página web estática, ya que los navegadores
dejarán de admitirlas en un futuro próximo.
b) Podemos reconocer si una página web es dinámica en base a si es capaz de almacenar
información que el usuario proporciona y rescatarla posteriormente. Por ejemplo: los
comentarios en un blog.
c) La mayor parte de los sitios web y gestores de contenidos hoy día se basan en páginas
web dinámicas, pero muchos sitios siguen siendo webs estáticas.
d) Si creamos un sitio web dinámico no podremos ser indexados por buscadores como Bing,
Google o Yahoo.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
¿ES PHP UN BUEN LENGUAJE DE PROGRAMACIÓN?
Los orígenes de PHP están fechados en torno al año 1995. Sin embargo, fue a partir del año
1999 con la publicación de PHP 4 cuando este lenguaje de programación tomó un verdadero
auge. En sus primeros estadios de desarrollo, PHP se denominaba también “Zend Engine”,
nombre que provenía del nombre de sus creadores: Zeev Suraski y Andi Gutmans. En el año
2004 fue lanzada la versión 5 de PHP basada en el nuevo motor Zend Engine 2.0.
Esta nueva versión ofrecía mejoras para aplicaciones en servidores dedicados como por
ejemplo un mejor soporte para la programación orientada a objetos y una extensión
completamente nueva para el uso de MySQL, una de las bases de datos más usadas en
servidores.
La versión 6 de PHP ha estado en preparación durante largo tiempo en formato de borrador,
sin llegar a publicarse. Por ello se propuso que la nueva versión de PHP se llamara PHP 7,
dejando PHP 6 como una versión no publicada.
Algunas estadísticas indican que alrededor del 60% de los sitios Web en Internet utilizan PHP.
Este dato realmente no es comprobable a ciencia cierta, lo que sí es cierto es que PHP es un
lenguaje de programación que goza de gran popularidad y difusión. A esta circunstancia hay
que añadir el hecho de que páginas web de mucha importancia como Wikipedia o Yahoo se
apoyan en este lenguaje, lo cual demuestra que es un lenguaje muy potente que puede
servir desde para pequeñas páginas web hasta para grandes portales.
Muchas de las aplicaciones que se generan en comunidades de programadores y usuarios de
software libre usan PHP porque está disponible gratuitamente y es potente. Gracias a eso,
grandes proyectos como Wordpress, Joomla o Drupal han basado su desarrollo en el lenguaje
de programación PHP.
¿Es PHP un buen lenguaje de programación? En lo referente a si PHP es un “buen” lenguaje
de programación hay que tener en cuenta muchos factores ya que el resultado final de un
desarrollo web o de una aplicación web no sólo depende de la herramienta sino de quién la
maneja y cómo la maneja. Podemos afirmar que PHP utilizado correctamente es un muy
buen lenguaje de programación.
Lo que está claro es que, aunque tiene ventajas e inconvenientes, es uno de los lenguajes de
programación más difundidos en Internet y se encuentra disponible en prácticamente la
totalidad de los servidores dedicados. Cuando algo tiene éxito y amplia difusión, “por algo
será”.
LA EVOLUCIÓN DE PHP EN EL TIEMPO. LAS VERSIONES.
PHP 3
PHP 3.0, liberada en 1998, era la primera versión que se parecía fielmente al PHP tal y como
lo conocemos hoy en día.
Una de las mejores características de PHP 3.0 era su gran extensibilidad. Cuando hablamos
de extensibilidad nos referimos a la existencia de un núcleo o core al que se le pueden ir
añadiendo fragmentos de código que permiten hacer más cosas. Se trataría de algo parecido
a tener una base sobre la que podemos ir añadiendo piezas. Veamos una imagen:
En esta imagen, correspondiente a los juegos de niños armables “Lego”, vemos cómo existe
una base verde. Esa base sería el core o núcleo de PHP. Luego, aprovechando que esa base
tiene preparados los anclajes para seguir poniendo piezas, vemos que se le han añadido
extensiones. Por ejemplo, la primera extensión que tiene una base azul podría ser una
extensión que permita la gestión de correos electrónicos. La segunda extensión, que tiene
una base verde, podría ser una extensión para gestionar imágenes, y así sucesivamente…
Además de facilitar el trabajo con muchas bases de datos, protocolos y sistemas
informáticos, las características de extensibilidad de PHP 3.0 atrajeron a muchos
programadores a unirse al proyecto y enviar nuevos módulos de extensión. Esta fue la clave
del enorme éxito de PHP 3.0: que fue un proyecto abierto al que se unieron muchos
programadores formando una comunidad.
Todo el nuevo lenguaje fue liberado con el nombre de 'PHP', con el significado de ser un
acrónimo juego de las letras iniciales de “Hypertext Preprocessor”.
A partir de su lanzamiento, PHP creció pasando a ser usado por miles de programadores y
cientos de miles de sitios Web. Se estima que PHP 3.0 conquistó una fracción del total de
servidores mundiales de en torno al 10 %, lo cual fue un éxito rotundo.
PHP 4
La principal novedad de PHP 4 está en el intérprete del lenguaje PHP. Con la nueva versión se
lograron aumentos de entre 5 y 10 veces en la velocidad de ejecución de páginas PHP
respecto a la versión anterior, lo cual fue un salto muy importante.
Además del aumento en rendimiento, se introdujeron novedades relacionadas con el soporte
de objetos en PHP. La programación orientada a objetos es una forma avanzada de
programación y gracias a estas características PHP se encuentra entre los lenguajes de
vanguardia.
Otra nueva característica de PHP 4 fue que podía soportar hilos cosa que en PHP 3 no era
posible. Un hilo es básicamente una tarea que puede ser ejecutada en paralelo con otra
tarea. La principal ventaja que podemos obtener de esta funcionalidad es que se pueden
estar haciendo varias cosas al mismo tiempo sin tener que esperar a que se termine una
tarea para empezar otra.
Para los programadores, PHP 4 incluía un depurador. Un depurador viene siendo un asistente
que nos ayuda a detectar dónde se encuentran los errores en los programas o código de
desarrollo. Esto ayuda mucho al programador y le evita quebraderos de cabeza por no poder
localizar errores. Gracias al depurador, se podían seguir con mayor profundidad esos errores
“misteriosos” que hacían perder mucho tiempo.
PHP 5, PHP 6 Y PHP 7
La principal característica de PHP 5 con respecto a PHP 4 es la mejora en la programación
orientada a objetos (POO). Aunque este tipo de programación ya se había introducido en el
lenguaje desde PHP 3, las versiones anteriores a PHP 5 tenían bastantes limitaciones para el
uso de este tipo de programación.
La orientación a objetos es una manera de programar que es muy usada hoy en día. No
entraremos en detalles sobre ella de momento, porque es algo avanzado dentro de la
programación y en este curso trataremos de avanzar poco a poco desde lo más básico hasta
lo más complejo.
El principal objetivo de PHP 5 ha sido mejorar los mecanismos de programación orientada a
objetos para solucionar las carencias de las anteriores versiones. El resultado ha sido un
lenguaje más potente, que cada vez es más popular y que cada vez se usa más, tanto a nivel
profesional en empresas como a nivel de usuarios que quieren construir pequeñas páginas o
portales web.
Algunas personas dicen que PHP se parece cada vez más a Java, que es quizás el lenguaje de
programación más usado en el mundo, y que también es un lenguaje de programación
orientado a objetos.
¿QUÉ VERSIÓN DE PHP USAR?
La versión de PHP a usar depende en gran medida de qué desarrollo queramos hacer. Por
ejemplo, si vamos a usar PHP para el gestor de contenidos Joomla 1.0, no es lo mismo que si
vamos a usarlo para Joomla 1.5 porque cada uno tiene sus propias necesidades en cuanto a
la versión de PHP a usar. Es decir, cada aplicación debe ir con su versión de PHP adecuada al
igual que a un vehículo a motor debemos echarle el tipo de combustible adecuado. Si a un
coche diesel le echamos gasolina, no funcionará bien. Si una aplicación que fue concebida
para PHP 4 la intentamos ejecutar usando PHP 5, probablemente ocurra lo mismo: no
funcionará bien.
También debemos tener en cuenta que usar siempre la última versión de algo tiene sus
riesgos. Por ejemplo las últimas versiones no suelen estar tan testeadas como las anteriores
y se pueden producir ‘agujeros de seguridad’ que tendremos que tapar con algún parche.
En nuestra opinión la versión de PHP que debemos usar es la que mejor se adapte a nuestras
necesidades y, dentro de ésta, la que sea más estable. Para este curso recomendaremos
usar PHP 5.x (al escribir 5.x nos referimos a cualquier versión de PHP 5). También es posible
seguirlo usando PHP 4.x No te preocupes ahora por la versión pues de cara al aprendizaje
básico no es importante. En cambio, sí deberás prestar atención a la versión si tratas de
instalar aplicaciones como Joomla, Drupal o WordPress en un servidor, pues hay que
asegurarse de que la versión de la aplicación sea compatible con la versión de PHP en el
servidor.
EJERCICIO
Busca información en internet sobre el actual estado de desarrollo de las versiones PHP.
¿Cuál es la última versión estable publicada? ¿En qué versiones se está trabajando como
borrador?
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
¿QUÉ NECESITO PARA ESCRIBIR CÓDIGO PHP Y CREAR PÁGINAS WEB DINÁMICAS?
Los requisitos indispensables para poder escribir y crear páginas PHP son los siguientes:
1.- Disponer de un editor de textos con el que escribir el código de la página PHP. Por
ejemplo el Notepad++ es más que suficiente (el “Bloc de notas” de Windows también
valdría pero es mucho más limitado).
En vez de un editor de textos podríamos usar un programa más avanzado (entorno de
desarrollo), pero en este curso vamos a centrarnos en el manejo básico de PHP, por lo que
utilizaremos un editor de textos.
2.- Un servidor dónde nuestras páginas PHP sean interpretadas y devueltas después de
dicha interpretación.
3.- Una base de datos donde guardaremos, recuperaremos y consultaremos nuestros
datos.
4.- Un navegador web, como por ejemplo Google Chrome. Puede valer cualquier otro
como Mozilla Firefox, Internet Explorer, Safari, etc.
Podemos destacar dos opciones:
OPCIÓN 1 OPCIÓN 2
La primera opción sería la de trabajar en local. Para ello
podemos hacer uso de un paquete personal como WAMP
SERVER que nos ahorrará tiempo y quebraderos de
cabeza.
Este paquete instalará un servidor Apache, un servidor de
base de datos MySQL, con el gestor phpMyAdmin y ,
por supuesto, PHP. Es decir, instalando un programa en
nuestro ordenador podemos simular un servidor dentro
de él.
Otra posible opción sería la de utilizar un servidor
remoto. Alguno gratuito podría valer sin más problemas.
Para ello, nos registraríamos en cualquier servicio
hosting que ofrezca alojamiento gratuito y a partir de hay
con un cliente ftp, como FileZilla, crearíamos nuestras
páginas webs dinámicas.
TIPOS DE PAQUETES DE SERVIDOR PARA INSTALACIÓN EN NUESTRO ORDENADOR.
Entre los paquetes más populares, podemos destacar y nombrar.
Nombre Descripción Logo
WAMP SERVER
Wamp Server utiliza las siguientes herramientas: Windows como
Sistema Operativo, Apache, como servidor web, MySQL, como
gestor de bases de datos y PHP como intérprete del lenguaje de
programación PHP.
LAMP SERVERLamp Server es un sistema análogo pero que funciona bajo el
Sistema Operativo Linux.
MAMP SERVERMamp Server es un sistema análogo pero que funciona bajo el
Sistema Operativo Macintosh.
XAMPP SERVER
Este paquete tiene la característica principal que se puede
instalar para cualquiera de los diferentes sistemas operativos, es
decir, existen versiones tanto para Windows como para Linux,
Macinstosh. Siendo, también, un sistema análogo al Wamp
Server.
¿Cuál de estos paquetes es mejor? Esta pregunta es de difícil respuesta. Si usamos Linux o
Macintosh y queremos instalar un paquete de este tipo, hemos de usar el propio de nuestro
sistema operativo. Si usamos Windows, nosotros recomendamos Wamp, pero Xampp puede
ser igualmente válido.
Más importante que elegir entre uno de estos paquetes, es elegir si trabajar en local o en
remoto. Nosotros vamos a recomendar trabajar en remoto. Los motivos para ello y cómo
hacerlo se expondrán en próximas entregas. Por ahora, debemos conocer simplemente las
alternativas.
EJERCICIO
Responde a las siguientes preguntas indicando verdadero o falso y justicando brevemente tu
respuesta:
a) Para escribir código PHP necesitamos un IDE con un compilador, por ejemplo Aptana
Studio.
b) No es posible visualizar páginas php en local a no ser que utilicemos un emulador de
servidor como Wamp, Xampp o similar.
c) Trabajar en local quizás sea más rápido si tenemos una conexión a internet lenta, pero por
el contrario no emulamos de forma exacta las condiciones de un servidor real.
d) Si trabajamos en local sólo podremos crear código HTML, teniendo que posponer la
creación de código PHP a un momento posterior.
e) Trabajar en remoto nos obliga a pagar la contratación de un servicio de hosting.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
PREPARANDO EL ENTORNO DE DESARROLLO. DESCARGAR E INSTALAR NOTEPAD+
+.
Vamos a comenzar a preparar el entorno con el que vamos a trabajar para poder crear
páginas web durante este curso. Lo primero que debemos hacer es descargar el editor de
texto Notepad++ e instalarlo. Para ello nos vamos a ir a la dirección siguiente:
http://notepad-plus-plus.org
Cuando la página haya terminado de cargar, hacemos click en la sección download del menú.
Ten en cuenta que la apariencia de la página web puede cambiar cada pocos meses.
En la página web que nos aparecerá, descargamos la versión “Installer” actual. El installer es
el paquete de instalación automática más fácil y rápido para instalar Notepad++.
Una vez descargado el archivo, lo ejecutamos para instalarlo en nuestro ordenador haciendo
doble click sobre él. El proceso de instalación es muy simple y no entraremos a explicarlo con
más detalle, simplemente vete aceptando para ir cumpliendo los pasos de la instalación.
Cuando tengamos instalado el programa, ya dispondremos del editor de texto Notepad++,
con el que podremos abrir y editar cualquier fichero HTML. Podremos acceder al programa
desde Inicio -- > Programas -- > Notepad++ ó desde el icono de acceso directo en el
escritorio si se ha creado.
EJEMPLO: COMENZAR A USAR NOTEPAD++
Desde el explorador de archivos de Windows, creamos una carpeta llamada curso_php_apr2
en la unidad C.
Una vez creada la carpeta, entramos en ella. Abrimos Notepad++ y pulsamos en Archivo -- >
Guardar. Como nombre de archivo escibimos CU00808B.php (este nombre de archivo es solo
un ejemplo, puedes ponerle el que tú quieras) y lo guardamos dentro de la carpeta creada.
Paso seguido, cierra el programa. Para editar este archivo (o cualquier otro) con el programa
Notepad++, podemos hacer dos cosas. Bien abrir Notepad++ y elegir Archivo -- > Abrir y
seleccionar el archivo, o bien hacemos lo siguiente:
Clickamos sobre el archivo con el botón derecho del ratón y se mostrará un menu similar a
éste (Nota: en algunos casos aparecen conflictos entre la versión de Notepad++ y la versión
de Windows y este menú contextual no se muestra. En este caso, tendremos que abrir
primero Notepad++ y luego la opción Abrir del menú Archivo.)
En el menú desplegado seleccionamos “Edit with Notepad++”.
De una forma u otra, habremos abierto el archivo php con nuestro editor Notepad++.
Ahora escribimos el siguiente código PHP y guardamos el archivo.
<?php
echo "Curso básico de PHP.";
?>
Una vez realizados los pasos anteriores debemos seguir preparando el entorno de desarrollo
antes de poder visualizar la página PHP creada porque todavía no disponemos de un servidor
PHP que interprete nuestro código PHP. Es decir, no podrás ver la página web simplemente
haciendo doble click sobre el archivo.
Ten cuidado porque si copias el código en vez de escribirlo es posible que tengas problemas:
hay muchos tipos de comillas: “curvadas”, “sin curvar”, etc. En el código las comillas son
simples, si tú las has copiado de otro sitio es posible que el formato de las comillas no sea el
correcto. Esto puede pasar también con otros caracteres. Esto no significa que no puedas
cortar y copiar código de otro sitio, sino que debes tener presente que se te pueden
presentar problemas con el juego de caracteres (ten cuidado especialmente si pretendes
copiar algo desde Microsoft Word porque es habitual que haya problemas con los caracteres).
Si has seguido paso a paso todo lo que hemos expuesto y has llegado a visualizar en pantalla
el texto, es que has completado correctamente la instalación de Notepad++, que es el editor
que vamos a usar durante el curso (aunque si lo deseas también puedes seguir el curso
usando otro editor). Si no has podido instalarlo, revisa las instrucciones y comprueba que las
hayas seguido correctamente, consulta la ayuda de Notepad++ ó consulta en los foros de
aprenderaprogramar.com para obtener ayuda.
EJERCICIO
Cuando instalamos Notepad++, éste se instala dentro de una carpeta en nuestro
computador, y dentro de esa carpeta habrá un archivo ejecutable (normalmente Notepad+
+.exe) que es el que se invoca cada vez que se quiere ejecutar el programa. Responde a la
siguiente pregunta: ¿Cuál es la ruta del archivo ejecutable de Notepad++ dentro de tu
computador?
La respuesta depende del computador y sistema operativo que estés utilizando. Un ejemplo
de respuesta puede ser la siguiente: C:\Program Files\Notepad++\Notepad++.exe
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
CONFIGURACIÓN BÁSICA DE NOTEPAD++ PARA CREAR PÁGINAS PHP
Antes de poder comenzar a crear páginas PHP, necesitaremos realizar una configuración
básica de nuestro entorno de desarrollo. En nuestro caso, la configuración será bastante
simple y consistirá en elegir la codificación con la que guardaremos nuestros ficheros PHP y
seleccionar el lenguaje con el que vamos a trabajar.
Lo primero que vamos a hacer es abrir el programa Notepad++. Para esto, nos vamos a
Inicio -- > Programas -- > Notepad++ -- > Notepad++. Se nos abrirá el programa, mostrando
una pantalla similar a la siguiente.
Para seleccionar la codificación con la que trabajaremos durante todo el curso, en la pestaña
Formato, hacemos click sobre “Codificar en UTF-8 sin BOM”, tal y como se indica en la
imagen siguiente.
Comprueba periódicamente que la opción de codificación sea siempre “Codificar en UTF-8 sin
BOM”. Si no es así, puedes tener problemas y no obtener los resultados deseados.
Ahora tendremos que indicar que vamos a utilizar el lenguaje de etiquetas PHP. Para ello, en
la pestaña lenguaje abrimos P y seleccionamos PHP de entre todas las opciones posibles.
Sería algo similar a lo que se muestra en la imagen siguiente.
Ya tenemos todo listo para poder empezar a crear nuestras páginas PHP.
AUTOCOMPLETAR. UNA VENTAJA DE NOTEPAD++
Para facilitar la escritura de código Notepad++ cuenta con una opción de autocompletar, la
cual se activa en la pestaña Configurar --> Preferencias. En la ventana que nos aparecerá,
dentro de la pestaña Copia de seguridad/Autocompletar ó Autocompletar (autocompletion)
debemos activar la casilla “Habilitar autocompletar en cada entrada” (Enable autocompletion
on each input) y “Pistas para los parámetros de la función” (Function parameters hint on
input). Ten en cuenta que la situación de los menús y opciones puede variar de una versión a
otra de Notepad++, por lo que no siempre encontrarás estas opciones en el mismo sitio que
las estamos describiendo.
AUTOCERRADO DE ETIQUETAS. OTRA VENTAJA DE NOTEPAD++
Para activar el autocerrado inteligente de etiquetas HTML, en menú superior seleccionamos
TextFX --> TextFX Settigns --> Autoclose XHTML/XML tag
En algunas versiones de Notepad++ no aparece TextFX en el menú superior. En este caso,
debemos:
a) En el menú Configurar -- > Preferencias. En la ventana que nos aparecerá, tenemos que
buscar la opción Autocompletar (autocompletion) como hicimos anteriormente y marcar la
opción “html/xml close tag”
b) O bien instalar el plugin TextFX Characters accediendo a Plugins, elegir TextFX Characters
y pulsar Install. Una vez instalado el plugin, activar Autoclose XHTML/XML tag.
También es de interés activar TextFX --> TextFX Settigns --> Autoclose {([.
En caso de no tener TextFX usaríamos en el menú Configurar - > Preferencias, Activar
autoinsert {([.
Estas opciones nos permiten en general una escritura más rápida, aunque si en algún
momento nos resultan molestas las podemos desactivar.
OTRAS VENTAJAS DE NOTEPAD++
Quizás te preguntes por qué hemos elegido Notepad++ para este curso. La respuesta es
que tiene diversas ventajas, por ejemplo:
- Consume pocos recursos del sistema. No sobrecargarás tu ordenador porque el programa
es al mismo tiempo que potente, ligero.
- Dispone de la función autocompletar que ya hemos citado, que nos facilita ayuda mientras
estamos escribiendo el código.
- Permite abrir múltiples archivos simultáneamente, y reemplazar un texto en todos los
archivos abiertos a la vez si así lo deseamos.
- Permite abrir dos archivos y realizar una comparación línea a línea entre ellos, indicándonos
en qué líneas existen diferencias entre un archivo y otro.
- El código se nos muestra con un conjunto de colores que permite ver con claridad las
etiquetas de apertura y cierre y otros elementos especiales de la codificación.
- Permite ampliar sus posibilidades mediante la instalación de plugins gratuitos disponibles
en internet.
- Tiene muchísimas más posibilidades, pero no podemos citarlas todas. En conjunto, es un
buen editor útil para programadores a nivel profesional y para principiantes.
- Es software libre que podemos descargar gratuitamente desde internet.
Como verás Notepad++ nos parece un buen editor de código para programación. Esto no
quiere decir que no haya otras editores igual de buenos y potentes. De hecho, si ya eres
usuario de algún otro editor puedes seguir este curso usándolo.
EJERCICIO
En el menú Ayuda (?) aparecerá una opción “Acerca de Notepad…” (About Notepad++).
Consulta la información sobre Notepad++ y responde a esta pregunta: ¿Qué versión de
Notepad++ tienes instalada en tu computador?
Una opción interesante de Notepad++ es que dispone de numerosos plugins. Busca algún
plugin que te resulte de interés, instálalo (consulta antes la documentación sobre el plugin y
comprueba que sea un plugin actualizado y compatible con tu versión de Notepad++) y
prúebalo. Para la instalación puedes utilizar el menú Plugins - > Plugins Manager o hacerlo de
otras maneras. Una vez instalado y probado el plugin responde:
a) ¿Cuál es el nombre del plugin?
b) ¿Quiénes son el autor o autores? ¿Cuál es su página web?
c) ¿Cuál es la utilidad del plugin?
Nota: no es recomendable instalar plugins antiguos.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
DESCARGAR E INSTALAR EL CLIENTE FTP FILEZILLA. TRABAJAR REMOTAMENTE
Una forma de trabajar en desarrollos webs es remotamente. Es decir, modificando
directamente en el servidor, donde tengamos nuestro sitio web, los archivos necesarios. La
otra forma de trabajo sería el trabajo en local, es decir, manteniendo los archivos en nuestro
propio ordenador.
En general, los desarrollos web se hacen sobre servidores remotos y para trabajar con ellos
tenemos que trabajar remotamente. Para esto, lo que tenemos que hacer en primer lugar es
instalar un cliente FTP. Un cliente FTP es un programa que nos permite conectarnos a un
servidor FTP para transferir archivos y realizar otras tareas (renombrar archivos, crear
directorios, asignar permisos, etc.).
Nosotros vamos a usar en este curso un cliente ftp gratuito y de gran popularidad porque es
muy útil y potente. Para descargar este programa gratuito, lo primeros que vamos a hacer es
ir a la dirección web siguiente: http://filezilla-project.org/
Aparecerá una web similar a la que se muestra en la siguiente imagen (aunque ten en cuenta
que el aspecto puede ir variando cada pocos meses).
Ahora tendremos que descargar el cliente haciendo click en Download FileZilla Client. Busca
el link de descarga y ten cuidado de elegir Filezilla Client y no Filezilla Server, ya que es el
client el que buscamos.
Tras realizar este paso, se nos abrirá una nueva página web con los links de descarga (el
aspecto de la web puede cambiar cada pocos meses).
Para que comience la descarga del programa, haremos click en Download Now comprobando
que sea la versión adecuada para nuestro sistema operativo (lee lo que indica junto al link de
descarga).
Una vez descargado, si usamos Windows lo instalaremos como cualquier otro programa de
Windows. Tener en cuenta que si en vez de Windows estamos usando Linux o Macintosh,
existen versiones de Filezilla propias de estos sistemas y debemos elegir la adecuada según
el sistema que estemos usando. Una vez instalado el programa lo abrimos visualizando una
imagen que será similar a la siguiente.
Ahora tendremos que crear una conexión con nuestro servidor FTP y conectarnos. Para ello
hacemos click en Archivo -> Gestor de Sitios
Y en la pantalla que se nos mostrará, seleccionamos nuevo sitio. Aquí sería donde
introduciríamos los datos de acceso si los tuviéramos. Como ahora no los tenemos, cerramos
la ventana.
Para establecer una conexión con un servidor remoto en general tendremos que:
- Especificar el nombre de servidor: para conocerlo tenemos que consultar al proveedor que
ofrece el servicio del servidor, o que nos hayan facilitado este dato.
- Especificar como modo de acceso “Normal”.
- Introducir un nombre de usuario que nos habrá facilitado el proveedor que ofrece el servicio
del servidor (o que habremos establecido nosotros mismos).
- Introducir una contraseña que nos habrá facilitado el proveedor que ofrece el servicio del
servidor (o que habremos establecido nosotros mismos).
Ten en cuenta que en algunos servidores antes de establecer una conexión ftp hay que dar
un paso previo que consiste en “crear una cuenta ftp”. Si no sabes si dispones de una cuenta
ftp, consulta a tu proveedor.
Una vez introducidos los datos de la conexión le daríamos a conectar y aparecería una
pantalla similar a la siguiente, donde, como podemos observar, tenemos un explorador de
archivos.
Esto nos permitirá modificar directamente en el propio servidor los archivos deseados (antes
de hacer modificaciones en el servidor es conveniente hacer copia de seguridad y guardarla
en local de modo que si cometemos algún error o borrado accidental podamos recuperar los
archivos) y subir o descargar los archivos locales que queramos.
Nota: explicaremos más adelante dentro de este mismo curso cómo crear una cuenta de
hosting en un servidor, lo que nos permitirá conectar con el servidor usando Filezilla. Si no
dispones de una cuenta con nombre de servidor, nombre de usuario y password no intentes
conectarte usando Filezilla porque no podrás. En este momento del curso, lo único necesario
es que compruebes que tienes Filezilla instalado en tu computador y que puedas abrir el
programa sin problemas.
EJERCICIO
Si has instalado Filezilla, éste se ejecuta gracias a que existe un archivo ejecutable localizado
en una carpeta de nuestro computador. Responde a las siguientes preguntas:
a) ¿En qué ruta se encuentra el archivo ejecutable de FileZilla en tu computador? La
respuesta depende del computador y sistema operativo que estés empleando. Un ejemplo de
respuesta puede ser este: C:\Program Files\FileZilla FTP Client\filezilla.exe
b) Consulta la opción de menú Ayuda (Help) y responde a las siguientes preguntas. ¿Cuál es
la versión de Filezilla que has instalado? ¿Cuáles son los datos de tu sistema operativo?
Puedes usar la opción <<Copy to clipboard>> para recuperar estos datos desde la ventana
de la ayuda de Filezilla.
LAS VENTAJAS DE GOOGLE CHROME. ¿POR QUÉ USAR CHROME?
En este curso vamos a usar Google Chrome, pero si lo prefieres por algún motivo como
tenerlo ya instalado, Mozilla Firefox también nos parece una opción recomendable, y puedes
seguir este curso también con este navegador.
Otros navegadores como Internet Explorer también se pueden usar, pero en principio no es lo
más recomendable por diversos motivos. Uno de ellos es que no dispone de las mismas
herramientas que Chrome o Firefox, que son los navegadores más usados por
programadores y desarrolladores web.
Vamos a citar algunas ventajas de Google Chrome:
a) El navegador se abre muy rápidamente en comparación con otros navegadores. Google
Chrome es muy ligero, por eso tarda poco en abrirse.
b) El navegador tiene una buena velocidad de carga de las páginas web por las que vamos
navegando. Esto se debe a su estructura interna, que también es ligera.
c) Por el mero hecho de instalarlo, ya disponimos de una potente herramienta de análisis y
depuración de páginas web o “Inspeccionador de elementos”. Mozilla Firefox también viene
con herramientas de análisis incorporadas, y además dispone de la extensión “Firebug”, muy
valorada por los programadores.
d) Si tenemos abiertas varias pestañas y una de ellas se tiene que cerrar debido a algún error
o bloqueo, no se nos quedará colgado el programa al completo, sino únicamente la pestaña o
pestañas afectadas.
DESCARGAR E INSTALAR EL NAVEGADOR GOOGLE CHROME. VISUALIZAR PÁGINAS
HTML.
Para poder visualizar nuestras páginas web, vamos a instalar el navegador Google Chrome.
Lo primero que tenemos que hacer para instalar dicho navegador, es descargarlo de la web
oficial de Google en la dirección: http://www.google.com/chrome?hl=es
También puedes acceder simplemente escribiendo “descargar google chrome” en un
buscador (Google, Yahoo, Bing, etc.) Una vez accedamos hemos de buscar el link de
descarga.
Hacemos click en ‘Descargar Google Chrome’. Nos aparecerá una página donde se nos pide
que aceptemos las condiciones. Aceptamos para instalar el navegador.
El proceso normalmente comienza mostrando una pantalla que indica “Gracias por probar
Google Chrome” y de forma automática, comienza a su vez el proceso de instalación en
nuestro ordenador (si te pide permiso para la instalación acepta para permitir el proceso).
Una vez descargardo e instalado, ya podremos ver páginas web con éste navegador. Para
acceder a Google Chrome, nos iremos a Inicio --> Todos los programas --> Google Chrome.
También podremos acceder desde el escritorio a través de un enlace directo.
LAS CUESTIONES MÁS BÁSICAS EN GOOGLE CHROME (Y EN GENERAL PARA
CUALQUIER NAVEGADOR)
Al abrir el navegador Google Chrome se nos mostrará una ventana similar a la siguiente. Ten
en cuenta que el aspecto puede variar según la versión de Chrome que estemos usando, por
tanto tendremos que buscar las opciones según aparezcan en nuestro computador, que
puede diferir en algunos detalles de lo que indicamos aquí.
Una vez abierto Chrome podremos abrir tantas pestañas como queramos, introducir una
dirección URL en la barra de direcciones, recargar la página actual (también podremos pulsar
F5 como atajo de teclado para conseguir recargar una página) y acceder al menú de
opciones de Google Chrome entre otras operaciones.
Para cambiar la página web de inicio que viene por defecto en nuestro navegador Google
Chrome (la que aparece cada vez que abrimos el navegador), procederemos de la siguiente
forma:
a) En algunas versiones de Chrome, tendremos que hacer click en ‘Llave inglesa’ y dentro del
menú desplegable que nos aparece en la opción ‘opciones’. Se nos abrirá una nueva pestaña
donde en la opción ‘Pagina de inicio’ pondremos por ejemplo http://aprenderaprogramar.com
( o la página que queramos). Otras versiones no traen llave inglesa.
b) En otras versiones de Chrome, haremos click en el icono a la derecha de la barra de
direcciones para desplegar el menú y elegimos “Configuración”. En la opción “Iniciar sesión”,
elegimos la opción “Abrir una página específica o un conjunto de páginas -- > Establecer
páginas”, introducimos la URL de la queramos sea nuestra página de inicio, por ejemplo
http://aprenderaprogramar.com ( o la página que queramos) y pulsamos aceptar.
c) Otra opción para acceder a la configuración es escribir en la barra de direcciones lo
siguiente (como si fuera una dirección web): chrome://settings/
LIMPIAR LA CACHÉ Y OTRAS OPERACIONES ÚTILES QUE USAREMOS CON
FRECUENCIA
Llamamos “caché” o “cache” a contenidos que se almacenan en nuestro navegador y que no
se descargan desde internet, sino que los tenemos localmente en nuestro equipo. Estos
contenidos pueden ser texto o imágenes y permite que cuando navegamos por una web las
páginas se muestren más rápido ya que parte de la información no se descarga de internet
(o no se actualiza desde los archivos fuente) sino que se mantiene en nuestro navegador. Sin
embargo, cuando estamos creando páginas web esto puede dar lugar a resultados
engañosos, ya que tras hacer una modificación puede que el navegador no la muestre por
estar utilizando contenidos de la caché. Por tanto una operación que va a ser de gran
utilidad, es limpiar la caché cuando deseemos que todo el contenido venga directamente de
internet. Si no eliminamos la cache puede que lo que estemos visualizando en nuestra
pantalla de ordenador sea información cacheada y, por lo tanto, no actualizada.
Para limpiar la caché del navegador tenemos que hacer lo siguiente: Llave inglesa o icono
para desplegar el menú --> Herramientas --> Eliminar (borrar) datos de navegación. También
podemos acceder escribiendo directamente en la barra de direcciones
chrome://settings/clearBrowserData como si se tratara de una dirección web.
En la pantalla que se nos muestra a continuación seleccionamos todas las opciones, y para
definir desde cuándo en la opción “Eliminar elementos almacenados desde:” elegimos ‘el
origen de los tiempos’ (es decir, borrarlo todo sin dejar nada).
Para guardar una página web en local debemos simplemente ir a llave inglesa o icono de
despliegue de menú y seleccionar ‘Guardar página como…’ y seleccionar el nombre y
ubicación donde queremos guardar la página HTML.
Para añadir una página a favoritos debemos clickar sobre marcadores (normalmente un
icono con forma de estrella a la derecha de la barra de direcciones) y elegir el nombre y
carpeta donde guardaremos el nuevo marcador favorito. Esto sirve para ir manteniendo una
colección de enlaces a páginas web que visitamos con frecuencia, de forma que pulsando
sobre el enlace accedemos directamente a la web sin necesidad de escribir la url en la barra
de direcciones. Para visualizar esa colección de enlaces tenemos que desplegar el menú y
elegir la opción Marcadores -- > Mostrar barra de marcadores.
Si queremos ver las propiedades de una imagen clickamos sobre la imagen con el botón
derecho del ratón y pulsamos en ‘Inspeccionar elemento’ en el menú desplegable que se nos
abre. Así veremos el tamaño de la imagen.
Para hacer zoom basta con utilizar los siguientes atajos de teclado: ‘Ctrl’ + ‘+’ (más zoom,
es decir, pulsando la tecla CTRL y al mismo tiempo la tecla +, logramos acercar la vista),
‘Ctrl’ + ‘-‘ (menos zoom, es decir, alejar la vista). O si lo preferimos usar ‘Ctrl’ + ‘ruleta o
rueda del ratón’ hacia arriba o hacia abajo, para acercar o alejar la vista.
En cualquier caso, para volver a ver la página con su tamaño original sólo tenemos que
pulsar ‘Ctrl’ + ‘0’.
CÓMO ACTUALIZAR GOOGLE CHROME
Google Chrome se actualiza automáticamente cuando detecta que hay una nueva versión del
navegador. El proceso de actualización se produce en segundo plano y no es necesario que
realices ninguna acción. No obstante, puedes comprobar si el navegador está actualizado
pulsando sobre llave inglesa o icono para desplegar el menú --> Información de Google
Chrome. Ahí te aparecerá un mensaje con la versión que estás usando actualmente, y te
indicará si el navegador está actualizado o no. También puedes acceder a esta información
escribiendo chrome://chrome/ en la barra de direcciones como si fuera una dirección web.
Que el navegador se mantenga actualizado sirve para tratar de evitar posibles fallos de
seguridad y ataques de virus o programas maliciosos.
EJERCICIO
Consulta la opción de menú Ayuda (Help) de tu navegador y responde a las siguientes
preguntas. ¿Qué navegador y qué versión de navegador estás empleando?
Indica si las siguientes afirmaciones son verdaderas o falsas y justifica brevemente tu
respuesta:
a) Cuando creamos una página web con php y la visualizamos, al guardar la página con la
opción Guardar como del navegador, guardaremos el código PHP que la generó.
b) Cuando creamos una página web con php y la visualizamos, al guardar la página con la
opción Guardar como del navegador, guardaremos el código HTML que la generó.
c) Con la opción Guardar como del navegador no podemos guardar una página web debido a
que el código PHP llega encriptado al navegador y éste no lo muestra al usuario.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
TRABAJAR EN LOCAL O CON UN SERVIDOR REMOTO PHP. ¿QUÉ ES MEJOR?
En este artículo vamos a intentar mostrar las diferencias entre trabajar en local (en nuestro
computador) o trabajar en un servidor remoto. Ambas opciones pueden ser válidas, aunque
nosotros vamos a recomendar seguir este curso trabajando en remoto.
La principal diferencia se encuentra en que en un servidor remoto, ya dispondremos de las
herramientas necesarias e instaladas. En el trabajo en local, tendremos que instalar las
herramientas de trabajo necesarias: servidor web, PHP, MySQL, etc. (Las herramientas no
tienen que ser exactamente las indicadas, sólo se muestran a modo de ejemplo).
En un primer planteamiento podríamos pensar que sería mucho mejor trabajar en remoto
porque el trabajo de la instalación de las herramientas y tecnologías necesarias ya estaría
hecho. Pero esto puede ser algo no deseado porque no tendremos control total sobre esas
herramientas y tecnologías, siendo el proveedor del hosting el que controlará las
actualizaciones, configuraciones y herramientas instaladas. Aunque siempre podremos
ponernos en contacto con dicho proveedor y indicarle que deseamos unas u otras
configuraciones y ver si es posible el cambio por su parte.
Además de las anteriores, otra de las diferencias entre estas dos formas de trabajar, es la
actualización de los cambios en el servidor. Si trabajamos en remoto directamente sobre
nuestro sitio web, los cambios se hacen instantáneamente ya que los archivos que
modificamos son los que un usuario que navega por Internet puede observar. Esto tiene unos
pros y unos contras. Como ventaja podemos indicar que, sabiendo lo que estamos haciendo y
no cometiendo errores, tendremos una página actualizada al instante. Si cometemos errores
y la página, con esos errores, no puede visualizarse, los usuarios de Internet tampoco podrán
verla y esto es una desventaja.
¿Qué pasaría si trabajamos en local? Pues si trabajamos en local tendremos la ventaja de
poder probar y visualizar todos los cambios en nuestro computador y hasta que esos cambios
no sean de nuestro agrado, nadie más tendrá acceso a ellos, teniendo siempre nuestro
servidor sin cambios. De esta manera, la página web no se vería modificada hasta que
nosotros lo decidamos una vez hayamos probado los cambios. Ahora bien, cuando estos
cambios sean de nuestro agrado y quedemos totalmente conformes, para que éstos sean
visibles en Internet, tendremos que sobrescribir los archivos modificados localmente al
servidor remoto. Es decir, hacemos un trabajo extra: primero, hacer las modificaciones en
local, luego, trasladar esas modificaciones al servidor remoto.
Si no tienes una buena conexión a Internet, lo más recomendable es trabajar en local y subir
la página cuando esté terminada, ya que trabajar en remoto requiere una buena conexión a
internet para poder guardar nuestro trabajo en el servidor remoto a medida que lo vayamos
desarrollando.
Estas diferencias que hemos comentado serían las diferencias más claras entre estas dos
formas de trabajar.
¿QUÉ ES MEJOR, TRABAJAR EN LOCAL O EN REMOTO?
La mejor forma de trabajo es la que mejor se adapta a nuestras necesidades y/o
conocimientos.
Las personas que están dando sus primeros pasos en programación PHP pueden elegir entre
una opción u otra, y quizás ambas sean válidas. Nosotros vamos a recomendar que se
trabaje en remoto por las siguientes razones:
a) Se asemeja más a lo que va a ser el trabajo con desarrollos web reales. Aunque ahora se
trate de aprendizaje, será un aprendizaje más cercano a lo que es la realidad.
b) Nos podemos despreocupar (en cierta medida) de cuestiones de configuración del servidor
e instalación de herramientas.
c) Existen proveedores que ofrecen hosting gratuito, por lo que no habremos de contar con
un dominio de internet propio ni una cuenta de hosting (alojamiento de archivos, bases de
datos, etc.) de pago. Es cierto que las ofertas de servicio de hosting gratuito tienen
limitaciones importantes, pero de cara al aprendizaje nos resultarán suficiente.
Las grandes empresas no suelen hacer modificaciones sustanciales de sus sitios web
directamente sobre el sitio, sino que disponen de un servidor de pruebas (al que se
denomina servidor de desarrollo) donde ensayan los cambios que, una vez contrastados, son
trasladados al servidor de acceso público al que se suele denominar servidor de producción.
Es decir, las grandes empresas no suelen trabajar en local (alojando todo en sus propios
computadores) entre otras cosas porque buscan emular con la mayor fiabilidad posible lo que
van a ser los ambientes y circunstancias de los servidores donde finalmente se van a alojar
sus sitios web.
En este curso vamos a explicar cómo trabajar sobre un servidor remoto. No obstante, si ya
tienes instalado un servidor local (como Wamp ó Xampp) y estás acostumbrado a él también
podrás seguir el curso usando cualquiera de estas plataformas.
EJERCICIO
Indica si las siguientes afirmaciones son verdaderas o falsas y justifica brevemente tu
respuesta:
a) Trabajar en remoto en desarrollos web alude a que la persona que crea la página web
realiza el trabajo desde distintos puntos de conexión, lo que permite por ejemplo que cree
una página web mientras está viajando.
b) Hoy día es posible disponer de forma gratuita de una dirección web y servicio de hosting
gratuito, con lo cual podemos crear páginas web basadas en PHP sin necesidad de contratar
un servicio de hosting.
c) Las grandes empresas siempre trabajan en local (en sus propios computadores) antes de
trasladar los cambios a los servidores de producción, con el fin de evitar caídas del servicio.
d) WampServer permite emular un servidor en nuestro propio computador. También haría
posible que nuestro computador funcionara como servidor remoto para servir contenidos a
través de internet.
CREAR UNA CUENTA DE HOSTING GRATUITA EN UN SERVIDOR PHP Y ACCEDER VÍA
CPANEL Y VÍA FTP
En esta entrega vamos a crear una cuenta de hosting gratuita en un servidor web que nos
permita trabajar con PHP y accederemos a éste vía Panel de Control (Cpanel) y vía FTP.
CREAR CUENTA DE HOSTING GRATUITA
En Internet hay muchas páginas web que permiten crear una cuenta de hosting gratuito en
un servidor php: por ejemplo www.000webhost.com, www.byethost.com,
www.agilityhoster.com y varios más. Creando una cuenta en un hosting gratuito, disponemos
de un servidor (que compartimos con otros usuarios) donde podemos alojar una página web.
Para este curso, vamos a utilizar un servidor gratuito porque es adecuado para aprender. En
concreto usaremos el servidor de Byethost (byethost.com), aunque podríamos usar cualquier
otro porque todos ellos son similares. También, si dispones de una cuenta de hosting de pago
y de un dominio, puedes utilizar cualquier servidor siempre que ofrezca soporte php y base
de datos MySql.
En nuestro caso, en primer lugar crearemos la cuenta de hosting gratuita. Para ello,
accedemos a la página web de Byethost, introduciendo en nuestro navegador la siguiente
dirección: www.byethost.com. Hazlo y vete siguiendo los pasos que indicamos.
Nos aparecerá una página que ofrece diferentes opciones (ten en cuenta que el aspecto
puede variar cada pocos meses):
Buscamos el enlace donde diga “Free hosting” (alojamiento gratuito) y pulsamos sobre él.
Ahora debemos buscar la opción para crear una cuenta (sign up):
Una vez accedemos a la página de creación de una cuenta, se nos mostrará un formulario
donde tendremos que rellenar una serie de datos. Aquí tendremos que tener en cuenta que
el nombre de usuario que insertemos, estará ligado a la url de acceso a nuestro sitio. Es
decir, si como nombre de usuario (username) introducimos ‘lacocinademarco’, la dirección de
nuestro sitio Web será similar a la siguiente ‘http://lacocinademarco.byethost31.com’:
En nuestro caso introduciremos una serie de datos a modo de ejemplo tal y como podemos
ver en la imagen que se muestra a continuación.
Una vez hayamos finalizado de introducir los datos solicitados, haremos click sobre el botón
Registrar (Register) y nos aparecerá una página Web indicándonos que se nos ha enviado un
correo electrónico a la dirección de correo que hayamos facilitado en el formulario y en ese
correo nos indicarán un enlace web (dirección url) donde debemos activar nuestra cuenta.
El último paso que nos quedaría para crear nuestra cuenta de hosting gratuita sería entrar a
nuestro correo y hacer click en el enlace de activación del correo de Byethost que nos acaba
de llegar.
Dear byethost7.com's Member, Thank you for registering with byethost7.com.
Please click on the link below to activate your account. If the page does not display, you may copy and paste the link
to your browser. http://securesignup.net/activate.php? user=b7_1372194&email =
[email protected] & hash=8gtfg9sfddd17c98hfdghj39637c764&token=-572342451
While you wait for your account to activate, please 'like' us at http://www.facebook.com/free.byethost
best regards byethost7.com
Acto seguido se nos indicará que la activación fue realizada con éxito y se nos enviará un
nuevo correo electrónico con la información detallada de nuestros datos de acceso.
El correo que nos envía Byethost con la información de acceso detallada tiene más o menos
el siguiente contenido: “Dear Valued Customer, Thank you for registering at byethost7.com.
We are…”
Además nos envían los datos de acceso (los que ponemos aquí son a modo de ejemplo, tú
debes haber recibido tus propios datos de acceso):
Cpanel Username: b7_datos
Cpanel Password: elpassword
Your url: http://apr2.byethost7.com or http://www.apr2.byethost7.com
FTP Server: ftp.byethost7.com
FTP Loging: b7_datos
FTP Password: elpassword
MySQL Database Name: must create in Cpanel
MySQL Username: b7_datos
MySQL Password: elpassword
MySQL Server: see CPanel
Cpanel URL: http://cpanel.byethost7.com
Estos datos son importantes pues son los que nos permitirán gestionar todo lo necesario
relativo a nuestra página web. Conviene imprimirlos además de mantenerlos bien localizados
en un archivo de texto dentro de nuestro ordenador.
ACCEDER VÍA PANEL DE CONTROL (CPANEL)
Para acceder vía Cpanel, debemos ir a la url que nos hayan facilitando, en este ejemplo
http://cpanel.byethost7.com, e introducir el nombre de usuario y la contraseña.
Una vez comprobados que los datos sean correctos, se nos abrirá el Panel de Control (Cpanel
en este hosting, pero puede ser otro panel similar si estamos usando otro hosting)
Dentro de Cpanel existen distintas áreas. Podemos ver un área de información de la cuenta,
un área de administrador de archivos que nos proporciona un explorador de archivos
parecido al de Windows o Filezilla pero que además nos permitirá descomprimir archivos .zip
y, una tercera área con el que podremos acceder a las bases de datos previamente creadas.
ACCEDER VÍA FTP CON FILEZILLA
El proceso es el explicado en la anterior entrega del curso dedicada a Filezilla, con la
salvedad que los datos necesarios son los que encontraremos en el Cpanel en el área
marcada de información del sistema, que serán los mismos que hayamos recibido por correo
electrónico. Una vez abierto Filezilla, introducimos nombre de servidor, nombre de usuario y
contraseña y de esta manera accedemos al sistema de archivos de nuestro servidor. Te
recomendamos que guardes los datos de la conexión, para ello accede a FileZilla y haz en
Archivo -> Gestor de Sitios para almacenar el acceso.
Accede al servidor usando FileZilla para comprobar que esté todo correcto.
Si logras acceder debes ser capaz de visualizar el sistema de carpetas y archivos en el
servidor:
Si no logras acceder a Cpanel o no logras acceder al sistema de archivos remoto usando
FileZilla, escribe una consulta en los foros aprenderaprogramar.com.
EJERCICIO
Cuando se trabaja con un servidor es importante saber cómo visualizar el sistema de
archivos en el servidor, cómo subir, bajar y borrar archivos:
a) Crea un archivo en tu computador denominado prueba.txt y súbelo al servidor remoto
usando FileZilla. Para ello, desde el explorador de Windows arrastra el archivo hasta la
ventana de FileZilla donde se encuentran los archivos remotos. Una vez subido (transferido
de tu computador al servidor) en la parte inferior te aparecerá Transferencias Satisfactorias
(1) que indica que se ha transferido un archivo. Pincha sobre la ventana del sistema de
archivos en remoto y pulsa F5 para refrescar la vista, ahí debe aparecer el archivo
prueba.txt.
b) Borra el archivo del servidor remoto usando FileZilla. Para ello pincha encima del nombre
de archivo y pulsa la tecla Supr (borrar ó Del).
c) También se puede acceder al sistema de archivos mediante un file manager o similar
desde el panel de control (Cpanel o similar) del servidor. Accede al file manager y sube el
archivo prueba.txt al servidor.
d) Borra el archivo prueba.txt del servidor usando el file manager.
PREPARAR EL ENTORNO PARA TRABAJAR EN REMOTO
En entregas anteriores ya se indicó como acceder vía FTP al servidor remoto. Por lo tanto, no
vamos a volver a explicar como conectarnos a nuestro servidor mediante FTP y daremos por
supuesto que ya estamos conectados. Una vez estemos conectados, nos aparecerá una
imagen similar a la siguiente:
Ahora debemos entrar en el directorio remoto htdocs (en otros servidores el nombre del
directorio de trabajo suele ser public_html ó www). Este directorio es en el que debemos
crear nuestras páginas en PHP ya que será el directorio que el servidor use para servir las
páginas web. Los archivos en este directorio serán accesibles escribiendo la dirección web
raíz de nuestro sitio. Si tenemos un dominio propio, accederemos escribiendo
http://www.nombreDominio/index.php. Si hemos creado una cuenta de hosting gratuito será
accesible desde el navegador escribiendo la dirección web que nos haya indicado el
proveedor del servicio, por ejemplo: http://apr2.byethost7.com/index.php
Esta dirección nos la indica el proveedor del servicio de hosting gratuito: recordar la entrega
donde explicamos la creación de la cuenta de hosting gratuito donde indicábamos que el
dominio una vez registrada nuestra cuenta en el hosting era http://apr2.byethost7.com. (Esta
dirección es un ejemplo. En tu caso, si has creado tu cuenta gratutita, tendrás tu propia
dirección que te permita acceder).
Esto indica que dentro del directorio htdocs, tenemos creado un fichero en PHP llamado
index.php y su contenido será el mostrado en el navegador al acceder a la URL
anteriormente indicada.
Nota: Si no ponemos el nombre del fichero en la ruta del navegador, es decir, si simplemente
escribimos http://apr2.byethost7.com, por defecto el servidor buscará un fichero llamado
index.php, index.html ó index.htm para enviar la respuesta html al navegador. Es decir, si se
escribe http://apr2.byethost7.com/miarchivo.php se buscará el archivo miarchivo.php, pero si
se escribe http://apr2.byethost7.com el servidor buscará el archivo index existente y ese será
el que devuelva.
MI PRIMERA PÁGINA EN PHP
Al entrar en el directorio htdocs, es posible que veamos que ya existe una página index.htm
(ó index.html ó similar). La razón de esto es que en algunos servidores cuando creamos una
cuenta gratuita, el proveedor de hosting automáticamente nos crea dicho fichero que por
ejemplo puede contener un mensaje de bienvenida.
Antes de crear nuestra primera página en PHP, borraremos la página index.html ya que su
contenido no nos interesa. Para esto, haremos click con el botón derecho del ratón sobre el
fichero que deseamos borrar y en el menú desplegable, que nos aparecerá, pulsaremos en
borrar.
Una vez borrado el archivo, crearemos en local (en nuestro ordenador) un archivo al que
llamaremos index.php. Para ello usaremos Notepad++. Una vez creado el archivo, lo
subiremos al servidor remoto, arrastrándolo desde el directorio local donde lo hayamos
creado, al directorio remoto actual, es decir, trasladamos el archivo desde nuestro ordenador
hasta el servidor.
Una vez realizados estos pasos, tendremos en el servidor remoto un archivo llamado
index.php que estará vacío y que editaremos haciendo click con el botón derecho del ratón
sobre el archivo que deseamos editar.
Hay que aclarar que el archivo index.php lo podemos editar tanto en local como en remoto.
Se puede hacer de ambas maneras, siendo ambas correctas. La diferencia radicará en que si
trabajamos en local cada vez que queramos ver los cambios en la página web tendremos que
subir el archivo al servidor, y cada vez que lo subamos “sobreescribir” el archivo.
Si trabajamos editando en remoto, una vez editado el archivo y guardados los cambios,
directamente quedará modificado el archivo en el servidor, con lo cual directamente veremos
los cambios en la página web.
Supongamos que hemos hecho click sobre el archivo en remoto y pulsado el botón derecho,
y a su vez la opción “Ver/Editar” (View/Edit):
Ahora, normalmente, al ser la primera vez que editamos con FileZilla un archivo con
extensión PHP, nos dará la opción de seleccionar el programa con el que queremos abrir
dicho archivo. Indicaremos que queremos abrirlo con el Notepad++. Si no nos pide el
programa con el que queremos editar, podemos establecerlo manualmente de la siguiente
manera: desplegar el menú “Edición” (Edit) de Filezilla y pulsar sobre “Opciones” (Settings).
En la ventana que se abre, en el lateral izquierdo seleccionamos “Edición de archivo -- >
Asociaciones de tipo de archivo” (File editing -- > Filetype associations), y en el lado derecho
en el cajetín de texto escribimos: php “C:\Program Files\Notepad++\Notepad++.exe”, donde
la ruta entre comillas representa la ruta donde se encuentra el fichero ejecutable del
Notepad++. Esta ruta puede ser diferente según el sistema operativo e instalación que
hayamos hecho. Comprueba cuál es la ruta en tu computaor e introduce la ruta correcta para
tu caso.
Una vez establecido Notepad++ como editor para trabajar en remoto con Filezilla, cuando
pulsamos sobre un archivo en remoto y con botón derecho elegimos “Ver/Editar” (View/Edit),
se nos abrirá Notepad++ para editar el archivo correspondiente. En nuestro caso vamos a
editar el archivo index.php que habíamos subido al servidor anteriormente.
Ahora sólo nos falta crear nuestra primera página PHP. Para ello simplemente añadiremos
este código en el archivo index.php (más adelante se explicarán los conceptos propios de
PHP y entenderemos mejor lo que hacemos ahora mismo; no te preocupes ahora si tienes
dudas, las iremos solucionando poco a poco).
<?php
echo "Mi primera página en PHP - aprenderaprogramar.com";
?>
Cuando terminemos de editar el archivo, lo guardamos (para ello podemos usar la
combinación de teclas Ctrl + s ó hacerlo a través del Menú archivo --> Guardar de Notepad+
+). Una vez guardado en Notepad++ hacemos click sobre el programa FTP FileZilla que
teníamos en segundo plano. Automáticamente nos indicará que el archivo ha cambiado (a
file previosly opened has been changed) y nos preguntará si deseamos subir los cambios
(¿Volve a subir este archivo al servidor? ó Upload this file back to the server?).
Contestaremos que sí (yes).
Y ahora visualizaremos nuestra página en el navegador escribiendo la dirección web que es
nuestro dominio raíz. Si hemos creado una cuenta gratuita, esta dirección web nos la habrá
facilitado el proveedor del servidio de hosting gratuito y podrá ser (esto es un ejemplo)
similar a:
http://apr2.byethost7.com/index.php o http://apr2.byethost7.com. Recordar que en el
segundo caso, cuando no especificamos el archivo que hay que abrir, es el propio servidor el
que se encarga automáticamente de buscar el archivo index.html ó index.php.
Con este sencillo ejemplo hemos creado nuestra primera página web usando el lenguaje de
programación PHP.
EJERCICIO
Crea los siguientes archivos y súbelos mediante ftp al directorio raíz de tu sitio web:
a) Crea un archivo denominado curso.php donde aparezca el siguiente texto. <<Curso php
de aprenderaprogramar.com comenzado el 24/09/2083>> donde la fecha a incluir sea la
fecha en que hayas subido el archivo. Comprueba que el archivo se visualiza al escribir la
dirección web correcta que será similar a http://apr2.byethost7.com/curso.php (en tu caso,
tendrás que utilizar la dirección web que vayas a utilizar para el curso). Responde a esta
pregunta: ¿Cuál es el código que contiene el archivo? ¿Cuál es la dirección web para acceder
al archivo y visualizar el texto?
b) Crea un archivo denominado alumno.php donde aparezca el siguiente texto. <<Curso php
de aprenderaprogramar.com alumno Juan Perez desde el país: Colombia>> donde el nombre
a incluir será tu nombre y el país tu país. Comprueba que el archivo se visualiza al escribir la
dirección web correcta que será similar a http://apr2.byethost7.com/alumno.php (en tu caso,
tendrás que utilizar la dirección web que vayas a utilizar para el curso). Responde a esta
pregunta: ¿Cuál es el código que contiene el archivo? ¿Cuál es la dirección web para acceder
al archivo y visualizar el texto?
CONCEPTOS BÁSICOS DE PHP
Un archivo PHP normalmente suele contener HTML y trozos de código PHP. Por ello antes de
estudiar PHP es necesario haber estudiado HTML. A veces, se dice que PHP es un lenguaje
“embebido” en HTML, es decir, incrustado en código HTML. Todos los fragmentos de código
PHP deben comenzar con la siguiente cadena de caracteres: <?php ,y finalizar con ?>
Los símbolos <?php y ?> se dice que son los delimitadores del código PHP. Normalmente,
una página PHP básica sería algo así:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo de una web con PHP - aprenderaprogramar.com</title>
<meta charset="utf-8">
</head>
<body>
<?php
/* Aquí vendría el código PHP */
/* Este código PHP podría ser una consulta a base de datos */
/* Y además podríamos mostrar esos datos */
?>
</body>
</html>
En este código podemos identificar los siguientes elementos:
- La primera línea es una etiqueta relativa a la versión/variante de HTML que declaramos
usar. Esta primera etiqueta no es estrictamente necesaria. Sirve únicamente para indicar qué
estándar de HTML es el que declaramos usar.
- Las etiquetas de apertura y cierre de html que delimitan el código HTML.
- Las etiquetas de apertura y cierre head que delimitan la cabecera del código HTML.
- Las etiquetas body que delimitan el cuerpo del código HTML y que es donde suele ir el
contenido central de un documento HTML (texto, imágenes, formularios, etc.).
- Dentro de las etiquetas body, además de código HTML, podemos tener código PHP
embebido. En este caso hemos incluido únicamente un fragmento de código PHP, pero en el
cuerpo del documento HTML podríamos incluir diversos fragmentos de código HTML
mezclados con diversos fragmentos de código PHP. Cada fragmento de código PHP tiene que
ir escrito con sus delimitadores.
Esta estructura no se repite siempre. De hecho, más adelante veremos que el código PHP
puede ir en más lugares además de dentro de las etiquetas body. Por otro lado, decir que es
habitual que el código PHP vaya embebido dentro de código HTML en un archivo con
extensión .php, pero como ya hemos visto, un archivo con extensión .php podría contener
exclusivamente código PHP.
Escribe el código que mostramos a continuación en el editor Notepad++ y guárdalo con el
nombre prueba1.php.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo de una web con PHP - aprenderaprogramar.com</title>
<meta charset="utf-8">
</head>
<body>
<?php
echo "Mi primera página con PHP embebido en HTML - aprenderaprogramar.com";
?>
</body>
</html>
A continuación súbelo al servidor como ya explicamos en una entrega anterior, y ahora
escribe en tu navegador la dirección web correspondiente al archivo (que será similar a
http://apr2.byethost7.com/prueba1.php). Debes de visualizar algo parecido a esto.
EJERCICIO
Crea el siguiente archivo y súbelo mediante ftp al directorio raíz de tu sitio web. El archivo
llevará por nombre curso2.php y en él debe existir la estructura de un documento HTML,
aparecer en la parte superior de la página un título h1 con el texto <<Cursos
aprenderaprogramar.com>>, seguido de un título h2 con el texto <<Curso php desde
cero>>, y a continuación hacer que se muestre insertando php el siguiente texto. <<Curso
php de aprenderaprogramar.com comenzado el 24/09/2083>> donde la fecha a incluir sea la
fecha en que hayas subido el archivo. Debajo de este texto debes crear un contenedor div
con color de fondo amarillo donde pueda leerse “Este es el pie de página”. Comprueba que el
archivo se visualiza al escribir la dirección web correcta que será similar a
http://apr2.byethost7.com/curso2.php (en tu caso, tendrás que escribir la dirección web que
vayas a utilizar para el curso). Responde a esta pregunta: ¿Cuál es el código que contiene el
archivo? ¿Cuál es la dirección web para acceder al archivo y visualizar el texto?
VARIABLES EN PHP
Las variables en PHP son representadas con un signo de dólar ($) seguido por el nombre de
la variable. El nombre de la variable es sensible a minúsculas y mayúsculas. Es decir, las
siguientes declaraciones de variables son distintas entre ellas:
$variable, $Variable, $variAble, $VariAble, etc. representan a distintas variables.
Recordar que una variable es un espacio de la memoria del ordenador (en este caso del
servidor) a la que asignamos un contenido que a grandes rasgos puede ser un valor
numérico (sólo números, con su valor de cálculo) o alfanumérico (sólo texto o texto con
números, sin valor de cálculo).
Para declarar un nombre de variable válido, éste tiene que empezar con una letra (o si no
empieza con una letra, tendrá que hacerlo con un carácter de subrayado), seguido de
cualquier número de letras, números y caracteres de subrayado, sin espacios. Veamos
algunos ejemplos:
Posible nombre de variable Validez
$4variable Nombre de variable inválido.
$_4variable Nombre de variable válido.
$variable4 Nombre de variable válido.
$otra Nombre de variable válido.
$1_otra Nombre de variable inválido.
$variable_de_nombre_muy_largo Nombre de variable válido.
$ABC Nombre de variable válido.
$ A B C Nombre de variable inválido.
$A_y_B_x_C Nombre de variable válido.
Cuando el intérprete PHP detecta un error en la sintaxis al declarar una variable, cuando
tratamos de accecer a la página php nos aparecerá un mensaje de error. Por ejemplo si en un
archivo php incluimos una línea como $ A B C = 5; donde el nombre de variable es inválido
ya que tiene espacios intermedios, nos aparecerá un mensaje de error:
Parse error: syntax error, unexpected T_STRING, expecting T_VARIABLE or '$' in
/home/miraiz/domains/midominio.com/public_html/prueba.php on line 3. Este mensaje nos
informa de que hay un problema en el archivo php y nos indica la línea donde el intérprete
considera que está el problema.
DIFERENCIAS ENTRE LOS OPERADORES DE ASIGNACIÓN E IGUALDAD. ASIGNACIÓN
(=)
El operador de asignación es "=". Se podría pensar que es como un "igual a". No lo es. El
operador igual en programación no tiene el mismo sentido que en matemáticas. En
programación, significa que el valor de la expresión de la derecha se establece en el
operando de la izquierda.
Fíjate en este ejemplo y en los comentarios.
<?php
$a = 3; // asignamos el valor 3 a la variable $a
$b = "cadena"; // asignamos el valor "cadena" a la variable $b
?>
OPERADOR DE IGUALDAD (==)
El operador comparador de igualdad es ==. Como su propio nombre indica, sirve para
comparar dos valores o variables y no para asignar valores. Este operador devuelve el
resultado de la operación lógica de 'igual a' tal y como podemos apreciar en el siguiente
ejemplo.
Fíjate en este ejemplo y en los comentarios.
<?php
$a = 3;
$b = 3;
$a == $b; // El resultado de la comparación es TRUE porque $a es igual a $b
$a = 3;
$b = 4;
$a == $b; // El resultado de la comparación es FALSE porque $a no es igual a $b
?>
TIPOS DE DATOS
En PHP no es obligatorio indicar el tipo de datos al que pertenece una variable como en otros
lenguajes, sino que los tipos de datos son establecidos directamente por el intérprete PHP,
que es el encargado de interpretar el código.
Ahora veremos en una tabla los distintos tipos de datos que se pueden usar en PHP.
TIPO DE DATO DEFINICIÓN
integer Los integers, o enteros, pueden tener distintos valores numéricos enteros que se expresan
con diferentes notaciones.
$variable = 18; // Número entero positivo
$variable = -18; // Número entero negativo
$variable = 0x12; // Notación hexadecimal, en principio no la utilizaremos
float o double
Este tipo de datos son los números de punto flotante a los que normalmente llamamos
“números decimales”, por ejemplo, 9.876. Ambos tienen mucha precisión, pero double es el
más preciso (con más decimales). La sintaxis para utilizarlos es bastante simple:
$variable = 9.876;
string
El tipo de datos string, también conocido como cadena de caracteres, se expresa con la
siguiente sintaxis:
$variable = "Yo soy una cadena";
boolean
Se trata de un tipo lógico. Sus posibles valores son true (verdadero) o false (falso).
$variable = true;
$variable = false;
INSTRUCCIÓN ECHO
Esta instrucción muchas veces se dice que sirve para que se muestre por pantalla un texto,
una variable, o una combinación de texto y variables. Pero realmente no es así: echo no es
una instrucción que sirva para mostrar algo por pantalla (aunque podemos usarla para esto),
sino que sirve para insertar texto dentro del documento HTML subyacente al código PHP.
Por ejemplo: echo "salida por pantalla. "; hará que se inserte este texto en el documento
html. Si lo hacemos entre las etiquetas <body> y </body> lo veremos por pantalla porque
cualquier texto insertado en ese lugar se mostrará por pantalla, no porque la instrucción
echo dé lugar a que se muestre por pantalla.
Sin embargo echo "<h1>Salida por pantalla. </h1> "; no hará que se muestren por pantalla
las etiquetas h1 y el texto, sino que introducirá en el documento HTML las etiquetas con el
texto, éstas etiquetas funcionarán como código HTML y lo que se mostrará por pantalla será
Salida por pantalla con formato de título h1 (letras más grandes de lo normal).
En general en php son válidas tanto las comillas dobles como las comillas simples, por lo que
se puede escribir tanto echo "<h1>Salida por pantalla. </h1> "; como echo '<h1>Salida por
pantalla. </h1>';
Los paréntesis no son necesarios (echo en realidad no es una función sino que es lo que se
denomina una <<construcción del lenguaje>>, de ahí que no sean estrictamente necesarios
los paréntesis), pero se pueden incluir si se desea. Ejemplo: echo ('con paréntesis y comillas
simples');
Crea un archivo php con el siguiente código, ponle un nombre como usoDeEcho.php y súbelo
al servidor. Luego invócalo usando la ruta adecuada según la dirección web con la que estés
trabajando (será similar a http://apr2.byethost7.com/usoDeEcho.php.)
<?php
echo "salida por pantalla. ";
$a = 5;
echo $a;
echo " El valor de a es $a.";
?>
La visualización en tu navegador deberá ser similar a esta. Puede variar ligeramente
dependiendo del navegador que uses.
Ten en cuenta que $a se muestra por pantalla como 5 porque el intérprete de PHP considera
que debe mostrarse siempre el valor de la variable, incluso si va dentro de un texto. Prueba a
escribir la siguiente línea: echo " El valor de la variable \$a es $a.";
Comprobarás que se muestra por pantalla “salida por pantalla. 5 El valor de la variable $a es
5.”
Cuando antecedemos un nombre de variable del carácter \ hacemos que se interprete como
texto en lugar de como una variable. El carácter \ se suele llamar “carácter de escape”
porque permite que se considere texto algo que en principio se iba a interpretar como otra
cosa (como una variable por ejemplo).
Crea ahora un archivo php con el siguiente código, ponle un nombre como usoDeEcho2.php y
súbelo al servidor. Luego invócalo usando la ruta adecuada según la dirección web con la que
estés trabajando (será similar a http://apr2.byethost7.com/usoDeEcho2.php.)
<html>
<head>
<title> Ejemplo php aprenderaprogramar.com </title>
<meta charset="utf-8">
</head>
<body>
<?php
echo 'con comillas simples<br/>';
echo ('con paréntesis y comillas simples<br/>');
echo ("con paréntesis y comillas dobles<br/>");
echo '<h1>Salida por pantalla</h1><br/>';
echo "salida por pantalla. ";
$a = 5;
echo $a;
echo " El valor de a es $a.";
?>
</body>
</html>
La visualización en tu navegador deberá ser similar a:
con comillas simples
con paréntesis y comillas simples
con paréntesis y comillas dobles
Salida por pantallasalida por pantalla. 5 El valor de a es 5.
Puedes comprobar que <br/> no se muestra por pantalla porque es código HTML, y el
navegador cuando detecta este código HTML introduce un salto de línea en lugar de
mostrarlo por pantalla.
Para comprender bien la utilidad de la instrucción echo piensa en esta equivalencia:
<body>
<? php
echo '<h1>Cuzco</h1>'
?>
</body>
- - - - - - - - Equivale a - - - - - - - >
<body>
<h1>Cuzco</h1>
</body>
El navegador recibe el HTML “equivalente” generado y lo interpreta, dando lugar a los
resultados que se mostrarán por pantalla.
EJERCICIO 1
Crea el siguiente archivo y súbelo mediante ftp al directorio raíz de tu sitio web. El archivo
llevará por nombre curso3.php y en él debe existir la estructura de un documento HTML,
aparecer en la parte superior de la página un título h1 con el texto <<Cursos
aprenderaprogramar.com>>, seguido de un título h2 con el texto <<Curso php desde
cero>>, y a continuación hacer que se muestre usando echo el siguiente texto dentro de un
div con color de fondo amarillo: <<Curso php de aprenderaprogramar.com usando la
instrucción echo>>. Debajo de este texto debes usar echo para crear un contenedor div con
color de gris donde pueda leerse “Este es el pie de página”. Comprueba que el archivo se
visualiza al escribir la dirección web correcta que será similar a
http://apr2.byethost7.com/curso3.php (en tu caso, tendrás que escribir la dirección web que
estés utilizando para el curso). Responde a esta pregunta: ¿Cuál es el código que contiene el
archivo? ¿Cuál es la dirección web para acceder al archivo y visualizar el texto?
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
EJERCICIO 2
Crea un archivo php donde no exista html directamente pero que genere una página web con
todo el código html que lleva normalmente (introduce las etiquetas html, head, title, meta
charset, body, algunos párrafos de texto y algunas imágenes). Para hacer esto toda la
estructura de la página web debe ser insertada a través de instrucciones echo. Responde a
esta pregunta: ¿Cuál es el código que contiene el archivo? ¿Cuál es la dirección web para
acceder al archivo y visualizar el texto?
ESTRUCTURAS CONDICIONALES
En PHP existen una serie de instrucciones que permiten tomar decisiones lógicas cuando
programamos: estas instrucciones, comunes a distintos lenguajes de programación, se
suelen denominar de forma general "condicionales".
if...else
if...elseif...else
switch
CONDICIONAL IF…ELSE EN PHP
Estas instrucciones son quizás las más usadas de todos los lenguajes de programación, ya
que son las más básicas. IF (en español: si…) ELSE (en español: sino…). La estructura general
de un condicional if else es la siguiente:
if(expresión) {
... sentencias 1, 2, 3 … ;
} else {
... sentencias A, B, C …;
}
En este trozo de código estaríamos diciendo que si la expresión se cumple se ejecutan las
sentencias 1, 2, 3…, y en caso de que no se cumpliese la expresión se ejecutarían las
sentencias que están dentro del else, es decir, las sentencias A, B, C …
Escribe este código en un editor como Notepad++ y guárdalo con un nombre de archivo
como ejemplo1.php. A continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$galletas = true;
if($galletas == true) {
echo 'Hay galletas';
} else {
echo 'No hay galletas';
}
?>
En este ejemplo, estamos dando un valor $galletas y comprobamos si el valor de esta
variable es true o no, introduciéndolo en la expresión del condicional. Tal cual está, este
ejemplo produciría el resultado 'Hay galletas', aunque si cambiásemos $galletas = true; por
$galletas = false daría como resultado la segunda sentencia.
Escribe ahora este otro código guárdalo con un nombre de archivo como ejemplo2.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$galletas = true;
if($galletas == true){
?>
<br/>
<p>  ;  ;  ;  ;---------------------------------</p>
<?php
echo
'  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;&nbs
p ;Hay galletas';
echo '<br/>';
echo '<br/>';
echo '  ;  ;  ;  ;---------------------------------';
} else {
echo 'No hay galletas';
}
?>
Como podrás comprobar, el código produce el mismo resultado. Unicamente hemos
introducido algunos caracteres para mejorar la forma en que se ve (recordar que  
seguido de un punto y coma, sin espacio entre ambos, equivale a un espacio en blanco en
HTML). Compara las similitudes y diferencias entre los dos códigos que hemos escrito. En
nuestro ejemplo2 podrás comprobar que hemos escrito un fragmento de código php, luego
un fragmento de código html y luego otro fragmento en php. Si te fijas, no hemos utilizado
las etiquetas de apertura y cierre de html, aunque hubiera sido quizás más correcto hacerlo,
es decir, escribir:
<html>
<?php
$galletas = true;
if($galletas == true){
?>
<br/>
<p>  ;  ;  ;  ;---------------------------------</p>
<?php
echo
'  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;&nbs
p ;Hay galletas';
echo '<br/>';
echo '<br/>';
echo '  ;  ;  ;  ;---------------------------------';
} else {
echo 'No hay galletas';
}
?>
</html>
Como comprobarás, a veces los navegadores son capaces de interpretar el código aunque
falten algunas etiquetas o contenga algunos errores. Esta es una de las cuestiones que
diferencia HTML de lenguajes de programación en sentido estricto como C, Java o Visual
Basic, donde la sintaxis es mucho más estricta.
En este código además podemos señalar:
Usamos el código   que en HTML significa “un espacio”. Recuerda que HTML
omite los espacios antes y después de una cadena de texto. Por ello hemos de
especificar que se introduzcan espacios con  .
Un salto de línea, que introducimos gracias a la etiqueta <br/>, podemos escribirlo
tanto fuera del código php como dentro de él. Para introducirlo dentro de php, hemos
de ponerlo dentro de un echo, que es la forma que tenemos de indicarle a php de que
dé salida a esa etiqueta como código html.
¿Qué pasaría si introdujéramos una etiqueta html como <br/> directamente dentro del
código php? Pruébalo y comprobarás que en el navegador se muestra un mensaje de error
de este tipo:
Parse error: syntax error, unexpected '<' in /home/m/dom/mi.com/public_html/prueba.php on
line 11
Esta es una cuestión que debes de tener en cuenta: para introducir html debes de cerrar un
bloque php o usar una instrucción echo dentro del bloque php. La instrucción echo viene
significando “dar salida html a lo que va a continuación”.
CONDICIONALES IF...ELSE IF...ELSE EN PHP
La estructura de estas instrucciones viene a ser muy similar que la anterior. Su significado:
“Si ocurre esto, haz esto, sino si ocurre esta otra cosa, haz esto otro, sino si ocurre esta otro
cosa, haz …”. La estructura general de un condicional if else if [else] es:
if(expresión) {
... sentencias 1, 2, 3, …;
} else if(expresión) {
... sentencias A, B, C, …;
} else {
... sentencias M, N, O, …;
}
Esta es la síntaxis con la que debe ser usada else if. Un else if se ejecutará, siempre y
cuando, no haya alguna respuesta verdadera en el if o else if anterior; luego de que se llega
al final de los else if, y ninguno ha sido verdadero, se ejecutará lo que está dentro del else
final.
Pueden haber varios else if, pero estos están siempre dentro de un if y terminarán con un
else (sólo uno) final.
Escribe este código en un editor como Notepad++ y guárdalo con un nombre de archivo
como ejemplo3.php. A continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$test = 33;
if ($test > 40) {
echo "Sí, $test es mayor que 40.";
} else if ($test > 35) {
echo "Sí, $test es mayor que 35.";
} else if ($test > 30) {
echo "Sí, $test es mayor que 30.";
} else {
echo "No, $test es menor que 40, 35 y 30.";
}
?>
En este caso la respuesta sería: Sí, 33 es mayor que 30.
Si el valor de $test se cambia a 22, la respuesta sería: No, 22 es menor que 40, 35 y 30.
OPERADOR CONDICIONAL TERNARIO
Para escribir condicionales la estructura básica de lenguajes como PHP, JavaScript, Java, y
otros es la sentencia if. Otro tipo de condicionales como el switch o el else if pueden ser
reemplazados por if. Hay otra sintaxis de condicional que se denomina operador condicional
ternario y que se escribe con expresiones que incluyen una interrogación y dos puntos como:
a ? b : c;
La sintaxis y significado del operador condicional ternario (válida para diferentes lenguajes,
como PHP, JavaScript, Java, etc.) es la siguiente:
expresiónConValorBooleano ? expresión1 : expresión2;
Interpretación: si la expresiónConValorBooleano es cierta se ejecuta la expresión1, y en caso contrario se
ejecuta la expresión2.
Ejemplos. Supongamos que tenemos cuatro variables: A = 5, B = 3, C = -7 y D = 5
Expresión Resultado
A==5 ? dispara(): espera(); Se ejecuta dispara()
A<B ? dispara(): espera(); Se ejecuta espera()
B<C ? dispara(): espera(); Se ejecuta espera()
A<B && B>C ? dispara(): espera(); Se ejecuta espera()
A<B && B>C || B==3 ? dispara(): espera(); Se ejecuta dispara()
A==5 ? A=20: A=1; Si A valía 5 ahora vale 20, caso contrario ahora vale 1.
B = B==3 ? B*10: B*100; Se trata de una asignación: si B valía 3, ahora B vale 10 veces
lo que valía, caso contrario ahora B vale 100 veces lo que valía.
El operador ternario puede ser insertado en sentencias de ejecución donde no se permite la
inserción de if, por ejemplo en una operación de asignación o en la variable de control de un
bucle for. Usar el operador condicional ternario tiene ventajas e inconvenientes.
VENTAJAS E INCONVENIENTES DEL OPERADOR CONDICIONAL TERNARIO
En la siguiente tabla resumimos las ventajas e inconvenientes del operador condicional
ternario comparándolo con el if tradicional.
Condicional ternario If tradicional
Permite la escritura compacta, permitiendo
ahorrar escritura de código.Obliga a escribir más sentencias para conseguir el mismo resultado.
Resulta más difícil de leer, entender y
depurarResulta más fácil de leer, entender y depurar
No todos los programadores lo usan,
algunos ni siquiera lo conocen.Todos los programadores lo usan y lo conocen.
Se admite en la sintaxis de los lenguajes en
lugares donde no se admite la sentencia if
No es válido en ciertas ubicaciones donde sólo se admiten expresiones,
pero puede hacerse la evaluación antes del punto donde sea necesario el
condicional.
Criticado por algunos expertos, adorado
por otrosUso y aceptación cuasi-universal
EJEMPLOS DE USO EN PHP
Escribe este código, guárdalo como archivo php y comprueba los resultados de ejecución.
Razona sobre los resultados obtenidos y trata de explicar paso a paso la lógica de todo lo que
hace el código.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
</head>
<body><div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos PHP</h3></div>
<?php
$A=5; $B=3; $C=-7; $D=5;
$msg = '';
$A==5 ? $msg='A es 5<br/>': $msg='A no es 5<br/>';
echo $msg;
$A<$B ? $msg='A es menor que B<br/>': $msg='A es mayor o igual que B<br/>';
echo $msg;
$B<$C ? $msg='B es menor que C<br/>': $msg='B es mayor o igual que C<br/>';
echo $msg;
?>
</body>
</html>
El resultado esperado es que se muestre por pantalla:
Cursos aprenderaprogramar.com
Ejemplos PHP
A es 5
A es mayor o igual que B
B es mayor o igual que C
EJERCICIO 1
Ejecuta este código y responde:
a) ¿Qué resultado se obtiene por pantalla?
b) Modifica el código sustituyendo el operador ternario por if else para que el resultado
obtenido sea el mismo.
<?php
$haceFrio = 15;
$respuesta ="";
$temperatura = ($haceFrio<20) ? $respuesta = "Hace frio" : $respuesta = "No hace frio";
echo $respuesta;
?>
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
EJERCICIO 2
Define las variables $tipo, $grosor, $diametro y $marca. Establece que el tipo sea “Rueda de
camión”, el grosor 0.33, el diámetro 1.25 y la marca “Kimashuki”. Crea el código PHP donde
a través de condicionales if realices la siguiente comprobación: si el diámetro es superior a
1.4 debe mostrarse por pantalla el mensaje “La rueda es para un vehículo grande”. Si es
menor o igual a 1.4 debe mostrarse por pantalla el mensaje “La rueda es para un vehículo
pequeño”. En otro caso, debe mostrarse “No existe un tamaño de rueda válido”.
OPERADORES LÓGICOS Y DE COMPARACIÓN EN PHP
Los operadores de comparación permiten comparar dos valores, tal y como su nombre
indica. En general, esto nos servirá para tomar decisiones. Por ejemplo, quizás tenemos que
decidir si autorizar una operación según exista saldo suficiente en su cuenta bancaria o no.
Para ello en PHP disponemos de los operadores que se indican en la siguiente tabla.
Nombre Ejemplo Resultado
Mayor que $a > $btrue si $a es mayor que $b
false en caso contrario
Menor que $a < $btrue si $a es menor que $b
false en caso contrario
Mayor o igual que $a >= $btrue si $a es mayor o igual que $b
false en caso contrario
Menor o igual que $a <= $btrue si $a es menor o igual que $b
false en caso contrario
Diferente
$a <> $b
ó
$a != $b
true si $a es diferente a $b
false en caso contrario
Idéntico o estrictamente igual $a === $btrue si $a es igual a $b y son del mismo tipo
false en caso contrario
No idéntico o estrictamente distinto $a ¡== $btrue si $a no es igual a $b o no son del mismo tipo
false en caso contrario
Igual $a == $btrue si $a es igual a $b
false en caso contrario
La sintaxis coincide con la empleada en otros lenguajes de programación.
Además de los operadores habituales existen los operadores === que se interpreta como
“es estrictamente igual” y !== que se interpreta como “no es estrictamente igual”. Estos
operadores resultan un poco más complejos de comprender por lo que volveremos a hablar
de ellos más adelante. De momento tener en cuenta que si una variable contiene $texto1=
“1” y hacemos la comparación $texto1 === 1 , obtendremos false, es decir, que no es igual
(porque un texto no es igual a un número). Sin embargo una comparación como $texto == 1
devolverá true ya que esta comparación no es estricta y trata de realizar automáticamente
conversiones para comprobar si se puede establecer una equivalencia entre los dos valores.
En este caso se busca el equivalente numérico del texto y luego se hace la comparación,
motivo por el cual se obtiene true.
Es decir, si se compara un número con una cadena de caracteres o la comparación implica
cadenas de caracteres numéricas, cada cadena de caracteres es convertida en un número y
la comparación se realizará numéricamente excepto cuando el operador utilizado es === o
¡== porque, en estos casos, también comparamos el tipo.
OPERADORES LÓGICOS EN PHP
Los operadores lógicos, nos permiten crear condiciones para las distintas estructuras en PHP,
tanto en estructuras condicionales como en estructuras repetitivas. Los operadores lógicos
más importantes son and (en español: y) y or (en español: o)
Nombre Ejemplo Resultado
and ó && $a and $btrue si $a es true y $b es true
false en caso contrario
or ó || $a or $btrue si $a o $b es true, o ambos
false en caso contrario
xor $a xor $btrue si $a o $b es true, pero no ambos
false en caso contrario
not ó ! !$atrue si $a no es true
false en caso contrario
Una condición puede ser tan larga como se quiera o necesite y usar tantos operadores
lógicos como se quiera o necesiten. El uso de los paréntesis otorgará la prioridad de la
ejecución de unas operaciones y otras (como en matemáticas).
Las expresiones donde se utilizan operadores lógicos y relacionales devuelven un valor
booleano, es decir, verdadero (true) o falso (false). Por ejemplo si $a = 7 y $b = 5 la
expresión $a < $b devuelve false (es falsa). Si $a = true y $b = false la expresión $a && $b
devuelve false (es falsa porque no se cumple que $a y $b sean verdaderas). Si $a = true y $b
= false la expresión $a || $b devuelve true porque uno de los dos operandos es verdadero. Si
$a = true la expresión !a devuelve false (el opuesto o contrario).
El operador || se obtiene en la mayoría de los teclados pulsando ALT GR + 1, es decir, la tecla
ALT GR y el número 1 simultáneamente.
Los operadores && y || se llaman operadores en cortocircuito porque si no se cumple la
condición de un término no se evalúa el resto de la operación. Por ejemplo: ($a == $b &&
$c != $d && $h >= $k) tiene tres evaluaciones: la primera comprueba si la variable a es
igual a b. Si no se cumple esta condición, el resultado de la expresión es falso y no se
evalúan las otras dos condiciones posteriores.
En un caso como ( $a < $b || $c != $d || $h <= $k) se evalúa si a es menor que b. Si se
cumple esta condición el resultado de la expresión es verdadero y no se evalúan las otras
dos condiciones posteriores.
El operador ! recomendamos no usarlo hasta que se tenga una cierta destreza en
programación. Una expresión como (!$esVisible) devuelve false si ($esVisible == true), o
true si ($esVisible == false). En general existen expresiones equivalentes que permiten
evitar el uso de este operador cuando se desea.
OPERADOR DE NEGACIÓN APLICADO SOBRE NÚMEROS O TEXTO
Si $a = true su negación !$a devuelve false. ¿Pero qué ocurre si $a es un número o un texto?
Si $a es un número se considera que equivale a false si su valor numérico es 0, o que
equivale a true si su valor numérico es distinto de cero. Seguidamente se aplica la negación.
Por tanto si $a = 7, a se considera equivalente a true y !$a es false. Si $a = 0, a se considera
equivalente a false y !$a es true.
Para cadenas de texto, la cadena vacía se considera equivale a false y cualquier otra cadena
se considera que equivale a true. Si $texto1 = "" (cadena vacía) entonces !$texto1 vale true.
ORDEN DE PRIORIDAD, PRELACIÓN O PRECEDENCIA
Los operadores lógicos y matemáticos tienen un orden de prioridad o precedencia. Este es un
esquema general que indica el orden en que deben evaluarse en la mayoría de los lenguajes
de programación:
Una expresión como $A+$B == 8 && $A-$B == 1 siendo $A = 3 y $B = 5 supondrá que se
evalúa primero $A+$B que vale 8, luego se evalúa $A-$B que vale -2. Luego se evalúa si se
cumple que la primera operación es cierta y luego si la segunda también es cierta,
resultando que no, por lo que la expresión es falsa.
COMPARACIÓN DE CADENAS DE TEXTO CON OPERADORES RELACIONALES
Dos cadenas de texto se pueden comparar resultando que se comparan letra a letra por el
valor del equivalente numérico de cada letra. Cada letra tiene un número asociado: por
ejemplo la a es el número 97, la b el 98, etc.
Si comparamos "avellana" < "sandia" obtenemos true.
Sin embargo, los códigos numéricos pueden generar resultados no previstos. Por ejemplo,
¿qué código numérico es menor, el de la a ó el de la A? Aún más, resulta que todos los
códigos numéricos de mayúsculas son menores que los de minúsculas, con lo cual podemos
obtener que ‘Zulú’ < ‘avellano’ devuelve true (cosa que a priori nos resultará ciertamente
extraña).
Para comparar cadenas en base a un orden alfabético necesitaremos usar entonces otras
técnicas que comentaremos más adelante.
EJEMPLO
Escribe este código en un editor como Notepad++ y guárdalo con un nombre de archivo
como ejemplo1.php. A continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$a = 3;
$b = 9;
$result = ($a <= 3 and $b <> 9);
if ( $result == true) {
echo "Se cumple la condición";
}else {
echo "No se cumple la condición";
}
?>
EJERCICIO
Dadas las variables de tipo entero con valores $A = 5, $B = 3, $C = -12 indicar si la
evaluación de estas expresiones daría como resultado verdadero o falso:
a) $A > 3 b) $A > $C c) $A
< $C
d) $B < $C e) $B != $C f) $A
== 3
g) $A * $B == 15 h) $A * $B == -30 i)
$C / $B < $A
j) $C / $B == -10 k) $C / $B == -4 l)
$A + $B + $C == 5
m) ($A+$B == 8) && ($A-$B == 2) n) ($A+$B == 8) || ($A-$B == 6)
o) $A > 3 && $B > 3 && $C < 3 p) $A > 3 && $B >= 3 && $C < -3
Crea el código PHP donde declares estas variables, les asignes valores y muestres por
pantalla el valor de verdad que tienen cada una de las expresiones antes indicadas.
¿Coincide lo que se muestra con pantalla con lo que tú esperarías que se mostrara? Puedes
comprobar si tu código y tus respuestas son correctos consultando en los foros
aprenderaprogramar.com.
OPERADORES ARITMÉTICOS BÁSICOS EN PHP
En PHP disponemos de los operadores habituales en los distintos lenguajes de programación.
Estos operadores nos permiten realizar operaciones aritméticas: suma, resta, multiplicación,
división, etc. así como obtener el módulo o resto de una división entre dos enteros.
Nombre Ejemplo ResultadoEjemplo (con
$a = 8 y $b = 4)
Suma $a + $b El resultado de la suma. 12
Resta $a - $b El resultado de la resta. 4
Multiplicación $a * $b El resultado de la multiplicación. 32
División $a / $b El resultado de la división. 2
Resto o módulo $a % $b El resto de la división de $a entre $b (1) 0
(1)Nota: Los números se convierten a enteros antes de efectuar la operación. Es decir, 9 % 4.5
da como resultado 1 y no 0 porque calcula el resto de 9 entre 4, no de 9 entre 4.5
El operador resto o módulo es un operador útil en algunos procesos repetitivos en
programación. Fíjate en los valores que toma cuando van progresando los valores que toma
una variable. En el ejemplo que mostramos a continuación sirve para contar hasta dos y
empezar de nuevo repetitivamente.
$a $a % 3
1 1
2 2
3 0
4 1
5 2
6 0
7 1
8 2
Destacar que el operador % es de uso exclusivo entre enteros. 7%3 devuelve 1 ya que el
resto de dividir 7 entre 3 es 1. 8%2 devuelve 0 ya que el resto de dividir 8 entre 2 es cero. Al
valor obtenido lo denominamos módulo (en otros lenguajes en vez del símbolo % se usa la
palabra clave mod) y a este operador a veces se le denomina “operador módulo”.
Aunque en otros lenguajes existe un operador de exponenciación para calcular potencias, en
PHP no es así. Para calcular una potencia podemos hacer varias cosas:
a) Recurrir a multiplicar n veces el término. Por ejemplo min3 lo podemos calcular
como min*min*min. Obviamente esto no es práctico para potencias de exponentes
grandes.
b) Usar un bucle que dé lugar a la repetición de la operación multiplicación n veces.
Estas opciones las comentaremos más adelante.
c) Usar herramientas propias del lenguaje que permiten realizar esta operación. Esta
opción es la más sencilla. Basta con escribir pow(base, exponente) para que PHP
realice el cálculo de la potencia. Por ejemplo pow(2, 3) devuelve dos elevado a 3 que
resulta 8.
Las operaciones con operadores siguen un orden de prelación o de precedencia que
determinan el orden con el que se ejecutan. Con los operadores matemáticos la
multiplicación y división tienen precedencia sobre la suma y la resta. Si existen expresiones
con varios operadores del mismo nivel, la operación se ejecuta de izquierda a derecha. Para
evitar resultados no deseados, en casos donde pueda existir duda se recomienda el uso de
paréntesis para dejar claro con qué orden deben ejecutarse las operaciones. Por ejemplo, si
dudas si la expresión 3 * a / 7 + 2 se ejecutará en el orden que tú deseas, especifica el orden
deseado utilizando paréntesis: por ejemplo 3 * ( ( a / 7 ) + 2 ).
OPERADORES DE INCREMENTO Y DECREMENTO
Nombre Ejemplo Resultado
Pre-incremento ++$a Incrementa $a en uno y luego devuelve $a
Post-incremento $a++ Devuelve $a y luego incrementa $a en uno
Pre-decremento --$a Decrementa $a en uno y luego devuelve $a
Post-decremento $a-- Devuelve $a y luego decrementa $a en uno.
++ y -- son sólo válidos para variables numéricas y sirven para incrementar una unidad el
valor de la variable. Dependiendo de dónde se coloquen (antes o después de la variable) el
resultado del cálculo puede diferir debido al momento en que se ejecuta la adición de la
unidad.
Tener en cuenta que ++, --, +=, -= y *= son expresiones que siempre se aplican sobre
variables. Por ejemplo no es válido escribir 2++ porque 2 no es una variable. Todas estas
operaciones pueden sustituirse por otra equivalente más evidente. Muchos programadores
prefieren no usar estos operadores porque hacen menos legible el código. A otros
programadores les gusta usarlos porque les ahorra escribir. Nosotros preferimos no usarlos,
pero es cierto que los puedes encontrar cuando tengas que revisar el código escrito por otra
persona.
EJEMPLO
Escribe este código en un editor como Notepad++ y guárdalo con un nombre de archivo
como ejemplo1.php. A continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$a = 8;
echo ++$a;
echo "<br />";
echo $a;
?>
Escribe este otro código y guárdalo con un nombre de archivo como ejemplo2.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$a = 8;
echo $a++;
echo "<br />";
echo $a;
?>
En los dos ejemplos anteriores podemos observar claramente la diferencia entre el pre-
incremento y el post-incremento. Lo mismo ocurre con el pre-decremento y post-
decremento.
OPERADORES DE ASIGNACIÓN
Con el uso de los operadores de asignación, podremos simplificar (escribir abreviadamente)
algunas expresiones de asignación. No te recomendamos que utilices expresiones abreviadas
durante el aprendizaje básico de php. No obstante, es adecuado conocer el significado de
estas expresiones por si te enfrentas a tener que interpretar código escrito por otras
personas.
Nombre Ejemplo Resultado
Suma $a += $b; $a = $a + $b;
Resta $a -= $b; $a = $a - $b;
Multiplicación $a *= $b; $a = $a * $b;
División $a /= $b; $a = $a / $b;
Resto o módulo $a %= $b; $a = $a % $b;
Los operadores +=, -= y *= son formas abreviadas de escribir operaciones habituales. Tener
en cuenta que ++, --, +=, -= y *= son expresiones que siempre se aplican sobre variables.
EJERCICIO 1
Crea un código PHP donde crees las variables $primerNumero y $segundoNumero y asigna
valor 8 al primer número y 5 al segundo número:
a) El resto de dividir el primer número entre 5.
b) El resultado de dividir el primer número entre el segundo.
c) El resultado de sumar los dos números.
Para comprobar si tu código y respuestas son correctas puedes consultar en los foros
aprenderaprogramar.com.
EJERCICIO 2
Crea un código PHP donde crees las variables $a y $b y usando los operadores adecuados
haz que se muestren los siguientes mensajes por pantalla. Nota: para mantener los valores
iniciales de las variables y poder volver a emplearlos usa variables auxiliares, por ejemplo
$inicio = $a; te permitirá mantener en %inicio el valor original de $a y volver a recuperar el
valor inicial de $a antes de hacer una nueva operación.
Mensajes a mostrar por pantalla:
Operadores de incremento
Valores iniciales: a = 4, b = 2
Operador ++ (anterior): ++a * b == 10
(Ahora el valor de a es: 5)
Operador ++ (posterior): a++ * b == 8
(Ahora el valor de a es: 5)
Operador -- (anterior): --a * b == 6
(Ahora el valor de a es: 3)
Operador -- (posterior): a-- * b == 8
(Ahora el valor de a es: 3)
Operadores de asignación compuestos
Valores iniciales: a = 4, b = 2
Asignación compuesta de suma: a += b equivale a = a + b
(Ahora el valor de a es: 6)
Asignación compuesta de resta: a -= b equivale a = a - b
(Ahora el valor de a es: 2)
Asignación compuesta de multiplicación: a *= b equivale a = a * b
(Ahora el valor de a es: 8)
Asignación compuesta de división: a /= b equivale a = a / b
(Ahora el valor de a es: 2)
Asignación compuesta de módulo: a %= b equivale a = a % b
(Ahora el valor de a es: 0)
SWITCH PHP
Las instrucciones if...else if...else if permiten resolver prácticamente todas las decisiones que
haya que tomar en programación, pero en ocasiones nos encontraremos con casos en que
queremos evaluar condiciones con una estructura que hacen más cómodo usar una
instrucción alternativa: switch.
Supongamos una evaluación de este tipo:
if ($variable == Valor1) {
... sentencias;
} else if( $variable == Valor2) {
... sentencias;
} else if ($variable == Valor3) {
... sentencias;
} else {
... sentencias;
}
Se trata de un caso en que tenemos varias alternativas para realizar una acción determinada
según el valor tomado por una variable. Para estos casos la mayoría de los lenguajes de
programación incluyen una instrucción que permite "seleccionar" entre los posibles valores
de una variable: la instrucción switch (en español: seleccionar).
La instrucción switch es una forma de expresión de un anidamiento múltiple de instrucciones
if ... else. Su uso no puede considerarse, por tanto, estrictamente necesario, puesto que
siempre podrá ser sustituida por el uso de if. No obstante, a veces resulta útil al introducir
eficiencia y mayor claridad en el código.
ESTRUCTURA GENERAL DE UNA EXPRESIÓN SWITCH
La sintaxis será (expresión será normalmente una variable cuyo contenido queremos evaluar,
pero puede ser una operación matemática, una expresión booleana, etc.):
/* Ejemplo switch - aprenderaprogramar.com */
switch (expresión) {
case valor1:
instrucciones;
break;
case valor2:
instrucciones;
break;
.
.
.
default:
sentencias;
break;
}
/* Ejemplo switch - aprenderaprogramar.com */
switch (expresión) {
case valor1:
case valor2:
case valor3:
instrucciones;
break;
case valor4:
instrucciones;
break;
.
.
.
default:
sentencias;
break;
}
Esquemáticamente en forma de diagrama de flujo:
break es opcional (pero en general recomendable) y provoca que una vez encontrada una
coincidencia termine la evaluación de casos (provoca un salto pasando el control del
programa o flujo de ejecución a la instrucción inmediata siguiente fuera del switch). Si no se
incluye, se evaluarían el resto de casos (ejecutándose si fueran ciertos). De no incluirse
break, podría producirse que se ejecuten dos o más casos.
La cláusula default es opcional y representa las instrucciones que se ejecutarán en caso de
que no se verifique ninguno de los casos evaluados. El último break dentro de un switch (en
default si existe esta cláusula, o en el último caso evaluado si no existe default) también es
opcional, pero lo incluiremos siempre para ser metódicos.
Se permite evaluar tanto números como cadenas de texto o valores booleanos. switch solo
permite evaluar valores concretos de la expresión: no permite evaluar intervalos
(pertenencia de la expresión a un intervalo o rango) ni expresiones compuestas.
EJEMPLO
Vamos a ver ahora cómo podemos obtener un mismo resultado usando if o usando switch.
Escribe ahora el código de ejemplo de uso de if que mostramos a continuación y guárdalo
con un nombre de archivo como ejemplo1.php. A continuación, sube el fichero al servidor y
visualiza el resultado.
<?php
//Ejemplo uso if else aprenderaprogramar.com
$variable=2;
if($variable==1) {
echo '$variable es igual a 1.';
} else if($variable==2) {
echo '$variable es igual a 2.';
} else if($variable==3) {
echo '$variable es igual a 3.';
} else {
echo '$variable no es igual a 1, 2 o 3.';
}
?>
<?php
$variable=2;
switch($variable) {
case 1:
echo '$variable es igual a 1.';
break;
case 2:
echo '$variable es igual a 2.';
break;
case 3:
echo '$variable es igual a 3.';
break;
default:
echo '$variable no es igual a 1, 2 o 3.';
}
?>
Escribe ahora el código de ejemplo de uso de switch hemos mostrado y guárdalo con un
nombre de archivo como ejemplo2.php. A continuación, sube el fichero al servidor y visualiza
el resultado.
El resultado comprobamos que en ambos casos es: $variable es igual a 2.
Si cambiamos $variable=2 por $variable=5 al inicio de código el resultado sería: $Variable
no es igual a 1, 2 o 3.
Una diferencia importante respecto a las instrucciones if ... else if ... else es que se requiere
de la instrucción break para salir del switch al terminar las instrucciones correspondientes a
un case. Sólo podemos especificar un valor en cada case, no se admite indicar más de un
valor. Sin embargo, si dejamos un case en blanco y omitimos el break, damos lugar a que se
ejecuten ciertas instrucciones si el valor coincide con alguno de los case en juego. Esto lo
veremos más claro con un ejemplo.
Escribe ahora estos otros códigos y guárdalos con nombres de archivo como ejemplo3.php y
ejemplo4.php. A continuación, sube los ficheros al servidor y visualiza el resultado.
<?php
//Ejemplo uso if else aprenderaprogramar.com
$variable=2;
if($variable==1) {
echo '$Variable es igual a 1.';
} else if($variable==2 OR $variable==3) {
echo '$Variable es igual a 2 o 3.';
}else {
echo '$Variable no es igual a 1, 2 o 3.';
}
?>
<?php
$variable=2;
switch($variable) {
case 1:
//Se ejecuta si $variable vale 1
echo '$Variable es igual a 1.';
break;
case 2:
case 3:
//Se ejecuta si $variable vale 2 o 3
echo '$Variable es igual a 2 o 3.';
break;
default:
//Se ejecuta en cualquier otro caso
echo '$Variable no es igual a 1, 2 o 3.';
}
?>
En cualquiera de las dos formas mostradas, la salida obtenida sería: $variable es igual a 2 o
3.
En este caso, al evaluarse la segunda instrucción case no se encuentra ningún break por lo
que se siguen ejecutando las instrucciones siguientes al tercer case, aún cuando $variable es
diferente de 3, ya que al no existir un break anterior los casos 2 y 3 quedan “agrupados”.
Más aún, si borramos el break del tercer case también se ejecutarán las instrucciones
siguientes a default, y la salida sería entonces:
$variable es igual a 2 o 3.
$variable no es igual a 1, 2 o 3.
Por ello es muy importante que cuando escribas una instrucción switch pongas break en
todos los case, o bien que si dejas algún break sin escribir sea porque conscientemente
quieras hacerlo y no por olvido.
EJERCICIO 1
Analiza el siguiente código PHP:
//Ejemplo de uso switch PHP aprenderaprogramar.com
switch ($mes) {
case 1:
echo ("El mes es enero");
break;
case 2: echo ("El mes es febrero"); break;
case 10: echo ("El mes es octubre"); break;
default: echo ("El mes no es enero, febrero ni octubre"); break;
}
Responde a las siguientes cuestiones:
a) ¿Qué es lo que hace este código?
b) Completa el código de forma que añadas las etiquetas y definas el valor de $mes = 1.
Sube el fichero al servidor y comprueba el resultado. ¿Cuál es el código completo? ¿Cuál es el
resultado obtenido por pantalla?
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
EJERCICIO 2
Considera estás desarrollando una web donde trabajas con tipos de motor (suponemos que
se trata del tipo de motor de una bomba para mover fluidos). Define una variable $tipoMotor
y asígnale valor 3. Los valores posibles son 1, 2, 3, 4. A través de un condicional switch haz lo
siguiente:
a) Si el tipo de motor es 0, mostrar un mensaje indicando “No hay establecido un
valor definido para el tipo de bomba”.
b) Si el tipo de motor es 1, mostrar un mensaje indicando “La bomba es una bomba
de agua”.
c) Si el tipo de motor es 2, mostrar un mensaje indicando “La bomba es una bomba
de gasolina”.
d) Si el tipo de motor es 3, mostrar un mensaje indicando “La bomba es una bomba
de hormigón”.
e) Si el tipo de motor es 4,mostrar un mensaje indicando “La bomba es una bomba
de pasta alimenticia”.
f) Si no se cumple ninguno de los valores anteriores mostrar el mensaje “No existe
un valor válido para tipo de bomba”.
¿Cuál es el código completo? ¿Cuál es el resultado obtenido por pantalla?
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
FUNCIONES CON CADENAS DE CARACTERES EN PHP.
Las cadenas de caracteres en PHP se definen, como ya sabemos, entre comillas dobles o
simples (podemos usar dobles o simples indistintamente). Es decir, podemos definir una
variable como cadena de caracteres de la siguiente forma: $cadena = "George Washington";
o también $cadena = 'George Wasington';
Para la manipulación de estas variables o cadenas de caracteres nos será útil conocer las
funciones básicas de manipulación. No vamos a entrar a describir cada una de las funciones
para cadenas de caracteres que PHP posee, que son muchas. Simplemente veremos las más
básicas y de uso más común.
FUNCIÓN STRLEN
La función strlen obtiene la longitud de una cadena y devuelve un número entero. Es decir,
obtenemos el número de caracteres que forman la cadena completa.
Escribe este código en un editor como Notepad++ y guárdalo con un nombre de archivo
como ejemplo1.php. A continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$cad = "cadena"; //Prueba a cambiar el texto cadena por otro
$n = strlen($cad);
echo "La longitud de la cadena es: $n";
?>
FUNCIÓN SUBSTR
La función substr devuelve una subcadena de la cadena original, es decir, una parte de la
cadena original. Esta función tiene 3 parámetros:
1. La variable que contiene la cadena.
2. Número que representa la posición (inclusive) en la que comenzará a ser extraída la
subcadena.
3. Número que indica la cantidad de caracteres que serán extraídos. Este argumento es
opcional. Si se omite se tomará hasta el final de la cadena original.
Tener en cuenta que la numeración de la posición de los caracteres empieza por cero. Por
ejemplo para la cadena 'GPS', que tiene 3 caracteres, el carácter en posición 0 es G, en
posición 1 es P y en posición 2 es S. No existe la posición 3 debido a que se comienza a
contar por el cero.
Escribe este código en un editor como Notepad++ y guárdalo con un nombre de archivo
como ejemplo2.php. A continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$cad = "cadena";
$sub1 = substr($cad, 2);
$sub2 = substr($cad, 2, 2);
echo "La subcadena número uno es la siguiente: $sub1 <br />";
echo "La subcadena número dos es la siguiente: $sub2";
?>
Escribe este otro ejemplo y visualízalo en tu navegador (nota: & nbsp; representa un espacio
en blanco):
<?php
$cad = "aprenderaprogramar.com";
$sub1 = substr($cad, 0); //La cadena completa
$sub2 = substr($cad, 0, 8); //La subcadena aprender
$sub3 = substr($cad, 8, 1); //La subcadena a
$sub4 = substr($cad, 9); //La subcadena programar
echo "& nbsp; & nbsp; La subcadena número uno es la siguiente: $sub1 <br />";
echo "& nbsp; & nbsp; La subcadena número dos es la siguiente: $sub2 <br />";
echo "& nbsp; & nbsp; La subcadena número tres es la siguiente: $sub3 <br />";
echo "& nbsp; & nbsp;La subcadena número cuatro es la siguiente: $sub4";
?>
Fíjate en las siguientes cuestiones:
a) La numeración de caracteres empieza en cero y no en uno. Así en este último ejemplo el
caracter 0 es la a, el 1 la p, el 2 la r, el 3 la e y así sucesivamente.
b) La posición en que comienza la extracción va incluida en la subcadena extraida. Esto
significa que substr ($cad, 0, 1) significa que sólo se extrae el primer caracter de la cadena.
OPERADOR DE CONCATENACIÓN
La concatenación es el proceso de unir varias porciones de texto en una sola cadena. Este
operador se expresa como un punto '.'
Escribe el siguiente código, súbelo al servidor y visualízalo en tu navegador.
<?php
$cad1 = "aprendera";
$cad2 = "programar";
$cadt = $cad1 . $cad2;
echo "La cadena número uno concatenada con la cadena número 2 es: $cadt <br />";
// Ahora concatenaremos la cadena ejemplo con la concatenación de $cad2 y $cad1
echo "Ejemplo: " . ($cad2 . $cad1);
?>
En este ejemplo vemos cómo las cadenas se pueden concatener en el orden que nosotros
deseemos.
EJERCICIO
Crea el código PHP que cumpla con lo que se indica a continuación:
a) Declara una variable cuyo contenido sea la cadena "Didáctica y divulgación de la
programación"
b) Usando la función substr extrae cada una de las palabras de la cadena anterior a una
variable. Como tenemos 6 palabras, debes tener 6 variables con las subcadenas.
c) Usando la concatenación muestra por pantalla lo siguiente: <<Las palabras primera,
tercera y sexta son: Didáctica, divulgación, programación>>
d) Usando strlen muestra por pantalla lo siguiente: <<La palabra primera es Didáctica y
tiene 9 caracteres, la palabra tercera es divulgación y tiene 11 caracteres. La palabra sexta
es programación y tiene 12 caracteres>>
ESTRUCTURAS REPETITIVAS O BUCLES EN PHP
Las estructuras repetitivas (bucles) son aquellas que reiteran una o un grupo de instrucciones
"n" veces y dependen de una variable de control del ciclo. Es decir, ejecutan una o varias
instrucciones un número de veces definido. Las instrucciones básicas que permiten construir
este tipo de estructuras son while, do ... while y for.
LA INSTRUCCIÓN WHILE
La instrucción while (que en castellano se traduciría como “mientras…”) ejecuta una porción
de programa mientras se cumpla una cierta condición.
Mientras la condición sea verdadera, se ejecutan las instrucciones contenidas en el while.
Cuando deja de cumplirse la condición, se sale del ciclo y se continúa ejecutando el resto del
programa.
Si la condición no se cumple ni la primera vez que se comprueba, las líneas en el interior del
while no se ejecutarán ni una vez.
La estructura general o sintaxis habitual de un bucle while es la siguiente:
<?php
while (condición) {
... sentencias;
}
?>
En este fragmento de código estaríamos indicando que mientras se cumpla la condición se
realizan las sentencias, y en este caso si no se cumpliese la condición se seguiría ejecutando
el programa o mostrando los contenidos de la página web justo después del cierre de la
instrucción while (que queda determinado por el símbolo de cierre } ).
Escribe ahora este código y guárdalo con un nombre de archivo como ejemplo1.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$galletas = 0;
while ($galletas < 10){
echo "$galletas, ";
$galletas++;
}
?>
En este ejemplo, las instrucciones dentro del while se ejecutarían 10 veces, mostrando los
números de 0 a 9 separados por coma. Hay que tener especial cuidado en no crear
estructuras repetitivas que se ejecuten infinitamente (bucles infinitos). En el
ejemplo anterior, si no incrementamos el valor de la variable $galletas, la condición del while
se cumpliría siempre y tendríamos un problema porque habríamos creado un bucle infinito,
quedando el programa ‘atascado’ en dicho while.
EJERCICIO 1
Crea el código PHP donde generes:
a) Un bucle while que cuente desde 50 hasta 40 (fíjate que en este caso es decreciente)
b) Un bucle while que a partir de una variable $contador que toma valores de 1 a 5, muestre
por pantalla el doble del valor de $contador, es decir, que muestre 2, 4, 6, 8, 10.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
LA INSTRUCCIÓN DO … WHILE
La estructura repetitiva do-while (en castellano equivaldría a hacer… mientras) es muy
similar a la estructura while, excepto que la expresión verdadera es verificada al final de
cada iteración en lugar de al principio. La diferencia principal con los bucles while es que está
garantizado que se ejecuten las instrucciones que contienen, al menos una vez (la
verificación de si se tiene que repetir el proceso se realiza al final de la repetición de la
estructura.
La estructura general o sintaxis habitual de un bucle do while es la siguiente:
<?php
do {
…sentencias
} while(condición);
?>
En este fragmento de código estaríamos indicando que se ejecute una primera vez “sí o sí”
las sentencias, y que después se evalúe la condición para comprobar si se deben ejecutar
nuevamente las sentencias. Como vemos, aunque no se cumpla la condición las sentencias
se ejecutarían al menos una primera vez.
Escribe ahora este código y guárdalo con un nombre de archivo como ejemplo2.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$galletas = 0;
do {
echo "$galletas, ";
$galletas++;
} while ($galletas < 10);
?>
EJERCICIO 2
Crea el código PHP donde generes:
a) Un bucle do…while que cuente desde 50 hasta 40 (fíjate que en este caso es decreciente)
b) Un bucle do…while que a partir de una variable $contador que toma valores de 1 a 5,
muestre por pantalla el doble del valor de $contador, es decir, que muestre 2, 4, 6, 8, 10.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
LA INSTRUCCIÓN FOR
La estructura repetitiva for (en castellano se traduciría como “desde…”) se utiliza
generalmente cuando tenemos bien determinada la cantidad de repeticiones a realizar. Se
diferencia de las anteriores en que se debe incluir en la propia instrucción una variable de
control, la cual se incrementa o decrementa de forma automática. La estructura de estas
instrucciones viene a ser muy similar a la anterior.
La estructura general o sintaxis habitual de un bucle for es la siguiente:
<?php
for ($variable=valor_inicial; condición; incremento) {
... sentencias;
}
?>
En este fragmento de código estaríamos indicando que mientras se cumpla la condición se
realizan las sentencias, y en este caso si no se cumpliese la condición se seguiría ejecutando
el programa justo después del cierre de la instrucción for (}). Todo esto es igual a la
instrucción while anteriormente citada, salvo que en la propia declaración de la estructura se
encuentra la variable de control, que en cada repetición se incrementa automáticamente.
Esta instrucción consta, por tanto, de tres parámetros:
Inicialización de la variable que se utilizará en la condición.
Condición que se debe cumplir para permanecer en el ciclo.
Modificación de la variable utilizada en la condición.
Escribe ahora este otro código guárdalo con un nombre de archivo como ejemplo3.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php
for ($galletas = 0; $galletas < 10; $galletas++){
echo "$galletas, ";
}
?>
Este ejemplo muestra a la salida, la misma información que mostraba la instrucción while.
Como podemos observar, el valor inicial y el incremento de la variable $galletas, van en la
propia instrucción.
EJERCICIO 3
Crea el código PHP donde generes:
a) Un bucle for que cuente desde 50 hasta 40 (fíjate que en este caso es decreciente y que
por tanto la variable deberá operar como $galletas– –).
b) Un bucle for que a partir de una variable $contador que toma valores de 1 a 5, muestre
por pantalla el doble del valor de $contador, es decir, que muestre 2, 4, 6, 8, 10.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
MODIFICAR EL PASO O STEP DE LA VARIABLE CONTADORA
Crea el siguiente código, guárdalo con un nombre de archivo como ejemplo4.php y visualiza
los resultados en tu navegador.
<?php
for ( $i = 0; $i < 50; $i+=5 ){
echo " $i <br/> ";
}
?>
Fíjate que en este caso a la variable contador la hemos denominado i. Es habitual usar
nombres como i, j, k para las variables contadoras en bucles.
Otra cosa interesante es que usando la instrucción += conseguimos que la variable
contadora no vaya de uno en uno, sino que el paso (step) de la variable sea el número que
nosotros deseemos. En este caso, hemos utilizado un incremento de 5 unidades en cada
repetición del bucle. También podemos lograr el mismo efecto pero con decrementos usando
– =.
EJERCICIO 4
Crea el código PHP donde generes:
a) Un bucle for que cuente desde 50 hasta 500 de 25 en 25.
b) Un bucle for que a partir de una variable de control $j que toma valores de 100 a 500 de
100 en 100, muestre por pantalla el resultado de dividir la variable de control por 20. En este
caso, el resultado será 5 (que es 100/20…), 10 (que es 200/20…), 15, 20, 25.
ARRAYS BÁSICOS O TRADICIONALES EN PHP
Un array es un conjunto de variables de una misma clase. Se accede a cada elemento
individual del array mediante un número entero denominado índice. 0 es el índice o
localizador del primer elemento y n-1 es el índice del último elemento, siendo n la dimensión,
tamaño o longitud del array. Así $empleado[23] representaría al empleado con localizador 23
como veremos a continuación.
Los arrays son muy utilizados en la programación. Dependiendo de la cantidad de
dimensiones que tengan pueden ser:
De una dimensión (vectores). Por ejemplo $empleado[23]
De dos dimensiones (matrices). Por ejemplo $butaca[3, 14]
De tres o más dimensiones (multidimensionales). Por ejemplo $fecha[2012, 9, 22]
Para acceder a los elementos del array se utilizan los corchetes [], dentro de los cuales
existirá un localizador o índice que es un número entero. Además, podemos guardar valores
de cualquier tipo de variable (string, entero, punto flotante, booleano) dentro de un array. Por
ejemplo $empleado[23] podría tomar como valor $empleado[23] = “Juan Pérez Suárez”. En
este caso se trataría de un array de cadenas de texto, es decir, un array de string. En otro
caso $empleado[23] podría tomar como valor $empleado[23] = 2312. En este caso se
trataría de un array de valores numéricos.
En algunos lenguajes es necesario declarar los arrays antes de poder utilizarlos, pero en PHP
no es necesario. Cuando se definen elementos de un array, PHP reconoce automáticamente
que se trata de un array sin necesidad de declaración previa.
VECTORES (ARRAYS DE UNA DIMENSIÓN)
Los vectores son los arrays que sólo contienen una dimensión (un índice).
Escribe este código y guárdalo con un nombre de archivo como ejemplo1.php. A
continuación, sube el fichero al servidor y visualiza el resultado en tu navegador.
<?php
$estacion[0] = "Primavera";
$estacion[1] = "Verano";
$estacion[2] = "Otoño";
$estacion[3] = "Invierno";
echo $estacion[2];
$numero[0] = 7;
$numero[1] = 11;
$numero[2] = 15;
?>
La forma general de uso de un array es: $nombreDeVariableArray [localizador] =
valorAsignado;
Ten en cuenta que lo que diferencia a una variable que pertenece a un array (conjunto de
variables) es la presencia del corchete con un índice en su interior.
Jugador(8) ----> es una variable con índice.
Jugador8 ----> es una variable normal.
TCP(3) ----> es una variable con índice.
TCP3 ----> es una variable normal.
PHP admite también otra posibilidad que no admiten otros lenguajes: se pueden usar arrays
sin especificar los números de los índices, ya que PHP los puede colocar automáticamente.
Escribe ahora este otro código y guárdalo con un nombre de archivo como ejemplo2.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$ciudad[] = "Sevilla";
$ciudad[] = "Madrid";
$ciudad[] = "Barcelona";
$ciudad[] = "Valencia";
echo $ciudad[3];
?>
Fíjate que PHP ha colocado automáticamente los índices, asignando el 0 a Sevilla, el 1 a
Madrid, el 2 a Barcelona y el 3 a Valencia. Hay que recordar que los arrays siempre
comienzan numerándose desde cero.
Otra forma de asignar valores a un array vector es la siguiente:
<?php
$color = array("azul", "verde", "negro", "marrón");
echo $color[1];
?>
Como ves, esta es una forma abreviada cuya forma general es:
$nombreDelArray = array (valorElemento0, valorElemento1, valorElemento2, … ,
valorElementon)
El término array es una palabra clave en PHP cuyo significado es equivalente a decir “los
elementos que aparecen en la lista a continuación son elementos de un array”.
EJERCICIO
Crea el código PHP de 3 archivos en cada uno de los cuales debes hacer lo siguiente:
a) Declara un array de enteros de nombre $coches e introduce en él 8 elementos cuyos
valores sean 32, 11, 45, 22, 78, -3, 9, 66, 5. A continuación muestra por pantalla el elemento
con localizador 5. Deberás obtener por pantalla que se visualiza -3.
b) Declara un array de numéricos decimales tipo double de nombre $importe e introduce en
él cuatro elementos que sean 32.583, 11.239, 45.781, 22.237. A continuación muestra por
pantalla el elemento con localizador 1. Deberás obtener por pantalla que se visualiza 11.239.
c) Declara un array de booleanos de nombre $confirmado e introduce en él seis elementos
que sean true, true, false, true, false, false. A continuación muestra por pantalla el elemento
con localizador 0. Deberás obtener por pantalla que se muestra “true”.
d) Declara un array de strings de nombre $jugador e introduce en él 5 elementos que sean
"Crovic", "Antic", "Malic", "Zulic" y "Rostrich". A continuación usando el operador de
concatenación haz que se muestre la frase: <<La alineación del equipo está compuesta por
Crovic, Antic, Malic, Zulic y Rostrich.>>
MATRICES O ARRAYS (ARREGLOS) DE DOS DIMENSIONES
Las matrices decimos que son arrays (arreglos) de dos dimensiones. También podemos
verlas como tablas donde cada elemento tiene una fila y una columna. Para comprenderlas
mejor podemos recordar las matrices matemáticas de 2 dimensiones. Un ejemplo de matriz
en matemáticas podría ser esta:
En una matriz normalmente hablamos de filas y columnas y decimos que la matriz tiene m
filas y n columnas. Así, cada elemento queda identificado por su fila i y su columna j. Por
ejemplo, en la matriz que hemos mostrado anteriormente podríamos decir que tenemos 3
filas (fila 0, fila 1 y fila 2) y cuatro columnas (columna 0, columna 1, columna 2, columna 3).
Podríamos decir que el elemento de la fila 1, columna 3 es igual a 2. De la misma manera
podríamos decir:
$valor [0] [0] = 1; $valor [0] [1] = 14; $valor [0] [2] = 8; $valor [0] [3] = 3;
$valor [1] [0] = 6; $valor [1] [1] = 19; $valor [1] [2] = 7; $valor [1] [3] = 2;
$valor [2] [0] = 3; $valor [2] [1] = 13; $valor [2] [2] = 4; $valor [2] [3] = 1;
Escribe ahora este código y guárdalo con un nombre de archivo como ejemplo3.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$animal[0][0] = "Perro";
$animal[0][1] = "Gato";
$animal[1][0] = "Lombriz";
$animal[1][1] = "Burro";
$animal[2][0] = "Murciélago";
$animal[2][1] = "Cocodrilo";
echo $animal[2][1];
echo $animal[0][0];
?>
Hay que recordar que los arrays siempre comienzan numerándose desde cero.
Otra forma de asignar valores a un array matriz es similar a la que ya describimos para los
vectores. Escribe este código y guárdalo con un nombre de archivo como ejemplo4.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php
$animal = array(
array("Perro", "Gato"),
array("Lombriz", "Burro"),
array("Murciélago", "Cocodrilo")
);
echo $animal[2][1];
echo $animal[0][0];
?>
La sintaxis que hemos empleado equivale a lo siguiente:
$animal [0] [0] = "Perro"; $animal [0] [1] = "Gato";
$animal [1] [0] = "Lombriz"; $animal [1] [1] = "Burro";
$animal [2] [0] = "Murciélago"; $animal [2] [1] = "Cocodrilo";
De ahí que por pantalla se muestre "Cocodrilo" y "Perro", al igual que en el ejemplo anterior.
También obtenemos el mismo resultado usando este código, que es una mezcla de ambos
tipos de sintaxis:
<?php
$animal[0] = array("Perro", "Gato");
$animal[1] = array("Lombriz", "Burro");
$animal[2] = array("Murciélago", "Cocodrilo");
echo $animal[2][1];
echo $animal[0][0];
?>
La visualización obtenida es la misma: por pantalla se muestra "Cocodrilo" y "Perro", al igual
que en el ejemplo anterior.
ARRAYS MULTIDIMENSIONALES
Los arrays multidimensionales son los que tienen más de dos dimensiones. Estos tipos de
arrays se definen como las matrices pero añadiendo más índices.
Escribe este código, guarda el archivo php, súbelo al servidor y visualiza el resultado en tu
navegador.
<?php
$animal[0][0][0] = "Perro";
$animal[0][0][1] = "Gato";
$animal[0][0][2] = "Lombriz";
$animal[1][0][0] = "Burro";
$animal[1][0][1] = "Murciélago";
$animal[1][0][2] = "Cocodrilo";
echo "<br/>& nbsp;& nbsp;& nbsp;" . $animal[1][0][1];
echo "<br/>& nbsp;& nbsp;& nbsp;" . $animal[0][0][3];
?>
En este ejemplo hemos incluido una línea que tiene poco sentido, o podría interpretarse
como un error:
echo "<br/>& nbsp;& nbsp;& nbsp;" . $animal[0][0][3];
Fíjate que estamos invocando un localizador [0][0][3] que no existe, o al que aún no le
hemos asignado valor. Dependiendo del lenguaje y de la versión el resultado puede ser uno u
otro. En principio, debe tratar de evitarse invocar a una variable tipo array a la que no se
haya asignado valor, ya que esto supone una inconsistencia o incoherencia. En general, si
esto ocurre, PHP devolverá un valor “vacío”, que en este caso supondría que en la pantalla
no se muestra nada asociado a esta variable. Por eso en la pantalla vemos únicamente
“Murciélago” y nada más.
Escribe el código que incluimos más abajo y visualiza el resultado. Si te fijas, cuando
declaramos un array dentro de otro array lo que hacemos es añadir una dimensión más al
array. Por ejemplo, si quisiéramos declarar un array de tres dimensiones de nombre
$miFecha podríamos escribir:
<?php
$miFecha = array( //Declara array
array( //Dimensión [0][…][…]
array("13 de enero de 2015", "11 de febrero de 2018"), //[0][0][…]
array("13 de enero de 2020", "11 de febrero de 2015"), //[0][1][…]
),
array( //Dimensión [1][…][…]
array("3 de agosto de 2017", "1 de octubre de 2016"), //[1][0][…]
array("3 de agosto de 2013", "1 de octubre de 2019"), //[1][1][…]
),
array( //Dimensión [2][…][…]
array("10 de junio de 2020", "11 de marzo de 2019"), //[2][0][…]
),
array(
array("22 de marzo de 2020", "28 de mayo de 2019"), //[3][0][…]
array("22 de marzo de 2019", "28 de mayo de 2018"), //[3][1][…]
array("22 de marzo de 2018", "28 de mayo de 2017"), //[3][2][…]
array("22 de marzo de 2017", "28 de mayo de 2016"), //[3][3][…]
)
);
echo "<br/>& nbsp;& nbsp;& nbsp;" . $miFecha[3][2][0];
?>
En este ejemplo hemos definido valores para los siguientes índices de array:
$miFecha [0] [0] [0], $miFecha [0] [0] [1]
$miFecha [0] [1] [0], $miFecha [0] [1] [1]
$miFecha [1] [0] [0], $miFecha [1] [0] [1]
$miFecha [1] [1] [0], $miFecha [1] [1] [1]
$miFecha [2] [0] [0], $miFecha [2] [0] [1]
$miFecha [3] [0] [0], $miFecha [3] [0] [1]
$miFecha [3] [1] [0], $miFecha [3] [1] [1]
$miFecha [3] [2] [0], $miFecha [3] [2] [1]
$miFecha [3] [3] [0], $miFecha [3] [3] [1]
Compruébalo solicitando la visualización de todas estas variables, como vemos en este
ejemplo.
<?php
$miFecha = array(
array(
array("13 de enero de 2015", "11 de febrero de 2018"),
array("13 de enero de 2020", "11 de febrero de 2015"),
),
array(
array("3 de agosto de 2017", "1 de octubre de 2016"),
array("3 de agosto de 2013", "1 de octubre de 2019"),
),
array(
array("10 de junio de 2020", "11 de marzo de 2019"),
),
array(
array("22 de marzo de 2020", "28 de mayo de 2019"),
array("22 de marzo de 2019", "28 de mayo de 2018"),
array("22 de marzo de 2018", "28 de mayo de 2017"),
array("22 de marzo de 2017", "28 de mayo de 2016"),
)
);
echo "<br/>& nbsp;& nbsp;& nbsp;" . $miFecha[3][2][0];
echo $miFecha [0] [0] [0]. "<br>"; echo $miFecha [0] [0] [1]. "<br>";
echo $miFecha [0] [1] [0]. "<br>"; echo $miFecha [0] [1] [1]. "<br>";
echo $miFecha [1] [0] [0]. "<br>"; echo $miFecha [1] [0] [1]. "<br>";
echo $miFecha [1] [1] [0]. "<br>"; echo $miFecha [1] [1] [1]. "<br>";
echo $miFecha [2] [0] [0]. "<br>"; echo $miFecha [2] [0] [1]. "<br>";
echo $miFecha [3] [0] [0]. "<br>"; echo $miFecha [3] [0] [1]. "<br>";
echo $miFecha [3] [1] [0]. "<br>"; echo $miFecha [3] [1] [1]. "<br>";
echo $miFecha [3] [2] [0]. "<br>"; echo $miFecha [3] [2] [1]. "<br>";
echo $miFecha [3] [3] [0]. "<br>"; echo $miFecha [3] [3] [1]. "<br>";
?>
EJERCICIO
Crea el código PHP de 3 archivos que den respuesta al siguiente planteamiento:
Queremos almacenar en una matriz el número de alumnos con el que cuenta una academia,
ordenados en función del nivel y del idioma que se estudia. Tendremos 3 filas que
representarán al Nivel básico, medio y de perfeccionamiento y 4 columnas en las que
figurarán los idiomas (0 = Inglés, 1 = Francés, 2 = Alemán y 3 = Ruso). Se pide realizar la
declaración de la matriz y asignarle los valores indicados en la siguiente imagen a cada
elemento de las siguientes maneras (crea un archivo php por cada una de estas maneras):
a) Con una sintaxis basada exclusivamente en índices, y mostrar por pantalla los alumnos
que existen en cada nivel e idioma.
b) Con una sintaxis basada en el uso anidado de la palabra array, y mostrar por pantalla los
alumnos que existen en cada nivel e idioma.
c) Con una sintaxis que combine el uso de array y el uso de índices, y mostrar por pantalla
los alumnos que existen en cada nivel e idioma.
Nota: por ejemplo, debe mostrarse por pantalla que el número de alumnos en el nivel básico,
idioma inglés, hay 1 alumno; en el nivel básico, idioma francés, hay 14 alumnos, etc.
ARRAYS ASOCIATIVOS EN PHP
Anteriormente hemos visto lo que son los arrays tradicionales en PHP y cómo operar con
ellos de forma muy elemental. Hemos aprendido que los arrays pueden denominarse
“variables con localizador” o “variables con índice”. Por tanto los elementos del array son
datos que están asociados, a su vez, a un elemento del array llamado índice.
Supongamos el array nombre[0], nombre[1], nombre[2]. El nombre de variable para el array
es “nombre” mientras que los índices son 0, 1 y 2.
El índice se caracteriza por conectar los elementos del array por medio de una numeración
que empieza por cero. Así, el primer elemento del array tiene índice cero, el segundo tiene
índice uno, y así sucesivamente.
Pero en realidad, resulta que este índice es numérico solo por defecto; es decir, tenemos la
posibilidad de crear nuestro propio índice dentro de un array. Cuando hacemos esto, estamos
convirtiendo el array en lo que se denomina un array asociativo.
FUNCIÓN COUNT
Antes de poder recorrer un array, debemos saber cuál es su tamaño para poder recorrerlo.
Supongamos que un array tiene tres elementos: tenemos que dar una instrucción para que
se extraiga el valor asociado a cada uno de los elementos del array, que normalmente será
algo similar a “para cada uno de los tres elementos del array, extraer su valor”.
Sin embargo, si el array tiene 24 elementos, la instrucción será del tipo “para cada uno de los
veinticuatro elementos del array, extraer su valor”. Como vemos, muchas veces nos es
necesario saber el número de elementos que hay en el array para poder recorrerlo, y para
ello nos va a resultar útil la función count.
La función count devuelve el número de elementos que hay en el array. Es decir para un
array de 4 elementos, la función count devolverá el número 4. Recuerda que si se trata de
valores numéricos de índices, los cuatro valores numéricos serán normalmente 0, 1, 2 y 3 en
lugar de 1, 2, 3 y 4.
Escribe ahora este código y guárdalo con un nombre de archivo como ejemplo2.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php //Ejemplo count aprenderaprogramar.com
$estacion[0] = "Primavera";
$estacion[1] = "Verano";
$estacion[2] = "Otoño";
$estacion[3] = "Invierno";
echo count($estacion);
?>
Puedes comprobar que se muestra el número 4 porque el array tiene 4 elementos.
RECORRIDOS DE ARRAYS UNIDIMENSIONALES
Ahora que ya conocemos qué son los arrays, debemos conocer cómo recorrerlos para extraer
o comprobar los valores que contiene cada uno de los elementos del array. Esta es una tarea
habitual en programación que en general va a tener gran utilidad para nosotros.
Lo arrays se pueden recorrer de muchas formas, nosotros no las explicaremos todas.
Trataremos de ver en principio las más habituales y sencillas.
Recorrido de arrays mediante for
Escribe ahora este código y guárdalo con un nombre de archivo como ejemplo3.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php //Ejemplo arrays aprenderaprogramar.com
$array[0] = "Uno";
$array[1] = "Dos";
$array[2] = "Tres";
$array[3] = "Cuatro";
$array[4] = "Cinco";
$array[5] = "Seis";
$array[6] = "Siete";
$array[7] = "Ocho";
for($i=0;$i<count($array);$i++) {
echo $array[$i].'<br />';
}
?>
Como ejercicio y teniendo en cuenta lo explicado en las entregas anteriores sobre los
distintos tipos de instrucciones de repetición, escribe el código que dé lugar al mismo
resultado que el ejemplo anterior pero usando la instrucción while y comprueba que obtienes
el mismo resultado.
CONOCER COUNT
Ejecuta este código:
<?php //Ejemplo arrays aprenderaprogramar.com
$array[5] = "Uno";
$array[6] = "Dos";
$array[7] = "Tres";
$array[8] = "Cuatro";
$array[9] = "Cinco";
$array[10] = "Seis";
$array[11] = "Siete";
$array[12] = "Ocho";
echo 'Elementos inicializados en el array: '.count($array).'<br/>';
for($i=0;$i<count($array);$i++) {
echo $array[$i].'...<br/>';
}
echo $array[15].'aaa<br/>';
echo count($otroArray[14][33]).' elementos<br/>';
?>
El resultado obtenido será el siguiente:
Elementos inicializados en el array: 8
...
...
...
...
...
Uno...
Dos...
Tres...
aaa
0 elementos
Analicemos lo que está ocurriendo. El array $array no tiene definidos cuáles son sus
elementos de índice 0, 1, 2, 3 y 4. En cambio sí tiene definidos valores para sus elementos de
índice 5, 6, 7, 8, 9, 10, 11 y 12. Hay 8 elementos con valores definidos pero sus índices no
son 0, 1, 2, 3, 4, 5, 6, 7 como es lo habitual, sino que son 5, 6, 7, 8, 9, 10, 11 y 12.
Al ejecutar el for comenzando con un valor de la variable de control igual a cero, se ejecuta
echo $array[0].’…<br/>’; Al no tener un valor asignado, $array[0] devuelve vacío y
simplemente se muestran tres puntos por pantalla. Lo mismo ocurre con los índices 1, 2, 3, 4
y sólo es al llegar al índice cinco cuando se muestran valores por pantalla.
Sin embargo, sólo se mostrarán los elementos con índice 5 a 8 del array, quedando el resto
de elementos sin ser mostrado.
Además comprobamos que podemos invocar a elementos del array por encima del índice
máximo definido sin obtener error, y que incluso podemos invocar a un nombre de array que
no hemos declarado ni utilizado, con cualquier índice, sin obtener error.
En este ejemplo podríamos mostrar todos los elementos del array realizando un “pequeño
cambio”:
for($i=5;$i<count($array)+5;$i++)
Sin embargo esta solución no es satisfactoria porque no la podemos aplicar como solución
para recorrer cualquier array.
A modo de resumen diremos lo siguiente:
count nos devuelve el número de elementos inicializados del array.
Si los índices del array no son secuencialmente 0, 1, 2, 3 , etc. el recorrido con un for
tradicional puede resultar no satisfactorio, por lo que habremos de pensar en otras
alternativas para recorrer el array. Hablaremos de esto más adelante.
COUNT CON ARRAYS MULTIDIMENSIONALES
En el caso de arrays de más de una dimensión, la función count devuelve el número de
elementos que hay en un nivel del array definido y para un índice definido. Llamamos nivel
del array a cada uno de los corchetes existentes en el array. Por ejemplo si hemos definido
$ejem[2][5][1][6][2] = 33; y $ejem[2][5][3][1][9] = 55; decimos que en el primer nivel del
array, correspondiente al primer índice, hay un solo índice: el 2. En el segundo nivel del array
para índice 2 hay un solo índice: el 5. En el tercer nivel del array con índice 1 hay un solo
índice: el 6. En el tercer nivel del array con índice 3 hay un solo índice: el 1. En el cuarto nivel
del array con índice 6 hay un solo índice: el 2. En el cuarto nivel del array con índice 1 hay un
solo indice: el 9.
Con un ejemplo comprenderemos mejor el funcionamiento de count en arrays
multidimensionales. Ejecuta este código:
<?php //Ejemplo arrays aprenderaprogramar.com
$miEspArray[6]=99;
$miEspArray[22]=87;
echo 'Numero de elementos de miEspArray es '.count($miEspArray).'<br/>';
echo "--------------------";
$array2[0][0][0] = "Prueba1";
$array2[0][0][1] = "Prueba2";
$array2[0][0][2] = "Prueba3";
$array2[0][1][0] = "Prueba4";
$array2[0][1][1] = "Prueba5";
$array2[1][0][1] = "Prueba6";
$array2[1][1][2] = "Prueba7";
$array2[1][2][1] = "Prueba8";
$array2[2][0][0] = "Prueba9";
$array2[2][0][1] = "Prueba10";
$array2[5][0][1] = "Prueba11";
echo '<br/>Numero de indices en el primer nivel: '.count($array2);
echo '<br/>Numero de indices en el segundo nivel de array[0]: '.count($array2[0]);
echo '<br/>Numero de indices en el segundo nivel de array[1]: '.count($array2[1]);
echo '<br/>Numero de indices en el segundo nivel de array[2]: '.count($array2[2]);
echo '<br/>Numero de indices en el segundo nivel de array[3]: '.count($array2[3]);
echo '<br/>Numero de indices en el segundo nivel de array[5]: '.count($array2[5]);
echo '<br/>Numero de indices en el tercer nivel de array[0][0]: '.count($array2[0][0]);
echo '<br/>Numero de indices en el tercer nivel de array[0][1]: '.count($array2[0][1]);
echo '<br/>Numero de indices en el tercer nivel de array[1][0]: '.count($array2[1][0]);
echo '<br/>Numero de indices en el tercer nivel de array[1][1]: '.count($array2[1][1]);
echo '<br/>Numero de indices en el tercer nivel de array[1][2]: '.count($array2[0][0]);
echo '<br/>Numero de indices en el tercer nivel de array[2][0]: '.count($array2[2][0]);
echo '<br/>Numero de indices en el tercer nivel de array[5][0]: '.count($array2[5][0]);
?>
El resultado obtenido será el siguiente:
Numero de elementos de miEspArray es 2
--------------------
Numero de indices en el primer nivel: 4
Numero de indices en el segundo nivel de array[0]: 2
Numero de indices en el segundo nivel de array[1]: 3
Numero de indices en el segundo nivel de array[2]: 1
Numero de indices en el segundo nivel de array[3]: 0
Numero de indices en el segundo nivel de array[5]: 1
Numero de indices en el tercer nivel de array[0][0]: 3
Numero de indices en el tercer nivel de array[0][1]: 2
Numero de indices en el tercer nivel de array[1][0]: 1
Numero de indices en el tercer nivel de array[1][1]: 1
Numero de indices en el tercer nivel de array[1][2]: 3
Numero de indices en el tercer nivel de array[2][0]: 2
Numero de indices en el tercer nivel de array[5][0]: 1
Fíjate que por ejemplo count($array2[0][1]) nos devuelve el número de elementos existentes
de tipo $array2[0][1][x] donde x es cualquier índice, es decir, el número de elementos de
tercer nivel del array para los índices iniciales 0 y 1.
RECORRIDO DE ARRAYS MULTIDIMENSIONALES
Para recorrer un array multidimensional, tendremos que ir anidando tantas estructuras
repetitivas como dimensiones tenga el array. Con un ejemplo se verá todo mucho más claro.
Escribe ahora este código y guárdalo con un nombre de archivo como ejemplo4.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php //Ejemplo arrays aprenderaprogramar.com
$array[0][0] = "Uno";
$array[0][1] = "Dos";
$array[1][0] = "Tres";
$array[1][1] = "Cuatro";
for($i=0;$i<count($array);$i++) {
for($j=0;$j<count($array[$i]);$j++) {
echo $array[$i][$j].'<br />';
}
}
echo "--------------------";
$array2[0][0][0] = "Cinco";
$array2[0][0][1] = "Seis";
$array2[0][0][2] = "Siete";
$array2[0][1][0] = "Ocho";
$array2[0][1][1] = "Nueve";
for($i=0;$i<count($array);$i++) {
for($j=0;$j<count($array[$i]);$j++) {
for($k=0;$k<count($array[$i][$j]);$k++) {
echo $array[$i][$j][$k].'<br />';
}
}
}
?>
Fíjate que para poder obtener el resultado deseado los elementos de los arrays deben estar
definidos usando índices que comiencen en 0 y sean progresivamente 1, 2, 3, 4… Si no fuera
así estos bucles, al estar definidos partiendo de 0, no funcionarían.
Fíjate también en la lógica de los bucles, por ejemplo el primer bucle lo podríamos leer así:
para cada elemento desde 0 hasta el número de elementos de primer nivel, y para cada
elemento desde 0 hasta el número de elementos de segundo nivel con el índice extraido
previamente, mostrar el contenido del array. Si por ejemplo en el primer nivel tenemos dos
índices que son 0 y 1, comenzaremos con el índice 0 y se verá para el índice 0 cuántos
índices hay en el segundo nivel (son 2). De este modo lo primero que se mostrará son los
índices [0][0] y [0][1]. Una vez completado el recorrido del índice 0 se pasa al índice 1 y se
sigue el mismo proceso.
Nota: en algunas versiones o situaciones pedir un elemento no definido de un array puede
dar lugar a que aparezca un error. Por ejemplo, si el elemento $array[2][3] no existe e
hiciéramos una llamada a ese elemento como echo $array[2][3] podría aparecer un error tipo
“undefined offset…” similar a éste:
Recorrido de arrays mediante foreach
PHP incorpora una forma “cómoda” para poder recorrer todos los elementos de un array.
Esta forma se basa en el uso de la instrucción foreach.
Este tipo de recorridos se suele usar cuando obtenemos datos de una base de datos.
El tipo de array que nos suele devolver una consulta a la base de datos es similar al
siguiente:
$datosArray = array(
array('nombre' => 'Antonio', 'apellidos' => 'Gómez Gómez', 'telefono' => '675832145'),
array('nombre' => 'Pedro', 'apellidos' => 'Guillén Gastón', 'telefono' => '674562178'),
array('nombre' => 'Dolores', 'apellidos' => 'Candela Quema', 'telefono' => '689765432'),
.
.
.
.
array('nombre' => 'Rubén', 'apellidos' => 'Guardia Jurado', 'telefono' => '654213896'),
);
Recuerda que la anterior forma de expresión es equivalente a esta otra:
$datosArray[0] ['nombre'] = 'Antonio'
$datosArray[0] ['apellidos'] = 'Gómez Gómez'
$datosArray[0] ['telefono'] = '675832145'
$datosArray[1] ['nombre'] = 'Pedro'
$datosArray[1] ['apellidos'] = 'Guillén Gastón'
$datosArray[1] ['telefono'] = '674562178'
$datosArray[2] ['nombre'] = 'Dolores'
$datosArray[2] ['apellidos'] = 'Candela Quema'
$datosArray[2] ['telefono'] = '689765432'
La diferencia está en que en el primer caso los índices del array son en algunos casos
cadenas (se trata de arrays asociativos) mientras que en el segundo caso los índices del
array son números (se trata de arrays tradicionales). En el primer caso los valores 0, 1 y 2
son asignados automáticamente por php porque no se ha especificado otra cosa.
Para recorrer arrays de forma cómoda se usa la instrucción foreach.
Escribe ahora este código y guárdalo con un nombre de archivo como ejemplo5.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php //Ejemplo foreach aprenderaprogramar.com
$rows = array(
array(
'nombre' => 'Antonio', 'apellidos' => 'Gómez Gómez', 'telefono' => '675832145'),
array(
'nombre' => 'Pedro', 'apellidos' => 'Guillén Gastón', 'telefono' => '674562178'),
array(
'nombre' => 'Dolores', 'apellidos' => 'Candela Quema', 'telefono' => '689765432'),
array(
'nombre' => 'Rubén', 'apellidos' => 'Guardia Jurado', 'telefono' => '654213896')
);
foreach($rows as $valor) {
echo 'Nombre: ' . $valor['nombre'] . '<br />';
}
?>
Como podemos observar, vamos a ir recorriendo todas las filas y mostrando el nombre.
$valor es una variable temporal que sólo existe durante la ejecución de la instrucción
foreach, y esta variable va tomando en cada repetición o iteración el valor del siguiente
elemento dentro del array principal. En este caso, el elemento que hay dentro del array es
otro array. A su vez, indicamos que para cada uno de los arrays extraidos en el recorrido, se
nos muestre el item del array cuyo índice es ‘nombre’.
En este caso podríamos obtener el mismo resultado usando este código:
echo $rows[0]['nombre']. '<br />';
echo $rows[1]['nombre']. '<br />';
echo $rows[2]['nombre']. '<br />';
echo $rows[3]['nombre']. '<br />';
Pero piensa que para recorrer un array de varios cientos de elementos no resultará práctico
escribirlos uno a uno…
Como ejercicio escribe el código que muestre los nombres y apellidos del array anterior.
Si te resulta un poco complicado el ejercicio anterior, prueba con este código que es más
sencillo, y luego vuelve a revisar el código anterior.
<?php
$estacion[0] = "Primavera";
$estacion[1] = "Verano";
$estacion[2] = "Otoño";
$estacion[3] = "Invierno";
foreach($estacion as $valor) {
echo '& nbsp; & nbsp; & nbsp;'. $valor.'<br/>';
}
?>
El resultado que obtenemos es similar al que se ve en la siguiente imagen. Como puedes
comprobar, la variable $valor (variable transitoria) va tomando en cada repetición del bucle
el contenido de los elementos o items del array que estamos recorriendo.
EJERCICIO 1
Crea un array con nombre paisLimitrofe donde los elementos del array serán cadenas de
texto con los países limítrofes (con frontera) con el tuyo. Por ejemplo si vivimos en Perú
tenemos como países limítrofes Ecuador, Colombia, Brasil, Bolivia y Chile.
a) Utilizando un bucle for, muestra por pantalla los países limítrofes.
b) Utilizando un bucle for each, muestra por pantalla los países limítrofes.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
EJERCICIO 2
Escribe y ejecuta el siguiente código y responde a las siguientes preguntas:
$equipo = array(portero=>'Casillas', defensa=>'Hierro', medio=>'Ces', delantero=>'Ronaldo');
foreach($equipo as $posicion=>$jugador) {
echo "El " . $posicion . " es " . $jugador;
}
a) ¿$equipo es una variable normal, un array tradicional ó un array asociativo?
b) ¿portero es un índice de un array, un contenido de un elemento de un array o un
contenido de una variable simple?
c) ¿Al ejecutar el código obtienes un resultado por pantalla u obtienes un error? ¿Qué es lo
que hace el código?
EJERCICIO 3
Supón que quieres representar lo siguiente: hay 2 equipos españoles, en el primero el
portero es Frank, el defensa Pepe, el medio Luis y el delantero Raul. En el segundo, el portero
es Tiger, el defensa Mourin, el medio Katz y el delantero Alberto. Hay 1 equipo mexicano,
donde el portero es Suarez, el defensa Koltz, el medio Fernandez y el delantero Ramirez. Hay
2 equipos argentinos. En el primero el portero es Higuita, el defensa Mel, el medio Rubens y
el delantero Messi. En el segundo el portero es Kostenmeiner, el defensa Lenkins, el medio
Marash y el delantero Juanes.
a) Representa los datos usando un array de tres dimensiones con índices numéricos donde el
primer índice indica el país, el segundo el equipo y el tercero la posición del jugador.
Presenta la información del país, equipo, posiciones y jugadores de cada equipo usando un
bucle for.
b) Representa los datos usando un array de tres dimensiones con índices numéricos donde el
primer índice indica el país, el segundo el equipo y el tercero la posición del jugador.
Presenta la información del país, equipo, posiciones y jugadores de cada equipo usando un
bucle for each.
c) Representa los datos usando arrays arrays asociativos donde el primer índice indica el
país, el segundo el equipo y el tercero la posición del jugador (un ejemplo de cómo declarar
un elemento sería por ejemplo: $equipos['Mexico']['Equipo1']['defensa']="koltz";). A
continuación usando un bucle foreach recorre los elementos del array mostrando la
información del país, equipo, posiciones y jugadores de cada equipo.
Escribe ahora este código y guárdalo con un nombre de archivo como ejemplo1.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php //Ejemplo arrays aprenderaprogramar.com
$colores_vehiculos = array(
'coche' => 'Rojo',
'moto' => 'verde',
'avion' => 'amarillo'
);
echo $colores_vehiculos['moto'];
?>
Si te fijas en el código, hemos asignado a la variable $colores_vehiculos un array asociativo.
Al ser asociativo tenemos que especificar un índice. Los índices que hemos especificado son:
coche, moto y avion. Es decir, en vez de usar 0, 1 y 2 hemos usado coche, moto y avión.
Para declarar arrays asociativos, en el paréntesis de definición del array, tenemos que
asociar el índice con el valor por medio del operador =>. Fíjate que el índice debe ir escrito
entre comillas simples. Después, para acceder a un elemento del array asociativo tenemos
que escribir la variable asignada al array, y posteriormente escribir entre corchetes el índice
que hemos asignado a dicho elemento.
Tenemos la posibilidad de utilizar cualquier tipo de dato para especificar un índice. Por
defecto es un número, pero también podemos poner cadenas de texto, como en el ejemplo
anterior e incluso variables. Escribe este código y comprueba el resultado en tu servidor.
<?php //Ejemplo arrays aprenderaprogramar.com
$indice = 'coche';
$colores_vehiculos = array(
$indice => 'Rojo',
'moto' => 'verde',
'avion' => 'amarillo'
);
echo $colores_vehiculos[$indice];
?>
Como ves en este ejemplo hemos usado una variable tipo cadena de texto como índice de un
array.
Finalmente, los arrays asociativos también pueden usarse en la forma de declaración
habitual escribiendo $nombreVariable [indice] = valor. Escribe este ejemplo de código,
guárdalo con un nombre de archivo y súbelo al servidor.
<?php //Ejemplo arrays aprenderaprogramar.com
$colores_vehiculos ['coche'] = 'Rojo';
$colores_vehiculos ['moto'] = 'verde';
$colores_vehiculos ['avion'] = 'amarillo';
echo $colores_vehiculos['moto'];
?>
Comprobarás que en la pantalla del navegador se muestra el texto “verde”.
EJERCICIO
Crea el código PHP de dos archivos que den respuesta al siguiente planteamiento:
Queremos almacenar en una matriz el número de alumnos con el que cuenta una academia,
ordenados en función del nivel y del idioma que se estudia. Tendremos 3 niveles: Nivel
básico, medio y de perfeccionamiento, que se corresponden con las filas de la matriz, y 4
idiomas (Inglés, Francés, Alemán y Ruso), que se corresponden con las columnas de la
matriz. Se pide realizar la declaración de la matriz y asignarle los valores indicados en la
siguiente imagen cumpliendo con:
a) Con una sintaxis ejemplo de uso de arrays asociativos donde el primer índice del array
(niveles) es un número y el segundo un texto indicativo del idioma. Se debe mostrar por
pantalla los alumnos que existen en cada nivel e idioma. Ejemplo: numeroAlumnos[0]
['frances'] representará el número de alumnos que existen en el nivel básico, idioma francés.
b) Con una sintaxis ejemplo de uso de arrays asociativos donde tanto el primer índice del
array (niveles) como el segundo (idiomas) sea un texto indicativo. Se debe mostrar por
pantalla los alumnos que existen en cada nivel e idioma. Ejemplo: numeroAlumnos['basico']
['frances'] representará el número de alumnos que existen en el nivel básico, idioma francés.
Nota: en ambos casos debe mostrarse por pantalla que el número de alumnos en el nivel
básico, idioma inglés, hay 1 alumno; en el nivel básico, idioma francés, hay 14 alumnos, etc.
FUNCIONES EN PHP
Una de las herramientas más importantes en cualquier lenguaje de programación son las
funciones. Una función es un conjunto de instrucciones que a lo largo del programa van a ser
ejecutadas multitud de veces. Es por ello, que este conjunto de instrucciones se agrupan en
una función. Las funciones pueden ser llamadas y ejecutadas desde cualquier punto del
programa.
Además, una función puede recibir parámetros externos de los cuales dependa el resultado
de dicha función. Es decir, según el parámetro o parámetros con los que se invoque a la
función, ésta devolverá un resultado u otro.
Las funciones deben estar definidas antes de realizar la llamada a la función (como es
lógico).
Sintaxis general para declarar una función en PHP
function nombre (parámetro1, parámetro2, …, parámetroN) {
instrucción1
instrucción2
.
.
.
instrucciónN
}
Para llamar (hacer que se ejecute) la función usaremos esta sintaxis: nombre(par1, par2,
par3, …, parN); donde par1, par2, par3, …, parN son los parámetros (información) que le
pasamos a la función. Una función puede necesitar de ningún, uno o varios parámetros para
ejecutarse.
Escribe ahora este código y guárdalo con un nombre de archivo como ejemplo1.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php //Ejemplo funciones aprenderaprogramar.com
//Declaración de funciones
function mostrarTexto($texto) {
echo "<strong>El texto a mostrar es el siguiente: </strong>";
echo $texto;
}
//Fin de declaración de funciones
mostrarTexto("Me gusta mucho la web de aprenderaprogramar.com");
?>
En este ejemplo hemos visto cómo hemos definido una función cuyo nombre es
mostrarTexto. Esta función espera un parámetro cuando es invocada (parámetro que se ha
denominado $texto). Una vez se ejecuta, la función ejecuta una serie de instrucciones y
devuelve el control al punto desde el que fue invocada.
Podemos hacer varios comentarios:
a) En algunos lenguajes de programación se distinguen los términos “procedimiento”
cuando un fragmento de código de este tipo ejecuta una serie de instrucciones sin devolver
un valor, frente al término “función” que se aplica cuando un fragmento de código de este
tipo ejecuta una serie de instrucciones y devuelve un valor. En PHP no se distingue entre una
cosa y otra, simplemente se habla de “función” en general.
b) En algunos lenguajes de programación como Java el tipado o especificación de tipos que
se van a recibir por parte de la función (o el tipo de dato que va a devolver la función) es
mucho más fuerte. Si te fijas, la función mostrarTexto recibe un parámetro denominado
$texto, pero en ningún lado se especifica si dicho parámetro es tipo integer, float, double ó
string. ¿De qué tipo es? Realmente no lo sabemos: el intérprete PHP se encarga de
automáticamente reconocer el tipo que se le pasa a la función. Además, intentará ejecutar el
código sea como sea el tipo del parámetro pasado. Si le resultara imposible ejecutar el
código, devolvería un error.
La utilidad fundamental de las funciones es no tener que repetir partes de código comunes,
que sería necesario repetir varias veces. Esas partes de código comunes se agrupan en
funciones y simplemente llamaremos a la función cada vez que necesitamos ejecutar ese
código. De esta manera, evitamos la repetición que hace más largo y difícil de entender un
programa o desarrollo web.
También podemos crear funciones que devuelvan datos (valores concretos). Estas funciones,
que podríamos denominar “funciones en sentido estricto”, son aquellas que ejecutan un
código y como punto final de dicho código incluyen una sentencia return seguida del
resultado de la función. La sentencia return indica que cuando se alcanza se ha llegado al
final de la función y se devuelve como resultado de la misma el contenido especificado a
continuación del return. Después de un return puede devolverse una variable, un número,
una cadena de texto, etc.
Por ejemplo return "No dispone de permisos" significa que la función devuelve esta cadena
de texto. Otro ejemplo: return $calculo; indica que la función devuelve el contenido que se
encuentre almacenado en la variable $calculo. Otro ejemplo: return "Lo sentimos ".$usuario."
pero no dispone de permisos. Para solicitar información puede escribir a ".
$emailAdministrador; haría que la función devuelva una cadena de texto donde intervienen
diversas variables.
<?php // Ejemplo funciones aprenderaprogramar.com
function operaciones($n1, $n2, $operacion) {
$resultado = 0;
if($operacion == "Sumar") {
$resultado = $n1 + $n2;
}else if($operacion == "Restar") {
$resultado = $n1 - $n2;
}else if($operacion == "Multiplicar") {
$resultado = $n1 * $n2;
}
return $resultado; // Devolver el resultado
}
// Llamar a la función operaciones
$r = operaciones(5, 7, "Sumar");
echo $r . "<br>";
// O podemos imprimir directamente
echo operaciones(15, 8, "Restar");
?>
Fíjate que a diferencia de la función mostrarTexto, la función operaciones nos devuelve un
valor concreto, de forma que se sustituye su invocación allí donde aparece por el valor que
devuelve. Así, la instrucción echo operaciones(15, 8, "Restar"); equivale a lo que sería
escribir echo <<aquí el valor devuelto por la función operaciones invocada con los
parámetros 15, 8 y “Restar” >>, es decir, sería lo mismo que escribir echo (15-8); ó echo 7;
Además, fíjate que la función mostrarTexto requería un parámetro, mientras que la función
operaciones requiere tres parámetros. Si invocas la función sin pasarle el número de
parámetros adecuado obtendrás un error del tipo <<Warning: Missing argument 3 for
operaciones()>>.
Por último, tener en cuenta que una función puede ser invocada sin parámetros.
<?php //Ejemplo funciones aprenderaprogramar.com
function mostrarTextoError {
echo "<strong>Se ha producido un error </strong>";
// Aquí pueden venir varias líneas de instrucciones
}
?>
Esta función carece de parámetros. Para invocarla escribiríamos mostrarTextoError(). Cada
vez que realizáramos la invocación se ejecutaría el código dentro de la función. Esta función
podemos decir que es “tipo procedimiento” porque no devuelve un resultado (no tiene
sentencia return).
EJERCICIO
Crear las siguientes funciones en PHP y código para comprobar su funcionamiento:
a) Una función que reciba cinco números enteros como parámetros y muestre por pantalla el
resultado de sumar los cinco números (tipo procedimiento, no hay valor devuelto).
b) Una función que reciba cinco números enteros como parámetros y devuelva el resultado
de sumar los cinco números (tipo función, hay un valor devuelto). Asigna el resultado de una
invocación a la función con los números 2, 5, 1, 8, 10 a una variable de nombre $tmp y
muestra por pantalla el valor de la variable.
c) Una función que reciba como parámetros el valor del radio de la base y la altura de un
cilindro y devuelva el volumen del cilindro, teniendo en cuenta que el volumen de un cilindro
se calcula como Volumen = númeroPi * radio * radio * Altura siendo númeroPi = 3.1416
aproximadamente.
FUNCIONES BÁSICAS EN PHP
PHP además de permitirnos definir nuestras propias funciones, dispone de una gran cantidad
de funciones propias del lenguaje a las que se denomina “funciones nativas” o “funciones del
core o núcleo php”. Ya conocemos algunas de ellas como strlen y substr. Vamos a ver otras
funciones muy usadas relacionadas con el manejo de cadenas de caracteres (texto).
FUNCIÓN STR_REPLACE
Esta función se utiliza para reemplazar caracteres dentro de una cadena de caracteres. Es
decir, nos permite definir una cadena que debe ser reemplazada con otra dentro de una frase
o palabra. La función devuelve la frase original con todas las apariciones de la cadena a
buscar reemplazadas con una cadena de reemplazo especificada.
La sintaxis básica habitual para esta función es:
str_replace ("cadena a buscar", "cadena de reemplazo", $variableOFraseOriginal)
Veámoslo con un ejemplo para entenderla mejor. Escribe este código y guárdalo con un
nombre de archivo como ejemplo1.php. A continuación, sube el fichero al servidor y visualiza
el resultado.
<?php //Ejemplo funciones básicas aprenderaprogramar.com
$texto = "Donde dije digo digo Diego.";
echo str_replace("Diego", "recortes", $texto);
echo "<br />";
echo $texto;
?>
Como podemos observar, en la cadena de caracteres $texto, hemos sustituido la palabra o
conjunto de caracteres "Diego" por "Recortes" y hemos devuelto el resultado sin modificar la
variable de entrada.
Fíjate que en el código que hemos escrito no hemos reemplazado el valor de la variable
$texto por un nuevo contenido. Unicamente hemos impreso por pantalla el resultado que nos
devuelve la función. Si hubiéramos escrito lo siguiente sí hubiéramos cambiado el contenido
de la variable: $texto = str_replace("Diego", "recortes", $texto);
La función permite pasar opcionalmente un parámetro adicional que permite saber a
posteriori el número de reemplazos que se han realizado:
str_replace ("cadena a buscar", "cadena de reemplazo", $variableOFraseOriginal, $numReemplazos)
Veámoslo con un ejemplo para entenderlo mejor:
<?php //Ejemplo funciones básicas aprenderaprogramar.com
$texto = "El dijo: es tarde ahora, pero es mejor si hay tres";
echo str_replace("es", "**", $texto, $reemplazos );
echo '<br/>Se han realizado: '.$reemplazos. ' reemplazos<br/>';
echo $texto;
?>
El resultado esperado es: El dijo: ** tarde ahora, pero ** mejor si hay tr**, Se han realizado: 3
reemplazos, El dijo: es tarde ahora, pero es mejor si hay tres
Fíjate que se reemplaza la cadena "es" indistintamente según esté separada por espacios o
dentro de una palabra. Si sólo quisiéramos reemplazar la cadena si está separada por
espacios podríamos indicar los espacios dentro de la cadena: echo str_replace(" es ", " ** ",
$texto, $reemplazos );
Aquí hemos indicado que se reemplace espacio-e-s-espacio con espacio-&#-espacio.
Si fuera necesario establecer reglas complejas de reemplazo, por ejemplo “reemplazar todas
las palabras que empiecen por a y terminen por a con otra palabra, tendríamos que usar lo
que se denominan expresiones regulares, pero no vamos a estudiar ahora la forma de definir
y emplear expresiones regulares con PHP.
FUNCIONES STRTOLOWER Y STRTOUPPER
Las funciones strtolower y strtoupper transforman una cadena de caracteres en la misma
cadena en minúsculas o mayúsculas respectivamente. Escribe ahora este código y guárdalo
con un nombre de archivo como ejemplo4.php. A continuación, sube el fichero al servidor y
visualiza el resultado.
<?php //Ejemplo funciones básicas aprenderaprogramar.com
$cadena = "EstO eS UnA cadeNA de CARActeres";
echo strtolower($cadena);
echo "<br />";
echo strtoupper($cadena);
?>
Como vemos el comportamiento de las funciones es sencillo. Simplemente devuelven la
cadena de caracteres pasada como argumento en minúsculas o mayúsculas
respectivamente.
Ten en cuenta que muchas veces para realizar comparaciones o para almacenar datos será
interesante uniformizar la información que se almacena. Por ejemplo, si se pide una ciudad,
un usuario puede introducir Buenos Aires, otro Buenos aires, otro BUENOS AIRES. Si usamos
estas funciones, podemos uniformizar y hacer que siempre se muestren o guarden de una
misma manera, lo cual facilitará el trabajo posterior.
FUNCIÓN COUNT_CHARS Y SUBSTR_COUNT
La función count_chars sirve para contar el número de apariciones de un carácter en una
cadena.
La sintaxis a emplear es la siguiente:
count_chars ( $cadena, $opcModo)
$opcModo es un entero opcional. Si no se especifica vale 0 por defecto. Sus valores
admitidos son:
0: se devolverá un array con el valor numérico ascii como índice y la frecuencia de cada
carácter ascii como valor.
1: se devolverá un array con el valor numérico ascii como índice y la frecuencia de cada
carácter que aparezca al menos una vez como valor.
2: se devolverá un array de caracteres que no aparecen en la cadena, con el valor numérico
ascii como índice y la frecuencia de cada carácter ascii que no aparece como valor.
3: devuelve una cadena que contiene todos los caracteres únicos.
4: devuelve una cadena que contiene todos los caracteres no utilizados.
Nota: los códigos numéricos ascii van de 0 a 255 y no todos son visibles por pantalla.
Ejemplo:
<?php //Ejemplo count_chars aprenderaprogramar.com
$cadena = 'es jueves';
$miArray = count_chars ( $cadena, 1);
foreach ($miArray as $indiceNum => $veces) {
echo 'Letra: '.chr($indiceNum).' , encontrada '. $veces.' veces<br/>';
}
?>
El resultado esperado es: Letra: , encontrada 1 veces. Letra: e , encontrada 3 veces. Letra: j ,
encontrada 1 veces. Letra: s , encontrada 2 veces. Letra: u , encontrada 1 veces. Letra: v ,
encontrada 1 veces
Otra función útil es substr_count($cadena, $subcadena). Esta función nos devuelve el
número de veces que aparece la subcadena dentro de la cadena. Por ejemplo:
<meta charset="utf-8">
<?php //Ejemplo curso PHP aprenderaprogramar.com
$cadena1 = 'Pedro Juan Luis Marco Luis Pedro Juan Luis Pedro';
$cadena2 = 'Luis';
echo 'Luis aparece '.substr_count($cadena1, $cadena2). ' veces'
?>
El resultado esperado es <<Luis aparece 3 veces>>
OTRAS FUNCIONES PARA CADENAS DE TEXTO
PHP define numerosas funciones nativas para el manejo de cadenas de texto. Vamos a ver
algunas de ellas:
FUNCIÓN UTILIDADEJEMPLOS
aprenderaprogramar.com
strlen($cadena)Devuelve la longitud o número de caracteres
de la cadenaVer entregas anteriores del curso
substr ($cadena,
$inicio, $opcNumCar)
Si no se especifica $opcNumCar devuelve la
subcadena entre la posición $inicio y el fin de
cadena siendo la posición inicial la cero. Si se
especifica $opcNumCar extrae $opcNumCar
Ver entregas anteriores del curso
FUNCIÓN UTILIDADEJEMPLOS
aprenderaprogramar.com
caracteres desde la posición $inicio
(inclusive).
ucfirst($cadena);Devuelve la cadena con la primera letra en
mayúsculas
$saludo = "hoy es viernes";
ucfirst($saludo);
//Hoy es viernes
ucwords($cadena);Devuelve la cadena con cada una de sus
palabras con la primera letra en mayúsculas
$saludo = "hoy es viernes";
echo ucwords($saludo);
//Hoy Es Viernes
strpos ($cadena ,
$subCadena,
$opcPosInicio )
Devuelve la posición en que comienza la
subcadena a partir de la posición inicial (cero)
si no se especifica $opcPosInicio, o a partir de
la posición $opcPosInicio si se especifica. Si
no se encuentra la subcadena devuelve false.
$saludo = "hoy es viernes";
echo strpos($saludo, "es");
//4
trim ($cadena,
$opcCaracteres)
Si no se especifica $opcCaracteres, devuelve
la cadena eliminando espacios en blanco,
tabuladores, saltos de línea y retornos de carro
del principio y final de la cadena. Si se
especifica $opcCaracteres, se eliminan los
caracteres especificados.
$saludo = "*** hoy es viernes ***";
echo trim($saludo, "*");
//hoy es viernes
Nota: puede no funcionar como se
espera debido a juego de caracteres,
configuración local y configuración del
servidor.
ltrim ($cadena,
$opcCaracteres)
Si no se especifica $opcCaracteres, devuelve
la cadena eliminando espacios en blanco,
tabuladores, saltos de línea y retornos de carro
del principio de la cadena. Si se especifica
$opcCaracteres, se eliminan los caracteres
especificados.
$saludo = "*** hoy es viernes ***";
echo ltrim($saludo, "*");
//hoy es viernes ***
Nota: puede no funcionar como se
espera debido a juego de caracteres,
configuración local y configuración del
servidor.
rtrim ($cadena,
$opcCaracteres)
Si no se especifica $opcCaracteres, devuelve
la cadena eliminando espacios en blanco,
$saludo = "*** hoy es viernes ***";
echo rtrim($saludo, "*");
FUNCIÓN UTILIDADEJEMPLOS
aprenderaprogramar.com
tabuladores, saltos de línea y retornos de carro
del final de la cadena. Si se especifica
$opcCaracteres, se eliminan los caracteres
especificados.
//*** hoy es viernes
Nota: puede no funcionar como se
espera debido a juego de caracteres,
configuración local y configuración del
servidor.
chop Igual que rtrim
str_repeat($cadena,
$numVeces)
Devuelve la cadena repetida $numVeces
siendo éste un número entero.
$saludo = 'hola ';
str_repeat($saludo, 3);
//hola hola hola
strstr ($cadena, $desde,
$opcBoolean)
Devuelve la subcadena desde la primera
aparición de $desde (incluida) hasta el final si
no se especifica opcBoolean ó este es false. Si
$opcBoolean es true devuelve la subcadena
desde el inicio hasta la primera aparición de
$desde (excluida).
$saludo = "hoy es viernes";
echo strstr($saludo, "es", false);
//es viernes
strchr Igual que strstr
chr ($ascii)
Devuelve el carácter correspondiente al
código numérico entero $ascii según el código
ascii
echo chr(65). ' es la salida';
// A es la salida
Existen más funciones para cadenas en PHP pero los programadores no las suelen conocer
todas, ya que algunas son para tareas muy específicas. No te preocupes por memorizar las
funciones ni por conocerlas todas, simplemente sé consciente de su existencia y aprende a
buscarlas cuando te resulten necearias. Si en algún momento necesitas realizar tareas muy
específicas con cadenas en PHP puedes conocer todas las funciones existentes sobre
cadenas acudiendo a la documentación oficial de PHP sobre funciones de cadenas, disponible
en http://php.net/manual/es/ref.strings.php
EJERCICIO
Crear archivos php que ejecuten la tarea indicada:
a) Dada la cadena "El abecedario completo es algo largo y detallarlo exhaustivamente es
costoso", indicar cuántas veces aparece cada vocal usando funciones para cadenas PHP.
b) Dada la cadena "El abecedario completo es algo largo y detallarlo exhaustivamente es
costoso", indicar qué consonantes son las que aparecen y cuántas veces aparecen usando
funciones para cadenas PHP.
c) Dada la cadena "El abecedario completo es algo largo y detallarlo exhaustivamente es
costoso", mostrar la cadena donde todas las a hayan sido sustituídas por el símbolo *. Por
ejemplo en lugar de <<El abecedario…>> se habrá de mostrar <<El *beced*rio…>>
d) Dada la cadena "El abecedario completo es algo largo y detallarlo exhaustivamente es
costoso", mostrar la subcadena desde la primera aparición de <<completo>> excluyendo
completo, es decir, deberá mostrarse << es algo largo y detallarlo exhaustivamente es
costoso>>. Para ello usa una o varias funciones para cadenas PHP.
COMPARACIÓN DE CADENAS PHP
Cuando tengamos que comparar cadenas en PHP, se recomienda hacer uso de las funciones
nativas del lenguaje previstas para ello. Si se tratan de hacer comparaciones usando el
operador == se pueden obtener resultados extraños. Usar el operador === puede dar
mejores resultados, pero en general trataremos de usar funciones como strcmp previstas
específicamente para esto.
FUNCIÓN STRCMP
Esta función realiza la comparación segura de Strings y devuelve un valor numérico. Su
sintaxis habitual es la siguiente:
if (strcmp ($cadena1 , $cadena2 ) == 0) { … }
strcmp es sensible a mayúsculas y minúsculas, es decir, no considera igual Martes que
martes.
La función devuelve un valor numérico que puede ser:
0: cuando ambas cadenas son iguales. En caso contrario el valor devuelto es distinto de cero,
por lo que si queremos saber si dos cadenas son distintas podemos usar if (strcmp ($cadena1
, $cadena2 ) !== 0) { … }
Un valor numérico menor que 0 si la cadena 1 es menor que la cadena 2
Un valor numérico mayor que cero si la cadena 2 es mayor que la cadena 1.
¿Qué significa que una cadena sea mayor que otra? La comparación se hace en función de
los códigos numéricos equivalentes de cada carácter. Por ejemplo la letra A tiene código
numérico 65 y la letra a código numérico 97. Debido a que los códigos numéricos no
permiten una ordenación alfabética precisa (al no ordenar correctamente mayúsculas y
minúsculas, palabras con tilde, caracteres como la ñ, etc.), éste no es un buen medio para
ordenar alfabéticamente palabras y sólo tiene una utilidad limitada.
Los parámetros aportados a la función deben ser Strings. En caso de que algún parámetro no
sea una cadena de texto, el resultado que devuelve la función puede ser impredecible.
Escribe este código y visualiza los resultados que produce:
<meta charset="utf-8">
<?php //Ejemplos curso PHP aprenderaprogramar.com
$cadena1 = '1e3'; $cadena2 = '1000';
if ($cadena1 == $cadena2) {echo 'Según == las dos cadenas son iguales';}
else {echo 'Según == las dos cadenas NO son iguales'; }
echo '<br/>';
if ($cadena1 === $cadena2) {echo 'Según === las dos cadenas son iguales';}
else {echo 'Según === las dos cadenas NO son iguales'; }
echo '<br/>';
if (strcmp($cadena1, $cadena2) == 0) {echo 'Según strcmp las dos cadenas son iguales';}
else {echo 'Según strcmp las dos cadenas NO son iguales'; }
?>
El resultado será similar a este: Según == las dos cadenas son iguales, Según === las dos
cadenas NO son iguales, Según strcmp las dos cadenas NO son iguales.
Recordar que para hacer comparaciones seguras de cadenas de texto usaremos strcmp u
otra función PHP prevista para ello en lugar de los operadores == ó ===.
OTRAS FUNCIONES PARA COMPARAR CADENAS CON PHP
PHP define otras funciones nativas para comparar de cadenas de texto. Vamos a ver algunas
de ellas:
FUNCIÓN UTILIDAD EJEMPLOS aprenderaprogramar.com
strcasecmp
($cadena1 ,
$cadena2 )
Devuelve como resultado 0 si ambas
cadenas son iguales, o un valor numérico
menor o mayor de cero en caso contrario. No
diferencia entre mayúsculas y minúsculas.
$cadena1 = 'martes';
$cadena2 = 'Martes';
strcasecmp ($cadena1, $cadena2)
// Devuelve 0, son iguales
strncmp ($cadena1,
$cadena2,
Compara el número de caracteres numCaract
entre la cadena 1 y la cadena 2 teniendo en
$cadena1 = 'martes';
$cadena2 = 'Martes de feria';
FUNCIÓN UTILIDAD EJEMPLOS aprenderaprogramar.com
$numCaract)cuenta mayúsculas y minúsculas como
diferentes.
strncmp ($cadena1 , $cadena2 , 6)==0
// Devuelve false, no son iguales
strncasecmp
($cadena1 ,
$cadena2,
$numCaract)
Compara el número de caracteres numCaract
entre la cadena 1 y la cadena 2 sin tener en
cuenta mayúsculas y minúsculas.
$cadena1 = 'martes';
$cadena2 = 'Martes de feria';
strncasecmp ($cadena1 , $cadena2 , 6)
// Devuelve 0, son iguales
substr_compare
($cadena1,
$cadena2,
$posicionCad1,
$opcLongitud,
$opcBoolDiferencia)
Compara una subcadena de cadena 1 que
comienza en posición posicionCad. Se
compara hasta que una cadena termina si no
se especifica opcLongitud, o el número de
caracteres indicado si sí se especifica. Por
defecto diferencia mayúsculas y minúsculas,
pero estableciendo opcBoolDiferencia true
no distinguirá entre mayúsculas y
minúsculas.
$cadena1 = 'martes';
$cadena2 = 'Martes de feria';
substr_compare ($cadena1 , $cadena2 , 0,
strlen($cadena1), true)
// Devuelve 0, son iguales
RELLENO DE CADENAS CON STR_PAD
Esta función realiza un relleno de cadenas ampliando la cadena hasta una longitud
especificada y rellenándola con el carácter o caracteres especificados hasta dicha longitud.
La sintaxis es:
str_pad ( string $cadnea , int $nuevaLongitud $opcCarRelleno, opcTipoDeRelleno)
Donde opcCarRelleno es opcional e indica el carácter o caracteres de relleno que se
emplearán. Si no se especifica, se tomará el espacio en blanco como carácter de relleno.
opcTipoDeRelleno es opcional e indica cómo se rellenará hasta alcanzar la nueva longitud:
por la derecha, por la izquierda o por ambos lados. Los valores que puede tomar son:
STR_PAD_RIGHT, STR_PAD_LEFT, o STR_PAD_BOTH. Si no se especifica por defecto se
rellenará usando STR_PAD_RIGHT (por la derecha).
Escribe este código y comprueba los resultados:
<?php
$cadena='aprenderaprogramar.com';
echo '<p>'.str_pad($cadena,28,'*').'</p>';
echo '<p>'.str_pad($cadena,48,'cool!').'</p>';
echo '<p>'.str_pad($cadena,2,'a').'</p>';
echo '<p>'.str_pad($cadena,28,'*',STR_PAD_RIGHT).'</p>';
echo '<p>'.str_pad($cadena,29,'@',STR_PAD_BOTH).'</p>';
?>
El resultado esperado es:
aprenderaprogramar.com******
aprenderaprogramar.comcool!cool!cool!cool!cool!c
aprenderaprogramar.com
aprenderaprogramar.com******
@@@aprenderaprogramar.com@@@@
Fíjate que en este caso la longitud de la cadena es de 22 caracteres. Si le ponemos que la
nueva longitud es 29 y que rellene a ambos lados comienza colocando un carácter a derecha
y otro a izquierda, pero tras colocar 6 sólo le queda 1 por colocar y éste carácter queda a
derecha.
Existen más funciones para cadenas en PHP pero los programadores no las suelen conocer
todas, ya que algunas son para tareas muy específicas. Si en algún momento necesitas
realizar tareas muy específicas con cadenas en PHP puedes conocer todas las funciones
existentes acudiendo a la documentación oficial de PHP sobre funciones de cadenas,
disponible en http://php.net/manual/es/ref.strings.php
EJERCICIO
Crear archivos php que ejecuten la tarea indicada:
a) Dadas las cadenas "aprender" y "aprende", mostrar por pantalla la cadena rellena con * a
derecha e izquierda en un número de asteriscos que será siempre 5 a cada lado aunque se
cambien las cadenas.
b) Dadas las cadenas "aprender" y "aprende", mostrar por pantalla si sus tres primeros
caracteres son iguales o no usando una función de comparación de subcadenas.
c) Dada la cadena "ApRendEr A proGraMar.cOm" transformar la cadena a minúsculas y
rellenarla a derecha e izquierda con una longitud de asteriscos igual a la mitad de su longitud
si es par ó igual a la mitad de (su longitud más 1) si es impar. Mostrar por pantalla la cadena
en minúsculas y con el relleno indicado.
FUNCIONES PARA MANEJO DEL TIEMPO, FECHA Y HORAS PHP
Con frecuencia cuando creamos webs o apps tenemos que trabajar con fechas y calendarios.
Por ejemplo en la página web de un hotel o un restaurante es posible que trabajemos con
fechas y horas de comienzo de reserva, de fin de reserva, etc. PHP dispone de funciones
nativas para facilitar el trabajo con fechas, horas y tiempos.
El manejo del “tiempo” es un aspecto controvertido en la programación. La primera dificultad
y más obvia es que existen cientos de dispositivos electrónicos y no todos manejan la misma
fecha. Por ejemplo mi computador personal puede indicar que hoy es lunes 25 de enero de
2048 y la hora es las 12:35:44 mientras que el servidor al que estoy conectado, suponiendo
que está en mi misma ciudad, puede indicar que hoy es lunes 25 de enero de 2048 y la hora
es las 12:33:21. Otro servidor, en otro país, puede indicar que la fecha es domingo 24 de
enero de 2048 y la hora es las 23:51:15 debido a la diferencia horaria entre países. Aquí,
claro está, nos estaríamos refiriendo a horas locales. Para poder disponer de horas de
referencia globales para todo el mundo se crearon estándares como:
a) GMT o tiempo medio de Greenwich: ha sido un estándar ampliamente usado. GMT era el
tiempo medido en el observatorio británico de Greenwich, que se definió como meridiano
cero de la tierra. Así cada país podía expresar su hora en función de la hora del meridiano de
Greenwich. Por ejemplo GMT+0 indicaba que la hora era la misma que la hora oficial en el
meridiano de Greenwich, mientras que GMT+3 indicaba que la hora eran 3 horas más que en
el meridiano de Greenwich (es decir, si es Greenwich eran las 09:00 en un país cuya hora
fuera GMT+3 serían las 12:00).
b) UTC o tiempo universal coordinado: es el estándar que se ha adoptado como referencia
que indica un tiempo único independientemente de en qué lugar del planeta nos
encontremos, basado en las mediciones de relojes atómicos distribuidos por distintos países.
Es el estándar que se está imponiendo en los sistemas informáticos.
La circunferencia terrestre se dividió en 24 husos horarios de modo que cada huso quedaba
referenciado a un tiempo común (lo que se denominaba el tiempo de Greenwich).
Aunque desde el punto de vista de su definición técnica UTC y GMT no son lo mismo, a
efectos prácticos hablar de GMT+3 es lo mismo que hablar de UTC+3.
A pesar de este gran avance, el trabajo con el tiempo sigue presentando grandes dificultades
en los sistemas informáticos, tanto por la falta de sincronización entre dispositivos como por
la disparidad en cuanto a cómo medir el tiempo y con qué grado de precisión, existencia de
horarios de verano e invierno, etc. Por ello encontrarás que es relativamente frecuente
encontrar que a medida que los lenguajes de programación evolucionan vayan introduciendo
cambios en la forma de manejar el tiempo.
Una cuestión a tener en cuenta es que el tiempo oficial de Greenwich, tiempo GMT ó UTC, no
se corresponde con el tiempo local en Greenwich debido a la existencia del horario de
verano. Por ejemplo, Lisboa se encuentra en el huso horario de Greenwich, pero en verano la
hora local está adelantada una hora respecto al tiempo oficial de Greenwich por motivos de
ahorro energético. Esto da lugar a que el 5 de agosto a las 21:00 en Lisboa se corresponda
con el 5 de agosto 20:00 UTC debido al horario de verano, a pesar de que Lisboa se
encuentre en el mismo huso horaria que Greenwich.
FUNCIONES TIME Y DATE
Estas dos funciones nos permitirán mostrar o capturar la fecha y hora, lo cual tiene una gran
cantidad de aplicaciones. Por ejemplo, supón que tienes una tienda on-line y para cada
operación de venta tienes que registrar la fecha y hora de la venta. Estas funciones
resultarán útiles para ello.
La función time devuelve la hora GMT actual medida como el número de segundos desde el 1
de Enero de 1970 00:00:00 GMT (hora del meridiano de Greenwich) obtenidos a partir de la
hora actual local del servidor. Cuando hablamos de “hora actual del servidor” nos referimos a
una hora local, que es distinta según el país donde nos encontremos. En cambio la hora GMT
es única y no depende del país. Hay que tener cuidado con esta circunstancia. Por ejemplo, si
trabajas con un servidor localizado en Estados Unidos lo más probable es que el servidor
trabaje con la hora de Estados Unidos. Si quieres obtener la hora local de tu país, tendrás que
tenerlo en cuenta para restarle o sumarle cierto número de horas a la hora que te devuelva
el servidor.
Por otro lado, la función date muestra la fecha en el formato que le indiquemos.
En general, te recomendamos que hagas pruebas para comprobar que los resultados de
fecha y hora obtenidos son los adecuados, ya que la configuración de cada servidor y la
versión de PHP empleada puede afectar a los resultados.
Escribe ahora este código y guárdalo con un nombre de archivo como ejemplo2.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php //Ejemplo curso PHP aprenderaprogramar.com
$time = time();
echo date("d-m-Y (H:i:s)", $time);
?>
En este ejemplo hemos especificado como formato para mostrar la fecha d-m-Y (H:i:s)
(donde d representa día, m representa mes, Y representa año, H representa hora, i
representa minutos y s representa segundos) desde el valor de time u otra fecha dada en
segundos desde el 1 de Enero de 1970 00:00:00 GMT.
Como podemos observar, la función date da formato a la variable en segundos $time. Hay
distintos formatos para la función date, a continuación indicaremos los más importantes.
La función time() devuelve un valor numérico entero largo, por ejemplo 1335169779. Este
número representa el número de segundos transcurridos desde el 1 de enero de 1970
00:00:00 GMT.
Para transformar ese número en una fecha “entendible por las personas” usamos la función
date, cuya sintaxis general es: date (“formato de salida”, valorTimeValido)
En cuanto a valorTimeValido, será un número entero, generalmente contenido en una
variable.
En cuanto a “formato de salida”, disponemos de las siguientes equivalencias:
Para representar el día de la semana:
Carácter de
formatoSignificado aprenderaprogramar.com Valores que devuelve
d (minúscula) Día del mes, con 2 dígitos. Si es menor de 10, lleva un 0 inicial. 01 a 31
D (mayúscula) Texto representativo del día, con 3 letras y en inglésMon (lunes) hasta Sun
(domingo)
j (minúscula) Día del mes con un dígito (sin ceros iniciales) 1 a 31
l (letra ele
minúscula)Texto representativo del día, con todas las letras y en inglés
Monday (lunes) hasta
Sunday (domingo)
N (mayúscula)Representación numérica del día de la semana según ISO-8601,
siendo 1 el lunes y 7 el domingo1 (lunes) a 7 (domingo)
S (mayúscula) Sufijo para el día del mes en inglés st, nd, rd ó th
w (minúscula)Representación numérica del día de la semana siendo 0 domingo
y 6 el sábado0 a 6
z (minúscula)Día del año desde 0 hasta 365 (un año normal irá de 0 a 364 y
uno bisiesto de 0 a 365)0 a 365
Para representar el mes:
Carácter de
formatoSignificado aprenderaprogramar.com Valores que devuelve
F (mayúscula) Texto representativo del mes, con todas las letras y en inglésJanuary (enero) a December
(diciembre)
m (minúscula)Mes en formato numérico con dos dígitos, incluyendo cero
inicial si es menor que 1001 hasta 12
M (mayúscula) Texto representativo del mes, con tres letras iniciales en inglésJan (enero) hasta Dec
(diciembre)
n (minúscula) Mes en formato numérico con un dígito, sin ceros iniciales 1 hasta 12
t (minúscula) Número de días que tiene el mes 28 hasta 31
Para representar el año:
Carácter de
formatoSignificado aprenderaprogramar.com Valores que devuelve
L (mayúscula) Indica si un año es bisiesto o no (1 si es bisiesto, 0 si no lo es) 0 ó 1
Y (mayúscula) Año en formato numérico de 4 dígitos 1000 a 9999
y (minúscula) Año en formato numérico de 2 dígitos (los dos últimos del año)El que corresponda,
p.ej. 78
o (minúscula)Número de año según ISO-8601. En general devuelve el mismo
resultado que Y mayúscula1000 a 9999
Para representar la hora:
Carácter de
formatoSignificado aprenderaprogramar.com
Valores que
devuelve
a (minúscula)Incluye am ó pm en minúsculas detrás de la hora para indicar antes del
meridiano o pasado el meridianoam ó pm
A (mayúscula) Igual que a pero en mayúsculas AM ó PM
B (mayúscula)Hora internet, también llamada Swatch Internet Time o Biel Mean Time
(BMT), poco usada.000 a 999
g (minúscula) Número de hora desde 1 hasta 12 sin ceros iniciales 1 a 12
G (mayúscula) Número de hora desde 0 hasta 23 sin ceros iniciales 0 a 23
h (minúscula) Número de hora desde 01 hasta 12, con ceros iniciales 01 a 12
H (mayúscula) Número de hora desde 00 hasta 23, con ceros iniciales 00 hasta 23
i (minúscula) Minutos desde 00 hasta 59, con ceros iniciales 00 a 59
s (minúscula) Segundos desde 00 hasta 59, con ceros iniciales 00 a 59
Para representar la zona horaria:
Carácter de
formatoSignificado aprenderaprogramar.com
Valores que
devuelve
e (minúscula)Representa la zona horaria en inglés (p.ej. GMT, Atlantic/Azores,
America/Denver)Según corresponda
I (letra i Indica si se está en horario de verano (0 indica que no se está en horario de 0 ó 1
mayúscula) verano, 1 que sí se está en horario de verano).
O (letra o
mayúscula)
Indica la diferencia respecto a la zona horaria de Greenwich u hora GMT,
en horas con cuatro dígitos y símbolo.
Por ejemplo +0300
ó -0500
P (mayúscula)Indica la diferencia respecto a la zona horaria de Greenwich u hora GMT,
en horas con cuatro dígitos con separador dos puntos y símbolo.
Por ejemplo
+03:00 ó -05:00
T (mayúscula) Abreviatura de la zona horaria (abreviatura en inglés) Según corresponda
Z (mayúscula)Diferencia en segundos entre la hora utilizada y la hora UTC, con signo
positivo o negativo-43200 hasta 50400
Además disponemos de:
La letra W mayúscula para representar la semana del año según ISO-8601, considerando que
las semanas comienzan en lunes. Por ejemplo, un año tiene 52 semanas y con este formato
podemos obtener que estamos en la semana 24 del año.
La letra c minúscula para representar la fecha y hora completa en formato ISO-8601 (tipo
2089-03-12T12:19:21+03:00).
La letra r minúscula para representar la fecha y hora completa con formato RFC-2822 (tipo
Mon, 21 Jan 2089 11:41:05 -0300).
Escribe ahora este código y guárdalo con un nombre de archivo como ejemplo2bis.php. A
continuación, sube el fichero al servidor y visualiza el resultado.
<?php //Ejemplo curso PHP aprenderaprogramar.com
$time = time();
echo "<br/>";
echo $time;
echo "<br/>";
echo date("d-m-Y (H:i:s)", -3600);
echo "<br/>";
echo date("d-m-Y (H:i:s)", 0);
echo "<br/>";
echo date("d-m-Y (H:i:s)", 3600);
echo "<br/>";
echo date("Y-m-d (H:i:s)", $time);
echo "<br/>";
echo date("Y-m-d ", $time);
echo "<br/>";
echo ("Según el servidor la hora actual es: ". date("H:i:s", $time));
?>
Con este ejemplo podemos comprobar algunas cosas. En primer lugar, que la función time()
devuelve un número, mientras que la función date devuelve un String o cadena de texto.
En segundo lugar, que para obtener fechas anteriores al 1 de enero de 1970 debemos usar
números negativos.
En tercer lugar, que el momento 0 que es el 01-01-1970 00:00:00 GMT, cuando es mostrado
por un servidor concreto, es adaptado a su horario local. En el servidor del ejemplo, el horario
local es GMT + 01:00, es decir, su hora es la hora GMT +01:00, por eso nos devuelve como
hora cero la una de la mañana del 1 de enero de 1970. No te preocupes si te resulta un poco
confuso, simplemente ten en cuenta que debes hacer pruebas para ver cómo responde el
servidor con el que estés trabajando.
En cuarto lugar, que podemos hacer que la fecha se muestre en el formato u orden que
queramos, usando los términos clave “ d, m, Y, H, i, s” en el orden que queramos.
En quinto lugar, que podemos concatenar cómo se muestra una fecha (o almacenarla en otra
variable si quisiéramos) concatenando el resultado de la función date con una cadena de
texto cualquiera.
OTRAS FUNCIONES PARA FECHA, HORA Y TIEMPO PHP
PHP define otras funciones nativas para manejo de fechas, horas y tiempo. Vamos a ver
algunas de ellas:
FUNCIÓN UTILIDADEJEMPLOS
aprenderaprogramar.com
mktime(hora,min,seg,mes,dia,ano)
hora: 0 a 23
min y seg: 0 a 59
mes: 1 a 12
dia: 1 a 31
año: cuatro dígitos
Devuelve la hora UTC (GMT)
para una fecha local indicada,
expresada esta hora GMT en
segundos (el número de
segundos transcurridos desde el
1 de enero de 1970 00:00:00
GMT, valores negativos indican
momentos anteriores a esta
fecha). Si faltan uno o más
parámetros se tomarán los de la
fecha local actual de derecha a
izquierda. El valor obtenido
depende de la hora local del
echo "Tiempo Unix para el 15-Enero-
2089 a las 12h 0m 0s = " .
mktime(12,0,0,1,15,2089);
// Tiempo Unix para el 15-Enero-2089
a las 12h 0m 0s = 3753975600 (el
resultado variará según dónde esté
localizado el servidor, porque las 12 h
del 15 de enero de 2089 corresponden
a distintas fechas-horas GMT según
dónde se encuentre el servidor.
FUNCIÓN UTILIDADEJEMPLOS
aprenderaprogramar.com
servidor con el que estemos
trabajando.
gmmktime(hora,min,seg,mes,dia,ano)
hora: 0 a 23
min y seg: 0 a 59
mes: 1 a 12
dia: 1 a 31
año: cuatro dígitos
Devuelve la hora UTC (GMT)
expresada en segundos para una
fecha GMT indicada en los
argumentos recibidos. El valor
devuelto es el número de
segundos transcurridos desde el
1 de enero de 1970 00:00:00
GMT, valores negativos indican
momentos anteriores a esta
fecha. Si faltan uno o más
parámetros se tomarán los de la
fecha GMT actual de derecha a
izquierda. El valor obtenido no
depende del servidor, ya que la
hora GMT es única.
gmmktime(12,0,0,1,15,2089)
// 3756628800 independientemente de
la hora local del servidor
Nota: tener en cuenta que usamos UTC ó GMT como si fueran equivalentes.
Para entender cómo las funciones time y mktime trabajan con tiempo local hemos realizado
la siguiente prueba. Hemos colocado el siguiente código en un servidor en Denver (USA), y
en un servidor en Madrid (España):
echo "Tiempo Unix para el 15-Enero-2089 a las 12h 0m 0s = " . mktime(12,0,0,1,15,2089);
El resultado obtenido en Denver (USA) es 3756654000
El resultado obtenido en Madrid (España) es 3756625200
¿Por qué obtenemos un resultado diferente?
La diferencia entre uno y otro tiempo es de 28800 segundos, que equivalen a 8 horas.
Hemos comprobado la hora en Denver en el momento de realizar el test y eran las 06:20:00
de la mañana, mientras que en Madrid eran las 14:20:00 horas. Como vemos, tenemos una
diferencia horaria de 8 horas entre Denver y Madrid.
Cuando en Madrid son las 12:00 horas del 15 de enero de 2089, en Denver serán las 04:00
horas del 15 de enero de 2089. Las 12:00 horas de un día tienen lugar en distintos instantes
de tiempo en Denver y en Madrid, por eso los resultados indican que cuando son las 12 horas
en Denver ha transcurrido más tiempo desde las 0 horas del 1 de enero de 1970 GMT que
cuando son las 12 horas en Madrid, o dicho de otra manera, las 12 horas de un día tienen
lugar antes en Madrid que en Denver. El tiempo Unix sí será igual si pedimos el valor
mktime(4,0,0,1,15,2089) en Denver: obtendremos 3756625200, el mismo resultado que en
Madrid a las 12 del mediodía. Esto indica que ese instante de tiempo (4 de la mañana de 15
de enero de 2089 en Denver y 12 de la mañana de la misma fecha en Madrid) es el mismo
instante, es decir, podríamos estar hablando por teléfono dos personas en ese momento,
siendo las 4 de la mañana en Denver y las 12 en Madrid.
Si pedimos la hora en Madrid para el 1 de enero de 1970 a las 00:00:00 de 1970 nos
devuelve <<Tiempo Unix para el 1 de enero de 1970 a las 00:00:00 = -3600>> ¿Qué
significa -3600? Este valor está referido al tiempo UTC e indica qué adelanto o atraso (en
segundos) tiene la hora local respecto al tiempo UTC. O dicho de otro modo, cuánto tiempo
ha transcurrido desde las 00:00 horas del 1 de enero de 1970 UTC dada una fecha local.
Cuando en Madrid son las 00:00:00 del 1 de enero de 1970 en el tiempo UTC de referencia
(podemos pensar que es la hora en Greenwich, meridiano de referencia, aunque esto no es
exacto) decimos que faltan 3600 segundos (1 hora) para llegar al 1 de enero de 1970. El
valor negativo indica que la fecha es anterior al 1 de enero de 1970 00:00:00 GMT, y en
concreto en este caso serían las 23 horas del 31 de diciembre de 1969 GMT cuando en
Madrid son las 00:00:00 horas del 1 de enero de 1970.
Si pedimos la hora en Denver para el 1 de enero de 1970 a las 00:00:00 de 1970 nos
devuelve <<Tiempo Unix para el 1 de enero de 1970 a las 00:00:00 = 25200>> ¿Qué
significa 25200? Este valor está referido al tiempo UTC e indica que cuando en Denver son
las 00:00:00 del 1 de enero de 1970 el tiempo UTC de referencia está 7 horas por delante, es
decir, a las 0 horas en Denver son las 7 horas UTC.
-3600 segundos equivalen a 1 hora por delante de GMT. En invierno en Madrid la hora local
es GMT+0100
25200 segundos equivalen a 7 horas por detrás de GMT. En invierno en Denver la hora local
es GMT-0700
Tener en cuenta que la hora UTC (GMT) es única (la indicada por los organismos
internacionales encargados), mientras que las hora locales varían según el país, e incluso
según la zona de un país en que nos encontremos.
Existen más funciones para fechas y tiempo en PHP pero los programadores no las suelen
conocer todas, ya que algunas son para tareas muy específicas. No te preocupes por
memorizar las funciones ni por conocerlas todas, simplemente sé consciente de su existencia
y aprende a buscarlas cuando te resulten necearias. Si en algún momento necesitas realizar
tareas muy específicas con tiempo y fechas en PHP puedes conocer todas las funciones
existentes sobre esta materia acudiendo a la documentación oficial de PHP sobre fecha y
hora, disponible en http://php.net/manual/es/ref.datetime.php
EJERCICIO
Crea un documento HTML que conste de un título h1 con el texto <<Calendario>>. En la
página deberá mostrarse el mes y año actuales (en el momento en que hagas el ejercicio) y
para cada día del mes, indicar si es lunes, martes, miércoles, jueves, viernes, sábado o
domingo.
Ejemplo: suponiendo que hagas el ejercicio en mayo de 2050, debería mostrarse:
Día 1: Domingo, Día 2: Lunes, Día 3: Martes, Día 4: Miércoles, … etc. hasta Día 31: Martes.
Ampliación voluntaria del ejercicio: si tienes conocimiento de maquetación con HTML y CSS
te proponemos que cambies el aspecto para que en lugar de mostrarse como texto, el
calendario se muestre con aspecto de calendario habitual. Para la maquetación puedes usar
una tabla de 7 columnas por 7 filas (total 49 celdas) con ancho de tabla 300 píxeles y tamaño
de fuente en la tabla 24 píxeles. La primera columna corresponderá a lunes y la última a
domingo como mostramos en el siguiente ejemplo.
El aspecto, suponiendo que te encuentras en el mes de mayo de 2050, sería el siguiente:
MAYO DE 2050
Lu MaMi Ju Vi Sa Do
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31
Ten en cuenta que debe generarse el calendario del mes en que te encuentres según la hora
local del sistema (de tu servidor).
FUNCIONES PARA EXPRESAR FECHAS EN UN LENGUAJE
PHP es un lenguaje con marcada influencia anglosajona debido a sus orígenes y desarrollo.
Pero cuando estamos creando páginas web es frecuente que queremos obtener fechas
expresadas en el lenguaje con el que estamos desarrollando la web. Vamos a estudiar cómo
hacerlo.
SETLOCALE
La función setlocale es una función PHP utilizada para indicar la configuración regional que
debe ser usada para realizar determinadas tareas. Su sintaxis es la siguiente:
setlocale ( $procesosAfectados, $codConfiguracion1, $ codConfiguracion2, … , $ codConfiguracionN);
También se admite: setlocale ( $procesosAfectados, $arrayDeCodigosDeConfiguracion);
Esta función pretende que por ejemplo en lugar de 2089 July, Mon 21st pueda aparecer algo
como “21 de julio de 2089” si lo deseamos. Para ello indicaríamos que el proceso afectado es
la fecha y que la configuración es el español: setlocale (LC_TIME, "es_ES");
Esta idea, aparentemente buena, se topa con numerosas dificultades en la práctica:
a) No todos los servidores admiten todo tipo de cambios.
b) Según el servidor que estemos utilizando, será posible usar unos lenguajes o no.
c) La comunicación entre las aplicaciones web y otros entornos como bases de datos se
puede ver afectada y pueden surgir problemas.
d) No todos los servidores admiten el mismo nombre – código de configuración
e) Más problemas que no vamos a citar aquí.
En resumen, debes tener presente que el cambio de la configuración local del servidor puede
ser compleja o no responder como cabría esperar: podrás ver miles de consultas en foros
sobre este tipo de problemas, y muchas de ellas sin respuesta. Es recomendable hacer
pruebas y si es necesario programar pequeños scripts o funciones para lograr el
funcionamiento que nosotros deseamos. Con esto queremos decir que puede resultar más
sencillo trabajar del modo natural tal y como esté configurado el servidor, en lugar de tratar
de alterar esta configuración para que el servidor trabaje en nuestro idioma.
Los valores posibles para $procesosAfectados son los siguientes:
Valor $procesosAfectados Aplicación
LC_ALL Para todos los procesos
LC_COLLATE Para la comparación de strings
LC_CTYPE Para la clasificación y conversión de caracteres, por ejemplo cuando se use strtoupper()
LC_MONETARY Afecta a aspectos como el símbolo de moneda, separador de miles, etc.
LC_NUMERIC Para el separador decimal y otros aspectos como signos.
LC_TIME Para el formato de fecha y hora que se mostrará al usar la función strftime()
LC_MESSAGES Para las respuestas del sistema.
Nosotros en este curso vamos a limitarnos a estudiar y ver un ejemplo de uso para mostrar
fechas usando la función de php strftime que estudiaremos a continuación combinada con el
uso de setlocale con LC_TIME. El uso de setlocale puede tener efectos colaterales (afectar a
otros procesos) por lo que recomendamos no usarlo sin hacer pruebas exhaustivas para
verificar la respuesta esperada.
Los códigos de países dependen del sistema operativo con el que estemos trabajando. La
función setLocale admite que se introduzca una lista de códigos de países con la esperanza
de que algunos de ellos sea reconocido por el sistema (lo cual habla ya de las dificultades
que se encuentran para realizar este tipo de operaciones).
A continuación señalamos algunas formas de códigos de algunos países:
País Código (*) Otro código (*)
México es_MX.UTF-8 es_MX
España es_ES.UTF-8 es_ES
Argentina es_RA.UTF-8 es_RA
Colombia es_CO.UTF-8 es_CO
Venezuela es_VE.UTF-8 es_VE
Perú es_PE.UTF-8 es_PE
Chile es_CL.UTF-8 es_CL
Guatemala es_GT.UTF-8 es_GT
Ecuador es_EC.UTF-8 es_EC
Cuba es_CU.UTF-8 es_CU
País Código (*) Otro código (*)
Bolivia es_RB.UTF-8 es_RB
República Dominicana es_DO.UTF-8 es_DO
Honduras es_HN.UTF-8 es_HN
El Salvador es_SV.UTF-8 es_SV
Paraguay es_PY.UTF-8 es_PY
Nicaragua es_NI.UTF-8 es_NI
Costa Rica es_CR.UTF-8 es_CR
Puerto Rico es_PR.UTF-8 es_PR
Panamá es_PA.UTF-8 es_PA
Uruguay es_UY.UTF-8 es_UY
Guinea Ecuatorial es_GQ.UTF-8 es_GQ
(*) Tener en cuenta que no todos los códigos funcionarán, ya que depende del servidor con el
que estemos trabajando el que sean reconocidos o no. Recomendamos usar es_ES.UTF-8.
Hay más códigos aparte de los aquí indicados.
El ejemplo de uso de setlocale lo veremos a continuación junto al de la función strftime.
FUNCIÓN STRFTIME PHP
La función strftime es una función PHP utilizada para obtener una cadena de texto expresada
en el lenguaje de la configuración local del servidor (por defecto o establecida a través de
setlocale). Su sintaxis es la siguiente:
strftime ($cadenaConMarcas, $valorTiempoEnSegundos)
$valorTiempoEnSegundos indica los segundos transcurridos desde el 1 de enero de 1970
00:00:00 GMT.
Si se omite $valorTiempoEnSegundos se toma el valor correspondiente a la hora actual local
del servidor.
El valor $cadenaConMarcas hace referencia al uso de códigos especiales que devuelven un
determinado resultado. Por ejemplo echo strftime (Hoy es %A); nos devolverá “Hoy es lunes”
si la configuración de idioma del servidor es español, ó “Hoy es monday" si la configuración
de idioma del servidor es inglés, ya que el código %A equivale a “día de la semana”.
Otro ejemplo: echo 'Fecha actual: '.strftime("%A, %d de %B de %Y").'<br/>'; devolverá algo
similar a <<jueves, 04 de septiembre de 2089>> si la configuración de idioma del servidor
es español.
En la siguiente tabla se resumen los códigos disponibles:
Uso para Código Descripción Ejemplo valores devueltos
Día %a Día, en forma abreviada Dom hasta Sab
Día %A Día, completo Domingo hasta Sábado
Día %dEl día del mes con dos dígitos (con ceros
iniciales)01 a 31
Día %eEl día del mes, con un espacio precediendo si <
10.1 a 31
Día %j Día del año, 3 dígitos con ceros iniciales 001 a 366
Día %uRepresentación numérica ISO-8601 del día de
semana1 (para Lunes) hasta 7 (para Domingo)
Día %w Representación numérica del día de la semana 0 (para Domingo) hasta 6 (para Sábado)
Semana %UNúmero de semana del año dado, comenzando
con el primer Domingo como primera semana13 (para la 13ª semana del año)
Semana %V Número de semana según ISO-8601 01 hasta 53
Semana %WNúmero de semana del año, comenzando con el
primer Lunes como la primera semana46 (para la 46ª semana del año)
Mes %b Nombre del mes abreviado Ene hasta Dic
Mes %B Nombre del mes completo Enero hasta Diciembre
Mes %h Nombre del mes abreviado, igual que %b Ene hasta Dic
Mes %m Representación de dos dígitos del mes 01 (para Enero) hasta 12 (para Diciembre)
Año %CRepresentación de dos dígitos del siglo (año
dividido entre 100, truncado a un entero)19 para el Siglo XX
Año %gRepresentación de dos dígitos del año según ISO-
8601Ejemplo: 89 para 6 de Enero de 2089
Año %G La versión de cuatro dígitos completa de %g Ejemplo: 2089 para 13 de Enero de 2089
Año %y Representación de dos dígitos del año Ejemplo: 09 para 2009, 79 para 1979
Año %Y Representación de cuatro dígitos del año Ejemplo: 2038
Hora %H Representación de dos dígitos de la hora 00 hasta 23
Hora %kRepresentación de dos dígitos de la hora, con un
espacio precediendo a los dígitos simples0 hasta 23
Hora %I Representación de dos dígitos de la hora 01 hasta 12
Hora %l (ele)La hora en formato de 12 horas, con un espacio si
< 101 hasta 12
Hora %M Representación de dos dígitos de los minutos 00 hasta 59
Hora %p'AM' o 'PM' en MAYÚSCULAS basados en la
hora dadaEjemplo: AM para 00:31, PM para 22:23
Hora %P 'am' o 'pm' en minúsculas basados en la hora dada Ejemplo: am para 00:31, pm para 22:23
Hora %r Lo mismo que "%I:%M:%S %p" Ejemplo: 09:34:17 PM para 21:34:17
Hora %R Lo mismo que "%H:%M" Ejemplo: 16:44 para 4:44 PM
Hora %S Representación de dos dígitos de los segundos 00 hasta 59
Hora %T Lo mismo que "%H:%M:%S" Ejemplo: 21:34:17 para 09:34:17 PM
Hora %XRepresentación preferida de la hora basada en la
configuración regional, sin la fechaEjemplo: 03:59:16 o 15:59:16
Hora %z El índice de la zona horaria. Ejemplo: -0500 para Hora Este de EEUU
Hora %Z La abreviatura de la zona horariaEjemplo: EST para Hora del Este de
EEUU
Fecha y hora %cMarca preferida de la fecha y hora basadas en la
configuración regional
Ejemplo: Tue Feb 5 00:45:10 2009 para
el 5 de Febrero de 2009 a las 12:45:10
AM
Fecha y hora %D Lo mismo que "%m/%d/%y" Ejemplo: 02/05/89, 5 de Febrero de 2089
Fecha y hora %FLo mismo que "%Y-%m-%d" (normalmente
usado en las marcas de fecha de bases de datos)Ejemplo: 2089-02-05 para 5 Febrero 2089
Fecha y hora %xRepresentación preferida de la fecha basada en la
configuración local, sin la hora
Ejemplo: 02/05/09 para el 5 de Febrero de
2009
Además de las marcas indicadas existen otras como %n para insertar un salto de línea ó %t
para insertar una tabulación.
Ten en cuenta que no todos los servidores disponen de todos los códigos ni todos los
servidores responderán como se espera cuando trates de hacer que muestren una fecha en
un formato dado. Por ejemplo algunos servidores no admiten %p ni %P, en este caso si
intentas que se muestre AM/PM no se mostrará nada. Tendrás que resolverlo escribiendo
código específico para lograrlo.
Para probar el funcionamiento de esta función, en combinación con setlocale, escribe este
código y comprueba qué resultados obtienes:
<meta charset='utf-8'>
<?php
$miFecha= gmmktime(12,0,0,1,15,2089);
echo 'Antes de setlocale strftime devuelve: '.strftime("%A, %d de %B de %Y", $miFecha).'<br/>';
echo 'Antes de setlocale date devuelve: '.date("l, d-m-Y (H:i:s)", $miFecha).'<br/>';
setlocale(LC_TIME,"es_ES");
echo 'Después de setlocale es_ES date devuelve: '.date("l, d-m-Y (H:i:s)", $miFecha).'<br/>';
echo 'Después de setlocale es_ES strftime devuelve: '.strftime("%A, %d de %B de %Y", $miFecha).'<br/>';
setlocale(LC_TIME, 'es_ES.UTF-8');
echo 'Después de setlocale es_ES.UTF-8 date devuelve: '.date("l, d-m-Y (H:i:s)", $miFecha).'<br/>';
echo 'Después de setlocale es_ES.UTF-8 strftime devuelve: '.strftime("%A, %d de %B de %Y", $miFecha).'<br/>';
setlocale(LC_TIME, 'de_DE.UTF-8');
echo 'Después de setlocale de_DE.UTF-8 date devuelve: '.date("l, d-m-Y (H:i:s)", $miFecha).'<br/>';
echo 'Después de setlocale de_DE.UTF-8 strftime devuelve: '.strftime("%A, %d de %B de %Y", $miFecha).'<br/>';
?>
El resultado que nosotros hemos obtenido con un servidor ubicado en Denver (USA) es el
siguiente:
Antes de setlocale strftime devuelve: Saturday, 15 de January de 2089
Antes de setlocale date devuelve: Saturday, 15-01-2089 (05:00:00)
Después de setlocale es_ES date devuelve: Saturday, 15-01-2089 (05:00:00)
Después de setlocale es_ES strftime devuelve: s�bado, 15 de enero de 2089
Después de setlocale es_ES.UTF-8 date devuelve: Saturday, 15-01-2089 (05:00:00)
Después de setlocale es_ES.UTF-8 strftime devuelve: sábado, 15 de enero de 2089
Después de setlocale de_DE.UTF-8 date devuelve: Saturday, 15-01-2089 (05:00:00)
Después de setlocale de_DE.UTF-8 strftime devuelve: Samstag, 15 de Januar de 2089
Nota: comprueba que usas como codificación para tu archivo php “Codificación UTF-8 sin
BOM”. Ten en cuenta que los resultados que obtengas pueden ser distintos a estos ya que
dependen de la configuración que tenga establecida tu servidor.
Vamos a comentar los resultados obtenidos:
Hemos creado la variable $miFecha cuyo contenido es el número de segundos desde el 1 de
enero de 1970 00:00:00 GMT para la fecha 15 de enero de 2089 12:00:00 GMT. Como la hora
local tiene un retraso de 7 horas respecto de la hora GMT, al pedir que se muestre por
pantalla la fecha y hora con strftime se nos muestra <<Saturday, 15 de January de 2089>>.
Este valor nos viene en inglés porque la configuración local del servidor es “idioma inglés”.
Al cambiar la configuración local de idioma con setlocale a es_ES obtenemos la fecha en
español, pero en lugar de sábado se nos muestra s?bado. La función date sigue devolviendo
la fecha en inglés porque esta función no es sensible a la configuración local de idioma.
Al cambiar la configuración local de idioma con setlocale a 'es_ES.UTF-8' ya obtenemos la
fecha correctamente escrita en español.
A modo de ejemplo, hemos cambiado la configuración a alemán para comprobar lo que se
visualiza (la fecha escrita en alemán).
Podríamos haber escrito setlocale(LC_TIME, 'es_ES','es_ES.UTF-8'); ¿Qué ocurrirá en este
caso? Se tomará el primer código reconocido dentro de la lista de códigos. En este caso
es_ES es un código reconocido, aunque no es el que nos da los resultados deseados.
Como vemos, el trabajo relacionado con fecha, hora e idioma puede resultar problemático y
no tenemos más remedio que realizar pruebas hasta obtener el resultado deseado.
FUNCIÓN DATE_DEFAULT_TIMEZONE_SET PHP
La función date_default_timezone_set es una función PHP utilizada para establecer una zona
horaria específica como configuración local para el servidor. De esta manera, podemos hacer
que al pedir la fecha y hora actual nos muestre la fecha y hora de un país (o región de un
país) concreto. Su sintaxis es la siguiente:
date_default_timezone_set ($valorDeTimezone);
La configuración así establecida afectará a todas las funciones de fecha y hora.
Los valores de $valorDeTimezone han de escogerse entre los valores admitidos. En la
siguiente tabla se muestran algunos de ellos (nota: algunos valores pueden no ser
reconocidos, recomendamos hacer pruebas para comprobarlo):
Zonas horarias para México, España y Argentina:
País Zona Zona Zona
México America/Mexico_City America/Hermosillo America/Matamoros
America/Cancun America/Tijuana America/Mazatlan
America/Merida America/Santa_Isabel America/Chihuahua
America/Monterrey America/Bahia_Banderas America/Ojinaga
España Europe/Madrid Atlantic/Canary
Argentina America/Argentina/Buenos_Aires America/Argentina/Tucuman America/Argentina/Mendoza
America/Argentina/Cordoba America/Argentina/Catamarca America/Argentina/San_Luis
America/Argentina/Salta America/Argentina/La_Rioja America/Argentina/Rio_Gallegos
America/Argentina/Jujuy America/Argentina/San_Juan America/Argentina/Ushuaia
Zonas horarias para otros países:
País Zona País Zona
Colombia America/Bogota Honduras America/Tegucigalpa
Venezuela America/Caracas El Salvador America/El_Salvador
Perú America/Lima Paraguay America/Asuncion
Chile America/Santiago ó Pacific/Easter Nicaragua America/Managua
Guatemala America/Guatemala Costa Rica America/Costa_Rica
Ecuador America/Guayaquil ó Pacific/Galapagos Puerto Rico America/Puerto_Rico
Cuba America/Havana Panamá America/Panama
Bolivia America/La_Paz Uruguay America/Montevideo
República Dominicana America/Santo_Domingo Guinea Ecuatorial Africa/Malabo
Para probar el funcionamiento de esta función, en combinación con setlocale, escribe este
código y comprueba qué resultados obtienes:
<meta charset='utf-8'>
<?php
$miFecha= gmmktime(12,0,0,1,15,2089);
setlocale(LC_TIME, 'es_ES.UTF-8');
echo 'Después de setlocale es_ES.UTF-8 strftime devuelve: '.strftime("%A, %d de %B de %Y %H:%M", $miFecha).'<br/>';
echo 'Fecha actual: '.strftime("%A, %d de %B de %Y %H:%M").'<br/>';
date_default_timezone_set ('Europe/Madrid');
echo 'Establecida zona horaria Europe/Madrid obtenemos: '.strftime("%A, %d de %B de %Y %H:%M", $miFecha).'<br/>';
echo 'Ahora fecha actual es: '.strftime("%A, %d de %B de %Y %H:%M").'<br/>';
?>
El resultado que nosotros hemos obtenido con un servidor ubicado en Denver (USA) es el
siguiente:
Después de setlocale es_ES.UTF-8 strftime devuelve: sábado, 15 de enero de 2089 05:00
Fecha actual: jueves, 04 de septiembre de 2044 04:31
Establecida zona horaria Europe/Madrid obtenemos: sábado, 15 de enero de 2089 13:00
Ahora fecha actual es: jueves, 04 de septiembre de 2044 12:31
Fíjate cómo de obtener la hora local en Denver hemos pasado a obtener la hora local en
Madrid (8 horas adelantada respecto a la de Denver) gracias al uso de
date_default_timezone_set.
No siempre se obtienen los resultados deseados, por lo que es imprescindible realizar
pruebas.
EJERCICIO 1
Crea una función php de nombre mostrarDiasMes que reciba como argumentos un mes (valor
numérico de 1 a 12) y un año (valor numérico de 4 dígitos) y muestre por pantalla el texto
“extendido” correspondiente a la fecha en idioma español. Por ejemplo mostrarDiasMes(1,
2089) deberá devolver: 1 de enero de 2089, 2 de enero de 2089, 3 de enero de 2089, 4 de
enero de 2089… hasta 31 de enero de 2089”.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
EJERCICIO 2
Repite el ejercicio anterior, pero en esta ocasión mostrando la fecha en formato de hora tal y
como se usa en Holanda y en idioma holandés.
FORMAS DE ENVÍO DE LOS DATOS DE UN FORMULARIO. MÉTODOS GET Y POST.
EJEMPLOS
Cuando un usuario rellena un formulario en una página web los datos hay que enviarlos de
alguna manera. Vamos a considerar las dos formas de envío de datos posibles: usando el
método POST o usando el método GET. Debes conocer cómo se generan formularios HTML
antes de leer esta entrega.
Por ejemplo: <form action="http://aprenderaprogramar.com/prog/newuser.php"
method="get"> podría ser el encabezado de un formulario donde se usa el método get.
En el ejemplo anterior la acción que se ejecutará cuando el usuario pulse el botón “Enviar”
(submit) será el envío de los datos a la url especificada usando el método get.
Veamos el aspecto de un formulario cualquiera para hacernos una idea general.
Este formulario consta de varios campos que al usuario se le solicitan como Nombre,
Apellidos, Correo electrónico, País y Mensaje. Posiblemente los nombres de los campos en el
código HTML sean del tipo nombre_user, apellidos_user, email_user, pais_user y msg.
Un formulario se escribe en HTML. Si no tienes claro cómo se generan formularios HTML, te
recomendamos leas el curso HTML desde cero de aprenderaprogramar.com. Por ejemplo,
este es el código de un formulario:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo del uso de formularios - aprenderaprogramar.com</title>
</head>
<body>
<form method="get" action="action.php">
Selecciona tus intereses:
<br />
<input name="cbipeliculas" type="checkbox" />Películas
<br />
<input name="cbilibros" type="checkbox" checked="checked" />Libros
<br />
<input name="cbiinternet" type="checkbox" />Internet
</form>
</body>
</html>
La diferencia entre los métodos get y post radica en la forma de enviar los datos a la página
cuando se pulsa el botón “Enviar”. Mientras que el método GET envía los datos usando la
URL, el método POST los envía de forma que no podemos verlos.
Un resultado usando el método GET sería el siguiente:
http://aprenderaprogramar.com/newuser.php?
nombre=Pepe&apellido=Flores&email=h52turam%40uco.es&sexo=Mujer
En esta URL podemos distinguir varias partes: http://aprenderaprogramar.com/newuser.php
es la dirección web en sí.
El símbolo ? indica dónde empiezan los parámetros que se reciben desde el formulario que
ha enviado los datos a la página.
Las parejas dato1=valor1, dato2=valor2, dato3=valor3… reflejan son el nombre y el valor de
los campos enviados por el formulario.
Por ejemplo: nombre=Pepe, apellidos=Flores, etc. nos dice que el campo del formulario que
se denomina nombre llega con valor “Pepe” mientras que el campo del formulario que se
denomina apellidos llega con valor “Flores”
Tener en cuenta que para separar la primera pareja se usa el símbolo ‘?’ y para las restantes
el símbolo ‘&’.
Otro aspecto a tener en cuenta es que determinados caracteres no son recibidos en la URL
de la misma forma exactamente en que fueron escritos en el formulario. Por ejemplo, el valor
del campo email que se recibe en la URL es h52turam%40uco.es, mientras que el usuario en
el formulario habrá introducido con toda seguridad [email protected] . Como vemos, el
carácter @ ha sido sustituido por los caracteres %40. Estas equivalencias se introducen
automáticamente en la transmisión de datos debido a que las URLs no admiten determinados
caracteres como letras con tildes, arrobas y otros. No debes preocuparte por esta
codificación, ya que si posteriormente rescatamos los valores mediante otros mecanismos
volveremos a obtener el texto original. Simplemente, conviene conocer esta circunstancia
para no pensar que están ocurriendo cosas extrañas o errores.
Hemos visto el resultado de un envío por el método get. En el caso de un envío de datos
usando el método POST, aunque estos datos también serán enviados (de una forma que
podemos denominar “oculta”), no los podremos ver en la URL. Para poder recuperar los
valores de los campos en el caso de un envío con el método post necesitaríamos otras
herramientas (por ejemplo valernos del lenguaje PHP para recuperar el valor de esos
campos).
El resultado final con ambos métodos podemos decir que es el mismo: la información se
transmite de un lado a otro. La diferencia radica en que con el método GET podemos ver
directamente los parámetros pasados ya que están dentro de la URL mientras que con el
método POST los parámetros quedan ocultos y para rescatarlos hay que usar otras
herramientas.
Un ejemplo de uso del método post sería este: <form
action="http://aprenderaprogramar.com/prog/newuser.php" method="post">
Cuando usamos el método post los datos enviados desde el formulario no son visibles, pero
sí son recuperables usando las instrucciones adecuadas.
EJERCICIO
Crea un archivo HTML que contenga un formulario que contenga un checkbox (¿Desea recibir
factura?), dos input radio (Varón/Mujer), tres input tipo texto (Nombre, Dirección, Email) y un
combobox para forma de envío (normal, por avión o urgente), junto con un botón de envío.
Establece como url de envío la dirección recibe.php y método de envío get y comprueba que
se recuperan los datos enviados correctamente a través de la url.
RECUPERAR DATOS DE FORMULARIOS. VARIABLES $_REQUEST, $_GET y $_POST
Cuando un usuario pulsa el botón enviar de un formulario, la información que contenían sus
campos es enviada a una dirección URL desde donde tendremos que recuperarla para
tratarla de alguna manera. Por ejemplo, si realiza una compra, tendremos que recuperar los
datos para completar el proceso de pago. La información del formulario “viaja” almacenada
en variables que podremos recuperar y utilizar mediante PHP.
La recuperación de variables con PHP es bastante fácil, ya sean datos de un formulario
enviado por el método post (parámetros no visibles) o por el método get (parámetros en la
URL sí visibles). Antes que nada hay que aclarar que hay varios métodos para recuperar
variables con PHP. Para los formularios tenemos los métodos GET, POST, y REQUEST.
RECUPERAR VARIABLES CON GET
GET nos permite recuperar parámetros desde la URL o desde formularios enviados con el
método GET.
Escribe este código y guárdalo con un nombre de archivo como ejemplo1.html. A
continuación, sube el fichero al servidor, introduce un nombre en el campo del formulario y
visualiza el resultado.
<form name="formulario"method="get"action="ejemploGet.php">
Nombre: <input type="text"name="nombre"value="">
<input type="submit"/>
</form>
Antes de pulsar sobre el botón enviar, debemos crear el fichero ejemploGet.php que es el
indicado en el formulario para el envío de los datos.
Escribe este código y guárdalo con un nombre de archivo como ejemploGet.php. A
continuación, sube el fichero al servidor en la misma carpeta donde subiste el ejemplo1.html
<?php //Ejemplo aprenderaprogramar.com
$nombre = $_GET['nombre'];
echo$nombre;
?>
Fíjate que la instrucción $_GET['nombreDelParametro'] sirve para recuperar la información
recibida.
Una vez completemos el paso anterior, pulsaremos sobre el botón enviar del ejemplo1.html y
veremos una imagen similar a la siguiente.
Vamos a explicar el proceso que ha tenido lugar.
El primer archivo es un documento HTML. Para ser más correctos, deberíamos haberlo escrito
de esta manera:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title>
</head>
<body>
<form name="formulario"method="get"action="ejemploGet.php">
Nombre: <input type="text"name="nombre"value="">
<input type="submit"/>
</form>
</body>
</html>
Sin embargo, comprobamos que los navegadores tratan de interpretar y mostrar el resultado
de un código HTML (o PHP) incluso cuando la sintaxis o la definición del documento no es del
todo correcta. Esto debemos conocerlo, sin embargo recomendamos que siempre se trate de
ser lo más correctos posibles a la hora de escribir código web.
Vemos que hemos definido un formulario en cuya cabecera hemos puesto que el método de
envío de los datos va a ser el método get y que la URL de destino va a ser ejemploGet.php. A
su vez, el formulario tiene un campo cuyo atributo name es “nombre”. Ese atributo define el
nombre de la variable que vamos a poder recuperar en la URL de destino.
En el archivo php hemos incluido la línea $nombre = $_GET['nombre']; que significa que
creamos una variable php denominada $nombre donde almacenamos la información del
campo ‘nombre’ que recibe la URL a través del método get proviniente del formulario. Si
tuviéramos otros campos que hubiéramos definido como apellidos, teléfono, edad, el
tratamiento sería similar. Por ejemplo:
$apellidos = $_GET['apellidos'];
$telefono = $_GET['celular'];
$edadPersona = $_GET['edad'];
Fíjate en que una cosa es la variable en la que almacenamos la información recuperada, y
otra cosa es el nombre del campo del formulario de donde proviene. Por ejemplo en
$apellidos = $_GET['apellidos']; coinciden el nombre de la variable que utilizamos con el
nombre del campo del formulario. Sin embargo, en $telefono = $_GET['celular']; no
coinciden. En este caso, el campo que proviene del formulario se llama ‘celular’ mientras que
la información que venga en ese campo la almacenamos en una variable a la que hemos
llamado $telefono. Finalmente, en $edadPersona = $_GET['edad']; estamos almacenando en
una variable a la que hemos llamado $edadPersona la información proviniente de un campo
del formulario denominado ‘edad’.
Con frecuencia los nombres de las variables y de los campos del formulario se hacen
coincidir, pero en otras ocasiones no. Esto queda a elección del programador.
Como podemos observar, recuperar datos enviados por un formulario con el método GET es
bastante simple usando PHP.
EJERCICIO RESUELTO Nº 1
Diseñar un formulario web que pida la altura y el diámetro de un cilindro en metros. Una vez
el usuario introduzca los datos y pulse el botón calcular, deberá calcularse el volumen del
cilindro y mostrarse el resultado en el navegador.
SOLUCIÓN
La solución esquematizada en pseudocódigo es la siguiente:
1. Inicio [Ejemplo en pseudocódigo - aprenderaprogramar.com]
2. Mostrar “Introduzca el diámetro, en metros” : Pedir D
3. Mostrar “Introduzca la altura, en metros” : Pedir H
4. R = D/2 : Pi = 3,141593
5. V = Pi * (R ^ 2) * H
6. Mostrar “El volumen del cilindro es de”, V, “metros cúbicos”
7. Fin
Esquematizar la solución en pseudocódigo es una buena idea antes de realizar la
programación, pues nos permite definir conceptualmente cómo va a ser nuestro código antes
de escribirlo. Es sobre todo adecuado para personas que se están iniciando en la
programación.
En primer lugar, crearemos el archivo html con el formulario.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title>
<meta charset="utf-8">
</head>
<body>
<form name="formularioDatos"method="get"action="ejemploGet1.php">
<p>CÁLCULO DEL VOLUMEN DE UN CILINDRO </p>
<br/>
Introduzca el diámetro en metros: <input type="text"name="diam"value="">
<br/> <br/>
Introduzca la altura en metros: <input type="text"name="altu"value="">
<br/> <br/>
<input value="Calcular" type="submit" />
</form>
</body>
</html>
Por otro lado, crearemos el archivo php con el tratamiento de datos:
<?php //Ejemplo aprenderaprogramar.com
$diametro = $_GET['diam'];
$altura = $_GET['altu'];
$radio = $diametro/2;
$Pi = 3.141593;
$volumen = $Pi*$radio*$radio*$altura;
echo"<br/> El volumen del cilindro es de". $volumen. "metros cúbicos";
?>
Fíjate que hemos escrito la potencia del radio como $radio * $radio. En otros lenguajes existe
el operador de exponenciación, pero en php esta operación se tiene que realizar recurriendo
a una función matemática. Esta función la estudiaremos en otro momento.
Finalmente obtenemos un resultado. Haz pruebas introduciendo como valores de diámetro y
altura 2,15 y 1,75 en vez de 2.15 y 1.75. Posiblemente no obtengas un resultado adecuado si
usas las comas, ya que en PHP el separador de la parte decimal de un número es el punto.
EJERCICIO RESUELTO Nº 2
Diseñar un desarrollo web simple con php que pida al usuario el precio de tres productos en
tres establecimientos distintos denominados “Tienda 1”, “Tienda 2” y “Tienda 3”. Una vez se
introduzca esta información se debe calcular y mostrar el precio medio del producto.
SOLUCIÓN
La solución esquematizada en pseudocódigo es la siguiente:
1. Inicio [Ejemplo en pseudocódigo - aprenderaprogramar.com]
2. Mostrar “Introduzca el precio del producto en el establecimiento número 1, en euros” : Pedir Precio1
3. Mostrar “Introduzca el precio del producto en el establecimiento número 2, en euros” : Pedir Precio2
4. Mostrar “Introduzca el precio del producto en el establecimiento número 3, en euros” : Pedir Precio3
5. Media = (Precio1 + Precio2 + Precio3) / 3
6. Mostrar “El precio medio del producto es”, Media, “euros”
7. Fin
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title>
<meta charset="utf-8">
</head>
<body>
<form name="formularioDatos" method="get" action="ejemploGet2.php">
<p> CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO </p>
<br/>
Introduzca el precio del producto en el establecimiento número 1, en euros: <input type="text"
name="precio1" value="">
<br/> <br/>
Introduzca el precio del producto en el establecimiento número 1, en euros: <input type="text"
name="precio2" value="">
<br/> <br/>
Introduzca el precio del producto en el establecimiento número 3, en euros: <input type="text"
name="precio3" value="">
<br/> <br/>
<input value="Calcular" type="submit" />
</form>
</body>
</html>
Es posible que durante el desarrollo del curso te encuentres visualizaciones de este tipo,
donde podrás comprobar que los acentos o tildes no se ven bien.
Recordarte que la solución a esto es, cuando estamos trabajando con Notepad++, elegir en
el menú Formato la opción “Codificar en UTF-8 sin BOM”. En caso de que por error el archivo
esté en otro formato, elige la opción “Convertir en UTF-8 sin BOM” para dejar correctamente
la codificación del archivo. También puede ser necesario introducir la etiqueta: <meta
charset="utf-8"> entre las etiquetas <head> … </head> para lograr que la visualización sea
correcta.
Por otro lado necesitamos el archivo php para mostrar los resultados. El código sería:
<?php //Ejemplo aprenderaprogramar.com
$precio1 = $_GET['precio1'];
$precio2 = $_GET['precio2'];
$precio3 = $_GET['precio3'];
$media = ($precio1+$precio2+$precio3)/3;
echo "<br/> DATOS RECIBIDOS";
echo "<br/> Precio producto establecimiento 1: ". $precio1. " euros";
echo "<br/> Precio producto establecimiento 2: ". $precio2. " euros";
echo "<br/> Precio producto establecimiento 2: ". $precio3. " euros <br/>";
echo "<br/> El precio medio del producto es de ". $media. " euros";
?>
¿DESDE DÓNDE SE RECUPERAN LOS DATOS?
Si has realizado el ejercicio anterior habrás comprobado que la URL una vez se pulsa el botón
de envío del formulario es de este tipo:
http://www.aprenderaprogramar.com/ejemploGet2.php?
precio1=18.55&precio2=21&precio3=27.55
Aquí podemos comprobar que los datos están en la URL. Ahora bien, los datos venían del
formulario. ¿Desde dónde se están recuperando los datos? Para responder a esta pregunta
escribe una URL de este tipo:
http://www.aprenderaprogramar.com/ejemploGet2.php?
precio1=10&precio2=15&precio3=20
DATOS RECIBIDOS
Precio producto establecimiento 1: 10 euros
Precio producto establecimiento 2: 15 euros
Precio producto establecimiento 2: 20 euros
El precio medio del producto es de 15 euros
Llegamos a una conclusión: los datos pasan del formulario a la URL, y desde la URL son
recuperados por el intérprete PHP usando $_GET[‘nombreDelParametro’]. Por tanto los datos
no vienen directamente del formulario, sino que son recuperados a través de la URL.
EJERCICIO PROPUESTO
Diseñar un desarrollo web simple con PHP que dé respuesta a la necesidad que se plantea a
continuación.
Un operario de una fábrica recibe cada cierto tiempo un depósito cilíndrico de dimensiones
variables, que debe llenar de aceite a través de una toma con cierto caudal disponible. Se
desea crear una aplicación web que le indique cuánto tiempo transcurrirá hasta el llenado del
depósito. El caudal disponible se considera estable para los tiempos que tardan los llenados
de depósitos y lo facilita el propio operario, aportando el dato en litros por minuto.
ORIENTACIÓN PARA LA SOLUCIÓN
La solución esquematizada en pseudocódigo es la siguiente:
1. Inicio
2. Mostrar “Introduzca el caudal disponible en litros / minuto”: Pedir Q
3. Mostrar “Introduzca el diámetro del depósito, en metros” : Pedir D
4. Mostrar “Introduzca la altura del depósito, en metros” : Pedir H
5. Pi = 3,141593
6. R = D / 2
7. V = Pi * (R ^ 2) * H : Vlitros = V * 1000
8. tminutos = Vlitros / Q
9. Mostrar “El tiempo que transcurrirá hasta el llenado del depósito es de”, tminutos, “minutos”
10. Fin
Realiza el ejercicio y comprueba los resultados. Para que tengas una referencia, si el caudal
disponible es de 125 litros por minuto y los valores de diámetro y altura del cilindro son 2.15
y 1.75, el resultado que debes obtener es que el depósito tarda en llenarse será de
aproximadamente 50 minutos.
RECUPERAR DATOS DEL FORMULARIO. $_POST
Cuando un usuario pulsa el botón enviar de un formulario, la información que contenían sus
campos es enviada a una dirección URL desde donde tendremos que recuperarla para
tratarla de alguna manera. Por ejemplo, si realiza una compra, tendremos que recuperar los
datos para completar el proceso de pago. La información del formulario “viaja” almacenada
en variables que podremos recuperar y utilizar mediante PHP. Una de las formas de
recuperación consiste en usar $_POST.
RECUPERAR VARIABLES CON POST
POST nos permite recuperar datos enviados desde formularios con el método POST.
Escribe este código y guárdalo con un nombre de archivo como ejemplo1.html. A
continuación, sube el fichero al servidor, introduce un nombre en el campo y visualiza el
resultado.
<form name="formulario" method="post" action="ejemploPost.php">
Nombre: <input type="text" name="nombre" value="">
<input type="submit" />
</form>
Antes de pulsar sobre el botón enviar, debemos crear el fichero ejemploPost.php que es el
indicado en el formulario para el envío de los datos.
Escribe este código y guárdalo con un nombre de archivo como ejemploPost.php. A
continuación, sube el fichero al servidor en la misma carpeta donde subiste el fichero html.
<?php
$nombre = $_POST['nombre'];
echo $nombre;
?>
Una vez completemos el paso anterior, pulsaremos sobre el botón enviar del ejemplo1.html y
veremos una imagen similar a la siguiente.
Vamos a explicar el proceso que ha tenido lugar.
El primer archivo es un documento HTML. Para ser más correctos, deberíamos haberlo escrito
de esta manera:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title>
<meta charset="utf-8">
</head>
<body>
<form name="formulario" method="post" action="ejemploPost.php">
Nombre: <input type="text" name="nombre" value="">
<input type="submit" />
</form>
</body>
</html>
Sin embargo, comprobamos que los navegadores tratan de interpretar y mostrar el resultado
de un código HTML (o PHP) incluso cuando la sintaxis o la definición del documento no es del
todo correcta. Esto debemos conocerlo, sin embargo recomendamos que siempre se trate de
ser lo más correctos posibles a la hora de escribir código web.
Vemos que hemos definido un formulario en cuya cabecera hemos puesto que el método de
envío de los datos va a ser el método post y que la URL de destino va a ser ejemploPost.php.
A su vez, el formulario tiene un campo cuyo atributo name es “nombre”. Ese atributo define
el nombre de la variable que vamos a poder recuperar en la URL de destino.
En el archivo php hemos incluido la línea $nombre = $_POST['nombre']; que significa que
creamos una variable php denominada $nombre donde almacenamos la información del
campo ‘nombre’ a través del método post proveniente del formulario. Si tuviéramos otros
campos que hubiéramos definido como apellidos, teléfono, edad, el tratamiento sería similar.
Por ejemplo:
$apellidos = $_POST['apellidos'];
$telefono = $_POST['celular'];
$edadPersona = $_POST['edad'];
Fíjate en que una cosa es la variable en la que almacenamos la información recuperada, y
otra cosa es el nombre del campo del formulario de donde proviene. Por ejemplo en
$apellidos = $_POST['apellidos']; coinciden el nombre de la variable que utilizamos con el
nombre del campo del formulario. Sin embargo, en $telefono = $_POST['celular']; no
coinciden. En este caso, el campo que proviene del formulario se llama ‘celular’ mientras que
la información que venga en ese campo la almacenamos en una variable a la que hemos
llamado $telefono. Finalmente, en $edadPersona = $_POST['edad']; estamos almacenando
en una variable a la que hemos llamado $edadPersona la información proveniente de un
campo del formulario denominado ‘edad’.
Con frecuencia los nombres de las variables y de los campos del formulario se hacen
coincidir, pero en otras ocasiones no. Esto queda a elección del programador.
Como podemos observar, recuperar datos enviados por un formulario con el método POST es
bastante simple usando PHP.
EJERCICIO RESUELTO Nº 1
Diseñar un formulario web que pida la altura y el diámetro de un cilindro en metros. Una vez
el usuario introduzca los datos y pulse el botón calcular, deberá calcularse el volumen del
cilindro y mostrarse el resultado en el navegador.
SOLUCIÓN
La solución esquematizada en pseudocódigo es la siguiente:
1. Inicio
2. Mostrar “Introduzca el diámetro, en metros” : Pedir D
3. Mostrar “Introduzca la altura, en metros” : Pedir H
4. R = D/2 : Pi = 3,141593
5. V = Pi * (R ^ 2) * H
6. Mostrar “El volumen del cilindro es de”, V, “metros cúbicos”
7. Fin
Esquematizar la solución en pseudocódigo es una buena idea antes de realizar la
programación, pues nos permite definir conceptualmente cómo va a ser nuestro código antes
de escribirlo. Es sobre todo adecuado para personas que se están iniciando en la
programación.
En primer lugar, crearemos el archivo html con el formulario.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title>
<meta charset="utf-8">
</head>
<body>
<form name="formularioDatos" method="post" action="ejemploPost1.php">
<p> CÁLCULO DEL VOLUMEN DE UN CILINDRO </p>
<br/>
Introduzca el diámetro en metros: <input type="text" name="diam" value="">
<br/> <br/>
Introduzca la altura en metros: <input type="text" name="altu" value="">
<br/> <br/>
<input value="Calcular" type="submit" />
</form>
</body>
</html>
Por otro lado, crearemos el archivo php con el tratamiento de datos:
<?php //Ejemplo aprenderaprogramar.com
$diametro = $_POST['diam'];
$altura = $_POST['altu'];
$radio = $diametro/2;
$Pi = 3.141593;
$volumen = $Pi*$radio*$radio*$altura;
echo "<br/> El volumen del cilindro es de". $volumen. "metros cúbicos";
?>
Fíjate que hemos escrito la potencia del radio como $radio * $radio. En otros lenguajes existe
el operador de exponenciación, pero en php esta operación se tiene que realizar recurriendo
a una función matemática. Esta función la estudiaremos en otro momento.
Finalmente obtenemos un resultado. Haz pruebas introduciendo como valores de diámetro y
altura 2,15 y 1,75 en vez de 2.15 y 1.75. Posiblemente no obtengas un resultado adecuado si
usas las comas, ya que en PHP el separador de la parte decimal de un número es el punto.
EJERCICIO RESUELTO Nº 2
Diseñar un desarrollo web simple con php que pida al usuario el precio de tres productos en
tres establecimientos distintos denominados “Tienda 1”, “Tienda 2” y “Tienda 3”. Una vez se
introduzca esta información se debe calcular y mostrar el precio medio del producto.
SOLUCIÓN
La solución esquematizada en pseudocódigo es la siguiente:
1. Inicio
2. Mostrar “Introduzca el precio del producto en el establecimiento número 1, en euros” : Pedir Precio1
3. Mostrar “Introduzca el precio del producto en el establecimiento número 2, en euros” : Pedir Precio2
4. Mostrar “Introduzca el precio del producto en el establecimiento número 3, en euros” : Pedir Precio3
5. Media = (Precio1 + Precio2 + Precio3) / 3
6. Mostrar “El precio medio del producto es”, Media, “euros”
7. Fin
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Ejemplo aprenderaprogramar.com</title>
<meta charset="utf-8">
</head>
<body>
<form name="formularioDatos" method="post" action="ejemploPost2.php">
<p> CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO </p>
<br/>
Introduzca el precio del producto en el establecimiento número 1, en euros: <input type="text" name="precio1" value="">
<br/> <br/>
Introduzca el precio del producto en el establecimiento número 1, en euros: <input type="text" name="precio2" value="">
<br/> <br/>
Introduzca el precio del producto en el establecimiento número 3, en euros: <input type="text" name="precio3" value="">
<br/> <br/>
<input value="Calcular" type="submit" />
</form>
</body>
</html>
Es posible que durante el desarrollo del curso te encuentres visualizaciones de este tipo,
donde podrás comprobar que los acentos o tildes no se ven bien.
Recordarte que la solución a esto es, cuando estamos trabajando con Notepad++, elegir en
el menú Formato la opción “Codificar en UTF-8 sin BOM”. En caso de que por error el archivo
esté en otro formato, elige la opción “Convertir en UTF-8 sin BOM” para dejar correctamente
la codificación del archivo. También puede ser necesario introducir la etiqueta: <meta
charset="utf-8"> entre las etiquetas <head> … </head> para lograr que la visualización sea
correcta.
Por otro lado necesitamos el archivo php.
<?php //Ejemplo aprenderaprogramar.com
$precio1 = $_POST['precio1'];
$precio2 = $_POST['precio2'];
$precio3 = $_POST['precio3'];
$media = ($precio1+$precio2+$precio3)/3;
echo "<br/> DATOS RECIBIDOS";
echo "<br/> Precio producto establecimiento 1: ". $precio1. " euros";
echo "<br/> Precio producto establecimiento 2: ". $precio2. " euros";
echo "<br/> Precio producto establecimiento 2: ". $precio3. " euros <br/>";
echo "<br/> El precio medio del producto es de ". $media. " euros";
?>
EJERCICIO PROPUESTO
Diseñar un desarrollo web simple con PHP que dé respuesta a la necesidad que se plantea a
continuación.
Un operario de una fábrica recibe cada cierto tiempo un depósito cilíndrico de dimensiones
variables, que debe llenar de aceite a través de una toma con cierto caudal disponible. Se
desea crear una aplicación web que le indique cuánto tiempo transcurrirá hasta el llenado del
depósito. El caudal disponible se considera estable para los tiempos que tardan los llenados
de depósitos y lo facilita el propio operario, aportando el dato en litros por minuto.
ORIENTACIÓN PARA LA SOLUCIÓN
La solución esquematizada en pseudocódigo es la siguiente:
1. Inicio
2. Mostrar “Introduzca el caudal disponible en litros / minuto”: Pedir Q
3. Mostrar “Introduzca el diámetro del depósito, en metros” : Pedir D
4. Mostrar “Introduzca la altura del depósito, en metros” : Pedir H
5. Pi = 3,141593
6. R = D / 2
7. V = Pi * (R ^ 2) * H : Vlitros = V * 1000
8. tminutos = Vlitros / Q
9. Mostrar “El tiempo que transcurrirá hasta el llenado del depósito es de”, tminutos, “minutos”
10. Fin
Realiza el ejercicio y comprueba los resultados. Para que tengas una referencia, si el caudal
disponible es de 125 litros por minuto y losvalores de diámetro y altura del cilindro son 2.15 y
1.75, el resultado que debes obtener es que el depósito tarda en llenarse será de
aproximadamente 50 minutos.
Leer y escribir archivos de texto con PHP.
Función fopen (modo), fgets, fputs, fclose y
feof. Ejemplo (CU00836B)
Escrito por Enrique González
Resumen: Entrega nº36 del Tutorial básico del programador web: PHP desde
cero.
Codificación aprenderaprogramar.com: CU00836B
INTRODUCCIÓN AL MANEJO DE ARCHIVOS CON PHP.
Cuando necesitamos crear, guardar, leer o escribir archivos en la creación de sitios web, el
manejo de éstos se convierte en una prioridad. Para ello, vamos a ver una serie de funciones
y algunos ejemplos para familiarizarnos con el manejo de archivos a nivel básico en php.
FUNCIÓN FOPEN
La función fopen() sirve para abrir ficheros (archivos). Su sintaxis general:
<?php //Ejemplo aprenderaprogramar.com
$fp = fopen(fichero, modoDeApertura);
?>
Donde $fp es el descriptor o identificador del fichero abierto que necesitaremos más tarde.
fichero puede ser un archivo de texto, un archivo con extensión .php, o incluso la URL de una
página web (por ejemplo http://www.paginaweb.com/). “Abrir” una web con fopen() puede
ser muy útil cuando queremos comprobar si la web existe, o si está activa.
Si fichero empieza con "http://", se abre una conexión hacia la web especificada. Siempre
debe ponérsele una barra ( / ) al final.
Si fichero empieza con “ftp://", se abre una conexión al servidor especificado.
Si fichero no empieza con ninguna de las cosas anteriormente dichas, se abre una conexión
"directa" con el archivo especificado. Si no existe el archivo o dirección especificadas, se
devuelve un error.
Hay distintos modos de apertura de archivos, vamos a ver los más habituales.
A la hora de abrir un archivo, hay que saber de qué forma queremos abrirlo. Podemos abrirlo
para escritura y lectura, pero de distintas formas:
Modo Observaciones
r Abre el archivo sólo para lectura. La lectura comienza al inicio del archivo.
r+ Abre el archivo para lectura y escritura. La lectura o escritura comienza al inicio del archivo.
w Abre el archivo sólo para escritura. La escritura comienza al inicio del archivo, y elimina el contenido
previo. Si el archivo no existe, intenta crearlo.
w+ Abre el archivo para escritura y lectura. La lectura o escritura comienza al inicio del archivo, y elimina el
contenido previo. Si el archivo no existe, intenta crearlo.
a Abre el archivo para sólo escritura. La escritura comenzará al final del archivo, sin afectar al contenido
previo. Si el fichero no existe se intenta crear.
a+ Abre el archivo para lectura y escritura. La lectura o escritura comenzará al final del fichero, sin afectar al
contenido previo. Si el fichero no existe se intenta crear.
Ejemplos
<?php //Ejemplo aprenderaprogramar.com
$fp = fopen("/apr2/fichero.txt", "r");
$fp = fopen("/apr2/fichero2.txt", "w");
$fp = fopen("http://www.aprenderaprogramar.com/texto.txt", "a+");
$fp = fopen("ftp://ftp.elmundo.es/fichero.txt", "w");
?>
Ahora bien, con esta simple instrucción sólo tendremos el archivo abierto para leer, escribir,
o leer y escribir. Pero ahora tendremos que hacer uso de las otras instrucciones para escribir
o recuperar los datos que estimemos oportunos.
FUNCIÓN FCLOSE
La función fclose(identificadorDelFichero) cierra un archivo abierto.
Esta función debe ser utilizada después de abrir y manipular el archivo como veremos en los
siguientes ejemplos.
FUNCIONES FGETS Y FEOF
La función fgets() recupera el contenido de una línea de un archivo. Su sintaxis general es:
<?php
//Ejemplo aprenderaprogramar.com
fgets(descriptorDelFichero);
?>
Ejemplo
<?php
// Ejemplo aprenderaprogramar.com
// Leemos la primera línea de fichero.txt
// fichero.txt tienen que estar en la misma carpeta que el fichero php
// fichero.txt es un archivo de texto normal creado con notepad, por ejemplo.
$fp = fopen("fichero.txt", "r");
$linea = fgets($fp);
fclose($fp);
?>
Ahora bien, con esto sólo leeremos la primera línea del fichero de texto, si quisiéramos leer
línea a línea hasta el final necesitaríamos el uso de un bucle while, por ejemplo.
<?php // Ejemplo aprenderaprogramar.com
// Iremos leyendo línea a línea del fichero.txt hasta llegar al fin (feof($fp))
// fichero.txt tienen que estar en la misma carpeta que el fichero php
// fichero.txt es un archivo de texto normal creado con notepad, por ejemplo.
$fp = fopen("fichero.txt", "r");
while(!feof($fp)) {
$linea = fgets($fp);
echo $linea . "<br />";
}
fclose($fp);
?>
Esto nos mostrará el contenido del fichero de texto línea a línea. Comprobarás que hemos
incluido una nueva función denominada feof (que viene significando algo así como file end of
file o “marca de final de archivo”). La sintaxis general para esta función es: feof
(identificadorDelArchivo)
La función feof nos devuelve true cuando hemos llegado al final de archivo y false si no lo
hemos alcanzado todavía. La condición while (!feof($fp)) podríamos haberla escrito también
de la siguiente manera: while (feof($fp)==false) . Esta sintaxis es equivalente, puedes
utilizar la que prefieras, pero debes acostumbrarte a entender ambas formas de escritura.
Finalmente, fíjate como una vez hemos de terminado de operar con el fichero escribimos la
instrucción fclose(identificadorDelFichero) para cerrar la conexión, cosa que debemos hacer
siempre.
FUNCIÓN FPUTS
La función fputs() escribe una línea en un archivo. Su sintaxis general es:
<?php //Ejemplo aprenderaprogramar.com
fputs(descriptorDelFichero, cadena);
?>
Ejemplo
<?php // Ejemplo aprenderaprogramar.com
// Escribimos una primera línea en fichero.txt
// fichero.txt tienen que estar en la misma carpeta que el fichero php
$fp = fopen("fichero.txt", "w");
fputs($fp, "Prueba de escritura aprenderaprogramar.com");
fclose($fp);
?>
Fíjate que al realizar la apertura del fichero en modo w, si el fichero no existe, será creado.
Fíjate también como una vez hemos de terminado de operar con el fichero escribimos la
instrucción fclose(identificadorDelFichero) para cerrar la conexión, cosa que debemos hacer
siempre.
Si ahora abrimos el fichero con algún editor de textos como Notepad, Bloc de notas o
cualquier otro, veremos lo siguiente:
EJERCICIO
Crea las siguientes funciones en PHP:
a) Una función (tipo procedimiento, no hay valor devuelto) denominada escribirTresNumeros
que reciba tres números enteros como parámetros y proceda a escribir dichos números en
tres líneas en un archivo denominado datosEjercicio.txt. Si el archivo no existe, debe crearlo.
b) Una función denominada obtenerSuma (tipo función, devolverá un valor numérico) que
reciba una ruta de archivo como parámetro, lea los números existentes en cada línea del
archivo, y devuelva la suma de todos esos números.
c) Una función denominada obtenerArrNum (tipo función, devolverá un array de valores
numéricos) que reciba una ruta de archivo como parámetro, lea los números existentes en
cada línea del archivo, y devuelva un array cuyo índice 0 contendrá el número existente en la
primera línea, cuyo índice 1 contendrá el número existente en la segunda línea y así
sucesivamente.
d) Crea código php donde a través de la función escribirTresNumeros escribas en el fichero
los números 2, 8, 14. Luego, mediante la función obtenerSuma muestra por pantalla el
resultado de sumar los números existentes en el archivo. Finalmente, mediante la función
obtenerArrNum obtén el array, recórrelo y muestra cada uno de los elementos del array.
fwrite PHP. Lectura y escritura fichero txt.
Modo acceso. PHP_EOL salto de línea.
Ejercicio ejemplo (CU00837B)
Escrito por Enrique González
Resumen: Entrega nº37 del Tutorial básico del programador web: PHP desde
cero.
Codificación aprenderaprogramar.com: CU00837B
LECTURA Y ESCRITURA DE ARCHIVOS DE TEXTO CON PHP.
En esta ocasión veremos unos ejemplos prácticos de lectura y escritura de ficheros de texto
usando PHP. El primer lugar, debemos crear un archivo de texto (con cualquier editor,
notepad por ejemplo, aunque también puede valer el bloc de notas de Windows) con algunas
líneas de texto.
LECTURA DE FICHEROS
Para leer un archivo de texto línea a línea en PHP vamos a utilizar la función fgets(). Por
ejemplo si queremos leer línea por línea el archivo 'archivo.txt' que se encuentra ubicado en
la misma carpeta que el archivo 'leer.php', tenemos que escribir en el archivo PHP:
<?php //Ejemplo aprenderaprogramar.com
$file = fopen("archivo.txt", "r");
while(!feof($file)) {
echo fgets($file). "<br />";
}
fclose($file);
?>
Como podemos observar, lo primero que debemos hacer es abrir el fichero 'archivo.txt' y
luego ir leyendo línea a línea hasta llegar al final. Recordemos que “r” es el modo de
apertura que abre el archivo sólo para lectura. La lectura comienza al inicio del archivo.
Después cerramos el fichero.
Con esto conseguiremos mostrar por pantalla el contenido del fichero 'archivo.txt' tal y como
podemos ver en la siguiente imagen de ejemplo.
El contenido del fichero de texto “archivo.txt” se supone que era el siguiente:
Prueba de escritura de aprenderaprogramar.com
esto es una linea de texto
esto es una linea de texto
esto es una linea de texto
esto es una linea de texto
esto es una linea de texto
fin de la prueba de aprenderaprogramar.com
Lo que hemos hecho con nuestro pequeño programa es ir extrayendo líneas mientras no se
detecta el final del fichero (feof). La condición while(!feof($file)) también podría haberse
escrito de esta otra manera: while(feof($file)==false), con lo que obtendríamos el mismo
resultado.
ESCRITURA DE FICHEROS
Para escribir un archivo de texto en PHP podemos utilizar la función fwrite(). Por ejemplo si
queremos escribir línea por línea un archivo 'archivo.txt' que se encuentre ubicado en la
misma carpeta que el archivo 'escribir.php', tenemos que escribir en el archivo PHP:
<?php //Ejemplo aprenderaprogramar.com, archivo escribir.php
$file = fopen("archivo.txt", "w");
fwrite($file, "Esto es una nueva linea de texto" . PHP_EOL);
fwrite($file, "Otra más" . PHP_EOL);
fclose($file);
?>
Nota: PHP_EOL (end of line) introduce un salto de línea en PHP. Mediante la concatenación
con un punto forzamos el salto de línea después del texto introducido.
Una vez escribimos en nuestro navegador la ruta del fichero escribir.php se ejecuta el código
asociado. Después de la ejecución, podemos ver el fichero creado con un editor de texto
cualquiera y observaremos el siguiente contenido:
Tener en cuenta que el modo de apertura de archivo que hemos usado es w. Si recordamos
el significado de este modo:
w: Abre el archivo sólo para escritura. La escritura comienza al inicio del archivo, y elimina el
contenido previo del archivo. Si el archivo no existe, intenta crearlo.
AÑADIR CONTENIDO A UN FICHERO DE TEXTO
A veces no queremos reemplazar el contenido que exista en un fichero de texto, sino añadir
un contenido adicional al final de lo que ya exista en el mismo. Vamos a ver cómo podemos
hacerlo.
A modo de ejemplo añadiremos unas líneas de texto al final del fichero anteriormente
escrito:
<?php //Ejemplo aprenderaprogramar.com
$file = fopen("archivo.txt", "a");
fwrite($file, "Añadimos línea 1" . PHP_EOL);
fwrite($file, "Añadimos línea 2" . PHP_EOL);
fclose($file);
?>
Tener en cuenta que el modo de apertura de archivo que hemos usado es a. Si recordamos el
significado de este modo:
a: Abre el archivo para sólo escritura. La escritura comenzará al final del archivo sin eliminar
el contenido previo existente. Si el fichero no existe se intenta crear.
Ahora podemos ver el fichero creado con un editor de texto cualquiera y observaremos el
siguiente contenido (no se ha reemplazado el contenido existente, sino que se ha ampliado):
Observamos que hemos añadido las dos nuevas líneas al final del archivo.
EJERCICIO
Crea el siguiente código PHP:
a) Una función (tipo procedimiento, no hay valor devuelto) denominada escribirNumerosMod
que reciba dos parámetros: un array de valores enteros y una cadena de texto que puede ser
"sobreescribir" ó "ampliar". La función debe proceder a: escribir cada uno de los números que
forman el contenido del array en una línea de un archivo datosEjercicio.txt usando el modo
de operación que se indique con el otro parámetro. Si el archivo no existe, debe crearlo.
Ejemplo: El array que se pasa es $numeros = array(5, 9, 3, 22); y la invocación que se utiliza
es escribirNumerosMod($numeros, "sobreescribir"); En este caso, se debe eliminar el
contenido que existiera previamente en el archivo y escribir en él 4 líneas, cada una de las
cuales contendrá los números 5, 9, 3 y 22.
b) Una función (tipo procedimiento, no hay valor devuelto) denominada leerContenidoFichero
que reciba como parámetro la ruta del fichero y muestre por pantalla el contenido de cada
una de las líneas del fichero.
c) Crea código php donde a través de la función escribirNumerosMod escribas en el fichero
los números 2, 8, 14. Luego, mediante la función leerContenidoFichero muestra el contenido
del fichero. Ahora con la función escribirNumerosMod amplía el contenido del fichero y
añádele los números 33, 11 y 16. Muestra nuevamente el contenido del fichero por pantalla.
Finalmente, escribe el fichero pasándole un array con los número 4, 99, 12 y parámetro
<<sobreescribir>> para eliminar los datos que existieran previamente. Muestra el contenido
del fichero por pantalla y un mensaje de despedida.
Extraer código fuente de página web con
PHP. Leer archivos completos:
file_get_contents y nl2br (CU00838B)
Escrito por Enrique González
Resumen: Entrega nº38 del Tutorial básico del programador web: PHP desde
cero.
Codificación aprenderaprogramar.com: CU00838B
LECTURA ARCHIVOS DE TEXTO CON PHP USANDO LA FUNCIÓN
FILE_GET_CONTENTS.
Además de con la función fopen podemos realizar la lectura de ficheros de texto usando la
función file_get_contents de PHP. La lectura de ficheros usando esta función es relativamente
sencilla. Como podremos observar en los siguientes ejemplos y ejercicios, con dicha función
podremos leer archivos de texto sin necesidad de ir recorriéndolos línea a línea para obtener
su contenido.
FUNCIÓN FILE_GET_CONTENTS.
La sintaxis general a emplear es: file_get_contents($ruta_del_fichero);
Ejemplo: crea un archivo denominado archivo.txt con diferentes líneas de texto. Para
recuperar el contenido del archivo escribe este código php:
<?php //Ejemplo aprenderaprogramar.com
$texto = file_get_contents("archivo.txt");
echo $texto;
?>
Como podrás observar, el fichero es mostrado sin saltos de línea. Para convertir esos
caracteres de salto de línea a etiquetas <br /> que den lugar a que se visualice el salto de
línea en HTML y poder así, visualizarlos en un navegador, necesitamos usar la función nl2br.
FUNCIÓN NL2BR
La función nl2br convierte los saltos de línea a etiquetas <br /> con lo que podremos ver
esos saltos de línea en cualquier navegador. Para el ejemplo anterior podemos incluirla y así
poder ver los saltos de línea correctamente. Escribe este código en un archivo como
ejemplo1.php y visualiza el resultado.
<?php //Ejemplo aprenderaprogramar.com
$texto = file_get_contents("archivo.txt");
$texto = nl2br($texto);
echo $texto;
?>
OTROS USOS DE FILE_GET_CONTENTS
Como dato adicional, la función file_get_contents, puede obtener el contenido de una página
web en forma de código HTML, es decir, su código fuente. Para ello escribiremos la dirección
de la web como parámetro de la función.
Ejemplo.
<?php //Ejemplo aprenderaprogramar.com
$texto = file_get_contents("http://www.aprenderaprogramar.com");
echo $texto;
?>
Haciendo un uso más avanzado de esta función podrías hacer cosas como:
- Introducir un fragmento de código de otra página web dentro de tu propia página web. Para
ello extraerías el contenido usando esta función y seleccionarías aquella parte que quieres
mostrar dentro de tu página web.
- Hacer búsquedas de forma similar a como las hacen buscadores tipo Google o Yahoo. Una
vez capturada la información de la página, tendrías que analizarla y almacenarla en bases de
datos para darle el tratamiento que quisieras.
- Copiar el contenido de una web en otra web.
- Diversas aplicaciones adicionales.
EJERCICIO
Crea un fichero que lleve por nombre miArchivoDePrueba.txt e introduce en él el siguiente
texto:
Una base de datos es un sistema informático a modo de almacén.
En este almacén se guardan grandes volúmenes de información.
Por ejemplo, imaginemos que somos una compañía telefónica y deseamos tener
almacenados los datos personales y los números de teléfono de todos nuestros clientes,
que posiblemente sean millones de personas.
A continuación crea un archivo denominado ejemplo2.php donde usando la
funciónfile_get_contents recuperes en una variable el texto que se encuentra en ese fichero y
lo muestres en el navegador.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
EJERCICIO 2
Recupera el código fuente de tres páginas web diferentes y usando las funciones para
cadenas de php muestra por pantalla cuántas veces aparece la etiqueta <h1> en cada una
de ellas. Ejemplo de resultado a obtener: La etiqueta h1 aparece 34 veces en
aprenderaprogramar.com. La etiqueta h1 aparece 45 veces en elmercurio.cl. La etiqueta h1
aparece 88 veces en clarin.com
Cómo crear una base de datos MySQL para
webs PHP. Acceso al gestor phpMyAdmin
en hosting (CU00839B)
Escrito por Enrique González
Resumen: Entrega nº39 del Tutorial básico del programador web: PHP desde
cero.
Codificación aprenderaprogramar.com: CU00839B
¿QUÉ ES UNA BASE DE DATOS?
Una base de datos, básicamente, es un lugar físico y software que permite almacenar,
modificar y eliminar información. Dicho sistema se suele denominar “servidor de base de
datos” y comercialmente existen distintas marcas comerciales o fabricantes de estos
sistemas como puede ser Oracle, MySQL, Microsoft SQL SERVER, etc.
Para tener una idea más precisa sobre qué es y para qué sirve una base de datos puedes
consultar la siguiente dirección:
http://www.aprenderaprogramar.com/index.php?
option=com_content&view=article&id=554:que-es-y-para-que-sirve-una-base-de-datos-
principales-tipos-oracle-mysql-sqlserver-postgre&catid=46:lenguajes-y-entornos&Itemid=163
CREAR UNA BASE DE DATOS MySQL EN NUESTRO SERVIDOR. CREAR UNA TABLA.
TIPOS DE DATOS BÁSICOS.
En primer lugar tendremos que acceder al Panel de Control de nuestro servidor. Para ello,
tendremos que teclear en nuestro navegador la dirección URL de acceso al panel de
administración e introducir el login y password. Si no dispones de servidor o no recuerdas
cómo acceder, cuestiones que hemos explicado anteriormente en este curso, vuelve a leer el
apartado 'ACCEDER VÍA PANEL DE CONTROL (CPANEL)' disponible en esta dirección web:
http://www.aprenderaprogramar.com/index.php?
option=com_content&view=article&id=529:crear-una-cuenta-de-hosting-gratuita-en-un-
servidor-php-y-acceder-via-cpanel-y-via-ftp-cu00813b&catid=70:tutorial-basico-programador-
web-php-desde-cero&Itemid=193
Una vez nos encontremos dentro del Panel de Control, se nos mostrará una pantalla con
distintas opciones. Ten en cuenta que el aspecto puede variar porque hay diversos tipos de
panel de control.
Dentro de un panel de control de un hosting suelen aparecer apartados como: Información de
la cuenta, Administración FTP, Correo electrónico, Bases de datos, etc.
Nosotros vamos a buscar el enlace a bases de datos ó al gestor de bases de datos
phpMyAdmin (en otros paneles este enlace aparece con el nombre webAdmin). Buscaremos
el enlace “phpMyAdmin”. Si hacemos click sobre dicho enlace, al no tener ninguna base de
datos creada nos mostrará un mensaje indicándonos que no existe ninguna base de datos
creada. Por tanto el primer paso que tenemos que dar es crear la base de datos (create
database).
Pulsaremos sobre la opción Create Database ó New Database para crear una nueva base de
datos. En otros servidores quizás sea necesario acceder a un apartado denominado “MySql”,
“Databases” o similar para poder acceder a crear una base de datos.
En el momento en que se nos pida, indicaremos un nombre para nuestra base datos (nombre
que tendremos que recordar) y haremos click en Create Database. Ten en cuenta que el
proceso puede ser ligeramente distinto según el hosting que estemos utilizando.
Una vez tengamos nuestra base de datos creada nos aparecerá un mensaje informativo y
podremos ver datos importantes para nosotros como el nombre de la base de datos (por
ejemplo el nombre de base de datos podría ser b7_10356956_nombreElegido):
En el hosting que estamos utilizando como ejemplo, el nombre de nuestra base de datos se
indica con nuestro identificador de usuario seguido del nombre que le pusimos a la base de
datos, es decir: b7_10356956_mibasededatos
Pero en otros hosting el nombre de la base de datos podrá crearse de forma diferente. El
nombre de la base de datos es algo que debemos apuntar pues nos hará falta más adelante.
Ahora para administrar la base de datos usaremos una aplicación denominada phpMyAdmin.
Se trata de una aplicación específicamente preparada para administración de bases de datos
MySql (MySql es uno de los sistemas de bases de datos gratuito más usados en todo el
mundo).
El acceso a base de datos suele estar protegido con nombre de usuario y password. Es
posible que el nombre de usuario y password para acceder a tu base de datos sea la misma
que para acceder al panel del hosting, pero también es posible que debas establecer un
usuario y password específicos.
EJERCICIO
Responde a las siguientes preguntas:
a) ¿Cómo se llama tu proveedor de hosting?
b) ¿Cuál es la dirección url raíz de que dispones en dicho hosting?
c) ¿Cuántas bases de datos te permite crear tu hosting?
d) ¿De qué panel de administración dispones en tu hosting (cPanel, Plesk, DirectAdmin, etc.)?
e) ¿Cuál es el nombre de la base de datos que has creado?
Crear tablas MySql con phpMyAdmin. Tipos
de datos básicos (Varchar, Int, Float).
Insertar filas. (CU00840B)
Escrito por Enrique González
Resumen: Entrega nº40 del Tutorial básico del programador web: PHP desde
cero.
Codificación aprenderaprogramar.com: CU00840B
PHPMYADMIN PARA ADMINISTRAR BASES DE DATOS
En la entrega anterior del curso hemos creado una base de datos y para administrar la base
de datos usaremos la aplicación denominada phpMyAdmin, una aplicación específicamente
preparada para administración de bases de datos MySql. Para ir a phpMyAdmin pulsaremos
sobre el enlace 'phpMyAdmin'. En otros servidores es posible que haya que acceder de otra
manera.
Las bases de datos organizan la información en tablas. El primer paso que vamos a dar es
crear una tabla donde introducir algunos datos a modo de ejemplo. Pinchamos sobre el
nombre de la base de datos y la pantalla que se nos muestra a continuación nos permite
crear una tabla en dicha base de datos (si no te aparece esta opción pulsa en la pestaña
“Operaciones”). Nosotros vamos a suponer que queremos almacenar el nombre, apellidos,
dirección, teléfono, edad y altura de personas. Para ello crearemos una tabla que llamaremos
<<agenda>> con 6 columnas. Por tanto escribimos como nombre “agenda”, número de
columnas 6 y pulsamos continuar.
El siguiente paso es indicar los nombres y tipos de las columnas.
Los nombres de columnas que pondremos serán: nombre, apellidos, direccion, telefono, edad
y altura (escribimos estos nombres sin tildes). En tipo elegimos VARCHAR para todos las
columnas de tipo cadena de caracteres. El significado de VARCHAR podemos verlo como
“texto de longitud variable”. En vez de texto de longitud variable podríamos haber escogido
otro tipo de datos como números enteros, números autoincrementados de uno en uno para
los campos tipo identificador, fechas, etc. El campo edad lo ponemos de tipo número entero
(INT), mientras que el campo altura lo ponemos de tipo número decimal (FLOAT). De
momento no nos interesa saber más y, por tanto, con las cuatro columnas tipo VARCHAR,
una columna tipo entero y otra columna tipo flotante, es más que suficiente para nuestro
objetivo (en este curso no vamos a tratar MySQL más que en aspectos básicos para
comprender cómo interacciona con PHP). Como longitud/valores para los tipos de datos
VARCHAR pondremos 100 que será la longitud máxima en caracteres que podrán ocupar las
columnas.
En resumen, al introducir estos datos hemos declarado que vamos a crear una tabla con seis
columnas, denominadas nombre, apellidos, direccion, telefono, edad y altura. El número de
filas no está determinado. Además los datos que se almacenen no podrán tener más de 100
caracteres de longitud para los tipos VARCHAR.
Para finalizar la creación de la tabla 'agenda', pulsamos sobre Guardar y finalizaremos el
proceso. La tabla creada podemos verla como algo similar a esto:
nombre apellidos direccion telefono edad altura
Como vemos ahora la tabla está vacía porque todavía no hemos introducido ningún dato.
Una vez creada la tabla 'agenda' introduciremos algunos datos de prueba. Para ello,
pulsaremos sobre el nombre de la tabla (fíjate que en el lateral izquierdo de phpMyAdmin
existe una especie de navegador que nos permite elegir la tabla a la que queremos ir). Una
vez seleccionada una tabla, veremos que hay varias pestañas (Estructura, SQL, Insertar,
Exportar, Importar, Operaciones). Fíjate en la parte de arriba y verás que te indica el nombre
de la base de datos y la tabla en que te encuentras. Pulsaremos sobre la pestaña 'Insertar'
para acceder a introducir los datos para una fila de nuestra tabla.
Nos aparecerá una imagen similar a la siguiente. Nos indica un nombre de columna y los
valores para una fila (nombre, apellidos, direccion, telefono). Añadiremos algunos datos de
prueba como: nombre “Manuel Jesús”, apellidos “López de la Rosa”, dirección “C/Juan
Bautista Nº 3”, telefono “658954875”, edad 32 y altura 1.80. Añadiremos también otros
datos como nombre “María”, apellidos “Manzano Cabezas”, direccion “C/Arco del triunfo Nº
7”, telefono 695001002, edad 19 y altura 1.99.
Después pulsaremos sobre continuar y ya tendremos los datos guardados en la tabla. Ahora
la tabla tendrá este aspecto:
nombre apellidos direccion telefono edad altura
Manuel Jesús López de la Rosa C/Juan Bautista Nº 3 658954875 32 1.80
María Manzano Cabezas C/Arco del triunfo Nº 7 695001002 19 1.99
Es muy habitual introducir en las tablas una columna denominada id que actúa como
identificador único de cada fila, aunque no es obligatorio (de hecho en este caso no la
tenemos).
A partir de aquí, podremos realizar consultas, insertar datos o borrar datos usando PHP tal y
como veremos en los próximos apartados del curso.
EJERCICIO
De la misma forma que has creado la tabla denominada agenda, crea otra tabla denominada
<<ciudades>> que conste de los siguientes 6 campos:
id ciudad pais habitantessuperficie
tieneMetro
Como tipo de dato para cada campo tendremos: id INT con índice PRIMARY y opción A_I
marcada (A_I significa auto-increment, este campo se incrementará en 1 ud cada vez que se
inserte una fila en la tabla), ciudad VARCHAR con largo máximo 80, pais VARCHAR con largo
máximo 50, habitantes BIGINT (entero largo), superficie DOUBLE (decimal largo), tieneMetro
BOOLEAN (valor booleano, verdadero o falso. Tener en cuenta que posiblemente esto se
refleje como tipo TinyInt: los valores posibles son 0 como equivalente a falso ó 1 como
equivalente a verdadero).
A continuación inserta los siguientes datos en la tabla:
id ciudad pais habitantes superficie tieneMetro
1 México D.F. México 555666 23434.34 1
2 Barcelona España 444333 1111.11 0
3 Buenos Aires Argentina 888111 333.33 1
4 Medellín Colombia 999222 888.88 0
5 Lima Perú 999111 222.22 0
6 Caracas Venezuela 111222 111.11 1
7 Santiago Chile 777666 222.22 1
8 Antigua Guatemala 444222 877.33 0
9 Quito Ecuador 333111 999.11 1
10 La Habana Cuba 111222 333.11 0
Visualiza el contenido de la tabla y comprueba que es correcto conforme a lo esperado.
PHP: consultas MySql. mysqli_connect,
select_db, query, fetch_array, free_result,
close. Ejemplos (CU00841B)
Escrito por Enrique González
Resumen: Entrega nº41 del Tutorial básico del programador web: PHP desde
cero.
Codificación aprenderaprogramar.com: CU00841B
USO DE PHP CON MySQL. CONSULTAS BÁSICAS
Estas próximas entregas no pretenden ser un manual de MySQL aunque sí explicaremos
como realizar consultas básicas desde PHP. Veremos algunas funciones básicas para acceder
a una base de datos MySQL desde PHP para recuperar información, insertar información o
borrar información.
Describiremos una serie de funciones básicas que nos servirán para ilustrar cómo utilizar PHP
para realizar consultas a una base de datos: añadir nuevos registros, actualizar registros,
borrar registros, etc. No vamos a estudiar en profundidad las bases de datos ni el lenguaje
SQL. Vamos a tratar de ser prácticos, conocer algunas funciones para acceder a bases de
datos con PHP y aprender a usarlas a través de ejemplos.
Una cuestión a comentar es que el acceso a base de datos con PHP admite dos formas
distintas: las funciones tipo mysql, por ejemplo mysql_connect, son las más antiguas, cuyo
uso se desaconseja si se está trabajando con un servidor con una versión de MySql moderna.
Las funciones tipo mysqli, por ejemplo mysqli_connect, son las más modernas, cuyo uso se
recomienda siempre que se esté trabajando con servidores actualizados. Las funciones
mysqli pueden escribirse de dos formas: con estilo orientado a objetos o con estilo por
procedimientos. Nosotros vamos a ver cómo usar estas funciones con el estilo por
procedimientos, que es más sencillo inicialmente.
FUNCIÓN mysqli_connect (mysql_connect)
Esta función nos permite crear una conexión con una base de datos concreta.
La sintaxis que usaremos para esta función es:
$nombreConexion = mysqli_connect($hostname , $nombreUsuario , $contraseña);
Para servidores no actualizados usar mysql_connect en lugar de mysqli_connect
La función devuelve una conexión almacenada en la variable $nombreConexion, o FALSE en
caso de error. Los parámetros que hemos indicado son:
$hostname es un nombre de servidor (dato que debemos consultar en nuestra cuenta de
hosting).
$nombreUsuario es el nombre de usuario de base de datos, nombre que habremos
especificado al crear la base de datos (si no lo hemos hecho, puede ser el mismo que para
acceder a cPanel ó root).
$contraseña es la contraseña de acceso para el usuario de base de datos, contraseña que
habremos especificado al crear la base de datos (si no lo hemos hecho, puede ser la misma
que para acceder a cPanel ó root).
Esta función la entenderemos mejor con el ejemplo que veremos más adelante.
FUNCIÓN mysqli_close (mysql_close)
Esta función nos permite cerrar la conexión con una base de datos anteriormente abierta.
Siempre es recomendable cerrar una conexión cuando hayamos terminado de usarla.
La sintaxis que usaremos es:
mysqli_close($nombreConexión);Para servidores no actualizados usar mysql_close en lugar de mysqli_close
La función devuelve TRUE si se ha cerrado correctamente ó FALSE en caso de errror.
El identificador o nombre de conexión será aquel que hayamos obtenido previamente usando
la función mysqli_connect.
Esta función la entenderemos mejor con el ejemplo que veremos más adelante.
FUNCIÓN mysqli_select_db (mysql_select_db)
Esta función nos permite seleccionar una base de datos concreta dentro de todas las
existentes en el servidor al que nos conectemos.
La sintaxis que vamos a emplear es:
mysqli_ select_db ($nombreConexión, $nombreBaseDatos);Para servidores no actualizados usar mysql_select_db ($nombreBaseDatos, $nombreConexión);
La función devuelve TRUE si se ha realizado la selección correctamente ó FALSE en caso de
errror.
El nombre de conexión será aquel que hayamos obtenido previamente con la función
mysqli_connect.
Esta función la entenderemos mejor con el ejemplo que veremos más adelante.
FUNCIÓN mysqli_query (mysql_query)
Esta función nos permite ejecutar una consulta a la base de datos que especifiquemos.
La sintaxis que emplearemos es:
$result = mysqli_query($nombreConexion, "Consulta aquí"); ó mysqli_query($nombreConexion, $query);Para servidores no actualizados usar $result = mysql_query("Consulta aquí", $nombreConexion);
Donde "Consulta aquí" se refiere a una consulta realizada utilizando el lenguaje SQL de
consultas a bases de datos, por ejemplo una consulta puede ser "SELECT * FROM agenda",
que podría traducirse como “selecciona todas las filas de la tabla agenda”.
Esta función devuelve TRUE o FALSE para indicar si las operaciones UPDATE, INSERT o
DELETE han tenido éxito. Para la operación SELECT devuelve un nuevo identificador de
resultado. UPDATE significa “actualizar”, INSERT significa “insertar” y DELETE significa
“BORRAR”. SELECT significa “seleccionar”.
El nombre de conexión será aquel que hayamos obtenido previamente con la función
mysqli_connect.
Esta función la entenderemos mejor con el ejemplo que veremos más adelante.
RECUPERAR UN RESULTADO: DATA_SEEK, FETCH_ASSOC (MYSQL_RESULT)
Una sentencia de consulta normalmente devuelve “un conjunto de resultados” que según el
ejemplo de sintaxis anterior tendríamos en una variable denominada $result. Por ejemplo,
podríamos tener como resultados de una consulta lo siguiente:
nombre apellidos direccion telefono edad altura
Manuel Jesús López de la Rosa C/Juan Bautista Nº 3 658954875 32 1.80
María Manzano Cabezas C/Arco del triunfo Nº 7 695001002 19 1.99
La cuestión que nos planteamos ahora es: ¿Cómo extraer el dato de una celda concreta? Por
ejemplo el nombre de la primera fila?
Para ello, usando la sintaxis mysqli escribiríamos esto:
mysqli_data_seek ($result, numeroDeFila); ó también válido $result->data_seek(numeroDeFila);$extraido= mysqli_fetch_array($result); ó también válido $extraido=$result->fetch_array();
Aquí estamos dando dos pasos: una sentencia como mysqli_data_seek ($result, 0);
significaría “posiciónate en la fila 0 de los resultados” (la primera fila). También es válido
escribir $result->data_seek(0); que tiene el mismo efecto. Si escribiéramos $result-
>data_seek(15); signficaría “posiciónate en la fila 16 de los resultados” (tener en cuenta que
se empieza a contar por cero, de ahí que 0, 1, 2, … , 15 resulten 16 filas).
La sentencia $extraido= mysqli_fetch_array($result); indica que los valores existentes en la
fila se introduzcan en un array cuyos índices en principio pueden ser tanto asociativos (el
nombre de la columna) como numéricos (empezanso por cero). Por ejemplo si la primera
columna en la tabla de la base de datos es <<ciudad>> podemos usar $extraido['ciudad']
para acceder al valor existente en la fila con la que estemos trabajando para la columna
ciudad. Igualmente podríamos usar $extraido[0] para referirnos a la primera columna,
$extraido[1] para referirnos a la segunda columna, $extraido[2] para referirnos a la tercera
columna y así sucesivamente.
Sintaxis mysql: mysql_result
En servidores no actualizados se puede usar la función mysql_result aunque al no pertenecer
a la serie de funciones mysqli no está recomendado su uso.
La sintaxis es: mysql_result($result, $numeroDeFila, "identificadorDeLaColumna");
Esta función nos devuelve el contenido de la celda en la fila y columna indicadas en forma de
string (cadena de caracteres) en caso de éxito, o FALSE en caso de error.
$result es el resultado obtenido previamente con una invocación a la función mysql_query.
numeroDeFila es un número de fila dentro del resultado obtenido teniendo en cuenta que los
números de fila se cuentan empezando desde cero.
identificadorDeLaColumna puede ser el índice del campo (por ejemplo 0), el nombre del
campo (por ejemplo ciudad), o el nombre de la tabla punto nombre del campo (por ejemplo
agenda.ciudad)
Finalmente, se puede especificar el nombre del campo que queremos extraer dentro de la
fila (esto es opcional). Esta función la entenderemos mejor con el ejemplo que veremos a
continuación.
EJEMPLO DE USO DE LAS FUNCIONES ANTERIORES.
Escribe este código en un editor y guárdalo en un archivo de nombre ejemplo1.php (recuerda
que antes debes haber creado la base de datos y creado datos de ejemplo como hemos visto
anteriormente). Recuerda también que debes cambiar y poner tus propios valores en las
funciones mysqli_connect y mysqli_select_db.
<html><head><meta charset="utf-8"></head>
<body>
<?php
$link = mysqli_connect("sql203.byethost7.com", "b7_10356956", "*****");
mysqli_select_db($link, "b7_10356956_mibasededatos");
$tildes = $link->query("SET NAMES 'utf8'"); //Para que se muestren las tildes
$result = mysqli_query($link, "SELECT * FROM agenda");
mysqli_data_seek ($result, 0);
$extraido= mysqli_fetch_array($result);
echo "- Nombre: ".$extraido['nombre']."<br/>";
echo "- Apellidos: ".$extraido['apellidos']."<br/>";
echo "- Dirección: ".$extraido['direccion']."<br/>";
echo "- Teléfono: ".$extraido['telefono']."<br/>";
echo "- Edad: ".$extraido['edad']."<br/>";
mysqli_free_result($result);
mysqli_close($link);
?>
</body></html>
El código con la sintaxis que no usa mysqli (no recomendado) sería:
<html>
<body>
<?php
$link = mysql_connect("sql203.byethost7.com", "b7_10356956", "*****");
mysql_select_db("b7_10356956_mibasededatos", $link);
mysql_query("SET NAMES 'utf8'"); //Para que se muestren las tildes
$result = mysql_query("SELECT * FROM agenda", $link);
echo"Nombre: ".mysql_result($result, 0, "nombre")."<br>";
echo"Apellidos: ".mysql_result($result, 0, "apellidos")."<br>";
echo"Dirección: ".mysql_result($result, 0, "direccion")."<br>";
echo"Teléfono:".mysql_result($result, 0, "telefono")."<br>";
echo"Edad:".mysql_result($result, 0, "edad")."<br>";
echo"Altura:".mysql_result($result, 0, "altura")."<br>";
mysql_free_result($result);
mysql_close($link);
?>
</body></html>
En este código lo que hemos hecho es usar las funciones vistas anteriormente y la base de
datos y tablas que creamos en anteriores apartados del curso. Con todo ello lo que hacemos
es realizar una consulta a la base de datos y mostrar los resultados por pantalla.
Interpretemos las líneas que hemos escrito:
$link = mysqli_connect("sql203.byethost7.com", "b7_10356956", "*****");
Con esta línea introducimos el identificador de conexión en una variable denominada $link.
Invocamos la función mysqli_connect pasándole como parámetros el nombre del hosting, el
nombre de usuario y la contraseña. Estos datos debemos conocerlos (o consultarlos)
previamente.
mysqli_select_db($link, "b7_10356956_mibasededatos");
Con esta línea seleccionamos la base de datos pasándole a la función como parámetros el
identificador de conexión (que hemos obtenido y guardado en una variable previamente) y el
nombre de base de datos.
$result = mysqli_query($link, "SELECT * FROM agenda");
Con esta línea seleccionamos todos los registros (filas) y campos (columnas) existentes en
nuestra base de datos. Para seleccionar todos los registros escribimos SELECT *. A
continuación indicamos la tabla de la cual queremos obtener dichos registros y esto lo
expresamos con la sintaxis FROM agenda, siendo agenda el nombre de la tabla en la base de
datos. En la llamada a la función incluirmos el identificador de conexión que hemos obtenido
previamente.
Con la sentencia mysqli_data_seek ($result, 0); nos posicionamos en la primera fila (fila cero)
de los resultados de la consulta.
Con la sentencia $extraido= mysqli_fetch_array($result); introducimos en un array al que
denominamos $extraido los datos de la fila cero obtenidos de la consulta.
Finalmente mostramos por pantalla los resultados.
En la versión que no usa mysqli (no recomendada) con la sentencia mysql_result($result, 0,
"nombre") obtenemos el campo “nombre” del primer registro (registro 0) del resultado de la
consulta que hemos almacenado previamente en $result.
El resultado de invocar el archivo que hemos creado será que se nos muestre por pantalla el
nombre, apellidos, dirección, teléfono, edad y altura almacenados en la primera fila de
nuestra base de datos. Algo similar a esto:
Resumiendo lo que hemos hecho, hemos usado la función mysqli_connect(), que abre una
conexión con el servidor MySQL en el Host especificado (en este ejemplo la máquina donde
está alojada el servidor MySQL es sql203.byethost7.com, pero tú tendrás que introducir tu
propio dato). También hemos especificado un usuario (b7_10356956 en este ejemplo, pero tú
tendrás que introducir tu propio dato), y un password para el usuario indicado (tendrás que
escribir tu password de usuario de base de datos).
Si la conexión ha tenido éxito, la función mysqli_connect() devuelve un identificador de dicha
conexión que es almacenado en la variable $link. Si no tuviera éxito, devuelve 0 (FALSE).
Con mysqli_select_db() PHP le hemos dicho al servidor que en la conexión $link nos
queremos conectar a la base de datos indicada.
La siguiente función mysqli_query(), usando el identificador de la conexión ($link), envía una
instrucción SQL al servidor MySQL para que éste la procese. El resultado de ésta operación es
almacenado en la variable $result.
Finalmente, elegimos la fila de resultados cero con mysqli_data_seek ($result, 0); y
guardamos los resultados de esa fila en un array con $extraido= mysqli_fetch_array($result);
. Si quisiéramos mostrar los siguientes registros tendríamos que incluir instrucciones con los
números 1, 2, …
La sentencia mysqli_free_result($result); libera la conexión establecida con la base de datos.
La sentencia mysqli_close($link); cierra la conexión con la base de datos.
*Nota: Si tenemos algún problema en localizar la información de nuestro proveedor (nombre
de base de datos, usuario, etc.). recordar que dicha información normalmente está
disponible en el panel de control del servidor (cpanel o similar) tal y como vimos en entregas
anteriores.
En el panel de control que estamos usando nosotros para este ejemplo, si bajamos con el
scroll hacia abajo, después de la información ftp que nos aparece marcada con un recuadro
rojo, aparecerá la información relativa al servidor de base de datos. Si estás utilizando otro
panel de control, tendrás que buscar el lugar específico donde figura esta información.
EJERCICIO
Utilizando la tabla <<ciudades>> que hemos creado para el ejercicio de la entrega anterior
del curso, cuyo contenido era:
id ciudad pais habitantes superficie tieneMetro
1 México D.F. México 555666 23434.34 1
2 Barcelona España 444333 1111.11 0
3 Buenos Aires Argentina 888111 333.33 1
4 Medellín Colombia 999222 888.88 0
5 Lima Perú 999111 222.22 0
6 Caracas Venezuela 111222 111.11 1
7 Santiago Chile 777666 222.22 1
8 Antigua Guatemala 444222 877.33 0
9 Quito Ecuador 333111 999.11 1
10 La Habana Cuba 111222 333.11 0
Crea un archivo php donde se realice una consulta a la base de datos para extraer todos los
datos de la tabla y a continuación muestra por pantalla los valores de país y ciudad de cada
fila.
Ejemplo de resultados a obtener:
Los resultados de la consulta a la base de datos son los siguientes:
País: México --- Ciudad: México D.F.
País: España --- Ciudad: Barcelona
País: Argentina --- Ciudad: Buenos Aires
…
…
País: Cuba --- Ciudad: La Habana
Ejemplo consulta PHP MySql. SELECT. Bucle
while, mysqli_fetch_array: recorrer
resultados query (CU00842B)
Escrito por Enrique González
Resumen: Entrega nº42 del Tutorial básico del programador web: PHP desde
cero.
Codificación aprenderaprogramar.com: CU00842B
CONSULTAS MEJORADAS A BASE DE DATOS MySQL CON PHP.
Ahora que conocemos de una forma básica como interactuar con una base de datos MySQL
haciendo uso de distintas funciones o instrucciones PHP, vamos a profundizar un poco más
en dichas consultas para, por ejemplo, recorrer todos los registros de la tabla agenda y
visualizarlos de manera correcta (recordar que en apartados anteriores del curso sólo se
mostraban los valores para el primer registro que se encontraba en la base de datos).
Para conseguir nuestro objetivo nos basaremos en el mismo código que ya hemos utilizado
anteriormente y realizaremos una serie de cambios.
Para empezar, añade algunas filas más a la tabla agenda de la base de datos para que quede
así:
nombre apellidos direccion telefono edad altura
Manuel Jesús López de la Rosa C/Juan Bautista Nº 3 658954875 32 1.80
María Manzano Cabezas C/Arco del triunfo Nº 7 695001002 19 1.99
Pedro Somoza Castro C/Solera nº88, B 88834321 44 1.66
Juana Pérez Rozas Avda. Luarcato nº22 888111222 22 1.77
Lo primero que vamos a tratar de ver es cómo una invocación de mysqli_fetch_array
devuelve un registro (una fila) de los resultados obtenidos en una consulta a la tabla de la
base de datos. ¿Qué fila de los resultados es la que nos devuelve? Si la fila ha sido
establecida usando mysqli_data_seek, nos devolverá la fila que hayamos especificado. Si no
usamos mysqli_data_seek nos devuelve la primera fila de los resultados.
Si mysqli_fetch_array vuelve a ser invocada sin especificar la fila a extraer, devuelve el
siguiente registro o fila, siguiendo el orden que tienen los resultados de la consulta. Decimos
que mysqli_fetch_array tiene vinculado un puntero o referencia a la fila que debe devolver.
Este puntero o referencia puede definirse usando data seek, o en caso de no definirse, es
inicialmente 0 (lo que significa que nos devolverá inicialmente la fila 0). Una vez invocada
mysqli_fetch_array y devueltos los resultados de la fila 0, el puntero queda apuntando al
siguiente registro, es decir, a la fila 1. Este proceso puede repetirse tantas veces como se
desee y por cada llamada mysqli_fetch_array va avanzando una fila. Cuando ya no existen
más filas en los resultados de la consulta la función devuelve NULL (no hay resultados).
Para comprender el funcionamiento que hemos descrito ejecuta este código (que podemos
denominar “bruto”, pero no te preocupes ahora por la eficiencia del código, céntrate en
entender el funcionamiento de mysqli_fetch_array). Recuerda que debes cambiar los datos
relacionados con la base de datos (nombre de servidor, nombre de base de datos, usuario,
password) y escribir los que estés usando tú.
<html><head><meta charset="utf-8"> </head>
<body>
<?php
//Ejemplo aprenderaprogramar.com
function mostrarDatos ($resultados) {
if ($resultados !=NULL) {
echo "- Nombre: ".$resultados['nombre']."<br/> ";
echo "- Apellidos: ".$resultados['apellidos']."<br/>";
echo "- Dirección: ".$resultados['direccion']."<br/>";
echo "- Teléfono: ".$resultados['telefono']."<br/>";
echo "- Edad: ".$resultados['edad']."<br/>";}
else {echo "<br/>No hay más datos: <br/>".$resultados;}
}
$link = mysqli_connect("sql203.byethost7.com", "b7_10356956", "*****");
mysqli_select_db($link, "b7_10356956_mibasededatos");
$tildes = $link->query("SET NAMES 'utf8'"); //Para que se muestren las tildes correctamente
$result = mysqli_query($link, "SELECT * FROM agenda");
$extraido1= mysqli_fetch_array($result);
mostrarDatos($extraido1);
$extraido2= mysqli_fetch_array($result);
mostrarDatos($extraido2);
$extraido3= mysqli_fetch_array($result);
mostrarDatos($extraido3);
$extraido4= mysqli_fetch_array($result);
mostrarDatos($extraido4);
$extraido5= mysqli_fetch_array($result);
mostrarDatos($extraido5);
$extraido6= mysqli_fetch_array($result);
mostrarDatos($extraido6);
mysqli_free_result($result);
mysqli_close($link);
?>
</body></html>
En este ejemplo sólo tenemos cuatro registros. Si tuviéramos más registros el listado se
alargaría para mostrarlos todos ellos. ¿Qué ocurre si la información existente en base de
datos comprende muchos registros? En este caso la información se habrá almacenado en
memoria y esto consume recursos del sistema. Para liberar esta memoria se utiliza la
instrucción mysqli_free_result($result);
Escribe ahora este código y fíjate cómo hemos sintetizado el proceso eliminando variables
auxiliares. Recuerda que debes cambiar los datos relacionados con la base de datos (nombre
de servidor, nombre de base de datos, usuario, password) y escribir los que estés usando tú.
<html><head><meta charset="utf-8"> </head>
<body>
<?php
//Ejemplo aprenderaprogramar.com
function mostrarDatos ($resultados) {
if ($resultados !=NULL) {
echo "- Nombre: ".$resultados['nombre']."<br/> ";
echo "- Apellidos: ".$resultados['apellidos']."<br/>";
echo "- Dirección: ".$resultados['direccion']."<br/>";
echo "- Teléfono: ".$resultados['telefono']."<br/>";
echo "- Edad: ".$resultados['edad']."<br/>";}
else {echo "<br/>No hay más datos!!! <br/>";}
}
$link = mysqli_connect("sql203.byethost7.com", "b7_10356956", "*****");
mysqli_select_db($link, "b7_10356956_mibasededatos");
$tildes = $link->query("SET NAMES 'utf8'"); //Para que se muestren las tildes correctamente
$result = mysqli_query($link, "SELECT * FROM agenda");
mostrarDatos(mysqli_fetch_array($result));
mostrarDatos(mysqli_fetch_array($result));
mostrarDatos(mysqli_fetch_array($result));
mostrarDatos(mysqli_fetch_array($result));
mostrarDatos(mysqli_fetch_array($result));
mostrarDatos(mysqli_fetch_array($result));
mysqli_free_result($result);
mysqli_close($link);
?></body></html>
Fíjate como mysqli_fetch_array($result) nos devuelve un array con los datos de una fila de las
obtenidas como resultado y cada vez que lo invocamos nos devuelve la siguiente fila hasta
que ya no existen más filas de resultados, momento en que nos devuelve NULL o vacío.
Con una expresión como mostrarDatos(mysqli_fetch_array($result)); estamos pasándole a la
función mostrarDatos el array que nos devuelve mysqli_fetch_array. Si la consulta nos ha
devuelto 4 filas, podemos hacer 4 invocaciones obteniendo en cada invocación una fila. En la
quinta invocación, ya obtenemos NULL (vacío) como resultado.
USO DE WHILE PARA EXTRAER TODOS LOS RESULTADOS DE UNA CONSULTA
Hasta ahora hemos tratado de comprender el funcionamiento de mysqli_fetch_array. Pero
obviamente ir recuperando resultados uno a uno no resulta eficiente. Piensa que el resultado
de una consulta pueden ser cientos o miles de filas y no sería eficiente escribir línea a línea
una extracción de datos.
Vamos a recurrir por tanto a crear un bucle de forma que se extraigan de forma
automatizada todos los registros que nos devuelve una consulta.
La sintaxis que emplearemos es de este tipo:
while ($fila = mysqli_fetch_array($result)){
// Operaciones con los resultados que tenemos en $fila
}
Esta expresión es una forma compacta donde se hacen varias cosas al mismo tiempo. Por un
lado, se ejecuta $fila = mysqli_fetch_array($result) con lo cual $fila toma un valor que puede
ser un array resultado ó vacío.
Luego se evalúa el while. while ($variable) lo que hace es entrar al bucle si $variable existe
(no está vacío). while ($fila = mysqli_fetch_array($result)) da lugar a la entrada al bucle
mientras no se hayan extraído todas las filas del resultado.
Esta expresión sintética es útil porque nos permite recorrer muchas filas escribiendo un
mínimo de código. También podríamos escribir esto:
$hayResultados = true; //Forzamos la entrada al bucle
while ($hayResultados==true){
$fila = mysqli_fetch_array($result);
if ($fila) { //operaciones a realizar
} else {$hayResultados = false;}
}
O también esto:
while (($fila = mysqli_fetch_array($result))!=NULL){
//Operaciones a realizar
}
De las diversas alternativas planteadas la que requiere menos código y una vez se entiende
resulta más clara es while ($fila = mysqli_fetch_array($result)), por eso es la que vamos a
usar. Escribe el siguiente código y comprueba los resultados. Recuerda que debes cambiar
los datos relacionados con la base de datos (nombre de servidor, nombre de base de datos,
usuario, password) y escribir los que estés usando tú.
De una forma u otra cada vez que invocamos la función mysql_fetch_array($result)
obtenemos un array asociativo con índice del array los nombres de las columnas, por
ejemplo $fila['nombre'], $fila['apellidos'], $fila['direccion'], $fila['telefono'], $fila['edad'],
$fila['altura']. Si ya se han extraido todas las filas se produce la salida del bucle while. Los
programadores suelen llamar a la variable donde se van extrayendo los resultados $row (en
inglés, row es fila). Con mysql_fetch_array($result) también podemos acceder a través de
índices numéricos, por ejemplo $fila[0], $fila[1], $fila[2], $fila[3], $fila[4], $fila[5].
<html><head><meta charset="utf-8"> </head>
<body>
<?php
//Ejemplo aprenderaprogramar.com
function mostrarDatos ($resultados) {
if ($resultados !=NULL) {
echo "- Nombre: ".$resultados['nombre']."<br/> ";
echo "- Apellidos: ".$resultados['apellidos']."<br/>";
echo "- Dirección: ".$resultados['direccion']."<br/>";
echo "- Teléfono: ".$resultados['telefono']."<br/>";
echo "- Edad: ".$resultados['edad']."<br/>";
echo "**********************************<br/>";}
else {echo "<br/>No hay más datos!!! <br/>";}
}
$link = mysqli_connect("sql203.byethost7.com", "b7_10356956", "*****");
mysqli_select_db($link, "b7_10356956_mibasededatos");
$tildes = $link->query("SET NAMES 'utf8'"); //Para que se muestren las tildes correctamente
$result = mysqli_query($link, "SELECT * FROM agenda");
while ($fila = mysqli_fetch_array($result)){
mostrarDatos($fila);
}
mysqli_free_result($result);
mysqli_close($link);
?></body></html>
El resultado esperado es que se muestren por pantalla todos los resultados de la consulta:
- Nombre: Manuel Jesús - Apellidos: López de la Rosa - Dirección: C/Juan Bautista Nº 3
- Teléfono: 658954875 - Edad: 32
**********************************
- Nombre: María - Apellidos: Manzano Cabezas - Dirección: C/Arco del triunfo Nº 7
- Teléfono: 695001002 - Edad: 19
**********************************
- Nombre: Pedro - Apellidos: Somoza Castro - Dirección: C/Solera nº88, B
- Teléfono: 88834321 - Edad: 44
**********************************
- Nombre: Juana - Apellidos: Pérez Rozas - Dirección: Avda. Luarcato nº22
- Teléfono: 888111222 - Edad: 22**********************************
SINTAXIS NO MYSQLI (NO RECOMENDADA)
Recordar que si estamos revisando código antiguo o en servidores no actualizados nos
podemos encontrar que no se usan las funciones de tipo mysqli sino las mysql. A modo de
ejemplo de cómo sería esta sintaxis, mostramos este código:
<html> // Ejemplo php con bases de datos aprenderaprogramar.com
<body>
<?php
$link = mysql_connect("sql203.byethost7.com", "b7_10356956", "*****");
mysql_select_db("b7_10356956_mibasededatos", $link);
$result = mysql_query("SELECT * FROM agenda", $link);
// comienza un bucle que leerá todos los registros existentes
while($row = mysql_fetch_array($result)) {
// $row es un array con todos los campos existentes en la tabla
echo "<hr>";
echo "Nombre: ".$row['nombre']."<br>";
echo "Apellidos: ".$row['apellidos']."<br>";
echo "Dirección: ".$row['direccion']."<br>";
echo "Teléfono:".$row['telefono']."<br>";
echo "Edad:".$row['edad']."<br>";
echo "Altura:".$row['altura']."<br>";
} // fin del bucle de instrucciones
mysql_free_result($result); // Liberamos los registros
mysql_close($link); // Cerramos la conexion con la base de datos
echo "<hr>";
?>
</body>
</html>
EJERCICIO 1
Utilizando la tabla agenda que hemos empleado en los ejemplos y funciones para manejo de
cadenas PHP, realiza una consulta a la base de datos para extraer todos los nombres y
determina cuántos nombres en la base de datos empiezan por M.
Ejemplo de resultados a obtener: En la base de datos los nombres que empiezan por M son: 2
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
EJERCICIO 2
Utilizando la tabla <<ciudades>> que hemos utilizado para ejercicios de entregas anteriores
del curso, cuyo contenido era:
id ciudad pais habitantes superficie tieneMetro
1 México D.F. México 555666 23434.34 1
2 Barcelona España 444333 1111.11 0
3 Buenos Aires Argentina 888111 333.33 1
4 Medellín Colombia 999222 888.88 0
5 Lima Perú 999111 222.22 0
6 Caracas Venezuela 111222 111.11 1
7 Santiago Chile 777666 222.22 1
8 Antigua Guatemala 444222 877.33 0
9 Quito Ecuador 333111 999.11 1
10 La Habana Cuba 111222 333.11 0
Crea un archivo php donde se realice una consulta a la base de datos para extraer todos los
datos de la tabla y a continuación calcula la suma de habitantes de todos los países y
cuántas de estas ciudades tienen metro. Muestra el resultado por pantalla.
Ejemplo de resultados a obtener:
La suma de habitantes de México D.F., Barcelona, Buenos Aires, Medellín, Lima, Caracas,
Santiago, Antigua, Quito y La Habana es: 5663886 habitantes
De estas ciudades tienen metro: 5 ciudades.
PHP insert into values. Insertar datos
(registros, filas) en base de datos MySql.
Ejemplos y ejercicio (CU00843B)
Escrito por Enrique González
Resumen: Entrega nº43 del Tutorial básico del programador web: PHP desde
cero.
Codificación aprenderaprogramar.com: CU00843B
INSERCIÓN DE DATOS CON PHP Y MySQL. EJEMPLOS Y EJERCICIOS RESUELTOS.
Vamos a explicar cómo insertar registros en nuestra base de datos MySQL a través de código
PHP. En concreto, añadiremos registros a la tabla agenda que habíamos creado previamente
con phpMyAdmin. Para ello tendremos que realizar lo que se denomina una consulta SQL de
inserción (insert into) e ir añadiendo tantos registros con sus correspondientes valores para
los campos como deseemos.
Partiremos de nuestra base de datos donde tenemos una tabla denominada agenda con los
siguientes datos:
nombre apellidos direccion telefono edad altura
Manuel Jesús López de la Rosa C/Juan Bautista Nº 3 658954875 32 1.80
María Manzano Cabezas C/Arco del triunfo Nº 7 695001002 19 1.99
Pedro Somoza Castro C/Solera nº88, B 88834321 44 1.66
Juana Pérez Rozas Avda. Luarcato nº22 888111222 22 1.77
Para realizar la inserción de datos vamos a utilizar una sintaxis de este tipo:
mysqli_query($link, "INSERT INTO nombreTabla VALUES (datoCol1, datoCol2, … datoColN)");
Donde mysqli_query indica que vamos a realizar una operación (en general se denominan
consultas, aunque en este caso la operación sea una inserción de datos), $link es el
identificador de conexión que hayamos obtenido con mysqli_connect, nombreTabla es el
nombre de la tabla en la cual vamos a realizar la inserción de datos y datoCol1, datoCol2, …,
datoColN representa los datos que vamos a insertar en la tabla. Tener en cuenta que
debemos indicar los datos en el mismo orden en que se encuentran las columnas en la tabla.
Por ejemplo para nuestra tabla agenda tendremos que seguir el orden: nombre, apellidos,
direccion, telefono, edad, altura (orden de las columnas).
EJEMPLO DE INSERCIÓN DE DATOS EN UNA TABLA
Escribe este código en un editor y guárdalo en un archivo con un nombre como
ejemplo1.php. Luego ejecuta el código (una sola vez, ten en cuenta que si lo ejecutas varias
veces insertarás varias veces repetidamente los datos en la base de datos). Recuerda
también que debes cambiar y poner tus propios valores en las funciones mysqli_connect y
mysqli_select_db.
<?php //Ejemplo curso PHP aprenderaprogramar.com
$link = mysqli_connect("sql203.byethost7.com", "b7_10356956", "*****");
mysqli_select_db($link, "b7_10356956_mibasededatos");
$tildes = $link->query("SET NAMES 'utf8'"); //Para que se inserten las tildes correctamente
mysqli_query($link, "INSERT INTO agenda VALUES ('Pedro2', 'Gómez Gómez', 'C/ Buenaventura 54', '699887766', 35,
1.98)");
mysqli_query($link, "INSERT INTO agenda VALUES ('Antonio2', 'Delgado Folken', 'C/ El Milagroso 77', '699667744',
88, 1.71)");
mysqli_close($link); // Cerramos la conexion con la base de datos
echo 'Los datos han sido insertados en la base de datos';?>
Nota: si usáramos sintaxis no mysqli se usaría mysql_query ("INSERT INTO nombreDeLaTabla
VALUES (datoCol1, datoCol2, … datoColN ", $link).
Tenemos que tener cuidado de poner los valores en el insert en el orden en el que aparecen
en la base de datos cuando creamos la tabla. Es decir, el primer valor será para la primera
columna (en nuestro ejemplo tipo varchar y corresponderá con el nombre), el segundo será
para la segunda columna (en nuestro ejemplo tipo varchar y se corresponderá con los
apellidos), etc. También tendremos que prestar atención para que los tipos de datos
insertados se correspondan con los de la tabla. Por ejemplo, no debemos insertar un valor
numérico decimal si se espera un entero.
Ahora vamos a ejecutar el código de la entrega anterior del curso para ver los nuevos
registros añadidos por pantalla. Escribe este código en un editor y guárdalo en un archivo
con un nombre como ejemplo2.php. Recuerda que debes cambiar y poner tus propios valores
en las funciones mysqli_connect y mysqli_select_db.
<html><head><meta charset="utf-8"> </head><body>
<?php //Ejemplo curso PHP aprenderaprogramar.com
function mostrarDatos ($resultados) {
if ($resultados !=NULL) {
echo "- Nombre: ".$resultados['nombre']."<br/> ";
echo "- Apellidos: ".$resultados['apellidos']."<br/>";
echo "- Dirección: ".$resultados['direccion']."<br/>";
echo "- Teléfono: ".$resultados['telefono']."<br/>";
echo "- Edad: ".$resultados['edad']."<br/>";
echo "**********************************<br/>";}
else {echo "<br/>No hay más datos!!! <br/>";}
}
$link = mysqli_connect("sql203.byethost7.com", "b7_10356956", "*****");
mysqli_select_db($link, "b7_10356956_mibasededatos");
$tildes = $link->query("SET NAMES 'utf8'"); //Para que se muestren las tildes correctamente
$result = mysqli_query($link, "SELECT * FROM agenda");
while ($fila = mysqli_fetch_array($result)){ mostrarDatos($fila); }
mysqli_free_result($result); mysqli_close($link);
?></body></html>
El resultado esperado es que se muestren por pantalla todos los resultados de la consulta:
- Nombre: Manuel Jesús - Apellidos: López de la Rosa - Dirección: C/Juan Bautista Nº 3 - Teléfono: 658954875 - Edad: 32
**********************************
- Nombre: María - Apellidos: Manzano Cabezas - Dirección: C/Arco del triunfo Nº 7 - Teléfono: 695001002 - Edad: 19
**********************************
- Nombre: Pedro - Apellidos: Somoza Castro - Dirección: C/Solera nº88, B - Teléfono: 88834321 - Edad: 44
**********************************
- Nombre: Juana - Apellidos: Pérez Rozas - Dirección: Avda. Luarcato nº22 - Teléfono: 888111222 - Edad: 22
**********************************
- Nombre: Pedro - Apellidos: Gómez Gómez - Dirección: C/ Buenaventura 54 - Teléfono: 699887766 - Edad: 35
**********************************
- Nombre: Antonio - Apellidos: Delgado Folken - Dirección: C/ El Milagroso 77 - Teléfono: 699667744 - Edad: 88**********************************
Hemos visualizado el contenido de la base de datos usando una consulta y mostrando los
resultados por pantalla. Ten en cuenta que también puedes ver el contenido de la base de
datos accediendo directamente a ella. Accede al panel de administración de tu servidor,
luego a phpMyAdmin y comprueba cómo los nuevos valores insertados se encuentran en la
tabla de la base de datos.
Nota: los nuevos datos añadidos pueden aparecer al final o al principio de la tabla. Si
quisiéramos ver los datos con un determinado orden tendríamos que incluir las instrucciones
oportunas, pero no vamos a hablar de ello en este momento.
Vamos a resumir lo que hemos hecho: por un lado hemos accedido a la base de datos
mediante código PHP y hemos insertado dos nuevas filas (al ejecutar ejemplo1.php) en la
tabla agenda. Por otro lado visualizamos el contenido de la tabla agenda (ejemplo2.php)
realizando una consulta a la base de datos y comprobamos que aparecen los dos nuevos
registros añadidos, correspondientes a “Pedro Gómez Gómez” y “Antonio Delgado Folken”.
Las operaciones de inserción en bases de datos son muy frecuentes en programación web.
Ten en cuenta por ejemplo que cada vez que se registra un usuario en una página web hay
que guardar la información del usuario (nombre, correo electrónico, etc.). Igualmente cada
vez que se produce una compra mediante comercio electrónico hay que almacenar la
información de la compra en la base de datos. Es por tanto una operación básica y de gran
interés dentro de la programación con bases de datos.
EJERCICIO
Inserta en la tabla agenda de la base de datos que estamos utilizando los datos de una
persona cuyo nombre es Jesús Murillo Moreno, de 34 años, cuyo teléfono es 655221122, vive
en c/Pintor Murillo nº33, y tiene una altura de 1.67 metros. Presta atención al orden en que
debes introducir los datos. Una vez realizada la inserción, comprueba visualizando los
registros existentes en la tabla que la inserción se haya realizado correctamente. Luego
accede al panel de administración del servidor y a la base de datos con phpMyAdmin.
Visualiza los registros en la tabla y borra la fila correspondiente a Jesús Murillo Moreno
utilizando phpMyAdmin. Como puedes comprobar, podemos operar sobre la tabla tanto a
través de phpMyAdmin como a través de código PHP.
DELETE, TRUNCATE en PHP, MySql. Borrar
datos en tablas. Cláusula WHERE, SELECT.
Ejemplo (CU00844B)
Escrito por Enrique González
Resumen: Entrega nº44 del Tutorial básico del programador web: PHP desde
cero.
Codificación aprenderaprogramar.com: CU00844B
BORRADO DE DATOS CON PHP Y MySQL.
Una tarea habitual con bases de datos será el tener que borrar cierta información. Vamos a
ver cómo realizar el borrado de ciertos registros que cumplan una condición y el borrado
completo de todos los registros (filas) de una tabla. Para ello utilizaremos dos expresiones
para operaciones (consultas) sobre bases de datos que describiremos a continuación: delete
y truncate.
SENTENCIA DELETE Y CLÁUSULA WHERE
La sentencia DELETE se suele usar para borrar unos registros de una tabla que cumplen una
o varias condiones. Vamos a utilizar una sintaxis de este tipo:
mysqli_query($link, " DELETE FROM nombreTabla WHERE columna (>, <, =, etc.) valorEspecificado ");
Aquí estamos empleando la cláusula WHERE que nos sirve para indicar una condición. Por
ejemplo DELETE FROM agenda WHERE altura > 1.90 significa “borrar todas las filas de la
tabla agenda en las que en la columna altura exista un valor mayor que 1.90”. Fíjate que al
indicar mayor (y no mayor o igual) una fila donde la altura sea exactamente 1.90 no será
borrada.
La cláusula WHERE también puede ser aplicada cuando hacemos consultas de tipo SELECT.
Por ejemplo en entregas anteriores del curso usamos SELECT * FROM agenda como consulta
que nos devolvía todas las filas de la tabla agenda. Si escribiéramos SELECT * FROM agenda
WHERE edad <= 35 obtendríamos como resultado todas las filas de la tabla agenda donde la
columna edad contiene un valor menor o igual a 35.
En una cláusula where podemos establecer una condición de igualdad (=) pero también
podremos usar otras condiciones como mayor (>), menor(<), mayor o igual (>=), menor o
igual (<=), y también condiciones múltiples y condiciones más complejas, pero no vamos a
entrar en detalles sobre esto ahora.
Igual que podemos hacer una consulta para obtener todas las filas de una tabla, también
podremos borrar todos los registros de una tabla en concreto y, para ello, sólo basta con
omitir las condiciones, es decir, hacer una consulta escribiendo lo siguiente: DELETE FROM
nombreTabla
Obviamente es peligroso hacer consultas de borrado de datos con bases de datos
importantes, ya que un error a la hora de escribir la consulta puede dar lugar a la pérdida de
datos. Nosotros estamos trabajando con una base de datos de pruebas, por lo que no nos
preocuparemos por esta cuestión.
EJEMPLO
Partiremos de nuestra base de datos donde tenemos una tabla denominada agenda con los
siguientes datos:
nombre apellidos direccion telefono edad altura
Manuel Jesús López de la Rosa C/Juan Bautista Nº 3 658954875 32 1.80
María Manzano Cabezas C/Arco del triunfo Nº 7 695001002 19 1.99
Pedro Somoza Castro C/Solera nº88, B 88834321 44 1.66
Juana Pérez Rozas Avda. Luarcato nº22 888111222 22 1.77
Pedro Gómez Gómez C/Buenaventura 54 699887766 35 1.98
Antonio Delgado Folken C/ El Milagroso 77 699667744 88 1.71
Para no afectar a esta tabla, vamos a duplicar la tabla. Esto lo podemos hacer manualmente,
pero también podemos hacerlo de forma automática con phpMyAdmin. Para ello accede al
panel de administración de tu servidor, luego a phpMyAdmin, pulsa sobre el nombre de la
base de datos y luego sobre la tabla. Ahora vete a la pestaña “Operaciones” y busca la
opción “Copiar la tabla a:”. Pon como nombre agenda2 y elige la opción “Copiar estructura y
datos”. Pulsa en continuar. Una vez hecho esto podrás comprobar que en la base de datos
tienes dos tablas: agenda y agenda2 (tabla que acabamos de copiar con los mismos datos
que teníamos en agenda).
Escribe este código en un editor y guárdalo en un archivo con un nombre como
ejemplo1.php. Ten en cuenta que deberás introducir los datos de tu propia base de datos
(nombre, user, etc.).
<?php //Ejemplo curso PHP aprenderaprogramar.com
$link = mysqli_connect("sql203.byethost7.com", "b7_10356956", "*****");
mysqli_select_db($link, "b7_10356956_mibasededatos");
mysqli_query($link, "DELETE FROM agenda2 WHERE altura > 1.90");
mysqli_close($link); // Cerramos la conexion con la base de datos
echo 'Se ha ejecutado la consulta sobre la base de datos';?>
Ejecuta el código. Con este ejercicio borraremos los registros de la tabla agenda cuya altura
sea mayor que 1.90, es decir, en la tabla agenda dejará de haber personas con altura
superior a 1.90 porque habrán sido borrados.
Comprueba con phpMyAdmin que la tabla ha quedado así:
nombre apellidos direccion telefono edad altura
Manuel Jesús López de la Rosa C/Juan Bautista Nº 3 658954875 32 1.80
Pedro Somoza Castro C/Solera nº88, B 88834321 44 1.66
Juana Pérez Rozas Avda. Luarcato nº22 888111222 22 1.77
Antonio Delgado Folken C/ El Milagroso 77 699667744 88 1.71
SENTENCIA TRUNCATE
La sentencia TRUNCATE sirve para borrar todos los registros de una tabla, al igual que
hacíamos con la función DELETE sin condiciones, pero tiene algunas diferencias con ésta que
explicaremos más adelante.
La sintaxis a emplear es:
mysqli_query($link, "TRUNCATE TABLE nombreTabla");
Al igual que las operaciones de tipo DELETE, esta operación es peligrosa en el sentido de que
si se ejecuta erróneamente puede dar lugar a la pérdida de datos.
EJEMPLO
Escribe este código en un editor y guárdalo en un archivo con un nombre como
ejemplo2.php. Ten en cuenta que deberás introducir los datos de tu propia base de datos
(nombre, user, etc.). Ejecuta el código sobre la tabla agenda2 para proceder al borrado de
todas las filas de esta tabla.
<?php
//Ejemplo curso PHP aprenderaprogramar.com
$link = mysqli_connect("sql203.byethost7.com", "b7_10356956", "*****");
mysqli_select_db($link, "b7_10356956_mibasededatos");
mysqli_query($link, "TRUNCATE TABLE agenda2");
mysqli_close($link);
// Cerramos la conexion con la base de datos
echo 'Se ha ejecutado la consulta TRUNCATE';?>
Con este código borraremos todos los registros de la tabla agenda. Accede a la tabla a través
de phpMyAdmin y comprueba que no existen registros.
¿Cuál es la diferencia entre usar delete sin condiones y usar truncate? Vamos a explicarla a
continuación.
DIFERENCIAS ENTRE DELETE Y TRUNCATE
a) Ambas eliminan los datos, no la estructura de la tabla.
b) Sólo DELETE permite la eliminación condicional de los registros (es decir, borrar sólo
ciertas filas), TRUNCATE no lo permite.
c) TRUNCATE es más rápida que DELETE.
d) TRUNCATE reiniciará el contador para una tabla que contenga una clave
autoincrementada. Si en nuestra tabla agenda tuviéramos un campo id autoincremental 1, 2,
3, 4, 5 … n (hasta el número de registros existentes) al hacer TRUNCATE el contador volverá
a empezar en 1. En cambio DELETE mantendrá el contador de la tabla para una clave
autoincrementada. Es decir, si borramos todos los registros de una tabla que tenía un campo
contador autoincremental cuyo último valor era 3257, al insertar un dato después del
borrado el valor del contador será 3258 en lugar de 1.
e) TRUNCATE recrea una tabla, es decir, la tabla desaparece completamente y luego es
creada de nuevo, mientras que DELETE no hace que desaparezca la tabla, sólo elimina sus
registros.
CUÁNDO USAR DELETE Y TRUNCATE
Usar TRUNCATE es más rapido que DELETE si vas a borrar toda una tabla y no te importan
los indices (claves autoincrementadas) o bien quieres resetearlos (hacer que vuelvan a
empezar desde 1).
Usar DELETE para borrados selectivos (borrar determinados registros manteniendo otros).
Hay otras cuestiones que se deben tener en cuenta, pero no te preocupes por esto ahora, lo
irás descubriendo a medida que avances en conocimientos de programación y bases de
datos.
EJERCICIO 1
Realiza una consulta y muestra por pantalla los datos correspondientes a filas de la tabla
agenda donde la edad sea mayor o igual que 20 y la altura sea mayor o igual que 1.75.
Para comprobar si tus respuestas y código son correctos puedes consultar en los foros
aprenderaprogramar.com.
EJERCICIO 2
Crea una tabla que sea copia de agenda a la que denomines agenda3 y un archivo php que
al ejecutarlo realice los siguientes procesos:
a) Mostrar el contenido inicial de la tabla agenda3 por pantalla.
b) Eliminar todos los registros de la tabla agenda3 cuyo campo edad sea mayor o igual a 34 y
mostrar el contenido actual de la tabla por pantalla.
c) Insertar dos nuevos registros en la tabla agenda3 (elige tú unos datos cualquiera) y
mostrar el contenido actual de la tabla por pantalla.
d) Eliminar todos los registros de la tabla agenda3 usando TRUNCATE y mostrar el contenido
actual de la tabla por pantalla.
e) Insertar tres nuevos registros en la tabla agenda3 (elige tú unos datos cualquiera) y
mostrar el contenido actual de la tabla por pantalla.
f) Eliminar todos los registros de la tabla agenda usando DELETE sin condiciones y mostrar el
contenido actual de la tabla por pantalla.
Final del curso: "Tutorial básico del
programador web: PHP desde cero"
(CU00845B)
Escrito por Enrique González
Resumen: Entrega nº45 del Tutorial básico del programador web: PHP desde
cero.
Codificación aprenderaprogramar.com: CU00845B
FINAL DEL CURSO TUTORIAL
Con esta entrega llegamos al final del curso “Tutorial básico del programador web: PHP
desde cero”. Esperamos que haya sido un curso útil y ameno para todas las personas que lo
hayan seguido. Y como en todo final, cabe hacer algunas consideraciones especiales.