You are on page 1of 46

Curso de PHP

Índice
Capítulo 1. Introducción. .......................................................................................... 2
1.- Conceptos básicos....................................................................................... 2
2.- Instalación y configuración de Apache-PHP................................................ 3

Capítulo 2. El lenguaje PHP. .................................................................................... 6


1.- Cómo funciona PHP. .................................................................................. 6
2.- Sintaxis básica. ........................................................................................... 7
3.- Tipos de datos............................................................................................. 9
4.- Variables................................................................................................... 10
5.- Constantes. ............................................................................................... 12
6.- Expresiones y operadores.......................................................................... 12
7.- Estructuras de control................................................................................ 15
8.- Funciones. ................................................................................................ 23

Capítulo 3. Formularios. ......................................................................................... 26


1.- Definición de un formulario en PHP. ........................................................ 26
2.- Elementos de un formulario. ..................................................................... 26
3.- Formulario en un único fichero. ................................................................ 37

Capítulo 4. Cookies. ............................................................................................... 40

Capítulo 5. Sesiones. .............................................................................................. 43

Capítulo 6. Ejercicios Finales. ................................................................................ 46

Página 1 de 46
Curso de PHP

Capítulo 1. Introducción.

1.- Conceptos básicos.


La diferencia principal entre una página Web HTML y una PHP es que esta
última es dinámica, es decir, que la página HTML (que también puede tener la
extensión HTM) siempre muestra el mismo contenido mientras no se cambie, la página
PHP mostrará un contenido u otro dependiendo de para lo que haya sido diseñada.
El ejemplo más claro y usado por todos es el de las páginas Web con las que
leemos el correo. En estas páginas aparecerá una tabla con más o menos correo según
los que hayamos recibido y además al leer uno la siguiente vez que vayamos a esa
página aparecerá marcado de otro color.
Todo esto al usuario no le afecta, pues sólo recibe una página Web normal que su
explorador mostrará convenientemente. Es en la parte del servidor (a la que se refiere
este curso) donde se realizará todo el trabajo.
Vamos a verlo por partes:
1.1.- Funcionamiento de una petición HTML:
Cuando hacemos clic o ponemos una dirección Web en el explorador sucede lo
siguiente (ver Figura: 1)

Figura: 1 Funcionamiento de una petición PHP


1º Nuestro ordenador envía la petición a Internet.
2º La petición le llega al servidor de la página Web solicitada.
3º Busca en el disco duro la página solicitada.
4º Lee del disco duro la página HTML.

Página 2 de 46
Curso de PHP

5º El servidor envía la página solicitada a través de Internet.


6º La página nos llega y nuestro explorador la muestra.
1.2.- Funcionamiento de una petición PHP:
Cuando hacemos clic o ponemos una dirección Web en el explorador sucede lo
siguiente (ver Figura: 2)

Figura: 2 Funcionamiento de una petición PHP


1º Nuestro ordenador envía la petición a Internet.
2º La petición le llega al servidor de la página Web solicitada.
3º Busca en el disco duro la página solicitada.
4º Lee del disco duro la página PHP.
5º Interpreta el contenido de la página PHP y lo convierte en HTML.
6º El servidor envía la página solicitada a través de Internet.
7º La página nos llega y nuestro explorador la muestra.
Como puede observarse los pasos que se realizan son prácticamente los mismos a
excepción del paso 5º de la petición de la página PHP. En ese caso no se envía el
contenido de la página tal y como está en el disco duro, sino que antes se interpreta en el
ordenador servidor generándose un fichero en formato HTML que será el que se envíe
al ordenador que realizó la petición.

2.- Instalación y configuración de Apache-PHP.


Si queremos instalar un servidor Web deberemos instalar un programa que cuando
reciba las peticiones, las busque en el disco duro y las atienda. Uno de esos programas
es "Apache", aunque también podríamos usar el IIS (Internet Information Services) de
Windows.
Pero si además queremos hacer que nuestras páginas sean dinámicas deberemos
de usar un lenguaje como el PHP.
2.1.- Instalación en Windows

Página 3 de 46
Curso de PHP

Para realizar este curso se recomienda usar el programa "WampServer", que se


puede bajar de su página "http://www.wampserver.com/en/download.php" que incluye:
 Apache
 PHP
 MySQL
Nos bajaremos el programa y una vez instalado deberemos ponerlo en
funcionamiento para que atienda las solicitudes. Para ello simplemente accederemos al
acceso directo que se nos ha creado o lo buscaremos en el menú "Inicio/Todos los
Programas".
A partir de ese momento nos aparecerá el símbolo a la derecha de la barra de
estado, y si situamos en cursor del ratón sobre él nos debe indicar: "All services
running" (todos los servicios ejecutándose).
Si pulsamos con el botón derecho del ratón sobre dicho símbolo nos permitirá
terminar el programa, es decir, parar completamente el servidor.
Y si pulsamos con el botón izquierdo nos permitirá, entre otras cosas:
 Iniciar, parar o reiniciar todos los servicios.
 Iniciar, parar o reiniciar el servidor Apache.
 Iniciar, parar o reiniciar el servidor MySQL.
 Editar los ficheros de configuración.
 Ir directamente al directorio donde tenemos nuestra página Web.
2.2.- Instalación en Linux. Distribución Debian.
En el caso de estar creando el servidor en un ordenador con Linux el
procedimiento sería muy parecido. Desde la consola del sistema y siendo el usuario
“root” ejecutaremos los siguientes comandos:
#apt-get install apache2
#apt-get install PHP5

Si todo ha ido bien los dos servicios deberán estar en funcionamiento y no


necesitaremos ejecutarlos pues Linux lo hará al encender el sistema. (Previamente se
recomienda haber hecho "apt-get update")
De todas formas, en caso de necesitar reiniciar el servicio ejecutaremos la orden:
#/etc/init.d/apache2 restart

en caso de querer pararlo:


#/etc/init.d/apache2 stop

y en caso de querer volverlo a poner en funcionamiento:


#/etc/init.d/apache2 start

Deberemos de hacer lo mismo con el servicio “PHP”.


2.3.- Fichero de configuración “httpd.conf”.
Para configurar el servidor Web deberemos editar el fichero "httpd.conf" y
realizar la siguiente modificación:

Página 4 de 46
Curso de PHP

Debemos indicarle en que directorio se encuentra nuestra página Web, es decir, la


página raíz del servidor. Este directorio se encuentra definido en la directiva
"DocumentRoot", y deberemos sustituirla por nuestro directorio, por ejemplo:
DocumentRoot "C:/paginas/mipagina.com"

Deberemos tener en cuenta lo siguiente:


 Las barras son las que se usan en Linux, y no las usadas en Windows.
 Después de cualquier modificación de cualquier fichero de configuración
deberemos de reiniciar el servicio o servicios afectados.
2.4.- Comprobar que todo ha funcionado bien.
Para comprobar que todo ha ido bien deberemos de abrir un explorador de páginas
Web y escribir en su barra de direcciones:
http://localhost/

Entonces nos aparecerá una página como la que se muestra en la Figura: 3.

Figura: 3 Ejemplo de ejecucución inicial de PHP en http://localhost


En caso de que hayamos modificado la directiva "DocumentRoot" del fichero
"httpd.conf" nos aparecerá la página principal de nuestra página Web. Recordemos que
la página principal por defecto vienen indicada por la directiva "DirectoryIndex", como
se muestra a continuación:
DirectoryIndex index.php index.html index.htm

En este caso, si no se le indica que página queremos que abra, el navegador


buscará los ficheros que se le han indicado en "DirectoryIndex" en ese mismo orden,
dando error en caso de no encontrar ninguno de ellos. Como puede observarse, la
primera página es "index.php". Si no aparece deberemos incluirla.

Página 5 de 46
Curso de PHP

Capítulo 2. El lenguaje PHP.

1.- Cómo funciona PHP.


Cuando solicitamos una página HTML con el siguiente código:
<HTML>
<BODY>
Contenido de una página1 HTML
</BODY>
</HTML>

el servidor nos devolverá el contenido del fichero tal cual, es decir, sin realizarle
ninguna modificación (ver Figura: 1):
<HTML>
<BODY>
Contenido de una página HTML
</BODY>
</HTML>

Pero si solicitamos una página PHP con el siguiente código:


<HTML>
<BODY>
<?PHP
print("Contenido de una página PHP");
?>
</BODY>
</HTML>

el servidor nos devolverá el contenido del fichero después de haber interpretado el


código PHP (ver Figura: 2):
<HTML>
<BODY>
Contenido de una página PHP
</BODY>
</HTML>

¿Qué ventajas nos aporta esto?


 Podremos hacer páginas dinámicas, en las cuales el contenido variará según

1
OJO. En HTML los acentos y otros caracteres del ASCII extendido tienen su sintaxis, pero aquí
no entraremos en ello.

Página 6 de 46
Curso de PHP

nuestras necesidades.
 Siempre enviaremos código HTML al cliente (es decir, al ordenador que ha
realizado la petición de la página), de esta forma el explorador del cliente sólo
deberá saber interpretar el HTML.
Tras esta breve introducción al lenguaje PHP en la que hemos recordado su
funcionamiento pasaremos a ver el lenguaje PHP propiamente dicho.
2.- Sintaxis básica.
Como ha podido verse anteriormente el código PHP se inserta dentro de una
página HTML, pero dicho fichero deberá tener la extensión "PHP" para que el servidor
sepa que ha de interpretarla antes de enviarla al cliente. (Es posible configurar el PHP
para que interprete también las páginas HTML, pero es conveniente que no mezclemos
estos dos tipos de páginas).
Podemos indicar que el código que viene a continuación es PHP de varias formas,
pero la más común es la siguiente:
<?PHP
código PHP...
?>

Otras características del PHP son las siguientes:


 Las instrucciones se separan con un "punto y coma" ( ; ) que normalmente se
pone al final de cada instrucción.
 PHP es sensible a las mayúsculas/minúsculas, es decir, que no es lo mismo
para PHP "hola" que "Hola" ni que "HOLA" ni que...
 Los comentarios se pueden poner de dos formas:
 Si ponemos dos barras ( // ) estamos indicando que lo que hay a
continuación hasta el final de la línea es un comentario.
 Si ponemos una barra y un asterisco ( /* ) estamos indicando que lo que hay
a continuación es un comentario hasta que aparezca un asterisco y una barra
( */ ) independientemente del número de líneas y de la cantidad de texto que
haya en medio.
Como puede observarse la sintaxis de PHP es muy parecida al lenguaje de
programación C.
Ya se ha comentado que el PHP es un lenguaje interpretado, que el servidor
transforma antes de enviar al ordenador cliente que realizó la petición, por lo que vamos
a ver ahora una de las funciones más importantes que nos permitirá realizar esa
transformación.
Para ello vamos a usar las órdenes "echo" y "print" que nos convertirán lo que
le indiquemos en cadenas de texto HTML. Obsérvese que se escriben en minúsculas.
Veamos nuevamente el ejemplo anterior (podemos usar indistintamente "print" o
"echo"):
<HTML>
<BODY>
<?PHP

Página 7 de 46
Curso de PHP

// Ejemplo de la orden "print"


print("Contenido de una página PHP");
?>
</BODY>
</HTML>

se transformará en el siguiente código HTML:


<HTML>
<BODY>
Contenido de una página PHP
</BODY>
</HTML>

Algunos comentarios sobre el ejemplo anterior:


 Podemos observar las marcas de inicio y fin de código PHP:
 Al principio: <?PHP
 Al final: ?>
 También tenemos una línea de comentarios indicada con las dos barras.
 En la línea que contiene la orden "print" vemos que al final aparece el "punto y
coma" ( ; ) para indicar que ahí acaba la orden.
 Es aconsejable el "identado" del código, es decir, cada vez que tengamos un
grupo de instrucciones dentro de otras ponerlas varios espacios más a la
derecha para que visualmente se vea están dentro. Por ejemplo, el código PHP
está dentro del apartado "BODY" del HTML y por eso se ha situado dos
espacios más a la derecha. De la misma forma que el apartado "BODY" está
dentro del "HTML" y también se ha desplazado dos espacios a la derecha.
 Y finalmente hacer notar que tanto "echo" como "print" pueden escribirse sin
usar los paréntesis, pero es recomendable usarlos pues así nos familiarizamos a
su uso como cualquier otra función que podamos usar de PHP.
 Es equivalente: print("hola") = print "hola" = echo("hola") = echo "hola"

Ejercicio 2.1: Realizar una página PHP que nos muestre los días de la semana, cada
uno de ellos en una línea diferente.
Y finalmente tenemos include("fichero"); que nos permite incluir un
fichero dentro de nuestra página PHP. Es una sentencia muy útil cuando tenemos una
página PHP demasiado grande y queremos dividirla en varios trozos, o para cuando
determinado código PHP aparece en varias páginas y así nos evitamos tenerlo escrito
varias veces.
Ejemplo:
Si tenemos el siguiente fichero PHP:
<HTML>
<BODY>
<?PHP

Página 8 de 46
Curso de PHP

include("texto.txt");
?>
</BODY>
</HTML>

y el fichero "texto.txt" tiene el contenido:


echo("este fichero será incluido dentro del PHP");

es lo mismo que si tuviéramos la siguiente página PHP:


<HTML>
<BODY>
<?PHP
echo("este fichero será incluido dentro del PHP");
?>
</BODY>
</HTML>

Fíjese que la identación del fichero que se incluye se mantiene (se incluye tal
cual).
Y otra sentencia que nos permite incluir ficheros es require("fichero");,
que a diferencia de "include" si se produce un error al incluir el fichero se para la
carga de la página. Con "include" se muestra un aviso (warning) pero se continúa.

3.- Tipos de datos.


PHP tiene los siguientes tipos de datos:
 integer  Usado para los números enteros.
 double  Usado para números reales o decimales. El separador decimal es
un punto y no una coma.
 boolean  Tiene valores lógicos: true y false (verdadero y falso). El cero es
el valor falso, y cualquier otro valor será verdadero. (Internamente los
booleanos se almacenan como un entero).
 string  Contienen cadenas de caracteres. Podremos usar comillas simples
o comillas dobles para delimitar la cadena, es decir, para decir dónde comienza
y dónde termina la cadena. Tienen algunas características interesantes como
son:
 Si la cadena está delimitada por comillas dobles, cualquier variable incluida
dentro de ella será sustituida por su valor.
 Si la cadena está delimitada por comillas simples, cualquier variable
incluida dentro de ella NO será sustituida por su valor.
 Si queremos poner el carácter de la comilla simple dentro de una cadena que
está delimitada por la comilla simple deberemos usar el carácter escape,
para ello pondremos \'
 Si queremos poner el carácter escape dentro de una cadena deberemos
ponerlo dos veces, indicando la primera vez que aparece que el siguiente

Página 9 de 46
Curso de PHP

carácter (el de escape) se ha de poner tal cual: \\


 Las cadenas con comillas dobles admiten otros caracteres de escape:
- \n  Nueva línea.
- \r  Retorno de carro.
- \t  Tabulación horizontal.
- \\  Barra invertida
- \$  Signo del dólar.
- \"  Comillas dobles.
 array  no contiene un único valor, sino un conjunto de valores
referenciados con un índice. Podemos crear arrays de dos formas:
 Estáticamente: creamos el array y le damos valor a cada elemento. Su
sintaxis es:
- $miArray=array([índice1]=>[valor1], [índice2]=>[valor2], ...);

 Dinámicamente: simplemente asignamos valores en las posiciones que


queramos y éstas se definen a la vez. Por ejemplo:
- $otroArray[6]="valor de tipo string en la posición 7ª";
Como puede observarse en el ejemplo anterior, aunque el índice tiene el valor
"6" esa posición es la 7ª por que los arrays comienzan en la posición cero.
También existen los llamados arrays asociativos, en los que el índice no es un
número sino una cadena de texto:
- $semana["primero"]="lunes";
Y por último están los arrays multidimensionales o de varias dimensiones.
Supongamos un array en dos dimensiones en el que la primera dimensión nos
indicará el código del producto y el la segunda dimensión tendremos sus
detalles, como pueden ser la descripción, el precio, etc.
- $producto[1]["precio"]=23.5;

Ejercicio 2.2: Realizar una página con código PHP que muestre en pantalla y en siete
líneas un texto como el que aparece a continuación con los días de la semana. Usar
para ello.
El primer día de la semana es: lunes
El segundo día de la semana es: martes
El tercer día de la semana es: miércoles
: : :
: : :

4.- Variables.
Aunque en el apartado anterior ya hemos visto algunas variables vamos a
describirlas ahora con más detalle.
 Todas las variables van precedidas del símbolo del dólar.

Página 10 de 46
Curso de PHP

 Debemos recordar que PHP es sensible a las mayúsculas-minúsculas, por lo


que las siguientes variables son distintas: $hola ≠ $Hola ≠ $HOLA
 El nombre de una variable deberá comenzar (después del símbolo dólar) por
una letra o por el carácter subrayado, y seguirán por letras, números o el
carácter subrayado. NO se permiten letras con acentos.
 El ámbito de una variable, es decir, desde donde se podrá ver su valor, es
global a todo el fichero, excepto si nos encontramos en una función que su
ámbito será sólo dentro de la función (no se verá fuera de la función).
Veamos un ejemplo:
<?PHP
$numero=23;
$cadena="esto es una cadena";
echo("Esto es un número: $numero ");
echo("y esto una cadena: $cadena");
?>

que nos generará la siguiente salida:


Esto es un número: 23 y esto una cadena: esto es una cadena

Como podemos ver esto deberemos incluirlo junto a código HTML para que el
explorador nos muestre los resultados formateados, pues aunque usemos dos veces la
función "echo" el texto aparecerá seguido (observe que hemos dejado un espacio
después de la variable $numero para que lo separe del siguiente texto). Veamos otro
ejemplo:
<?PHP
$numero=23;
$cadena="esto es una cadena";
echo("Esto es un número: $numero<BR>");
echo("y esto una cadena: $cadena");
?>

y nos generará la siguiente salida:


Esto es un número: 23<BR>y esto una cadena: esto es una cadena

que en el explorador nos aparecería:


Esto es un número: 23
y esto una cadena: esto es una cadena

En este ejemplo podemos ver que hemos usado la etiqueta <BR> de HTML.
Deberemos de tener muy claro el funcionamiento del lenguaje de etiquetas HTML pues
vamos a necesitar incluirlas dentro del código PHP.
Para terminar con las variables diremos que podemos crear "variables variables",
es decir, variables cuyo nombre es variable: la variable tomará su nombre de otra
variable que haya sido declarada previamente.
Veámoslo con un ejemplo:

Página 11 de 46
Curso de PHP

<?PHP
$a="buenos";
$$a="dias";
echo("$a $buenos<BR>");
echo("$a ${$a}");
?>

cuya salida será la siguiente:


buenos dias<BR>buenos dias

y el explorador nos mostrará:


buenos dias
buenos dias

5.- Constantes.
La forma de definir una constante es con la función define(), y no llevan el
carácter dólar delante:
<?PHP
define("CONSTANTE","Valor");
echo("CONSTANTE");
?>

Por convención las constantes suelen definirse con su nombre en mayúsculas. Y


sólo podremos definir constantes que tomen valores booleanos, enteros, decimales y
cadenas.
Además existen una serie de constantes predefinidas. Entre éstas tenemos:
 TRUE  Verdadero.
 FALSE  Falso.
 _FILE_  Fichero que se está procesando.
 _LINE_  Línea del fichero que se está procesando
 _PHP_VERSION  Versión de PHP.
 PHP_OS  Sistema operativo del cliente.

6.- Expresiones y operadores.


6.1.- Expresiones.
En PHP una expresión es cualquier cosa que pueda contener un valor. Las
expresiones más simples son las variables y las constantes y otras más complicadas
serán las funciones, puesto que cada función devuelve un valor al ser invocada, es decir,
contiene un valor, por lo tanto, es una expresión.
6.2.- Operadores.
Para realizar un cálculo usaremos los siguientes operadores:
 Artíméticos:
 + suma.

Página 12 de 46
Curso de PHP

 - resta.
 *  multiplicación.
 /  división.
 %  resto al realizar una división. (10 % 3 tendrá el valor 1).
 ++  incremento en una unidad de la variable.
 --  decremento en una unidad de la variable.
 De asignación:
 =  Asigna un valor a una variable: $variable = 23;
 +=  Le suma a una variable el contenido de otra: $var1 += $var2;
(sería lo mismo que: $var1 = $var1 + $var2).
 -=  Le resta a una variable el contenido de otra: $var1 -= $var2;
(sería lo mismo que: $var1 = $var1 - $var2).
 Lógicos:
 ==  devuelve TRUE si las expresiones de los dos lados del operador
tienen el mismo valor, en caso contrario devuelve FALSE.
 ===  devuelve TRUE si las expresiones de los dos lados del operador
tienen el mismo valor y a la vez son del mismo tipo, en caso contrario
devuelve FALSE.
 !=  devuelve TRUE si las expresiones de los dos lados del operador
tienen un valor distinto, en caso contrario devuelve FALSE.
 <  menor que... (no necesita más explicación)
 >  mayor que... (no necesita más explicación)
 <=  menor o igual que... (no necesita más explicación)
 >=  mayor o igual que... (no necesita más explicación)
 and  devuelve TRUE en caso de que las dos expresiones lógicas de
ambos lados del operador sean TRUE, y FALSE en caso contrario.
 &&  idéntico a "and", pero tiene mayor precedencia (ver tabla de
precedencias más adelante).
 or  devuelve TRUE en caso de que alguna de las dos expresiones
lógicas de ambos lados del operador sean TRUE, y FALSE en caso
contrario.
 \\ idéntico a "or", pero tiene mayor precedencia (ver tabla de
precedencias más adelante).
 xor  devuelve TRUE en caso de una de las expresiones sea TRUE y la
otra FALSE, y FALSE en caso contrario. Es decir, TRUE si las dos
expresiones tienen distinto valor lógico y FALSE si las dos expresiones
tienen el mismo valor lógico (TRUE o FALSE).
 !  operador negación. Devuelve TRUE si la expresión de su derecha es

Página 13 de 46
Curso de PHP

FALSE, y FALSE si el operador de su derecha es TRUE.


 Control de errores:
 @  Situado a la izquierda de una expresión evita que nos aparezca
cualquier mensaje de error que sea generado por la expresión. En caso de
error el mensaje será almacenado en una variable de tipo "string" llamada
"$php_errormsg". En caso de que se produzcan dos errores (no tienen
por que ser en instrucciones seguidas) el mensaje del primer error se perderá
por que al producirse el segundo error se machaca el contenido de la
variable para almacenar el segundo mensaje de error.
6.3.- Precedencia de operadores.
A continuación se muestra una tabla (ver Tabla 1 Precedencia de operadores PHP)
en la que se puede ver el orden de precedencia entre los distintos operadores. Es decir,
en caso de que en una expresión haya dos operadores distintos uno a continuación del
otro nos permitirá saber que operación deberemos de realizar primero.
Por ejemplo, con la expresión "6 + 5 * 8" podríamos tener dos resultados
"88" si primero realizamos la suma (6 + 5 = 11) y después la multiplicación (11 *
8), o "46" si primero realizamos la multiplicación (8 * 5 = 40) y después la suma
(6 + 40). Para resolver este problema miramos en la tabla de precedencias que
aparece a continuación y vemos que el operador * tiene mayor precedencia (aparece
más arriba), por lo que primero realizaremos la multiplicación y luego la suma (que
tiene menos precedencia).
Asociatividad Operadores Información Adicional
no-asociativo new new
izquierda [ array()
no-asociativos ++ -- incremento/decremento
no-asociativos ! ~ - (int) (float) tipos
(string) (array)
(object) @
izquierda * / % aritmética
izquierda + - . aritmética, y cadena
izquierda << >> manejo de bits
no-asociativos < <= > >= comparación
no-asociativos == != === !== comparación
izquierda & manejo de bits, y referencias
izquierda ^ manejo de bits
izquierda | manejo de bits
izquierda && lógicos
izquierda || lógicos
izquierda ? : ternario

Página 14 de 46
Curso de PHP

derecha = += -= *= /= .= %= &= asignación


|= ^= <<= >>=
izquierda and lógicos
izquierda xor lógicos
izquierda or lógicos
izquierda , varios usos

Tabla 1 Precedencia de operadores PHP

7.- Estructuras de control.


7.1.- Estructuras de control selectivas
Estas estructuras de control nos van a permitir seleccionar que sentencias vamos a
ejecutar o interpretar.
Tenemos, al igual que en el lenguaje de programación C, dos tipos:

a) if-else
Ejecutará una serie de sentencias en función de si una condición es cierta o no. Su
sintaxis puede ser de dos formas, sin incluir el "else":
if (condición)
sentencia1

o incluyéndolo:
if (condición)
sentencia1
else
sentencia2

En ambos casos si la condición es TRUE (es cierta) entonces se ejecutará la


"sentencia1", y si la condición es FALSE en el primer caso se continuará en la
siguiente sentencia a "sentencia1" y en el segundo caso (el que tiene el "else") se
ejecutará sólo la "sentencia2".
Debemos tener en cuenta una cosa: una sentencia puede ser:
 Simple: Estará formada por una sola instrucción, y terminada en ";"
 Compuesta: Al estar formada por varias instrucciones deberán estar encerradas
por los símbolos "{" y "}".
Veamos un ejemplo en el que el caso del "if" tiene una sentencia simple y el
"else" tiene una sentencia compuesta.
if (($numero % 2)==0)
echo("El número es par");
else {
$texto="El número es impar";
echo("$texto");
}

Página 15 de 46
Curso de PHP

Observaciones al ejemplo:
 Es aconsejable usar los paréntesis que se consideren oportunos a la hora de
poner una condición, pues a veces el no incluir paréntesis nos ejecutará algo
distinto a lo esperado (debido a las precedencias).
 Fíjese que para realizar una comparación se usan dos signos igual (==). Un
fallo común es usar sólo uno, que se usa para la asignación, en cuyo caso se
realizará la asignación y si el valor asignado es distinto de creo se considerará
la condición como TRUE y si el valor de la asignación es cero se considerará la
condición como FALSE.
 En el ejemplo podría haberse el "else" en una sola línea, pero se ha puesto en
dos para que se vea el uso de las llaves para indicar el inicio y el final de una
sentencia compuesta.
Como dentro de un if-else podemos tener cualquier tipo de sentencia,
podremos tener otros if-else dentro, que a su vez podrán tener otros if-else, etc.
if ($numero == 1)
echo("El número es el uno");
else if ($numero == 2)
echo("El número es el dos");
else if ($numero == 3)
echo("El número es el tres");
else if ($numero == 4)
echo("El número es el cuatro");
else echo("El número es mayor que cuatro");

b) switch
Una forma más correcta e hacer lo visto en el ejemplo anterior sería usando la
estructura "switch". Ésta nos permite elegir entre varios valores, y por último hacer
una especie de "else", es decir, una alternativa en caso de no cumplirse ninguna de las
condiciones anteriores.
Su sintaxis es la siguiente:
switch (expresión)
{
case valor_1:
sentencia 1
break;
case valor_2:
sentencia 2
break;

case valor_n:
sentencia n
break;

Página 16 de 46
Curso de PHP

default:
sentencia n+1
}

En este caso no tenemos una condición, sino una expresión, y detrás de cada
"case" tendremos un valor posible de dicha expresión, entonces se ejecutarán las
sentencias para las que se cumpla que la expresión tenga el valor indicado tras su
"case" correspondiente.
Veamos un ejemplo para aclarar conceptos:
switch ($dia)
{
case 1:
echo("El día es LUNES");
break;
case 2:
echo("El día es MARTES");
break;
// Aquí seguirán los demás días de la semana.
case 7:
echo("El día es DOMINGO");
break;
default:
echo("El número no corresponde a ningún día de la semana");
}

En cada "case" se compara el valor de la variable "$dia" con el valor que hay
detrás de dicho "case". En caso de no ser igual se salta al siguiente "case", y si el
valor es igual entonces se ejecutan las sentencias que hay detrás del "case", pero ojo,
se ejecutarían TODAS las sentencias hasta el final del "switch" (aunque estén
incluidas dentro de otros "case"). Para evitar esto se debe poner la sentencia
"break;" detrás de la última sentencia de cada "case" y esto hace que la ejecución
salte a la siguiente instrucción que haya detrás del "switch".

Ejercicio 2.3: Escribir el código PHP necesario para que según el valor de una
variable muestre el nombre del mes correspondiente a dicho valor numérico. En caso
de que el valor no esté entre 1 y 12 se deberá mostrar un mensaje de error.
7.2.- Estructuras de control repetitivas.
Con estas estructuras podremos repetir un conjunto de sentencias el número de
veces que sea necesario para nuestro propósito. También se les llama "bucles" en
general.

a) while
La sintaxis es la siguiente:
while (condición)

Página 17 de 46
Curso de PHP

sentencia;

y como en otros casos, si la sentencia es compuesta deberán ponerse las sentencias


que forman parte de ella entre llaves.
El significado es el siguiente: la sentencia se ejecutará mientras el valor de la
condición ser TRUE, y en caso contrario se seguirá con la siguiente sentencia al
"while". Como es de suponer, dentro de la sentencia (o grupo de sentencias) del
while se deberá modificar algún valor que afecte a la "condición", pues sino nunca
saldríamos de la estructura de control o bucle while.
Veamos un ejemplo:
$num=2;
while ($num<7) {
echo("El número es: $num");
$num=$num+1;
}
echo("Fin del bucle while");

que generaría el siguiente código:


El número es: 2 El número es: 3 El número es: 4 El número es: 5 El
número es: 6 Fin del bucle while

Como puede verse el código que se genera es siempre seguido, a no ser que se lo
indiquemos con el carácter de nueva línea: \n
$num=2;
while ($num<7) {
echo("El número es: $num\n");
$num=$num+1;
}
echo("Fin del bucle while");

que generaría el siguiente código:


El número es: 2
El número es: 3
El número es: 4
El número es: 5
El número es: 6
Fin del bucle while

Aunque este texto en el navegador seguiría apareciendo todo seguido, pues ya


sabemos que en código HTML si queremos que algo vaya a la línea siguiente
deberemos poner o bien "<P>" o bien "<BR>".

Ejercicio 2.4: Crear el código PHP necesario para que muestre los números pares
entre el 10 y el 50 (incluidos). Usar la sentencia "while".

Ejercicio 2.5: Crear el código PHP necesario para que muestre los números múltiplos

Página 18 de 46
Curso de PHP

de 3 entre los números almacenados en dos variables: $inicio y $final. Usar la


sentencia "while".

Ejercicio 2.6: Crear el código PHP necesario para que muestre los números entre los
números almacenados en dos variables: $inicio y $final y nos diga de cada uno si es
múltiplo de 2, de 3 o las dos cosas a la vez. Usar la sentencia "while".

b) for
La sintaxis es la siguiente:
for (inicialización; condición; incremento)
sentencia;

El funcionamiento es muy parecido a la sentencia "while", así que veremos un


ejemplo que hará lo mismo que el ejemplo anterior con la sentencia "while" para dejar
claro su funcionamiento.
for ($num=2; $num<7; $num++)
echo("El número es: $num");
echo("Fin del bucle for");

que generaría el siguiente código:


El número es: 2 El número es: 3 El número es: 4 El número es: 5 El
número es: 6 Fin del bucle for

Como puede observarse hacen exactamente lo mismo, pero mientras "while" se


usa para cuando no se sabe con certeza cuantas veces se ha de ejecutar un sentencia,
"for" se suele usar para cuando se sabe cuantas veces se tiene que ejecutar una
sentencia. En esos últimos casos es más difícil usar el "for". (por ejemplo, cuando
accedamos a una base de datos en la que no sabemos cuantos datos tendremos)
Una observación al ejemplo anterior es el modo de incrementar la variable
"$num". Podemos ver las dos formas de hacerlo:
$num=$num+1 hacen lo mismo $num++

Ejercicio 2.7: Crear el código PHP necesario para que muestre los números pares
entre el 10 y el 50 (incluidos). Usar la sentencia "for".

Ejercicio 2.8: Crear el código PHP necesario para que muestre los números múltiplos
de 3 entre los números almacenados en dos variables: $inicio y $final. Usar la
sentencia "for".

Ejercicio 2.9: Crear el código PHP necesario para que muestre los números entre los
números almacenados en dos variables: $inicio y $final y nos diga de cada uno si es
múltiplo de 2, de 3 o las dos cosas a la vez. Usar la sentencia "for".

c) do ... while
La sintaxis es la siguiente:
do sentencia
while (condición);

Página 19 de 46
Curso de PHP

Este bucle funciona de forma idéntica al bucle "while" con la única diferencia
de que la condición se comprueba al final, por lo que la "sentencia" siempre se ejecutará
al menos una vez. En los bucles "while" y "for" podría darse el caso que nunca se
ejecute la sentencia que tiene dentro ninguna vez.
Veamos un ejemplo con "while":
$num=10;
while ($num<7) {
echo("El número es: $num");
$num=$num+1;
}
echo("Fin del bucle while");

Que nos generará la siguiente salida:


Fin del bucle while

Y otro con "do...while"


$num=10;
do {
echo("El número es: $num");
$num=$num+1;
} while ($num<7);
echo("Fin del bucle do...while");

Que nos generará la siguiente salida:


El número es: 10Fin del bucle do...while

Como puede verse, con el "while" no se ejecuta ninguna vez el bucle, mientras
que con el "do...while" se ejecuta una vez.

Ejercicio 2.10: Crear el código PHP necesario para que muestre los números pares
entre el 10 y el 50 (incluidos). Usar la sentencia "do...while".

Ejercicio 2.11: Crear el código PHP necesario para que muestre los números múltiplos
de 3 entre los números almacenados en dos variables: $inicio y $final. Usar la
sentencia "do...while".

Ejercicio 2.12: Crear el código PHP necesario para que muestre los números entre los
números almacenados en dos variables: $inicio y $final y nos diga de cada uno si es
múltiplo de 2, de 3 o las dos cosas a la vez. Usar la sentencia "do...while".

d) foreach
Esta estructura de control es muy similar a "for", pero sólo se utiliza sobre los
arrays y nos facilita en recorrer todos los elementos de un array sin necesidad de
conocer el índice que se usa en dicho array, e incluso nos informa del nombre del índice
de cada elemento.
Veamos un ejemplo:

Página 20 de 46
Curso de PHP

<?PHP
$diasSemana = array('lunes'=>1, 'martes'=>2, 'miércoles'=>3,
'jueves'=>4, 'viernes'=>5, 'sábado'=>6, 'domingo'=>7);

foreach ($diasSemana as $NumeroDia)


echo("Número del día: $NumeroDia<BR>\n");
foreach ($diasSemana as $clave => $NumeroDia)
echo("Nombre del día: $clave Número del día: $NumeroDia<BR>\n");

?>

que nos genera el siguiente código HTML (se ha usado "\n" para que el código
HTML generado sea más legible):
Número del día: 1<BR>
Número del día: 2<BR>
Número del día: 3<BR>
Número del día: 4<BR>
Número del día: 5<BR>
Número del día: 6<BR>
Número del día: 7<BR>
Nombre del día: lunes Número del día: 1<BR>
Nombre del día: martes Número del día: 2<BR>
Nombre del día: miércoles Número del día: 3<BR>
Nombre del día: jueves Número del día: 4<BR>
Nombre del día: viernes Número del día: 5<BR>
Nombre del día: sábado Número del día: 6<BR>
Nombre del día: domingo Número del día: 7<BR>

y en el explorador nos aparece (Se ha usado "<BR>" para que cada día salga en
una línea diferente):
Número del día: 1
Número del día: 2
Número del día: 3
Número del día: 4
Número del día: 5
Número del día: 6
Número del día: 7
Nombre del día: lunes Número del día: 1
Nombre del día: martes Número del día: 2
Nombre del día: miércoles Número del día: 3
Nombre del día: jueves Número del día: 4
Nombre del día: viernes Número del día: 5

Página 21 de 46
Curso de PHP

Nombre del día: sábado Número del día: 6


Nombre del día: domingo Número del día: 7

Y también podríamos colocar los índices numéricos y en el valor de cada posición


el día de la semana en texto:
<?PHP
$diasSemana = array(1=>'lunes', 2=>'martes', 3=>'miércoles',
4=>'jueves', 5=>'viernes', 6=>'sábado', 7=>'domingo');
foreach ($diasSemana as $NumeroDia)
echo("Nombre del día: $NumeroDia<BR>\n");
foreach ($diasSemana as $clave => $NumeroDia)
echo("Número del día: $clave Nombre del día: $NumeroDia<BR>\n");
?>

que nos generará el siguiente código HTML:


Nombre del día: lunes<BR>
Nombre del día: martes<BR>
Nombre del día: miércoles<BR>
Nombre del día: jueves<BR>
Nombre del día: viernes<BR>
Nombre del día: sábado<BR>
Nombre del día: domingo<BR>
Número del día: 1 Nombre del día: lunes<BR>
Número del día: 2 Nombre del día: martes<BR>
Número del día: 3 Nombre del día: miércoles<BR>
Número del día: 4 Nombre del día: jueves<BR>
Número del día: 5 Nombre del día: viernes<BR>
Número del día: 6 Nombre del día: sábado<BR>
Número del día: 7 Nombre del día: domingo<BR>

y en el explorador nos aparece:


Nombre del día: lunes
Nombre del día: martes
Nombre del día: miércoles
Nombre del día: jueves
Nombre del día: viernes
Nombre del día: sábado
Nombre del día: domingo
Número del día: 1 Nombre del día: lunes
Número del día: 2 Nombre del día: martes
Número del día: 3 Nombre del día: miércoles
Número del día: 4 Nombre del día: jueves

Página 22 de 46
Curso de PHP

Número del día: 5 Nombre del día: viernes


Número del día: 6 Nombre del día: sábado
Número del día: 7 Nombre del día: domingo

8.- Funciones.
8.1.- Funciones definidas por el usuario.
Las funciones, como su propio nombre indica, realizan una "función" que en la
mayoría de los casos se debe realizar en varios lugares de una misma página Web, por
lo que se escriben una vez y luego se utilizan las veces que sean necesario.
Su sintaxis es la siguiente:
function nombre_de_la_función (parámetros_opcionales)
{
sentencias_de_la_función;
return valor_de_retorno_opcional;
}

Como siempre, vamos a ver un ejemplo. Definiremos una función que generará un
mensaje.
function mensaje()
{
echo("Hola.\n");
}
// Código PHP dentro de la página Web.
echo("Antes de la función.\n");
mensaje();
echo("Después de la función.\n");

que nos generará el siguiente código HTML:


Antes de la función.
Hola.
Después de la función.

Ahora vamos a ver una función que recibe un argumento numérico y devuelve el
doble de dicho valor:
function doble($num)
{
$num=2*$num;
return $num;
}
// Código PHP dentro de la página Web.
$valor=doble(3);
echo("$valor\n");

que nos generará el siguiente código HTML:

Página 23 de 46
Curso de PHP

Y para terminar veremos el ejemplo de una función que toma dos argumentos y
devuelve el resultado de su suma:
function suma($num1,$num2)
{
$resultado=$num1+$num2;
return $resultado;
}
// Código PHP dentro de la página Web.
$valor=suma(5,6);
echo("$valor\n");

que nos generará el siguiente código HTML:


11

También podemos enviar argumentos a la función por defecto, es decir, en caso de


no enviarle dicho argumento la función tomará el valor por defecto. Deberemos tener en
cuenta que los argumentos por defecto siempre deben ir al final.
Veremos un ejemplo en el que la función recibe dos argumentos y devuelve el
resultado de multiplicarlos, pero en caso de sólo recibir uno devolverá el doble del
primer argumento por que el segundo argumento tiene valor por defecto "2".
function multiplica($num1,$num2=2)
{
$resultado=$num1*$num2;
return $resultado;
}
// Código PHP dentro de la página Web.
$valor= multiplica (5,6);
echo("Primera multiplicación: $valor\n");
$valor= multiplica (5);
echo("Segunda multiplicación: $valor\n");

que nos generará el siguiente código HTML:


Primera multiplicación: 30
Segunda multiplicación: 10

Ejercicio 2.13: Crear una función que reciba dos números y genere la lista de números
pares que hay entre ellos. Llamarla para comprobar que funciona. Tener en cuenta que
los dos números que reciba como argumentos no tienen que ser: el primero el menor y
el segundo el mayor.

Ejercicio 2.14: Crear una función que reciba dos números y genere la lista de números
pares que hay entre ellos. Llamarla para comprobar que funciona. Tener en cuenta que
los dos números que reciba como argumentos no tienen que ser: el primero el menor y
el segundo el mayor. Y tener en cuenta también que si sólo recibe un argumento el otro

Página 24 de 46
Curso de PHP

valor será el cero (es decir, mostrará los valores pares entre el cero y el otro valor
recibido).

Ejercicio 2.15: Crear una función que reciba un argumento numérico y nos muestre la
tabla de multiplicar de ese valor (desde 0 hasta 10). En caso de no recibir dicho
argumento se mostrarán todas las tablas de multiplicar para los números desde el 1
hasta el 10.
8.2.- Funciones de biblioteca.
Como es natural, en PHP existen una serie de bibliotecas con funciones ya
definidas y que el usuario puede usar.
Estas funciones se encuentran clasificadas, y podemos encontrar una
documentación más detallada en la página de PHP:
http://www.php.net/manual/es/funcref.php
Entre estos grupos de funciones podemos nombrar algunas como:
 Cadenas de texto.
 echo(), print(), printf(), strlen(), strcmp(), rtrim(), ltrim(), trim(),
strtolower(), strtoupper(), etc.
 Calendario.
 cal_days_in_month(), JDDayOfWeek(), JDMonthName(), etc.
 Fecha y hora.
 date(), time(), localtime(), strftime(), etc.
 Matemáticas.
 abs(), sin(), cos(), exp(), min(), max(), pi(), rand(), rount(), sqrt(), etc.
 MySQL (acceso a bases de datos).
 mysql_connect(), mysql_close(), mysql_error(), mysql_fetch_row(),
mysql_num_rows(), etc.
 Sistema de archivos.
 copy(), delete(), fopen(), fclose(), fread(), fwrite(), feof(), etc.
 Etc.

Página 25 de 46
Curso de PHP

Capítulo 3. Formularios.

1.- Definición de un formulario en PHP.


Aunque los formularios se tratan en la mayoría de los casos en la creación de
páginas Web por tratarse de código HTML, en este curso se van a tratar, por ser parte
fundamental de la programación PHP.
Por lo general se usan dos ficheros PHP cuando estamos usando formularios.
 El primero de ellos define la página que tendrá el formulario (con los
elementos que tendrá) y la forma de enviar dicho datos a la página que los
tratará.
 El segundo fichero se encargará de recibir dichos datos y de realizar las tareas
que sean necesarias con ellos.
Veámoslo con un ejemplo. Contenido del fichero con el formulario:
<FORM ACTION="prueba2.php" METHOD="POST">
Nombre: <INPUT TYPE="text" NAME="Nombre">
<INPUT TYPE="submit" VALUE="Aceptar">
</FORM>

Contenido del fichero que va a tratar los datos recibidos del formulario
"prueba2.php":
<?PHP
$TuNombre=$_REQUEST['Nombre'];
echo("Tu nombre es: $TuNombre");
?>

Tendremos el siguiente contenido en la primera pantalla del explorador:

Y el resultado al pulsar el botón "Aceptar" será:


Tu nombre es: Juan García

2.- Elementos de un formulario.


Un formulario puede tener diversos tipos de elementos. Estos pueden clasificarse
de la siguiente forma:
 Elementos de tipo INPUT
 SUBMIT
 RESET
 TEXT

Página 26 de 46
Curso de PHP

 PASSWORD
 RADIO
 CHECKBOX
 Elemento SELECT
 SELECT
 SELECT MULTIPLE
 Elemento TEXTAREA
Aunque a continuación los iremos viendo de uno en uno, la sintaxis general de
todos es la siguiente:
<INPUT TYPE="tipo" NAME="nombre" VALUE="valor">

2.1.- Crear un formulario.


Lo primero que veremos es cómo crear un formulario. Su sintaxis básica es la
siguiente:
<FORM ACTION="fichero.php" METHOD="método">

</FORM>

En este caso:
 fichero.php  lo sustituiremos por el nombre del fichero en PHP al que se le
enviará la información introducida por el usuario en la página Web.
 método  lo sustituiremos por una de las palabras: "GET" o "POST". Aunque
nos sea indiferente, la diferencia entre estos dos métodos de enviar la
información es la siguiente:
 GET: envía los datos usando el URL, es decir, se envían los datos en la línea
de direcciones, después del nombre de la página a la que se le envían. El
usuario podrá ver que datos se envían, y tienen la siguiente forma:
- www.nombre.com/pagina.php?var1=valor1&var2=valor2
 POST: se incluye en el cuerpo del formulario y se envía al agente
procesador, es decir, en principio el usuario no ve en la línea de direcciones
que datos se envían.
Los elementos del formulario deberán incluirse entre las dos etiquetas "<FORM>"
y "</FORM>". Aquí podremos poner tanto elementos del formulario como cualquier
otro texto o etiqueta HTML para dar formato al formulario.
2.2.- SUBMIT
Con este elemento nos aparecerá un botón en la página, con el cual enviaremos
los datos que se hayan rellenado en los diversos elementos que hayan en la página a la
página que se le indique.
Su sintaxis es la siguiente:
<INPUT TYPE="SUBMIT" VALUE="Enviar">

Y lo único en lo que nos vamos a fijar es el texto "Enviar"", que será el que
aparezca dentro del botón.

Página 27 de 46
Curso de PHP

2.3.- RESET
Con este botón borraremos el contenido de todos los elementos del formulario y
en caso de que éstos tengan un valor por defecto (como ya veremos más adelante) se
pondrá dicho valor a ese elemento.
<INPUT TYPE="RESET" VALUE="Borrar">

Y lo único en lo que nos vamos a fijar es el texto "Borrar"", que será el que
aparezca dentro del botón.
2.4.- TEXT.
Con este elemento el formulario nos va a permitir escribir texto. Su sintaxis es la
siguiente:
<INPUT TYPE="TEXT" NAME="Nombre" VALUE="texto_inicial" SIZE="10"
MAXLENGTH="12">

El significado de las etiquetas es el siguiente:


 TYPE="TEXT"  Nos indica que se trata de un elemento para introducir
texto.
 NAME="Nombre"  Le asigna un nombre al elemento para que pueda ser
usado por la página Web a la que se le envía la información.
 VALUE="texto_inicial"  Es el texto que tendrá inicialmente el
elemento, y que también aparecerá si le damos al botón de borrar
(TYPE="RESET").
 SIZE="10"  El tamaño del cuadro en donde podremos escribir sería de 10
letras (aproximadamente).
 MAXLENGTH="12"  Podremos escribir como máximo 12 letras (en este
caso) independientemente del tamaño del cuadro (ver SIZE).
Vamos a ver un ejemplo.
<FORM ACTION="prueba2.php" METHOD="POST">
Nombre:
<INPUT TYPE="text" NAME="Nombre" VALUE="abcd"
SIZE="30" MAXLENGTH="12">
<BR><BR>
<INPUT TYPE="submit" VALUE="Aceptar">
<INPUT TYPE="reset" VALUE="Borrar">
</FORM>

Cuyo resultado en pantalla sería el siguiente:

Y cuando llamáramos al fichero "prueba2.php":


<?PHP

Página 28 de 46
Curso de PHP

$TuNombre=$_REQUEST['Nombre'];
echo("Tu nombre es: $TuNombre");
?>

obtendríamos la siguiente pantalla:

2.5.- PASSWORD
Este elemento funciona de igual forma que el "TEXT", con la diferencia de que
cuando escribimos el texto no nos aparece, si no que aparecen asteriscos. Como está
claro, se usa para cuando pedimos al usuario su contraseña.
La sintaxis es:
<INPUT TYPE="PASSWORD" NAME="Clave" VALUE="texto_inicial"
SIZE="10" MAXLENGTH="12">

Y para este caso no se verá ningún ejemplo por su semejanza al tipo "TEXT".
Como observación interesante también podemos darle un valor inicial, por ejemplo,
para cuando queramos que la contraseña sea una utilizada anteriormente, aunque esto es
muy peligroso.
2.6.- RADIO
Este tipo de elemento se usa para que el usuario seleccione sólo una entre varias
posibles opciones. Su sintaxis es:
<INPUT TYPE="RADIO" NAME="nombre" VALUE="valor" CHECKED>

y las etiquetas tienen el siguiente significado:


 TYPE="RADIO"  Nos indica que se trata de un elemento del tipo que
acabamos de explicar.
 NAME="Nombre"  Le asigna un nombre al elemento para que pueda ser
usado por la página Web a la que se le envía la información. Todos los
elementos que queramos que sean excluyentes (que sólo uno de ellos pueda ser
marcado) deberán tener aquí el mismo nombre.
 VALUE="valor"  Con esta etiqueta le damos el valor que se le asignará a
la variable "NAME" cuando se le envíe a la página seleccionada en el botón
"SUBMIT".
 CHECKED  Esta etiqueta sólo debe ponerse en la opción que queramos que
aparezca seleccionada por defecto.
Veamos un ejemplo con dos grupos de elementos de este tipo:
<FORM ACTION="prueba2.php" METHOD="POST">
Sexo:
<INPUT TYPE="RADIO" NAME="Sexo" VALUE="hombre" CHECKED>Hombre
<INPUT TYPE="RADIO" NAME="Sexo" VALUE="mujer">Mujer
<BR><BR>
¿Carnet de conducir?

Página 29 de 46
Curso de PHP

<INPUT TYPE="RADIO" NAME="Carnet" VALUE="si" CHECKED>Si


<INPUT TYPE="RADIO" NAME="Carnet" VALUE="no">No
<BR><BR>
<INPUT TYPE="submit" VALUE="Aceptar">
<INPUT TYPE="reset" VALUE="Borrar">
</FORM>

que nos muestra la siguiente pantalla:

y al pulsar el botón "Aceptar" iremos a la página "prueba2.php", que tiene el


siguiente contenido:
<?PHP
$Sexo=$_REQUEST['Sexo'];
$Carnet=$_REQUEST['Carnet'];
echo("Sexo: $Sexo");
echo("<BR>");
echo("Carnet: $Carnet");
?>

con la que obtenemos el siguiente resultado:

Como puede observarse tenemos dos grupos de elementos de tipo "RADIO", y al


pulsar el botón de "Aceptar" se envían a la siguiente página los valores definidos en la
etiqueta "VALUE" del elemento seleccionado.
Y también hemos de observar que el texto que aparece junto a los elementos
"RADIO" (las palabras "Hombre", "Mujer", etc.) es externo al elemento, es decir, estos
elementos no tienen asociado ningún título, al igual que sucedía con "TEXT",
"TEXTAREA", etc.
2.7.- CHECKBOX
Este elemento nos permite seleccionar opciones independientemente unas de
otras, es decir, podremos seleccionar una, varias o incluso ninguna.
Su sintaxis es:
<INPUT TYPE="CHECKBOX" NAME="nombre" CHECKED>

y las etiquetas tienen el siguiente significado:


 TYPE="CHECKBOX"  Nos indica que se trata de un elemento del tipo que
acabamos de explicar.

Página 30 de 46
Curso de PHP

 NAME="Nombre"  Le asigna un nombre al elemento para que pueda ser


usado por la página Web a la que se le envía la información. En este caso
deberemos poner nombres distintos a todos los elementos.
 CHECKED  Esta etiqueta hará que nos aparezca seleccionado este elemento
por defecto.
Veamos un ejemplo:
<FORM ACTION="prueba2.php" METHOD="POST">
¿Carnet de conducir?
<INPUT TYPE="CHECKBOX" NAME="Coche" CHECKED>Coche
<INPUT TYPE="CHECKBOX" NAME="Moto">Moto
<INPUT TYPE="CHECKBOX" NAME="Camion">Camión
<BR><BR>
<INPUT TYPE="submit" VALUE="Aceptar">
<INPUT TYPE="reset" VALUE="Borrar">
</FORM>

que nos muestra la siguiente pantalla:

y entonces vamos a la página "prueba2.php":


<?PHP
$Coche=$_REQUEST['Coche'];
$Moto=$_REQUEST['Moto'];
$Camion=$_REQUEST['Camion'];
echo("Coche: $Coche");
if ($Coche=="on") echo(" --> Opción COCHE seleccionada.");
echo("<BR>");
echo("Moto: $Moto");
if ($Moto=="on") echo(" --> Opción MOTO seleccionada.");
echo("<BR>");
echo("Camion: $Camion");
if ($Camion=="on") echo(" --> Opción CAMION seleccionada.");
?>

que nos mostrará la siguiente página:

Podemos observar que una casilla seleccionada nos envía el valor "on", y de esta
forma podemos realizar las acciones que sean oportunas.

Página 31 de 46
Curso de PHP

2.8.- TEXTAREA
En el caso de "TEXT" sólo podemos escribir una línea, es decir, que si pulsamos
INTRO lo que sucede normalmente es lo mismo que si pulsamos sobre el botón
"SUBMIT", así que si queremos permitir que se introduzcan más líneas usaremos este
elemento.
Su sintaxis es:
<TEXTAREA NAME="nombre" ROWS="número_de_filas"
COLS="número_de_columnas">Texto inicial...
</TEXTAREA>

Y las etiquetas tienen el siguiente significado:


 NAME="nombre"  Nombre que se usará para enviar la información a la
otra página.
 ROWS="número_de_filas"  Número de filas que tendrá el área para
escribir el texto. Esto no quiere decir que no podamos escribir más. Si
escribimos más líneas nos aparecerán las barras de desplazamiento.
 COLS="número_de_columnas"  Número de columnas que tendrá el
área para el texto.
 Lo que aparezca después del signo ">" que cierra la etiqueta "TEXTAREA"
hasta el delimitador de final de etiqueta "</TEXTAREA>" será el texto inicial
que tendremos en la página, incluidos los saltos de línea que hayan.
Veamos un ejemplo:
<FORM ACTION="prueba2.php" METHOD="POST">
Texto:
<TEXTAREA NAME="Texto" ROWS="5" COLS="7">12345</TEXTAREA>
<BR><BR>
<INPUT TYPE="submit" VALUE="Aceptar">
<INPUT TYPE="reset" VALUE="Borrar">
</FORM>

que genera la siguiente pantalla:

Y cuando llamáramos al fichero "prueba2.php":


<?PHP
$TextoEscrito=$_REQUEST['Texto'];
echo("Has escrito el texto: $TextoEscrito");

Página 32 de 46
Curso de PHP

?>

obtendríamos la siguiente pantalla:

Como se ha comentado antes, podemos escribir varias líneas, incluso aunque no


queden visibles, ya que automáticamente muestra las barras de desplazamiento:

Que nos mostrará el contenido que ha recibido:

Pero ojo, aunque en el "TEXTAREA" hayamos pulsado la tecla INTRO, cuando lo


enviemos a la página "prueba2.php" aparecerá todo seguido y ocupando toda la ventana
a lo largo. Eso es debido a que en HTML se ignoran los saltos de línea o "INTRO", así
que si queremos que los ponga deberemos convertir los saltos de línea a la etiqueta
"<BR>" con la función "str_replace" de la siguiente forma (en el fichero
"prueba2.php"):
<?PHP
$TextoEscrito=$_REQUEST['Texto'];
$TextoEscrito=str_replace(chr(13),'<BR>',$TextoEscrito);
echo("Has escrito el texto: $TextoEscrito");
?>

y nos aparecerá el texto en pantalla como se muestra a continuación:

que, como podemos observar, hay un salto de línea después del texto "...que son
visibles."
2.9.- SELECT
Con este elemento nos muestra una lista desplegable de la cual sólo podremos
elegir una de las opciones que aparecen.
Su sintaxis es la siguiente:
<SELECT NAME="Nombre">
<OPTION SELECTED>Opcion1
<OPTION>Opcion2

Página 33 de 46
Curso de PHP

<OPTION>Opcion3
</SELECT>

y las etiquetas tienen el siguiente significado:


 NAME="Nombre"  Le asigna un nombre al elemento para que pueda ser
usado por la página Web a la que se le envía la información.
 <OPTION>Opcion1  Primero pondremos para cada opción de la lista la
etiqueta "<OPTION>" y después el texto que queremos que nos aparezca en la
lista desplegable, y que será el texto que se envíe a la página a la cual vayamos
al pulsar el botón de "SUBMIT". Si queremos que una de las opciones aparezca
seleccionada inicialmente pondremos la palabra "SELECTED" detrás de
"OPTION".
Veamos un ejemplo:
<FORM ACTION="prueba2.php" METHOD="POST">
<SELECT NAME="Estudios">
<OPTION SELECTED>ESO
<OPTION>Bachiller
<OPTION>Ciclo Formativo Medio
<OPTION>Ciclo Formativo Superior
<OPTION>Estudios Universitarios
</SELECT>
<INPUT TYPE="submit" VALUE="Aceptar">
<INPUT TYPE="reset" VALUE="Borrar">
</FORM>

que nos muestra la siguiente pantalla:

y entonces vamos a la página "prueba2.php":


<?PHP
$Estudios=$_REQUEST['Estudios'];
echo("Estudios: $Estudios");
?>

que nos mostrará la siguiente página:

2.10.- SELECT MULTIPLE


Con este elemento en vez de aparecer una lista desplegable aparece una lista en la
cual se ven varios de los elementos. Además nos permitirá seleccionar varios de los

Página 34 de 46
Curso de PHP

elementos a la vez si así lo deseamos.


Su sintaxis es la siguiente:
<SELECT MULTIPLE NAME="Nombre" SIZE="3">
<OPTION SELECTED>Opcion1
<OPTION>Opcion2
<OPTION>Opcion3
</SELECT>

y las etiquetas tienen el siguiente significado:


 NAME="Nombre"  Le asigna un nombre al elemento para que pueda ser
usado por la página Web a la que se le envía la información.
 SIZE="3" Nos indica la cantidad de elementos que se verán de la lista.
Para acceder a los demás elementos podremos movernos por la lista con la
barra de desplazamiento que aparece a la derecha.
 MULTIPLE  Con esta etiqueta estamos indicando que podremos seleccionas
más de una de las opciones que aparecen. Para ello deberemos pulsar la tecla
"Ctrl" mientras hacemos clic en las opciones deseadas.
 <OPTION>Opcion1  Primero pondremos para cada opción de la lista la
etiqueta "<OPTION>" y después el texto que queremos que nos aparezca en la
lista desplegable, y que será el texto que se envíe a la página a la cual vayamos
al pulsar el botón de "SUBMIT". Si queremos que alguna de las opciones
aparezca seleccionada inicialmente pondremos la palabra "SELECTED" detrás
de "OPTION".
Veamos un ejemplo:
<FORM ACTION="prueba2.php" METHOD="POST">
Elija un día de la semana:
<BR><BR>
<SELECT NAME="Semana" SIZE="5">
<OPTION>Lunes
<OPTION>Martes
<OPTION>Miércoles
<OPTION>Jueves
<OPTION>Viernes
<OPTION>Sábado
<OPTION>Domingo
</SELECT>
<BR><BR>
<INPUT TYPE="submit" VALUE="Aceptar">
<INPUT TYPE="reset" VALUE="Borrar">
</FORM>

que nos muestra la siguiente pantalla:

Página 35 de 46
Curso de PHP

y entonces vamos a la página "prueba2.php":


<?PHP
$Dia=$_REQUEST['Semana'];
echo("Dia de la semana elegido: $Dia");
?>

que nos mostrará la siguiente página:

Ahora vamos a ver como deberíamos de hacerlo si queremos que el usuario pueda
seleccionar varios elementos de la lista. Deberemos indicar que se trata de un "SELECT
MULTIPLE", y el nombre ("NAME") de la variable que contendrá los valores será un
array (indicado con los corchetes: "[]").
<FORM ACTION="prueba2.php" METHOD="POST">
Elija uno o varios días de la semana:
<BR><BR>
<SELECT MULTIPLE NAME="Semana[]" SIZE="5">
<OPTION SELECTED>Lunes
<OPTION>Martes
<OPTION SELECTED>Miércoles
<OPTION>Jueves
<OPTION>Viernes
<OPTION>Sábado
<OPTION>Domingo
</SELECT>
<BR><BR>
<INPUT TYPE="submit" VALUE="Aceptar">
<INPUT TYPE="reset" VALUE="Borrar">
</FORM>

La pantalla que nos mostrará será la siguiente (con los días "lunes" y "miércoles"
seleccionados inicialmente):

Página 36 de 46
Curso de PHP

y entonces vamos a la página "prueba2.php":


<?PHP
$Semana=$_REQUEST['Semana'];
$DiasElegidos=count($Semana);
echo("Dias de la semana elegidos:<BR>");
for ($i=0; $i<$DiasElegidos; $i++)
echo("$Semana[$i]<BR>");
// Otra forma de hacerlo:
echo("<BR>Otra forma de hacerlo:<BR>");
foreach ($Semana as $Dia)
echo("$Dia<BR>");
?>

que nos mostrará la siguiente página:

3.- Formulario en un único fichero.


Vistos los elementos posibles que puede tener un formulario vamos a mostrar
ahora como hacerlo todo en un único fichero. Las ventajas de esto es que usamos menos
ficheros y validamos el formulario dentro del propio formulario.
La lógica del fichero PHP será la siguiente:
si se ha enviado el formulario
procesaremos los datos del formulario
si no
mostraremos el formulario

Veamos un ejemplo de un formulario simple en un único fichero (prueba.php):


if ($_POST){ // Si se ha enviado el formulario
echo("Formulario recibido:<BR>");
$Nombre=$_REQUEST['Nombre'];

Página 37 de 46
Curso de PHP

$Apellidos=$_REQUEST['Apellidos'];
echo("Tu nombre es: '$Nombre'<BR>");
echo("Tus apellidos son: '$Apellidos'<BR>");
}else{ // No se ha enviado el formulario: lo pongo.
?>
<FORM ACTION="prueba.php" METHOD="POST">
Rellena tus datos:
<BR><BR>
Nombre:
<INPUT TYPE="text" NAME="Nombre" VALUE=""
SIZE="30" MAXLENGTH="20"><BR><BR>
Apellidos:
<INPUT TYPE="text" NAME="Apellidos" VALUE=""
SIZE="30" MAXLENGTH="20"><BR><BR>
<INPUT TYPE="submit" VALUE="Aceptar">
<INPUT TYPE="reset" VALUE="Borrar">
</FORM>
<?PHP
}
?>

Lo primero que debemos observar es que el código HTML y el PHP se mezclan


entre ellos sin ningún problema, pero debemos tener cuidado con esto, pues al principio
resulta complicado. Se podría haber hecho todo en PHP, pero deberíamos haber usado
la función "echo()" para pasar dentro del código PHP cada una de las líneas HTML.
El resultado de la primera vez que visitemos la página "prueba.php" será el
siguiente:

Una vez rellenados los datos, tal y como se muestra a continuación:

Página 38 de 46
Curso de PHP

Pulsaremos el botón "Aceptar" y nos volveremos a la página "prueba.php" pero en


este caso se detecta que hemos enviado datos ("if ($_POST)") y se ejecuta el
código que nos genera la siguiente pantalla:

Ejercicio 3.1: Crear un formulario (en un único fichero) que nos pida nuestros nombre,
apellidos, sexo (RADIO), que vehículo tenemos: bicicleta, coche o moto (CHECKBOX),
y que estudios tenemos: ESO, Bachiller, Ciclo Formativo, o Universitario (SELECT).
Después mostrar los datos por pantalla.
El último paso para perfeccionar nuestra página PHP sería validar los datos
enviados en el formulario y en caso de que haya algún error (un campo está vacío y
debería contener algo, etc.) mostrar el formulario con los errores que hayan e
indicárselo al usuario.
Para ello la lógica del fichero PHP sería la siguiente:
si se ha enviado el formulario
si hay errores
mostrar formulario con errores
si no hay errores
procesaremos los datos del formulario
si no
mostraremos el formulario

Página 39 de 46
Curso de PHP

Capítulo 4. Cookies.

Las Cookies nos permiten almacenar información en el ordenador del usuario y de


esta forma identificar al usuario cuando vuelva a conectarse.
Un ejemplo de cuando podemos usar las cookies es en una página que está en
varios idiomas. Al seleccionar el usuario el idioma en el que quiere ver la página esto se
almacena en una cookie y la próxima vez que visite la página se irá a la página en el
idioma que se seleccionó anteriormente.
Veamos la sintaxis de la función que nos permite almacenar una cookie:
bool setcookie ( string nombre [, string valor [, int expirar
[, string ruta [, string dominio [, bool segura]]]]] )

Como podemos ver se trata de una función que devuelve un valor booleano. Si
existe salida antes de llamar esta función, setcookie() fallará y devolverá FALSE.
Si setcookie() se ejecuta con éxito, devolverá TRUE. Esto no indica si el usuario
aceptó la cookie.
Las cookies deben ser enviadas antes de cualquier salida (ésta es una restricción
de protocolo). Esto requiere que coloque las llamadas a esta función antes de cualquier
salida, incluyendo las etiquetas <html> y <head> así como cualquier espacio en
blanco.
Antes de pasar a explicar sus argumentos obsérvese que sólo es obligatorio el
primer argumento: el "nombre" de la cookie.
 nombre  Nombre de la cookie.
 valor  Valor que contendrá la cookie.
 expirar  La hora en la que expira la cookie. Este valor es una marca de
tiempo Unix en segundos, es decir, para que la cookie expire dentro de 30
minutos deberemos ponerle el valor: time() + 30 * 60. Esto nos indica
que expirará dentro de 30 minutos (30 * 60) a partir de la hora actual
(time()).
 ruta  La ruta en el servidor en la que estará disponible la cookie. Si se define
como '/', la cookie estará disponible en el dominio completo. Si se define
como '/carpeta/', la cookie estará disponible únicamente al interior del
directorio '/carpeta/' y todos sus subdirectorios en el dominio como por
ejemplo '/carpeta/dibujos/'. El valor predeterminado es el directorio
actual en el que se define la cookie.
 dominio  El dominio en el que la cookie está disponible. Para lograr que la
cookie esté disponible en todos los subdominios de 'example.com' entonces
es necesario definir este valor como '.example.com'. El carácter '.' no es
requerido pero hace a la cookie compatible con más navegadores. Definir su
valor como 'www.example.com' hará que la cookie esté disponible

Página 40 de 46
Curso de PHP

únicamente en el subdominio 'www'.


 segura  Indica que la cookie debería ser transmitida únicamente sobre una
conexión HTTPS segura. Cuando su valor es TRUE, la cookie será definida
únicamente si existe una conexión segura. El valor predeterminado es FALSE.
Principalmente vamos a usar los argumentos "nombre", "valor" y "expirar".
Para acceder a las Cookies podremos acceder mediante la matriz
"$_COOKIE["nombre"]". Y deberemos tener en cuenta que una cookie no será
visible hasta la siguiente carga de una página.
Veamos un ejemplo sencillo. En el fichero "prueba.php" definimos la Cookie
y le damos un valor.
<?PHP
setcookie("Ejemplo","Valor de la cookie Ejemplo.");
?>
<HTML>
<BODY>
Ejemplo de Cookies:<BR>
<A HREF="prueba2.php">Pulse aquí...</A>
</BODY>
</HTML>

Este código nos muestra la siguiente pantalla:

Al pulsar sobre el enlace iremos a la página "prueba2.php", donde nos


mostrará el valor de la Cookie. Se ha de observar que como debemos usar comillas
dobles para referenciar el nombre de la Cookie entre los corchetes, no podemos usar las
comillas dobles en la función echo.
<HTML>
<BODY>
Usamos la cookie:<BR>
<?PHP
echo($_COOKIE["Ejemplo"]);
?>
</BODY>
</HTML>

Que nos mostrará en el explorador lo siguiente:

Ejercicio 4.1: Realizar una página que la primera vez que la visite un usuario le

Página 41 de 46
Curso de PHP

solicite el idioma en la que quiere verla (español/inglés) y que sus siguientes visitas
vaya directamente a la página en el idioma seleccionado. La Cookie deberá expirar a
la semana siguiente.

Ejercicio 4.2: Realizas una página que cuando sea la primera vez que se visita
aparezca un mensaje: "NO habías visitado aún esta página...", y las siguientes veces
nos dirá "Has visitado la página X veces."

Página 42 de 46
Curso de PHP

Capítulo 5. Sesiones.

Hasta el momento, cuando visitamos una página, los valores de las variables sólo
se mantienen en esa página, pues el protocolo HTTP establece una conexión cada vez
que solicita una página y al recibirla cierra dicha conexión.
Si queremos mantener el estado de una conexión deberemos usar las "sesiones",
que nos permitirán mantener variables con sus correspondientes valores aunque
visitemos varias páginas (siempre que las páginas tengan definida una sesión).
Las funciones que nos permiten manejar sesiones son las siguientes:
 session_start()  Inicializa una sesión y le asigna un identificador de
sesión único. Si la sesión ya está iniciada, carga todas las variables de sesión.
Este código debe ser puesto antes de cualquier código HTML.
 session_register(variable)  Registra una variable de sesión.
 session_unregister(variable)  Elimina una variable de sesión.
 session_is_registered(variable)  Comprueba si una variable
está registrada. Devuelve true en caso afirmativo y false en caso contrario.
 session_destroy()  Cierra una sesión.
Antes de seguir deberemos tener en cuenta que en el fichero de configuración
"php.ini" deberemos tener el siguiente valor:
 register_globals = Off
Ahora vamos a ver un ejemplo en el que tendremos 3 ficheros con sesiones.
Definiremos una variable de sesión en el primero, y la mostraremos en los tres ficheros.
Fichero principal: "prueba.php"
<?PHP
session_start();
$_SESSION['Variable']="ABCDEFGHIJKLM";
?>
<HTML>
<BODY>
Página inicial...<BR>
<?PHP
$Valor=$_SESSION['Variable'];
echo("La variable tiene el valor: $Valor<BR>");
?>
<A HREF="prueba2.php">Segunda página</A>
</BODY>

Página 43 de 46
Curso de PHP

</HTML>

Pantalla que nos aparecerá:

Segundo fichero: "prueba2.php"


<?PHP
session_start();
?>
<HTML>
<BODY>
Esta es la otra página<BR>
<?PHP
$Valor=$_SESSION['Variable'];
echo("Valor de la variable: $Valor<BR>");
?>
<A HREF="prueba3.php">Tercera página</A>
</BODY>
</HTML>

Pantalla que nos aparecerá:

Tercer fichero: "prueba3.php"


<?PHP
session_start();
?>
<HTML>
<BODY>
Esta es la tercera página<BR>
<?PHP
$Valor=$_SESSION['Variable'];
echo("Valor de la variable: $Valor<BR>");
?>
</BODY>
</HTML>

Pantalla que nos aparecerá:

Página 44 de 46
Curso de PHP

Obsérvese que sucede si eliminamos la llamada a la función


"session_start()" en alguno de los tres ficheros. Entonces la variable en ese
fichero no estará definida y no aparecerá ningún texto.
Las sesiones suelen utilizarse para realizar el control de acceso a una página o
páginas, o en las páginas del tipo de "carrito de la compra".

Página 45 de 46
Curso de PHP

Capítulo 6. Ejercicios Finales.

Ejercicio 6.1: Realizar la página de una tienda que vende camisetas. En dicha página
podremos elegir entre camisetas de varios colores (negra, roja, azul y verde), para
cada una de ellas la talla (pequeña, mediana, grande y super) y la cantidad. Deberemos
de rellenar nuestros datos del pedido (nombre, dirección, población y provincia) y al
realizar el pedido se deberá comprobar que se han rellenado todos nuestros datos y que
al menos se ha pedido una camiseta. El resultado del pedido se almacenará en un
fichero de texto (Pedidos.txt). Intentar realizar el ejercicio en un solo fichero
(index.php).

Ejercicio 6.2: Volver a realizar el ejercicio anterior (Ejercicio 6.1: ) pero en este caso
la página principal nos debe pedir un usuario y una clave que estará definida dentro
del fichero ".php". En caso de que el usuario trate de acceder directamente a la
página que tiene el formulario de pedido, se mostrará un error y nos hará volver a la
página principal para pedirnos el usuario y la clave.

Ejercicio 6.3: Volver a realizar el ejercicio anterior (Ejercicio 6.2: ) pero ahora
definiremos dentro del fichero ".php" dos arrays que contendrán respectivamente la
lista de usuarios y claves que podrán acceder a la página de pedidos.

Página 46 de 46

You might also like