Introducción
PHP es un lenguaje script de propósito general especialmente diseñado para el desarrollo Web. Es rápido, flexible y pragmático; PHP hace desde un blog hasta los sitios de
Internet más populares del mundo.
PHP es el acrónimo de "PHP Hypertext Preprocessor". PHP es utilizado mundialmente utilizado, es de código abierto y una alternativa eficiente a competidores como ASP de Microsoft.
PHP es un lenguaje de script "del lado del servidor", es decir, los scripts escritos se ejecutan en el servidor y éste devuelve el resultado de dicha ejecución. Por esta razón es que
los clientes que ingresen a un sitio Web que contenga scripts en PHP no necesitan un software especial en su computadora.
El sitio Web php.net contiene la última versión del software, además de toda la documentación del lenguaje en
varios idiomas.
Para utilizar PHP hay varias opciones:
-
Servidor LAMP / WAMP
-
Servidor Portátil Z-WAMP: Es un conjunto de servidores para Windows que no necesitan instalación, solamente se ejecutan cuando se necesiten.
-
Microsoft WebMatrix: Herramienta de desarrollo Web en la nube.
-
CodEnvy: Es un conjunto de ambientes de desarrollo SaaS (Software as a Service) en línea que permite escribir y ejecutar los
scripts en la nube. Es multiplataforma y solo se necesita un navegador.
Sintaxis de PHP
Sintaxis Básica
El código PHP puede escribirse en cualquier parte de un documento HTML con las etiquetas correspondientes. El código PHP inicia con <?php
y
termina con ?>
.
Ejemplo 1. Hola mundo en PHP
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Mi primer PHP</title>
</head>
<body>
<h1>Mi primer PHP.</h1>
<p>Ésto es HTML.</p>
<?php
echo "<p>Hello World!.</p>";
echo "<p>Ésto es HTML desde PHP.</p>";
?>
</body>
</html>
Comentarios en PHP
Todas las líneas en PHP deben terminar con ;
excepto la última, ya que la etiqueta de finalización de ?>
implica un punto y coma. A pesar de ésto,
se recomienda finalizar todas las líneas con ;
.
Los comentarios en PHP se pueden hacer por línea con //
o bien con #
, todos los caracteres posteriores a cualquiera de estos símbolos serán ignorados
por el intérprete. Todas las líneas que se encuentren entre /*
y */
también se ignorarán por el intérprete.
Ejemplo 2. Comentarios en PHP
<!DOCTYPE html>
<html>
<body>
<?php
// Comentario de una sola línea
# Éste también comenta una sola línea
/* Éste comenta
múltiples
líneas */
?>
</body>
</html>
Sensibilidad a Mayúsculas
En PHP las funciones definidas por el usuario, clases y palabras clave no son sensibles a mayúsculas. Sin embargo, las variables si son sensibles a mayúsculas.
Ejemplo 3. Las funciones, clases y palabras clave no son sensibles a mayúsculas
<!DOCTYPE html>
<html>
<body>
<?php
ECHO "Hola Mundo!<br>";
echo "Hola Mundo!<br>";
EcHo "Hola Mundo!<br>";
?>
</body>
</html>
Ejemplo 4. Las variables son sensibles a mayúsculas
<!DOCTYPE html>
<html>
<body>
<?php
$color="red";
echo "My car is " . $color . "<br>";
echo "My house is " . $COLOR ."<br>";
echo "My boat is " . $coLOR ."<br>";
?>
</body>
</html>
Variables
Declaración
Las variables son contenedores abstractos de datos que se convierten cuando es necesario y no necesitan ser declaradas. Una variable es creada en el momento que se le asigna
un valor por primera vez.
Ejemplo 5. Declaración de variables
<!DOCTYPE html>
<html>
<body>
<?php
$txt="Hola mundo!";
$x=5;
$y=10.5;
$z = $x + $y;
echo $txt;
echo "<br>";
echo $x;
echo "<br>";
echo $y;
echo "<br>";
echo $z;
?>
</body>
</html>
En PHP las variables pueden ser "declaradas" en cualquier lugar del script, sin embargo se recomienda hacerlo al inicio, con la finalidad de tener un código más ordenado.
Ámbito de las Variables
El ámbito de una variable es la parte del script donde puede ser utilizada o referenciada. PHP tiene tres tipos de ámbitos.
Ámbito Local y Global
Una variable declarada fuera de una función tiene ámbito global y sólo puede ser accesada fuera de la función. Una variable declarada dentro de una función tiene ámbito local y
sólo puede ser accesada por esa función.
Ejemplo 6. Ámbito de las variables
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Ámbito de las variables</title>
</head>
<body>
<?php
$x=5; // ámbito global
function myTest() {
$y=10; // ámbito local
echo "<p>Variables de prueba dentro de una función:<p>";
echo "Variable x es: $x";
echo "<br>";
echo "Variable y es: $y";
}
myTest();
echo "<p>Variables de prueba fuera de una función:<p>";
echo "Variable x es: $x";
echo "<br>";
echo "Variable y es: $y";
?>
</body>
</html>
La palabra clave global
La palabra clave global
se utiliza para acceder a variables globales desde el interior de una función. Para hacer esto se antepone la palabra global al nombre de la variable.
Ejemplo 7. Variables Globales
<!DOCTYPE html>
<html>
<body>
<?php
$x=5;
$y=10;
function myTest() {
global $x,$y;
$y=$x+$y;
}
myTest(); // función
echo $y; // Nuevo valor de y
?>
</body>
</html>
Variables Estáticas
Típicamente cuando una función termina su ejecución todas las variables contenidas en ella son borradas, sin embargo algunas veces es necesario mantenerlas. Para ésto se
antepone la palabra clave static
al nombre de la variable la primera vez que se utilice.
Ejemplo 8. Variable estática
<!DOCTYPE html>
<html>
<body>
<?php
function myTest() {
static $x=0;
echo $x;
$x++;
}
myTest();
echo "<br>";
myTest();
echo "<br>";
myTest();
echo "<br>";
myTest();
echo "<br>";
myTest();
?>
</body>
</html>
Cada vez que la variable es llamada, contendrá la información de la última vez que fue utilizada. A pesar de esto, la variable seguirá siendo local.
Sentencia Echo y Print
En PHP existen dos formas de imprimir contenido: echo y print, sin embargo existen algunas diferencias entre ellas:
Ambas sentencias pueden utilizarse o no con paréntesis.
Ejemplo 9. Sentencia echo
<!DOCTYPE html>
<html>
<body>
<?php
echo "<h2>PHP is fun!</h2>";
echo "Hello world!<br>";
echo "I'm about to learn PHP!<br>";
echo "This", " string", " was", " made", " with multiple parameters.<br>";
echo "<h2>PHP</h2>";
$txt1="Learn PHP";
$txt2="W3Schools.com";
$cars=array("Volvo","BMW","Toyota");
echo $txt1;
echo "<br>";
echo "Study PHP at $txt2";
echo "<br>";
echo "My car is a {$cars[0]}";
?>
</body>
</html>
Ejemplo 10. Sentencia print
<!DOCTYPE html>
<html>
<body>
<?php
print "<h2>PHP is fun!</h2>";
print "Hello world!<br>";
print "I'm about to learn PHP!";
print "<h2>PHP</h2>";
$txt1="Learn PHP";
$txt2="W3Schools.com";
$cars=array("Volvo","BMW","Toyota");
print $txt1;
print "<br>";
print "Study PHP at $txt2";
print "<br>";
print "My car is a {$cars[0]}";
?>
</body>
</html>
Tipos de Datos
Aunque las variables son contenedores abstractos si pueden tener un tipo de dato. Los tipos de datos que hay en PHP son String
, Integer
,
Floating
, Boolean
, Array
, Object
y Null
.
Cadenas
Una cadena es una serie de caracteres. Una cadena puede ser cualquier texto dentro de comillas sencillas o dobles.
<?php
$x = "Hello world!";
echo $x;
echo "<br>";
$x = 'Hello world!';
echo $x;
?>
Enteros
Un entero es un número sin decimales. La función de PHP var_dump()
devuelve el tipo de dato y el valor de la variable recibida.
<?php
$x = 5985;
var_dump($x);
echo "<br>";
$x = -345; // negative number
var_dump($x);
echo "<br>";
$x = 0x8C; // hexadecimal number
var_dump($x);
echo "<br>";
$x = 047; // octal number
var_dump($x);
?>
Flotantes
Un número flotante es un número con punto decimal o bien un número en forma exponencial (notación científica).
<?php
$x = 10.365;
var_dump($x);
echo "<br>";
$x = 2.4e3;
var_dump($x);
echo "<br>";
$x = 8E-5;
var_dump($x);
?>
Booleanos
Los booleanos sólo pueden ser TRUE
o FALSE
. Son típicamente utilizados en pruebas condicionales.
$x=true;
$y=false;
Arreglos
Un arreglo almacena múltiples valores en una sola variable.
Ejemplo 11. Arreglos en PHP
<!DOCTYPE html>
<html>
<body>
<?php
$cars=array("Volvo","BMW","Toyota");
var_dump($cars);
?>
</body>
</html>
Objetos
Un objeto es un tipo de dato que almacena datos e información y la forma en como serán procesados. Los objetos deben ser explícitamente declarados con la palabra clave class
.
Ejemplo 12. Creación de un Objeto y métodos
<!DOCTYPE html>
<html>
<body>
<?php
class Car {
var $color;
function Car($color="green") {
$this->color = $color;
}
function what_color() {
return $this->color;
}
}
function print_vars($obj) {
foreach (get_object_vars($obj) as $prop => $val) {
echo "\t$prop = $val\n";
}
}
// instantiate one object
$herbie = new Car("white");
// show herbie properties
echo "\herbie: Properties\n";
print_vars($herbie);
?>
</body>
</html>
NULL
El tipo de dato Null
representa que una variable no tiene un valor. El único valor posible de una variable nula es NULL
. El valor NULL
identifica
si una variable está vacía o no. Es útil para diferenciar si algún campo en una base de datos está vacío o si tiene una cadena vacía.
<?php
$x="Hello world!";
$x=null;
var_dump($x);
?>
Operadores
Operadores aritméticos en PHP
En PHP se tienen los operadores aritméticos que existen en la mayoría de los lenguajes de programación de alto nivel.
Operador |
Nombre |
Ejemplo |
Resultado |
+ |
Suma |
$x + $y |
Suma de $x y $y |
- |
Resta |
$x - $y |
Resta de $x - $y |
* |
Multiplicación |
$x * $y |
Producto de $x * $y |
/ |
División |
$x / $y |
Cociente de $x / $y |
% |
Módulo |
$x % $y |
Residuo de la división $x % $y |
<?php
$x=10;
$y=6;
echo ($x + $y); // outputs 16
echo ($x - $y); // outputs 4
echo ($x * $y); // outputs 60
echo ($x / $y); // outputs 1.6666666666667
echo ($x % $y); // outputs 4
?>
Operadores de Asignación
Asignación |
Equivalencia |
Descripción |
x = y |
x = y |
Asignación al operador de la izquierda del valor del operador de la derecha |
x += y |
x = x + y |
Suma |
x -= y |
x = x - y |
Resta |
x *= y |
x = x * y |
Multiplicación |
x /= y |
x = x / y |
División |
x %= y |
x = x % y |
Módulo |
<?php
$x=10;
echo $x; // outputs 10
$y=20;
$y += 100;
echo $y; // outputs 120
$z=50;
$z -= 25;
echo $z; // outputs 25
$i=5;
$i *= 6;
echo $i; // outputs 30
$j=10;
$j /= 5;
echo $j; // outputs 2
$k=15;
$k %= 4;
echo $k; // outputs 3
?>
Operadores de cadenas
Operador |
Nombre |
Ejemplo |
Resultado |
. |
Concatenación |
$txt1 = "Hello" $txt2 = $txt1 . " world!" |
$txt2 contiene "Hello world!" |
.= |
Concatenación y asignación |
$txt1 = "Hello" $txt1 .= " world!" |
$txt1 contiene "Hello world!" |
<?php
$a = "Hello";
$b = $a . " world!";
echo $b; // outputs Hello world!
$x="Hello";
$x .= " world!";
echo $x; // outputs Hello world!
?>
Operadores de Incremento / Decremento
Operador |
Nombre |
Descripción |
++$x |
Pre-incremento |
Incrementa $x en uno, luego devuelve $x |
$x++ |
Post-incremento |
Devuelve $x, luego incrementa $x en uno |
--$x |
Pre-decremento |
Decrementa $x en uno, luego devuelve $x |
$x-- |
Post-decremento |
Devuelve $x, luego decrementa $x en uno |
<?php
$x=10;
echo ++$x; // outputs 11
$y=10;
echo $y++; // outputs 10
$z=5;
echo --$z; // outputs 4
$i=5;
echo $i--; // outputs 5
?>
Operadores de comparación
Operador |
Nombre |
Ejemplo |
Resultado |
== |
Igual |
$x == $y |
Verdadero si $x es igual a $y |
=== |
Idéntico |
$x === $y |
Verdadero si $x es igual a $y y si son del mismo tipo |
!= |
Diferente |
$x != $y |
Verdadero si $x es diferente a $y |
<> |
Diferente |
$x <> $y |
Verdadero si $x es diferente a $y |
!== |
No idéntico |
$x !== $y |
Verdadero si $x no es igual a $y o bien si no son del mismo tipo |
> |
Mayor que |
$x > $y |
Verdadero si $x es mayor que $y |
< |
Menor que |
$x < $y |
Verdadero si $x es menor que $y |
>= |
Mayor o igual que |
$x >= $y |
Verdadero si $x es mayor o igual que $y |
<= |
Menor o igual que |
$x <= $y |
Verdadero si $x es menor o igual que $y |
Sentencias Condicionales
Las sentencias condicionales se utilizan para realizar diferentes acciones dependiendo de diferentes condiciones.
If
La sentencia if
se utiliza para ejecutar cierto código solamente si una condición específica es verdadera.
Sintaxis:
if (condition) {
code to be executed if condition is true;
}
Ejemplo 13. Sentencia if
<!DOCTYPE html>
<html>
<body>
<?php
$t=date("H");
if ($t<"20") {
echo "Have a good day!";
}
?>
</body>
</html>
if - else
La sentencia if
- else
se utiliza para ejecutar cierto código si alguna condición es verdadera o algún otro código si la condición es falsa.
Sintaxis:
if (condition) {
code to be executed if condition is true;
}
else {
code to be executed if condition is false;
}
Ejemplo 14. Sentencia if
- else
<!DOCTYPE html>
<html>
<body>
<?php
$t=date("H");
if ($t<"20") {
echo "Have a good day!";
}
else {
echo "Have a good night!";
}
?>
</body>
</html>
if - elseif - else
La sentencia if
- elseif
- else
se utiliza para seleccionar uno de varios bloques de código a ser ejecutado.
Sintaxis:
if (condition) {
code to be executed if condition is true;
}
elseif (condition) {
code to be executed if condition is true;
}
else {
code to be executed if condition is false;
}
Ejemplo 15. Sentencia if - elseif - else
<!DOCTYPE html>
<html>
<body>
<?php
$t=date("H");
if ($t<"10") {
echo "Have a good morning!";
}
elseif ($t<"20") {
echo "Have a good day!";
}
else {
echo "Have a good night!";
}
?>
</body>
</html>
Ciclo While
Algunas veces cuando se escribe un programa, se necesita que cierto bloque de código se ejecute una y otra vez. En lugar de añadir varias líneas de código muy similar se puede
utilizar un ciclo para realizar este tipo de tarea.
El ciclo while
repite la ejecución de cierto bloque de código siempre y cuando la condición especificada sea verdadera.
Sintaxis:
while (condition is true) {
code to be executed;
}
Ejemplo 16. Ciclo while
<!DOCTYPE html>
<html>
<body>
<?php
$x=1;
while($x<=5) {
echo "The number is: $x <br>";
$x++;
}
?>
</body>
</html>
Ciclo For
El ciclo for
es utilizado cuando se sabe exactamente cuantas veces se debe repetir la ejecución de cierto código.
Sintaxis:
for (init counter; test counter; increment counter) {
code to be executed;
}
Ejemplo 17. Ciclo For
<!DOCTYPE html>
<html>
<body>
<?php
for ($x=0; $x<=10; $x++) {
echo "The number is: $x <br>";
}
?>
</body>
</html>
Funciones
El verdadero poder de PHP está en las funciones, ya que posee más de 1000 funciones listas para utilizarse. Sin embargo, es posible crear nuestras propias funciones.
Una función es un fragmento de código que puede ser utilizado en varias ocasiones en el programa.
Sintaxis:
function functionName() {
code to be executed;
}
El nombre de una función puede comenzar con cualquier letra o un guión bajo pero no con un número. Se recomienda nombrar una función por lo que hace.
Ejemplo 18. Una función recibe y devuelve parámetros.
<!DOCTYPE html>
<html>
<body>
<?php
function sum($x,$y) {
$z=$x+$y;
return $z;
}
echo "5 + 10 = " . sum(5,10) . "<br>";
echo "7 + 13 = " . sum(7,13) . "<br>";
echo "2 + 4 = " . sum(2,4);
?>
</body>
</html>
Manejo de Formularios
Las variables superglobales $_GET
y $_POST
se utilizan para recolectar datos de un formulario.
Ejemplo 19. Formulario sencillo en HTML mediante $_POST
HTML
<!DOCTYPE HTML>
<html>
<head>
<title>Formulario en PHP</title>
<meta charset="utf-8">
</head>
<body>
<form action="welcome.php" method="post">
Nombre: <input type="text" name="name"><br>
E-mail: <input type="email" name="email"><br>
<input type="submit">
</form>
</body>
</html>
PHP
<html>
<body>
Bienvenido <?php echo $_POST["name"]; ?><br>
Su correo es: <?php echo $_POST["email"]; ?>
</body>
</html>
Cuando el usuario llena el formulario y presiona el botón de Submit
, los datos del formulario son procesados a un archivo PHP llamado welcome.php
.
Los datos son enviados por el método HTTP POST
.
Ejemplo 20. Formulario sencillo en HTML mediante $_GET
HTML
<!DOCTYPE HTML>
<html>
<head>
<title>Formulario en PHP</title>
<meta charset="utf-8">
</head>
<body>
<form action="welcome.php" method="get">
Nombre: <input type="text" name="name"><br>
E-mail: <input type="email" name="email"><br>
<input type="submit">
</form>
</body>
</html>
PHP
<html>
<body>
Bienvenido <?php echo $_GET["name"]; ?><br>
Su correo es: <?php echo $_GET["email"]; ?>
</body>
</html>
El código en los ejemplos anteriores es muy simple, sin embargo falta lo más importante. Es necesario validar los datos del formulario para proteger el script de código malicioso.
GET vs. POST
Tanto GET
como POST
crean un arreglo que contiene pares de llaves y valor, donde las llaves son los nombres de los controles del formulario y los valores
son los datos que ingresa el usuario en ellos.
$_GET
es un arreglo que variables que son pasadas al script mediante parámetros en el URL.
$_POST
es un arreglo de variables que son pasadas al script mediante el método HTTP POST.
Cuando utilizar GET
La información enviada por un formulario mediante el método GET
es visible para todos, ya que todas las variables son desplegadas en la URL). Adicionalmente
GET
tiene una limitante en la cantidad de parámetros que se pueden enviar, que es de 2000 caracteres.
Dado que las variables son desplegadas en la URL, es posible marcar como favorita una página específica dentro de un sistema Web.
Éste método puede ser utilizado para enviar datos que no son críticos, nunca debe utilizarse para enviar contraseñas o algún tipo de información crítica.
Cuando utilizar POST
La información enviada por un formulario mediante el método POST es invisible para todos, todas las variables y su contenido son integrados dentro del cuerpo de la solicitud
HTTP. Por otro lado, no tiene limitante en la cantidad de datos que se pueden enviar.
Dado que las las variables no son mostradas en la URL, no es posible guardar como favorita una página dentro de un sistema Web.
La mayoría de los desarrolladores prefieren utilizar el método POST para enviar datos.
Validación de Formularios con PHP
En esta sección haremos la validación de formularios que contengan campos de texto, botones radio y un botón de Enviar.
Las reglas de validación del formulario son las siguientes:
Campo |
Reglas de Validación |
Contenido |
Nombre |
Requerido |
Sólo contiene letras y caracteres |
Correo electrónico |
Requerido |
Debe contener una dirección válida. |
Sitio Web |
Opcional |
Si se especifica alguno, debe contener una dirección válida. |
Comentarios |
Opcional |
Campo multi-línea. |
Género |
Requerido |
Debe seleccionarse alguno. |
Ejemplo 21. Validación del formulario: evitando código malicioso
HTML + PHP
<!DOCTYPE HTML>
<html>
<head>
<title>Validación de Formulario en PHP</title>
<meta charset="utf-8">
</head>
<body>
<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>Ejemplo de validación de Formularios con PHP</h2>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Nombre: <input type="text" name="name">
<br><br>
E-mail: <input type="text" name="email">
<br><br>
Sitio Web: <input type="text" name="website">
<br><br>
Comentarios: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Género:
<input type="radio" name="gender" value="female">Femenino
<input type="radio" name="gender" value="male">Masculino
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Usted Ingresó:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>
$_SERVER[“PHP_SELF”]
La variable superglobal $_SERVER[“PHP_SELF”]
devuelve el nombre del archivo del script que se encuentra ejecutándose. De esta forma $_SERVER[“PHP_SELF”]
envía los datos del formulario a la página misma, en lugar de dirigirse a una página diferente. De ésta forma el usuario recibirá un mensaje de error en la misma página donde se
encuentra el formulario.
htmlspecialchars()
La función htmlspecialchars()
convierte caracteres especiales a entidades HTML. Ésto significa que reemplaza caracteres como <
y >
por
<
y >
respectivamente. Esto previene que posibles atacantes puedan hacer "exploiting" en el código utilizando inyección de código HTML o JavaScript
en los formularios.
Proteger el código los formularios con PHP
La variable $_SERVER["PHP_SELF"]
puede ser utilizada por hackers si no se protege el código. Si PHP_SELF
es utilizada en la página un usuario puede ingresar
una diagonal /
y luego algún código Cross Site Scripting que ejecutar.
La primer cosa que haremos es pasar las variables a través de la función htmlspecialchars()
. Ésta función evitará que el usuario inyecte código JavaScript, por ejemplo:
<script>location.href('http://www.hacked.com')</script>
Cuando el contenido del formulario se pasa a través de la función, se sustituyen caracteres especiales evitando así su ejecución:
<script>location.href('http://www.hacked.com')</script>
De esta forma el código se desplegará sin ser ejecutado.
La función test_input
hará la protección pertinente de los datos introducidos a través de los formularios:
-
Quitar los espacios no necesarios con la función trim
.
-
Quitar las diagonales
con la función stripslashes
.
El primer if
dentro del código verifica si $_SERVER["REQUEST_METHOD"]
es igual a POST
, lo cuál sólo será cierto una vez que el usuario
haya presionado el botón Submit
, cuando recién se ha cargado la página éste if
será falso dado que el boton no ha sido presionado.
Validación de Formularios: Campos necesarios
Si se tiene un formulario en el que varios campos fueran necesarios para poder continuar. Antes del ejemplo anterior se especificó que en el formulario los campos Nombre, Correo
Electrónico y Género son necesarios.
De ésta forma se tienen que agregar algunas variables que guardarán un posible error en caso de que algún campo requerido se encuentre vacío. También se agrega una validación
en todas las variables $_POST
para saber si se encuentran vacías. En caso de que la variable está vacía se almacena un mensaje de error en la variable correspondiente
y si no lo están se envía su contenido a través de la función test_input()
.
Ejemplo 22. Validación del formulario: evitando código malicioso + campos requeridos.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Validación en PHP</title>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
<?php
// Variables que contendrán un posible mensaje de error
$nameErr = $emailErr = $genderErr = $websiteErr = "";
// Variables que guardan el contenido de los campos del formulario
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Nombre necesario";
} else {
$name = test_input($_POST["name"]);
}
if (empty($_POST["email"])) {
$emailErr = "Email necesario";
} else {
$email = test_input($_POST["email"]);
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
}
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
if (empty($_POST["gender"])) {
$genderErr = "Genero necesario";
} else {
$gender = test_input($_POST["gender"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>Ejemplo de Validación de Formularios con PHP</h2>
<p><span class="error">* campo requerido.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Name: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website: <input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Comment: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Usted Ingresó:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>
Validación del formulario: Validando contenido
El siguiente paso en la validación consiste en validar lo que ingresó el usuario, quitar espacios innecesarios en los campos, validar si la dirección de correo y la dirección
web tienen el formato correcto.
Ejemplo 23. Validación de formularios: evitando código malicioso + campos requeridos + validación contenido.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Validación en PHP</title>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
<?php
// Variables que contendrán un posible mensaje de error
$nameErr = $emailErr = $genderErr = $websiteErr = "";
// Variables que guardan el contenido de los campos del formulario
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Nombre necesario";
} else {
$name = test_input($_POST["name"]);
// verificar si el nombre contiene solo letras y espacios
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Solo se permiten letras y espacios en blanco";
}
}
if (empty($_POST["email"])) {
$emailErr = "Email necesario";
} else {
$email = test_input($_POST["email"]);
// verificar si la direccion de correo es valida
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$emailErr = "Invalid email format";
}
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
// verifica si la URL es válida (la expresion regular también permite guiones en la URL)
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "URL con capacidades diferentes";
}
}
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
if (empty($_POST["gender"])) {
$genderErr = "Genero necesario";
} else {
$gender = test_input($_POST["gender"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>Ejemplo de Validación de Formularios con PHP</h2>
<p><span class="error">* campo requerido.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Nombre: <input type="text" name="name">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website: <input type="text" name="website">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Comentario: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Género:
<input type="radio" name="gender" value="femenino">Femenino
<input type="radio" name="gender" value="masculino">Masculino
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Usted Ingresó:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>
Validación de formulario: Mantener contenido de los campos
Sería deseable mantener el contenido de los campos del formulario si es el usuario ingresó no ingresó alguna información en el formato correcto. Para esto es necesario agregar código
PHP dentro del atributo value en los campos deseados.
value="?<?php echo $name;?>"
Ejemplo 24. Validación de formularios: evitando código malicioso + campos requeridos + validación contenido.
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Validación en PHP</title>
<style>
.error {color: #FF0000;}
</style>
</head>
<body>
<?php
// Variables que contendrán un posible mensaje de error
$nameErr = $emailErr = $genderErr = $websiteErr = "";
// Variables que guardan el contenido de los campos del formulario
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
if (empty($_POST["name"])) {
$nameErr = "Nombre necesario";
} else {
$name = test_input($_POST["name"]);
// verificar si el nombre contiene solo letras y espacios en blanco
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
$nameErr = "Solo se permiten letras y espacios en blanco";
}
}
if (empty($_POST["email"])) {
$emailErr = "Email necesario";
} else {
$email = test_input($_POST["email"]);
// verificar si la direccion de correo es valida
if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
$emailErr = "Formato de dirección inválido";
}
}
if (empty($_POST["website"])) {
$website = "";
} else {
$website = test_input($_POST["website"]);
// verifica si la URL es válida (la expresion regular también permite guiones en la URL)
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
$websiteErr = "URL con capacidades diferentes";
}
}
if (empty($_POST["comment"])) {
$comment = "";
} else {
$comment = test_input($_POST["comment"]);
}
if (empty($_POST["gender"])) {
$genderErr = "Genero necesario";
} else {
$gender = test_input($_POST["gender"]);
}
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
<h2>Ejemplo de Validación de Formularios con PHP</h2>
<p><span class="error">* campo requerido.</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Nombre: <input type="text" name="name" value="<?php echo $name;?>">
<span class="error">* <?php echo $nameErr;?></span>
<br><br>
E-mail: <input type="text" name="email" value="<?php echo $email;?>">
<span class="error">* <?php echo $emailErr;?></span>
<br><br>
Website: <input type="text" name="website" value="<?php echo $website;?>">
<span class="error"><?php echo $websiteErr;?></span>
<br><br>
Comentario: <textarea name="comment" rows="5" cols="40"></textarea>
<br><br>
Genero:
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="femenino") echo "checked";?>
value="femenino">Femenino
<input type="radio" name="gender"
<?php if (isset($gender) && $gender=="masculino") echo "checked";?>
value="masculino">Masculino
<span class="error">* <?php echo $genderErr;?></span>
<br><br>
<input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>Usted Ingresó:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>