1.

- SESION: FUNDAMENTOS DEL LENGUAJE DE PHP
 Introduccion
PHP es un potente lenguaje, y su intérprete, bien como módulo del servidor web o bien como binario CGI, puede acceder a ficheros, ejecutar comandos o abrir conexiones de red desde el servidor. PHP está diseñado específicamente para ser un lenguaje más seguro para escribir aplicaciones CGI que Perl or C

Definición de PHP

Es un lenguaje de programación diseñado originalmente para la creación de páginas web dinámicas (lenguaje de alto rendimiento), es usado generalmente en la creación de contenidos para sitios web. La interpretación y ejecución de los scripts PHP se hacen en el servidor, el cliente (un navegador que pide una página web) sólo recibe el resultado de la ejecución y jamás ve el código PHP. Permite la conexión a todo tipo de servidores de base de datos como MySQL, Postgres, Oracle, ODBC, DB2, Microsoft SQL Server, Firebird y SQLite.

Historia de PHP

Creado en 1994 por Rasus Lerdorf, la primera encarnación de php era un conjunto simple de ficheros binarios CGI (Common Gateway Interface) escritos en el lenguaje de programación c. Dos programadores Israelíes del Technion, Zeev Suraski y Andi Gutmans, reescribieron el Analizador sintáctico (parser en inglés) en el año 1997 y crearon la base del PHP3, cambiando el nombre del lenguaje a la forma actual. Inmediatamente comenzaron experimentaciones públicas de PHP3 y fue publicado oficialmente en junio del 1998. Para 1999, Suraski y Gutmans reescribieron el código de PHP, produciendo lo que hoy se conoce como Motor Zend. También fundaron Zend Technologies en Ramat Gan, Israel. PHP 4 En mayo de 2000 PHP 4 fue lanzado bajo el poder del motor Zend Engine 1.0. El día 13 de julio de 2007 se anunció la suspensión del soporte y desarrollo de la versión 4 de PHP. [3] PHP 5
IMPLEMENTACIÓN PHP

Instalar Apache + PHP + MySQL en Windows 7
Tecnología:

Apache

JHOSUE PEDRO CUEVA MAMANI

1

PHP

La idea de este tutorial es configurar un servidor WAMP, es decir: Windows + Apache + MySQL + PHP para poder desarrollar aplicaciones Web basadas en PHP como lenguaje de programación, que integre el uso de bases de datos en MySQL teniendo como servidor Web al poderoso Apache. Todo esto usando Windows 7. Como referencia, el uso tradicional de un servidor Web que integre Apache, PHP y MySQL es en Linux y es a lo que se le llama comúnmente un servidor LAMP (Linux + Apache + MySQL + PHP). Este tutorial también puede servirte si usas Windows Vista o Windows XP Profesional. Sólo recuerda instalar y cambiar la configuración de las aplicaciones teniendo privilegios de Administrador. No he probado que tal se comporten estas aplicaciones en las versiones Home de Windows. Bajar las aplicaciones necesarias Partiremos que ya tienes Windows 7 instalado. Sólo lo he probado en la versión Profesional y Ultimate de este Sistema Operativo y en las similares de Windows Vista, así como en Windows XP Profesional (con SP.2 o SP3). Lo siguiente es bajar Apache (http://httpd.apache.org/download.cgi), del cual he usado la versión 2.2.16. PHP lo obtenemos del sitio http://www.php.net/downloads.php He usado la versión PHP 5.2.14 (zip package). Finalmente MySQL lo obtenemos de http://www.mysql.com/downloads/mysql/ (para este tutorial he usado la versión 5.1 (mysql-5.1.49-win32.msi). Instalando Apache Para instalar Apache, basta con ejecutar el instalador. Sólo recuerda que debes ejecutarlo con privilegios de administrador. Para una referencia más detallada de las opciones de instalación que recomiendo, puedes checar este tutorial paso a paso: http://josmx.com/instalando-apache-en-windows. Instalando PHP

JHOSUE PEDRO CUEVA MAMANI

2

Para instalar PHP primero descomprimimos el zip que hemos descargado. Lo descomprimimos en una carpeta que tendrá por nombre PHP. Copiamos el archivo php.ini-recommended a otro archivo cuyo nombre será php.ini. Este archivo lo dejaremos en la carpeta PHP. Ahora movemos esta carpeta PHP al directorio raíz en C:\. Para integrar PHP en el servidor Web Apache hacemos lo siguiente: 1. Creamos un archivo de texto que lleve por nombre httpd-php.conf dentro de la carpeta C:\Apache2.2\conf\extra. Recuerda que hemos instalado Apache en la carpeta C:\Apache2.2. el contenido de este archivo de texto debe ser el siguiente:
#load the php main library to avoid dll hell Loadfile "C:\php\php5ts.dll" #load the sapi so that apache can use php LoadModule php5_module "C:\php\php5apache2_2.dll" #set the php.ini location so that you don't have to waste time guessing where it is PHPIniDir "C:\php" #Hook the php file extensions AddHandler application/x-httpd-php .php AddHandler application/x-httpd-php-source .phps

2. Le agregamos el siguiente texto al archivo C:\Apache2.2\conf\httpd.conf, esto al final de la sección “# Supplemental configuration” :
# PHP settings Include conf/extra/httpd-php.conf

JHOSUE PEDRO CUEVA MAMANI

3

Modificamos la línea "DirectoryIndex index.html" agregando "index.php" antes de "index.html".
DirectoryIndex index.php index.html

Guardamos este archivo y abrimos el archivo C:\php\php.ini. Habilitamos el soporte para MySQL. Para ello en la sección "Paths and Directories" modificamos la entrada "extension_dir" para que quede como:
extension_dir = "C:\PHP\ext"

En la sección "Windows Extensions" quitamos el comentario a las extensiones php_mysql.dll y php_mysqli.dll. Adicionalmente podemos habilitar otras extensiones,

JHOSUE PEDRO CUEVA MAMANI

4

pero eso ya depende de lo que necesitemos.
extension=php_mysql.dll extension=php_mysqli.dll

Guardamos este archive y reiniciamos el servidor Apache, ya sea mediante línea de comando (recuerda que siempre hay que ejecutar esos comandos como administrador) o mediante la herramienta Apache Service Monitor.

Puedes ver que esta es una descripción concreta de como integrar PPH en Apache. Para una descripción más detallada puedes ver el artículo http://josmx.com/instalarPHP-en-Windows-Vista Instalando MySQL Ya que hemos bajado el instalador de MySQL, simplemente lo ejecutamos con privilegios de Administrador. Siempre recomiendo personalizar la instalación. En este caso las figuras que presento a continuación resumen la forma que recomiendo para personalizar la instalación tomando en cuenta que usaremos MySQL en una computadora para desarrollar o probar aplicaciones. Solo destacar que recomiendo instalar MySQL en la carpeta C:\MySQL. Esto tanto la aplicación como los archivos de datos. Igual al terminar de instalar MySQL el instalador nos pedirá que lo configuremos. Aquí sólo recomiendo que modifiquemos las opciones de seguridad y le asignemos una contraseña para el acceso al usuario root, que es el administrador de MySQL.

JHOSUE PEDRO CUEVA MAMANI

5

JHOSUE PEDRO CUEVA MAMANI 6 .

JHOSUE PEDRO CUEVA MAMANI 7 .

JHOSUE PEDRO CUEVA MAMANI 8 .

JHOSUE PEDRO CUEVA MAMANI 9 .

JHOSUE PEDRO CUEVA MAMANI 10 .

JHOSUE PEDRO CUEVA MAMANI 11 .

JHOSUE PEDRO CUEVA MAMANI 12 .

JHOSUE PEDRO CUEVA MAMANI 13 .

el módulo para el acceso a páginas seguras vía SSL. evitando así la duplicación de los usuarios y grupos de Active Directory en el entorno de Apache e integrando en lo que a la gestión de usuarios se refiere. SINTAXIS Y ESTRUCTURA DE PHP Sintaxis: PHP nos permite embeber sus fragmentos de código dentro de la página HTML. ya sea mediante el usuario root o con algún otro que podamos crear con sus respectivas contraseña y permisos correspondientes. que será la que utilicemos en este curso. y de ahí la elección.0. la versión que instalaremos incluirá de forma automática junto con el servidor web. pese a que actualmente podemos descargar de la web la 2.33 de este servidor. es decir. Apache y Active Directory. Posteriormente instalaremos en nuestro servidor Apache el módulo correspondiente que permite la autenticación LDAP (protocolo ligero de acceso al directorio). pero con el paquete que utilizaremos el proceso será transparente para el alumno.0. No es que dicho módulo no pudiera ser instalado a posteriori.1” y los datos del usuario que tendrá acceso a las bases de datos. es el servidor web Apache. lo cual simplificará la instalación y configuración de este módulo en el servidor Apache. Además Apache. para que los usuarios del Active Directory de nuestro Windows 2000 Server puedan ser utilizados para el acceso a las carpetas privadas de nuestro Apache.0.Las aplicaciones de PHP ya podrán accesar a las bases de datos que creemos. servidor originalmente pensado para el entorno Linux. Simplemente basta con poner como servidor “localhost” o “127. es posible incluir lenguaje PHP en un código HTML. Una de las principales motivaciones para utilizar el servidor web Apache es su condición de aplicación libre y descargable de forma gratuita de la web. SERVIDOR WEB APACHE Una alternativa importante y clara al servidor web IIS. dispone de versión para el entorno Windows. incluido con Windows 2000 Server. este servidor web es actualmente el más implantado entre los distintos servidores que ofertan servicios web en Internet.3. Es por tanto necesario especificar cuáles son las JHOSUE PEDRO CUEVA MAMANI 14 . Hemos optado por utilizar la versión Apache 1.

<?php. Únicamente será necesario introducir un par de marcas para establecer el principio del código y el final. Sólo que en el momento de agregar código de programación hemos añadido dos etiquetas (una de apertura y otra de cierre) para indicar que lo que se encuentra entre ellas es código PHP y debe ser ejecutado. Estas etiquetas son <?php y ?>. lo enviara sin más. Hay cuatro conjuntos de etiquetas que delimitan el código PHP: <?php y ?> <? y ?> <% y %> <script language="php"> y </script> De estos cuatro tipos de etiquetas. ?> </td> </tr> </table> </body> </html> Este código podría pegarse en un archivo PHP. sólo dos. están siempre disponibles.dtd"> <html xmlns="http://www. php3. aunque se trate de un archivo PHP puedes ver que se parece muchísimo a un HTML. aunque también es posible encontrar su forma abreviada <? y ?> por lo que el código anterior se podría sustituir por: <? echo "Hola mundo!".?> y <script language="php">.. Sin embargo. .0 Transitional//EN" "http://www. el modo de funcionamiento de una página PHP es el siguiente: el servidor va a reconocer la extensión correspondiente a la página PHP ( php. . El resultado que nos daría al requerirse sería una página web con una tabla en la que se podría leer Hola mundo! (la instrucción echo escribe texto en pantalla)... . phtml. El resto pueden ser configuradas en el fichero php.w3.w3. ya que asumirá que se trata de código HTML absolutamente comprensible por el navegador.ini para ser o no aceptadas por el intérprete.</script>. ?> JHOSUE PEDRO CUEVA MAMANI 15 . charset=iso-8859-1" /> <title>Documento sin t&iacute. Veamos un ejemplo: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.partes constitutivas del código PHP. El resto. Esto es debido a que el código PHP se incrusta dentro del código HTML. . php4. Estructura PHP: Si abres un archivo PHP verás que tiene cierto parecido a un archivo HTML. guardarse en un servidor que soporte PHP y ejecutarse. Como vimos en la unidad anterior.org/TR/xhtml1/DTD/xhtml1-transitional.tulo</title> </head> <body> <table> <tr> <td> <?php echo "Hola mundo!".) y antes de enviarla al navegador va a encargarse de interpretar y ejecutar todo aquello que se encuentre entre las etiquetas correspondientes al lenguaje PHP. Esto se consigue delimitando nuestro código por etiquetas.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html.

arg2. function testAmbito(Mensaje) { trace(Mensaje). arg2.MOSTRAR LA INFORMACIÓN ECHO Esta instrucción PHP da salida a lo que haya escrito a continuación. mientras que otras son definidas para toda la película. En Flash. algunas cosas son definidas solo dentro de una línea de tiempo. Incluso podemos definir variables que únicamente actuen dentro de una función. trace(Mensaje). Los parámetros de una función también son tratados como variables locales. La variable es definida dentro de la función testAmbito. por lo que si intentamos hacer un trace() para mostrar el valor de la variable.arg1. print no es realmente una función (es un constructor de lenguaje) por lo tanto no es necesario usar paréntesis para indicar su lista de argumentos. Está claro que podemos nombrar las variables con nombres diferentes pero no suele ser lo habitual recordar el nombre de todas las variables que ya hemos declarado. // Muestra: Hola trace(Mensaje). Tienen su ámbito dentro de la función y no fuera. liberamos memoria cuando éstas desaparecen. Esta función se activa "paso a paso". fuera de la función. Otra posible razón para usar variables locales es para una mejor gestión de memoria de la aplicación. PRINTF La función printf () emite una cadena con formato. } testAmbito("Hola"). } testAmbito(). Cuando declaramos correctamente una variable dentro de una función. Cuando utilizamos variables locales. PRINT print ( string $arg )int Muestra el parámetro arg. en el signo% en segundo lugar. En el signo% en primer lugar. arg2 se inserta. que al estar definida fuera de la función tiene JHOSUE PEDRO CUEVA MAMANI 16 . Por ejemplo. Los arg1.arg++) USO DE VARIABLES LOCALES Una de las cosas que más difícil se hace de dominar es el ámbito donde definimos las cosas en Flash. el uso de variables locales ayuda para prevenir posibles conflictos entre variables con el mismo nombre. el resultado será indefinido: function testAmbito() { var Mensaje = "Hola". esta función declara e incializa una variable llamada Mensaje. + + parámetros se insertan en porcentaje (%) signos en la cadena principal. Este tipo de variables no persisten después de que la función sea llamada. arg1 se inserta. // Muestra: indefinido En el siguiente ejemplo declaramos una variable local. En una aplicación grande. la variable es lo que conocemos como una variable local. Realmente echo() no es una función (es una sentencia o instrucción del lenguaje) de modo que no se requiere el uso de los paréntesis. printf(format.

//aumentamos en uno el valor de a } ?> Ahora. b) { var nArea = a * b. testAmbito(). trace (nArea).como ámbito la línea de tiempo donde está definida. Por ejemplo: this. ALCANCE DE LAS VARIABLES Variables estáticas Normalmente las variables declaradas dentro de una función nacen (se inicializan) cuando la función es llamada. que a continuación incrementa la variable. no serviría de nada. la variable $a debe declararse como estática. $a++. conservando este último valor para la próxima vez que sea llamada. function testAmbito() { trace(Mensaje). Una variable estática existe sólo en el ámbito local de la función. $a se inicializa de nuevo con valor "0". Para hacer una función útil para contar.calculoArea = function(a. echo $a. sin inicializar la variable cada vez. } var Mensaje = "Hola". y si volvemos a llamar la función. echo $a. significa que ésta puede ser llamada desde dentro de la misma línea de tiempo con su nombre o fuera de su línea de tiempo especificando el path (o trayectoria) para llegar a ella. //aumentamos en uno el valor de a } ?> Cada vez que llamamos a esta función (típico contador) se asigna a $a el valor 0 y se vuelca a pantalla "0"._parent. pero no pierde su valor cuando la ejecución del programa abandona este ámbito: <?php Function Contador () { static $a = 0. $a++. La sentencia $a++.Mensaje = "Hola" Otra forma de declarar variables o funciones de forma global y que serán accesibles en toda la película. Por supuesto que las variables estáticas solo conservan su valor actualizado durante JHOSUE PEDRO CUEVA MAMANI 17 . y se borran (mueren) cuando se sale de la función. Por ejemplo: _global. Observa el siguiente ejemplo: <?php Function Contador () { $a = 0. cada vez que llamamos a la función Contador(). ya que en cuanto la función termina la variable $a desaparece. se volcará en pantalla el valor de $a y se incrementará. // Muestra: Hola Al definir una variable como local dentro de una línea de tiempo. }. es decir.

los 14 decimales se visualizan sólo si existen y no indiscriminadamente como ceros inútiles. TIPOS DE DATOS A la hora de programar tendremos que hacer uso de multitud de datos.$b -> restar $a * $b -> multiplicar $a / $b -> dividir $a % $b -> resto Fijémonos un momento en los últimas dos:  El resultado de la división no se aproxima al entero que está más cerca sino que da todo el número. Si en el ejemplo anterior hubiéramos utilizado "%" en vez de "/". el resultado habría sido "2". El primer valor significa verdadero. Por lo tanto. aunque unos son más simples que otros. echo $c. está descodificada (conocemos si significado) y es concreta ya que tiene sentido por sí sola. si asignamos a una variable un dato booleano ésta se llamará variable de tipo booleano.la lectura de la página. También hay que decir que si asignamos una variable a un tipo de dato. como en el ejemplo: $a = 12. PHP dispone distintos tipos de estos datos que es necesario conocer para poder programar con garantías. y el segundo falso. Por ejemplo. ya que solo puede tener dos valores posibles que se conocen como true o false. $c = $a / $b. ya que JHOSUE PEDRO CUEVA MAMANI 18 . no como 2. ésta adquirirá en su denominación la del tipo de dato. Booleanos: Es el tipo de dato más simple que existe. OPERADORES ARITMÉTICOS Los operadores aritméticos son los más simples y son: $a + $b -> sumar $a . saldrán sólo 14 números después de la coma. El número de los caracteres después del punto se define en el archivo php3.40000000000000. Para hacer una variable de este tipo tan solo hay que escribir su nombre y asignarle o true o false. el resultado es 2. sin el resultado de la división misma.  el resto se da por sí solo. Por ejemplo “2” es un dato porque es información. Ninguno de ellos es difícil de asimilar.ini en la línea: precisión = 14 Por lo tanto.4. siempre que los haya. partimos del valor inicial. $b = 5.4 y se visualizará precisamente como 2. Si salimos de la página y volvemos a entrar. estos datos no serán más que información ya descodificada y concreta.

$tu_nota = 8.67. son creadas por diferentes extensiones. Vemos un ejemplo: <?php $mi_cadena = 'hola. Estas constantes especiales son sensibles a mayúsculas y son las siguientes: Varias constantes PHP "mágicas" Nombre Descripción JHOSUE PEDRO CUEVA MAMANI 19 . es uno de los más importantes ya que es un tipo de dato que se tiene que utilizar muy a menudo en programación PHP. ?> CONSTANTES PHP ofrece un largo número de constantes predefinidas a cualquier script en ejecucción. y no por una coma como estamos acostumbrados en matemáticas. Enteros: Como en matemáticas. $ocho = 8. signos de puntuación.. números. No obstante.'. Una cadena es una sucesión de caracteres. <?php $guapo = true. sin embargo. mundo. Estos decimales hay que separarlos del número entero por un punto. y sólo estarán presentes si dichas extensiones están disponibles. <?php $mi_nota = 7. Hay ocho constantes predefinidas que cambian dependiendo de donde son usadas. bien por carga dinámica o porque han sido compiladas. ?> Decimales: Los decimales también son un tipo de datos en PHP. con la posibilidad que sean comillas simples o dobles.éstos son los dos únicos datos booleanos que existen. sinó que poseen unidades enteras. <?php $cero = 0. ?> Cadenas: Este tipo de dato. se suele utilizar el número 1 para true. Para escribir cadenas es necesario ponerlas entre comillas. $mi_negativo = -2. Muchas de estas constantes.5. Por ejemplo el valor de __LINE__ depende en la línea que se use en el script.. $simpatico = false. a números que no son decimales. Estos pueden ser letras. mientras que el valor true a cualquier otro número. $ocho = -3. este tipo de dato se refiere a números enteros. ?> Cabe decir también que el valor false equivale al número 0. es decir. son similares a los enteros pero con la particulariedad de soportar decimales. También se incluye el cero y los números negativos.32. las cadenas.

devolverá el directorio del fichero incluído. le permite a una función acceder a una variable que está definida en el programa principal. El nombre del trait.0) Nombre de la función. devolverá el nombre del fichero del include. se descuenta un 10%. (Añadida en PHP 4. que no es conveniente utilizar más que como excepción. Cuando es usado en un método trait. __FILE__ __DIR__ __FUNCTION__ __CLASS__ __TRAIT__ __METHOD__ Nombre del espacio de nombres actual (sensible a mayúsculas). Esta constante se __NAMESPACE__ define en tiempo de compilación (Añadida en PHP 5. Si se usa dentro de un include. Si la compra está entre $100 y $499. Si se utiliza dentro de un include. En PHP 4 su valor siempre es en minúsculas.Varias constantes PHP "mágicas" Nombre __LINE__ Descripción Línea actual en el fichero.0) A partir de PHP 5. (Fue añadida en PHP 5.0. Desde PHP 4. Un comercio realiza descuentos con la siguiente regla:   Si la compra no alcanza los $100.e.4 __CLASS__ también funciona con traits.3. Foo\Bar).j. Ruta completa y nombre del fichero. Nombre del método de la clase.) Nombre del método devuelto donde fue declarada. no se realiza ningún descuento. El nombre del directorio no lleva la barra inicial a no ser que esté en el directorio root.3.0) El nombre del namespace actual (sensible a mayúsculas). VARIABLES ESTÁTICAS Y GLOBALES Variables globales Veremos ahora una herramienta muy particular.3. El nombre del trait incluye el namespace si alguno fué declarado en (p. (Añadida en PHP 5. En PHP 4 su valor siempre es en minúsculas. La declaración de una variable como global. Foo\Bar). Tenga en cuenta que a partir de PHP 5. JHOSUE PEDRO CUEVA MAMANI 20 .0.4 esta constante devuelve el trait que fué declarado (sensible a mayúsculas y minúsculas). (Añadida en PHP 4.0.99.e.3. (Sensible a mayúsculas). __FILE__ siempre contiene la ruta absoluta con symlinks resueltos. __CLASS__ es el nombre de la clase del trait que está siendo utilizado. El nombre de la clase incluye el namespace declarado en (p.0) Desde PHP 5 esta constante devuelve el nombre de la función donde fue declarada (sensible a mayúsculas).2. Esta constante es igual que dirname(__FILE__).0) Desde PHP 5 esta constante devuelve el nombre de la clase donde fue declarada (sensible a mayúsculas). Directorio del fichero. Nombre de la clase.4.j. en otras versiones contenía la ruta relativa según las circunstancias. (Añadido en PHP 5.

una función que los pasos a través de una serie de resultados. El uso típico de una variable estática es en lo que llamamos un iterador . Aquí está un ejemplo de código: <?php $walrus = 77.SESION: FORMULARIOS DE HTML  Etiqueta form Dentro de la etiqueta <form> se encuentra el formulario. Este es el enlace entre el formulario y el script CGI.penguin? 2. indicar cuánto debe pagar el cliente.seagull? What's for dinner . Y eso es lo que hay por defecto en PHP. $walrus++. } print $walrus. Method: Determina el método a utilizar para acceder al URL determinado en el campo ACTION."seagull".seagull? What's for dinner . # Just to show you this is a different walrus! ?> Y aquí están los resultados: What's for dinner . normalmente se desea un buen comienzo limpio.penguin? What's for dinner .fish? What's for dinner .penguin? What's for dinner .. pero no se comparte con el código principal."?<br />". Sin embargo. $walrus %= count($munch). Los usuarios interaccionan con los formularios a través de las llamados controles. utilizando el siguiente código. $munch = array("fish". function nextmeal () { static $walrus = 0. $k<10. Si la compra supera los $500.ice? What's for dinner . Hacer la función “descuento”. $k++) { print "What's for dinner .   Action: Especifica el URL del script CGI que debe tratar los datos recopilados por el formulario. se descuenta un 15%. Las variables estáticas Cuando se llama a una función. return $munch[$walrus]. mientras se ejecuta un script."."penguin". sin "sobras" de la llamada anterior. JHOSUE PEDRO CUEVA MAMANI 21 .ice? What's for dinner . } for ($k=0.nextmeal().seagull? What's for dinner ."ice").fish? What's for dinner . Dado el monto bruto de una compra. lo que genera el valor siguiente en la secuencia cada vez que se llama. no puede haber excepciones en las que desea que los datos que deben conservarse y que usted puede hacer que el uso de: NI una variable global que se comparte con el principal script PHP y mantenido a lo largo de su recorrido O una variable estática que se mantiene por la función.

El valor inicial. cartas. comentarios. Name: Le asigna un nombre al elemento que luego puede ser usado en scripts o en hojas de estilo. y su valor inicial puede ser definido usando el atributo "value". etc. se usará GET cuando tengamos formularios muy simples. Este control es insertado en documentos HTML usando el tag HTML input con el valor "text" en su atributo "type". GET (el defecto) y POST (basados en los métodos HTTP). opiniones. envía el formulario que lo contiene). En este tag. es decir. y POST cuando los formularios tengan muchos campos.php"> JHOSUE PEDRO CUEVA MAMANI 22 . el contenido de la caja de texto. En los casos generales. Código <form method="post" action="agente.php"> Ingresatucontraseña: <input name="contrasena" type="password" value="123456" /> </form> Vista Ingresa tu contraseña: El valor pasado al agente procesador será el texto ingresado por el usuario. el contenido será el texto inicial.Existen dos métodos. mostrado cuando la página se carga. la tecla "enter" presionada en uno de estos campos.  Entrada de línea Este control recolecta información textual en una sola línea. ingresa aquí" /> </form> Vista Ingresa un texto: Por favor.php"> Ingresa un texto: <input name="ingresatexto" type="text" value="Por favor. Elementos de entrada  Entrada textual Existen tres tipos de entrada textual que pueden recolectar información como nombres.  Entradas de password Este control actúa exactamente como el de entrada de línea con la excepción de que "esconde" los caracteres ingresados mostrándolos como puntos o asteriscos para evitar que los usuarios ven su contenido. ingresa El valos pasado al agente procesador será el texto ingresado por el usiario. Código <formmethod="post" action="agente. puede ser definido usando el atributo "value". Es comúnmente usado para el ingreso de contraseñas. ya que GET podría no ser capaz de pasar todos los datos al servidor. Código <formmethod="post" action="agente. es decir. etc.    Enctype: Especifica el tipo de datos utilizado para codificar los pares nombre/valor durante el transporte. Es definido utilizando el valor "pass" en el atributo "type". el contenido de la caja de texto. comentarios. lo que significa que el usuario no podrá utilizar la tecla "enter" para ir a la siguiente línea (en la mayoría de los formularios. se inserta utilizando el tag HTML textarea y puede ser usado para recolectar reportes.  Entrada de multi-línea Este control permite a los usuarios ingresar texto en una o más líneas. Por defecto es igual a application/x-www-form-urlencoded y no se suele especificar.

Ingresa tus comentarios:<br /><textareaname="comentarios" rows="2" cols="30">.php"> Seleccionatuactividadfavorita:<br /> <input name="intereses" type="radio" value="rbipeliculas" />Películas<br /> <input name="intereses" type="radio" value="rbilibros" />Libros<br /> <input name="intereses" type="radio" value="rbiinternet" checked="checked" />Internet </form> JHOSUE PEDRO CUEVA MAMANI 23 . es decir. <form method="post" action="agente. la casilla aparece sin marcar a menos que lo especifique de otra forma usando el atributo booleano (verdadero o false) "checked". Inicialmente. Esto significa que cuando un usuario elige una opción. Nota que los tributos "rows" y "cols" establecen las dimensiones de la caja de texto y son requeridos por algunos DTDs. Las casillas de verificación pueden ser agrupadas visualmente formando listas de opciones.. checked="checked"). pero cada una de ellas es tratada individualmente..Tus comentarios aquí. El valor pasado al agente procesador será el texto ingresado.Tus comentarios aquí. El valor inicial para el grupo depende del navegador (la mayorñia muestra todos los controles sin marcar). el contenido de la caja de texto.php"> Seleccionatusintereses:<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> Vista Selecciona tus intereses: Películas Libros Internet Botones de radio: Los botones radio trabajan de la misma forma que las casillas de verificación con una pequeña diferencia: los botones radio que comparte el mismo nombre conforman un grupo de opciones donde el usuario no puede seleccionar más de una a la vez.... Esto puede ser cambiado usando el atributo booleano "checked". que para lograr un código correcto en XHTML necesitas definir al atributo booleano con sus nombres como valores (por ejemplo... Este control es insertado mediante el tag HTML input con el valor "checkbox" en su atributo "type".. las demás son automáticamente deseleccionadas. Recuerda.Código <form method="post" action="agente.  Opciones Casillas de verificación: Una casilla de verificación es una opción simple que puede tomar uno de dos valores: "marcado" ó "no marcado" ("checked" ó "unchecked").</textarea> </form> Vista Ingresa tus comentarios: .

el valor inicial de los elementos HTML option puede ser establecido a "seleccionado" usando el atributo booleano "selected". Código <formmethod="post" action="agente.Vista Selecciona tu actividad favorita: Películas Libros Internet Para botones radio el valor pasado al agente procesador es el contenido del atributo "value" de la opción seleccionada. El último elemento es el único prescindible para construir este tipo de listas. Como en los controles anteriores. como con casillas de verificación (manteniendo presionada la tecla "Ctrl"):<br /> <selectname="entradalista[]" multiple="multiple"> <optgrouplabel="Entradas textuales"> <option>Entrada de línea</option> <option>Entrada de contraseña</option> <option>Entrada multi-línea</option> </optgroup> <optgrouplabel="Opciones"> <optionselected="selected">Casillas de verificación</option> <option>Botones radio</option> <option>Listas</option> </optgroup> </select> </form> Vista Elije solo una opción. lo que significa que una lista con muchos botones radio solo pasará un valor. Listas: Estas listas pueden ser construidas utilizando tres elementos: el elemento HTML select (contenedor principal). como con casillas de verificación (manteniendo presionada la tecla Entrada de contraseña JHOSUE PEDRO CUEVA MAMANI 24 .php"> Elije solo una opción. como en los botones radio: <selectname="entradalista"> <optgrouplabel="Entradas textuales"> <option>Entrada de línea</option> <optionselected="selected">Entrada de contraseña</option> <option>Entrada multi-línea</option> </optgroup> <optgrouplabel="Opciones"> <option>Casillas de verificación</option> <option>Botones radio</option> <option>Listas</option> </optgroup> </select> <br /> Elije tantas opciones como quieras. dependiendo de la presencia del atributo booleano "multiple". el elemento HTML option (opción simple) y el elemento HTML optgroup (grupo de opciones). Los controles de lista pueden ser usadas para recolectar información al igual que los botones radio (sólo una opción) o como casillas de verificación (múltiples opciones). como en los botones radio: Elije tantas opciones como quieras.

php"> <input type="text" name="texto1" value="Valor pordefecto" /><br /> <input type="checkbox" name="reglas" checked="checked" />Aceptolasrelgas<br /> <input type="reset" value="Reestablecertodos los campos a su valor predeterminado" /> </form> Valor por defe Acepto las relgas Reestablecer todos los campos a su valor predeterminado Botones de imagen Los botones de imagen funcionan exactamente como los botones de envío con la única diferencia que los de imagen son representados visualmente con la imagen JHOSUE PEDRO CUEVA MAMANI 25 . Botones Un botón es un dispositivo primordialmente diseñado para realizar una acción con el formulario que lo contenga. El valor individual pasado en ambos casos es el contenido del atributo "value" si el mismo está presente. pero para el segundo ejemplo el valor pasado será un arreglo (array) con los valores de las opciones seleccionadas. <form method="post" action="agente. el valor pasado al agente procesador será la opción seleccionada. Es insertado utilizando el tag HTML input con el valor "submit" en su atributo "type"."Ctrl"): Entrada de línea Para la primera lista sin el atributo "multiple". Existe sólo un tipo más de botón que no posee una acción predefinida (la misma debe ser especificada con un lenguage del lado cliente). Son insertados con el tag HTML input con el valor "reset" en su atributo "type". Existen dos tipos básicos de botones: para enviar el formulario y para reestablecerlo (devuelve todos los campos a sus valores iniciales). <form method="post" action="agente.php"> <input type="submit" value="Enviaresteformulario" /> </form> Enviar este formulario Botones de restablecimiento: Este tipo de botones reestablecen los controles en un formulario a sus valores iniciales cuando es presionado. y el contenido del elemento si no (de las opciones seleccionadas). para listas con el atributo "multiple" presente. debes agregar los corchetes("[]") al final del nombre del tag HTML select. Botones de envió Este tipo de botones envía automáticamente el formulario en que se encuentra cuando es presionado. Es por esto que.

). El control habitualmente muestra un botón para elegir el archivo visualmente. etc. texto en negrita. </button> </form> El tag HTML button permite contenido. de otro modo. <form method="post" action="agente.php"> <input type="image" src="/img/p/tutorials/forms/3/submit.y"). Esto significa que una porción de código HTML puede ser mostrado dentro del botón (vínculos.especificada en el atributo "src". Este control muestra una caja de texto donde el usuario debe especificar la ruta del archivo (que será adjuntado localmente por el navegador) que será enviado al servidor.php"> <button type="button"> El <b>tag HTML button</b><br /> permite contenido. Entrada de archivos La entrada de archivos puede ser utilizada para subir archivos al servidor. <form method="post" action="agente. <form method="post" action="agente. para un botón de imagen llamado "boton1"las coordenadas serán enviadas en la forma "boton1. imágenes. Pero su características es que permite a los autores inserta contenido dentro de los mismos. De este modo los autores pueden pedir a los visitantes que envíen archivos de sus computadoras a través de la página. párrafos.png"> </form> Botones de contenido Los botones de contenido pueden ser usados como botones de envío o reestablecimiento.php" enctype="multipart/form-data"> Ingresa el archivo: <input name="imagen" type="file" /> </form> JHOSUE PEDRO CUEVA MAMANI 26 . o bien pueden no tener ninguna acción preestablecida (dependiendo del valor de su atributo "type"). Otra particularidad es éstos envían además las coordenadas donde ha ocurrido el click cuando el formulario fue enviado. Nota que para los formularios con subida de archivos debes especificar el valor "multipart/form-data" en el atributo "enctype" del tag HTML form. tomadas desde la esquina superior izquierda del botón (por ejemplo.x" y "boton1. el archivo no será enviado.

<form method="post" action="agente. Una etiqueta establece una relación entre un control y una porción de texto (que se supone. pero éstas sin duda harán una gran diferencia para personas con discapacidades o con navegadores no visuales. Permitiéndonos de esta manera procesar la información que el usuario ha introducido.php" METHOD="GET"> <INPUT TYPE="text" NAME="nombre"><BR> <INPUT TYPE="submit" VALUE="Enviar"> </FORM> </body> </html> JHOSUE PEDRO CUEVA MAMANI 27 . <html> <head> <title>Ejemplo de PHP</title> </head> <body> <H1>Ejemplo de procesado de formularios</H1> Introduzca su nombre: <FORM ACTION="procesa. establece un "título" para el control).php"> <label for="idnombre">Nombre:</label> <input type="text" id="idnombre" name="nombre" /><br /> <label for="idapellido">Apellido:</label> <input type="text" id="idapellido" name="apellido" /><br /><br /> Género:<br /><input type="radio" id="idmasculino" name="genero" /><label for="idmasculino">Masculino</label><br /> <input type="radio" id="idfemenino" name="genero" /><label for="idfemenino">Femenino</label> </form> Nombre: Apellido: Género: Masculino Femenino ENVIÓ Y RECEPCIÓN DE DATOS El lenguaje PHP nos proporciona una manera sencilla de manejar formularios. que debe coincidir con el valor del atributo "id" en el control. Al diseñar un formulario debemos indicar la página PHP que procesará el formulario. el enfoque pasa automáticamente al control asociado).Etiquetando elementos Las etiquetas de los elementos pueden hacer que tu página lozca mejor y sea más funcional en agentes de usuario visuales (cuando un visitante hace click en la etiqueta. Las etiquetas pueden insertarse con el elemento HTML label y son asociados a los controles mediante el atributo "for". así Como en método por el que se le pasará la información a la página.

la expresión es evaluada a su valor booleano. las sentencias pueden agruparse en un conjunto de sentencias. En cambio. Adicionalmente. no hay necesidad de envolver cada sentencia con una cláusula if. incluido PHP. } ?> Las sentencias if pueden anidarse dentro de otra sentencias if infinitamente. Un grupo de sentencias es una sentencia por sí misma también. se pueden agrupar varias sentencias en un grupo de sentencias. $b = $a. una llamada de función. Si la expresión se evalúa como TRUE.-SESION: SENTENCIAS DE CONTROL I Estructuras condicionales Todo script PHP está construido en base a una serie de sentencias. } ?> A menudo se desea tener más de una sentencia para ser ejecutada condicionalmente. JHOSUE PEDRO CUEVA MAMANI 28 . PHP dispone de una estructura if que es similar a la de C: if (expr) sentencia Como se describe en la sección sobre expresiones.3. este código mostraría a es mayor que b si $a es mayor que $b y entonces asignaría el valor de $a a $b: <?php if ($a > $b) { echo "a es mayor que b". encapsulándolas entre corchetes. un ciclo. Más información sobre qué valores evalúan como FALSE se puede encontrar en la sección 'Convirtiendo a booleano'. Las sentencias generalmente finalizan con un punto y coma. Por ejemplo. PHP ejecutará la sentencia y si se evalúa como FALSE la ignorará. if El constructor if es una de las características más importantes de muchos lenguajes. lo cual provee completa flexibilidad para la ejecución condicional de diferentes partes del programa. Por supuesto. una sentencia condicional o incluso una sentencia que no hace nada (una sentencia vacía). Permite la ejecución condicional de fragmentos de código. Una sentencia puede ser una asignación. El siguiente ejemplo mostraría a es mayor que b si $a es mayor que $b: <?php if ($a > $b) { echo "a es mayor que b".

este es el mismo comportamiento) pero la conclusión es que ambos resultarían tener exactamente el mismo comportamiento. extiende una sentencia if para ejecutar una sentencia diferente en caso que la expresión if original se evalúe como FALSE. el siguiente código deberá mostrar a es mayor que b si $a es mayor que $b y a NO es mayor que b en el caso contrario: <?php if ($a > $b) { echo "a es mayor que b". El significado sintáctico es ligeramente diferente (si se está familiarizado con C. elseif/else if elseif. En PHP también se puede escribir 'else if' (en dos palabras) y el comportamiento sería idéntico al de 'elseif' (en una sola palabra). } else { echo "a NO es mayor que b". Del mismo modo que else. es una combinación de if y else. Esto es para lo que sirve else. a es igual que b o a es menor que b: <?php if ($a > $b) { echo "a es mayor que b".else Con frecuencia se desea ejecutar una sentencia si una determinada condición se cumple y una sentencia diferente si la condición no se cumple. La sentencia elseif es ejecutada solamente si la expresión if precedente y cualquiera de las expresiones elseif precedentes son evaluadas como FALSE. el siguiente código debe mostrar a es mayor que b. y la expresión elseif JHOSUE PEDRO CUEVA MAMANI 29 . La primera expresión elseif (si hay alguna) que se evalúe como TRUE sería ejecutada. } ?> La sentencia else sólo es ejecutada si la expresión if es evaluada como FALSE y si hay algunas expresiones elseif . a diferencia de else. esa expresión alternativa sólo se ejecutará si la expresión condicional del elseif se evalúa como TRUE. } else { echo "a es menor que b". Por ejemplo. como su nombre lo sugiere. El else extiende una sentencia if para ejecutar una sentencia en caso que la expresión en la sentencia if se evalúe como FALSE. Sin embargo. } ?> Puede haber varios elseif dentro de la misma sentencia if. Por ejemplo. } elseif ($a == $b) { echo "a es igual que b".sólo se ejecuta si también todas son evaluadas como FALSE.

" es mayor que ". Los dos ejemplos siguientes son dos formas diferentes de escribir lo mismo.$b. Nota: Tener en cuenta que switch/case hace comparaciones flexibles.actual se evalúa como TRUE. /* Método correcto: */ if($a > $b): echo $a. else: echo $a." igual ". Al utilizar los dos puntos para definir las condiciones if/elseif.". En muchas ocasiones. se utiliza continue 2. endif. y el otro usando la sentencia switch: Ejemplo de Estructura switch <?php if ($i == 0) { echo "i es igual a 0". elseif($a == $b): // Tenga en cuenta la combinación de las palabras. } elseif ($i == 1) { JHOSUE PEDRO CUEVA MAMANI 30 .$b. es posible que se quiera comparar la misma variable (o expresión) con muchos valores diferentes." es mayor que ". uno con una serie de sentencias if y elseif. else if($a == $b): // No compilará echo "La línea anterior provoca un error del interprete. ?> switch La sentencia switch es similar a una serie de sentencias IF en la misma expresión. Para esto es exactamente la expresión switch. endif. no debe separarse else if en dos palabras o PHP fallará con un error del interprete.$b. Si se tiene un switch dentro de un bucle y se desea continuar a la siguiente iteración de del ciclo exterior. y ejecutar una parte de código distinta dependiendo de a que valor es igual. echo $a. la sentencia continue se aplica a switch y actúa de manera similar a break." no es ni mayor que ni igual a ". Nota: Cabe señalar que a diferencia de algunos otros lenguajes. <?php /* Método incorrecto: */ if($a > $b): echo $a.$b. Nota: Tenga en cuenta que elseif y else if serán considerados exactamente iguales sólamente cuando se utilizan corchetes como en el ejemplo anterior.

} elseif ($i == 2) { echo "i es igual a 2".echo "i es igual a 1". case 2: echo "i es igual a 2". la ejecución no se detendrá hasta el final de la iteración (cada vez que PHP ejecuta las sentencias contenidas en el bucle es una iteración). La forma básica de una sentencia while es: while (expr) sentencia El significado de una sentencia while es simple. las sentencias anidadas no se ejecutarán ni siquiera una vez. por lo que incluso si este valor cambia durante la ejecución de las sentencias anidadas. se pueden agrupar varias instrucciones dentro del mismo bucle while rodeando un grupo de sentencias con corchetes. tanto como la expresión while se evalúe como TRUE. break. break. El valor de la expresión es verificado cada vez al inicio del bucle. si la expresión while se evalúa como FALSE desde el principio. Se comportan igual que su contrapartida en C. o utilizando la sintaxis alternativa: while (expr): sentencias .. Al igual que con la sentencia if.. } switch ($i) { case 0: echo "i es igual a 0". break.. endwhile. A veces. Le dice a PHP que ejecute las sentencias anidadas. } ?> 4. Los siguientes ejemplos son idénticos y ambos presentan los números del 1 al 10: <?php /* ejemplo 1 */ JHOSUE PEDRO CUEVA MAMANI 31 .SESION: SENTENCIAS DE CONTROL II Estructuras repetitivas while Los bucles while son el tipo más sencillo de bucle en PHP. case 1: echo "i es igual a 1".

if ($i < $minimum_limit) { break. mientras que no necesariamente va a correr con un bucle while regular (la expresión verdadera es verificada al principio de cada iteración. para permitir parar la ejecución en medio de los bloques de código.$i = 1. do { echo $i. si se evalúa como FALSE justo desde el comienzo. excepto que la expresión verdadera es verificada al final de cada iteración en lugar que al principio. /* el valor presentado sería $i antes del incremento (post-incremento) */ } /* ejemplo 2 */ $i = 1. $i++. ?> El bucle de arriba se ejecutaría exactamente una sola vez. El siguiente fragmento de código demuestra esto: <?php do { if ($i < 5) { echo "i no es lo suficientemente grande". } $i *= $factor. endwhile. JHOSUE PEDRO CUEVA MAMANI 32 . y utilizando la sentencia break. la ejecución del bucle terminaría inmediatamente). La diferencia principal con los bucles while es que está garantizado que corra la primera iteración de un bucle do-while (la expresión verdadera sólo es verificada al final de la iteración). Hay una sola sintaxis para bucles do-while: <?php $i = 0. cuando la expresión verdadera es verificada. ?> do-while Los bucles do-while son muy similares a los bucles while. while ($i <= 10) { echo $i++. se evalúa como FALSE ($i no es mayor que 0) y termina la ejecución del bucle. break. Los usuarios avanzados de C pueden estar familiarizados con un uso distinto del bucle do-while. while ($i <= 10): echo $i. } while ($i > 0). ya que después de la primera iteración. mediante el encapsulado con do-while (0).

Si se evalúa como FALSE. /* procesar i */ } while (0). ?> for Los bucles for son los ciclos más complejos en PHP. Si es TRUE. la expr2 es evaluada. Se comportan como sus contrapartes en C. En el comienzo de cada iteración. ya que muchas veces se quiere terminar el bucle usando una sentencia condicional break en lugar de utilizar la expresión verdadera del for. expr3) sentencia La primera expresión (expr1) es evaluada (ejecutada) una vez incondicionalmente al comienzo del bucle.} echo "i está bien". expr2. la expr3 es evaluada (ejecutada). En la expr2. Que la expr2 esté vacía significa que el bucle deberá ser corrido indefinidamente (PHP implícitamente lo considera como TRUE. Esto puede no ser tan inútil como se pudiera pensar. } /* ejemplo 3 */ JHOSUE PEDRO CUEVA MAMANI 33 . el bucle continúa y las sentencias anidadas son ejecutadas. Considere los siguientes ejemplos. . } echo $i. $i++) { if ($i > 10) { break. La sintaxis de un bucle for es: for (expr1. termina la ejecución del bucle. todas las expresiones separadas por una coma son evaluadas pero el resultado se toma de la última parte. como en C). $i <= 10. Al final de cada iteración. } /* ejemplo 2 */ for ($i = 1. Cada una de las expresiones puede estar vacía o contener múltiples expresiones separadas por comas. $i++) { echo $i. Todos ellos muestran los números del 1 al 10: <?php /* ejemplo 1 */ for ($i = 1.

'salt' => 856412). $j += $i. $i < $size. ) { if ($i > 10) { break.$i = 1. expr2. $i++).. 'salt' => 856412). $size = sizeof($people). $i++. El siguiente ejemplo ilustra esto: <?php $people = Array( Array('name' => 'Kalle'. ?> Por supuesto. expr3): sentencia . for (expr1. $j = 0.. ++$i) { $people[$i]['salt'] = rand(000000. Array('name' => 'Pierre'. $i < sizeof($people). $i <= 10. } ?> El problema radica en la segunda expresión del for. Este código puede ser lento porque tiene que calcular el tamaño del array en cada iteración. Array('name' => 'Pierre'. Dado que el tamaño nunca cambia. print $i. 'salt' => 215863) ). se pueden optimizar fácilmente usando una variable intermedia para almacenar el tamaño y usarla en el bucle en lugar del sizeof. for($i = 0. */ $people = Array( Array('name' => 'Kalle'. PHP también soporta la sintaxis alternativa de los dos puntos para bucles for. } echo $i. 999999). el primer ejemplo parece ser el mejor (o quizás el cuarto). } /* ejemplo 4 */ for ($i = 1. . for($i = 0. for (. endfor. Es una cosa común a muchos usuarios iterar por medio de arrays como en el ejemplo de abajo. <?php /* * Este es un array con algunos datos que se desean modificar * cuando se corra por el bucle for. 'salt' => 215863) ). ++$i) JHOSUE PEDRO CUEVA MAMANI 34 . pero se puede encontrar que la posibilidad de usar expresiones vacías en los bucles for resulta útil en muchas ocasiones.

el puntero interno del array se pone automáticamente en el primer elemento del array. } // $array ahora es array(2. <?php $array = array(1. En cada iteración. 4. cambiar éste dentro del bucle puede conducir a un comportamiento inesperado. 8) unset($valor). El siguiente código no funcionará: JHOSUE PEDRO CUEVA MAMANI 35 . foreach funciona sólo sobre arrays y objetos. Ya que foreach depende el puntero de array interno. si es una variable). 4). Esto significa que no es necesario llamar la función reset() antes de un bucle foreach. el valor del elemento actual se asigna a $valor y el puntero interno del array avanza una posición (así en la próxima iteración se estará observando el siguiente elemento). } ?> foreach El constructor foreach proporcina un modo sencillo de iterar sobre arrays. Existen dos sintaxis: foreach (expresión_array as $valor) sentencias foreach (expresión_array as $clave => $valor) sentencias La primera forma recorre el array dado por expresión_array.{ $people[$i]['salt'] = rand(000000. La segunda forma además asigna la clave del elemento actual a la variable $clave en cada iteración. 3. En este caso el valor será asignado por referencia. foreach ($array as &$valor) { $valor = $valor * 2. y emitirá un error al intentar usarlo con una variable de un tipo diferente de datos o una variable no inicializada. se ha de anteponer & a $valor. Nota:   Cuando foreach inicia su ejecución. También es posible personalizar la iteración de objetos. 2. 999999). Para poder modificar directamente los elementos del array dentro de bucle. // rompe la referencia con el último elemento ?> Referenciar $valor sólo es posible si el array iterado puede ser referenciado (es decir. 6.

2. } foreach ($array as $valor) { echo "Valor: $valor<br />\n". $valor) = each($array)) { echo "Valor: $valor<br />\n". Valor: $valor<br />\n". } ?> Advertencia La referencia del $valor y el último elemento del array permanecen aún después del bucle foreach. Nota: foreach no soporta la capacidad de suprimir mensajes de error usando '@'. } ?> Las siguientes construcciones también son funcionalmente idénticas: <?php $array = array("uno". "dos". 3. "dos". } ?> Algunos ejemplos más para demostrar su uso: <?php /* Ejemplo 1 de foreach: sólo el valor */ $a = array(1. 4) as &$valor) { $valor = $valor * 2. Se puede haber notado que las siguientes construcciones son funcionalmente idénticas: <?php $array = array("uno". 3. 2. JHOSUE PEDRO CUEVA MAMANI 36 .<?php foreach (array(1. 17). 3. Valor: $valor<br />\n". } foreach ($array as $clave => $valor) { echo "Clave: $clave. while (list($clave. reset($array). 2. foreach ($a as $v) { echo "Valor actual de \$a: $v. reset($array). $valor) = each($array)) { echo "Clave: $clave. "tres"). "tres"). } /* Ejemplo 2 de foreach: valor (con su notación de acceso manual impreso con fines ilustrativos) */ $a = array(1.\n". Se recomienda destruirlos con unset(). while (list(. 17).

5) as $v) { echo "$v\n". $a[0][1] = "b". "diecisiete" => 17 ).$i = 0.\n". $a[1][1] = "z". foreach ($a as $v1) { foreach ($v1 as $v2) { echo "$v2\n". ?> A través de esto crearemos una sesión. OJO: Para poder usar la variables de sesión creadas hay que colocar esto al principio de nuestro script en PHP antes de cualquier sentencia HTML o generará JHOSUE PEDRO CUEVA MAMANI 37 . $a[0][0] = "a". foreach ($a as $k => $v) { echo "\$a[$k] => $v. } ?> 5. claro está. "tres" => 3. 4. $a[1][0] = "y". /* sólo para efectos ilustrativos */ foreach ($a as $v) { echo "\$a[$i] => $v. 3.. } } /* Ejemplo 5 de foreach: arrays dinámicos */ foreach (array(1.\n". } /* Ejemplo 4 de foreach: arrays multidimensionales */ $a = array(). Las sesiones se crean de forma bastante sencilla: <?php session_start(). de forma temporal. } /* Ejemplo 3 de foreach: clave y valor */ $a = array( "uno" => 1.SESION: USO DE SESIONES PHP El uso de sesiones nos proporciona una forma fácil de guardar datos del usuario sin tener que recurrir a mysql o archivos de texto plano. "dos" => 2. $i++. Con sesiones se puede realizar:    Saber si un usuario a ingresado en el a través de login. Cualquier cosa que requiera una variable temporal en relación a la visita del usuario. Cambio de Hoja de estilos CSS por parte del usuario. 2.

SESIÓN: TABLAS O ARRAYS Uso de arrays Un array en PHP es realmente un mapa ordenado..php" method="POST"> <label for="variable">Introduzca la variable que quiere introducir a la sesión: </label> <input type="text" id="variable"> </form> ?> //Receptor de datos (capturador. pila. Como ves es bastante sencillo. Ya que los valores de un array pueden ser otros arrays.php". En el capturador recibimos los datos y definimos variable de sesión. ?> Podríamos definir una variable de sesión para un estilo css. Este tipo es optimizado para varios usos diferentes. Un mapa es un tipo de datos que asocia valores con claves.SESION: FUNCIONES PREDEFINIDAS EN PHP 7. session_destroy(). colección.php").. diccionario. $_POST["nombre"] = $_SESSION["variable"]. header("Location: index.un error. JHOSUE PEDRO CUEVA MAMANI 38 . y posiblemente más. una lista (vector). 6. ?> <script type="text/javascript"> window. árboles y también son posibles arrays multidimensionales.php) <?php session_start().location="index. usaremos lo siguiente: <?php session_start() if (isset ($_SESSION["variable"] { echo "Usted ha introducido la variable $_SESSION["variable"] } else { //Remitente de datos (Index.php) <form action="capturador. puede ser usado como una matriz real. ahora solo nos falta borrar esa sesión: <?php session_start(). cola. Para definir una variable de sesión (que se guarda de manera temporal. una tabla asociativa (una implementación de un mapa). Con el código javascript redireccionamos al index sin alterar el PHP. seleccionado mediante un form. </script> Con ese script lo que realizamos es lo siguiente:    Colocamos un IF en el index y si no existe damos un formulario para crearla.

]. la clave null en realidad será almacenada como "". que reemplaza array() con [].7 en realidad será almacenada como 8. ?> La clave puede ser un integer o un string.j.e. "bar" => "foo". El valor puede ser de cualquier tipo. // a partir de PHP 5. <?php $array = array( "foo" => "bar". ya que no es un número integer decimal válido. ) La coma después del elemento del array es opcional y se puede omitir. p. la clave true en realidad será almacenada como 1 y la clave false como 0. Además. p.j.j. Esto normalmente se hace para arrays de una sola línea. pero encontrará al menos un ejemplo de cada uno de ellos. la clave "8" en realidad será almacenada como 8. 2. Tipos de declaraciones JHOSUE PEDRO CUEVA MAMANI 39 . Por otra parte.4 también se puede usar la sintaxis de array corta. 2) que array(1.e.. esto es. array( clave =>valor. para arrays multilínea.4 $array = [ "foo" => "bar". clave2 =>valor2. ).e. la coma final se usa comúnmente.e.  Null será moldeado a un string vacío.  Arrays y objects no pueden ser usados como claves. P. Si lo hace. ya que permite la adición sencilla de nuevos elementos al final. es preferible array(1.  Floats también serán moldeados en integers.Una explicación sobre tales estructuras de datos está fuera del alcance de este manual. "bar" => "foo". clave3 =>valor3.. ). A partir de PHP 5. Sintaxis Especificación con array() Un array puede ser creado usando el constructor del lenguaje array().j. también. lo que significa que la parte fraccionaria se elimina. Para más información. Éste toma un cierto número de parejas clave =>valor como argumentos. la clave 8. consulte la extensa literatura que existe sobre este amplio tema. los siguientes moldeados de tipo en la claveproducirá:  Strings que contienen integers válidos serán moldeados a el tipo integer.  Bools son moldeados a integers. dará lugar a una advertencia: Illegal offset type. P. Por otro lado "08" no será convertido. .

se da un ejemplo al final de la sección de sub-patrones de una sóla aplicación. Las declaraciones más complicadas están codificadas como sub-patrones. Una declaración como (?<=ab(c|de)) no está permitida porque su rama del nivel superior puede coincidir con dos longitudes diferentes. Las declaraciones de búsqueda hacia atrás junto con los sub-patrones de una sóla aplicación pueden ser particularmente útiles para comparaciones con los finales de las cadenas. la cual a su vez no está precedida por "foo". si hay varias alternativas. El contenido de una declaración de búsqueda hacia atrás está restringido de tal manera que todas las cadenas que se comparen con ella deben tener una longitud fija. \A. Las declaraciones de búsqueda hacia atrás comienzan con (?<= para declaraciones positivas y con (?<! para declaraciones negativas.)(?<!999)foo Esta vez. y no se pueden repetir.(?<!999))foo es otro patrón que coincide con "foo" precedido por tres dígitos y otros tres caracteres cualesquiera que no sean "999". Los sub-patrones declarativos no son sub-patrones de captura. Primero. para cada alternativa. la cual requiere que todas las ramas a comparar tengan la misma longitud de cadena. Las declaraciones de búsqueda hacia delante comienzan con (?= para declaraciones positivas y con (?! para declaraciones negativas. Por ejemplo.Una declaración es una comprobación de los caracteres siguientes o anteriores al punto de coincidencia actual que en realidad no consumen carácter alguno. y después. (?<!foo)bar encuentra una incidencia de "bar" que no esté precedida por "foo". Sin embargo. Un patrón declaración es comparado de la forma habitual. \Z. Esto es una extensión comparado con Perl 5. (?<=(?<!foo)bar)baz coincide con una incidencia de "baz" que está precedida por "bar". Si cualquier tipo de declaración contiene subpatrones de captura dentro de ella. Un patrón que hace eso es (?<=\d{3}. pero no incluye el punto y coma en la coincidencia. Por ejemplo. éstos son contados con el propósito de numerar los subpatrones de captura en el patrón completo. excepto que no causa que la posición actual de coincidencia cambie. ya que no tiene sentido declarar la misma cosa varias veces. la captura de sub-cadenas se realiza sólo JHOSUE PEDRO CUEVA MAMANI 40 . (?<=\d{3})(?<!999)foo coincide con "foo" precedido de tres dígitos que no sean "999". Por ejemplo. después se verifica que esos mismos tres caracteres no sean "999". no es necesario que tengan todas las mismas longitudes fijas. pero es aceptable si se rescribe para usar dos ramas del nivel superior: (?<=abc|abde) La implementación de las declaraciones de búsqueda hacia atrás es. Hay dos tipos: aquéllas que buscan hacia delante desde punto actual de la cadena objetivo. Varias declaraciones (de cualquier tipo) pueden producirse en sucesión.) coincide con una palabra seguida de un punto y coma. retroceder temporalmente la posición actual por el ancho fijo y después intentar coincidir. pero (?<!toros?|vacas?) produce un error en tiempo de compilación. la comparación está condenada a fallar.005.. Las declaraciones simples codificadas como \b. Este patrón no coincide con "foo" precedido de seis caracteres. no encuentra ninguna incidencia de "bar" en absoluto. Por ejemplo. verificando que los tres primeros son dígitos... \z. (?<=buey|burro) está permitido. ya que la declaración (?!foo) es siempre TRUE cuando los tres caracteres siguientes son "bar".. Sin embargo. Las ramas que se comparan con cadenas de diferente longitud están permitidas sólo en el nivel superior de una declaración de búsqueda hacia atrás. los primeros de los cuales son dígitos y los tres últimos de ellos no son "999". Si no hay suficientes caracteres antes de la posición actual. Observe que el patrón aparentemente similar (?!foo)bar no encuentra una incidencia de "bar" que esté precedida por algo distinto de "foo". \B. no coincide con "123abcfoo". la segunda declaración verifica que los tres caracteres anteriores no son "999". mientras que (?<=\d{3}. Las declaraciones pueden estar anidadas en cualquier combinación. Nótese que cada una de las declaraciones es aplicada en el mismo punto de la cadena objetivo. se verifica que los tres caracteres previos son todos dígitos. la primera declaración examina los seis caracteres precedentes. Por ejemplo. y aquéllas que buscan hacia atrás desde él. \w+(?=. ^ y $ están descritas anteriormente. Así. y foo(?!bar) coincide con cualquier incidencia de "foo" que no esté seguida de "bar". Se necesita una declaración de búsqueda hacia atrás para conseguir este efecto.

cuyo índice ya no es numérico. a su vez. para ello podemos asignarle.para declaraciones positivas. en vez de un dato simple. ya que no tiene sentido para declaraciones negativas. los que solo pueden albergar datos simples y con un índice numérico (índice por defecto en PHP). En primer lugar tenemos los arrays más simples. En segundo lugar tenemos los arrays asociativos. Tipos de arrays En una variable tenemos la posibilidad de almacerar una estructura de datos compleja. que se hacen llamar arrays multidimensionales. Las declaraciones cuentan para el máximo de 200 sub-patrones entre paréntesis. Por último tenemos los arrays más complejos. otro más complejo conocido como array. Funciones útil para el uso de arrays    array_change_key_case — Cambia todas las claves en un array array_chunk — Divide un array en fragmentos array_combine — Crea un nuevo array. Estos últimos son los que nos dan la posibilidad realmente de almacerar una estructura compleja de datos en una sola variable. Estos arrays son datos capaces de albergar otros datos. sinó que tendrá los valores que nosotros le demos. usando una matriz para las claves y otra para sus valores JHOSUE PEDRO CUEVA MAMANI 41 . y poder acceder a ellos a través de un índice. Éstos. pueden ser asociativos o no serlo.

                                     array_count_values — Cuenta todos los valores de un array array_diff_assoc — Calcula la diferencia entre arrays con un chequeo adicional de índices array_diff_key — Calcula la diferencia entre arrays usando las keys para la comparación array_diff_uassoc — Calcula la diferencia entre arrays con un chequeo adicional de índices que se realiza por una función de devolución de llamada suministrada por el usuario array_diff_ukey — Calcula la diferencia entre arrays usando una función de devolución de llamada en las keys para comparación array_diff — Calcula la diferencia entre arrays array_fill_keys — Llena un array con valores. o arrays multi-dimensionales array_pad — Rellena un array a la longitud especificada con un valor array_pop — Extrae el último elemento del final del array array_product — Calcula el producto de los valores en el array array_push — Inserta uno o más elementos al final de un array array_rand — Selecciona una o más entradas aleatorias de un array array_reduce — Reduce iterativamente una matriz a un solo valor usando una función llamada de retorno array_replace_recursive — Reemplaza los elementos de los arrays pasados al primer array de forma recursiva array_replace — Remplaza los elementos de los arrays pasados en el primer array array_reverse — Devuelve un array con los elementos en orden inverso array_search — Busca un valor determinado en un array y devuelve la clave correspondiente en caso de éxito array_shift — Quita un elemento del principio del array array_slice — Extrae una parte de un array array_splice — Elimina una porción del array y la reemplaza con algo array_sum — Calcula la suma de los valores en un array array_udiff_assoc — Computa la diferencia entre arrays con una comprobación de indices adicional. especificando las keys array_fill — Llena un array con valores array_filter — Filtra elementos de un array usando una función de devolución de llamada array_flip — Intercambia todas las keys con sus valores asociados en un array array_intersect_assoc — Calcula la intersección de arrays con un chequeo adicional de índices array_intersect_key — Calcula la intersección de arrays usando las keys para la comparación array_intersect_uassoc — Calcula la intersección de arrays con un chequeo adicional de índices que se realiza por una función de devolución de llamada array_intersect_ukey — Calcula la intersección de arrays usando una función de devolución de llamada en las keys para la comparación array_intersect — Calcula la intersección de arrays array_key_exists — Verifica si el índice o clave dada existe en el array array_keys — Devuelve todas las claves de un array o un subconjunto de claves de un array array_map — Aplica la llamada de retorno especificada a los elementos de los dados array_merge_recursive — Une dos o más arrays recursivamente array_merge — Combina dos o más arrays array_multisort — Ordena múltiples arrays. compara la información mediante una función de llamada de retorno array_udiff_uassoc — Computa la diferencia entre arrays con una verificación de JHOSUE PEDRO CUEVA MAMANI 42 .

usando una llamada de retorno para la comparación de datos array_uintersect_assoc — Computa la intersección de arrays con una comprobación de índices adicional.                                     índices adicional. compara la información mediante una función de llamada de retorno array_unique — Elimina valores duplicados de un array array_unshift — Añadir al inicio de un array uno a más elementos array_values — Devuelve todos los valores de un array array_walk_recursive — Aplicar una función de usuario recursivamente a cada miembro de un array array_walk — Aplicar una función de usuario a cada miembro de un array array — Crea un array arsort — Ordena un array en orden inverso y mantiene la asociación de índices asort — Ordena un array y mantiene la asociación de índices compact — Crear un array que contiene variables y sus valores count — Cuenta todos los elementos de un array o en un objecto current — Devuelve el elemento actual en un array each — Devolver el par clave/valor actual de un array y avanzar el cursor del array end — Establece el puntero intero de un array a su último elemento extract — Importar variables a la tabla de símbolos actual desde un array in_array — Comprueba si un valor existe en un array usando comparación flexible key — Obtiene una clave de un array krsort — Ordena un array por clave en orden inverso ksort — Ordena un array por clave list — Asigna variables como si fuera un array natcasesort — Ordenar un array usando un algoritmo de "orden natural" insensible a mayúsculas-minúsculas natsort — Ordena un array usando un algoritmo de "orden natural" next — Avanza el puntero interno de un array pos — Alias de current prev — Rebobina el puntero interno del array range — Crear un array que contiene un rango de elementos reset — Establece el puntero interno de un array a su primer elemento rsort — Ordena un array en orden inverso shuffle — Mezcla un array sizeof — Alias de count sort — Ordena un array uasort — Ordena un array con una función de comparación definida por el usuario y mantiene la asociación de índices uksort — Ordena un array según sus claves usando una función de comparación definida por el usuario usort — Ordena un array según sus valores usando una función de comparación definida por el usuario JHOSUE PEDRO CUEVA MAMANI 43 . compara la información mediante una función de llamada de retorno array_uintersect_uassoc — Computa la intersección de arrays con una comprobación de índices adicional. compara la información y los índices mediante una función de llamada de retorno array_udiff — Computa la diferencia entre arrays. compara la información y los índices mediante funciones de llamada de retorno array_uintersect — Computa una intersección de arrays.

Hay cuatro conjuntos de etiquetas que delimitan el código PHP: <?php y ?> <? y ?> <% y %> <script language="php"> y </script> De estos cuatro tipos de etiquetas.SESION: FUNCIONES DEFINIDAS POR USUARIOS PHP nos permite embeber sus fragmentos de código dentro de la página HTML. el modo de funcionamiento de una página PHP es el siguiente: el servidor va a reconocer la extensión correspondiente a la página PHP ( php.. Los siguientes ejemplos muestran las distintas formas de embeber código PHP en HTML: Funciones con argumentos por valor y referencia Cuando se declara una variable. php4.. están siempre disponibles.8. ya que son variables distintas con espacios de memoria distintos.?> y <script language="php">. ya que asumirá que se trata de código HTML absolutamente comprensible por el navegador. de modo que los cambios que sufra la variable en la función no afectarán a la variable de fuera de la función. lo enviara sin más. sólo dos. De acuerdo a esto. .. phtml. sino la posición del espacio de memoria de esa variable (a esto se le llama puntero).. El resto pueden ser configuradas en el fichero php. . php3. Cuando pasamos una variable a una función por valor. . es decir. es posible incluir lenguaje PHP en un código HTML. . realmente no estamos pasando el valor de la variable. <?php. Esto se consigue delimitando nuestro código por etiquetas.) y antes de enviarla al navegador va a encargarse de interpretar y ejecutar todo aquello que se encuentre entre las etiquetas correspondientes al lenguaje PHP. cuando pasamos una variable a una función por referencia. aunque tengan el mismo nombre.</script>. el sistema operativo reserva un espacio de memoria en la memoria RAM. el sistema operativo reserva otro espacio de memoria distinto. los JHOSUE PEDRO CUEVA MAMANI 44 .ini para ser o no aceptadas por el intérprete. Es por tanto necesario especificar cuáles son las partes constitutivas del código PHP. El resto. Por el contrario. Como vimos en la unidad anterior.

deberemos anteponer a la variable el signo del ampersand (&). //Imprime 4 //Aunque a $Num1 lohemos incrementado en 2 en la función //Como el paso de la variable ha sido por valor. ?> Si queremos que un parámetro de una función se pase siempre por referencia. return $Num1 + $Num2. echo suma ($Num1. aunque tengan distintos nombres. JHOSUE PEDRO CUEVA MAMANI 45 . ¿Por qué usar los includes? El uso de includes es excepcionalmente bueno para ahorrarte trabajo. deberemos anteponer un ampersand (&) al nombre del parámetro en la definición de la función. Veamos un ejemplo de ambos sistemas de pasar variables a una función: <?php function suma ($Num1. ya que es la misma variable. //De modo que al imprimir $Num1 no ha imprimido 6. } $Num1 = 4. $Num2). //Imprime 8 echo $Num1. A todo esto se le denomina Ámbito de las Variables. hemos pasado $Num1 por referencia //De modo que al incrementar $Num1 + 2 en la función si //Ha afectado a $Num1 fuera de esta.cambios que sufra la variable dentro de la función afectarán a la variable fuera de la función. ese //Incremento no le ha afectado fuera de la función. $Num2 = 2. sino 4 echo suma (&$Num1. //Imprime 8 echo $Num1. //Imprime 6 //En este segundo caso. En todos los ejemplos anteriores hemos pasado las variables por valor. Incluir archivos en php Include Un include es un elemento del lenguaje PHP que nos permite incluir una página entera dentro de otra. Puedes hacer un header o un menú generico y cargarlo con el include. si queremos pasar una variable por referencia. $Num2) { $Num1 = $Num1 + 2. ya que es el modo por defecto en PHP. $Num2).

pues se marcará un error fatal. ?> <p> Hola. que es la función require(). ?> Y el resultado: <html> <head> <title> Muestra de includes </title> </head> <body> <p> Hola. Luego observaremos el codigo de salida.php"). este es el contenido. ?> Ejemplo: Vamos a usar tres archivos. Pueden ser de cualquier tipo Diferenciación: PHP contiene otra función con características muy similares. Las características y el modo de uso de include y de requiere son idénticas. si el nombre de archivo no existe. salvo por una cosa: El mensaje de error generado si falta un documento: Con include.Uso: La utilización del include es muy simple: <?php include("tuarchivo. Con requiere en cambio el script se detendrá. </p> <?php include("footer.php"). Archivo 1 : header. </p> </body> </html> Nota: Los archivos a incluír no tienen que ser obligatoriamente archivos PHP. este es el contenido.htm").php : <?php include("header. recibirás una advertencia (warning) y el script seguirá.php : </body> </html> Archivo 3: union.php : <html> <head> <title> Muestra de includes </title> </head> <body> Archivo 2: footer. Ejemplo: Include: <?php JHOSUE PEDRO CUEVA MAMANI 46 . que fusionaremos.

echo ("Hola.php on line 2 Vemos que con require no se ejecutó la siguiente parte del script.php on line 2 Hola.include]: Failed opening 'noexiste.php on line 2 Fatal error: require() [function. El script siguió!").require]: failed to open stream: No such file or directory in C:\tutorial\probando.C:\php5\pear') in C:\tutorial\probando.php").php"). }else{ require("igual-me-voy-a-incluir-bwahahaha.php on line 2 Warning: include() [function.include("noexiste. las funciones include y require se diferenciaban por un asunto aún mayor: Include podía ser usado condicionalmente.php"). Lo cual nos dará la posibilidad de personalizar con estilos css e imágenes enlazadas los emails de respuesta automática que obedecen a envío de formularios o suscripciones.php' for inclusion (include_path='..SESION: ENVIO DE EMAIL Existen muchas formas de configurar la función mail () de php.. En el primero se encontrará el formulario donde haremos la llamada al archivo php para ejecutar el script: JHOSUE PEDRO CUEVA MAMANI 47 ..include]: failed to open stream: No such file or directory in C:\tutorial\probando.require]: Failed opening required 'noexiste.php) [function. a continuación os mostramos una manera completa de poder enviar emails con html embebido. El script siguió! Require <?php require("noexiste. Primero debemos saber que necesitamos dos archivos.php) [function.php"). Un ejemplo: <?php $gatito= "Lo odio". echo ("Hola. mientras que require se ejecutaba "a la fuerza". ?> Y lo que obtendremos: Warning: include(noexiste.C:\php5\pear') in C:\tutorial\probando. Atención: En php 3 y anteriores. if($gatito=="Lo amo"){ include("condicionado-asi-que-si-no-es-verdad-no-me-incluyo. } ?> 9. El script siguió!"). ?> Y aqui obtenemos: Warning: require(noexiste. uno html y otro php.php' (include_path='.

misitio.= "Return-path: $remitente\r\n". $asunto ="Envío emails php ". $headers . width:600px.php: Configuramos las variables necesarias y las cabeceras del email ($remitente. está embebido todo el código hml que utilizaremos para personalizar nuestro email. border:1px solid #999999. font-size:10pt. $headers . color:#666666. } </style> </head> <body> <div id="encabezado"> <a href="http://www. margin:10px.= "Reply-To: $remitente\r\n".0\r\n". $headers . sans-serif. <?php $adireccion=$email.= "From: Mi sitio <$remitente>\r\n". text-align:center. Contiene la misma estructura que una página html con sus estilos css.com" target="_blank"><img JHOSUE PEDRO CUEVA MAMANI 48 .= "Bcc: copiamensaje@misitio. $adirección que será el valor introducido en el campo de texto email del formulario y que luego utilizaremos en la función mail.= "Content-type: text/html. charset=iso-8859-1\r\n". &asunto del mensaje y las $headers o cabeceras). donde si os fijáis. $remitente="misitio@misitio. border:1px dotted #999999. $headers . $headers = "MIME-Version: 1. $headers .com". } #cuerpo { background-color: #F4F4F4.com\r\n".Archivo Html: <form action="mail. font: Arial. Ahora configuramos la variable $contenidomail. Helvetica. Esta cabecera envía una copia del mensaje a otra dirección.php" method="post" name="form" enctype="multipart/form-data"> <input type=text name="email"/>Caja de texto para introducir la variable email <input type="submit" name="Submit" value="Enviar" />Botón de enviar </form> Archivo Php que llamaremos mail. $contenidomail= ' <html> <head> <style type="text/css"> #encabezado { background-color:#FFFFFF.

Pero si queremos.com/imagenes/logo.com".misitio. Función mail() Una de los problemas más comunes en el desarrollo de un sistema web es el envío de correos. Ahora ejecutamos la función mail donde se encuentran todas las variables necesarias para el envío del email que configuramos anteriormente. que el formulario con otros campos de texto nos lleguen a nuestro correo y se genere otro email de respuesta automática debemos ejecutar una nueva función mail () con las variables para el segundo mensaje de una manera similar.src="http://www.gif"></a><br /> </div> <div id="cuerpo"> Cuerpo del mensaje </div> </body> </html> '. Sintaxis para enviar Email JHOSUE PEDRO CUEVA MAMANI 49 . $asunto. ?> Finalmente el código html del archivo php en sí. $contenidomail. La función mail() viene por defecto instalada en PHP y no necesita ninguna instalación adicional.$headers). <html> <head> <title>Mensaje</title> </head> <body> Mensaje enviado con éxito. por ejemplo. Modificaremos la variable $adireccion=$email por $adireccion="micorreo@micorreo. para el mensaje que queremos recibir. mail ($adireccion. esto se puede hacer con la función mail() que permite enviar email de forma sencilla. </body> </html> Con este planteamiento conseguimos enviar un email introducido en el campo de texto de un formulario. incluído en el mismo archivo php.

este es una cadena de texto opcional donde se pueden incluir las direcciones adicionales del email (To. 5. $headers). $mensaje: es el cuerpo del mensaje.com\r\n Reply-To: repondera@dominio. 4. From: remitente@dominio. email.com\r\n CC: copia@dominio. Creando el Formulario Primero tenemos que tener un formulario de HTML con los campos típicos para un formulario de contacto. CC.com\r\n Entonces con las definiciones básicas ahora veamos un ejemplo de envío de correo. $headers: encabezados de correo. $aviso = "".com\r\n To: destino@dominio. Donde se tiene:     $email: Dirección de correo del destinatario.com\r\n BCC: copiaoculta@dominio.La función mail() de PHP tiene la sintaxis: mail($email. esta cadena tiene la siguiente forma: 1. // asunto del email $subject = "Contacto". $mensaje. $subject: Subject de correo a enviar.com". creamos la cadena de texto que deseamos enviar y finalmente hacemos el envío de email con la función mail(). $subject. BCC. 2. if ($_POST['email'] != "") { // email de destino $email = "tuemail@tudominio. <h2>Enviar Email con PHP</h2> <form action="" method="post"> Nombres <input name="nombre" id="nombre" type="text" /><br /> Empresa <input name="empresa" id="empresa" type="text" /><br /> Email <input name="email" id="email" type="text" /><br /> Teléfono <input name="telefono" id="telefono" type="text" /><br /> Mensaje <textarea name="mensaje" cols="30" rows="6"></textarea><br /> <button name="btsend" id="btsend" type="submit">Enviar</button> </form> Enviando Email con PHP El siguiente paso es crear un script PHP que reciba los datos del formulario. JHOSUE PEDRO CUEVA MAMANI 50 . El formulario para nuestro ejemplo tendrá los campos: nombres. 3. Ahora bien acerca del parámetro $header. telefono y comentarios. empresa. Reply-To).

$mensaje. $subject.= " Contacto \n".\n".$_SERVER['REMOTE_ADDR'].= "EMAIL: $mensaje."[". $mensaje. abriremos el archivo en modo 'a' (escritura al final) y escribiremos el error indicando la fecha. ". Para mejorar este script haría falta hacer una validación de datos con Javascript antes de hacer el envío y también una validación de datos con PHP.= "NOMBRE: ".$_POST['email']. $mensaje.unijimpe."] Error $numero: $texto\r\n").= "TELEFONO: "."\n".= "EMPRESA: ". Hay que notar que estamos asumiendo que el usuario está llenando todos los datos del formulario.$_POST['nombre'].date("h:i:s a")."\r\n". $mensaje. ".= "FECHA: $mensaje.". $mensaje. $mensaje. } else { $aviso = "Error de envío. $headers)) { $aviso = "Su mensaje fue enviado."\n". fclose($ddf). $mensaje.date("d/m/Y").= "Enviado desde http://blog. $mensaje. asunto.= "IP: "."\n". fwrite($ddf."\n". $mensaje. Para crear un log.date("r").= $_POST['mensaje'].".\n".= "---------------------------------. para simplificar el trabajo lo podemos incluir todo en una función: <?php function error($numero.$_POST['empresa'].\n". } } Como se puede ver hemos creado los cuatro parámetros como variables: email de destino.$_POST['email']. Función error_log() Un log de errores.$texto){ $ddf = fopen('error. Podemos personalizar aún más este formulario agregando más campos de acuerdo a nuestras necesidades."\n". cuerpo del mensaje y el header donde hemos colocado solo el remitente del mensaje.= "---------------------------------. } ?> JHOSUE PEDRO CUEVA MAMANI 51 ."\n\n".\n\n". // headers del email $headers = "From: ".// Cuerpo del mensaje $mensaje = "---------------------------------. nos permitirá controlar cuando se ha producido un error para corregirlo y evitar que se repita en el futuro. // Enviamos el mensaje if (mail($email."\n\n".log'.'a')."\n".= "HORA: $mensaje.net \n". $mensaje. ".= "---------------------------------. $mensaje.$_POST['telefono'].

Una vez declarada la función.'a'). se almacena una nueva línea en el fichero indicando: [fecha] Error 001: No existe la cookie de sesión Vamos a ver ahora como podemos mejorar esto de manera que además de poder grabar los errores que nosotros definamos en nuestro sitio.construir las líneas de cabecera setHTMLBody () .construir el mensaje cabeceras () . que le da un mejor control sobre la creación de MIME. Clase PEAR Mail_mime Un paquete para permitir la fácil creación de complejos mensajes de correo electrónico de varias partes. cada vez que un usuario entra a esta página sin la cookie sesión. ?> Entonces.log: <?php // Si no existe la cookie sesion if(!isset($_COOKIE['sesion'])){ // Guardamos un error error('001'.'No existe la cookie de sesión'). } ?> De esta manera.crea una nueva instancia AddAttachment () . ?> Y de esta manera damos por finalizado nuestro script para generar un log de errores personales y de PHP."[".log'. nos almacene los errores producidos durante la ejecución del script php. el código completo nos queda de la siguiente manera: <?php function error($numero.$texto){ $ddf = fopen('error. Esto lo conseguiremos indicando al interprete Zend que llame a la función error() cada vez que el código PHP contenga un error con la función set_error_handler: <?php set_error_handler('error'). } set_error_handler('error'). entonces la clase Mail_Mime probablemente será suficiente.Juego de piezas HTML setTxtBody () . fclose($ddf). Si usted busca una API sencilla para la creación de dichos correos electrónicos.establece una parte de texto sin formato JHOSUE PEDRO CUEVA MAMANI 52 . Cosa que usted puede utilizar Mail_mimePart."] Error $numero:$texto\r\n"). tan solo tendremos que llamarla de la siguiente manera cuando se produzca un error para que se guarde en error.date("r"). fwrite($ddf.Archivo adjunto addHTMLImage () . Tabla de contenidos        Mail_Mime () .agregar la imagen al mensaje get () .

Aumento de la parte sub a una parte MIME encode () .codificar el valor de cabecera Mail_mimePart () .codificar un correo electrónico JHOSUE PEDRO CUEVA MAMANI 53 .codificar un correo electrónico encodeToFile () .     encodeHeader () .Constructor addsubpart () .