bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


php

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
php [2022/09/15 14:47]
enrique_mieza_sanchez [Diccionaris o Arrays Associatius]
php [2024/01/11 17:23] (actual)
enric_mieza_sanchez [Enviar emails]
Línia 213: Línia 213:
 \\ \\
  
-===== Segueix el curs bàsic de PHP ===== 
-Segueix el [[https://cacauet.org/wiki/index.php/Curs_de_PHP|curs bàsic de PHP a cacauet.org]] 
- 
-En particular, para atenció a la [[https://www.cacauet.org/wiki/index.php/PHP_Forms|creació de formularis GET]]. 
- 
-Fes la pràctica de la fórmula de resolució de l'equació de 2n grau. 
- 
-Tens referències interessants a les pàgines de W3Schools: 
-  * [[https://www.w3schools.com/html/html_forms.asp|Formularis a W3Schools]]. 
-  * [[https://www.w3schools.com/html/html_form_elements.asp|Elements de formulari HTML]] per enviar dades a la nostra aplicació en PHP (text, menú desplegable, radio buttons, checkboxes, etc.) 
-    * Menció a part necessiten els diferents tipus d'[[https://www.w3schools.com/html/html_form_input_types.asp|input field]]. 
- 
-Un particular i útil [[https://www.jose-aguilar.com/blog/controlar-array-de-checkboxes-con-php/|exemple per utilitzar arrays amb els checkboxes]], ideal per fer un menú d'opcions a sel·leccionar. 
- 
-\\ 
  
 ===== Estructures de dades ====== ===== Estructures de dades ======
Línia 300: Línia 285:
 Al tanto, que com podeu veure en realitat no es reordena l'array inicial, sinó que es crea un de nou ($b) amb els índexs ordenats. Al tanto, que com podeu veure en realitat no es reordena l'array inicial, sinó que es crea un de nou ($b) amb els índexs ordenats.
  
 +\\
  
 ==== Diccionaris o Arrays Associatius ==== ==== Diccionaris o Arrays Associatius ====
Línia 337: Línia 323:
 </WRAP> </WRAP>
  
-\\ 
  
 Per iterar un array associatiu sol ser més fàcil utilitzar el //[[https://www.w3schools.com/php/php_looping_foreach.asp|foreach]]// enlloc del clàssic //for//: Per iterar un array associatiu sol ser més fàcil utilitzar el //[[https://www.w3schools.com/php/php_looping_foreach.asp|foreach]]// enlloc del clàssic //for//:
Línia 362: Línia 347:
   - Utilitza l'exercici 4 dels taulells de jocs amb el nom de les files (lletres) i columnes (números).   - 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.   - 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.     * Comprova que funciona en horitzontal i vertical.
     * L'algorisme ha de funcionar amb qualsevol tipus de longitud de vaixell.     * 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. +  - Pensa en 2 maneres diferents per definir una partida sencera amb diversos vaixells i justifica pros i contres. En concret es recomana analitzar //array// de vaixells vs matriu de caselles. 
-  - Crea un array amb tota una partida amb valors aleatoris: 4 fragates, 3 submarins, 2 destructors i 1 portaavions. +  - Crea una matriu per a la partida amb un vaixell de cada tipus (fixe) i mostra-ho al taulell. 
-    * Comprova que cada cop que recarregueu el tauler us surt una partida diferent. +  - Omple ara la matriu amb tota una **partida amb valors aleatoris**: 4 fragates, 3 submarins, 2 destructors i 1 portaavions
-  - Ajusta el generador de partida anterior fent que si es solapen els vaixells, recol·loqui el darrer.+    * 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). 
 +</WRAP> 
 + 
 +\\ 
 + 
 +===== FormularisGET, POST i PHP ===== 
 + 
 +Referències bàsiques a W3Schools: 
 +  * [[https://www.w3schools.com/html/html_forms.asp|Formularis HTML]]. 
 +  * [[https://www.w3schools.com/html/html_form_elements.asp|Elements d'un formulari HTML]]. 
 +  * [[https://www.w3schools.com/html/html_form_input_types.asp|Tipus de input field]]. 
 +  * [[https://www.w3schools.com/php/php_forms.asp|Gestió de les dades dels formularis en PHP]] 
 + 
 + 
 +Altres: 
 +  * [[https://cacauet.org/wiki/index.php/Curs_de_PHP|Curs bàsic de PHP a cacauet.org]]. 
 +  * [[https://www.cacauet.org/wiki/index.php/PHP_Forms|Creació de formularis GET]]. Fes la pràctica de la fórmula de resolució de l'equació de 2n grau. 
 +  * [[https://www.jose-aguilar.com/blog/controlar-array-de-checkboxes-con-php/|Checkboxes i arrays]], ideal per fer un menú d'opcions a seleccionar. 
 + 
 + 
 +<WRAP tip> 
 +Vés a les [[https://bytes.cat/fites_daw_mp07_uf1#fita_2us_formularis_amb_get_i_post|fites sobre formularis de la UF1 de MP07 de DAW]] i realitza els exercicis.
 </WRAP> </WRAP>
  
Línia 374: Línia 385:
  
 ===== Arxius ===== ===== Arxius =====
-Si volem guardar dades en arxius en PHP, disposem de diverses funcions per a realitzar aquestes operacions:+Si volem guardar dades en arxius en PHP, disposem de diverses funcions per a realitzar aquestes operacions
 + 
 +Funcions "a lo bèstia" (carreguen tot en RAM, oju peligru):
   * [[https://www.php.net/manual/es/function.file.php|file()]] : carrega tot un fitxer en un array (cada línia serà un element)   * [[https://www.php.net/manual/es/function.file.php|file()]] : carrega tot un fitxer en un array (cada línia serà un element)
   * [[https://www.php.net/manual/es/function.file-put-contents.php|file_put_contents()]] : guarda les dades en un arxiu.   * [[https://www.php.net/manual/es/function.file-put-contents.php|file_put_contents()]] : guarda les dades en un arxiu.
   * [[https://www.php.net/manual/es/function.file-get-contents.php|file_get_contents()]] : carrega les dades d'un arxiu sencer sobre un //string//.   * [[https://www.php.net/manual/es/function.file-get-contents.php|file_get_contents()]] : carrega les dades d'un arxiu sencer sobre un //string//.
 +
 +Funcions més "fines":
 +  * [[https://www.w3schools.com/php/func_filesystem_fopen.asp|fopen]] : per obrir un arxiu. Recordeu que hi ha els modes de lectura (r), (sobre)escriptura (w) i afegir (a).
 +  * [[https://www.w3schools.com/php/func_filesystem_fgets.asp|fgets]] : carrega 1 sola línia d'un arxiu. Cal utilitzar-la en combinació amb ''fopen''.
 +  * [[https://www.w3schools.com/php/func_filesystem_fwrite.asp|fputs]] o [[https://www.w3schools.com/php/func_filesystem_fwrite.asp|fwrite]] (són sinònims): escriu
 +
 +
  
 Si volem guardar les dades d'un array, no tindrem prou amb aquestes funcions, ja que al guardar les dades d'un array les concatena totes juntes. Si volem guardar les dades d'un array, no tindrem prou amb aquestes funcions, ja que al guardar les dades d'un array les concatena totes juntes.
Línia 407: Línia 427:
  
 Examina l'arxiu "sons.txt" que has creat i explica què significa cada valor que hi apareix. Examina l'arxiu "sons.txt" que has creat i explica què significa cada valor que hi apareix.
 +
 +\\
 +
 +===== Més coses =====
 +\\
 +
 +==== Carregar imatges ====
 +Aquí tens un [[https://pqina.nl/blog/image-upload-with-php/|tutorial per carregar imatges en PHP]].
 +
 +\\
 +
 +==== Enviar emails ====
 +
 +Disposar d'un servidor d'email s'ha convertit en una tasca complicada degut a les grans quantitats de Spam que circulen. Disposar d'un servidor d'email que passi els controls antispam és força complicat. Podeu conèixer mes detalls a l'article [[email Linux Docker]]. 
 +
 +Disposem, al menys, de dos maneres de fer-ho:
 +  - Tenint un **servidor d'email local com postfix** i enviant mitjançant la [[https://www.php.net/manual/es/function.mail.php|comanda PHP mail()]].
 +  - Utilitzant les **llibreries ''phpmailer''**: amb aquesta llibreria podem enviar mitjançant un servidor extern (caldran credencials).
 +
 +\\
 +
 +=== Opció 1: Servidor local ===
 +És important que tinguem obert el port 25 de sortida. Tots els servidors de Cloud ho estan limitant per evitar spammers, i cal demanar un permís especial perquè funcioni.
 +
 +Si disposem d'aquest servidor resulta relativament senzill.
 +
 +Instal·lem postfix i mailutils:
 +  $ sudo apt install postfix mailutils
 +
 +Chequejem la instal·lació enviant un email:
 +  $ mail [email protected]
 +  Cc:
 +  Subject: prova de correu
 +  aqui poso el text de l'email
 +  pot tenir diverses línies
 +  acabem l'email amb un "." o bé amb CTRL+D
 +
 +...i s'enviarà l'email. Comproveu la carpeta de Spam perquè probablement vagi a parar allà.
 +
 +\\
 +
 +=== Opció 2: libs PHPMailer ===
 +Amb aquesta llibreria podem enviar mitjançant un servidor extern (caldran credencials).
 +
 +  * [[https://netcorecloud.com/tutorials/send-an-email-via-gmail-smtp-server-using-php/|Enviar emails utilitzant SMTP Gmail amb PHP]].
 +
 +<WRAP todo>
 +Utilitza el tutorial indicat més amunt per enviar un email. Fes un formulari que permeti ajustar destinatari, títol i contingut del missatge.
 +
 +Per carregar les llibreries al vostre codi cal canviar els ''require'' que hi ha per:
 +  require "vendor/autoload.php";
 +
 +<WRAP important>
 +**Utilitza l'email de l'institut**. Un Gmail normal no et permetrà enviar emails amb autenticació usuari/password (el què anomenen //"less secure apps"//), ja que no compleix amb les mesures de seguretat mínimes. De moment, a data de gener de 2023, als comptes corporatius els permeten les //less secure apps//.
 +</WRAP>
 +</WRAP>
 +
 +\\
  
  
php.1663253271.txt.gz · Darrera modificació: 2022/09/15 14:47 per enrique_mieza_sanchez