====== Fites DAW MP07 UF1 ====== ====== Programació web entorn servidor ====== Els exercicis/fites tenen els següents objectius: - Generar pàgines HTML utilitzant estructures de dades i control de flux bàsic de PHP. - Enviar i processar dades amb els mètodes POST i GET. - Accedir a fitxers per a lectura i per a escriptura. - Utilitzar //sessions// per emmagatzemar informació. L'enunciat de les [[fites]] intenten ser independents del llenguatge de programació. Disposeu igualment d'[[PHP|apunts per a iniciar-vos en PHP]] i on s'expliquen els fonaments per a resoldre les [[fites]]. {{tag> #Daw #DawMp07 #DawMp07Uf1 #DawMp07Uf01 PHP GET POST HTTP_METHODS php_sessions cookies sessions methods fita fites}} ===== Fita 1: Generació HTML ===== ==== Exercici 1.1 ==== Fes els següents exercicis en PHP. Cal que a tots els exercicis hi hagi variables per als límits (N,M). {{ exercicis_taules_php.png }} ==== Exercici 1.2 ==== === Batalla Naval === Anem a fer una aproximació a un joc de batalla naval. Els típics elements de joc son: * vaixell d'una posició: fragata * vaixell de 2 posicions: submarí * vaixell de 3 posicions: destructor * vaixell de 4 posicions: portaavions Realitza els següents exercicis: - Utilitza l'exercici 4 dels taulells de jocs amb el nom de les files (lletres) i columnes (números). - Crea un array amb un submarí i mostra-ho al taulell. * Raona quines opcions tens per definir aquest element i quina té més avantatges. * Comprova que funciona en horitzontal i vertical. * L'algorisme ha de funcionar amb qualsevol tipus de longitud de vaixell. - Crea un array amb un vaixell de cada tipus (fixe) i mostra-ho al taulell. - Crea un array amb tota una **partida amb valors aleatoris**: 4 fragates, 3 submarins, 2 destructors i 1 portaavions. * Els vaixells han de tenir col·locació aleatòria, incloent que puguin estar en vertical o en horitzontal. * Comprova que cada cop que recarregueu el tauler et surt una partida diferent. * No importa si els vaixells es solapen o si surten dels límits. - Ajusta el generador de partida anterior aplicant aquestes millores: * Evitar que cap vaixell surti dels límits del taulell. * Evitar que es solapin els vaixells. * Evitar que els vaixells es "toquin" (cel·les adjacents). \\ ---- \\ ===== Fita 2: Ús formularis amb GET i POST ===== Aquí teniu un bon exemple essencial per a la [[https://www.w3schools.com/php/php_forms.asp|gestió de les dades de formularis amb PHP]]. ==== Exercici 2.1 ==== Crea un **formulari de //login//**: * Fes un ''form'' que demani usuari i contrasenya. La contrasenya ha d'estar oculta (no s'ha de veure quan s'escriu). * Ha de tenir un diccionari //hardcoded// que contingui un conjunt de valors usuari/contrasenya vàlids. * Si el usuari/contrasenya que entri l'usuari al formulari coincideix amb algun dels continguts al diccionari, ens ha de contestar "Login correcte!". Si no coincideix amb cap, ha de dir "Login incorrecte". * Ha de ser segur: la contrasenya no s'ha de veure ni quan l'escrivim al formulari ni quan enviem les dades. * Quina creus que ha de ser la resposta si el //login// és incorrecte? Li informem si l'error està al nom d'usuari o a la password? ==== Exercici 2.2 ==== Generador de links. L'exercici consta de 3 pàgines. * ''ex22pagina1.php'': conté * El text QUANTITAT * Un formulari que envii per POST amb un sol camp: un nombre sencer amb el nom “quantitat”. * ''ex22pagina2.php'': mostrarà tants links (un per línia) com el nombre “quantitat” introduit al formulari anterior. Text dels links: “Comanda ”, on seran els nombres de l’1 fins el nombre “quantitat” indicat al formulari. Per tant, tindrem els links: Comanda 1, Comanda 2, Comanda 3, … fins a Comanda n. Quan cliquem algun d’aquests links, se’ns obrirà la següent pàgina: * ''ex22pagina3.php'': pàgina on simplement ens sortirà un

on es llegirà “Iniciar Comanda ” on serà el nombre que apareixia al link que hem clicat prèviament. ==== Exercici 2.3 ==== Crea un **selector de skins**, amb un //dropdown menu// o ''SELECT'' que canvii els colors de la pàgina web. ''ex23pagina1.php'' : * Disposa d’una pàgina amb un menú desplegable amb 3 opcions de color de la teva elecció. * Quan s’envia, apareix la mateixa pàgina amb el fons del color sel·leccionat. {{ menu_desplegable.png }} La resolució la tens en aquesta pàgina [[https://cacauet.org/wiki/index.php/PHP_Forms|PHP forms: selector de skins]]. ==== Exercici 2.4 ==== Formulari per comprovar la correcció d'una contrasenya repetida en 2 camps. ''ex24pagina1.php'' : conté * Un formulari que envii per POST amb dos camps amb els noms: “contrasenya1” i “contrasenya2”. * Un botó d’enviament (submit). ''ex24pagina2.php'' : realitzarà 2 tests (i cap més) per assegurar la contrasenya: - Comprovar que els 2 camps continguin la mateixa contrasenya. Si no es compleix, donarà el missatge “ERROR: les contrasenyes han de coincidir”. - Ha de comprovar que la contrasenya tingui al menys 1 número. Si no es compleix, donarà el missatge “ERROR: la contrasenya ha de tenir al menys un número”. La pàgina no realitzarà cap altra comprovació. \\ ---- \\ ===== Fita 3: Ús de FITXERS ===== ==== Exercici 3.1 ==== Consta d’1 pàgina PHP i 2 arxius TXT. * ''contactes31.txt'' : * Crea el fitxer de dades manualment amb dades de 4 contactes inventats, un per línia. * Les dades van seaparades per comes: * nom, cognom1, cognom2, telèfon * ''ex31.php'': * Mostra el text PROCESSA CONTACTES * Obre el fitxer ''contactes31.txt'' i el llegeix * Mostra els contactes del fitxer en una taula. * Genera un fitxer ''contactes31b.txt'' on has de traspassar tots els contactes de ''contactes31.txt'', però enlloc de separats per comes, separats pel símbol # ==== Exercici 3.2 ==== Consta d’1 sola pàgina PHP i 1 arxiu TXT. * ''comentaris.txt'' : el crearà la pàgina PHP * ''ex32.php'' (ull, només 1 pàgina): * Mostra un formulari enviat amb POST amb: * El text INTRODUEIX DADES * Un textarea amb name = “comentari” * Un camp de text amb el label “separador:” i amb name = “separador” * Botó d’enviar. * Si es reben dades: * Si no existís el fitxer ''comentaris.txt'' , el creem. * Afegim al fitxer ''comentaris.txt'' el contingut del camp “comentari” però substituint els espais pel text introduït a “separador”. ==== Exercici 3.3 ==== ''ex33.txt'' : crea un arxiu de text i dona-li els permisos adequats per tal que Apache hi pugui escriure. Posa algun text d'exemple tipus //lorem ipsum//. ''ex33pagina1.php'' : la pàgina ha de mostrar * El contingut de l’arxiu “text.txt” * Un formulari amb un camp de text (textarea) i un botó de //submit//. Quan s’envia el text, s’afegeix a l’arxiu ''ex33.txt'' i es torna a mostrar tot. * Després de cada missatge enregistrat afegirem una línia horitzontal per separar cadascun dels comentaris transmesos. ==== Exercici 3.4 ==== Ens demanen un conversor per a una wiki similar a Markdown. A partir d’un arxiu de text, caldrà mostrar una pàgina web HTML amb seccions. Les seccions es marcaran amb el símbol ''##'' a l’inici de la línia, que s’ha de mostrar amb el tag ''

''. ^ Arxiu de text: ^ Codi generat ^ Visualitzem: | | ## La 1a Guerra Mundial |

La 1a Guerra Mundial

|

La 1a Guerra Mundial

| Caldrà crear 2 arxius: ''ex34.txt'': * Contindrà el text de l’article de la wiki que volem mostrar, amb al menys 2 títols. * Els salts de línia del .txt no es mostraran al renderitzar HTML, així que si en volem crear-los a l'arxiu de text caldrà indicar-los amb un
. ''ex34pagina1.php'' : * Carregarà el text del l’arxiu “article.txt”. * Substituirà les marques de títol ''##'' per ''

'' i les mostrarà. ==== Exercici 3.5 ==== NOTA: aquest exercici combina formularis i arxius. L'exercici consta de 3 arxius: - ''productes.txt'' : contindrà una llista de productes, un per línia. - ''botiga.php'' : llegirà el contingut de ''productes.txt'' i crearà un formulari amb: * Un checkbox per cada producte amb el nom del producte. * Un input text per al nom de l'usuari. * Un submit button. - ''comandes.txt'' : quan s'envii el formulari es guardarà la comanda en aquest arxiu de text, de la forma:nom_d'usuari,prod1,prod2,etc. \\ ---- \\ ===== Fita 4: Ús de PHP SESSIONS ====== ==== Exercici 4.1 ==== Farem un joc de "endevina el número" en 3 pàgines. * ''ex41pagina1.php'': mostrarà * El text ENREGISTRA NOMBRE * Un formulari per introduir un camp per un número sencer, amb el nom “ocult”. El formulari s’envia a la pàgina ''ex41pagina2.php'' * ''ex41pagina2.php'': mostrarà * El text NOMBRE ENREGISTRAT * Guardarem el nombre “ocult” a la variable de sessió amb la clau “ocult”. * Un enllaç amb el text “Endevinar” per accedir a ''ex41pagina3.php'' * ''ex41pagina3.php'': mostrarà * El text ENDEVINA EL NOMBRE * Si no s’ha enviat la dada “endevina”: * Un formulari amb un camp per introduir un número sencer, amb nom “endevina”. El formulari s’envia a la mateixa pàgina. * Si s’ha enviat la dada “endevina”: * Compararà el nombre “ocult” amb “endevina” i ens dirà si és menor, major o igual. * Si és igual ens felicitarà, i ens mostrarà un link a ''ex41pagina1.php'' * Si no és igual ens torna a mostrar el formulari per a introduir el número sencer amb nom “endevina”. ==== Exercici 4.2 ==== Consta de 3 pàgines. * ''ex42pagina1.php'': mostrarà * El text ENREGISTRA FRASE * Un formulari per introduir un camp de text, amb el name del camp del formuari = “frase1”. El formulari s’envia a la pàgina ''ex42pagina2.php'' * ''ex42pagina2.php'': mostrarà * El text ENREGISTRA FRASE 2 * Guardarem el text “frase1” a la variable de sessió amb la clau “frase1”. * Un formulari per introduir un camp de text, amb el name del formuari=“frase2”. El formulari s’envia a la pàgina ''ex42pagina3.php'' * ''ex42pagina3.php'': mostrarà * El text COINCIDÈNCIES * Un enllaç per tornar a ''ex42pagina1.php'' * Desmuntarem les paraules de frase1 i frase2 i les compararem: * Si al menys 1 paraula coincideix, es mostrarà el text: * “la paraula XXXX està a les dues frases”. * Si no hi ha cap paraula que coincideixi, es mostrarà el text: * “No hi ha cap coincidència.” ==== Exercici 4.3 ==== Farem una “màquina d’escriure” o un “teclat en pantalla” que anirà enregistrant i mostrant els caràcters que anem clicant. ''ex43pagina1.php'' : mostrarà * Un mínim de 10 enllaços amb 10 lletres diferents (millor si fas tot l’abecedari). * Cada enllaç tindrà associada una lletra i l’enviarà amb mètode GET a la mateixa pàgina actual. * En una variable de sessió anirem acumulant les lletres que l’usuari vagi marcant, i les mostrarem en un quadre de text a dalt de la pàgina, sobre el "teclat virtual". ==== Exercici 4.4 ==== Prendre notes de text. Consta d’una sola pàgina PHP. ''ex44pagina1.php'' : * Disposa d’un formulari amb un camp de text (textarea) i un botó de submit. Quan s’envia el text, aquest s’afegeix al contingut d’una variable de sessió i es mostrarà a l’usuari. * Al final del text emmagatzemat s’afegiran 2 salts de línia per visualitzar i distingir cadascun dels enviaments. * El text s’acumularà cada cop que s’envii la pàgina.