Вы находитесь на странице: 1из 19

Este artculo es un pequeo (relativamente) tutorial de PHP en el que intentar explicar lo ms importante del lenguaje de forma concisa.

Introduccin
PHP es un lenguaje de script, multiplataforma, publicado bajo una licencia libre, que se suele utilizar del lado del servidor para crear pginas web dinmicas. A da de hoy es el tercer lenguaje ms popular del mercado segn el ndice TIOBE, slo por detrs de Java y C. Creado por Rasmus Lerdorf en 1995, su nombre es (actualmente) un acrnimo recursivo de PHP: Hypertext Preprocessor (Preprocesador de Hipertexto PHP). La ltima versin estable a la hora de escribir estas lneas, la cul se puede descargar desde su pgina web, es la 5.3.1, de Noviembre de 2009. Ya explicamos hace tiempo cmo instalar Apache, y cmo instalar PHP y MySQL en Windows. Tambin es posible descargar aplicaciones que instalen las 3 herramientas rpida y fcilmente (no recomendado para entornos de produccin), como WampServer o XAMPP.

Primer programa en PHP


Creemos una primera pequea pgina web dinmica, que mostrar la fecha y hora actual. view plaincopy to clipboardprint? 1. <html> 2. <head><title>Fecha y hora</title></head> 3. <body> 4. <?php 5. // Esto imprime la fecha 6. echo "Hoy es ", date("d/n/Y"); 7. echo "<br/>"; 8. // Y esto la hora 9. echo "Son las ", date("h:m:s"); 10. ?> 11. </body> Adems de usando la sintaxis anterior, <?php .... ?>, que es lo ms comn y recomendable, tambin se puede insertar cdigo PHP en documentos HTML usando:
<script language="php"> .... </script> <? .... ?> si est activada la opcin short_open_tag en php.ini <% .... %> si est activada la opcin asp_tags en php.ini

Esto no es Python: cada instruccin termina con ; (no es necesario si es la ltima instruccin).

Para los comentarios se puede utilizar: view plaincopy to clipboardprint? 1. /* varias 2. lineas */ 3. 4. // una linea 5. 6. # una linea Aunque no es una caracterstica integrada en el lenguaje, para comentarios de documentacin se suele utilizar PHPDoc, el equivalente al JavaDoc de Java en PHP. view plaincopy to clipboardprint? 1. /** 2. * Ejemplo de documentacin de una funcin 3. * @param int $foo un entero cualquiera 4. */ Para imprimir datos por pantalla se puede usar, entre otros, echo, print, printf o print_r. A echo se le pasa una cadena que imprimir. No es necesario utilizar parntesis porque no es una funcin. Tambin se le puede pasar varias cadenas, separadas por comas, y este las imprimir todas unas detrs de otra, sin dejar espacios entre ellas: view plaincopy to clipboardprint? 1. echo "Hola ", "mundo ", "en PHP"; funciona de forma similar a echo, pero no puede tomar varios argumentos, y devuelve un valor de retorno. Debido a esto es algo ms lento que echo.
print

view plaincopy to clipboardprint? 1. print "Hola mundo"; A diferencia de echo y print, printf s que es una funcin. Se comporta de manera similar a la funcin del mismo nombre de C, es decir, se pueden utilizar especificadores de formato. En el siguiente ejemplo $nombre y $edad seran variables con el nombre y la edad de una persona, y su valor se embebera en la cadena en las posiciones indicadas por %s (especificador de cadena) y %d (especificador de entero). view plaincopy to clipboardprint? 1. printf("%s tiene %d aos", $nombre, $edad);

es una funcin que podemos utilizar para la depuracin. Su funcin es la de imprimir variables de forma legible para las personas. Por ejemplo, si le pasramos una matriz, imprimira sus claves y valores
print_r

view plaincopy to clipboardprint? 1. print_r($matriz);

Variables
El nombre de las variables debe comenzar siempre con $. PHP tiene tipado dinmico: al crear una variable no se especifica el tipo, sino que el intrprete de PHP lo determina en tiempo de ejecucin segn el contexto. view plaincopy to clipboardprint? 1. $texto = "Hola mundo"; En PHP tenemos como tipos simples los booleanos (boolean), nmeros enteros (integer), nmeros en coma flotante (float) y cadenas (string). Como tipos compuestos tenemos matrices (array) y objetos (object). Adems tenemos un par de tipos especiales: resource, enteros que se usan para referenciar recursos; y NULL, el tipo nulo. Para obtener el tipo de una variable se puede utilizar gettype($var) view plaincopy to clipboardprint? 1. $texto = "Hola mundo"; 2. echo gettype($texto); Para obtener el tipo y otra informacin sobre la variable, como los valores para un array o las propiedades de un objeto, se puede utilizar var_dump($var) view plaincopy to clipboardprint? 1. $texto = "Hola mundo"; 2. echo var_dump($texto); El tipo de una variable puede cambiar segn el valor que almacenemos en ella. view plaincopy to clipboardprint? 1. 2. 3. 4. $variable = "Hola mundo"; echo gettype($variable), "<br/>"; $variable = 22; echo gettype($variable);

Adems las variables tienen tipado dbil, y su tipo puede cambiar segn el uso que queramos hacer de ellas. view plaincopy to clipboardprint? 1. $variable = "22"; 2. echo $variable / 2; Para comprobar si una variable es de un cierto tipo se pueden utilizar las funciones is_tipo, como is_bool($var), is_string($var), is_object($var), is_float($var) Para comprobar si una variable tiene un valor asociado se puede utilizar la funcin isset($var). Para crear constantes se usa la funcin define. Al no ser variables propiamente dichas, no se utiliza el caracter $ al principio. view plaincopy to clipboardprint? 1. define("PI", 3.14159); 2. echo "Pi es ", PI; Como hay un carcter que identifica las variables, podemos introducirlas directamente en una cadena, y PHP la sustituir por su valor. No tenemos por qu hacer algo como view plaincopy to clipboardprint? 1. $usuario = "Juan"; 2. echo "Hola ", $usuario"; sino que podramos hacer simplemente view plaincopy to clipboardprint? 1. $usuario = "Juan"; 2. echo "Hola $usuario"; Si necesitamos indicar el final del nombre de la variable explcitamente se pueden utilizar llaves. En el siguiente cdigo, por ejemplo, si no utilizramos llaves el intrprete buscara una variable de nombre $productos. view plaincopy to clipboardprint? 1. $producto = "Donut"; 2. echo "Le gustan los {$producto}s"; Tambin se puede utilizar la misma sintaxis para hacer cosas ms complejas, como llamar a funciones dentro de la cadena:

view plaincopy to clipboardprint? 1. echo "Ha comprado {$objeto.contar()} platos";

Operadores
Los operadores aritmticos son la suma (+), resta (-), multiplicacin (*), divisin (/) y mdulo (%). Operadores de comparacin Operador Descripcin == true si ambos operandos son iguales != true si ambos operandos son distintos === true si ambos operandos son iguales, no slo en valor, sino tambin en tipo !== true si ambos operandos son distintos, en valor o tipo < true si el primer operando es menor que el segundo > true si el primer operando es mayor que el segundo <= true si el primer operando es menor o igual que el segundo >= true si el primer operando es mayor o igual que el segundo Operadores lgicos Operador and / && or / || xor ! Descripcin true si se cumplen ambas condiciones true si se cumple una de las condiciones true si se cumple slo una de las condiciones true si no se cumple la condicin

Booleanos
Las variables de tipo booleano pueden tener como valor true o false. Son equivalentes a false el 0, una cadena vaca, un array vaco y NULL.

Arrays
Para crear un array se utiliza la funcin del mismo nombre. view plaincopy to clipboardprint? 1. $codigos = array(0 => "Espaa", 1 => "Italia"); Como clave se pueden usar nmeros, como una matriz normal, o cadenas, para crear un diccionario o array asociativo.

view plaincopy to clipboardprint? 1. $codigos = array("ES" => "Espaa", "IT" => "Italia"); Si no se especifica una clave se usa el ltimo ndice + 1, o bien 0 si no se ha especificado ningn ndice an: view plaincopy to clipboardprint? 1. $codigos = array("Espaa", "Italia"); 2. $dias = array(1 => "Lunes", "Martes", "Mircoles"); Tambin se puede crear una matriz usando los corchetes, elemento por elemento: view plaincopy to clipboardprint? 1. $matriz[0] = "Hola "; 2. $matriz[1] = "mundo"; Si no se especifica la clave ocurre lo mismo que con la funcin array; se usa el ltimo ndice + 1, o 0 si no se ha especificado ningn ndice todava: view plaincopy to clipboardprint? 1. $matriz[] = "Hola "; 2. $matriz[] = "mundo"; Para modificar un valor, tambin se usan los corchetes: view plaincopy to clipboardprint? 1. $matriz[0] = "Hello "; Para eliminar un par clave-valor se puede usar la funcin unset($var) view plaincopy to clipboardprint? 1. unset($matriz[0]); es una funcin que sirve para eliminar una variable dada, as que podramos eliminar la propia matriz haciendo
unset

view plaincopy to clipboardprint? 1. unset($matriz); Para contar el nmero de elementos en el array se puede usar la funcin count($var), que tambin se puede usar con los objetos para contar el nmero de propiedades que tiene.

Para ordenar los elementos de la matriz se puede usar


sort($array) rsort($array), ordena en orden inverso array_multisort($array), para arrays multidimensionales asort($array), ordena manteniendo la asociacin de ndices arsort($array), ordena en orden inverso, manteniendo la asociacin

de

ndices
ksort($array), ordena por clave krsort($array), ordena por clave en orden inverso natsort($array), ordena usando un algoritmo de orden

natural, es decir, como ordenara una persona. Mantiene la asociacin de ndices uasort($array, $funcion), ordena usando una funcin definida por el usuario, mateniendo la asociacin de ndices uksort($array, $funcion), ordena usando una funcin definida por el usuario usando las claves usort($array, $funcion), ordena usando una funcin definida por el usuario

Para comprobar si un determinado elemento est dentro de un array se usa in_array. PHP indexa todos los valores de los arrays, as que es mucho ms rpido usar esta funcin que un bucle que compruebe uno por uno. view plaincopy to clipboardprint? 1. in_array("pepe", $usuarios);

Cadenas
Las cadenas se pueden delimitar de 4 formas. Con dobles comillas, en cuyo caso se pueden utilizar caracteres especiales, como \n o \t, y se sustituyen las variables por sus valores: view plaincopy to clipboardprint? 1. $usuario = "Juan"; 2. $mensaje = "<pre>Hola\n$usuario</pre>"; 3. echo $mensaje; comillas simples, en las que se NO se pueden utilizar caracteres especiales, ni se sustituyen las variables por sus valores. Debido a esto dan un rendimiento marginalmente mejor que las dobles comillas: view plaincopy to clipboardprint? 1. $usuario = "Juan"; 2. $mensaje = '<pre>Hola\n$usuario</pre>'; 3. echo $mensaje;

sintaxis heredoc, en las que, como en las dobles comillas, se pueden utilizar caracteres especiales y se sustituyen las variables por sus valores. No se necesitan escapar las comillas si queremos imprimirlas, y se puede escribir el texto en varias lneas: view plaincopy to clipboardprint? 1. 2. 3. 4. 5. 6. $mensaje = <<< IDENTIFICADOR Ejemplo de cadena que ocupa varias lneas IDENTIFICADOR; echo $mensaje;

sintaxis nowdoc, similar a heredoc, pero no se sustituyen las variables por sus valores: view plaincopy to clipboardprint? 1. 2. 3. 4. 5. 6. $mensaje = <<< 'IDENTIFICADOR' Ejemplo de cadena que ocupa varias lneas IDENTIFICADOR; echo $mensaje;

Una vez creada se puede acceder a posiciones de la cadena como si de una matriz se tratara view plaincopy to clipboardprint? 1. $cadena = "Hola mundo"; 2. echo $cadena[5]; e incluso modificar posiciones de igual forma view plaincopy to clipboardprint? 1. $cadena = "Hola amigo"; 2. $cadena[9] = "a"; 3. echo $cadena; Se pueden concatenar cadenas con el operador .: view plaincopy to clipboardprint? 1. $conc = "Hola " . "mundo"; 2. echo $conc; Para obtener el nmero de caracteres que tiene una cadena se utiliza la funcin strlen($cadena).

Para obtener parte de una cadena se utiliza la funcin substr($cadena, $inicio,


$tamanyo)

view plaincopy to clipboardprint? 1. $cadena = "Hola mundo"; 2. echo substr($cadena, 5, 3); Para reemplazar una subcadena por otra se puede utilizar substr_replace($cadena,
$reemplazo, $inicio, $tamanyo)

view plaincopy to clipboardprint? 1. $cadena = "Hola mundo"; 2. echo substr_replace($cadena, "Arman", 5, 3); Para reemplazar todas las ocurrencias de una cadena por otra se puede utilizar la funcin
str_replace($subcadena, $reemplazo, $cadena, &$ocurrencias)

view plaincopy to clipboardprint? 1. $cadena = "Hola mundo"; 2. echo str_replace("o", "a", $cadena); Se puede dividir una cadena en partes utilizando un cierto delimitador con la funcin
explode($delimitador, $cadena, $limite)

view plaincopy to clipboardprint? 1. $cadena = "Hola mundo"; 2. $palabras = explode(" ", $cadena); 3. print_r($palabras); Para buscar una subcadena dentro de la cadena se puede utilizar la funcin
strpos($cadena, $subcadena, $offset)

view plaincopy to clipboardprint? 1. $cadena = "Hola mundo"; 2. $subcadena = "m"; 3. $posicion = strpos($cadena, $subcadena);

Control de flujo
Condicionales
view plaincopy to clipboardprint? 1. if ($condicion) { 2. echo "Se cumple la primera condicin";

3. } elseif ($condicion2) { 4. echo "No se cumple la primera condicin, pero s la segunda"; 5. else { 6. echo "No se cumple ninguna de las 2 condiciones"; 7. } view plaincopy to clipboardprint? 1. switch($usuario) { 2. case "admin": 3. echo "Bienvenido Dr. Falken"; 4. break; 5. case "zootropo": 6. echo "Hola Ral"; 7. break; 8. default: 9. echo "Lo siento Dave, me temo que no puedo hacer eso"; 10. break; 11. }

Bucles
view plaincopy to clipboardprint? 1. for ($contador = 0; $contador < 10; $contador++) { 2. echo "Contador vale $contador<br/>"; 3. } Para recorrer los valores de un array es til la construccin foreach, que recorre cada valor de la matriz uno por uno, incluidos los valores cuya clave asociada no es un nmero view plaincopy to clipboardprint? 1. foreach ($_SERVER as $var){ 2. echo "$var<br/><br/>"; 3. } Tambin se puede hacer que nos de tanto la clave como el valor: view plaincopy to clipboardprint? 1. foreach ($_SERVER as $key => $var){ 2. echo "<strong>$key</strong> = $var<br/><br/>"; 3. } view plaincopy to clipboardprint? 1. $contador = 0; 2. while ($contador <= 10) {

3. echo "Contador vale $contador<br/>"; 4. $contador++; 5. } view plaincopy to clipboardprint? 1. $contador = -1; 2. do { 3. echo "Contador vale $contador<br/>"; 4. $contador++; 5. } while ($contador <= 10); Se puede usar continue para continuar con la prxima iteracin del bucle y break para salir del bucle. Una curiosidad es que se puede usar break 2, por ejemplo, y eso hara que se saliera de dos bucles que estuvieran uno dentro del otro.

Funciones
La palabra clave para definir una funcin en PHP es function. view plaincopy to clipboardprint? 1. function saludar() { 2. echo "Hola"; 3. } Para devolver un valor se utiliza return view plaincopy to clipboardprint? 1. function obtenerCuadrado($numero) { 2. return $numero * $numero; 3. } Por defecto los parmetros de la funcin se pasan por valor. Para pasarlos por referencia se aade & antes del nombre de la variable en la lista de argumentos: view plaincopy to clipboardprint? 1. 2. 3. 4. 5. 6. 7. function obtenerCuadrado(&$numero) { $numero = $numero * $numero; } $valor = 4; obtenerCuadrado($valor); echo $valor;

Se puede especificar valores por defecto para argumentos con la sintaxis:

view plaincopy to clipboardprint? 1. function saludar($nombre="Raul") { 2. echo "Hola $nombre"; 3. } Para crear funciones con un nmero de parmetros variable se deja la lista de argumentos vaca y se usan las funciones func_get_args() para obtener una lista de los parmetros pasados, func_num_args() para obtener el nmero de parmetros y func_get_arg($num_argumento) para obtener un parmetro a partir de su ndice. view plaincopy to clipboardprint? 1. function sumar() { 2. $suma = 0; 3. foreach(func_get_args() as $param) 4. $suma += $param; 5. return $suma; 6. } PHP posee caractersticas de los lenguajes funcionales: se puede utilizar las funciones como si de otro tipo de variable cualquiera se tratara. Tambin se pueden crear funciones annimas: view plaincopy to clipboardprint? 1. $lambda = function($num1, $num2){ return $num1 + $num2;}; 2. echo $lambda(1, 2);

Orientacin a objetos
Una clase se declara con la palabra clave class seguida del nombre de la clase. view plaincopy to clipboardprint? 1. class MiClase { 2. } El constructor es una funcin con nombre __construct(), y el destructor, __destruct. view plaincopy to clipboardprint? 1. class MiClase { 2. function __construct() { 3. echo "Estamos creando un objeto de tipo MiClase<br/>"; 4. } 5. }

Para instanciar un nuevo objeto a partir de una clase se usa la sentencia new. view plaincopy to clipboardprint? 1. $objeto = new MiClase(); 2. $objeto2 = new MiClase; Para acceder a las propiedades y mtodos se usa -> en lugar del tpico . view plaincopy to clipboardprint? 1. class MiClase { 2. function __construct() { 3. echo "Dentro del constructor<br/>"; 4. } 5. 6. function saludar() { 7. echo "Hola<br/>"; 8. } 9. } 10. $objeto = new MiClase(); 11. $objeto->saludar(); Hay 3 modificadores de acceso: public (por defecto), protected y private.
$this

es el equivalente al this de Java o el self de Python.

view plaincopy to clipboardprint? 1. 2. 3. 4. 5. 6. 7. 8. class Persona { function __construct($nombre) { $this->nombre = $nombre; } } $persona = new Persona("Juan"); echo $persona->nombre;

Las propiedades y mtodos estticos se crean con la palabra clave static. Una peculiaridad es que para acceder a los miembros estticos se utiliza la sintaxis $objeto::$miembro, y no $objeto->miembro. Adems se utiliza self en lugar de $this. view plaincopy to clipboardprint? 1. class Persona { 2. public static $contador = 0; 3. 4. function __construct($nombre) { 5. $this->nombre = $nombre;

6. self::$contador++; 7. } 8. } 9. $persona = new Persona("Juan"); 10. echo $persona::$contador, "<br/>"; 11. 12. $persona = new Persona("Pepe"); 13. echo $persona::$contador, "<br/>"; 14. 15. echo Persona::$contador, "<br/>"; Para heredar de otra clase se usa la palabra clave extends. PHP no soporta la herencia mltiple. view plaincopy to clipboardprint? 1. class Empleado extends Persona { 2. } Para crear una interfaz se utiliza la palabra clave interface. view plaincopy to clipboardprint? 1. interface Figura { 2. function calcularArea(); 3. } para implementar la interfaz, se utiliza la palabara clave implements view plaincopy to clipboardprint? 1. class Cuadrado implements Figura { 2. // ... 3. 4. function calcularArea() { 5. return $this->lado * $this->lado; 6. } 7. }

Tratamiento de errores
En PHP hay dos sistemas de notificacin de errores: excepciones, como en Java o Python, y el sistema de reporte de errores del lenguaje. No es muy comn ver el uso de excepciones en el codigo PHP, slo se utiliza en el cdigo ms moderno que hace uso de la orientacin a objetos. La captura de excepciones tiene este aspecto: view plaincopy to clipboardprint?

1. function dividir($num1, $num2) { 2. if($num2 == 0) 3. throw new Exception('No se puede dividir entre 0'); 4. else 5. return $num1 / $num2; 6. } 7. 8. try { 9. dividir(5, 0); 10. } catch (Exception $e) { 11. echo 'Ocurri una excepcin: ', $e->getMessage(), "\n"; 12. } En el caso de los errores, podemos lanzar los nuestros propios usando la funcin trigger_error($mensaje, $tipo). El tipo de error puede ser E_USER_ERROR, E_USER_WARNING o E_USER_NOTICE view plaincopy to clipboardprint? 1. trigger_error("No se pudo conectar a la base de datos", E_USER_ERROR); Tambin podemos definir nuestro propio manejador para tratar nosotros mismos los errores, en lugar de PHP, utilizando la funcin set_error_handler. En desarrollo nos interesa mostrar los errores y avisos de PHP en pantalla. En produccin se debera modificar la opcin display_errors de php.ini y ponerla a Off para deshabilitarlo. La opcin error_reporting permite configurar qu tipo de errores queremos mostrar. Existe un operador que permite que una cierta sentencia de cdigo no genere errores, @, aunque su uso no est aconsejado.

PHP y MySQL
La mejor forma de utilizar MySQL desde PHP es mediante la interfaz orientada a objetos de la extensin mysqli. Si no estamos seguros de si vamos a tener que cambiar de base de datos tambin podemos utilizar la extensin PDO (PHP Data Objects), una capa de abstraccin incluida por defecto desde PHP 5.1 Primero creamos el objeto correspondiente con new mysqli($host, $usuario,
$password, $bbdd)

view plaincopy to clipboardprint? 1. $mysqli = new mysqli("localhost", "root", "mipassword", "mibbdd"); Una vez hecho esto podemos comprobar si ha habido algn error mediante la propiedad connect_error. Este propiedad contiene una cadena describiendo el error que se ha producido, o una cadena vaca si no hubo ningn error.

view plaincopy to clipboardprint? 1. if (mysqli_connect_errno()) 2. exit("Se produjo un error: ", mysqli_connect_error()); Una vez abierta la conexin podemos comenzar a realizar consultas utilizando el mtodo query. Este devuelve true si se llev a cabo la consulta correctamente. view plaincopy to clipboardprint? 1. if ($mysqli->query("CREATE TABLE Personas(id int, nombre varchar(30))")) { 2. echo "Tabla personas creada"; 3. } else { 4. echo "Error al crear la tabla personas"; 5. } En las consultas que modifican tuplas el nmero de tuplas afectadas se almacena en la propiedad affected_rows view plaincopy to clipboardprint? 1. $mysqli->query("UPDATE Empleados SET prima=2000 WHERE ventas > 500 0"); 2. echo "Primas modificadas: ", $mysqli->affected_rows; Para recorrer las tuplas devueltas por un SELECT haramos algo as view plaincopy to clipboardprint? 1. if ($resultado = $mysqli->query("SELECT * FROM Empleados")) { 2. while($empleado = $resultado->fetch_object()) { 3. printf("%s %s<br/>", $empleado->Nombre, $empleado->Apellidos); 4. } 5. } Al finalizar se debe cerrar la conexin utilizando el mtodo close() view plaincopy to clipboardprint? 1. $mysqli->close() Para evitar ciertos ataques de SQL injection es conveniente pasar las cadenas que vengan del usuario por el mtodo mysqli::escape_string($cadena), para escapar los caracteres especiales, o bien utilizar prepared staments. Para crear prepared staments se utilizar el mtodo mysqli->prepare($consulta), despus se llama al mtodo bind_param del objeto stament creado, para introducir los valores correspondientes en los placeholders y, despus, execute() para ejecutar la consulta. Por ltimo se llama al mtodo close para cerar el stament

view plaincopy to clipboardprint? 1. if ($consulta = $mysqli->prepare("SELECT a FROM b")) { 2. $consulta->bind_param($campo, $tabla); 3. $consulta->execute(); 4. $consulta->close(); 5. } Si necesitas ms informacin sobre MySQL en s, puedes consultar nuestro Tutorial de MySQL.

Formularios
Al enviar un formulario, si se utiliza el mtodo POST, el valor de cada campo rellenado por el usuario se guardar en una matriz asociativa de nombre $_POST. Si se utiliza GET, se almacenar en la matriz $_GET. Las claves de esta matriz asociativa se tomarn del atributo name de cada campo del formulario. Si no nos importa el origen de la peticin, tambin se puede usar $_REQUEST["nombre"], que es una mezcla de la informacin de $_GET, $_POST y $_COOKIE (efectivamente, un array con los valores de las cookies) Para un select, que tiene varios valores, el valor del atributo name debe acabar con [], como una matriz. PHP crear una matriz con este nombre, que contendr los valores de los atributos name de las opciones seleccionadas. view plaincopy to clipboardprint? 1. <select name="languages[]"> 2. <input name="c">C</input> 3. <input name="c++">C++</input> 4. <input name="php">PHP</input> 5. <input name="perl">Perl</input> 6. </select>
$_SERVER['PHP_SELF'] contiene la URL para el atributo action del formulario.

del script actual. Puede ser til como valor

Si la entrada del usuario se va a mostrar en algn lugar del sitio, para evitar vulnerabilidades de XSS, este texto debera pasar antes por la funcin htmlspecialchars($cadena), que convierte a sus entidades HTML correspondientes los caracteres especiales , <, >, & y, opcionalmente, , si pasamos como segundo argumento a la funcin la constante ENT_QUOTES. view plaincopy to clipboardprint? 1. echo 'Hola ', htmlspecialchars($_POST['usuario']);

Si el texto se va a utilizar en un atributo de una etiqueta HTML hay que asegurarse de que los valores de los atributos estn entre comillas, y que el tipo de comillas utilizado est codificado como entidades HTML en la cadena. Tambin hay que tener cuidado con la codificacin de caracteres. Si el atacante utilizara un texto codificado en UTF-7, htmlspecialchars no reemplazara nada, y si no especificamos la codificacin del documento, y el atacante engaa al navegador para hacerle pensar que UTF-7 es la verdadera codificacin del archivo, nuestro filtrado no habr servido de nada. Podemos especificar la codificacin de caracteres con una etiqueta meta o usando la cabecera Content-Type: view plaincopy to clipboardprint? 1. header('Content-Type: text/html; charset=UTF-8');

Cookies
Para crear cookies usamos setcookie($nombre, $valor, $expiracion, $ruta,
$host, $https)

view plaincopy to clipboardprint? 1. // Expira 3600 segundos despus de haberse creado 2. setcookie('usuario', 'raul', time() + 3600); 3. setcookie('fondo', '#000000'); A las cookies se accede a travs de la matriz superglobal $_COOKIE: view plaincopy to clipboardprint? 1. echo 'Bienvenido ', $_COOKIE['usuario'];

Sesiones
Para crear una sesin se llama a la funcin session_start(), que debe ser la primera sentencia PHP de la pgina. Para almacenar datos en la sesin se puede utilizar la matriz superglobal $_SESSION directamente: view plaincopy to clipboardprint? 1. $_SESSION['usuario'] = 'raul'; Para acceder a los datos que hemos guardado en la sesin se utiliza el mismo array asociativo: view plaincopy to clipboardprint?

1. echo 'Bienvenido ', $_SESSION['usuario'];