PHP Y FIREBIRDPrimera Parte Walter R. Ojeda Valiente Asunción, Paraguay, Enero de 2012 ÍNDICE INTRODUCCIÓN............................. 1 EL LENGUAJE PHP.......................... 2 ¿Qué es PHP? ................................................ 2 Servidor web y Cliente web .................................. 2 Servidor web ................................................ 2 Cliente web ................................................. 2 Resumen de Servidor web y Cliente web ....................... 3 Páginas web estáticas y páginas web dinámicas ............... 3 ¿Cómo se comunican el Cliente y el Servidor sin PHP? ........ 3 ¿Cómo se comunican el Cliente y el Servidor con PHP? ........ 4 ¿Qué debo instalar en mi computadora? ....................... 5 ¿Puedo tener mi sitio web en mi propia computadora? ......... 5 ¿De dónde puedo descargar el XAMPP? ......................... 6 ¿Cuál de ellos debo descargar? .............................. 7 ¿Cómo se instala el XAMPP? .................................. 7 ¿Dónde debo descomprimir el archivo .zip? ................... 7 ¿Qué viene incluido dentro del XAMPP? ....................... 7 ¿Cómo inicializo el XAMPP? .................................. 8 ¿Qué es el Panel de Control del XAMPP? ...................... 9 ¿Cómo sé si el intérprete PHP se está ejecutando? ........... 9 ¿Qué significa instalar Apache como un servicio? ............ 9 ¿Cuál es la carpeta raíz del AMPP? ......................... 10 ¿Cómo creo la estructura de carpetas de mi sitio web? ....... 10 PROGRAMACIÓN EN PHP......................11 Conocimientos previos ...................................... Ejemplos ................................................... ¿Cómo se crea un programa PHP? ............................. ¿Cómo se ejecuta un programa PHP? .......................... ¿Cuál es el resultado de la ejecución de un programa PHP? .. Comentarios ................................................ Variables en PHP ........................................... Tipos de variables ......................................... Saltos de línea ............................................ Concatenación .............................................. Comillas simples y comillas dobles ......................... Estructura condicional IF .................................. Operadores de comparación .................................. Estructura de repetición FOR ............................... Estructura de repetición WHILE ............................. Estructura de repetición DO WHILE .......................... Funciones internas ......................................... Funciones del usuario ...................................... Arrays tradicionales ....................................... Arrays asociativos ......................................... Envío de datos desde un formulario ......................... Recepción de datos ......................................... Control Checkbox ........................................... Control Radio .............................................. Control Select ............................................. Control TextArea ........................................... Archivos de texto .......................................... Creación y apertura de un archivo de texto ................. Lectura de un archivo de texto ............................. 11 11 11 12 12 12 12 13 13 14 15 15 17 17 18 19 20 21 24 25 27 29 30 32 33 35 36 38 40 BASES DE DATOS FIREBIRD..................41 ¿Qué debo hacer para que PHP reconozca a Firebird? ......... ¿Cuál es la Base de Datos Firebird que utilizaremos? ....... Insertar filas en una tabla ................................ Listar todas las filas de una tabla ........................ Consultar datos ............................................ Sistema de ingreso de datos por Internet ................... ¿Qué significan estos errores? ............................. 42 42 43 45 46 48 51 INTRODUCCIÓN Utilizar Firebird en las aplicaciones de escritorio multiusuario que requieren acceso a una (o más de una) Base de Datos es una muy buena opción, pero en estos tiempos donde Internet está en todas partes también debemos plantearnos la posibilidad de usarlo en un Servidor web para poder realizar las operaciones de inserción, borrado, actualización y consulta desde cualquier computadora, teléfono celular, tableta u otro dispositivo que tenga conexión con Internet. Este documento justamente trata ese punto, la intención es explicar claramente los pasos que se deben seguir para interactuar con una Base de Datos alojada en un Servidor web. Al hacer eso conseguiremos que nuestras aplicaciones sean muchísimo más poderosas, con un gran valor agregado y por lo tanto más “vendibles” que las de la competencia, aquellos que se han quedado atrasados y aún no interactúan con Internet. Hay muchísimo material sobre PHP que se puede conseguir fácilmente, tanto documentos como vídeos como grupos de usuarios que pueden colaborar despejando las dudas que uno normalmente tiene al empezar a programar con un nuevo lenguaje. De todas maneras, para facilitar la tarea en este documento hay una introducción al lenguaje PHP y muchas páginas con ejemplos escritas en él para que el aprendizaje resulte muy sencillo. Lo bueno del PHP es que si tienes experiencia con algún otro lenguaje de programación te resultará demasiado fácil aprenderlo, tiene una sintaxis clara y no hay cosas rebuscadas, todo es muy directo, no deberías tardar más de unos pocos días en dominarlo completamente. Aunque el SGBD (Sistema Gerenciador de Bases de Datos) en el cual está basado este documento es Firebird SQL, los conceptos son los mismos para cualquier otro SGBD (MySQL, PostgreSQL, Oracle, etc.) -1- EL LENGUAJE PHP ¿QUÉ ES PHP? PHP es el acrónimo recursivo de “PHP: Hypertext Preprocessor), se trata de un lenguaje interpretado, de alto nivel, embebido en páginas HTML y ejecutado en el Servidor. Es un lenguaje interpretado porque no se lo compila, sus instrucciones van ejecutándose a medida que un intérprete las va leyendo Es de alto nivel porque no se preocupa por asignaciones de memoria, páginas de memoria, interrupciones y todo eso, sino que sus instrucciones son fáciles de entender por los seres humanos Es embebido en páginas HTML porque el código fuente de un programa PHP siempre está metido dentro de una página con formato HTML o que puede ser reconocida por los navegadores (Internet Explorer, Mozilla Firefox, Google Chrome, Opera, etc.) Sus instrucciones son ejecutadas en el Servidor, no en el Cliente como es el caso de JavaScript - - SERVIDOR WEB Y CLIENTE WEB Cuando se habla de Servidor web y de Cliente web se puede estar refiriendo al hardware o al software. En todo este documento siempre nos referiremos al software. SERVIDOR WEB Un Servidor web es un programa que se encarga de enviarle páginas HTML (las que pueden mostrar los navegadores) a otro programa, el Cliente web (el navegador: Internet Explorer, Firefox, Chrome, Opera, etc.) que se las pidió. Además de las páginas HTML también puede enviar fotos, vídeos, canciones, gráficos, u otros documentos que estén incluidos dentro de dichas páginas. CLIENTE WEB Un Cliente web es un programa, comúnmente conocido como el navegador, el cual le envía una petición al Servidor web y recibe una respuesta de éste -2- Son estáticas aquellas que siempre muestran lo mismo. recibe el mensaje 4. la única forma de cambiar su contenido es que el administrador del sitio web introduzca modificaciones en ellas. Con PHP lo que haremos serán páginas web dinámicas. ¿CÓMO SE COMUNICAN EL CLIENTE Y EL SERVIDOR SIN PHP? Cuando no se usa PHP la comunicación es así: 1. El Cliente web (o sea el navegador.html todos quienes la vean siempre verán exactamente los mismos productos. lo procesa. El Servidor web. así mismo como está grabado en el disco duro al Cliente web (o sea: al navegador) 6.html) 3. Busca ese archivo en su disco duro 5.abc. la única forma de que vean otros productos es que esa página sea editada y luego vuelta a subir al sitio web. le envía una página avisándole que no encontró el archivo (la página que tiene el famoso error 404) 7. Son dinámicas aquellas que cambian su contenido dependiendo de una condición (el día de la semana. Por ejemplo. etc.abc. Se escribe en el navegador (o también llamado Cliente web) el nombre de la página que se desea visitar (por ejemplo: www. si tenemos una página productos. Si lo encuentra. PÁGINAS WEB ESTÁTICAS Y PÁGINAS WEB DINÁMICAS Las páginas web pueden ser estáticas o dinámicas.com. El Cliente web (o navegador) le muestra al usuario la página que recibió -3- . Estas son mucho más flexibles y normalmente mucho más útiles que las estáticas aunque ambas tienen su razón de ser. que es un programa que se ejecuta en una computadora y que se encuentra en la dirección www.RESUMEN DE SERVIDOR WEB Y CLIENTE WEB Resumiendo: un Servidor web es un programa de computadora que recibe un mensaje de un Cliente web. Un Cliente web es un programa de computadora que envía un mensaje al Servidor web. envía el archivo. recibe una página HTML de éste y muestra esa página al usuario.com. Si no lo encuentra.py. el nombre del usuario. la hora del día.). solicitándole que le devuelva un archivo que tiene ese nombre (en este caso: index.py/index. por ejemplo: Firefox) envía el mensaje a través de Internet al Servidor web.html) 2. y le envía una página HTML a ese Cliente. un dato que introdujo el usuario. -4- .¿CÓMO SE COMUNICAN EL CLIENTE Y EL SERVIDOR CON PHP? Cuando se usa PHP la comunicación es así: 1. El resultado de la ejecución de todos los comandos contenidos en el archivo con extensión . Java.com. Se escribe en el navegador (o también llamado Cliente web) el nombre de la página que se desea visitar (por ejemplo: www. el cual se lo muestra al usuario.php se la envía al intérprete PHP (que es otro programa alojado en la misma computadora que el Servidor web) 5. Envía el archivo que generó. El Cliente web le muestra al usuario la página (el archivo . se comunica con un gestor de Bases de Datos.html.py/index.php no existe en el disco duro del Servidor web. en PHP la salida es la creación de un archivo que tiene la extensión . al navegador Firefox) 11.html) al Cliente web (o sea. la versión del intérprete PHP.php es un archivo con extensión . el cual se envía al Servidor web el cual lo envía al Cliente web. El Cliente web (o sea el navegador. que es un programa que se ejecuta en una computadora y que se encuentra en la dirección www.php no existe en el disco duro del Servidor web entonces el intérprete PHP genera un archivo con extensión . Si el archivo con extensión .abc. Al ver que la página tiene la extensión . Delphi.abc. la hora.php) y lo busca en el disco duro 6.php) 2. El Servidor web envía la página (el archivo con extensión . El intérprete PHP recibe el mensaje (o sea: el nombre de un archivo que tiene extensión .) 9.) la salida es normalmente la pantalla. En cambio. Si lo encontró. ejecuta todos los comandos contenidos en ese archivo (y si es necesario.py recibe el mensaje 4. el nombre del Servidor web.php) 3. El Servidor web. solicitándole que le devuelva un archivo que tiene ese nombre (en este caso: index. el cual tiene extensión . Basic.com.html. como podría ser el Firebird) 7.html) Aquí hay algo importante que notar: en los lenguajes de programación normales (Visual FoxPro. al Servidor web 10. etc. por ejemplo: Firefox) envía el mensaje a través de Internet al Servidor web. Pantalla Nº 1 En la pantalla Nº 1 se ve un ejemplo de lo que ocurre cuando el archivo . etc.html 8.html conteniendo un mensaje de error y algunos datos más (la fecha. . Servidor de FTP. son todos ejemplos de Clientes web. Casi todos los proveedores de hosting te asignan una cantidad “x” de megabytes. Sin embargo no es el mismo caso con el Servidor web. etc. las fotos.php. por ejemplo: Internet Explorer. Casi todos los proveedores de hosting te limitan la cantidad de megabytes que se pueden subir o bajar mensualmente en tu sitio. éste debe ser descargado e instalado antes de poder ser usado. en tu propia computadora. etc. • No tienes límite en el ancho de banda. los más conocidos son WAMP y XAMPP ¿Por qué usar un instalador todo-en-uno? Porque toda (o casi toda) la configuración ya está realizada y solamente podemos dedicarnos a usar esos programas. ¿PUEDO TENER MI SITIO WEB EN MI PROPIA COMPUTADORA? Sí. • Puedes tener siempre esos programas actualizados con su última versión -5- . El intérprete del lenguaje PHP Podemos buscarlos.html. en cambio si tu sitio está en tu propia computadora puedes utilizar todo tu disco duro para ello si lo deseas. Aunque hay muchos sitios gratis.). El programa Servidor web (puede ser Apache. los vídeos. IIS o algún otro) 2. etc. sin embargo la mejor opción es usar un instalador que los tiene a ambos incluidos. Si deseamos que nuestra computadora actúe como un Servidor web y que también interprete programas PHP entonces necesitaremos: 1. Mozilla Firefox. Servidor de e-mail. las páginas . la Base de Datos. instalarlos y configurarlos por separado. • No debes pagar por el hosting.css.¿QUÉ DEBO INSTALAR EN MI COMPUTADORA? Todas las computadoras ya tienen instalado un programa que pueden usar como Cliente web. siempre tienen algunas limitaciones y los que realmente valen la pena son de pago. Google Chrome. • Eliminas la posibilidad de que los administradores del web hosting estén curioseando en tus programas y en tus Bases de Datos • Puedes instalar todos los programas que necesites (y que te gusten): Servidor web. pero ¿vale la pena? Ventajas • No tienes límite en el espacio de almacenamiento. los archivos . sin perder tiempo en configurarlos. si tienes un programa Servidor web y un intérprete del lenguaje PHP puedes tener todo tu sitio web (las páginas . monitorear lo que entra y lo que sale de tu computadora.Desventajas • El riesgo de seguridad se incrementa mucho. los 365 días del año. Para ser descomprimido en una carpeta El instalador del XAMPP puede ser descargado desde: http://sourceforge.zip) puede ser descargado desde: http://sourceforge. buscar los últimos parches de los programas que utilizas.7.7/xamppwin32-1.7-VC9. • Necesitarás de un muy buen equipo de aire acondicionado para evitar que se sobrecaliente.) tu sitio estará inaccesible • Necesitarás contratar a alguien que se encargue de verificar constantemente que el hardware está bien y que no estás recibiendo ataques de hackers o de malware (o hacerlo tú mismo.apachefriends. pero eso lleva su tiempo) • Si tu sitio es muy concurrido entonces necesitarás de un muy buen ancho de banda para evitar que el acceso sea lentísimo (y un ancho de banda grande puede llegar a ser muy caro) Deberías evaluar bien todos los puntos anteriores antes de tomar una decisión.html Allí encontrarás mucha documentación y comentarios.org/en/xampp.7/xamppwin32-1.exe/download El archivo comprimido (con formato . un buen anti-malware y en caso de hallar algo malo o sospechoso tomar los recaudos adecuados • Tu computadora debe estar encendida las 24 horas. ¿DE DÓNDE PUEDO DESCARGAR EL XAMPP? La página principal es la siguiente: http://www.net/projects/xampp/files/XAMPP%20Windows/1. etc. Eso significa que debes preocuparte por ese tema. Lo que normalmente se hace es lo siguiente: se desarrolla el sitio web en la computadora propia y cuando todo está ok se lo sube a un hosting gratuito o de pago. sobre todo en época de verano • Tus gastos en concepto de energía eléctrica aumentarán muchísimo • Si necesitas apagar tu computadora para hacerle alguna tarea de mantenimiento (ampliarle la memoria.7-VC9-installer. Para ser instalado 2. cambiarle el disco duro. El XAMPP viene en dos “sabores”: 1.zip/download -6- . usar un buen firewall.7. un buen antivirus.7.net/projects/xampp/files/XAMPP%20Windows/1. al estar expuesto a Internet puedes ser víctima de hackers.7. pues si no está encendida no se podrá acceder a ella. 8 phpMyAdmin 3.¿CUÁL DE ELLOS DEBO DESCARGAR? Depende de lo que quieras hacer: los programas que se instalan en Windows modifican el Registro del Windows (y eso puede hacer a tu computadora un poco más lenta).5 Filezilla FTP Server 0.39 Tomcat 7.5. lo siguiente: Apache 2. Si vas a usar el Servidor web frecuentemente entonces te conviene instalarlo pero si lo vas a usar muy esporádicamente entonces lo mejor sería que lo descomprimas en una carpeta. Lo único que debes tomar en consideración es lo siguiente: no es recomendable que lo instales en C:\Program files\ o en C:\Archivos de Programa\ sobre todo si usas Windows Seven o posterior. Lo normal es instalarlo en la carpeta C:\xampp\ ¿DÓNDE DEBO DESCOMPRIMIR EL ARCHIVO . ¿QUÉ VIENE INCLUIDO DENTRO DEL XAMPP? En el momento de escribir este documento.21 Los programas y las versiones de los mismos pueden variar en el futuro.16 PHP 5.3.9.4.\xampp\ que es la que asumiremos en todo este documento. -7- . lo normal es que lo hagas en la carpeta C:\ para que se guarde en la carpeta C.0.21 MySQL 5. normalmente C:\xampp\ ¿CÓMO SE INSTALA EL XAMPP? Como cualquier otro programa Windows.2.ZIP? Si elegiste la opción de descargar un archivo comprimido y lo deseas descomprimir para usarlo. ¿CÓMO INICIALIZO EL XAMPP? Si lo instalaste. etc. ejecutar sentencias SQL. puede agregar. eso significa que permite que los archivos que se encuentran en un sitio web puedan ser descargados desde otras computadoras Tomcat es un contenedor de servlets. hasta ver esta pantalla: Pantalla Nº 2 Eso lo debes hacer una sola vez. ya está listo para ser usado. que son programitas que se ejecutan en el Cliente). Los servlets son programitas que se ejecutan en el Servidor (a la inversa de los applets.• • • • • • Apache es el Servidor web MySQL es un SGBD muy usado en Internet PHP es el intérprete del lenguaje PHP phpMyAdmin es un programa escrito en PHP encargado de administrar Bases de Datos MySQL. eliminar y modificar tablas.bat y esperar unos segundos. Pero si lo descomprimiste en una carpeta entonces antes de usarlo deberás ejecutar el programa: C:\xampp\setup_xampp. la primera vez que usarás el XAMPP. -8- . Filezilla es un Servidor de FTP. En la Pantalla Nº 2 vemos que sí se está ejecutando Apache (y por lo tanto. también se está ejecutando el intérprete de PHP). Pantalla Nº 3 El nombre completo es: C:\xampp\xampp-control. PHP también. ¿QUÉ SIGNIFICA INSTALAR APACHE COMO UN SERVICIO? Los servicios de Windows son programas que están siempre residentes en la memoria. La ventaja es que no debes ejecutarlos por ti mismo (haciendo doble click sobre un icono. están allí desde que inicias el Windows hasta que sales de él (salvo que lo detengas manualmente). si está en “Running”). La desventaja es que consumen memoria y recursos del Sistema.¿QUÉ ES EL PANEL DE CONTROL DE XAMPP? Es un programa que te indica el estado actual de las aplicaciones incluidas en el paquete. Si lo está.exe ¿CÓMO SÉ SI EL INTÉRPRETE PHP SE ESTÁ EJECUTANDO? Fíjate en el Panel de Control de XAMPP si Apache se está ejecutando (o sea. lo cual es un desperdicio si no los utilizas. ya que siempre están ejecutándose. Si quieres iniciar una de ellas debes hacer click sobre su botón “Start” y si quieres detener una aplicación. -9- . debes hacer click sobre su botón “Stop”. por ejemplo) cuando los necesitas. todas tus carpetas deben estar debajo de ella.html localhost/Verano2012/fotos/amigos. eso es porque la convención de Windows es usar barras hacia atrás para las carpetas y la convención de Unix es la de usar barras hacia adelante. localhost C:\xampp\htdocs\ ¿CÓMO CREO LA ESTRUCTURA DE CARPETAS DE MI SITIO WEB? Dado que C:\xampp\htdocs\ equivale al localhost. por ejemplo supongamos que estás construyendo un sitio que se llamará Verano2012. entonces estas podrían ser sus carpetas: C:\xampp\htdocs\Verano2012\ C:\xampp\htdocs\Verano2012\fotos\ C:\xampp\htdocs\Verano2012\videos\ Y para acceder desde tu navegador a sus páginas podrías escribir en la barra de direcciones algo como: localhost/Verano2012/index.¿CUÁL ES LA CARPETA RAÍZ DEL XAMPP? La carpeta raíz o localhost del xampp es htdocs. . eso significa que cuando escribas localhost en tu navegador se ubicará en esa carpeta.10 - .html localhost/Verano2012/lugaresvisitados.php Habrás notado que en un caso se usan barras hacia atrás y en el otro se usan barras hacia adelante. Como Internet fue inicialmente creado en Unix ese es el motivo del por qué se usan las barras hacia adelante en las direcciones web. Todos los programas que desarrollaremos a lo largo de este curso se guardarán en la carpeta pruebas y los nombres de todos los archivos tendrán el formato: prueba99. Visual Basic.html. . Delphi. C. <html> <head></head> <body> <?php echo "Estamos aprendiendo PHP y Firebird". ?> </body> </html> Puedes grabar ese archivo con cualquier nombre que quieras.PROGRAMACIÓN EN PHP CONOCIMIENTOS PREVIOS A partir de aquí se asume que tienes algunos conocimientos aunque sean básicos del lenguaje HTML y que también sabes programar en algún lenguaje de programación (Visual FoxPro.). Java. Si eso no es así entonces deberías leer algunos tutoriales aunque sean muy simples sobre esos temas. el programa anterior se llama: C:\xampp\htdocs\pruebas\prueba01. pero la extensión debe ser . por ejemplo. etc.php Las etiquetas de PHP Todos los códigos fuente de PHP están entre las etiquetas <?php y ?> El punto y coma al final de la sentencia Al igual que otros lenguajes de programación.ZIP de donde extrajiste este documento.11 - .php. en PHP hay que finalizar las sentencias con un punto y coma.php. para poder entender lo que sigue. Puedes escribir las siguientes instrucciones en cualquier editor que guarde el contenido como texto plano. los programas PHP están incluidos dentro de archivos con extensión . EJEMPLOS Todos los programas que desarrollaremos en este curso se encuentran incluidos en el mismo archivo . ¿CÓMO SE CREA UN PROGRAMA PHP? Como ya habíamos visto. sí o sí. ya que es la única que reconoce el intérprete de PHP. por ejemplo el Block de Notas del Windows. echo $Localidad.12 - .php ¿CUÁL ES EL RESULTADO DE LA EJECUCIÓN DE UN PROGRAMA PHP? Siempre es un archivo con extensión . ?> </body> </html> prueba02.php en la barra de direcciones hacemos click con el botón derecho en esa página web y luego en el menú contextual que aparece hacemos click sobre la opción “Ver código fuente” esto es lo que veremos: <html> <head></head> <body> Estamos aprendiendo PHP y Firebird</body> </html> Que no es lo mismo que habíamos escrito en nuestro programa.php . sino el resultado de la ejecución de nuestro programa. Paraguay".php) en la barra de direcciones del navegador. ¿verdad? COMENTARIOS Los comentarios se indican con dos barras hacia delante (//) o con /* para empezarlo y */ para finalizarlo. Todos los nombres de variables tienen un símbolo $ como prefijo y son sensibles a las mayúsculas y a las minúsculas (o sea que la variable $Nombre es distinta a la variable $nombre y es distinta a la variable $NoMbRe) <html> <head></head> <body> <?php $Localidad = "Asunción.¿CÓMO SE EJECUTA UN PROGRAMA PHP? Escribiendo su nombre (y su extensión . para ejecutar el programa anterior escribiríamos: localhost/pruebas/prueba01.html (o sea: una página web). Si después de escribir localhost/pruebas/prueba01. Por ejemplo. son creadas en el momento en que se las usa por primera vez. VARIABLES EN PHP No se las define antes de usarlas. Interesante. echo $Cobrado. echo "<br>". // Tipo string // Tipo entero // Tipo doble // Tipo lógica (el valor numérico de true es 1) No se necesita convertirlas a tipo string para concatenarlas <html> <head></head> <body> <?php $Nombre = "Walter". entero. echo $Localidad. ?> </body> </html> prueba03. echo $Localidad.13 - .TIPOS DE VARIABLES Hay cuatro tipos de variables: string. echo $Precio. echo "<br>". $Cobrado = true.php SALTOS DE LÍNEA Para que la impresión se muestre en la siguiente línea se usa “<br>”. $Localidad = "Asunción. lógica $Nombre = “Walter”.52. $Precio = 487. $Precio = 487. echo "<br>". echo "<br>". echo "<br>". echo "<br><br><br><br>". $Mes = 12.52. ?> </body> </html> prueba04. echo $Nombre. doble. $Mes = 12. Paraguay". echo $Nombre. echo $Nombre. echo $Localidad. $Cobrado = true.php . echo $Mes. como vemos a continuación: <html> <head></head> <body> <?php $Nombre="Walter". "Cobrado es " . por ejemplo: <html> <head></head> <body> <?php $Nombre="Napoleón". $Cobrado.php <html> <head></head> <body> <?php $Nombre = "Walter". "El precio es " . $Apellido = "Bonaparte". no es necesario que los dos operandos sean de tipo string.14 - . echo "<br>". $Mes. $Cobrado = true. echo "Cobrado es " .CONCATENACIÓN Para concatenar dos constantes o variables se usa el punto. $Mes = 12. echo "<br>". $Precio = 487. $Cobrado = true. echo "El precio es " . "El mes es " . ?> </body> </html> prueba07. $Precio. ". echo "El nombre es " . ?> </body> </html> prueba06. $Mes = 12. $Precio = 487. $Precio . echo "El mes es " . "<br>" . echo "<br>". echo "El nombre es " . " . $Nombre . por ejemplo: <html> <head></head> <body> <?php $Nombre = "Walter".php También se podría concatenar todo lo anterior para escribirlo en una sola línea.52. $Cobrado. "<br>" . $Mes .52. $Nombre. "<br>" . ?> </body> </html> prueba05. $Nombre.php . echo $Apellido . } else { [Instrucción 5]. } elseif (Condición 2) { [Instrucción 3]. [Instrucción 2]. echo "<br>".42. Las condiciones siempre deben estar entre paréntesis. $Mensaje2 = "El precio es $Precio". Tiene el siguiente formato: if (Condición 1) { [Instrucción 1]. éstas deben estar entre llaves. la diferencia es que en el primer caso no se sustituyen las variables que tenga en su interior y en el segundo caso sí. Si se necesita ejecutar varias instrucciones. // Se sustituye la variable por su valor <html> <head></head> <body> <?php $Precio = 876. echo $Mensaje1.php ESTRUCTURA CONDICIONAL IF Para que la ejecución del programa se desvíe según que una condición sea verdadera o falsa se utiliza la construcción if … elseif … else. [Instrucción 4]. ?> </body> </html> prueba08. echo $Mensaje2. $Precio = 876. // No se sustituye la variable por su valor $Mensaje2 = “El precio es $Precio”. $Mensaje1 = 'El precio es $Precio'. $Mensaje1 = ‘El precio es $Precio’. } .COMILLAS SIMPLES Y COMILLAS DOBLES Las variables de tipo string se pueden definir con comillas simples o con comillas dobles. [Instrucción 6].42.15 - . elseif ($HoraEntrada == 14) echo "Tarde". ?> </body> </html> prueba09.<html> <head></head> <body> <?php $Edad = 17. if ($HoraEntrada == 6) echo "Mañana". else echo "Noche". $Sueldo = 150. $Sueldo = 120. if ($HoraEntrada == 6) { echo "Mañana".php <html> <head></head> <body> <?php $HoraEntrada = 14.php . } echo "<br><br>Tu sueldo es de $Sueldo por hora". else echo "No puede ver la película".16 - .} else { echo "Noche".php <html> <head></head> <body> <?php $HoraEntrada = 14. ?> </body> </html> prueba11. ?> </body> </html> prueba10. $Sueldo = 100. if ($Edad >= 18) echo "Puede ver la película". } elseif ($HoraEntrada == 14) { echo "Tarde". [condición].OPERADORES DE COMPARACIÓN Para comparar dos operandos se pueden utilizar los siguientes operadores de comparación: == != >= > <= < // Igualdad // Distinto // Mayor o igual // Mayor // Menor o igual // Menor ESTRUCTURA DE REPETICIÓN FOR Tiene el siguiente formato: for ([Se inicializa la variable].17 - . eso se ejecuta una sola vez. $i <= 100 es la condición que debe cumplirse para que el ciclo se repita.php $i = 1 lo que hace es asignar el valor inicial de la variable $i. En otras palabras significa “mientras el valor de $i sea menor o igual que 100” $i++ es lo mismo que en otros lenguajes se escribiría $i = $i + 1 o sea. $i <= 100. incrementa el valor de la variable $i en una unidad. ?> </body> </html> prueba12. . [Se cambia el valor]) { [Instrucciones]. $i++) echo "I = $i <br>". } <html> <head></head> <body> <?php for ($i = 1. ESTRUCTURA DE REPETICIÓN WHILE Tiene el siguiente formato: while (condición) { [Instrucciones]. while ($i <= 10) { echo "El valor es $i <br>". Hay que tomar en cuenta dos cosas: 1. } ?> </body> </html> prueba14. 2. ?> </body> </html> prueba13. } Mientras la condición sea verdadera se ejecutarán las instrucciones. No se coloca un punto y coma después de la llave de cierre .18 - . <html> <head></head> <body> <?php $i = 1.php En este caso el valor inicial es 2 y el incremento también es de 2.php En este caso. mientras la condición sea verdadera se ejecutarán todas las instrucciones que estén entre las llaves. inclusives. $i <= 100. $i++. Si la primera vez la condición es falsa entonces las instrucciones que estén dentro del while nunca será ejecutadas. antes del while() hay que asignarle un valor inicial a la variable que se usará en la condición. $i = $i + 2) echo "I = $i <br>".<html> <head></head> <body> <?php for ($i = 2. eso significa que se mostrarán todos los números pares entre 2 y 100. } while ($i <= 100). En este caso. ?> </body> </html> prueba15. do { echo "El valor es $i <br>". } while (condición). primero se ejecutan las instrucciones y luego se verifica si la condición es verdadera ¿qué implica eso? Que las instrucciones siempre se ejecutan al menos una vez. fíjate que se coloca un punto y coma al final de la condición.19 - .ESTRUCTURA DE REPETICIÓN DO WHILE Tiene el siguiente formato: do { [instrucciones].php . $i = $i + 5. También. <html> <head></head> <body> <?php $i = 5. $i++) echo "$i <br>". te permitirá siempre conocer la configuración actual de PHP. ambos incluidos. ?> </body> </html> prueba17. $NumeroElegido = rand(1. .20 - . for ($i = 1. por ejemplo el siguiente: http://www.net/manual/es/funcref. <html> <head> <title>Ejemplo de una función interna</title> </head> <body> <?php phpinfo().php Allí las encontrarás clasificadas y con una descripción de la tarea que realizan. ?> </body> </html> prueba16.FUNCIONES INTERNAS El PHP cuenta con numerosísimas funciones internas. para conocerlas a todas deberías leer algún manual o visitar algún sitio web. 20).php.php La función rand() devuelve un número que se encuentre entre el primero y el segundo de sus argumentos. $i <= $NumeroElegido. <html> <head> <title>Ejemplo de uso de la función rand()</title> </head> <body> <?php echo "Ejecuta varias veces este programa para ver lo que hace <br><br>".php La función phpinfo() es extremadamente importante. ?> </body> </html> prueba18. normalmente llamadas funciones del usuario. } <html> <head> <title>Ejemplo de función del usuario</title> </head> <body> <?php function CentrarMensaje($Mensaje) { echo "<table width=\"100%\" border=\"1\">". echo "<tr><td align=\"center\">". CentrarMensaje("Este también estará centrado"). echo "</table>". echo $Mensaje. echo "</tr></td>".FUNCIONES DEL USUARIO Las declaraciones de funciones propias del programador. Se le puede enviar cualquier mensaje y lo mostrará centrado horizontalmente.php Esta función mostrará en la pantalla un mensaje centrado. tienen el siguiente formato: Function [nombre de la función] ([parámetros de entrada]) { [instrucciones]. [return valor_retornado]. } CentrarMensaje("Este es mi primer mensaje centrado con la función CentrarMensaje()").21 - . . como podemos ver en el siguiente ejemplo. .<html> <head> <title>Esta función devuelve el mayor de dos números</title> </head> <body> <?php function Mayor($Numero1. Para decirle al PHP que deseamos que devuelva los valores por referencia le colocamos el prefijo ampersand (&). $Valor2). ¿Y si se necesita que una función devuelva más de un valor? En ese caso los valores se devuelven por referencia. La llamada es normal. se hace como siempre. prueba19. ?> </body> </html> $Valor2 es: " . no en la llamada a la función. else return $Numero2. Todas las variables que empiecen con & serán devueltas por referencia. La función MayorMenor() recibe dos números y devuelve el número mayor y el número menor.php La función Mayor() recibe como parámetros dos números y devuelve el mayor de ellos. El ampersand (&) se coloca en la declaración de la función.22 - . $Valor2 = 22. $Numero2) { if ($Numero1 > $Numero2) return $Numero1. echo "El mayor entre $Valor1 y Mayor($Valor1. } $Valor1 = 15. 23 - . echo "El mayor entre $Valor1 y $Valor2 es: $NumeroMayor<br>". } $Valor1 = 15. $Valor2 = 22. else $Menor = $Numero2. else $Mayor = $Numero2. echo "El menor entre $Valor1 y $Valor2 es: $NumeroMenor<br>". Solamente los que empiezan con ampersand se devuelven. &$Mayor. $NumeroMayor. .<html> <head> <title>Esta números</title> </head> <body> <?php function MayorMenor($Numero1.php Fíjate que al declarar la función MayorMenor() dos de sus parámetros empiezan con el símbolo de dólar y dos empiezan con ampersand. $Valor2. &$Menor){ if ($Numero1 > $Numero2) $Mayor = $Numero1. ?> </body> </html> función devuelve el mayor y el menor de dos prueba20. MayorMenor($Valor1. $Numero2. $NumeroMenor). if ($Numero1 < $Numero2) $Menor = $Numero1. También se puede evitar colocar los números de los índices. “Rojo”. $Continente[] = “Asia”. $NombreEstacion[3] = “Invierno”. $Dia[2] = 31. $Continente[] = “Oceanía”. “Amarillo”. $NombreEstacion[2] = “Otoño”. ya que el PHP los puede colocar automáticamente. ejemplos: $NombreEstacion[0] = “Primavera”. $Continente[] = “Europa”.ARRAYS TRADICIONALES Los arrays son muy utilizados en la programación en general y en PHP en particular. Hay que recordar que los arrays siempre comienzan numerándose desde cero. cuando se los define el PHP ya sabe que se trata de un array. $Dia[0] = 31. “Azul”. entero. $Dia[1] = 28. por ejemplo: $Continente[] = “Africa”. Dependiendo de la cantidad de dimensiones que tengan pueden ser: • • • De una dimensión (vectores) De dos dimensiones (matrices) De tres o más dimensiones (multidimensionales) Para acceder a los elementos del array se utilizan los corchetes [] Pueden guardar valores de cualquier tipo de variable (string. doble.24 - . booleano). la cual es equivalente a count() Hay otra forma de asignarle valores a un array. y es la siguiente: $Color = array(“Blanco”. $Continente[] = “América”. por ejemplo: $Cantidad = count($Continente). $NombreEstacion[1] = “Verano”. Si se necesita conocer la cantidad de elementos se puede utilizar la función count(). “Verde”). . // $Cantidad será 5 También se puede usar la función sizeof(). No se los necesita declarar previamente. ‘Nombre’ => ‘Juan Pérez’. Con un array asociativo podríamos escribir algo como: $Cliente[‘Codigo’] = “00257”. que en el cuarto elemento se encuentra la Localidad. Como vemos.ARRAYS ASOCIATIVOS Además de los arrays tradicionales. . "<br>". ‘Localidad’ => ‘Nueva York’). $Cliente[0] = “00257”. Un array asociativo también puede ser creado así: $Cliente = array(‘Codigo’ => ‘00257’. entonces podríamos escribir: echo "Nombre = " . En los arrays tradicionales se accede a los elementos del array a través de un índice numérico. Para salvarnos están los arrays asociativos. $Cliente[‘Nombre’] = “Juan Pérez”. Eso no es un problema cuando nuestro array tiene pocos elementos ¿pero si tiene 25 ó más? Lo cual no es raro en programación web. Si queremos usar un array tradicional para guardar los datos de un Cliente podríamos tener algo así. $Cliente['Telefono'] . Allí se complica. "<br>". el PHP también dispone de otra clase de arrays. los equivalentes a los campos de un registro. no necesitamos recordar los números de índices sino las palabras clave.25 - . En los arrays asociativos se accede a los elementos por medio de un string. los cuales poseen casi todos los lenguajes de programación. $Cliente[1] = “Juan Pérez”. ‘Telefono’ => ‘(212) 567-1234’. $Cliente[‘Telefono’] = “(212) 567-1234”. echo "Teléfono = " . llamados asociativos. Si deseamos visualizar el nombre y el teléfono del cliente. $Cliente['Nombre'] . Esto es muchísimo más fácil de recordar y por lo tanto es muy usado en PHP. Por ejemplo. $Cliente[2] = “(212) 567-1234” $Cliente[3] = “Nueva York” ¿Cuál es el problema? Que debemos recordar la relación de los índices con los datos. $Cliente[‘Localidad’] = “Nueva York”. $Cliente['Nombre'] . 'Telefono' => '(212) 567-1234'. $Cliente['Nombre'] .26 - . $Cliente['Localidad'] . $Cliente['Telefono'] . "<br>".php . ?> </body> </html> prueba22. 'Nombre' => 'Juan Pérez'. echo "Localidad = " . echo "Código = " . "<br>". $Cliente['Codigo'] . 'Localidad' => 'Nueva York'). "<br>". $Cliente['Telefono'] . "<br>".<html> <head> <title>Uso de un array asociativo</title> </head> <body> <?php Cliente['Codigo'] = "00257". "<br>". echo "Nombre = " . $Cliente['Localidad'] . echo "Teléfono = " . "<br>". Cliente['Localidad'] = "Nueva York". echo "Teléfono = " . "<br>". "<br>". echo "Localidad = " . Cliente['Telefono'] = "(212) 567-1234". Cliente['Nombre'] = "Juan Pérez". echo "Código = " . ?> </body> </html> prueba21.php <html> <head> <title>Uso de un array asociativo</title> </head> <body> <?php $Cliente = array('Codigo' => '00257'. $Cliente['Codigo'] . echo "Nombre = " . php) que pide los datos es la siguiente: <form method = “post” action = “mipagina.27 - .html) Otra.html Como puedes ver.html aunque también podría hacerse con .php”> [se piden los datos] [se envían los datos] </form> <html> <head> <title>Pedido de ingreso de datos</title> </head> <body> <form method = "post" action = "mipagina. . en este caso no se trata de un programa PHP sino de una página web escrita totalmente en HTML.php) • • La estructura de la página (generalmente es .ENVÍO DE DATOS DESDE UN FORMULARIO Para que nuestros programas sean interactivos necesitamos pedirles datos a los usuarios. para pedirle al usuario que ingrese los datos (página . procesar dichos datos y luego devolverle el resultado. Serán enviados cuando el usuario haga click sobre el botón “submit”. lo normal es que se envíen mediante “post” La propiedad action indica el nombre del archivo que recibirá los datos ingresados por el usuario.php"> Ingresa tu nombre: <input type = "text" name = "nombreusuario"> <br> <input type = "submit" value = "Confirmar"> </form> </body> </html> ingresodatos. para procesar esos datos (página . los valores posibles son “post” y “get”. la cual tiene dos propiedades obligatorias: method y action. Le indicamos que queremos un formulario con la marca <form>. En general necesitaremos de dos páginas: Una. La propiedad method indica como se organizan los datos que se enviarán al Servidor web. su dirección.php Reset deja el formulario en blanco.La propiedad input type Esta propiedad nos permite definir el tipo del control y el nombre del control. El tipo del control debe ser uno de los siguientes: • • • • • • • • • • • Text Checkbox Radio Select Password Hidden Submit Reset Button File Image Text es un cuadro de texto. Button define un botón el cual tiene unos comandos que serán ejecutados cuando el usuario haga click sobre él File permite enviar un archivo desde la computadora del usuario hacia el Servidor web Image muestra una imagen que también tiene incluido un botón “Submit”. cuando el usuario hace click sobre la imagen el formulario es enviado El nombre del control se lo asignamos nosotros. Checkbox es una casilla de verificación donde el usuario puede elegir solamente una de dos alternativas posibles (sí/no. edad. En general es aconsejable no usarlo. su e-mail. email. borrando todo lo que introdujo el usuario. verdadero/falso) Radio le permite al usuario elegir una y solamente una de varias opciones posibles Select le permite al usuario elegir una o varias de las opciones disponibles Password oculta con asteriscos los caracteres que ingresa el usuario Hidden indica que el campo es invisible y el usuario nunca interactúa con él Submit envía el formulario al programa . etc.28 - . el lugar donde se le puede pedir al usuario que ingrese su nombre. por ejemplo: nombreusuario. nacionalidad . el cual los procesará y cuando termine devolverá una página . indicándole como subíndice y entre apóstrofos el nombre de la variable que usamos en el formulario de envío de datos (en este ejemplo.html veremos algo como esto: Pantalla Nº 4 Y luego de escribir el nombre y de hacer click sobre el botón “Confirmar” veremos algo como esto: Pantalla Nº 5 . Al escribir en el navegador localhost/pruebas/ingresodatos.RECEPCIÓN DE DATOS Los datos que envió el usuario cuando hizo click sobre el botón “Submit” son recibidos por un programa PHP. ?> </body> </html> mipagina.html al Servidor web. <html> <head> <title>Ejemplo de captura de datos</title> </head> <body> <?php echo "El nombre ingresado es: " echo $_REQUEST['nombreusuario']. Hay que recordar que los nombres de las variables son sensibles a las mayúsculas y a las minúsculas.29 - .php Para acceder a los datos que ingresó el usuario se utiliza un array asociativo llamado $_REQUEST que es generado por el PHP. el nombre de la variable es nombreusuario). php"> Ingresa un número: <input type = "text" name = "numero1"> <br> Ingresa un número: <input type = "text" name = "numero2"> <br> <input type = "checkbox" name = "check1">sumar <br> <input type = "checkbox" name = "check2">restar <br> <input type = "checkbox" name = "check3">multiplicar <br> <input type = "checkbox" name = "check4">dividir <br> <input type = "submit" value = "Ejecutar"> </form> </body> </html> controlcheckbox. multiplicación. Si un formulario tiene varias casillas de verificación entonces el usuario puede elegir: ninguna. división. verdadero o falso. una. puede elegir varias de esas opciones. varias.html . El siguiente programita le pedirá que introduzca dos números y luego la operación aritmética que desea realizar con ellos: suma. en inglés) sirven para que el usuario elija una de dos opciones posibles: sí o no. todas. <html> <head> <title>Ejemplo del uso de checkbox</title> </head> <body> <form method = "post" action = "checkbox.30 - . Si lo desea. resta.CONTROL CHECKBOX Las casillas de verificación (o checkbox. La función isset() nos dice si existe la variable que le pasamos como parámetro. echo "La resta es $Resta<br>". } if (isset($_REQUEST['check4'])) { $Division = $numero1 / $numero2. echo "La suma es $Suma<br>".31 - . echo "La multiplicación es $Multiplicacion<br>". } if (isset($_REQUEST['check2'])) { $Resta = $numero1 . $numero2 = $_REQUEST['numero2']. Usamos la función isset() cuatro veces.<html> <head> <title>Resultado/s obtenido/s del uso de checkbox</title> </head> <body> <?php $numero1 = $_REQUEST['numero1']. porque el usuario pudo haber marcado varias casillas de verificación. } if (isset($_REQUEST['check3'])) { $Multiplicacion = $numero1 * $numero2. if (isset($_REQUEST['check1'])) { $Suma = $numero1 + $numero2. .$numero2.php ¿Para qué se utiliza la función isset()? Resulta que si el checkbox no está seleccionado en el formulario entonces no se crea un elemento en el arrary asociativo $_REQUEST. Si devuelve true entonces sí existe y si devuelve false entonces no existe. En este programa si devuelve true eso significa que el usuario marcó esa casilla de verificación. echo "La división es $Division<br>". } ?> </body> </html> checkbox. php"> ¿Con qué deseas pagar tu compra? <br><br> <input type = "radio" name = "radio1" "Tarjeta">Tarjeta de crédito <br> <input type = "radio" name = "radio1" "PayPal">PayPal <br> <input type = "radio" name = "radio1" "Cheque">Cheque bancario <br><br> <input type = "submit" name = "FormaPago"> </form> </body> </html> value value value = = = controlradio. ?> </body> </html> prueba23.32 - . todos se llaman radio1). <html> <head> <title>Procesar el control radio elegido</title> </head> <body> <?php if ($_REQUEST['radio1'] == "Tarjeta") echo "Has elegido pagar con Tarjeta de Crédito". if ($_REQUEST['radio1'] == "PayPal") echo "Tu pago se realizará con PayPal". . Si hace click sobre un control radio todos los demás controles radio que están relacionados se desactivan.html Para que el PHP sepa que los botones radio están relacionados todos deben tener el mismo nombre (en este caso. if ($_REQUEST['radio1'] == "Cheque") echo "Necesito conocer el Nombre del Banco".php Recuerda que todos los botones radio deben tener el mismo nombre.CONTROL RADIO El control radio sirve para que el usuario elija una (y solamente una) de las opciones que tiene a su disposición. <html> <head> <title>Uso de controles radio</title> </head> <body> <form method = "post" action = "prueba23. <html> <head> <title>Uso del control select</title> </head> <body> <form method = "post" action = "prueba24. de las cuales debe seleccionar una (aunque más adelante veremos que puede seleccionar varias). el cual puede ser (y generalmente es) distinto al valor de esa opción. Su finalidad es mostrar varias opciones al usuario.33 - .CONTROL SELECT En PHP se llama control select al mismo control que otros lenguajes llaman combobox. Además. Cada opción debe tener un valor (el que recibirá el programa .php) y un texto que se le mostrará al usuario. ese programa se llama prueba24.php) .html Dentro de las marcas <select> y </select> se colocan todas las opciones deseadas. todas las opciones deben finalizar con la marca </option> Como de costumbre se incluye un botón de tipo “submit” para que cuando el usuario haga click allí el nombre de la opción seleccionada sea enviado al programa determinado por la cláusula action (en este caso.php"> ¿En cuál medio de locomoción te trasladarás para llegar a la conferencia? <select name = "Transporte"> <option value = "Automóvil">En automóvil</option> <option value = "Avión">En avión</option> <option value = "Bicicleta">En bicicleta</option> <option value = "Motocicleta">En motocicleta</option> <option value = "Tren">En tren</option> </select> <br><br> <input type = "submit" name = "MedioTransporte"> </form> </body> </html> controlselect. if ($Transporte == "Motocicleta") echo "Cuidado con los otros vehículos". if ($Transporte == "Avión") echo "El aeropuerto queda a tres kilómetros del salón". if ($Transporte == "Tren") echo "La estación del tren está a 2 cuadras del salón". se guardó en la variable $Transporte el nombre del transporte que eligió el usuario en el control select (o combobox) y luego.<html> <head> <title>Procesar el control select</title> </head> <body> <?php $Transporte = $_REQUEST['Transporte'].34 - . ?> </body> </html> prueba24. . de acuerdo a su opción se le mostró un mensaje.php Primero. if ($Transporte == "Automóvil") echo "No te resultará fácil encontrar donde estacionar". if ($Transporte == "Bicicleta") echo "¿Irás en bicicleta? Es peligroso". cerveza. $BebidasPreferidas = $_REQUEST['Bebidas']. ?> </body> </html> prueba25.html Para definir un control textarea hay que delimitarlo con los marcadores <textarea> y </textarea>.CONTROL TEXTAREA El control textarea le permite al usuario escribir varias líneas de texto. echo "¿Y beber $BebidasPreferidas?". coñac. En otros lenguajes se le denomina control editbox.php"> ¿Cuáles son tus canciones favoritas? <br> <textarea name = "Canciones"></textarea> <br><br> ¿Y tus bebidas favoritas? <br> <textarea name = "Bebidas">Vino. echo "<br>". <html> <head> <title>Uso del control textarea</title> </head> <body> <form method = "post" action = "prueba25. hay que escribir dicho texto entre esas marcas. es similar al control text pero mientras que éste solamente permite que el usuario escriba en una línea.php . cerveza. tal como se ve en el textarea Bebidas el cual se inicializa con Vino. Si se desea inicializarlo con algún texto. echo "¿Así que te gusta escuchar $CancionesPreferidas?". <html> <head> <title>Procesar el control textarea</title> </head> <body> <?php $CancionesPreferidas = $_REQUEST['Canciones']. coñac</textarea> <br><br> <input type = "submit" name = "Enviar"> </form> </body> </html> controltextarea. el textarea le permite escribir en varias.35 - . aquellos que queremos usar así como fueron guardados. La función fputs() sirve para escribir una línea de texto en el archivo y recibe dos parámetros: • El identificador del archivo con el cual se quiere trabajar • El texto que se quiere grabar en ese archivo Y devuelve true si la operación tuvo éxito o false en caso contrario. en ese mismo orden. Las funciones más utilizadas cuando se trabaja con archivos de texto son las siguientes: fopen() fputs() fgets() feof() fclose() file_exists() copy() exit() Abre o crea un archivo de texto Escribe una línea en el archivo de texto Lee una línea del archivo de texto Indica si ya se leyó todo el archivo de texto Cierra el archivo de texto Comprueba si existe un archivo Copia un archivo Finaliza la ejecución de un programa La función fopen() sirve para crear o abrir un archivo de texto y recibe dos parámetros: • El nombre del archivo • La operación que se desea realizar con ese archivo. lo crea. Lo abre para sólo lectura. Si no existe. Si existe. Si existe. No se podrá escribir en él Y si se pudo abrir el archivo entonces devuelve un número positivo que deberá ser usado en todas las operaciones que posteriormente se realizarán con ese archivo. . lo crea. Si no existe.36 - . lo prepara para que se le añadan datos al final o “w”.ARCHIVOS DE TEXTO Si necesitamos que los datos que ingresó el usuario estén disponibles para un uso posterior (quizás varios días o meses después) debemos guardarlos en el disco duro del Servidor. En una Base de Datos guardaremos lo que sea más complejo. las más usadas son: o “a”. Aquí tenemos dos posibilidades: • • Guardarlos en un archivo de texto Guardarlos en una Base de Datos Ahora veremos como guardarlos y recuperarlos de un archivo de texto y más adelante como hacerlo con una Base de Datos de Firebird En un archivo de texto podemos guardar los datos que no requieren de un procesamiento. borra todo su contenido o “r”. Si no se pudo abrir el archivo devuelve -1. si el puntero se encuentra en EOF = End of File) y false en caso contrario La función fclose() sirve para cerrar un archivo de texto que estaba abierto y recibe un parámetro: • El identificador del archivo que se quiere cerrar Devuelve true si se pudo cerrar exitosamente el archivo y false si por algún motivo no pudo ser cerrado. conteniendo el mensaje que se mostrará al usuario • Un número entero. La función exit() finaliza la ejecución de un programa. con el código de salida o 0 = está todo bien o 1 . Recibe un parámetro: • Nombre del archivo que se desea comprobar si existe o no Devuelve true si el archivo existe y false si no existe La función copy() copia un archivo desde el origen hacia el destino..37 - . 254 = ocurrió algún error o 255 = no debe ser usado. Recibe un parámetro que puede ser: • Un string.La función fgets() sirve para leer una línea de texto del archivo y recibe un parámetro: • El identificador del archivo con el cual se quiere trabajar Y devuelve un string conteniendo una línea de texto. La función feof() sirve para indicar si ya se leyó todo el archivo de texto. Recibe un parámetro: • El identificador del archivo que se desea averiguar su estado Y devuelve true si ya se leyó todo el archivo (o sea. La función file_exists() comprueba si un archivo existe o no. es para uso interno del PHP . Recibe dos parámetros: • Nombre del archivo origen • Nombre del archivo destino Devuelve true si la copia se realizó con éxito y false si falló. $_REQUEST['Comentarios']).php . echo "Los datos han sido grabados". fputs($fp. <html> <head> <title>Procesar libro de visitas</title> </head> <body> <?php $fp = fopen("visitas. fputs($fp. fputs($fp.CREACIÓN Y APERTURA DE UN ARCHIVO DE TEXTO En el siguiente programa implementaremos un Libro de Visitas para nuestro sitio web.38 - . $_REQUEST['NombreUsuario']). "\n"). fputs($fp.php"> Ingresa tu nombre: <input type = "text" name = "NombreUsuario"> <br><br> Escribe tus comentarios: <br> <textarea name = "Comentarios" rows = "12" cols = "60"> </textarea> <br> <input type = "submit" value = "Enviar"> </form> </body> </html> librovisitas. la diferencia es que ahora determinamos el tamaño que tendrá el control área de texto. donde el usuario escribirá sus comentarios. fputs($fp. fputs($fp. "\n"). ?> </body> </html> prueba26. "------------------------------------------------------"). Le preguntaremos al usuario que opinión le merece nuestro sitio web y su respuesta guardaremos en un archivo de texto el cual podrá ser leído por los demás visitantes del sitio. "\n").txt". <html> <head> <title>Libro de visitas</title> </head> <body> <form method = "post" action = "prueba26. fclose($fp). "a") or exit("No se puede usar el archivo").html Esta página HTML es muy similar a las que ya hemos visto con anterioridad. luego los comentarios. Finalmente. luego otra línea en blanco. Siempre hay que cerrar los archivos que habíamos abierto para no desperdiciar recursos de la computadora. Los caracteres “\n” (nueva línea) son equivalentes al CHR(13) o CHR(10) o CHR(13) + CHR(10) que se usa en otros lenguajes. una vez que todo lo que queríamos escribir ya fue escrito. Este programa es muy sencillo y no se han hecho las verificaciones de errores. La función fputs() escribe en el archivo de texto el nombre del usuario. Fíjate que el primer parámetro de la función fputs() es el número que devolvió la función fopen().39 - .html y escribe varios comentarios y haz click varias sobre el botón “Enviar” para que en el siguiente programa (prueba27. . algo que sí deberíamos hacer en nuestros programas reales. El valor que devuelve la función fopen() lo guardamos en la variable $fp Si por algún motivo el archivo no se pudo abrir entonces se ejecutará lo que se encuentre a continuación del or. luego unas rayas y finalmente otra línea en blanco.En el programa prueba26. en este caso la función exit() la cual le muestra un mensaje al usuario y luego finaliza el programa.php) puedas ver claramente lo que sucede. cerramos el archivo con la función fclose().php se han empleado varias de las funciones que hemos visto con anterioridad. luego una línea en blanco. Ingresa a librovisitas. ?> </body> </html> prueba27. . Si hubo algún error. ¿por qué hacemos eso? Porque el navegador no efectúa el salto de línea cuando lee \n. Para saber si ya hemos leído todo el archivo utilizaremos la función feof(). La función nl2br() sirve para convertir los caracteres \n a <br>.LECTURA DE UN ARCHIVO DE TEXTO Para leer el contenido de un archivo de texto emplearemos la función fgets(). por lo tanto nosotros debemos convertir \n a <br> y eso se consigue con la función nl2br(). while (!feof($fp)) { $Linea = fgets($fp). se ejecutará la función exit().40 - . Mientras no se llegue al final del archivo iremos leyendo todas sus líneas. en la variable $fp tendremos su número. ahora con la marca <br> reemplazando al carácter \n en una nueva variable ($NuevaLinea) e imprimimos esa variable.txt".php Si se pudo abrir el archivo para sólo lectura. La variable $Linea contiene una línea completa. echo $NuevaLinea. incluyendo el carácter \n. $NuevaLinea = nl2br($Linea). "r") or exit("No se puede usar el archivo"). Guardamos la línea leída del archivo. <html> <head> <title>Leer el libro de visitas</title> </head> <body> <?php $fp = fopen("visitas. } fclose($fp). Los usuarios eligen los productos o servicios que desean adquirir. desde su notebook. Todo lo que se vendió durante las dos fechas especificadas Informe de Ventas por Internet. Informe de Ventas. con los conocimientos adquiridos ya podríamos hacer un montón de programas útiles. Se le presentan al usuario varias opciones y se le pregunta cual (o cuales) desea elegir Saldo de clientes. ya dependerá de tu creatividad el ir agregando muchas opciones más. . Si nuestro Proveedor también tiene un sitio web para la recepción de pedidos entonces podríamos automatizar esa tarea y cada vez que el stock de un producto llegue a su cantidad mínima realizar el pedido correspondiente - Estas son solamente algunas ideas. Lo que le compramos. Esto nos permitirá: • • • • INSERTAR nuevas filas a las tablas ELIMINAR filas de la tabla ACTUALIZAR las filas de las tablas CONSULTAR el contenido de las tablas Lo cual significa que podríamos ofrecerles a nuestros clientes un programa que (por ejemplo) hiciera lo siguiente: Vender por Internet. desde su teléfono celular. El usuario ingresa su código y se le muestra su Estado de Cuentas. ingresan sus datos y les enviamos su pedido y la Factura Productos y servicios más consultados. lo que le pagamos y lo que le estamos adeudando Pedidos automáticos al Proveedor. Todo lo que se vendió gracias al sitio web Informe de Impuestos a Pagar. sin embargo lo más interesante viene ahora: acceder a una Base de Datos SQL que está alojada en el Servidor web. desde su tableta o desde cualquier otro dispositivo que tenga conexión con Internet. ¿Cuáles de los productos y servicios que mostramos en nuestro sitio web son los más visitados por los usuarios? ¿Cuáles no son visitados? Productos y servicios más vendidos ¿Cuáles de los productos y servicios mostrados tienen mayor venta? ¿Y cuáles no se venden? Votaciones. A la gran mayoría de tus clientes le agradará la idea de poder realizar consultas a la Base de Datos desde cualquier PC que tenga conexión a Internet. lo que se le vendió.BASES DE DATOS FIREBIRD Hasta ahora hemos visto mucho sobre PHP.41 - . lo que se le cobró y lo que está adeudando. Todo lo que se le debe pagar al fisco en concepto de impuestos Estado de Cuentas con el Proveedor. Precio) Los Identificadores son todos numéricos y autoincrementales. Buscamos la línea que dice: . Fecha es de tipo Date. Lo abrimos para editarlo (con doble click.¿QUÉ DEBO HACER PARA QUE PHP RECONOZCA A FIREBIRD? Después de instalar PHP (con XAMPP o de alguna otra manera). Cantidad y Precio son numéricos. por lo tanto debemos obligarle a que lo reconozca. Nombre y Teléfono son de tipo Varchar. por ejemplo) 3. Identificador del Cliente) • MOVIMDET (Identificador. Línea.dll 4.INI y lo cerramos 6. él todavía no reconoce al Firebird. Nombre.FDB y que encontrarás en el mismo archivo . Para poder utilizarla. Grabamos el archivo PHP. Cantidad.FDB tiene las siguientes tablas: • CLIENTES (Identificador. Precio de Venta) • MOVIMCAB (Identificador.INI (si usamos el XAMPP lo encontraremos en la carpeta C:\XAMPP\PHP\) 2.EXE) ¿CUÁL ES LA BASE DE DATOS FIREBIRD QUE UTILIZAREMOS? Para los ejemplos que vienen a continuación he creado una Base de Datos cuyo nombre es ADMIN. Identificador de Producto. Fecha. Le quitamos el punto y coma del inicio (el punto y coma indica que lo que viene a continuación es un comentario) 5. Las columnas Identificador son las claves primarias de cada tabla.ZIP que tiene incluido este documento. .extension=php_interbase.42 - . Nombre. Buscamos el archivo PHP. Teléfono) • PRODUCTOS (Identificador. con el programa GSEC deberás crear un usuario llamado “Walter” (sin las comillas) y con password “123456” (sin comillas) ADMIN. eso se hace de la siguiente manera: 1. Detenemos el Apache y lo reiniciamos (si estamos usando XAMPP podemos hacerlo con el programa XAMPP-CONTROL. $cNombre .INSERTAR FILAS EN UNA TABLA Ahora vamos a crear un programa que nos permitirá insertar nuevas filas a una tabla (en este ejemplo. echo "Se agregó a $cNombre a la tabla de CLIENTES". $cFila = "INSERT INTO CLIENTES (CLI_NOMBRE.php"> Nombre del Cliente: <input type = "text" name = "cNombreCliente"> <br> Número/s de teléfono: <input type = "text" name = "cTelefono"> <br><br> <input type = "submit" value = "Aceptar"> </form> </body> </html> insertarclientes.". a la tabla CLIENTES). ibase_commit($nTransaccion).html <html> <head> <title>Aquí se agregan los nuevos clientes</title> </head> <body> <?php $nHandleDB = ibase_pconnect('C:\xampp\htdocs\pruebas\admin. $nResultado = ibase_query($nTransaccion. "'. .php Este programita guardará en la tabla CLIENTES los valores que les hayamos asignado a las columnas CLI_NOMBRE y CLI_TELEFO. ?> </body> </html> prueba28. ibase_close($nHandleDB). $cFila). CLI_TELEFO) VALUES ('" . $cTelefo . <html> <head> <title>Agregar clientes</title> </head> <body> <h1>Agregar nuevos clientes</h1> <form method = "post" action = "prueba28. '" . $nTransaccion = ibase_trans("IBASE_WRITE". 'WALTER'.fdb'. '123456'). Recuerda que CLI_IDENTI es autoincremental por lo tanto será el propio Firebird quien le asignará un número.43 - . "'). $nHandleDB). $cTelefo = $_REQUEST['cTelefono']. $cNombre = $_REQUEST['cNombreCliente']. no deberemos preocuparnos por eso. ambas son muy similares pero la primera establece una conexión persistente o sea que no se cierra cuando finaliza la ejecución del comando. Recibe dos parámetros: El identificador de la transacción que deseamos utilizar y el comando que deseamos ejecutar. la función ibase_close() finaliza la conexión con la Base de Datos. también se podría usar la función ibase_connect(). Eso es necesario hacer u obtendremos un mensaje de error del PHP. El valor devuelto por la función ibase_pconnect() debe ser guardado en una variable porque necesitaremos usarlo más adelante. a la cual debemos enviarle dos parámetros: el tipo de transacción y el valor que nos había retornado la función ibase_pconnect(). hay que tener cuidado con algo: las columnas de tipo string deben estar rodeadas por comillas simples. A la variable $cFila le asignamos el comando que deseamos ejecutar en la Base de Datos. Finalmente. La función ibase_commit() recibe como parámetro el número de la transacción y trata de grabarla en la Base de Datos.Se usa la función ibase_pconnect() para conectarse a la Base de Datos. En este caso lo guardamos en la variable llamada $nHandleDB. En honor a la brevedad este ejemplo es muy corto y no tiene manejo de errores pero eso es algo que sí o sí debemos efectuar en todos nuestros programas para evitar que ocurran problemas (o al menos detectarlos y solucionarlos de una forma no traumática para los usuarios). Por ejemplo fíjate aquí: VALUES ('" Allí tenemos una comilla simple y luego una comilla doble. Las transacciones solamente pueden terminar de dos maneras posibles: o mediante un COMMIT o mediante un ROLLBACK. . La función ibase_query() es la que nos permite ejecutar los comandos del Firebird. A continuación se abre una transacción con la función ibase_trans().44 - . sino un handle para la Base de Datos y otro para guardar el resultado de la ejecución del comando.net/manual/es/ref. $cFila->CLI_NOMBRE . '---' . } ibase_free_result($nResultado).fdb'.ibase. . $cConsulta) or exit(ibase_errmsg()).En este enlace encontrarás el nombre y la descripción de todas las funciones ibase_ que puedes utilizar: http://www.45 - . <html> <head> <title>Listar las filas de una Base de Datos de Firebird </title> </head> <body> <?php $nHandleDB = ibase_pconnect('C:\xampp\htdocs\pruebas\admin. ?> </body> </html> prueba29. $nResultado = ibase_query($nHandleDB. '123456'). 'WALTER'. $cConsulta = "SELECT * FROM CLIENTES". que no se usa un solo handle como en la mayoría de los lenguajes de programación.php. ibase_close($nHandleDB).php Son muchas. '---' . echo "<br>". que nos devuelve la función ibase_query(). $cFila->CLI_TELEFO. pero las que más frecuentemente necesitarás son solamente estas: • ibase_pconnect() • ibase_trans() • ibase_query() • ibase_commit() • ibase_rollback() • ibase_fetch_object() • ibase_free_result() • ibase_close() LISTAR TODAS LAS FILAS DE UNA TABLA Con este programita podremos ver los datos de todos nuestros clientes. while ($cFila = ibase_fetch_object($nResultado)) { echo $cFila->CLI_IDENTI .php Aquí hay varias cosas que resaltar: Primero. php"> Escribe el Identificador del Cliente: <input type = "text" name = "nIDCliente"> <br><br> <input type = "submit" value = "Aceptar"> </form> </body> </html> consultarclientes. En nuestro ejemplo. pero en este caso solamente devolveremos aquellas filas que cumplan con la condición indicada.46 - .Segundo. que para referirnos a las columnas extraídas debemos usar el nombre de la variable (en este caso: $cFila) y a continuación el símbolo -> y luego el nombre de la columna que nos interesa. que después de haber usado el resultado obtenido debemos liberarlo de la memoria con la función ibase_free_result().html En esta página web le pedimos al usuario que ingrese el Identificador de un cliente. Tercero. que cuando ya no necesitamos estar conectados a la Base de Datos debemos cerrar la conexión con la función ibase_close(). le pediremos al usuario que ingrese el identificador de un Cliente y le mostraremos los datos de ese cliente o un mensaje avisándole que no existe ningún cliente con ese identificador. CONSULTAR DATOS El programa de consulta es muy similar al anterior de listado. <html> <head> <title>Consultar clientes</title> </head> <body> <h1>Consultar datos de los clientes</h1> <form method = "post" action = "prueba30. que para obtener todas las filas se debe utilizar un ciclo while y la función ibase_fetch_object() la cual extrae los datos de la tabla y los devuelve para que puedan ser guardados en una variable. la cual recibe como parámetro el resultado de la ejecución de la función ibase_query(). Quinto y último. . Cuarto. . $cConsulta) or exit(ibase_errmsg()). if ($nResultado > 0) { $cFila = ibase_fetch_object($nResultado) or exit("No existe ningún cliente con ese Identificador").php Y aquí realizamos la búsqueda. echo $cFila->CLI_IDENTI . 'WALTER'. Si tuvo éxito. ?> </body> </html> prueba30. mostramos los datos del cliente buscado. } ibase_free_result($nResultado). $nResultado = ibase_query($nHandleDB. '123456').<html> <head> <title>Consultar Clientes</title> </head> <body> <?php $nHandleDB = ibase_pconnect('C:\xampp\htdocs\pruebas\admin. $cFila->CLI_NOMBRE .47 - . $cConsulta = "SELECT * FROM CLIENTES WHERE CLI_IDENTI = " . en caso contrario mostramos un mensaje de error. echo "<br>". $_REQUEST['nIDCliente'].fdb'. '---' . ibase_close($nHandleDB). $cFila->CLI_TELEFO. '---' . Pedir el nombre y la contraseña del usuario Mostrarle las opciones que tiene disponibles Permitirle ingresar datos de Clientes y de Productos Listar los clientes y los productos Para ejecutarlo debemos escribir: localhost/pruebas/sistemita. 3.SISTEMA DE INGRESO DE DATOS POR INTERNET Ahora crearemos un pequeño sistemita.48 - .html . el cual nos permitirá: 1.php"> Ingresa tu nombre: <input type = "text" name = "cNombreUsuario"> <br> Y tu contraseña: <input type = "password" name = "cContrasena"> <br><br> <input type = "submit" value = "Aceptar" name = "cEnviar"> </form> </body> </html> sistemita. 4.html después de lo cual veremos la siguiente pantalla. 2. Pantalla Nº 6 Para poder continuar el nombre debe ser Walter y la contraseña 123456 <html> <head> <title>Sistema de Ingreso de datos por Internet</title> </head> <body> <h1>Ventas por Internet</h1> Este es un pequeño Sistema para registrar en una Base de Datos <br><br> <form method = "post" action = "ValidarUsuario. sale del programa con un mensaje de error. Por defecto las variables duran 20 minutos.php. Al escribir $_SESSION[‘cNomUsu’] le estamos diciendo que queremos que el valor de la variable ‘cNomUsu’ se guarde durante los siguientes 20 minutos. $_SESSION['cNomUsu'] = $_REQUEST['cNombreUsuario'].49 - .INI. inicia una sesión. si se pudo conectar se dirige hacia otro programa. $_SESSION['cPasswo']) or exit("Datos del usuario incorrectos"). si no se pudo conectar.fdb'. header('Location: http://localhost/pruebas/menuprincipal. Tercero. con esos datos trata de conectarse a la Base de Datos.html'). entonces podremos volver a usarla durante ese tiempo. se obtiene el Nombre y la Contraseña que escribió el usuario. Segundo.html Para poder redirigirnos hacia otra página web u otro programa . ¿Qué es eso? En PHP cuando se inicia una sesión se pueden almacenar variables que serán usadas en otros programas .php ¿Qué es lo que hace? Primero. $_SESSION['cNomUsu']. llamado menuprincipal. Cuarto. Quinto.php debemos: • Usar la función header() • Escribir: Location: • Dejar un espacio en blanco después de los dos puntos • Escribir http:// • Escribir la dirección donde se encuentra la página o el programa hacia el cual deseamos redirigirnos . $nHandlB = ibase_pconnect('C:\xampp\htdocs\pruebas\admin. $_SESSION['cPasswo'] = $_REQUEST['cContrasena']. aunque ese tiempo es configurable en el archivo PHP.El programita que valida que el Nombre y la Contraseña del usuario sean correctos es muy corto: <?php session_start(). ?>validarusuario. si no son usadas son liberadas de la memoria. Listar los clientes <br> 4.50 - . Listar los productos <br> </h3> ¿Cuál es tu opción? <input type = "text" name = "nOpcionElegida"> <br><br> <input type = "submit" value = "Aceptar" name = "OK"> </form> </body> </html> menuprincipal. Agregar productos <br> 3.<html> <head> <title>Menú Principal del sistemita</title> </head> <body> <h1>Menú Principal del sistemita por Internet</h1> <form method = "post" action = "procesaropcion. Agregar clientes <br> 2.html Pantalla Nº 7 .php"> <h3> 1. Debes pasarle como parámetro el número que te devolvió la función ibase_query().¿QUÉ SIGNIFICAN ESTOS ERRORES? Fatal error: Call to undefined function ibase_connect() No se está usando la extensión php_interbase. null given in El parámetro de la function ibase_fetch_object() es inválido. Debes pasarle como parámetro el número que te devolvió la función ibase_query().51 - . Warning: ibase_free_result() expects parameter 1 to be resource. Warning: ibase_pconnect() [function.fdb Correcto Incorrecto Warning: ibase_fetch_object(): supplied resource is not a valid Firebird/InterBase result resource El parámetro de la function ibase_fetch_object() es inválido. asegúrate de haberle quitado el punto y coma del principio. Por ejemplo: C:\xampp\htdocs\pruebas\admin. .dll. La carpeta debe tener el nombre que le asigna el Windows. no debes usar localhost en ella.fdb localhost\pruebas\admin. de haber grabado el archivo php. También verifica que el nombre de la extensión sea exactamente ese.ini y de haber reiniciado el Apache.ibase-pconnect]: during "CreateFile (open)" operation for file I/O error No existe una Base de Datos con ese nombre en esa carpeta.