{"id":5202,"date":"2025-12-18T11:57:10","date_gmt":"2025-12-18T10:57:10","guid":{"rendered":"https:\/\/sutilweb.eu\/?page_id=5202"},"modified":"2025-12-18T11:57:11","modified_gmt":"2025-12-18T10:57:11","slug":"19-formularios-en-php","status":"publish","type":"page","link":"https:\/\/sutilweb.eu\/index.php\/lenguajes\/php\/php-practico\/19-formularios-en-php\/","title":{"rendered":"19. Formularios en PHP"},"content":{"rendered":"\n<p>En este cap\u00edtulo veremos como generar una interacci\u00f3n entre los usuarios que visiten nuestro sitio web y nuestro servidor, es decir, que los usuarios puedan enviar informaci\u00f3n a nuestro servidor, y desde nuestro servidor procesar dicha informaci\u00f3n. Por ejm, que un usuario quiera autenticarse, lo que tiene que hacer es enviar su correo y contrase\u00f1a y desde nuestro servidor se comprobar\u00e1 que sean correctas, de ser as\u00ed iniciamos sesi\u00f3n, caso contrario lo rechazamos.<\/p>\n\n\n\n<p>Mediante los formularios se puede enviar dicha informaci\u00f3n. Para entender lo que son los formularios vamos a crear una sintaxis con todos los tipos de campos (inputs) que se pueden crear.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">M\u00e9todos de env\u00edo de formularios<\/h2>\n\n\n\n<p>Existen 2 m\u00e9todos para el env\u00edo de formulario:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>M\u00e9todo GET: si utilizamos este m\u00e9todo, todos los campos de este formulario se enviar\u00e1n en el header del objeto HTTP Request,\u00a0y al enviarse en el header vamos a poder visualizar toda la informaci\u00f3n que estamos enviando en el formulario desde la URL.<\/li>\n\n\n\n<li>M\u00e9todo POST: toda la informaci\u00f3n viajar\u00e1 de manera oculta a trav\u00e9s del body del objeto HTTP Request, el m\u00e9todo POST se utilizar\u00e1 cuando estemos enviando informaci\u00f3n de manera sensible.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Variables globales&nbsp;<\/h2>\n\n\n\n<p>Siempre que enviamos informaci\u00f3n v\u00eda formulario, dicha informaci\u00f3n se queda almacenada en unas variables globales que tiene PHP. Existen varios tipos de estas variables globales.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><em>$_GET<\/em><\/strong>: almacena la informaci\u00f3n de formulario enviada v\u00eda GET<\/li>\n\n\n\n<li><strong><em>$_POST<\/em><\/strong>: almacena la informaci\u00f3n de formulario enviada v\u00eda POST<\/li>\n\n\n\n<li><strong><em>$_REQUEST<\/em><\/strong>: almacena la informaci\u00f3n tanto de los formularios GET como POST<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Env\u00edo de archivos<\/h2>\n\n\n\n<p>Cuando queramos enviar archivos a nuestro servidor no podemos utilizar el m\u00e9todo GET, debemos utilizar necesariamente el m\u00e9todo POST. Adem\u00e1s hay que habilitar el env\u00edo de archivos, para lo cual, a la etiqueta <strong><em>&lt;form&gt;<\/em><\/strong> le tenemos que agregar el atributo <strong><em>enctype=\u00bbmultipart\/form-data\u00bb<\/em><\/strong>. De esta manera habilitamos el env\u00edo de archivos desde un formulario, si no lo hacemos no podremos enviar archivos al servidor.<\/p>\n\n\n\n<p>Para recibir el archivo ya no utilizaremos las variables globales anteriormente utilizadas ($_POST o $_REQUEST), utilizaremos la variable global $_FILES[&#8216;image&#8217;], siendo image la llave que utilizaremos para recuperar los datos del archivos que hemos enviado.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estructura select<\/h2>\n\n\n\n<p>La etiqueta &lt;select&gt;&lt;\/select&gt; viene acompa\u00f1ada de la etiqueta &lt;option&gt;&lt;\/option&gt;. Los select funcionan de una manera similar a los inputs de tipo radio, s\u00f3lo que permite tener estos elementos en forma de lista.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Estructura textarea<\/h2>\n\n\n\n<p>La etiqueta &lt;textarea&gt; permite colocar una especie de input pero m\u00e1s grande, se utiliza si necesitamos mandar un texto m\u00e1s largo.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Ejemplo<\/h2>\n\n\n\n<p>Os dejamos un ejemplo completo con dos p\u00e1ginas, una que env\u00eda los datos mediante un formulario y la otra que los recibe.<\/p>\n\n\n\n<p><strong>formulario.php<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n&lt;!DOCTYPE html>\n&lt;html lang=\"en\">\n&lt;head>\n  &lt;meta charset=\"UTF-8\">\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  &lt;title>Document&lt;\/title>\n&lt;\/head>\n\n&lt;body>\n  &lt;form action=\"21-formularios2.php\" method=\"POST\" enctype=\"multipart\/form-data\">\n    &lt;!-- Input type text -->\n    &lt;!-- Primera manera del uso de la etiqueta &lt;label> junto con &lt;input>, para ello en el input\n    ponemos un atributo id que tiene que tener el mismo valor que el valor utilizado en el atributo\n    for de la etiqueta label, en nuestro caso el atributo es 'nombre' -->\n\n    &lt;!-- &lt;label for=\"nombre\">Nombre&lt;\/label>\n    &lt;input type=\"text\" id=\"nombre\"> -->\n\n    &lt;!-- Segunda manera del uso de la etiqueta &lt;label> junto con &lt;input>, todo dentro\n    de las etiquetas &lt;label> &lt;\/label> Ser\u00e1 el que usaremos para el ejercicio -->\n\n    &lt;label>\n      Nombre: \n      &lt;input type=\"text\" name=\"nombre\" autofocus=\"autofocus\">\n    &lt;\/label> \n\n    &lt;br>\n\n    &lt;label>\n      Edad: \n      &lt;input type=\"number\" name=\"edad\">\n    &lt;\/label> \n\n    &lt;br>\n\n    &lt;!-- Inputs de tipo radio para s\u00f3lo poder elegir una opci\u00f3n -->\n     &lt;!-- El atributo name tiene que llevar el mismo nombre -->\n    &lt;p>Sexo: &lt;\/p>\n\n    &lt;label>\n      &lt;input type=\"radio\" name=\"sexo\" value=\"masculino\">\n      Masculino \n    &lt;\/label> \n\n    &lt;label>\n      &lt;input type=\"radio\" name=\"sexo\" value=\"femenino\">\n      Femenino \n    &lt;\/label> \n   \n    &lt;br>\n\n    &lt;!-- Env\u00edo de m\u00e1s de 1 informaci\u00f3n en un mismo campo mediante un input tipo checkbox -->\n    &lt;p>Roles: &lt;\/p>\n\n    &lt;label>\n      &lt;input type=\"checkbox\" name=\"roles&#91;]\" value=\"administrador\">\n      Administrador \n    &lt;\/label> \n\n    &lt;label>\n      &lt;input type=\"checkbox\" name=\"roles&#91;]\" value=\"editor\">\n      Editor \n    &lt;\/label> \n\n    &lt;label>\n      &lt;input type=\"checkbox\" name=\"roles&#91;]\" value=\"moderador\">\n      Moderador \n    &lt;\/label> \n\n    &lt;br>&lt;br>\n\n    &lt;!-- Env\u00edo de archivos -->\n    &lt;label>\n      Imagen: \n      &lt;input type=\"file\" name=\"image\">\n    &lt;\/label> \n\n    &lt;br>\n\n    &lt;!-- Uso de la etiqueta &lt;select>, similar a el input de tipo radio pero mostrando una lista -->\n    &lt;p>Oficio:&lt;\/p>\n    &lt;select name=\"oficio\">\n      &lt;option value=\"mecanico\">Mec\u00e1nico&lt;\/option>\n      &lt;option value=\"carpintero\" selected>Carpintero&lt;\/option>\n    &lt;\/select>\n    &lt;br>&lt;br>\n\n    &lt;!-- Uso de la etiqueta &lt;textarea> -->\n    &lt;label>\n      Mensaje: &lt;br>\n      &lt;textarea name=\"mensaje\" cols=\"100\" rows=\"10\">Escribe tu texto&lt;\/textarea>\n    &lt;\/label>\n\n    &lt;br>&lt;br>\n\n    &lt;!-- Enviar todos los campos del formulario al archivo incluido en el atributo action de \n    la etiqueta &lt;form> -->\n    &lt;button type=\"submit\">Enviar&lt;\/button>\n  &lt;\/form>\n&lt;\/body>\n&lt;\/html><\/code><\/pre>\n\n\n\n<p><strong>formulario-recepcion.php<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\n&lt;!DOCTYPE html>\n&lt;html lang=\"en\">\n&lt;head>\n  &lt;meta charset=\"UTF-8\">\n  &lt;meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  &lt;title>Document&lt;\/title>\n&lt;\/head>\n\n&lt;body>\n  &lt;?php\n    $nombre = $_REQUEST&#91;'nombre'];\n    echo \"El nombre del usuario es: &lt;b> $nombre&lt;\/b>\";\n\n    echo \"&lt;br \/>\";\n    \n    $edad = $_REQUEST&#91;'edad'];\n    echo \"La edad del usuario es: &lt;b> $edad&lt;\/b>\";\n\n    echo \"&lt;br \/>\";\n    \n    $sexo = $_REQUEST&#91;'sexo'];\n    echo \"El sexo del usuario es: &lt;b> $sexo&lt;\/b>\";\n    \n    $roles = $_REQUEST&#91;'roles'];\n    echo \"&lt;p>Roles: &lt;\/p>\";\n    echo \"&lt;ul>\";\n    foreach ($roles as $rol) {\n      echo \"&lt;li>$rol&lt;\/li>\";\n    }\n    echo \"&lt;\/ul>\";\n    \n    $image = $_FILES&#91;'image'];\n    \/\/ var_dump($image)\n    \n    \/\/ Creo una variable que muestra la ruta de nuestro servidor\n    $patch = $_SERVER&#91;'DOCUMENT_ROOT'] . \"\/2025\/php8-mysql8-curso\/imagenes\/\" . $image&#91;'name'];\n    \n    \/\/ echo \"La ruta donde se almacena la imagen es: $patch\";\n    \/\/ echo \"&lt;br \/>&lt;br \/>\";\n    \n    \/\/ Vamos a mover la imagen de la carpeta temporal a la carpeta que est\u00e1 en la ruta $path\n    \/\/ Lo haremos mediante la funci\u00f3n move_uploaded_file(donde se encuentra actualmente la imagen, ruta de destino)\n    move_uploaded_file($image&#91;'tmp_name'], $patch);\n    \n    $oficio = $_REQUEST&#91;'oficio'];\n    echo \"El oficio del usuario es: &lt;b> $oficio&lt;\/b>&lt;br \/>\";\n\n    $mensaje = $_REQUEST&#91;'mensaje'];\n    echo \"Mensaje enviado: $mensaje\";\n  ?>\n  &lt;\/form>\n&lt;\/body>\n&lt;\/html><\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En este cap\u00edtulo veremos como generar una interacci\u00f3n entre los usuarios que visiten nuestro sitio web y nuestro servidor, es [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":4518,"menu_order":18,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_uag_custom_page_level_css":"","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-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":"","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-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":"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":""},"mobile":{"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":""}},"footnotes":""},"class_list":["post-5202","page","type-page","status-publish","hentry"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"Sutil Web","author_link":"https:\/\/sutilweb.eu\/index.php\/author\/sutilweb\/"},"uagb_comment_info":0,"uagb_excerpt":"En este cap\u00edtulo veremos como generar una interacci\u00f3n entre los usuarios que visiten nuestro sitio web y nuestro servidor, es [&hellip;]","_links":{"self":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/5202","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/comments?post=5202"}],"version-history":[{"count":3,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/5202\/revisions"}],"predecessor-version":[{"id":5205,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/5202\/revisions\/5205"}],"up":[{"embeddable":true,"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/pages\/4518"}],"wp:attachment":[{"href":"https:\/\/sutilweb.eu\/index.php\/wp-json\/wp\/v2\/media?parent=5202"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}