{"id":3288,"date":"2025-10-06T16:09:46","date_gmt":"2025-10-06T14:09:46","guid":{"rendered":"https:\/\/tecnologia.euroinnova.com\/creacion-y-gestion-de-formularios-con-html-y-php\/"},"modified":"2025-10-07T14:52:15","modified_gmt":"2025-10-07T12:52:15","slug":"form-con-php","status":"publish","type":"post","link":"https:\/\/tecnologia.euroinnova.com\/en\/form-con-php","title":{"rendered":"Creation and management of forms with HTML and PHP"},"content":{"rendered":"<p>Un <strong>formulario<\/strong> es una de las herramientas m\u00e1s utilizadas e importante en el desarrollo web, ya que permite <strong>recopilar y enviar datos<\/strong> de los usuarios para procesarlos en un servidor.<\/p>\n<p>La interacci\u00f3n entre <strong>HTML<\/strong> y <strong>PHP<\/strong> en los formularios es necesaria para manejar los datos que env\u00edan los usuarios. HTML crea la estructura del formulario, mientras que PHP procesa y maneja esos datos en el servidor.<\/p>\n<p>Adem\u00e1s, los formularios son altamente personalizables, ya que permiten adaptar su dise\u00f1o y funcionalidad a las necesidades espec\u00edficas del sistema o del usuario, utilizando <strong>estilos CSS<\/strong> para integrarse con la est\u00e9tica del sitio.<\/p>\n<p>Una de las principales ventajas de su uso es su capacidad para <strong>validar datos<\/strong>. Otra gran ventaja es su capacidad para facilitar la comunicaci\u00f3n interactiva entre el usuario y la aplicaci\u00f3n, ya sea para b\u00fasquedas, registros, comentarios o compras.<\/p>\n<p>En este art\u00edculo vamos a ver c\u00f3mo se puede trabajar con un formulario en PHP (<strong>form en PHP<\/strong>), desde su construcci\u00f3n b\u00e1sica, los elementos que se pueden incluir y c\u00f3mo validar los datos enviados.<\/p>\n<h2 id=\"metodos-get-y-post\"><strong>M\u00e9todos GET y POST<\/strong><\/h2>\n<p>Los <strong>formularios HTML<\/strong> env\u00edan datos al servidor utilizando los <strong>m\u00e9todos GET o POST<\/strong>. En PHP, podemos identificar el m\u00e9todo usado mediante <strong>$_SERVER[&#8216;REQUEST_METHOD&#8217;]<\/strong>, que nos indica si la solicitud es POST o GET.<\/p>\n<h3 id=\"metodo-get\"><strong>M\u00e9todo GET<\/strong><\/h3>\n<p>El <strong>m\u00e9todo GET<\/strong> env\u00eda los datos como una <strong>cadena de consulta en la URL<\/strong>. Esto significa que los datos son <strong>visibles<\/strong> para el usuario, ya que se muestran directamente en el navegador.<\/p>\n<p>Es \u00fatil para formularios que no manejan informaci\u00f3n confidencial, como formularios de b\u00fasqueda o filtros de contenido.<\/p>\n<p>Como principales ventajas son que <strong>los datos son f\u00e1cilmente accesibles<\/strong> y pueden ser compartidos mediante la URL y que es \u00fatil para <strong>consultas r\u00e1pidas o pruebas<\/strong>.<\/p>\n<p>Sin embargo, hay un <strong>l\u00edmite en la cantidad de datos<\/strong> que se pueden enviar (dependiendo del navegador) y, adem\u00e1s, al ser los datos visibles, hace <strong>menos seguro<\/strong> este m\u00e9todo para informaci\u00f3n sensible.<\/p>\n<p>Un ejemplo b\u00e1sico de este m\u00e9todo:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%201.png\" alt=\"M\u00e9todo GET\" width=\"364\" height=\"88\" data-align=\"center\" data-entity-uuid=\"3d421c6a-e924-4c1f-96da-ab13ec3d2cbc\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"metodo-post\"><strong>M\u00e9todo POST<\/strong><\/h3>\n<p>El <strong>m\u00e9todo POST<\/strong> env\u00eda los datos de manera m\u00e1s segura al incluirlos en el <strong>cuerpo de la solicitud HTTP<\/strong>, no en la URL. Esto lo hace ideal para formularios que contienen informaci\u00f3n sensible, como <strong>credenciales o datos personales<\/strong>.<\/p>\n<p>En este caso <strong>no hay un l\u00edmite<\/strong> pr\u00e1ctico en la cantidad de datos enviados y es <strong>m\u00e1s seguro<\/strong> que el m\u00e9todo GET porque los datos no se muestran en la URL.<\/p>\n<p>Pero, al no incluir datos en la URL, <strong>no se pueden compartir o guardar directamente los datos<\/strong>.<\/p>\n<p>El c\u00f3digo para el mismo formulario mostrado antes, pero con el m\u00e9todo POST ser\u00eda:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%202.png\" alt=\"m\u00e9todo POST\" width=\"375\" height=\"88\" data-align=\"center\" data-entity-uuid=\"6ddc2875-97e4-443d-8d25-64278120d9c7\" data-entity-type=\"file\" \/><\/p>\n<h2 id=\"tipos-de-elementos-en-un-formulario\"><strong>Tipos de elementos en un formulario<\/strong><\/h2>\n<p>Los elementos de entrada (<strong>input<\/strong>) en un formulario HTML permiten <strong>interactuar<\/strong> con el usuario. PHP puede recoger estos datos mediante <strong>variables superglobales como $_POST y $_GET<\/strong>.<\/p>\n<p>Algunos de los <strong>elementos principales<\/strong> que se pueden incluir en un <strong>formulario<\/strong> son:<\/p>\n<h3 id=\"campos-de-texto-text\"><strong>Campos de texto (text)<\/strong><\/h3>\n<p>Los <strong>campos de texto (text)<\/strong> son los m\u00e1s comunes y permiten a los usuarios <strong>escribir informaci\u00f3n textual<\/strong>. Se utilizan para capturar nombres, direcciones o cualquier entrada alfanum\u00e9rica.<\/p>\n<p>Ejemplo:<\/p>\n<p><img decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%203.png\" alt=\"text\" width=\"513\" height=\"41\" data-align=\"center\" data-entity-uuid=\"4c313adf-8059-4a76-9ed5-3ed8bc8c9e36\" data-entity-type=\"file\" \/><\/p>\n<p>En PHP, el valor ingresado se puede capturar con:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%204.png\" alt=\"campo de texto en php\" width=\"260\" height=\"42\" data-align=\"center\" data-entity-uuid=\"6c270b23-5b05-4a87-9342-bdf695b191aa\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"campos-de-contrasena-password\"><strong>Campos de contrase\u00f1a (password)<\/strong><\/h3>\n<p>Los <strong>campos de contrase\u00f1a (password)<\/strong> ocultan la entrada del usuario reemplaz\u00e1ndola con <strong>asteriscos o puntos<\/strong>, siendo ideales para contrase\u00f1as u otra informaci\u00f3n confidencial.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%205.png\" alt=\"password\" width=\"560\" height=\"35\" data-align=\"center\" data-entity-uuid=\"a984f6d1-1fd1-4ea2-94bf-ebe442159c8c\" data-entity-type=\"file\" \/><\/p>\n<p>Y para capturar el valor en PHP:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%206.png\" alt=\"campo contrase\u00f1a\" width=\"224\" height=\"36\" data-align=\"center\" data-entity-uuid=\"8ba63c43-accb-4973-a670-84a5614c8dc3\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"radio-button-radio-y-checkbox\"><strong>Radio Button (radio) y Checkbox<\/strong><\/h3>\n<p>Los elementos <strong>Radio Buttons<\/strong> <strong>(radio)<\/strong> permiten seleccionar una sola opci\u00f3n entre varias disponibles. En cambio, los elementos <strong>Checkbox (checkbox)<\/strong> permiten seleccionar m\u00faltiples opciones.<\/p>\n<p>Un ejemplo de uso ser\u00eda el siguiente:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%207.png\" alt=\"radio\" width=\"577\" height=\"115\" data-align=\"center\" data-entity-uuid=\"afb12700-fc9c-4beb-aa66-69a250a6c89e\" data-entity-type=\"file\" \/><\/p>\n<p>Y el c\u00f3digo php para capturar los valores:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%208.png\" alt=\"radio button\" width=\"425\" height=\"51\" data-align=\"center\" data-entity-uuid=\"e14fcb2d-718b-4a30-bdaf-153198cb49d5\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"lista-desplegable-select\"><strong>Lista desplegable (select)<\/strong><\/h3>\n<p>Un elemento <strong>select<\/strong> permite a los usuarios <strong>escoger una opci\u00f3n<\/strong> de los incluidos dentro de una <strong>lista desplegable<\/strong>.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%209.png\" alt=\"select\" width=\"407\" height=\"116\" data-align=\"center\" data-entity-uuid=\"a43acb31-6f1a-47a4-8516-d79144ea395d\" data-entity-type=\"file\" \/><\/p>\n<p>En PHP:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2010.png\" alt=\"select en php\" width=\"210\" height=\"36\" data-align=\"center\" data-entity-uuid=\"58b1103f-c372-4744-a301-d62c6d42416a\" data-entity-type=\"file\" \/><\/p>\n<p>Su uso principal es para la selecci\u00f3n de un valor entre varias opciones dentro de un espacio compacto.<\/p>\n<h3 id=\"area-de-texto-textarea\"><strong>\u00c1rea de texto (Textarea)<\/strong><\/h3>\n<p>El elemento <strong>Textarea<\/strong> permite a los usuarios <strong>escribir texto en m\u00faltiples l\u00edneas<\/strong>. Es \u00fatil para comentarios o descripciones.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2011.png\" alt=\"textarea\" width=\"594\" height=\"53\" data-align=\"center\" data-entity-uuid=\"4750d671-c0ec-4d10-a0d9-4e1ef7ecdc0b\" data-entity-type=\"file\" \/><\/p>\n<p>En PHP:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2012.png\" alt=\"\u00e1rea de texto en php\" width=\"326\" height=\"38\" data-align=\"center\" data-entity-uuid=\"b1048a9e-77bb-4424-b5f8-c9db78e40999\" data-entity-type=\"file\" \/><\/p>\n<p>Su principal uso es para recolectar contenido extenso, como mensajes o textos descriptivos.<\/p>\n<h3 id=\"botones-button\"><strong>Botones (Button)<\/strong><\/h3>\n<p>El elemento <strong>button<\/strong> puede usarse para <strong>acciones personalizadas<\/strong>. Este elemento puede incluir etiquetas HTML dentro.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2013.png\" alt=\"button\" width=\"649\" height=\"51\" data-align=\"center\" data-entity-uuid=\"7e72aa3b-9a43-4199-8acf-cd011ee6435a\" data-entity-type=\"file\" \/><\/p>\n<p>Normalmente se suelen utilizar botones con dise\u00f1o personalizado o acciones espec\u00edficas mediante el uso del lenguaje JavaScript.<\/p>\n<h3 id=\"campos-de-fecha-y-hora-date-time-datetime-local\"><strong>Campos de fecha y hora (date \u2013 time \u2013 datetime-local)<\/strong><\/h3>\n<p>Los campos de <strong>fecha y hora<\/strong> permiten a los usuarios seleccionar fechas, horas o ambas, de manera f\u00e1cil y visual. Son ideales para planificaciones o agendas.<\/p>\n<p>Hay varios tipos de formatos disponibles:<\/p>\n<p><strong>Fecha (date)<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2014.png\" alt=\"fecha date\" width=\"382\" height=\"40\" data-align=\"center\" data-entity-uuid=\"813d949e-38bf-4471-a17b-695f509c0102\" data-entity-type=\"file\" \/><\/p>\n<p><strong>Hora (time)<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2015.png\" alt=\"hora time\" width=\"282\" height=\"35\" data-align=\"center\" data-entity-uuid=\"3e1645f5-a01b-4df1-931b-63a26ffb4820\" data-entity-type=\"file\" \/><\/p>\n<p><strong>Fecha y hora combinadas (datetime-local)<\/strong>:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2016.png\" alt=\"datetime-local\" width=\"361\" height=\"37\" data-align=\"center\" data-entity-uuid=\"80234757-ec7d-4882-8b13-7a5acaac0f41\" data-entity-type=\"file\" \/><\/p>\n<p>Y, para la recogida de la informaci\u00f3n en PHP:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2017.png\" alt=\"recogida de informaci\u00f3n en PHP\" width=\"319\" height=\"76\" data-align=\"center\" data-entity-uuid=\"74d9d260-07ed-486b-b570-a6d273115f55\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"rango-range\"><strong>Rango (range)<\/strong><\/h3>\n<p>Este input de <strong>rango (range)<\/strong> permite <strong>seleccionar un valor dentro de un rango<\/strong> mediante un control deslizante.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2018.png\" alt=\"ejemplo de rango\" width=\"541\" height=\"42\" data-align=\"center\" data-entity-uuid=\"5a5c96ed-e2ce-42bc-823b-a04225458685\" data-entity-type=\"file\" \/><\/p>\n<p>En PHP:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2019.png\" alt=\"rango en php\" width=\"208\" height=\"44\" data-align=\"center\" data-entity-uuid=\"8b38e4d1-c9ce-45cf-ac71-c732f1d86760\" data-entity-type=\"file\" \/><\/p>\n<p>Su principal uso es para configurar valores en un rango, como volumen, edad o porcentaje.<\/p>\n<h3 id=\"color\"><strong>Color<\/strong><\/h3>\n<p>Este elemento de formulario de <strong>Color<\/strong> permite <strong>seleccionar un color<\/strong> en espec\u00edfico a trav\u00e9s del uso de una <strong>interfaz gr\u00e1fica<\/strong>.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2020.png\" alt=\"color\" width=\"373\" height=\"38\" data-align=\"center\" data-entity-uuid=\"c5dd47d1-a3b5-4a3b-8e5c-1e419c8a53a1\" data-entity-type=\"file\" \/><\/p>\n<p>En PHP:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2021.png\" alt=\"color en php\" width=\"319\" height=\"41\" data-align=\"center\" data-entity-uuid=\"eeede36e-e9f5-4efb-b4a9-105a7786e065\" data-entity-type=\"file\" \/><\/p>\n<p>Normalmente se utiliza para dise\u00f1os personalizados, selecci\u00f3n de paletas o preferencias de colores.<\/p>\n<h3 id=\"numero-number\"><strong>N\u00famero (number)<\/strong><\/h3>\n<p>Este campo de <strong>n\u00fameros (number)<\/strong> permite introducir \u00fanicamente <strong>valores num\u00e9ricos<\/strong>, con la opci\u00f3n de configurar rangos m\u00ednimos y m\u00e1ximos.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2022.png\" alt=\"number\" width=\"554\" height=\"39\" data-align=\"center\" data-entity-uuid=\"943950f8-aba1-4a03-bede-2ab799cd4d81\" data-entity-type=\"file\" \/><\/p>\n<p>En PHP:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2023.png\" alt=\"n\u00famero en php\" width=\"275\" height=\"34\" data-align=\"center\" data-entity-uuid=\"ad96b881-6ce7-4008-8a63-b3171d2491e5\" data-entity-type=\"file\" \/><\/p>\n<p>Se utiliza para capturar cantidades, edades o valores num\u00e9ricos espec\u00edficos.<\/p>\n<h3 id=\"telefono-tel\"><strong>Tel\u00e9fono (tel)<\/strong><\/h3>\n<p>El elemento <strong>tel\u00e9fono (tel)<\/strong> es un campo optimizado para <strong>ingresar n\u00fameros de tel\u00e9fono<\/strong>. No valida autom\u00e1ticamente el formato, pero puede mejorarse con patrones.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2024.png\" alt=\"tel\u00e9fono tel\" width=\"527\" height=\"35\" data-align=\"center\" data-entity-uuid=\"dd501e73-c267-4095-9c5b-95d4482be662\" data-entity-type=\"file\" \/><\/p>\n<p>En PHP:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2025.png\" alt=\"tel\u00e9fono php\" width=\"278\" height=\"38\" data-align=\"center\" data-entity-uuid=\"7a8be502-f84b-41d8-ab8f-948f0a81bfea\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"url\"><strong>URL<\/strong><\/h3>\n<p>El campo de <strong>URL<\/strong> valida que el usuario ingrese una <strong>direcci\u00f3n web v\u00e1lida<\/strong>.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2026.png\" alt=\"url\" width=\"609\" height=\"32\" data-align=\"center\" data-entity-uuid=\"543a2ad7-9c53-4d48-ace0-c84df46eb408\" data-entity-type=\"file\" \/><\/p>\n<p>En PHP:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2027.png\" alt=\"url en php\" width=\"311\" height=\"41\" data-align=\"center\" data-entity-uuid=\"ae5819b4-a6a6-4fdb-9156-7182568ee383\" data-entity-type=\"file\" \/><\/p>\n<p>Normalmente se usa para capturar URLs para sitios web o recursos en l\u00ednea.<\/p>\n<h3 id=\"email\"><strong>Email<\/strong><\/h3>\n<p>El campo de <strong>email<\/strong> permite capturar <strong>direcciones de correo electr\u00f3nico<\/strong> y las valida autom\u00e1ticamente.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2028.png\" alt=\"email\" width=\"583\" height=\"44\" data-align=\"center\" data-entity-uuid=\"570eff75-4123-4baf-8507-38f0445194a0\" data-entity-type=\"file\" \/><\/p>\n<p>En PHP:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2029.png\" alt=\"Email en PHP\" width=\"243\" height=\"35\" data-align=\"center\" data-entity-uuid=\"9ca23b3f-4f54-4424-a675-795667d2536f\" data-entity-type=\"file\" \/><\/p>\n<p>Sirve para recolectar correos electr\u00f3nicos con validaci\u00f3n b\u00e1sica integrada.<\/p>\n<h3 id=\"botones-de-reinicio-reset\"><strong>Botones de reinicio (reset)<\/strong><\/h3>\n<p>Este tipo de <strong>bot\u00f3n de reinicio (reset)<\/strong> permite restablecer todos los campos del formulario a sus <strong>valores predeterminados<\/strong>.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2030.png\" alt=\"botones de reinicio\" width=\"353\" height=\"31\" data-align=\"center\" data-entity-uuid=\"2add66b0-2151-4a70-8222-2ba2c53f3f90\" data-entity-type=\"file\" \/><\/p>\n<p>Se utiliza para limpiar r\u00e1pidamente un formulario.<\/p>\n<h3 id=\"campos-de-busqueda-search\"><strong>Campos de b\u00fasqueda (search)<\/strong><\/h3>\n<p>El elemento de campos de b\u00fasqueda (serach) est\u00e1 optimizado para formularios de b\u00fasqueda, aunque funcionalmente es similar a un campo de texto. Sirve para buscar ciertos t\u00e9rminos dentro del formulario.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2031.png\" alt=\"campos de b\u00fasqueda\" width=\"529\" height=\"36\" data-align=\"center\" data-entity-uuid=\"9f9a3797-85b0-4426-bea8-ccc02afc7531\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"archivos-file\"><strong>Archivos (file)<\/strong><\/h3>\n<p>El campo de <strong>archivos (file)<\/strong> permite seleccionar y <strong>cargar archivos<\/strong> al servidor.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2032.png\" alt=\"archivos\" width=\"331\" height=\"37\" data-align=\"center\" data-entity-uuid=\"fec2d48c-2e6a-451b-a995-14751dfd6f80\" data-entity-type=\"file\" \/><\/p>\n<p>Y, en el caso de que se quiera cargar m\u00faltiples archivos:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2033.png\" alt=\"file archivo\" width=\"405\" height=\"44\" data-align=\"center\" data-entity-uuid=\"f01c9918-6530-484e-ae4c-79f04c9d4399\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"ocultos-hidden\"><strong>Ocultos (hidden)<\/strong><\/h3>\n<p>Los campos <strong>ocultos (hidden)<\/strong> transmiten datos al servidor <strong>sin mostrarlos al usuario<\/strong>.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2034.png\" alt=\"ocultos hidden\" width=\"447\" height=\"39\" data-align=\"center\" data-entity-uuid=\"97fe8638-5378-48c5-a12f-24a50105d30a\" data-entity-type=\"file\" \/><\/p>\n<p>Su uso principal es el de enviar datos adicionales como tokens de seguridad o identificadores de usuario.<\/p>\n<h3 id=\"botones-de-envio-submit\"><strong>Botones de env\u00edo (submit)<\/strong><\/h3>\n<p>Para el env\u00edo de todos los elementos incluidos en un formulario se hace a trav\u00e9s de un <strong>bot\u00f3n de env\u00edo (submit)<\/strong>. El atributo type=\u00bbsubmit\u00bb es esencial para procesar formularios:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2035.png\" alt=\"botones de env\u00edo\" width=\"322\" height=\"42\" data-align=\"center\" data-entity-uuid=\"878ea7b2-1b34-46ea-9db8-93658d2714bd\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"imagen-como-boton-de-envio-image\"><strong>Imagen como bot\u00f3n de env\u00edo (image)<\/strong><\/h3>\n<p>Tambi\u00e9n se puede utilizar el elemento de <strong>imagen como bot\u00f3n de env\u00edo (image)<\/strong>, que utiliza una imagen como bot\u00f3n interactivo para enviar el formulario.<\/p>\n<p>Ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2036_0.png\" alt=\"imagen como bot\u00f3n de env\u00edo\" width=\"593\" height=\"31\" data-align=\"center\" data-entity-uuid=\"91c65832-9b2e-45bf-af15-b1baebebd3df\" data-entity-type=\"file\" \/><\/p>\n<p>Todos estos elementos permiten tener flexibilidad y adaptabilidad en la creaci\u00f3n de formularios interactivos y funcionales para cualquier aplicaci\u00f3n web.<\/p>\n<h2 id=\"validacion-de-datos\"><strong>Validaci\u00f3n de datos<\/strong><\/h2>\n<p>Antes de procesar los datos de un formulario en PHP, es fundamental <strong>validarlos<\/strong>. Esto garantiza que <strong>los datos sean seguros y est\u00e9n en el formato correcto<\/strong>.<\/p>\n<h3 id=\"por-que-validar-datos\"><strong>\u00bfPor qu\u00e9 validar datos?<\/strong><\/h3>\n<ol>\n<li><strong>Seguridad<\/strong>: evita la inyecci\u00f3n de c\u00f3digo malicioso.<\/li>\n<li><strong>Precisi\u00f3n<\/strong>: asegura que los datos son correctos y completos.<\/li>\n<li><strong>Experiencia del usuario<\/strong>: permite identificar errores antes de enviar el formulario.<\/li>\n<\/ol>\n<h3 id=\"validacion-basica\"><strong>Validaci\u00f3n b\u00e1sica<\/strong><\/h3>\n<p>Para llevar a cabo una <strong>validaci\u00f3n b\u00e1sica<\/strong> en PHP se puede controlar que los <strong>valores<\/strong> introducidos est\u00e9n <strong>rellenos<\/strong> tal y como se muestra en el siguiente ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2037.png\" alt=\"validaci\u00f3n b\u00e1sica\" width=\"417\" height=\"132\" data-align=\"center\" data-entity-uuid=\"e0b0d9a9-fc26-43cc-832a-054f0eed12b7\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"validacion-con-filtros\"><strong>Validaci\u00f3n con filtros<\/strong><\/h3>\n<p>PHP tambi\u00e9n incluye funciones como <strong>filter_var<\/strong> para validar correos electr\u00f3nicos, URLs, entre otros campos que normalmente se deben validar. Podemos ver un ejemplo en el siguiente c\u00f3digo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2038.png\" alt=\"validaci\u00f3n con filtros\" width=\"432\" height=\"97\" data-align=\"center\" data-entity-uuid=\"61d7fbb6-685c-4aba-95bc-0f7b8c0bd071\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"evitar-inyecciones-de-codigo\"><strong>Evitar inyecciones de c\u00f3digo<\/strong><\/h3>\n<p>Otro aspecto fundamental a la hora de validar datos de un formulario es el intentar evitar ser v\u00edctimas de <strong>inyecciones de c\u00f3digo<\/strong>. Normalmente se suele utilizar el conocido ataque <strong>SQL Injection<\/strong> que consiste en insertar dentro de un campo de formulario consultas SQL para explotar vulnerabilidades en las consultas a las bases de datos indicadas.<\/p>\n<p>Para intentar evitar estas inyecciones de c\u00f3digo se puede usar, por ejemplo, <strong>htmlspecialchars<\/strong> para prevenir la <strong>ejecuci\u00f3n de c\u00f3digo HTML<\/strong>.<\/p>\n<p>Esto permite sanitizar las entradas de informaci\u00f3n del usuario en el formulario. Por ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2039.png\" alt=\"evitar inyecciones de c\u00f3digo\" width=\"408\" height=\"40\" data-align=\"center\" data-entity-uuid=\"5dcb6847-f6bc-4051-960a-67a907117b2e\" data-entity-type=\"file\" \/><\/p>\n<h3 id=\"validaciones-en-la-subida-de-archivos\"><strong>Validaciones en la subida de archivos<\/strong><\/h3>\n<p>Tambi\u00e9n es importante la <strong>validaci\u00f3n del tipo de archivos<\/strong> que los usuarios pueden subir en los campos concretos para ello dentro del formulario.<\/p>\n<p>Para ello, hay <strong>2 t\u00e9cnicas<\/strong> fundamentales. Por un lado, estar\u00eda el de <strong>verificar el tipo de archivo<\/strong> enviado permitiendo solo aquellos que se deseen y evitando de esta forma que se puedan enviar archivos maliciosos. Por ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2040.png\" alt=\"validaciones en la subida de archivos\" width=\"459\" height=\"88\" data-align=\"center\" data-entity-uuid=\"a6cc8809-0544-4fd2-b913-6a36fe856e23\" data-entity-type=\"file\" \/><\/p>\n<p>Y, por otro lado, es interesante limitar el tama\u00f1o permitido de los archivos enviados a trav\u00e9s del formulario para evitar problemas. Por ejemplo:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"\/wp-content\/uploads\/inline-images\/imagen%2041.png\" alt=\"validaciones en la subida de archivos\" width=\"373\" height=\"89\" data-align=\"center\" data-entity-uuid=\"054a45be-9b96-4f68-a022-833e6c607ede\" data-entity-type=\"file\" \/><\/p>\n<h2 id=\"form-con-php-entrada-de-datos-segura\"><strong>Form con PHP, entrada de datos segura<\/strong><\/h2>\n<p>Trabajar con formularios es fundamental para cualquier aplicaci\u00f3n o p\u00e1gina web din\u00e1mica. Desde la captura de datos hasta la gesti\u00f3n avanzada de archivos, la combinaci\u00f3n de <strong>PHP y HTML<\/strong> proporcionan las bases para construir aplicaciones interactivas y seguras.<\/p>\n<p>Y recuerda, es indispensable siempre validar las entradas para garantizar la seguridad de cualquier aplicaci\u00f3n.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un formulario es una de las herramientas m\u00e1s utilizadas e importante en el desarrollo web, ya que permite recopilar y [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":929,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3288","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categorizar"],"acf":[],"_links":{"self":[{"href":"https:\/\/tecnologia.euroinnova.com\/en\/wp-json\/wp\/v2\/posts\/3288","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tecnologia.euroinnova.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tecnologia.euroinnova.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tecnologia.euroinnova.com\/en\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/tecnologia.euroinnova.com\/en\/wp-json\/wp\/v2\/comments?post=3288"}],"version-history":[{"count":0,"href":"https:\/\/tecnologia.euroinnova.com\/en\/wp-json\/wp\/v2\/posts\/3288\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tecnologia.euroinnova.com\/en\/wp-json\/wp\/v2\/media\/929"}],"wp:attachment":[{"href":"https:\/\/tecnologia.euroinnova.com\/en\/wp-json\/wp\/v2\/media?parent=3288"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tecnologia.euroinnova.com\/en\/wp-json\/wp\/v2\/categories?post=3288"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tecnologia.euroinnova.com\/en\/wp-json\/wp\/v2\/tags?post=3288"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}