Curso de PHP – Clase 7 – Resolución de ejercicios propuestos

En la clase 7 del curso de PHP conocimos el método post para pasaje de variables utilizando formularios. Propuse cuatro ejercicios para practicar los nuevos conceptos explorados. En esta entrada, los resolveré uno por uno, con su correspondiente explicación.

En esta ocasión los ejercicios están en archivos separados. Encontrarán el código fuente y el ejemplo corriendo en cada una de las explicaciones.

¡Empecemos!

Ejercicio 1

El usuario ingresa 10 valores enteros desordenados y debe devolverse la lista ordenada. Deben usarse dos archivos con un formulario. Un archivo para enviar y otro para recibir.

Como el enunciado pide dos archivos, vamos a hacerlo de esa manera. Por un lado, el formulario estará en ejercicios-propuestos-1a.php y el procesamiento del mismo en ejercicios-propuestos-1b.php.

El primero tiene el siguiente código.

Se define un documento HTML básico. Se abre una etiqueta de formulario y se completan los atributos name, method y action. Recuerden que action debe apuntar al archivo que recibirá el envío. Pueden usar una ruta absoluta o una relativa. Pero recuerden que si utilizan una absoluta, al mover los archivos de lugar, el ejemplo podría dejar de funcionar. Si hacen eso, recuerden actualizar el código. Para estos casos, prefiero utilizar rutas relativas.

El enunciado pide 10 valores que deben ser ingresados, por lo tanto se necesitan 10 campos de texto del tipo input. Podríamos escribirlos uno por uno, pero no se olviden que tenemos a PHP de nuestro lado. Así que mejor que escribirlos, es hacer un for que se repita 10 veces y que nos imprima en el documento HTML los campos de texto.

Se introducen partes de PHP en el rótulo que precede al campo de texto y también en el atributo name, para lograr que cada elemento del formulario tenga un nombre distinto, porque luego habrá que enviarlo y cada uno tiene que ser identificable.

Luego aparece el botón para enviar todo, que es del tipo submit.

Pasemos ahora al archivo que recibe los datos, ejercicios-propuestos-1b.php.

Para este ejercicio, no tuve intención de crear una estructura de HTML que dé soporte al PHP. Así que simplemente escribí el PHP. Tengan en cuenta que no siempre se procesan formularios para mostrarlos por pantalla. Muchas veces se realiza esta tarea para consultar, actualizar o cargar bases de datos.

Lo más importante de este ejercicio es entender que $_POST es nada más y nada menos que un array y que puede ser tratado como tal. La primera instrucción se encarga de eliminar del arreglo el elemento asociado al botón, que también es un valor que se está recibiendo, pero que no nos interesa.

Con los valores restantes, utilizamos la función sort, que ya vimos anteriormente en la clase de introducción a los arrays. Luego, simplemente se utiliza un foreach para recorrer el array y mostrar los elementos por pantalla. Podrán ver que el orden en que salen es el que corresponde a lo pedido por el enunciado.

Próximamente, en la clase de funciones voy a explicar un algoritmo muy conocido llamado “burbujeo” para ordenar arreglos. Por ahora, nos arreglamos con sort que por dentro implementa algún tipo de algoritmo como el mencionado.

Pueden encontrar el código fuente del primer archivo aquí y el formulario corriendo aquí. El código fuente del segundo archivo, lo tienen aquí.

Ejercicio 2

Se ingresan 6 números que corresponden a temperaturas. Obtener la más alta de todas. Realizar el ejercicios en un único archivo.

Si bien lo vamos a resolver en un único archivo, tal como pide el ejercicio, en realidad hay dos partes bien distinguibles: cuando el formulario se envía y cuando no. Para realizar la división entre estas dos partes, vamos a utilizar una estructura condicional, es decir, un if.

Estoy usando la sintaxis alternativa de PHP, puesto que vamos a mezclar el PHP con el HTML y así es más fácil distinguir los bloques, sin complicarse con las llaves.

La primera parte, entonces, nos queda:

Al principio aparecen las cabeceras de HTML, y luego nos metemos en el código PHP. Si la variable temperatura1 que viene por post no está definida, entonces lo siguiente que haremos será procesar todos los datos que se reciben. Primero, se elimina el valor que corresponde al botón, que no vamos a necesitar. Luego, realizamos un algoritmo para extraer el máximo. Ya habíamos visto cómo hacerlo en el ejercicio 4 de la clase 5, estructuras iterativas.

En esa ocasión, se utilizaba un bucle while. Ahora, un bucle foreach. Se toma el primer valor como si fuera el máximo. Luego se van recorriendo los otros valores y si alguno supera al hasta ahora mayor valor, entonces pasa a ser el nuevo máximo. Al terminar de recorrer el array, siempre en $maximo quedará el número más grande que haya en él. Como corresponde, finalmente se muestra ese valor por pantalla.

Ahora veamos el formulario, que viene tras el else:

Un formulario que apunta a sí mismo y que pasa los valores por post. Luego, un for para repetir los campos de texto, tal como se hizo en el ejercicio anterior. Un botón para enviar el formulario y nada más.

El código fuente de este ejercicio lo tienen aquí y el ejemplo funcionando, aquí.

Ejercicio 3

Se reciben las siguiente palabras: 1 sustantivo, 1 adjetivo y 2 verbos. Introducirlos en un párrafo que cuente una historia corta. Realizarlo en un único archivo.

Manos a la obra. Vamos a tener la misma estructura que antes, con un if central que va a dividir en dos el código.

 

Si el elemento sustantivo de formulario viene definido, se procesarán los datos y si no, se mostrará el formulario para ser completado y enviado. Este último, no tiene nada de raro. El atributo action apunta a sí mismo, el método es post y luego se definen cuatro campos de texto más un botón submit.

En el procesamiento del formulario, definimos una variable $parrafo que tendrá una historia en un párrafo, que utilice las palabras que se reciben. Aunque no vimos strings aún, ya saben que los puntos se utilizan para concatenar cadenas de caracteres. Luego, se muestra el resultado por pantalla.

Si alguien se lo pregunta, lo aclaro en este caso pero vale para todos. Hay que tener mucho cuidado al imprimir variables que vienen por POST o GET. Son entrada de datos para nuestro sistema y esto quiere decir que hay que validarlas e imprimirlas de forma escapada (lo que comúnmente se llama “sanitización”). No he agregado nada de esto en ninguno de estos ejercicios para no hacerlos más complicados, pero deben tenerlo en cuenta cuando trabajen con proyectos reales.

Código fuente completo aquí y ejemplo funcionando, aquí.

Ejercicio 4

Dado un número al azar entre 1 y 10, realizar un programa en PHP que permita al usuario adivinarlo. Si falla, debe tener la oportunidad de volver a intentarlo de forma repetida.

El viejo y conocido ejercicio de acertar un número, versión PHP. La clave para la resolución de este ejercicio es utilizar un campo oculto para conservar en cada reenvío el número al azar generado.

Antes de ver código, pensemos de qué forma debe funcionar el programa final. Al cargar por primera vez el archivo, se debe mostrar el formulario, con un mensaje y un campo de texto para poder adivinar el número. Al mismo tiempo, debe generarse al azar un número (en este caso lo acoté y debe valer entre 1 y 10) y al enviarse todo, deben pasarse tanto el número que está arriesgando el usuario como el generado.

¿Por qué hay que pasar el generado al azar? Porque de lo contrario este valor se perdería. Si se genera un número al azar por cada intento, este número variaría y sería injusto para el usuario.

La estructura que permitirá llevar esto adelante tiene un if como eje principal, pero no es igual a lo que veníamos viendo. Tiene una diferencia importante. A continuación, vamos a ver todo el código, pero lo analizaremos por partes, empezando por el formulario.

Obviemos por un momento la condición del if principal. Vayamos directo al else y prestemos atención al formulario y al nombre de sus campos. adiv es el número que introduce el usuario. numero es un campo oculto que en caso de reenvío, tomará el valor del número generado al azar.

La generación del número al azar se realiza antes de mostrar el formulario por primera vez. Tengan bien presente eso. Solo se genera el número una vez al cargar el archivo. En los siguientes reenvíos, esta parte se saltea. Para asegurarse de que no se ejecute, se chequea si $_POST[‘numero’] está definida. Siempre lo estará en los envíos, aún dejando el campo vacío y enviando el formulario. Solo estará sin definir, la primera vez que se cargue el archivo.

La generación del número al azar se hace mediante la función rand, de PHP. Lleva dos parámetros que definen el intervalo del número que se obtendrá. En este caso, el número estará entre el 1 y el 10, incluyéndolos.

Este formulario se mostrará si adiv no está definida y cuando el valor que tenga no coincida con el número generado. Esa es la condición.

Del otro lado del if, en caso de que la condición se cumpla, se le informa al usuario que acertó.

Para hacer el ejemplo un poco más amigable con el usuario, el título <h2> que se muestra junto al formulario, varía de acuerdo a si es la primera vez que se muestra el formulario, o si se está volviendo a mostrar tras un envío y un desacierto del usuario.

El código fuente completo lo encuentran aquí y el ejemplo funcionando, aquí.

Y eso es todo por el momento. Nos reecontramos en la próxima clase.

Soy programador web y me desempeño como Líder Técnico y de Proyectos en Polar Bear Development. Trabajo con tecnologías como PHP, Javascript, MySQL y HTML5 para el desarrollo de sitios y sistemas web. Me especializo en Zend Framework 2 y otros frameworks MVC, como también en WordPress y otros CMS. Lidero equipos de desarrolladores trabajando con Scrum. Vivo en Buenos Aires, Argentina.
 

2 thoughts on “Curso de PHP – Clase 7 – Resolución de ejercicios propuestos

  1. Hola que tal muy bueno los scripts, me guataria saber si me podrias ayudar con lo siguiente:
    tengo un formulario con un campo de texto y quiero que al introducir un numero en ese campo de texto se me despliegue otro formulario con la cantidad de campos de texto. Es decir, si introduzco 3 se me despliegue otro formulario con tres campos de texto

  2. Hola Kerly

    El código sería algo así.

    Este mismo archivo tendría el nombre “formulario.php”. Tené en cuenta que no se están validando los datos que se pasan por GET. Pero más allá de eso y de cualquier otro tema, esta sería la base del código. El formulario se envía a sí mismo, pero los campos nuevos generados deberían ser parte de otro formulario para poder enviarse a otra página.

    Espero haberte ayudado.
    Saludos

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*