2003 © Resti MARTINEZ RISQUE
Copyright (c) 2003 Resti MARTÍNEZ RISQUE Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
A copy of the GNU Free Documentation License can be found in: http://www.gnu.org/licenses/licenses.html#FDL
2
2003 © Resti MARTINEZ RISQUE
PHPIntroducción
● Acrónimo de “Hypertext Pre-Processor”
● Concebido principalmente como herramienta para el desarrollo de aplicaciones web
● PHP permite diseñar páginas dinámicas del lado del servidor.
● “Lenguaje interpretado de alto nivel embebido en páginas HTML y ejecutado en el servidor”
● Ampliamente utilizado junto a ASP, JSP, Cold Fusion y Perl.
30.10.2003 3
2003 © Resti MARTINEZ RISQUE
PHPCaracteristicas
● Caracteristicas:– Software libre– Multiplataforma: U*x, Win32, Mac OS, etc ...– Soporte para multiples servidores: Apache, Microsoft IIS,
etc ...– Sigue la filosofia Open Source– Complemento ideal para el tandem LAMP (Linux-Apache-
MySQL-PHP)– Sencillez de uso para programadores principiantes– Potente para programación avanzada: BD, sockets,
gráficos, etc
30.10.2003 4
2003 © Resti MARTINEZ RISQUE
PHPASP vs PHP
30.10.2003 5
ASP PHPTecnología propietaria de microsoft Filosofía Software LibreSólo sobre plataformas Microsoft (*) Varias Plataformas
Gran rapidez de ejecución
Gran coste económico en softwareadicional (* *)
Muchas opciones incluidas de forma gratuita
Ejecucion Lenta debido a los comunicaciones COM
* - Existen soluciones como Sun ONE ASP que permiten su utilizacion sobre Linux/Unix pero conlleva un coste elevado.
* * - ASPEncrypt (componente encriptacion), - ServerObject's Qmail (componente para correo electronico),- Artisans SAFileUp (componente para descargas de ficheros)
2003 © Resti MARTINEZ RISQUE
PHPEstáticas vs Dinámicas
30.10.2003 6
● Ejemplo1 Estático : Listar Números del 1 al 10.http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej1.html
2003 © Resti MARTINEZ RISQUE
PHPEstáticas vs Dinámicas
30.10.2003 7
● Ejemplo1 Dinámico: Listar Números del 1 al 10.http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej1.php
2003 © Resti MARTINEZ RISQUE
PHPEstáticas vs Dinámicas
30.10.2003 8
Respuesta HMTL
Petición HMTL
Páginas EstáticasCliente Servidor
Páginas Dinámicas
Respuesta HMTL
Petición PHPMotor PHP
Go!
HTML
Cliente Servidor
2003 © Resti MARTINEZ RISQUE30.10.2003 9
Estructura de Datosy
Control de Flujo
2003 © Resti MARTINEZ RISQUE
PHPScript en PHP
30.10.2003 10
Para escribir código PHP dentro de una página html, tenemos varias alternativas:
* Incluir el código entre <? y ?> * Incluir el código entre <?PHP y ?> * Incluir el código entre bloques <SCRIPT LANGUAGE="php"> y </SCRIPT>
El resultado de la salida estándar de ese código será escrito en esa misma posición de la página html.
<HTML><BODY><?echo "¡Hola Mundo!<BR>";?></BODY></HTML>
2003 © Resti MARTINEZ RISQUE
PHPComentarios en PHP
30.10.2003 11
Los comentarios en PHP se escriben:
* Con // o # para comentarios de una sóla línea. * Entre /* y */ para comentarios de una o más líneas.
Ejemplo:<?/* Título: Mi Primera página PHP Autor: Yo*/
// Saludamosecho "¡Hola Mundo!<BR>";?>
2003 © Resti MARTINEZ RISQUE
PHPVariables - Declaracion
30.10.2003 12
Todas las variables en PHP empiezan con el caracter dólar
"$"
Las variables se declaran simplemente inicializándolas:
<?$strCadena = "Hola Mundo";echo($strCadena);?>
2003 © Resti MARTINEZ RISQUE
PHPVariables - Tipos
30.10.2003 13
Los tipos básicos de PHP son : Integer, Double, String, Array y Object.
Las variables booleanas no existenCualquier valor numérico distinto de 0 es TRUECualquier cadena no vacía se considera TRUE
Las variables PHP no tienen un tipo fijo, dependen de la última asignación realizada.
La función gettype($nombrevar) permite obtener el tipo de esa variable en forma de cadena:
2003 © Resti MARTINEZ RISQUE
PHPVariables - Tipos
30.10.2003 14
Ejemplo:<?$variable = "Una cadena";echo(gettype($variable));$variable = 0;echo(gettype($variable));?>
Is_Double($varname), Is_Array($varname), Is_String($varname) y Is_Object($varname) también nos permiten saber el tipo de una variable.
2003 © Resti MARTINEZ RISQUE
PHPVariables - Cadenas
30.10.2003 2003© Resti MARTINE 15
Las cadenas en PHP se especifican rodeadas por comillas simples o por comillas dobles:
<?$strCadena1 = "Hola Mundo<BR>";echo($strCadena1);$strCadena2 = 'Hola Inmundo<BR>';echo($strCadena2);?>
2003 © Resti MARTINEZ RISQUE
PHPVariables - Cadenas
30.10.2003 16
Existe un pequeño matiz entre una y otra:http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej2.php
<?$strMsg = "Hola Mundo";$strMsgIn ="$strMsg<BR>";echo($strMsgIn);$strMsgIn = '$strMsg<BR>';echo($strMsgIn);?>
2003 © Resti MARTINEZ RISQUE
PHPVariables - Cadenas
30.10.2003 17
El operador para concatenar cadenas es el punto ".":http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej3.php
<?$strCadena = "Hola";$strCadena = $strCadena . " Mundo";echo($strCadena);?>
2003 © Resti MARTINEZ RISQUE
PHPVariables - Cadenas
30.10.2003 18
Las comillas pueden abarcar más de una línea sin ningún problema:
http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej4.php<?$strConsulta = 'SELECT * FROM users WHERE
login = \'Paco\' and pass=\'Pass\' ';echo $strConsulta;?>
Para escapar las comillas se utiliza la combinación \'.
2003 © Resti MARTINEZ RISQUE
PHPVariables - Arrays
30.10.2003 19
Los arrays en PHP son bastante potentes y flexibles:http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej5.php<?$arrVal[0] = 1;$arrVal[1] = "Una cadena";echo("\$arrVal[0]=$arrVal[0]<br>" . "\$arrVal[1]=$arrVal[1]<BR>");?>
2003 © Resti MARTINEZ RISQUE
PHPVariables - Arrays
30.10.2003 20
Si no ponemos subíndices, el valor asignado se asigna a las siguiente posición libre del array.
Al comenzar en la posición 0 el codigo anterior quedaria:<?$arrVal[] = 1;$arrVal[] = "Una cadena";echo("\$arrVal[0]=$arrVal[0]<br>" . "\$arrVal[1]=$arrVal[1]<BR>");?>
2003 © Resti MARTINEZ RISQUE
PHPVariables - Arrays
30.10.2003 21
Otra forma de crear arrays es mediante la construcción Array():
<?$arrVal = Array(1, "Una cadena");echo("\$arrVal[0]=$arrVal[0]<BR>" . "\$arrVal[1]=$arrVal[1]<BR>");?>
2003 © Resti MARTINEZ RISQUE
PHPVariables - Arrays
30.10.2003 22
Arrays Asociativos.En vez de accederse por índice, se accede por clave o key
http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej6.php<?$arrVal["nombre"] = "Resti";$arrVal["Apellidos"] = array("Martinez", "Risque");echo("\$arrVal[\"nombre\"]=$arrVal[nombre]<BR>" .
"\$arrVal[\"Apellidos\"]=" . $arrVal["Apellidos"][0] . " " . $arrVal["Apellidos"][1] . "<BR>");
?>
2003 © Resti MARTINEZ RISQUE
PHPVariables - Arrays
30.10.2003 23
Arrays Asociativos.La construcción Array() también puede usarse con arrays asociativos:
http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej7.php<?$arrValores=array( "nombre" => "Resti", "Apellidos" => array("Martinez","Risque"));echo "<xmp>";print_r ($arrValores);echo "</xmp>";?>
2003 © Resti MARTINEZ RISQUE
PHPVariables - Arrays
30.10.2003 24
La construcción List() nos permite asignar los valores de un array a una serie de variables de una sola vez:
http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej8.php<?$arrVal=Array(1, "Una cadena", 1.2);List($intNumber, $strCadena, $floNumber) = $arrVal;echo("\$intNumber=$intNumber,<br>
\$strCadena='$strCadena',<br> \$floNumber=$floNumber<br>");
?>
2003 © Resti MARTINEZ RISQUE
PHPVariables - Conversiones
30.10.2003 25
Para convertir una variable de un tipo a otro se emplea el casting mediante paréntesis:
<?$strVariable = "5";$valor = (integer) $strVariable;echo $valor+2;?>
También podemos emplear la función SetType($varname, "vartype") para forzar que la variable $varname sea del tipo vartype.
2003 © Resti MARTINEZ RISQUE
PHPVariables - Conversiones
30.10.2003 26
PHP es bastante consecuente en cuanto a los tipos, de manera que si sumamos un número a una cadena, esa cadena se convierte en un número:
http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej9.php
<?$strVariable = "5";$valor = (integer) $strVariable;echo (($valor+2)." - ".($strVariable+3));?>
2003 © Resti MARTINEZ RISQUE
PHP Constantes
30.10.2003 27
Las constantes en PHP son literales que no comienzan por "$" y que se inicializan con la construcción define(nomconst):
http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej10.php
<?define("MAX_CLIENTS", 25);echo(MAX_CLIENTS)."<br>”;echo(__LINE__)."<br>”;echo(__FILE__)."<br>”;?>
Las constantes predefinidas __FILE__ y __LINE__ nos dan el nombre del fichero y el número de línea actual
2003 © Resti MARTINEZ RISQUE
PHP Sentencias de Control - IF
30.10.2003 28
Las estructuras de control de PHP son iguales a las de CCondicional IFhttp://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej11.php
<?$intEdad=45;if ($intEdad<=18){
echo “Menor de Edad”;}elseif ($intEdad<=65){
echo “Adulto”;}else{
echo “Jubilado”;}?>
2003 © Resti MARTINEZ RISQUE
PHPSentencias de Control -
SWITCH
30.10.2003 29
Condicional SWITCH
<?$intNumber=1;switch ($intNumber){
case 0:echo “Cero”;
break;case 1:
echo “Uno”;break;default:
echo “Mayor de Uno”;}?>
2003 © Resti MARTINEZ RISQUE
PHPSentencias de Control - Bucles
30.10.2003 30
Bucle FOR<?for ($i=0;$i<=10;$i++){
echo $i.”<BR>”;}?>
Bucle WHILE Bucle DO...WHILE<? <?$i=0; $i=0;while ($i<=10){ do {
echo $i.”<BR>”; echo $i.”<BR>”;$i++; $i++;
} }while ($i<=10);?> ?>
2003 © Resti MARTINEZ RISQUE
PHPFunciones - Esqueleto
30.10.2003 31
Un esqueleto tipico para las funciones es el siguiente:
http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej12.php
<? function voidColorear($strCadena, $strColor) { // Saca una cadena con el color deseado echo("<FONT COLOR=\"$strColor\">$strCadena</FONT>"); } voidColorear("Verde","green"); echo "<br>"; voidColorear("Azul","blue");?>
2003 © Resti MARTINEZ RISQUE
PHPFunciones - Parametros
30.10.2003 32
Parametros por Defecto.Siempre que una función tenga n parámetros por defecto, éstos deberán ser los n últimos parámetros declarados.
http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej13.php
<? function voidColorear($strCadena, $strColor=”blue”) { // Saca una cadena con el color deseado echo("<FONT COLOR=\"$strColor\">$strCadena</FONT>"); } voidColorear("Verde","green"); echo "<br>"; voidColorear("Defecto");?>
2003 © Resti MARTINEZ RISQUE
PHPFunciones - Parametros
30.10.2003 33
Parametros por Referencia.En PHP por defecto los parámetros se pasan por valor.Si queremos que los valores se modifiquen en la funcion tendremosque pasarlo por refencia.http://gayuba2.datsi.fi.upm.es/~rmartinez/tutorial_php/ej14.php<?function voidConcatena(&$strDes, $strOrg) { // Concatena $strOrg con $strDes
$strDes = $strDes.$strOrg; } $strCad1="Hola"; $strCad2="Mundo"; voidConcatena($strCad2,$strCad1); echo "\$strCad1=$strCad1<br>\$strCad2=$strCad2<br>";?>
2003 © Resti MARTINEZ RISQUE
PHPFormularios
30.10.2003 34
Los formularios sirven para enviar informacion del Cliente al Servidor
Existen varias formas de creacion de paginas PHP para procesar la informacion que llega de los clientes.
● 1 archivo HTML para Enviar y 1 archivo PHP para recibir● 1 archivo PHP para Enviar y 1 archivo distinto PHP para recibir● 1 archivo PHP para Enviar y el mismo archivo para recibir.
2003 © Resti MARTINEZ RISQUE
PHPFormularios
30.10.2003 35
Ejemplo de un formulario con una sola pagina Web.<html><head></head><body><?if (isset($_POST["login"])&&isset($_POST["pass"])){
echo "SELECT * FROM USERS WHERE LOGIN='".$_POST["login"]."' AND PASS='".$_POST["pass"]."'";}else{?><form method="post"><table>
<tr> <td>Login:</td><td><input type="text" name="login"></td>
<tr> <td>Password:</td><td><input type="text" name="pass"></td> </tr> <tr> <td colspan="2"><input type="submit" value="Enviar"></td> </tr>
</table></form><?}?></body></hmtl>
2003 © Resti MARTINEZ RISQUE
PHPFormularios
30.10.2003 36
Mismo ejemplo utilizando el metodo GET.
<html><head></head><body><?if (isset($_GET["login"])&&isset($_GET["pass"])){ echo "SELECT * FROM USERS WHERE LOGIN='".$_GET["login"]."' AND PASS='".$_GET["pass"]."'";}else{?><form method="get"><table> <tr> <td>Login:</td><td><input type="text" name="login"></td> <tr> <td>Password:</td><td><input type="text" name="pass"></td> </tr> <tr> <td colspan="2"><input type="submit" value="Enviar"></td> </tr></table></form><?}?></body></hmtl>
2003 © Resti MARTINEZ RISQUE
PHPFormularios
30.10.2003 37
Hay que destacar la importancia de validar en Servidor todos los datos que recibimos por parte del Cliente.
Un dato que no validemos supondra un agujero de seguridad bastante facil de atacar.
Típicos ataques por no validar:● Ataque de “Inyeccion SQL”● Ataque de “Cross-Site-Scripting”