Está en la página 1de 26

PHP

PHP es un lenguaje de programación dirigido a la creación de páginas web. Es un lenguaje de programación


procedural, interpretado y no tipificado, actualmente puede utilizarse una sintaxis de programación orientada
a objetos.
En esta página se tratan los temas siguientes:

Páginas web, lenguajes de programación y bases de datos

La World Wide Web (o simplemente, la web) fue ideada por Tim Berners Lee en 1990, empezó a funcionar en
el CERN en 1991 y se extendió rápidamente por las Universidades del mundo (en aquel entonces Internet era
una red a la que sólo tenían acceso entidades gubernamentales, particularmente entidades educativas). En
1992 algunos proveedores comerciales empezaron a dar acceso a particulares y empresas, lo que convirtió la
web en una red de comunicación universal que ha transformado nuestras vidas.
En sus primeros años, las páginas web solían ser documentos de texto guardado en algún directorio de un
servidor y a las que se accedía mediante los primeros navegadores web. Cada página web que se veía en el
navegador correspondía a un fichero en el servidor.
La imagen siguiente ilustra de forma simplificada el esquema de funcionamiento:

 El usuario escribe la dirección de la página web en su navegador


 (1) El navegador la solicita al servidor web correspondiente (este paso requiere la participación de
máquinas intermedias que no se comentan aquí)
 (2) El servidor lee el fichero que corresponde a esa página web
 (3) El servidor envía el fichero al navegador
 El navegador muestra la página web al usuario

Este esquema de funcionamiento es suficiente para sitios web pequeños creados por una sola persona, pero
en cuanto un sitio web empieza a crecer, empiezan a surgir los problemas. Por ejemplo:
 si el sitio contiene muchas páginas es necesario crear menús que permitan orientarse por el sitio.
Como cada página debe contener el menú, cualquier cambio en el menú obliga a modificar todas las
páginas.
 si el sitio modifica a menudo su contenido (por ejemplo, la web de un periódico), tener que editar
manualmente los ficheros ralentiza el proceso.
 si el sitio es creado por varias personas, cualquiera puede modificar por error los ficheros de otras
personas y si varias personas quieren modificar el mismo fichero se pueden producir conflictos.
 si se quiere permitir la participación del público (foros, comentarios en blogs, etc), esta participación
depende de que uno de los autores modifique los ficheros, lo que ralentiza el proceso.
 si personas sin conocimientos técnicos quieren participar en la creación del sitio, pueden cometer
errores editando los ficheros.

La solución es que las páginas no sean ficheros estáticos guardados en el disco, sino que las páginas se
generen automáticamente cuando el usuario las solicite.
Por ejemplo, para resolver el problema de los menús comentado anteriormente, una solución sería que el
menú estuviera en un fichero aparte y cuando el usuario solicitara una página, el menú se añadiera al
principio de cada página (nota: no me refiero a la composición de páginas mediante frames, una solución
desaconsejada hace muchos años, sino a componer la página web a partir de varios ficheros).
Esa generación de las páginas se puede hacer de varias maneras. Una de ellas es recurrir a lenguajes de
programación generales o específicos (como PHP). Desde sus inicios, los servidores web permiten recurrir a
lenguajes de programación para generar las páginas web.
La imagen siguiente ilustra de forma simplificada el esquema de funcionamiento:

 El usuario escribe la dirección de la página web en su navegador


 (1) El navegador la solicita al servidor web correspondiente (este paso requiere la participación de
máquinas intermedias que no se comentan aquí)
 (2) El servidor detecta que es un programa PHP y lo envía al intérprete del lenguaje
 (3) El intérprete del lenguaje completa la ejecución del programa.
 (4) El resultado final del programa (por ejemplo, el código fuente de una página web) se envía al
servidor
 (5) El servidor envía el fichero al navegador
 El navegador muestra la página web al usuario

Es importante señalar que el usuario no puede saber si la página web estaba guardada en el disco duro o se ha
generado en ese momento, de la misma manera que no puede saber qué lenguaje de programación que ha
generado el documento. El navegador recibe el documento en ambos un documento de texto que contiene
etiquetas html y lo muestra al usuario.
A veces, el usuario puede suponer que la página que se le está sirviendo se ha generado mediante PHP ya que
la dirección de la página termina por .php en vez del habitual .html, aunque no se puede estar seguro de que
sea realmente así.

Pero el uso de lenguajes de programación no suele ser suficiente. Si la información está diseminada en
multitud de trozos para organizar y acceder fácilmente a toda esa información, es conveniente utilizar algún
sistema gestor de bases de datos. Existen muchos sistemas gestores de bases de datos y los lenguajes de
programación pueden conectarse a ellas y realizar consultas.
La imagen siguiente ilustra de forma simplificada el esquema de funcionamiento:

 El usuario escribe la dirección de la página web en su navegador


 (1) El navegador la solicita al servidor web correspondiente (este paso requiere la participación de
máquinas intermedias que no se comentan aquí)
 (2) El servidor detecta que es un programa PHP y lo envía al intérprete del lenguaje
 (3) El intérprete del lenguaje ejecuta el programa. Si el programa incluye consultas a la base de datos,
estas se realizan.
 (4) La base de datos entrega al intérprete el resultado de las consultas
 (5) El intérprete del lenguaje completa la ejecución del programa.
 (6) El resultado final del programa (por ejemplo, el código fuente de una página web) se envía al
servidor
 (7) El servidor envía el fichero al navegador
 El navegador muestra la página web al usuario

Como antes, el usuario no puede saber si se ha accedido o no a un sistema gestor de bases de datos. El
navegador recibe el documento en ambos un documento de texto que contiene etiquetas html y lo muestra al
usuario.
Fragmentos PHP

Los fragmentos de código PHP están delimitados por las etiquetas <?php (etiqueta inicial) y ?> (etiqueta final)
y contienen las instrucciones de PHP. Más adelante se comentan otros posibles delimitadores de fragmentos
de código PHP.
<?php
print "<p>Hola</p>\n";
?>

<p>Hola</p>

Los fragmentos de PHP no pueden anidarse, es decir, no puede haber un fragmento dentro de otro.
Si en una misma página hay varios fragmentos PHP, se tratan como un único programa.

Fragmentos PHP y fragmentos HTML

En una página PHP todo lo que no son fragmentos PHP son fragmentos HTML. Los fragmentos de código
HTML no están delimitados por ninguna etiqueta.
<?php
print "<p>Hola</p>\n";
?>
<p>¿Cómo estás?</p>
<p>Hola</p>
<p>¿Cómo estás?</p>

Cuando un navegador solicita una página PHP a un servidor, el servidor lee el archivo secuencialmente y va
generando el resultado:
 si la página contiene fragmentos HTML, el código HTML se incluye sin modificados en el resultado.
 si la página contiene fragmentos PHP, se ejecutan las instrucciones que se encuentran en los
fragmentos de código PHP. Si esas instrucciones generan texto, el texto se incluye en el resultado.

Cuando el servidor termina de leer el archivo, el servidor envía al navegador el resultado.


Es importante señalar que:
 El navegador recibe una página web (es decir, únicamente código HTML), no recibe código PHP.
 Los fragmentos PHP tiene que generar las etiquetas HTML que se necesiten para una correcta
visualización de la página web en el navegador.
 El navegador no puede distinguir en la página recibida, qué parte ha sido generada en un fragmento
PHP y qué parte se encontraba ya en un fragmento HTML.
 Como la página PHP se lee secuencialmente, el código HTML generado por los fragmentos PHP y el
incluido en los fragmentos HTML se encuentran en el mismo orden en que se encontraban los
fragmentos en la página PHP.
Los ejemplos siguientes muestran diferentes programas PHP que generan el mismo resultado:

Programa con un único fragmento PHP

<?php
print "<p>Hola</p>\n";
print "<p>¿Cómo estás?</p>\n";
print "<p>Adios</p>\n";
?>
<p>Hola</p>
<p>¿Cómo estás?</p>
<p>Adios</p>

Programa con un fragmento PHP y un fragmento HTML

<p>Hola</p>
<?php
print "<p>¿Cómo estás?</p>\n";
print "<p>Adios</p>\n";
?>
<p>Hola</p>
<p>¿Cómo estás?</p>
<p>Adios</p>

Programa con dos fragmentos PHP y un fragmento HTML

<?php
print "<p>Hola</p>\n";
?>
<p>¿Cómo estás?</p>
<?php
print "<p>Adios</p>\n";
?>
<p>Hola</p>
<p>¿Cómo estás?</p>
<p>Adios</p>

En un fragmento PHP no pueden escribirse etiquetas HTML sueltas; el código HTML debe generarse siempre
con instrucciones de PHP. El programa siguiente no puede ni siquiera ejecutarse y produce un error de
sintaxis:

<?php
<p>Hola</p>
?>
Parse error: syntax error, unexpected '<' in ejemplo.php on line 2

Comentarios en páginas PHP

En un fragmento PHP se pueden comentar líneas de código utilizando:


 // para comentar el resto de la línea (como en C++)
 # para comentar el resto de la línea (como en la shell de Unix o en Perl)
 /* */ para delimitar varias líneas (como en C)

Estos comentarios no se añaden al código HTML generado por la página, por lo que no pueden verse en el
navegador.
<p><strong>
<?php
// La instrucción print escribe texto en la página web
print "Hola"; // El comentario se puede escribir al final de la línea
?>
</strong></p>
<p><strong>Hola</strong></p>
<p><strong>
<?php
# La instrucción print escribe texto en la página web
print "Hola"; # El comentario se puede escribir al final de la línea
?>
</strong></p>
<p><strong>Hola</strong></p>
<?php
print "<p><strong>";
/* Dentro de un fragmento PHP no se pueden escribir
etiquetas html sueltas, tienen que estar siempre
incluidas en instrucciones print
*/
?>
Hola
<?php
print "</strong></p>";
?>
<p><strong>Hola</strong></p>

Cadenas
En PHP, las cadenas de texto se delimitan por comillas (dobles o simples).
<?php
print "<p>Esto es una cadena.</p>\n";
?>
<p>Esto es una cadena.</p>
<?php
print '<p>Esto es otra cadena.</p>';
?>
<p>Esto es otra cadena.</p>

Diferencias entre comillas simples y dobles

Aunque en los ejemplos anteriores las comillas simples o dobles son equivalentes, en otras situaciones no lo
son. Por ejemplo, PHP no sustituye las variables que se encuentran dentro de cadenas delimitadas con
comillas simples, mientras que sí que lo hace (pero no siempre) si se utilizan comillas dobles, como se ve en el
siguiente ejemplo:
<?php
$cadena = "Hola";
print "<p>La variable contiene el valor: $cadena</p>";
?>
<p>La variable contiene el valor: Hola</p>
O también:

<?php
$cadena = "Hola";
print "<p>La variable contiene el valor: {$cadena}</p>";
?>
<p>La variable contiene el valor: Hola</p>

<?php
$cadena = "Hola";
print '<p>La variable contiene el valor: $cadena</p>';
?>
<p>La variable contiene el valor: $cadena</p>
PHP tampoco sustituye algunos caracteres especiales (por ejemplo, el salto de línea \n)
dentro de las comillas simples, como se ve en el siguiente ejemplo:
<?php
print "<pre>Esto está en\ndos líneas.</pre>";
?>
<pre>Esto está en
dos líneas</pre>

<?php
print '<pre>Esto está en\ndos líneas.</pre>';
?>
<pre>Esto está en\ndos líneas</pre>

Para poder escribir caracteres especiales en una cadena en PHP, se empieza por el carácter contrabarra (\).
Los caracteres especiales más utilizados son los siguientes:
Carácter Significado

\\ Carácter contrabarra

\$ Carácter dólar

\" Carácter comilla doble (en una cadena delimitada por comillas dobles)

\' Carácter comilla simple (en una cadena delimitada por comillas simples)

\n Salto de línea

\t Tabulador horizontal

Además, existen también estos caracteres especiales, menos utilizados que los anteriores:

Carácter Significado

\XXX Carácter de código XXX en octal

\xXX Carácter de código XX en hexadecimal

\r Retorno de carro

\v Tabulador vertical

\e Escape

\f Salto de página (en impresoras antiguas)

Los ejemplos anteriores se podrían escribir así:


<?php
print "<p>Los nombres de variables empiezan por $. Por ejemplo \$edad.</p>";
?>
<p>Los nombres de variables empiezan por $. Por ejemplo $edad.</p>
<?php
print "<p>Las cadenas se delimitan con comillas (\" o ').</p>";
?>
<p>Las cadenas se delimitan con comillas (" o ').</p>

Concatenar cadenas

El operador . (punto) permite concatenar dos o más cadenas.


<?php
print "<p>Pasa" . "tiempos</p>\n";
?>
<p>Pasatiempos</p>
Concatenar cadenas de texto como en el ejemplo anterior no sirve para mucho, ya que se podría escribir una
única cadena en vez de varias cadenas concatenadas. El interés de la concatenación es que podemos
concatenar cadenas con cosas que no son cadenas: variables, funciones, en general, expresiones. Por ejemplo
 concatenar el resultado de un cálculo numérico:

<?php
print "<p>3 * 5 + 12 = " . (3 * 5 + 12) . "</p>\n";
?>
<p>3 * 5 + 12 = 27</p>
 concatenar el valor devuelto por una función:

<?php
print "<p>Número al azar entre 1 y 10: " . rand(1, 10) . "</p>\n";
?>
<p>Número al azar entre 1 y 10: 8</p>
 El uso más habitual es concatenar variables.

El operador combinado de asignación con concatenación (.=) permite modificar una variable concatenándole
una cadena o expresión:
<?php
$cadena = "Pasa";
print "<p>$cadena</p>\n";
$cadena .= "tiempos";
print "<p>$cadena</p>\n";
?>
<p>Pasa</p>
<p>Pasatiempos</p>

Variables
En PHP el programador puede dar el nombre que quiera a las variables, con algunas restricciones:
 Los nombres de las variables tienen que empezar por el carácter $.
 A continuación tiene que haber una letra (mayúscula o minúscula) o un guion bajo (_).
 El resto de caracteres del nombre pueden ser números, letras o guiones bajos.

<?php
// Ejemplos de nombres de variables:
$edad = 16;
$edad1 = 17;
$edad_1 = 18;
?>

PHP es de tipado débil y dinámico.


Arreglos (arrays, vectores o matrices)

Arreglos asociativos

Los arreglos de PHP son arreglos asociativos, es decir, que los índices no tienen por qué ser correlativos, ni
siquiera tienen por qué ser números.
Al crear arreglos asociativos, debemos indicar el valor de los índices, utilizando la notación $indice => $valor:
<?php
$cuadrados = [3 => 9, 5 => 25, 10 => 100];

print "<p>El cuadrado de 3 es $cuadrados[3]</p>\n";


?>
El cuadrado de 3 es 9

PHP sustituye las referencias a valores de matrices de una dimensión dentro de las cadenas, por lo que no es
necesario concatenar cadenas y referencias a matrices, pero los índices deben escribirse sin comillas, aunque
sean cadenas.

<?php
$edades = ["Andrés" => 20, "Bárbara" => 19, "Camilo" => 17];

print "<p>Bárbara tiene $edades["Bárbara"] años</p>\n";


?>
Parse error: syntax error, unexpected '"', expecting identifier (T_STRING) or variable (T_VARIABLE) or number
(T_NUM_STRING) in ejemplo.php on line 4

<?php
$edades = ["Andrés" => 20, "Bárbara" => 19, "Camilo" => 17];

print "<p>Bárbara tiene $edades[Bárbara] años</p>\n";


?>
Bárbara tiene 19 años
Si la referencia a un valor de una matriz está fuera de una cadena o entre llaves, los índices que son cadenas
deben escribirse con comillas.

<?php
$edades = ["Andrés" => 20, "Bárbara" => 19, "Camilo" => 17];

print "<p>Bárbara tiene " . $edades[Bárbara] . " años</p>\n";


print "\n";
print "<p>Camilo tiene {$edades[Camilo]} años</p>\n";
?>
Notice: Use of undefined constant Bárbara - assumed 'Bárbara' in ejemplo.php on line 4

Bárbara tiene 19 años

Notice: Use of undefined constant Camilo - assumed 'Camilo' in ejemplo.php on line 6

Camilo tiene 17 años

<?php
$edades = ["Andrés" => 20, "Bárbara" => 19, "Camilo" => 17];

print "<p>Bárbara tiene " . $edades["Bárbara"] . " años</p>\n";


print "\n";
print "<p>Camilo tiene {$edades["Camilo"]} años</p>\n";
?>

Contar elementos de un arreglo

La función count($arreglo) permite contar los elementos de un arreglo.


<?php
$nombres[1] = "Ana";
$nombres[10] = "Bernardo";
$nombres[25] = "Carmen";

$elementos = count($nombres);

print "<p>La matriz tiene $elementos elementos.</p>\n";


print "\n";
print "<pre>\n"; print_r($nombres); print "</pre>\n";
?>
La matriz tiene 3 elementos.
Array
(
[1] => Ana
[10] => Bernardo
[25] => Carmen
)

Variables Predefinidas

PHP genera automáticamente una serie de variables con diversa información sobre el cliente y el servidor.

$_REQUEST
$_REQUEST es una matriz asociativa que contiene los datos enviado por los formularios y las cookies
guardadas en el ordenador del cliente.

$_SERVER

$_SERVER es una matriz asociativa que contiene información sobre cabeceras, rutas y ubicaciones de scripts
suministrada por el servidor (pero hay que tener en cuenta que no todos los servidores suministran todos los
datos).

$_SERVER[PHP_SELF]

$_SERVER[PHP_SELF] contiene la dirección de la página (relativo a la raíz, es decir, sin el nombre del servidor).

URL $_SERVER[PHP_SELF]

http://www.example.com/ejemplo.php /ejemplo.php

http://www.example.com/ejercicios/ejemplo.php /ejercicios/ejemplo.php

El ejemplo siguiente muestra el valor de $_SERVER[PHP_SELF] de una página real:


<?php
print "<p>\$_SERVER[PHP_SELF]: $_SERVER[PHP_SELF]</p>\n";
?>

Esta variable se puede utilizar en las páginas que enlazan consigo mismas. Por ejemplo, una página puede
contener un formulario que envíe los datos a esa misma página. Para ello, el atributo action del formulario
debe contener el nombre de la página. En vez de poner el nombre de la página, se puede utilizar
$_SERVER[PHP_SELF]. La ventaja es que aunque se cambie el nombre del fichero, el enlace seguirá
funcionando.
El ejemplo siguiente muestra cómo se escribiría un enlace que apunta a la misma página que contiene el
enlace:
<?php
print "<p><a href=\"$_SERVER[PHP_SELF]\">Enlace a esta misma página</a>\n";
?>

Definir constantes

La función define(nombre_constante, valor_constante) permite definir constantes.


<?php
define("PI", 3.14);
print "<p>El valor de pi es " . PI . "</p>\n";
?>
<p>El valor de pi es 3.14</p>
<?php
define("AUTOR", "Bartolomé Sintes Marco");
print "<p>Autor: " . AUTOR . "</p>\n";
?>
<p>Autor: Bartolomé Sintes Marco</p>
También se pueden definir constantes mediante la palabra reservada const.
<?php
const PI = 3.14;
print "<p>El valor de pi es " . PI . "</p>\n";
?>
<p>El valor de pi es 3.14</p>
<?php
const AUTOR = "Bartolomé Sintes Marco";
print "<p>Autor: " . AUTOR . "</p>\n";
?>
<p>Autor: Bartolomé Sintes Marco</p>

La costumbre es escribir los nombres de las constantes en mayúsculas. Los nombres de las constantes deben
empezar por una letra y tener sólo letras (acentos, etc), números y guiones bajos.

Las constantes no se sustituyen dentro de una cadena (ni siquiera escribiéndolas entre llaves), por lo que es
necesario concatenarlas para mostrar su valor.
<?php
define("PI", 3.14);
print "<p>El valor de pi es PI</p>\n"; // El valor NO se sustituye
print "<p>El valor de pi es {PI}</p>\n"; // El valor NO se sustituye
print "<p>El valor de pi es " . PI . "</p>\n"; // El valor SÍ se sustituye
?>
<p>El valor de pi es PI</p>
<p>El valor de pi es {PI}</p>
<p>El valor de pi es 3.14</p>

Constantes Predefinidas

Tanto PHP como los módulos cargados definen automáticamente una serie de constantes predefinidas

Operaciones aritméticas

Son los mismos operadores que aprendimos en Javascript.

Operaciones lógicas

Son los mismos operadores que aprendimos en Javascript.


Alternativa Condicional
If elseif else
if (condición_1) {
bloque_de_sentencias_1
} elseif (condición_2) {
bloque_de_sentencias_2
} elseif (condición_3) {
bloque_de_sentencias_3
...
} elseif (condición_n) {
bloque_de_sentencias_n
} else {
bloque_de_sentencias_n+1
}

? : (el equivalente a operador ternario de Javascript)

$variable = (condición_1) ? expresión_1 : expresión_2;

Sentencia condicional Switch


switch (expresión_1) {
case valor_1:
bloque_de_sentencias_1;
break;
case valor_2:
bloque_de_sentencias_2;
break;
...
case valor_n:
bloque_de_sentencias_n;
break;
}

Bucle for

for (expresión_inicial; condición_continuación; expresión_paso) {


bloque_de_sentencias
}

<?php
for ($i = 0; $i < 5; $i++) {
print "<p>$i</p>\n";
}
?>
<p>0</p>
<p>1</p>
<p>2</p>
<p>3</p>
<p>4</p>

Bucle while

while (condición) {
bloque_de_sentencias
}

Bucle do ... while

do {
bloque_de_sentencias
} while (condición)

Bucle foreach

El bucle foreach es muy útil para recorrer matrices cuyo tamaño se desconoce o matrices cuyos índices no son
correlativos o numéricos (matrices asociativas).
La sintaxis del bucle foreach más simple es la siguiente:
foreach ($matriz as $valor) {
bloque_de_sentencias
}
El bucle ejecuta el bloque de sentencias tantas veces como elementos contenga la matriz $matriz y, en cada
iteración, la variable $valor toma uno de los valores de la matriz.
En el ejemplo siguiente se define una matriz y se imprimen sus valores:
<?php
$matriz = [0, 1, 10, 100, 1000];
foreach ($matriz as $valor) {
print "<p>$valor</p>\n";
}
?>
<p>0</p>
<p>1</p>
<p>10</p>
<p>100</p>
<p>1000</p>
La sintaxis del bucle foreach puede también ser la siguiente:
foreach ($matriz as $indice => $valor) {
bloque_de_sentencias
}
El bucle ejecuta el bloque de sentencias tantas veces como elementos contenga la matriz $matriz y, en cada
iteración, la variable $valor toma uno de los valores de la matriz y la variable $indice toma como valor el
índice correspondiente. Esta construcción es muy útil
En el ejemplo siguiente se define una matriz asociativa y se imprimen sus valores:
<?php
$matriz = ["red" => "rojo", "green" => "verde", "blue" => "azul"];
foreach ($matriz as $indice => $valor) {
print "<p>$indice : $valor</p>\n";
}
?>
<p>red : rojo</p>
<p>green : verde</p>
<p>blue : azul</p>

Controles en formularios
Para que un control envíe información es necesario:
 que el control esté incluido en un formulario (<form>).
 que el formulario tenga establecido el atributo action, con la dirección absoluta o relativa del fichero
php que procesará la información
 que el control tenga establecido el atributo name
 que el formulario contenga un botón de tipo submit

El siguiente ejemplo muestra un formulario válido (ejemplo.html):


<form action="ejemplo.php">
<p>Nombre: <input type="text" name="nombre"></p>
<p><input type="submit" value="Enviar"></p>
</form>
Pepito Conejo
Nombre:

Enviar

El programa que recibe los datos los guarda automáticamente en la matriz $_REQUEST. Mediante la
orden print_r($_REQUEST) se puede mostrar el contenido de la matriz $_REQUEST.
El siguiente ejemplo muestra lo que escribiría el programa PHP (ejemplo.php) si recibiera la información del
formulario anterior (ejemplo.html).
<?php
print "<pre>";
print_r($_REQUEST);
print "</pre>\n";
?>
Array
(
[nombre] => Pepito Conejo
)
El nombre del elemento de la matriz $_REQUEST coincide con el nombre del control (atributo name)en el
formulario (excepto en el control de tipo imagen).
Atributo method

El atributo method de la etiqueta <form> permite elegir si la información de los controles se incluye en la
llamada a la página (method="get") o se proporciona posteriormente (method="post"). Si el atributo no está
definido, la información se incluye. Desde el punto de vista de la seguridad ambos métodos son equivalentes.
La diferencia es que con el valor get se pueden ver en la barra de dirección los nombres de los controles y los
valores introducidos por el usuario, mientras que con el valor post no, pero los datos recibidos son idénticos.
Formulario con get

<form action="ejemplo.php" method="get">


<p>Nombre: <input type="text" name="nombre"></p>
<p><input type="submit" value="Enviar"></p>
</form>

print "<pre>";
print_r($_REQUEST);
print "</pre>";

Formulario con post

<form action="ejemplo.php" method="post">


<p>Nombre: <input type="text" name="nombre"></p>
<p><input type="submit" value="Enviar"></p>
</form>
print "<pre>";
print_r($_REQUEST);
print "</pre>";

En caso de que haya varios controles que envíen información en un formulario con get, los nombres y valores
aparecen en la barra de dirección separados por el carácter ampersand (&), como
nombre1=valor1&nombre2=valor2&...
<form action="ejemplo.php" method="get">
<p>Nombre: <input type="text" name="nombre"></p>
<p>Apellidos: <input type="text" name="apellidos"></p>
<p><input type="submit" value="Enviar"></p>
</form>

print "<pre>";
print_r($_REQUEST);
print "</pre>";
Botón Enviar (input submit, button)

Este control se puede crear con la etiqueta <input> o con la etiqueta <button>. En ambos casos, este control
se envía siempre que esté definido el atributo name y que se haya hecho clic en el botón. El valor enviado es
el valor del atributo value o el contenido de la etiqueta.
Código fuente

<input type="submit" value="Submit">


Control

Submit

$_REQUEST

Array
(
)
<input type="submit" value="Enviar" name="boton2">
Enviar

Array
(
[boton2] => Enviar
)
<button type="submit">Submit</button>
Submit

Array
(
)
<button type="submit" name="boton3">Enviar</button>
Enviar

Array
(
[boton3] => Enviar
)
<button type="submit" name="boton4" value="enviado">Enviar</button>
Enviar

Array
(
[boton4] => enviado
)
Normalmente no se suele dar el atributo name al botón enviar ya que la información se envía cuando se hace
clic en el botón. pero en algunos casos si que puede ser conveniente. Por ejemplo cuando el formulario
contiene varios botones y queremos saber cuál se ha pulsado, como en el ejemplo siguiente, en el que los
atributos name son iguales, pero los atributos value son distintos:
ejemplo.html
<form action="ejemplo.php" method="get">
<p>¿Sí o no?</p>
<p>
<input type="submit" name="respuesta" value="Sí">
<input type="submit" name="respuesta" value="No">
</p>
</form>

ejemplo.php
print "<pre>";
print_r($_REQUEST);
print "</pre>";

Caja de texto, caja de contraseña y área de texto (input text, input password, textarea)

Este control se envía siempre. El valor enviado es el contenido de la caja o área.


<input type="text" name="cajatexto1">

Array
(
[cajatexto1] =>
)
<input type="text" name="cajatexto2" value="Cualquier cosa">
Cualquier c

Array
(
[cajatexto2] => Cualquier cosa
)
<input type="password" name="cajapassword1">

Array
(
[cajapassword1] =>
)
<input type="password" name="cajapassword2" value="pezespada">
*********

Array
(
[cajapassword2] => pezespada
)
<textarea rows="4" cols="20" name="areadetexto1"></textarea>

Array
(
[areadetexto1] =>
)
<textarea rows="4" cols="20" name="areadetexto2">Cualquier cosa</textarea>
Cualquier cosa

Array
(
[areadetexto2] => Cualquier cosa
)

Casilla de verificación (input checkbox)

Este control se envía solamente si se marca la casilla. El valor enviado es "on" si la casilla no tiene definido el
atributo value o el valor del atributo value si éste está definido.
<input type="checkbox" name="casilla1">
(sin marcar)

Array
(
)
<input type="checkbox" name="casilla2">
(marcada)

Array
(
[casilla2] => on
)
<input type="checkbox" name="casilla3" value="Tres">
(marcada)

Array
(
[casilla3] => Tres
)

Botón radio (input radio)

Este control se envía solamente si se marca alguno de los botones radio que forman el control. El valor
enviado es "on" si el botón marcado no tiene definido el atributo value o el valor del atributo value si éste
está definido.
<input type="radio" name="radio1">
<input type="radio" name="radio1">
(sin marcar)

Array
(
)
<input type="radio" name="radio2">
<input type="radio" name="radio2">
(marcado uno)

Array
(
[radio2] => on
)
<input type="radio" name="radio2">
<input type="radio" name="radio2">
(marcado otro)

Array
(
[radio2] => on
)
<input type="radio" name="radio3" value="Uno">
<input type="radio" name="radio3" value="Dos">
(marcado uno)

Array
(
[radio3] => Uno
)
<input type="radio" name="radio3" value="Uno">
<input type="radio" name="radio3" value="Dos">
(marcado otro)

Array
(
[radio3] => Dos
)

Menú (select)

Este control envía siempre la opción elegida. El valor enviado es el contenido de la etiqueta option elegida si la
opción elegida no tiene definido el atributo value o el valor del atributo value si éste está definido.
Si el menú admite selección múltiple, entonces el nombre del menú debe acabar con corchetes ([]) y se envía
como una matriz, de tantos elementos como opciones se hayan elegido.
<select name="menu1">
<option></option>
</select>

Array
(
[menu1] =>
)
<select name="menu2">
<option>Opción 1</option>
<option>Opción 2</option>
</select>

Array
(
[menu2] => Opción 1
)
<select name="menu3">
<option value="Uno">Opción 1</option>
<option value="Dos">Opción 2</option>
</select>

Array
(
[menu3] => Uno
)
<select name="menu4[]" size="3" multiple>
<option>Opción 1</option>
<option>Opción 2</option>
<option>Opción 3</option>
<option>Opción 4</option>
</select>
Opción 1
Opción 2
Opción 3

(Marcados 1 y 3)

Array
(
[menu4] => Array
(
[0] => Opción 1
[1] => Opción 3
)
)

Control oculto (input hidden)

Este control se envía siempre y el valor enviado es el valor del atributo value.
Código fuente

Control

$_REQUEST

<input type="hidden" name="oculto1">


Array
(
[oculto1] =>
)
<input type="hidden" name="oculto2" value="Cualquier cosa">
Array
(
[oculto2] => Cualquier cosa
)

Imagen (input image)

El control de tipo imagen inserta una imagen que funciona como un botón (aunque ni Firefox ni Internet
Explorer le da relieve como a los botones). Al hacer clic en un punto de la imagen es como si se hubiera
pulsado a un botón submit y se envían las coordenadas del punto en el que se ha hecho clic (junto con los
valores de los otros controles del formulario).
El origen de las coordenadas es el extremo superior izquierdo de la imagen. El valor X aumenta a medida que
nos desplazamos a la derecha y el valor Y aumenta a medida que nos desplazamos hacia abajo.
Código fuente

Control

$_REQUEST

<input type="image" name="gnu" src="gnu.jpg" alt="Logotipo GNU">

Array
(
[gnu_x] => 89
[gnu_y] => 111
)
Las coordenadas se reciben en $_REQUEST en dos elementos que añaden al nombre del control el sufijo _x e
_y. En la barra de dirección el nombre aparece con el sufijo .x e .y.

Si se define el atributo value, el formulario debe enviar tanto las coordenadas como el nombre del control con el
valor del atributo value. Actualmente (octubre de 2016), Google Chrome sí que lo hace, pero Firefox e Internet
Explorer no lo hacen.

Archivo (input file)


El selector de archivo permite enviar un archivo desde el ordenador del cliente al servidor.
En un formulario "normal", este control se envía siempre y el valor enviado es el nombre del archivo elegido.
Código fuente

Control

$_REQUEST

<input type="file" name="archivo1">


Array
(
[archivo1] => loquesea.txt
)
Para que este control envíe toda la información, el formulario debe tener el atributo enctype con el
valor multipart/form-data y ser enviado con el método POST. La información se almacena entonces en la
matriz $_FILES (pero no en la variable $_REQUEST).
Código fuente

Control

$_FILES

<form enctype="multipart/form-data"
action="ejemplo.php" method="post" >
<input type="file" name="archivo2">
Array
(
[archivo2] => Array
(
[name] => loquesea.txt
[type] => text/plain
[tmp_name] => C:\ejemplos\loquesea.txt
[error] => 0
[size] => 27890
)
)
Antes de utilizar este control, hay que configurar en el archivo php.ini el tamaño máximo de los archivos que se
pueden enviar (mediante la directiva post_max_size) y es conveniente leer el capítulo correspondiente a
la subida de archivos del manual de PHP para conocer la manera de evitar los posibles riesgos de seguridad.

También podría gustarte