viernes, 19 de junio de 2020

Métodos GET y POST con PHP

Para enviar información a través de la web tenemos dos métodos que son el protocolo HTTP que emplea el método POST y mediante la URL que emplea el método GET.


Método GET

Es mucho más veloz, pero tiene ciertas limitaciones como la cantidad de datos a enviar, no se permite enviar archivos y se visualiza el valor enviado por el URL, lo que lo puede hacer aparentemente frágil para sistemas de autentificación, pero si se le añade encriptamiento resulta en un método seguro y veloz.

Supongamos el siguiente formulario en una página llamada "formulario.html"
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Formulario GET</title>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. </head>
  8. <body>
  9. <form action="receptorget.php" method="GET">
  10. <label>Nombre</label><br/>
  11. <input type="text" name="txtNombre"/><br/><br/>
  12. <label>Clave</label><br/>
  13. <input type="password" name="txtClave"/>
  14. <br/><br/>
  15. <select name="txtIdioma">
  16. <option value="esp">Español</option>
  17. <option value="ing">Inglés</option>
  18. <option value="fra">Francés</option>
  19. </select><br/><br/><br/>
  20. <button type="submit">Enviar por GET</button>
  21. </form>
  22. </body>
  23. </html>

Se aprecia que en el formulario aparecen dos atributos con sus respectivos valores que son:
  • action: indica a que página viajarán los datos
  • method: indica la forma de enviar los datos, en este caso GET

La salida visual sería:












En una página llamada "receptorget.php" vamos a recibir estos valores enviados por GET, el URL que aparecerá en el navegador tendrá la siguiente forma:

http://localhost/test/receptorget.php?txtNombre=Paul&txtClave=12345&txtIdioma=ing

El código de "receptorget.php" sería:
  1. <?php
  2. $nombre = $_GET["txtNombre"];
  3. $clave = $_GET["txtClave"];
  4. $idioma = $_GET["txtIdioma"];
  5. echo "Nombre: $nombre <br/>";
  6. echo "Longitud de la clave: " . strlen($clave) . "<br/>";
  7. switch ($idioma) {
  8. case "esp":
  9. echo "Habla español";
  10. break;
  11. case "ing":
  12. echo "Habla inglés";
  13. break;
  14. case "fra":
  15. echo "Habla francés";
  16. break;
  17. case "":
  18. echo "No ingresó idioma";
  19. break;
  20. default:
  21. echo "ERROR";
  22. break;
  23. } ?>

El resultado visual sería el siguiente:
Nombre: Paul
Longitud de la clave: 5
Habla inglés 

Método POST

Es menos veloz que el método GET, pero permite enviar una gran la cantidad de datos, incluidos archivos como fotos y no se visualiza los valores enviados en el URL, lo que lo convierte en el método favorito para inicio de sesión.

Supongamos el siguiente formulario en una página llamada "formulario.html"
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Formulario GET</title>
  5. <meta charset="UTF-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. </head>
  8. <body>
  9. <form action="receptorget.php" method="POST">
  10. <label>Nombre</label><br/>
  11. <input type="text" name="txtNombre"/><br/><br/>
  12. <label>Clave</label><br/>
  13. <input type="password" name="txtClave"/>
  14. <br/><br/>
  15. <select name="txtIdioma">
  16. <option value="esp">Español</option>
  17. <option value="ing">Inglés</option>
  18. <option value="fra">Francés</option>
  19. </select><br/><br/><br/>
  20. <button type="submit">Enviar por POST</button>
  21. </form>
  22. </body>
  23. </html>

Se aprecia que en el formulario aparecen dos atributos con sus respectivos valores que son:
  • action: indica a que página viajarán los datos
  • method: indica la forma de enviar los datos, en este caso POST

La salida visual sería:












En una página llamada "receptorpost.php" vamos a recibir estos valores enviados por POST, el URL que aparecerá en el navegador no tiene ninguna modificación

El código de "receptorget.php" sería:
  1. <?php
  2. $nombre = $_POST["txtNombre"];
  3. $clave = $_POST["txtClave"];
  4. $idioma = $_POST["txtIdioma"];
  5. echo "Nombre: $nombre <br/>";
  6. echo "Longitud de la clave: " . strlen($clave) . "<br/>";
  7. switch ($idioma) {
  8. case "esp":
  9. echo "Habla español";
  10. break;
  11. case "ing":
  12. echo "Habla inglés";
  13. break;
  14. case "fra":
  15. echo "Habla francés";
  16. break;
  17. case "":
  18. echo "No ingresó idioma";
  19. break;
  20. default:
  21. echo "ERROR";
  22. break;
  23. } ?>

El resultado visual sería el siguiente:
Nombre: Paul
Longitud de la clave: 5
Habla inglés 



El método $_Request["name"]

PHP tiene como método de entrada a GET y POST, pero cuando se desconoce el medio por el que llegarán los datos se puede recurrir al método $

<?php
   $nombre = $_REQUEST["txtNombre"];
   $clave = $_REQUEST["txtClave"];
   $idioma = $_REQUEST["txtIdioma"];
?>

Modificaciones de seguridad

Por cuestiones de seguridad y adaptándonos a los nuevos cambios se reemplaza los $_GET y $POST por:
  1. <?php
  2. $dia = filter_input(INPUT_GET, 'txtIdioma', FILTER_SANITIZE_STRING);
  3. $clave = filter_input(INPUT_POST, 'txtIdioma', FILTER_SANITIZE_STRING);
  4. ?>


No hay comentarios:

Publicar un comentario