Contactos

Obtenga y publique ejemplos. Atributo y método de acción. Métodos GET y POST. Elegir entre GET y POST

Los recursos web modernos no solo brindan información al visitante, sino que también interactúan con él. Para interactuar con el usuario, debe obtener alguna información de él. Hay varios métodos para obtener datos, métodos muy comunes. OBTENER y CORREO... Y en consecuencia en PHP hay soporte para estos métodos de transferencia de datos OBTENER y CORREO... Veamos cómo funcionan estos métodos.
Método GET Datos usando el método GET se pasan agregándolos a la URL del script llamado destinado a procesar la información recibida. Para aclaración este método Escriba la URL del recurso en la barra de direcciones de su navegador y agregue primero un signo de interrogación (?) Y luego la línea num = 10. Por ejemplo

http: //dominio.ru/script.php? num = 10


Si usted tiene servidor local entonces, por lo general, el dominio será localhost, y luego la entrada anterior se verá así

http: //localhost/script.php? num = 10


En este caso, pasamos el parámetro num igual a 10. Para agregar los siguientes parámetros al script, debe usar el separador y comercial (&), por ejemplo

http: //domain.ru/script.php? num = 10 & type = new & v = text


En este caso, pasamos tres parámetros al script: num con un valor de 10, tipo con un valor de "nuevo" y v con un valor de "texto".
Para obtener estos parámetros en el script, debe usar la matriz incorporada $ _GET $ _GET ["num"], $ _GET ["type"], $ _ GET ["v"]... Estos elementos de matriz contendrán los valores de los parámetros pasados. Para demostrar este ejemplo, cree un archivo script.php con el siguiente contenido



Verificando el método GET en PHP


echo ($ _GET ["num"]. "
");
echo ($ _GET ["tipo"]. "
");
echo ($ _GET ["v"]);
?>




Y ahora llame a este archivo en el navegador

http: //path/script.php? num = 10 & type = new & v = text


y verá los parámetros pasados ​​en la ventana del navegador. Pero si llama a este archivo sin parámetros adicionales http: //path/script.php, verá los errores que dará el intérprete PHP, que no existen tales elementos de la matriz $ _GET. Se puede dedicar más de un artículo a verificar los datos recibidos del usuario, por lo que en este artículo no tocaré este punto.
Como probablemente comprenderá, obligar al usuario a escribir datos en la barra de direcciones del navegador no es muy bueno y completamente inconveniente. Por lo tanto, para recibir datos del usuario, debe utilizar formularios html. Escribamos un formulario html simple.


Ingrese el numero

¿Tienes una computadora?

Tu comentario:





Comentaré un poco el formulario creado. Los formularios se crean con la etiqueta de formulario. Los campos de formulario se crean con etiquetas de entrada, selección y área de texto (puede leer más sobre esto). En la etiqueta del formulario, el atributo de acción especifica la URL del script que recibirá los datos del formulario. En nuestro caso, especificamos el archivo script.php que ya existía para nosotros. El atributo de método especifica el método enviando datos... Hemos especificado el método OBTENER... ¡Ahora sabemos a qué archivo se transferirán los datos del formulario y de qué manera, queda por averiguar dónde buscarlos allí!
Los datos de este formulario serán pasados ​​al recurso web por el navegador agregándolos a la URL: primero habrá un signo de interrogación (?), Luego se presentarán los parámetros, separados por un ampersand (&). El nombre del parámetro se tomará del atributo de nombre, que debe escribirse en cualquier campo de formulario. El valor del parámetro dependerá del tipo de campo. Si el campo es texto, el valor será el texto ingresado por el usuario. Si el campo es una lista, un grupo de botones de opción o casillas de verificación, entonces el valor del parámetro será el valor del atributo de valor del elemento seleccionado. Déjame explicarte con el ejemplo de nuestro formulario. Si el usuario ingresa el número 10 en el campo de entrada, entonces el nombre del parámetro será num (el valor del atributo de nombre de la etiqueta de entrada), y el valor será 10 (el número ingresado por el usuario). En consecuencia, el navegador generará un par "num = 10". Si el usuario selecciona "Sí" de la lista, el nombre del parámetro será tipo (el valor del atributo de nombre de la etiqueta de selección) y el valor será sí (el valor del atributo de valor de la etiqueta de opción). En consecuencia, el navegador generará un par "type = yes".
Ahora colocaremos este formulario en la página forma.php.



Formulario para transferir datos usando el método GET y PHP



Ingrese el numero

¿Tienes una computadora?

Tu comentario:









Ingrese cualquier valor en los campos del formulario y haga clic en el botón "Enviar". Después de hacer clic en el botón, el navegador abrirá otra página (script.php) y los datos que ingresó se mostrarán en la ventana del navegador. Creo que está claro por qué: el navegador pasará los datos al script script.php, y en el script estos datos se procesarán y se mostrarán en la pantalla.
Método POST Ahora veamos cómo funciona el método. CORREO.
Para enviar datos usando el método CORREO necesita utilizar formularios HTML. Como recordamos, el atributo de método de la etiqueta del formulario es responsable del método de envío de datos del formulario. Por lo tanto, debe especificar el valor POST en el atributo de método de la etiqueta del formulario. De lo contrario, el formulario puede ser el mismo que para el método GET. Cambiemos nuestro formulario, que ya usamos para enviar datos usando el método GET, para enviarlos usando el método POST.


Ingrese el numero

¿Tienes una computadora?

Tu comentario:





Como puede ver, el formulario sigue siendo el mismo excepto por los atributos de método y acción. Los datos ahora se pasarán al script script_post.php. Coloquemos nuestro formulario en la página forma_post.php.



Formulario para enviar datos por método POST y PHP



Ingrese el numero

¿Tienes una computadora?

Tu comentario:









Ahora necesitamos escribir un script que procese los datos de nuestro formulario.
Para obtener datos en el script mediante el método pasado CORREO necesita usar una matriz incorporada $ _POST... Las claves de esta matriz serán los nombres de los parámetros. En nuestro caso, debe utilizar $ _POST ["num"], $ _POST ["tipo"], $ _ POST ["v"]... Estos elementos de la matriz contendrán los valores de los datos pasados. Como puede ver, la diferencia con el uso del método GET se expresa solo en el uso de la matriz $ _POST. Por lo tanto, no nos resultará difícil escribir el archivo script_post.php:



Validación del método PHP POST


echo ($ _POST ["num"]. "
");
echo ($ _POST ["tipo"]. "
");
echo ($ _POST ["v"]);
?>




Ahora abra el archivo forma_post.php en un navegador. Ingrese algunos datos en los campos del formulario y haga clic en el botón "Enviar". A estas alturas, probablemente haya notado la diferencia entre el método POST y el método GET: los datos del formulario no aparecían en la barra de direcciones del navegador. Datos por método CORREO no se puede pasar a través de la barra de direcciones del navegador. Ésta es una diferencia significativa para recordar.
V PHP Independientemente de cómo se enviaron los datos, por el método POST o por el método GET, puede obtener los datos utilizando la matriz $ _REQUEST. Comparación de los métodos GET y POST Con el método GET, los datos se pasan agregándolos a la URL. Por lo tanto, serán visibles para el usuario, lo que no siempre es bueno desde el punto de vista de la seguridad. Además, la cantidad máxima de datos transmitidos dependerá del navegador, del número máximo permitido de caracteres en la barra de direcciones del navegador.
Cuando se utiliza el método POST, los datos no serán visibles para el usuario (no se muestran en la barra de direcciones del navegador). Y por tanto son más seguros y, en consecuencia, el programa que procesa estos datos es más seguro en términos de seguridad. Además, la cantidad de datos transmitidos es prácticamente ilimitada.
Al elegir un método de transferencia de datos, debe tener en cuenta las características anteriores y detenerse en el método más aceptable.

Lo que tienen en común es que funcionan de la misma manera. Técnicamente, no hay diferencia entre ellos. Pero existen diferencias ideológicas.

Los cubriré en el contexto de PHP. Tenga en cuenta que el protocolo HTTP está indirectamente relacionado con PHP porque fue creado para el intercambio de páginas html y PHP simplemente amplía las capacidades de ambos.

La solicitud GET se utiliza para recibir datos y POST para enviar. (Les recuerdo que técnicamente funcionan de la misma manera).

Por lo tanto, en el contexto de PHP, basados ​​en esta ideología, hicieron lo siguiente:
1. Las matrices superglobales ($ _GET, $ _POST) se crean por defecto cada vez que inicia PHP.
2. Si hay un signo de interrogación (?) En la cadena de consulta. Entonces todo lo que cuenta después de él parámetros Solicitud GET, se presentan en el formato "clave" = "valor" y el carácter comercial (&) se utiliza como separador
Ejemplo:
OBTENER /index.php?name=Andrey&surname=Galkin
esta es una cadena de consulta, hay 2 parámetros. estos parámetros terminarán en la matriz $ _GET.
3. $ _POST se rellena de otra forma. el contenido de esta matriz se completa a partir de los "encabezados de solicitud". Es decir, desde un lugar oculto a la vista de forma explícita. El navegador asume toda la rutina de crear dichos encabezados. Aunque a veces algo se edita manualmente en los encabezados.

La mayoría de las veces, la solicitud de publicación se utiliza en formularios (para enviar datos).

Por ejemplo, tenemos un formulario de inicio de sesión de 2 campos de inicio de sesión y contraseña.

Imaginemos que estamos usando el método GET. Luego, al enviar el formulario, nos dirigiremos a la siguiente dirección /login.php?login=Andrey&password=123 acepto que no es nada seguro transferir dicha información de esta manera. Cualquiera puede abrir su navegador y comenzar a ingresar la dirección del sitio, puede ver sus contraseñas e inicios de sesión del historial.

Pero si especificamos usando el método POST, entonces recibiríamos la siguiente solicitud:
POST /login.php (login = Andrey & password = 123) qué estaría oculto entre paréntesis y no guardado en el navegador.

En general, para resumir:
OBTENER es obtener una página específica de una manera específica (clasificación, página de blog actual, cadena de búsqueda, etc.).
POST: para enviar datos que no afectan la visualización de la página, en el sentido de que estos datos solo afectan el resultado de la ejecución del script (inicios de sesión, contraseñas, números de tarjetas de crédito, mensajes, etc.).

Y otro buenas noticias se pueden combinar, por ejemplo
POST /index.php?page=login (login = Andrey & password = 123) Creo que ya he explicado lo suficiente lo que vendrá y qué parámetros entrarán en cada matriz.

Los métodos GET y POST en HTTP y HTTPS son dos de los métodos más populares utilizados para transferir datos de un cliente a un servidor utilizando el protocolo HTTP (Protocolo de transferencia de hipertexto). Tanto GET como POST se pueden utilizar para enviar una solicitud y recibir una respuesta, pero existe una diferencia significativa entre los dos.

La diferencia entre las solicitudes GET y POST en HTTP o HTTPS es una pregunta popular en todas las entrevistas de programación web. Dado que HTML es independiente de la tecnología de servidor web como Java, ASP o PHP, y HTTP es el protocolo principal en el espacio de Internet, no se puede ignorar claramente la importancia de comprender los métodos GET y POST. En este artículo, veremos qué es un método HTTP GET, qué es un método HTTP POST, cuándo usar una solicitud en particular y cuál es la diferencia entre ellos. Analicemos cada concepto por separado.

¿Qué es HTML?

HTML es el lenguaje utilizado para crear páginas web. El hipertexto se refiere a los hipervínculos que puede contener una página HTML. El lenguaje de marcado se refiere a la forma en que se utilizan las etiquetas para definir el diseño de la página y los elementos de la página.
abajo esta el Ejemplo HTML que se utiliza para definir una página web básica con un encabezado y un párrafo de texto:



<Голова>
<Название>TechTerms.com

<Тело>

Este es un ejemplo de un párrafo en HTML.

La primera línea define el tipo de contenido que contiene el documento., y que están todos incluidos en el ejemplo anterior. El título de la página, los metadatos y los enlaces de archivos de anclaje se colocan entre las etiquetas. El contenido real de la página está entre las etiquetas. .

La web ha sufrido muchos cambios en las últimas décadas, pero HTML siempre ha sido el lenguaje principal utilizado para desarrollar páginas web. Curiosamente, mientras que los sitios web se han vuelto más avanzados e interactivos, HTML se ha vuelto más simple. Si compara el código fuente de una página HTML5 con una página similar escrita en HTML 4.01 o XHTML 1.0, habrá menos código en la página HTML5. Esto se debe a que el HTML moderno se basa en hojas de estilo en cascada o JavaScript para formatear casi todos los elementos de una página.

Muchos sitios web dinámicos generan páginas web sobre la marcha utilizando un lenguaje de programación del lado del servidor como PHP o ASP. Sin embargo, incluso las páginas dinámicas deben formatearse con usando HTML... Por lo tanto, los lenguajes de secuencias de comandos suelen generar HTML que se envía al navegador web.

El Protocolo de transferencia de hipertexto HTTP está diseñado para la comunicación entre clientes y servidores y funciona como un protocolo de solicitud-respuesta.

El navegador web puede ser el cliente y la aplicación en la computadora que aloja el sitio web puede ser el servidor.

El cliente (navegador) envía una solicitud HTTP al servidor, el servidor devuelve una respuesta que contiene información sobre el estado de la solicitud y también puede contener el contenido solicitado.

Dos métodos de solicitud GET y POST

Dos métodos de uso común para solicitud-respuesta entre cliente y servidor:

    GET: solicita datos del recurso especificado;

    POST: envía datos para su procesamiento al recurso especificado.

Traducir GET y POST significa literalmente obtener y posprocesar.

Más acerca de HTTP

HTTP es el protocolo utilizado para transferir datos a través de Internet. Es parte del paquete de Protocolo de Internet y define los comandos y servicios utilizados para transferir datos de páginas web.

HTTP usa el modelo servidor-cliente. El cliente puede ser una computadora doméstica, portátil o dispositivo móvil... El servidor HTTP suele ser un servidor web con software servidor web como Apache o IIS. Cuando un usuario accede a un sitio web, el navegador envía una solicitud al servidor web correspondiente y responde con un código de estado HTTP. Si la URL es válida y se proporciona la conexión, el servidor enviará la página web y los archivos asociados al navegador.

Los códigos de estado HTTP comunes incluyen:

    200 - solicitud exitosa (la página web existe);

    301: se mueve constantemente (a menudo redirige a una nueva URL);

    401 - solicitud no autorizada (se requiere autorización);

    500: error interno del servidor (a menudo causado por una configuración incorrecta del servidor).

POST y GET en HTTP

HTTP define los comandos GET y POST que se utilizan para procesar envíos de formularios en sitios web. El comando CONNECT se utiliza para facilitar una conexión segura cifrada mediante SSL. Las conexiones HTTP cifradas se realizan a través de HTTPS, una extensión HTTP diseñada para transferencias de datos seguras.

Las URL que comienzan con "http: //" son accesibles a través de protocolos de transferencia de hipertexto estándar y, de forma predeterminada, usan el puerto 80. Las URL que comienzan con "https: //" son accesibles a través de conexión segura HTTPS y, a menudo, utilizan el puerto 443.

CORREO

POST es una serie controles del sistema ejecutado por computadoras y otros dispositivos electrónicos cuando están encendidos. Los resultados de la prueba pueden mostrarse en la pantalla, mostrarse mediante LED parpadeantes o simplemente registrarse internamente. V sistemas informáticos la operación POST se realiza al comienzo de la secuencia de inicio. Si todas las pruebas pasan, el resto del proceso de inicio continuará automáticamente.

Los sistemas operativos Mac y Windows ejecutan POST cada vez que la computadora arranca o se reinicia. Verificaciones de escaneo Hardware y garantiza que el procesador, la RAM y los dispositivos de almacenamiento funcionen correctamente. Si se produce un error durante la POST, el proceso de inicio puede pausarse o detenerse por completo, y el monitor puede mostrar un mensaje que indica que los errores de la POST a menudo se muestran en la pantalla de información del BIOS. Pueden mostrarse como códigos criptográficos, como "08", o como un mensaje del sistema, como "Error memoria del sistema en el desplazamiento ". Sobre Errores de Mac Los POST a menudo se indican mediante gráficos simples, como un icono de carpeta rota, que indica que no se encontró ningún dispositivo de arranque.

Manifestaciones fisicas

En algunos casos, es posible que la pantalla de la computadora ni siquiera se encienda antes de los errores POST. Si esto sucede, los códigos de error se pueden mostrar a través de LED parpadeantes o señales de sonido... Por ejemplo, un iMac de Apple reproducirá tres tonos consecutivos, hará una pausa de cinco segundos y luego repetirá los tonos cuando se detecte una mala RAM durante el inicio. La mayoría de las PC también emiten un pitido cuando se detectan errores POST, aunque cada fabricante utiliza sus propios códigos.

POST es un término bastante técnico que solo lo utilizan técnicos informáticos sobre una base regular. Sin embargo, este es un buen acrónimo, ya que ayuda a comprender mejor los mensajes de error que pueden aparecer en las computadoras u otros dispositivos electrónicos... Si su computadora no se inicia debido a un error POST, puede usar un dispositivo diferente para encontrar el significado y la causa del error en el sitio web del fabricante. Luego, puede tomar la acción apropiada: retire el módulo de memoria o reinstale la tarjeta de video y luego reinicie el equipo.

OBTENER

POST también es un método para pasar variables Formularios HTML de una página web a otra sin mostrarlas en la barra de direcciones. Un método alternativo es GET, que agrega valores a la URL. Las solicitudes HTTP POST proporcionan datos adicionales del cliente (navegador) al servidor en el cuerpo del mensaje. Por el contrario, las solicitudes GET incluyen todos los datos necesarios en la URL. Los formularios en HTML pueden usar cualquier método especificando método = POST o método = GET (predeterminado) en el elemento

... El método especificado determina cómo se envían los datos del formulario al servidor. Cuando se utiliza el método GET, todos los datos del formulario se codifican en URL como parámetros de cadena de consulta. Con POST, los datos del formulario aparecen en el cuerpo del mensaje de solicitud HTTP.

Diferencias en el envío de formularios

El método de solicitud POST solicita al servidor web que acepte y almacene los datos incluidos en el cuerpo del mensaje de solicitud. A menudo se usa al cargar un archivo o al enviar un formulario web completo.

El método de solicitud HTTP GET recupera información del servidor. Como parte de una solicitud GET, es posible que se pasen algunos datos en la cadena de consulta de la URL, especificando términos de búsqueda, rangos de fechas u otra información que identifique la solicitud.

Como parte de una solicitud POST, se puede enviar una cantidad arbitraria de datos de cualquier tipo al servidor en el cuerpo del mensaje de solicitud. El campo de encabezado en una solicitud POST generalmente indica el tipo de medio de Internet del cuerpo del mensaje.

La principal diferencia entre las solicitudes GET y POST es que corresponden a diferentes solicitudes HTTP según se definen en las especificaciones HTTP. El proceso de envío de ambos métodos comienza de la misma manera: el navegador crea el conjunto de datos del formulario y luego lo codifica de la manera indicada por el atributo enctype. Para METHOD = "POST, el atributo enctype puede ser multipart / form-data o application / x-www-form-urlencoded, mientras que para METHOD =" GET "solo se activa a través de application / x-www-form-urlencoded. Este formulario los datos se configuran y luego se pasan al servidor.

Para enviar un formulario usando METHOD = "GET", el navegador construye una URL tomando el valor del atributo action y agregando el conjunto de datos del formulario, codificado usando el tipo de contenido application / x-www-form-urlencoded). Luego, el navegador trata esa URL como si se refiriera a un enlace (o como si el usuario hubiera escrito la URL manualmente). El navegador divide la URL en partes y reconoce el host, luego envía una solicitud GET a ese host con el resto de la URL como argumento. Es importante tener en cuenta que este proceso significa que los datos del formulario se limitan a los códigos ASCII. Se debe tener especial cuidado para codificar y decodificar otros tipos de caracteres cuando se transmiten a través de una URL en formato ASCII.

Un envío de formulario con METHOD = "POST" hace que se envíe una solicitud POST utilizando el valor del atributo de acción y el mensaje generado de acuerdo con el tipo de contenido especificado por el atributo enctype.

PHP

PHP está incrustado en HTML. Esto significa que el código PHP se puede insertar en una página HTML. El servidor que aloja la página lee o analiza el código PHP. La salida de las funciones GET y POST en PHP en una página generalmente se devuelve como HTML que el navegador puede leer. Debido a que el código PHP se convierte a HTML antes de que se cargue la página, los usuarios no pueden ver el código PHP en la página. Lo hace Páginas PHP suficiente para acceder a bases de datos y otra información protegida.

La mayor parte de la sintaxis de PHP se toma prestada de otros lenguajes como C, Java y Perl. Sin embargo, PHP tiene una serie de características únicas y funciones especiales... El objetivo de este lenguaje es permitir a los desarrolladores web escribir páginas generadas dinámicamente de forma rápida y sencilla.

Wordpress

WordPress es sistema libre gestión de contenido utilizada para crear y mantener sitios web. Su facilidad de uso y sus características de blogs únicas lo han ayudado a convertirse en la herramienta de blogs más popular en Internet.

La interfaz de WordPress permite a cualquier persona sin experiencia en desarrollo web crear y publicar un sitio web. Las herramientas de blogs integradas proporcionan una manera fácil de realizar un seguimiento de las publicaciones individuales, los visitantes y los comentarios de los usuarios.

Aunque hay miles disponibles Plantillas de WordPress y complementos, el sistema POST GET en WordPress todavía tiene sus limitaciones. Dado que se trata de un servicio basado en plantillas, el usuario debe comenzar con un sitio web prediseñado en lugar de crear páginas desde cero. Además, no hay forma de incrustar scripts o mantener una base de datos con el mismo nivel de control que ofrece un sitio web personalizado.

La herramienta POST_GET_ID () permite que los scripts manipulen el elemento ya que tiene una ID única, y al enviarlo como un formulario a través de estos métodos, el menú desplegable se enviará con una ID única que permite que el script advierta qué publicación se está ejecutando. Alternativamente, se puede enviar una variable oculta que permitirá al script ver qué publicación pertenece a la vista.

Esta publicación es una respuesta a una pregunta formulada en un comentario sobre uno de mis artículos.

En este artículo, quiero contarte cuáles son los métodos HTTP GET / POST / PUT / DELETE y otros, para qué se inventaron y cómo usarlos de acuerdo con REST.

HTTP

Entonces, ¿cuál es exactamente uno de los principales protocolos de Internet? Enviaré los pedantes a RFC2616 y les diré al resto como un humano :)

Este protocolo describe la comunicación entre dos computadoras (cliente y servidor), basada en mensajes llamados Solicitud y Respuesta. Cada mensaje consta de tres partes: una línea de inicio, encabezados y un cuerpo. En este caso, solo se requiere la línea de salida.

Las líneas de inicio para la solicitud y la respuesta tienen un formato diferente; solo nos interesa la línea de inicio de la solicitud, que se ve así:

MÉTODO URI HTTP / VERSIÓN ,

Donde METHOD es solo el método de solicitud HTTP, URI es el identificador de recursos, VERSION es la versión del protocolo (por este momento versión actual 1.1).

Los encabezados son una colección de pares nombre-valor separados por dos puntos. Los encabezados transmiten diferentes servicio de información: codificación del mensaje, nombre y versión del navegador, dirección de la que procede el cliente (referente), etc.

El cuerpo del mensaje son, de hecho, los datos transmitidos. En la respuesta, los datos transmitidos, por regla general, es la página html que solicitó el navegador, y en la solicitud, por ejemplo, en el cuerpo del mensaje, se transmite el contenido de los archivos cargados en el servidor. Pero, por regla general, el cuerpo del mensaje no se incluye en la solicitud en absoluto.

Ejemplo de comunicación HTTP

Veamos un ejemplo.

Consulta:
OBTENER /index.php HTTP / 1.1 Host: example.com Usuario-Agente: Mozilla / 5.0 (X11; U; Linux i686; ru; rv: 1.9b5) Gecko / 2008050509 Firefox / 3.0b5 Aceptar: texto / html Conexión: cerrar
La primera línea es la cadena de consulta, el resto son encabezados; falta el cuerpo del mensaje

Respuesta:
HTTP / 1.0 200 OK Servidor: nginx / 0.6.31 Contenido-Idioma: ru Tipo de contenido: texto / html; charset = utf-8 Contenido-Longitud: 1234 Conexión: cerrar ... LA PÁGINA HTML EN SÍ MISMA ...

Recursos y métodos

Volvamos a la cadena de consulta inicial y recordemos que contiene un parámetro como URI. Esto significa Identificador uniforme de recursos, un identificador uniforme de recursos. Un recurso es, por regla general, un archivo en el servidor (un ejemplo de URI en este caso es "/styles.css"), pero en general, un recurso puede ser un objeto abstracto ("/ blogs / webdev /" - indica el bloque "Desarrollo web", y no para un archivo específico).

El tipo de solicitud HTTP (también llamado método HTTP) le dice al servidor qué acción queremos tomar con el recurso. Inicialmente (a principios de los 90) se asumió que el cliente solo podía querer una cosa del recurso: obtenerla, pero ahora, usando el protocolo HTTP, puede crear publicaciones, editar el perfil, eliminar mensajes y mucho más. Y estas acciones son difíciles de combinar con el término "recibir".

Para diferenciar acciones con recursos a nivel de métodos HTTP, se inventaron las siguientes opciones:

  • OBTENER - obtener un recurso
  • POST - creando un recurso
  • PUT - actualización de recursos
  • BORRAR: eliminar un recurso
Preste atención al hecho de que la especificación HTTP no obliga al servidor a comprender todos los métodos (de los cuales en realidad hay muchos más de 4); solo se requiere GET y tampoco le dice al servidor lo que debe hacer al recibir una solicitud con un método particular. Esto significa que el servidor responde a una solicitud DELETE /index.php HTTP / 1.1 no está obligado a elimine la página index.php en el servidor, al igual que en la solicitud GET /index.php HTTP / 1.1 no está obligado a devolverle la página index.php, puede eliminarla como :)

REST entra en juego

REST (Transferencia de estado representativo): este término fue acuñado en 2000 por Roy Fielding, uno de los desarrolladores del protocolo HTTP, como el nombre de un grupo de principios para la creación de aplicaciones web. En general, REST cubre un área más amplia que HTTP; se puede usar en otras redes con otros protocolos. REST describe los principios de interacción entre un cliente y un servidor, basados ​​en los conceptos de "recurso" y "verbo" (puede entenderlos como sujeto y predicado). En el caso de HTTP, el recurso está definido por su URI y el verbo es el método HTTP.

REST propone abandonar el uso del mismo URI para diferentes recursos (es decir, las direcciones de dos artículos diferentes como /index.php?article_id=10 y /index.php?article_id=20 no son una forma REST) ​​y usar diferentes métodos HTTP para diferentes acciones. Es decir, una aplicación web escrita con el enfoque REST eliminará un recurso al acceder a él con el método HTTP DELETE (por supuesto, esto no significa que deba poder eliminar todo y todo, pero alguna la solicitud de eliminación de la aplicación debe utilizar el método HTTP DELETE).

REST ofrece a los programadores la capacidad de escribir aplicaciones web estandarizadas y un poco más bonitas que nunca. Usando REST, el URI para agregar un nuevo usuario no será /user.php?action=create (método GET / POST), sino simplemente /user.php (estrictamente método POST).

Como resultado, al combinar la especificación HTTP existente y el enfoque REST, varios métodos HTTP finalmente tienen sentido. GET: devuelve un recurso, POST: crea uno nuevo, PUT: actualiza uno existente, DELETE: elimina.

¿Problemas?

sí hay pequeño problema utilizando REST en la práctica. Este problema se llama HTML.

Las solicitudes PUT / DELETE se pueden enviar a través de XMLHttpRequest, contactando al servidor "manualmente" (por ejemplo, a través de curl o incluso a través de telnet), pero no puede crear un formulario HTML enviando una solicitud PUT / DELETE completa.

El punto es que la especificación HTML no le permite crear formularios que envíen datos a través de GET o POST. Por lo tanto, para un funcionamiento normal con otros métodos, debe imitarlos artificialmente. Por ejemplo, en Rack (el mecanismo por el cual Ruby interactúa con el servidor web; Rails, Merb y otros marcos de Ruby se crean usando Rack), puede agregar un campo oculto llamado "_method" al formulario y especificar el nombre del método como el valor (por ejemplo, "PUT") - en este caso, se enviará una solicitud POST, pero Rack podrá pretender que recibió una PUT, no una POST.

Formularios HTML. Matrices $ _POST y $ _GET

Formularios HTML. Métodos para enviar datos al servidor.

Probablemente hayas visto formularios HTML antes:

Introduzca su nombre:

Reteniendo código dado en un archivo HTML y viéndolo con su navegador favorito, verá el formulario HTML familiar:

Etiqueta

tener una etiqueta de seguimiento emparejada
, de hecho, establece la forma. Sus atributos son ambos opcionales:

  • acción: especifica la URL (completa o relativa) a la que se enviará el formulario. Si no especifica este atributo, la mayoría de los navegadores (más precisamente, todos los navegadores que conozco) envían el formulario al documento actual, es decir, "a sí mismo". Esta es una abreviatura conveniente, pero según el estándar Atributo HTML se requiere acción.
  • método: cómo se envía el formulario. Hay dos de ellos.
    • OBTENER: envío de datos del formulario en la barra de direcciones.
      Es posible que haya notado en varios sitios la presencia del carácter "?" Al final de la URL. seguido de datos en el formato parámetro = valor. Aquí el "parámetro" corresponde al valor del atributo de nombre de los elementos del formulario (ver más abajo sobre la etiqueta ) y "valor" es el contenido del atributo de valor (por ejemplo, contiene la entrada del usuario en el campo de texto de la misma etiqueta ).
      Por ejemplo, intente buscar algo en Yandex y preste atención a la barra de direcciones del navegador. Este es el método GET.
    • POST: los datos del formulario se envían en el cuerpo de la solicitud. Si no está del todo claro (o completamente incomprensible) de qué se trata, no se preocupe, volveremos a esta pregunta pronto.
    Si no se especifica el atributo del método, se asume GET.

Etiqueta - especifica el elemento de formulario identificado por el atributo de tipo:

  • El valor "texto" especifica un campo de entrada de texto de una línea
  • El valor "enviar" especifica el botón que, cuando se hace clic, envía el formulario al servidor.

También son posibles otros valores (y no es la única etiqueta que define un elemento de formulario).

Entonces, ¿qué sucede cuando hacemos clic en el botón Aceptar?

  1. El navegador escanea los elementos que ingresan al formulario y genera datos del formulario a partir de sus atributos de nombre y valor. Digamos que se ingresa el nombre Vasya. En este caso, los datos del formulario son name = Vasya & okbutton = OK
  2. El navegador establece una conexión con el servidor, envía al servidor una solicitud del documento especificado en el atributo de acción de la etiqueta.
    utilizando el método de envío de datos especificado en el atributo de método (en este caso, GET), pasando los datos del formulario en la solicitud.
  3. El servidor analiza la solicitud recibida, genera una respuesta, la envía al navegador y cierra la conexión
  4. El navegador muestra el documento recibido del servidor

Enviar la misma solicitud manualmente (usando telnet) se ve así (suponga Nombre de dominio sitio - www.example.com):

Telnet www.example.com 80 GET /cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK HTTP / 1.0 \ r \ n Host: www.example.com \ r \ n \ r \ n

Como probablemente ya habrá adivinado, hacer clic en un botón de envío en un formulario con un método de envío "OBTENER" es similar a ingresar la URL correspondiente (con un signo de interrogación y los datos del formulario al final) en la barra de direcciones del navegador:

Http://www.example.com/cgi-bin/form_handler.cgi?name=Vasya&okbutton=OK

De hecho, el método GET se utiliza siempre que solicita un documento del servidor, simplemente ingresando su URL o haciendo clic en un enlace. Utilizando , un signo de interrogación y los datos del formulario simplemente se añaden a la URL.

Quizás todos estos detalles técnicos y ejercicios de telnet le parezcan increíblemente aburridos e incluso innecesarios ("¿qué tiene que ver PHP con esto?"). Pero en vano. :) Estos son los conceptos básicos para trabajar con el protocolo HTTP, que todo programador web debe conocer de memoria, y esto no es un conocimiento teórico; todo esto será útil en la práctica.

Ahora reemplacemos la primera línea de nuestro formulario con lo siguiente:

Hemos especificado el método de envío "POST". En este caso, los datos se envían al servidor de una forma ligeramente diferente:

Telnet www.example.com 80 POST /cgi-bin/form_handler.cgi HTTP / 1.0 \ r \ n Host: www.example.com \ r \ n Tipo de contenido: application / x-www-form-urlencoded \ r \ n Longitud del contenido: 41263 \ r \ n \ r \ n name = Vasya & okbutton = OK

Cuando se usa el método POST, los datos del formulario se envían después de "dos Enter-s" en el cuerpo de la solicitud. Todo lo anterior es en realidad el encabezado de la solicitud (y cuando usamos el método GET, los datos del formulario se enviaron en el encabezado). Para que el servidor sepa en qué byte terminar de leer el cuerpo de la solicitud, el encabezado contiene la línea Content-Length; sobre el hecho de que los datos del formulario se transmitirán en el formulario parámetro1 = valor1 & parámetro2 = valor2 ..., y los valores se pasarán en forma de código urlen, es decir, de la misma manera que se usa el método GET, pero en el cuerpo de la solicitud, el encabezado del contenido se envía al servidor -Tipo: application / x-www-form-urlencoded.

La ventaja del método POST es que no hay limitación en la longitud de una línea con datos de formulario.

Cuando se utiliza el método POST, es imposible enviar el formulario simplemente "siguiendo el enlace", como fue el caso con GET.

Al utilizar el formulario POST, en su atributo de acción puede especificar los parámetros del formulario GET después del signo de interrogación. Por lo tanto, el método POST también incluye el método GET.

Matrices $ _GET y $ _POST

Entonces, los formularios son la principal forma de intercambiar datos entre un servidor web y un navegador, es decir, brindan interacción con el usuario, de hecho, para eso está la programación web.

Veamos un ejemplo simple:



if ($ _SERVER ["REQUEST_METHOD"] == "POST") (
eco "

Oye, ". $ _POST [" nombre "]."

!" ;
}
?>
">
Introduzca su nombre:






El formulario que se muestra en las líneas 8-12 contiene dos elementos: nombre y botón ok. El atributo de método especifica el método para enviar el formulario POST, mientras que el atributo de acción que especifica la URL a la que se envía el formulario se completa con el valor de la variable de servidor PHP_SELF, la dirección del script que se está ejecutando en ese momento.

- notación abreviada para .

Supongamos que ingresamos el valor Vasya en el campo de nombre y hacemos clic en el botón Aceptar. En este caso, el navegador envía una solicitud POST al servidor. Cuerpo de la solicitud: nombre = Vasya & okbutton = OK. PHP rellena automáticamente la matriz $ _POST:

$ _POST ["nombre"] = "Vasya"
$ _POST ["okbutton"] = "Aceptar"

De hecho, el navegador envía el valor "Vasya" en formato urlencode; para la codificación de windows-1251, este valor parece% C2% E0% F1% FF. Pero, dado que PHP realiza automáticamente la decodificación necesaria, podemos "olvidarnos" de esta función, hasta que tengamos que trabajar con las solicitudes HTTP manualmente.

Dado que el cuerpo de la solicitud solo especifica nombres y valores, no los tipos de elementos de formulario, PHP no tiene idea de si $ _POST ["nombre"] coincide con una cadena de entrada, botón o lista. Pero nosotros, en general, no necesitamos esta información en absoluto. :)

Como no necesitamos saber qué está escrito en el botón de enviar, en la línea 11 podemos eliminar el atributo de nombre acortando la descripción del botón a ... En este caso, el navegador enviará una solicitud POST para name = Vasya.

Y ahora, lo mismo, pero para el formulario GET:



if (isset ($ _ GET ["nombre"])) (
eco "

Oye, ". $ _GET [" nombre "]."

!" ;
}
?>
">
Introduzca su nombre:







La línea 8 bien podría haber escrito

: GET es el método predeterminado. Esta vez, el navegador envía una solicitud GET, que equivale a ingresar la dirección en la barra de direcciones: http: // dirección del sitio / nombre de secuencia de comandos.php? Nombre = Vasya.

PHP maneja los formularios GET exactamente de la misma manera que POST, con la diferencia de que se completa la matriz $ _GET.

La diferencia fundamental está en la línea 4. Dado que simplemente ingresar una dirección en la línea del navegador es una solicitud GET, la verificación si ($ _SERVER ["REQUEST_METHOD"] == "GET") no tiene sentido. Por lo tanto, recurrimos a la construcción isset (), que devuelve verdadero si la variable dada está definida (es decir, se le ha asignado un valor), y falso si la variable no está definida. Si el formulario ha sido completado, como ya entendió, PHP asigna automáticamente $ _GET ["nombre"] al valor apropiado.

El método de verificación isset () es universal; también podría usarse para el formulario POST. Además, es preferible, ya que le permite averiguar qué campos del formulario se completan.

Un ejemplo un poco más complejo.




echo "¡Por favor ingrese un nombre!
" ;
< 1900 || $_POST [ "year" ] > 2004 ) {
eco
"
;
) demás (

" ;

echo "para ti". $ edad. " años
" ;
}
eco "


" ;
}
?>
">
Introduzca su nombre:


Ingrese su año de nacimiento:







Aquí no se utilizan trucos nuevos. Entender, ejecutar el código, intentar modificar ...

Cambiemos el último ejemplo para que el usuario no tenga que volver a completar los campos. Para hacer esto, complete los atributos de valor de los elementos del formulario con los valores que acabamos de ingresar.



$ nombre = isset ($ _ POST ["nombre"])? $ _POST ["nombre"]: "";
$ año = isset ($ _ POST ["año"])? $ _POST ["año"]: "";

Si (isset ($ _ POST ["nombre"], $ _POST ["año"])) (
si ($ _POST ["nombre"] == "") (
echo "¡Por favor ingrese un nombre!
" ;
) de lo contrario si ($ _POST ["año"]< 1900 || $_POST [ "year" ] > 2004 ) {
eco "Introduzca el año de nacimiento. Intervalo de valores válido: 1900..2004
"
;
) demás (
echo "Hola". $ _POST ["nombre"]. "!
" ;
$ edad = 2004 - $ _POST ["año"];
echo "para ti". $ edad. " años
" ;
}
eco "


" ;
}
?>
">
Introduzca su nombre:


Ingrese su año de nacimiento:







Las líneas 4 y 5 pueden resultar algo incomprensibles. Todo es muy simple: la línea 4 podría escribirse así:

if (isset ($ _ POST ["nombre"]))
$ nombre = $ _POST ["nombre"];
demás
$ nombre = "";

Puede surgir la pregunta: ¿por qué no tirar las líneas 4-5 y escribir:

Introduzca su nombre: ">

Ingrese su año de nacimiento: ">

El hecho es que si estas variables POST no están definidas, y lo será si el formulario aún no se ha completado, PHP emitirá advertencias sobre el uso de variables no inicializadas (y, de manera bastante razonable: dicho mensaje le permite encontrar rápidamente errores tipográficos difíciles de encontrar en los nombres de las variables, y también advierte sobre posibles "agujeros" en el sitio). Por supuesto, puede poner el código con isset directamente en el formulario, pero resultará demasiado engorroso.

¿Comprendido? Ahora intente encontrar el error en el código dado. Bueno, no es exactamente un error, sino un defecto.

htmlspecialchars ()

¿No lo encontraste? Te daré una pista. Por ejemplo, en el campo "nombre", ingrese una comilla doble y algo de texto, por ejemplo, Wa. Envíe el formulario y observe el código fuente de la página resultante. La cuarta línea será algo como:

Introduzca su nombre:

Es decir, nada bueno. ¿Qué pasa si un usuario astuto ingresa un código JavaScript?

Para resolver este problema, debe usar la función htmlspecialchars (), que reemplazará los caracteres del servicio con su representación HTML (por ejemplo, la cita - con "):



$ nombre = isset ($ _ POST ["nombre"])? htmlspecialchars ($ _POST ["nombre"]): "";
$ año = isset ($ _ POST ["año"])? htmlspecialchars ($ _POST ["año"]): "";

Si (isset ($ _ POST ["nombre"], $ _POST ["año"])) (
si ($ _POST ["nombre"] == "") (
echo "¡Por favor ingrese un nombre!
" ;
) de lo contrario si ($ _POST ["año"]< 1900 || $_POST [ "year" ] > 2004 ) {
eco "Introduzca el año de nacimiento. Intervalo de valores válido: 1900..2004
"
;
) demás (
echo "Hola". $ nombre. "!
" ;
$ edad = 2004 - $ _POST ["año"];
echo "para ti". $ edad. " años
" ;
}
eco "


" ;
}
?>
">
Introduzca su nombre:


Ingrese su año de nacimiento:







Repita el experimento y compruebe que el HTML ahora sea correcto.

Recuerde: la función htmlspecialchars () siempre debe usarse cuando se muestra el contenido de una variable que puede contener caracteres especiales HTML.

phpinfo ()

La función phpinfo () es una de las funciones más importantes de PHP. Muestra información sobre la configuración de PHP, los valores de varias variables de configuración ...

¿Por qué lo menciono en el artículo sobre formularios? phpinfo () es la herramienta de depuración más conveniente. phpinfo (), entre otras cosas, imprime los valores de todas las variables $ _GET, $ _POST y $ _SERVER. Entonces, si una variable de formulario se "pierde", la forma más fácil de averiguar qué está mal es usar la función phpinfo (). Para que la función muestre solo los valores de las variables (y no tiene que desplazarse una docena de páginas), debe llamarse de la siguiente manera: phpinfo (INFO_VARIABLES); , o - que es exactamente lo mismo - phpinfo (32) ;.



">
Introduzca su nombre:


phpinfo (32);
?>



O, por ejemplo, una situación de este tipo: desea averiguar la dirección IP de un visitante. Recuerda que la variable correspondiente está almacenada en la matriz $ _SERVER, pero, mala suerte, olvidó exactamente cómo se llama a la variable. Nuevamente, llame a phpinfo (32); , buscamos nuestra dirección IP en la placa y la encontramos - en la línea $ _SERVER ["REMOTE_ADDR"].



¿Te gustó el artículo? Compártelo