Issuu on Google+

Tutorial PHP Índice:

1- Introducción ► 1.1- ¿Qué es PHP? ► 1.2- Historia 2- Entrando en PHP ► 2.1- Mi primera web PHP ► 2.2- Entrar y salir a PHP ► 2.3- Separando instrucciones ► 2.4- Comentarios ► 2.5- Carácteres protegidos ► 2.6- Includes y Requires 3- Variables ► 3.1- ¿Qué son las variables? ► 3.2- Declarando las variables ► 3.2.1- Variables variables ► 3.2.2- Variables Globales ► 3.3- Variables predefinidas ► 3.4- Recogiendo las variables ► 3.5- Cadenas ► 3.6- Tipos de datos ► 3.6.1- Cadenas ► 3.6.2- Decimales ► 3.6.3- Enteros ► 3.6.4- Booleanos ► 3.7- Type Casting 4- Constantes ► 4.1- ¿Qué son las constantes? ► 4.2- Declarando constantes ► 4.3- Constantes predefinidas ► 4.4- Escribiendo en pantalla las constantes 5- Operadores ► 5.1- Operadores de comparación ► 5.2- Operadores aritméticos ► 5.3- Operadores de asignación ► 5.4- Operadores lógicos 6- Sentencias de control ► 6.1- If-Else ► 6.2- If-Elseif-Else


► 6.3- Switch-Case-Default ► 6.4- While ► 6.5- For 7- Funciones ► 7.1- ¿Qué son las funciones? ► 7.2- Dando nombre a las funciones ► 7.3- La sentencia return() ► 7.4- Parámetros por default ► 7.5- Pasando argumentos a través de funciones ► 7.6- Problema con variables no globales 8- Arrays ► 8.1- ¿Qué son los arrays? ► 8.1.1- Arrays clásicos ► 8.1.2- Arrays asociativos ► 8.2- Arrays multidimensionales ► 8.3- La función foreach 9- Control de Archivos ► 9.1- Fopen ► 9.1.1- Formas de abrir archivos ► 9.1.2- Permisos de archivos ► 9.2- Fwrite ► 9.3- Fget ► 9.4- Fclose ► 9.5- Funciones útiles para el control de archivos 10- Cookies ► 10.1- ¿Qué son las cookies? ► 10.2- Creando y borrando las cookies ► 10.3- "Rescatando" cookies [Pendiente] 11- Expresiones regulares ► 11.1- ¿Qué son las Expresiones Regulares? ► 11.2- Símbolos ► 11.3- Funciones para EE.RR 12- Base de datos: MySQL ► 12.1- ¿Qué es MySQL? ► 12.2- COnectandose a MySQL ► 12.3- Funciones SQL ► 12.3.1- Insert ► 12.3.2- Select ► 12.3.3- Update ► 12.3.4- Delete


► 12.4- Funciones SQL en PHP 13- Programación Orientada a Objetos ► 13.1- ¿Qué es la POO? ► 13.2- Ejemplo práctico ► 13.3- Constructores ► 13.4- Herencia ► 13.5- Polimorfismo 1- Introducción En el manual trataré de hacer que aprendan PHP y MySQL. Si se fijan en el índice, el nivel va "subiendo" a medida que avanza. 1.1- ¿Qué es PHP? PHP (PHP: Hypertext Preprocessor) es un lenguaje que se ejecuta en el servidor, o sea, primero se teclea la URL, luego se procesa como PHP y se devuelve un código HTML, el que es mostrado en la pantalla. Que mejor que una imagen para mostrar lo antes dicho:

PHP no necesita estar instalado en el navegador para ser visto, si no que el servidor donde está hospedada la página tiene que tener PHP. Pero si quieres tener PHP en tu máquina, tienes que instalar un servidor web (como Apache) y PHP (también puedes instalar otras cosas adicionales, como MySQL, GD, etc...). En el siguiente post (escrito por el-brujo) sale como puedes instalar lo anterior dicho, ya sea en Windows o en Linux: Instalar Apache + PHP + MySQL + Perl en Windows y Linux + Configuración Avanzada por el-brujo http://foro.elhacker.net/index.php/topic,251.0.html 1.2- Historia PHP es un lenguaje creado por una gran comunidad de personas. El sistema fue desarrollado originalmente en el año 1994 por Rasmus Lerdorf como un CGI escrito en C que permitía la interpretación de un número limitado de comandos. El sistema fue


denominado Personal Home Page Tools y adquirió relativo éxito gracias a que otras personas pidieron a Rasmus que les permitiese utilizar sus programas en sus propias páginas. Dada la aceptación del primer PHP y de manera adicional, su creador diseñó un sistema para procesar formularios al que le atribuyó el nombre de FI (Form Interpreter) y el conjunto de estas dos herramientas, sería la primera versión compacta del lenguaje: PHP/FI. La siguiente gran contribución al lenguaje se realizó a mediados del 97 cuando se volvió a programar el analizador sintáctico, se incluyeron nuevas funcionalidades como el soporte a nuevos protocolos de Internet y el soporte a la gran mayoría de las bases de datos comerciales. Todas estas mejoras sentaron las bases de PHP versión 3. Actualmente PHP se encuentra en su versión 4, que utiliza el motor Zend, desarrollado con mayor meditación para cubrir las necesidades actuales y solucionar algunos inconvenientes de la anterior versión. Algunas mejoras de esta nueva versión son su rapidez -gracias a que primero se compila y luego se ejecuta, mientras que antes se ejecutaba mientras se interpretaba el código-, su mayor independencia del servidor web -creando versiones de PHP nativas para más plataformas- y un API más elaborado y con más funciones. (desarrolloweb.com) 2- Entrando en PHP Aquí se verán las cosas básicas de PHP. 2.1- Mi primera web PHP Ya se estarán preguntando, ¿y cómo se ve/hace un PHP? Bueno, abre el notepad, y pon el siguiente código, y luego lo guardas como prueba.php: Código: <?php $var = "Hola Mundo!"; //Variable declarada echo $var; ?>

Eso imprimirá en pantalla "Hola Mundo!". Se preguntarán, ¿porqué? Eso se verá a continuación. Y sí, todas las páginas que hagas que tengan códigos PHP, deben tener extensión .php. Excepto en un caso que se verá mas adelante. 2.2- Entrar y salir a PHP Uno puede salir de HTML y entrar en PHP cuando quieras. Imagínate que tienes una página que primero haces lo normal, o sea, pones el título, etc... Y luego quieres imprimir una variable en pantalla (como en el mismo caso que el código anteriormente dado). Entonces, pones el siguiente código en prueba2.php: Código: <html> <head> <title>Otra página PHP!</title>


<head> <body> <?php //Entramos en PHP $var = "Hola denuevo, Mundo!"; echo $var; //Salimos de PHP ?> </body> <html>

Ahora... Hay 4 formas de entrar y salir de PHP, las cuales son las siguientes: Código: <?php echo "Esta es la primera forma"; ?>

Código: <? echo "Esta es la segunda forma"; ?>

Código: <script language="php"> echo "Esta es la tercera forma, en modo JavaScript"; </script>

Código: <% echo "Esta es la cuarta forma, que necesita de unos cambios en el php.ini para funcionar"; %>

En la segunda hay un pequeño "truco", el cual permite hacer un poco más corto el código. Si pones esto: Código: <?=$variable?>

Sería equivalente a poner: Código: <? echo $variable ?>

2.3- Separando instrucciones Al igual que en C/C++, PHP utiliza el punto y coma ( ; ) para separar las instrucciones. Siempre debe ser puesto el separador a fin de una instrucción, excepto cuando solo se tiene una, debido a que el cierre de PHP (?>) indica el fin de la instrucción. Ejemplo:


Código: <?php echo "Hola" echo "Mundo" ?>

Eso estaría mal. Debería ser: Código: <?php echo "Hola"; echo "Mundo"; ?>

Pero si solo quisiéramos imprimir en pantalla "Hola", podríamos poner: Código: <?php echo "Hola" ?>

2.4- Comentarios Para aquellos que no saben de que sirve un comentario en PHP, les va una pequeña explicación. Un comentario en un lenguaje de programación sirve para comentar el código (valga la redundancia). Mas que nada para eso, pero puede servir para muchas cosas mas, como poner el autor del script, etc... Y obviamente, los comentarios no serán mostrados en pantalla. Aquí van las formas de poner comentarios en PHP: Código: <?php echo "Probando comentarios"; //Comentario tipo C de una sola línea ?>

Código: <?php echo "Mas comentarios xD"; /*Comentario de una o más líneas. En este tipo de comentarios puedo poner el autor o cosas así */ ?>

Código: <?php echo "Para variar, otro comentario"; #Comentario tipo Bash de Unix de una sola línea ?>

2.5- Caracteres protegidos


En PHP hay cierto caracteres reservados, protegidos, o como quieran llamarles. Estos se ponen anteponiendo una barra invertida ( \ ). Aquí les dejo los caracteres protegidos de PHP: \n \r \t \$ \" \\

Salto de línea Retorno de carro Tabulación Signo de dinero Comillas dobles Barra invertida

Los tres últimos son protegidos por ser usados para cosas de PHP. Si pones una comilla doble en un echo de PHP si anteponer la barra invertida, dará Parse Error, el cual es el siguiente: Citar Parse error: parse error in XXXXX on line XX Ese error lo dará: -Cuando no ponen una barra invertida -Cuando no ponen el separador de instrucciones (en caso de que no sea la última línea) -Cuando no cierran un bracket o llave ( { ) en los ifs, whiles, etc... (esas últimas cosas se verán mas adelante). 2.6- Includes y Requires Esas dos funciones muy usadas en PHP sirven para incluir (en inglés include) y requerir (en inglés require) archivos. Se usa de la siguiente manera: Código: <?php include ("incluir.php"); //Para incluir ?>

Código: <?php require ("requerir.php"); //Para requerir ?>

Y para incluir o requerir un archivo tan solo una vez, se le agrega "_once", de manera que quedaría de la siguiente manera: <?php include_once ("solounavez.php"); ?> Y lo mismo para require_once.


En caso de que el archivo no exista, dará el siguiente error: Citar Warning: Failed opening 'XXXXX' for inclusion (include_path='.;c:\apache\php\pear') in XXXX on line XX Y para evitar esto, un pequeño tip: Tanto en esta, como en otras funciones se puede anteponer una arroba ( @ ) para que no dé error. Entonces, si ponemos: Código: <?php @include ("21avzdsqawg34.php"); ?>

Pero el archivo se llamaba algo.php, no nos devolverá nada, ni siquiera un error.

3- Variables Se verán distintas cosas acerca de las variables. 3.1- ¿Qué son las variables? Una variable es, tal y como lo dice su nombre, algo que cambia. Son lo esencial de los lenguajes de programación, y se pueden usar para almacenar valores, sumarlos, restarlos, compararlos, etc... Las variables pueden ser enteros, números decimales, cadenas, etc... 3.2- Declarando las variables Una variable puede ser declarada en cualquier momento (eso sí, que se esté en PHP) y debes siempre anteponerle un $ (signo de dinero), de la siguiente manera: Código: <?php $variable = "valor"; ?>

Pero las variables no pueden tener cualquier nombre. Hay un formato para los nombres de las variables, el cual es: Código: <?php $var = "Valor"; //Nombre válido porque empieza con una letra $_1n = "Valor"; //Nombre válido porque empieza con un guión bajo


$1numero = "Valor"; //Nombre inválido porque empieza con un número ?>

Una última cosa sobre el nombre de variables importante, es que es sensible a mayúsculas y minúsculas, o sea: Código: <?php $a = "Hola "; $A = "Mundo!"; echo $a.$A; ?>

Eso sería correcto, e imprimiría en pantalla "Hola Mundo!".

3.2.1- Variables variables Las variables son variables que tienen nombres de variables. Que mejor que explicarlo con un ejemplo: Código: <?php $var = "Hola"; $$var = " Mundo!"; ?>

Entonces la variable que tiene el valor "Mundo" pasaría a llamarse $Hola. Simple, ¿no? Luego, para imprimirlo, simplemente llamamos a las variables como si fueran cualquiera: Código: <?php echo $var.$Hola; ?>

Eso imprimiría "Hola Mundo!" 3.2.2- Variables globales Al igual que en C, en PHP existen variables globales, que se usan en toda la web. No sirven mucho, excepto en las funciones. Si una variable no es declarada global y luego se quiere usar en una función, esta no devolverá nada. Eso se verá en el capítulo 7.6. Las variables globales se pueden definir con la función global de esta forma: Código: <?php global $a;


$a = "Esta es una variable global"; ?>

3.3- Variables predefinidas Hay muchas variables predefinidas, tanto por Apache como por PHP. Son muy útiles, cada una tiene su función. Aquí pondré algunas: HTTP_ACCEPT_LANGUAGE Devuelve como valor el lenguaje del usuario. Ejemplo: es-mx.

HTTP_HOST Devuelve como valor el host que se está usando. Ejemplo: www.elextremo.cl HTTP_USER_AGENT Devuelve como valor información del usuario. Ejemplo: Mozilla/4.0 (compatible; MSIE 6.0; Windows 98; FunWebProducts) REMOTE_ADDR Devuelve como valor la IP del usuario. Ejemplo: 200.30.168.23 SERVER_ADMIN Devuelve como valor el mail del administrador del sitio. Ejemplo: webmaster@elextremo.cl SERVER_PORT Devuelve como valor el puerto del sitio. Ejemplo: 80 REQUEST_URI Devuelve como valor la URL (solo el archivo) que fue requerida. Ejemplo: /algo.php PHP_SELF Devuelve como valor la URL de la página actual. Ejemplo: /algo.php Obviamente, al ser variables, llevan el signo de dinero ( $ ) antes. Hay varias mas, pero estas son como las mas usadas. 3.4- Recogiendo las variables Hay dos formas de recoger variables, ya sea de un formulario o de la URL: El método GET y el método POST.


Supongamos que tenemos una URL, miarchivo.php?var=Hola. Entonces, creamos el archivo miarchivo.php y ponemos el siguiente código: Código: <?php echo $_GET["var"]; ?>

Eso escribirá el valor que tenga la variable var en la URL, en este caso, Hola. Pero eso solo funciona con GET. El post es mas usado para Formularios. Ahora supongamos que queremos preguntarle el nombre al usuario, entonces creamos el archivo nombre.php y le ponemos el siguiente código: Código: <?php if (isset ($enviar)) { //Si fue apretado el botón Enviar echo "Tu te llamas ".$_POST["nombre"]; } else { //Y si no... ?> <form action="<?=$PHP_SELF?>" method="post"> Introduce tu nombre: <input type="text" name="nombre"><br><br> <input type="submit" name="enviar" value="Enviar!"> </form> <?php } ?>

Fíjate en el action="<?=$PHP_SELF?>" y en method="post" de <form>. El primero dice que al apretar click debe ir a la misma página (se usa la variable superglobal $PHP_SELF, vista en el capítulo 3.3), y el segundo dice que se use el método POST. También fíjate en name="nombre" del input de texto. Debido a eso se imprime en pantalla el nombre poniendo $_POST["nombre"]. Si name fuera igual a otro, entonces pondríamos $_POST["otro"]. Un pequeño paréntesis. La función isset(), utilizada arriba, es, en inglés, "está puesto". Se usa mucho para este tipo de cosas. Osea, para comprobar si un botón, o algo fue declarado anteriormente. 3.5- Cadenas En PHP existe tan solo un operador de cadenas, el cual es el punto ( . ), que sirve para concatenarlas. Por ejemplo: Código: <?php $var = "Hola "; $var2 = "Mundo!";


echo $var.$var2; ?>

Imprimiría en pantalla "Hola Mundo!"

3.6- Tipos de datos Aquí se verán los tipos de datos (saltaremos array y objetos). 3.6.1- Cadenas Las cadenas son carácteres juntos. Puede ser una frase, un número, etc... Ejemplos: Citar $cad = "Hola mundo!"; Citar $intro = "Hola, me llamo Guillermo y mi ID es 9796"; Las cadenas van entre comillas dobles o simples. Si pones comillas simples, no podrás poner variables o carácteres protegidos. O sea: Código: <?php $a = "Mundo"; echo "Hola ".$a; //Imprimiría Hola Mundo echo 'Hola $a\n'; //Imprimiría Hola $a\n ?>

3.6.2- Decimales Los decimales son aquellos números que tienen punto, al no ser enteros. Solo pueden ser números. Ejemplos: Citar $a = 1.42; Citar $b = 0.01; 3.6.3- Enteros Estos son todos los números enteros. Pueden ser del sistema decimal, del sistema hexadecimal y del sistema octal. Ejemplos: Citar


$decimal = 34; Citar $hexadecimal = 0x11; Citar $octal = 010; 3.6.4- Booleanos Los booleanos solo pueden almacenar un valor: Verdadero (1/true) o Falso (0/false). Ejemplo: Citar $verdadero = 1; Citar $falso = false; Estos son comúnmente usados para las comparaciones con If, etc. 3.7- Type Casting Se preguntarán que es el Type Casting ("Molde" de tipos). Bueno, es una manera de "obligar" a una variable o número de un tipo tomar otro tipo. Por ejemplo, que una variable de un número decimal pase a ser un entero, se haría de la siguiente manera: Código: <?php $a = (int)"2.32"; echo $a; //Imprimiría 2 ?>

Estos son los "type castings" (solo se verán los mas básicos): (int), (integer) Molda a entero (float),(real),(double) Molda a decimal (string) Molda a cadena (bool), (boolean) Molda a un booleano (unset) Molda a Nulo (deja en blanco la variable) 4- Constantes Se verán distintas cosas sobre las constantes. 4.1- ¿Qué son las constantes?


Las constantes son como las variables, almacenan un valor, solo que no pueden cambiarlo.

4.2- Declarando constantes Las variables se declaran con una función, a diferencia de las variables. La función es define(). Ejemplo: Código: <?php define ("HOLA","mundo"); //Le asigna el valor mundo a la constante HOLA ?>

4.3- Constantes predefinidas Al igual que en las variables, PHP tiene constantes predefinidas, las cuales son: __LINE__ Devuelve la línea en que se puso la constante. Si se puso la constante en un archivo incluído o requerido, se pone la línea del archivo incluído, no la del archivo padre. __FILE__ Devuelve el nombre del archivo en que se puso la constante. Si se puso la constante en un archivo incluído o requerido, se pone la línea del archivo incluído, no la del archivo padre. PHP_OS Devuelve el sistema operativo del usuario. TRUE Devuelve verdadero. FALSE Devuelve falso. PHP_INFO Devuelve la versión de PHP que se está usando. E_WARNING Hay un error, que no es Parse. Se puede seguir la ejecución. E_ERROR Hay un error, que no es Parse. La ejecución no se puede seguir. E_PARSE Hay un error de Parse.


E_NOTICE Hay algo que puede ser un error o no. La ejecución sigue. 4.4- Escribiendo en pantalla las constantes A esta altura, después de declarar variables y ver las predefinidas, se preguntarán... ¿Y cómo las imprimo en pantalla? Simplemente se pone la función echo, seguida por el nombre de la constante, que va sin $. Ejemplo: Código: <?php echo __LINE__; ?>

Así de simple. 5- Operadores Existen distintos operadores en PHP, los cuales se verán a continuación. 5.1- Operadores de comparación Estos se usan con los If's, Else's, etc... Son: $a == $b $a es igual a $b $a === $b $a es igual a $b y del mismo tipo $a != $b $a es distinto a $b $a > $b $a es mayor a $b $a < $b $a es menor a $b $a >= $b $a es mayor o igual a $b $a <= $b $a es menor o igual a $b !$a $a no se cumple En el punto 6 serán visto con ejemplos usando las funciones de control If-Else. 5.2- Operadores aritméticos Estos son usados para operaciones matemáticas. Son: $a + $b $a - $b $a * $b $a / $b $a % $b Ejemplo:

Se le suma $b a $a Se le resta $b a $a Se multiplica $a por $b Se divide $a por $b Se saca el módulo entre $a y $b (el resto de una división)


Código: <?php $a = 3.2; $b = 2; $c = $a * $b; echo $c; //Imprimiría 6.4 ?>

5.3- Operadores de asignación Estos se usan para asignar un valor a una variable. Son: $a += $b $a -= $b $a *= $b $a /= $b $a .= $b

Se suma $a mas $b y se le asigna a $a Se resta $a menos $b y se le asigna a $a Se multiplica $a por $b y se le asigna a $a Se divide $a por $b y se le asigna a $a Se le añade $b a $a

Ejemplo: Código: <?php $a = 1; $b = 5; $a -= $b; echo $a; //Imprimiría -4 ?>

5.4- Operadores lógicos Estos se usan también para comparación, pero para hacer 2 o más comparaciones. Son: (condicion1) && (condicion2) Verdadero si condición1 Y condición2 son verdaderos (condicion1) AND (condicion2) Lo mismo que && (condicion1) OR (condicion2) Verdadero si condición1 O condición2 es verdadero (condicion1) || (condicion2) Lo mismo que OR (condicion1) XOR (condicion2) Verdadero si solo uno de los dos es verdadero 6- Sentencias de control Hay variadas sentencias para comparar cosas, hacer bucles, etc... Y se verán a continuación:

6.1- If-Else Este es el mas común. Su código es:


Código: <?php if (condicion) { //Códigos si la condición es verdadera } else { //Códigos si la condición es falsa } ?>

Y se usan con los operadores del punto 5.1 y 5.4. Algunos ejemplos de eso: En ese caso la condición sería falsa. Código: <?php $a = 5; $b = 3; if ($a == $b) { echo "Son iguales"; } else { echo "Son distintos"; } ?>

En español la condición sería "Si 5 ($a) es igual a 3 ($b)". En el siguiente caso la condición es verdadera. Código: <?php $a = 12; $b = 13; if (($a <= $b) && ($a != $b)) { echo "Verdadero"; } else { echo "Falso"; } ?>

En español la condición sería "Si 12 ($a) es menor o igual a 13 ($b), y si 12 ($a) es distinto a 13 ($b)". Hay una forma de simplificar el If-Else, llamada el Operador Ternario, el cual se usa de la siguiente manera: Código: <?php $var = (condición) ? "Si es verdadero" : "Si es falso"; ?>


Haciendo eso en el caso de arriba, sería así: Código: <?php $a = 12; $b = 13; echo (($a <= $b) && ($a != $b)) ? "Verdadero" : "Falso"; ?>

Es una forma mucho mas rápida de crear un IF. 6.2- If-Elseif-Else Esto es lo mismo que If-Else, solo que se pueden añadir mas condiciones. Su código es: Código: <?php if (condicion) { //Códigos si la condición es verdadera } elseif (codicion2) { //Códigos si la condición2 es verdadera } else { //Códigos si la condición es falsa } ?>

Y se pueden tener cuantos elseif's uno quiera. Creo que no hacen falta ejemplos. 6.3- Switch-Case-Default Esta sentencia de control sería algo así como una sentencia alternativa a If-Elseif-Else. Switch equivale a If, cada Case equivale a un Elseif, y Default equivale a Else. Con la función break se le dice al Switch que si la condición es verdadera, no siga evaluando las condiciones restantes. Su código es: Código: <?php switch (condicion) { case algo: //Código para si es verdadero break; //Se sale del switch, para que no siga evaluando las condiciones default: //Código para si falso } ?>

Un buen ejemplo para Switch sería hacer una página modular (pag.php?seccion=algo):


Código: <?php $seccion = $_GET ["seccion"]; switch ($seccion) { case php: include ("php.php"); break; case asp: include ("asp.php"); break; case js: include ("js.php"); break; default: echo "Por favor, selecciona una sección"; } ?>

Explicado: Si tenemos pag.php?seccion=php, nos incluye php.php. Si tenemos pag.php?seccion=asp, nos incluye asp.php. Si tenemos pag.php?seccion=js, nos incluye js.php. Y si no está puesta la variable $seccion, pues dice que se ponga una sección. 6.4- While Aquí ya entramos en los bucles. Pero... ¿Qué es un bucle? Un bucle es una secuencia de comandos que se repite, dada una condición. While en español significa "mientras", justamente porque hace cosas mientras una condición se cumpla. El While también usa los operadores de comparación. Su código es: Código: <?php while (condicion) { //Códigos que se repiten mientras la condición sea verdadera } ?>

En la mayoría de los casos, para controlar el while usaremos los operadores de incremento y decremento, los cuales son: Código: <?php $i = 1; $i++; //Es equivalente a $i = $i + 1. Devolvería 2 $i--; //Es equivalente a $i = $i - 1. Devolvería 0 (si la sentencia de arriba no hubiera sid o ejecutada) ?>

En el siguiente ejemplo, se escriben los números del 0 al 4: Código: <?php $i = 0;


while ($i <= 4) { echo $i; $i++; } ?>

Y en esta sentencia también se puede usar el break, para lo mismo que el Switch. Un ejemplo sería: Código: <?php $i = 1; while ($i <= 10) { echo $i; if ($i == 6) { echo "Aquí se termina el bucle"; break; } $i++; } ?>

Ese código llegaría hasta 5 y luego daría el mensaje "Aquí se termina el bucle". 6.5- For For sería una forma mas simple de hacer un While. Para mí, es de mucho mejor uso (pero para gustos hay funciones). También se usan operadores de incremento y decremento. Su código es: Código: <?php for ($i = 0; condición; $i++/$i--) { //Código que se ejecuta mientras condición sea verdadera } ?>

Y el For también puede ser parado con la función break. Eso sí, el For puede ser claramente reemplazado por el While. 7- Funciones Se verá que son las funciones 7.1- ¿Qué son las funciones? Las funciones son un bloque de código que se ejecuta llamando a un nombre. Las funciones recursivas (se verán que son este y otro tipo de funciones un poquitín mas adelante) son muy útiles, pues se puede usar el dinamismo. Su código:


Código: <?php function nombre ([arg_1, [arg_2 [, ... [, arg_n]]]]) { //Códigos a ejecutar } ?>

Pero... Ten cuidado con los nombres de las funciones, porque si declaras una función dos veces, o declaras una función con nombre de una ya existente, te dará el siguiente error: Citar Fatal error: Cannot redeclare XXX() in XXXXX on line XX Hay dos tipos de funciones: las tradicionales y las recursivas. Las tradicionales son aquellas que no reciben parámetros (algo así como void en C). Mientras que las recursivas son aquellas que reciben parámetros y devuelven un valor asociado con esos parámetros. Aquí pongo un ejemplo para cada uno: Función tradicional. Código: <?php function sumar () { echo 2 + 2; } sumar(); //Eso llama a la función sumar... Imprimiría 4 ?>

Función recursiva. Código: <?php function sumar ($a,$b) { return $a + $b; } echo sumar (1,3); //Eso llama a la función sumar. Imprimiría 4 ?>

Si se fijan, la primera función (la tradicional) imprime un valor sin la necesidad de ponerle un echo a la función. Esto es porque se ha puesto un echo dentro de la función. En cambio, a la otra función (la recursiva) se ha necesitado poner un echo a la función debido a que la función en si devuelve un valor, no lo imprime. ¿Se nota la diferencia? Eso sí, igualmente se podría poner un echo dentro de una función recursiva, pero la mejor forma sería con el return. Para ver como se devuelve un valor, veremos la función return. 7.3- La función Return Como han visto, las funciones recursivas necesitan de la función return para devolver un valor. Pero... ¿Cómo funciona la función return? La función return solo devuelve valores, por lo que puedes usar dentro de ella cualquier cosa (ya sea función, operadores


aritméticos, etc...). Un ejemplo sería el de la función recursiva que puse arriba. Creo que no hay nada mas que explicar, ¿no? 7.4- Parámetros por default Hay una forma de que si los parámetros no son especificados al llamar una variable, sean puestos unos especificados anteriormente por el creador de la función. La forma de hacer eso es la siguiente: Código: <?php function saludar ($nombre="Anónimo") { return "Hola, ".$nombre; } echo saludar(); //Eso devolverá "Hola Anónimo" echo saludar("Guillermo"); //Eso devolverá "Hola Guillermo" ?>

Es muy fácil. Si no se ponen parámetros y ya están especificados anteriormente, se usan los ya especificados. Si se ponen parámetros, se usan los puestos por el usuario. 7.5- Pasando argumento a través de funciones Las funciones, de por sí, no modifican las variables que se usan dentro de ellas. O sea: Código: <?php function doble ($num) { return $num = $num * 2; } $numero = 3; echo doble ($numero); //Imprimirá 6, pero... echo $numero; //Esto imprimirá 3. La función no afectó a la variable ?>

Pero si ponemos el símbolo ampersand ( & ) en la parte de los parámetros, la variable será modificada también. O sea: Código: <?php function doble (&$num) { return $num = $num * 2; } $numero = 3; echo doble ($numero); //Devolverá 6 echo $numero; //Devolverá 6 también, porque la función doble() modificó $numero ?>

¿Te fijas en el & al lado de la variable $num en doble()? Eso es lo que hace que la variable también se modifique. Ahora, si quieres que solo una vez la variable se modifique, y no todas, puedes sacar el & y ponerlo cuando se llama a la función. O sea:


Código: <?php function doble ($num) { return $num = $num * 2; } $numero = 3; echo doble (&$numero); //Devolverá 6 echo $numero; //Devolverá 6 también, porque la función doble() modificó $numero ?>

Eso hará lo mismo que la función anterior, solo que cambiará solo la variable $numero. En caso que se llame la función a otra variable, sin poner el &, la variable no cambiará. 7.6- Problema con variables no globales Como les dije en el capítulo 3.2.2, si una variable no es declarada global, esta no funcionará dentro de una función. Se los muestro con un ejemplo: Código: <?php $a = "Soy una variable!"; function mostrar_ayb() { $b = "Yo también!"; echo $a." ".$b; } mostrar_ayb(); ?>

Este ejemplo producirá la siguiente salida: Citar Yo también! Esto debido que $a fue declarada fuera de la función. Ahora, si queremos usar una variable externa a la función dentro de esta (caso del anterior ejemplo), simplemente hacemos lo siguiente: Código: <?php $a = "Soy una variable!"; function mostrar_ayb() { global $a; $b = "Yo también!"; echo $a." ".$b; ?>

Este ejemplo si producirá la salida que queremos: Citar Soy una variable! Yo también!


También pueden ser declaradas/vistas las variables globales usando el Array superglobal $GLOBALS. Algo así: Código: <?php $a = "Soy una variable!"; function mostrar_ayb() { $GLOBALS["a"] = $a; $b = "Yo también!"; echo $GLOBALS["a"]." ".$b; ?>

8- Arrays Se tratarán las cosas mas importantes sobre los Arrays (vectores o tablas). 8.1- ¿Qué son los Arrays? Los arrays son tablas que pueden almacenar muchas cosas de cualquier tipo de dato (ya sea cadena, entero, etc...). Son muy útiles y necesarias de saber ya que muchas funciones (como las de MySQL) devuelven valores en Arrays. Hay 2 tipos de Arrays, los que veremos a continuación. 8.1.1- Arrays clásicos En este tipo de array se usan índices, y hay dos formas de asignar los elementos al array. La primera sería así: Código: <?php $numero[0] = "0"; $numero[1] = "1"; $numero[2] = "2"; ?>

El primer índice de un array es 0, a menos que se especifique otro. Aquí un pequeño paréntesis. PHP tiene una "habilidad" que no todos los lenguajes tienen. Se trata de reconocer el índice solo. O sea, si ponemos Código: <?php $numero[] = "0"; ?>

Reconocerá que el índice de ese elemento es 0. Y a medida que vallamos poniendo mas


elementos sin índice, seguirá reconociéndolos. La segunda forma sería usando la función array() para definir cada elemento. Usando el ejemplo anterior de los números, usando esta forma sería así: Código: <?php $numero = array ("0","1","2"); ?>

Como lo expliqué, el primer índice sería 0. Para especificar otro (en esta forma), usaremos el operador => para definir otro índice. Así: Código: <?php $numero = array (1=>"0","1","2"); ?>

Entonces el array quedaría así: Código: Array ( 1 => 0 2 => 1 3 => 2 )

Un Array clásico podría ser fácilmente recorrido por un bucle for(). De la siguiente manera: Código: <?php $descripcion = array ("Valor","Cosa","Color"); for ($i = 0; $i <= count ($descripcion); $i++) { echo $descripcion[$i]; } ?>

La función count() devuelve el número de elementos del array especificado. También puede ser recorrido MUCHO mas fácil por la función foreach(), que está hecha especialmente para Arrays, pero se verá mas adelante (esa función puede ser usada tanto en Arrays clásicos, como en Arrays asociativos y multidimensionales). 8.1.2- Arrays asociativos El Array asociativo vendría a ser lo mismo que el Array clásico, solo que en vez de que el índice sea un número, es un valor (o key) para cada elemento. Supongamos que queramos almacenar el color de un auto de determinada marca en un Array. Usando índices, sería así: Código:


<?php $color[0] = "Rojo"; $color[1] = "Negro"; ?>

Ahora, usando Arrays asociativos, sería así: Código: <?php $color["Ferrari"] = "Rojo"; $color["Porsche"] = "Negro"; ?>

O, con la función array(): Código: <?php $color = array ("Ferrari"=>"Rojo", "Porsche"=>"Negro"); ?>

Es muy fácil recorrer el contenido de los Arrays clásicos, porque tienen índices numéricos... ¿Pero qué se hace para recorrer el contenido de un Array asociativo? Bueno, para eso fueron hechas ciertas funciones de control sobre Arrays asociativos: current(array) Devuelve el valor del elemento sobre el que está el puntero en array. pos(array) Hace lo mismo que current. next(array) El puntero se mueve al siguiente elemento en array. prev(array) El puntero se mueve al elemento anterior en array. end(array) El puntero se mueve al final de array. reset(array) El puntero se mueve al principio de array.

8.2- Arrays multidimensionales


Los Arrays multidimensionales son, simplemente, Arrays que al mismo tiempo son otro Array. Supongamos que queremos tener en un Array el número de días de un mes y el nombre del mes. Sería así: Código: <?php $mes[] = array ("31","Enero"); $mes[] = array ("28","Febrero"); $mes[] = array ("31","Marzo"); ?>

Entonces, una manera de acceder a su contenido al estilo Array clásico sería: Código: <?php $mes[] = array ("31","Enero"); $mes[] = array ("28","Febrero"); $mes[] = array ("31","Marzo"); echo $mes[1][1]." tiene ".$mes[1][0]." días"; ?>

El resultado, en ese caso, sería "Febrero tiene 28 días". Así de simple. Ahora veremos la función esperada. foreach(), para recorrer Arrays. 8.3- La función foreach Esta función es muy simple, solo tienes que especificar el Array que recorrerás, y como se llamará cada índice. Su código es: Código: <?php foreach (array as nombreindice) { //Código a ejecutar } ?>

O sea, si quisiéramos recorrer el siguiente Array clásico: Código: <?php $color[0] = "Rojo"; $color[1] = "Negro"; ?>

Podría ser algo así: Código: <?php $color[0] = "Rojo"; $color[1] = "Negro"; foreach ($color as $key) {


echo $key."<br>"; } ?>

Lo que imprime en pantalla es: Citar Rojo Negro Para un array asociativo se tendría que especificar otra cosa: la clave (o key), pero no es necesario. En este caso (el de los autos y los colores) usaré la clave también: Código: <?php $color["Ferrari"] = "Rojo"; $color["Porsche"] = "Negro"; foreach ($color as $key=>$clave) { echo $key."->".$clave."\n"; } ?>

El resultado es: Citar Ferrari->Rojo Porsche->Negro Y finalmente, para un Array multidimensional, sería todo casi igual, solo que para la variable que mostrará los elementos, debe especificarse el índice que se quiere. Usando el ejemplo de meses y días: Código: <?php $mes[] = array ("31","Enero"); $mes[] = array ("28","Febrero"); $mes[] = array ("31","Marzo"); foreach ($mes as $key) { echo $key[1]." tiene ".$key[0]." días<br>"; } ?>

El resultado es: Citar Enero tiene 31 días Febrero tiene 28 días Marzo tiene 31 días 9- Control de Archivos


Se verán las funciones para abrir, cerrar y modificar archivos. 9.1- Fopen La función fopen() sirve para abrir ficheros (archivos). Su código es: Código: <?php fopen (fichero, modo de apertura); ?>

fichero puede ser un archivo de texto, un .php, o incluso una web (http://www.paginaweb.com/). "Abrir" una web con fopen() puede ser muy útil cuando queremos comprobar si la web existe, o si está activa. Si fichero empieza con "http://" (no es case-sensitive, osea, no es sensible a mayúsculas), se abre una conexión HTTP 1.0 hacia la web especificada. Siempre debe ponérsele un slash ( / ) al final. Si fichero empieza con "ftp://" (no es case-sensitive, osea, no es sensible a mayúsculas), se abre una conexión FTP al servidor especificado. Si fichero no empieza con ninguna de las cosas anteriormente dichas, se abre una conexión "directa" con el archivo especificado. Si no existe, devuelve error. Hay distintos modos de apertura de archivos, los cuales se ven a continuación. 9.1.1- Formas de abrir archivos A la hora de abrir un archivo, hay que saber de que forma queremos abrirlo. Podemos abrirlo para escritura y lectura, pero de distintas formas: r Abre el archivo sólo para lectura. Mueve al puntero al inicio del archivo. r+ Abre el archivo para lectura y escritura. Mueve al puntero al inicio del archivo. w Abre el archivo sólo para escritura. Mueve el puntero al inicio del archivo, y trunca a 0 bytes (vacía el archivo). Si el archivo no existe, intenta crearlo. w+ Abre el archivo para escritura y lectura. Mueve el puntero al inicio del archivo, y trunca a 0 bytes (vacía el archivo). Si el archivo no existe, intenta crearlo.


a Abre el archivo para añadir. Si el archivo no existe, intenta crearlo. a+ Abre el archivo para añadir y para lectura. Si el archivo no existe, intenta crearlo. Cuando el servidor en el que se ejecuta el script es Windows, debe ponérsele una b al final, ya que Windows diferencia entre archivos binarios y archivos de texto. Ejemplo: Código: <?php $fp = fopen ("archivo.txt","r+b"); [...] ?>

9.1.2- Permisos de archivos Los archivos tienen ciertos "permisos", o sea, "X" usuario puede tener acceso a la lectura, a la escritura o a la ejecución de un archivo. Entonces: Citar 1 -> Permisos de ejecución 2 -> Permisos de lectura 4 -> Permisos de escritura Y están puestos en orden: Primero va el dueño del archivo, luego va cualquier grupo de usuarios, y luego el resto de los usuarios. Entonces, según lo visto, algunos ejemplos serían: Citar 770 -> Le da permisos de lectura, escritura y ejecución (2+4+1) al dueño, lo mismo al grupo y ningún permiso al resto de los usuarios. 666 -> Le da permisos de lectura y escritura (2+4) a todos los usuarios. 044 -> No le da ningún permiso al dueño del archivo y permisos de escritura (4) tanto al grupo como al resto de los usuarios. 9.2- Fwrite Esta función sirve para escribir en el archivo. Si modo de apertura en fopen() es "r", no hará nada con el archivo, porque abre el archivo solo para lectura. Su código es: Código: <?php fwrite (fichero, texto [, bytes]); ?>


Si se especifica bytes (no es obligatorio), se escribirá en el archivo hasta bytes bytes. O sea, si el texto es de 3 bytes, y se especifico 2 bytes en la función, el texto no se pondrá completo. 9.3- Fread Con esta función se obtienen datos desde un archivo. Al igual que con fwrite(), pero al revés: Si el archivo se abre sólo para escritura, no se podrá usar esta función. Su código es: Código: <?php fread (fichero, bytes); ?>

Lee hasta bytes bytes, o hasta EOF (End Of File, Fin Del Archivo), lo que pase primero.

9.4- Fclose Esta función es muy simple: Sólo cierra la lectura y/o escritura del archivo. Su código es: Código: <?php fclose (fichero); ?>

No es necesario hacer esto cada vez que abramos un archivo, pero es útil cuando abrimos mas de uno, entonces abrimos el primero, luego lo cerramos, luego el segundo y así. 9.5- Funciones útiles para el control de archivos Hay muchas funciones que nos pueden servir para el manejo de archivos, y aquí les pongo algunas...: file_exists(archivo) Es una función del tipo Booleana. Como su nombre dice, ve si archivo existe. Si existe, devuelve TRUE ( 1 ), si no, devuelve FALSE ( 0 ). Ejemplo: Código: <?php if (file_exists ("archivo.txt")) { echo "El archivo existe!"; } ?>


chmod(archivo, perm) Es para darle los permisos perm a archivo. Puede ser cualquier permiso a cualquier tipo de usuario, y sea el permiso que sea, debe llevar un cero ( 0 ) antes. Ejemplo: Código: <?php chmod ("archivo.txt", 0777); ?>

Ese script le da todos los permisos a todos los usuarios para el archivo archivo.txt . is_readable(archivo) Muy útil. Es una función del tipo booleano (ver 3.6.4), devuelve TRUE ( 1 ) si archivo (también puede ser un directorio) tiene permisos de lectura para tu tipo de usuario. Ejemplo: Código: <?php if (is_readable ("archivo.txt")) { echo "Tienes permiso de lectura!"; } ?>

is_writable(archivo) Igual que is_readable() pero, envez de ver permisos de lectura, ve permisos de escritura. También puede ser is_writeable(). Ejemplo: Código: <?php if (!is_writable ("/dir")) { echo "Puedes escribir en el directorio /dir"; } ?>

filesize(archivo) Obtiene el tamaño de archivo en bytes. Ejemplo: Código: <?php echo filesize ("archivo.txt"); ?>

Ahora, ya vistas las mas usadas funciones para el manejo de archivos, haremos un script que comprueba si existe X archivo, si existe, ve si se puede escribir y leer en el, si se puede,


se lee lo que tiene y luego se añade un texto en él. Si no se puede ni leer ni escribir, se le intentan de dar permisos 777: Código: <?php $archivo = "algo.txt"; if (file_exists ($archivo)) { //¿Existe? if (is_writable ($archivo) && is_readable ($archivo)) { //¿Se puede leer y escribir? $fp = fopen ($archivo,"a+"); //Se abre el archivo para añadir y leer $texto = fread ($fp, filesize ($archivo)); //Se lee el contenido hasta los bytes que pese e l archivo echo $texto; $txt = "Ahora esta es una línea mas\n"; fwrite ($fp, $txt); //Se escribe la variable $txt en el archivo fclose ($fp); //Se cierra la lectura y escritura del archivo } else { //Si no se puede escribir ni leer if (@chmod ($archivo, 0777)) { //Si se le pueden dar permisos 777 al archivo echo "Permiso 777 dado al archivo ".$archivo.", corra denuevo el script para seguir su f unción"; } else { //Si no se pudieron dar los permisos echo "Los permisos no pudieron ser dados, trate hacerlo a mano"; } } else { //Si el archivo no existe echo "¡El archivo ".$archivo." no existe!"; } ?>

10- Cookies Se verá como declarar, llamar, borrar, y mas sobre las cookies. 10.1- ¿Qué son las cookies? Las cookies (galletas en inglés) son una forma de guardar información. Son enviadas desde el servidor hasta el navegador, o sea, quedan guardadas en el PC del usuario. Luego, cuando el usuario vuelve a entrar a la página, si la cookie no ha expirado, la envía de vuelta al servidor para que este pueda usarla. Las cookies son parte del Header, al igual que lo que se encuentra entre las etiquetas <head> y </head>. Si pones la cabecera de HTML, y después el envío de la cookie, te dará un error de cabecera puesto a que ya fue enviada, y no puede volver a enviarse solo para las cookies. El error es éste: Citar Warning: Cannot add header information - headers already sent by (output started at XXXXX:XX) in XXXXX on line XX Para solucionarlo, solo envía las cookies junto con la cabecera, o, simplemente, no envíes cabecera HTML antes de la cookie.


10.2- Creando y borrando las cookies Hay una función especial en PHP para crear y borrar cookies, esta es setcookie(). Su código es: Código: <?php setcookie (nombre [, valor [, duracion [, ruta [, dominio [, seguridad]]]]]); ?>

Como ven, el único valor necesario es el nombre, pero usualmente se ponen valor y duración también. nombre es el nombre de la cookie, valor es el valor que tendrá la cookie, duración es el tiempo que durará la cookie (se le pone junto con otra función, ya les diré cual), ruta es la ruta en la que se usará la cookie (si se pone /, se usará en toda la web), dominio es la web en la que se usará la cookie (usualmente la nuestra) y en seguridad se pone si será solo en partes seguras (https://) o no. Ejemplo: Código: <?php setcookie ("usuario","Riven",time()+7200,"/","http://www.miweb.com/",0); ?>

Ese código crearía una cookie de nombre "usuario", con el valor "Riven", de 2 horas de duración (la función time() es el tiempo actual, mas 7200 segundos), se ejecuta en toda la web http://www.miweb.com/, y no es para webs seguras. Los valores pueden ser saltados poniendo cadenas en blanco, excepto duración, que usa tipos de dato entero. Para saltarlo, introducir "0" (sin comillas). La función time() entrega varios números, que sumados como segundos darían la hora. Es por eso que uno suma en segundos para darle duración a las cookies. Para borrar una cookie, simplemente pones la función setcookie() sólo con el nombre de la cookie, nada más. Así: Código: <?php setcookie ("usuario"); ?>

Y listo, cookie borrada.

10.3- "Rescatando" cookies


Y bueno, se preguntarán... ¿Como muestro el valor de la cookie en mi página? Eso es simple. Supongamos que queremos darle la bienvenida al usuario si es que tiene la cookie que puse antes, "usuario". Primero vemos si la tiene con un IF, y si la tiene, le damos la bienvenida mostrando el valor que tiene la cookie. Todo esto se hace con la variable superglobal $_COOKIE. El código de lo arriba dicho: Código: <?php if ($_COOKIE["usuario"]) { //Si está la cookie 'usuario' $nick = $_COOKIE["usuario"]; //Se guarda en la variable $nick el valor de la cookie 'usu ario' echo "Bienvenido, ".$nick."!"; } ?>

Es muy simple. También pueden ser llamadas usando el nombre de la cookie como variable. Usando el ejemplo de crear cookie "usuario": Código: <?php if ($usuario) { echo "Bienvenido ".$usuario."!"; } ?>

Obviamente, es 0% recomendable hacer esto, ya que si tu en la URL pones usuario en true, se podrá acceder como un usuario. Es un grave bug, así que, como les dije, NO usen esta forma. Todo por ahora...


Tutorial PHP