![]() |
|
||||||||||||||||
![]() |
||||||||||||||||
Pràctica |
![]() |
Exercicis
|
||||||||||||||
|
|||||||||||||||
Formularis | |||||||||||||||
En aquesta pràctica veurem el funcionament dels formularis i de quina manera transmeten les dades entrades en una pàgina PHP. Igualment, veurem algunes funcions útils per treballar amb formularis. Reprendrem també funcions de temps i data. | |||||||||||||||
![]() |
En cas que no recordem com treballen els formularis
i les seves etiquetes html, podeu fer una consulta a l'apartat corresponent
del document de suport Cmd
HTML (format .rtf), on trobareu, a més, informació molt
útil i resumida per treballar amb aquest llenguatge. Igualment podeu documentar-vos en línia a diverses pàgines com per exemple (en català) http://www.imaginaserveis.com/manuals/html/manual.html o també http://www.desarrolloweb.com/articulos/647.php?manual=21. |
||||||||||||||
Un formulari simple | |||||||||||||||
![]() |
Per veure el funcionament de tot això, crearem un petit sistema de tramesa de missatges de correu electrònic amb el PHP. Primerament, però, veurem com funciona el pas de variables mitjançant un formulari molt simple que està contingut en una pàgina html. Assumim que tenim unes nocions de creació de formularis en html. |
||||||||||||||
<html> <body> <form method="post" action="processa.php"> <p> Entra el teu nom: <input name="nom" type="text"> <br> <input type="submit"> </p> </form> </body> </html> |
|||||||||||||||
Llistat 3.2.1. Formulari simple | |||||||||||||||
Aquest formulari el podeu crear directament amb un editor de text o, si ho preferiu, mitjançant programes editors de html, com el Dreamweaver, que ens facilitaran molt la creació de formularis. Podem desar-lo amb el nom de m3p21.html. Cal que ens fixem en alguns elements clau:
|
|||||||||||||||
|
|||||||||||||||
|
|||||||||||||||
El fitxer que recollirà la informació (les variables) del formulari i la processarà s'ha de dir, en l'exemple, processa.php i pot contenir el codi següent: | |||||||||||||||
<?php $nom = $_POST['nom']; echo "Hola, ".$nom."!<br><br>"; echo "Com va la vida?"; ?> |
|||||||||||||||
Llistat 3.2.2. Recollida de dades d'un formulari simple | |||||||||||||||
Ja veieu que podem recollir les variables passades pel formulari, mitjançant el mètode post, d'un array associatiu anomenat $_POST que contindrà tants elements com variables passi el formulari. En el nostre cas, el formulari només té un input que correspon a una caixa d'entrada de text, a la qual li assignem nom com a name i que arriba a processa en la forma $_POST['nom']. |
|||||||||||||||
Arrays $_POST i $_GET | |||||||||||||||
En les versions actuals del PHP (a partir de la 4.2.0) podem accedir a les variables passades per un formulari de dues maneres:
|
|||||||||||||||
La manera d'accedir a aquests arrays seria, per ex.: $_POST['cognom'] on cognom seria el nom de la variable i, per tant, equivalent a $cognom i tant en un cas com en l'altre contindria el valor entrat en el formulari. El primer dels sistemes explicats pot presentar alguns problemes de seguretat, cal bandejar-lo si volem crear aplicatius seriosos i només funcionarà si en el fitxer de configuració php.ini la directiva register_globals està activada a On. És molt interessant saber en tot moment per quin camí ens arriba la informació de les variables: entrada des de la barra d'adreces, des d'un formulari, des d'una cookie,... Conèixer això ens permet de tenir més capacitat de previsió i donar més seguretat al nostre codi. Les darreres versions del PHP (i també la versió de PHP que hem instal·lat amb l'EasyPHP 1.7) vénen per defecte amb aquesta directiva a Off. Això vol dir que si el PHP està instal·lat en un servidor sobre el qual no tenim el control i la directiva esmentada està desactivada, l'única opció que tindrem serà la segona, que, d'altra banda, funcionarà en qualsevol cas. |
|||||||||||||||
Podeu provar, per exemple, de fer servir method=get en el Llistat 3.2.1 i recollir la variable del formulari amb l'array $_GET, amb un funcionament similar al de $_POST, però amb les diferències que acabem d'explicar. |
|||||||||||||||
Enviar correu electrònic | |||||||||||||||
Ara complicarem un xic més la pràctica i crearem un petit sistema de tramesa de correu electrònic. És cert que també podem enviar el contingut entrat en un formulari a una adreça de correu mitjançant action=mailto:adreça@xtec.cat, però fer-ho mitjançant el PHP permet més flexibilitat i alguns avantatges. En el formulari hi haurà diferents tipus d'inputs, com per exemple un text de diverses línies o un checkbox. Crearem un sistema per sol·licitar la concertació d'una entrevista amb el tutor en un centre d'ensenyament. Un cop els pares hagin omplert les dades del formulari, seran enviades a una adreça de correu electrònic. |
|||||||||||||||
![]() |
Recordem que a la pràctica 3 del mòdul 1 hem configurat el fitxer php.ini amb els valors adequats per a poder enviar correu en una configuració de Windows sense servidor de correu instal·lat. | ||||||||||||||
El valor smtp.xtec.cat que entrem a la directiva SMTP (Sending Mail Transfer Protocol) serveix per indicar a quin lloc (servidor) han d'anar a parar els missatges de correu electrònic per tal de ser enviats. | |||||||||||||||
El servidor que gestiona el correu pot deixar passar lliurement qualsevol
dels missatges que li arribin o pot demanar la identitat o autentificació
del qui ha enviat el missatge. D'aquesta manera es pot controlar, per
exemple, que només els usuaris d'un servidor puguin enviar correus
a través seu; i d'aquesta manera es poden evitar alguns potencials
problemes de spam ( correu
no desitjat ![]() |
|||||||||||||||
En funció del tipus de servidor o de les nostres necessitats ho podem fer de dues maneres : | |||||||||||||||
|
|||||||||||||||
Primerament, veiem el codi de la pàgina html que conté el formulari. Podeu copiar aquest codi a l'editor i desar-lo amb el nom de demanahora.html. | |||||||||||||||
<!-------------------------------------------------------- <!doctype html public "-//W3C//DTD HTML 4.0 //EN"> Motiu de l'entrevista <br><br> <input type="submit" value="Enviar"><input
type="reset" value="Netejar"> |
|||||||||||||||
Llistat 3.2.3. Formulari de sol·licitud d'entrevista de tutoria | |||||||||||||||
Executant aquest codi, podeu veure que ens permet entrar dades en el formulari. Observeu els diferents tipus d'input i el seu comportament. Fixeu-vos especialment en textarea; el contingut d'aquest input l'haurem de retocar perquè quedi correcte. |
|||||||||||||||
Enviant el formulari per correu autentificat. | |||||||||||||||
En la configuració dels clients
de correu electrònic si hem d'enviar correu a través d'un
smtp amb autentificació, caldrà que el configurem correctament
amb les dades que ens identificaran davant del servidor, que normalment
solen ser el nostre identificador i la nostra constrasenya. Des de fa
temps, els usuaris dels serveis de correu de la XTEC, de la mateixa manera
que es feia a l'hora de rebre missatges, s'han d'autentificar per enviar-ne
a servidors externs, tal com s'explica a la pàgina Correu
autentificat ![]() |
|||||||||||||||
Per tot això, si en la nostra configuració SMTP del php.ini hi posem "smtp.xtec.cat", només podrem enviar missatges a les adreces del mateix servidor i no pas a les de fora. | |||||||||||||||
Una manera de solucionar això, tant en l'entorn Windows com Linux, seria instal·lant un servidor de correu que gestionés aquestes operacions de sortida del correu. És a dir, treballar amb el nostre propi servidor de correu. Aquesta solució té l'inconvenient de la seva relativa complexitat tècnica que pot diferir segons el sistema operatiu utilitzat. | |||||||||||||||
Però una manera relativament senzilla de solucionar això és fer servir alguna de les classes disponibles que permeti enviar correu autentificat. | |||||||||||||||
A la la xarxa hi ha diverses rutines que permeten d'enviar correu autentificat. Una d'aquestes opcions és la classe phpmailer. Podeu trobar informació sobre aquesta classe a la seva pàgina web (http://phpmailer.sourceforge.net/) o bé, en castellà, a la pàgina http://www.programacion.com/php/articulo/phpmailer/. En tots dos llocs hi ha, a més, diversos exemples de funcionament. | |||||||||||||||
![]() |
Si no teniu massa clar què són les classes i els objectes, us en podeu fer una idea anant a la pàgina de suport Introducció a les classes i objectes en php, en el benentès que es tracta només d'una primera aproximació al tema. | ||||||||||||||
![]() |
A continuació, podeu veure el codi corresponent a " prho_aut.php" . Aquest és el nom que ha de tenir la pàgina receptora de les dades entrades al formulari anterior. Podeu copiar aquest codi a l'editor i desar-lo amb el nom de prho_aut.php a la mateixa carpeta on heu guardat el fitxer demanahora.html. | ||||||||||||||
<?php // Requerim (incloem) el fitxer amb la classe 'phpmailer'
// Recuperem les variables passades pel mètode POST i les "traiem" $motiu = $_POST['motiu']; echo "<b>Text de motiu sense tractar</b><br><br>"; // Instanciem un objecte de la classe phpmailer //Indiquem a la classe phpmailer on es troba //Amb la propietat Mailer li indiquem que farem servir un //Assignem el nostre servidor smtp //Indiquem que el servidor smtp requereix autenticació //Indiquem usuari i password //Indiquem l'adreça de correu i el nom que //valor de Timeout //Indiquem l'adreça del destinatari //Asignem assumpte i cos del missatge $missatge_html = "<b>DNI: </b>".$dni."<br>";
//Definim AltBody per si el destinatari del correu no admet mail amb
format html
//Enviem el missatge... //Si no s'ha pogut enviar realitzem 4 intents més... |
|||||||||||||||
Llistat 3.2.4.a. Processament del formulari de sol·licitud d'entrevista de tutoria. Correu autentificat. | |||||||||||||||
En aquest codi podem observar el següent: | |||||||||||||||
|
|||||||||||||||
El codi té abundants comentaris que ajuden a entendre'l millor. Recordeu que: | |||||||||||||||
![]() |
|
||||||||||||||
![]() |
|||||||||||||||
|
|||||||||||||||