You are on page 1of 68

Instituto Superior Tecnológico Público “Francisco de Paula Gonzáles Vigil” Carrera Profesional de Computación e Informática

“PROYECTOS WEB"

Tema 3: Lenguaje PHP
Lic. José Luis Ponce Segura jlponcesg@hotmail.com www.redtacna.net

Introducción a PHP
• Lenguajes de script
– –

PHP es un lenguaje de script del lado del servidor. Otros lenguajes similares son ASP, JSP o ColdFusion Los scripts PHP están incrustados en los documentos HTML y el servidor los interpreta y ejecuta antes de servir las páginas al cliente El cliente no ve el código PHP sino los resultados que produce

Introducción a PHP
• ¿Cómo funciona PHP?
Servidor web Página HTML

Cliente (navegador)
Página HTML

internet

<P>Hola, Ana</P>

Ana</P> . ?> <P>Hola. $nombre</P>"). print ("<P>Hola.Introducción a PHP • ¿Cómo funciona PHP? Servidor web Página PHP Página HTML Cliente (navegador) Página HTML internet Intérprete PHP <?PHP $nombre = "Ana".

fácil de aprender. permite el acceso a bases de datos y otras funcionalidades orientadas a la red – Dispone de abundante soporte en la Web . de libre distribución.Introducción a PHP • Breve historia de PHP – – – – • ¿Por qué PHP? Creado por Rasmus Lerdorf para uso personal en 1994 PHP = Personal Hypertext Processor Versión actual: PHP 5 Es un módulo que se añade al servidor web y fue concebido inicialmente para Apache – Por sus ventajas: es potente.

phpmyadmin.eclipse.php.org) – con el módulo PHP (www.mysql.net) – y la base de datos MySQL (www.org) – Manuales de PHP y MySQL . como PHPMyAdmin (www.apache.com) si se desea crear páginas dinámicas – Herramientas para la gestión de MySQL.Introducción a PHP • Requisitos • Otras utilidades – Servidor web Apache (www.sourceforge. como DevPHP (www.net) o Eclipse (www.net) – Editores de PHP.

7. 4. Sintaxis básica Tipos de datos Variables Constantes Expresiones y operadores Estructuras de control Funciones Tablas Bibliotecas de funciones .Lenguaje PHP básico 1. 6. 3. 5. 8. 9. 2.

siempre disponible <?= expresión ?> equivale a <? echo expresión ?> • Las instrucciones se separan con un .. • Comentarios: como en C. La marca final ?> implica un . ?> recomendado.Sintaxis básica • PHP es sensible a las mayúsculas • ¿Cómo se incrusta en la página web? <?PHP .. /* … */ y // . como en C.

Sintaxis básica • Para imprimir: echo y print echo: muestra una o más cadenas echo cadena1 [. echo “Hola “. “mundo”. print: muestra una cadena print cadena. cadena2…]. // no es una función print “Hola mundo”. “mundo”. // no es una función echo “Hola mundo”. print “Hola “ . .

Sintaxis básica • Ejemplo: <HTML> <HEAD> <TITLE>Mi primer programa en PHP</TITLE> </HEAD> <BODY> <?PHP print (“<P>Hola mundo</P>”). ?> </BODY> </HTML> .

Código HTML <P>Párrafo 1</P><P>Párrafo 2</P> Salida Párrafo 1 Párrafo 2 . print (“<P>Párrafo 2</P>”).Sintaxis básica • Uso de \n para generar código HTML legible • a) Sin \n Código PHP print (“<P>Párrafo 1</P>”).

Sintaxis básica • Uso de \n para generar código HTML legible • b) Con \n Código PHP print (“<P>Párrafo 1</P>\n”). Código HTML <P>Párrafo 1</P> <P>Párrafo 2</P> Salida Párrafo 1 Párrafo 2 . print (“<P>Párrafo 2</P>\n”).

Sintaxis básica • Inclusión de ficheros externos: • Ambos incluyen y evalúan el fichero especificado • Diferencia: en caso de error include() produce un warning y require() un error fatal • Se usará require() si al producirse un error debe interrumpirse la carga de la página • Ejemplo: – – include() require() .

html"). require ("cadena.html").php"). . ?> </BODY> </HTML> .Sintaxis básica <HTML> <HEAD> <TITLE>Título</TITLE> <?PHP // Incluir bibliotecas de funciones require ("conecta.php"). ?> // Código HTML + PHP .php").php"). <?PHP include ("pie. require ("fecha. . ?> </HEAD> <BODY> <?PHP include ("cabecera. require ("globals.

is_integer(). string Tipos compuestos: array. is_float().Tipos de datos • PHP soporta 8 tipos de datos primitivos: – – – • El tipo de una variable no se suele especificar. object Tipos especiales: resource. double. Se decide en tiempo de ejecución en función del contexto y puede variar • Funciones de interés: – – Tipos escalares: boolean. is_bool(). is_scalar(). Es especialmente interesante con los arrays . integer. is_null(). is_numeric(). NULL – La función gettype() devuelve el tipo de una variable Las funciones is_type comprueban si una variable es de un tipo dado: is_array(). is_string() La función var_dump() muestra el tipo y el valor de una variable. is_resource(). is_object().

33 Valores: true. -5.234.Tipos de datos • Tipo integer (números enteros) • Tipo double (números reales) • Tipo boolean (lógico) – – – 1. false (insensibles a las mayúsculas) El 0 y la cadena vacía tienen valor false – 27. -5. 0 .

// muestra a vale 9 y avanza una línea print “<IMG SRC=„logo. Los nombres de variables SÍ se expanden Ejemplos: $a = 9. // muestra <IMG SRC=„logo.Tipos de datos • Tipo string: • • • – Las cadenas se encierran entre comillas simples o dobles: „simples‟: admite los caracteres de escape \‟ (comilla simple) y \\ (barra). \\. \r. – Acceso a un carácter de la cadena: • . \t. // muestra a vale $a\n print “a vale $a\n”. // muestra <IMG SRC=“logo. \”.gif\”>”. print „a vale $a\n‟.gif‟>”. \$.gif”> La forma es $inicial = $nombre{0}. Las variables NO se expanden “dobles”: admite más caracteres de escape.gif‟> print “<IMG SRC=\”logo. como \n.

$_SERVER. $valor . $_REQUEST. $_FILES. $_COOKIES. $_POST. print “El valor es: $valor\n”. $_GET. números o subrayado • Variables predefinidas: • Ámbito: globales al fichero (excepto funciones) o locales a una función • Ejemplo: $valor = 5. // ojo: comillas dobles Resultado: El valor es: 5 $GLOBALS.Variables • Las variables siempre van precedidas de un $ • El nombre es sensible a las mayúsculas • Comienzan por letra o subrayado. seguido de letras. print “El valor es: “ . $_SESSION . $_ENV. “\n”.

print "$a ${$a}".Variables • Variables variables – Se pueden crear nombres de variables dinámicamente – La variable variable toma su nombre del valor de otra variable previamente declarada – Ejemplo: $a = "hola". print "$a $hola\n". Resultado: hola mundo hola mundo . $$a = "mundo".

$mensaje_en="Hello". print $$mensaje. $idioma = "es". $mensaje = "mensaje_" . ?> . $idioma.Variables • Ejemplo de variables variables: página internacionalizada (1) <?PHP $mensaje_es="Hola".

$idioma. $mensaje = "mensaje_" . print $$mensaje. $mensaje_en="Hello". $idioma = "en".Variables • Ejemplo de variables variables: página internacionalizada (2) <?PHP $mensaje_es="Hola". ?> .

print CONSTANTE. string) . double. • No llevan $ delante • Sólo se pueden definir constantes de los tipos escalares (boolean. “hola”).Constantes • Definición de constantes: define (“CONSTANTE”. integer.

Operadores de comparación: ==. %. ++. !.= • • • • . xor and/&& y or/|| tienen diferentes prioridades Operadores de cadena: concatenación: . evita cualquier mensaje de error que pueda ser generado por la expresión Operadores lógicos: and (&&). Antepuesto a una expresión. >.  a vale 8 $b = “hola ”.=. $a += 5.= “mundo”. “mundo”. /.  b vale “hola mundo”  Equivale a $b = $b . <. -. or (||). *. -Operador de asignación: = operadores combinados: . etc $a = 3. +=. !=. >= y otros Operador de control de error: @. <=.Expresiones y operadores • • Operadores aritméticos: +. (punto) asignación con concatenación: . $b .

% +. >= ==.Expresiones y operadores • Precedencia de operadores (de mayor a menor): ++. -*.<. /. >. != && || and or . <=.

Estructuras de control • Estructuras selectivas: • Estructuras repetitivas: – while – for – foreach – if-else – switch .

Estructuras de control • Estructura selectiva if-else if (condición) sentencia if (condición) sentencia 1 else sentencia 2 if (condición1) sentencia 1 else if (condición2) sentencia 2 .. else if (condición n) sentencia n else sentencia n+1 • Mismo comportamiento que en C • Las sentencias compuestas se encierran entre llaves • elseif puede ir todo junto ..

Estructuras de control • Ejemplo de estructura selectiva if-else: <?PHP if ($sexo == „M‟) $saludo = "Bienvenida. else $saludo = "Bienvenido. ". $saludo = $saludo . print ($saludo). ". $nombre. ?> .

… case valor_n: sentencia break. case valor_2: sentencia break. sólo que la expresión del case puede ser integer. default sentencia } 1 2 n n+1 • Mismo comportamiento que en C.Estructuras de control • Estructura selectiva switch switch (expresión) { case valor_1: sentencia break. float o string .

Estructuras de control • Ejemplo de estructura selectiva switch: switch ($extension) { case ("PDF"): $tipo = "Documento break. de texto". . $extension. case ("TXT"): $tipo = "Documento break. case ("HTML"): case ("HTM"): $tipo = "Documento break. . default: $tipo = "Archivo " } print ($tipo). HTML". Adobe PDF".

Estructuras de control • Estructura repetitiva while while (condición) sentencia • Mismo comportamiento que en C .

$i++. ?> . } print ("</UL>\n").Estructuras de control • Ejemplo de estructura repetitiva while: <?PHP print ("<UL>\n"). while ($i <= 5) { print ("<LI>Elemento $i</LI>\n"). $i=1.

condición. incremento) sentencia • Mismo comportamiento que en C .Estructuras de control • Estructura repetitiva for for (inicialización.

$i<=5. print ("</UL>\n").Estructuras de control • Ejemplo de estructura repetitiva for: <?PHP print ("<UL>\n"). for ($i=1. ?> . $i++) print ("<LI>Elemento $i</LI>\n").

$b=2. $y) { $s = $x + $y. $c=suma ($a. } $a=1. $b). print $c. return $s. .Funciones • Ejemplo: function suma ($x.

Funciones • Por defecto los parámetros se pasan por valor • Paso por referencia: function incrementa (&$a) { $a = $a + 1. print $a. incrementa ($a). } $a=1. // Muestra un 2 .

• Salida: Estimado Sr. muestranombre ("Prof.: Estimado Prof.") { print "Estimado $titulo:\n".").: .Funciones • Argumentos por defecto function muestranombre ($titulo = "Sr. } muestranombre ().

• Salida: Estimado Sr. $titulo= "Sr. Fernández: .Funciones • Los argumentos con valores por defecto deben ser siempre los últimos: function muestranombre ($nombre."). } muestranombre (“Fernández”). "Prof. muestranombre (“Fernández”. Fernández: Estimado Prof.") { print "Estimado $titulo $nombre:\n".

una cadena (que habría que poner en el corchete encerrada entre comillas sencillas –'–). Cuando los índices de un array son números se dice que es escalar mientras que si fueran cadenas se le llamaría array asociativo. • La sintaxis que permite definir elementos en un array es la siguiente: $nombre[indice] El índice puede ser un número (habría que escribirlo dentro del corchete sin comillas).Arrays = Tabla ¿Qué es un array? • Un array es sencillamente una tabla de valores. • Cada uno de los elementos de esa tabla se identifica por medio de un nombre (común para todos) y un índice (que diferenciaría a cada uno de ellos). .

éste es un valor entero y empieza por el 0 (CERO). • • • . $a[]=valor • ó $a[xx]=valor • En el primero se asigna los índices de forma automática. Tanto en este supuesto como en el anterior. es posible –y bastante frecuente– utilizar como índice el contenido de una variable. El modo de hacerlo sería: $a[$ind]=valor En este caso. seremos nosotros quienes pongamos (xx) el número correspondiente al valor del índice. En el segundo de los casos. el nombre de la variable nunca se pone entre comillas.Arrays Unidimensionales Arrays Escalares • Los elementos de un array escalar puede escribirse con una de estas sintaxis: • Arrays Asociativo Los elementos de un array asociativo pueden escribirse usando la siguiente sintaxis: $a['indice']=valor En éste caso estamos obligados a escribir el nombre del índice que habrá de ser una cadena y debe ponerse entre comillas. sea cual fuere el valor de la variable $ind.

Arrays Unidimensionales << Escalares y Asociativos >> $a[0]=“Domingo” $a[“Primero”]=“Domingo” .

Arrays Bidimensionales Arrays Escalares • Los elementos de un array bidimensional escalar pueden escribirse usando una de estas sintaxis: $a[][]=valor ó $a[xx][]=valor $a[][xx]=valor ó $a[xx][yy]=valor • Arrays Asociativo Los elementos de un array asociativo se pueden escribir usando la siguiente sintaxis: $a["indice1"]["indice2"]=valor .

. producirá igual resultado que: $z[0]=2. 3 => "34Ambrosio".)... $z[2]=34.7. índice n => valor. $z[3]="34Ambrosio".7. $z[1]="Pepe". ). Por ejemplo: $z=array ( 0 => 2.. . 1 => "Pepe".La función Array $a= array (índice 0 => valor. . . 2 => 34.

. "b" => array ("A" => 134. podríamos hacerlo así: $z=array( 0 => array (0 => 34. Ejemplo de array asociativo: $z["a"]["A"]=34.) ). índice n => valor. ). $z["a"]["B"]=35. 2 => 136. . "C" => 36. Ejemplo de array escalar: $z[0][0]=34. $z[0][1]=35. $z[1][2]=136. .La función Array $a= array (índice 0 => valor. 1 => array (0 => 134. 2 => 36. 1 => 35.) ). que podría definirse también de esta forma: $z=array("a" => array ("A" => 34. $z[0][2]=36..). "C" => 136. $z[1][1]=135... "B" => 135. $z["b"]["C"]=136. • La función array() permite escribir arrays de cualquier dimensión utilizando la técnica de anidado. . $z["b"]["B"]=135. $z["b"]["A"]=134. "B" => 35. $z["a"]["C"]=36. $z[1][0]=134. 1 => 135. • El anidado sucesivo permitiría generar arrays de cualquier dimensión.).

Bibliotecas de funciones • Existen muchas bibliotecas de funciones en PHP • Algunos ejemplos: – – – – – – – Funciones Funciones Funciones Funciones Funciones Funciones Funciones de manipulación de cadenas de fecha y hora de arrays de ficheros matemáticas de bases de datos de red • Algunas bibliotecas requieren la instalación de componentes adicionales • Todas las funciones de biblioteca están comentadas en la documentación de PHP .

ltrim(). a la izquierda o por ambos lados de una cadena string rtrim ( string str [. string charlist]) Busca la primera ocurrencia de una subcadena Convierte una cadena a minúscula / mayúscula – – – – strstr() strtolower() / strtoupper() strcmp() / strcasecmp() strlen() • • Compara dos cadenas con/sin distinción de mayúsculas Calcula la longitud de una cadena . string string [. int limit]) Eliminan caracteres a la derecha.Bibliotecas de funciones • Funciones de manipulación de cadenas – – explode() • • • rtrim(). trim() • • • Divide una cadena en subcadenas array explode (string separator.

Bibliotecas de funciones • Funciones de fecha y hora – date() • • Formatea una fecha según un formato dado Ejemplo: $fecha = date ("j/n/Y H:i"). print ("$fecha"). print ("$fecha"). strtotime(“5 april 2001")). Resultado: 5/4/2001 . Resultado: 26/9/2005 17:36 – strtotime() • • Convierte una fecha en un timestamp de UNIX Ejemplo: $fecha = date ("j/n/Y".

Bibliotecas de funciones • Funciones de arrays – – – – – array_search() count() • • • array_count_values() • Calcula la frecuencia de cada uno de los elementos de un array Busca un elemento en un array Cuenta los elementos de un array Ordena y reindexa un array (r=decreciente) sort(). krsort() Ordena por claves un array (r=decreciente) . rsort() • ksort().

Acceso a formularios HTML desde PHP 2.Formularios 1. Validación de los datos de un formulario . El formulario de PHP 3. Subida de ficheros al servidor 4.

Acceso a formularios desde PHP • Desde PHP se puede acceder fácilmente a los datos introducidos desde un formulario HTML • Veámoslo con un ejemplo simple .

?> </BODY> </HTML> .Acceso a formularios desde PHP • Fichero uno.php <HTML> <BODY> <?PHP print (“La edad es: $edad”).php <HTML> <BODY> <FORM ACTION=”dos.php” METHOD=”POST”> Edad: <INPUT TYPE=”text” NAME=”edad”> <INPUT TYPE=”submit” VALUE=”aceptar”> </FORM> </BODY> </HTML> • Fichero dos.

Acceso a formularios desde PHP .

escribiendo $_POST[„edad‟] en lugar de $edad • Se puede poner register_globals = on en el fichero de configuración php. .2. el valor por defecto de la directiva de PHP register_globals es off • Esto tiene una gran importancia sobre los formularios.0. En su lugar hay que utilizar la variable predefinida de PHP $_POST.ini. pero no es recomendable por motivos de seguridad. Una alternativa que permite hacer mínimos cambios en el código ya existente es la siguiente: $edad = $_POST[„edad‟]. ya que no es posible acceder a las variables enviadas de la manera anterior (como variables globales).Acceso a formularios desde PHP • A partir de PHP 4.

php” METHOD=”POST”> Edad: <INPUT TYPE=”text” NAME=”edad”> <INPUT TYPE=”submit” VALUE=”aceptar”> </FORM> </BODY> </HTML> • Fichero dos.php <HTML> <BODY> <?PHP $edad = $_POST[„edad‟].php <HTML> <BODY> <FORM ACTION=”dos. ?> </BODY> </HTML> .Acceso a formularios desde PHP • Fichero uno. print (“La edad es: $edad”).

Acceso a formularios desde PHP
• Acceso a los diferentes tipos de elementos de entrada de formulario
– Elementos de tipo INPUT
• • • • • • • • • TEXT RADIO CHECKBOX BUTTON FILE HIDDEN PASSWORD SUBMIT

– Elemento SELECT

– Elemento TEXTAREA

Simple / múltiple

Acceso a formularios desde PHP
• TEXT

Introduzca la cadena a buscar: <INPUT TYPE="text" NAME="cadena" VALUE="valor por defecto" SIZE="20">

<?PHP $cadena = $_POST[„cadena‟]; print ($cadena); ?>

Acceso a formularios desde PHP
• RADIO

Sexo: <INPUT TYPE="radio" NAME=“sexo" VALUE=“M“ CHECKED>Mujer <INPUT TYPE="radio" NAME=“sexo" VALUE=“H">Hombre

<?PHP $sexo = $_POST[„sexo‟]; print ($sexo); ?>

Acceso a formularios desde PHP • CHECKBOX <INPUT TYPE="checkbox" NAME="extras[]" VALUE="garaje" CHECKED>Garaje <INPUT TYPE="checkbox" NAME="extras[]" VALUE="piscina">Piscina <INPUT TYPE="checkbox" NAME="extras[]" VALUE="jardin">Jardín <?PHP $extras = $_POST[„extras‟]. for ($i=0. $n = count ($extras). ?> . $i++) print (“$extras[$i]<BR>\n”). $i<$n. //foreach ($extras as $extra) //print (“$extra<BR>\n”).

if ($actualizar) print ("Se han actualizado los datos"). ?> .Acceso a formularios desde PHP • BUTTON <INPUT TYPE="button" NAME=“actualizar" VALUE="Actualizar datos"> <?PHP $actualizar = $_POST[„actualizar‟].

Acceso a formularios desde PHP • FILE <FORM ACTION="procesa.php" METHOD="post“ ENCTYPE="multipart/form-data"> <INPUT TYPE="file" NAME="fichero"> </FORM> .

Acceso a formularios desde PHP • HIDDEN <?PHP print(“<INPUT TYPE=‟hidden‟ NAME=‟username‟ VALUE=‟$usuario‟>\n”). print ($username). ?> <?PHP $username = $_POST[„username‟]. ?> .

print ($clave).Acceso a formularios desde PHP • PASSWORD Contraseña: <INPUT TYPE="password" NAME="clave"> <?PHP $clave = $_POST[„clave‟]. ?> .

if ($enviar) print ("Se ha pulsado el botón de enviar").Acceso a formularios desde PHP • SUBMIT <INPUT TYPE="submit" NAME="enviar" VALUE="Enviar datos"> <?PHP $enviar = $_POST[„enviar‟]. ?> .

?> .Acceso a formularios desde PHP • SELECT simple Color: <SELECT NAME=“color"> <OPTION VALUE=“rojo" SELECTED>Rojo <OPTION VALUE=“verde">Verde <OPTION VALUE=“azul">Azul </SELECT> <?PHP $color = $_POST[„color‟]. print ($color).

Acceso a formularios desde PHP • SELECT múltiple Idiomas: <SELECT MULTIPLE SIZE="3" NAME="idiomas[]"> <OPTION VALUE="ingles" SELECTED>Inglés <OPTION VALUE="frances">Francés <OPTION VALUE="aleman">Alemán <OPTION VALUE="holandes">Holandés </SELECT> <?PHP $idiomas = $_POST[„idiomas‟]. $i++) print (“$idiomas[$i]<BR>\n”). $n = count ($idiomas). ?> . for ($i=0. //foreach ($idiomas as $idioma) //print (“$idioma<BR>\n”). $i<$n.

.. print ($comentario).Acceso a formularios desde PHP • TEXTAREA Comentario: <TEXTAREA COLS=“50" ROWS=“4" NAME="comentario"> Este libro me parece . ?> . </TEXTAREA> <?PHP $comentario = $_POST[„comentario‟].

respectivamente • Ventajas: • Procedimiento: – – Disminuye el número de ficheros Permite validar los datos del formulario en el propio formulario si se ha enviado el formulario: Procesar formulario si no: Mostrar formulario fsi .El formulario de PHP • La forma habitual de trabajar con formularios en PHP es utilizar un único programa que procese el formulario o lo muestre según haya sido o no enviado.

El formulario de PHP • Esquema de funcionamiento: a) si se ha enviado el formulario: Procesar formulario b) si no: Mostrar formulario fsi – – La 1ª vez que se carga la página se muestra el formulario (a) La 2ª vez se procesa el formulario (b) .

El formulario de PHP • Para saber si se ha enviado el formulario se acude a la variable correspondiente al botón de envío. Si este botón aparece de la siguiente forma en el formulario HTML: <INPUT TYPE="SUBMIT" NAME="enviar“ VALUE="procesar"> entonces la condición anterior se transforma en: if (isset($enviar)) o bien if ($enviar == “procesar”) .