<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
		<id>http://wikiserver.infomerce.es/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jmoreno</id>
		<title>wikiserver - Contribucions de l’usuari [ca]</title>
		<link rel="self" type="application/atom+xml" href="http://wikiserver.infomerce.es/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Jmoreno"/>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php/Especial:Contribucions/Jmoreno"/>
		<updated>2026-05-09T14:26:20Z</updated>
		<subtitle>Contribucions de l’usuari</subtitle>
		<generator>MediaWiki 1.28.0</generator>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A2.1-Exercicis_fitxers_de_text&amp;diff=17985</id>
		<title>ASIX-M3-UF3-A2.1-Exercicis fitxers de text</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A2.1-Exercicis_fitxers_de_text&amp;diff=17985"/>
				<updated>2024-05-02T14:38:02Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1. Fes un programa que crei un diccionari en les dades dels empleats del fitxer de text empleats.txt. Y a continuació, el recorri mostrant les seves dades.&lt;br /&gt;
&lt;br /&gt;
'''Format del diccionari:''' &lt;br /&gt;
:Clau: Id de la persona&lt;br /&gt;
:Valor: Llista amb Nom, Cognom i Salari&lt;br /&gt;
 &lt;br /&gt;
Creeu prèviament el fitxer de text amb el següent format: Id;Nom;Cognom;Sou (un a cada línia).&lt;br /&gt;
&lt;br /&gt;
Exemple de la sortida:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Id    Nom    Cognoms    Sou &lt;br /&gt;
----------------------------&lt;br /&gt;
123H  Pere    Pou        900&lt;br /&gt;
547A  Maria   Roda      1500&lt;br /&gt;
784K  Luis    Abadal    1300&lt;br /&gt;
465F  Raquel  Busquet   1600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Fitxer:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
123H;Pere;Pou;900&lt;br /&gt;
547A;Maria;Roda;1500&lt;br /&gt;
784K;Luis;Abadal;1300&lt;br /&gt;
465F;Raquel;Busquet;1600&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Per aquest exercici, crea prèviament un fitxer de text, que contingui només un número. Fes un mètode que pugui rebre 0, 1 o 2 paràmetres:&lt;br /&gt;
&lt;br /&gt;
:* Si no rep cap paràmetre mostrarà el número.&lt;br /&gt;
:* Si rep només un a paràmetre:&lt;br /&gt;
::- Si és &amp;quot;inc&amp;quot; mostrarà el número incrementat amb 1 i actualitzarà el fitxer amb el nou valor.&lt;br /&gt;
::- Si és &amp;quot;dec&amp;quot; mostrarà el número decrementat amb 1 i actualitzarà el fitxer amb el nou valor.&lt;br /&gt;
::- Qualsevol altra valor, mostrarà un missatge informant del fet.&lt;br /&gt;
:* Si rep dos paràmetres:&lt;br /&gt;
::- Si el primer és &amp;quot;inc&amp;quot; i el segon un enter (num) mostrarà el número incrementat amb num i actualitzarà el fitxer amb el nou valor.&lt;br /&gt;
::- Si és &amp;quot;dec&amp;quot; i el segon un enter (num) mostrarà el número decrementat amb num i actualitzarà el fitxer amb el nou valor.&lt;br /&gt;
::- Qualsevol altra combinació de valors en els paràmetres, mostrarà un missatge informant del fet.&lt;br /&gt;
&lt;br /&gt;
:* Utilitzeu excepcions (Blocs try - except) per tractar qualsevol error no previst.&lt;br /&gt;
&lt;br /&gt;
3. Fes un mètode per xifrar un fitxer de text. Rebrà com a paràmetre un fitxer de text i crearà un altre, afegint al nom de l'original &amp;quot;_cod&amp;quot; i amb la mateixa extensió. L'algoritme de xifrat consisteix en:&lt;br /&gt;
:* caràcters de la &amp;quot;a&amp;quot; a la &amp;quot;z&amp;quot;: restar 11 per obtenir el caràcter xifrat.&lt;br /&gt;
:* caràcters de la &amp;quot;A&amp;quot; a la &amp;quot;Z&amp;quot;: sumar 15  per obtenir el caràcter xifrat.&lt;br /&gt;
:* caràcters del &amp;quot;0&amp;quot; al &amp;quot;9&amp;quot;: sumar 13 per obtenir el caràcter xifrat.&lt;br /&gt;
:* la resta de caràcters no es modifiquen&lt;br /&gt;
&lt;br /&gt;
4. El fitxer comarques.txt (a Moodle) conté un llistat de les comarques de Catalunya. És un fitxer de text i cada comarca ocupa una línia. Feu un programa amb un menú que ens permeti executar els mètodes per:&lt;br /&gt;
&lt;br /&gt;
:*1. Mostrar totes les comarques que comencin per una lletra i el nombre total de les mateixes.&lt;br /&gt;
:*2. Crear un diccionari amb la primera lletra de cada comarca com a clau i el número de comarques que comencen per aquesta lletra.&lt;br /&gt;
:*3. Crear un nou fitxer amb les dades del diccionari de l'apartat 2, una lletra per línia i el número separat per tabulador ('\t');&lt;br /&gt;
:*4. A partir del fitxer anterior sumi i ens mostri quantes comarques hi ha (podeu utilitzar els mètodes dels strings split i rstrip.&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A2.1-_Solucions_Exercicis_fitxers_de_text&amp;diff=17980</id>
		<title>ASIX-M3-UF3-A2.1- Solucions Exercicis fitxers de text</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A2.1-_Solucions_Exercicis_fitxers_de_text&amp;diff=17980"/>
				<updated>2024-04-25T16:20:38Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1. Fes un programa que crei un diccionari en les dades dels empleats del fitxer de text empleats.txt. Y a continuació, el recorri mostrant les seves dades.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Un programa que cree un diccionario en los datos de los empleados del archivo de texto.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Crear un diccionario vacío para almacenar los datos de los empleados&lt;br /&gt;
empleados = {}&lt;br /&gt;
&lt;br /&gt;
# Abrir el fichero para leer&lt;br /&gt;
fichero = open(&amp;quot;empleats.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Leer cada linea en el fichero&lt;br /&gt;
for i in fichero:&lt;br /&gt;
    # Dividir la línea (i) en campos utilizando el punto y coma como separador&lt;br /&gt;
    entrada = i.strip().split(';')&lt;br /&gt;
&lt;br /&gt;
    # Extraer el id, nombre, apellidos y sueldo de los campos&lt;br /&gt;
    id = entrada[0]&lt;br /&gt;
    nombre = entrada[1]&lt;br /&gt;
    apellidos = entrada[2]&lt;br /&gt;
    sueldo = int(entrada[3])&lt;br /&gt;
&lt;br /&gt;
    # Crear un list con nombre, apellidos y sueldo para cada entrada&lt;br /&gt;
    empleado_list = [nombre, apellidos, sueldo]&lt;br /&gt;
&lt;br /&gt;
    # Añadir una lista al diccionario&lt;br /&gt;
    empleados[id] = empleado_list&lt;br /&gt;
&lt;br /&gt;
# Cerrar el fichero&lt;br /&gt;
fichero.close()&lt;br /&gt;
&lt;br /&gt;
# Imprimir el diccionario&lt;br /&gt;
print(&amp;quot;{:&amp;lt;4} {:&amp;lt;10} {:&amp;lt;11} {:&amp;lt;8}&amp;quot;.format(&amp;quot;Id&amp;quot;, &amp;quot;Nombre&amp;quot;, &amp;quot;Apellidos&amp;quot;, &amp;quot;Sueldo&amp;quot;))&lt;br /&gt;
print(&amp;quot;-&amp;quot; * 34)&lt;br /&gt;
for id, data in empleados.items():&lt;br /&gt;
    print(&amp;quot;{:&amp;lt;4} {:&amp;lt;10} {:&amp;lt;11} {:&amp;lt;8}&amp;quot;.format(id, data[0], data[1], data[2]))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Per aquest exercici, crea prèviament un fitxer de text, que contingui només un número. Fes un mètode que pugui rebre 0, 1 o 2 paràmetres.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Un programa con parámetros.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
file = &amp;quot;UF3-A2.1-02.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Obtener una lista de argumentos (el primer argumento es el nombre del propio script, no hace falta)&lt;br /&gt;
args = sys.argv[1:]&lt;br /&gt;
&lt;br /&gt;
# Contar el número de argumentos&lt;br /&gt;
num_args = len(args)&lt;br /&gt;
&lt;br /&gt;
# Abrir fichero para escribir&lt;br /&gt;
fichero = open(file, &amp;quot;r+&amp;quot;)&lt;br /&gt;
# Leer primer linea&lt;br /&gt;
primera_linea = fichero.readline()&lt;br /&gt;
# Volver a principio del fichero&lt;br /&gt;
fichero.seek(0)&lt;br /&gt;
try:&lt;br /&gt;
    numero = int(primera_linea)&lt;br /&gt;
except ValueError:&lt;br /&gt;
    print(&amp;quot;La primera línea del fichero no contiene ningún número.&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
# Procesar el resultado según los argumentos&lt;br /&gt;
if num_args == 0:&lt;br /&gt;
    # Si no se dan argumentos&lt;br /&gt;
    print(f&amp;quot;En el archivo {file} hay un número: {numero}.&amp;quot;)&lt;br /&gt;
elif num_args == 1:&lt;br /&gt;
    # Si solo se da 1 argumento&lt;br /&gt;
    if args[0] == &amp;quot;inc&amp;quot;:&lt;br /&gt;
        print(f&amp;quot;El valor aumentado es ahora: {numero + 1}&amp;quot;)&lt;br /&gt;
        fichero.writelines(str(numero + 1))&lt;br /&gt;
    elif args[0] == &amp;quot;dec&amp;quot;:&lt;br /&gt;
        print(f&amp;quot;El valor reducido es ahora: {numero - 1}&amp;quot;)&lt;br /&gt;
        fichero.writelines(str(numero - 1))&lt;br /&gt;
    else:&lt;br /&gt;
        print(f&amp;quot;Argumento {args[0]} desconocido.&amp;quot;)&lt;br /&gt;
elif num_args == 2:&lt;br /&gt;
    # Si solo se da 2 argumentos&lt;br /&gt;
    try:&lt;br /&gt;
        # Convertir args[1] a entero&lt;br /&gt;
        arg1_numero = int(args[1])&lt;br /&gt;
        if args[0] == &amp;quot;inc&amp;quot;:&lt;br /&gt;
            print(f&amp;quot;El valor aumentado es ahora: {numero + arg1_numero}&amp;quot;)&lt;br /&gt;
            fichero.writelines(str(numero + arg1_numero))&lt;br /&gt;
        elif args[0] == &amp;quot;dec&amp;quot;:&lt;br /&gt;
            print(f&amp;quot;El valor reducido es ahora: {numero - arg1_numero}&amp;quot;)&lt;br /&gt;
            fichero.writelines(str(numero - arg1_numero))&lt;br /&gt;
        else:&lt;br /&gt;
            print(f&amp;quot;Argumento {args[0]} desconocido.&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Si la conversión falló, entonces no es un número entero.&lt;br /&gt;
        print(f&amp;quot;El argumento {args[1]} no es un número entero.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Demasiados argumentos.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Cerrar el fichero&lt;br /&gt;
fichero.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Fes un mètode per xifrar un fitxer de text. Rebrà com a paràmetre un fitxer de text i crearà un altre, afegint al nom de l'original &amp;quot;_cod&amp;quot; i amb la mateixa extensió. L'algoritme de xifrat consisteix en.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Programa de cifrado de archivos.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Función para cifrar archivo&lt;br /&gt;
def encrypt(file):&lt;br /&gt;
    # Abrir el fichero para leer&lt;br /&gt;
    fichero = open(file, &amp;quot;r&amp;quot;)&lt;br /&gt;
    # Leer contenido del fichero&lt;br /&gt;
    contenido = fichero.read()&lt;br /&gt;
    # Crear contenido encryptado&lt;br /&gt;
    contenido_encryptado = ''&lt;br /&gt;
&lt;br /&gt;
    for i in contenido:&lt;br /&gt;
        if i.islower():&lt;br /&gt;
            # Cifrar caracteres de la &amp;quot;a&amp;quot; a la &amp;quot;z&amp;quot;&lt;br /&gt;
            encryptado_i = (ord(i) - 11)&lt;br /&gt;
        elif i.isupper():&lt;br /&gt;
            # Cifrar caracteres de la &amp;quot;A&amp;quot; a la &amp;quot;Z&amp;quot;&lt;br /&gt;
            encryptado_i = (ord(i) + 15)&lt;br /&gt;
        elif i.isdigit():&lt;br /&gt;
            # Cifrar caracteres del &amp;quot;0&amp;quot; al &amp;quot;9&amp;quot;&lt;br /&gt;
            encryptado_i = (ord(i) + 13)&lt;br /&gt;
        else:&lt;br /&gt;
            # Dejar otros caracteres sin cambios&lt;br /&gt;
            encryptado_i = ord(i)&lt;br /&gt;
        contenido_encryptado += chr(encryptado_i)&lt;br /&gt;
&lt;br /&gt;
    # Crear un nuevo fichero&lt;br /&gt;
    # Esta línea es necesaria si hay varios puntos en el nombre del archivo.&lt;br /&gt;
    fichero_parts = file.rsplit('.', 1)&lt;br /&gt;
    cod_fichero = '_cod.'.join(fichero_parts)&lt;br /&gt;
    with open(cod_fichero, 'w') as cod:&lt;br /&gt;
        # Escribir contenido cifrado en un archivo nuevo&lt;br /&gt;
        cod.write(contenido_encryptado)&lt;br /&gt;
&lt;br /&gt;
    # Cerrar fichero&lt;br /&gt;
    fichero.close()&lt;br /&gt;
&lt;br /&gt;
#file = &amp;quot;UF3-A2.1-03.txt&amp;quot;&lt;br /&gt;
file=input(&amp;quot;Especifique el archivo que desea cifrar: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if os.path.exists(file):&lt;br /&gt;
   encrypt(file)&lt;br /&gt;
   print(&amp;quot;La tarea se ha completado.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
   print(f&amp;quot;El fichero {file} no existe.&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. El fitxer comarques.txt conté un llistat de les comarques de Catalunya. És un fitxer de text i cada comarca ocupa una línia. Feu un programa amb un menú que ens permeti executar els mètodes per.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Ruta al archivo de la lista&lt;br /&gt;
file = &amp;quot;comarques.txt&amp;quot;&lt;br /&gt;
# Nuevo nombre de archivo para las funciones (tareas) 3 y 4&lt;br /&gt;
new_file = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Diccionario para las funciones (tareas) 2 y 3&lt;br /&gt;
diccionario = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Función para comprobar que se ha introducido un número entero para menu()&lt;br /&gt;
def get_choice():&lt;br /&gt;
    try:&lt;br /&gt;
        choice = int(input(&amp;quot;Seleccione la opción de menú: &amp;quot;))&lt;br /&gt;
        return choice&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Entrada inválida. Por favor ingrese un número entero válido.&amp;quot;)&lt;br /&gt;
        return get_choice()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tarea 1.&lt;br /&gt;
def tarea_1():&lt;br /&gt;
    # contador&lt;br /&gt;
    counter = 0&lt;br /&gt;
&lt;br /&gt;
    # Pedir que se introduzca una letra&lt;br /&gt;
    letra = input(&amp;quot;Introduzca una letra: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Comprobar que sólo se introduce una letra y que se trata de una letra latina&lt;br /&gt;
    if len(letra) != 1 or not letra.isalpha():&lt;br /&gt;
        print(&amp;quot;Sólo tiene que introducir una letra latina.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Si todo va bien, convertir la letra en mayúscula, ya que todos los nombres del archivo empiezan por mayúscula&lt;br /&gt;
        if letra.islower():&lt;br /&gt;
            letra = letra.upper()&lt;br /&gt;
&lt;br /&gt;
        # Imprimir la lista&lt;br /&gt;
        print(&amp;quot;Lista de comarcas:\n&amp;quot;)&lt;br /&gt;
        # Abrir el fichero para leer (r)&lt;br /&gt;
        with open(file, 'r') as f:&lt;br /&gt;
            # leer cada línea&lt;br /&gt;
            for line in f:&lt;br /&gt;
                # si la línea empieza por la &amp;quot;letra&amp;quot;, la imprimir y actualizar el contador&lt;br /&gt;
                if line.startswith(letra):&lt;br /&gt;
                    print(line.strip())&lt;br /&gt;
                    counter += 1&lt;br /&gt;
        # Imprimir contador&lt;br /&gt;
        print(f'Total comarcas que empiezan por la letra {letra}: {counter}\n')&lt;br /&gt;
        # Volver a menu&lt;br /&gt;
        menu()&lt;br /&gt;
# Tarea 2.&lt;br /&gt;
def tarea_2():&lt;br /&gt;
    # Importar el diccionario global&lt;br /&gt;
    global diccionario&lt;br /&gt;
&lt;br /&gt;
    # Leer el fichero&lt;br /&gt;
    with open(file, 'r') as f:&lt;br /&gt;
        # leer cada línea del archivo&lt;br /&gt;
        for line in f:&lt;br /&gt;
            # eliminar los caracteres de salto de línea y los espacios al final y al principio de una línea&lt;br /&gt;
            line = line.strip()&lt;br /&gt;
            # comprobar que la línea no está vacía&lt;br /&gt;
            if line:&lt;br /&gt;
                # primer carácter de la línea&lt;br /&gt;
                prim_char = line[0]&lt;br /&gt;
                # si aún no se ha encontrado el carácter, añádir lo al diccionario&lt;br /&gt;
                if prim_char not in diccionario:&lt;br /&gt;
                    diccionario[prim_char] = 1&lt;br /&gt;
                # si el carácter ya está en el diccionario, aumentar contador de letras&lt;br /&gt;
                else:&lt;br /&gt;
                    diccionario[prim_char] += 1&lt;br /&gt;
&lt;br /&gt;
    # Imprimir el diccionario&lt;br /&gt;
    print(f&amp;quot;La operación ha generado un diccionario: {dict}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Volver a menu&lt;br /&gt;
    menu()&lt;br /&gt;
&lt;br /&gt;
# Tarea 3.&lt;br /&gt;
def tarea_3():&lt;br /&gt;
    # Importar el diccionario global&lt;br /&gt;
    global diccionario&lt;br /&gt;
    # Importar el nombre para fichero nuevo&lt;br /&gt;
    global new_file&lt;br /&gt;
&lt;br /&gt;
    # revisión de diccionario&lt;br /&gt;
    if not diccionario:&lt;br /&gt;
        print(&amp;quot;El diccionario está vacío. Genere un diccionario utilizando la opción 2 del menú.&amp;quot;)&lt;br /&gt;
        menu()&lt;br /&gt;
&lt;br /&gt;
    # Generar nombre para nuevo fichero&lt;br /&gt;
    fichero_parts = file.rsplit('.', 1)&lt;br /&gt;
    new_file = '_new.'.join(fichero_parts)&lt;br /&gt;
&lt;br /&gt;
    # Crear un nuevo archivo y guardar en él los datos del diccionario&lt;br /&gt;
    with open(new_file, 'w') as f:&lt;br /&gt;
        for letra, num in diccionario.items():&lt;br /&gt;
            f.write('{}\t{}\n'.format(letra, num))&lt;br /&gt;
&lt;br /&gt;
    # Imprimir que los datos se han guardado.&lt;br /&gt;
    print(f&amp;quot;Se ha generado el archivo {new_file}.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Volver a menu&lt;br /&gt;
    menu()&lt;br /&gt;
&lt;br /&gt;
# Tarea 4.&lt;br /&gt;
def tarea_4():&lt;br /&gt;
    try:&lt;br /&gt;
        with open(new_file, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            # si el fichero existe&lt;br /&gt;
            counter = 0&lt;br /&gt;
            for line in f:&lt;br /&gt;
                # dividir la línea en una letra y un número&lt;br /&gt;
                letra, num = line.split('\t')&lt;br /&gt;
                # actualizar contador&lt;br /&gt;
                counter += int(num.rstrip('\n'))&lt;br /&gt;
&lt;br /&gt;
        # Imprimir resultado&lt;br /&gt;
        print(f&amp;quot;Total comarcas: {counter}.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Volver a menu&lt;br /&gt;
        menu()&lt;br /&gt;
&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        # si el fichero no existe&lt;br /&gt;
        print(&amp;quot;El fichero no existe. Debe generarse utilizando la opción 3 del menú.\n&amp;quot;)&lt;br /&gt;
        menu()&lt;br /&gt;
&lt;br /&gt;
def menu():&lt;br /&gt;
    print(&amp;quot;las comarcas de Cataluña.\n&amp;quot;&lt;br /&gt;
          &amp;quot;1. Mostrar todas las comarcas que empiecen por una letra\n&amp;quot;&lt;br /&gt;
          &amp;quot;2. Crear un diccionario de las comarcas\n&amp;quot;&lt;br /&gt;
          &amp;quot;3. Crear un nuevo archivo con los datos del diccionario del apartado 2\n&amp;quot;&lt;br /&gt;
          &amp;quot;4. A partir del archivo del ap. 3 sumar y mostrar cuantas comarcas existen\n&amp;quot;&lt;br /&gt;
          &amp;quot;5. Salir&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    mode = get_choice()&lt;br /&gt;
&lt;br /&gt;
    if mode == 1:&lt;br /&gt;
        tarea_1()&lt;br /&gt;
    elif mode == 2:&lt;br /&gt;
        tarea_2()&lt;br /&gt;
    elif mode == 3:&lt;br /&gt;
        tarea_3()&lt;br /&gt;
    elif mode == 4:&lt;br /&gt;
        tarea_4()&lt;br /&gt;
    elif mode == 5:&lt;br /&gt;
        print(&amp;quot;Adiós.&amp;quot;)&lt;br /&gt;
        quit()&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Ha seleccionado un valor no válido.&amp;quot;)&lt;br /&gt;
        menu()&lt;br /&gt;
menu()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A2.1-_Solucions_Exercicis_fitxers_de_text&amp;diff=17968</id>
		<title>ASIX-M3-UF3-A2.1- Solucions Exercicis fitxers de text</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A2.1-_Solucions_Exercicis_fitxers_de_text&amp;diff=17968"/>
				<updated>2024-04-18T16:51:52Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1. Fes un programa que crei un diccionari en les dades dels empleats del fitxer de text empleats.txt. Y a continuació, el recorri mostrant les seves dades.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Un programa que cree un diccionario en los datos de los empleados del archivo de texto.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Crear un diccionario vacío para almacenar los datos de los empleados&lt;br /&gt;
empleados = {}&lt;br /&gt;
&lt;br /&gt;
# Abrir el fichero para leer&lt;br /&gt;
fichero = open(&amp;quot;empleats.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Leer cada linea en el fichero&lt;br /&gt;
for i in fichero:&lt;br /&gt;
    # Dividir la línea (i) en campos utilizando el punto y coma como separador&lt;br /&gt;
    entrada = i.strip().split(';')&lt;br /&gt;
&lt;br /&gt;
    # Extraer el id, nombre, apellidos y sueldo de los campos&lt;br /&gt;
    id = entrada[0]&lt;br /&gt;
    nombre = entrada[1]&lt;br /&gt;
    apellidos = entrada[2]&lt;br /&gt;
    sueldo = int(entrada[3])&lt;br /&gt;
&lt;br /&gt;
    # Crear un list con nombre, apellidos y sueldo para cada entrada&lt;br /&gt;
    empleado_list = [nombre, apellidos, sueldo]&lt;br /&gt;
&lt;br /&gt;
    # Añadir una lista al diccionario&lt;br /&gt;
    empleados[id] = empleado_list&lt;br /&gt;
&lt;br /&gt;
# Cerrar el fichero&lt;br /&gt;
fichero.close()&lt;br /&gt;
&lt;br /&gt;
# Imprimir el diccionario&lt;br /&gt;
print(&amp;quot;{:&amp;lt;4} {:&amp;lt;10} {:&amp;lt;11} {:&amp;lt;8}&amp;quot;.format(&amp;quot;Id&amp;quot;, &amp;quot;Nombre&amp;quot;, &amp;quot;Apellidos&amp;quot;, &amp;quot;Sueldo&amp;quot;))&lt;br /&gt;
print(&amp;quot;-&amp;quot; * 34)&lt;br /&gt;
for id, data in empleados.items():&lt;br /&gt;
    print(&amp;quot;{:&amp;lt;4} {:&amp;lt;10} {:&amp;lt;11} {:&amp;lt;8}&amp;quot;.format(id, data[0], data[1], data[2]))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Per aquest exercici, crea prèviament un fitxer de text, que contingui només un número. Fes un mètode que pugui rebre 0, 1 o 2 paràmetres.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Un programa con parámetros.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
file = &amp;quot;UF3-A2.1-02.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Obtener una lista de argumentos (el primer argumento es el nombre del propio script, no hace falta)&lt;br /&gt;
args = sys.argv[1:]&lt;br /&gt;
&lt;br /&gt;
# Contar el número de argumentos&lt;br /&gt;
num_args = len(args)&lt;br /&gt;
&lt;br /&gt;
# Abrir fichero para escribir&lt;br /&gt;
fichero = open(file, &amp;quot;r+&amp;quot;)&lt;br /&gt;
# Leer primer linea&lt;br /&gt;
primera_linea = fichero.readline()&lt;br /&gt;
# Volver a principio del fichero&lt;br /&gt;
fichero.seek(0)&lt;br /&gt;
try:&lt;br /&gt;
    numero = int(primera_linea)&lt;br /&gt;
except ValueError:&lt;br /&gt;
    print(&amp;quot;La primera línea del fichero no contiene ningún número.&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
# Procesar el resultado según los argumentos&lt;br /&gt;
if num_args == 0:&lt;br /&gt;
    # Si no se dan argumentos&lt;br /&gt;
    print(f&amp;quot;En el archivo {file} hay un número: {numero}.&amp;quot;)&lt;br /&gt;
elif num_args == 1:&lt;br /&gt;
    # Si solo se da 1 argumento&lt;br /&gt;
    if args[0] == &amp;quot;inc&amp;quot;:&lt;br /&gt;
        print(f&amp;quot;El valor aumentado es ahora: {numero + 1}&amp;quot;)&lt;br /&gt;
        fichero.writelines(str(numero + 1))&lt;br /&gt;
    elif args[0] == &amp;quot;dec&amp;quot;:&lt;br /&gt;
        print(f&amp;quot;El valor reducido es ahora: {numero - 1}&amp;quot;)&lt;br /&gt;
        fichero.writelines(str(numero - 1))&lt;br /&gt;
    else:&lt;br /&gt;
        print(f&amp;quot;Argumento {args[0]} desconocido.&amp;quot;)&lt;br /&gt;
elif num_args == 2:&lt;br /&gt;
    # Si solo se da 2 argumentos&lt;br /&gt;
    try:&lt;br /&gt;
        # Convertir args[1] a entero&lt;br /&gt;
        arg1_numero = int(args[1])&lt;br /&gt;
        if args[0] == &amp;quot;inc&amp;quot;:&lt;br /&gt;
            print(f&amp;quot;El valor aumentado es ahora: {numero + arg1_numero}&amp;quot;)&lt;br /&gt;
            fichero.writelines(str(numero + arg1_numero))&lt;br /&gt;
        elif args[0] == &amp;quot;dec&amp;quot;:&lt;br /&gt;
            print(f&amp;quot;El valor reducido es ahora: {numero - arg1_numero}&amp;quot;)&lt;br /&gt;
            fichero.writelines(str(numero - arg1_numero))&lt;br /&gt;
        else:&lt;br /&gt;
            print(f&amp;quot;Argumento {args[0]} desconocido.&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Si la conversión falló, entonces no es un número entero.&lt;br /&gt;
        print(f&amp;quot;El argumento {args[1]} no es un número entero.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Demasiados argumentos.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Cerrar el fichero&lt;br /&gt;
fichero.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. Fes un mètode per xifrar un fitxer de text. Rebrà com a paràmetre un fitxer de text i crearà un altre, afegint al nom de l'original &amp;quot;_cod&amp;quot; i amb la mateixa extensió. L'algoritme de xifrat consisteix en.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Programa de cifrado de archivos.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Función para cifrar archivo&lt;br /&gt;
def encrypt(file):&lt;br /&gt;
    # Abrir el fichero para leer&lt;br /&gt;
    fichero = open(file, &amp;quot;r&amp;quot;)&lt;br /&gt;
    # Leer contenido del fichero&lt;br /&gt;
    contenido = fichero.read()&lt;br /&gt;
    # Crear contenido encryptado&lt;br /&gt;
    contenido_encryptado = ''&lt;br /&gt;
&lt;br /&gt;
    for i in contenido:&lt;br /&gt;
        if i.islower():&lt;br /&gt;
            # Cifrar caracteres de la &amp;quot;a&amp;quot; a la &amp;quot;z&amp;quot;&lt;br /&gt;
            encryptado_i = (ord(i) - 11)&lt;br /&gt;
        elif i.isupper():&lt;br /&gt;
            # Cifrar caracteres de la &amp;quot;A&amp;quot; a la &amp;quot;Z&amp;quot;&lt;br /&gt;
            encryptado_i = (ord(i) + 15)&lt;br /&gt;
        elif i.isdigit():&lt;br /&gt;
            # Cifrar caracteres del &amp;quot;0&amp;quot; al &amp;quot;9&amp;quot;&lt;br /&gt;
            encryptado_i = (ord(i) + 13)&lt;br /&gt;
        else:&lt;br /&gt;
            # Dejar otros caracteres sin cambios&lt;br /&gt;
            encryptado_i = ord(i)&lt;br /&gt;
        contenido_encryptado += chr(encryptado_i)&lt;br /&gt;
&lt;br /&gt;
    # Crear un nuevo fichero&lt;br /&gt;
    # Esta línea es necesaria si hay varios puntos en el nombre del archivo.&lt;br /&gt;
    fichero_parts = file.rsplit('.', 1)&lt;br /&gt;
    cod_fichero = '_cod.'.join(fichero_parts)&lt;br /&gt;
    with open(cod_fichero, 'w') as cod:&lt;br /&gt;
        # Escribir contenido cifrado en un archivo nuevo&lt;br /&gt;
        cod.write(contenido_encryptado)&lt;br /&gt;
&lt;br /&gt;
    # Cerrar fichero&lt;br /&gt;
    fichero.close()&lt;br /&gt;
&lt;br /&gt;
#file = &amp;quot;UF3-A2.1-03.txt&amp;quot;&lt;br /&gt;
file=input(&amp;quot;Especifique el archivo que desea cifrar: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if os.path.exists(file):&lt;br /&gt;
   encrypt(file)&lt;br /&gt;
   print(&amp;quot;La tarea se ha completado.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
   print(f&amp;quot;El fichero {file} no existe.&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. El fitxer comarques.txt conté un llistat de les comarques de Catalunya. És un fitxer de text i cada comarca ocupa una línia. Feu un programa amb un menú que ens permeti executar els mètodes per.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Ruta al archivo de la lista&lt;br /&gt;
file = &amp;quot;comarques.txt&amp;quot;&lt;br /&gt;
# Nuevo nombre de archivo para las funciones (tareas) 3 y 4&lt;br /&gt;
new_file = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Diccionario para las funciones (tareas) 2 y 3&lt;br /&gt;
diccionario = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Función para comprobar que se ha introducido un número entero para menu()&lt;br /&gt;
def get_choice():&lt;br /&gt;
    try:&lt;br /&gt;
        choice = int(input(&amp;quot;Seleccione la opción de menú: &amp;quot;))&lt;br /&gt;
        return choice&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Entrada inválida. Por favor ingrese un número entero válido.&amp;quot;)&lt;br /&gt;
        return get_choice()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tarea 1.&lt;br /&gt;
def tarea_1():&lt;br /&gt;
    # contador&lt;br /&gt;
    counter = 0&lt;br /&gt;
&lt;br /&gt;
    # Pedir que se introduzca una letra&lt;br /&gt;
    letra = input(&amp;quot;Introduzca una letra: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Comprobar que sólo se introduce una letra y que se trata de una letra latina&lt;br /&gt;
    if len(letra) != 1 or not letra.isalpha():&lt;br /&gt;
        print(&amp;quot;Sólo tiene que introducir una letra latina.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Si todo va bien, convertir la letra en mayúscula, ya que todos los nombres del archivo empiezan por mayúscula&lt;br /&gt;
        if letra.islower():&lt;br /&gt;
            letra = letra.upper()&lt;br /&gt;
&lt;br /&gt;
        # Imprimir la lista&lt;br /&gt;
        print(&amp;quot;Lista de comarcas:\n&amp;quot;)&lt;br /&gt;
        # Abrir el fichero para leer (r)&lt;br /&gt;
        with open(file, 'r') as f:&lt;br /&gt;
            # leer cada línea&lt;br /&gt;
            for line in f:&lt;br /&gt;
                # si la línea empieza por la &amp;quot;letra&amp;quot;, la imprimir y actualizar el contador&lt;br /&gt;
                if line.startswith(letra):&lt;br /&gt;
                    print(line.strip())&lt;br /&gt;
                    counter += 1&lt;br /&gt;
        # Imprimir contador&lt;br /&gt;
        print(f'Total comarcas que empiezan por la letra {letra}: {counter}\n')&lt;br /&gt;
        # Volver a menu&lt;br /&gt;
        menu()&lt;br /&gt;
# Tarea 2.&lt;br /&gt;
def tarea_2():&lt;br /&gt;
    # Importar el diccionario global&lt;br /&gt;
    global diccionario&lt;br /&gt;
&lt;br /&gt;
    # Leer el fichero&lt;br /&gt;
    with open(file, 'r') as f:&lt;br /&gt;
        # leer cada línea del archivo&lt;br /&gt;
        for line in f:&lt;br /&gt;
            # eliminar los caracteres de salto de línea y los espacios al final y al principio de una línea&lt;br /&gt;
            line = line.strip()&lt;br /&gt;
            # comprobar que la línea no está vacía&lt;br /&gt;
            if line:&lt;br /&gt;
                # primer carácter de la línea&lt;br /&gt;
                prim_char = line[0]&lt;br /&gt;
                # si aún no se ha encontrado el carácter, añádir lo al diccionario&lt;br /&gt;
                if prim_char not in diccionario:&lt;br /&gt;
                    diccionario[prim_char] = 1&lt;br /&gt;
                # si el carácter ya está en el diccionario, aumentar contador de letras&lt;br /&gt;
                else:&lt;br /&gt;
                    diccionario[prim_char] += 1&lt;br /&gt;
&lt;br /&gt;
    # Imprimir el diccionario&lt;br /&gt;
    print(f&amp;quot;La operación ha generado un diccionario: {dict}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Volver a menu&lt;br /&gt;
    menu()&lt;br /&gt;
&lt;br /&gt;
# Tarea 3.&lt;br /&gt;
def tarea_3():&lt;br /&gt;
    # Importar el diccionario global&lt;br /&gt;
    global diccionario&lt;br /&gt;
    # Importar el nombre para fichero nuevo&lt;br /&gt;
    global new_file&lt;br /&gt;
&lt;br /&gt;
    # revisión de diccionario&lt;br /&gt;
    if not diccionario:&lt;br /&gt;
        print(&amp;quot;El diccionario está vacío. Genere un diccionario utilizando la opción 2 del menú.&amp;quot;)&lt;br /&gt;
        menu()&lt;br /&gt;
&lt;br /&gt;
    # Generar nombre para nuevo fichero&lt;br /&gt;
    fichero_parts = file.rsplit('.', 1)&lt;br /&gt;
    new_file = '_new.'.join(fichero_parts)&lt;br /&gt;
&lt;br /&gt;
    # Crear un nuevo archivo y guardar en él los datos del diccionario&lt;br /&gt;
    with open(new_file, 'w') as f:&lt;br /&gt;
        for letra, num in diccionario.items():&lt;br /&gt;
            f.write('{}\t{}\n'.format(letra, num))&lt;br /&gt;
&lt;br /&gt;
    # Imprimir que los datos se han guardado.&lt;br /&gt;
    print(f&amp;quot;Se ha generado el archivo {new_file}.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Volver a menu&lt;br /&gt;
    menu()&lt;br /&gt;
&lt;br /&gt;
# Tarea 4.&lt;br /&gt;
def tarea_4():&lt;br /&gt;
    try:&lt;br /&gt;
        with open(new_file, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            # si el fichero existe&lt;br /&gt;
            counter = 0&lt;br /&gt;
            for line in f:&lt;br /&gt;
                # dividir la línea en una letra y un número&lt;br /&gt;
                letra, num = line.split('\t')&lt;br /&gt;
                # actualizar contador&lt;br /&gt;
                counter += int(num.rstrip('\n'))&lt;br /&gt;
&lt;br /&gt;
        # Imprimir resultado&lt;br /&gt;
        print(f&amp;quot;Total comarcas: {counter}.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Volver a menu&lt;br /&gt;
        menu()&lt;br /&gt;
&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        # si el fichero no existe&lt;br /&gt;
        print(&amp;quot;El fichero no existe. Debe generarse utilizando la opción 3 del menú.\n&amp;quot;)&lt;br /&gt;
        menu()&lt;br /&gt;
&lt;br /&gt;
def menu():&lt;br /&gt;
    print(&amp;quot;las comarcas de Cataluña.\n&amp;quot;&lt;br /&gt;
          &amp;quot;1. Mostrar todas las comarcas que empiecen por una letra\n&amp;quot;&lt;br /&gt;
          &amp;quot;2. Crear un diccionario de las comarcas\n&amp;quot;&lt;br /&gt;
          &amp;quot;3. Crear un nuevo archivo con los datos del diccionario del apartado 2\n&amp;quot;&lt;br /&gt;
          &amp;quot;4. A partir del archivo del ap. 3 sumar y mostrar cuantas comarcas existen\n&amp;quot;&lt;br /&gt;
          &amp;quot;5. Salir&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    mode = get_choice()&lt;br /&gt;
&lt;br /&gt;
    if mode == 1:&lt;br /&gt;
        tarea_1()&lt;br /&gt;
    elif mode == 2:&lt;br /&gt;
        tarea_2()&lt;br /&gt;
    elif mode == 3:&lt;br /&gt;
        tarea_3()&lt;br /&gt;
    elif mode == 4:&lt;br /&gt;
        tarea_4()&lt;br /&gt;
    elif mode == 5:&lt;br /&gt;
        print(&amp;quot;Adiós.&amp;quot;)&lt;br /&gt;
        quit()&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Ha seleccionado un valor no válido.&amp;quot;)&lt;br /&gt;
        menu()&lt;br /&gt;
menu()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A2.1-_Solucions_Exercicis_fitxers_de_text&amp;diff=17967</id>
		<title>ASIX-M3-UF3-A2.1- Solucions Exercicis fitxers de text</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A2.1-_Solucions_Exercicis_fitxers_de_text&amp;diff=17967"/>
				<updated>2024-04-18T16:41:24Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;1. Fes un programa que crei un diccionari en les dades dels empleats del fitxer de text empleats.txt. Y a continuació, el recorri mostrant les seves dades.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
print(&amp;quot;Un programa que cree un diccionario en los datos de los empleados del archivo de texto.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Crear un diccionario vacío para almacenar los datos de los empleados&lt;br /&gt;
empleados = {}&lt;br /&gt;
&lt;br /&gt;
# Abrir el fichero para leer&lt;br /&gt;
fichero = open(&amp;quot;empleats.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Leer cada linea en el fichero&lt;br /&gt;
for i in fichero:&lt;br /&gt;
    # Dividir la línea (i) en campos utilizando el punto y coma como separador&lt;br /&gt;
    entrada = i.strip().split(';')&lt;br /&gt;
&lt;br /&gt;
    # Extraer el id, nombre, apellidos y sueldo de los campos&lt;br /&gt;
    id = entrada[0]&lt;br /&gt;
    nombre = entrada[1]&lt;br /&gt;
    apellidos = entrada[2]&lt;br /&gt;
    sueldo = int(entrada[3])&lt;br /&gt;
&lt;br /&gt;
    # Crear un list con nombre, apellidos y sueldo para cada entrada&lt;br /&gt;
    empleado_list = [nombre, apellidos, sueldo]&lt;br /&gt;
&lt;br /&gt;
    # Añadir una lista al diccionario&lt;br /&gt;
    empleados[id] = empleado_list&lt;br /&gt;
&lt;br /&gt;
# Cerrar el fichero&lt;br /&gt;
fichero.close()&lt;br /&gt;
&lt;br /&gt;
# Imprimir el diccionario&lt;br /&gt;
print(&amp;quot;{:&amp;lt;4} {:&amp;lt;10} {:&amp;lt;11} {:&amp;lt;8}&amp;quot;.format(&amp;quot;Id&amp;quot;, &amp;quot;Nombre&amp;quot;, &amp;quot;Apellidos&amp;quot;, &amp;quot;Sueldo&amp;quot;))&lt;br /&gt;
print(&amp;quot;-&amp;quot; * 34)&lt;br /&gt;
for id, data in empleados.items():&lt;br /&gt;
    print(&amp;quot;{:&amp;lt;4} {:&amp;lt;10} {:&amp;lt;11} {:&amp;lt;8}&amp;quot;.format(id, data[0], data[1], data[2]))&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Per aquest exercici, crea prèviament un fitxer de text, que contingui només un número. Fes un mètode que pugui rebre 0, 1 o 2 paràmetres.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Un programa con parámetros.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
file = &amp;quot;UF3-A2.1-02.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Obtener una lista de argumentos (el primer argumento es el nombre del propio script, no hace falta)&lt;br /&gt;
args = sys.argv[1:]&lt;br /&gt;
&lt;br /&gt;
# Contar el número de argumentos&lt;br /&gt;
num_args = len(args)&lt;br /&gt;
&lt;br /&gt;
# Abrir fichero para escribir&lt;br /&gt;
fichero = open(file, &amp;quot;r+&amp;quot;)&lt;br /&gt;
# Leer primer linea&lt;br /&gt;
primera_linea = fichero.readline()&lt;br /&gt;
# Volver a principio del fichero&lt;br /&gt;
fichero.seek(0)&lt;br /&gt;
try:&lt;br /&gt;
    numero = int(primera_linea)&lt;br /&gt;
except ValueError:&lt;br /&gt;
    print(&amp;quot;La primera línea del fichero no contiene ningún número.&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
# Procesar el resultado según los argumentos&lt;br /&gt;
if num_args == 0:&lt;br /&gt;
    # Si no se dan argumentos&lt;br /&gt;
    print(f&amp;quot;En el archivo {file} hay un número: {numero}.&amp;quot;)&lt;br /&gt;
elif num_args == 1:&lt;br /&gt;
    # Si solo se da 1 argumento&lt;br /&gt;
    if args[0] == &amp;quot;inc&amp;quot;:&lt;br /&gt;
        print(f&amp;quot;El valor aumentado es ahora: {numero + 1}&amp;quot;)&lt;br /&gt;
        fichero.writelines(str(numero + 1))&lt;br /&gt;
    elif args[0] == &amp;quot;dec&amp;quot;:&lt;br /&gt;
        print(f&amp;quot;El valor reducido es ahora: {numero - 1}&amp;quot;)&lt;br /&gt;
        fichero.writelines(str(numero - 1))&lt;br /&gt;
    else:&lt;br /&gt;
        print(f&amp;quot;Argumento {args[0]} desconocido.&amp;quot;)&lt;br /&gt;
elif num_args == 2:&lt;br /&gt;
    # Si solo se da 2 argumentos&lt;br /&gt;
    try:&lt;br /&gt;
        # Convertir args[1] a entero&lt;br /&gt;
        arg1_numero = int(args[1])&lt;br /&gt;
        if args[0] == &amp;quot;inc&amp;quot;:&lt;br /&gt;
            print(f&amp;quot;El valor aumentado es ahora: {numero + arg1_numero}&amp;quot;)&lt;br /&gt;
            fichero.writelines(str(numero + arg1_numero))&lt;br /&gt;
        elif args[0] == &amp;quot;dec&amp;quot;:&lt;br /&gt;
            print(f&amp;quot;El valor reducido es ahora: {numero - arg1_numero}&amp;quot;)&lt;br /&gt;
            fichero.writelines(str(numero - arg1_numero))&lt;br /&gt;
        else:&lt;br /&gt;
            print(f&amp;quot;Argumento {args[0]} desconocido.&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        # Si la conversión falló, entonces no es un número entero.&lt;br /&gt;
        print(f&amp;quot;El argumento {args[1]} no es un número entero.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Demasiados argumentos.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Cerrar el fichero&lt;br /&gt;
fichero.close()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Fes un mètode per xifrar un fitxer de text. Rebrà com a paràmetre un fitxer de text i crearà un altre, afegint al nom de l'original &amp;quot;_cod&amp;quot; i amb la mateixa extensió. L'algoritme de xifrat consisteix en.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Programa de cifrado de archivos.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Función para cifrar archivo&lt;br /&gt;
def encrypt(file):&lt;br /&gt;
    # Abrir el fichero para leer&lt;br /&gt;
    fichero = open(file, &amp;quot;r&amp;quot;)&lt;br /&gt;
    # Leer contenido del fichero&lt;br /&gt;
    contenido = fichero.read()&lt;br /&gt;
    # Crear contenido encryptado&lt;br /&gt;
    contenido_encryptado = ''&lt;br /&gt;
&lt;br /&gt;
    for i in contenido:&lt;br /&gt;
        if i.islower():&lt;br /&gt;
            # Cifrar caracteres de la &amp;quot;a&amp;quot; a la &amp;quot;z&amp;quot;&lt;br /&gt;
            encryptado_i = (ord(i) - 11)&lt;br /&gt;
        elif i.isupper():&lt;br /&gt;
            # Cifrar caracteres de la &amp;quot;A&amp;quot; a la &amp;quot;Z&amp;quot;&lt;br /&gt;
            encryptado_i = (ord(i) + 15)&lt;br /&gt;
        elif i.isdigit():&lt;br /&gt;
            # Cifrar caracteres del &amp;quot;0&amp;quot; al &amp;quot;9&amp;quot;&lt;br /&gt;
            encryptado_i = (ord(i) + 13)&lt;br /&gt;
        else:&lt;br /&gt;
            # Dejar otros caracteres sin cambios&lt;br /&gt;
            encryptado_i = ord(i)&lt;br /&gt;
        contenido_encryptado += chr(encryptado_i)&lt;br /&gt;
&lt;br /&gt;
    # Crear un nuevo fichero&lt;br /&gt;
    # Esta línea es necesaria si hay varios puntos en el nombre del archivo.&lt;br /&gt;
    fichero_parts = file.rsplit('.', 1)&lt;br /&gt;
    cod_fichero = '_cod.'.join(fichero_parts)&lt;br /&gt;
    with open(cod_fichero, 'w') as cod:&lt;br /&gt;
        # Escribir contenido cifrado en un archivo nuevo&lt;br /&gt;
        cod.write(contenido_encryptado)&lt;br /&gt;
&lt;br /&gt;
    # Cerrar fichero&lt;br /&gt;
    fichero.close()&lt;br /&gt;
&lt;br /&gt;
#file = &amp;quot;UF3-A2.1-03.txt&amp;quot;&lt;br /&gt;
file=input(&amp;quot;Especifique el archivo que desea cifrar: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if os.path.exists(file):&lt;br /&gt;
   encrypt(file)&lt;br /&gt;
   print(&amp;quot;La tarea se ha completado.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
   print(f&amp;quot;El fichero {file} no existe.&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. El fitxer comarques.txt conté un llistat de les comarques de Catalunya. És un fitxer de text i cada comarca ocupa una línia. Feu un programa amb un menú que ens permeti executar els mètodes per.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Ruta al archivo de la lista&lt;br /&gt;
file = &amp;quot;comarques.txt&amp;quot;&lt;br /&gt;
# Nuevo nombre de archivo para las funciones (tareas) 3 y 4&lt;br /&gt;
new_file = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Diccionario para las funciones (tareas) 2 y 3&lt;br /&gt;
diccionario = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Función para comprobar que se ha introducido un número entero para menu()&lt;br /&gt;
def get_choice():&lt;br /&gt;
    try:&lt;br /&gt;
        choice = int(input(&amp;quot;Seleccione la opción de menú: &amp;quot;))&lt;br /&gt;
        return choice&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Entrada inválida. Por favor ingrese un número entero válido.&amp;quot;)&lt;br /&gt;
        return get_choice()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Tarea 1.&lt;br /&gt;
def tarea_1():&lt;br /&gt;
    # contador&lt;br /&gt;
    counter = 0&lt;br /&gt;
&lt;br /&gt;
    # Pedir que se introduzca una letra&lt;br /&gt;
    letra = input(&amp;quot;Introduzca una letra: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Comprobar que sólo se introduce una letra y que se trata de una letra latina&lt;br /&gt;
    if len(letra) != 1 or not letra.isalpha():&lt;br /&gt;
        print(&amp;quot;Sólo tiene que introducir una letra latina.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Si todo va bien, convertir la letra en mayúscula, ya que todos los nombres del archivo empiezan por mayúscula&lt;br /&gt;
        if letra.islower():&lt;br /&gt;
            letra = letra.upper()&lt;br /&gt;
&lt;br /&gt;
        # Imprimir la lista&lt;br /&gt;
        print(&amp;quot;Lista de comarcas:\n&amp;quot;)&lt;br /&gt;
        # Abrir el fichero para leer (r)&lt;br /&gt;
        with open(file, 'r') as f:&lt;br /&gt;
            # leer cada línea&lt;br /&gt;
            for line in f:&lt;br /&gt;
                # si la línea empieza por la &amp;quot;letra&amp;quot;, la imprimir y actualizar el contador&lt;br /&gt;
                if line.startswith(letra):&lt;br /&gt;
                    print(line.strip())&lt;br /&gt;
                    counter += 1&lt;br /&gt;
        # Imprimir contador&lt;br /&gt;
        print(f'Total comarcas que empiezan por la letra {letra}: {counter}\n')&lt;br /&gt;
        # Volver a menu&lt;br /&gt;
        menu()&lt;br /&gt;
# Tarea 2.&lt;br /&gt;
def tarea_2():&lt;br /&gt;
    # Importar el diccionario global&lt;br /&gt;
    global diccionario&lt;br /&gt;
&lt;br /&gt;
    # Leer el fichero&lt;br /&gt;
    with open(file, 'r') as f:&lt;br /&gt;
        # leer cada línea del archivo&lt;br /&gt;
        for line in f:&lt;br /&gt;
            # eliminar los caracteres de salto de línea y los espacios al final y al principio de una línea&lt;br /&gt;
            line = line.strip()&lt;br /&gt;
            # comprobar que la línea no está vacía&lt;br /&gt;
            if line:&lt;br /&gt;
                # primer carácter de la línea&lt;br /&gt;
                prim_char = line[0]&lt;br /&gt;
                # si aún no se ha encontrado el carácter, añádir lo al diccionario&lt;br /&gt;
                if prim_char not in diccionario:&lt;br /&gt;
                    diccionario[prim_char] = 1&lt;br /&gt;
                # si el carácter ya está en el diccionario, aumentar contador de letras&lt;br /&gt;
                else:&lt;br /&gt;
                    diccionario[prim_char] += 1&lt;br /&gt;
&lt;br /&gt;
    # Imprimir el diccionario&lt;br /&gt;
    print(f&amp;quot;La operación ha generado un diccionario: {dict}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Volver a menu&lt;br /&gt;
    menu()&lt;br /&gt;
&lt;br /&gt;
# Tarea 3.&lt;br /&gt;
def tarea_3():&lt;br /&gt;
    # Importar el diccionario global&lt;br /&gt;
    global diccionario&lt;br /&gt;
    # Importar el nombre para fichero nuevo&lt;br /&gt;
    global new_file&lt;br /&gt;
&lt;br /&gt;
    # revisión de diccionario&lt;br /&gt;
    if not diccionario:&lt;br /&gt;
        print(&amp;quot;El diccionario está vacío. Genere un diccionario utilizando la opción 2 del menú.&amp;quot;)&lt;br /&gt;
        menu()&lt;br /&gt;
&lt;br /&gt;
    # Generar nombre para nuevo fichero&lt;br /&gt;
    fichero_parts = file.rsplit('.', 1)&lt;br /&gt;
    new_file = '_new.'.join(fichero_parts)&lt;br /&gt;
&lt;br /&gt;
    # Crear un nuevo archivo y guardar en él los datos del diccionario&lt;br /&gt;
    with open(new_file, 'w') as f:&lt;br /&gt;
        for letra, num in diccionario.items():&lt;br /&gt;
            f.write('{}\t{}\n'.format(letra, num))&lt;br /&gt;
&lt;br /&gt;
    # Imprimir que los datos se han guardado.&lt;br /&gt;
    print(f&amp;quot;Se ha generado el archivo {new_file}.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Volver a menu&lt;br /&gt;
    menu()&lt;br /&gt;
&lt;br /&gt;
# Tarea 4.&lt;br /&gt;
def tarea_4():&lt;br /&gt;
    try:&lt;br /&gt;
        with open(new_file, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            # si el fichero existe&lt;br /&gt;
            counter = 0&lt;br /&gt;
            for line in f:&lt;br /&gt;
                # dividir la línea en una letra y un número&lt;br /&gt;
                letra, num = line.split('\t')&lt;br /&gt;
                # actualizar contador&lt;br /&gt;
                counter += int(num.rstrip('\n'))&lt;br /&gt;
&lt;br /&gt;
        # Imprimir resultado&lt;br /&gt;
        print(f&amp;quot;Total comarcas: {counter}.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Volver a menu&lt;br /&gt;
        menu()&lt;br /&gt;
&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        # si el fichero no existe&lt;br /&gt;
        print(&amp;quot;El fichero no existe. Debe generarse utilizando la opción 3 del menú.\n&amp;quot;)&lt;br /&gt;
        menu()&lt;br /&gt;
&lt;br /&gt;
def menu():&lt;br /&gt;
    print(&amp;quot;las comarcas de Cataluña.\n&amp;quot;&lt;br /&gt;
          &amp;quot;1. Mostrar todas las comarcas que empiecen por una letra\n&amp;quot;&lt;br /&gt;
          &amp;quot;2. Crear un diccionario de las comarcas\n&amp;quot;&lt;br /&gt;
          &amp;quot;3. Crear un nuevo archivo con los datos del diccionario del apartado 2\n&amp;quot;&lt;br /&gt;
          &amp;quot;4. A partir del archivo del ap. 3 sumar y mostrar cuantas comarcas existen\n&amp;quot;&lt;br /&gt;
          &amp;quot;5. Salir&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    mode = get_choice()&lt;br /&gt;
&lt;br /&gt;
    if mode == 1:&lt;br /&gt;
        tarea_1()&lt;br /&gt;
    elif mode == 2:&lt;br /&gt;
        tarea_2()&lt;br /&gt;
    elif mode == 3:&lt;br /&gt;
        tarea_3()&lt;br /&gt;
    elif mode == 4:&lt;br /&gt;
        tarea_4()&lt;br /&gt;
    elif mode == 5:&lt;br /&gt;
        print(&amp;quot;Adiós.&amp;quot;)&lt;br /&gt;
        quit()&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Ha seleccionado un valor no válido.&amp;quot;)&lt;br /&gt;
        menu()&lt;br /&gt;
menu()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17966</id>
		<title>ASIX-M3-UF3-A1.1-Gestió de fitxers i directoris</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17966"/>
				<updated>2024-04-18T11:43:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
1. Feu un programa que actuï de manera diferent segons si existeix o no una carpeta anomenada “Temp” en un directori concret. Si no existeix, l'ha d'intentar crear. Si existeix, l'ha d’esborrar. Cada cop que es realitza una acció, cal dir si s'ha pogut dur a terme i la ruta absoluta de la carpeta processada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
ruta=input(&amp;quot;Ruta: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
print(rutaAbsoluta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   os.rmdir(ruta)&lt;br /&gt;
print(&amp;quot;Directori %s eliminat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
else:&lt;br /&gt;
   os.mkdir(ruta)&lt;br /&gt;
   print(&amp;quot;Directori %s creat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Genereu un programa que demani a l'usuari dues cadenes de text de tres lletres, de manera que les pugui escriure pel teclat en una mateixa línia, i un directori. El programa ha de cercar tots els fitxers en el directori que tinguin com a extensió la primera cadena de text i canviar-la a la segona. Per exemple, si l'usuari escriu “txt doc”, tots els fitxers amb extensió ”.txt” han de passar a tenir l'extensió ”.doc”.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
extensions=input(&amp;quot;Extensions fitxers: &amp;quot;)&lt;br /&gt;
extOrigen=extensions[0:3]&lt;br /&gt;
extDesti=extensions[4:7]&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
  for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
    if fitxer.endswith('.'+extOrigen):&lt;br /&gt;
    os.rename(rutaAbsoluta+'/'+fitxer,rutaAbsoluta+'/'+fitxer[:-len(extOrigen)]+extDesti)&lt;br /&gt;
    print(&amp;quot;Cambiada extensió fitxer:&amp;quot;, fitxer)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Realitzeu un programa que, en executar-se, llegeixi des del teclat la ruta a una carpeta del vostre ordinador i una mida en Kb. Llavors, ha de mostrat per pantalla tots els fitxers (no les carpetes) amb una mida superior a la donada per l’usuari. (Recordeu que 1 Kb = 1024 bytes.) Si la carpeta no existeix, ha de mostrar un missatge d'error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; os.stat('uno.txt').st_size&lt;br /&gt;
2899&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
BYTES = 1024&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
midaFitxer=int(input('Mida fitxer (kb): '))&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
     if os.stat(rutaAbsoluta+'/'+fitxer).st_size &amp;gt; midaFitxer * BYTES:&lt;br /&gt;
        print(fitxer)&lt;br /&gt;
else:&lt;br /&gt;
     print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Feu un programa que pregunti per pantalla el nom (o part del nom) d'un fitxer i la ruta a una carpeta. Aquestes dades les introduirà l'usuari pel teclat. Llavors el programa ha de cercar i mostrar per pantalla la ruta absoluta de tots els fitxers amb aquest nom a partir de la carpeta assenyalada (tant directament dintre seu com dins d'altres carpetes successives).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Ejercicio: Búsqueda de archivos.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Ruta de la carpeta&lt;br /&gt;
exist_carpeta = False&lt;br /&gt;
while not exist_carpeta:&lt;br /&gt;
    path = input(&amp;quot;Especificar la ruta del directorio: &amp;quot;)&lt;br /&gt;
    # Ruta absuluta&lt;br /&gt;
    folder_path = os.path.abspath(path)&lt;br /&gt;
    # Salir del bucle o imprimir un error&lt;br /&gt;
    if os.path.exists(folder_path):&lt;br /&gt;
        exist_carpeta = True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Especifique la ruta a una carpeta existente.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Que buscamos?&lt;br /&gt;
text_buscar = input(&amp;quot;Nombre del fichero o parte de él (distingue mayúsculas de minúsculas): &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;Lista de ficheros en los que se encuentra {text_buscar}:&amp;quot;)&lt;br /&gt;
# Coger todos los archivos y carpetas dentro de la carpeta folder_path y sus subcarpetas.&lt;br /&gt;
# os.walk devuelve tres valores para cada elemento dentro de la carpeta:&lt;br /&gt;
# root - la ruta a la carpeta actual,&lt;br /&gt;
# carpetas - una lista de nombres de subcarpetas&lt;br /&gt;
# ficheros - una lista de nombres de archivos en la carpeta actual&lt;br /&gt;
for root, carpetas, ficheros in os.walk(folder_path):&lt;br /&gt;
    # Ahora comprobar cada archivo con la máscara text_buscar&lt;br /&gt;
    for fichero in ficheros:&lt;br /&gt;
        if text_buscar in  fichero:&lt;br /&gt;
            # Imprimir la ruta completa del archivo encontrado&lt;br /&gt;
            print(os.path.join(root,  fichero))&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17965</id>
		<title>ASIX-M3-UF3-A1.1-Gestió de fitxers i directoris</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17965"/>
				<updated>2024-04-18T11:42:33Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
1. Feu un programa que actuï de manera diferent segons si existeix o no una carpeta anomenada “Temp” en un directori concret. Si no existeix, l'ha d'intentar crear. Si existeix, l'ha d’esborrar. Cada cop que es realitza una acció, cal dir si s'ha pogut dur a terme i la ruta absoluta de la carpeta processada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
ruta=input(&amp;quot;Ruta: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
print(rutaAbsoluta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   os.rmdir(ruta)&lt;br /&gt;
print(&amp;quot;Directori %s eliminat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
else:&lt;br /&gt;
   os.mkdir(ruta)&lt;br /&gt;
   print(&amp;quot;Directori %s creat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Genereu un programa que demani a l'usuari dues cadenes de text de tres lletres, de manera que les pugui escriure pel teclat en una mateixa línia, i un directori. El programa ha de cercar tots els fitxers en el directori que tinguin com a extensió la primera cadena de text i canviar-la a la segona. Per exemple, si l'usuari escriu “txt doc”, tots els fitxers amb extensió ”.txt” han de passar a tenir l'extensió ”.doc”.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
extensions=input(&amp;quot;Extensions fitxers: &amp;quot;)&lt;br /&gt;
extOrigen=extensions[0:3]&lt;br /&gt;
extDesti=extensions[4:7]&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
  for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
    if fitxer.endswith('.'+extOrigen):&lt;br /&gt;
    os.rename(rutaAbsoluta+'/'+fitxer,rutaAbsoluta+'/'+fitxer[:-len(extOrigen)]+extDesti)&lt;br /&gt;
    print(&amp;quot;Cambiada extensió fitxer:&amp;quot;, fitxer)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Realitzeu un programa que, en executar-se, llegeixi des del teclat la ruta a una carpeta del vostre ordinador i una mida en Kb. Llavors, ha de mostrat per pantalla tots els fitxers (no les carpetes) amb una mida superior a la donada per l’usuari. (Recordeu que 1 Kb = 1024 bytes.) Si la carpeta no existeix, ha de mostrar un missatge d'error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; os.stat('uno.txt').st_size&lt;br /&gt;
2899&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
BYTES = 1024&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
midaFitxer=int(input('Mida fitxer (kb): '))&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
     if os.stat(rutaAbsoluta+'/'+fitxer).st_size &amp;gt; midaFitxer * BYTES:&lt;br /&gt;
        print(fitxer)&lt;br /&gt;
else:&lt;br /&gt;
     print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Feu un programa que pregunti per pantalla el nom (o part del nom) d'un fitxer i la ruta a una carpeta. Aquestes dades les introduirà l'usuari pel teclat. Llavors el programa ha de cercar i mostrar per pantalla la ruta absoluta de tots els fitxers amb aquest nom a partir de la carpeta assenyalada (tant directament dintre seu com dins d'altres carpetes successives).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Ejercicio: Búsqueda de archivos por máscara.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Ruta de la carpeta&lt;br /&gt;
exist_carpeta = False&lt;br /&gt;
while not exist_carpeta:&lt;br /&gt;
    path = input(&amp;quot;Especificar la ruta del directorio: &amp;quot;)&lt;br /&gt;
    # Ruta absuluta&lt;br /&gt;
    folder_path = os.path.abspath(path)&lt;br /&gt;
    # Salir del bucle o imprimir un error&lt;br /&gt;
    if os.path.exists(folder_path):&lt;br /&gt;
        exist_carpeta = True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Especifique la ruta a una carpeta existente.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Que buscamos?&lt;br /&gt;
text_buscar = input(&amp;quot;Nombre del fichero o parte de él (distingue mayúsculas de minúsculas): &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;Lista de ficheros en los que se encuentra {text_buscar}:&amp;quot;)&lt;br /&gt;
# Coger todos los archivos y carpetas dentro de la carpeta folder_path y sus subcarpetas.&lt;br /&gt;
# os.walk devuelve tres valores para cada elemento dentro de la carpeta:&lt;br /&gt;
# root - la ruta a la carpeta actual,&lt;br /&gt;
# carpetas - una lista de nombres de subcarpetas&lt;br /&gt;
# ficheros - una lista de nombres de archivos en la carpeta actual&lt;br /&gt;
for root, carpetas, ficheros in os.walk(folder_path):&lt;br /&gt;
    # Ahora comprobar cada archivo con la máscara text_buscar&lt;br /&gt;
    for fichero in ficheros:&lt;br /&gt;
        if text_buscar in  fichero:&lt;br /&gt;
            # Imprimir la ruta completa del archivo encontrado&lt;br /&gt;
            print(os.path.join(root,  fichero))&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17964</id>
		<title>ASIX-M3-UF3-A1.1-Gestió de fitxers i directoris</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17964"/>
				<updated>2024-04-18T11:41:54Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
1. Feu un programa que actuï de manera diferent segons si existeix o no una carpeta anomenada “Temp” en un directori concret. Si no existeix, l'ha d'intentar crear. Si existeix, l'ha d’esborrar. Cada cop que es realitza una acció, cal dir si s'ha pogut dur a terme i la ruta absoluta de la carpeta processada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
ruta=input(&amp;quot;Ruta: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
print(rutaAbsoluta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   os.rmdir(ruta)&lt;br /&gt;
print(&amp;quot;Directori %s eliminat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
else:&lt;br /&gt;
   os.mkdir(ruta)&lt;br /&gt;
   print(&amp;quot;Directori %s creat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Genereu un programa que demani a l'usuari dues cadenes de text de tres lletres, de manera que les pugui escriure pel teclat en una mateixa línia, i un directori. El programa ha de cercar tots els fitxers en el directori que tinguin com a extensió la primera cadena de text i canviar-la a la segona. Per exemple, si l'usuari escriu “txt doc”, tots els fitxers amb extensió ”.txt” han de passar a tenir l'extensió ”.doc”.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
extensions=input(&amp;quot;Extensions fitxers: &amp;quot;)&lt;br /&gt;
extOrigen=extensions[0:3]&lt;br /&gt;
extDesti=extensions[4:7]&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
  for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
    if fitxer.endswith('.'+extOrigen):&lt;br /&gt;
    os.rename(rutaAbsoluta+'/'+fitxer,rutaAbsoluta+'/'+fitxer[:-len(extOrigen)]+extDesti)&lt;br /&gt;
    print(&amp;quot;Cambiada extensió fitxer:&amp;quot;, fitxer)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Realitzeu un programa que, en executar-se, llegeixi des del teclat la ruta a una carpeta del vostre ordinador i una mida en Kb. Llavors, ha de mostrat per pantalla tots els fitxers (no les carpetes) amb una mida superior a la donada per l’usuari. (Recordeu que 1 Kb = 1024 bytes.) Si la carpeta no existeix, ha de mostrar un missatge d'error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; os.stat('uno.txt').st_size&lt;br /&gt;
2899&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
BYTES = 1024&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
midaFitxer=int(input('Mida fitxer (kb): '))&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
     if os.stat(rutaAbsoluta+'/'+fitxer).st_size &amp;gt; midaFitxer * BYTES:&lt;br /&gt;
        print(fitxer)&lt;br /&gt;
else:&lt;br /&gt;
     print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Feu un programa que pregunti per pantalla el nom (o part del nom) d'un fitxer i la ruta a una carpeta. Aquestes dades les introduirà l'usuari pel teclat. Llavors el programa ha de cercar i mostrar per pantalla la ruta absoluta de tots els fitxers amb aquest nom a partir de la carpeta assenyalada (tant directament dintre seu com dins d'altres carpetes successives).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Ejercicio: Búsqueda de archivos por máscara.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Ruta de la carpeta&lt;br /&gt;
exist_carpeta = False&lt;br /&gt;
while not exist_carpeta:&lt;br /&gt;
    path = input(&amp;quot;Especificar la ruta del directorio: &amp;quot;)&lt;br /&gt;
    # Ruta absuluta&lt;br /&gt;
    folder_path = os.path.abspath(path)&lt;br /&gt;
&lt;br /&gt;
    # Salir del bucle o imprimir un error&lt;br /&gt;
    if os.path.exists(folder_path):&lt;br /&gt;
        exist_carpeta = True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Especifique la ruta a una carpeta existente.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Que buscamos?&lt;br /&gt;
text_buscar = input(&amp;quot;Nombre del fichero o parte de él (distingue mayúsculas de minúsculas): &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;Lista de ficheros en los que se encuentra {text_buscar}:&amp;quot;)&lt;br /&gt;
# Coger todos los archivos y carpetas dentro de la carpeta folder_path y sus subcarpetas.&lt;br /&gt;
# os.walk devuelve tres valores para cada elemento dentro de la carpeta:&lt;br /&gt;
# root - la ruta a la carpeta actual,&lt;br /&gt;
# carpetas - una lista de nombres de subcarpetas&lt;br /&gt;
# ficheros - una lista de nombres de archivos en la carpeta actual&lt;br /&gt;
for root, carpetas, ficheros in os.walk(folder_path):&lt;br /&gt;
    # Ahora comprobar cada archivo con la máscara text_buscar&lt;br /&gt;
    for fichero in ficheros:&lt;br /&gt;
        if text_buscar in  fichero:&lt;br /&gt;
            # Imprimir la ruta completa del archivo encontrado&lt;br /&gt;
            print(os.path.join(root,  fichero))&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17948</id>
		<title>ASIX-M3-UF3-A1.1-Gestió de fitxers i directoris</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17948"/>
				<updated>2024-04-11T15:09:52Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
1. Feu un programa que actuï de manera diferent segons si existeix o no una carpeta anomenada “Temp” en un directori concret. Si no existeix, l'ha d'intentar crear. Si existeix, l'ha d’esborrar. Cada cop que es realitza una acció, cal dir si s'ha pogut dur a terme i la ruta absoluta de la carpeta processada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- --&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
ruta=input(&amp;quot;Ruta: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
print(rutaAbsoluta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   os.rmdir(ruta)&lt;br /&gt;
print(&amp;quot;Directori %s eliminat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
else:&lt;br /&gt;
   os.mkdir(ruta)&lt;br /&gt;
   print(&amp;quot;Directori %s creat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. Genereu un programa que demani a l'usuari dues cadenes de text de tres lletres, de manera que les pugui escriure pel teclat en una mateixa línia, i un directori. El programa ha de cercar tots els fitxers en el directori que tinguin com a extensió la primera cadena de text i canviar-la a la segona. Per exemple, si l'usuari escriu “txt doc”, tots els fitxers amb extensió ”.txt” han de passar a tenir l'extensió ”.doc”.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
extensions=input(&amp;quot;Extensions fitxers: &amp;quot;)&lt;br /&gt;
extOrigen=extensions[0:3]&lt;br /&gt;
extDesti=extensions[4:7]&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
  for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
    if fitxer.endswith('.'+extOrigen):&lt;br /&gt;
    os.rename(rutaAbsoluta+'/'+fitxer,rutaAbsoluta+'/'+fitxer[:-len(extOrigen)]+extDesti)&lt;br /&gt;
    print(&amp;quot;Cambiada extensió fitxer:&amp;quot;, fitxer)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Realitzeu un programa que, en executar-se, llegeixi des del teclat la ruta a una carpeta del vostre ordinador i una mida en Kb. Llavors, ha de mostrat per pantalla tots els fitxers (no les carpetes) amb una mida superior a la donada per l’usuari. (Recordeu que 1 Kb = 1024 bytes.) Si la carpeta no existeix, ha de mostrar un missatge d'error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; os.stat('uno.txt').st_size&lt;br /&gt;
2899&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
BYTES = 1024&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
midaFitxer=int(input('Mida fitxer (kb): '))&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
     if os.stat(rutaAbsoluta+'/'+fitxer).st_size &amp;gt; midaFitxer * BYTES:&lt;br /&gt;
        print(fitxer)&lt;br /&gt;
else:&lt;br /&gt;
     print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Feu un programa que pregunti per pantalla el nom (o part del nom) d'un fitxer i la ruta a una carpeta. Aquestes dades les introduirà l'usuari pel teclat. Llavors el programa ha de cercar i mostrar per pantalla la ruta absoluta de tots els fitxers amb aquest nom a partir de la carpeta assenyalada (tant directament dintre seu com dins d'altres carpetes successives).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
def cercarFiles(directori,nomFitxer):&lt;br /&gt;
  for fitDir in os.listdir(directori):&lt;br /&gt;
     if os.path.isfile(directori+'/'+fitDir):&lt;br /&gt;
       if fitDir.find(nomFitxer) != -1:&lt;br /&gt;
         print('Fitxer: '+directori+'/'+fitDir)&lt;br /&gt;
     else:&lt;br /&gt;
       cercarFiles(directori+'/'+fitDir,&amp;quot;nomFitxer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   cercarFiles(rutaAbsoluta,&amp;quot;dos&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17924</id>
		<title>ASIX-M3-UF3-A1.1-Gestió de fitxers i directoris</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17924"/>
				<updated>2024-04-04T16:35:21Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
1. Feu un programa que actuï de manera diferent segons si existeix o no una carpeta anomenada “Temp” en un directori concret. Si no existeix, l'ha d'intentar crear. Si existeix, l'ha d’esborrar. Cada cop que es realitza una acció, cal dir si s'ha pogut dur a terme i la ruta absoluta de la carpeta processada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
ruta=input(&amp;quot;Ruta: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
print(rutaAbsoluta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   os.rmdir(ruta)&lt;br /&gt;
print(&amp;quot;Directori %s eliminat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
else:&lt;br /&gt;
   os.mkdir(ruta)&lt;br /&gt;
   print(&amp;quot;Directori %s creat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Genereu un programa que demani a l'usuari dues cadenes de text de tres lletres, de manera que les pugui escriure pel teclat en una mateixa línia, i un directori. El programa ha de cercar tots els fitxers en el directori que tinguin com a extensió la primera cadena de text i canviar-la a la segona. Per exemple, si l'usuari escriu “txt doc”, tots els fitxers amb extensió ”.txt” han de passar a tenir l'extensió ”.doc”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
extensions=input(&amp;quot;Extensions fitxers: &amp;quot;)&lt;br /&gt;
extOrigen=extensions[0:3]&lt;br /&gt;
extDesti=extensions[4:7]&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
  for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
    if fitxer.endswith('.'+extOrigen):&lt;br /&gt;
    os.rename(rutaAbsoluta+'/'+fitxer,rutaAbsoluta+'/'+fitxer[:-len(extOrigen)]+extDesti)&lt;br /&gt;
    print(&amp;quot;Cambiada extensió fitxer:&amp;quot;, fitxer)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Realitzeu un programa que, en executar-se, llegeixi des del teclat la ruta a una carpeta del vostre ordinador i una mida en Kb. Llavors, ha de mostrat per pantalla tots els fitxers (no les carpetes) amb una mida superior a la donada per l’usuari. (Recordeu que 1 Kb = 1024 bytes.) Si la carpeta no existeix, ha de mostrar un missatge d'error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; os.stat('uno.txt').st_size&lt;br /&gt;
2899&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
BYTES = 1024&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
midaFitxer=int(input('Mida fitxer (kb): '))&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
     if os.stat(rutaAbsoluta+'/'+fitxer).st_size &amp;gt; midaFitxer * BYTES:&lt;br /&gt;
        print(fitxer)&lt;br /&gt;
else:&lt;br /&gt;
     print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Feu un programa que pregunti per pantalla el nom (o part del nom) d'un fitxer i la ruta a una carpeta. Aquestes dades les introduirà l'usuari pel teclat. Llavors el programa ha de cercar i mostrar per pantalla la ruta absoluta de tots els fitxers amb aquest nom a partir de la carpeta assenyalada (tant directament dintre seu com dins d'altres carpetes successives).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
def cercarFiles(directori,nomFitxer):&lt;br /&gt;
  for fitDir in os.listdir(directori):&lt;br /&gt;
     if os.path.isfile(directori+'/'+fitDir):&lt;br /&gt;
       if fitDir.find(nomFitxer) != -1:&lt;br /&gt;
         print('Fitxer: '+directori+'/'+fitDir)&lt;br /&gt;
     else:&lt;br /&gt;
       cercarFiles(directori+'/'+fitDir,&amp;quot;nomFitxer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
   cercarFiles(rutaAbsoluta,&amp;quot;dos&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17923</id>
		<title>ASIX-M3-UF3-A1.1-Gestió de fitxers i directoris</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17923"/>
				<updated>2024-04-04T16:29:22Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
1. Feu un programa que actuï de manera diferent segons si existeix o no una carpeta anomenada “Temp” en un directori concret. Si no existeix, l'ha d'intentar crear. Si existeix, l'ha d’esborrar. Cada cop que es realitza una acció, cal dir si s'ha pogut dur a terme i la ruta absoluta de la carpeta processada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
ruta=input(&amp;quot;Ruta: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
print(rutaAbsoluta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
os.rmdir(ruta)&lt;br /&gt;
print(&amp;quot;Directori %s eliminat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
else:&lt;br /&gt;
os.mkdir(ruta)&lt;br /&gt;
print(&amp;quot;Directori %s creat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Genereu un programa que demani a l'usuari dues cadenes de text de tres lletres, de manera que les pugui escriure pel teclat en una mateixa línia, i un directori. El programa ha de cercar tots els fitxers en el directori que tinguin com a extensió la primera cadena de text i canviar-la a la segona. Per exemple, si l'usuari escriu “txt doc”, tots els fitxers amb extensió ”.txt” han de passar a tenir l'extensió ”.doc”.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
extensions=input(&amp;quot;Extensions fitxers: &amp;quot;)&lt;br /&gt;
extOrigen=extensions[0:3]&lt;br /&gt;
extDesti=extensions[4:7]&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
if fitxer.endswith('.'+extOrigen):&lt;br /&gt;
os.rename(rutaAbsoluta+'/'+fitxer,rutaAbsoluta+'/'+fitxer[:-len(extOrigen)]+extDesti)&lt;br /&gt;
print(&amp;quot;Cambiada extensió fitxer:&amp;quot;, fitxer)&lt;br /&gt;
else:&lt;br /&gt;
print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. Realitzeu un programa que, en executar-se, llegeixi des del teclat la ruta a una carpeta del vostre ordinador i una mida en Kb. Llavors, ha de mostrat per pantalla tots els fitxers (no les carpetes) amb una mida superior a la donada per l’usuari. (Recordeu que 1 Kb = 1024 bytes.) Si la carpeta no existeix, ha de mostrar un missatge d'error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; os.stat('uno.txt').st_size&lt;br /&gt;
2899&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
BYTES = 1024&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
midaFitxer=int(input('Mida fitxer (kb): '))&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
for fitxer in os.listdir(rutaAbsoluta):&lt;br /&gt;
if os.stat(rutaAbsoluta+'/'+fitxer).st_size &amp;gt; midaFitxer * BYTES:&lt;br /&gt;
print(fitxer)&lt;br /&gt;
else:&lt;br /&gt;
print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Feu un programa que pregunti per pantalla el nom (o part del nom) d'un fitxer i la ruta a una carpeta. Aquestes dades les introduirà l'usuari pel teclat. Llavors el programa ha de cercar i mostrar per pantalla la ruta absoluta de tots els fitxers amb aquest nom a partir de la carpeta assenyalada (tant directament dintre seu com dins d'altres carpetes successives).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
def cercarFiles(directori,nomFitxer):&lt;br /&gt;
for fitDir in os.listdir(directori):&lt;br /&gt;
if os.path.isfile(directori+'/'+fitDir):&lt;br /&gt;
if fitDir.find(nomFitxer) != -1:&lt;br /&gt;
print('Fitxer: '+directori+'/'+fitDir)&lt;br /&gt;
else:&lt;br /&gt;
cercarFiles(directori+'/'+fitDir,&amp;quot;nomFitxer&amp;quot;)&lt;br /&gt;
ruta=input(&amp;quot;Directori: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
cercarFiles(rutaAbsoluta,&amp;quot;dos&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
print(&amp;quot;El directori %s no existeix!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17922</id>
		<title>ASIX-M3-UF3-A1.1-Gestió de fitxers i directoris</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF3-A1.1-Gesti%C3%B3_de_fitxers_i_directoris&amp;diff=17922"/>
				<updated>2024-04-04T16:27:22Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
1. Feu un programa que actuï de manera diferent segons si existeix o no una carpeta anomenada “Temp” en un directori concret. Si no existeix, l'ha d'intentar crear. Si existeix, l'ha d’esborrar. Cada cop que es realitza una acció, cal dir si s'ha pogut dur a terme i la ruta absoluta de la carpeta processada.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
ruta=input(&amp;quot;Ruta: &amp;quot;)&lt;br /&gt;
rutaAbsoluta = os.path.abspath(ruta)&lt;br /&gt;
print(rutaAbsoluta)&lt;br /&gt;
if os.path.exists(ruta):&lt;br /&gt;
os.rmdir(ruta)&lt;br /&gt;
print(&amp;quot;Directori %s eliminat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
else:&lt;br /&gt;
os.mkdir(ruta)&lt;br /&gt;
print(&amp;quot;Directori %s creat!&amp;quot; %rutaAbsoluta)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Genereu un programa que demani a l'usuari dues cadenes de text de tres lletres, de manera que les pugui escriure pel teclat en una mateixa línia, i un directori. El programa ha de cercar tots els fitxers en el directori que tinguin com a extensió la primera cadena de text i canviar-la a la segona. Per exemple, si l'usuari escriu “txt doc”, tots els fitxers amb extensió ”.txt” han de passar a tenir l'extensió ”.doc”.&lt;br /&gt;
&lt;br /&gt;
3. Realitzeu un programa que, en executar-se, llegeixi des del teclat la ruta a una carpeta del vostre ordinador i una mida en Kb. Llavors, ha de mostrat per pantalla tots els fitxers (no les carpetes) amb una mida superior a la donada per l’usuari. (Recordeu que 1 Kb = 1024 bytes.) Si la carpeta no existeix, ha de mostrar un missatge d'error.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&amp;gt;&amp;gt;&amp;gt; os.stat('uno.txt').st_size&lt;br /&gt;
2899&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4. Feu un programa que pregunti per pantalla el nom (o part del nom) d'un fitxer i la ruta a una carpeta. Aquestes dades les introduirà l'usuari pel teclat. Llavors el programa ha de cercar i mostrar per pantalla la ruta absoluta de tots els fitxers amb aquest nom a partir de la carpeta assenyalada (tant directament dintre seu com dins d'altres carpetes successives).&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3&amp;diff=17830</id>
		<title>ASIX-M3-UF2-A3</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3&amp;diff=17830"/>
				<updated>2024-02-22T17:12:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducció ==&lt;br /&gt;
&lt;br /&gt;
Els programes que hem vist fins ara estan estructurats generalment com a mètodes que es criden entre si, d'una manera disciplinada i jeràrquica. No obstant això, per a alguns problemes és convenient fer que un mètode es cridi a si mateix. Aquest mètode es coneix com a mètode recursiu; aquest mètode es pot cridar en forma directa o indirecta a través d'un altre mètode.&lt;br /&gt;
&lt;br /&gt;
== Conceptes de recursivitat ==&lt;br /&gt;
&lt;br /&gt;
Els mètodes per solucionar problemes recursius tenen diversos elements en comú. Quan es fa una crida a un mètode recursiu per resoldre un problema, el mètode en realitat és capaç de resoldre només el (els) cas(os) més simple(s), o cas(os) base. Si es fa la crida al mètode amb un cas base, el mètode retorna un resultat. Si es fa la crida al mètode amb un problema més complex, el mètode comunament divideix el problema en dues peces conceptuals: una peça que el mètode sap com resoldre i una altra peça que no sap com resoldre.  Perquè  la recursivitat  sigui  factible,  aquesta  última  peça  ha  de  ser  similar  al problema  original,  però  una  versió  lleugerament  més  senzilla  o  simple  del  mateix.  A causa  que  aquest  nou  problema  s'assembla  al  problema  original,  el  mètode  crida  a  una &lt;br /&gt;
nova còpia de si mateix per treballar en el problema més petit; a això se li coneix com crida  recursiva,  i  també  com  a  pas  recursiu.  En  general,  el  pas  recursiu  inclou  una instrucció  return,  ja  que  el  seu  resultat  es  combina  amb  la  part  del  problema  que  el mètode  va  saber  com  resoldre,  per  formar  un  resultat  que  es  passarà  de  tornada  al mètode  original  que  va  fer  la  crida.  Aquest  concepte  de  separar  el  problema  en  dues porcions més petites és una forma del mètode “divideix i venceràs”.&lt;br /&gt;
&lt;br /&gt;
El pas recursiu s'executa mentre segueixi activa la crida original al mètode (és a dir, que no  hagi  acabat  la  seva  execució).  Es  poden  produir  moltes  crides  recursives  més,  a mesura  que  el  mètode  divideix  cada  nou  subproblema  en  dues  peces conceptuals. &lt;br /&gt;
Perquè la recursivitat acabi en un moment donat, cada vegada que el mètode es crida a si mateix amb una versió més simple del problema original, la seqüència de problemes cada  vegada  més  petits  ha  de  convergir  en  un  cas  base.  En  aquest  punt,  el  mètode reconeix  el  cas  base  i  retorna  un  resultat a  la  còpia  anterior  del  mètode.  Després s'origina  una  seqüència  de  tornades,  fins  que  la  crida  al  mètode  original  retorna  el resultat final al mètode que el va cridar.&lt;br /&gt;
&lt;br /&gt;
Un mètode recursiu pot cridar a un altre mètode, que al seu torn pot fer una crida de tornada al mètode recursiu. A aquest procés se li coneix com cridada recursiva indirecta o recursivitat indirecta. Per exemple, el mètode A crida al mètode B, que fa una crida de tornada al mètode A. Això se segueix considerant com recursivitat, a causa que la segona crida al mètode A es realitza mentre la primera segueix activa; és a dir, la primera crida al mètode A no ha acabat encara d'executar-se (a causa que està esperant que el mètode B li retorni un resultat) i no ha tornat al mètode original que va cridar al mètode A.&lt;br /&gt;
&lt;br /&gt;
Per comprendre millor el concepte de recursivitat, vegem un exemple que és bastant comú per als usuaris de computadora: la definició recursiva d'un directori en una computadora. En general, una computadora emmagatzema els arxius relacionats en un directori. Aquest directori pot estar buit, pot contenir arxius i/o pot contenir altres directoris (que, en general, es coneixen com a subdirectoris). Al seu torn, cadascun d'aquests directoris pot contenir també arxius i directoris. Si volem llistar cada arxiu en un directori (incloent tots els arxius en els subdirectoris d'aquest directori), necessitem crear un mètode que llegeixi primer els arxius del directori inicial i que després faci cridades recursives per llistar els arxius en cadascun dels subdirectoris d'aquest directori. El cas base ocorre quan s'arriba a un directori que no contingui subdirectoris. En aquest punt, s'han llistat tots els arxius en el directori original i no es necessita més la recursivitat.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_m3uf2_recursivitat directa-indirecta.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat: factorials ==&lt;br /&gt;
&lt;br /&gt;
Escrivim un programa recursiu, per realitzar un popular càlcul matemàtic. Considerem el factorial d'un enter positiu n, escrit com a n! (i es pronuncia com a “factorial de n”), que és el producte: n * (n – 1) * (n – 2)* ... * 1&lt;br /&gt;
&lt;br /&gt;
on 1! és igual a 1 i 0! es defineix com 1. Per exemple, 5! és el producte 5 * 4 * 3 * 2 * 1, que és igual a 120.&lt;br /&gt;
&lt;br /&gt;
El factorial de l'enter numero (on numero &amp;gt;= 0) pot calcular-se de manera iterativa (sense recursivitat), usant una instrucció for de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
factorial = 1;&lt;br /&gt;
for comptador in range(numero, 1, -1):&lt;br /&gt;
   factorial *= comptador&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podem arribar a una declaració recursiva del mètode del factorial, si observem la següent relació:&lt;br /&gt;
n! = n * (n – 1)!&lt;br /&gt;
&lt;br /&gt;
Per exemple, 5! és sens dubte igual a 5 · 4!, com es mostra en les següents equacions:&lt;br /&gt;
&lt;br /&gt;
5! = 5 * 4 * 3 * 2 * 1&lt;br /&gt;
5! = 5 * (4 * 3 * 2 * 1)&lt;br /&gt;
5! = 5 * (4!)&lt;br /&gt;
&lt;br /&gt;
Per tant podem resoldre el problema de forma recursiva així:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def factorial(n):&lt;br /&gt;
   if n &amp;lt;=1:&lt;br /&gt;
      # Cas base: Se sap el resultat directament&lt;br /&gt;
      return 1&lt;br /&gt;
   else: &lt;br /&gt;
    ''' Cas recursiu: Per calcular-lo cal invocar el propi metode&lt;br /&gt;
        El valor del nou paràmetre d'entrada ha de variar de manera que&lt;br /&gt;
        es vagi aproximant al cas base '''&lt;br /&gt;
      return n * factorial(n - 1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_3.png |400px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Si ometem el cas base o escrivim el pas recursiu de forma incorrecta, de manera que no convergeixi en el cas base, es pot produir un error lògic conegut com a recursivitat infinita, on es realitzen crides recursives de forma contínua, fins que s'esgota la memòria. Aquest error és anàleg al problema d'un cicle infinit en una solució iterativa.&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat: sèrie de Fibonacci ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La sèrie de Fibonacci, 0, 1, 1, 2, 3, 5, 8, 13, 21, ...&lt;br /&gt;
comença amb 0 i 1, i té la propietat que cada nombre subsegüent de Fibonacci és la suma dels dos nombres Fibonacci anteriors.&lt;br /&gt;
&lt;br /&gt;
La sèrie de Fibonacci es pot definir de manera recursiva com:&lt;br /&gt;
fibonacci(0) = 0&lt;br /&gt;
fibonacci(1) = 1&lt;br /&gt;
fibonacci(n) = fibonacci(n – 1) + fibonacci(n – 2)&lt;br /&gt;
&lt;br /&gt;
Per tant el podríem codificar així:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def fibonacci(int n):&lt;br /&gt;
   if n &amp;lt;=1:&lt;br /&gt;
       # Cas base: Se sap el resultat directament&lt;br /&gt;
       return n&lt;br /&gt;
   else: &lt;br /&gt;
   ''' Cas recursiu: Per calcular-lo cal invocar el propi metode&lt;br /&gt;
       El valor del nou parametre d'entrada ha de variar de manera que&lt;br /&gt;
       es vagi aproximant al cas base '''&lt;br /&gt;
       return fibonacci(n - 1) + fibonacci(n - 2)&lt;br /&gt;
&lt;br /&gt;
--Versión dos:&lt;br /&gt;
&lt;br /&gt;
# Python program to display the Fibonacci sequence&lt;br /&gt;
&lt;br /&gt;
def recur_fibo(n):&lt;br /&gt;
   if n &amp;lt;= 1:&lt;br /&gt;
       return n&lt;br /&gt;
   else:&lt;br /&gt;
       return(recur_fibo(n-1) + recur_fibo(n-2))&lt;br /&gt;
&lt;br /&gt;
nterms = 10&lt;br /&gt;
&lt;br /&gt;
# check if the number of terms is valid&lt;br /&gt;
if nterms &amp;lt;= 0:&lt;br /&gt;
   print(&amp;quot;Plese enter a positive integer&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
   print(&amp;quot;Fibonacci sequence:&amp;quot;)&lt;br /&gt;
   for i in range(nterms):&lt;br /&gt;
       print(recur_fibo(i))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cal anar amb compte amb els programes recursius com el que utilitzem aquí per generar nombres de Fibonacci. Cada invocació del mètode fibonacci que no coincideix amb un dels casos base produeix dues crides recursives més al mètode fibonacci. Per tant, aquest conjunt de crides recursives se surt ràpidament de control. Per calcular el valor 20 de Fibonacci amb aquest programa, es requereixen 21,891 crides al mètode fibonacci; per calcular el valor 30 de Fibonacci es requereixen 2,692,537 crides! A mesura que tractem de calcular valors més grans de Fibonacci, observarem que cada nombre de Fibonacci consecutiu que calculem amb l'aplicació requereix un augment considerable en temps de càlcul i en el nombre de crides al mètode fibonacci.&lt;br /&gt;
&lt;br /&gt;
* Cal evitar els programes recursius a l'estil de Fibonacci, ja que produeixen una “explosió” exponencial de crides a mètodes. A més en aquest cas es pot observar que hi ha càlculs que els fem moltíssims cops.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_4.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
* La recursivitat té molts desavantatges. Invoca al mecanisme en forma repetida, i en conseqüència es produeix una sobrecàrrega de les crides al mètode. Aquesta repetició pot ser perjudicial, en termes de temps del processador i espai de la memòria. Cada crida recursiva crea una altra còpia del mètode (en realitat, només les variables del mateix); aquest conjunt de còpies pot consumir una quantitat considerable d'espai en memòria. Com la iteració ocorre dins d'un mètode, s'eviten les crides repetides al mètode i l'assignació addicional de memòria. Llavors, per què triar la recursivitat?&lt;br /&gt;
&lt;br /&gt;
* Qualsevol problema que es pugui resoldre mitjançant la recursivitat, es pot resoldre també mitjançant la iteració (sense recursivitat). En general, es prefereix un mètode recursiu a un iteratiu quan el primer reflexa amb més naturalitat el problema, i es produeix un programa més fàcil d'entendre i de depurar. Sovint, pot implementar-se un mètode recursiu amb menys línies de codi. Una altra raó per la qual és preferible triar un mètode recursiu és que un d'iteratiu podria no ser aparent.&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat:Torres de Hanoi ==&lt;br /&gt;
&lt;br /&gt;
El joc disposa de tres pals A,B,C; en el pal A es troben n discos de mida decreixent.&lt;br /&gt;
&lt;br /&gt;
L’objectiu es moure un a un els discos des d’A fins a C utilitzant el pal B com a auxiliar. A més no pot haver mai un disc de radi més gran a sobre d’un altre de radi més petit.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_5.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
Si tractem de trobar una solució iterativa, si el número de discos es superior a 4 és possible que acabem en un psiquiàtric. En canvi, si ataquem el problema mitjançant la recursivitat trobarem de forma ràpida i en poques línees la solució.&lt;br /&gt;
&lt;br /&gt;
'''Solució recursiva'''&lt;br /&gt;
&lt;br /&gt;
:1. El problema de moure n discos d’A a C consisteix en:&lt;br /&gt;
&lt;br /&gt;
::- moure els n-1 discos superiors d’A a B&lt;br /&gt;
::- moure el disc n d’A a C&lt;br /&gt;
::- moure els n-1 discos de B a C&lt;br /&gt;
&lt;br /&gt;
:2. El problema de moure els n-1 discos d’A a B consisteix en :&lt;br /&gt;
&lt;br /&gt;
::- moure els n-2 discos superiors d’A a C&lt;br /&gt;
::- moure el disc n-1 d’A a B&lt;br /&gt;
::- moure els n-2 discos de C a B&lt;br /&gt;
&lt;br /&gt;
D’aquesta forma es va avançant reduint cada vegada un nivell la dificultat del problema fins que aquest només consisteixi en moure un sol disc. La tècnica consisteix en anar intercanviant la finalitat dels pals, origen, auxiliar i destí.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_6.png |400px|center| Recursivitat]]&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3&amp;diff=17829</id>
		<title>ASIX-M3-UF2-A3</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3&amp;diff=17829"/>
				<updated>2024-02-22T17:04:01Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducció ==&lt;br /&gt;
&lt;br /&gt;
Els programes que hem vist fins ara estan estructurats generalment com a mètodes que es criden entre si, d'una manera disciplinada i jeràrquica. No obstant això, per a alguns problemes és convenient fer que un mètode es cridi a si mateix. Aquest mètode es coneix com a mètode recursiu; aquest mètode es pot cridar en forma directa o indirecta a través d'un altre mètode.&lt;br /&gt;
&lt;br /&gt;
== Conceptes de recursivitat ==&lt;br /&gt;
&lt;br /&gt;
Els mètodes per solucionar problemes recursius tenen diversos elements en comú. Quan es fa una crida a un mètode recursiu per resoldre un problema, el mètode en realitat és capaç de resoldre només el (els) cas(os) més simple(s), o cas(os) base. Si es fa la crida al mètode amb un cas base, el mètode retorna un resultat. Si es fa la crida al mètode amb un problema més complex, el mètode comunament divideix el problema en dues peces conceptuals: una peça que el mètode sap com resoldre i una altra peça que no sap com resoldre.  Perquè  la recursivitat  sigui  factible,  aquesta  última  peça  ha  de  ser  similar  al problema  original,  però  una  versió  lleugerament  més  senzilla  o  simple  del  mateix.  A causa  que  aquest  nou  problema  s'assembla  al  problema  original,  el  mètode  crida  a  una &lt;br /&gt;
nova còpia de si mateix per treballar en el problema més petit; a això se li coneix com crida  recursiva,  i  també  com  a  pas  recursiu.  En  general,  el  pas  recursiu  inclou  una instrucció  return,  ja  que  el  seu  resultat  es  combina  amb  la  part  del  problema  que  el mètode  va  saber  com  resoldre,  per  formar  un  resultat  que  es  passarà  de  tornada  al mètode  original  que  va  fer  la  crida.  Aquest  concepte  de  separar  el  problema  en  dues porcions més petites és una forma del mètode “divideix i venceràs”.&lt;br /&gt;
&lt;br /&gt;
El pas recursiu s'executa mentre segueixi activa la crida original al mètode (és a dir, que no  hagi  acabat  la  seva  execució).  Es  poden  produir  moltes  crides  recursives  més,  a mesura  que  el  mètode  divideix  cada  nou  subproblema  en  dues  peces conceptuals. &lt;br /&gt;
Perquè la recursivitat acabi en un moment donat, cada vegada que el mètode es crida a si mateix amb una versió més simple del problema original, la seqüència de problemes cada  vegada  més  petits  ha  de  convergir  en  un  cas  base.  En  aquest  punt,  el  mètode reconeix  el  cas  base  i  retorna  un  resultat a  la  còpia  anterior  del  mètode.  Després s'origina  una  seqüència  de  tornades,  fins  que  la  crida  al  mètode  original  retorna  el resultat final al mètode que el va cridar.&lt;br /&gt;
&lt;br /&gt;
Un mètode recursiu pot cridar a un altre mètode, que al seu torn pot fer una crida de tornada al mètode recursiu. A aquest procés se li coneix com cridada recursiva indirecta o recursivitat indirecta. Per exemple, el mètode A crida al mètode B, que fa una crida de tornada al mètode A. Això se segueix considerant com recursivitat, a causa que la segona crida al mètode A es realitza mentre la primera segueix activa; és a dir, la primera crida al mètode A no ha acabat encara d'executar-se (a causa que està esperant que el mètode B li retorni un resultat) i no ha tornat al mètode original que va cridar al mètode A.&lt;br /&gt;
&lt;br /&gt;
Per comprendre millor el concepte de recursivitat, vegem un exemple que és bastant comú per als usuaris de computadora: la definició recursiva d'un directori en una computadora. En general, una computadora emmagatzema els arxius relacionats en un directori. Aquest directori pot estar buit, pot contenir arxius i/o pot contenir altres directoris (que, en general, es coneixen com a subdirectoris). Al seu torn, cadascun d'aquests directoris pot contenir també arxius i directoris. Si volem llistar cada arxiu en un directori (incloent tots els arxius en els subdirectoris d'aquest directori), necessitem crear un mètode que llegeixi primer els arxius del directori inicial i que després faci cridades recursives per llistar els arxius en cadascun dels subdirectoris d'aquest directori. El cas base ocorre quan s'arriba a un directori que no contingui subdirectoris. En aquest punt, s'han llistat tots els arxius en el directori original i no es necessita més la recursivitat.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_m3uf2_recursivitat directa-indirecta.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat: factorials ==&lt;br /&gt;
&lt;br /&gt;
Escrivim un programa recursiu, per realitzar un popular càlcul matemàtic. Considerem el factorial d'un enter positiu n, escrit com a n! (i es pronuncia com a “factorial de n”), que és el producte: n * (n – 1) * (n – 2)* ... * 1&lt;br /&gt;
&lt;br /&gt;
on 1! és igual a 1 i 0! es defineix com 1. Per exemple, 5! és el producte 5 * 4 * 3 * 2 * 1, que és igual a 120.&lt;br /&gt;
&lt;br /&gt;
El factorial de l'enter numero (on numero &amp;gt;= 0) pot calcular-se de manera iterativa (sense recursivitat), usant una instrucció for de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
factorial = 1;&lt;br /&gt;
for comptador in range(numero, 1, -1):&lt;br /&gt;
   factorial *= comptador&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podem arribar a una declaració recursiva del mètode del factorial, si observem la següent relació:&lt;br /&gt;
n! = n * (n – 1)!&lt;br /&gt;
&lt;br /&gt;
Per exemple, 5! és sens dubte igual a 5 · 4!, com es mostra en les següents equacions:&lt;br /&gt;
&lt;br /&gt;
5! = 5 * 4 * 3 * 2 * 1&lt;br /&gt;
5! = 5 * (4 * 3 * 2 * 1)&lt;br /&gt;
5! = 5 * (4!)&lt;br /&gt;
&lt;br /&gt;
Per tant podem resoldre el problema de forma recursiva així:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def factorial(n):&lt;br /&gt;
   if n &amp;lt;=1:&lt;br /&gt;
      # Cas base: Se sap el resultat directament&lt;br /&gt;
      return 1&lt;br /&gt;
   else: &lt;br /&gt;
    ''' Cas recursiu: Per calcular-lo cal invocar el propi metode&lt;br /&gt;
        El valor del nou paràmetre d'entrada ha de variar de manera que&lt;br /&gt;
        es vagi aproximant al cas base '''&lt;br /&gt;
      return n * factorial(n - 1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_3.png |400px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Si ometem el cas base o escrivim el pas recursiu de forma incorrecta, de manera que no convergeixi en el cas base, es pot produir un error lògic conegut com a recursivitat infinita, on es realitzen crides recursives de forma contínua, fins que s'esgota la memòria. Aquest error és anàleg al problema d'un cicle infinit en una solució iterativa.&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat: sèrie de Fibonacci ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La sèrie de Fibonacci, 0, 1, 1, 2, 3, 5, 8, 13, 21, ...&lt;br /&gt;
comença amb 0 i 1, i té la propietat que cada nombre subsegüent de Fibonacci és la suma dels dos nombres Fibonacci anteriors.&lt;br /&gt;
&lt;br /&gt;
La sèrie de Fibonacci es pot definir de manera recursiva com:&lt;br /&gt;
fibonacci(0) = 0&lt;br /&gt;
fibonacci(1) = 1&lt;br /&gt;
fibonacci(n) = fibonacci(n – 1) + fibonacci(n – 2)&lt;br /&gt;
&lt;br /&gt;
Per tant el podríem codificar així:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def fibonacci(int n):&lt;br /&gt;
   if n &amp;lt;=1:&lt;br /&gt;
       # Cas base: Se sap el resultat directament&lt;br /&gt;
       return n&lt;br /&gt;
   else: &lt;br /&gt;
   ''' Cas recursiu: Per calcular-lo cal invocar el propi metode&lt;br /&gt;
       El valor del nou parametre d'entrada ha de variar de manera que&lt;br /&gt;
       es vagi aproximant al cas base '''&lt;br /&gt;
       return fibonacci(n - 1) + fibonacci(n - 2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cal anar amb compte amb els programes recursius com el que utilitzem aquí per generar nombres de Fibonacci. Cada invocació del mètode fibonacci que no coincideix amb un dels casos base produeix dues crides recursives més al mètode fibonacci. Per tant, aquest conjunt de crides recursives se surt ràpidament de control. Per calcular el valor 20 de Fibonacci amb aquest programa, es requereixen 21,891 crides al mètode fibonacci; per calcular el valor 30 de Fibonacci es requereixen 2,692,537 crides! A mesura que tractem de calcular valors més grans de Fibonacci, observarem que cada nombre de Fibonacci consecutiu que calculem amb l'aplicació requereix un augment considerable en temps de càlcul i en el nombre de crides al mètode fibonacci.&lt;br /&gt;
&lt;br /&gt;
* Cal evitar els programes recursius a l'estil de Fibonacci, ja que produeixen una “explosió” exponencial de crides a mètodes. A més en aquest cas es pot observar que hi ha càlculs que els fem moltíssims cops.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_4.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
* La recursivitat té molts desavantatges. Invoca al mecanisme en forma repetida, i en conseqüència es produeix una sobrecàrrega de les crides al mètode. Aquesta repetició pot ser perjudicial, en termes de temps del processador i espai de la memòria. Cada crida recursiva crea una altra còpia del mètode (en realitat, només les variables del mateix); aquest conjunt de còpies pot consumir una quantitat considerable d'espai en memòria. Com la iteració ocorre dins d'un mètode, s'eviten les crides repetides al mètode i l'assignació addicional de memòria. Llavors, per què triar la recursivitat?&lt;br /&gt;
&lt;br /&gt;
* Qualsevol problema que es pugui resoldre mitjançant la recursivitat, es pot resoldre també mitjançant la iteració (sense recursivitat). En general, es prefereix un mètode recursiu a un iteratiu quan el primer reflexa amb més naturalitat el problema, i es produeix un programa més fàcil d'entendre i de depurar. Sovint, pot implementar-se un mètode recursiu amb menys línies de codi. Una altra raó per la qual és preferible triar un mètode recursiu és que un d'iteratiu podria no ser aparent.&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat:Torres de Hanoi ==&lt;br /&gt;
&lt;br /&gt;
El joc disposa de tres pals A,B,C; en el pal A es troben n discos de mida decreixent.&lt;br /&gt;
&lt;br /&gt;
L’objectiu es moure un a un els discos des d’A fins a C utilitzant el pal B com a auxiliar. A més no pot haver mai un disc de radi més gran a sobre d’un altre de radi més petit.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_5.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
Si tractem de trobar una solució iterativa, si el número de discos es superior a 4 és possible que acabem en un psiquiàtric. En canvi, si ataquem el problema mitjançant la recursivitat trobarem de forma ràpida i en poques línees la solució.&lt;br /&gt;
&lt;br /&gt;
'''Solució recursiva'''&lt;br /&gt;
&lt;br /&gt;
:1. El problema de moure n discos d’A a C consisteix en:&lt;br /&gt;
&lt;br /&gt;
::- moure els n-1 discos superiors d’A a B&lt;br /&gt;
::- moure el disc n d’A a C&lt;br /&gt;
::- moure els n-1 discos de B a C&lt;br /&gt;
&lt;br /&gt;
:2. El problema de moure els n-1 discos d’A a B consisteix en :&lt;br /&gt;
&lt;br /&gt;
::- moure els n-2 discos superiors d’A a C&lt;br /&gt;
::- moure el disc n-1 d’A a B&lt;br /&gt;
::- moure els n-2 discos de C a B&lt;br /&gt;
&lt;br /&gt;
D’aquesta forma es va avançant reduint cada vegada un nivell la dificultat del problema fins que aquest només consisteixi en moure un sol disc. La tècnica consisteix en anar intercanviant la finalitat dels pals, origen, auxiliar i destí.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_6.png |400px|center| Recursivitat]]&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3&amp;diff=17828</id>
		<title>ASIX-M3-UF2-A3</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3&amp;diff=17828"/>
				<updated>2024-02-22T17:03:24Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducció ==&lt;br /&gt;
&lt;br /&gt;
Els programes que hem vist fins ara estan estructurats generalment com a mètodes que es criden entre si, d'una manera disciplinada i jeràrquica. No obstant això, per a alguns problemes és convenient fer que un mètode es cridi a si mateix. Aquest mètode es coneix com a mètode recursiu; aquest mètode es pot cridar en forma directa o indirecta a través d'un altre mètode.&lt;br /&gt;
&lt;br /&gt;
== Conceptes de recursivitat ==&lt;br /&gt;
&lt;br /&gt;
Els mètodes per solucionar problemes recursius tenen diversos elements en comú. Quan es fa una crida a un mètode recursiu per resoldre un problema, el mètode en realitat és capaç de resoldre només el (els) cas(os) més simple(s), o cas(os) base. Si es fa la crida al mètode amb un cas base, el mètode retorna un resultat. Si es fa la crida al mètode amb un problema més complex, el mètode comunament divideix el problema en dues peces conceptuals: una peça que el mètode sap com resoldre i una altra peça que no sap com resoldre.  Perquè  la recursivitat  sigui  factible,  aquesta  última  peça  ha  de  ser  similar  al problema  original,  però  una  versió  lleugerament  més  senzilla  o  simple  del  mateix.  A causa  que  aquest  nou  problema  s'assembla  al  problema  original,  el  mètode  crida  a  una &lt;br /&gt;
nova còpia de si mateix per treballar en el problema més petit; a això se li coneix com crida  recursiva,  i  també  com  a  pas  recursiu.  En  general,  el  pas  recursiu  inclou  una instrucció  return,  ja  que  el  seu  resultat  es  combina  amb  la  part  del  problema  que  el mètode  va  saber  com  resoldre,  per  formar  un  resultat  que  es  passarà  de  tornada  al mètode  original  que  va  fer  la  crida.  Aquest  concepte  de  separar  el  problema  en  dues porcions més petites és una forma del mètode “divideix i venceràs”.&lt;br /&gt;
&lt;br /&gt;
El pas recursiu s'executa mentre segueixi activa la crida original al mètode (és a dir, que no  hagi  acabat  la  seva  execució).  Es  poden  produir  moltes  crides  recursives  més,  a mesura  que  el  mètode  divideix  cada  nou  subproblema  en  dues  peces conceptuals. &lt;br /&gt;
Perquè la recursivitat acabi en un moment donat, cada vegada que el mètode es crida a si mateix amb una versió més simple del problema original, la seqüència de problemes cada  vegada  més  petits  ha  de  convergir  en  un  cas  base.  En  aquest  punt,  el  mètode reconeix  el  cas  base  i  retorna  un  resultat a  la  còpia  anterior  del  mètode.  Després s'origina  una  seqüència  de  tornades,  fins  que  la  crida  al  mètode  original  retorna  el resultat final al mètode que el va cridar.&lt;br /&gt;
&lt;br /&gt;
Un mètode recursiu pot cridar a un altre mètode, que al seu torn pot fer una crida de tornada al mètode recursiu. A aquest procés se li coneix com cridada recursiva indirecta o recursivitat indirecta. Per exemple, el mètode A crida al mètode B, que fa una crida de tornada al mètode A. Això se segueix considerant com recursivitat, a causa que la segona crida al mètode A es realitza mentre la primera segueix activa; és a dir, la primera crida al mètode A no ha acabat encara d'executar-se (a causa que està esperant que el mètode B li retorni un resultat) i no ha tornat al mètode original que va cridar al mètode A.&lt;br /&gt;
&lt;br /&gt;
Per comprendre millor el concepte de recursivitat, vegem un exemple que és bastant comú per als usuaris de computadora: la definició recursiva d'un directori en una computadora. En general, una computadora emmagatzema els arxius relacionats en un directori. Aquest directori pot estar buit, pot contenir arxius i/o pot contenir altres directoris (que, en general, es coneixen com a subdirectoris). Al seu torn, cadascun d'aquests directoris pot contenir també arxius i directoris. Si volem llistar cada arxiu en un directori (incloent tots els arxius en els subdirectoris d'aquest directori), necessitem crear un mètode que llegeixi primer els arxius del directori inicial i que després faci cridades recursives per llistar els arxius en cadascun dels subdirectoris d'aquest directori. El cas base ocorre quan s'arriba a un directori que no contingui subdirectoris. En aquest punt, s'han llistat tots els arxius en el directori original i no es necessita més la recursivitat.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_m3uf2_recursivitat directa-indirecta.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat: factorials ==&lt;br /&gt;
&lt;br /&gt;
Escrivim un programa recursiu, per realitzar un popular càlcul matemàtic. Considerem el factorial d'un enter positiu n, escrit com a n! (i es pronuncia com a “factorial de n”), que és el producte: n * (n – 1) * (n – 2)* ... * 1&lt;br /&gt;
&lt;br /&gt;
on 1! és igual a 1 i 0! es defineix com 1. Per exemple, 5! és el producte 5 * 4 * 3 * 2 * 1, que és igual a 120.&lt;br /&gt;
&lt;br /&gt;
El factorial de l'enter numero (on numero &amp;gt;= 0) pot calcular-se de manera iterativa (sense recursivitat), usant una instrucció for de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
factorial = 1;&lt;br /&gt;
for comptador in range(numero, 1, -1):&lt;br /&gt;
   factorial *= comptador&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podem arribar a una declaració recursiva del mètode del factorial, si observem la següent relació:&lt;br /&gt;
n! = n * (n – 1)!&lt;br /&gt;
&lt;br /&gt;
Per exemple, 5! és sens dubte igual a 5 · 4!, com es mostra en les següents equacions:&lt;br /&gt;
&lt;br /&gt;
5! = 5 * 4 * 3 * 2 * 1&lt;br /&gt;
5! = 5 * (4 * 3 * 2 * 1)&lt;br /&gt;
5! = 5 * (4!)&lt;br /&gt;
&lt;br /&gt;
Per tant podem resoldre el problema de forma recursiva així:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def factorial(n):&lt;br /&gt;
   if n &amp;lt;=1:&lt;br /&gt;
      # Cas base: Se sap el resultat directament&lt;br /&gt;
      return 1&lt;br /&gt;
   else: &lt;br /&gt;
    ''' Cas recursiu: Per calcular-lo cal invocar el propi metode&lt;br /&gt;
        El valor del nou paràmetre d'entrada ha de variar de manera que&lt;br /&gt;
        es vagi aproximant al cas base '''&lt;br /&gt;
      return n * factorial(n - 1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_3.png |400px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Si ometem el cas base o escrivim el pas recursiu de forma incorrecta, de manera que no convergeixi en el cas base, es pot produir un error lògic conegut com a recursivitat infinita, on es realitzen crides recursives de forma contínua, fins que s'esgota la memòria. Aquest error és anàleg al problema d'un cicle infinit en una solució iterativa.&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat: sèrie de Fibonacci ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La sèrie de Fibonacci, 0, 1, 1, 2, 3, 5, 8, 13, 21, ...&lt;br /&gt;
comença amb 0 i 1, i té la propietat que cada nombre subsegüent de Fibonacci és la suma dels dos nombres Fibonacci anteriors.&lt;br /&gt;
&lt;br /&gt;
La sèrie de Fibonacci es pot definir de manera recursiva com:&lt;br /&gt;
fibonacci(0) = 0&lt;br /&gt;
fibonacci(1) = 1&lt;br /&gt;
fibonacci(n) = fibonacci(n – 1) + fibonacci(n – 2)&lt;br /&gt;
&lt;br /&gt;
Per tant el podríem codificar així:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def fibonacci(int n):&lt;br /&gt;
   if n &amp;lt;=1:&lt;br /&gt;
       # Cas base: Se sap el resultat directament&lt;br /&gt;
       return n&lt;br /&gt;
   else: &lt;br /&gt;
   ''' Cas recursiu: Per calcular-lo cal invocar el propi metode&lt;br /&gt;
       El valor del nou parametre d'entrada ha de variar de manera que&lt;br /&gt;
       es vagi aproximant al cas base '''&lt;br /&gt;
       return fibonacci(n - 1) + fibonacci(n - 2)&lt;br /&gt;
Otra versión&lt;br /&gt;
&lt;br /&gt;
n = 10&lt;br /&gt;
num1 = 0&lt;br /&gt;
num2 = 1&lt;br /&gt;
next_number = num2  &lt;br /&gt;
count = 1&lt;br /&gt;
 &lt;br /&gt;
while count &amp;lt;= n:&lt;br /&gt;
    print(next_number, end=&amp;quot; &amp;quot;)&lt;br /&gt;
    count += 1&lt;br /&gt;
    num1, num2 = num2, next_number&lt;br /&gt;
    next_number = num1 + num2&lt;br /&gt;
print()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cal anar amb compte amb els programes recursius com el que utilitzem aquí per generar nombres de Fibonacci. Cada invocació del mètode fibonacci que no coincideix amb un dels casos base produeix dues crides recursives més al mètode fibonacci. Per tant, aquest conjunt de crides recursives se surt ràpidament de control. Per calcular el valor 20 de Fibonacci amb aquest programa, es requereixen 21,891 crides al mètode fibonacci; per calcular el valor 30 de Fibonacci es requereixen 2,692,537 crides! A mesura que tractem de calcular valors més grans de Fibonacci, observarem que cada nombre de Fibonacci consecutiu que calculem amb l'aplicació requereix un augment considerable en temps de càlcul i en el nombre de crides al mètode fibonacci.&lt;br /&gt;
&lt;br /&gt;
* Cal evitar els programes recursius a l'estil de Fibonacci, ja que produeixen una “explosió” exponencial de crides a mètodes. A més en aquest cas es pot observar que hi ha càlculs que els fem moltíssims cops.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_4.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
* La recursivitat té molts desavantatges. Invoca al mecanisme en forma repetida, i en conseqüència es produeix una sobrecàrrega de les crides al mètode. Aquesta repetició pot ser perjudicial, en termes de temps del processador i espai de la memòria. Cada crida recursiva crea una altra còpia del mètode (en realitat, només les variables del mateix); aquest conjunt de còpies pot consumir una quantitat considerable d'espai en memòria. Com la iteració ocorre dins d'un mètode, s'eviten les crides repetides al mètode i l'assignació addicional de memòria. Llavors, per què triar la recursivitat?&lt;br /&gt;
&lt;br /&gt;
* Qualsevol problema que es pugui resoldre mitjançant la recursivitat, es pot resoldre també mitjançant la iteració (sense recursivitat). En general, es prefereix un mètode recursiu a un iteratiu quan el primer reflexa amb més naturalitat el problema, i es produeix un programa més fàcil d'entendre i de depurar. Sovint, pot implementar-se un mètode recursiu amb menys línies de codi. Una altra raó per la qual és preferible triar un mètode recursiu és que un d'iteratiu podria no ser aparent.&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat:Torres de Hanoi ==&lt;br /&gt;
&lt;br /&gt;
El joc disposa de tres pals A,B,C; en el pal A es troben n discos de mida decreixent.&lt;br /&gt;
&lt;br /&gt;
L’objectiu es moure un a un els discos des d’A fins a C utilitzant el pal B com a auxiliar. A més no pot haver mai un disc de radi més gran a sobre d’un altre de radi més petit.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_5.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
Si tractem de trobar una solució iterativa, si el número de discos es superior a 4 és possible que acabem en un psiquiàtric. En canvi, si ataquem el problema mitjançant la recursivitat trobarem de forma ràpida i en poques línees la solució.&lt;br /&gt;
&lt;br /&gt;
'''Solució recursiva'''&lt;br /&gt;
&lt;br /&gt;
:1. El problema de moure n discos d’A a C consisteix en:&lt;br /&gt;
&lt;br /&gt;
::- moure els n-1 discos superiors d’A a B&lt;br /&gt;
::- moure el disc n d’A a C&lt;br /&gt;
::- moure els n-1 discos de B a C&lt;br /&gt;
&lt;br /&gt;
:2. El problema de moure els n-1 discos d’A a B consisteix en :&lt;br /&gt;
&lt;br /&gt;
::- moure els n-2 discos superiors d’A a C&lt;br /&gt;
::- moure el disc n-1 d’A a B&lt;br /&gt;
::- moure els n-2 discos de C a B&lt;br /&gt;
&lt;br /&gt;
D’aquesta forma es va avançant reduint cada vegada un nivell la dificultat del problema fins que aquest només consisteixi en moure un sol disc. La tècnica consisteix en anar intercanviant la finalitat dels pals, origen, auxiliar i destí.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_6.png |400px|center| Recursivitat]]&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17827</id>
		<title>ASIX-M3-UF2-A3.1-Exercicis recursivitat</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17827"/>
				<updated>2024-02-22T16:46:11Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Recursivitat seguiment codi==&lt;br /&gt;
&lt;br /&gt;
Indicar quina serà la sortida dels procediments següents:&lt;br /&gt;
&lt;br /&gt;
1a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
      p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
1b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
     print(num,” “)&lt;br /&gt;
     p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
     print(“final”)&lt;br /&gt;
   print(num,” “)&lt;br /&gt;
   print(”final de veritat “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p1(6)'''?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
2b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p2(10,8)'''?&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p3(num1, num2):&lt;br /&gt;
   if (num1 &amp;gt; 0):&lt;br /&gt;
      p3(num1-1,num2+num1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(num2,” “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p3(5,3)'''?&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si eliminéssim el '''else''' ( fent sempre el print ) i des del programa principal féssim:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for i in range(1,6):&lt;br /&gt;
   print (“p3 (“, i+”):”)&lt;br /&gt;
   p3 (i,0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   else:&lt;br /&gt;
      print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
4b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p4(5)'''?&lt;br /&gt;
&lt;br /&gt;
5)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p5(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
      num=num-1&lt;br /&gt;
      p5(num)&lt;br /&gt;
   print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p5(5)'''?&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p6(num):&lt;br /&gt;
   print(num, end=” “)&lt;br /&gt;
   for i in range(num, 0, -1):&lt;br /&gt;
      p6(i-1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p6(4)'''?&lt;br /&gt;
&lt;br /&gt;
7)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      f= f1(num-1) + 1&lt;br /&gt;
   else:&lt;br /&gt;
      f=0&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f1(10''')?&lt;br /&gt;
&lt;br /&gt;
8)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f2(num):&lt;br /&gt;
    if (num&amp;gt;0):&lt;br /&gt;
       f= f2(num-1) + num&lt;br /&gt;
    else:&lt;br /&gt;
       f=0&lt;br /&gt;
    return f&lt;br /&gt;
ret=f2(10)&lt;br /&gt;
print(ret,end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f2(10)'''?&lt;br /&gt;
&lt;br /&gt;
9)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f3(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      r=num&lt;br /&gt;
      for i in range(num-1, 0, -1):&lt;br /&gt;
         r= r + f3(i)&lt;br /&gt;
      f=r&lt;br /&gt;
   else:&lt;br /&gt;
      f=num&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f3(6)'''?&lt;br /&gt;
&lt;br /&gt;
Trobar el cas general (què fa la funció) i escriure-la d’una altra forma més senzilla&lt;br /&gt;
&lt;br /&gt;
10)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f4(x):&lt;br /&gt;
   if (x&amp;gt; 100):&lt;br /&gt;
      f=x-10&lt;br /&gt;
   else:&lt;br /&gt;
      f= f4(f4(x+11))&lt;br /&gt;
   return f&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f4(100)''', i '''f4(0)'''? Fer el programa més senzill.&lt;br /&gt;
&lt;br /&gt;
==Recursivitat codi==&lt;br /&gt;
&lt;br /&gt;
0. Fes un meńu per escollir l'exercici a executar: el menú es trobarà en un fitxer diferent dels exercicis i aquests s'ubicaran en el mateix mòdul.&lt;br /&gt;
&lt;br /&gt;
1. Escriure una funció recursiva que donat un número N (N ≥ 0) passat com a paràmetre calculi la suma de tots els números enters fins a N inclòs.&lt;br /&gt;
&lt;br /&gt;
2. Escriure una funció recursiva que calculi el resultat de X elevat a N amb N &amp;gt;0, sabent que X0 = 1.&lt;br /&gt;
&lt;br /&gt;
3. Escriu una funció recursiva per calcular la suma digital d’un número natural. Per exemple, la suma digital de 18624 és: 4 + 2 + 6 + 8 + 1 = 21&lt;br /&gt;
&lt;br /&gt;
4. Dissenyeu un algoritme recursiu que calculi el màxim comú divisor de dos enters positius, sabent que :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     MCD( X, Y) = MCD (X-Y, Y) SI X &amp;gt; Y&lt;br /&gt;
     MCD (X, Y-X) SI Y &amp;gt; X&lt;br /&gt;
     X SI X = Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5. Fes la funció recursiva SumaHarmonica (n) que retorna la suma:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     1 + 1/2 +1/3 + ... + 1/n&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Fes una funció recursiva booleana que donats un número i un dígit retorni si aquest dígit pertany al número. Per exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  existeix(1234,3) → true&lt;br /&gt;
  existeix(1234,7) → false &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Fes una funció que calculi el producte segons el mètode rus que diu que:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     x*y = ((2*x) *(y/2)) SI y es parell&lt;br /&gt;
     x*y =((2*x) *(y/2))+ x SI y és senar.&lt;br /&gt;
&lt;br /&gt;
     Quan y val 1, el resultat és x.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Torres de Hanoi (amb N introduïda per l’usuari com a paràmetre). S’ha d’anar visualitzant la solució per pantalla. &lt;br /&gt;
&lt;br /&gt;
9. Fes una funció recursiva que ompli un tauler n-goro. Un tauler n-goro és una matriu de n files i n+1 columnes que s'omple consecutivament en diagonal i quan ens sortim per una banda entrem per l'altra. L'últim element que s'omple serà l'extrem inferior dret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Per exemple amb n=3&lt;br /&gt;
&lt;br /&gt;
       1 10 7 4&lt;br /&gt;
       5 2 11 8&lt;br /&gt;
       9 6 3 12&lt;br /&gt;
&lt;br /&gt;
     Amb n = 4&lt;br /&gt;
&lt;br /&gt;
       1 17 13 9 5&lt;br /&gt;
       6 2 18 14 10&lt;br /&gt;
       11 7 3 19 15&lt;br /&gt;
       16 12 8 4 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. Potencias&lt;br /&gt;
Ene ste ejercicio vamos a trabajar con las potencias. Debemos realizar una función en Python a la cual le pase dos parametros (x,y), uno de ellos es la base y el otro el exponente. La función me debe devolver el resultado de esa potencia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Sin recursividad&lt;br /&gt;
&lt;br /&gt;
def potencia(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 1&lt;br /&gt;
  else:&lt;br /&gt;
    r=base&lt;br /&gt;
    for x in range (1,exp):&lt;br /&gt;
      r=base*r&lt;br /&gt;
    return r&lt;br /&gt;
print(potencia(2,5))&lt;br /&gt;
&lt;br /&gt;
32&lt;br /&gt;
&lt;br /&gt;
#Con recursividad&lt;br /&gt;
&lt;br /&gt;
def potencia_r(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 0&lt;br /&gt;
  if exp==1:&lt;br /&gt;
    return base&lt;br /&gt;
  else: &lt;br /&gt;
    return base * potencia_r(base,exp-1)&lt;br /&gt;
print(potencia_r(2,5))&lt;br /&gt;
&lt;br /&gt;
32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17800</id>
		<title>ASIX-M3-UF2-A3.1-Exercicis recursivitat</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17800"/>
				<updated>2024-02-15T13:12:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Recursivitat seguiment codi==&lt;br /&gt;
&lt;br /&gt;
Indicar quina serà la sortida dels procediments següents:&lt;br /&gt;
&lt;br /&gt;
1a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
      p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
1b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
     print(num,” “)&lt;br /&gt;
     p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
     print(“final”)&lt;br /&gt;
   print(num,” “)&lt;br /&gt;
   print(”final de veritat “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p1(6)'''?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
2b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p2(10,8)'''?&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p3(num1, num2):&lt;br /&gt;
   if (num1 &amp;gt; 0):&lt;br /&gt;
      p3(num1-1,num2+num1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(num2,” “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p3(5,3)'''?&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si eliminéssim el '''else''' ( fent sempre el print ) i des del programa principal féssim:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for i in range(1,6):&lt;br /&gt;
   print (“p3 (“, i+”):”)&lt;br /&gt;
   p3 (i,0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   else:&lt;br /&gt;
      print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
4b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p4(5)'''?&lt;br /&gt;
&lt;br /&gt;
5)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p5(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
      num=num-1&lt;br /&gt;
      p5(num)&lt;br /&gt;
   print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p5(5)'''?&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p6(num):&lt;br /&gt;
   print(num, end=” “)&lt;br /&gt;
   for i in range(num, 0, -1):&lt;br /&gt;
      p6(i-1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p6(4)'''?&lt;br /&gt;
&lt;br /&gt;
7)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      f= f1(num-1) + 1&lt;br /&gt;
   else:&lt;br /&gt;
      f=0&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f1(10''')?&lt;br /&gt;
&lt;br /&gt;
8)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f2(num):&lt;br /&gt;
    if (num&amp;gt;0):&lt;br /&gt;
       f= f2(num-1) + num&lt;br /&gt;
    else:&lt;br /&gt;
       f=0&lt;br /&gt;
    return f&lt;br /&gt;
ret=f2(10)&lt;br /&gt;
print(ret,end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f2(10)'''?&lt;br /&gt;
&lt;br /&gt;
9)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f3(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      r=num&lt;br /&gt;
      for i in range(num-1, 0, -1):&lt;br /&gt;
         r= r + f3(i)&lt;br /&gt;
      f=r&lt;br /&gt;
   else:&lt;br /&gt;
      f=num&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f3(6)'''?&lt;br /&gt;
&lt;br /&gt;
Trobar el cas general (què fa la funció) i escriure-la d’una altra forma més senzilla&lt;br /&gt;
&lt;br /&gt;
10)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f4(x):&lt;br /&gt;
   if (x&amp;gt; 100):&lt;br /&gt;
      f=x-10&lt;br /&gt;
   else:&lt;br /&gt;
      f= f4(f4(x+11))&lt;br /&gt;
   return f&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f4(100)''', i '''f4(0)'''? Fer el programa més senzill.&lt;br /&gt;
&lt;br /&gt;
==Recursivitat codi==&lt;br /&gt;
&lt;br /&gt;
0. Fes un meńu per escollir l'exercici a executar: el menú es trobarà en un fitxer diferent dels exercicis i aquests s'ubicaran en el mateix mòdul.&lt;br /&gt;
&lt;br /&gt;
1. Escriure una funció recursiva que donat un número N (N ≥ 0) passat com a paràmetre calculi la suma de tots els números enters fins a N inclòs.&lt;br /&gt;
&lt;br /&gt;
2. Escriure una funció recursiva que calculi el resultat de X elevat a N amb N &amp;gt;0, sabent que X0 = 1.&lt;br /&gt;
&lt;br /&gt;
3. Escriu una funció recursiva per calcular la suma digital d’un número natural. Per exemple, la suma digital de 18624 és: 4 + 2 + 6 + 8 + 1 = 21&lt;br /&gt;
&lt;br /&gt;
4. Dissenyeu un algoritme recursiu que calculi el màxim comú divisor de dos enters positius, sabent que :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     MCD( X, Y) = MCD (X-Y, Y) SI X &amp;gt; Y&lt;br /&gt;
     MCD (X, Y-X) SI Y &amp;gt; X&lt;br /&gt;
     X SI X = Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5. Fes la funció recursiva SumaHarmonica (n) que retorna la suma:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     1 + 1/2 +1/3 + ... + 1/n&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Fes una funció recursiva booleana que donats un número i un dígit retorni si aquest dígit pertany al número. Per exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  existeix(1234,3) → true&lt;br /&gt;
  existeix(1234,7) → false &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Fes una funció que calculi el producte segons el mètode rus que diu que:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     x*y = ((2*x) *(y/2)) SI y es parell&lt;br /&gt;
     x*y =((2*x) *(y/2))+ x SI y és senar.&lt;br /&gt;
&lt;br /&gt;
     Quan y val 1, el resultat és x.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Torres de Hanoi (amb N introduïda per l’usuari com a paràmetre). S’ha d’anar visualitzant la solució per pantalla. &lt;br /&gt;
&lt;br /&gt;
9. Fes una funció recursiva que ompli un tauler n-goro. Un tauler n-goro és una matriu de n files i n+1 columnes que s'omple consecutivament en diagonal i quan ens sortim per una banda entrem per l'altra. L'últim element que s'omple serà l'extrem inferior dret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Per exemple amb n=3&lt;br /&gt;
&lt;br /&gt;
       1 10 7 4&lt;br /&gt;
       5 2 11 8&lt;br /&gt;
       9 6 3 12&lt;br /&gt;
&lt;br /&gt;
     Amb n = 4&lt;br /&gt;
&lt;br /&gt;
       1 17 13 9 5&lt;br /&gt;
       6 2 18 14 10&lt;br /&gt;
       11 7 3 19 15&lt;br /&gt;
       16 12 8 4 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10. Potencias&lt;br /&gt;
Ene ste ejercicio vamos a trabajar con las potencias. Debemos realizar una función en Python a la cual le pase dos parametros (x,y), uno de ellos es la base y el otro el exponente. La función me debe devolver el resultado de esa potencia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Sin recursividad&lt;br /&gt;
&lt;br /&gt;
def potencia(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 1&lt;br /&gt;
  else:&lt;br /&gt;
    r=base&lt;br /&gt;
    for x in range (1,exp):&lt;br /&gt;
      r=base*r&lt;br /&gt;
    return r&lt;br /&gt;
potencia(2,5)&lt;br /&gt;
&lt;br /&gt;
32&lt;br /&gt;
&lt;br /&gt;
#Con recursividad&lt;br /&gt;
&lt;br /&gt;
def potencia_r(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 0&lt;br /&gt;
  if exp==1:&lt;br /&gt;
    return base&lt;br /&gt;
  else: &lt;br /&gt;
    return base * potencia_r(base,exp-1)&lt;br /&gt;
potencia_r(2,5)&lt;br /&gt;
&lt;br /&gt;
32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17799</id>
		<title>ASIX-M3-UF2-A3.1-Exercicis recursivitat</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17799"/>
				<updated>2024-02-15T13:11:32Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Recursivitat seguiment codi==&lt;br /&gt;
&lt;br /&gt;
Indicar quina serà la sortida dels procediments següents:&lt;br /&gt;
&lt;br /&gt;
1a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
      p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
1b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
     print(num,” “)&lt;br /&gt;
     p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
     print(“final”)&lt;br /&gt;
   print(num,” “)&lt;br /&gt;
   print(”final de veritat “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p1(6)'''?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
2b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p2(10,8)'''?&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p3(num1, num2):&lt;br /&gt;
   if (num1 &amp;gt; 0):&lt;br /&gt;
      p3(num1-1,num2+num1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(num2,” “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p3(5,3)'''?&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si eliminéssim el '''else''' ( fent sempre el print ) i des del programa principal féssim:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for i in range(1,6):&lt;br /&gt;
   print (“p3 (“, i+”):”)&lt;br /&gt;
   p3 (i,0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   else:&lt;br /&gt;
      print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
4b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p4(5)'''?&lt;br /&gt;
&lt;br /&gt;
5)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p5(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
      num=num-1&lt;br /&gt;
      p5(num)&lt;br /&gt;
   print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p5(5)'''?&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p6(num):&lt;br /&gt;
   print(num, end=” “)&lt;br /&gt;
   for i in range(num, 0, -1):&lt;br /&gt;
      p6(i-1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p6(4)'''?&lt;br /&gt;
&lt;br /&gt;
7)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      f= f1(num-1) + 1&lt;br /&gt;
   else:&lt;br /&gt;
      f=0&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f1(10''')?&lt;br /&gt;
&lt;br /&gt;
8)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f2(num):&lt;br /&gt;
    if (num&amp;gt;0):&lt;br /&gt;
       f= f2(num-1) + num&lt;br /&gt;
    else:&lt;br /&gt;
       f=0&lt;br /&gt;
    return f&lt;br /&gt;
ret=f2(10)&lt;br /&gt;
print(ret,end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f2(10)'''?&lt;br /&gt;
&lt;br /&gt;
9)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f3(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      r=num&lt;br /&gt;
      for i in range(num-1, 0, -1):&lt;br /&gt;
         r= r + f3(i)&lt;br /&gt;
      f=r&lt;br /&gt;
   else:&lt;br /&gt;
      f=num&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f3(6)'''?&lt;br /&gt;
&lt;br /&gt;
Trobar el cas general (què fa la funció) i escriure-la d’una altra forma més senzilla&lt;br /&gt;
&lt;br /&gt;
10)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f4(x):&lt;br /&gt;
   if (x&amp;gt; 100):&lt;br /&gt;
      f=x-10&lt;br /&gt;
   else:&lt;br /&gt;
      f= f4(f4(x+11))&lt;br /&gt;
   return f&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f4(100)''', i '''f4(0)'''? Fer el programa més senzill.&lt;br /&gt;
&lt;br /&gt;
==Recursivitat codi==&lt;br /&gt;
&lt;br /&gt;
0. Fes un meńu per escollir l'exercici a executar: el menú es trobarà en un fitxer diferent dels exercicis i aquests s'ubicaran en el mateix mòdul.&lt;br /&gt;
&lt;br /&gt;
1. Escriure una funció recursiva que donat un número N (N ≥ 0) passat com a paràmetre calculi la suma de tots els números enters fins a N inclòs.&lt;br /&gt;
&lt;br /&gt;
2. Escriure una funció recursiva que calculi el resultat de X elevat a N amb N &amp;gt;0, sabent que X0 = 1.&lt;br /&gt;
&lt;br /&gt;
3. Escriu una funció recursiva per calcular la suma digital d’un número natural. Per exemple, la suma digital de 18624 és: 4 + 2 + 6 + 8 + 1 = 21&lt;br /&gt;
&lt;br /&gt;
4. Dissenyeu un algoritme recursiu que calculi el màxim comú divisor de dos enters positius, sabent que :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     MCD( X, Y) = MCD (X-Y, Y) SI X &amp;gt; Y&lt;br /&gt;
     MCD (X, Y-X) SI Y &amp;gt; X&lt;br /&gt;
     X SI X = Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5. Fes la funció recursiva SumaHarmonica (n) que retorna la suma:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     1 + 1/2 +1/3 + ... + 1/n&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Fes una funció recursiva booleana que donats un número i un dígit retorni si aquest dígit pertany al número. Per exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  existeix(1234,3) → true&lt;br /&gt;
  existeix(1234,7) → false &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Fes una funció que calculi el producte segons el mètode rus que diu que:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     x*y = ((2*x) *(y/2)) SI y es parell&lt;br /&gt;
     x*y =((2*x) *(y/2))+ x SI y és senar.&lt;br /&gt;
&lt;br /&gt;
     Quan y val 1, el resultat és x.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Torres de Hanoi (amb N introduïda per l’usuari com a paràmetre). S’ha d’anar visualitzant la solució per pantalla. &lt;br /&gt;
&lt;br /&gt;
9. Fes una funció recursiva que ompli un tauler n-goro. Un tauler n-goro és una matriu de n files i n+1 columnes que s'omple consecutivament en diagonal i quan ens sortim per una banda entrem per l'altra. L'últim element que s'omple serà l'extrem inferior dret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Per exemple amb n=3&lt;br /&gt;
&lt;br /&gt;
       1 10 7 4&lt;br /&gt;
       5 2 11 8&lt;br /&gt;
       9 6 3 12&lt;br /&gt;
&lt;br /&gt;
     Amb n = 4&lt;br /&gt;
&lt;br /&gt;
       1 17 13 9 5&lt;br /&gt;
       6 2 18 14 10&lt;br /&gt;
       11 7 3 19 15&lt;br /&gt;
       16 12 8 4 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10.Potencias&lt;br /&gt;
Ene ste ejercicio vamos a trabajar con las potencias. Debemos realizar una función en Python a la cual le pase dos parametros (x,y), uno de ellos es la base y el otro el exponente. La función me debe devolver el resultado de esa potencia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
#Sin recursividad&lt;br /&gt;
&lt;br /&gt;
def potencia(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 1&lt;br /&gt;
  else:&lt;br /&gt;
    r=base&lt;br /&gt;
    for x in range (1,exp):&lt;br /&gt;
      r=base*r&lt;br /&gt;
    return r&lt;br /&gt;
potencia(2,5)&lt;br /&gt;
&lt;br /&gt;
32&lt;br /&gt;
&lt;br /&gt;
#Con recursividad&lt;br /&gt;
&lt;br /&gt;
def potencia_r(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 0&lt;br /&gt;
  if exp==1:&lt;br /&gt;
    return base&lt;br /&gt;
  else: &lt;br /&gt;
    return base * potencia_r(base,exp-1)&lt;br /&gt;
potencia_r(2,5)&lt;br /&gt;
&lt;br /&gt;
32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17798</id>
		<title>ASIX-M3-UF2-A3.1-Exercicis recursivitat</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17798"/>
				<updated>2024-02-15T13:10:21Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Recursivitat seguiment codi==&lt;br /&gt;
&lt;br /&gt;
Indicar quina serà la sortida dels procediments següents:&lt;br /&gt;
&lt;br /&gt;
1a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
      p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
1b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
     print(num,” “)&lt;br /&gt;
     p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
     print(“final”)&lt;br /&gt;
   print(num,” “)&lt;br /&gt;
   print(”final de veritat “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p1(6)'''?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
2b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p2(10,8)'''?&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p3(num1, num2):&lt;br /&gt;
   if (num1 &amp;gt; 0):&lt;br /&gt;
      p3(num1-1,num2+num1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(num2,” “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p3(5,3)'''?&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si eliminéssim el '''else''' ( fent sempre el print ) i des del programa principal féssim:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for i in range(1,6):&lt;br /&gt;
   print (“p3 (“, i+”):”)&lt;br /&gt;
   p3 (i,0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   else:&lt;br /&gt;
      print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
4b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p4(5)'''?&lt;br /&gt;
&lt;br /&gt;
5)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p5(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
      num=num-1&lt;br /&gt;
      p5(num)&lt;br /&gt;
   print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p5(5)'''?&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p6(num):&lt;br /&gt;
   print(num, end=” “)&lt;br /&gt;
   for i in range(num, 0, -1):&lt;br /&gt;
      p6(i-1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p6(4)'''?&lt;br /&gt;
&lt;br /&gt;
7)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      f= f1(num-1) + 1&lt;br /&gt;
   else:&lt;br /&gt;
      f=0&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f1(10''')?&lt;br /&gt;
&lt;br /&gt;
8)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f2(num):&lt;br /&gt;
    if (num&amp;gt;0):&lt;br /&gt;
       f= f2(num-1) + num&lt;br /&gt;
    else:&lt;br /&gt;
       f=0&lt;br /&gt;
    return f&lt;br /&gt;
ret=f2(10)&lt;br /&gt;
print(ret,end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f2(10)'''?&lt;br /&gt;
&lt;br /&gt;
9)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f3(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      r=num&lt;br /&gt;
      for i in range(num-1, 0, -1):&lt;br /&gt;
         r= r + f3(i)&lt;br /&gt;
      f=r&lt;br /&gt;
   else:&lt;br /&gt;
      f=num&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f3(6)'''?&lt;br /&gt;
&lt;br /&gt;
Trobar el cas general (què fa la funció) i escriure-la d’una altra forma més senzilla&lt;br /&gt;
&lt;br /&gt;
10)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f4(x):&lt;br /&gt;
   if (x&amp;gt; 100):&lt;br /&gt;
      f=x-10&lt;br /&gt;
   else:&lt;br /&gt;
      f= f4(f4(x+11))&lt;br /&gt;
   return f&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f4(100)''', i '''f4(0)'''? Fer el programa més senzill.&lt;br /&gt;
&lt;br /&gt;
==Recursivitat codi==&lt;br /&gt;
&lt;br /&gt;
0. Fes un meńu per escollir l'exercici a executar: el menú es trobarà en un fitxer diferent dels exercicis i aquests s'ubicaran en el mateix mòdul.&lt;br /&gt;
&lt;br /&gt;
1. Escriure una funció recursiva que donat un número N (N ≥ 0) passat com a paràmetre calculi la suma de tots els números enters fins a N inclòs.&lt;br /&gt;
&lt;br /&gt;
2. Escriure una funció recursiva que calculi el resultat de X elevat a N amb N &amp;gt;0, sabent que X0 = 1.&lt;br /&gt;
&lt;br /&gt;
3. Escriu una funció recursiva per calcular la suma digital d’un número natural. Per exemple, la suma digital de 18624 és: 4 + 2 + 6 + 8 + 1 = 21&lt;br /&gt;
&lt;br /&gt;
4. Dissenyeu un algoritme recursiu que calculi el màxim comú divisor de dos enters positius, sabent que :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     MCD( X, Y) = MCD (X-Y, Y) SI X &amp;gt; Y&lt;br /&gt;
     MCD (X, Y-X) SI Y &amp;gt; X&lt;br /&gt;
     X SI X = Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5. Fes la funció recursiva SumaHarmonica (n) que retorna la suma:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     1 + 1/2 +1/3 + ... + 1/n&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Fes una funció recursiva booleana que donats un número i un dígit retorni si aquest dígit pertany al número. Per exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  existeix(1234,3) → true&lt;br /&gt;
  existeix(1234,7) → false &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Fes una funció que calculi el producte segons el mètode rus que diu que:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     x*y = ((2*x) *(y/2)) SI y es parell&lt;br /&gt;
     x*y =((2*x) *(y/2))+ x SI y és senar.&lt;br /&gt;
&lt;br /&gt;
     Quan y val 1, el resultat és x.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Torres de Hanoi (amb N introduïda per l’usuari com a paràmetre). S’ha d’anar visualitzant la solució per pantalla. &lt;br /&gt;
&lt;br /&gt;
9. Fes una funció recursiva que ompli un tauler n-goro. Un tauler n-goro és una matriu de n files i n+1 columnes que s'omple consecutivament en diagonal i quan ens sortim per una banda entrem per l'altra. L'últim element que s'omple serà l'extrem inferior dret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Per exemple amb n=3&lt;br /&gt;
&lt;br /&gt;
       1 10 7 4&lt;br /&gt;
       5 2 11 8&lt;br /&gt;
       9 6 3 12&lt;br /&gt;
&lt;br /&gt;
     Amb n = 4&lt;br /&gt;
&lt;br /&gt;
       1 17 13 9 5&lt;br /&gt;
       6 2 18 14 10&lt;br /&gt;
       11 7 3 19 15&lt;br /&gt;
       16 12 8 4 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10.Potencias&lt;br /&gt;
Ene ste ejercicio vamos a trabajar con las potencias. Debemos realizar una función en Python a la cual le pase dos parametros (x,y), uno de ellos es la base y el otro el exponente. La función me debe devolver el resultado de esa potencia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#sin recursividad&lt;br /&gt;
def potencia(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 1&lt;br /&gt;
  else:&lt;br /&gt;
    r=base&lt;br /&gt;
    for x in range (1,exp):&lt;br /&gt;
      r=base*r&lt;br /&gt;
    return r&lt;br /&gt;
potencia(2,5)&lt;br /&gt;
32&lt;br /&gt;
#Con recursividad&lt;br /&gt;
def potencia_r(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 0&lt;br /&gt;
  if exp==1:&lt;br /&gt;
    return base&lt;br /&gt;
  else: &lt;br /&gt;
    return base * potencia_r(base,exp-1)&lt;br /&gt;
potencia_r(2,5)&lt;br /&gt;
32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17797</id>
		<title>ASIX-M3-UF2-A3.1-Exercicis recursivitat</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17797"/>
				<updated>2024-02-15T13:08:44Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Recursivitat seguiment codi==&lt;br /&gt;
&lt;br /&gt;
Indicar quina serà la sortida dels procediments següents:&lt;br /&gt;
&lt;br /&gt;
1a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
      p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
1b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
     print(num,” “)&lt;br /&gt;
     p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
     print(“final”)&lt;br /&gt;
   print(num,” “)&lt;br /&gt;
   print(”final de veritat “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p1(6)'''?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
2b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p2(10,8)'''?&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p3(num1, num2):&lt;br /&gt;
   if (num1 &amp;gt; 0):&lt;br /&gt;
      p3(num1-1,num2+num1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(num2,” “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p3(5,3)'''?&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si eliminéssim el '''else''' ( fent sempre el print ) i des del programa principal féssim:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for i in range(1,6):&lt;br /&gt;
   print (“p3 (“, i+”):”)&lt;br /&gt;
   p3 (i,0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   else:&lt;br /&gt;
      print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
4b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p4(5)'''?&lt;br /&gt;
&lt;br /&gt;
5)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p5(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
      num=num-1&lt;br /&gt;
      p5(num)&lt;br /&gt;
   print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p5(5)'''?&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p6(num):&lt;br /&gt;
   print(num, end=” “)&lt;br /&gt;
   for i in range(num, 0, -1):&lt;br /&gt;
      p6(i-1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p6(4)'''?&lt;br /&gt;
&lt;br /&gt;
7)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      f= f1(num-1) + 1&lt;br /&gt;
   else:&lt;br /&gt;
      f=0&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f1(10''')?&lt;br /&gt;
&lt;br /&gt;
8)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f2(num):&lt;br /&gt;
    if (num&amp;gt;0):&lt;br /&gt;
       f= f2(num-1) + num&lt;br /&gt;
    else:&lt;br /&gt;
       f=0&lt;br /&gt;
    return f&lt;br /&gt;
ret=f2(10)&lt;br /&gt;
print(ret,end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f2(10)'''?&lt;br /&gt;
&lt;br /&gt;
9)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f3(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      r=num&lt;br /&gt;
      for i in range(num-1, 0, -1):&lt;br /&gt;
         r= r + f3(i)&lt;br /&gt;
      f=r&lt;br /&gt;
   else:&lt;br /&gt;
      f=num&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f3(6)'''?&lt;br /&gt;
&lt;br /&gt;
Trobar el cas general (què fa la funció) i escriure-la d’una altra forma més senzilla&lt;br /&gt;
&lt;br /&gt;
10)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f4(x):&lt;br /&gt;
   if (x&amp;gt; 100):&lt;br /&gt;
      f=x-10&lt;br /&gt;
   else:&lt;br /&gt;
      f= f4(f4(x+11))&lt;br /&gt;
   return f&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f4(100)''', i '''f4(0)'''? Fer el programa més senzill.&lt;br /&gt;
&lt;br /&gt;
==Recursivitat codi==&lt;br /&gt;
&lt;br /&gt;
0. Fes un meńu per escollir l'exercici a executar: el menú es trobarà en un fitxer diferent dels exercicis i aquests s'ubicaran en el mateix mòdul.&lt;br /&gt;
&lt;br /&gt;
1. Escriure una funció recursiva que donat un número N (N ≥ 0) passat com a paràmetre calculi la suma de tots els números enters fins a N inclòs.&lt;br /&gt;
&lt;br /&gt;
2. Escriure una funció recursiva que calculi el resultat de X elevat a N amb N &amp;gt;0, sabent que X0 = 1.&lt;br /&gt;
&lt;br /&gt;
3. Escriu una funció recursiva per calcular la suma digital d’un número natural. Per exemple, la suma digital de 18624 és: 4 + 2 + 6 + 8 + 1 = 21&lt;br /&gt;
&lt;br /&gt;
4. Dissenyeu un algoritme recursiu que calculi el màxim comú divisor de dos enters positius, sabent que :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     MCD( X, Y) = MCD (X-Y, Y) SI X &amp;gt; Y&lt;br /&gt;
     MCD (X, Y-X) SI Y &amp;gt; X&lt;br /&gt;
     X SI X = Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5. Fes la funció recursiva SumaHarmonica (n) que retorna la suma:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     1 + 1/2 +1/3 + ... + 1/n&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Fes una funció recursiva booleana que donats un número i un dígit retorni si aquest dígit pertany al número. Per exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  existeix(1234,3) → true&lt;br /&gt;
  existeix(1234,7) → false &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Fes una funció que calculi el producte segons el mètode rus que diu que:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     x*y = ((2*x) *(y/2)) SI y es parell&lt;br /&gt;
     x*y =((2*x) *(y/2))+ x SI y és senar.&lt;br /&gt;
&lt;br /&gt;
     Quan y val 1, el resultat és x.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Torres de Hanoi (amb N introduïda per l’usuari com a paràmetre). S’ha d’anar visualitzant la solució per pantalla. &lt;br /&gt;
&lt;br /&gt;
9. Fes una funció recursiva que ompli un tauler n-goro. Un tauler n-goro és una matriu de n files i n+1 columnes que s'omple consecutivament en diagonal i quan ens sortim per una banda entrem per l'altra. L'últim element que s'omple serà l'extrem inferior dret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Per exemple amb n=3&lt;br /&gt;
&lt;br /&gt;
       1 10 7 4&lt;br /&gt;
       5 2 11 8&lt;br /&gt;
       9 6 3 12&lt;br /&gt;
&lt;br /&gt;
     Amb n = 4&lt;br /&gt;
&lt;br /&gt;
       1 17 13 9 5&lt;br /&gt;
       6 2 18 14 10&lt;br /&gt;
       11 7 3 19 15&lt;br /&gt;
       16 12 8 4 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10.Potencias&lt;br /&gt;
Ene ste ejercicio vamos a trabajar con las potencias. Debemos realizar una función en Python a la cual le pase dos parametros (x,y), uno de ellos es la base y el otro el exponente. La función me debe devolver el resultado de esa potencia.&lt;br /&gt;
&lt;br /&gt;
!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#sin recursividad&lt;br /&gt;
def potencia(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 1&lt;br /&gt;
  else:&lt;br /&gt;
    r=base&lt;br /&gt;
    for x in range (1,exp):&lt;br /&gt;
      r=base*r&lt;br /&gt;
    return r&lt;br /&gt;
potencia(2,5)&lt;br /&gt;
32&lt;br /&gt;
#Con recursividad&lt;br /&gt;
def potencia_r(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 0&lt;br /&gt;
  if exp==1:&lt;br /&gt;
    return base&lt;br /&gt;
  else: &lt;br /&gt;
    return base * potencia_r(base,exp-1)&lt;br /&gt;
potencia_r(2,5)&lt;br /&gt;
32&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--!&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17796</id>
		<title>ASIX-M3-UF2-A3.1-Exercicis recursivitat</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3.1-Exercicis_recursivitat&amp;diff=17796"/>
				<updated>2024-02-15T13:07:02Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Recursivitat seguiment codi==&lt;br /&gt;
&lt;br /&gt;
Indicar quina serà la sortida dels procediments següents:&lt;br /&gt;
&lt;br /&gt;
1a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
      p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
1b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
     print(num,” “)&lt;br /&gt;
     p1(num-1)&lt;br /&gt;
   else:&lt;br /&gt;
     print(“final”)&lt;br /&gt;
   print(num,” “)&lt;br /&gt;
   print(”final de veritat “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p1(6)'''?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   else:&lt;br /&gt;
      print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
2b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p2(num1 , num2):&lt;br /&gt;
   if (num1%num2!=0):&lt;br /&gt;
      print(num1,” “)&lt;br /&gt;
      p2(num1+1,num2)&lt;br /&gt;
   print(“final”)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p2(10,8)'''?&lt;br /&gt;
&lt;br /&gt;
3)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p3(num1, num2):&lt;br /&gt;
   if (num1 &amp;gt; 0):&lt;br /&gt;
      p3(num1-1,num2+num1)&lt;br /&gt;
   else:&lt;br /&gt;
      print(num2,” “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p3(5,3)'''?&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si eliminéssim el '''else''' ( fent sempre el print ) i des del programa principal féssim:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
for i in range(1,6):&lt;br /&gt;
   print (“p3 (“, i+”):”)&lt;br /&gt;
   p3 (i,0)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
4a)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   else:&lt;br /&gt;
      print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
4b)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p4(num):&lt;br /&gt;
   if (num&amp;gt; 0):&lt;br /&gt;
      p4(num-1)&lt;br /&gt;
      print(num,” “)&lt;br /&gt;
   print(”fi? “)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p4(5)'''?&lt;br /&gt;
&lt;br /&gt;
5)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p5(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
      num=num-1&lt;br /&gt;
      p5(num)&lt;br /&gt;
   print(num, end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p5(5)'''?&lt;br /&gt;
&lt;br /&gt;
6)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def p6(num):&lt;br /&gt;
   print(num, end=” “)&lt;br /&gt;
   for i in range(num, 0, -1):&lt;br /&gt;
      p6(i-1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Quina seria la sortida si executéssim '''p6(4)'''?&lt;br /&gt;
&lt;br /&gt;
7)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f1(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      f= f1(num-1) + 1&lt;br /&gt;
   else:&lt;br /&gt;
      f=0&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f1(10''')?&lt;br /&gt;
&lt;br /&gt;
8)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f2(num):&lt;br /&gt;
    if (num&amp;gt;0):&lt;br /&gt;
       f= f2(num-1) + num&lt;br /&gt;
    else:&lt;br /&gt;
       f=0&lt;br /&gt;
    return f&lt;br /&gt;
ret=f2(10)&lt;br /&gt;
print(ret,end=&amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Que retornaria '''f2(10)'''?&lt;br /&gt;
&lt;br /&gt;
9)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f3(num):&lt;br /&gt;
   if (num&amp;gt;0):&lt;br /&gt;
      r=num&lt;br /&gt;
      for i in range(num-1, 0, -1):&lt;br /&gt;
         r= r + f3(i)&lt;br /&gt;
      f=r&lt;br /&gt;
   else:&lt;br /&gt;
      f=num&lt;br /&gt;
   return f&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f3(6)'''?&lt;br /&gt;
&lt;br /&gt;
Trobar el cas general (què fa la funció) i escriure-la d’una altra forma més senzilla&lt;br /&gt;
&lt;br /&gt;
10)&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def f4(x):&lt;br /&gt;
   if (x&amp;gt; 100):&lt;br /&gt;
      f=x-10&lt;br /&gt;
   else:&lt;br /&gt;
      f= f4(f4(x+11))&lt;br /&gt;
   return f&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Què retorna '''f4(100)''', i '''f4(0)'''? Fer el programa més senzill.&lt;br /&gt;
&lt;br /&gt;
==Recursivitat codi==&lt;br /&gt;
&lt;br /&gt;
0. Fes un meńu per escollir l'exercici a executar: el menú es trobarà en un fitxer diferent dels exercicis i aquests s'ubicaran en el mateix mòdul.&lt;br /&gt;
&lt;br /&gt;
1. Escriure una funció recursiva que donat un número N (N ≥ 0) passat com a paràmetre calculi la suma de tots els números enters fins a N inclòs.&lt;br /&gt;
&lt;br /&gt;
2. Escriure una funció recursiva que calculi el resultat de X elevat a N amb N &amp;gt;0, sabent que X0 = 1.&lt;br /&gt;
&lt;br /&gt;
3. Escriu una funció recursiva per calcular la suma digital d’un número natural. Per exemple, la suma digital de 18624 és: 4 + 2 + 6 + 8 + 1 = 21&lt;br /&gt;
&lt;br /&gt;
4. Dissenyeu un algoritme recursiu que calculi el màxim comú divisor de dos enters positius, sabent que :&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     MCD( X, Y) = MCD (X-Y, Y) SI X &amp;gt; Y&lt;br /&gt;
     MCD (X, Y-X) SI Y &amp;gt; X&lt;br /&gt;
     X SI X = Y&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
5. Fes la funció recursiva SumaHarmonica (n) que retorna la suma:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     1 + 1/2 +1/3 + ... + 1/n&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
6. Fes una funció recursiva booleana que donats un número i un dígit retorni si aquest dígit pertany al número. Per exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  existeix(1234,3) → true&lt;br /&gt;
  existeix(1234,7) → false &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
7. Fes una funció que calculi el producte segons el mètode rus que diu que:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     x*y = ((2*x) *(y/2)) SI y es parell&lt;br /&gt;
     x*y =((2*x) *(y/2))+ x SI y és senar.&lt;br /&gt;
&lt;br /&gt;
     Quan y val 1, el resultat és x.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
8. Torres de Hanoi (amb N introduïda per l’usuari com a paràmetre). S’ha d’anar visualitzant la solució per pantalla. &lt;br /&gt;
&lt;br /&gt;
9. Fes una funció recursiva que ompli un tauler n-goro. Un tauler n-goro és una matriu de n files i n+1 columnes que s'omple consecutivament en diagonal i quan ens sortim per una banda entrem per l'altra. L'últim element que s'omple serà l'extrem inferior dret.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     Per exemple amb n=3&lt;br /&gt;
&lt;br /&gt;
       1 10 7 4&lt;br /&gt;
       5 2 11 8&lt;br /&gt;
       9 6 3 12&lt;br /&gt;
&lt;br /&gt;
     Amb n = 4&lt;br /&gt;
&lt;br /&gt;
       1 17 13 9 5&lt;br /&gt;
       6 2 18 14 10&lt;br /&gt;
       11 7 3 19 15&lt;br /&gt;
       16 12 8 4 20&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
10.Potencias&lt;br /&gt;
Ene ste ejercicio vamos a trabajar con las potencias. Debemos realizar una función en Python a la cual le pase dos parametros (x,y), uno de ellos es la base y el otro el exponente. La función me debe devolver el resultado de esa potencia.&lt;br /&gt;
&lt;br /&gt;
!--&lt;br /&gt;
#sin recursividad&lt;br /&gt;
def potencia(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 1&lt;br /&gt;
  else:&lt;br /&gt;
    r=base&lt;br /&gt;
    for x in range (1,exp):&lt;br /&gt;
      r=base*r&lt;br /&gt;
    return r&lt;br /&gt;
potencia(2,5)&lt;br /&gt;
32&lt;br /&gt;
#Con recursividad&lt;br /&gt;
def potencia_r(base,exp):&lt;br /&gt;
  if exp==0:&lt;br /&gt;
    return 0&lt;br /&gt;
  if exp==1:&lt;br /&gt;
    return base&lt;br /&gt;
  else: &lt;br /&gt;
    return base * potencia_r(base,exp-1)&lt;br /&gt;
potencia_r(2,5)&lt;br /&gt;
32&lt;br /&gt;
--!&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3&amp;diff=17669</id>
		<title>ASIX-M3-UF2-A3</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3&amp;diff=17669"/>
				<updated>2024-01-25T16:54:27Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducció ==&lt;br /&gt;
&lt;br /&gt;
Els programes que hem vist fins ara estan estructurats generalment com a mètodes que es criden entre si, d'una manera disciplinada i jeràrquica. No obstant això, per a alguns problemes és convenient fer que un mètode es cridi a si mateix. Aquest mètode es coneix com a mètode recursiu; aquest mètode es pot cridar en forma directa o indirecta a través d'un altre mètode.&lt;br /&gt;
&lt;br /&gt;
== Conceptes de recursivitat ==&lt;br /&gt;
&lt;br /&gt;
Els mètodes per solucionar problemes recursius tenen diversos elements en comú. Quan es fa una crida a un mètode recursiu per resoldre un problema, el mètode en realitat és capaç de resoldre només el (els) cas(os) més simple(s), o cas(os) base. Si es fa la crida al mètode amb un cas base, el mètode retorna un resultat. Si es fa la crida al mètode amb un problema més complex, el mètode comunament divideix el problema en dues peces conceptuals: una peça que el mètode sap com resoldre i una altra peça que no sap com resoldre.  Perquè  la recursivitat  sigui  factible,  aquesta  última  peça  ha  de  ser  similar  al problema  original,  però  una  versió  lleugerament  més  senzilla  o  simple  del  mateix.  A causa  que  aquest  nou  problema  s'assembla  al  problema  original,  el  mètode  crida  a  una &lt;br /&gt;
nova còpia de si mateix per treballar en el problema més petit; a això se li coneix com crida  recursiva,  i  també  com  a  pas  recursiu.  En  general,  el  pas  recursiu  inclou  una instrucció  return,  ja  que  el  seu  resultat  es  combina  amb  la  part  del  problema  que  el mètode  va  saber  com  resoldre,  per  formar  un  resultat  que  es  passarà  de  tornada  al mètode  original  que  va  fer  la  crida.  Aquest  concepte  de  separar  el  problema  en  dues porcions més petites és una forma del mètode “divideix i venceràs”.&lt;br /&gt;
&lt;br /&gt;
El pas recursiu s'executa mentre segueixi activa la crida original al mètode (és a dir, que no  hagi  acabat  la  seva  execució).  Es  poden  produir  moltes  crides  recursives  més,  a mesura  que  el  mètode  divideix  cada  nou  subproblema  en  dues  peces conceptuals. &lt;br /&gt;
Perquè la recursivitat acabi en un moment donat, cada vegada que el mètode es crida a si mateix amb una versió més simple del problema original, la seqüència de problemes cada  vegada  més  petits  ha  de  convergir  en  un  cas  base.  En  aquest  punt,  el  mètode reconeix  el  cas  base  i  retorna  un  resultat a  la  còpia  anterior  del  mètode.  Després s'origina  una  seqüència  de  tornades,  fins  que  la  crida  al  mètode  original  retorna  el resultat final al mètode que el va cridar.&lt;br /&gt;
&lt;br /&gt;
Un mètode recursiu pot cridar a un altre mètode, que al seu torn pot fer una crida de tornada al mètode recursiu. A aquest procés se li coneix com cridada recursiva indirecta o recursivitat indirecta. Per exemple, el mètode A crida al mètode B, que fa una crida de tornada al mètode A. Això se segueix considerant com recursivitat, a causa que la segona crida al mètode A es realitza mentre la primera segueix activa; és a dir, la primera crida al mètode A no ha acabat encara d'executar-se (a causa que està esperant que el mètode B li retorni un resultat) i no ha tornat al mètode original que va cridar al mètode A.&lt;br /&gt;
&lt;br /&gt;
Per comprendre millor el concepte de recursivitat, vegem un exemple que és bastant comú per als usuaris de computadora: la definició recursiva d'un directori en una computadora. En general, una computadora emmagatzema els arxius relacionats en un directori. Aquest directori pot estar buit, pot contenir arxius i/o pot contenir altres directoris (que, en general, es coneixen com a subdirectoris). Al seu torn, cadascun d'aquests directoris pot contenir també arxius i directoris. Si volem llistar cada arxiu en un directori (incloent tots els arxius en els subdirectoris d'aquest directori), necessitem crear un mètode que llegeixi primer els arxius del directori inicial i que després faci cridades recursives per llistar els arxius en cadascun dels subdirectoris d'aquest directori. El cas base ocorre quan s'arriba a un directori que no contingui subdirectoris. En aquest punt, s'han llistat tots els arxius en el directori original i no es necessita més la recursivitat.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_m3uf2_recursivitat directa-indirecta.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat: factorials ==&lt;br /&gt;
&lt;br /&gt;
Escrivim un programa recursiu, per realitzar un popular càlcul matemàtic. Considerem el factorial d'un enter positiu n, escrit com a n! (i es pronuncia com a “factorial de n”), que és el producte: n * (n – 1) * (n – 2)* ... * 1&lt;br /&gt;
&lt;br /&gt;
on 1! és igual a 1 i 0! es defineix com 1. Per exemple, 5! és el producte 5 * 4 * 3 * 2 * 1, que és igual a 120.&lt;br /&gt;
&lt;br /&gt;
El factorial de l'enter numero (on numero &amp;gt;= 0) pot calcular-se de manera iterativa (sense recursivitat), usant una instrucció for de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
factorial = 1;&lt;br /&gt;
for comptador in range(numero, 1, -1):&lt;br /&gt;
   factorial *= comptador&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podem arribar a una declaració recursiva del mètode del factorial, si observem la següent relació:&lt;br /&gt;
n! = n * (n – 1)!&lt;br /&gt;
&lt;br /&gt;
Per exemple, 5! és sens dubte igual a 5 · 4!, com es mostra en les següents equacions:&lt;br /&gt;
&lt;br /&gt;
5! = 5 * 4 * 3 * 2 * 1&lt;br /&gt;
5! = 5 * (4 * 3 * 2 * 1)&lt;br /&gt;
5! = 5 * (4!)&lt;br /&gt;
&lt;br /&gt;
Per tant podem resoldre el problema de forma recursiva així:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def factorial(n):&lt;br /&gt;
   if n &amp;lt;=1:&lt;br /&gt;
      # Cas base: Se sap el resultat directament&lt;br /&gt;
      return 1&lt;br /&gt;
   else: &lt;br /&gt;
    ''' Cas recursiu: Per calcular-lo cal invocar el propi metode&lt;br /&gt;
        El valor del nou paràmetre d'entrada ha de variar de manera que&lt;br /&gt;
        es vagi aproximant al cas base '''&lt;br /&gt;
      return n * factorial(n - 1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_3.png |400px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Si ometem el cas base o escrivim el pas recursiu de forma incorrecta, de manera que no convergeixi en el cas base, es pot produir un error lògic conegut com a recursivitat infinita, on es realitzen crides recursives de forma contínua, fins que s'esgota la memòria. Aquest error és anàleg al problema d'un cicle infinit en una solució iterativa.&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat: sèrie de Fibonacci ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La sèrie de Fibonacci, 0, 1, 1, 2, 3, 5, 8, 13, 21, ...&lt;br /&gt;
comença amb 0 i 1, i té la propietat que cada nombre subsegüent de Fibonacci és la suma dels dos nombres Fibonacci anteriors.&lt;br /&gt;
&lt;br /&gt;
La sèrie de Fibonacci es pot definir de manera recursiva com:&lt;br /&gt;
fibonacci(0) = 0&lt;br /&gt;
fibonacci(1) = 1&lt;br /&gt;
fibonacci(n) = fibonacci(n – 1) + fibonacci(n – 2)&lt;br /&gt;
&lt;br /&gt;
Per tant el podríem codificar així:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def fibonacci(int n):&lt;br /&gt;
   if n &amp;lt;=1:&lt;br /&gt;
       # Cas base: Se sap el resultat directament&lt;br /&gt;
       return n&lt;br /&gt;
   else: &lt;br /&gt;
   ''' Cas recursiu: Per calcular-lo cal invocar el propi metode&lt;br /&gt;
       El valor del nou parametre d'entrada ha de variar de manera que&lt;br /&gt;
       es vagi aproximant al cas base '''&lt;br /&gt;
       return fibonacci(n - 1) + fibonacci(n - 2)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cal anar amb compte amb els programes recursius com el que utilitzem aquí per generar nombres de Fibonacci. Cada invocació del mètode fibonacci que no coincideix amb un dels casos base produeix dues crides recursives més al mètode fibonacci. Per tant, aquest conjunt de crides recursives se surt ràpidament de control. Per calcular el valor 20 de Fibonacci amb aquest programa, es requereixen 21,891 crides al mètode fibonacci; per calcular el valor 30 de Fibonacci es requereixen 2,692,537 crides! A mesura que tractem de calcular valors més grans de Fibonacci, observarem que cada nombre de Fibonacci consecutiu que calculem amb l'aplicació requereix un augment considerable en temps de càlcul i en el nombre de crides al mètode fibonacci.&lt;br /&gt;
&lt;br /&gt;
* Cal evitar els programes recursius a l'estil de Fibonacci, ja que produeixen una “explosió” exponencial de crides a mètodes. A més en aquest cas es pot observar que hi ha càlculs que els fem moltíssims cops.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_4.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
* La recursivitat té molts desavantatges. Invoca al mecanisme en forma repetida, i en conseqüència es produeix una sobrecàrrega de les crides al mètode. Aquesta repetició pot ser perjudicial, en termes de temps del processador i espai de la memòria. Cada crida recursiva crea una altra còpia del mètode (en realitat, només les variables del mateix); aquest conjunt de còpies pot consumir una quantitat considerable d'espai en memòria. Com la iteració ocorre dins d'un mètode, s'eviten les crides repetides al mètode i l'assignació addicional de memòria. Llavors, per què triar la recursivitat?&lt;br /&gt;
&lt;br /&gt;
* Qualsevol problema que es pugui resoldre mitjançant la recursivitat, es pot resoldre també mitjançant la iteració (sense recursivitat). En general, es prefereix un mètode recursiu a un iteratiu quan el primer reflexa amb més naturalitat el problema, i es produeix un programa més fàcil d'entendre i de depurar. Sovint, pot implementar-se un mètode recursiu amb menys línies de codi. Una altra raó per la qual és preferible triar un mètode recursiu és que un d'iteratiu podria no ser aparent.&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat:Torres de Hanoi ==&lt;br /&gt;
&lt;br /&gt;
El joc disposa de tres pals A,B,C; en el pal A es troben n discos de mida decreixent.&lt;br /&gt;
&lt;br /&gt;
L’objectiu es moure un a un els discos des d’A fins a C utilitzant el pal B com a auxiliar. A més no pot haver mai un disc de radi més gran a sobre d’un altre de radi més petit.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_5.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
Si tractem de trobar una solució iterativa, si el número de discos es superior a 4 és possible que acabem en un psiquiàtric. En canvi, si ataquem el problema mitjançant la recursivitat trobarem de forma ràpida i en poques línees la solució.&lt;br /&gt;
&lt;br /&gt;
'''Solució recursiva'''&lt;br /&gt;
&lt;br /&gt;
:1. El problema de moure n discos d’A a C consisteix en:&lt;br /&gt;
&lt;br /&gt;
::- moure els n-1 discos superiors d’A a B&lt;br /&gt;
::- moure el disc n d’A a C&lt;br /&gt;
::- moure els n-1 discos de B a C&lt;br /&gt;
&lt;br /&gt;
:2. El problema de moure els n-1 discos d’A a B consisteix en :&lt;br /&gt;
&lt;br /&gt;
::- moure els n-2 discos superiors d’A a C&lt;br /&gt;
::- moure el disc n-1 d’A a B&lt;br /&gt;
::- moure els n-2 discos de C a B&lt;br /&gt;
&lt;br /&gt;
D’aquesta forma es va avançant reduint cada vegada un nivell la dificultat del problema fins que aquest només consisteixi en moure un sol disc. La tècnica consisteix en anar intercanviant la finalitat dels pals, origen, auxiliar i destí.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_6.png |400px|center| Recursivitat]]&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3&amp;diff=17668</id>
		<title>ASIX-M3-UF2-A3</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A3&amp;diff=17668"/>
				<updated>2024-01-25T16:15:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introducció ==&lt;br /&gt;
&lt;br /&gt;
Els programes que hem vist fins ara estan estructurats generalment com a mètodes que es criden entre si, d'una manera disciplinada i jeràrquica. No obstant això, per a alguns problemes és convenient fer que un mètode es cridi a si mateix. Aquest mètode es coneix com a mètode recursiu; aquest mètode es pot cridar en forma directa o indirecta a través d'un altre mètode.&lt;br /&gt;
&lt;br /&gt;
== Conceptes de recursivitat ==&lt;br /&gt;
&lt;br /&gt;
Els mètodes per solucionar problemes recursius tenen diversos elements en comú. Quan es fa una crida a un mètode recursiu per resoldre un problema, el mètode en realitat és capaç de resoldre només el (els) cas(os) més simple(s), o cas(os) base. Si es fa la crida al mètode amb un cas base, el mètode retorna un resultat. Si es fa la crida al mètode amb un problema més complex, el mètode comunament divideix el problema en dues peces conceptuals: una peça que el mètode sap com resoldre i una altra peça que no sap com resoldre.  Perquè  la recursivitat  sigui  factible,  aquesta  última  peça  ha  de  ser  similar  al problema  original,  però  una  versió  lleugerament  més  senzilla  o  simple  del  mateix.  A causa  que  aquest  nou  problema  s'assembla  al  problema  original,  el  mètode  crida  a  una &lt;br /&gt;
nova còpia de si mateix per treballar en el problema més petit; a això se li coneix com crida  recursiva,  i  també  com  a  pas  recursiu.  En  general,  el  pas  recursiu  inclou  una instrucció  return,  ja  que  el  seu  resultat  es  combina  amb  la  part  del  problema  que  el mètode  va  saber  com  resoldre,  per  formar  un  resultat  que  es  passarà  de  tornada  al mètode  original  que  va  fer  la  crida.  Aquest  concepte  de  separar  el  problema  en  dues porcions més petites és una forma del mètode “divideix i venceràs”.&lt;br /&gt;
&lt;br /&gt;
El pas recursiu s'executa mentre segueixi activa la crida original al mètode (és a dir, que no  hagi  acabat  la  seva  execució).  Es  poden  produir  moltes  crides  recursives  més,  a mesura  que  el  mètode  divideix  cada  nou  subproblema  en  dues  peces conceptuals. &lt;br /&gt;
Perquè la recursivitat acabi en un moment donat, cada vegada que el mètode es crida a si mateix amb una versió més simple del problema original, la seqüència de problemes cada  vegada  més  petits  ha  de  convergir  en  un  cas  base.  En  aquest  punt,  el  mètode reconeix  el  cas  base  i  retorna  un  resultat a  la  còpia  anterior  del  mètode.  Després s'origina  una  seqüència  de  tornades,  fins  que  la  crida  al  mètode  original  retorna  el resultat final al mètode que el va cridar.&lt;br /&gt;
&lt;br /&gt;
Un mètode recursiu pot cridar a un altre mètode, que al seu torn pot fer una crida de tornada al mètode recursiu. A aquest procés se li coneix com cridada recursiva indirecta o recursivitat indirecta. Per exemple, el mètode A crida al mètode B, que fa una crida de tornada al mètode A. Això se segueix considerant com recursivitat, a causa que la segona crida al mètode A es realitza mentre la primera segueix activa; és a dir, la primera crida al mètode A no ha acabat encara d'executar-se (a causa que està esperant que el mètode B li retorni un resultat) i no ha tornat al mètode original que va cridar al mètode A.&lt;br /&gt;
&lt;br /&gt;
Per comprendre millor el concepte de recursivitat, vegem un exemple que és bastant comú per als usuaris de computadora: la definició recursiva d'un directori en una computadora. En general, una computadora emmagatzema els arxius relacionats en un directori. Aquest directori pot estar buit, pot contenir arxius i/o pot contenir altres directoris (que, en general, es coneixen com a subdirectoris). Al seu torn, cadascun d'aquests directoris pot contenir també arxius i directoris. Si volem llistar cada arxiu en un directori (incloent tots els arxius en els subdirectoris d'aquest directori), necessitem crear un mètode que llegeixi primer els arxius del directori inicial i que després faci cridades recursives per llistar els arxius en cadascun dels subdirectoris d'aquest directori. El cas base ocorre quan s'arriba a un directori que no contingui subdirectoris. En aquest punt, s'han llistat tots els arxius en el directori original i no es necessita més la recursivitat.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_m3uf2_recursivitat directa-indirecta.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat: factorials ==&lt;br /&gt;
&lt;br /&gt;
Escrivim un programa recursiu, per realitzar un popular càlcul matemàtic. Considerem el factorial d'un enter positiu n, escrit com a n! (i es pronuncia com a “factorial de n”), que és el producte: n * (n – 1) * (n – 2)* ... * 1&lt;br /&gt;
&lt;br /&gt;
on 1! és igual a 1 i 0! es defineix com 1. Per exemple, 5! és el producte 5 * 4 * 3 * 2 * 1, que és igual a 120.&lt;br /&gt;
&lt;br /&gt;
El factorial de l'enter numero (on numero &amp;gt;= 0) pot calcular-se de manera iterativa (sense recursivitat), usant una instrucció for de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
factorial = 1;&lt;br /&gt;
for comptador in range(numero, 1, -1):&lt;br /&gt;
   factorial *= comptador&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Podem arribar a una declaració recursiva del mètode del factorial, si observem la següent relació:&lt;br /&gt;
n! = n * (n – 1)!&lt;br /&gt;
&lt;br /&gt;
Per exemple, 5! és sens dubte igual a 5 · 4!, com es mostra en les següents equacions:&lt;br /&gt;
&lt;br /&gt;
5! = 5 * 4 * 3 * 2 * 1&lt;br /&gt;
5! = 5 * (4 * 3 * 2 * 1)&lt;br /&gt;
5! = 5 * (4!)&lt;br /&gt;
&lt;br /&gt;
Per tant podem resoldre el problema de forma recursiva així:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def factorial(n):&lt;br /&gt;
   if n &amp;lt;=1:&lt;br /&gt;
      # Cas base: Se sap el resultat directament&lt;br /&gt;
      return 1&lt;br /&gt;
   else: &lt;br /&gt;
    ''' Cas recursiu: Per calcular-lo cal invocar el propi metode&lt;br /&gt;
        El valor del nou paràmetre d'entrada ha de variar de manera que&lt;br /&gt;
        es vagi aproximant al cas base '''&lt;br /&gt;
      return n * factorial(n - 1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_3.png |400px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Si ometem el cas base o escrivim el pas recursiu de forma incorrecta, de manera que no convergeixi en el cas base, es pot produir un error lògic conegut com a recursivitat infinita, on es realitzen crides recursives de forma contínua, fins que s'esgota la memòria. Aquest error és anàleg al problema d'un cicle infinit en una solució iterativa.&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat: sèrie de Fibonacci ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
La sèrie de Fibonacci, 0, 1, 1, 2, 3, 5, 8, 13, 21, ...&lt;br /&gt;
comença amb 0 i 1, i té la propietat que cada nombre subsegüent de Fibonacci és la suma dels dos nombres Fibonacci anteriors.&lt;br /&gt;
&lt;br /&gt;
La sèrie de Fibonacci es pot definir de manera recursiva com:&lt;br /&gt;
fibonacci(0) = 0&lt;br /&gt;
fibonacci(1) = 1&lt;br /&gt;
fibonacci(n) = fibonacci(n – 1) + fibonacci(n – 2)&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
Per tant el podríem codificar així:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def fibonacci(int n):&lt;br /&gt;
   if n &amp;lt;=1:&lt;br /&gt;
       # Cas base: Se sap el resultat directament&lt;br /&gt;
       return n&lt;br /&gt;
   else: &lt;br /&gt;
   ''' Cas recursiu: Per calcular-lo cal invocar el propi metode&lt;br /&gt;
       El valor del nou parametre d'entrada ha de variar de manera que&lt;br /&gt;
       es vagi aproximant al cas base '''&lt;br /&gt;
       return fibonacci(n - 1) + fibonacci(n - 2)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--!&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cal anar amb compte amb els programes recursius com el que utilitzem aquí per generar nombres de Fibonacci. Cada invocació del mètode fibonacci que no coincideix amb un dels casos base produeix dues crides recursives més al mètode fibonacci. Per tant, aquest conjunt de crides recursives se surt ràpidament de control. Per calcular el valor 20 de Fibonacci amb aquest programa, es requereixen 21,891 crides al mètode fibonacci; per calcular el valor 30 de Fibonacci es requereixen 2,692,537 crides! A mesura que tractem de calcular valors més grans de Fibonacci, observarem que cada nombre de Fibonacci consecutiu que calculem amb l'aplicació requereix un augment considerable en temps de càlcul i en el nombre de crides al mètode fibonacci.&lt;br /&gt;
&lt;br /&gt;
* Cal evitar els programes recursius a l'estil de Fibonacci, ja que produeixen una “explosió” exponencial de crides a mètodes. A més en aquest cas es pot observar que hi ha càlculs que els fem moltíssims cops.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_4.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
* La recursivitat té molts desavantatges. Invoca al mecanisme en forma repetida, i en conseqüència es produeix una sobrecàrrega de les crides al mètode. Aquesta repetició pot ser perjudicial, en termes de temps del processador i espai de la memòria. Cada crida recursiva crea una altra còpia del mètode (en realitat, només les variables del mateix); aquest conjunt de còpies pot consumir una quantitat considerable d'espai en memòria. Com la iteració ocorre dins d'un mètode, s'eviten les crides repetides al mètode i l'assignació addicional de memòria. Llavors, per què triar la recursivitat?&lt;br /&gt;
&lt;br /&gt;
* Qualsevol problema que es pugui resoldre mitjançant la recursivitat, es pot resoldre també mitjançant la iteració (sense recursivitat). En general, es prefereix un mètode recursiu a un iteratiu quan el primer reflexa amb més naturalitat el problema, i es produeix un programa més fàcil d'entendre i de depurar. Sovint, pot implementar-se un mètode recursiu amb menys línies de codi. Una altra raó per la qual és preferible triar un mètode recursiu és que un d'iteratiu podria no ser aparent.&lt;br /&gt;
&lt;br /&gt;
== Exemple d'ús de recursivitat:Torres de Hanoi ==&lt;br /&gt;
&lt;br /&gt;
El joc disposa de tres pals A,B,C; en el pal A es troben n discos de mida decreixent.&lt;br /&gt;
&lt;br /&gt;
L’objectiu es moure un a un els discos des d’A fins a C utilitzant el pal B com a auxiliar. A més no pot haver mai un disc de radi més gran a sobre d’un altre de radi més petit.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_5.png |600px|center| Recursivitat]]&lt;br /&gt;
&lt;br /&gt;
Si tractem de trobar una solució iterativa, si el número de discos es superior a 4 és possible que acabem en un psiquiàtric. En canvi, si ataquem el problema mitjançant la recursivitat trobarem de forma ràpida i en poques línees la solució.&lt;br /&gt;
&lt;br /&gt;
'''Solució recursiva'''&lt;br /&gt;
&lt;br /&gt;
:1. El problema de moure n discos d’A a C consisteix en:&lt;br /&gt;
&lt;br /&gt;
::- moure els n-1 discos superiors d’A a B&lt;br /&gt;
::- moure el disc n d’A a C&lt;br /&gt;
::- moure els n-1 discos de B a C&lt;br /&gt;
&lt;br /&gt;
:2. El problema de moure els n-1 discos d’A a B consisteix en :&lt;br /&gt;
&lt;br /&gt;
::- moure els n-2 discos superiors d’A a C&lt;br /&gt;
::- moure el disc n-1 d’A a B&lt;br /&gt;
::- moure els n-2 discos de C a B&lt;br /&gt;
&lt;br /&gt;
D’aquesta forma es va avançant reduint cada vegada un nivell la dificultat del problema fins que aquest només consisteixi en moure un sol disc. La tècnica consisteix en anar intercanviant la finalitat dels pals, origen, auxiliar i destí.&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3uf2_recursivitat_6.png |400px|center| Recursivitat]]&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17558</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17558"/>
				<updated>2023-11-23T17:22:40Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import random&lt;br /&gt;
&lt;br /&gt;
MIN = 0&lt;br /&gt;
MAX = 99&lt;br /&gt;
&lt;br /&gt;
minimo = ''&lt;br /&gt;
maximo = ''&lt;br /&gt;
&lt;br /&gt;
def pedir_numero(invitacion):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Esta función se contenta con comprobar que se obtiene un número&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
&lt;br /&gt;
        # Se pide un número&lt;br /&gt;
        print(invitacion, end=&amp;quot;: &amp;quot;)&lt;br /&gt;
        entrada = input()&lt;br /&gt;
&lt;br /&gt;
        try:&lt;br /&gt;
            entrada = int(entrada)&lt;br /&gt;
        except:&lt;br /&gt;
            print(&amp;quot;Solo están autorizados los caracteres [0-9].&amp;quot;, file=sys.stderr)&lt;br /&gt;
        else:&lt;br /&gt;
            # Tenemos lo que queríamos, se sale del bucle saliendo de la función&lt;br /&gt;
            return entrada&lt;br /&gt;
&lt;br /&gt;
def pedir_numero_limite(invitacion, minimo=MIN, maximo=MAX):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Esta función utiliza la anterior y agrega una post-condición&lt;br /&gt;
    sobre los límites del número a introducir&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
&lt;br /&gt;
        # Se pide un número&lt;br /&gt;
        invitacion = &amp;quot;{} entre {} y {} incluidos&amp;quot;.format(invitacion, minimo, maximo)&lt;br /&gt;
        entrada = pedir_numero(invitacion)&lt;br /&gt;
&lt;br /&gt;
        if minimo &amp;lt;= entrada &amp;lt;= maximo:&lt;br /&gt;
            # Tenemos lo que queríamos, se sale del bucle saliendo de la función&lt;br /&gt;
            return entrada&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar_una_vez(numero, minimo, maximo):&lt;br /&gt;
    intento = pedir_numero_limite(&amp;quot;Adivine el número&amp;quot;, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
    # Se comprueba si el intento es correcto o no&lt;br /&gt;
    if intento &amp;lt; numero:&lt;br /&gt;
        print(&amp;quot;Demasiado pequeño&amp;quot;)&lt;br /&gt;
        minimo = intento + 1&lt;br /&gt;
        victoria = False&lt;br /&gt;
    elif intento &amp;gt; numero:&lt;br /&gt;
        print(&amp;quot;Demasiado grande&amp;quot;)&lt;br /&gt;
        maximo = intento - 1&lt;br /&gt;
        victoria = False&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;¡Ha ganado!&amp;quot;)&lt;br /&gt;
        victoria = True&lt;br /&gt;
        minimo = maximo = intento&lt;br /&gt;
    return victoria, minimo, maximo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def decidir_limites():&lt;br /&gt;
    while True:&lt;br /&gt;
        minimo = pedir_numero(&amp;quot;¿Cuál es el límite inferior?&amp;quot;)&lt;br /&gt;
        maximo = pedir_numero(&amp;quot;¿Cuál es el límite superior?&amp;quot;)&lt;br /&gt;
        if maximo &amp;gt; minimo:&lt;br /&gt;
            return minimo, maximo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def pedir_numero_incognita(minimo, maximo):&lt;br /&gt;
    #return pedir_numero_limite(&amp;quot;Introduzca el número a adivinar&amp;quot;,&lt;br /&gt;
    #                                    minimo, maximo)&lt;br /&gt;
    return random.randint(minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar_una_PARTIDA(numero, minimo, maximo):&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
        # que permite jugar varias veces&lt;br /&gt;
&lt;br /&gt;
        victoria, minimo, maximo = jugar_una_vez(numero, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
        if (victoria):&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar():&lt;br /&gt;
    minimo, maximo = decidir_limites()&lt;br /&gt;
    numero = pedir_numero_incognita(minimo, maximo)&lt;br /&gt;
    jugar_una_PARTIDA(numero, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    print(&amp;quot;Se ha ejecutado el módulo&amp;quot;)&lt;br /&gt;
    jugar()&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Se ha importado el módulo&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Cobro multa, validar fecha, importe y DNI.'''&lt;br /&gt;
&lt;br /&gt;
Introducir la fecha y validar si es correcta.&lt;br /&gt;
Introducir el importe a pagar (150€), que debe existir en el sistema.&lt;br /&gt;
Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta.&lt;br /&gt;
Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras:&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usar funciones para:&lt;br /&gt;
Validar la fecha.&lt;br /&gt;
Validar el importe introducido&lt;br /&gt;
Validar el DNI y otra que te devuelva la letra del mismo&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def dni_correcto(dni):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Valida el DNI.&lt;br /&gt;
&lt;br /&gt;
    El DNI será válido cuando tenga nueve caracteres, los ocho primeros&lt;br /&gt;
    sean números y la letra sea correcta.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return len(dni) == 9 and dni[:8].isdecimal() and letra_dni_correcta(dni)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def letra_dni_correcta(dni):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Valida la letra del DNI pasado como parámetro.&lt;br /&gt;
&lt;br /&gt;
    La letra será válida si coincide con la letra resultante de usar el índice del&lt;br /&gt;
    resto de la división del número del DNI entre 23 para la cadena de letras:&lt;br /&gt;
    &amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    num_dni = int(dni[:8])&lt;br /&gt;
    letra_dni = dni[8].upper()&lt;br /&gt;
    return letra_dni == &amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;[num_dni % 23]&lt;br /&gt;
&lt;br /&gt;
def comprobar_fecha(text):&lt;br /&gt;
    try:&lt;br /&gt;
        from datetime import datetime&lt;br /&gt;
        fecha = text&lt;br /&gt;
        datetime.strptime(fecha, '%Y/%m/%d')&lt;br /&gt;
        print(&amp;quot;Fecha válida&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Fecha inválida&amp;quot;)    &lt;br /&gt;
&lt;br /&gt;
# ---------&lt;br /&gt;
# Principal&lt;br /&gt;
# ---------&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Multa a pagar por escupir en la calle - Valor 150€&amp;quot;)&lt;br /&gt;
valor = 150&lt;br /&gt;
&lt;br /&gt;
fecha = input(&amp;quot;Dame una fecha (YYYY/MM/DD): &amp;quot;)&lt;br /&gt;
impo = int(input(&amp;quot;Entrar el importe a pagar: &amp;quot; ))&lt;br /&gt;
dni = input(&amp;quot;Dame un DNI: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ret=(comprobar_fecha(fecha))&lt;br /&gt;
if ret != &amp;quot;ERROR&amp;quot;:&lt;br /&gt;
    if impo == valor:&lt;br /&gt;
        if dni_correcto(dni):&lt;br /&gt;
            print(&amp;quot;El DNI&amp;quot;, dni, &amp;quot;es válido&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Operación realizada con éxito&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;El DNI&amp;quot;, dni, &amp;quot;es incorrecto&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;El importe a pagar debe ser&amp;quot;, valor) &lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;El formato debe ser  YYYY/MM/DD&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''6º Llamada a funciones externas:.'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que llame a tres funciones externas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from paquets_funcions.misfuncions import *&lt;br /&gt;
&lt;br /&gt;
La primera que diga: Soy la función 1&lt;br /&gt;
&lt;br /&gt;
Para la función 2, pedir un parámetro desde el programa principal, pasárselo a la función 2 y mostrar:  Soy la función 2 y me has llamado con el parámetro {x}&lt;br /&gt;
&lt;br /&gt;
Tercera función: introducir un nuevo parámetro y mostrar la longitud de dicho parámetro.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17528</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17528"/>
				<updated>2023-11-09T18:04:32Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import random&lt;br /&gt;
&lt;br /&gt;
MIN = 0&lt;br /&gt;
MAX = 99&lt;br /&gt;
&lt;br /&gt;
minimo = ''&lt;br /&gt;
maximo = ''&lt;br /&gt;
&lt;br /&gt;
def pedir_numero(invitacion):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Esta función se contenta con comprobar que se obtiene un número&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
&lt;br /&gt;
        # Se pide un número&lt;br /&gt;
        print(invitacion, end=&amp;quot;: &amp;quot;)&lt;br /&gt;
        entrada = input()&lt;br /&gt;
&lt;br /&gt;
        try:&lt;br /&gt;
            entrada = int(entrada)&lt;br /&gt;
        except:&lt;br /&gt;
            print(&amp;quot;Solo están autorizados los caracteres [0-9].&amp;quot;, file=sys.stderr)&lt;br /&gt;
        else:&lt;br /&gt;
            # Tenemos lo que queríamos, se sale del bucle saliendo de la función&lt;br /&gt;
            return entrada&lt;br /&gt;
&lt;br /&gt;
def pedir_numero_limite(invitacion, minimo=MIN, maximo=MAX):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Esta función utiliza la anterior y agrega una post-condición&lt;br /&gt;
    sobre los límites del número a introducir&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
&lt;br /&gt;
        # Se pide un número&lt;br /&gt;
        invitacion = &amp;quot;{} entre {} y {} incluidos&amp;quot;.format(invitacion, minimo, maximo)&lt;br /&gt;
        entrada = pedir_numero(invitacion)&lt;br /&gt;
&lt;br /&gt;
        if minimo &amp;lt;= entrada &amp;lt;= maximo:&lt;br /&gt;
            # Tenemos lo que queríamos, se sale del bucle saliendo de la función&lt;br /&gt;
            return entrada&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar_una_vez(numero, minimo, maximo):&lt;br /&gt;
    intento = pedir_numero_limite(&amp;quot;Adivine el número&amp;quot;, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
    # Se comprueba si el intento es correcto o no&lt;br /&gt;
    if intento &amp;lt; numero:&lt;br /&gt;
        print(&amp;quot;Demasiado pequeño&amp;quot;)&lt;br /&gt;
        minimo = intento + 1&lt;br /&gt;
        victoria = False&lt;br /&gt;
    elif intento &amp;gt; numero:&lt;br /&gt;
        print(&amp;quot;Demasiado grande&amp;quot;)&lt;br /&gt;
        maximo = intento - 1&lt;br /&gt;
        victoria = False&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;¡Ha ganado!&amp;quot;)&lt;br /&gt;
        victoria = True&lt;br /&gt;
        minimo = maximo = intento&lt;br /&gt;
    return victoria, minimo, maximo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def decidir_limites():&lt;br /&gt;
    while True:&lt;br /&gt;
        minimo = pedir_numero(&amp;quot;¿Cuál es el límite inferior?&amp;quot;)&lt;br /&gt;
        maximo = pedir_numero(&amp;quot;¿Cuál es el límite superior?&amp;quot;)&lt;br /&gt;
        if maximo &amp;gt; minimo:&lt;br /&gt;
            return minimo, maximo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def pedir_numero_incognita(minimo, maximo):&lt;br /&gt;
    #return pedir_numero_limite(&amp;quot;Introduzca el número a adivinar&amp;quot;,&lt;br /&gt;
    #                                    minimo, maximo)&lt;br /&gt;
    return random.randint(minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar_una_PARTIDA(numero, minimo, maximo):&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
        # que permite jugar varias veces&lt;br /&gt;
&lt;br /&gt;
        victoria, minimo, maximo = jugar_una_vez(numero, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
        if (victoria):&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar():&lt;br /&gt;
    minimo, maximo = decidir_limites()&lt;br /&gt;
    numero = pedir_numero_incognita(minimo, maximo)&lt;br /&gt;
    jugar_una_PARTIDA(numero, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    print(&amp;quot;Se ha ejecutado el módulo&amp;quot;)&lt;br /&gt;
    jugar()&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Se ha importado el módulo&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Cobro multa, validar fecha, importe y DNI.'''&lt;br /&gt;
&lt;br /&gt;
Introducir la fecha y validar si es correcta.&lt;br /&gt;
Introducir el importe a pagar (150€), que debe existir en el sistema.&lt;br /&gt;
Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta.&lt;br /&gt;
Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras:&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usar funciones para:&lt;br /&gt;
Validar la fecha.&lt;br /&gt;
Validar el importe introducido&lt;br /&gt;
Validar el DNI y otra que te devuelva la letra del mismo&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
def dni_correcto(dni):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Valida el DNI.&lt;br /&gt;
&lt;br /&gt;
    El DNI será válido cuando tenga nueve caracteres, los ocho primeros&lt;br /&gt;
    sean números y la letra sea correcta.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return len(dni) == 9 and dni[:8].isdecimal() and letra_dni_correcta(dni)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def letra_dni_correcta(dni):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Valida la letra del DNI pasado como parámetro.&lt;br /&gt;
&lt;br /&gt;
    La letra será válida si coincide con la letra resultante de usar el índice del&lt;br /&gt;
    resto de la división del número del DNI entre 23 para la cadena de letras:&lt;br /&gt;
    &amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    num_dni = int(dni[:8])&lt;br /&gt;
    letra_dni = dni[8].upper()&lt;br /&gt;
    return letra_dni == &amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;[num_dni % 23]&lt;br /&gt;
&lt;br /&gt;
def comprobar_fecha(text):&lt;br /&gt;
    try:&lt;br /&gt;
        from datetime import datetime&lt;br /&gt;
        fecha = text&lt;br /&gt;
        datetime.strptime(fecha, '%Y/%m/%d')&lt;br /&gt;
        print(&amp;quot;Fecha válida&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Fecha inválida&amp;quot;)    &lt;br /&gt;
&lt;br /&gt;
# ---------&lt;br /&gt;
# Principal&lt;br /&gt;
# ---------&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Multa a pagar por escupir en la calle - Valor 150€&amp;quot;)&lt;br /&gt;
valor = 150&lt;br /&gt;
&lt;br /&gt;
fecha = input(&amp;quot;Dame una fecha (YYYY/MM/DD): &amp;quot;)&lt;br /&gt;
impo = int(input(&amp;quot;Entrar el importe a pagar: &amp;quot; ))&lt;br /&gt;
dni = input(&amp;quot;Dame un DNI: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ret=(comprobar_fecha(fecha))&lt;br /&gt;
if ret != &amp;quot;ERROR&amp;quot;:&lt;br /&gt;
    if impo == valor:&lt;br /&gt;
        if dni_correcto(dni):&lt;br /&gt;
            print(&amp;quot;El DNI&amp;quot;, dni, &amp;quot;es válido&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Operación realizada con éxito&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;El DNI&amp;quot;, dni, &amp;quot;es incorrecto&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;El importe a pagar debe ser&amp;quot;, valor) &lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;El formato debe ser  YYYY/MM/DD&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''6º Llamada a funciones externas:.'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que llame a tres funciones externas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La primera que diga: Soy la función 1&lt;br /&gt;
&lt;br /&gt;
Para la función 2, pedir un parámetro desde el programa principal, pasárselo a la función 2 y mostrar:  Soy la función 2 y me has llamado con el parámetro {x}&lt;br /&gt;
&lt;br /&gt;
Tercera función: introducir un nuevo parámetro y mostrar la longitud de dicho parámetro.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17527</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17527"/>
				<updated>2023-11-09T18:03:29Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import random&lt;br /&gt;
&lt;br /&gt;
MIN = 0&lt;br /&gt;
MAX = 99&lt;br /&gt;
&lt;br /&gt;
minimo = ''&lt;br /&gt;
maximo = ''&lt;br /&gt;
&lt;br /&gt;
def pedir_numero(invitacion):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Esta función se contenta con comprobar que se obtiene un número&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
&lt;br /&gt;
        # Se pide un número&lt;br /&gt;
        print(invitacion, end=&amp;quot;: &amp;quot;)&lt;br /&gt;
        entrada = input()&lt;br /&gt;
&lt;br /&gt;
        try:&lt;br /&gt;
            entrada = int(entrada)&lt;br /&gt;
        except:&lt;br /&gt;
            print(&amp;quot;Solo están autorizados los caracteres [0-9].&amp;quot;, file=sys.stderr)&lt;br /&gt;
        else:&lt;br /&gt;
            # Tenemos lo que queríamos, se sale del bucle saliendo de la función&lt;br /&gt;
            return entrada&lt;br /&gt;
&lt;br /&gt;
def pedir_numero_limite(invitacion, minimo=MIN, maximo=MAX):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Esta función utiliza la anterior y agrega una post-condición&lt;br /&gt;
    sobre los límites del número a introducir&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
&lt;br /&gt;
        # Se pide un número&lt;br /&gt;
        invitacion = &amp;quot;{} entre {} y {} incluidos&amp;quot;.format(invitacion, minimo, maximo)&lt;br /&gt;
        entrada = pedir_numero(invitacion)&lt;br /&gt;
&lt;br /&gt;
        if minimo &amp;lt;= entrada &amp;lt;= maximo:&lt;br /&gt;
            # Tenemos lo que queríamos, se sale del bucle saliendo de la función&lt;br /&gt;
            return entrada&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar_una_vez(numero, minimo, maximo):&lt;br /&gt;
    intento = pedir_numero_limite(&amp;quot;Adivine el número&amp;quot;, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
    # Se comprueba si el intento es correcto o no&lt;br /&gt;
    if intento &amp;lt; numero:&lt;br /&gt;
        print(&amp;quot;Demasiado pequeño&amp;quot;)&lt;br /&gt;
        minimo = intento + 1&lt;br /&gt;
        victoria = False&lt;br /&gt;
    elif intento &amp;gt; numero:&lt;br /&gt;
        print(&amp;quot;Demasiado grande&amp;quot;)&lt;br /&gt;
        maximo = intento - 1&lt;br /&gt;
        victoria = False&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;¡Ha ganado!&amp;quot;)&lt;br /&gt;
        victoria = True&lt;br /&gt;
        minimo = maximo = intento&lt;br /&gt;
    return victoria, minimo, maximo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def decidir_limites():&lt;br /&gt;
    while True:&lt;br /&gt;
        minimo = pedir_numero(&amp;quot;¿Cuál es el límite inferior?&amp;quot;)&lt;br /&gt;
        maximo = pedir_numero(&amp;quot;¿Cuál es el límite superior?&amp;quot;)&lt;br /&gt;
        if maximo &amp;gt; minimo:&lt;br /&gt;
            return minimo, maximo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def pedir_numero_incognita(minimo, maximo):&lt;br /&gt;
    #return pedir_numero_limite(&amp;quot;Introduzca el número a adivinar&amp;quot;,&lt;br /&gt;
    #                                    minimo, maximo)&lt;br /&gt;
    return random.randint(minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar_una_PARTIDA(numero, minimo, maximo):&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
        # que permite jugar varias veces&lt;br /&gt;
&lt;br /&gt;
        victoria, minimo, maximo = jugar_una_vez(numero, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
        if (victoria):&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar():&lt;br /&gt;
    minimo, maximo = decidir_limites()&lt;br /&gt;
    numero = pedir_numero_incognita(minimo, maximo)&lt;br /&gt;
    jugar_una_PARTIDA(numero, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    print(&amp;quot;Se ha ejecutado el módulo&amp;quot;)&lt;br /&gt;
    jugar()&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Se ha importado el módulo&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Cobro multa, validar fecha, importe y DNI.'''&lt;br /&gt;
&lt;br /&gt;
Introducir la fecha y validar si es correcta.&lt;br /&gt;
Introducir el importe a pagar (150€), que debe existir en el sistema.&lt;br /&gt;
Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta.&lt;br /&gt;
Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras:&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usar funciones para:&lt;br /&gt;
Validar la fecha.&lt;br /&gt;
Validar el importe introducido&lt;br /&gt;
Validar el DNI y otra que te devuelva la letra del mismo&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
def dni_correcto(dni):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Valida el DNI.&lt;br /&gt;
&lt;br /&gt;
    El DNI será válido cuando tenga nueve caracteres, los ocho primeros&lt;br /&gt;
    sean números y la letra sea correcta.&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return len(dni) == 9 and dni[:8].isdecimal() and letra_dni_correcta(dni)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def letra_dni_correcta(dni):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Valida la letra del DNI pasado como parámetro.&lt;br /&gt;
&lt;br /&gt;
    La letra será válida si coincide con la letra resultante de usar el índice del&lt;br /&gt;
    resto de la división del número del DNI entre 23 para la cadena de letras:&lt;br /&gt;
    &amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    num_dni = int(dni[:8])&lt;br /&gt;
    letra_dni = dni[8].upper()&lt;br /&gt;
    return letra_dni == &amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;[num_dni % 23]&lt;br /&gt;
&lt;br /&gt;
def comprobar_fecha(text):&lt;br /&gt;
    try:&lt;br /&gt;
        from datetime import datetime&lt;br /&gt;
        fecha = text&lt;br /&gt;
        datetime.strptime(fecha, '%Y/%m/%d')&lt;br /&gt;
        print(&amp;quot;Fecha válida&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Fecha inválida&amp;quot;)    &lt;br /&gt;
&lt;br /&gt;
# ---------&lt;br /&gt;
# Principal&lt;br /&gt;
# ---------&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Multa a pagar por escupir en la calle - Valor 150€&amp;quot;)&lt;br /&gt;
valor = 150&lt;br /&gt;
&lt;br /&gt;
fecha = input(&amp;quot;Dame una fecha (YYYY/MM/DD): &amp;quot;)&lt;br /&gt;
impo = int(input(&amp;quot;Entrar el importe a pagar: &amp;quot; ))&lt;br /&gt;
dni = input(&amp;quot;Dame un DNI: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
ret=(comprobar_fecha(fecha))&lt;br /&gt;
if ret != &amp;quot;ERROR&amp;quot;:&lt;br /&gt;
    if impo == valor:&lt;br /&gt;
        if dni_correcto(dni):&lt;br /&gt;
            print(&amp;quot;El DNI&amp;quot;, dni, &amp;quot;es válido&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Operación realizada con éxito&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;El DNI&amp;quot;, dni, &amp;quot;es incorrecto&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;El importe a pagar debe ser&amp;quot;, valor) &lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;El formato debe ser  YYYY/MM/DD&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''6º Llamada a funciones externas:.'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que llame a tres funciones externas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La primera que diga: Soy la función 1&lt;br /&gt;
&lt;br /&gt;
Para la función 2, pedir un parámetro desde el programa principal, pasárselo a la función 2 y mostrar:  Soy la función 2 y me has llamado con el parámetro {x}&lt;br /&gt;
&lt;br /&gt;
Tercera función: introducir un nuevo parámetro y mostrar la longitud de dicho parámetro.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17497</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17497"/>
				<updated>2023-11-02T16:26:25Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import random&lt;br /&gt;
&lt;br /&gt;
MIN = 0&lt;br /&gt;
MAX = 99&lt;br /&gt;
&lt;br /&gt;
minimo = ''&lt;br /&gt;
maximo = ''&lt;br /&gt;
&lt;br /&gt;
def pedir_numero(invitacion):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Esta función se contenta con comprobar que se obtiene un número&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
&lt;br /&gt;
        # Se pide un número&lt;br /&gt;
        print(invitacion, end=&amp;quot;: &amp;quot;)&lt;br /&gt;
        entrada = input()&lt;br /&gt;
&lt;br /&gt;
        try:&lt;br /&gt;
            entrada = int(entrada)&lt;br /&gt;
        except:&lt;br /&gt;
            print(&amp;quot;Solo están autorizados los caracteres [0-9].&amp;quot;, file=sys.stderr)&lt;br /&gt;
        else:&lt;br /&gt;
            # Tenemos lo que queríamos, se sale del bucle saliendo de la función&lt;br /&gt;
            return entrada&lt;br /&gt;
&lt;br /&gt;
def pedir_numero_limite(invitacion, minimo=MIN, maximo=MAX):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Esta función utiliza la anterior y agrega una post-condición&lt;br /&gt;
    sobre los límites del número a introducir&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
&lt;br /&gt;
        # Se pide un número&lt;br /&gt;
        invitacion = &amp;quot;{} entre {} y {} incluidos&amp;quot;.format(invitacion, minimo, maximo)&lt;br /&gt;
        entrada = pedir_numero(invitacion)&lt;br /&gt;
&lt;br /&gt;
        if minimo &amp;lt;= entrada &amp;lt;= maximo:&lt;br /&gt;
            # Tenemos lo que queríamos, se sale del bucle saliendo de la función&lt;br /&gt;
            return entrada&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar_una_vez(numero, minimo, maximo):&lt;br /&gt;
    intento = pedir_numero_limite(&amp;quot;Adivine el número&amp;quot;, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
    # Se comprueba si el intento es correcto o no&lt;br /&gt;
    if intento &amp;lt; numero:&lt;br /&gt;
        print(&amp;quot;Demasiado pequeño&amp;quot;)&lt;br /&gt;
        minimo = intento + 1&lt;br /&gt;
        victoria = False&lt;br /&gt;
    elif intento &amp;gt; numero:&lt;br /&gt;
        print(&amp;quot;Demasiado grande&amp;quot;)&lt;br /&gt;
        maximo = intento - 1&lt;br /&gt;
        victoria = False&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;¡Ha ganado!&amp;quot;)&lt;br /&gt;
        victoria = True&lt;br /&gt;
        minimo = maximo = intento&lt;br /&gt;
    return victoria, minimo, maximo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def decidir_limites():&lt;br /&gt;
    while True:&lt;br /&gt;
        minimo = pedir_numero(&amp;quot;¿Cuál es el límite inferior?&amp;quot;)&lt;br /&gt;
        maximo = pedir_numero(&amp;quot;¿Cuál es el límite superior?&amp;quot;)&lt;br /&gt;
        if maximo &amp;gt; minimo:&lt;br /&gt;
            return minimo, maximo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def pedir_numero_incognita(minimo, maximo):&lt;br /&gt;
    #return pedir_numero_limite(&amp;quot;Introduzca el número a adivinar&amp;quot;,&lt;br /&gt;
    #                                    minimo, maximo)&lt;br /&gt;
    return random.randint(minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar_una_PARTIDA(numero, minimo, maximo):&lt;br /&gt;
    while True:&lt;br /&gt;
        # Se entra en un bucle infinito&lt;br /&gt;
        # que permite jugar varias veces&lt;br /&gt;
&lt;br /&gt;
        victoria, minimo, maximo = jugar_una_vez(numero, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
        if (victoria):&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def jugar():&lt;br /&gt;
    minimo, maximo = decidir_limites()&lt;br /&gt;
    numero = pedir_numero_incognita(minimo, maximo)&lt;br /&gt;
    jugar_una_PARTIDA(numero, minimo, maximo)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == '__main__':&lt;br /&gt;
    print(&amp;quot;Se ha ejecutado el módulo&amp;quot;)&lt;br /&gt;
    jugar()&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Se ha importado el módulo&amp;quot;)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Cobro multa, validar fecha, importe y DNI.'''&lt;br /&gt;
&lt;br /&gt;
Introducir la fecha y validar si es correcta.&lt;br /&gt;
Introducir el importe a pagar (150€), que debe existir en el sistema.&lt;br /&gt;
Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta.&lt;br /&gt;
Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras:&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usar funciones para:&lt;br /&gt;
Validar la fecha.&lt;br /&gt;
Validar el importe introducido&lt;br /&gt;
Validar el DNI y otra que te devuelva la letra del mismo&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''6º Llamada a funciones externas:.'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que llame a tres funciones externas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La primera que diga: Soy la función 1&lt;br /&gt;
&lt;br /&gt;
Para la función 2, pedir un parámetro desde el programa principal, pasárselo a la función 2 y mostrar:  Soy la función 2 y me has llamado con el parámetro {x}&lt;br /&gt;
&lt;br /&gt;
Tercera función: introducir un nuevo parámetro y mostrar la longitud de dicho parámetro.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17496</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17496"/>
				<updated>2023-11-01T16:54:04Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Cobro multa, validar fecha, importe y DNI.'''&lt;br /&gt;
&lt;br /&gt;
Introducir la fecha y validar si es correcta.&lt;br /&gt;
Introducir el importe a pagar (150€), que debe existir en el sistema.&lt;br /&gt;
Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta.&lt;br /&gt;
Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras:&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usar funciones para:&lt;br /&gt;
Validar la fecha.&lt;br /&gt;
Validar el importe introducido&lt;br /&gt;
Validar el DNI y otra que te devuelva la letra del mismo&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''6º Llamada a funciones externas:.'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que llame a tres funciones externas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La primera que diga: Soy la función 1&lt;br /&gt;
&lt;br /&gt;
Para la función 2, pedir un parámetro desde el programa principal, pasárselo a la función 2 y mostrar:  Soy la función 2 y me has llamado con el parámetro {x}&lt;br /&gt;
&lt;br /&gt;
Tercera función: introducir un nuevo parámetro y mostrar la longitud de dicho parámetro.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17495</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17495"/>
				<updated>2023-11-01T16:52:22Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Cobro multa, validar fecha, importe y DNI.'''&lt;br /&gt;
&lt;br /&gt;
Introducir la fecha y validar si es correcta.&lt;br /&gt;
Introducir el importe a pagar (150€), que debe existir en el sistema.&lt;br /&gt;
Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta.&lt;br /&gt;
Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras:&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usar funciones para:&lt;br /&gt;
Validar la fecha.&lt;br /&gt;
Validar el importe introducido&lt;br /&gt;
Validar el DNI y otra que te devuelva la letra del mismo&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''6º Llamada a funciones externas:.'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que llame a tres funciones externas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La primera que diga: Soy la función 1&lt;br /&gt;
&lt;br /&gt;
Para la función 2, pedir un parametro desde el programam principal, pasarselo a la función 2 y mostrar:  Soy la función 2 y me has llamado con el parametro {x}&lt;br /&gt;
&lt;br /&gt;
Tercera función: introducir un nuevo parámetros y mostra la longitud de dicho parámetros.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17494</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17494"/>
				<updated>2023-11-01T16:51:16Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Cobro multa, validar fecha, importe y DNI.'''&lt;br /&gt;
&lt;br /&gt;
Introducir la fecha y validar si es correcta.&lt;br /&gt;
Introducir el importe a pagar (150€), que debe existir en el sistema.&lt;br /&gt;
Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta.&lt;br /&gt;
Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras:&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usar funciones para:&lt;br /&gt;
Validar la fecha.&lt;br /&gt;
Validar el importe introducido&lt;br /&gt;
Validar el DNI y otra que te devuelva la letra del mismo&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''6º Llamada a funciones externas:.'''&lt;br /&gt;
Crear un programa que llame a tres funciones externas:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La primera que diga: Soy la función 1&lt;br /&gt;
&lt;br /&gt;
Para la función 2, pedir un parametro desde el programam principal, pasarselo a la función 2 y mostrar:  Soy la función 2 y me has llamado con el parametro {x}&lt;br /&gt;
&lt;br /&gt;
Tercera función: introducir un nuevo parámetros y mostra la longitud de dicho parámetros.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17493</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17493"/>
				<updated>2023-11-01T16:50:27Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Cobro multa, validar fecha, importe y DNI.'''&lt;br /&gt;
&lt;br /&gt;
Introducir la fecha y validar si es correcta.&lt;br /&gt;
Introducir el importe a pagar (150€), que debe existir en el sistema.&lt;br /&gt;
Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta.&lt;br /&gt;
Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras:&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usar funciones para:&lt;br /&gt;
Validar la fecha.&lt;br /&gt;
Validar el importe introducido&lt;br /&gt;
Validar el DNI y otra que te devuelva la letra del mismo&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''6º Llamada a funciones externas:.'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Crear un programa que llame a tres funciones externas:&lt;br /&gt;
&lt;br /&gt;
La primera que diga: Soy la función 1&lt;br /&gt;
&lt;br /&gt;
Para la función 2, pedir un parametro desde el programam principal, pasarselo a la función 2 y mostrar:  Soy la función 2 y me has llamado con el parametro {x}&lt;br /&gt;
&lt;br /&gt;
Tercera función: introducir un nuevo parámetros y mostra la longitud de dicho parámetros.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17492</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17492"/>
				<updated>2023-11-01T13:04:05Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Cobro multa, validar fecha, importe y DNI.'''&lt;br /&gt;
&lt;br /&gt;
Introducir la fecha y validar si es correcta.&lt;br /&gt;
Introducir el importe a pagar (150€), que debe existir en el sistema.&lt;br /&gt;
Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta.&lt;br /&gt;
Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras:&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usar funciones para:&lt;br /&gt;
Validar la fecha.&lt;br /&gt;
Validar el importe introducido&lt;br /&gt;
Validar el DNI y otra que te devuelva la letra del mismo&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17491</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17491"/>
				<updated>2023-11-01T13:02:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Cobro multa, validar fehca, importe y DNI.'''&lt;br /&gt;
&lt;br /&gt;
Introducir la fecha y validar si es correcta.&lt;br /&gt;
Introducir el importe a pagar (150€), que debe existir en el sistema.&lt;br /&gt;
Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta.&lt;br /&gt;
Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras:&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Usar funciones para:&lt;br /&gt;
Validar la fecha.&lt;br /&gt;
Validar el importe introducido&lt;br /&gt;
Validar el DNI y otra que te devuelva la letra del mismo&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17490</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17490"/>
				<updated>2023-11-01T13:00:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Cobro multa, validar fehca, importe y DNI.'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Introducir la fecha y validar si es correcta.&lt;br /&gt;
Introducir el importe a pagar (150€), que debe existir en el sistema.&lt;br /&gt;
Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta.&lt;br /&gt;
Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras:&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Usar funciones para:&lt;br /&gt;
Validar la fecha.&lt;br /&gt;
Calidar el importe introducido&lt;br /&gt;
Validar el DNI y otra que te devuelva la letra del mismo&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17486</id>
		<title>NF2: Generació de documents web amb llenguatges de guions</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17486"/>
				<updated>2023-10-27T15:33:31Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introducció llenguatges de programació del costat Servidor =&lt;br /&gt;
&lt;br /&gt;
Existeix una multitud de llenguatges concebuts o no per a Internet. Cadascun d'ells explota més a fons certes característiques que ho fan més o menys útils per desenvolupar diferents aplicacions.&lt;br /&gt;
Un '''llenguatge del costat del servidor''' és aquell que '''s'executa en el servidor web, just abans que s'enviï la pàgina''' a través d'Internet al client. Les pàgines que s'executen en el servidor poden realitzar accessos a bases de dades, connexions en xarxa, i altres tasques per crear la pàgina final que veurà el client.&lt;br /&gt;
D'altra banda, els '''llenguatges de costat client''' (entre els quals no només es troba l'HTML sinó també el Java i el Javascript els quals són simplement inclosos en el codi HTML) són aquells que '''poden ser directament executats pel navegador i no necessiten un pretractament'''.&lt;br /&gt;
[[Fitxer:serverside.jpg|center]]&lt;br /&gt;
Els llenguatges de costat servidor més àmpliament utilitzats per al desenvolupament de pàgines dinàmiques són l'ASP, JSP, PERL i PHP.&lt;br /&gt;
== ASP.NET ==&lt;br /&gt;
Llenguatge comercialitzat per Microsoft, i usat per programadors per desenvolupar entre altres funcions, llocs web. ASP.NET és el successor de la tecnologia ASP, va ser llançada al mercat mitjançant una estratègia de mercat denominada .NET.&lt;br /&gt;
Es desenvolupat per resoldre les limitants que brindava el teu antecessor ASP. Per al desenvolupament d'ASP.NET es pot utilitzar C#, VB.NET o J#. Els arxius compten amb l'extensió (aspx). Per al seu funcionament de les pàgines es necessita tenir instal·lat IIS amb el Framework .Net. Microsft Windows 2003 inclou aquest framework, solament es necessitarà instal·lar-ho en versions anteriors.&lt;br /&gt;
El llenguatge ASP consisteix en una sèrie de classes .NET utilitzades per crear aplicacions Web, tant del costat client (Web Form) com del costat servidor (Web Service). La integració de nadiva .NET Framework amb el sistema operatiu Windows Server 2003 fa que la seva execució sigui més estable i ràpida que altres llenguatges de programació.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Completament orientat a objectes.&lt;br /&gt;
*Controls d'usuari i personalitzats.&lt;br /&gt;
*Divisió entre la capa d'aplicació o disseny i el codi.&lt;br /&gt;
*Facilita el manteniment de grans aplicacions.&lt;br /&gt;
*Increment de velocitat de resposta del servidor.&lt;br /&gt;
*Major velocitat.&lt;br /&gt;
*Major seguretat.&lt;br /&gt;
&lt;br /&gt;
'''Desavantatges: '''&lt;br /&gt;
*Major consum de recursos.&lt;br /&gt;
*Tecnologia propietària.&lt;br /&gt;
*Hostalatge de llocs web costosos.&lt;br /&gt;
&lt;br /&gt;
== JSP: Java Server Pages ==&lt;br /&gt;
És un llenguatge per a la creació de llocs web dinàmics, acrònim de Java Server Pages. Està orientat a desenvolupar pàgines web en Java. JSP és un llenguatge multiplataforma.&lt;br /&gt;
JSP va ser desenvolupat per Sun Microsystems. Comparteix avantatges similars a les d'ASP.NET, desenvolupat per a la creació d'aplicacions web potents. Posseeix un motor de pàgines basat en els servlets de Java. Per al seu funcionament es necessita tenir instal·lat un servidor Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Característiques'''&lt;br /&gt;
*Codi separat de la lògica del programa.&lt;br /&gt;
*Les pàgines són compilades en la primera petició.&lt;br /&gt;
*Permet separar la part dinàmica de l'estàtica a les pàgines web.&lt;br /&gt;
*Els arxius es troben amb l'extensió (jsp).&lt;br /&gt;
*El codi JSP pot ser incrustat en codi HTML.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Execució ràpida del servlets.&lt;br /&gt;
*Crear pàgines del costat del servidor.&lt;br /&gt;
*Multiplataforma.&lt;br /&gt;
*Codi ben estructurat.&lt;br /&gt;
*Integritat amb els mòduls de Java.&lt;br /&gt;
*La part dinàmica està escrita en Java.&lt;br /&gt;
== PERL (Practical Extraction and Report Language) ==&lt;br /&gt;
És un llenguatge de programació desenvolupat per Larry Wall (lwall at netlabs.com) inspirat en altres eines d'UNIX com són: sigueu, grep, awk, c-shell, per a l'administració de tasques pròpies de sistemes UNIX. No estableix cap filosofia de programació concreta. No es pot dir que sigui orientat a objectes, modular o estructurat encara que suporta directament tots aquests paradigmes; el seu punt fort són les labors de processament de textos i arxius. Llenguatge de programació basat en scripts portable a gairebé qualsevol plataforma. És molt utilitzat per escriure CGIs. Un dels seus elements més potents són les expressions regulars, que a partir de la seva versió en Perl han estat adoptades per altres llenguatges i plataformes com .NET o Javascript.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Es poden ajuntar diversos programes d'una forma senzilla per aconseguir una meta determinada. Els usuaris de Windows agrairan aquesta propietat ja que normalment emmalalteixen d'un bon llenguatge tipus “script”.&lt;br /&gt;
*És relativament ràpid per a un llenguatge tipus “script”.&lt;br /&gt;
*Està disponible en múltiples plataformes i sistemes operatius (UNIX, Linux i Windows). Un programa que s'escrigui tenint en compte la compatibilitat pot ser escrit en una plataforma i executat en una altra.&lt;br /&gt;
*Hi ha una col·lecció enorme de mòduls que poden ser incorporats a qualsevol “script” de Perl. Estan disponibles en el CPAN (“Comprehensive Perl Arxivi Network”). En particular existeix una extensió per a càlcul numèric denominada PDL.&lt;br /&gt;
*Perl és gratuït. Molt més que això, és “Programari Lliure”. Això vol dir que el codi font està disponible perquè qualsevol el pugui veure o modificar, i el que és més important, sempre ho estarà. Encara que mai pretenguis canviar el codi, és important disposar de la possibilitat de fer-ho, ja que sempre es podrà contractar a una tercera persona perquè ho modifiqui en el cas que hi hagi un error, i hauria de ser possible solucionar-ho.&lt;br /&gt;
*Li atorga al programador molta llibertat perquè faci el programa com vulgui. Tal com diu l'eslògan de Perl “Hi ha més d'una forma de fer-ho”&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
PHP és l'acrònim de Hipertext Preprocesor. És un llenguatge de programació del costat del servidor gratuït i independent de plataforma, ràpid, amb una gran llibreria de funcions i molta documentació. Va ser creat originalment en 1994 per Rasmus Lerdorf, però com PHP està desenvolupat en política de codi obert, al llarg de la seva història ha tingut moltes contribucions d'altres desenvolupadors.&lt;br /&gt;
El client solament rep una pàgina amb el codi HTML resultant de l'execució de la PHP. Com la pàgina resultant conté únicament codi HTML, és compatible amb tots els navegadors.&lt;br /&gt;
&lt;br /&gt;
https://luisjordan.net/node-js/node-js-vs-php-comparaciones-cms-beneficios-y-tiempos-de-respuesta/&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Molt fàcil d'aprendre.&lt;br /&gt;
*Es caracteritza per ser un llenguatge molt ràpid.&lt;br /&gt;
*Suporta en certa mesura l'orientació a objecte. Classes i herència.&lt;br /&gt;
*És un llenguatge multiplataforma: Linux, Windows, entre uns altres.&lt;br /&gt;
*Capacitat de connexió amb la majoria dels manejadores de base de dades: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre unes altres.&lt;br /&gt;
*Capacitat d'expandir el seu potencial utilitzant mòduls.&lt;br /&gt;
*Posseeix documentació a la seva pàgina oficial la qual inclou descripció i exemples de cadascuna de les seves funcions.&lt;br /&gt;
*És lliure, per la qual cosa es presenta com una alternativa de fàcil accés per a tots.&lt;br /&gt;
*Inclou gran quantitat de funcions.&lt;br /&gt;
*No requereix definició de tipus de variables ni maneig detallat del baix nivell.&lt;br /&gt;
&lt;br /&gt;
= Preparació de l'entorn =&lt;br /&gt;
== Instal·lació de servidors d'aplicacions Web ==&lt;br /&gt;
Internet s’ha convertit en la principal eina d’intercanvi d’informació a la societat actual. La connexió dels ordinadors a les xarxes locals i aquestes xarxes a d’altres de grans dimensions ha possibilitat la comunicació global d’informació entre els ordinadors arreu del món. Per poder oferir serveis web, els servidors han de tenir instal·lats una sèrie de serveis. El servidor web permet l’enviament de continguts a altres ordinadors a través de la xarxa. Els preprocessadors d’hipertext (com PHP) permeten crear continguts web de forma dinàmica. Els servidors de bases de dades permeten emmagatzemar informació de forma estructurada que es pot fer servir per generar contingut web. Aquests serveis han de ser instal·lats i configurats correctament abans de començar a crear el contingut web dinàmic del nostre web.&lt;br /&gt;
&lt;br /&gt;
Un '''servidor web''' és una peça de programari que respon a les peticions dels navegadors i lliura la pàgina per al navegador a través d’Internet. Quan es crida a una pàgina web per l’adreça –l’URL (uniform resource locator), per exemple, www.infomerce.es/index.html-, la comunicació entre el navegador i el servidor és possible gràcies a tres protocols:&lt;br /&gt;
* TCP(Transmission Control Protocol, protocol de control de transmissió): és el responsable de fer que el missatge arribi a la destinació sense errors.&lt;br /&gt;
* IP(Internet Protocol): és el responsable de fer que el missatge trobi el camí fins al servidor.&lt;br /&gt;
* HTTP(Hypertext Transfer Protocol, protocol de transferència d’hipertext): és el protocol que ha indicat l’usuari a l’hora de demanar el recurs al servidor. La primera part d’un recurs URL correspon al protocol que utilitzaran client i servidor per intercanviar dades.&lt;br /&gt;
== HTTP: comunicació entre servidor i client ==&lt;br /&gt;
Un cop establerta la connexió entra en joc el protocol HTTP: el navegador envia una petició al servidor en què sol·licita el recurs index.html. El servidor processa aquesta petició i retorna la pàgina sol·licitada al navegador, que interpreta les etiquetes HTML i la presenta a l’usuari.&lt;br /&gt;
[[Fitxer:peticiohttp.jpg|center]]&lt;br /&gt;
La informació que el client envia al servidor en la petició és la següent:&lt;br /&gt;
* El mètode HTTP: l’acció que s’ha de fer.&lt;br /&gt;
* El recurs a què s’ha d’accedir (una part de l’URL).&lt;br /&gt;
* La informació que l’usuari envia al servidor.&lt;br /&gt;
La informació que el servidor envia en la resposta té dues parts ben diferenciades: &lt;br /&gt;
* La capçalera: conté el codi que indica si la petició s’ha complert. També conté el tipus de contingut que enviarà al client.&lt;br /&gt;
* El contingut: (text, codi HTML, imatges, etc.) del recurs demanat.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Preparació M.V. amb Ubuntu i PHP ===&lt;br /&gt;
Es tracta d'importar una M.V. amb Ubuntu Server. Aquesta màquina virtual la utilitzarem al llarg del curs per desenvolupar programes amb el llenguatge PHP. LA M.V. ha de tenir les següents característiques:&lt;br /&gt;
*512 MB de Ram&lt;br /&gt;
*Targeta mode Pont (Has de reinicialitzar la @MAC i esborrar el fitxer: /etc/udev/rules.d/70-persistent-net.rules)&lt;br /&gt;
*Configura la @IP. &lt;br /&gt;
Instal·la el següent programari:&lt;br /&gt;
*openssh-server (per permetre comunicacions remotes)&lt;br /&gt;
*Servidor Web apache2&lt;br /&gt;
*Servidor PHP&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Primer projecte amb NetBeans ===&lt;br /&gt;
Crea un projecte PHP amb NetBeans. Fes que automàticament guardi tots els fitxers a la màquina virtual creada al apartat anterior. Crea una pàgina d'exemple i comprova que funciona.&lt;br /&gt;
La pàgina d'exemple pot ser la següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
     	&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;?php&lt;br /&gt;
            echo &amp;quot;Primera Pàgina amb PHP&amp;quot;; &lt;br /&gt;
          ?&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= El Llenguatge PHP =&lt;br /&gt;
== Introducció ==&lt;br /&gt;
'''PHP''' és un llenguatge de programació obert que s’integra directament en pàgines HTML. El seu ús ha esdevingut gairebé imprescindible en les pàgines que han d’utilitzar bases de dades o formularis.&lt;br /&gt;
Rasmus Lerdorf és el creador del llenguatge PHP. El 1995 presenta la primera edició d’aquest llenguatge amb el nom de Personal Home Page tools amb llicència pública GNU. Per crear el PHP, Rasmus utilitza el codi de programació C.&lt;br /&gt;
&lt;br /&gt;
El '''codi PHP''' que escriviu, '''l’haureu d’incrustar dins de codi HTML''', concretament dins les etiquetes \&amp;lt;body\&amp;gt; del document. Mitjançant unes marques l’HTML no interpretarà el codi PHP, el qual, i mitjançant les mateixes marques, s’executarà en el servidor.&lt;br /&gt;
&lt;br /&gt;
El codi PHP s’executa en un servidor i mostra el resultat en un client. Visualitzareu els resultats amb un navegador web.&lt;br /&gt;
&lt;br /&gt;
Quan arrenca el PHP es fa la lectura del fitxer '''php.ini'''. Aquest fitxer conté la configuració del PHP i es crea durant la instal·lació del PHP. És possible que necessiteu fer canvis en el fitxer de configuració, preneu la precaució de fer-ne una còpia de seguretat abans de fer aquestes modificacions.&lt;br /&gt;
Una inspecció visual del fitxer php.ini us servirà per comprendre’n el funcionament. Depenent del valor de les variables que conté aquest fitxer, el comportament del PHP variarà en la vostra màquina. Podeu comprovar que cada variable que forma part del fitxer està àmpliament comentada, amb comentaris que es marquen amb un punt i coma.&lt;br /&gt;
&lt;br /&gt;
== Mostrar Errors ==&lt;br /&gt;
Per mostrar els errors que fem al escriure programes en php s'ha d'especificar als fitxers que els vols veure per pantalla amb les següents sentències:&lt;br /&gt;
&lt;br /&gt;
http://www.anerbarrena.com/mostrar-errores-php-608/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* * ******************Errores******************* */&lt;br /&gt;
ini_set('display_errors', true);&lt;br /&gt;
error_reporting(E_ALL);&lt;br /&gt;
/* * ********************Usuarios****************** */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintaxi ==&lt;br /&gt;
=== Generalitats ===&lt;br /&gt;
La sintaxi d'un llenguatge de programació es defineix com el conjunt de regles que han de seguir-se en escriure el codi font dels programes per considerar-se com a correctes per a aquest llenguatge de programació.&lt;br /&gt;
Les normes bàsiques que defineixen la sintaxi de PHP són les següents:&lt;br /&gt;
*Si voleu que s’interpreti el vostre codi és imprescindible que encabiu el codi escrit en PHP entre dos delimitadors. Aquestes marques són &amp;lt;?php , que la fareu servir per indicar l’inici de codi en llenguatge PHP, i ?&amp;gt; , que utilitzareu per marcar el final del vostre codi PHP.&lt;br /&gt;
*Indicareu el final d’una instrucció amb punt i coma. Cada vegada que es detecti un punt i coma s’interpretarà el codi inserit fins a aquell punt.&lt;br /&gt;
*Els comentaris en PHP els podreu incloure mitjançant:&lt;br /&gt;
** Dues barres (//) o un coixinet (#) si voleu comentar una línia&lt;br /&gt;
** Una barra i un asterisc (/*) per indicar l’inici de comentari, i un asterisc i una barra per indicar el final de comentari si voleu comentar més d’una línia(/*).&lt;br /&gt;
*No es defineix el tipus de les variables: PHP és un llenguatge de programació que no obliga a declarar prèviament el nom de les variables que s’utilitzaran ni el seu tipus (és diu que és un llenguatge sense tipus o no tipat). Ara bé, tot i que existeixen els tipus de dades en PHP aquests no es comproven.&lt;br /&gt;
*No es distingeixen les majúscules i minúscules.&lt;br /&gt;
Exemples:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Aquí teniu una instrucció.&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;i aquí una altra instrucció.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Si voleu comentar una línia ho podeu fer d’aquesta manera...&lt;br /&gt;
#...o bé d’aquesta altra.&lt;br /&gt;
/* Però si necessiteu comentar&lt;br /&gt;
més línies aquesta és la millor&lt;br /&gt;
manera de fer − ho! */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Per representar una variable '''caldrà escriure el símbol del dòlar seguit pel nom que vulgueu posar'''. En el moment de donar nom a una variable heu de tenir en compte que es diferencien majúscules i minúscules i que haurà de començar amb una lletra o caràcter de subratllat.&lt;br /&gt;
En PHP, a diferència de molts altres llenguatges, no cal declarar una variable abans d’utilitzar-la. El símbol del dòlar és el que marca que es tracta d’una variable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$Nom='whovian';&lt;br /&gt;
$Familia='Informàtica';&lt;br /&gt;
$Cicle=&amp;quot;CFGS Desenvolupament d'aplicacions Web&amp;quot;;&lt;br /&gt;
$Modul = &amp;quot;DAW en entorn servidor&amp;quot;;&lt;br /&gt;
$Durada= 165;&lt;br /&gt;
echo &amp;quot;Hola $nom!&amp;lt;br&amp;gt;&lt;br /&gt;
Benvingut als estudis d’$Familia!!!&amp;lt;br&amp;gt;&lt;br /&gt;
Cicle: $Cicle&amp;lt;br&amp;gt;&lt;br /&gt;
Mòdul: $Modul&amp;lt;br&amp;gt;&lt;br /&gt;
Durada: $Durada hores&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com podeu veure, les variables poden adquirir qualsevol dels tipus suportats, i la variable $Durada emmagatzema l’enter 180, mentre que la resta de variables emmagatzemaran cadenes.&lt;br /&gt;
Les variables s’assignen per valor per defecte, però '''si voleu assignar un valor per referència''' ho haureu d’indicar fent servir el símbol''' &amp;amp; '''tot just davant de la variable&lt;br /&gt;
=== Àmbit de les variables ===&lt;br /&gt;
&lt;br /&gt;
Les variables tenen una vida determinada depenent d’on les declareu i com ho feu. És molt important conèixer l’àmbit de les variables per controlar els vostres codis. No comprendre aquesta part pot provocar fallades inesperades en les vostres creacions.&lt;br /&gt;
L’àmbit d’una variable és el context en què és definida.&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot declarar una variable nombroses vegades en àmbits diferents:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nom=’Nyoman’;&lt;br /&gt;
echo ’De moment $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
function canvi()&lt;br /&gt;
{&lt;br /&gt;
	$nom=’Ketut’;&lt;br /&gt;
	echo ’Però ara $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
canvi();&lt;br /&gt;
echo ’I de nou $nom torna a tenir el valor de ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadors ===&lt;br /&gt;
Permetran fer accions dins el codi. Podreu canviar i assignar valors, canviar l’adreça del codi, condicionar l’execució de blocs de codi i, en&lt;br /&gt;
definitiva, dotar de la complexitat necessària els vostres programes per aconseguir un objectiu.&lt;br /&gt;
Els operadors es poden agrupar en tres blocs segons el nombre de valors sobre els quals s’actua.&lt;br /&gt;
* L’operador '''unari''' opera sobre un valor i el que pot fer en aquest valor és negar-lo, incrementar-lo o decrementar-lo, entre altres coses.&lt;br /&gt;
* L’operador '''binari''' opera sobre dos valors i permet sumar-los, restar-los o comparar-los.&lt;br /&gt;
* L’operador '''ternari''' permet escollir entre dues expressions en funció d’una altra.&lt;br /&gt;
&lt;br /&gt;
'''Operadors Aritmètics '''&lt;br /&gt;
Teniu en compte que la divisió retornarà un valor en coma flotant si el resultat de la divisió no és exacte.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
|-$valor||Negació||Oposat de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor + $valorB ||Addició||Suma de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor - $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor * $valorB||Multiplicació||Producte de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor / $ valorB||Divisió||Quocient de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor % $valorB||Mòdul||Resta de $valor dividit per $valorB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors d'assignació '''&lt;br /&gt;
L’operador bàsic d’assignació és l’igual. Amb l’operador igual la variable de l’esquerra rep el valor de l’expressió de la dreta.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor = $valorB||Assignació||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor += $valorB||Addició i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor -= $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor.= “text”||Concatenació i Assignació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de bit '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp; $valorB||i||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor I $valorB||o i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor ˆ $valorB ||xor||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
|  ̃ $valor||Negació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;lt;$valorB ||Desplaçament a l’esquerra||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;&amp;gt;$valorB||Desplaçament a la dreta||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de comparació '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor == $valorB||Igual||TRUE si $valor és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor === $valorB||Idèntic||TRUE si $valor és igual a $valorB i són del mateix tipus.&lt;br /&gt;
|-&lt;br /&gt;
| $valor != $valorB ||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;gt; $ valorB||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor !== $valorB ||No idèntic||TRUE si $valor no és igual a $valorB o no són del mateix tipus&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt; $valorB||Més petit que||TRUE si $valor és més petit que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt; $valorB||Més gran que||TRUE si $valor és més gran que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;= $valorB||Més petit o igual que||TRUE si $valor és més petit o igual que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;= $valorB||Més gran o igual que||TRUE si $valor és més gran o igual que $valorB.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Operadors d’increment i decrement '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| ++$valor||Preincrement||Incrementa $valor una unitat, i després retorna $valor.&lt;br /&gt;
|-&lt;br /&gt;
| $valor++||Postincrement||Retorna $valor i incrementa $valor una unitat.&lt;br /&gt;
|-&lt;br /&gt;
| –$valor ||Predecrement||Decrementa $valor una unitat i retorna $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor–||Postdecrement||Retorna $valor i decrementa $valor una unitat.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de lògica '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor and valorB||i||TRUE si $valor i $valorB són TRUE&lt;br /&gt;
|-&lt;br /&gt;
| $valor or $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor xor $valorB ||xor||TRUE si $valor o $valorB són TRUE, però no tots dos alhora.&lt;br /&gt;
|-&lt;br /&gt;
| !$valor||No||Inverteix el contingut de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp;&amp;amp; $valorB ||i||TRUE si $valor i $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor II $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Els Vectors i les Matrius (Arrays) ===&lt;br /&gt;
Les matrius i els vectors són conjunts de dades que poden estar definides en un Guió de PHP. Les matrius poden contenir altres matrius dintre d'ells sense restricció (multidimensionals). &lt;br /&gt;
&lt;br /&gt;
Els vectors es poden crear de dues maneres. La primera consisteix en l'ús de la funció '''array()'''. La segona implica l'ús de claudàtors.&lt;br /&gt;
Exemple de declaracions d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$elmeuarray = array($valor1, $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
$elmeuarray[1] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//També es pot declarar de la següent manera:&lt;br /&gt;
$elmeuarray = array('mes1' =&amp;gt; $valor1, 'mes2' =&amp;gt; $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
$elmeuarray['mes2'] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//Però tambés es pot declarar directament amb claudàtors:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
//o amb la següent notació&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemples d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$array = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;type&amp;quot;=&amp;gt;&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;manufactured&amp;quot;=&amp;gt;&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2 = array(&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3 = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array['name']=&amp;quot;BMW&amp;quot;;&lt;br /&gt;
$array['type']=&amp;quot;SERIE 1&amp;quot;;&lt;br /&gt;
$array['colour']=&amp;quot;BLANCO&amp;quot;;&lt;br /&gt;
$array['manufactured']=&amp;quot;2035&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2[]=&amp;quot;AUDI&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;A5&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;ROJO&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;2038&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3['name']=&amp;quot;FERRARI&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;SPIDER&amp;quot;;&lt;br /&gt;
$array3['colour']=&amp;quot;VERDE&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;2013&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les matrius son vectors multidimensionals. Els elements d'un vector a la seva vegada poden ser un altre vector. Un exemple és el següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$cars = array(&lt;br /&gt;
   &amp;quot;car1&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Toyota&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;Green&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1999,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1998),&lt;br /&gt;
   &amp;quot;car2&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;BMW&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;RED&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 2005,&amp;quot;engine_cc&amp;quot; =&amp;gt; 2400),&lt;br /&gt;
   &amp;quot;car3&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Renault&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;White&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1993,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1395),&lt;br /&gt;
);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $cars['car1']['make'],&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo $cars['car3']['engine_cc'];&lt;br /&gt;
&lt;br /&gt;
/* El resultat de l'execució de les intruccions anteriors és:&lt;br /&gt;
Toyota&lt;br /&gt;
1395&lt;br /&gt;
*/&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Més informació sobre arrays [http://php.net/manual/en/language.types.array.php aquí.]&lt;br /&gt;
Existeixen MOLTES funcions per manipular els arrays. Dona una ullada a [http://php.net/manual/en/ref.array.php aquesta pàgina] abans que comencis a implementar funcions que ja existeixen a la llibreria de php.&lt;br /&gt;
&lt;br /&gt;
=== Estructures de control ===&lt;br /&gt;
==== La sentència '''IF''' i l'Operador Ternari ====&lt;br /&gt;
Les estructures condicionals s'utilitzen per controlar quines instruccions s'executen. Els condicionals en PHP estan estructurats de manera similar als trobats en C ++ i Java .&lt;br /&gt;
Exemple d'estructures condicionals:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//Exemple 1&lt;br /&gt;
$foo = 1;&lt;br /&gt;
$bar = 2;&lt;br /&gt;
if($foo == $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is equal to $bar.&amp;quot;;&lt;br /&gt;
} elseif ($foo &amp;gt; $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is greater than $bar.&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;$foo is less than $bar.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple 2&lt;br /&gt;
$lower = 10;&lt;br /&gt;
$upper = 100;&lt;br /&gt;
$needle = 25;&lt;br /&gt;
if(($needle &amp;gt;= $lower) &amp;amp;&amp;amp; ($needle &amp;lt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is in the haystack.&amp;quot;;&lt;br /&gt;
} elseif (($needle &amp;lt;= $lower) || ($needle &amp;gt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is outside of the haystack.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple Operador Ternari&lt;br /&gt;
&lt;br /&gt;
$missatge =  (date('G') &amp;lt; 12) ? 'Buenos días' : 'Buenas tardes';&lt;br /&gt;
&lt;br /&gt;
//equival a la següent estructura:&lt;br /&gt;
if (date('G') &amp;lt; 12) {&lt;br /&gt;
$missatge = 'Buenos días';&lt;br /&gt;
} else {&lt;br /&gt;
$missatge = 'Buenas tardes';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''SWITCH''' ====&lt;br /&gt;
Quan es necessita utilitzar un IF amb molts Else pot resultar que es vegi un codi molt redundant. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user_command == &amp;quot;n&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_north();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;e&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_east();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;s&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_south();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;w&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_west();&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  do_something_else();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per millorar la llegibilitat del codi utilitzarem l'estructura 'Switch' de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 switch($user_command)&lt;br /&gt;
 {&lt;br /&gt;
   case 'n':&lt;br /&gt;
     go_north();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'e':&lt;br /&gt;
     go_east();&lt;br /&gt;
     break;&lt;br /&gt;
   case 's':&lt;br /&gt;
     go_south();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'w':&lt;br /&gt;
     go_west();&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     do_something_else();&lt;br /&gt;
     break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Un altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($firstvariable == 'comparison1' &lt;br /&gt;
         || $firstvariable == 'comparison2')&lt;br /&gt;
 {&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
 }&lt;br /&gt;
 else if ($firstvariable == 'comparison3')&lt;br /&gt;
 {&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
      launchMissiles();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//amb l'estructura switch :&lt;br /&gt;
 switch($firstvariable)&lt;br /&gt;
 {&lt;br /&gt;
  case 'comparison1':&lt;br /&gt;
  case 'comparison2':&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  case 'comparison3':&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  default: &lt;br /&gt;
      launchMissiles();&lt;br /&gt;
      break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''WHILE''' ====&lt;br /&gt;
Aquesta sentència s'utilitzarà per repetir una serie d'instruccions tantes vegades com el condicional sigui evaluat a True.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$c = 0;&lt;br /&gt;
while ($c &amp;lt; 5) {&lt;br /&gt;
   echo $c++;&lt;br /&gt;
} ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mira el següent codi i enraona si serà un bucle infinit o no:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$c = 1;&lt;br /&gt;
$myName=&amp;quot;Fred&amp;quot;;&lt;br /&gt;
while ($myName != &amp;quot;Rumplestilskin&amp;quot;) &lt;br /&gt;
{&lt;br /&gt;
   if ($myName==&amp;quot;Fred&amp;quot;) &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Leslie&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Marc&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   $c++;&lt;br /&gt;
 &lt;br /&gt;
   if ($c==3) &lt;br /&gt;
   {&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
echo &amp;quot;You lose and I get your baby!\n&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''do ... WHILE''' ====&lt;br /&gt;
És semblan al bucle anterior però les intruccions sempre s'execulten almenys 1 vegada. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  $c = 6;&lt;br /&gt;
  do {&lt;br /&gt;
    echo 'Hi';&lt;br /&gt;
  } while ($c &amp;lt; 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''FOR''' ====&lt;br /&gt;
La sintaxi bàsica d'aquesta sentencia és la següent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for([initialization]; [condition]; [step])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'ús:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 for($i = 0; $i &amp;lt; 5; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilització amb arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $menu = array(&amp;quot;Toast and Jam&amp;quot;, &amp;quot;Bacon and Eggs&amp;quot;, &amp;quot;Homefries&amp;quot;, &amp;quot;Skillet&amp;quot;, &amp;quot;Milk and Cereal&amp;quot;);&lt;br /&gt;
 // note to self: get breakfast after writing this article&lt;br /&gt;
 $count = count($menu);&lt;br /&gt;
 for($i = 0; $i &amp;lt; $count; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i + 1 . &amp;quot;. &amp;quot; . $menu[$i] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== La sentència '''FOREACH''' ====&lt;br /&gt;
Aquesta sentència és molt utilitzada per recòrrer arrays. Com el parell array[key]=value pot ser string en ambdós casos, aquesta estructura ens permet obternir-los:&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach ($array as $someVar) {&lt;br /&gt;
  echo ($someVar . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//un altre exemple:&lt;br /&gt;
foreach ($array as $key =&amp;gt; $value) {&lt;br /&gt;
  echo ($key.&amp;quot;holds the value &amp;quot;.$value.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''break''' ====&lt;br /&gt;
&lt;br /&gt;
La sentència break provoca la sortida de qualsevol estructura de control, trencant així un bucle. Penseu per exemple un bucle que cerca un element d’un array. Una vegada trobat, és ineficient acabar de recórrer la resta de l’array.&lt;br /&gt;
''Podeu indicar a aquesta sentència quantes estructures de control voleu saltar. ''&lt;br /&gt;
En l’exemple següent el break provoca la sortida de dos blocs de codi:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
while($edat&amp;lt;20)&lt;br /&gt;
{&lt;br /&gt;
	for( ; ; $edat=$edat+1)&lt;br /&gt;
	{&lt;br /&gt;
		if($edat==18)&lt;br /&gt;
		{&lt;br /&gt;
			echo &amp;quot;Ara ja tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
			break 2;&lt;br /&gt;
		}&lt;br /&gt;
		echo &amp;quot;Encara ets menor d’edat, ja que tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;Aquesta línia no sortirà per pantalla!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;Ja no ets menor d’edat! Tens $edat anys!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
&lt;br /&gt;
===Exercici: tablita ===&lt;br /&gt;
Se desea crear una página web en la cual muestre un título y luego haga una tabla que imprima 10 filas mostrando &amp;quot;estamos en 2DAW&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;th&amp;gt;M09-PHP&amp;lt;/th&amp;gt;  &lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;?php&lt;br /&gt;
                $conta =1;&lt;br /&gt;
                while($conta&amp;lt;=10) { &lt;br /&gt;
                    echo &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;td&amp;gt;Estamos en DAW2&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    $conta++;&lt;br /&gt;
                }&lt;br /&gt;
            ?&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
     &amp;lt;/body&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exercici: Vector (opcional) ===&lt;br /&gt;
Queremos crear un vector &amp;quot;ciudades&amp;quot; donde introduciremos una serie  de ciudades, luego deberá mostrar cada una de las ciudades y el número total.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Recòrrer array ====&lt;br /&gt;
Donat el següent array:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$eu = array( &amp;quot;Italy&amp;quot;=&amp;gt;&amp;quot;Rome&amp;quot;, &amp;quot;Luxembourg&amp;quot;=&amp;gt;&amp;quot;Luxembourg&amp;quot;, &amp;quot;Belgium&amp;quot;=&amp;gt; &amp;quot;Brussels&amp;quot;, &lt;br /&gt;
&amp;quot;Denmark&amp;quot;=&amp;gt;&amp;quot;Copenhagen&amp;quot;, &amp;quot;Finland&amp;quot;=&amp;gt;&amp;quot;Helsinki&amp;quot;, &amp;quot;France&amp;quot; =&amp;gt; &amp;quot;Paris&amp;quot;, &amp;quot;Slovakia&amp;quot;=&amp;gt;&amp;quot;Bratislava&amp;quot;, &lt;br /&gt;
&amp;quot;Slovenia&amp;quot;=&amp;gt;&amp;quot;Ljubljana&amp;quot;, &amp;quot;Germany&amp;quot; =&amp;gt; &amp;quot;Berlin&amp;quot;, &amp;quot;Greece&amp;quot; =&amp;gt; &amp;quot;Athens&amp;quot;, &amp;quot;Ireland&amp;quot;=&amp;gt;&amp;quot;Dublin&amp;quot;, &lt;br /&gt;
&amp;quot;Netherlands&amp;quot;=&amp;gt;&amp;quot;Amsterdam&amp;quot;, &amp;quot;Portugal&amp;quot;=&amp;gt;&amp;quot;Lisbon&amp;quot;, &amp;quot;Spain&amp;quot;=&amp;gt;&amp;quot;Madrid&amp;quot;, &amp;quot;Sweden&amp;quot;=&amp;gt;&amp;quot;Stockholm&amp;quot;,&lt;br /&gt;
 &amp;quot;United Kingdom&amp;quot;=&amp;gt;&amp;quot;London&amp;quot;, &amp;quot;Cyprus&amp;quot;=&amp;gt;&amp;quot;Nicosia&amp;quot;, &amp;quot;Lithuania&amp;quot;=&amp;gt;&amp;quot;Vilnius&amp;quot;, &lt;br /&gt;
&amp;quot;Czech Republic&amp;quot;=&amp;gt;&amp;quot;Prague&amp;quot;, &amp;quot;Estonia&amp;quot;=&amp;gt;&amp;quot;Tallin&amp;quot;, &amp;quot;Hungary&amp;quot;=&amp;gt;&amp;quot;Budapest&amp;quot;, &amp;quot;Latvia&amp;quot;=&amp;gt;&amp;quot;Riga&amp;quot;, &lt;br /&gt;
&amp;quot;Malta&amp;quot;=&amp;gt;&amp;quot;Valetta&amp;quot;, &amp;quot;Austria&amp;quot; =&amp;gt; &amp;quot;Vienna&amp;quot;, &amp;quot;Poland&amp;quot;=&amp;gt;&amp;quot;Warsaw&amp;quot;) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Crea un script amb PHP que mostri un llistat amb el noms de les capitals i els seus corresponents països. El llistat ha de ser semblant a:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
La capital de Netherlands és Amsterdam&lt;br /&gt;
La capital de Greece és Athens&lt;br /&gt;
La capital de Germany és Berlin&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[solucio_php_recorrer_array]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Afegir un element a un array ====&lt;br /&gt;
Escriu un programa que afegeixi un nou element a un array en una posició determinada.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//abans:&lt;br /&gt;
12345&lt;br /&gt;
&lt;br /&gt;
//després d'afegir $ l'array és:&lt;br /&gt;
123$45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
:[[solucio_afegir_element_array_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Curta i llarga ====&lt;br /&gt;
Escriu un programa en PHP que retorni la longitud màxima i mínima dels strings que conté un array.&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ar = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$max=0;&lt;br /&gt;
$min = PHP_INT_MAX;&lt;br /&gt;
&lt;br /&gt;
foreach($ar as $valor){&lt;br /&gt;
    if( strlen($valor) &amp;lt; $min){&lt;br /&gt;
        $min = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
    if (strlen($valor) &amp;gt; $max){&lt;br /&gt;
        $max = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;La longitud mes curta es $min i la mes llarga es $max.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Otra solucion:&lt;br /&gt;
&lt;br /&gt;
$my_array = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$otroarray = array_map('strlen', $my_array);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;La longitud mes curta es &amp;quot;. min($otroarray) .&amp;quot; i la mes llarga es &amp;quot;. max($otroarray).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
print_r($otroarray);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==== Exercici: Dibuixa asteriscs ====&lt;br /&gt;
Dibuixa amb PHP utilitzant asteriscs el següent dibuix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* &lt;br /&gt;
* * &lt;br /&gt;
* * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * &lt;br /&gt;
* * &lt;br /&gt;
* &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
$n=5;  &lt;br /&gt;
&lt;br /&gt;
for($i=1; $i&amp;lt;=$n; $i++)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
for($i=$n; $i&amp;gt;=1; $i--)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Escacs ====&lt;br /&gt;
Dibuixa una taula d'escacs com la que pots veure a continuació. &lt;br /&gt;
Table width=&amp;quot;270px&amp;quot; i cada cel·la ocupa 30px d'amplada i d'altura.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:escacs.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:solucio_escacs_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcions ===&lt;br /&gt;
&lt;br /&gt;
Les funcions son grup d'instruccions que poden ser cridades en qualsevol moment. Les funcions són útils per re-utilitzar codi de manera sencilla dintre de la nostra aplicació.&lt;br /&gt;
====Funcions definides per l’usuari====&lt;br /&gt;
L’usuari pot definir totes les funcions que necessiti. És imprescindible que el nom donat a la funció no estigui prohibit, és a dir, no es poden fer servir:&lt;br /&gt;
*paraules reservades (per exemple, echo), &lt;br /&gt;
*començar amb un nombre o un caràcter especial&lt;br /&gt;
*repetir el nom d’una funció dins un mateix àmbit. &lt;br /&gt;
Tot i que el PHP '''no farà cap distinció entre majúscules i minúscules''', es recomana utilitzar el nom de la funció idèntic a l’utilitzat en la declaració.&lt;br /&gt;
Les funcions poden rebre paràmetres. El pas de paràmetres d’entrada es fa escrivint entre parèntesis i a continuació del nom de la funció.&lt;br /&gt;
En l’exemple següent podeu veure com es declara la funció missatge i com, posteriorment, es crida passant-hi un paràmetre.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function missatge($argument)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;$argument&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
missatge(&amp;quot;Aquest és l’argument que es passa en aquest exemple.&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les funcions també podran retornar valors. Per fer-ho caldrà utilitzar la sentència '''return'''.&lt;br /&gt;
En l’exemple següent comprovareu com la funció suma, la qual rep dos paràmetres, retorna el resultat de sumar dos nombres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function suma ($valor1,$valor2)&lt;br /&gt;
{&lt;br /&gt;
	return($valor1+$valor2);&lt;br /&gt;
}&lt;br /&gt;
echo suma(4,6);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Funcions Internes====&lt;br /&gt;
El llenguatge PHP té funcions definides internament. Aquestes funcions són de gran utilitat per al programador i resulta imprescindible estudiarles i conèixer-ne les més importants.&lt;br /&gt;
&lt;br /&gt;
És possible que diverses funcions no es reconeguin en el vostre entorn de treball del PHP; el motiu d’això és que algunes funcions internes no s’han inclòs en la compilació, la qual cosa ha fet necessària una compilació dels mòduls que les contenen. Amb phpinfo() es poden veure les extensions carregades en la vostra configuració del PHP.&lt;br /&gt;
&lt;br /&gt;
Són funcions internes molt usuals ''echo, fprintf, print, printf i sprintf'', en què queda demostrat que el llenguatge PHP ja té definides funcions específiques que poden ser de gran utilitat per a l’usuari. &lt;br /&gt;
&lt;br /&gt;
Podeu mirar l’ajuda de PHP a la [https://www.php.net/manual/es/funcref.php pàgina oficial].&lt;br /&gt;
Funcions de Strings: [http://php.net/manual/en/ref.strings.php pàgina oficial].&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot codificar amb codificació ''md5'' el contingut d’una variable:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom = 'Blanca';&lt;br /&gt;
echo(&amp;quot;La codificació md5 de $nom és:&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
echo md5($nom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Exercici===&lt;br /&gt;
El código de encriptación md5 y sha están comprometido ya que son fáciles de desencriptar. ¿Qué algoritmo se debería utilizar?&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Algoritmes d'ordenació====&lt;br /&gt;
Segons el següent array &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fruits = array(&amp;quot;lemon&amp;quot;, &amp;quot;orange&amp;quot;, &amp;quot;banana&amp;quot;, &amp;quot;apple&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SORT''' Esta función ordena una matriz. Los elementos se organizarán de menor a mayor cuando se haya completado esta función.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
sort($cars);&lt;br /&gt;
&lt;br /&gt;
BMW&lt;br /&gt;
Toyota&lt;br /&gt;
Volvo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''RSORT''' Esta función ordena una matriz en orden inverso (de mayor a menor).&lt;br /&gt;
Nota: Esta función asigna nuevas claves para los elementos en la matriz. Eliminará todas las claves existentes que haya asignado, en lugar de simplemente reordenar las claves.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
rsort($cars);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volvo&lt;br /&gt;
Toyota&lt;br /&gt;
BMW&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''asort'''()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;345&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;3&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
asort($age)&lt;br /&gt;
&lt;br /&gt;
Array ( [Ben] =&amp;gt; 3 [Joe] =&amp;gt; 43 [Peter] =&amp;gt; 345 ) &lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''arsort''' ()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
arsort($age);&lt;br /&gt;
&lt;br /&gt;
Array ( [Peter] =&amp;gt; 345 [Joe] =&amp;gt; 43 [Ben] =&amp;gt; 3 ) &lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ksort''' ()&lt;br /&gt;
Ordena una matriz por clave, manteniendo la clave de las correlaciones de datos. Esto es útil principalmente para matrices asociativas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;200&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;99&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
ksort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Ben, Value=99&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''krsort'''()                &lt;br /&gt;
Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
krsort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Peter, Value=35&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=37&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''natsort''' ()&lt;br /&gt;
Esta función implementa un algoritmo de ordenamiento que ordena cadenas alfanuméricas en la forma en que lo haría un ser humano mientras mantiene asociaciones de clave / valor. Esto se describe como un &amp;quot;orden natural&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$array1 = $array2 = array(&amp;quot;img12.png&amp;quot;, &amp;quot;img10.png&amp;quot;, &amp;quot;img2.png&amp;quot;, &amp;quot;img1.png&amp;quot;);&lt;br /&gt;
sort($array1);&lt;br /&gt;
echo &amp;quot;Standard sorting\n&amp;quot;;print_r($array1);&lt;br /&gt;
natsort($array2);&lt;br /&gt;
echo &amp;quot;\nNatural order sorting\n&amp;quot;;print_r($array2);?&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The above example will output:&lt;br /&gt;
Standard sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; img1.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [2] =&amp;gt; img12.png&lt;br /&gt;
    [3] =&amp;gt; img2.png&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Natural order sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [3] =&amp;gt; img1.png&lt;br /&gt;
    [2] =&amp;gt; img2.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [0] =&amp;gt; img12.png&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
====Exercici: Ordenació ====&lt;br /&gt;
Crea una funció que ordeni un array. &lt;br /&gt;
*Per claus de menor a major i de major a menor&lt;br /&gt;
*Per valors de menor a major i de major a menor&lt;br /&gt;
&lt;br /&gt;
[[:Solucio_ordenacio]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Comprova minúscules ====&lt;br /&gt;
Crea una funció que comprovi si tots els caràcters d'un string son minúscules.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function is_str_lowercase($str1)  &lt;br /&gt;
   {  &lt;br /&gt;
    for ($sc = 0; $sc &amp;lt; strlen($str1); $sc++) {  &lt;br /&gt;
          if (ord($str1[$sc]) &amp;gt;= ord('A') &amp;amp;&amp;amp;  ord($str1[$sc]) &amp;lt;= ord('Z')) {    // ord — devuelve el valor ASCII de un caracter&lt;br /&gt;
      return false;  &lt;br /&gt;
         }  &lt;br /&gt;
         }  &lt;br /&gt;
      return true;  &lt;br /&gt;
       }  &lt;br /&gt;
var_dump(is_str_lowercase('abc def ghi'));  &lt;br /&gt;
var_dump(is_str_lowercase('abc dEf ghi'));  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
====Exercici: Primers====&lt;br /&gt;
Crea una funció que indiqui si un número és primer.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function IsPrime($n)  &lt;br /&gt;
{  &lt;br /&gt;
 for($x=2; $x&amp;lt;$n; $x++)  &lt;br /&gt;
   {  &lt;br /&gt;
      if($n %$x ==0)  &lt;br /&gt;
          {  &lt;br /&gt;
           return 0;  &lt;br /&gt;
          }  &lt;br /&gt;
    }  &lt;br /&gt;
  return 1;  &lt;br /&gt;
   }  &lt;br /&gt;
$a = IsPrime(3);  &lt;br /&gt;
if ($a==0)  &lt;br /&gt;
echo 'No es Primo.....';  &lt;br /&gt;
else  &lt;br /&gt;
echo 'ES primo..';  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici- Normalizar ===&lt;br /&gt;
&lt;br /&gt;
Tenemos una base de datos que sólo acepta nombres y apellidos SIN acentos, ni dieresis... por tanto, queremos que cuando escriba el usuario un nombre como &amp;quot;jÚlïÒ&amp;quot; lo normalice a &amp;quot;JULIO&amp;quot;. &lt;br /&gt;
  $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
&lt;br /&gt;
  $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
&lt;br /&gt;
Es interesante investigar sobre la función strtr&lt;br /&gt;
&lt;br /&gt;
solución:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UTF-8 es una codificación multibyte que puede representar cualquier carácter Unicode.&lt;br /&gt;
ISO 8859-1 es una codificación de un solo byte que puede representar los primeros 256 caracteres Unicode.&lt;br /&gt;
Ambos codifican ASCII exactamente de la misma manera.&lt;br /&gt;
&lt;br /&gt;
utf8_decode -&amp;gt;  Convierte una cadena con los caracteres codificados ISO-8859-1 con UTF-8 &lt;br /&gt;
&lt;br /&gt;
   //función que quita los acentos, dieresis, Ñ....&lt;br /&gt;
    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
    $cadena = utf8_decode($cadena);&lt;br /&gt;
    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);&lt;br /&gt;
    $cadena = strtoupper($cadena);&lt;br /&gt;
    return utf8_encode($cadena);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 //$cadena = strtr(utf8_decode($cadena), utf8_decode($originales), $modificadas);   //Altra solució&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipus de Dades en PHP ==&lt;br /&gt;
&lt;br /&gt;
*'''Boolean'''&lt;br /&gt;
És un tipus de dades molt simple que pot representar un valor cert (TRUE) o fals (FALSE). Aquest tipus de dades s’utilitza molt en estructures de control. Si feu conversió de dades és molt important que tingueu en&lt;br /&gt;
compte que es considerarà fals el nombre enter, la cadena 0 o una cadena buida, una matriu buida, un objecte sense variables, el tipus NULL i els objectes SimpleXML que s’hagin creat d’etiquetes buides.&lt;br /&gt;
&lt;br /&gt;
*'''Integer'''&lt;br /&gt;
Aquest tipus representa nombres no fraccionables per sota de la unitat. Poden ser positius i negatius. Aquests nombres enters els podeu representar en notació decimal, hexadecimal o octal. La plataforma sobre la&lt;br /&gt;
qual treballeu determinarà la mida de les variables enteres. El PHP forçarà un canvi de tipus a flotant si es produeix un desbordament, tant si és positiu com negatiu. A continuació, es mostren dos exemples de variables enteres.&lt;br /&gt;
&lt;br /&gt;
*'''float'''&lt;br /&gt;
Aquest tipus fa referència als nombres de coma flotant, i normalment treballa amb una precisió aproximada de catorze dígits decimals. A continuació, es mostra un exemple d’una variable amb coma flotant.&lt;br /&gt;
&lt;br /&gt;
*'''String'''&lt;br /&gt;
Es tracta d’una cadena de caràcters. El llenguatge del PHP no imposa un límit a la mida d’aquestes cadenes; ara bé, no oblideu que el límit el marcarà la memòria del maquinari en què estigui funcionant el PHP. Aquí&lt;br /&gt;
teniu diversos exemples de cadenes.&lt;br /&gt;
&lt;br /&gt;
*'''array'''&lt;br /&gt;
un array és una matriu, d’una dimensió o més, que conté dades que s’associen segons unes claus. És un tipus molt útil, i comprovareu que el seu ús té una gran potència. Per crear una matriu podeu utilitzar la paraula&lt;br /&gt;
reservada ''array()'' o bé acompanyar el nom de la variable amb ''[ ]''.&lt;br /&gt;
&lt;br /&gt;
*'''object'''&lt;br /&gt;
aquest tipus d’objecte està previst en el llenguatge PHP perquè suporta el llenguatge orientat a objectes. Un objecte és un ítem amb unes característiques i funcionalitats marcades per la classe a la qual pertany. Per crear un objecte cal utilitzar la partícula ''new''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//tipus boolean:&lt;br /&gt;
$sortir=FALSE;&lt;br /&gt;
$entrar=TRUE;&lt;br /&gt;
&lt;br /&gt;
//tipus integer:&lt;br /&gt;
$positiu=3451;&lt;br /&gt;
$negatiu= − 4345&lt;br /&gt;
&lt;br /&gt;
//tipus float:&lt;br /&gt;
$amb_coma=34.5;&lt;br /&gt;
&lt;br /&gt;
//tipus string:&lt;br /&gt;
$nom=’Wayan’;&lt;br /&gt;
$salutacio=&amp;quot;Hola $nom!&amp;quot;;&lt;br /&gt;
echo $salutacio.&amp;quot; Benvingut&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus array:&lt;br /&gt;
$grau_cicles=array(&amp;quot;superior&amp;quot;,&amp;quot;mitja&amp;quot;);&lt;br /&gt;
$families[]=&amp;quot;Informàtica&amp;quot;;&lt;br /&gt;
$families[]=&amp;quot;Electrònica&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus objecte:&lt;br /&gt;
class Alumne {&lt;br /&gt;
public function matricular($nom)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Ja estàs matriculat $nom&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$alumne1=new Alumne();&lt;br /&gt;
$alumne1−&amp;gt;matricular(’Made’);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Creació Classes/ OBJECTES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Coche&lt;br /&gt;
{&lt;br /&gt;
	static $numruedas = 4;&lt;br /&gt;
	var $color;&lt;br /&gt;
	var $posx;&lt;br /&gt;
	var $posy;&lt;br /&gt;
	var $velocidad;&lt;br /&gt;
	function __construct($color, $posx, $posy)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;color = $color;&lt;br /&gt;
		$this-&amp;gt;posx = $posx;&lt;br /&gt;
		$this-&amp;gt;posy = $posy;&lt;br /&gt;
		$this-&amp;gt;velocidad = 0;&lt;br /&gt;
	}&lt;br /&gt;
	function mover($x, $y)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;posx = $x;&lt;br /&gt;
		$this-&amp;gt;posy = $y;&lt;br /&gt;
	}&lt;br /&gt;
	function acelerar()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;velocidad = $this-&amp;gt;velocidad + 10;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
	function frenar()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;velocidad &amp;gt; 10)&lt;br /&gt;
			$this-&amp;gt;velocidad = $this-&amp;gt;velocidad - 10;&lt;br /&gt;
		else&lt;br /&gt;
			$this-&amp;gt;velocidad = 0;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$car = new Coche(&amp;quot;verde&amp;quot;,10,10);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les dades especials ===&lt;br /&gt;
*'''resource'''&lt;br /&gt;
La variable que pertany a aquest tipus farà referència a un recurs extern. Determinades funcions faran ús d’aquest recurs. Per exemple, la funció mysql_db_query, que té la funció d’enviar una petició mySQL, retorna un tipus resource. En l’exemple següent la variable $resultat és de tipus resource:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query=&amp;quot;SELECT * FROM alumnes&amp;quot;;&lt;br /&gt;
$resultat=mysql_query($query);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''NULL'''&lt;br /&gt;
Quan necessiteu una variable que no tingui cap valor haureu d’utilitzar aquest tipus.&lt;br /&gt;
&lt;br /&gt;
===Els pseudotipus===&lt;br /&gt;
* '''mixed''': aquest pseudotipus indica que la variable en questió pot emmagatzemar múltiples tipus.&lt;br /&gt;
* '''number''': indica que la variable pot contenir un valor enter o de coma flotant.&lt;br /&gt;
* '''callback''': utilitzareu aquest pseudotipus per emmagatzemar crides de retorn generades per funcions de l’usuari.&lt;br /&gt;
&lt;br /&gt;
=== Conversions de tipus ===&lt;br /&gt;
&lt;br /&gt;
Per forçar un canvi de tipus haureu d’especificar entre parèntesis el tipus al qual voleu fer la conversió i col·locar-lo davant la variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Senténcia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Modelat a &lt;br /&gt;
|-&lt;br /&gt;
| (integer), (int) ||integer.&lt;br /&gt;
|-&lt;br /&gt;
| (boolean)||boolean&lt;br /&gt;
|-&lt;br /&gt;
| (float), (double), (real) ||float&lt;br /&gt;
|-&lt;br /&gt;
| (string) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (binary) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (array)||array&lt;br /&gt;
|-&lt;br /&gt;
| (object)|| object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Sense modelar 27/5: &amp;quot;.(27/5).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;I ara ja modelat: &amp;quot;.(integer)(27/5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants===&lt;br /&gt;
Una constant és un identificador (nom) per expressar un valor simple. Com el nom suggereix, aquest valor no pot variar durant l'execució del script. (A excepció de les [[http://php.net/manual/es/language.constants.predefined.php constants màgiques]], que en realitat no són constants). Una constant és sensible a majúscules per defecte. Per convenció, els identificadors de constants sempre solen declarar-se en majúscules.&lt;br /&gt;
&lt;br /&gt;
El nom d'una constant segueix les mateixes regles que qualsevol altra etiqueta de PHP. Un nom de constant vàlid comença per una lletra o subguió, seguit per qualsevol nombre o lletres, nombres o subguions. Usant una expressió regular, es representaria de la següent manera: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('MIN_VALUE', '0.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
define('MAX_VALUE', '1.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
echo MIN_VALUE;&lt;br /&gt;
//const MIN_VALUE = 0.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
//const MAX_VALUE = 1.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
class Exemple1&lt;br /&gt;
{&lt;br /&gt;
  //define('MIN_VALUE', '0.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
  //define('MAX_VALUE', '1.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  const MIN_VALUE = 0.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
  const MAX_VALUE = 1.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  public static function getMinValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MIN_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static function getMaxValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MAX_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo Exemple1::getMinValue();   //invocamos clase &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Cuál es la diferencia entre $this y self:: ?'''&lt;br /&gt;
&lt;br /&gt;
Uno usa $this para referenciar al objeto actual, y se utiliza self:: para referenciar la clase actual. Se utiliza $this-&amp;gt;nombre para nombres no estáticos y se utiliza self::nombres para nombres estáticos.&lt;br /&gt;
&lt;br /&gt;
=== Variables predefinides ===&lt;br /&gt;
&lt;br /&gt;
En PHP hi ha una sèrie de variables predefinides que resulten de gran ajuda per al programador. Dins d’aquestes variables predefinides cal destacar un gran grup, el grup de les anomenades superglobals.&lt;br /&gt;
&lt;br /&gt;
Les variables '''superglobals''' són variables que sempre estan disponibles en tots els àmbits.&lt;br /&gt;
&lt;br /&gt;
*'''$GLOBALS''':fa referència a totes les variables disponibles en l’àmbit global. Es tracta d’una variable de tipus matriu associativa.&lt;br /&gt;
En l’exemple següent es recorre la variable superglobal $GLOBALS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$una_variable=&amp;quot;Hola&amp;quot;;&lt;br /&gt;
$una_altra_variable=&amp;quot;Com va?&amp;quot;;&lt;br /&gt;
foreach ($GLOBALS as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;GLOBALS[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_SERVER''':ofereix informació molt últil sobre el servidor i l’entorn d’execució. Els valors que emmagatzema són generats pel navegador web.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*Executeu-lo i veureu un seguit de dades&lt;br /&gt;
referents a la màquina que fa de servidor del PHP. Entre altres coses, identificareu&lt;br /&gt;
el nom de la màquina, la versió del navegador, la versió del servidor web, la&lt;br /&gt;
ubicació de fitxers importants i un llarg etcètera.*/&lt;br /&gt;
&lt;br /&gt;
foreach ($_SERVER as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;SERVER[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_GET''': correspon a la variable GET del protocol HTTP. Emmagatzema els valors de les variables que es trasmeten per mitjà del protocol HTTP mitjançant el mètode GET. El seu ús és molt normal en formularis.&lt;br /&gt;
&lt;br /&gt;
*'''$_POST''': correspon a la variable POST del protocol HTTP. Emmagatzema els valors de les variables que es transmeten per mitjà del protocol HTTP mitjançant el mètode POST. El seu ús és, generalment, més adequat que el mètode GET per a temes de seguretat.&lt;br /&gt;
&lt;br /&gt;
*'''$_COOKIE''': és una variable de tipus matriu associativa que emmagatzemarà les variables passades a l’script per mitjà de les galetes de l’HTML.&lt;br /&gt;
&lt;br /&gt;
*'''$_REQUEST''': és una matriu associativa que conté les dades de $_GET ,$_POST i $_COOKIE.&lt;br /&gt;
&lt;br /&gt;
*'''$_FILES''': aquesta variable s’utilitza en la càrrega de fitxers per mitjà del protocol HTTP. El mètode utilitzat és el POST.&lt;br /&gt;
&lt;br /&gt;
*'''$_SESSION''': conté les variables de sessió disponibles en l’script actual.&lt;br /&gt;
&lt;br /&gt;
*'''$_ENV''': conté les variables d’entorn.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Detecció del Navegador ===&lt;br /&gt;
Escriu un script en PHP que detecti el navegador que està utilitzant el client que ha demanat la pàgina.&lt;br /&gt;
&lt;br /&gt;
[[:solució_detecció_navegador_php]]&lt;br /&gt;
&lt;br /&gt;
=== Variables estàtiques ===&lt;br /&gt;
Les variables estàtiques sempre mantenen el valor encara que el programa abandoni l’àmbit de la variable, i existeixen només en l’àmbit local de les funcions. No s’hi pot accedir fora d’aquest àmbit.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function comptador()&lt;br /&gt;
{&lt;br /&gt;
   $a = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador: &amp;quot;.$a.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $a++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function comptadorEstatic()&lt;br /&gt;
{&lt;br /&gt;
   static $b = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador estàtic: &amp;quot;.$b.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $b++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for($i=0;$i&amp;lt;3;$i++)&lt;br /&gt;
{&lt;br /&gt;
   comptador();&lt;br /&gt;
   comptadorEstatic();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integració PHP ==&lt;br /&gt;
&lt;br /&gt;
Normalment trobareu el llenguatge de programació PHP dins d’altres llenguatges.&lt;br /&gt;
El més usual és escriure codi en PHP dins de codi HTML.&lt;br /&gt;
&lt;br /&gt;
Heu de recordar que el codi PHP és interpretat pel servidor, i els resultats es mostren en el navegador que utilitzeu. La simbiosi que es crea entre el PHP i l’HTML permet al PHP generar HTML i a l’HTML passar dades al PHP.&lt;br /&gt;
&lt;br /&gt;
=== PHP dintre de PHP ===&lt;br /&gt;
&lt;br /&gt;
==== Include vs Require ====&lt;br /&gt;
És possible inserir el contingut d'un fitxer PHP en un altre arxiu PHP (abans que el servidor l'executi), amb la declaració d'incloure o requerir. Les sentències d'inclusió i requereixen són idèntics , excepte en cas de fallada :&lt;br /&gt;
&lt;br /&gt;
*'''requerir''' (require) produirà un error fatal ( E_COMPILE_ERROR ) i aturar la seqüència de comandaments&lt;br /&gt;
*'''inclou''' (include) només produirà una advertència ( E_WARNING ) i el guió seguirà&lt;br /&gt;
&lt;br /&gt;
Per tant, si voleu que l'execució continuï mostrant als usuaris la sortida, fins i tot si el fitxer d'inclusió falta, utilitzeu la instrucció d'inclusió. Altrament, en cas de FrameWork, CMS, o amb aplicacions PHP complexes, sempre utilitzeu la instrucció que requereix el fitxer per a poder continuar l'execució. Això ajudarà a evitar posar en perill la seguretat i la integritat de l'aplicació, per si de cas un arxiu clau falta accidentalment.&lt;br /&gt;
&lt;br /&gt;
Inclusió d'arxius estalvia molta feina. Això significa que pots crear una capçalera, peu de pàgina o arxiu de menú estàndard per a totes les pàgines web. Llavors, quan la capçalera ha de ser actualitzada, només s'ha d'actualitzar la capçalera inclouen l'arxiu.&lt;br /&gt;
&lt;br /&gt;
'''Sintaxi'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include 'filename.php';&lt;br /&gt;
&lt;br /&gt;
//or&lt;br /&gt;
&lt;br /&gt;
require 'Otherfilename.php';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Include_once vs Require_once ====&lt;br /&gt;
Require_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a require.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Include_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a include.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redireccions ====&lt;br /&gt;
* Son sentencies on s'envia al navegador una nova pàgina. La pàgina que tenia el navegador desapareix i apareix una nova pàgina, la que està definida al location: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
header(&amp;quot;location: novapàgina.php&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici PHP amb cap i peus ===&lt;br /&gt;
&lt;br /&gt;
L’objectiu d’aquesta activitat és mostrar el funcionament de la inclusió d’arxius a PHP. Fer servir includes us permet simplificar el codi de les pàgines. Per exemple, podeu afegir un fitxer de capçalera (cap.php) i un de peu (peu.php) amb els continguts comuns de totes les pàgines del vostre lloc (el bàner, el menú, la informació general). Senzillament incloent aquests fitxers a totes les pàgines, podeu aconseguir una estètica comú. Si heu de canviar en algun moment la capçalera, modificant l’arxiu cap.php ho tindreu modificat a totes les pàgines del web.&lt;br /&gt;
Feu una pàgina web amb continguts estructurats amb dos fitxers: cap.php i peu.php&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
[[:solucio_cap_peus_php]]&lt;br /&gt;
&lt;br /&gt;
[[:solucio_cap_peus_php2]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP i Formularis HTML ===&lt;br /&gt;
El formulari electrònic és una eina molt potent fortament establida a Internet. Permet l’intercanvi o la introducció de dades entre usuaris d’una manera ràpida i senzilla. Un formulari permet la interactivitat i és el detonant que converteix Internet en l’eina més poderosa per enviar informació a un destinatari.&lt;br /&gt;
&lt;br /&gt;
El llenguatge PHP representa un salt qualitatiu enorme en l’ús de formularis. L’HTML no és un llenguatge creat pensant a utilitzar formularis, sinó que es va crear amb altres objectius. El llenguatge PHP té un gran potencial en la gestió de dades; per tant, quan HTML i PHP treballen juntament amb formularis ens trobem amb un binomi ideal.&lt;br /&gt;
&lt;br /&gt;
====Preparació de l’HTML====&lt;br /&gt;
El llenguatge HTML mostrarà la façana que l’usuari veurà a la pantalla del navegador. El PHP serà darrere d’aquesta primera pantalla i treballarà amb les dades.&lt;br /&gt;
El primer que cal programar per fer servir un formulari dissenyat en PHP és crear&lt;br /&gt;
el codi HTML. Un formulari en HTML s’emmarca entre les etiquetes &amp;lt;FORM&amp;gt; i &amp;lt;/FORM&amp;gt;. Per manipular aquest formulari s’utilitza l’atribut ''ACTION''.&lt;br /&gt;
L’atribut ''ACTION'' indica el programa que s’encarrega de manipular les dades, tasca que encomanareu a un codi dissenyat en llenguatge PHP.&lt;br /&gt;
L’etiqueta &amp;lt;form&amp;gt; us permet fer servir dos mètodes per enviar informació: '''GET''' i '''POST'''.&lt;br /&gt;
El mètode '''GET''' és molt útil en motors de cerca, però no ofereix gaire seguretat, ja que les dades que envia es poden veure en l’URL del navegador.&lt;br /&gt;
El mètode '''POST''' és molt més segur, ja que quan el servidor detecta que el mètode de transacció d’informació és '''POST''' espera rebre dades immediatament sense fer servir l’URL, la qual cosa implica que aquestes dades no seran visibles en l’URL.&lt;br /&gt;
Exemple de Formulari:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;El nostre primer exemple amb formularis&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Introdueix el teu nom i prem el botó!&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;FORM ACTION=&amp;quot;contesta.php&amp;quot; METHOD=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Si us plau, escriu el teu nom:&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;INPUT TYPE=&amp;quot;submit&amp;quot; VALUE=&amp;quot;Enviar&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/FORM&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Com valora el PHP un formulari ====&lt;br /&gt;
En el moment d’enviar les dades des del formulari d’una pàgina HTML a un fitxer escrit en PHP s’ha de tenir en compte que l’atribut ''NAME'' emmagatzema el valor.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Resposta a la petició de dades&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;...Continuem amb l’exemple!&amp;lt;/H1&amp;gt;&lt;br /&gt;
El teu nom és:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_POST['nom'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En el moment en què s’envien dades del formulari HTML cap a un fitxer PHP, aquestes dades apareixeran dins d’un array superglobal amb tots els seus valors.&lt;br /&gt;
&lt;br /&gt;
=== Exercici Mini Calculadora ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar una calculadora de sólo SUMA, para ello tendremos dos inputs y un botón, cuando se aprete el botón deberá enviar enviar el formulario al server haciendo la operación y mostrándola.&lt;br /&gt;
 &lt;br /&gt;
=== Exercici Formulari amb Vectors ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar un formulario en el servidor que genere 10 inputs y un botón, a continuación el servidor recogerá todos los datos los mostrará y calculará la suma total. &lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
:[[solu_vector_input]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Les matrius associatives i els formularis====&lt;br /&gt;
Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu ús, però, serà condicionat pel mètode utilitzat en el pas de dades en el codi HTML. Així, si en el codi HTMLel mètode és '''POST''' haureu de fer servir la matriu associativa '''$_POST'''; en canvi, si heu fet servir el mètode '''GET''' en el codi HTML, haureu de fer servir la matriu associativa '''$_GET'''.&lt;br /&gt;
&lt;br /&gt;
Per accedir als valors emmagatzemats en les matrius associatives fareu servir l’atribut corresponent '''NAME''' de l’HTML com a índex de la matriu associativa. &lt;br /&gt;
&lt;br /&gt;
No heu d’oblidar que el PHP és un llenguatge de programació que, entre altres coses, us permet utilitzar bucles. En el formulari següent es defineix una selecció múltiple, en què podreu marcar els navegadors que coneixeu.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Un exemple amb un formulari&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;seleccioMultiple.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Nom: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Correu electrònic: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Navegadors que coneixes: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;select name=&amp;quot;navegadors[]&amp;quot; multiple&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Chrome&amp;quot;&amp;gt;Chrome&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;MozillaFirefox&amp;quot;&amp;gt;Mozilla Firefox&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Safari&amp;quot;&amp;gt;Safari&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Opera&amp;quot;&amp;gt;Opera&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Lynx&amp;quot;&amp;gt;Lynx&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquí us trobareu amb un petit problema. Per recuperar els valors introduïts com a nom i correu electrònic no hi ha cap problema, la matriu $_POST us permetrà un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecció múltiple, però, sorgeix un petit problema. A diferència dels casos anteriors, ara navegadors pot contenir més d’un valor, com ho fareu per mostrar tots els valors per pantalla? La solució és utilitzar un bucle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach ($_POST['navegadors'] as $opcio)&lt;br /&gt;
echo $opcio.&amp;quot;\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un altre exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ($_POST) {&lt;br /&gt;
    echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
    //echo htmlspecialchars(print_r($_POST, true));&lt;br /&gt;
    print_r($_POST);&lt;br /&gt;
    print_r($_POST['personal']);&lt;br /&gt;
    print_r($_POST['personal']['nombre']);&lt;br /&gt;
    echo '&amp;lt;/pre&amp;gt;';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
    Nombre:  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[nombre]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Email:   &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[email]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Cerveza: &amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;select multiple name=&amp;quot;cerveza[]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;warthog&amp;quot;&amp;gt;Warthog&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;guinness&amp;quot;&amp;gt;Guinness&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;stuttgarter&amp;quot;&amp;gt;Stuttgarter Schwabenbräu&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;¡enviarme!&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode GET ===&lt;br /&gt;
*El mètode GET produeix una cadena llarga que apareix en els logs del servidor i a la URL del navegador.&lt;br /&gt;
&lt;br /&gt;
*GET envia les dades usant la URL&lt;br /&gt;
&lt;br /&gt;
*El mètode GET es limita a enviar fins a només 1.024 caràcters .&lt;br /&gt;
&lt;br /&gt;
*Mai utilitzeu el mètode GET, si voleu enviar la contrasenya o una altra informació confidencial al servidor .&lt;br /&gt;
&lt;br /&gt;
*GET no pot ser utilitzat per enviar dades binàries, com imatges o documents de text, al servidor .&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode GET es pot accedir mitjançant la variable d'entorn QUERY_STRING.&lt;br /&gt;
&lt;br /&gt;
*PHP proveeix la matriu associativa $_GET per accedeix a tota la informació que s'enviï mitjançant el mètode GET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$PHP_SELF = $_SERVER['PHP_SELF'];&lt;br /&gt;
echo $PHP_SELF ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if( isset($_GET[&amp;quot;name&amp;quot;])||  isset($_GET[&amp;quot;age&amp;quot;]) )&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_GET['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_GET['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt; method=&amp;quot;GET&amp;quot;&amp;gt;&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode POST ===&lt;br /&gt;
&lt;br /&gt;
*POST envía los datos de forma que no podemos verlos (en un segundo plano u &amp;quot;ocultos&amp;quot; al usuario).&lt;br /&gt;
&lt;br /&gt;
*El mètode POST no té cap restricció en la mida de les dades a enviar.&lt;br /&gt;
&lt;br /&gt;
*El mètode POST es pot utilitzar per enviar ASCII, així com dades binàries.&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode POST passa per la capçalera HTTP. La seguretat depèn de protocol HTTP. Mitjançant l'ús d'HTTP segur pots assegurar-te que la seva informació està segura .&lt;br /&gt;
&lt;br /&gt;
*El PHP proveeix de la matriu associativa $ _POST per accedeix a tota la informació enviada pel mètode POST.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(isset($_POST[&amp;quot;name&amp;quot;]) ||  isset($_POST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_POST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_POST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;   &amp;lt;!--&amp;lt;?php $_PHP_SELF ?&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== $_PHP_SELF ===&lt;br /&gt;
La variable $_PHP_SELF conté el nom del script PHP (pàgina php) el qual està executant.  ESTÁ DESFASADO USAR $_SERVER['PHP_SELF']&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(  isset($_REQUEST[&amp;quot;name&amp;quot;]) ||  isset($_REQUEST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_REQUEST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_REQUEST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo formulario POST ===&lt;br /&gt;
&lt;br /&gt;
Dissenyar una pàgina web simple amb php que demani a lusuari el preu de tres productes diferents en tres&lt;br /&gt;
establiments diferents. Exemple:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Form1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Un cop s'introdueixi aquesta&lt;br /&gt;
informació al formulari, s'ha de mostrar el resultat, dels tres preus introduïts i el preu mitjà del producte.&lt;br /&gt;
&lt;br /&gt;
  DATOS RECIBIDOS&lt;br /&gt;
  Precio Guitarra Martin D18 en Ubisa: 4.200 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Thomann 3.800 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Alfasonic 4.100 euros&lt;br /&gt;
&lt;br /&gt;
  El precio medio del producto es de 4.0333333333333 euros&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;PHP Calcula precios&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;form name=&amp;quot;formularioDatos&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;01-Formulari.php&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt; CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Ubisa, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Thomann, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio2&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Alfasoni, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio3&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;input value=&amp;quot;Calcular&amp;quot; type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
01-Formulari.php&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php //Ejemplo aprenderaprogramar.com&lt;br /&gt;
$precio1 = $_POST['precio1'];&lt;br /&gt;
$precio2 = $_POST['precio2'];&lt;br /&gt;
$precio3 = $_POST['precio3'];&lt;br /&gt;
$media = ($precio1+$precio2+$precio3)/3;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; DATOS RECIBIDOS&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Ubisa: &amp;quot;. $precio1. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Thomann &amp;quot;. $precio2. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Alfasonic &amp;quot;. $precio3. &amp;quot; euros &amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; El precio medio del producto es de &amp;quot;. $media. &amp;quot; euros&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Acceso a Ficheros ===&lt;br /&gt;
&lt;br /&gt;
'''Abrir y cerrar el descriptor de ficheros'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $fitxer = fopen(&amp;quot;datos.txt&amp;quot;,&amp;quot;a&amp;quot;);&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'r' 	Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero. &lt;br /&gt;
'w+' 	Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear. &lt;br /&gt;
'a+' 	Apertura para lectura y escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() no tiene efecto, las escrituras siempre son pospuestas. &lt;br /&gt;
&lt;br /&gt;
'''Escribir datos en un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  $fp = fopen('datos.txt', 'a');&lt;br /&gt;
    fwrite($fp, 'Julio');&lt;br /&gt;
    fwrite($fp, 'Noguera');&lt;br /&gt;
    fclose($fp);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Leer datos de un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 $fitxer=fopen(&amp;quot;datos.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while(!feof($fitxer)){&lt;br /&gt;
       $line = fgets($fitxer);&lt;br /&gt;
       echo $line;&lt;br /&gt;
    }&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más info&lt;br /&gt;
http://www.php.net/manual/es/function.fopen.php&lt;br /&gt;
http://www.php.net/manual/es/function.fgets.php&lt;br /&gt;
http://www.php.net/manual/es/function.fwrite.php&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Formulari Insti // Acceso a ficheros ===&lt;br /&gt;
&lt;br /&gt;
Se desea crear un formulario donde se introduzcan los campos de nombre, apellidos, dni, contraseña, cuando se clique el botón de enviar, el servidor debe recibir todos los parámetros de ese usuario y escribirlos en un fichero de texto (fopen/fwrite), el siguiente usuario que rellene el formulario escribirá a continuación, después debe listar todos los ficheros que tiene el servidor (system()/shell_exec).&lt;br /&gt;
&lt;br /&gt;
solució: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
if ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;) { &lt;br /&gt;
&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    $nombre = $_POST['nombre'];  //recibe los parámetros del formulario&lt;br /&gt;
    $apellido = $_POST['apellido'];&lt;br /&gt;
    $dni = $_POST['dni'];&lt;br /&gt;
    $pass = $_POST['pass'];&lt;br /&gt;
&lt;br /&gt;
    $file = fopen(&amp;quot;clase.txt&amp;quot;, &amp;quot;a&amp;quot;);    //crea un descriptor de fichero&lt;br /&gt;
    fwrite($file, ($nombre) . &amp;quot;,&amp;quot; . ($apellido) . &amp;quot;,&amp;quot; . ($dni) . &amp;quot;,&amp;quot; . ($pass) . &amp;quot;\n&amp;quot;);  //introduce datos dentro del fichero&lt;br /&gt;
    fclose($file);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    $usuarioEnSistema = system('cat clase.txt');     //ejecuta terminal linux&lt;br /&gt;
   //$usuario = shell_exec('cat clase.txt'');   // comando más antiguo&lt;br /&gt;
&lt;br /&gt;
    echo $usuarioEnSistema;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nombre&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;apellido&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dni&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;pass&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Exercici: Calculadora PHP ===&lt;br /&gt;
Crea un formulari amb un únic TextBox on s'indiqui les operacions matemàtiques a realitzar. Envia el contingut del TextBox amb el mètode POST i realitza les operacions. Imprimeix per pantalla el resultat.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Solucio_calculadora_m6]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ISSET ===&lt;br /&gt;
&lt;br /&gt;
isset -&amp;gt; Devuelve '''true''' si la variable existe y tiene un valor distinto de null, false de lo contrario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var_dump( isset($var) );   //isset() devuelve '''false''' por que $var no ha sido definida&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''false''' aunque la variable haya sido declarada pues su valor es NULL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var = &amp;quot;&amp;quot;;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''true'''. El valor ya no es nulo aunque esté vacío&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Y cuando deberías usar isset()?'''&lt;br /&gt;
&lt;br /&gt;
Siempre y cuando que quieras comprobar que la variable existe (variable inicializada), un ejemplo bueno sería si quieres saber si se ha mandado un formulario:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;campo1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if (isset($_POST['submit']) {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''isset(), is_null() y empty(): Diferencias y ejemplos de uso'''&lt;br /&gt;
&lt;br /&gt;
https://cybmeta.com/isset-is_null-y-empty-diferencias-y-ejemplos-de-uso&lt;br /&gt;
&lt;br /&gt;
https://es.stackoverflow.com/questions/32133/como-y-cuando-se-usan-isset-y-empty-correctamente&lt;br /&gt;
&lt;br /&gt;
=== Exercici enviament de dades ===&lt;br /&gt;
És popular el disseny d’un document web, en què el mateix document conté la part del formulari HTML i el codi PHP que agafa les dades i les processa. Aquest procediment pot resultar estrany en principi, ja que esteu esperant dos documents ben diferenciats. Així i tot val la pena que veieu aquesta forma de treballar i decidiu si us resulta útil o no. Per fer-ho, simplement heu de fusionar els dos documents (el que envia les dades i el que les rep) en un document únic HTML+PHP de dues parts amb la següent estructura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(primera vegada que s'entra al document)&lt;br /&gt;
{&lt;br /&gt;
crear formulari HTML i enviar-ho al propi document&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
rebre les dades a través de POST o GET&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Feu un document amb aquestes característiques que enviï les següents dades:&lt;br /&gt;
*nom&lt;br /&gt;
*cognom&lt;br /&gt;
*contrasenya&lt;br /&gt;
*si l’usuari és alumne o professor&lt;br /&gt;
*si l’usuari és actiu o no&lt;br /&gt;
*foto (únicament el nom del fitxer)&lt;br /&gt;
*edat (entre 18 i 99)&lt;br /&gt;
*comentaris&lt;br /&gt;
*un camp ocult amb el nom ocult i valor prova&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[:solucio_enviament_dades_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Galetes ===&lt;br /&gt;
Les galetes són uns fitxers de text que emmagatzemen informació a l’ordinador client referent a la visita d’un usuari a una pàgina web.&lt;br /&gt;
Les galetes no són un acte d’intromissió per part de la pàgina web visitada; simplement, són una font d’informació molt útil per augmentar l’eficiència en l’accés.&lt;br /&gt;
Les galetes tenen una mida màxima d’1K i caduquen, la qual cosa fa molt difícil que s’utilitzin amb fins malintencionats. A més, únicament pot consultar la galeta el web que l’ha dipositada, la informació que conté no és visible per a la resta de pàgines web.&lt;br /&gt;
&lt;br /&gt;
Un ús molt freqüent de les galetes és emmagatzemar un perfil d’usuari. Així s’aconsegueix que cada vegada que el mateix usuari accedeix a un web, aquest en conegui les preferències i li mostri directament els continguts més adequats.&lt;br /&gt;
&lt;br /&gt;
Les galetes ajuden els programadors a crear un entorn més adequat per a l’usuari visitant. Moltes pàgines web permeten canviar la mida del text, els colors de la pàgina, la disposició d’alguns continguts, etc. Una vegada l’usuari ha modificat al seu gust l’aspecte de la pàgina web, aquestes dades s’emmagatzemen per a la propera visita.&lt;br /&gt;
&lt;br /&gt;
Importante: las cookies se envían al cliente mediante encabezados HTTP. Como cualquier otro encabezado, las cookies se deben enviar antes que cualquier salida que genere la página (antes que &amp;lt;html&amp;gt;, &amp;lt;head&amp;gt; o un simple espacio en blanco). &lt;br /&gt;
&lt;br /&gt;
'''Funcions del PHP per treballar amb galetes'''&lt;br /&gt;
&lt;br /&gt;
La funció que s’utilitza en PHP per crear galetes és setcookie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
bool setcookie(string $nom [, string $valor [, int $caduca= 0[, string $ruta [, string $domini [, bool $seguretat= false [, bool $nomeshttp=false]]]]]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* $nom: és obligatori i indica el nom que donareu a la galeta, la resta de paràmetres són opcionals.&lt;br /&gt;
* $valor: és el valor que tindrà la galeta.&lt;br /&gt;
* $caduca: indica els segons que té de vida la galeta; si no s’indica res la galeta deixarà d’existir quan finalitzi la sessió de l’usuari.&lt;br /&gt;
* $ruta: indica on podeu trobar la galeta dins el servidor.&lt;br /&gt;
Si no ponemos la ruta (Path), la cookie sólo se puede usar en páginas que se encuentren en el mismo directorio que la página que la creó. Si queremos que se utilice en un directorio en concreto debemos añadir la ruta.&lt;br /&gt;
&lt;br /&gt;
//Cookie creada en el directorio /registro/login&lt;br /&gt;
&lt;br /&gt;
//Si queremos que las páginas del directorio raíz / puedan acceder a la cookie&lt;br /&gt;
&lt;br /&gt;
* $domini: marca el domini en què la galeta està disponible.&lt;br /&gt;
* $seguretat: tindrà el valor TRUE si voleu que la galeta només s’utilitzi en una connexió segura (conexió HTTPs), i FALSE (que és el valor per defecte), si no és necessari un cert grau de seguretat.&lt;br /&gt;
* $nomeshttp: si té per valor TRUE marcarà que la galeta solament és accessible si s’utilitza el protocol HTTP.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
setcookie(&amp;quot;nom&amp;quot;, &amp;quot;Maadiva&amp;quot;, 3600, &amp;quot;/&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El segon fitxer s’encarregarà de consultar a la matriu associativa '''$_COOKIE''' el valor de la galeta indicada, que en aquest cas seria nom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_COOKIE[&amp;quot;nom&amp;quot;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
setcookie(&amp;quot;valor&amp;quot;, 1, time() + 30);    //time() tiempo desde que se originó unix.&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);    //no muestra todas las cookies por temas de seguridad&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unset($_COOKIE[&amp;quot;valor&amp;quot;]);  //otra forma setcookie('valor', 1, expire);  // setcookie(&amp;quot;valor&amp;quot;, 1, time() - 30);&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Se desea que cuente el número de visitas que realiza un usuario al visitar la página; este contador conserva su valor durante un año aún a pesar de que un usuario cierre el navegador y tarde días en volver a visitar la página.&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_contador_galletas]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Les cookies us permeten desar informació al navegador que estarà disponible més endavant pel vostre web. Per exemple, podeu desar la configuració personal de l’usuari o la llengua en què ha escollit visitar el web. La propera vegada que l’usuari visiti el web, el vostre codi PHP podrà obtenir aquesta informació desada i presentar a l’usuari el web amb la seva configuració personal o la llengua escollida. És important destacar que les cookies queden desades al navegador de l’usuari i no al servidor web.&lt;br /&gt;
&lt;br /&gt;
Feu un web amb dos fitxers. El primer, index.php, s’encarregarà d’obtenir el nom de l’usuari i la llengua que vol fer servir per defecte entre una llista desplegable mitjançant un formulari. Enviarà aquestes dades a un altre fitxer, cookie.php, que desarà la informació a les cookies.&lt;br /&gt;
La propera vegada que l’usuari accedeixi a index.php el formulari estarà emplenat amb la informació desada la vegada anterior que va accedir-hi.&lt;br /&gt;
&lt;br /&gt;
sol&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[:solucio_galetes_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sessió ===&lt;br /&gt;
&lt;br /&gt;
Les variables de sessió són variables que estan disponibles en múltiples pàgines sense haver de fer servir pas de paràmetres. Les variables de sessió tenen un temps de vida limitat i s’emmagatzemen en el servidor.&lt;br /&gt;
&lt;br /&gt;
Podeu fer servir les variables de sessió per mantenir informació (l’anomenada informació de sessió) entre diferents pàgines. Per exemple,&lt;br /&gt;
el nom d’usuari o una selecció de productes que ja s’hagi fet.&lt;br /&gt;
&lt;br /&gt;
A continuació, estudiareu un exemple format per tres fitxers. El primer fitxer és un formulari senzill que demana a l’usuari un identificador i una contrasenya. Aquestes dades s’envien a un segon fitxer, anomenat exempleAutenticar.php, que crea les variables de sessió. Finalment, trobareu un tercer fitxer anomenat continuem.php, que recupera la informació emmagatzemada en les variables de sessió.&lt;br /&gt;
&lt;br /&gt;
Just a sota d’aquest text hi ha el fitxer del qual partireu. L’hem anomena exempleSessions.php, però el podeu anomenar d’una altra manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Exemple amb variables de sessió&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
&amp;lt;form action=&amp;quot;exempleAutenticar.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
Escriu el teu nom:&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;usuari&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Escriu la teva contrasenya:&lt;br /&gt;
&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;contrasenya&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia!&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tot seguit apareix el codi del fitxer exempleAutenticar.php. En aquest fitxer creareu i inicialitzareu les dues variables de sessió que utilitzareu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION['id_usuari']=$_REQUEST['usuari'];&lt;br /&gt;
$_SESSION['clau_acces']=$_REQUEST['contrasenya'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...continueu amb l’exemple de variables de sessió...&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
Ja s’han emmagatzemat les variables de sessió.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;continuem.php&amp;quot;&amp;gt;Vinga! Cap al final de l’exemple!&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixeu-vos que el primer que es fa és cridar la funció '''session_start()'''. És obligatori que inicieu la sessió abans de cap etiqueta HTML perquè tot funcioni correctament.&lt;br /&gt;
Amb $_REQUEST es recuperen els dos valors que s’han passat des del fitxer inicial, és a dir, usuari i contrasenya, i els heu d’emmagatzemar en dues variables de sessió creades a $_SESSION, que rebran el nom d’id_usuari i clau_acces.&lt;br /&gt;
$_REQUEST és un array associatiu global que per defecte té els continguts de $_GET, $_POST i $_COOKIE.&lt;br /&gt;
A part de crear les variables de sessió i donar-los valors trobareu un enllaç cap al tercer fitxer.&lt;br /&gt;
El codi del tercer fitxer, continuem.php, el teniu a continuació:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com que esteu treballant amb sessions, el primer que hauríeu de fer és llançar la sessió amb session_start(). A continuació, es recuperen els valors emmagatzemats en les dues variables de sessió.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eliminar sesión&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
unset($_SESSION['id_usuari']); // will delete just the name data&lt;br /&gt;
&lt;br /&gt;
//session_destroy(); // borrará todos los datos asociados a ese usuario. También $_SESSION = array(); &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index3.php&amp;quot;&amp;gt;Destruir Variables de sesion&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les sessions us permeten emmagatzemar dades que podran ser compartides entre les diferents pàgines del web. Aquestes dades, a diferència de les cookies, estan emmagatzemades al servidor i estan disponibles durant tot el temps que l’usuari està interactuant amb la pàgina (temps de sessió).&lt;br /&gt;
Alguns exemples de dades que solen guardar-se a les sessions és si l’usuari ha accedit al web mitjançant els valors usuari/contrasenya, o un carret de la compra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici Sessions ====&lt;br /&gt;
1. Feu una pàgina web que passi entre les seves pàgines el nom de l’usuari i una variable (cost) que s’anirà incrementant en 10 cada vegada que l’usuari passa entre les pàgines (podem pensar que aquesta variable representa el cost de les compres que ha fet fins ara l’usuari al web).&lt;br /&gt;
La sessió es tancarà quan l’usuari torni a la pàgina de login.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://codigosdeprogramacion.com/2016/12/20/sistema-de-usuarios-y-sesiones-en-php-y-mysql-1-login-sesiones-y-logout/&lt;br /&gt;
&lt;br /&gt;
http://velozityweb.com/blog/php/login-de-usuarios-y-creacion-de-sesiones-con-php-y-mysql/#sthash.XbMcrnTA.PSO2jYQ9.dpbs&lt;br /&gt;
&lt;br /&gt;
http://www.formacionwebonline.com/crear-sesiones-php-en-intranet/&lt;br /&gt;
&lt;br /&gt;
=== Exercici Moodle ===&lt;br /&gt;
&lt;br /&gt;
2.Se trata de la hacer un moodle, tenemos un formulario y almacenaremos una base de datos (simulada) en la que guardaremos en un archivo el usuario, contraseña y rol de un profe y un alumno. &lt;br /&gt;
Deberá de comprobar si está registrado, en caso de estarlo se crearán las cookies y variables de sesión(5 minutos para el alumnado y 10 para el profe), en caso de no acceder deberán redireccionarse al login.&lt;br /&gt;
Si se validan correctamente, deberá acceder al menu y mostrar la información si tiene rol de alumno (ROLE_ALUMNO) y otra diferente si es profesor(ROLE_ALUMNO). &lt;br /&gt;
También deberá existir un logout en caso de querer terminar la sesión. &lt;br /&gt;
$_SESSION['caduca']=time()+60; &lt;br /&gt;
&lt;br /&gt;
Solució Exercici Moodle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_moodle]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejercicio Carrito ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--http://evilnapsis.com/2016/10/30/ejemplo-de-carrito-de-compras-sencillo-con-php-y-mysql/--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici Complert ====&lt;br /&gt;
Exercici que engloba Galetes, Idioma, Login, Intranet amb Cap, Peus, Menu i contingut i Sessions.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[http://www.infomerce.es/moodle/mod/resource/view.php?id=11136 Exercici de Classe]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
=== Creació del Arbre XML ===&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xmlDoc = new DOMDocument();&lt;br /&gt;
$xmlDoc-&amp;gt;load(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
=== Obtenir un element del arbre ===&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recòrrer tots els elemens ===&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print $xmlDoc-&amp;gt;saveXML(); //imprimir toda la info&lt;br /&gt;
&lt;br /&gt;
// recorrer las etiquetas y los valores&lt;br /&gt;
$x = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
foreach ($x-&amp;gt;childNodes AS $item) {&lt;br /&gt;
  print $item-&amp;gt;nodeName . &amp;quot; = &amp;quot; . $item-&amp;gt;nodeValue . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//otra manera de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   //selecciona todas las etiquetas aula y muestra el contenido dentro de ellas&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
    echo $aula-&amp;gt;nodeName;&lt;br /&gt;
    echo $aula-&amp;gt;nodeValue, PHP_EOL;&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Otra forma de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   // otra forma de acceder&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
   echo $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)[0]-&amp;gt;nodeValue;   //equivale a -&amp;gt;item(0)&lt;br /&gt;
   echo  $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
   echo $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Afegir un nou element ===&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$auladom = $xmlDoc-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmlDoc-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmlDoc-&amp;gt;createElement(&amp;quot;XARXA_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmlDoc-&amp;gt;createElement(&amp;quot;MASK_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmlDoc-&amp;gt;createElement(&amp;quot;INIT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmlDoc-&amp;gt;createElement(&amp;quot;CURRENT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
&lt;br /&gt;
$root = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
=== Esborrar un element ===&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//borrar nodo&lt;br /&gt;
$xmlDoc = new DOMDocument;&lt;br /&gt;
$xmlDoc-&amp;gt;load('file.xml');   //cargamos fichero&lt;br /&gt;
&lt;br /&gt;
$aula = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
&lt;br /&gt;
// seleccionamos el nodo concreto 0 y lo eleminamos&lt;br /&gt;
$aulaSeleccionada = $aula-&amp;gt;getElementsByTagName('aula')-&amp;gt;item(0);&lt;br /&gt;
$aulaborrada = $aula-&amp;gt;removeChild($aulaSeleccionada);&lt;br /&gt;
&lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;); //guardamos cambios&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici crear XML'''&lt;br /&gt;
&lt;br /&gt;
Tenim un formulari i volem ficar dins del nostre xml noves dades, per tant, haurem de crear un formulari on introduirem les dades.&lt;br /&gt;
&lt;br /&gt;
= Bibliografia / Webgrafia =&lt;br /&gt;
*[http://php.net/manual/es/ Manual oficial de PHP]&lt;br /&gt;
*[http://www.codeacademy.com Introducció a PHP]&lt;br /&gt;
*David Sklar, Adam Trachtenberg, &amp;quot;PHP Cookbook, Third Edition&amp;quot;, O’Reilly Media Inc., 2014. ISBN 978-1-449-36375-8&lt;br /&gt;
*Eduard García Sacristán, Eduard Latorre Jarque, Montserrat Madridejos Mora, Raúl Velaz Mayo, &amp;quot;Llenguatges de guions de servidor&amp;quot;, IOC, 2014 &lt;br /&gt;
*[https://docs.google.com/presentation/d/1ZQgIsW4KCyIfH8NyiqH9ueanM83Ym7bjitaxyQKS0hs/edit#slide=id.i14 Llenguatges de programació del costat del servidor]&lt;br /&gt;
*[http://www.adelat.org/media/docum/nuke_publico/lenguajes_del_lado_servidor_o_cliente.html www.Adelat.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EMMAGATZEMAR I LLEGIR FITXERS ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = '{&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}'&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SERIALIZACIÓN ==&lt;br /&gt;
&lt;br /&gt;
En PHP existe una forma muy sencilla de almacenar o transmitir cualquier tipo de valor (excepto el tipo resource) en forma de una cadena seriada: la serialización.&lt;br /&gt;
&lt;br /&gt;
La serialización te permite, por ejemplo, guardar un objeto o array en una base de datos o transmitirlo entre aplicaciones remotas, para luego volver a convertirlo a su tipo y estructura original.&lt;br /&gt;
&lt;br /&gt;
Supongamos que tienes el siguiente array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arr = array(&lt;br /&gt;
  &amp;quot;fruta&amp;quot; =&amp;gt; &amp;quot;manzana&amp;quot;, &lt;br /&gt;
  &amp;quot;objeto&amp;quot; =&amp;gt; &amp;quot;bicicleta&amp;quot;, &lt;br /&gt;
  &amp;quot;animales&amp;quot; =&amp;gt; array(&lt;br /&gt;
             &amp;quot;perro&amp;quot;, &lt;br /&gt;
             &amp;quot;gato&amp;quot;, &lt;br /&gt;
             &amp;quot;caballo&amp;quot;) &lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si lo deseas guardar en una tabla de una base de datos, lo puedes serializar de esta forma:&lt;br /&gt;
&lt;br /&gt;
'''$string = serialize($arr);'''&lt;br /&gt;
&lt;br /&gt;
La función serialize devolverá un valor fácilmente almacenable o transmitible:&lt;br /&gt;
&lt;br /&gt;
''a:3:{s:5:&amp;quot;fruta&amp;quot;;s:7:&amp;quot;manzana&amp;quot;;s:6:&amp;quot;objeto&amp;quot;;s:9:&amp;quot;bicicleta&amp;quot;;s:8:&amp;quot;animales&amp;quot;;a:3: i:0;s:5:&amp;quot;perro&amp;quot;;i:1;s:4:&amp;quot;gato&amp;quot;;i:2;s:7:&amp;quot;caballo&amp;quot;;}}''&lt;br /&gt;
&lt;br /&gt;
Para recuperar el valor original en PHP a partir de la cadena seriada:&lt;br /&gt;
&lt;br /&gt;
'''$arr = unserialize($string);'''&lt;br /&gt;
&lt;br /&gt;
Un ejemplo del uso de la serialización la tenemos en la forma en que WordPress almacena información variada en algunas de sus tablas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Serializar'''&lt;br /&gt;
&lt;br /&gt;
http://www.cucuza.com/como-serializar-datos-en-php/&lt;br /&gt;
&lt;br /&gt;
==EXEMPLE CLASSE SERIALIZACIÓN==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Serializer {&lt;br /&gt;
&lt;br /&gt;
    private static $path = &amp;quot;./database/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    public static function save($obj, $id) {  //$obj es un JSON , $id es el nombre del archivo &lt;br /&gt;
&lt;br /&gt;
        $arr = serialize($obj);&lt;br /&gt;
        &lt;br /&gt;
        return file_put_contents(self::$path . $id, $arr);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static function restore($id) {&lt;br /&gt;
        &lt;br /&gt;
        if  (file_exists ( self::$path . $id ) ){&lt;br /&gt;
            &lt;br /&gt;
            $xmlString = file_get_contents(self::$path . $id);&lt;br /&gt;
            &lt;br /&gt;
            return unserialize($xmlString);  &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static function showIds(){&lt;br /&gt;
        &lt;br /&gt;
        return array_slice(scandir(self::$path),2);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//al ser una classe estàtica es pot invocar els mètodes de la següent forma, per exemple:&lt;br /&gt;
&lt;br /&gt;
Serializer::save(json,nom_arxiu);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crear un JSON desde PHP (json_encode)==&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crear un objeto en PHP con JSON (json_decode)==&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ENVIAR CORREOS ==&lt;br /&gt;
&lt;br /&gt;
Mediente la función MAIL() de PHP podemos enviar correos, por ello, nuestro servidor deberá tener instalado el servicio.&lt;br /&gt;
En nuestro caso, en nuestro Hosting-ng lo tenemos.&lt;br /&gt;
Existe otra función PHPMailer dónde contiene más opciones. https://github.com/PHPMailer/PHPMailer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Forma simple'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// El mensaje&lt;br /&gt;
$msg = &amp;quot;Estimado alumno de La Mercè\nEstas invitado a participar en  clase&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// usar wordwrap() si las lineas son más largas de 70 caracteres&lt;br /&gt;
$msg = wordwrap($msg,70);&lt;br /&gt;
&lt;br /&gt;
// Enviar mail&lt;br /&gt;
mail(&amp;quot;alguien@ejemplo.cat&amp;quot;,&amp;quot;Mi título&amp;quot;,$msg);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Más opciones'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    $to = &amp;quot;ejemploPrueba@ejemplo.com&amp;quot;;&lt;br /&gt;
    $subject = &amp;quot;Asunto&amp;quot;;&lt;br /&gt;
    $txt = &amp;quot;Estamos en clase de DAW&amp;quot;;&lt;br /&gt;
    $headers = &amp;quot;From: webmaster@example.com&amp;quot; . &amp;quot;\r\n&amp;quot; .&lt;br /&gt;
        &amp;quot;CC: somebodyelse@example.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    mail($to,$subject,$txt,$headers);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' En terminal '''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//también podemos hacerlo desde el terminal de linux en nuestro servidor&lt;br /&gt;
system('mail -t alguien@ejemplo.cat -s ALTA ALUMNOS INSTI &amp;lt;&amp;lt;&amp;lt; &amp;quot;El alumno&amp;quot;'.$nom.&amp;quot; &amp;quot;.$cognoms.&amp;quot; está en espera de darse de alta&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SUBIR FICHEROS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// En versiones de PHP anteriores a la 4.1.0, debería utilizarse $HTTP_POST_FILES en lugar&lt;br /&gt;
// de $_FILES.&lt;br /&gt;
&lt;br /&gt;
 //Directori de pujada. Permís d'escriptura i accés per a www-data&lt;br /&gt;
$dir_subida = './';  &lt;br /&gt;
 //Anexem la carpeta amb el nos del finder que ens puja&lt;br /&gt;
$fichero_subido = $dir_subida . basename($_FILES['file']['name']); //basename: muestra el nombre del fichero con la extensión&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Movem el fitxer temporal creat a /tmp a la ubicació o nom indicats&lt;br /&gt;
echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
if (move_uploaded_file($_FILES['file']['tmp_name'], $fichero_subido)) {    &lt;br /&gt;
    echo &amp;quot;El fichero es válido y se subió con éxito.\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;¡Posible ataque de subida de ficheros!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo 'Más información de depuración:';&lt;br /&gt;
print_r($_FILES);&lt;br /&gt;
&lt;br /&gt;
/*$_FILES['file']['name'] -- original name of the file on the client machine.&lt;br /&gt;
$_FILES['file']['type'] -- mime type of the file, provided by the browser&lt;br /&gt;
$_FILES['file']['size'] -- size (in bytes) of the uploaded file&lt;br /&gt;
$_FILES['file']['tmp_name'] -- temporary filename of the uploaded file, stored on the server&lt;br /&gt;
$_FILES['file']['error'] -- returns an error code, useful for debugging.&lt;br /&gt;
*/&lt;br /&gt;
print &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; SUBIR FICHEROS &amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;!-- El tipo de codificación de datos, enctype, DEBE especificarse como sigue --&amp;gt;&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- MAX_FILE_SIZE debe preceder al campo de entrada del fichero --&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;MAX_FILE_SIZE&amp;quot; value=&amp;quot;30000&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- El nombre del elemento de entrada determina el nombre en el array $_FILES --&amp;gt;&lt;br /&gt;
    Enviar este fichero: &amp;lt;input name=&amp;quot;fichero_usuario&amp;quot; type=&amp;quot;file&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar fichero&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EXERCICI:'''&lt;br /&gt;
&lt;br /&gt;
Es desitja desenvolupar un formulari on pugui ficar el nom d'usuari i a més pujar un fitxer. Deurà haver una pàgina que mostre tots el fitxers d'eixe Usuari i el nombre d'arxius.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDF ==&lt;br /&gt;
Podem també generar pdf's a FPDF http://www.fpdf.org/ , però es deurà baixar la llibreria primer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require('fpdf.php');&lt;br /&gt;
&lt;br /&gt;
class PDF extends FPDF&lt;br /&gt;
{&lt;br /&gt;
// Page header&lt;br /&gt;
function Header()&lt;br /&gt;
{&lt;br /&gt;
    // Logo&lt;br /&gt;
    $this-&amp;gt;Image('logo.png',10,6,30);&lt;br /&gt;
    // Arial bold 15&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','B',15);&lt;br /&gt;
    // Move to the right&lt;br /&gt;
    $this-&amp;gt;Cell(80);&lt;br /&gt;
    // Title&lt;br /&gt;
    $this-&amp;gt;Cell(30,10,'Title',1,0,'C');&lt;br /&gt;
    // Line break&lt;br /&gt;
    $this-&amp;gt;Ln(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Page footer&lt;br /&gt;
function Footer()&lt;br /&gt;
{&lt;br /&gt;
    // Position at 1.5 cm from bottom&lt;br /&gt;
    $this-&amp;gt;SetY(-15);&lt;br /&gt;
    // Arial italic 8&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','I',8);&lt;br /&gt;
    // Page number&lt;br /&gt;
    $this-&amp;gt;Cell(0,10,'Page '.$this-&amp;gt;PageNo().'/{nb}',0,0,'C');&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Instanciation of inherited class&lt;br /&gt;
$pdf = new PDF();&lt;br /&gt;
$pdf-&amp;gt;AliasNbPages();&lt;br /&gt;
$pdf-&amp;gt;AddPage();&lt;br /&gt;
$pdf-&amp;gt;SetFont('Times','',12);&lt;br /&gt;
for($i=1;$i&amp;lt;=40;$i++)&lt;br /&gt;
    $pdf-&amp;gt;Cell(0,10,'Printing line number '.$i,0,1);&lt;br /&gt;
$pdf-&amp;gt;Output();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= QR =&lt;br /&gt;
&lt;br /&gt;
També podem crear codis QR al nostre servidor, hi han moltes libreries tanta en PHP com en JS.&lt;br /&gt;
https://sourceforge.net/projects/phpqrcode/&lt;br /&gt;
&lt;br /&gt;
Es deurà baixar la llibreria i ficar la carpeta &amp;quot;phpqrcode&amp;quot; dins del nostre servidor, a més de introduir el següent codi. &lt;br /&gt;
//'''NOTA''': deureu donar-li permisos d'escriptura a la carpeta&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   // la llibreria s'ha descomprimit dins d'una carpeta anomenada &amp;quot;phpqrcode&amp;quot;&lt;br /&gt;
   include('phpqrcode/qrlib.php');&lt;br /&gt;
   &lt;br /&gt;
   QRcode::png('http://wikiserver.infomerce.es', 'imatgeqr.png');&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
   &amp;lt;img src=&amp;quot;imatgeqr.png&amp;quot; /&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici- Inventario'''&lt;br /&gt;
&lt;br /&gt;
Queremos crear un registro o inventario de los ordenadores, por ellos, queremos generar códigos QR que serán pegatinas para poner en cada uno de los ordenadores de las diferentes aulas, por ello crearemos un formulario donde introduciremos el aula y el ordenador, deben almacenarse en un variable de sesión (ya que no sabemos todavía conectarnos a BD) y cuando cliquemos mostrar deben de aparecer todas los códigos QR del aula.&lt;br /&gt;
También se desea guardarlo en pdf (mirar librerias) con el título y el aula y el codigo QR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CONECTAR CON LDAP o ACTIVE DIRECTORY ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class LDAP &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
      //Asigno variables para accesar al servidor LDAP&lt;br /&gt;
   private $conectar;&lt;br /&gt;
   private $host;&lt;br /&gt;
   private $user;&lt;br /&gt;
   private $pswd;&lt;br /&gt;
   private $dn;&lt;br /&gt;
   private $OU;&lt;br /&gt;
   private $DC;&lt;br /&gt;
   private $DC1;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   public function __construct($user,$password,$ou,$dc,$dc1)&lt;br /&gt;
   {&lt;br /&gt;
    $this-&amp;gt;host= &amp;quot;172.16.208.174&amp;quot;;&lt;br /&gt;
    $this-&amp;gt;user = $user;&lt;br /&gt;
    $this-&amp;gt;pswd = $password;&lt;br /&gt;
    $this-&amp;gt;OU = $ou;&lt;br /&gt;
    $this-&amp;gt;DC = $dc;&lt;br /&gt;
    $this-&amp;gt;DC1 = $dc1;&lt;br /&gt;
    $this-&amp;gt;dn = &amp;quot;OU=&amp;quot;.$ou.&amp;quot;,DC=&amp;quot;.$dc.&amp;quot;,DC=&amp;quot;.$dc1.&amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function conexion()&lt;br /&gt;
   {&lt;br /&gt;
       $this-&amp;gt;conectar = ldap_connect($this-&amp;gt;host) or die(&amp;quot;Imposible Conectar&amp;quot;);&lt;br /&gt;
     // Especifico la versión del protocolo LDAP&lt;br /&gt;
    ldap_set_option($this-&amp;gt;conectar, LDAP_OPT_PROTOCOL_VERSION, 3)    or die (&amp;quot;Imposible asignar el Protocolo LDAP&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function credenciales(){&lt;br /&gt;
   // Valido las credenciales para accesar al servidor LDAP&lt;br /&gt;
    $bd = ldap_bind($this-&amp;gt;conectar, $this-&amp;gt;user, $this-&amp;gt;pswd)    or die (&amp;quot;Imposible Validar en el Servidor LDAP&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Especifico los parámetros que quiero que me regrese la consulta&lt;br /&gt;
    $attrs = array(&amp;quot;displayname&amp;quot;,&amp;quot;mail&amp;quot;,&amp;quot;samaccountname&amp;quot;,&amp;quot;telephonenumber&amp;quot;,&amp;quot;givenname&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
    // Creo el filtro para la busqueda&lt;br /&gt;
    $filter = &amp;quot;(samaccountname=&amp;quot;.$this-&amp;gt;user.&amp;quot;)&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    $search = ldap_search($this-&amp;gt;conectar, $this-&amp;gt;dn, $filter, $attrs)    or die (&amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    $entries = ldap_get_entries($this-&amp;gt;conectar, $search);&lt;br /&gt;
&lt;br /&gt;
    return $entries;&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17485</id>
		<title>NF2: Generació de documents web amb llenguatges de guions</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17485"/>
				<updated>2023-10-27T15:31:58Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introducció llenguatges de programació del costat Servidor =&lt;br /&gt;
&lt;br /&gt;
Existeix una multitud de llenguatges concebuts o no per a Internet. Cadascun d'ells explota més a fons certes característiques que ho fan més o menys útils per desenvolupar diferents aplicacions.&lt;br /&gt;
Un '''llenguatge del costat del servidor''' és aquell que '''s'executa en el servidor web, just abans que s'enviï la pàgina''' a través d'Internet al client. Les pàgines que s'executen en el servidor poden realitzar accessos a bases de dades, connexions en xarxa, i altres tasques per crear la pàgina final que veurà el client.&lt;br /&gt;
D'altra banda, els '''llenguatges de costat client''' (entre els quals no només es troba l'HTML sinó també el Java i el Javascript els quals són simplement inclosos en el codi HTML) són aquells que '''poden ser directament executats pel navegador i no necessiten un pretractament'''.&lt;br /&gt;
[[Fitxer:serverside.jpg|center]]&lt;br /&gt;
Els llenguatges de costat servidor més àmpliament utilitzats per al desenvolupament de pàgines dinàmiques són l'ASP, JSP, PERL i PHP.&lt;br /&gt;
== ASP.NET ==&lt;br /&gt;
Llenguatge comercialitzat per Microsoft, i usat per programadors per desenvolupar entre altres funcions, llocs web. ASP.NET és el successor de la tecnologia ASP, va ser llançada al mercat mitjançant una estratègia de mercat denominada .NET.&lt;br /&gt;
Es desenvolupat per resoldre les limitants que brindava el teu antecessor ASP. Per al desenvolupament d'ASP.NET es pot utilitzar C#, VB.NET o J#. Els arxius compten amb l'extensió (aspx). Per al seu funcionament de les pàgines es necessita tenir instal·lat IIS amb el Framework .Net. Microsft Windows 2003 inclou aquest framework, solament es necessitarà instal·lar-ho en versions anteriors.&lt;br /&gt;
El llenguatge ASP consisteix en una sèrie de classes .NET utilitzades per crear aplicacions Web, tant del costat client (Web Form) com del costat servidor (Web Service). La integració de nadiva .NET Framework amb el sistema operatiu Windows Server 2003 fa que la seva execució sigui més estable i ràpida que altres llenguatges de programació.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Completament orientat a objectes.&lt;br /&gt;
*Controls d'usuari i personalitzats.&lt;br /&gt;
*Divisió entre la capa d'aplicació o disseny i el codi.&lt;br /&gt;
*Facilita el manteniment de grans aplicacions.&lt;br /&gt;
*Increment de velocitat de resposta del servidor.&lt;br /&gt;
*Major velocitat.&lt;br /&gt;
*Major seguretat.&lt;br /&gt;
&lt;br /&gt;
'''Desavantatges: '''&lt;br /&gt;
*Major consum de recursos.&lt;br /&gt;
*Tecnologia propietària.&lt;br /&gt;
*Hostalatge de llocs web costosos.&lt;br /&gt;
&lt;br /&gt;
== JSP: Java Server Pages ==&lt;br /&gt;
És un llenguatge per a la creació de llocs web dinàmics, acrònim de Java Server Pages. Està orientat a desenvolupar pàgines web en Java. JSP és un llenguatge multiplataforma.&lt;br /&gt;
JSP va ser desenvolupat per Sun Microsystems. Comparteix avantatges similars a les d'ASP.NET, desenvolupat per a la creació d'aplicacions web potents. Posseeix un motor de pàgines basat en els servlets de Java. Per al seu funcionament es necessita tenir instal·lat un servidor Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Característiques'''&lt;br /&gt;
*Codi separat de la lògica del programa.&lt;br /&gt;
*Les pàgines són compilades en la primera petició.&lt;br /&gt;
*Permet separar la part dinàmica de l'estàtica a les pàgines web.&lt;br /&gt;
*Els arxius es troben amb l'extensió (jsp).&lt;br /&gt;
*El codi JSP pot ser incrustat en codi HTML.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Execució ràpida del servlets.&lt;br /&gt;
*Crear pàgines del costat del servidor.&lt;br /&gt;
*Multiplataforma.&lt;br /&gt;
*Codi ben estructurat.&lt;br /&gt;
*Integritat amb els mòduls de Java.&lt;br /&gt;
*La part dinàmica està escrita en Java.&lt;br /&gt;
== PERL (Practical Extraction and Report Language) ==&lt;br /&gt;
És un llenguatge de programació desenvolupat per Larry Wall (lwall at netlabs.com) inspirat en altres eines d'UNIX com són: sigueu, grep, awk, c-shell, per a l'administració de tasques pròpies de sistemes UNIX. No estableix cap filosofia de programació concreta. No es pot dir que sigui orientat a objectes, modular o estructurat encara que suporta directament tots aquests paradigmes; el seu punt fort són les labors de processament de textos i arxius. Llenguatge de programació basat en scripts portable a gairebé qualsevol plataforma. És molt utilitzat per escriure CGIs. Un dels seus elements més potents són les expressions regulars, que a partir de la seva versió en Perl han estat adoptades per altres llenguatges i plataformes com .NET o Javascript.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Es poden ajuntar diversos programes d'una forma senzilla per aconseguir una meta determinada. Els usuaris de Windows agrairan aquesta propietat ja que normalment emmalalteixen d'un bon llenguatge tipus “script”.&lt;br /&gt;
*És relativament ràpid per a un llenguatge tipus “script”.&lt;br /&gt;
*Està disponible en múltiples plataformes i sistemes operatius (UNIX, Linux i Windows). Un programa que s'escrigui tenint en compte la compatibilitat pot ser escrit en una plataforma i executat en una altra.&lt;br /&gt;
*Hi ha una col·lecció enorme de mòduls que poden ser incorporats a qualsevol “script” de Perl. Estan disponibles en el CPAN (“Comprehensive Perl Arxivi Network”). En particular existeix una extensió per a càlcul numèric denominada PDL.&lt;br /&gt;
*Perl és gratuït. Molt més que això, és “Programari Lliure”. Això vol dir que el codi font està disponible perquè qualsevol el pugui veure o modificar, i el que és més important, sempre ho estarà. Encara que mai pretenguis canviar el codi, és important disposar de la possibilitat de fer-ho, ja que sempre es podrà contractar a una tercera persona perquè ho modifiqui en el cas que hi hagi un error, i hauria de ser possible solucionar-ho.&lt;br /&gt;
*Li atorga al programador molta llibertat perquè faci el programa com vulgui. Tal com diu l'eslògan de Perl “Hi ha més d'una forma de fer-ho”&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
PHP és l'acrònim de Hipertext Preprocesor. És un llenguatge de programació del costat del servidor gratuït i independent de plataforma, ràpid, amb una gran llibreria de funcions i molta documentació. Va ser creat originalment en 1994 per Rasmus Lerdorf, però com PHP està desenvolupat en política de codi obert, al llarg de la seva història ha tingut moltes contribucions d'altres desenvolupadors.&lt;br /&gt;
El client solament rep una pàgina amb el codi HTML resultant de l'execució de la PHP. Com la pàgina resultant conté únicament codi HTML, és compatible amb tots els navegadors.&lt;br /&gt;
&lt;br /&gt;
https://luisjordan.net/node-js/node-js-vs-php-comparaciones-cms-beneficios-y-tiempos-de-respuesta/&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Molt fàcil d'aprendre.&lt;br /&gt;
*Es caracteritza per ser un llenguatge molt ràpid.&lt;br /&gt;
*Suporta en certa mesura l'orientació a objecte. Classes i herència.&lt;br /&gt;
*És un llenguatge multiplataforma: Linux, Windows, entre uns altres.&lt;br /&gt;
*Capacitat de connexió amb la majoria dels manejadores de base de dades: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre unes altres.&lt;br /&gt;
*Capacitat d'expandir el seu potencial utilitzant mòduls.&lt;br /&gt;
*Posseeix documentació a la seva pàgina oficial la qual inclou descripció i exemples de cadascuna de les seves funcions.&lt;br /&gt;
*És lliure, per la qual cosa es presenta com una alternativa de fàcil accés per a tots.&lt;br /&gt;
*Inclou gran quantitat de funcions.&lt;br /&gt;
*No requereix definició de tipus de variables ni maneig detallat del baix nivell.&lt;br /&gt;
&lt;br /&gt;
= Preparació de l'entorn =&lt;br /&gt;
== Instal·lació de servidors d'aplicacions Web ==&lt;br /&gt;
Internet s’ha convertit en la principal eina d’intercanvi d’informació a la societat actual. La connexió dels ordinadors a les xarxes locals i aquestes xarxes a d’altres de grans dimensions ha possibilitat la comunicació global d’informació entre els ordinadors arreu del món. Per poder oferir serveis web, els servidors han de tenir instal·lats una sèrie de serveis. El servidor web permet l’enviament de continguts a altres ordinadors a través de la xarxa. Els preprocessadors d’hipertext (com PHP) permeten crear continguts web de forma dinàmica. Els servidors de bases de dades permeten emmagatzemar informació de forma estructurada que es pot fer servir per generar contingut web. Aquests serveis han de ser instal·lats i configurats correctament abans de començar a crear el contingut web dinàmic del nostre web.&lt;br /&gt;
&lt;br /&gt;
Un '''servidor web''' és una peça de programari que respon a les peticions dels navegadors i lliura la pàgina per al navegador a través d’Internet. Quan es crida a una pàgina web per l’adreça –l’URL (uniform resource locator), per exemple, www.infomerce.es/index.html-, la comunicació entre el navegador i el servidor és possible gràcies a tres protocols:&lt;br /&gt;
* TCP(Transmission Control Protocol, protocol de control de transmissió): és el responsable de fer que el missatge arribi a la destinació sense errors.&lt;br /&gt;
* IP(Internet Protocol): és el responsable de fer que el missatge trobi el camí fins al servidor.&lt;br /&gt;
* HTTP(Hypertext Transfer Protocol, protocol de transferència d’hipertext): és el protocol que ha indicat l’usuari a l’hora de demanar el recurs al servidor. La primera part d’un recurs URL correspon al protocol que utilitzaran client i servidor per intercanviar dades.&lt;br /&gt;
== HTTP: comunicació entre servidor i client ==&lt;br /&gt;
Un cop establerta la connexió entra en joc el protocol HTTP: el navegador envia una petició al servidor en què sol·licita el recurs index.html. El servidor processa aquesta petició i retorna la pàgina sol·licitada al navegador, que interpreta les etiquetes HTML i la presenta a l’usuari.&lt;br /&gt;
[[Fitxer:peticiohttp.jpg|center]]&lt;br /&gt;
La informació que el client envia al servidor en la petició és la següent:&lt;br /&gt;
* El mètode HTTP: l’acció que s’ha de fer.&lt;br /&gt;
* El recurs a què s’ha d’accedir (una part de l’URL).&lt;br /&gt;
* La informació que l’usuari envia al servidor.&lt;br /&gt;
La informació que el servidor envia en la resposta té dues parts ben diferenciades: &lt;br /&gt;
* La capçalera: conté el codi que indica si la petició s’ha complert. També conté el tipus de contingut que enviarà al client.&lt;br /&gt;
* El contingut: (text, codi HTML, imatges, etc.) del recurs demanat.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Preparació M.V. amb Ubuntu i PHP ===&lt;br /&gt;
Es tracta d'importar una M.V. amb Ubuntu Server. Aquesta màquina virtual la utilitzarem al llarg del curs per desenvolupar programes amb el llenguatge PHP. LA M.V. ha de tenir les següents característiques:&lt;br /&gt;
*512 MB de Ram&lt;br /&gt;
*Targeta mode Pont (Has de reinicialitzar la @MAC i esborrar el fitxer: /etc/udev/rules.d/70-persistent-net.rules)&lt;br /&gt;
*Configura la @IP. &lt;br /&gt;
Instal·la el següent programari:&lt;br /&gt;
*openssh-server (per permetre comunicacions remotes)&lt;br /&gt;
*Servidor Web apache2&lt;br /&gt;
*Servidor PHP&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Primer projecte amb NetBeans ===&lt;br /&gt;
Crea un projecte PHP amb NetBeans. Fes que automàticament guardi tots els fitxers a la màquina virtual creada al apartat anterior. Crea una pàgina d'exemple i comprova que funciona.&lt;br /&gt;
La pàgina d'exemple pot ser la següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
     	&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;?php&lt;br /&gt;
            echo &amp;quot;Primera Pàgina amb PHP&amp;quot;; &lt;br /&gt;
          ?&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= El Llenguatge PHP =&lt;br /&gt;
== Introducció ==&lt;br /&gt;
'''PHP''' és un llenguatge de programació obert que s’integra directament en pàgines HTML. El seu ús ha esdevingut gairebé imprescindible en les pàgines que han d’utilitzar bases de dades o formularis.&lt;br /&gt;
Rasmus Lerdorf és el creador del llenguatge PHP. El 1995 presenta la primera edició d’aquest llenguatge amb el nom de Personal Home Page tools amb llicència pública GNU. Per crear el PHP, Rasmus utilitza el codi de programació C.&lt;br /&gt;
&lt;br /&gt;
El '''codi PHP''' que escriviu, '''l’haureu d’incrustar dins de codi HTML''', concretament dins les etiquetes \&amp;lt;body\&amp;gt; del document. Mitjançant unes marques l’HTML no interpretarà el codi PHP, el qual, i mitjançant les mateixes marques, s’executarà en el servidor.&lt;br /&gt;
&lt;br /&gt;
El codi PHP s’executa en un servidor i mostra el resultat en un client. Visualitzareu els resultats amb un navegador web.&lt;br /&gt;
&lt;br /&gt;
Quan arrenca el PHP es fa la lectura del fitxer '''php.ini'''. Aquest fitxer conté la configuració del PHP i es crea durant la instal·lació del PHP. És possible que necessiteu fer canvis en el fitxer de configuració, preneu la precaució de fer-ne una còpia de seguretat abans de fer aquestes modificacions.&lt;br /&gt;
Una inspecció visual del fitxer php.ini us servirà per comprendre’n el funcionament. Depenent del valor de les variables que conté aquest fitxer, el comportament del PHP variarà en la vostra màquina. Podeu comprovar que cada variable que forma part del fitxer està àmpliament comentada, amb comentaris que es marquen amb un punt i coma.&lt;br /&gt;
&lt;br /&gt;
== Mostrar Errors ==&lt;br /&gt;
Per mostrar els errors que fem al escriure programes en php s'ha d'especificar als fitxers que els vols veure per pantalla amb les següents sentències:&lt;br /&gt;
&lt;br /&gt;
http://www.anerbarrena.com/mostrar-errores-php-608/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* * ******************Errores******************* */&lt;br /&gt;
ini_set('display_errors', true);&lt;br /&gt;
error_reporting(E_ALL);&lt;br /&gt;
/* * ********************Usuarios****************** */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintaxi ==&lt;br /&gt;
=== Generalitats ===&lt;br /&gt;
La sintaxi d'un llenguatge de programació es defineix com el conjunt de regles que han de seguir-se en escriure el codi font dels programes per considerar-se com a correctes per a aquest llenguatge de programació.&lt;br /&gt;
Les normes bàsiques que defineixen la sintaxi de PHP són les següents:&lt;br /&gt;
*Si voleu que s’interpreti el vostre codi és imprescindible que encabiu el codi escrit en PHP entre dos delimitadors. Aquestes marques són &amp;lt;?php , que la fareu servir per indicar l’inici de codi en llenguatge PHP, i ?&amp;gt; , que utilitzareu per marcar el final del vostre codi PHP.&lt;br /&gt;
*Indicareu el final d’una instrucció amb punt i coma. Cada vegada que es detecti un punt i coma s’interpretarà el codi inserit fins a aquell punt.&lt;br /&gt;
*Els comentaris en PHP els podreu incloure mitjançant:&lt;br /&gt;
** Dues barres (//) o un coixinet (#) si voleu comentar una línia&lt;br /&gt;
** Una barra i un asterisc (/*) per indicar l’inici de comentari, i un asterisc i una barra per indicar el final de comentari si voleu comentar més d’una línia(/*).&lt;br /&gt;
*No es defineix el tipus de les variables: PHP és un llenguatge de programació que no obliga a declarar prèviament el nom de les variables que s’utilitzaran ni el seu tipus (és diu que és un llenguatge sense tipus o no tipat). Ara bé, tot i que existeixen els tipus de dades en PHP aquests no es comproven.&lt;br /&gt;
*No es distingeixen les majúscules i minúscules.&lt;br /&gt;
Exemples:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Aquí teniu una instrucció.&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;i aquí una altra instrucció.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Si voleu comentar una línia ho podeu fer d’aquesta manera...&lt;br /&gt;
#...o bé d’aquesta altra.&lt;br /&gt;
/* Però si necessiteu comentar&lt;br /&gt;
més línies aquesta és la millor&lt;br /&gt;
manera de fer − ho! */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Per representar una variable '''caldrà escriure el símbol del dòlar seguit pel nom que vulgueu posar'''. En el moment de donar nom a una variable heu de tenir en compte que es diferencien majúscules i minúscules i que haurà de començar amb una lletra o caràcter de subratllat.&lt;br /&gt;
En PHP, a diferència de molts altres llenguatges, no cal declarar una variable abans d’utilitzar-la. El símbol del dòlar és el que marca que es tracta d’una variable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$Nom='whovian';&lt;br /&gt;
$Familia='Informàtica';&lt;br /&gt;
$Cicle=&amp;quot;CFGS Desenvolupament d'aplicacions Web&amp;quot;;&lt;br /&gt;
$Modul = &amp;quot;DAW en entorn servidor&amp;quot;;&lt;br /&gt;
$Durada= 165;&lt;br /&gt;
echo &amp;quot;Hola $nom!&amp;lt;br&amp;gt;&lt;br /&gt;
Benvingut als estudis d’$Familia!!!&amp;lt;br&amp;gt;&lt;br /&gt;
Cicle: $Cicle&amp;lt;br&amp;gt;&lt;br /&gt;
Mòdul: $Modul&amp;lt;br&amp;gt;&lt;br /&gt;
Durada: $Durada hores&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com podeu veure, les variables poden adquirir qualsevol dels tipus suportats, i la variable $Durada emmagatzema l’enter 180, mentre que la resta de variables emmagatzemaran cadenes.&lt;br /&gt;
Les variables s’assignen per valor per defecte, però '''si voleu assignar un valor per referència''' ho haureu d’indicar fent servir el símbol''' &amp;amp; '''tot just davant de la variable&lt;br /&gt;
=== Àmbit de les variables ===&lt;br /&gt;
&lt;br /&gt;
Les variables tenen una vida determinada depenent d’on les declareu i com ho feu. És molt important conèixer l’àmbit de les variables per controlar els vostres codis. No comprendre aquesta part pot provocar fallades inesperades en les vostres creacions.&lt;br /&gt;
L’àmbit d’una variable és el context en què és definida.&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot declarar una variable nombroses vegades en àmbits diferents:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nom=’Nyoman’;&lt;br /&gt;
echo ’De moment $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
function canvi()&lt;br /&gt;
{&lt;br /&gt;
	$nom=’Ketut’;&lt;br /&gt;
	echo ’Però ara $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
canvi();&lt;br /&gt;
echo ’I de nou $nom torna a tenir el valor de ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadors ===&lt;br /&gt;
Permetran fer accions dins el codi. Podreu canviar i assignar valors, canviar l’adreça del codi, condicionar l’execució de blocs de codi i, en&lt;br /&gt;
definitiva, dotar de la complexitat necessària els vostres programes per aconseguir un objectiu.&lt;br /&gt;
Els operadors es poden agrupar en tres blocs segons el nombre de valors sobre els quals s’actua.&lt;br /&gt;
* L’operador '''unari''' opera sobre un valor i el que pot fer en aquest valor és negar-lo, incrementar-lo o decrementar-lo, entre altres coses.&lt;br /&gt;
* L’operador '''binari''' opera sobre dos valors i permet sumar-los, restar-los o comparar-los.&lt;br /&gt;
* L’operador '''ternari''' permet escollir entre dues expressions en funció d’una altra.&lt;br /&gt;
&lt;br /&gt;
'''Operadors Aritmètics '''&lt;br /&gt;
Teniu en compte que la divisió retornarà un valor en coma flotant si el resultat de la divisió no és exacte.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
|-$valor||Negació||Oposat de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor + $valorB ||Addició||Suma de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor - $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor * $valorB||Multiplicació||Producte de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor / $ valorB||Divisió||Quocient de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor % $valorB||Mòdul||Resta de $valor dividit per $valorB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors d'assignació '''&lt;br /&gt;
L’operador bàsic d’assignació és l’igual. Amb l’operador igual la variable de l’esquerra rep el valor de l’expressió de la dreta.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor = $valorB||Assignació||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor += $valorB||Addició i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor -= $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor.= “text”||Concatenació i Assignació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de bit '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp; $valorB||i||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor I $valorB||o i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor ˆ $valorB ||xor||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
|  ̃ $valor||Negació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;lt;$valorB ||Desplaçament a l’esquerra||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;&amp;gt;$valorB||Desplaçament a la dreta||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de comparació '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor == $valorB||Igual||TRUE si $valor és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor === $valorB||Idèntic||TRUE si $valor és igual a $valorB i són del mateix tipus.&lt;br /&gt;
|-&lt;br /&gt;
| $valor != $valorB ||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;gt; $ valorB||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor !== $valorB ||No idèntic||TRUE si $valor no és igual a $valorB o no són del mateix tipus&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt; $valorB||Més petit que||TRUE si $valor és més petit que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt; $valorB||Més gran que||TRUE si $valor és més gran que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;= $valorB||Més petit o igual que||TRUE si $valor és més petit o igual que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;= $valorB||Més gran o igual que||TRUE si $valor és més gran o igual que $valorB.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Operadors d’increment i decrement '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| ++$valor||Preincrement||Incrementa $valor una unitat, i després retorna $valor.&lt;br /&gt;
|-&lt;br /&gt;
| $valor++||Postincrement||Retorna $valor i incrementa $valor una unitat.&lt;br /&gt;
|-&lt;br /&gt;
| –$valor ||Predecrement||Decrementa $valor una unitat i retorna $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor–||Postdecrement||Retorna $valor i decrementa $valor una unitat.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de lògica '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor and valorB||i||TRUE si $valor i $valorB són TRUE&lt;br /&gt;
|-&lt;br /&gt;
| $valor or $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor xor $valorB ||xor||TRUE si $valor o $valorB són TRUE, però no tots dos alhora.&lt;br /&gt;
|-&lt;br /&gt;
| !$valor||No||Inverteix el contingut de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp;&amp;amp; $valorB ||i||TRUE si $valor i $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor II $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Els Vectors i les Matrius (Arrays) ===&lt;br /&gt;
Les matrius i els vectors són conjunts de dades que poden estar definides en un Guió de PHP. Les matrius poden contenir altres matrius dintre d'ells sense restricció (multidimensionals). &lt;br /&gt;
&lt;br /&gt;
Els vectors es poden crear de dues maneres. La primera consisteix en l'ús de la funció '''array()'''. La segona implica l'ús de claudàtors.&lt;br /&gt;
Exemple de declaracions d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$elmeuarray = array($valor1, $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
$elmeuarray[1] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//També es pot declarar de la següent manera:&lt;br /&gt;
$elmeuarray = array('mes1' =&amp;gt; $valor1, 'mes2' =&amp;gt; $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
$elmeuarray['mes2'] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//Però tambés es pot declarar directament amb claudàtors:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
//o amb la següent notació&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemples d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$array = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;type&amp;quot;=&amp;gt;&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;manufactured&amp;quot;=&amp;gt;&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2 = array(&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3 = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array['name']=&amp;quot;BMW&amp;quot;;&lt;br /&gt;
$array['type']=&amp;quot;SERIE 1&amp;quot;;&lt;br /&gt;
$array['colour']=&amp;quot;BLANCO&amp;quot;;&lt;br /&gt;
$array['manufactured']=&amp;quot;2035&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2[]=&amp;quot;AUDI&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;A5&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;ROJO&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;2038&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3['name']=&amp;quot;FERRARI&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;SPIDER&amp;quot;;&lt;br /&gt;
$array3['colour']=&amp;quot;VERDE&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;2013&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les matrius son vectors multidimensionals. Els elements d'un vector a la seva vegada poden ser un altre vector. Un exemple és el següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$cars = array(&lt;br /&gt;
   &amp;quot;car1&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Toyota&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;Green&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1999,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1998),&lt;br /&gt;
   &amp;quot;car2&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;BMW&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;RED&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 2005,&amp;quot;engine_cc&amp;quot; =&amp;gt; 2400),&lt;br /&gt;
   &amp;quot;car3&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Renault&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;White&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1993,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1395),&lt;br /&gt;
);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $cars['car1']['make'],&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo $cars['car3']['engine_cc'];&lt;br /&gt;
&lt;br /&gt;
/* El resultat de l'execució de les intruccions anteriors és:&lt;br /&gt;
Toyota&lt;br /&gt;
1395&lt;br /&gt;
*/&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Més informació sobre arrays [http://php.net/manual/en/language.types.array.php aquí.]&lt;br /&gt;
Existeixen MOLTES funcions per manipular els arrays. Dona una ullada a [http://php.net/manual/en/ref.array.php aquesta pàgina] abans que comencis a implementar funcions que ja existeixen a la llibreria de php.&lt;br /&gt;
&lt;br /&gt;
=== Estructures de control ===&lt;br /&gt;
==== La sentència '''IF''' i l'Operador Ternari ====&lt;br /&gt;
Les estructures condicionals s'utilitzen per controlar quines instruccions s'executen. Els condicionals en PHP estan estructurats de manera similar als trobats en C ++ i Java .&lt;br /&gt;
Exemple d'estructures condicionals:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//Exemple 1&lt;br /&gt;
$foo = 1;&lt;br /&gt;
$bar = 2;&lt;br /&gt;
if($foo == $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is equal to $bar.&amp;quot;;&lt;br /&gt;
} elseif ($foo &amp;gt; $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is greater than $bar.&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;$foo is less than $bar.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple 2&lt;br /&gt;
$lower = 10;&lt;br /&gt;
$upper = 100;&lt;br /&gt;
$needle = 25;&lt;br /&gt;
if(($needle &amp;gt;= $lower) &amp;amp;&amp;amp; ($needle &amp;lt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is in the haystack.&amp;quot;;&lt;br /&gt;
} elseif (($needle &amp;lt;= $lower) || ($needle &amp;gt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is outside of the haystack.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple Operador Ternari&lt;br /&gt;
&lt;br /&gt;
$missatge =  (date('G') &amp;lt; 12) ? 'Buenos días' : 'Buenas tardes';&lt;br /&gt;
&lt;br /&gt;
//equival a la següent estructura:&lt;br /&gt;
if (date('G') &amp;lt; 12) {&lt;br /&gt;
$missatge = 'Buenos días';&lt;br /&gt;
} else {&lt;br /&gt;
$missatge = 'Buenas tardes';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''SWITCH''' ====&lt;br /&gt;
Quan es necessita utilitzar un IF amb molts Else pot resultar que es vegi un codi molt redundant. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user_command == &amp;quot;n&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_north();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;e&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_east();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;s&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_south();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;w&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_west();&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  do_something_else();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per millorar la llegibilitat del codi utilitzarem l'estructura 'Switch' de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 switch($user_command)&lt;br /&gt;
 {&lt;br /&gt;
   case 'n':&lt;br /&gt;
     go_north();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'e':&lt;br /&gt;
     go_east();&lt;br /&gt;
     break;&lt;br /&gt;
   case 's':&lt;br /&gt;
     go_south();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'w':&lt;br /&gt;
     go_west();&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     do_something_else();&lt;br /&gt;
     break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Un altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($firstvariable == 'comparison1' &lt;br /&gt;
         || $firstvariable == 'comparison2')&lt;br /&gt;
 {&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
 }&lt;br /&gt;
 else if ($firstvariable == 'comparison3')&lt;br /&gt;
 {&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
      launchMissiles();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//amb l'estructura switch :&lt;br /&gt;
 switch($firstvariable)&lt;br /&gt;
 {&lt;br /&gt;
  case 'comparison1':&lt;br /&gt;
  case 'comparison2':&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  case 'comparison3':&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  default: &lt;br /&gt;
      launchMissiles();&lt;br /&gt;
      break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''WHILE''' ====&lt;br /&gt;
Aquesta sentència s'utilitzarà per repetir una serie d'instruccions tantes vegades com el condicional sigui evaluat a True.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$c = 0;&lt;br /&gt;
while ($c &amp;lt; 5) {&lt;br /&gt;
   echo $c++;&lt;br /&gt;
} ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mira el següent codi i enraona si serà un bucle infinit o no:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$c = 1;&lt;br /&gt;
$myName=&amp;quot;Fred&amp;quot;;&lt;br /&gt;
while ($myName != &amp;quot;Rumplestilskin&amp;quot;) &lt;br /&gt;
{&lt;br /&gt;
   if ($myName==&amp;quot;Fred&amp;quot;) &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Leslie&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Marc&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   $c++;&lt;br /&gt;
 &lt;br /&gt;
   if ($c==3) &lt;br /&gt;
   {&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
echo &amp;quot;You lose and I get your baby!\n&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''do ... WHILE''' ====&lt;br /&gt;
És semblan al bucle anterior però les intruccions sempre s'execulten almenys 1 vegada. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  $c = 6;&lt;br /&gt;
  do {&lt;br /&gt;
    echo 'Hi';&lt;br /&gt;
  } while ($c &amp;lt; 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''FOR''' ====&lt;br /&gt;
La sintaxi bàsica d'aquesta sentencia és la següent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for([initialization]; [condition]; [step])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'ús:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 for($i = 0; $i &amp;lt; 5; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilització amb arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $menu = array(&amp;quot;Toast and Jam&amp;quot;, &amp;quot;Bacon and Eggs&amp;quot;, &amp;quot;Homefries&amp;quot;, &amp;quot;Skillet&amp;quot;, &amp;quot;Milk and Cereal&amp;quot;);&lt;br /&gt;
 // note to self: get breakfast after writing this article&lt;br /&gt;
 $count = count($menu);&lt;br /&gt;
 for($i = 0; $i &amp;lt; $count; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i + 1 . &amp;quot;. &amp;quot; . $menu[$i] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== La sentència '''FOREACH''' ====&lt;br /&gt;
Aquesta sentència és molt utilitzada per recòrrer arrays. Com el parell array[key]=value pot ser string en ambdós casos, aquesta estructura ens permet obternir-los:&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach ($array as $someVar) {&lt;br /&gt;
  echo ($someVar . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//un altre exemple:&lt;br /&gt;
foreach ($array as $key =&amp;gt; $value) {&lt;br /&gt;
  echo ($key.&amp;quot;holds the value &amp;quot;.$value.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''break''' ====&lt;br /&gt;
&lt;br /&gt;
La sentència break provoca la sortida de qualsevol estructura de control, trencant així un bucle. Penseu per exemple un bucle que cerca un element d’un array. Una vegada trobat, és ineficient acabar de recórrer la resta de l’array.&lt;br /&gt;
''Podeu indicar a aquesta sentència quantes estructures de control voleu saltar. ''&lt;br /&gt;
En l’exemple següent el break provoca la sortida de dos blocs de codi:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
while($edat&amp;lt;20)&lt;br /&gt;
{&lt;br /&gt;
	for( ; ; $edat=$edat+1)&lt;br /&gt;
	{&lt;br /&gt;
		if($edat==18)&lt;br /&gt;
		{&lt;br /&gt;
			echo &amp;quot;Ara ja tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
			break 2;&lt;br /&gt;
		}&lt;br /&gt;
		echo &amp;quot;Encara ets menor d’edat, ja que tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;Aquesta línia no sortirà per pantalla!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;Ja no ets menor d’edat! Tens $edat anys!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
&lt;br /&gt;
===Exercici: tablita ===&lt;br /&gt;
Se desea crear una página web en la cual muestre un título y luego haga una tabla que imprima 10 filas mostrando &amp;quot;estamos en 2DAW&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;th&amp;gt;M09-PHP&amp;lt;/th&amp;gt;  &lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;?php&lt;br /&gt;
                $conta =1;&lt;br /&gt;
                while($conta&amp;lt;=10) { &lt;br /&gt;
                    echo &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;td&amp;gt;Estamos en DAW2&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    $conta++;&lt;br /&gt;
                }&lt;br /&gt;
            ?&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
     &amp;lt;/body&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exercici: Vector (opcional) ===&lt;br /&gt;
Queremos crear un vector &amp;quot;ciudades&amp;quot; donde introduciremos una serie  de ciudades, luego deberá mostrar cada una de las ciudades y el número total.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Recòrrer array ====&lt;br /&gt;
Donat el següent array:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$eu = array( &amp;quot;Italy&amp;quot;=&amp;gt;&amp;quot;Rome&amp;quot;, &amp;quot;Luxembourg&amp;quot;=&amp;gt;&amp;quot;Luxembourg&amp;quot;, &amp;quot;Belgium&amp;quot;=&amp;gt; &amp;quot;Brussels&amp;quot;, &lt;br /&gt;
&amp;quot;Denmark&amp;quot;=&amp;gt;&amp;quot;Copenhagen&amp;quot;, &amp;quot;Finland&amp;quot;=&amp;gt;&amp;quot;Helsinki&amp;quot;, &amp;quot;France&amp;quot; =&amp;gt; &amp;quot;Paris&amp;quot;, &amp;quot;Slovakia&amp;quot;=&amp;gt;&amp;quot;Bratislava&amp;quot;, &lt;br /&gt;
&amp;quot;Slovenia&amp;quot;=&amp;gt;&amp;quot;Ljubljana&amp;quot;, &amp;quot;Germany&amp;quot; =&amp;gt; &amp;quot;Berlin&amp;quot;, &amp;quot;Greece&amp;quot; =&amp;gt; &amp;quot;Athens&amp;quot;, &amp;quot;Ireland&amp;quot;=&amp;gt;&amp;quot;Dublin&amp;quot;, &lt;br /&gt;
&amp;quot;Netherlands&amp;quot;=&amp;gt;&amp;quot;Amsterdam&amp;quot;, &amp;quot;Portugal&amp;quot;=&amp;gt;&amp;quot;Lisbon&amp;quot;, &amp;quot;Spain&amp;quot;=&amp;gt;&amp;quot;Madrid&amp;quot;, &amp;quot;Sweden&amp;quot;=&amp;gt;&amp;quot;Stockholm&amp;quot;,&lt;br /&gt;
 &amp;quot;United Kingdom&amp;quot;=&amp;gt;&amp;quot;London&amp;quot;, &amp;quot;Cyprus&amp;quot;=&amp;gt;&amp;quot;Nicosia&amp;quot;, &amp;quot;Lithuania&amp;quot;=&amp;gt;&amp;quot;Vilnius&amp;quot;, &lt;br /&gt;
&amp;quot;Czech Republic&amp;quot;=&amp;gt;&amp;quot;Prague&amp;quot;, &amp;quot;Estonia&amp;quot;=&amp;gt;&amp;quot;Tallin&amp;quot;, &amp;quot;Hungary&amp;quot;=&amp;gt;&amp;quot;Budapest&amp;quot;, &amp;quot;Latvia&amp;quot;=&amp;gt;&amp;quot;Riga&amp;quot;, &lt;br /&gt;
&amp;quot;Malta&amp;quot;=&amp;gt;&amp;quot;Valetta&amp;quot;, &amp;quot;Austria&amp;quot; =&amp;gt; &amp;quot;Vienna&amp;quot;, &amp;quot;Poland&amp;quot;=&amp;gt;&amp;quot;Warsaw&amp;quot;) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Crea un script amb PHP que mostri un llistat amb el noms de les capitals i els seus corresponents països. El llistat ha de ser semblant a:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
La capital de Netherlands és Amsterdam&lt;br /&gt;
La capital de Greece és Athens&lt;br /&gt;
La capital de Germany és Berlin&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[solucio_php_recorrer_array]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Afegir un element a un array ====&lt;br /&gt;
Escriu un programa que afegeixi un nou element a un array en una posició determinada.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//abans:&lt;br /&gt;
12345&lt;br /&gt;
&lt;br /&gt;
//després d'afegir $ l'array és:&lt;br /&gt;
123$45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
:[[solucio_afegir_element_array_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Curta i llarga ====&lt;br /&gt;
Escriu un programa en PHP que retorni la longitud màxima i mínima dels strings que conté un array.&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ar = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$max=0;&lt;br /&gt;
$min = PHP_INT_MAX;&lt;br /&gt;
&lt;br /&gt;
foreach($ar as $valor){&lt;br /&gt;
    if( strlen($valor) &amp;lt; $min){&lt;br /&gt;
        $min = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
    if (strlen($valor) &amp;gt; $max){&lt;br /&gt;
        $max = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;La longitud mes curta es $min i la mes llarga es $max.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Otra solucion:&lt;br /&gt;
&lt;br /&gt;
$my_array = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$otroarray = array_map('strlen', $my_array);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;La longitud mes curta es &amp;quot;. min($otroarray) .&amp;quot; i la mes llarga es &amp;quot;. max($otroarray).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
print_r($otroarray);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==== Exercici: Dibuixa asteriscs ====&lt;br /&gt;
Dibuixa amb PHP utilitzant asteriscs el següent dibuix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* &lt;br /&gt;
* * &lt;br /&gt;
* * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * &lt;br /&gt;
* * &lt;br /&gt;
* &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
$n=5;  &lt;br /&gt;
&lt;br /&gt;
for($i=1; $i&amp;lt;=$n; $i++)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
for($i=$n; $i&amp;gt;=1; $i--)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Escacs ====&lt;br /&gt;
Dibuixa una taula d'escacs com la que pots veure a continuació. &lt;br /&gt;
Table width=&amp;quot;270px&amp;quot; i cada cel·la ocupa 30px d'amplada i d'altura.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:escacs.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:solucio_escacs_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcions ===&lt;br /&gt;
&lt;br /&gt;
Les funcions son grup d'instruccions que poden ser cridades en qualsevol moment. Les funcions són útils per re-utilitzar codi de manera sencilla dintre de la nostra aplicació.&lt;br /&gt;
====Funcions definides per l’usuari====&lt;br /&gt;
L’usuari pot definir totes les funcions que necessiti. És imprescindible que el nom donat a la funció no estigui prohibit, és a dir, no es poden fer servir:&lt;br /&gt;
*paraules reservades (per exemple, echo), &lt;br /&gt;
*començar amb un nombre o un caràcter especial&lt;br /&gt;
*repetir el nom d’una funció dins un mateix àmbit. &lt;br /&gt;
Tot i que el PHP '''no farà cap distinció entre majúscules i minúscules''', es recomana utilitzar el nom de la funció idèntic a l’utilitzat en la declaració.&lt;br /&gt;
Les funcions poden rebre paràmetres. El pas de paràmetres d’entrada es fa escrivint entre parèntesis i a continuació del nom de la funció.&lt;br /&gt;
En l’exemple següent podeu veure com es declara la funció missatge i com, posteriorment, es crida passant-hi un paràmetre.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function missatge($argument)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;$argument&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
missatge(&amp;quot;Aquest és l’argument que es passa en aquest exemple.&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les funcions també podran retornar valors. Per fer-ho caldrà utilitzar la sentència '''return'''.&lt;br /&gt;
En l’exemple següent comprovareu com la funció suma, la qual rep dos paràmetres, retorna el resultat de sumar dos nombres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function suma ($valor1,$valor2)&lt;br /&gt;
{&lt;br /&gt;
	return($valor1+$valor2);&lt;br /&gt;
}&lt;br /&gt;
echo suma(4,6);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Funcions Internes====&lt;br /&gt;
El llenguatge PHP té funcions definides internament. Aquestes funcions són de gran utilitat per al programador i resulta imprescindible estudiarles i conèixer-ne les més importants.&lt;br /&gt;
&lt;br /&gt;
És possible que diverses funcions no es reconeguin en el vostre entorn de treball del PHP; el motiu d’això és que algunes funcions internes no s’han inclòs en la compilació, la qual cosa ha fet necessària una compilació dels mòduls que les contenen. Amb phpinfo() es poden veure les extensions carregades en la vostra configuració del PHP.&lt;br /&gt;
&lt;br /&gt;
Són funcions internes molt usuals ''echo, fprintf, print, printf i sprintf'', en què queda demostrat que el llenguatge PHP ja té definides funcions específiques que poden ser de gran utilitat per a l’usuari. &lt;br /&gt;
&lt;br /&gt;
Podeu mirar l’ajuda de PHP a la [https://www.php.net/manual/es/funcref.php pàgina oficial].&lt;br /&gt;
Funcions de Strings: [http://php.net/manual/en/ref.strings.php pàgina oficial].&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot codificar amb codificació ''md5'' el contingut d’una variable:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom = 'Blanca';&lt;br /&gt;
echo(&amp;quot;La codificació md5 de $nom és:&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
echo md5($nom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Exercici===&lt;br /&gt;
El código de encriptación md5 y sha están comprometido ya que son fáciles de desencriptar. ¿Qué algoritmo se debería utilizar?&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Algoritmes d'ordenació====&lt;br /&gt;
Segons el següent array &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fruits = array(&amp;quot;lemon&amp;quot;, &amp;quot;orange&amp;quot;, &amp;quot;banana&amp;quot;, &amp;quot;apple&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SORT''' Esta función ordena una matriz. Los elementos se organizarán de menor a mayor cuando se haya completado esta función.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
sort($cars);&lt;br /&gt;
&lt;br /&gt;
BMW&lt;br /&gt;
Toyota&lt;br /&gt;
Volvo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''RSORT''' Esta función ordena una matriz en orden inverso (de mayor a menor).&lt;br /&gt;
Nota: Esta función asigna nuevas claves para los elementos en la matriz. Eliminará todas las claves existentes que haya asignado, en lugar de simplemente reordenar las claves.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
rsort($cars);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volvo&lt;br /&gt;
Toyota&lt;br /&gt;
BMW&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''asort'''()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;345&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;3&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
asort($age)&lt;br /&gt;
&lt;br /&gt;
Array ( [Ben] =&amp;gt; 3 [Joe] =&amp;gt; 43 [Peter] =&amp;gt; 345 ) &lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''arsort''' ()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
arsort($age);&lt;br /&gt;
&lt;br /&gt;
Array ( [Peter] =&amp;gt; 345 [Joe] =&amp;gt; 43 [Ben] =&amp;gt; 3 ) &lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ksort''' ()&lt;br /&gt;
Ordena una matriz por clave, manteniendo la clave de las correlaciones de datos. Esto es útil principalmente para matrices asociativas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;200&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;99&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
ksort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Ben, Value=99&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''krsort'''()                &lt;br /&gt;
Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
krsort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Peter, Value=35&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=37&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''natsort''' ()&lt;br /&gt;
Esta función implementa un algoritmo de ordenamiento que ordena cadenas alfanuméricas en la forma en que lo haría un ser humano mientras mantiene asociaciones de clave / valor. Esto se describe como un &amp;quot;orden natural&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$array1 = $array2 = array(&amp;quot;img12.png&amp;quot;, &amp;quot;img10.png&amp;quot;, &amp;quot;img2.png&amp;quot;, &amp;quot;img1.png&amp;quot;);&lt;br /&gt;
sort($array1);&lt;br /&gt;
echo &amp;quot;Standard sorting\n&amp;quot;;print_r($array1);&lt;br /&gt;
natsort($array2);&lt;br /&gt;
echo &amp;quot;\nNatural order sorting\n&amp;quot;;print_r($array2);?&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The above example will output:&lt;br /&gt;
Standard sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; img1.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [2] =&amp;gt; img12.png&lt;br /&gt;
    [3] =&amp;gt; img2.png&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Natural order sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [3] =&amp;gt; img1.png&lt;br /&gt;
    [2] =&amp;gt; img2.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [0] =&amp;gt; img12.png&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
====Exercici: Ordenació ====&lt;br /&gt;
Crea una funció que ordeni un array. &lt;br /&gt;
*Per claus de menor a major i de major a menor&lt;br /&gt;
*Per valors de menor a major i de major a menor&lt;br /&gt;
&lt;br /&gt;
[[:Solucio_ordenacio]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Comprova minúscules ====&lt;br /&gt;
Crea una funció que comprovi si tots els caràcters d'un string son minúscules.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function is_str_lowercase($str1)  &lt;br /&gt;
   {  &lt;br /&gt;
    for ($sc = 0; $sc &amp;lt; strlen($str1); $sc++) {  &lt;br /&gt;
          if (ord($str1[$sc]) &amp;gt;= ord('A') &amp;amp;&amp;amp;  ord($str1[$sc]) &amp;lt;= ord('Z')) {    // ord — devuelve el valor ASCII de un caracter&lt;br /&gt;
      return false;  &lt;br /&gt;
         }  &lt;br /&gt;
         }  &lt;br /&gt;
      return true;  &lt;br /&gt;
       }  &lt;br /&gt;
var_dump(is_str_lowercase('abc def ghi'));  &lt;br /&gt;
var_dump(is_str_lowercase('abc dEf ghi'));  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
====Exercici: Primers====&lt;br /&gt;
Crea una funció que indiqui si un número és primer.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function IsPrime($n)  &lt;br /&gt;
{  &lt;br /&gt;
 for($x=2; $x&amp;lt;$n; $x++)  &lt;br /&gt;
   {  &lt;br /&gt;
      if($n %$x ==0)  &lt;br /&gt;
          {  &lt;br /&gt;
           return 0;  &lt;br /&gt;
          }  &lt;br /&gt;
    }  &lt;br /&gt;
  return 1;  &lt;br /&gt;
   }  &lt;br /&gt;
$a = IsPrime(3);  &lt;br /&gt;
if ($a==0)  &lt;br /&gt;
echo 'No es Primo.....';  &lt;br /&gt;
else  &lt;br /&gt;
echo 'ES primo..';  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici- Normalizar ===&lt;br /&gt;
&lt;br /&gt;
Tenemos una base de datos que sólo acepta nombres y apellidos SIN acentos, ni dieresis... por tanto, queremos que cuando escriba el usuario un nombre como &amp;quot;jÚlïÒ&amp;quot; lo normalice a &amp;quot;JULIO&amp;quot;. &lt;br /&gt;
  $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
&lt;br /&gt;
  $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
&lt;br /&gt;
Es interesante investigar sobre la función strtr&lt;br /&gt;
&lt;br /&gt;
solución:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UTF-8 es una codificación multibyte que puede representar cualquier carácter Unicode.&lt;br /&gt;
ISO 8859-1 es una codificación de un solo byte que puede representar los primeros 256 caracteres Unicode.&lt;br /&gt;
Ambos codifican ASCII exactamente de la misma manera.&lt;br /&gt;
&lt;br /&gt;
utf8_decode -&amp;gt;  Convierte una cadena con los caracteres codificados ISO-8859-1 con UTF-8 &lt;br /&gt;
&lt;br /&gt;
   //función que quita los acentos, dieresis, Ñ....&lt;br /&gt;
    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
    $cadena = utf8_decode($cadena);&lt;br /&gt;
    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);&lt;br /&gt;
    $cadena = strtoupper($cadena);&lt;br /&gt;
    return utf8_encode($cadena);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 //$cadena = strtr(utf8_decode($cadena), utf8_decode($originales), $modificadas);   //Altra solució&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipus de Dades en PHP ==&lt;br /&gt;
&lt;br /&gt;
*'''Boolean'''&lt;br /&gt;
És un tipus de dades molt simple que pot representar un valor cert (TRUE) o fals (FALSE). Aquest tipus de dades s’utilitza molt en estructures de control. Si feu conversió de dades és molt important que tingueu en&lt;br /&gt;
compte que es considerarà fals el nombre enter, la cadena 0 o una cadena buida, una matriu buida, un objecte sense variables, el tipus NULL i els objectes SimpleXML que s’hagin creat d’etiquetes buides.&lt;br /&gt;
&lt;br /&gt;
*'''Integer'''&lt;br /&gt;
Aquest tipus representa nombres no fraccionables per sota de la unitat. Poden ser positius i negatius. Aquests nombres enters els podeu representar en notació decimal, hexadecimal o octal. La plataforma sobre la&lt;br /&gt;
qual treballeu determinarà la mida de les variables enteres. El PHP forçarà un canvi de tipus a flotant si es produeix un desbordament, tant si és positiu com negatiu. A continuació, es mostren dos exemples de variables enteres.&lt;br /&gt;
&lt;br /&gt;
*'''float'''&lt;br /&gt;
Aquest tipus fa referència als nombres de coma flotant, i normalment treballa amb una precisió aproximada de catorze dígits decimals. A continuació, es mostra un exemple d’una variable amb coma flotant.&lt;br /&gt;
&lt;br /&gt;
*'''String'''&lt;br /&gt;
Es tracta d’una cadena de caràcters. El llenguatge del PHP no imposa un límit a la mida d’aquestes cadenes; ara bé, no oblideu que el límit el marcarà la memòria del maquinari en què estigui funcionant el PHP. Aquí&lt;br /&gt;
teniu diversos exemples de cadenes.&lt;br /&gt;
&lt;br /&gt;
*'''array'''&lt;br /&gt;
un array és una matriu, d’una dimensió o més, que conté dades que s’associen segons unes claus. És un tipus molt útil, i comprovareu que el seu ús té una gran potència. Per crear una matriu podeu utilitzar la paraula&lt;br /&gt;
reservada ''array()'' o bé acompanyar el nom de la variable amb ''[ ]''.&lt;br /&gt;
&lt;br /&gt;
*'''object'''&lt;br /&gt;
aquest tipus d’objecte està previst en el llenguatge PHP perquè suporta el llenguatge orientat a objectes. Un objecte és un ítem amb unes característiques i funcionalitats marcades per la classe a la qual pertany. Per crear un objecte cal utilitzar la partícula ''new''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//tipus boolean:&lt;br /&gt;
$sortir=FALSE;&lt;br /&gt;
$entrar=TRUE;&lt;br /&gt;
&lt;br /&gt;
//tipus integer:&lt;br /&gt;
$positiu=3451;&lt;br /&gt;
$negatiu= − 4345&lt;br /&gt;
&lt;br /&gt;
//tipus float:&lt;br /&gt;
$amb_coma=34.5;&lt;br /&gt;
&lt;br /&gt;
//tipus string:&lt;br /&gt;
$nom=’Wayan’;&lt;br /&gt;
$salutacio=&amp;quot;Hola $nom!&amp;quot;;&lt;br /&gt;
echo $salutacio.&amp;quot; Benvingut&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus array:&lt;br /&gt;
$grau_cicles=array(&amp;quot;superior&amp;quot;,&amp;quot;mitja&amp;quot;);&lt;br /&gt;
$families[]=&amp;quot;Informàtica&amp;quot;;&lt;br /&gt;
$families[]=&amp;quot;Electrònica&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus objecte:&lt;br /&gt;
class Alumne {&lt;br /&gt;
public function matricular($nom)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Ja estàs matriculat $nom&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$alumne1=new Alumne();&lt;br /&gt;
$alumne1−&amp;gt;matricular(’Made’);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Creació Classes/ OBJECTES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Coche&lt;br /&gt;
{&lt;br /&gt;
	static $numruedas = 4;&lt;br /&gt;
	var $color;&lt;br /&gt;
	var $posx;&lt;br /&gt;
	var $posy;&lt;br /&gt;
	var $velocidad;&lt;br /&gt;
	function __construct($color, $posx, $posy)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;color = $color;&lt;br /&gt;
		$this-&amp;gt;posx = $posx;&lt;br /&gt;
		$this-&amp;gt;posy = $posy;&lt;br /&gt;
		$this-&amp;gt;velocidad = 0;&lt;br /&gt;
	}&lt;br /&gt;
	function mover($x, $y)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;posx = $x;&lt;br /&gt;
		$this-&amp;gt;posy = $y;&lt;br /&gt;
	}&lt;br /&gt;
	function acelerar()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;velocidad = $this-&amp;gt;velocidad + 10;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
	function frenar()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;velocidad &amp;gt; 10)&lt;br /&gt;
			$this-&amp;gt;velocidad = $this-&amp;gt;velocidad - 10;&lt;br /&gt;
		else&lt;br /&gt;
			$this-&amp;gt;velocidad = 0;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$car = new Coche(&amp;quot;verde&amp;quot;,10,10);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les dades especials ===&lt;br /&gt;
*'''resource'''&lt;br /&gt;
La variable que pertany a aquest tipus farà referència a un recurs extern. Determinades funcions faran ús d’aquest recurs. Per exemple, la funció mysql_db_query, que té la funció d’enviar una petició mySQL, retorna un tipus resource. En l’exemple següent la variable $resultat és de tipus resource:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query=&amp;quot;SELECT * FROM alumnes&amp;quot;;&lt;br /&gt;
$resultat=mysql_query($query);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''NULL'''&lt;br /&gt;
Quan necessiteu una variable que no tingui cap valor haureu d’utilitzar aquest tipus.&lt;br /&gt;
&lt;br /&gt;
===Els pseudotipus===&lt;br /&gt;
* '''mixed''': aquest pseudotipus indica que la variable en questió pot emmagatzemar múltiples tipus.&lt;br /&gt;
* '''number''': indica que la variable pot contenir un valor enter o de coma flotant.&lt;br /&gt;
* '''callback''': utilitzareu aquest pseudotipus per emmagatzemar crides de retorn generades per funcions de l’usuari.&lt;br /&gt;
&lt;br /&gt;
=== Conversions de tipus ===&lt;br /&gt;
&lt;br /&gt;
Per forçar un canvi de tipus haureu d’especificar entre parèntesis el tipus al qual voleu fer la conversió i col·locar-lo davant la variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Senténcia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Modelat a &lt;br /&gt;
|-&lt;br /&gt;
| (integer), (int) ||integer.&lt;br /&gt;
|-&lt;br /&gt;
| (boolean)||boolean&lt;br /&gt;
|-&lt;br /&gt;
| (float), (double), (real) ||float&lt;br /&gt;
|-&lt;br /&gt;
| (string) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (binary) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (array)||array&lt;br /&gt;
|-&lt;br /&gt;
| (object)|| object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Sense modelar 27/5: &amp;quot;.(27/5).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;I ara ja modelat: &amp;quot;.(integer)(27/5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants===&lt;br /&gt;
Una constant és un identificador (nom) per expressar un valor simple. Com el nom suggereix, aquest valor no pot variar durant l'execució del script. (A excepció de les [[http://php.net/manual/es/language.constants.predefined.php constants màgiques]], que en realitat no són constants). Una constant és sensible a majúscules per defecte. Per convenció, els identificadors de constants sempre solen declarar-se en majúscules.&lt;br /&gt;
&lt;br /&gt;
El nom d'una constant segueix les mateixes regles que qualsevol altra etiqueta de PHP. Un nom de constant vàlid comença per una lletra o subguió, seguit per qualsevol nombre o lletres, nombres o subguions. Usant una expressió regular, es representaria de la següent manera: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('MIN_VALUE', '0.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
define('MAX_VALUE', '1.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
echo MIN_VALUE;&lt;br /&gt;
//const MIN_VALUE = 0.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
//const MAX_VALUE = 1.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
class Exemple1&lt;br /&gt;
{&lt;br /&gt;
  //define('MIN_VALUE', '0.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
  //define('MAX_VALUE', '1.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  const MIN_VALUE = 0.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
  const MAX_VALUE = 1.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  public static function getMinValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MIN_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static function getMaxValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MAX_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo Exemple1::getMinValue();   //invocamos clase &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Cuál es la diferencia entre $this y self:: ?'''&lt;br /&gt;
&lt;br /&gt;
Uno usa $this para referenciar al objeto actual, y se utiliza self:: para referenciar la clase actual. Se utiliza $this-&amp;gt;nombre para nombres no estáticos y se utiliza self::nombres para nombres estáticos.&lt;br /&gt;
&lt;br /&gt;
=== Variables predefinides ===&lt;br /&gt;
&lt;br /&gt;
En PHP hi ha una sèrie de variables predefinides que resulten de gran ajuda per al programador. Dins d’aquestes variables predefinides cal destacar un gran grup, el grup de les anomenades superglobals.&lt;br /&gt;
&lt;br /&gt;
Les variables '''superglobals''' són variables que sempre estan disponibles en tots els àmbits.&lt;br /&gt;
&lt;br /&gt;
*'''$GLOBALS''':fa referència a totes les variables disponibles en l’àmbit global. Es tracta d’una variable de tipus matriu associativa.&lt;br /&gt;
En l’exemple següent es recorre la variable superglobal $GLOBALS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$una_variable=&amp;quot;Hola&amp;quot;;&lt;br /&gt;
$una_altra_variable=&amp;quot;Com va?&amp;quot;;&lt;br /&gt;
foreach ($GLOBALS as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;GLOBALS[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_SERVER''':ofereix informació molt últil sobre el servidor i l’entorn d’execució. Els valors que emmagatzema són generats pel navegador web.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*Executeu-lo i veureu un seguit de dades&lt;br /&gt;
referents a la màquina que fa de servidor del PHP. Entre altres coses, identificareu&lt;br /&gt;
el nom de la màquina, la versió del navegador, la versió del servidor web, la&lt;br /&gt;
ubicació de fitxers importants i un llarg etcètera.*/&lt;br /&gt;
&lt;br /&gt;
foreach ($_SERVER as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;SERVER[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_GET''': correspon a la variable GET del protocol HTTP. Emmagatzema els valors de les variables que es trasmeten per mitjà del protocol HTTP mitjançant el mètode GET. El seu ús és molt normal en formularis.&lt;br /&gt;
&lt;br /&gt;
*'''$_POST''': correspon a la variable POST del protocol HTTP. Emmagatzema els valors de les variables que es transmeten per mitjà del protocol HTTP mitjançant el mètode POST. El seu ús és, generalment, més adequat que el mètode GET per a temes de seguretat.&lt;br /&gt;
&lt;br /&gt;
*'''$_COOKIE''': és una variable de tipus matriu associativa que emmagatzemarà les variables passades a l’script per mitjà de les galetes de l’HTML.&lt;br /&gt;
&lt;br /&gt;
*'''$_REQUEST''': és una matriu associativa que conté les dades de $_GET ,$_POST i $_COOKIE.&lt;br /&gt;
&lt;br /&gt;
*'''$_FILES''': aquesta variable s’utilitza en la càrrega de fitxers per mitjà del protocol HTTP. El mètode utilitzat és el POST.&lt;br /&gt;
&lt;br /&gt;
*'''$_SESSION''': conté les variables de sessió disponibles en l’script actual.&lt;br /&gt;
&lt;br /&gt;
*'''$_ENV''': conté les variables d’entorn.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Detecció del Navegador ===&lt;br /&gt;
Escriu un script en PHP que detecti el navegador que està utilitzant el client que ha demanat la pàgina.&lt;br /&gt;
&lt;br /&gt;
[[:solució_detecció_navegador_php]]&lt;br /&gt;
&lt;br /&gt;
=== Variables estàtiques ===&lt;br /&gt;
Les variables estàtiques sempre mantenen el valor encara que el programa abandoni l’àmbit de la variable, i existeixen només en l’àmbit local de les funcions. No s’hi pot accedir fora d’aquest àmbit.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function comptador()&lt;br /&gt;
{&lt;br /&gt;
   $a = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador: &amp;quot;.$a.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $a++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function comptadorEstatic()&lt;br /&gt;
{&lt;br /&gt;
   static $b = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador estàtic: &amp;quot;.$b.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $b++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for($i=0;$i&amp;lt;3;$i++)&lt;br /&gt;
{&lt;br /&gt;
   comptador();&lt;br /&gt;
   comptadorEstatic();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integració PHP ==&lt;br /&gt;
&lt;br /&gt;
Normalment trobareu el llenguatge de programació PHP dins d’altres llenguatges.&lt;br /&gt;
El més usual és escriure codi en PHP dins de codi HTML.&lt;br /&gt;
&lt;br /&gt;
Heu de recordar que el codi PHP és interpretat pel servidor, i els resultats es mostren en el navegador que utilitzeu. La simbiosi que es crea entre el PHP i l’HTML permet al PHP generar HTML i a l’HTML passar dades al PHP.&lt;br /&gt;
&lt;br /&gt;
=== PHP dintre de PHP ===&lt;br /&gt;
&lt;br /&gt;
==== Include vs Require ====&lt;br /&gt;
És possible inserir el contingut d'un fitxer PHP en un altre arxiu PHP (abans que el servidor l'executi), amb la declaració d'incloure o requerir. Les sentències d'inclusió i requereixen són idèntics , excepte en cas de fallada :&lt;br /&gt;
&lt;br /&gt;
*'''requerir''' (require) produirà un error fatal ( E_COMPILE_ERROR ) i aturar la seqüència de comandaments&lt;br /&gt;
*'''inclou''' (include) només produirà una advertència ( E_WARNING ) i el guió seguirà&lt;br /&gt;
&lt;br /&gt;
Per tant, si voleu que l'execució continuï mostrant als usuaris la sortida, fins i tot si el fitxer d'inclusió falta, utilitzeu la instrucció d'inclusió. Altrament, en cas de FrameWork, CMS, o amb aplicacions PHP complexes, sempre utilitzeu la instrucció que requereix el fitxer per a poder continuar l'execució. Això ajudarà a evitar posar en perill la seguretat i la integritat de l'aplicació, per si de cas un arxiu clau falta accidentalment.&lt;br /&gt;
&lt;br /&gt;
Inclusió d'arxius estalvia molta feina. Això significa que pots crear una capçalera, peu de pàgina o arxiu de menú estàndard per a totes les pàgines web. Llavors, quan la capçalera ha de ser actualitzada, només s'ha d'actualitzar la capçalera inclouen l'arxiu.&lt;br /&gt;
&lt;br /&gt;
'''Sintaxi'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include 'filename.php';&lt;br /&gt;
&lt;br /&gt;
//or&lt;br /&gt;
&lt;br /&gt;
require 'Otherfilename.php';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Include_once vs Require_once ====&lt;br /&gt;
Require_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a require.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Include_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a include.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redireccions ====&lt;br /&gt;
* Son sentencies on s'envia al navegador una nova pàgina. La pàgina que tenia el navegador desapareix i apareix una nova pàgina, la que està definida al location: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
header(&amp;quot;location: novapàgina.php&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici PHP amb cap i peus ===&lt;br /&gt;
&lt;br /&gt;
L’objectiu d’aquesta activitat és mostrar el funcionament de la inclusió d’arxius a PHP. Fer servir includes us permet simplificar el codi de les pàgines. Per exemple, podeu afegir un fitxer de capçalera (cap.php) i un de peu (peu.php) amb els continguts comuns de totes les pàgines del vostre lloc (el bàner, el menú, la informació general). Senzillament incloent aquests fitxers a totes les pàgines, podeu aconseguir una estètica comú. Si heu de canviar en algun moment la capçalera, modificant l’arxiu cap.php ho tindreu modificat a totes les pàgines del web.&lt;br /&gt;
Feu una pàgina web amb continguts estructurats amb dos fitxers: cap.php i peu.php&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
[[:solucio_cap_peus_php]]&lt;br /&gt;
&lt;br /&gt;
[[:solucio_cap_peus_php2]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP i Formularis HTML ===&lt;br /&gt;
El formulari electrònic és una eina molt potent fortament establida a Internet. Permet l’intercanvi o la introducció de dades entre usuaris d’una manera ràpida i senzilla. Un formulari permet la interactivitat i és el detonant que converteix Internet en l’eina més poderosa per enviar informació a un destinatari.&lt;br /&gt;
&lt;br /&gt;
El llenguatge PHP representa un salt qualitatiu enorme en l’ús de formularis. L’HTML no és un llenguatge creat pensant a utilitzar formularis, sinó que es va crear amb altres objectius. El llenguatge PHP té un gran potencial en la gestió de dades; per tant, quan HTML i PHP treballen juntament amb formularis ens trobem amb un binomi ideal.&lt;br /&gt;
&lt;br /&gt;
====Preparació de l’HTML====&lt;br /&gt;
El llenguatge HTML mostrarà la façana que l’usuari veurà a la pantalla del navegador. El PHP serà darrere d’aquesta primera pantalla i treballarà amb les dades.&lt;br /&gt;
El primer que cal programar per fer servir un formulari dissenyat en PHP és crear&lt;br /&gt;
el codi HTML. Un formulari en HTML s’emmarca entre les etiquetes &amp;lt;FORM&amp;gt; i &amp;lt;/FORM&amp;gt;. Per manipular aquest formulari s’utilitza l’atribut ''ACTION''.&lt;br /&gt;
L’atribut ''ACTION'' indica el programa que s’encarrega de manipular les dades, tasca que encomanareu a un codi dissenyat en llenguatge PHP.&lt;br /&gt;
L’etiqueta &amp;lt;form&amp;gt; us permet fer servir dos mètodes per enviar informació: '''GET''' i '''POST'''.&lt;br /&gt;
El mètode '''GET''' és molt útil en motors de cerca, però no ofereix gaire seguretat, ja que les dades que envia es poden veure en l’URL del navegador.&lt;br /&gt;
El mètode '''POST''' és molt més segur, ja que quan el servidor detecta que el mètode de transacció d’informació és '''POST''' espera rebre dades immediatament sense fer servir l’URL, la qual cosa implica que aquestes dades no seran visibles en l’URL.&lt;br /&gt;
Exemple de Formulari:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;El nostre primer exemple amb formularis&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Introdueix el teu nom i prem el botó!&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;FORM ACTION=&amp;quot;contesta.php&amp;quot; METHOD=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Si us plau, escriu el teu nom:&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;INPUT TYPE=&amp;quot;submit&amp;quot; VALUE=&amp;quot;Enviar&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/FORM&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Com valora el PHP un formulari ====&lt;br /&gt;
En el moment d’enviar les dades des del formulari d’una pàgina HTML a un fitxer escrit en PHP s’ha de tenir en compte que l’atribut ''NAME'' emmagatzema el valor.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Resposta a la petició de dades&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;...Continuem amb l’exemple!&amp;lt;/H1&amp;gt;&lt;br /&gt;
El teu nom és:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_POST['nom'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En el moment en què s’envien dades del formulari HTML cap a un fitxer PHP, aquestes dades apareixeran dins d’un array superglobal amb tots els seus valors.&lt;br /&gt;
&lt;br /&gt;
=== Exercici Mini Calculadora ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar una calculadora de sólo SUMA, para ello tendremos dos inputs y un botón, cuando se aprete el botón deberá enviar enviar el formulario al server haciendo la operación y mostrándola.&lt;br /&gt;
 &lt;br /&gt;
=== Exercici Formulari amb Vectors ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar un formulario en el servidor que genere 10 inputs y un botón, a continuación el servidor recogerá todos los datos los mostrará y calculará la suma total. &lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
:[[solu_vector_input]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Les matrius associatives i els formularis====&lt;br /&gt;
Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu ús, però, serà condicionat pel mètode utilitzat en el pas de dades en el codi HTML. Així, si en el codi HTMLel mètode és '''POST''' haureu de fer servir la matriu associativa '''$_POST'''; en canvi, si heu fet servir el mètode '''GET''' en el codi HTML, haureu de fer servir la matriu associativa '''$_GET'''.&lt;br /&gt;
&lt;br /&gt;
Per accedir als valors emmagatzemats en les matrius associatives fareu servir l’atribut corresponent '''NAME''' de l’HTML com a índex de la matriu associativa. &lt;br /&gt;
&lt;br /&gt;
No heu d’oblidar que el PHP és un llenguatge de programació que, entre altres coses, us permet utilitzar bucles. En el formulari següent es defineix una selecció múltiple, en què podreu marcar els navegadors que coneixeu.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Un exemple amb un formulari&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;seleccioMultiple.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Nom: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Correu electrònic: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Navegadors que coneixes: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;select name=&amp;quot;navegadors[]&amp;quot; multiple&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Chrome&amp;quot;&amp;gt;Chrome&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;MozillaFirefox&amp;quot;&amp;gt;Mozilla Firefox&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Safari&amp;quot;&amp;gt;Safari&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Opera&amp;quot;&amp;gt;Opera&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Lynx&amp;quot;&amp;gt;Lynx&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquí us trobareu amb un petit problema. Per recuperar els valors introduïts com a nom i correu electrònic no hi ha cap problema, la matriu $_POST us permetrà un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecció múltiple, però, sorgeix un petit problema. A diferència dels casos anteriors, ara navegadors pot contenir més d’un valor, com ho fareu per mostrar tots els valors per pantalla? La solució és utilitzar un bucle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach ($_POST['navegadors'] as $opcio)&lt;br /&gt;
echo $opcio.&amp;quot;\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un altre exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ($_POST) {&lt;br /&gt;
    echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
    //echo htmlspecialchars(print_r($_POST, true));&lt;br /&gt;
    print_r($_POST);&lt;br /&gt;
    print_r($_POST['personal']);&lt;br /&gt;
    print_r($_POST['personal']['nombre']);&lt;br /&gt;
    echo '&amp;lt;/pre&amp;gt;';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
    Nombre:  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[nombre]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Email:   &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[email]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Cerveza: &amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;select multiple name=&amp;quot;cerveza[]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;warthog&amp;quot;&amp;gt;Warthog&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;guinness&amp;quot;&amp;gt;Guinness&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;stuttgarter&amp;quot;&amp;gt;Stuttgarter Schwabenbräu&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;¡enviarme!&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode GET ===&lt;br /&gt;
*El mètode GET produeix una cadena llarga que apareix en els logs del servidor i a la URL del navegador.&lt;br /&gt;
&lt;br /&gt;
*GET envia les dades usant la URL&lt;br /&gt;
&lt;br /&gt;
*El mètode GET es limita a enviar fins a només 1.024 caràcters .&lt;br /&gt;
&lt;br /&gt;
*Mai utilitzeu el mètode GET, si voleu enviar la contrasenya o una altra informació confidencial al servidor .&lt;br /&gt;
&lt;br /&gt;
*GET no pot ser utilitzat per enviar dades binàries, com imatges o documents de text, al servidor .&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode GET es pot accedir mitjançant la variable d'entorn QUERY_STRING.&lt;br /&gt;
&lt;br /&gt;
*PHP proveeix la matriu associativa $_GET per accedeix a tota la informació que s'enviï mitjançant el mètode GET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$PHP_SELF = $_SERVER['PHP_SELF'];&lt;br /&gt;
echo $PHP_SELF ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if( isset($_GET[&amp;quot;name&amp;quot;])||  isset($_GET[&amp;quot;age&amp;quot;]) )&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_GET['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_GET['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt; method=&amp;quot;GET&amp;quot;&amp;gt;&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode POST ===&lt;br /&gt;
&lt;br /&gt;
*POST envía los datos de forma que no podemos verlos (en un segundo plano u &amp;quot;ocultos&amp;quot; al usuario).&lt;br /&gt;
&lt;br /&gt;
*El mètode POST no té cap restricció en la mida de les dades a enviar.&lt;br /&gt;
&lt;br /&gt;
*El mètode POST es pot utilitzar per enviar ASCII, així com dades binàries.&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode POST passa per la capçalera HTTP. La seguretat depèn de protocol HTTP. Mitjançant l'ús d'HTTP segur pots assegurar-te que la seva informació està segura .&lt;br /&gt;
&lt;br /&gt;
*El PHP proveeix de la matriu associativa $ _POST per accedeix a tota la informació enviada pel mètode POST.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(isset($_POST[&amp;quot;name&amp;quot;]) ||  isset($_POST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_POST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_POST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;   &amp;lt;!--&amp;lt;?php $_PHP_SELF ?&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== $_PHP_SELF ===&lt;br /&gt;
La variable $_PHP_SELF conté el nom del script PHP (pàgina php) el qual està executant.  ESTÁ DESFASADO USAR $_SERVER['PHP_SELF']&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(  isset($_REQUEST[&amp;quot;name&amp;quot;]) ||  isset($_REQUEST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_REQUEST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_REQUEST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo formulario POST ===&lt;br /&gt;
&lt;br /&gt;
Dissenyar una pàgina web simple amb php que demani a lusuari el preu de tres productes diferents en tres&lt;br /&gt;
establiments diferents. Exemple:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Form1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Un cop s'introdueixi aquesta&lt;br /&gt;
informació al formulari, s'ha de mostrar el resultat, dels tres preus introduïts i el preu mitjà del producte.&lt;br /&gt;
&lt;br /&gt;
  DATOS RECIBIDOS&lt;br /&gt;
  Precio Guitarra Martin D18 en Ubisa: 4.200 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Thomann 3.800 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Alfasonic 4.100 euros&lt;br /&gt;
&lt;br /&gt;
  El precio medio del producto es de 4.0333333333333 euros&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;PHP Calcula precios&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;form name=&amp;quot;formularioDatos&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;01-Formulari.php&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt; CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Ubisa, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Thomann, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio2&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Alfasoni, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio3&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;input value=&amp;quot;Calcular&amp;quot; type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
01-Formulari.php&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php //Ejemplo aprenderaprogramar.com&lt;br /&gt;
$precio1 = $_POST['precio1'];&lt;br /&gt;
$precio2 = $_POST['precio2'];&lt;br /&gt;
$precio3 = $_POST['precio3'];&lt;br /&gt;
$media = ($precio1+$precio2+$precio3)/3;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; DATOS RECIBIDOS&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Ubisa: &amp;quot;. $precio1. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Thomann &amp;quot;. $precio2. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Alfasonic &amp;quot;. $precio3. &amp;quot; euros &amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; El precio medio del producto es de &amp;quot;. $media. &amp;quot; euros&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Acceso a Ficheros ===&lt;br /&gt;
&lt;br /&gt;
'''Abrir y cerrar el descriptor de ficheros'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $fitxer = fopen(&amp;quot;datos.txt&amp;quot;,&amp;quot;a&amp;quot;);&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'r' 	Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero. &lt;br /&gt;
'w+' 	Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear. &lt;br /&gt;
'a+' 	Apertura para lectura y escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() no tiene efecto, las escrituras siempre son pospuestas. &lt;br /&gt;
&lt;br /&gt;
'''Escribir datos en un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  $fp = fopen('datos.txt', 'a');&lt;br /&gt;
    fwrite($fp, 'Julio');&lt;br /&gt;
    fwrite($fp, 'Noguera');&lt;br /&gt;
    fclose($fp);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Leer datos de un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 $fitxer=fopen(&amp;quot;datos.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while(!feof($fitxer)){&lt;br /&gt;
       $line = fgets($fitxer);&lt;br /&gt;
       echo $line;&lt;br /&gt;
    }&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más info&lt;br /&gt;
http://www.php.net/manual/es/function.fopen.php&lt;br /&gt;
http://www.php.net/manual/es/function.fgets.php&lt;br /&gt;
http://www.php.net/manual/es/function.fwrite.php&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Formulari Insti // Acceso a ficheros ===&lt;br /&gt;
&lt;br /&gt;
Se desea crear un formulario donde se introduzcan los campos de nombre, apellidos, dni, contraseña, cuando se clique el botón de enviar, el servidor debe recibir todos los parámetros de ese usuario y escribirlos en un fichero de texto (fopen/fwrite), el siguiente usuario que rellene el formulario escribirá a continuación, después debe listar todos los ficheros que tiene el servidor (system()/shell_exec).&lt;br /&gt;
&lt;br /&gt;
solució: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
if ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;) { &lt;br /&gt;
&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    $nombre = $_POST['nombre'];  //recibe los parámetros del formulario&lt;br /&gt;
    $apellido = $_POST['apellido'];&lt;br /&gt;
    $dni = $_POST['dni'];&lt;br /&gt;
    $pass = $_POST['pass'];&lt;br /&gt;
&lt;br /&gt;
    $file = fopen(&amp;quot;clase.txt&amp;quot;, &amp;quot;a&amp;quot;);    //crea un descriptor de fichero&lt;br /&gt;
    fwrite($file, ($nombre) . &amp;quot;,&amp;quot; . ($apellido) . &amp;quot;,&amp;quot; . ($dni) . &amp;quot;,&amp;quot; . ($pass) . &amp;quot;\n&amp;quot;);  //introduce datos dentro del fichero&lt;br /&gt;
    fclose($file);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    $usuarioEnSistema = system('cat clase.txt');     //ejecuta terminal linux&lt;br /&gt;
   //$usuario = shell_exec('cat clase.txt'');   // comando más antiguo&lt;br /&gt;
&lt;br /&gt;
    echo $usuarioEnSistema;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nombre&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;apellido&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dni&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;pass&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Exercici: Calculadora PHP ===&lt;br /&gt;
Crea un formulari amb un únic TextBox on s'indiqui les operacions matemàtiques a realitzar. Envia el contingut del TextBox amb el mètode POST i realitza les operacions. Imprimeix per pantalla el resultat.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Solucio_calculadora_m6]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ISSET ===&lt;br /&gt;
&lt;br /&gt;
isset -&amp;gt; Devuelve '''true''' si la variable existe y tiene un valor distinto de null, false de lo contrario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var_dump( isset($var) );   //isset() devuelve '''false''' por que $var no ha sido definida&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''false''' aunque la variable haya sido declarada pues su valor es NULL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var = &amp;quot;&amp;quot;;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''true'''. El valor ya no es nulo aunque esté vacío&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Y cuando deberías usar isset()?'''&lt;br /&gt;
&lt;br /&gt;
Siempre y cuando que quieras comprobar que la variable existe (variable inicializada), un ejemplo bueno sería si quieres saber si se ha mandado un formulario:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;campo1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if (isset($_POST['submit']) {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''isset(), is_null() y empty(): Diferencias y ejemplos de uso'''&lt;br /&gt;
&lt;br /&gt;
https://cybmeta.com/isset-is_null-y-empty-diferencias-y-ejemplos-de-uso&lt;br /&gt;
&lt;br /&gt;
https://es.stackoverflow.com/questions/32133/como-y-cuando-se-usan-isset-y-empty-correctamente&lt;br /&gt;
&lt;br /&gt;
=== Exercici enviament de dades ===&lt;br /&gt;
És popular el disseny d’un document web, en què el mateix document conté la part del formulari HTML i el codi PHP que agafa les dades i les processa. Aquest procediment pot resultar estrany en principi, ja que esteu esperant dos documents ben diferenciats. Així i tot val la pena que veieu aquesta forma de treballar i decidiu si us resulta útil o no. Per fer-ho, simplement heu de fusionar els dos documents (el que envia les dades i el que les rep) en un document únic HTML+PHP de dues parts amb la següent estructura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(primera vegada que s'entra al document)&lt;br /&gt;
{&lt;br /&gt;
crear formulari HTML i enviar-ho al propi document&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
rebre les dades a través de POST o GET&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Feu un document amb aquestes característiques que enviï les següents dades:&lt;br /&gt;
*nom&lt;br /&gt;
*cognom&lt;br /&gt;
*contrasenya&lt;br /&gt;
*si l’usuari és alumne o professor&lt;br /&gt;
*si l’usuari és actiu o no&lt;br /&gt;
*foto (únicament el nom del fitxer)&lt;br /&gt;
*edat (entre 18 i 99)&lt;br /&gt;
*comentaris&lt;br /&gt;
*un camp ocult amb el nom ocult i valor prova&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[:solucio_enviament_dades_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Galetes ===&lt;br /&gt;
Les galetes són uns fitxers de text que emmagatzemen informació a l’ordinador client referent a la visita d’un usuari a una pàgina web.&lt;br /&gt;
Les galetes no són un acte d’intromissió per part de la pàgina web visitada; simplement, són una font d’informació molt útil per augmentar l’eficiència en l’accés.&lt;br /&gt;
Les galetes tenen una mida màxima d’1K i caduquen, la qual cosa fa molt difícil que s’utilitzin amb fins malintencionats. A més, únicament pot consultar la galeta el web que l’ha dipositada, la informació que conté no és visible per a la resta de pàgines web.&lt;br /&gt;
&lt;br /&gt;
Un ús molt freqüent de les galetes és emmagatzemar un perfil d’usuari. Així s’aconsegueix que cada vegada que el mateix usuari accedeix a un web, aquest en conegui les preferències i li mostri directament els continguts més adequats.&lt;br /&gt;
&lt;br /&gt;
Les galetes ajuden els programadors a crear un entorn més adequat per a l’usuari visitant. Moltes pàgines web permeten canviar la mida del text, els colors de la pàgina, la disposició d’alguns continguts, etc. Una vegada l’usuari ha modificat al seu gust l’aspecte de la pàgina web, aquestes dades s’emmagatzemen per a la propera visita.&lt;br /&gt;
&lt;br /&gt;
Importante: las cookies se envían al cliente mediante encabezados HTTP. Como cualquier otro encabezado, las cookies se deben enviar antes que cualquier salida que genere la página (antes que &amp;lt;html&amp;gt;, &amp;lt;head&amp;gt; o un simple espacio en blanco). &lt;br /&gt;
&lt;br /&gt;
'''Funcions del PHP per treballar amb galetes'''&lt;br /&gt;
&lt;br /&gt;
La funció que s’utilitza en PHP per crear galetes és setcookie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
bool setcookie(string $nom [, string $valor [, int $caduca= 0[, string $ruta [, string $domini [, bool $seguretat= false [, bool $nomeshttp=false]]]]]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* $nom: és obligatori i indica el nom que donareu a la galeta, la resta de paràmetres són opcionals.&lt;br /&gt;
* $valor: és el valor que tindrà la galeta.&lt;br /&gt;
* $caduca: indica els segons que té de vida la galeta; si no s’indica res la galeta deixarà d’existir quan finalitzi la sessió de l’usuari.&lt;br /&gt;
* $ruta: indica on podeu trobar la galeta dins el servidor.&lt;br /&gt;
Si no ponemos la ruta (Path), la cookie sólo se puede usar en páginas que se encuentren en el mismo directorio que la página que la creó. Si queremos que se utilice en un directorio en concreto debemos añadir la ruta.&lt;br /&gt;
&lt;br /&gt;
//Cookie creada en el directorio /registro/login&lt;br /&gt;
&lt;br /&gt;
//Si queremos que las páginas del directorio raíz / puedan acceder a la cookie&lt;br /&gt;
&lt;br /&gt;
* $domini: marca el domini en què la galeta està disponible.&lt;br /&gt;
* $seguretat: tindrà el valor TRUE si voleu que la galeta només s’utilitzi en una connexió segura (conexió HTTPs), i FALSE (que és el valor per defecte), si no és necessari un cert grau de seguretat.&lt;br /&gt;
* $nomeshttp: si té per valor TRUE marcarà que la galeta solament és accessible si s’utilitza el protocol HTTP.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
setcookie(&amp;quot;nom&amp;quot;, &amp;quot;Maadiva&amp;quot;, 3600, &amp;quot;/&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El segon fitxer s’encarregarà de consultar a la matriu associativa '''$_COOKIE''' el valor de la galeta indicada, que en aquest cas seria nom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_COOKIE[&amp;quot;nom&amp;quot;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
setcookie(&amp;quot;valor&amp;quot;, 1, time() + 30);    //time() tiempo desde que se originó unix.&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);    //no muestra todas las cookies por temas de seguridad&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unset($_COOKIE[&amp;quot;valor&amp;quot;]);  //otra forma setcookie('valor', 1, expire);  // setcookie(&amp;quot;valor&amp;quot;, 1, time() - 30);&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Se desea que cuente el número de visitas que realiza un usuario al visitar la página; este contador conserva su valor durante un año aún a pesar de que un usuario cierre el navegador y tarde días en volver a visitar la página.&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_contador_galletas]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Les cookies us permeten desar informació al navegador que estarà disponible més endavant pel vostre web. Per exemple, podeu desar la configuració personal de l’usuari o la llengua en què ha escollit visitar el web. La propera vegada que l’usuari visiti el web, el vostre codi PHP podrà obtenir aquesta informació desada i presentar a l’usuari el web amb la seva configuració personal o la llengua escollida. És important destacar que les cookies queden desades al navegador de l’usuari i no al servidor web.&lt;br /&gt;
&lt;br /&gt;
Feu un web amb dos fitxers. El primer, index.php, s’encarregarà d’obtenir el nom de l’usuari i la llengua que vol fer servir per defecte entre una llista desplegable mitjançant un formulari. Enviarà aquestes dades a un altre fitxer, cookie.php, que desarà la informació a les cookies.&lt;br /&gt;
La propera vegada que l’usuari accedeixi a index.php el formulari estarà emplenat amb la informació desada la vegada anterior que va accedir-hi.&lt;br /&gt;
&lt;br /&gt;
sol&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[:solucio_galetes_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sessió ===&lt;br /&gt;
&lt;br /&gt;
Les variables de sessió són variables que estan disponibles en múltiples pàgines sense haver de fer servir pas de paràmetres. Les variables de sessió tenen un temps de vida limitat i s’emmagatzemen en el servidor.&lt;br /&gt;
&lt;br /&gt;
Podeu fer servir les variables de sessió per mantenir informació (l’anomenada informació de sessió) entre diferents pàgines. Per exemple,&lt;br /&gt;
el nom d’usuari o una selecció de productes que ja s’hagi fet.&lt;br /&gt;
&lt;br /&gt;
A continuació, estudiareu un exemple format per tres fitxers. El primer fitxer és un formulari senzill que demana a l’usuari un identificador i una contrasenya. Aquestes dades s’envien a un segon fitxer, anomenat exempleAutenticar.php, que crea les variables de sessió. Finalment, trobareu un tercer fitxer anomenat continuem.php, que recupera la informació emmagatzemada en les variables de sessió.&lt;br /&gt;
&lt;br /&gt;
Just a sota d’aquest text hi ha el fitxer del qual partireu. L’hem anomena exempleSessions.php, però el podeu anomenar d’una altra manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Exemple amb variables de sessió&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
&amp;lt;form action=&amp;quot;exempleAutenticar.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
Escriu el teu nom:&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;usuari&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Escriu la teva contrasenya:&lt;br /&gt;
&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;contrasenya&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia!&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tot seguit apareix el codi del fitxer exempleAutenticar.php. En aquest fitxer creareu i inicialitzareu les dues variables de sessió que utilitzareu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION['id_usuari']=$_REQUEST['usuari'];&lt;br /&gt;
$_SESSION['clau_acces']=$_REQUEST['contrasenya'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...continueu amb l’exemple de variables de sessió...&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
Ja s’han emmagatzemat les variables de sessió.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;continuem.php&amp;quot;&amp;gt;Vinga! Cap al final de l’exemple!&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixeu-vos que el primer que es fa és cridar la funció '''session_start()'''. És obligatori que inicieu la sessió abans de cap etiqueta HTML perquè tot funcioni correctament.&lt;br /&gt;
Amb $_REQUEST es recuperen els dos valors que s’han passat des del fitxer inicial, és a dir, usuari i contrasenya, i els heu d’emmagatzemar en dues variables de sessió creades a $_SESSION, que rebran el nom d’id_usuari i clau_acces.&lt;br /&gt;
$_REQUEST és un array associatiu global que per defecte té els continguts de $_GET, $_POST i $_COOKIE.&lt;br /&gt;
A part de crear les variables de sessió i donar-los valors trobareu un enllaç cap al tercer fitxer.&lt;br /&gt;
El codi del tercer fitxer, continuem.php, el teniu a continuació:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com que esteu treballant amb sessions, el primer que hauríeu de fer és llançar la sessió amb session_start(). A continuació, es recuperen els valors emmagatzemats en les dues variables de sessió.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eliminar sesión&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
unset($_SESSION['id_usuari']); // will delete just the name data&lt;br /&gt;
&lt;br /&gt;
//session_destroy(); // borrará todos los datos asociados a ese usuario. También $_SESSION = array(); &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index3.php&amp;quot;&amp;gt;Destruir Variables de sesion&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les sessions us permeten emmagatzemar dades que podran ser compartides entre les diferents pàgines del web. Aquestes dades, a diferència de les cookies, estan emmagatzemades al servidor i estan disponibles durant tot el temps que l’usuari està interactuant amb la pàgina (temps de sessió).&lt;br /&gt;
Alguns exemples de dades que solen guardar-se a les sessions és si l’usuari ha accedit al web mitjançant els valors usuari/contrasenya, o un carret de la compra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici Sessions ====&lt;br /&gt;
1. Feu una pàgina web que passi entre les seves pàgines el nom de l’usuari i una variable (cost) que s’anirà incrementant en 10 cada vegada que l’usuari passa entre les pàgines (podem pensar que aquesta variable representa el cost de les compres que ha fet fins ara l’usuari al web).&lt;br /&gt;
La sessió es tancarà quan l’usuari torni a la pàgina de login.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://codigosdeprogramacion.com/2016/12/20/sistema-de-usuarios-y-sesiones-en-php-y-mysql-1-login-sesiones-y-logout/&lt;br /&gt;
&lt;br /&gt;
http://velozityweb.com/blog/php/login-de-usuarios-y-creacion-de-sesiones-con-php-y-mysql/#sthash.XbMcrnTA.PSO2jYQ9.dpbs&lt;br /&gt;
&lt;br /&gt;
http://www.formacionwebonline.com/crear-sesiones-php-en-intranet/&lt;br /&gt;
&lt;br /&gt;
=== Exercici Moodle ===&lt;br /&gt;
&lt;br /&gt;
2.Se trata de la hacer un moodle, tenemos un formulario y almacenaremos una base de datos (simulada) en la que guardaremos en un archivo el usuario, contraseña y rol de un profe y un alumno. &lt;br /&gt;
Deberá de comprobar si está registrado, en caso de estarlo se crearán las cookies y variables de sesión(5 minutos para el alumnado y 10 para el profe), en caso de no acceder deberán redireccionarse al login.&lt;br /&gt;
Si se validan correctamente, deberá acceder al menu y mostrar la información si tiene rol de alumno (ROLE_ALUMNO) y otra diferente si es profesor(ROLE_ALUMNO). &lt;br /&gt;
También deberá existir un logout en caso de querer terminar la sesión. &lt;br /&gt;
$_SESSION['caduca']=time()+60; &lt;br /&gt;
&lt;br /&gt;
Solució Exercici Moodle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_moodle]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejercicio Carrito ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--http://evilnapsis.com/2016/10/30/ejemplo-de-carrito-de-compras-sencillo-con-php-y-mysql/--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici Complert ====&lt;br /&gt;
Exercici que engloba Galetes, Idioma, Login, Intranet amb Cap, Peus, Menu i contingut i Sessions.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[http://www.infomerce.es/moodle/mod/resource/view.php?id=11136 Exercici de Classe]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
=== Creació del Arbre XML ===&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xmlDoc = new DOMDocument();&lt;br /&gt;
$xmlDoc-&amp;gt;load(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
=== Obtenir un element del arbre ===&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recòrrer tots els elemens ===&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print $xmlDoc-&amp;gt;saveXML(); //imprimir toda la info&lt;br /&gt;
&lt;br /&gt;
// recorrer las etiquetas y los valores&lt;br /&gt;
$x = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
foreach ($x-&amp;gt;childNodes AS $item) {&lt;br /&gt;
  print $item-&amp;gt;nodeName . &amp;quot; = &amp;quot; . $item-&amp;gt;nodeValue . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//otra manera de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   //selecciona todas las etiquetas aula y muestra el contenido dentro de ellas&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
    echo $aula-&amp;gt;nodeName;&lt;br /&gt;
    echo $aula-&amp;gt;nodeValue, PHP_EOL;&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Otra forma de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   // otra forma de acceder&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
   echo $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)[0]-&amp;gt;nodeValue;   //equivale a -&amp;gt;item(0)&lt;br /&gt;
   echo  $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
   echo $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Afegir un nou element ===&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$auladom = $xmlDoc-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmlDoc-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmlDoc-&amp;gt;createElement(&amp;quot;XARXA_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmlDoc-&amp;gt;createElement(&amp;quot;MASK_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmlDoc-&amp;gt;createElement(&amp;quot;INIT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmlDoc-&amp;gt;createElement(&amp;quot;CURRENT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
&lt;br /&gt;
$root = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
=== Esborrar un element ===&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//borrar nodo&lt;br /&gt;
$xmlDoc = new DOMDocument;&lt;br /&gt;
$xmlDoc-&amp;gt;load('file.xml');   //cargamos fichero&lt;br /&gt;
&lt;br /&gt;
$aula = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
&lt;br /&gt;
// seleccionamos el nodo concreto 0 y lo eleminamos&lt;br /&gt;
$aulaSeleccionada = $aula-&amp;gt;getElementsByTagName('aula')-&amp;gt;item(0);&lt;br /&gt;
$aulaborrada = $aula-&amp;gt;removeChild($aulaSeleccionada);&lt;br /&gt;
&lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;); //guardamos cambios&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici crear XML'''&lt;br /&gt;
&lt;br /&gt;
Tenim un formulari i volem ficar dins del nostre xml noves dades, per tant, haurem de crear un formulari on introduirem les dades.&lt;br /&gt;
&lt;br /&gt;
= Bibliografia / Webgrafia =&lt;br /&gt;
*[http://php.net/manual/es/ Manual oficial de PHP]&lt;br /&gt;
*[http://www.codeacademy.com Introducció a PHP]&lt;br /&gt;
*David Sklar, Adam Trachtenberg, &amp;quot;PHP Cookbook, Third Edition&amp;quot;, O’Reilly Media Inc., 2014. ISBN 978-1-449-36375-8&lt;br /&gt;
*Eduard García Sacristán, Eduard Latorre Jarque, Montserrat Madridejos Mora, Raúl Velaz Mayo, &amp;quot;Llenguatges de guions de servidor&amp;quot;, IOC, 2014 &lt;br /&gt;
*[https://docs.google.com/presentation/d/1ZQgIsW4KCyIfH8NyiqH9ueanM83Ym7bjitaxyQKS0hs/edit#slide=id.i14 Llenguatges de programació del costat del servidor]&lt;br /&gt;
*[http://www.adelat.org/media/docum/nuke_publico/lenguajes_del_lado_servidor_o_cliente.html www.Adelat.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EMMAGATZEMAR I LLEGIR FITXERS ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = '{&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}'&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SERIALIZACIÓN ==&lt;br /&gt;
&lt;br /&gt;
En PHP existe una forma muy sencilla de almacenar o transmitir cualquier tipo de valor (excepto el tipo resource) en forma de una cadena seriada: la serialización.&lt;br /&gt;
&lt;br /&gt;
La serialización te permite, por ejemplo, guardar un objeto o array en una base de datos o transmitirlo entre aplicaciones remotas, para luego volver a convertirlo a su tipo y estructura original.&lt;br /&gt;
&lt;br /&gt;
Supongamos que tienes el siguiente array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arr = array(&lt;br /&gt;
  &amp;quot;fruta&amp;quot; =&amp;gt; &amp;quot;manzana&amp;quot;, &lt;br /&gt;
  &amp;quot;objeto&amp;quot; =&amp;gt; &amp;quot;bicicleta&amp;quot;, &lt;br /&gt;
  &amp;quot;animales&amp;quot; =&amp;gt; array(&lt;br /&gt;
             &amp;quot;perro&amp;quot;, &lt;br /&gt;
             &amp;quot;gato&amp;quot;, &lt;br /&gt;
             &amp;quot;caballo&amp;quot;) &lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si lo deseas guardar en una tabla de una base de datos, lo puedes serializar de esta forma:&lt;br /&gt;
&lt;br /&gt;
'''$string = serialize($arr);'''&lt;br /&gt;
&lt;br /&gt;
La función serialize devolverá un valor fácilmente almacenable o transmitible:&lt;br /&gt;
&lt;br /&gt;
''a:3:{s:5:&amp;quot;fruta&amp;quot;;s:7:&amp;quot;manzana&amp;quot;;s:6:&amp;quot;objeto&amp;quot;;s:9:&amp;quot;bicicleta&amp;quot;;s:8:&amp;quot;animales&amp;quot;;a:3: i:0;s:5:&amp;quot;perro&amp;quot;;i:1;s:4:&amp;quot;gato&amp;quot;;i:2;s:7:&amp;quot;caballo&amp;quot;;}}''&lt;br /&gt;
&lt;br /&gt;
Para recuperar el valor original en PHP a partir de la cadena seriada:&lt;br /&gt;
&lt;br /&gt;
'''$arr = unserialize($string);'''&lt;br /&gt;
&lt;br /&gt;
Un ejemplo del uso de la serialización la tenemos en la forma en que WordPress almacena información variada en algunas de sus tablas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Serializar'''&lt;br /&gt;
&lt;br /&gt;
http://www.cucuza.com/como-serializar-datos-en-php/&lt;br /&gt;
&lt;br /&gt;
==EXEMPLE CLASSE SERIALIZACIÓN==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Serializer {&lt;br /&gt;
&lt;br /&gt;
    private static $path = &amp;quot;./database/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    public static function save($obj, $id) {  //$obj es un JSON , $id es el nombre del archivo &lt;br /&gt;
&lt;br /&gt;
        $arr = serialize($obj);&lt;br /&gt;
        &lt;br /&gt;
        return file_put_contents(self::$path . $id, $arr);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static function restore($id) {&lt;br /&gt;
        &lt;br /&gt;
        if  (file_exists ( self::$path . $id ) ){&lt;br /&gt;
            &lt;br /&gt;
            $xmlString = file_get_contents(self::$path . $id);&lt;br /&gt;
            &lt;br /&gt;
            return unserialize($xmlString);  &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static function showIds(){&lt;br /&gt;
        &lt;br /&gt;
        return array_slice(scandir(self::$path),2);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//al ser una classe estàtica es pot invocar els mètodes de la següent forma, per exemple:&lt;br /&gt;
&lt;br /&gt;
Serializer::save(json,nom_arxiu);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crear un JSON desde PHP (json_encode)==&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crear un objeto en PHP con JSON (json_decode)==&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ENVIAR CORREOS ==&lt;br /&gt;
&lt;br /&gt;
Mediente la función MAIL() de PHP podemos enviar correos, por ello, nuestro servidor deberá tener instalado el servicio.&lt;br /&gt;
En nuestro caso, en nuestro Hosting-ng lo tenemos.&lt;br /&gt;
Existe otra función PHPMailer dónde contiene más opciones. https://github.com/PHPMailer/PHPMailer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Forma simple'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// El mensaje&lt;br /&gt;
$msg = &amp;quot;Estimado alumno de La Mercè\nEstas invitado a participar en  clase&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// usar wordwrap() si las lineas son más largas de 70 caracteres&lt;br /&gt;
$msg = wordwrap($msg,70);&lt;br /&gt;
&lt;br /&gt;
// Enviar mail&lt;br /&gt;
mail(&amp;quot;alguien@ejemplo.cat&amp;quot;,&amp;quot;Mi título&amp;quot;,$msg);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Más opciones'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    $to = &amp;quot;ejemploPrueba@ejemplo.com&amp;quot;;&lt;br /&gt;
    $subject = &amp;quot;Asunto&amp;quot;;&lt;br /&gt;
    $txt = &amp;quot;Estamos en clase de DAW&amp;quot;;&lt;br /&gt;
    $headers = &amp;quot;From: webmaster@example.com&amp;quot; . &amp;quot;\r\n&amp;quot; .&lt;br /&gt;
        &amp;quot;CC: somebodyelse@example.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    mail($to,$subject,$txt,$headers);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' En terminal '''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//también podemos hacerlo desde el terminal de linux en nuestro servidor&lt;br /&gt;
system('mail -t alguien@ejemplo.cat -s ALTA ALUMNOS INSTI &amp;lt;&amp;lt;&amp;lt; &amp;quot;El alumno&amp;quot;'.$nom.&amp;quot; &amp;quot;.$cognoms.&amp;quot; está en espera de darse de alta&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SUBIR FICHEROS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// En versiones de PHP anteriores a la 4.1.0, debería utilizarse $HTTP_POST_FILES en lugar&lt;br /&gt;
// de $_FILES.&lt;br /&gt;
&lt;br /&gt;
 //Directori de pujada. Permís d'escriptura i accés per a www-data&lt;br /&gt;
$dir_subida = './';  &lt;br /&gt;
 //Anexem la carpeta amb el nos del finder que ens puja&lt;br /&gt;
$fichero_subido = $dir_subida . basename($_FILES['file']['name']); //basename: muestra el nombre del fichero con la extensión&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Movem el fitxer temporal creat a /tmp a la ubicació o nom indicats&lt;br /&gt;
echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
if (move_uploaded_file($_FILES['file']['tmp_name'], $fichero_subido)) {    &lt;br /&gt;
    echo &amp;quot;El fichero es válido y se subió con éxito.\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;¡Posible ataque de subida de ficheros!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo 'Más información de depuración:';&lt;br /&gt;
print_r($_FILES);&lt;br /&gt;
&lt;br /&gt;
/*$_FILES['file']['name'] -- original name of the file on the client machine.&lt;br /&gt;
$_FILES['file']['type'] -- mime type of the file, provided by the browser&lt;br /&gt;
$_FILES['file']['size'] -- size (in bytes) of the uploaded file&lt;br /&gt;
$_FILES['file']['tmp_name'] -- temporary filename of the uploaded file, stored on the server&lt;br /&gt;
$_FILES['file']['error'] -- returns an error code, useful for debugging.&lt;br /&gt;
*/&lt;br /&gt;
print &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; SUBIR FICHEROS &amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;!-- El tipo de codificación de datos, enctype, DEBE especificarse como sigue --&amp;gt;&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- MAX_FILE_SIZE debe preceder al campo de entrada del fichero --&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;MAX_FILE_SIZE&amp;quot; value=&amp;quot;30000&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- El nombre del elemento de entrada determina el nombre en el array $_FILES --&amp;gt;&lt;br /&gt;
    Enviar este fichero: &amp;lt;input name=&amp;quot;fichero_usuario&amp;quot; type=&amp;quot;file&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar fichero&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EXERCICI:'''&lt;br /&gt;
&lt;br /&gt;
Es desitja desenvolupar un formulari on pugui ficar el nom d'usuari i a més pujar un fitxer. Deurà haver una pàgina que mostre tots el fitxers d'eixe Usuari i el nombre d'arxius.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDF ==&lt;br /&gt;
Podem també generar pdf's a FPDF http://www.fpdf.org/ , però es deurà baixar la llibreria primer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require('fpdf.php');&lt;br /&gt;
&lt;br /&gt;
class PDF extends FPDF&lt;br /&gt;
{&lt;br /&gt;
// Page header&lt;br /&gt;
function Header()&lt;br /&gt;
{&lt;br /&gt;
    // Logo&lt;br /&gt;
    $this-&amp;gt;Image('logo.png',10,6,30);&lt;br /&gt;
    // Arial bold 15&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','B',15);&lt;br /&gt;
    // Move to the right&lt;br /&gt;
    $this-&amp;gt;Cell(80);&lt;br /&gt;
    // Title&lt;br /&gt;
    $this-&amp;gt;Cell(30,10,'Title',1,0,'C');&lt;br /&gt;
    // Line break&lt;br /&gt;
    $this-&amp;gt;Ln(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Page footer&lt;br /&gt;
function Footer()&lt;br /&gt;
{&lt;br /&gt;
    // Position at 1.5 cm from bottom&lt;br /&gt;
    $this-&amp;gt;SetY(-15);&lt;br /&gt;
    // Arial italic 8&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','I',8);&lt;br /&gt;
    // Page number&lt;br /&gt;
    $this-&amp;gt;Cell(0,10,'Page '.$this-&amp;gt;PageNo().'/{nb}',0,0,'C');&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Instanciation of inherited class&lt;br /&gt;
$pdf = new PDF();&lt;br /&gt;
$pdf-&amp;gt;AliasNbPages();&lt;br /&gt;
$pdf-&amp;gt;AddPage();&lt;br /&gt;
$pdf-&amp;gt;SetFont('Times','',12);&lt;br /&gt;
for($i=1;$i&amp;lt;=40;$i++)&lt;br /&gt;
    $pdf-&amp;gt;Cell(0,10,'Printing line number '.$i,0,1);&lt;br /&gt;
$pdf-&amp;gt;Output();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= QR =&lt;br /&gt;
&lt;br /&gt;
També podem crear codis QR al nostre servidor, hi han moltes libreries tanta en PHP com en JS.&lt;br /&gt;
https://sourceforge.net/projects/phpqrcode/&lt;br /&gt;
&lt;br /&gt;
Es deurà baixar la llibreria i ficar la carpeta &amp;quot;phpqrcode&amp;quot; dins del nostre servidor, a més de introduir el següent codi. &lt;br /&gt;
//'''NOTA''': deureu donar-li permisos d'escriptura a la carpeta&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   // la llibreria s'ha descomprimit dins d'una carpeta anomenada &amp;quot;phpqrcode&amp;quot;&lt;br /&gt;
   include('phpqrcode/qrlib.php');&lt;br /&gt;
   &lt;br /&gt;
   QRcode::png('http://wikiserver.infomerce.es', 'imatgeqr.png');&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
   &amp;lt;img src=&amp;quot;imatgeqr.png&amp;quot; /&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici- Inventario'''&lt;br /&gt;
&lt;br /&gt;
Queremos crear un registro o inventario de los ordenadores, por ellos, queremos generar códigos QR que serán pegatinas para poner en cada uno de los ordenadores de las diferentes aulas, por ello crearemos un formulario donde introduciremos el aula y el ordenador, deben almacenarse en un variable de sesión (ya que no sabemos todavía conectarnos a BD) y cuando cliquemos mostrar deben de aparecer todas los códigos QR del aula.&lt;br /&gt;
También se desea guardarlo en pdf (mirar librerias) con el título y el aula y el codigo QR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CONECTAR CON LDAP o ACTIVE DIRECTORY ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class LDAP &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
      //Asigno variables para accesar al servidor LDAP&lt;br /&gt;
   private $conectar;&lt;br /&gt;
   private $host;&lt;br /&gt;
   private $user;&lt;br /&gt;
   private $pswd;&lt;br /&gt;
   private $dn;&lt;br /&gt;
   private $OU;&lt;br /&gt;
   private $DC;&lt;br /&gt;
   private $DC1;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   public function __construct($user,$password,$ou,$dc,$dc1)&lt;br /&gt;
   {&lt;br /&gt;
    $this-&amp;gt;host= &amp;quot;172.16.208.174&amp;quot;;&lt;br /&gt;
    $this-&amp;gt;user = $user;&lt;br /&gt;
    $this-&amp;gt;pswd = $password;&lt;br /&gt;
    $this-&amp;gt;OU = $ou;&lt;br /&gt;
    $this-&amp;gt;DC = $dc;&lt;br /&gt;
    $this-&amp;gt;DC1 = $dc1;&lt;br /&gt;
    $this-&amp;gt;dn = &amp;quot;OU=&amp;quot;.$ou.&amp;quot;,DC=&amp;quot;.$dc.&amp;quot;,DC=&amp;quot;.$dc1.&amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function conexion()&lt;br /&gt;
   {&lt;br /&gt;
       $this-&amp;gt;conectar = ldap_connect($this-&amp;gt;host) or die(&amp;quot;Imposible Conectar&amp;quot;);&lt;br /&gt;
     // Especifico la versión del protocolo LDAP&lt;br /&gt;
    ldap_set_option($this-&amp;gt;conectar, LDAP_OPT_PROTOCOL_VERSION, 3)    or die (&amp;quot;Imposible asignar el Protocolo LDAP&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function credenciales(){&lt;br /&gt;
   // Valido las credenciales para accesar al servidor LDAP&lt;br /&gt;
    $bd = ldap_bind($this-&amp;gt;conectar, $this-&amp;gt;user, $this-&amp;gt;pswd)    or die (&amp;quot;Imposible Validar en el Servidor LDAP&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Especifico los parámetros que quiero que me regrese la consulta&lt;br /&gt;
    $attrs = array(&amp;quot;displayname&amp;quot;,&amp;quot;mail&amp;quot;,&amp;quot;samaccountname&amp;quot;,&amp;quot;telephonenumber&amp;quot;,&amp;quot;givenname&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
    // Creo el filtro para la busqueda&lt;br /&gt;
    $filter = &amp;quot;(samaccountname=&amp;quot;.$this-&amp;gt;user.&amp;quot;)&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    $search = ldap_search($this-&amp;gt;conectar, $this-&amp;gt;dn, $filter, $attrs)    or die (&amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    $entries = ldap_get_entries($this-&amp;gt;conectar, $search);&lt;br /&gt;
&lt;br /&gt;
    return $entries;&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17484</id>
		<title>NF2: Generació de documents web amb llenguatges de guions</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17484"/>
				<updated>2023-10-27T15:28:00Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introducció llenguatges de programació del costat Servidor =&lt;br /&gt;
&lt;br /&gt;
Existeix una multitud de llenguatges concebuts o no per a Internet. Cadascun d'ells explota més a fons certes característiques que ho fan més o menys útils per desenvolupar diferents aplicacions.&lt;br /&gt;
Un '''llenguatge del costat del servidor''' és aquell que '''s'executa en el servidor web, just abans que s'enviï la pàgina''' a través d'Internet al client. Les pàgines que s'executen en el servidor poden realitzar accessos a bases de dades, connexions en xarxa, i altres tasques per crear la pàgina final que veurà el client.&lt;br /&gt;
D'altra banda, els '''llenguatges de costat client''' (entre els quals no només es troba l'HTML sinó també el Java i el Javascript els quals són simplement inclosos en el codi HTML) són aquells que '''poden ser directament executats pel navegador i no necessiten un pretractament'''.&lt;br /&gt;
[[Fitxer:serverside.jpg|center]]&lt;br /&gt;
Els llenguatges de costat servidor més àmpliament utilitzats per al desenvolupament de pàgines dinàmiques són l'ASP, JSP, PERL i PHP.&lt;br /&gt;
== ASP.NET ==&lt;br /&gt;
Llenguatge comercialitzat per Microsoft, i usat per programadors per desenvolupar entre altres funcions, llocs web. ASP.NET és el successor de la tecnologia ASP, va ser llançada al mercat mitjançant una estratègia de mercat denominada .NET.&lt;br /&gt;
Es desenvolupat per resoldre les limitants que brindava el teu antecessor ASP. Per al desenvolupament d'ASP.NET es pot utilitzar C#, VB.NET o J#. Els arxius compten amb l'extensió (aspx). Per al seu funcionament de les pàgines es necessita tenir instal·lat IIS amb el Framework .Net. Microsft Windows 2003 inclou aquest framework, solament es necessitarà instal·lar-ho en versions anteriors.&lt;br /&gt;
El llenguatge ASP consisteix en una sèrie de classes .NET utilitzades per crear aplicacions Web, tant del costat client (Web Form) com del costat servidor (Web Service). La integració de nadiva .NET Framework amb el sistema operatiu Windows Server 2003 fa que la seva execució sigui més estable i ràpida que altres llenguatges de programació.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Completament orientat a objectes.&lt;br /&gt;
*Controls d'usuari i personalitzats.&lt;br /&gt;
*Divisió entre la capa d'aplicació o disseny i el codi.&lt;br /&gt;
*Facilita el manteniment de grans aplicacions.&lt;br /&gt;
*Increment de velocitat de resposta del servidor.&lt;br /&gt;
*Major velocitat.&lt;br /&gt;
*Major seguretat.&lt;br /&gt;
&lt;br /&gt;
'''Desavantatges: '''&lt;br /&gt;
*Major consum de recursos.&lt;br /&gt;
*Tecnologia propietària.&lt;br /&gt;
*Hostalatge de llocs web costosos.&lt;br /&gt;
&lt;br /&gt;
== JSP: Java Server Pages ==&lt;br /&gt;
És un llenguatge per a la creació de llocs web dinàmics, acrònim de Java Server Pages. Està orientat a desenvolupar pàgines web en Java. JSP és un llenguatge multiplataforma.&lt;br /&gt;
JSP va ser desenvolupat per Sun Microsystems. Comparteix avantatges similars a les d'ASP.NET, desenvolupat per a la creació d'aplicacions web potents. Posseeix un motor de pàgines basat en els servlets de Java. Per al seu funcionament es necessita tenir instal·lat un servidor Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Característiques'''&lt;br /&gt;
*Codi separat de la lògica del programa.&lt;br /&gt;
*Les pàgines són compilades en la primera petició.&lt;br /&gt;
*Permet separar la part dinàmica de l'estàtica a les pàgines web.&lt;br /&gt;
*Els arxius es troben amb l'extensió (jsp).&lt;br /&gt;
*El codi JSP pot ser incrustat en codi HTML.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Execució ràpida del servlets.&lt;br /&gt;
*Crear pàgines del costat del servidor.&lt;br /&gt;
*Multiplataforma.&lt;br /&gt;
*Codi ben estructurat.&lt;br /&gt;
*Integritat amb els mòduls de Java.&lt;br /&gt;
*La part dinàmica està escrita en Java.&lt;br /&gt;
== PERL (Practical Extraction and Report Language) ==&lt;br /&gt;
És un llenguatge de programació desenvolupat per Larry Wall (lwall at netlabs.com) inspirat en altres eines d'UNIX com són: sigueu, grep, awk, c-shell, per a l'administració de tasques pròpies de sistemes UNIX. No estableix cap filosofia de programació concreta. No es pot dir que sigui orientat a objectes, modular o estructurat encara que suporta directament tots aquests paradigmes; el seu punt fort són les labors de processament de textos i arxius. Llenguatge de programació basat en scripts portable a gairebé qualsevol plataforma. És molt utilitzat per escriure CGIs. Un dels seus elements més potents són les expressions regulars, que a partir de la seva versió en Perl han estat adoptades per altres llenguatges i plataformes com .NET o Javascript.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Es poden ajuntar diversos programes d'una forma senzilla per aconseguir una meta determinada. Els usuaris de Windows agrairan aquesta propietat ja que normalment emmalalteixen d'un bon llenguatge tipus “script”.&lt;br /&gt;
*És relativament ràpid per a un llenguatge tipus “script”.&lt;br /&gt;
*Està disponible en múltiples plataformes i sistemes operatius (UNIX, Linux i Windows). Un programa que s'escrigui tenint en compte la compatibilitat pot ser escrit en una plataforma i executat en una altra.&lt;br /&gt;
*Hi ha una col·lecció enorme de mòduls que poden ser incorporats a qualsevol “script” de Perl. Estan disponibles en el CPAN (“Comprehensive Perl Arxivi Network”). En particular existeix una extensió per a càlcul numèric denominada PDL.&lt;br /&gt;
*Perl és gratuït. Molt més que això, és “Programari Lliure”. Això vol dir que el codi font està disponible perquè qualsevol el pugui veure o modificar, i el que és més important, sempre ho estarà. Encara que mai pretenguis canviar el codi, és important disposar de la possibilitat de fer-ho, ja que sempre es podrà contractar a una tercera persona perquè ho modifiqui en el cas que hi hagi un error, i hauria de ser possible solucionar-ho.&lt;br /&gt;
*Li atorga al programador molta llibertat perquè faci el programa com vulgui. Tal com diu l'eslògan de Perl “Hi ha més d'una forma de fer-ho”&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
PHP és l'acrònim de Hipertext Preprocesor. És un llenguatge de programació del costat del servidor gratuït i independent de plataforma, ràpid, amb una gran llibreria de funcions i molta documentació. Va ser creat originalment en 1994 per Rasmus Lerdorf, però com PHP està desenvolupat en política de codi obert, al llarg de la seva història ha tingut moltes contribucions d'altres desenvolupadors.&lt;br /&gt;
El client solament rep una pàgina amb el codi HTML resultant de l'execució de la PHP. Com la pàgina resultant conté únicament codi HTML, és compatible amb tots els navegadors.&lt;br /&gt;
&lt;br /&gt;
https://luisjordan.net/node-js/node-js-vs-php-comparaciones-cms-beneficios-y-tiempos-de-respuesta/&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Molt fàcil d'aprendre.&lt;br /&gt;
*Es caracteritza per ser un llenguatge molt ràpid.&lt;br /&gt;
*Suporta en certa mesura l'orientació a objecte. Classes i herència.&lt;br /&gt;
*És un llenguatge multiplataforma: Linux, Windows, entre uns altres.&lt;br /&gt;
*Capacitat de connexió amb la majoria dels manejadores de base de dades: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre unes altres.&lt;br /&gt;
*Capacitat d'expandir el seu potencial utilitzant mòduls.&lt;br /&gt;
*Posseeix documentació a la seva pàgina oficial la qual inclou descripció i exemples de cadascuna de les seves funcions.&lt;br /&gt;
*És lliure, per la qual cosa es presenta com una alternativa de fàcil accés per a tots.&lt;br /&gt;
*Inclou gran quantitat de funcions.&lt;br /&gt;
*No requereix definició de tipus de variables ni maneig detallat del baix nivell.&lt;br /&gt;
&lt;br /&gt;
= Preparació de l'entorn =&lt;br /&gt;
== Instal·lació de servidors d'aplicacions Web ==&lt;br /&gt;
Internet s’ha convertit en la principal eina d’intercanvi d’informació a la societat actual. La connexió dels ordinadors a les xarxes locals i aquestes xarxes a d’altres de grans dimensions ha possibilitat la comunicació global d’informació entre els ordinadors arreu del món. Per poder oferir serveis web, els servidors han de tenir instal·lats una sèrie de serveis. El servidor web permet l’enviament de continguts a altres ordinadors a través de la xarxa. Els preprocessadors d’hipertext (com PHP) permeten crear continguts web de forma dinàmica. Els servidors de bases de dades permeten emmagatzemar informació de forma estructurada que es pot fer servir per generar contingut web. Aquests serveis han de ser instal·lats i configurats correctament abans de començar a crear el contingut web dinàmic del nostre web.&lt;br /&gt;
&lt;br /&gt;
Un '''servidor web''' és una peça de programari que respon a les peticions dels navegadors i lliura la pàgina per al navegador a través d’Internet. Quan es crida a una pàgina web per l’adreça –l’URL (uniform resource locator), per exemple, www.infomerce.es/index.html-, la comunicació entre el navegador i el servidor és possible gràcies a tres protocols:&lt;br /&gt;
* TCP(Transmission Control Protocol, protocol de control de transmissió): és el responsable de fer que el missatge arribi a la destinació sense errors.&lt;br /&gt;
* IP(Internet Protocol): és el responsable de fer que el missatge trobi el camí fins al servidor.&lt;br /&gt;
* HTTP(Hypertext Transfer Protocol, protocol de transferència d’hipertext): és el protocol que ha indicat l’usuari a l’hora de demanar el recurs al servidor. La primera part d’un recurs URL correspon al protocol que utilitzaran client i servidor per intercanviar dades.&lt;br /&gt;
== HTTP: comunicació entre servidor i client ==&lt;br /&gt;
Un cop establerta la connexió entra en joc el protocol HTTP: el navegador envia una petició al servidor en què sol·licita el recurs index.html. El servidor processa aquesta petició i retorna la pàgina sol·licitada al navegador, que interpreta les etiquetes HTML i la presenta a l’usuari.&lt;br /&gt;
[[Fitxer:peticiohttp.jpg|center]]&lt;br /&gt;
La informació que el client envia al servidor en la petició és la següent:&lt;br /&gt;
* El mètode HTTP: l’acció que s’ha de fer.&lt;br /&gt;
* El recurs a què s’ha d’accedir (una part de l’URL).&lt;br /&gt;
* La informació que l’usuari envia al servidor.&lt;br /&gt;
La informació que el servidor envia en la resposta té dues parts ben diferenciades: &lt;br /&gt;
* La capçalera: conté el codi que indica si la petició s’ha complert. També conté el tipus de contingut que enviarà al client.&lt;br /&gt;
* El contingut: (text, codi HTML, imatges, etc.) del recurs demanat.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Preparació M.V. amb Ubuntu i PHP ===&lt;br /&gt;
Es tracta d'importar una M.V. amb Ubuntu Server. Aquesta màquina virtual la utilitzarem al llarg del curs per desenvolupar programes amb el llenguatge PHP. LA M.V. ha de tenir les següents característiques:&lt;br /&gt;
*512 MB de Ram&lt;br /&gt;
*Targeta mode Pont (Has de reinicialitzar la @MAC i esborrar el fitxer: /etc/udev/rules.d/70-persistent-net.rules)&lt;br /&gt;
*Configura la @IP. &lt;br /&gt;
Instal·la el següent programari:&lt;br /&gt;
*openssh-server (per permetre comunicacions remotes)&lt;br /&gt;
*Servidor Web apache2&lt;br /&gt;
*Servidor PHP&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Primer projecte amb NetBeans ===&lt;br /&gt;
Crea un projecte PHP amb NetBeans. Fes que automàticament guardi tots els fitxers a la màquina virtual creada al apartat anterior. Crea una pàgina d'exemple i comprova que funciona.&lt;br /&gt;
La pàgina d'exemple pot ser la següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
     	&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;?php&lt;br /&gt;
            echo &amp;quot;Primera Pàgina amb PHP&amp;quot;; &lt;br /&gt;
          ?&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= El Llenguatge PHP =&lt;br /&gt;
== Introducció ==&lt;br /&gt;
'''PHP''' és un llenguatge de programació obert que s’integra directament en pàgines HTML. El seu ús ha esdevingut gairebé imprescindible en les pàgines que han d’utilitzar bases de dades o formularis.&lt;br /&gt;
Rasmus Lerdorf és el creador del llenguatge PHP. El 1995 presenta la primera edició d’aquest llenguatge amb el nom de Personal Home Page tools amb llicència pública GNU. Per crear el PHP, Rasmus utilitza el codi de programació C.&lt;br /&gt;
&lt;br /&gt;
El '''codi PHP''' que escriviu, '''l’haureu d’incrustar dins de codi HTML''', concretament dins les etiquetes \&amp;lt;body\&amp;gt; del document. Mitjançant unes marques l’HTML no interpretarà el codi PHP, el qual, i mitjançant les mateixes marques, s’executarà en el servidor.&lt;br /&gt;
&lt;br /&gt;
El codi PHP s’executa en un servidor i mostra el resultat en un client. Visualitzareu els resultats amb un navegador web.&lt;br /&gt;
&lt;br /&gt;
Quan arrenca el PHP es fa la lectura del fitxer '''php.ini'''. Aquest fitxer conté la configuració del PHP i es crea durant la instal·lació del PHP. És possible que necessiteu fer canvis en el fitxer de configuració, preneu la precaució de fer-ne una còpia de seguretat abans de fer aquestes modificacions.&lt;br /&gt;
Una inspecció visual del fitxer php.ini us servirà per comprendre’n el funcionament. Depenent del valor de les variables que conté aquest fitxer, el comportament del PHP variarà en la vostra màquina. Podeu comprovar que cada variable que forma part del fitxer està àmpliament comentada, amb comentaris que es marquen amb un punt i coma.&lt;br /&gt;
&lt;br /&gt;
== Mostrar Errors ==&lt;br /&gt;
Per mostrar els errors que fem al escriure programes en php s'ha d'especificar als fitxers que els vols veure per pantalla amb les següents sentències:&lt;br /&gt;
&lt;br /&gt;
http://www.anerbarrena.com/mostrar-errores-php-608/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* * ******************Errores******************* */&lt;br /&gt;
ini_set('display_errors', true);&lt;br /&gt;
error_reporting(E_ALL);&lt;br /&gt;
/* * ********************Usuarios****************** */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintaxi ==&lt;br /&gt;
=== Generalitats ===&lt;br /&gt;
La sintaxi d'un llenguatge de programació es defineix com el conjunt de regles que han de seguir-se en escriure el codi font dels programes per considerar-se com a correctes per a aquest llenguatge de programació.&lt;br /&gt;
Les normes bàsiques que defineixen la sintaxi de PHP són les següents:&lt;br /&gt;
*Si voleu que s’interpreti el vostre codi és imprescindible que encabiu el codi escrit en PHP entre dos delimitadors. Aquestes marques són &amp;lt;?php , que la fareu servir per indicar l’inici de codi en llenguatge PHP, i ?&amp;gt; , que utilitzareu per marcar el final del vostre codi PHP.&lt;br /&gt;
*Indicareu el final d’una instrucció amb punt i coma. Cada vegada que es detecti un punt i coma s’interpretarà el codi inserit fins a aquell punt.&lt;br /&gt;
*Els comentaris en PHP els podreu incloure mitjançant:&lt;br /&gt;
** Dues barres (//) o un coixinet (#) si voleu comentar una línia&lt;br /&gt;
** Una barra i un asterisc (/*) per indicar l’inici de comentari, i un asterisc i una barra per indicar el final de comentari si voleu comentar més d’una línia(/*).&lt;br /&gt;
*No es defineix el tipus de les variables: PHP és un llenguatge de programació que no obliga a declarar prèviament el nom de les variables que s’utilitzaran ni el seu tipus (és diu que és un llenguatge sense tipus o no tipat). Ara bé, tot i que existeixen els tipus de dades en PHP aquests no es comproven.&lt;br /&gt;
*No es distingeixen les majúscules i minúscules.&lt;br /&gt;
Exemples:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Aquí teniu una instrucció.&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;i aquí una altra instrucció.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Si voleu comentar una línia ho podeu fer d’aquesta manera...&lt;br /&gt;
#...o bé d’aquesta altra.&lt;br /&gt;
/* Però si necessiteu comentar&lt;br /&gt;
més línies aquesta és la millor&lt;br /&gt;
manera de fer − ho! */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Per representar una variable '''caldrà escriure el símbol del dòlar seguit pel nom que vulgueu posar'''. En el moment de donar nom a una variable heu de tenir en compte que es diferencien majúscules i minúscules i que haurà de començar amb una lletra o caràcter de subratllat.&lt;br /&gt;
En PHP, a diferència de molts altres llenguatges, no cal declarar una variable abans d’utilitzar-la. El símbol del dòlar és el que marca que es tracta d’una variable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$Nom='whovian';&lt;br /&gt;
$Familia='Informàtica';&lt;br /&gt;
$Cicle=&amp;quot;CFGS Desenvolupament d'aplicacions Web&amp;quot;;&lt;br /&gt;
$Modul = &amp;quot;DAW en entorn servidor&amp;quot;;&lt;br /&gt;
$Durada= 165;&lt;br /&gt;
echo &amp;quot;Hola $nom!&amp;lt;br&amp;gt;&lt;br /&gt;
Benvingut als estudis d’$Familia!!!&amp;lt;br&amp;gt;&lt;br /&gt;
Cicle: $Cicle&amp;lt;br&amp;gt;&lt;br /&gt;
Mòdul: $Modul&amp;lt;br&amp;gt;&lt;br /&gt;
Durada: $Durada hores&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com podeu veure, les variables poden adquirir qualsevol dels tipus suportats, i la variable $Durada emmagatzema l’enter 180, mentre que la resta de variables emmagatzemaran cadenes.&lt;br /&gt;
Les variables s’assignen per valor per defecte, però '''si voleu assignar un valor per referència''' ho haureu d’indicar fent servir el símbol''' &amp;amp; '''tot just davant de la variable&lt;br /&gt;
=== Àmbit de les variables ===&lt;br /&gt;
&lt;br /&gt;
Les variables tenen una vida determinada depenent d’on les declareu i com ho feu. És molt important conèixer l’àmbit de les variables per controlar els vostres codis. No comprendre aquesta part pot provocar fallades inesperades en les vostres creacions.&lt;br /&gt;
L’àmbit d’una variable és el context en què és definida.&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot declarar una variable nombroses vegades en àmbits diferents:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nom=’Nyoman’;&lt;br /&gt;
echo ’De moment $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
function canvi()&lt;br /&gt;
{&lt;br /&gt;
	$nom=’Ketut’;&lt;br /&gt;
	echo ’Però ara $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
canvi();&lt;br /&gt;
echo ’I de nou $nom torna a tenir el valor de ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadors ===&lt;br /&gt;
Permetran fer accions dins el codi. Podreu canviar i assignar valors, canviar l’adreça del codi, condicionar l’execució de blocs de codi i, en&lt;br /&gt;
definitiva, dotar de la complexitat necessària els vostres programes per aconseguir un objectiu.&lt;br /&gt;
Els operadors es poden agrupar en tres blocs segons el nombre de valors sobre els quals s’actua.&lt;br /&gt;
* L’operador '''unari''' opera sobre un valor i el que pot fer en aquest valor és negar-lo, incrementar-lo o decrementar-lo, entre altres coses.&lt;br /&gt;
* L’operador '''binari''' opera sobre dos valors i permet sumar-los, restar-los o comparar-los.&lt;br /&gt;
* L’operador '''ternari''' permet escollir entre dues expressions en funció d’una altra.&lt;br /&gt;
&lt;br /&gt;
'''Operadors Aritmètics '''&lt;br /&gt;
Teniu en compte que la divisió retornarà un valor en coma flotant si el resultat de la divisió no és exacte.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
|-$valor||Negació||Oposat de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor + $valorB ||Addició||Suma de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor - $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor * $valorB||Multiplicació||Producte de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor / $ valorB||Divisió||Quocient de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor % $valorB||Mòdul||Resta de $valor dividit per $valorB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors d'assignació '''&lt;br /&gt;
L’operador bàsic d’assignació és l’igual. Amb l’operador igual la variable de l’esquerra rep el valor de l’expressió de la dreta.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor = $valorB||Assignació||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor += $valorB||Addició i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor -= $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor.= “text”||Concatenació i Assignació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de bit '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp; $valorB||i||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor I $valorB||o i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor ˆ $valorB ||xor||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
|  ̃ $valor||Negació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;lt;$valorB ||Desplaçament a l’esquerra||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;&amp;gt;$valorB||Desplaçament a la dreta||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de comparació '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor == $valorB||Igual||TRUE si $valor és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor === $valorB||Idèntic||TRUE si $valor és igual a $valorB i són del mateix tipus.&lt;br /&gt;
|-&lt;br /&gt;
| $valor != $valorB ||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;gt; $ valorB||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor !== $valorB ||No idèntic||TRUE si $valor no és igual a $valorB o no són del mateix tipus&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt; $valorB||Més petit que||TRUE si $valor és més petit que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt; $valorB||Més gran que||TRUE si $valor és més gran que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;= $valorB||Més petit o igual que||TRUE si $valor és més petit o igual que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;= $valorB||Més gran o igual que||TRUE si $valor és més gran o igual que $valorB.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Operadors d’increment i decrement '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| ++$valor||Preincrement||Incrementa $valor una unitat, i després retorna $valor.&lt;br /&gt;
|-&lt;br /&gt;
| $valor++||Postincrement||Retorna $valor i incrementa $valor una unitat.&lt;br /&gt;
|-&lt;br /&gt;
| –$valor ||Predecrement||Decrementa $valor una unitat i retorna $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor–||Postdecrement||Retorna $valor i decrementa $valor una unitat.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de lògica '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor and valorB||i||TRUE si $valor i $valorB són TRUE&lt;br /&gt;
|-&lt;br /&gt;
| $valor or $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor xor $valorB ||xor||TRUE si $valor o $valorB són TRUE, però no tots dos alhora.&lt;br /&gt;
|-&lt;br /&gt;
| !$valor||No||Inverteix el contingut de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp;&amp;amp; $valorB ||i||TRUE si $valor i $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor II $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Els Vectors i les Matrius (Arrays) ===&lt;br /&gt;
Les matrius i els vectors són conjunts de dades que poden estar definides en un Guió de PHP. Les matrius poden contenir altres matrius dintre d'ells sense restricció (multidimensionals). &lt;br /&gt;
&lt;br /&gt;
Els vectors es poden crear de dues maneres. La primera consisteix en l'ús de la funció '''array()'''. La segona implica l'ús de claudàtors.&lt;br /&gt;
Exemple de declaracions d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$elmeuarray = array($valor1, $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
$elmeuarray[1] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//També es pot declarar de la següent manera:&lt;br /&gt;
$elmeuarray = array('mes1' =&amp;gt; $valor1, 'mes2' =&amp;gt; $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
$elmeuarray['mes2'] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//Però tambés es pot declarar directament amb claudàtors:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
//o amb la següent notació&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemples d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$array = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;type&amp;quot;=&amp;gt;&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;manufactured&amp;quot;=&amp;gt;&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2 = array(&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3 = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array['name']=&amp;quot;BMW&amp;quot;;&lt;br /&gt;
$array['type']=&amp;quot;SERIE 1&amp;quot;;&lt;br /&gt;
$array['colour']=&amp;quot;BLANCO&amp;quot;;&lt;br /&gt;
$array['manufactured']=&amp;quot;2035&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2[]=&amp;quot;AUDI&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;A5&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;ROJO&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;2038&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3['name']=&amp;quot;FERRARI&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;SPIDER&amp;quot;;&lt;br /&gt;
$array3['colour']=&amp;quot;VERDE&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;2013&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les matrius son vectors multidimensionals. Els elements d'un vector a la seva vegada poden ser un altre vector. Un exemple és el següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$cars = array(&lt;br /&gt;
   &amp;quot;car1&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Toyota&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;Green&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1999,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1998),&lt;br /&gt;
   &amp;quot;car2&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;BMW&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;RED&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 2005,&amp;quot;engine_cc&amp;quot; =&amp;gt; 2400),&lt;br /&gt;
   &amp;quot;car3&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Renault&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;White&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1993,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1395),&lt;br /&gt;
);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $cars['car1']['make'],&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo $cars['car3']['engine_cc'];&lt;br /&gt;
&lt;br /&gt;
/* El resultat de l'execució de les intruccions anteriors és:&lt;br /&gt;
Toyota&lt;br /&gt;
1395&lt;br /&gt;
*/&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Més informació sobre arrays [http://php.net/manual/en/language.types.array.php aquí.]&lt;br /&gt;
Existeixen MOLTES funcions per manipular els arrays. Dona una ullada a [http://php.net/manual/en/ref.array.php aquesta pàgina] abans que comencis a implementar funcions que ja existeixen a la llibreria de php.&lt;br /&gt;
&lt;br /&gt;
=== Estructures de control ===&lt;br /&gt;
==== La sentència '''IF''' i l'Operador Ternari ====&lt;br /&gt;
Les estructures condicionals s'utilitzen per controlar quines instruccions s'executen. Els condicionals en PHP estan estructurats de manera similar als trobats en C ++ i Java .&lt;br /&gt;
Exemple d'estructures condicionals:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//Exemple 1&lt;br /&gt;
$foo = 1;&lt;br /&gt;
$bar = 2;&lt;br /&gt;
if($foo == $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is equal to $bar.&amp;quot;;&lt;br /&gt;
} elseif ($foo &amp;gt; $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is greater than $bar.&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;$foo is less than $bar.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple 2&lt;br /&gt;
$lower = 10;&lt;br /&gt;
$upper = 100;&lt;br /&gt;
$needle = 25;&lt;br /&gt;
if(($needle &amp;gt;= $lower) &amp;amp;&amp;amp; ($needle &amp;lt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is in the haystack.&amp;quot;;&lt;br /&gt;
} elseif (($needle &amp;lt;= $lower) || ($needle &amp;gt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is outside of the haystack.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple Operador Ternari&lt;br /&gt;
&lt;br /&gt;
$missatge =  (date('G') &amp;lt; 12) ? 'Buenos días' : 'Buenas tardes';&lt;br /&gt;
&lt;br /&gt;
//equival a la següent estructura:&lt;br /&gt;
if (date('G') &amp;lt; 12) {&lt;br /&gt;
$missatge = 'Buenos días';&lt;br /&gt;
} else {&lt;br /&gt;
$missatge = 'Buenas tardes';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''SWITCH''' ====&lt;br /&gt;
Quan es necessita utilitzar un IF amb molts Else pot resultar que es vegi un codi molt redundant. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user_command == &amp;quot;n&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_north();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;e&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_east();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;s&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_south();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;w&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_west();&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  do_something_else();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per millorar la llegibilitat del codi utilitzarem l'estructura 'Switch' de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 switch($user_command)&lt;br /&gt;
 {&lt;br /&gt;
   case 'n':&lt;br /&gt;
     go_north();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'e':&lt;br /&gt;
     go_east();&lt;br /&gt;
     break;&lt;br /&gt;
   case 's':&lt;br /&gt;
     go_south();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'w':&lt;br /&gt;
     go_west();&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     do_something_else();&lt;br /&gt;
     break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Un altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($firstvariable == 'comparison1' &lt;br /&gt;
         || $firstvariable == 'comparison2')&lt;br /&gt;
 {&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
 }&lt;br /&gt;
 else if ($firstvariable == 'comparison3')&lt;br /&gt;
 {&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
      launchMissiles();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//amb l'estructura switch :&lt;br /&gt;
 switch($firstvariable)&lt;br /&gt;
 {&lt;br /&gt;
  case 'comparison1':&lt;br /&gt;
  case 'comparison2':&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  case 'comparison3':&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  default: &lt;br /&gt;
      launchMissiles();&lt;br /&gt;
      break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''WHILE''' ====&lt;br /&gt;
Aquesta sentència s'utilitzarà per repetir una serie d'instruccions tantes vegades com el condicional sigui evaluat a True.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$c = 0;&lt;br /&gt;
while ($c &amp;lt; 5) {&lt;br /&gt;
   echo $c++;&lt;br /&gt;
} ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mira el següent codi i enraona si serà un bucle infinit o no:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$c = 1;&lt;br /&gt;
$myName=&amp;quot;Fred&amp;quot;;&lt;br /&gt;
while ($myName != &amp;quot;Rumplestilskin&amp;quot;) &lt;br /&gt;
{&lt;br /&gt;
   if ($myName==&amp;quot;Fred&amp;quot;) &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Leslie&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Marc&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   $c++;&lt;br /&gt;
 &lt;br /&gt;
   if ($c==3) &lt;br /&gt;
   {&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
echo &amp;quot;You lose and I get your baby!\n&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''do ... WHILE''' ====&lt;br /&gt;
És semblan al bucle anterior però les intruccions sempre s'execulten almenys 1 vegada. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  $c = 6;&lt;br /&gt;
  do {&lt;br /&gt;
    echo 'Hi';&lt;br /&gt;
  } while ($c &amp;lt; 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''FOR''' ====&lt;br /&gt;
La sintaxi bàsica d'aquesta sentencia és la següent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for([initialization]; [condition]; [step])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'ús:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 for($i = 0; $i &amp;lt; 5; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilització amb arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $menu = array(&amp;quot;Toast and Jam&amp;quot;, &amp;quot;Bacon and Eggs&amp;quot;, &amp;quot;Homefries&amp;quot;, &amp;quot;Skillet&amp;quot;, &amp;quot;Milk and Cereal&amp;quot;);&lt;br /&gt;
 // note to self: get breakfast after writing this article&lt;br /&gt;
 $count = count($menu);&lt;br /&gt;
 for($i = 0; $i &amp;lt; $count; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i + 1 . &amp;quot;. &amp;quot; . $menu[$i] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== La sentència '''FOREACH''' ====&lt;br /&gt;
Aquesta sentència és molt utilitzada per recòrrer arrays. Com el parell array[key]=value pot ser string en ambdós casos, aquesta estructura ens permet obternir-los:&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach ($array as $someVar) {&lt;br /&gt;
  echo ($someVar . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//un altre exemple:&lt;br /&gt;
foreach ($array as $key =&amp;gt; $value) {&lt;br /&gt;
  echo ($key.&amp;quot;holds the value &amp;quot;.$value.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''break''' ====&lt;br /&gt;
&lt;br /&gt;
La sentència break provoca la sortida de qualsevol estructura de control, trencant així un bucle. Penseu per exemple un bucle que cerca un element d’un array. Una vegada trobat, és ineficient acabar de recórrer la resta de l’array.&lt;br /&gt;
''Podeu indicar a aquesta sentència quantes estructures de control voleu saltar. ''&lt;br /&gt;
En l’exemple següent el break provoca la sortida de dos blocs de codi:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
while($edat&amp;lt;20)&lt;br /&gt;
{&lt;br /&gt;
	for( ; ; $edat=$edat+1)&lt;br /&gt;
	{&lt;br /&gt;
		if($edat==18)&lt;br /&gt;
		{&lt;br /&gt;
			echo &amp;quot;Ara ja tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
			break 2;&lt;br /&gt;
		}&lt;br /&gt;
		echo &amp;quot;Encara ets menor d’edat, ja que tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;Aquesta línia no sortirà per pantalla!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;Ja no ets menor d’edat! Tens $edat anys!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
&lt;br /&gt;
===Exercici: tablita ===&lt;br /&gt;
Se desea crear una página web en la cual muestre un título y luego haga una tabla que imprima 10 filas mostrando &amp;quot;estamos en 2DAW&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;th&amp;gt;M09-PHP&amp;lt;/th&amp;gt;  &lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;?php&lt;br /&gt;
                $conta =1;&lt;br /&gt;
                while($conta&amp;lt;=10) { &lt;br /&gt;
                    echo &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;td&amp;gt;Estamos en DAW2&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    $conta++;&lt;br /&gt;
                }&lt;br /&gt;
            ?&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
     &amp;lt;/body&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exercici: Vector (opcional) ===&lt;br /&gt;
Queremos crear un vector &amp;quot;ciudades&amp;quot; donde introduciremos una serie  de ciudades, luego deberá mostrar cada una de las ciudades y el número total.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Recòrrer array ====&lt;br /&gt;
Donat el següent array:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$eu = array( &amp;quot;Italy&amp;quot;=&amp;gt;&amp;quot;Rome&amp;quot;, &amp;quot;Luxembourg&amp;quot;=&amp;gt;&amp;quot;Luxembourg&amp;quot;, &amp;quot;Belgium&amp;quot;=&amp;gt; &amp;quot;Brussels&amp;quot;, &lt;br /&gt;
&amp;quot;Denmark&amp;quot;=&amp;gt;&amp;quot;Copenhagen&amp;quot;, &amp;quot;Finland&amp;quot;=&amp;gt;&amp;quot;Helsinki&amp;quot;, &amp;quot;France&amp;quot; =&amp;gt; &amp;quot;Paris&amp;quot;, &amp;quot;Slovakia&amp;quot;=&amp;gt;&amp;quot;Bratislava&amp;quot;, &lt;br /&gt;
&amp;quot;Slovenia&amp;quot;=&amp;gt;&amp;quot;Ljubljana&amp;quot;, &amp;quot;Germany&amp;quot; =&amp;gt; &amp;quot;Berlin&amp;quot;, &amp;quot;Greece&amp;quot; =&amp;gt; &amp;quot;Athens&amp;quot;, &amp;quot;Ireland&amp;quot;=&amp;gt;&amp;quot;Dublin&amp;quot;, &lt;br /&gt;
&amp;quot;Netherlands&amp;quot;=&amp;gt;&amp;quot;Amsterdam&amp;quot;, &amp;quot;Portugal&amp;quot;=&amp;gt;&amp;quot;Lisbon&amp;quot;, &amp;quot;Spain&amp;quot;=&amp;gt;&amp;quot;Madrid&amp;quot;, &amp;quot;Sweden&amp;quot;=&amp;gt;&amp;quot;Stockholm&amp;quot;,&lt;br /&gt;
 &amp;quot;United Kingdom&amp;quot;=&amp;gt;&amp;quot;London&amp;quot;, &amp;quot;Cyprus&amp;quot;=&amp;gt;&amp;quot;Nicosia&amp;quot;, &amp;quot;Lithuania&amp;quot;=&amp;gt;&amp;quot;Vilnius&amp;quot;, &lt;br /&gt;
&amp;quot;Czech Republic&amp;quot;=&amp;gt;&amp;quot;Prague&amp;quot;, &amp;quot;Estonia&amp;quot;=&amp;gt;&amp;quot;Tallin&amp;quot;, &amp;quot;Hungary&amp;quot;=&amp;gt;&amp;quot;Budapest&amp;quot;, &amp;quot;Latvia&amp;quot;=&amp;gt;&amp;quot;Riga&amp;quot;, &lt;br /&gt;
&amp;quot;Malta&amp;quot;=&amp;gt;&amp;quot;Valetta&amp;quot;, &amp;quot;Austria&amp;quot; =&amp;gt; &amp;quot;Vienna&amp;quot;, &amp;quot;Poland&amp;quot;=&amp;gt;&amp;quot;Warsaw&amp;quot;) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Crea un script amb PHP que mostri un llistat amb el noms de les capitals i els seus corresponents països. El llistat ha de ser semblant a:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
La capital de Netherlands és Amsterdam&lt;br /&gt;
La capital de Greece és Athens&lt;br /&gt;
La capital de Germany és Berlin&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[solucio_php_recorrer_array]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Afegir un element a un array ====&lt;br /&gt;
Escriu un programa que afegeixi un nou element a un array en una posició determinada.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//abans:&lt;br /&gt;
12345&lt;br /&gt;
&lt;br /&gt;
//després d'afegir $ l'array és:&lt;br /&gt;
123$45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
:[[solucio_afegir_element_array_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Curta i llarga ====&lt;br /&gt;
Escriu un programa en PHP que retorni la longitud màxima i mínima dels strings que conté un array.&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ar = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$max=0;&lt;br /&gt;
$min = PHP_INT_MAX;&lt;br /&gt;
&lt;br /&gt;
foreach($ar as $valor){&lt;br /&gt;
    if( strlen($valor) &amp;lt; $min){&lt;br /&gt;
        $min = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
    if (strlen($valor) &amp;gt; $max){&lt;br /&gt;
        $max = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;La longitud mes curta es $min i la mes llarga es $max.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Otra solucion:&lt;br /&gt;
&lt;br /&gt;
$my_array = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$otroarray = array_map('strlen', $my_array);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;La longitud mes curta es &amp;quot;. min($otroarray) .&amp;quot; i la mes llarga es &amp;quot;. max($otroarray).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
print_r($otroarray);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==== Exercici: Dibuixa asteriscs ====&lt;br /&gt;
Dibuixa amb PHP utilitzant asteriscs el següent dibuix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* &lt;br /&gt;
* * &lt;br /&gt;
* * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * &lt;br /&gt;
* * &lt;br /&gt;
* &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
$n=5;  &lt;br /&gt;
&lt;br /&gt;
for($i=1; $i&amp;lt;=$n; $i++)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
for($i=$n; $i&amp;gt;=1; $i--)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Escacs ====&lt;br /&gt;
Dibuixa una taula d'escacs com la que pots veure a continuació. &lt;br /&gt;
Table width=&amp;quot;270px&amp;quot; i cada cel·la ocupa 30px d'amplada i d'altura.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:escacs.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:solucio_escacs_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcions ===&lt;br /&gt;
&lt;br /&gt;
Les funcions son grup d'instruccions que poden ser cridades en qualsevol moment. Les funcions són útils per re-utilitzar codi de manera sencilla dintre de la nostra aplicació.&lt;br /&gt;
====Funcions definides per l’usuari====&lt;br /&gt;
L’usuari pot definir totes les funcions que necessiti. És imprescindible que el nom donat a la funció no estigui prohibit, és a dir, no es poden fer servir:&lt;br /&gt;
*paraules reservades (per exemple, echo), &lt;br /&gt;
*començar amb un nombre o un caràcter especial&lt;br /&gt;
*repetir el nom d’una funció dins un mateix àmbit. &lt;br /&gt;
Tot i que el PHP '''no farà cap distinció entre majúscules i minúscules''', es recomana utilitzar el nom de la funció idèntic a l’utilitzat en la declaració.&lt;br /&gt;
Les funcions poden rebre paràmetres. El pas de paràmetres d’entrada es fa escrivint entre parèntesis i a continuació del nom de la funció.&lt;br /&gt;
En l’exemple següent podeu veure com es declara la funció missatge i com, posteriorment, es crida passant-hi un paràmetre.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function missatge($argument)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;$argument&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
missatge(&amp;quot;Aquest és l’argument que es passa en aquest exemple.&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les funcions també podran retornar valors. Per fer-ho caldrà utilitzar la sentència '''return'''.&lt;br /&gt;
En l’exemple següent comprovareu com la funció suma, la qual rep dos paràmetres, retorna el resultat de sumar dos nombres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function suma ($valor1,$valor2)&lt;br /&gt;
{&lt;br /&gt;
	return($valor1+$valor2);&lt;br /&gt;
}&lt;br /&gt;
echo suma(4,6);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Funcions Internes====&lt;br /&gt;
El llenguatge PHP té funcions definides internament. Aquestes funcions són de gran utilitat per al programador i resulta imprescindible estudiarles i conèixer-ne les més importants.&lt;br /&gt;
&lt;br /&gt;
És possible que diverses funcions no es reconeguin en el vostre entorn de treball del PHP; el motiu d’això és que algunes funcions internes no s’han inclòs en la compilació, la qual cosa ha fet necessària una compilació dels mòduls que les contenen. Amb phpinfo() es poden veure les extensions carregades en la vostra configuració del PHP.&lt;br /&gt;
&lt;br /&gt;
Són funcions internes molt usuals ''echo, fprintf, print, printf i sprintf'', en què queda demostrat que el llenguatge PHP ja té definides funcions específiques que poden ser de gran utilitat per a l’usuari. &lt;br /&gt;
&lt;br /&gt;
Podeu mirar l’ajuda de PHP a la [https://www.php.net/manual/es/funcref.php pàgina oficial].&lt;br /&gt;
Funcions de Strings: [http://php.net/manual/en/ref.strings.php pàgina oficial].&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot codificar amb codificació ''md5'' el contingut d’una variable:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom = 'Blanca';&lt;br /&gt;
echo(&amp;quot;La codificació md5 de $nom és:&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
echo md5($nom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Exercici===&lt;br /&gt;
El código de encriptación md5 y sha están comprometido ya que son fáciles de desencriptar. ¿Qué algoritmo se debería utilizar?&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Algoritmes d'ordenació====&lt;br /&gt;
Segons el següent array &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fruits = array(&amp;quot;lemon&amp;quot;, &amp;quot;orange&amp;quot;, &amp;quot;banana&amp;quot;, &amp;quot;apple&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SORT''' Esta función ordena una matriz. Los elementos se organizarán de menor a mayor cuando se haya completado esta función.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
sort($cars);&lt;br /&gt;
&lt;br /&gt;
BMW&lt;br /&gt;
Toyota&lt;br /&gt;
Volvo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''RSORT''' Esta función ordena una matriz en orden inverso (de mayor a menor).&lt;br /&gt;
Nota: Esta función asigna nuevas claves para los elementos en la matriz. Eliminará todas las claves existentes que haya asignado, en lugar de simplemente reordenar las claves.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
rsort($cars);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volvo&lt;br /&gt;
Toyota&lt;br /&gt;
BMW&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''asort'''()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;345&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;3&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
asort($age)&lt;br /&gt;
&lt;br /&gt;
Array ( [Ben] =&amp;gt; 3 [Joe] =&amp;gt; 43 [Peter] =&amp;gt; 345 ) &lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''arsort''' ()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
arsort($age);&lt;br /&gt;
&lt;br /&gt;
Array ( [Peter] =&amp;gt; 345 [Joe] =&amp;gt; 43 [Ben] =&amp;gt; 3 ) &lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ksort''' ()&lt;br /&gt;
Ordena una matriz por clave, manteniendo la clave de las correlaciones de datos. Esto es útil principalmente para matrices asociativas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;200&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;99&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
ksort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Ben, Value=99&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''krsort'''()                &lt;br /&gt;
Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
krsort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Peter, Value=35&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=37&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''natsort''' ()&lt;br /&gt;
Esta función implementa un algoritmo de ordenamiento que ordena cadenas alfanuméricas en la forma en que lo haría un ser humano mientras mantiene asociaciones de clave / valor. Esto se describe como un &amp;quot;orden natural&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$array1 = $array2 = array(&amp;quot;img12.png&amp;quot;, &amp;quot;img10.png&amp;quot;, &amp;quot;img2.png&amp;quot;, &amp;quot;img1.png&amp;quot;);&lt;br /&gt;
sort($array1);&lt;br /&gt;
echo &amp;quot;Standard sorting\n&amp;quot;;print_r($array1);&lt;br /&gt;
natsort($array2);&lt;br /&gt;
echo &amp;quot;\nNatural order sorting\n&amp;quot;;print_r($array2);?&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The above example will output:&lt;br /&gt;
Standard sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; img1.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [2] =&amp;gt; img12.png&lt;br /&gt;
    [3] =&amp;gt; img2.png&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Natural order sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [3] =&amp;gt; img1.png&lt;br /&gt;
    [2] =&amp;gt; img2.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [0] =&amp;gt; img12.png&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
====Exercici: Ordenació ====&lt;br /&gt;
Crea una funció que ordeni un array. &lt;br /&gt;
*Per claus de menor a major i de major a menor&lt;br /&gt;
*Per valors de menor a major i de major a menor&lt;br /&gt;
&lt;br /&gt;
[[:Solucio_ordenacio]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Comprova minúscules ====&lt;br /&gt;
Crea una funció que comprovi si tots els caràcters d'un string son minúscules.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function is_str_lowercase($str1)  &lt;br /&gt;
   {  &lt;br /&gt;
    for ($sc = 0; $sc &amp;lt; strlen($str1); $sc++) {  &lt;br /&gt;
          if (ord($str1[$sc]) &amp;gt;= ord('A') &amp;amp;&amp;amp;  ord($str1[$sc]) &amp;lt;= ord('Z')) {    // ord — devuelve el valor ASCII de un caracter&lt;br /&gt;
      return false;  &lt;br /&gt;
         }  &lt;br /&gt;
         }  &lt;br /&gt;
      return true;  &lt;br /&gt;
       }  &lt;br /&gt;
var_dump(is_str_lowercase('abc def ghi'));  &lt;br /&gt;
var_dump(is_str_lowercase('abc dEf ghi'));  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
====Exercici: Primers====&lt;br /&gt;
Crea una funció que indiqui si un número és primer.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function IsPrime($n)  &lt;br /&gt;
{  &lt;br /&gt;
 for($x=2; $x&amp;lt;$n; $x++)  &lt;br /&gt;
   {  &lt;br /&gt;
      if($n %$x ==0)  &lt;br /&gt;
          {  &lt;br /&gt;
           return 0;  &lt;br /&gt;
          }  &lt;br /&gt;
    }  &lt;br /&gt;
  return 1;  &lt;br /&gt;
   }  &lt;br /&gt;
$a = IsPrime(3);  &lt;br /&gt;
if ($a==0)  &lt;br /&gt;
echo 'No es Primo.....';  &lt;br /&gt;
else  &lt;br /&gt;
echo 'ES primo..';  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici- Normalizar ===&lt;br /&gt;
&lt;br /&gt;
Tenemos una base de datos que sólo acepta nombres y apellidos SIN acentos, ni dieresis... por tanto, queremos que cuando escriba el usuario un nombre como &amp;quot;jÚlïÒ&amp;quot; lo normalice a &amp;quot;JULIO&amp;quot;. &lt;br /&gt;
  $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
&lt;br /&gt;
  $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
&lt;br /&gt;
Es interesante investigar sobre la función strtr&lt;br /&gt;
&lt;br /&gt;
solución:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UTF-8 es una codificación multibyte que puede representar cualquier carácter Unicode.&lt;br /&gt;
ISO 8859-1 es una codificación de un solo byte que puede representar los primeros 256 caracteres Unicode.&lt;br /&gt;
Ambos codifican ASCII exactamente de la misma manera.&lt;br /&gt;
&lt;br /&gt;
utf8_decode -&amp;gt;  Convierte una cadena con los caracteres codificados ISO-8859-1 con UTF-8 &lt;br /&gt;
&lt;br /&gt;
   //función que quita los acentos, dieresis, Ñ....&lt;br /&gt;
    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
    $cadena = utf8_decode($cadena);&lt;br /&gt;
    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);&lt;br /&gt;
    $cadena = strtoupper($cadena);&lt;br /&gt;
    return utf8_encode($cadena);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 //$cadena = strtr(utf8_decode($cadena), utf8_decode($originales), $modificadas);   //Altra solució&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipus de Dades en PHP ==&lt;br /&gt;
&lt;br /&gt;
*'''Boolean'''&lt;br /&gt;
És un tipus de dades molt simple que pot representar un valor cert (TRUE) o fals (FALSE). Aquest tipus de dades s’utilitza molt en estructures de control. Si feu conversió de dades és molt important que tingueu en&lt;br /&gt;
compte que es considerarà fals el nombre enter, la cadena 0 o una cadena buida, una matriu buida, un objecte sense variables, el tipus NULL i els objectes SimpleXML que s’hagin creat d’etiquetes buides.&lt;br /&gt;
&lt;br /&gt;
*'''Integer'''&lt;br /&gt;
Aquest tipus representa nombres no fraccionables per sota de la unitat. Poden ser positius i negatius. Aquests nombres enters els podeu representar en notació decimal, hexadecimal o octal. La plataforma sobre la&lt;br /&gt;
qual treballeu determinarà la mida de les variables enteres. El PHP forçarà un canvi de tipus a flotant si es produeix un desbordament, tant si és positiu com negatiu. A continuació, es mostren dos exemples de variables enteres.&lt;br /&gt;
&lt;br /&gt;
*'''float'''&lt;br /&gt;
Aquest tipus fa referència als nombres de coma flotant, i normalment treballa amb una precisió aproximada de catorze dígits decimals. A continuació, es mostra un exemple d’una variable amb coma flotant.&lt;br /&gt;
&lt;br /&gt;
*'''String'''&lt;br /&gt;
Es tracta d’una cadena de caràcters. El llenguatge del PHP no imposa un límit a la mida d’aquestes cadenes; ara bé, no oblideu que el límit el marcarà la memòria del maquinari en què estigui funcionant el PHP. Aquí&lt;br /&gt;
teniu diversos exemples de cadenes.&lt;br /&gt;
&lt;br /&gt;
*'''array'''&lt;br /&gt;
un array és una matriu, d’una dimensió o més, que conté dades que s’associen segons unes claus. És un tipus molt útil, i comprovareu que el seu ús té una gran potència. Per crear una matriu podeu utilitzar la paraula&lt;br /&gt;
reservada ''array()'' o bé acompanyar el nom de la variable amb ''[ ]''.&lt;br /&gt;
&lt;br /&gt;
*'''object'''&lt;br /&gt;
aquest tipus d’objecte està previst en el llenguatge PHP perquè suporta el llenguatge orientat a objectes. Un objecte és un ítem amb unes característiques i funcionalitats marcades per la classe a la qual pertany. Per crear un objecte cal utilitzar la partícula ''new''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//tipus boolean:&lt;br /&gt;
$sortir=FALSE;&lt;br /&gt;
$entrar=TRUE;&lt;br /&gt;
&lt;br /&gt;
//tipus integer:&lt;br /&gt;
$positiu=3451;&lt;br /&gt;
$negatiu= − 4345&lt;br /&gt;
&lt;br /&gt;
//tipus float:&lt;br /&gt;
$amb_coma=34.5;&lt;br /&gt;
&lt;br /&gt;
//tipus string:&lt;br /&gt;
$nom=’Wayan’;&lt;br /&gt;
$salutacio=&amp;quot;Hola $nom!&amp;quot;;&lt;br /&gt;
echo $salutacio.&amp;quot; Benvingut&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus array:&lt;br /&gt;
$grau_cicles=array(&amp;quot;superior&amp;quot;,&amp;quot;mitja&amp;quot;);&lt;br /&gt;
$families[]=&amp;quot;Informàtica&amp;quot;;&lt;br /&gt;
$families[]=&amp;quot;Electrònica&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus objecte:&lt;br /&gt;
class Alumne {&lt;br /&gt;
public function matricular($nom)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Ja estàs matriculat $nom&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$alumne1=new Alumne();&lt;br /&gt;
$alumne1−&amp;gt;matricular(’Made’);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Creació Classes/ OBJECTES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Coche&lt;br /&gt;
{&lt;br /&gt;
	static $numruedas = 4;&lt;br /&gt;
	var $color;&lt;br /&gt;
	var $posx;&lt;br /&gt;
	var $posy;&lt;br /&gt;
	var $velocidad;&lt;br /&gt;
	function __construct($color, $posx, $posy)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;color = $color;&lt;br /&gt;
		$this-&amp;gt;posx = $posx;&lt;br /&gt;
		$this-&amp;gt;posy = $posy;&lt;br /&gt;
		$this-&amp;gt;velocidad = 0;&lt;br /&gt;
	}&lt;br /&gt;
	function mover($x, $y)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;posx = $x;&lt;br /&gt;
		$this-&amp;gt;posy = $y;&lt;br /&gt;
	}&lt;br /&gt;
	function acelerar()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;velocidad = $this-&amp;gt;velocidad + 10;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
	function frenar()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;velocidad &amp;gt; 10)&lt;br /&gt;
			$this-&amp;gt;velocidad = $this-&amp;gt;velocidad - 10;&lt;br /&gt;
		else&lt;br /&gt;
			$this-&amp;gt;velocidad = 0;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$car = new Coche(&amp;quot;verde&amp;quot;,10,10);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les dades especials ===&lt;br /&gt;
*'''resource'''&lt;br /&gt;
La variable que pertany a aquest tipus farà referència a un recurs extern. Determinades funcions faran ús d’aquest recurs. Per exemple, la funció mysql_db_query, que té la funció d’enviar una petició mySQL, retorna un tipus resource. En l’exemple següent la variable $resultat és de tipus resource:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query=&amp;quot;SELECT * FROM alumnes&amp;quot;;&lt;br /&gt;
$resultat=mysql_query($query);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''NULL'''&lt;br /&gt;
Quan necessiteu una variable que no tingui cap valor haureu d’utilitzar aquest tipus.&lt;br /&gt;
&lt;br /&gt;
===Els pseudotipus===&lt;br /&gt;
* '''mixed''': aquest pseudotipus indica que la variable en questió pot emmagatzemar múltiples tipus.&lt;br /&gt;
* '''number''': indica que la variable pot contenir un valor enter o de coma flotant.&lt;br /&gt;
* '''callback''': utilitzareu aquest pseudotipus per emmagatzemar crides de retorn generades per funcions de l’usuari.&lt;br /&gt;
&lt;br /&gt;
=== Conversions de tipus ===&lt;br /&gt;
&lt;br /&gt;
Per forçar un canvi de tipus haureu d’especificar entre parèntesis el tipus al qual voleu fer la conversió i col·locar-lo davant la variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Senténcia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Modelat a &lt;br /&gt;
|-&lt;br /&gt;
| (integer), (int) ||integer.&lt;br /&gt;
|-&lt;br /&gt;
| (boolean)||boolean&lt;br /&gt;
|-&lt;br /&gt;
| (float), (double), (real) ||float&lt;br /&gt;
|-&lt;br /&gt;
| (string) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (binary) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (array)||array&lt;br /&gt;
|-&lt;br /&gt;
| (object)|| object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Sense modelar 27/5: &amp;quot;.(27/5).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;I ara ja modelat: &amp;quot;.(integer)(27/5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants===&lt;br /&gt;
Una constant és un identificador (nom) per expressar un valor simple. Com el nom suggereix, aquest valor no pot variar durant l'execució del script. (A excepció de les [[http://php.net/manual/es/language.constants.predefined.php constants màgiques]], que en realitat no són constants). Una constant és sensible a majúscules per defecte. Per convenció, els identificadors de constants sempre solen declarar-se en majúscules.&lt;br /&gt;
&lt;br /&gt;
El nom d'una constant segueix les mateixes regles que qualsevol altra etiqueta de PHP. Un nom de constant vàlid comença per una lletra o subguió, seguit per qualsevol nombre o lletres, nombres o subguions. Usant una expressió regular, es representaria de la següent manera: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('MIN_VALUE', '0.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
define('MAX_VALUE', '1.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
echo MIN_VALUE;&lt;br /&gt;
//const MIN_VALUE = 0.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
//const MAX_VALUE = 1.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
class Exemple1&lt;br /&gt;
{&lt;br /&gt;
  //define('MIN_VALUE', '0.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
  //define('MAX_VALUE', '1.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  const MIN_VALUE = 0.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
  const MAX_VALUE = 1.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  public static function getMinValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MIN_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static function getMaxValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MAX_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo Exemple1::getMinValue();   //invocamos clase &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Cuál es la diferencia entre $this y self:: ?'''&lt;br /&gt;
&lt;br /&gt;
Uno usa $this para referenciar al objeto actual, y se utiliza self:: para referenciar la clase actual. Se utiliza $this-&amp;gt;nombre para nombres no estáticos y se utiliza self::nombres para nombres estáticos.&lt;br /&gt;
&lt;br /&gt;
=== Variables predefinides ===&lt;br /&gt;
&lt;br /&gt;
En PHP hi ha una sèrie de variables predefinides que resulten de gran ajuda per al programador. Dins d’aquestes variables predefinides cal destacar un gran grup, el grup de les anomenades superglobals.&lt;br /&gt;
&lt;br /&gt;
Les variables '''superglobals''' són variables que sempre estan disponibles en tots els àmbits.&lt;br /&gt;
&lt;br /&gt;
*'''$GLOBALS''':fa referència a totes les variables disponibles en l’àmbit global. Es tracta d’una variable de tipus matriu associativa.&lt;br /&gt;
En l’exemple següent es recorre la variable superglobal $GLOBALS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$una_variable=&amp;quot;Hola&amp;quot;;&lt;br /&gt;
$una_altra_variable=&amp;quot;Com va?&amp;quot;;&lt;br /&gt;
foreach ($GLOBALS as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;GLOBALS[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_SERVER''':ofereix informació molt últil sobre el servidor i l’entorn d’execució. Els valors que emmagatzema són generats pel navegador web.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*Executeu-lo i veureu un seguit de dades&lt;br /&gt;
referents a la màquina que fa de servidor del PHP. Entre altres coses, identificareu&lt;br /&gt;
el nom de la màquina, la versió del navegador, la versió del servidor web, la&lt;br /&gt;
ubicació de fitxers importants i un llarg etcètera.*/&lt;br /&gt;
&lt;br /&gt;
foreach ($_SERVER as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;SERVER[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_GET''': correspon a la variable GET del protocol HTTP. Emmagatzema els valors de les variables que es trasmeten per mitjà del protocol HTTP mitjançant el mètode GET. El seu ús és molt normal en formularis.&lt;br /&gt;
&lt;br /&gt;
*'''$_POST''': correspon a la variable POST del protocol HTTP. Emmagatzema els valors de les variables que es transmeten per mitjà del protocol HTTP mitjançant el mètode POST. El seu ús és, generalment, més adequat que el mètode GET per a temes de seguretat.&lt;br /&gt;
&lt;br /&gt;
*'''$_COOKIE''': és una variable de tipus matriu associativa que emmagatzemarà les variables passades a l’script per mitjà de les galetes de l’HTML.&lt;br /&gt;
&lt;br /&gt;
*'''$_REQUEST''': és una matriu associativa que conté les dades de $_GET ,$_POST i $_COOKIE.&lt;br /&gt;
&lt;br /&gt;
*'''$_FILES''': aquesta variable s’utilitza en la càrrega de fitxers per mitjà del protocol HTTP. El mètode utilitzat és el POST.&lt;br /&gt;
&lt;br /&gt;
*'''$_SESSION''': conté les variables de sessió disponibles en l’script actual.&lt;br /&gt;
&lt;br /&gt;
*'''$_ENV''': conté les variables d’entorn.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Detecció del Navegador ===&lt;br /&gt;
Escriu un script en PHP que detecti el navegador que està utilitzant el client que ha demanat la pàgina.&lt;br /&gt;
&lt;br /&gt;
[[:solució_detecció_navegador_php]]&lt;br /&gt;
&lt;br /&gt;
=== Variables estàtiques ===&lt;br /&gt;
Les variables estàtiques sempre mantenen el valor encara que el programa abandoni l’àmbit de la variable, i existeixen només en l’àmbit local de les funcions. No s’hi pot accedir fora d’aquest àmbit.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function comptador()&lt;br /&gt;
{&lt;br /&gt;
   $a = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador: &amp;quot;.$a.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $a++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function comptadorEstatic()&lt;br /&gt;
{&lt;br /&gt;
   static $b = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador estàtic: &amp;quot;.$b.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $b++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for($i=0;$i&amp;lt;3;$i++)&lt;br /&gt;
{&lt;br /&gt;
   comptador();&lt;br /&gt;
   comptadorEstatic();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integració PHP ==&lt;br /&gt;
&lt;br /&gt;
Normalment trobareu el llenguatge de programació PHP dins d’altres llenguatges.&lt;br /&gt;
El més usual és escriure codi en PHP dins de codi HTML.&lt;br /&gt;
&lt;br /&gt;
Heu de recordar que el codi PHP és interpretat pel servidor, i els resultats es mostren en el navegador que utilitzeu. La simbiosi que es crea entre el PHP i l’HTML permet al PHP generar HTML i a l’HTML passar dades al PHP.&lt;br /&gt;
&lt;br /&gt;
=== PHP dintre de PHP ===&lt;br /&gt;
&lt;br /&gt;
==== Include vs Require ====&lt;br /&gt;
És possible inserir el contingut d'un fitxer PHP en un altre arxiu PHP (abans que el servidor l'executi), amb la declaració d'incloure o requerir. Les sentències d'inclusió i requereixen són idèntics , excepte en cas de fallada :&lt;br /&gt;
&lt;br /&gt;
*'''requerir''' (require) produirà un error fatal ( E_COMPILE_ERROR ) i aturar la seqüència de comandaments&lt;br /&gt;
*'''inclou''' (include) només produirà una advertència ( E_WARNING ) i el guió seguirà&lt;br /&gt;
&lt;br /&gt;
Per tant, si voleu que l'execució continuï mostrant als usuaris la sortida, fins i tot si el fitxer d'inclusió falta, utilitzeu la instrucció d'inclusió. Altrament, en cas de FrameWork, CMS, o amb aplicacions PHP complexes, sempre utilitzeu la instrucció que requereix el fitxer per a poder continuar l'execució. Això ajudarà a evitar posar en perill la seguretat i la integritat de l'aplicació, per si de cas un arxiu clau falta accidentalment.&lt;br /&gt;
&lt;br /&gt;
Inclusió d'arxius estalvia molta feina. Això significa que pots crear una capçalera, peu de pàgina o arxiu de menú estàndard per a totes les pàgines web. Llavors, quan la capçalera ha de ser actualitzada, només s'ha d'actualitzar la capçalera inclouen l'arxiu.&lt;br /&gt;
&lt;br /&gt;
'''Sintaxi'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include 'filename.php';&lt;br /&gt;
&lt;br /&gt;
//or&lt;br /&gt;
&lt;br /&gt;
require 'Otherfilename.php';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Include_once vs Require_once ====&lt;br /&gt;
Require_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a require.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Include_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a include.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redireccions ====&lt;br /&gt;
* Son sentencies on s'envia al navegador una nova pàgina. La pàgina que tenia el navegador desapareix i apareix una nova pàgina, la que està definida al location: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
header(&amp;quot;location: novapàgina.php&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici PHP amb cap i peus ===&lt;br /&gt;
&lt;br /&gt;
L’objectiu d’aquesta activitat és mostrar el funcionament de la inclusió d’arxius a PHP. Fer servir includes us permet simplificar el codi de les pàgines. Per exemple, podeu afegir un fitxer de capçalera (cap.php) i un de peu (peu.php) amb els continguts comuns de totes les pàgines del vostre lloc (el bàner, el menú, la informació general). Senzillament incloent aquests fitxers a totes les pàgines, podeu aconseguir una estètica comú. Si heu de canviar en algun moment la capçalera, modificant l’arxiu cap.php ho tindreu modificat a totes les pàgines del web.&lt;br /&gt;
Feu una pàgina web amb continguts estructurats amb dos fitxers: cap.php i peu.php&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
[[:solucio_cap_peus_php]]&lt;br /&gt;
&lt;br /&gt;
[[:solucio_cap_peus_php2]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP i Formularis HTML ===&lt;br /&gt;
El formulari electrònic és una eina molt potent fortament establida a Internet. Permet l’intercanvi o la introducció de dades entre usuaris d’una manera ràpida i senzilla. Un formulari permet la interactivitat i és el detonant que converteix Internet en l’eina més poderosa per enviar informació a un destinatari.&lt;br /&gt;
&lt;br /&gt;
El llenguatge PHP representa un salt qualitatiu enorme en l’ús de formularis. L’HTML no és un llenguatge creat pensant a utilitzar formularis, sinó que es va crear amb altres objectius. El llenguatge PHP té un gran potencial en la gestió de dades; per tant, quan HTML i PHP treballen juntament amb formularis ens trobem amb un binomi ideal.&lt;br /&gt;
&lt;br /&gt;
====Preparació de l’HTML====&lt;br /&gt;
El llenguatge HTML mostrarà la façana que l’usuari veurà a la pantalla del navegador. El PHP serà darrere d’aquesta primera pantalla i treballarà amb les dades.&lt;br /&gt;
El primer que cal programar per fer servir un formulari dissenyat en PHP és crear&lt;br /&gt;
el codi HTML. Un formulari en HTML s’emmarca entre les etiquetes &amp;lt;FORM&amp;gt; i &amp;lt;/FORM&amp;gt;. Per manipular aquest formulari s’utilitza l’atribut ''ACTION''.&lt;br /&gt;
L’atribut ''ACTION'' indica el programa que s’encarrega de manipular les dades, tasca que encomanareu a un codi dissenyat en llenguatge PHP.&lt;br /&gt;
L’etiqueta &amp;lt;form&amp;gt; us permet fer servir dos mètodes per enviar informació: '''GET''' i '''POST'''.&lt;br /&gt;
El mètode '''GET''' és molt útil en motors de cerca, però no ofereix gaire seguretat, ja que les dades que envia es poden veure en l’URL del navegador.&lt;br /&gt;
El mètode '''POST''' és molt més segur, ja que quan el servidor detecta que el mètode de transacció d’informació és '''POST''' espera rebre dades immediatament sense fer servir l’URL, la qual cosa implica que aquestes dades no seran visibles en l’URL.&lt;br /&gt;
Exemple de Formulari:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;El nostre primer exemple amb formularis&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Introdueix el teu nom i prem el botó!&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;FORM ACTION=&amp;quot;contesta.php&amp;quot; METHOD=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Si us plau, escriu el teu nom:&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;INPUT TYPE=&amp;quot;submit&amp;quot; VALUE=&amp;quot;Enviar&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/FORM&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Com valora el PHP un formulari ====&lt;br /&gt;
En el moment d’enviar les dades des del formulari d’una pàgina HTML a un fitxer escrit en PHP s’ha de tenir en compte que l’atribut ''NAME'' emmagatzema el valor.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Resposta a la petició de dades&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;...Continuem amb l’exemple!&amp;lt;/H1&amp;gt;&lt;br /&gt;
El teu nom és:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_POST['nom'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En el moment en què s’envien dades del formulari HTML cap a un fitxer PHP, aquestes dades apareixeran dins d’un array superglobal amb tots els seus valors.&lt;br /&gt;
&lt;br /&gt;
=== Exercici Mini Calculadora ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar una calculadora de sólo SUMA, para ello tendremos dos inputs y un botón, cuando se aprete el botón deberá enviar enviar el formulario al server haciendo la operación y mostrándola.&lt;br /&gt;
 &lt;br /&gt;
=== Exercici Formulari amb Vectors ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar un formulario en el servidor que genere 10 inputs y un botón, a continuación el servidor recogerá todos los datos los mostrará y calculará la suma total. &lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
:[[solu_vector_input]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Les matrius associatives i els formularis====&lt;br /&gt;
Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu ús, però, serà condicionat pel mètode utilitzat en el pas de dades en el codi HTML. Així, si en el codi HTMLel mètode és '''POST''' haureu de fer servir la matriu associativa '''$_POST'''; en canvi, si heu fet servir el mètode '''GET''' en el codi HTML, haureu de fer servir la matriu associativa '''$_GET'''.&lt;br /&gt;
&lt;br /&gt;
Per accedir als valors emmagatzemats en les matrius associatives fareu servir l’atribut corresponent '''NAME''' de l’HTML com a índex de la matriu associativa. &lt;br /&gt;
&lt;br /&gt;
No heu d’oblidar que el PHP és un llenguatge de programació que, entre altres coses, us permet utilitzar bucles. En el formulari següent es defineix una selecció múltiple, en què podreu marcar els navegadors que coneixeu.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Un exemple amb un formulari&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;seleccioMultiple.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Nom: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Correu electrònic: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Navegadors que coneixes: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;select name=&amp;quot;navegadors[]&amp;quot; multiple&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Chrome&amp;quot;&amp;gt;Chrome&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;MozillaFirefox&amp;quot;&amp;gt;Mozilla Firefox&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Safari&amp;quot;&amp;gt;Safari&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Opera&amp;quot;&amp;gt;Opera&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Lynx&amp;quot;&amp;gt;Lynx&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquí us trobareu amb un petit problema. Per recuperar els valors introduïts com a nom i correu electrònic no hi ha cap problema, la matriu $_POST us permetrà un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecció múltiple, però, sorgeix un petit problema. A diferència dels casos anteriors, ara navegadors pot contenir més d’un valor, com ho fareu per mostrar tots els valors per pantalla? La solució és utilitzar un bucle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach ($_POST['navegadors'] as $opcio)&lt;br /&gt;
echo $opcio.&amp;quot;\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un altre exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ($_POST) {&lt;br /&gt;
    echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
    //echo htmlspecialchars(print_r($_POST, true));&lt;br /&gt;
    print_r($_POST);&lt;br /&gt;
    print_r($_POST['personal']);&lt;br /&gt;
    print_r($_POST['personal']['nombre']);&lt;br /&gt;
    echo '&amp;lt;/pre&amp;gt;';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
    Nombre:  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[nombre]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Email:   &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[email]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Cerveza: &amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;select multiple name=&amp;quot;cerveza[]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;warthog&amp;quot;&amp;gt;Warthog&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;guinness&amp;quot;&amp;gt;Guinness&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;stuttgarter&amp;quot;&amp;gt;Stuttgarter Schwabenbräu&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;¡enviarme!&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode GET ===&lt;br /&gt;
*El mètode GET produeix una cadena llarga que apareix en els logs del servidor i a la URL del navegador.&lt;br /&gt;
&lt;br /&gt;
*GET envia les dades usant la URL&lt;br /&gt;
&lt;br /&gt;
*El mètode GET es limita a enviar fins a només 1.024 caràcters .&lt;br /&gt;
&lt;br /&gt;
*Mai utilitzeu el mètode GET, si voleu enviar la contrasenya o una altra informació confidencial al servidor .&lt;br /&gt;
&lt;br /&gt;
*GET no pot ser utilitzat per enviar dades binàries, com imatges o documents de text, al servidor .&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode GET es pot accedir mitjançant la variable d'entorn QUERY_STRING.&lt;br /&gt;
&lt;br /&gt;
*PHP proveeix la matriu associativa $_GET per accedeix a tota la informació que s'enviï mitjançant el mètode GET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$PHP_SELF = $_SERVER['PHP_SELF'];&lt;br /&gt;
echo $PHP_SELF ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if( isset($_GET[&amp;quot;name&amp;quot;])||  isset($_GET[&amp;quot;age&amp;quot;]) )&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_GET['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_GET['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt; method=&amp;quot;GET&amp;quot;&amp;gt;&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode POST ===&lt;br /&gt;
&lt;br /&gt;
*POST envía los datos de forma que no podemos verlos (en un segundo plano u &amp;quot;ocultos&amp;quot; al usuario).&lt;br /&gt;
&lt;br /&gt;
*El mètode POST no té cap restricció en la mida de les dades a enviar.&lt;br /&gt;
&lt;br /&gt;
*El mètode POST es pot utilitzar per enviar ASCII, així com dades binàries.&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode POST passa per la capçalera HTTP. La seguretat depèn de protocol HTTP. Mitjançant l'ús d'HTTP segur pots assegurar-te que la seva informació està segura .&lt;br /&gt;
&lt;br /&gt;
*El PHP proveeix de la matriu associativa $ _POST per accedeix a tota la informació enviada pel mètode POST.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(isset($_POST[&amp;quot;name&amp;quot;]) ||  isset($_POST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_POST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_POST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;   &amp;lt;!--&amp;lt;?php $_PHP_SELF ?&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== $_PHP_SELF ===&lt;br /&gt;
La variable $_PHP_SELF conté el nom del script PHP (pàgina php) el qual està executant.  ESTÁ DESFASADO USAR $_SERVER['PHP_SELF']&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(  isset($_REQUEST[&amp;quot;name&amp;quot;]) ||  isset($_REQUEST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_REQUEST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_REQUEST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo formulario POST ===&lt;br /&gt;
&lt;br /&gt;
Dissenyar una pàgina web simple amb php que demani a lusuari el preu de tres productes diferents en tres&lt;br /&gt;
establiments diferents. Exemple:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Form1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Un cop s'introdueixi aquesta&lt;br /&gt;
informació al formulari, s'ha de mostrar el resultat, dels tres preus introduïts i el preu mitjà del producte.&lt;br /&gt;
&lt;br /&gt;
  DATOS RECIBIDOS&lt;br /&gt;
  Precio Guitarra Martin D18 en Ubisa: 4.200 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Thomann 3.800 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Alfasonic 4.100 euros&lt;br /&gt;
&lt;br /&gt;
  El precio medio del producto es de 4.0333333333333 euros&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;PHP Calcula precios&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;form name=&amp;quot;formularioDatos&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;01-Formulari.php&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt; CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Ubisa, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Thomann, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio2&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Alfasoni, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio3&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;input value=&amp;quot;Calcular&amp;quot; type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
01-Formulari.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php //Ejemplo aprenderaprogramar.com&lt;br /&gt;
$precio1 = $_POST['precio1'];&lt;br /&gt;
$precio2 = $_POST['precio2'];&lt;br /&gt;
$precio3 = $_POST['precio3'];&lt;br /&gt;
$media = ($precio1+$precio2+$precio3)/3;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; DATOS RECIBIDOS&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Ubisa: &amp;quot;. $precio1. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Thomann &amp;quot;. $precio2. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Alfasonic &amp;quot;. $precio3. &amp;quot; euros &amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; El precio medio del producto es de &amp;quot;. $media. &amp;quot; euros&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Acceso a Ficheros ===&lt;br /&gt;
&lt;br /&gt;
'''Abrir y cerrar el descriptor de ficheros'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $fitxer = fopen(&amp;quot;datos.txt&amp;quot;,&amp;quot;a&amp;quot;);&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'r' 	Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero. &lt;br /&gt;
'w+' 	Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear. &lt;br /&gt;
'a+' 	Apertura para lectura y escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() no tiene efecto, las escrituras siempre son pospuestas. &lt;br /&gt;
&lt;br /&gt;
'''Escribir datos en un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  $fp = fopen('datos.txt', 'a');&lt;br /&gt;
    fwrite($fp, 'Julio');&lt;br /&gt;
    fwrite($fp, 'Noguera');&lt;br /&gt;
    fclose($fp);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Leer datos de un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 $fitxer=fopen(&amp;quot;datos.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while(!feof($fitxer)){&lt;br /&gt;
       $line = fgets($fitxer);&lt;br /&gt;
       echo $line;&lt;br /&gt;
    }&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más info&lt;br /&gt;
http://www.php.net/manual/es/function.fopen.php&lt;br /&gt;
http://www.php.net/manual/es/function.fgets.php&lt;br /&gt;
http://www.php.net/manual/es/function.fwrite.php&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Formulari Insti // Acceso a ficheros ===&lt;br /&gt;
&lt;br /&gt;
Se desea crear un formulario donde se introduzcan los campos de nombre, apellidos, dni, contraseña, cuando se clique el botón de enviar, el servidor debe recibir todos los parámetros de ese usuario y escribirlos en un fichero de texto (fopen/fwrite), el siguiente usuario que rellene el formulario escribirá a continuación, después debe listar todos los ficheros que tiene el servidor (system()/shell_exec).&lt;br /&gt;
&lt;br /&gt;
solució: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
if ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;) { &lt;br /&gt;
&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    $nombre = $_POST['nombre'];  //recibe los parámetros del formulario&lt;br /&gt;
    $apellido = $_POST['apellido'];&lt;br /&gt;
    $dni = $_POST['dni'];&lt;br /&gt;
    $pass = $_POST['pass'];&lt;br /&gt;
&lt;br /&gt;
    $file = fopen(&amp;quot;clase.txt&amp;quot;, &amp;quot;a&amp;quot;);    //crea un descriptor de fichero&lt;br /&gt;
    fwrite($file, ($nombre) . &amp;quot;,&amp;quot; . ($apellido) . &amp;quot;,&amp;quot; . ($dni) . &amp;quot;,&amp;quot; . ($pass) . &amp;quot;\n&amp;quot;);  //introduce datos dentro del fichero&lt;br /&gt;
    fclose($file);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    $usuarioEnSistema = system('cat clase.txt');     //ejecuta terminal linux&lt;br /&gt;
   //$usuario = shell_exec('cat clase.txt'');   // comando más antiguo&lt;br /&gt;
&lt;br /&gt;
    echo $usuarioEnSistema;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nombre&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;apellido&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dni&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;pass&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Exercici: Calculadora PHP ===&lt;br /&gt;
Crea un formulari amb un únic TextBox on s'indiqui les operacions matemàtiques a realitzar. Envia el contingut del TextBox amb el mètode POST i realitza les operacions. Imprimeix per pantalla el resultat.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Solucio_calculadora_m6]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ISSET ===&lt;br /&gt;
&lt;br /&gt;
isset -&amp;gt; Devuelve '''true''' si la variable existe y tiene un valor distinto de null, false de lo contrario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var_dump( isset($var) );   //isset() devuelve '''false''' por que $var no ha sido definida&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''false''' aunque la variable haya sido declarada pues su valor es NULL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var = &amp;quot;&amp;quot;;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''true'''. El valor ya no es nulo aunque esté vacío&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Y cuando deberías usar isset()?'''&lt;br /&gt;
&lt;br /&gt;
Siempre y cuando que quieras comprobar que la variable existe (variable inicializada), un ejemplo bueno sería si quieres saber si se ha mandado un formulario:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;campo1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if (isset($_POST['submit']) {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''isset(), is_null() y empty(): Diferencias y ejemplos de uso'''&lt;br /&gt;
&lt;br /&gt;
https://cybmeta.com/isset-is_null-y-empty-diferencias-y-ejemplos-de-uso&lt;br /&gt;
&lt;br /&gt;
https://es.stackoverflow.com/questions/32133/como-y-cuando-se-usan-isset-y-empty-correctamente&lt;br /&gt;
&lt;br /&gt;
=== Exercici enviament de dades ===&lt;br /&gt;
És popular el disseny d’un document web, en què el mateix document conté la part del formulari HTML i el codi PHP que agafa les dades i les processa. Aquest procediment pot resultar estrany en principi, ja que esteu esperant dos documents ben diferenciats. Així i tot val la pena que veieu aquesta forma de treballar i decidiu si us resulta útil o no. Per fer-ho, simplement heu de fusionar els dos documents (el que envia les dades i el que les rep) en un document únic HTML+PHP de dues parts amb la següent estructura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(primera vegada que s'entra al document)&lt;br /&gt;
{&lt;br /&gt;
crear formulari HTML i enviar-ho al propi document&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
rebre les dades a través de POST o GET&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Feu un document amb aquestes característiques que enviï les següents dades:&lt;br /&gt;
*nom&lt;br /&gt;
*cognom&lt;br /&gt;
*contrasenya&lt;br /&gt;
*si l’usuari és alumne o professor&lt;br /&gt;
*si l’usuari és actiu o no&lt;br /&gt;
*foto (únicament el nom del fitxer)&lt;br /&gt;
*edat (entre 18 i 99)&lt;br /&gt;
*comentaris&lt;br /&gt;
*un camp ocult amb el nom ocult i valor prova&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[:solucio_enviament_dades_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Galetes ===&lt;br /&gt;
Les galetes són uns fitxers de text que emmagatzemen informació a l’ordinador client referent a la visita d’un usuari a una pàgina web.&lt;br /&gt;
Les galetes no són un acte d’intromissió per part de la pàgina web visitada; simplement, són una font d’informació molt útil per augmentar l’eficiència en l’accés.&lt;br /&gt;
Les galetes tenen una mida màxima d’1K i caduquen, la qual cosa fa molt difícil que s’utilitzin amb fins malintencionats. A més, únicament pot consultar la galeta el web que l’ha dipositada, la informació que conté no és visible per a la resta de pàgines web.&lt;br /&gt;
&lt;br /&gt;
Un ús molt freqüent de les galetes és emmagatzemar un perfil d’usuari. Així s’aconsegueix que cada vegada que el mateix usuari accedeix a un web, aquest en conegui les preferències i li mostri directament els continguts més adequats.&lt;br /&gt;
&lt;br /&gt;
Les galetes ajuden els programadors a crear un entorn més adequat per a l’usuari visitant. Moltes pàgines web permeten canviar la mida del text, els colors de la pàgina, la disposició d’alguns continguts, etc. Una vegada l’usuari ha modificat al seu gust l’aspecte de la pàgina web, aquestes dades s’emmagatzemen per a la propera visita.&lt;br /&gt;
&lt;br /&gt;
Importante: las cookies se envían al cliente mediante encabezados HTTP. Como cualquier otro encabezado, las cookies se deben enviar antes que cualquier salida que genere la página (antes que &amp;lt;html&amp;gt;, &amp;lt;head&amp;gt; o un simple espacio en blanco). &lt;br /&gt;
&lt;br /&gt;
'''Funcions del PHP per treballar amb galetes'''&lt;br /&gt;
&lt;br /&gt;
La funció que s’utilitza en PHP per crear galetes és setcookie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
bool setcookie(string $nom [, string $valor [, int $caduca= 0[, string $ruta [, string $domini [, bool $seguretat= false [, bool $nomeshttp=false]]]]]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* $nom: és obligatori i indica el nom que donareu a la galeta, la resta de paràmetres són opcionals.&lt;br /&gt;
* $valor: és el valor que tindrà la galeta.&lt;br /&gt;
* $caduca: indica els segons que té de vida la galeta; si no s’indica res la galeta deixarà d’existir quan finalitzi la sessió de l’usuari.&lt;br /&gt;
* $ruta: indica on podeu trobar la galeta dins el servidor.&lt;br /&gt;
Si no ponemos la ruta (Path), la cookie sólo se puede usar en páginas que se encuentren en el mismo directorio que la página que la creó. Si queremos que se utilice en un directorio en concreto debemos añadir la ruta.&lt;br /&gt;
&lt;br /&gt;
//Cookie creada en el directorio /registro/login&lt;br /&gt;
&lt;br /&gt;
//Si queremos que las páginas del directorio raíz / puedan acceder a la cookie&lt;br /&gt;
&lt;br /&gt;
* $domini: marca el domini en què la galeta està disponible.&lt;br /&gt;
* $seguretat: tindrà el valor TRUE si voleu que la galeta només s’utilitzi en una connexió segura (conexió HTTPs), i FALSE (que és el valor per defecte), si no és necessari un cert grau de seguretat.&lt;br /&gt;
* $nomeshttp: si té per valor TRUE marcarà que la galeta solament és accessible si s’utilitza el protocol HTTP.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
setcookie(&amp;quot;nom&amp;quot;, &amp;quot;Maadiva&amp;quot;, 3600, &amp;quot;/&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El segon fitxer s’encarregarà de consultar a la matriu associativa '''$_COOKIE''' el valor de la galeta indicada, que en aquest cas seria nom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_COOKIE[&amp;quot;nom&amp;quot;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
setcookie(&amp;quot;valor&amp;quot;, 1, time() + 30);    //time() tiempo desde que se originó unix.&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);    //no muestra todas las cookies por temas de seguridad&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unset($_COOKIE[&amp;quot;valor&amp;quot;]);  //otra forma setcookie('valor', 1, expire);  // setcookie(&amp;quot;valor&amp;quot;, 1, time() - 30);&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Se desea que cuente el número de visitas que realiza un usuario al visitar la página; este contador conserva su valor durante un año aún a pesar de que un usuario cierre el navegador y tarde días en volver a visitar la página.&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_contador_galletas]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Les cookies us permeten desar informació al navegador que estarà disponible més endavant pel vostre web. Per exemple, podeu desar la configuració personal de l’usuari o la llengua en què ha escollit visitar el web. La propera vegada que l’usuari visiti el web, el vostre codi PHP podrà obtenir aquesta informació desada i presentar a l’usuari el web amb la seva configuració personal o la llengua escollida. És important destacar que les cookies queden desades al navegador de l’usuari i no al servidor web.&lt;br /&gt;
&lt;br /&gt;
Feu un web amb dos fitxers. El primer, index.php, s’encarregarà d’obtenir el nom de l’usuari i la llengua que vol fer servir per defecte entre una llista desplegable mitjançant un formulari. Enviarà aquestes dades a un altre fitxer, cookie.php, que desarà la informació a les cookies.&lt;br /&gt;
La propera vegada que l’usuari accedeixi a index.php el formulari estarà emplenat amb la informació desada la vegada anterior que va accedir-hi.&lt;br /&gt;
&lt;br /&gt;
sol&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[:solucio_galetes_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sessió ===&lt;br /&gt;
&lt;br /&gt;
Les variables de sessió són variables que estan disponibles en múltiples pàgines sense haver de fer servir pas de paràmetres. Les variables de sessió tenen un temps de vida limitat i s’emmagatzemen en el servidor.&lt;br /&gt;
&lt;br /&gt;
Podeu fer servir les variables de sessió per mantenir informació (l’anomenada informació de sessió) entre diferents pàgines. Per exemple,&lt;br /&gt;
el nom d’usuari o una selecció de productes que ja s’hagi fet.&lt;br /&gt;
&lt;br /&gt;
A continuació, estudiareu un exemple format per tres fitxers. El primer fitxer és un formulari senzill que demana a l’usuari un identificador i una contrasenya. Aquestes dades s’envien a un segon fitxer, anomenat exempleAutenticar.php, que crea les variables de sessió. Finalment, trobareu un tercer fitxer anomenat continuem.php, que recupera la informació emmagatzemada en les variables de sessió.&lt;br /&gt;
&lt;br /&gt;
Just a sota d’aquest text hi ha el fitxer del qual partireu. L’hem anomena exempleSessions.php, però el podeu anomenar d’una altra manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Exemple amb variables de sessió&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
&amp;lt;form action=&amp;quot;exempleAutenticar.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
Escriu el teu nom:&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;usuari&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Escriu la teva contrasenya:&lt;br /&gt;
&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;contrasenya&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia!&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tot seguit apareix el codi del fitxer exempleAutenticar.php. En aquest fitxer creareu i inicialitzareu les dues variables de sessió que utilitzareu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION['id_usuari']=$_REQUEST['usuari'];&lt;br /&gt;
$_SESSION['clau_acces']=$_REQUEST['contrasenya'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...continueu amb l’exemple de variables de sessió...&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
Ja s’han emmagatzemat les variables de sessió.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;continuem.php&amp;quot;&amp;gt;Vinga! Cap al final de l’exemple!&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixeu-vos que el primer que es fa és cridar la funció '''session_start()'''. És obligatori que inicieu la sessió abans de cap etiqueta HTML perquè tot funcioni correctament.&lt;br /&gt;
Amb $_REQUEST es recuperen els dos valors que s’han passat des del fitxer inicial, és a dir, usuari i contrasenya, i els heu d’emmagatzemar en dues variables de sessió creades a $_SESSION, que rebran el nom d’id_usuari i clau_acces.&lt;br /&gt;
$_REQUEST és un array associatiu global que per defecte té els continguts de $_GET, $_POST i $_COOKIE.&lt;br /&gt;
A part de crear les variables de sessió i donar-los valors trobareu un enllaç cap al tercer fitxer.&lt;br /&gt;
El codi del tercer fitxer, continuem.php, el teniu a continuació:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com que esteu treballant amb sessions, el primer que hauríeu de fer és llançar la sessió amb session_start(). A continuació, es recuperen els valors emmagatzemats en les dues variables de sessió.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eliminar sesión&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
unset($_SESSION['id_usuari']); // will delete just the name data&lt;br /&gt;
&lt;br /&gt;
//session_destroy(); // borrará todos los datos asociados a ese usuario. También $_SESSION = array(); &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index3.php&amp;quot;&amp;gt;Destruir Variables de sesion&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les sessions us permeten emmagatzemar dades que podran ser compartides entre les diferents pàgines del web. Aquestes dades, a diferència de les cookies, estan emmagatzemades al servidor i estan disponibles durant tot el temps que l’usuari està interactuant amb la pàgina (temps de sessió).&lt;br /&gt;
Alguns exemples de dades que solen guardar-se a les sessions és si l’usuari ha accedit al web mitjançant els valors usuari/contrasenya, o un carret de la compra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici Sessions ====&lt;br /&gt;
1. Feu una pàgina web que passi entre les seves pàgines el nom de l’usuari i una variable (cost) que s’anirà incrementant en 10 cada vegada que l’usuari passa entre les pàgines (podem pensar que aquesta variable representa el cost de les compres que ha fet fins ara l’usuari al web).&lt;br /&gt;
La sessió es tancarà quan l’usuari torni a la pàgina de login.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://codigosdeprogramacion.com/2016/12/20/sistema-de-usuarios-y-sesiones-en-php-y-mysql-1-login-sesiones-y-logout/&lt;br /&gt;
&lt;br /&gt;
http://velozityweb.com/blog/php/login-de-usuarios-y-creacion-de-sesiones-con-php-y-mysql/#sthash.XbMcrnTA.PSO2jYQ9.dpbs&lt;br /&gt;
&lt;br /&gt;
http://www.formacionwebonline.com/crear-sesiones-php-en-intranet/&lt;br /&gt;
&lt;br /&gt;
=== Exercici Moodle ===&lt;br /&gt;
&lt;br /&gt;
2.Se trata de la hacer un moodle, tenemos un formulario y almacenaremos una base de datos (simulada) en la que guardaremos en un archivo el usuario, contraseña y rol de un profe y un alumno. &lt;br /&gt;
Deberá de comprobar si está registrado, en caso de estarlo se crearán las cookies y variables de sesión(5 minutos para el alumnado y 10 para el profe), en caso de no acceder deberán redireccionarse al login.&lt;br /&gt;
Si se validan correctamente, deberá acceder al menu y mostrar la información si tiene rol de alumno (ROLE_ALUMNO) y otra diferente si es profesor(ROLE_ALUMNO). &lt;br /&gt;
También deberá existir un logout en caso de querer terminar la sesión. &lt;br /&gt;
$_SESSION['caduca']=time()+60; &lt;br /&gt;
&lt;br /&gt;
Solució Exercici Moodle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_moodle]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejercicio Carrito ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--http://evilnapsis.com/2016/10/30/ejemplo-de-carrito-de-compras-sencillo-con-php-y-mysql/--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici Complert ====&lt;br /&gt;
Exercici que engloba Galetes, Idioma, Login, Intranet amb Cap, Peus, Menu i contingut i Sessions.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[http://www.infomerce.es/moodle/mod/resource/view.php?id=11136 Exercici de Classe]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
=== Creació del Arbre XML ===&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xmlDoc = new DOMDocument();&lt;br /&gt;
$xmlDoc-&amp;gt;load(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
=== Obtenir un element del arbre ===&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recòrrer tots els elemens ===&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print $xmlDoc-&amp;gt;saveXML(); //imprimir toda la info&lt;br /&gt;
&lt;br /&gt;
// recorrer las etiquetas y los valores&lt;br /&gt;
$x = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
foreach ($x-&amp;gt;childNodes AS $item) {&lt;br /&gt;
  print $item-&amp;gt;nodeName . &amp;quot; = &amp;quot; . $item-&amp;gt;nodeValue . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//otra manera de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   //selecciona todas las etiquetas aula y muestra el contenido dentro de ellas&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
    echo $aula-&amp;gt;nodeName;&lt;br /&gt;
    echo $aula-&amp;gt;nodeValue, PHP_EOL;&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Otra forma de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   // otra forma de acceder&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
   echo $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)[0]-&amp;gt;nodeValue;   //equivale a -&amp;gt;item(0)&lt;br /&gt;
   echo  $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
   echo $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Afegir un nou element ===&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$auladom = $xmlDoc-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmlDoc-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmlDoc-&amp;gt;createElement(&amp;quot;XARXA_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmlDoc-&amp;gt;createElement(&amp;quot;MASK_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmlDoc-&amp;gt;createElement(&amp;quot;INIT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmlDoc-&amp;gt;createElement(&amp;quot;CURRENT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
&lt;br /&gt;
$root = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
=== Esborrar un element ===&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//borrar nodo&lt;br /&gt;
$xmlDoc = new DOMDocument;&lt;br /&gt;
$xmlDoc-&amp;gt;load('file.xml');   //cargamos fichero&lt;br /&gt;
&lt;br /&gt;
$aula = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
&lt;br /&gt;
// seleccionamos el nodo concreto 0 y lo eleminamos&lt;br /&gt;
$aulaSeleccionada = $aula-&amp;gt;getElementsByTagName('aula')-&amp;gt;item(0);&lt;br /&gt;
$aulaborrada = $aula-&amp;gt;removeChild($aulaSeleccionada);&lt;br /&gt;
&lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;); //guardamos cambios&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici crear XML'''&lt;br /&gt;
&lt;br /&gt;
Tenim un formulari i volem ficar dins del nostre xml noves dades, per tant, haurem de crear un formulari on introduirem les dades.&lt;br /&gt;
&lt;br /&gt;
= Bibliografia / Webgrafia =&lt;br /&gt;
*[http://php.net/manual/es/ Manual oficial de PHP]&lt;br /&gt;
*[http://www.codeacademy.com Introducció a PHP]&lt;br /&gt;
*David Sklar, Adam Trachtenberg, &amp;quot;PHP Cookbook, Third Edition&amp;quot;, O’Reilly Media Inc., 2014. ISBN 978-1-449-36375-8&lt;br /&gt;
*Eduard García Sacristán, Eduard Latorre Jarque, Montserrat Madridejos Mora, Raúl Velaz Mayo, &amp;quot;Llenguatges de guions de servidor&amp;quot;, IOC, 2014 &lt;br /&gt;
*[https://docs.google.com/presentation/d/1ZQgIsW4KCyIfH8NyiqH9ueanM83Ym7bjitaxyQKS0hs/edit#slide=id.i14 Llenguatges de programació del costat del servidor]&lt;br /&gt;
*[http://www.adelat.org/media/docum/nuke_publico/lenguajes_del_lado_servidor_o_cliente.html www.Adelat.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EMMAGATZEMAR I LLEGIR FITXERS ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = '{&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}'&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SERIALIZACIÓN ==&lt;br /&gt;
&lt;br /&gt;
En PHP existe una forma muy sencilla de almacenar o transmitir cualquier tipo de valor (excepto el tipo resource) en forma de una cadena seriada: la serialización.&lt;br /&gt;
&lt;br /&gt;
La serialización te permite, por ejemplo, guardar un objeto o array en una base de datos o transmitirlo entre aplicaciones remotas, para luego volver a convertirlo a su tipo y estructura original.&lt;br /&gt;
&lt;br /&gt;
Supongamos que tienes el siguiente array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arr = array(&lt;br /&gt;
  &amp;quot;fruta&amp;quot; =&amp;gt; &amp;quot;manzana&amp;quot;, &lt;br /&gt;
  &amp;quot;objeto&amp;quot; =&amp;gt; &amp;quot;bicicleta&amp;quot;, &lt;br /&gt;
  &amp;quot;animales&amp;quot; =&amp;gt; array(&lt;br /&gt;
             &amp;quot;perro&amp;quot;, &lt;br /&gt;
             &amp;quot;gato&amp;quot;, &lt;br /&gt;
             &amp;quot;caballo&amp;quot;) &lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si lo deseas guardar en una tabla de una base de datos, lo puedes serializar de esta forma:&lt;br /&gt;
&lt;br /&gt;
'''$string = serialize($arr);'''&lt;br /&gt;
&lt;br /&gt;
La función serialize devolverá un valor fácilmente almacenable o transmitible:&lt;br /&gt;
&lt;br /&gt;
''a:3:{s:5:&amp;quot;fruta&amp;quot;;s:7:&amp;quot;manzana&amp;quot;;s:6:&amp;quot;objeto&amp;quot;;s:9:&amp;quot;bicicleta&amp;quot;;s:8:&amp;quot;animales&amp;quot;;a:3: i:0;s:5:&amp;quot;perro&amp;quot;;i:1;s:4:&amp;quot;gato&amp;quot;;i:2;s:7:&amp;quot;caballo&amp;quot;;}}''&lt;br /&gt;
&lt;br /&gt;
Para recuperar el valor original en PHP a partir de la cadena seriada:&lt;br /&gt;
&lt;br /&gt;
'''$arr = unserialize($string);'''&lt;br /&gt;
&lt;br /&gt;
Un ejemplo del uso de la serialización la tenemos en la forma en que WordPress almacena información variada en algunas de sus tablas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Serializar'''&lt;br /&gt;
&lt;br /&gt;
http://www.cucuza.com/como-serializar-datos-en-php/&lt;br /&gt;
&lt;br /&gt;
==EXEMPLE CLASSE SERIALIZACIÓN==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Serializer {&lt;br /&gt;
&lt;br /&gt;
    private static $path = &amp;quot;./database/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    public static function save($obj, $id) {  //$obj es un JSON , $id es el nombre del archivo &lt;br /&gt;
&lt;br /&gt;
        $arr = serialize($obj);&lt;br /&gt;
        &lt;br /&gt;
        return file_put_contents(self::$path . $id, $arr);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static function restore($id) {&lt;br /&gt;
        &lt;br /&gt;
        if  (file_exists ( self::$path . $id ) ){&lt;br /&gt;
            &lt;br /&gt;
            $xmlString = file_get_contents(self::$path . $id);&lt;br /&gt;
            &lt;br /&gt;
            return unserialize($xmlString);  &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static function showIds(){&lt;br /&gt;
        &lt;br /&gt;
        return array_slice(scandir(self::$path),2);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//al ser una classe estàtica es pot invocar els mètodes de la següent forma, per exemple:&lt;br /&gt;
&lt;br /&gt;
Serializer::save(json,nom_arxiu);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crear un JSON desde PHP (json_encode)==&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crear un objeto en PHP con JSON (json_decode)==&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ENVIAR CORREOS ==&lt;br /&gt;
&lt;br /&gt;
Mediente la función MAIL() de PHP podemos enviar correos, por ello, nuestro servidor deberá tener instalado el servicio.&lt;br /&gt;
En nuestro caso, en nuestro Hosting-ng lo tenemos.&lt;br /&gt;
Existe otra función PHPMailer dónde contiene más opciones. https://github.com/PHPMailer/PHPMailer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Forma simple'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// El mensaje&lt;br /&gt;
$msg = &amp;quot;Estimado alumno de La Mercè\nEstas invitado a participar en  clase&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// usar wordwrap() si las lineas son más largas de 70 caracteres&lt;br /&gt;
$msg = wordwrap($msg,70);&lt;br /&gt;
&lt;br /&gt;
// Enviar mail&lt;br /&gt;
mail(&amp;quot;alguien@ejemplo.cat&amp;quot;,&amp;quot;Mi título&amp;quot;,$msg);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Más opciones'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    $to = &amp;quot;ejemploPrueba@ejemplo.com&amp;quot;;&lt;br /&gt;
    $subject = &amp;quot;Asunto&amp;quot;;&lt;br /&gt;
    $txt = &amp;quot;Estamos en clase de DAW&amp;quot;;&lt;br /&gt;
    $headers = &amp;quot;From: webmaster@example.com&amp;quot; . &amp;quot;\r\n&amp;quot; .&lt;br /&gt;
        &amp;quot;CC: somebodyelse@example.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    mail($to,$subject,$txt,$headers);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' En terminal '''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//también podemos hacerlo desde el terminal de linux en nuestro servidor&lt;br /&gt;
system('mail -t alguien@ejemplo.cat -s ALTA ALUMNOS INSTI &amp;lt;&amp;lt;&amp;lt; &amp;quot;El alumno&amp;quot;'.$nom.&amp;quot; &amp;quot;.$cognoms.&amp;quot; está en espera de darse de alta&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SUBIR FICHEROS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// En versiones de PHP anteriores a la 4.1.0, debería utilizarse $HTTP_POST_FILES en lugar&lt;br /&gt;
// de $_FILES.&lt;br /&gt;
&lt;br /&gt;
 //Directori de pujada. Permís d'escriptura i accés per a www-data&lt;br /&gt;
$dir_subida = './';  &lt;br /&gt;
 //Anexem la carpeta amb el nos del finder que ens puja&lt;br /&gt;
$fichero_subido = $dir_subida . basename($_FILES['file']['name']); //basename: muestra el nombre del fichero con la extensión&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Movem el fitxer temporal creat a /tmp a la ubicació o nom indicats&lt;br /&gt;
echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
if (move_uploaded_file($_FILES['file']['tmp_name'], $fichero_subido)) {    &lt;br /&gt;
    echo &amp;quot;El fichero es válido y se subió con éxito.\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;¡Posible ataque de subida de ficheros!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo 'Más información de depuración:';&lt;br /&gt;
print_r($_FILES);&lt;br /&gt;
&lt;br /&gt;
/*$_FILES['file']['name'] -- original name of the file on the client machine.&lt;br /&gt;
$_FILES['file']['type'] -- mime type of the file, provided by the browser&lt;br /&gt;
$_FILES['file']['size'] -- size (in bytes) of the uploaded file&lt;br /&gt;
$_FILES['file']['tmp_name'] -- temporary filename of the uploaded file, stored on the server&lt;br /&gt;
$_FILES['file']['error'] -- returns an error code, useful for debugging.&lt;br /&gt;
*/&lt;br /&gt;
print &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; SUBIR FICHEROS &amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;!-- El tipo de codificación de datos, enctype, DEBE especificarse como sigue --&amp;gt;&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- MAX_FILE_SIZE debe preceder al campo de entrada del fichero --&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;MAX_FILE_SIZE&amp;quot; value=&amp;quot;30000&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- El nombre del elemento de entrada determina el nombre en el array $_FILES --&amp;gt;&lt;br /&gt;
    Enviar este fichero: &amp;lt;input name=&amp;quot;fichero_usuario&amp;quot; type=&amp;quot;file&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar fichero&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EXERCICI:'''&lt;br /&gt;
&lt;br /&gt;
Es desitja desenvolupar un formulari on pugui ficar el nom d'usuari i a més pujar un fitxer. Deurà haver una pàgina que mostre tots el fitxers d'eixe Usuari i el nombre d'arxius.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDF ==&lt;br /&gt;
Podem també generar pdf's a FPDF http://www.fpdf.org/ , però es deurà baixar la llibreria primer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require('fpdf.php');&lt;br /&gt;
&lt;br /&gt;
class PDF extends FPDF&lt;br /&gt;
{&lt;br /&gt;
// Page header&lt;br /&gt;
function Header()&lt;br /&gt;
{&lt;br /&gt;
    // Logo&lt;br /&gt;
    $this-&amp;gt;Image('logo.png',10,6,30);&lt;br /&gt;
    // Arial bold 15&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','B',15);&lt;br /&gt;
    // Move to the right&lt;br /&gt;
    $this-&amp;gt;Cell(80);&lt;br /&gt;
    // Title&lt;br /&gt;
    $this-&amp;gt;Cell(30,10,'Title',1,0,'C');&lt;br /&gt;
    // Line break&lt;br /&gt;
    $this-&amp;gt;Ln(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Page footer&lt;br /&gt;
function Footer()&lt;br /&gt;
{&lt;br /&gt;
    // Position at 1.5 cm from bottom&lt;br /&gt;
    $this-&amp;gt;SetY(-15);&lt;br /&gt;
    // Arial italic 8&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','I',8);&lt;br /&gt;
    // Page number&lt;br /&gt;
    $this-&amp;gt;Cell(0,10,'Page '.$this-&amp;gt;PageNo().'/{nb}',0,0,'C');&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Instanciation of inherited class&lt;br /&gt;
$pdf = new PDF();&lt;br /&gt;
$pdf-&amp;gt;AliasNbPages();&lt;br /&gt;
$pdf-&amp;gt;AddPage();&lt;br /&gt;
$pdf-&amp;gt;SetFont('Times','',12);&lt;br /&gt;
for($i=1;$i&amp;lt;=40;$i++)&lt;br /&gt;
    $pdf-&amp;gt;Cell(0,10,'Printing line number '.$i,0,1);&lt;br /&gt;
$pdf-&amp;gt;Output();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= QR =&lt;br /&gt;
&lt;br /&gt;
També podem crear codis QR al nostre servidor, hi han moltes libreries tanta en PHP com en JS.&lt;br /&gt;
https://sourceforge.net/projects/phpqrcode/&lt;br /&gt;
&lt;br /&gt;
Es deurà baixar la llibreria i ficar la carpeta &amp;quot;phpqrcode&amp;quot; dins del nostre servidor, a més de introduir el següent codi. &lt;br /&gt;
//'''NOTA''': deureu donar-li permisos d'escriptura a la carpeta&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   // la llibreria s'ha descomprimit dins d'una carpeta anomenada &amp;quot;phpqrcode&amp;quot;&lt;br /&gt;
   include('phpqrcode/qrlib.php');&lt;br /&gt;
   &lt;br /&gt;
   QRcode::png('http://wikiserver.infomerce.es', 'imatgeqr.png');&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
   &amp;lt;img src=&amp;quot;imatgeqr.png&amp;quot; /&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici- Inventario'''&lt;br /&gt;
&lt;br /&gt;
Queremos crear un registro o inventario de los ordenadores, por ellos, queremos generar códigos QR que serán pegatinas para poner en cada uno de los ordenadores de las diferentes aulas, por ello crearemos un formulario donde introduciremos el aula y el ordenador, deben almacenarse en un variable de sesión (ya que no sabemos todavía conectarnos a BD) y cuando cliquemos mostrar deben de aparecer todas los códigos QR del aula.&lt;br /&gt;
También se desea guardarlo en pdf (mirar librerias) con el título y el aula y el codigo QR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CONECTAR CON LDAP o ACTIVE DIRECTORY ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class LDAP &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
      //Asigno variables para accesar al servidor LDAP&lt;br /&gt;
   private $conectar;&lt;br /&gt;
   private $host;&lt;br /&gt;
   private $user;&lt;br /&gt;
   private $pswd;&lt;br /&gt;
   private $dn;&lt;br /&gt;
   private $OU;&lt;br /&gt;
   private $DC;&lt;br /&gt;
   private $DC1;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   public function __construct($user,$password,$ou,$dc,$dc1)&lt;br /&gt;
   {&lt;br /&gt;
    $this-&amp;gt;host= &amp;quot;172.16.208.174&amp;quot;;&lt;br /&gt;
    $this-&amp;gt;user = $user;&lt;br /&gt;
    $this-&amp;gt;pswd = $password;&lt;br /&gt;
    $this-&amp;gt;OU = $ou;&lt;br /&gt;
    $this-&amp;gt;DC = $dc;&lt;br /&gt;
    $this-&amp;gt;DC1 = $dc1;&lt;br /&gt;
    $this-&amp;gt;dn = &amp;quot;OU=&amp;quot;.$ou.&amp;quot;,DC=&amp;quot;.$dc.&amp;quot;,DC=&amp;quot;.$dc1.&amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function conexion()&lt;br /&gt;
   {&lt;br /&gt;
       $this-&amp;gt;conectar = ldap_connect($this-&amp;gt;host) or die(&amp;quot;Imposible Conectar&amp;quot;);&lt;br /&gt;
     // Especifico la versión del protocolo LDAP&lt;br /&gt;
    ldap_set_option($this-&amp;gt;conectar, LDAP_OPT_PROTOCOL_VERSION, 3)    or die (&amp;quot;Imposible asignar el Protocolo LDAP&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function credenciales(){&lt;br /&gt;
   // Valido las credenciales para accesar al servidor LDAP&lt;br /&gt;
    $bd = ldap_bind($this-&amp;gt;conectar, $this-&amp;gt;user, $this-&amp;gt;pswd)    or die (&amp;quot;Imposible Validar en el Servidor LDAP&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Especifico los parámetros que quiero que me regrese la consulta&lt;br /&gt;
    $attrs = array(&amp;quot;displayname&amp;quot;,&amp;quot;mail&amp;quot;,&amp;quot;samaccountname&amp;quot;,&amp;quot;telephonenumber&amp;quot;,&amp;quot;givenname&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
    // Creo el filtro para la busqueda&lt;br /&gt;
    $filter = &amp;quot;(samaccountname=&amp;quot;.$this-&amp;gt;user.&amp;quot;)&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    $search = ldap_search($this-&amp;gt;conectar, $this-&amp;gt;dn, $filter, $attrs)    or die (&amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    $entries = ldap_get_entries($this-&amp;gt;conectar, $search);&lt;br /&gt;
&lt;br /&gt;
    return $entries;&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17483</id>
		<title>NF2: Generació de documents web amb llenguatges de guions</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17483"/>
				<updated>2023-10-27T15:25:59Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introducció llenguatges de programació del costat Servidor =&lt;br /&gt;
&lt;br /&gt;
Existeix una multitud de llenguatges concebuts o no per a Internet. Cadascun d'ells explota més a fons certes característiques que ho fan més o menys útils per desenvolupar diferents aplicacions.&lt;br /&gt;
Un '''llenguatge del costat del servidor''' és aquell que '''s'executa en el servidor web, just abans que s'enviï la pàgina''' a través d'Internet al client. Les pàgines que s'executen en el servidor poden realitzar accessos a bases de dades, connexions en xarxa, i altres tasques per crear la pàgina final que veurà el client.&lt;br /&gt;
D'altra banda, els '''llenguatges de costat client''' (entre els quals no només es troba l'HTML sinó també el Java i el Javascript els quals són simplement inclosos en el codi HTML) són aquells que '''poden ser directament executats pel navegador i no necessiten un pretractament'''.&lt;br /&gt;
[[Fitxer:serverside.jpg|center]]&lt;br /&gt;
Els llenguatges de costat servidor més àmpliament utilitzats per al desenvolupament de pàgines dinàmiques són l'ASP, JSP, PERL i PHP.&lt;br /&gt;
== ASP.NET ==&lt;br /&gt;
Llenguatge comercialitzat per Microsoft, i usat per programadors per desenvolupar entre altres funcions, llocs web. ASP.NET és el successor de la tecnologia ASP, va ser llançada al mercat mitjançant una estratègia de mercat denominada .NET.&lt;br /&gt;
Es desenvolupat per resoldre les limitants que brindava el teu antecessor ASP. Per al desenvolupament d'ASP.NET es pot utilitzar C#, VB.NET o J#. Els arxius compten amb l'extensió (aspx). Per al seu funcionament de les pàgines es necessita tenir instal·lat IIS amb el Framework .Net. Microsft Windows 2003 inclou aquest framework, solament es necessitarà instal·lar-ho en versions anteriors.&lt;br /&gt;
El llenguatge ASP consisteix en una sèrie de classes .NET utilitzades per crear aplicacions Web, tant del costat client (Web Form) com del costat servidor (Web Service). La integració de nadiva .NET Framework amb el sistema operatiu Windows Server 2003 fa que la seva execució sigui més estable i ràpida que altres llenguatges de programació.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Completament orientat a objectes.&lt;br /&gt;
*Controls d'usuari i personalitzats.&lt;br /&gt;
*Divisió entre la capa d'aplicació o disseny i el codi.&lt;br /&gt;
*Facilita el manteniment de grans aplicacions.&lt;br /&gt;
*Increment de velocitat de resposta del servidor.&lt;br /&gt;
*Major velocitat.&lt;br /&gt;
*Major seguretat.&lt;br /&gt;
&lt;br /&gt;
'''Desavantatges: '''&lt;br /&gt;
*Major consum de recursos.&lt;br /&gt;
*Tecnologia propietària.&lt;br /&gt;
*Hostalatge de llocs web costosos.&lt;br /&gt;
&lt;br /&gt;
== JSP: Java Server Pages ==&lt;br /&gt;
És un llenguatge per a la creació de llocs web dinàmics, acrònim de Java Server Pages. Està orientat a desenvolupar pàgines web en Java. JSP és un llenguatge multiplataforma.&lt;br /&gt;
JSP va ser desenvolupat per Sun Microsystems. Comparteix avantatges similars a les d'ASP.NET, desenvolupat per a la creació d'aplicacions web potents. Posseeix un motor de pàgines basat en els servlets de Java. Per al seu funcionament es necessita tenir instal·lat un servidor Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Característiques'''&lt;br /&gt;
*Codi separat de la lògica del programa.&lt;br /&gt;
*Les pàgines són compilades en la primera petició.&lt;br /&gt;
*Permet separar la part dinàmica de l'estàtica a les pàgines web.&lt;br /&gt;
*Els arxius es troben amb l'extensió (jsp).&lt;br /&gt;
*El codi JSP pot ser incrustat en codi HTML.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Execució ràpida del servlets.&lt;br /&gt;
*Crear pàgines del costat del servidor.&lt;br /&gt;
*Multiplataforma.&lt;br /&gt;
*Codi ben estructurat.&lt;br /&gt;
*Integritat amb els mòduls de Java.&lt;br /&gt;
*La part dinàmica està escrita en Java.&lt;br /&gt;
== PERL (Practical Extraction and Report Language) ==&lt;br /&gt;
És un llenguatge de programació desenvolupat per Larry Wall (lwall at netlabs.com) inspirat en altres eines d'UNIX com són: sigueu, grep, awk, c-shell, per a l'administració de tasques pròpies de sistemes UNIX. No estableix cap filosofia de programació concreta. No es pot dir que sigui orientat a objectes, modular o estructurat encara que suporta directament tots aquests paradigmes; el seu punt fort són les labors de processament de textos i arxius. Llenguatge de programació basat en scripts portable a gairebé qualsevol plataforma. És molt utilitzat per escriure CGIs. Un dels seus elements més potents són les expressions regulars, que a partir de la seva versió en Perl han estat adoptades per altres llenguatges i plataformes com .NET o Javascript.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Es poden ajuntar diversos programes d'una forma senzilla per aconseguir una meta determinada. Els usuaris de Windows agrairan aquesta propietat ja que normalment emmalalteixen d'un bon llenguatge tipus “script”.&lt;br /&gt;
*És relativament ràpid per a un llenguatge tipus “script”.&lt;br /&gt;
*Està disponible en múltiples plataformes i sistemes operatius (UNIX, Linux i Windows). Un programa que s'escrigui tenint en compte la compatibilitat pot ser escrit en una plataforma i executat en una altra.&lt;br /&gt;
*Hi ha una col·lecció enorme de mòduls que poden ser incorporats a qualsevol “script” de Perl. Estan disponibles en el CPAN (“Comprehensive Perl Arxivi Network”). En particular existeix una extensió per a càlcul numèric denominada PDL.&lt;br /&gt;
*Perl és gratuït. Molt més que això, és “Programari Lliure”. Això vol dir que el codi font està disponible perquè qualsevol el pugui veure o modificar, i el que és més important, sempre ho estarà. Encara que mai pretenguis canviar el codi, és important disposar de la possibilitat de fer-ho, ja que sempre es podrà contractar a una tercera persona perquè ho modifiqui en el cas que hi hagi un error, i hauria de ser possible solucionar-ho.&lt;br /&gt;
*Li atorga al programador molta llibertat perquè faci el programa com vulgui. Tal com diu l'eslògan de Perl “Hi ha més d'una forma de fer-ho”&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
PHP és l'acrònim de Hipertext Preprocesor. És un llenguatge de programació del costat del servidor gratuït i independent de plataforma, ràpid, amb una gran llibreria de funcions i molta documentació. Va ser creat originalment en 1994 per Rasmus Lerdorf, però com PHP està desenvolupat en política de codi obert, al llarg de la seva història ha tingut moltes contribucions d'altres desenvolupadors.&lt;br /&gt;
El client solament rep una pàgina amb el codi HTML resultant de l'execució de la PHP. Com la pàgina resultant conté únicament codi HTML, és compatible amb tots els navegadors.&lt;br /&gt;
&lt;br /&gt;
https://luisjordan.net/node-js/node-js-vs-php-comparaciones-cms-beneficios-y-tiempos-de-respuesta/&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Molt fàcil d'aprendre.&lt;br /&gt;
*Es caracteritza per ser un llenguatge molt ràpid.&lt;br /&gt;
*Suporta en certa mesura l'orientació a objecte. Classes i herència.&lt;br /&gt;
*És un llenguatge multiplataforma: Linux, Windows, entre uns altres.&lt;br /&gt;
*Capacitat de connexió amb la majoria dels manejadores de base de dades: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre unes altres.&lt;br /&gt;
*Capacitat d'expandir el seu potencial utilitzant mòduls.&lt;br /&gt;
*Posseeix documentació a la seva pàgina oficial la qual inclou descripció i exemples de cadascuna de les seves funcions.&lt;br /&gt;
*És lliure, per la qual cosa es presenta com una alternativa de fàcil accés per a tots.&lt;br /&gt;
*Inclou gran quantitat de funcions.&lt;br /&gt;
*No requereix definició de tipus de variables ni maneig detallat del baix nivell.&lt;br /&gt;
&lt;br /&gt;
= Preparació de l'entorn =&lt;br /&gt;
== Instal·lació de servidors d'aplicacions Web ==&lt;br /&gt;
Internet s’ha convertit en la principal eina d’intercanvi d’informació a la societat actual. La connexió dels ordinadors a les xarxes locals i aquestes xarxes a d’altres de grans dimensions ha possibilitat la comunicació global d’informació entre els ordinadors arreu del món. Per poder oferir serveis web, els servidors han de tenir instal·lats una sèrie de serveis. El servidor web permet l’enviament de continguts a altres ordinadors a través de la xarxa. Els preprocessadors d’hipertext (com PHP) permeten crear continguts web de forma dinàmica. Els servidors de bases de dades permeten emmagatzemar informació de forma estructurada que es pot fer servir per generar contingut web. Aquests serveis han de ser instal·lats i configurats correctament abans de començar a crear el contingut web dinàmic del nostre web.&lt;br /&gt;
&lt;br /&gt;
Un '''servidor web''' és una peça de programari que respon a les peticions dels navegadors i lliura la pàgina per al navegador a través d’Internet. Quan es crida a una pàgina web per l’adreça –l’URL (uniform resource locator), per exemple, www.infomerce.es/index.html-, la comunicació entre el navegador i el servidor és possible gràcies a tres protocols:&lt;br /&gt;
* TCP(Transmission Control Protocol, protocol de control de transmissió): és el responsable de fer que el missatge arribi a la destinació sense errors.&lt;br /&gt;
* IP(Internet Protocol): és el responsable de fer que el missatge trobi el camí fins al servidor.&lt;br /&gt;
* HTTP(Hypertext Transfer Protocol, protocol de transferència d’hipertext): és el protocol que ha indicat l’usuari a l’hora de demanar el recurs al servidor. La primera part d’un recurs URL correspon al protocol que utilitzaran client i servidor per intercanviar dades.&lt;br /&gt;
== HTTP: comunicació entre servidor i client ==&lt;br /&gt;
Un cop establerta la connexió entra en joc el protocol HTTP: el navegador envia una petició al servidor en què sol·licita el recurs index.html. El servidor processa aquesta petició i retorna la pàgina sol·licitada al navegador, que interpreta les etiquetes HTML i la presenta a l’usuari.&lt;br /&gt;
[[Fitxer:peticiohttp.jpg|center]]&lt;br /&gt;
La informació que el client envia al servidor en la petició és la següent:&lt;br /&gt;
* El mètode HTTP: l’acció que s’ha de fer.&lt;br /&gt;
* El recurs a què s’ha d’accedir (una part de l’URL).&lt;br /&gt;
* La informació que l’usuari envia al servidor.&lt;br /&gt;
La informació que el servidor envia en la resposta té dues parts ben diferenciades: &lt;br /&gt;
* La capçalera: conté el codi que indica si la petició s’ha complert. També conté el tipus de contingut que enviarà al client.&lt;br /&gt;
* El contingut: (text, codi HTML, imatges, etc.) del recurs demanat.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Preparació M.V. amb Ubuntu i PHP ===&lt;br /&gt;
Es tracta d'importar una M.V. amb Ubuntu Server. Aquesta màquina virtual la utilitzarem al llarg del curs per desenvolupar programes amb el llenguatge PHP. LA M.V. ha de tenir les següents característiques:&lt;br /&gt;
*512 MB de Ram&lt;br /&gt;
*Targeta mode Pont (Has de reinicialitzar la @MAC i esborrar el fitxer: /etc/udev/rules.d/70-persistent-net.rules)&lt;br /&gt;
*Configura la @IP. &lt;br /&gt;
Instal·la el següent programari:&lt;br /&gt;
*openssh-server (per permetre comunicacions remotes)&lt;br /&gt;
*Servidor Web apache2&lt;br /&gt;
*Servidor PHP&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Primer projecte amb NetBeans ===&lt;br /&gt;
Crea un projecte PHP amb NetBeans. Fes que automàticament guardi tots els fitxers a la màquina virtual creada al apartat anterior. Crea una pàgina d'exemple i comprova que funciona.&lt;br /&gt;
La pàgina d'exemple pot ser la següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
     	&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;?php&lt;br /&gt;
            echo &amp;quot;Primera Pàgina amb PHP&amp;quot;; &lt;br /&gt;
          ?&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= El Llenguatge PHP =&lt;br /&gt;
== Introducció ==&lt;br /&gt;
'''PHP''' és un llenguatge de programació obert que s’integra directament en pàgines HTML. El seu ús ha esdevingut gairebé imprescindible en les pàgines que han d’utilitzar bases de dades o formularis.&lt;br /&gt;
Rasmus Lerdorf és el creador del llenguatge PHP. El 1995 presenta la primera edició d’aquest llenguatge amb el nom de Personal Home Page tools amb llicència pública GNU. Per crear el PHP, Rasmus utilitza el codi de programació C.&lt;br /&gt;
&lt;br /&gt;
El '''codi PHP''' que escriviu, '''l’haureu d’incrustar dins de codi HTML''', concretament dins les etiquetes \&amp;lt;body\&amp;gt; del document. Mitjançant unes marques l’HTML no interpretarà el codi PHP, el qual, i mitjançant les mateixes marques, s’executarà en el servidor.&lt;br /&gt;
&lt;br /&gt;
El codi PHP s’executa en un servidor i mostra el resultat en un client. Visualitzareu els resultats amb un navegador web.&lt;br /&gt;
&lt;br /&gt;
Quan arrenca el PHP es fa la lectura del fitxer '''php.ini'''. Aquest fitxer conté la configuració del PHP i es crea durant la instal·lació del PHP. És possible que necessiteu fer canvis en el fitxer de configuració, preneu la precaució de fer-ne una còpia de seguretat abans de fer aquestes modificacions.&lt;br /&gt;
Una inspecció visual del fitxer php.ini us servirà per comprendre’n el funcionament. Depenent del valor de les variables que conté aquest fitxer, el comportament del PHP variarà en la vostra màquina. Podeu comprovar que cada variable que forma part del fitxer està àmpliament comentada, amb comentaris que es marquen amb un punt i coma.&lt;br /&gt;
&lt;br /&gt;
== Mostrar Errors ==&lt;br /&gt;
Per mostrar els errors que fem al escriure programes en php s'ha d'especificar als fitxers que els vols veure per pantalla amb les següents sentències:&lt;br /&gt;
&lt;br /&gt;
http://www.anerbarrena.com/mostrar-errores-php-608/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* * ******************Errores******************* */&lt;br /&gt;
ini_set('display_errors', true);&lt;br /&gt;
error_reporting(E_ALL);&lt;br /&gt;
/* * ********************Usuarios****************** */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintaxi ==&lt;br /&gt;
=== Generalitats ===&lt;br /&gt;
La sintaxi d'un llenguatge de programació es defineix com el conjunt de regles que han de seguir-se en escriure el codi font dels programes per considerar-se com a correctes per a aquest llenguatge de programació.&lt;br /&gt;
Les normes bàsiques que defineixen la sintaxi de PHP són les següents:&lt;br /&gt;
*Si voleu que s’interpreti el vostre codi és imprescindible que encabiu el codi escrit en PHP entre dos delimitadors. Aquestes marques són &amp;lt;?php , que la fareu servir per indicar l’inici de codi en llenguatge PHP, i ?&amp;gt; , que utilitzareu per marcar el final del vostre codi PHP.&lt;br /&gt;
*Indicareu el final d’una instrucció amb punt i coma. Cada vegada que es detecti un punt i coma s’interpretarà el codi inserit fins a aquell punt.&lt;br /&gt;
*Els comentaris en PHP els podreu incloure mitjançant:&lt;br /&gt;
** Dues barres (//) o un coixinet (#) si voleu comentar una línia&lt;br /&gt;
** Una barra i un asterisc (/*) per indicar l’inici de comentari, i un asterisc i una barra per indicar el final de comentari si voleu comentar més d’una línia(/*).&lt;br /&gt;
*No es defineix el tipus de les variables: PHP és un llenguatge de programació que no obliga a declarar prèviament el nom de les variables que s’utilitzaran ni el seu tipus (és diu que és un llenguatge sense tipus o no tipat). Ara bé, tot i que existeixen els tipus de dades en PHP aquests no es comproven.&lt;br /&gt;
*No es distingeixen les majúscules i minúscules.&lt;br /&gt;
Exemples:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Aquí teniu una instrucció.&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;i aquí una altra instrucció.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Si voleu comentar una línia ho podeu fer d’aquesta manera...&lt;br /&gt;
#...o bé d’aquesta altra.&lt;br /&gt;
/* Però si necessiteu comentar&lt;br /&gt;
més línies aquesta és la millor&lt;br /&gt;
manera de fer − ho! */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Per representar una variable '''caldrà escriure el símbol del dòlar seguit pel nom que vulgueu posar'''. En el moment de donar nom a una variable heu de tenir en compte que es diferencien majúscules i minúscules i que haurà de començar amb una lletra o caràcter de subratllat.&lt;br /&gt;
En PHP, a diferència de molts altres llenguatges, no cal declarar una variable abans d’utilitzar-la. El símbol del dòlar és el que marca que es tracta d’una variable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$Nom='whovian';&lt;br /&gt;
$Familia='Informàtica';&lt;br /&gt;
$Cicle=&amp;quot;CFGS Desenvolupament d'aplicacions Web&amp;quot;;&lt;br /&gt;
$Modul = &amp;quot;DAW en entorn servidor&amp;quot;;&lt;br /&gt;
$Durada= 165;&lt;br /&gt;
echo &amp;quot;Hola $nom!&amp;lt;br&amp;gt;&lt;br /&gt;
Benvingut als estudis d’$Familia!!!&amp;lt;br&amp;gt;&lt;br /&gt;
Cicle: $Cicle&amp;lt;br&amp;gt;&lt;br /&gt;
Mòdul: $Modul&amp;lt;br&amp;gt;&lt;br /&gt;
Durada: $Durada hores&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com podeu veure, les variables poden adquirir qualsevol dels tipus suportats, i la variable $Durada emmagatzema l’enter 180, mentre que la resta de variables emmagatzemaran cadenes.&lt;br /&gt;
Les variables s’assignen per valor per defecte, però '''si voleu assignar un valor per referència''' ho haureu d’indicar fent servir el símbol''' &amp;amp; '''tot just davant de la variable&lt;br /&gt;
=== Àmbit de les variables ===&lt;br /&gt;
&lt;br /&gt;
Les variables tenen una vida determinada depenent d’on les declareu i com ho feu. És molt important conèixer l’àmbit de les variables per controlar els vostres codis. No comprendre aquesta part pot provocar fallades inesperades en les vostres creacions.&lt;br /&gt;
L’àmbit d’una variable és el context en què és definida.&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot declarar una variable nombroses vegades en àmbits diferents:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nom=’Nyoman’;&lt;br /&gt;
echo ’De moment $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
function canvi()&lt;br /&gt;
{&lt;br /&gt;
	$nom=’Ketut’;&lt;br /&gt;
	echo ’Però ara $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
canvi();&lt;br /&gt;
echo ’I de nou $nom torna a tenir el valor de ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadors ===&lt;br /&gt;
Permetran fer accions dins el codi. Podreu canviar i assignar valors, canviar l’adreça del codi, condicionar l’execució de blocs de codi i, en&lt;br /&gt;
definitiva, dotar de la complexitat necessària els vostres programes per aconseguir un objectiu.&lt;br /&gt;
Els operadors es poden agrupar en tres blocs segons el nombre de valors sobre els quals s’actua.&lt;br /&gt;
* L’operador '''unari''' opera sobre un valor i el que pot fer en aquest valor és negar-lo, incrementar-lo o decrementar-lo, entre altres coses.&lt;br /&gt;
* L’operador '''binari''' opera sobre dos valors i permet sumar-los, restar-los o comparar-los.&lt;br /&gt;
* L’operador '''ternari''' permet escollir entre dues expressions en funció d’una altra.&lt;br /&gt;
&lt;br /&gt;
'''Operadors Aritmètics '''&lt;br /&gt;
Teniu en compte que la divisió retornarà un valor en coma flotant si el resultat de la divisió no és exacte.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
|-$valor||Negació||Oposat de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor + $valorB ||Addició||Suma de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor - $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor * $valorB||Multiplicació||Producte de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor / $ valorB||Divisió||Quocient de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor % $valorB||Mòdul||Resta de $valor dividit per $valorB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors d'assignació '''&lt;br /&gt;
L’operador bàsic d’assignació és l’igual. Amb l’operador igual la variable de l’esquerra rep el valor de l’expressió de la dreta.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor = $valorB||Assignació||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor += $valorB||Addició i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor -= $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor.= “text”||Concatenació i Assignació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de bit '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp; $valorB||i||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor I $valorB||o i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor ˆ $valorB ||xor||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
|  ̃ $valor||Negació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;lt;$valorB ||Desplaçament a l’esquerra||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;&amp;gt;$valorB||Desplaçament a la dreta||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de comparació '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor == $valorB||Igual||TRUE si $valor és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor === $valorB||Idèntic||TRUE si $valor és igual a $valorB i són del mateix tipus.&lt;br /&gt;
|-&lt;br /&gt;
| $valor != $valorB ||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;gt; $ valorB||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor !== $valorB ||No idèntic||TRUE si $valor no és igual a $valorB o no són del mateix tipus&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt; $valorB||Més petit que||TRUE si $valor és més petit que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt; $valorB||Més gran que||TRUE si $valor és més gran que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;= $valorB||Més petit o igual que||TRUE si $valor és més petit o igual que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;= $valorB||Més gran o igual que||TRUE si $valor és més gran o igual que $valorB.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Operadors d’increment i decrement '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| ++$valor||Preincrement||Incrementa $valor una unitat, i després retorna $valor.&lt;br /&gt;
|-&lt;br /&gt;
| $valor++||Postincrement||Retorna $valor i incrementa $valor una unitat.&lt;br /&gt;
|-&lt;br /&gt;
| –$valor ||Predecrement||Decrementa $valor una unitat i retorna $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor–||Postdecrement||Retorna $valor i decrementa $valor una unitat.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de lògica '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor and valorB||i||TRUE si $valor i $valorB són TRUE&lt;br /&gt;
|-&lt;br /&gt;
| $valor or $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor xor $valorB ||xor||TRUE si $valor o $valorB són TRUE, però no tots dos alhora.&lt;br /&gt;
|-&lt;br /&gt;
| !$valor||No||Inverteix el contingut de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp;&amp;amp; $valorB ||i||TRUE si $valor i $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor II $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Els Vectors i les Matrius (Arrays) ===&lt;br /&gt;
Les matrius i els vectors són conjunts de dades que poden estar definides en un Guió de PHP. Les matrius poden contenir altres matrius dintre d'ells sense restricció (multidimensionals). &lt;br /&gt;
&lt;br /&gt;
Els vectors es poden crear de dues maneres. La primera consisteix en l'ús de la funció '''array()'''. La segona implica l'ús de claudàtors.&lt;br /&gt;
Exemple de declaracions d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$elmeuarray = array($valor1, $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
$elmeuarray[1] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//També es pot declarar de la següent manera:&lt;br /&gt;
$elmeuarray = array('mes1' =&amp;gt; $valor1, 'mes2' =&amp;gt; $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
$elmeuarray['mes2'] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//Però tambés es pot declarar directament amb claudàtors:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
//o amb la següent notació&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemples d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$array = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;type&amp;quot;=&amp;gt;&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;manufactured&amp;quot;=&amp;gt;&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2 = array(&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3 = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array['name']=&amp;quot;BMW&amp;quot;;&lt;br /&gt;
$array['type']=&amp;quot;SERIE 1&amp;quot;;&lt;br /&gt;
$array['colour']=&amp;quot;BLANCO&amp;quot;;&lt;br /&gt;
$array['manufactured']=&amp;quot;2035&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2[]=&amp;quot;AUDI&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;A5&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;ROJO&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;2038&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3['name']=&amp;quot;FERRARI&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;SPIDER&amp;quot;;&lt;br /&gt;
$array3['colour']=&amp;quot;VERDE&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;2013&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les matrius son vectors multidimensionals. Els elements d'un vector a la seva vegada poden ser un altre vector. Un exemple és el següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$cars = array(&lt;br /&gt;
   &amp;quot;car1&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Toyota&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;Green&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1999,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1998),&lt;br /&gt;
   &amp;quot;car2&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;BMW&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;RED&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 2005,&amp;quot;engine_cc&amp;quot; =&amp;gt; 2400),&lt;br /&gt;
   &amp;quot;car3&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Renault&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;White&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1993,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1395),&lt;br /&gt;
);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $cars['car1']['make'],&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo $cars['car3']['engine_cc'];&lt;br /&gt;
&lt;br /&gt;
/* El resultat de l'execució de les intruccions anteriors és:&lt;br /&gt;
Toyota&lt;br /&gt;
1395&lt;br /&gt;
*/&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Més informació sobre arrays [http://php.net/manual/en/language.types.array.php aquí.]&lt;br /&gt;
Existeixen MOLTES funcions per manipular els arrays. Dona una ullada a [http://php.net/manual/en/ref.array.php aquesta pàgina] abans que comencis a implementar funcions que ja existeixen a la llibreria de php.&lt;br /&gt;
&lt;br /&gt;
=== Estructures de control ===&lt;br /&gt;
==== La sentència '''IF''' i l'Operador Ternari ====&lt;br /&gt;
Les estructures condicionals s'utilitzen per controlar quines instruccions s'executen. Els condicionals en PHP estan estructurats de manera similar als trobats en C ++ i Java .&lt;br /&gt;
Exemple d'estructures condicionals:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//Exemple 1&lt;br /&gt;
$foo = 1;&lt;br /&gt;
$bar = 2;&lt;br /&gt;
if($foo == $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is equal to $bar.&amp;quot;;&lt;br /&gt;
} elseif ($foo &amp;gt; $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is greater than $bar.&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;$foo is less than $bar.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple 2&lt;br /&gt;
$lower = 10;&lt;br /&gt;
$upper = 100;&lt;br /&gt;
$needle = 25;&lt;br /&gt;
if(($needle &amp;gt;= $lower) &amp;amp;&amp;amp; ($needle &amp;lt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is in the haystack.&amp;quot;;&lt;br /&gt;
} elseif (($needle &amp;lt;= $lower) || ($needle &amp;gt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is outside of the haystack.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple Operador Ternari&lt;br /&gt;
&lt;br /&gt;
$missatge =  (date('G') &amp;lt; 12) ? 'Buenos días' : 'Buenas tardes';&lt;br /&gt;
&lt;br /&gt;
//equival a la següent estructura:&lt;br /&gt;
if (date('G') &amp;lt; 12) {&lt;br /&gt;
$missatge = 'Buenos días';&lt;br /&gt;
} else {&lt;br /&gt;
$missatge = 'Buenas tardes';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''SWITCH''' ====&lt;br /&gt;
Quan es necessita utilitzar un IF amb molts Else pot resultar que es vegi un codi molt redundant. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user_command == &amp;quot;n&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_north();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;e&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_east();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;s&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_south();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;w&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_west();&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  do_something_else();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per millorar la llegibilitat del codi utilitzarem l'estructura 'Switch' de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 switch($user_command)&lt;br /&gt;
 {&lt;br /&gt;
   case 'n':&lt;br /&gt;
     go_north();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'e':&lt;br /&gt;
     go_east();&lt;br /&gt;
     break;&lt;br /&gt;
   case 's':&lt;br /&gt;
     go_south();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'w':&lt;br /&gt;
     go_west();&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     do_something_else();&lt;br /&gt;
     break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Un altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($firstvariable == 'comparison1' &lt;br /&gt;
         || $firstvariable == 'comparison2')&lt;br /&gt;
 {&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
 }&lt;br /&gt;
 else if ($firstvariable == 'comparison3')&lt;br /&gt;
 {&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
      launchMissiles();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//amb l'estructura switch :&lt;br /&gt;
 switch($firstvariable)&lt;br /&gt;
 {&lt;br /&gt;
  case 'comparison1':&lt;br /&gt;
  case 'comparison2':&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  case 'comparison3':&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  default: &lt;br /&gt;
      launchMissiles();&lt;br /&gt;
      break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''WHILE''' ====&lt;br /&gt;
Aquesta sentència s'utilitzarà per repetir una serie d'instruccions tantes vegades com el condicional sigui evaluat a True.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$c = 0;&lt;br /&gt;
while ($c &amp;lt; 5) {&lt;br /&gt;
   echo $c++;&lt;br /&gt;
} ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mira el següent codi i enraona si serà un bucle infinit o no:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$c = 1;&lt;br /&gt;
$myName=&amp;quot;Fred&amp;quot;;&lt;br /&gt;
while ($myName != &amp;quot;Rumplestilskin&amp;quot;) &lt;br /&gt;
{&lt;br /&gt;
   if ($myName==&amp;quot;Fred&amp;quot;) &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Leslie&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Marc&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   $c++;&lt;br /&gt;
 &lt;br /&gt;
   if ($c==3) &lt;br /&gt;
   {&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
echo &amp;quot;You lose and I get your baby!\n&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''do ... WHILE''' ====&lt;br /&gt;
És semblan al bucle anterior però les intruccions sempre s'execulten almenys 1 vegada. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  $c = 6;&lt;br /&gt;
  do {&lt;br /&gt;
    echo 'Hi';&lt;br /&gt;
  } while ($c &amp;lt; 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''FOR''' ====&lt;br /&gt;
La sintaxi bàsica d'aquesta sentencia és la següent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for([initialization]; [condition]; [step])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'ús:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 for($i = 0; $i &amp;lt; 5; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilització amb arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $menu = array(&amp;quot;Toast and Jam&amp;quot;, &amp;quot;Bacon and Eggs&amp;quot;, &amp;quot;Homefries&amp;quot;, &amp;quot;Skillet&amp;quot;, &amp;quot;Milk and Cereal&amp;quot;);&lt;br /&gt;
 // note to self: get breakfast after writing this article&lt;br /&gt;
 $count = count($menu);&lt;br /&gt;
 for($i = 0; $i &amp;lt; $count; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i + 1 . &amp;quot;. &amp;quot; . $menu[$i] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== La sentència '''FOREACH''' ====&lt;br /&gt;
Aquesta sentència és molt utilitzada per recòrrer arrays. Com el parell array[key]=value pot ser string en ambdós casos, aquesta estructura ens permet obternir-los:&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach ($array as $someVar) {&lt;br /&gt;
  echo ($someVar . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//un altre exemple:&lt;br /&gt;
foreach ($array as $key =&amp;gt; $value) {&lt;br /&gt;
  echo ($key.&amp;quot;holds the value &amp;quot;.$value.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''break''' ====&lt;br /&gt;
&lt;br /&gt;
La sentència break provoca la sortida de qualsevol estructura de control, trencant així un bucle. Penseu per exemple un bucle que cerca un element d’un array. Una vegada trobat, és ineficient acabar de recórrer la resta de l’array.&lt;br /&gt;
''Podeu indicar a aquesta sentència quantes estructures de control voleu saltar. ''&lt;br /&gt;
En l’exemple següent el break provoca la sortida de dos blocs de codi:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
while($edat&amp;lt;20)&lt;br /&gt;
{&lt;br /&gt;
	for( ; ; $edat=$edat+1)&lt;br /&gt;
	{&lt;br /&gt;
		if($edat==18)&lt;br /&gt;
		{&lt;br /&gt;
			echo &amp;quot;Ara ja tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
			break 2;&lt;br /&gt;
		}&lt;br /&gt;
		echo &amp;quot;Encara ets menor d’edat, ja que tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;Aquesta línia no sortirà per pantalla!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;Ja no ets menor d’edat! Tens $edat anys!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
&lt;br /&gt;
===Exercici: tablita ===&lt;br /&gt;
Se desea crear una página web en la cual muestre un título y luego haga una tabla que imprima 10 filas mostrando &amp;quot;estamos en 2DAW&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;th&amp;gt;M09-PHP&amp;lt;/th&amp;gt;  &lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;?php&lt;br /&gt;
                $conta =1;&lt;br /&gt;
                while($conta&amp;lt;=10) { &lt;br /&gt;
                    echo &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;td&amp;gt;Estamos en DAW2&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    $conta++;&lt;br /&gt;
                }&lt;br /&gt;
            ?&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
     &amp;lt;/body&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exercici: Vector (opcional) ===&lt;br /&gt;
Queremos crear un vector &amp;quot;ciudades&amp;quot; donde introduciremos una serie  de ciudades, luego deberá mostrar cada una de las ciudades y el número total.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Recòrrer array ====&lt;br /&gt;
Donat el següent array:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$eu = array( &amp;quot;Italy&amp;quot;=&amp;gt;&amp;quot;Rome&amp;quot;, &amp;quot;Luxembourg&amp;quot;=&amp;gt;&amp;quot;Luxembourg&amp;quot;, &amp;quot;Belgium&amp;quot;=&amp;gt; &amp;quot;Brussels&amp;quot;, &lt;br /&gt;
&amp;quot;Denmark&amp;quot;=&amp;gt;&amp;quot;Copenhagen&amp;quot;, &amp;quot;Finland&amp;quot;=&amp;gt;&amp;quot;Helsinki&amp;quot;, &amp;quot;France&amp;quot; =&amp;gt; &amp;quot;Paris&amp;quot;, &amp;quot;Slovakia&amp;quot;=&amp;gt;&amp;quot;Bratislava&amp;quot;, &lt;br /&gt;
&amp;quot;Slovenia&amp;quot;=&amp;gt;&amp;quot;Ljubljana&amp;quot;, &amp;quot;Germany&amp;quot; =&amp;gt; &amp;quot;Berlin&amp;quot;, &amp;quot;Greece&amp;quot; =&amp;gt; &amp;quot;Athens&amp;quot;, &amp;quot;Ireland&amp;quot;=&amp;gt;&amp;quot;Dublin&amp;quot;, &lt;br /&gt;
&amp;quot;Netherlands&amp;quot;=&amp;gt;&amp;quot;Amsterdam&amp;quot;, &amp;quot;Portugal&amp;quot;=&amp;gt;&amp;quot;Lisbon&amp;quot;, &amp;quot;Spain&amp;quot;=&amp;gt;&amp;quot;Madrid&amp;quot;, &amp;quot;Sweden&amp;quot;=&amp;gt;&amp;quot;Stockholm&amp;quot;,&lt;br /&gt;
 &amp;quot;United Kingdom&amp;quot;=&amp;gt;&amp;quot;London&amp;quot;, &amp;quot;Cyprus&amp;quot;=&amp;gt;&amp;quot;Nicosia&amp;quot;, &amp;quot;Lithuania&amp;quot;=&amp;gt;&amp;quot;Vilnius&amp;quot;, &lt;br /&gt;
&amp;quot;Czech Republic&amp;quot;=&amp;gt;&amp;quot;Prague&amp;quot;, &amp;quot;Estonia&amp;quot;=&amp;gt;&amp;quot;Tallin&amp;quot;, &amp;quot;Hungary&amp;quot;=&amp;gt;&amp;quot;Budapest&amp;quot;, &amp;quot;Latvia&amp;quot;=&amp;gt;&amp;quot;Riga&amp;quot;, &lt;br /&gt;
&amp;quot;Malta&amp;quot;=&amp;gt;&amp;quot;Valetta&amp;quot;, &amp;quot;Austria&amp;quot; =&amp;gt; &amp;quot;Vienna&amp;quot;, &amp;quot;Poland&amp;quot;=&amp;gt;&amp;quot;Warsaw&amp;quot;) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Crea un script amb PHP que mostri un llistat amb el noms de les capitals i els seus corresponents països. El llistat ha de ser semblant a:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
La capital de Netherlands és Amsterdam&lt;br /&gt;
La capital de Greece és Athens&lt;br /&gt;
La capital de Germany és Berlin&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[solucio_php_recorrer_array]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Afegir un element a un array ====&lt;br /&gt;
Escriu un programa que afegeixi un nou element a un array en una posició determinada.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//abans:&lt;br /&gt;
12345&lt;br /&gt;
&lt;br /&gt;
//després d'afegir $ l'array és:&lt;br /&gt;
123$45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
:[[solucio_afegir_element_array_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Curta i llarga ====&lt;br /&gt;
Escriu un programa en PHP que retorni la longitud màxima i mínima dels strings que conté un array.&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ar = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$max=0;&lt;br /&gt;
$min = PHP_INT_MAX;&lt;br /&gt;
&lt;br /&gt;
foreach($ar as $valor){&lt;br /&gt;
    if( strlen($valor) &amp;lt; $min){&lt;br /&gt;
        $min = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
    if (strlen($valor) &amp;gt; $max){&lt;br /&gt;
        $max = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;La longitud mes curta es $min i la mes llarga es $max.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Otra solucion:&lt;br /&gt;
&lt;br /&gt;
$my_array = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$otroarray = array_map('strlen', $my_array);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;La longitud mes curta es &amp;quot;. min($otroarray) .&amp;quot; i la mes llarga es &amp;quot;. max($otroarray).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
print_r($otroarray);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==== Exercici: Dibuixa asteriscs ====&lt;br /&gt;
Dibuixa amb PHP utilitzant asteriscs el següent dibuix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* &lt;br /&gt;
* * &lt;br /&gt;
* * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * &lt;br /&gt;
* * &lt;br /&gt;
* &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
$n=5;  &lt;br /&gt;
&lt;br /&gt;
for($i=1; $i&amp;lt;=$n; $i++)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
for($i=$n; $i&amp;gt;=1; $i--)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Escacs ====&lt;br /&gt;
Dibuixa una taula d'escacs com la que pots veure a continuació. &lt;br /&gt;
Table width=&amp;quot;270px&amp;quot; i cada cel·la ocupa 30px d'amplada i d'altura.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:escacs.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:solucio_escacs_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcions ===&lt;br /&gt;
&lt;br /&gt;
Les funcions son grup d'instruccions que poden ser cridades en qualsevol moment. Les funcions són útils per re-utilitzar codi de manera sencilla dintre de la nostra aplicació.&lt;br /&gt;
====Funcions definides per l’usuari====&lt;br /&gt;
L’usuari pot definir totes les funcions que necessiti. És imprescindible que el nom donat a la funció no estigui prohibit, és a dir, no es poden fer servir:&lt;br /&gt;
*paraules reservades (per exemple, echo), &lt;br /&gt;
*començar amb un nombre o un caràcter especial&lt;br /&gt;
*repetir el nom d’una funció dins un mateix àmbit. &lt;br /&gt;
Tot i que el PHP '''no farà cap distinció entre majúscules i minúscules''', es recomana utilitzar el nom de la funció idèntic a l’utilitzat en la declaració.&lt;br /&gt;
Les funcions poden rebre paràmetres. El pas de paràmetres d’entrada es fa escrivint entre parèntesis i a continuació del nom de la funció.&lt;br /&gt;
En l’exemple següent podeu veure com es declara la funció missatge i com, posteriorment, es crida passant-hi un paràmetre.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function missatge($argument)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;$argument&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
missatge(&amp;quot;Aquest és l’argument que es passa en aquest exemple.&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les funcions també podran retornar valors. Per fer-ho caldrà utilitzar la sentència '''return'''.&lt;br /&gt;
En l’exemple següent comprovareu com la funció suma, la qual rep dos paràmetres, retorna el resultat de sumar dos nombres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function suma ($valor1,$valor2)&lt;br /&gt;
{&lt;br /&gt;
	return($valor1+$valor2);&lt;br /&gt;
}&lt;br /&gt;
echo suma(4,6);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Funcions Internes====&lt;br /&gt;
El llenguatge PHP té funcions definides internament. Aquestes funcions són de gran utilitat per al programador i resulta imprescindible estudiarles i conèixer-ne les més importants.&lt;br /&gt;
&lt;br /&gt;
És possible que diverses funcions no es reconeguin en el vostre entorn de treball del PHP; el motiu d’això és que algunes funcions internes no s’han inclòs en la compilació, la qual cosa ha fet necessària una compilació dels mòduls que les contenen. Amb phpinfo() es poden veure les extensions carregades en la vostra configuració del PHP.&lt;br /&gt;
&lt;br /&gt;
Són funcions internes molt usuals ''echo, fprintf, print, printf i sprintf'', en què queda demostrat que el llenguatge PHP ja té definides funcions específiques que poden ser de gran utilitat per a l’usuari. &lt;br /&gt;
&lt;br /&gt;
Podeu mirar l’ajuda de PHP a la [https://www.php.net/manual/es/funcref.php pàgina oficial].&lt;br /&gt;
Funcions de Strings: [http://php.net/manual/en/ref.strings.php pàgina oficial].&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot codificar amb codificació ''md5'' el contingut d’una variable:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom = 'Blanca';&lt;br /&gt;
echo(&amp;quot;La codificació md5 de $nom és:&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
echo md5($nom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Exercici===&lt;br /&gt;
El código de encriptación md5 y sha están comprometido ya que son fáciles de desencriptar. ¿Qué algoritmo se debería utilizar?&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Algoritmes d'ordenació====&lt;br /&gt;
Segons el següent array &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fruits = array(&amp;quot;lemon&amp;quot;, &amp;quot;orange&amp;quot;, &amp;quot;banana&amp;quot;, &amp;quot;apple&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SORT''' Esta función ordena una matriz. Los elementos se organizarán de menor a mayor cuando se haya completado esta función.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
sort($cars);&lt;br /&gt;
&lt;br /&gt;
BMW&lt;br /&gt;
Toyota&lt;br /&gt;
Volvo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''RSORT''' Esta función ordena una matriz en orden inverso (de mayor a menor).&lt;br /&gt;
Nota: Esta función asigna nuevas claves para los elementos en la matriz. Eliminará todas las claves existentes que haya asignado, en lugar de simplemente reordenar las claves.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
rsort($cars);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volvo&lt;br /&gt;
Toyota&lt;br /&gt;
BMW&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''asort'''()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;345&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;3&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
asort($age)&lt;br /&gt;
&lt;br /&gt;
Array ( [Ben] =&amp;gt; 3 [Joe] =&amp;gt; 43 [Peter] =&amp;gt; 345 ) &lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''arsort''' ()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
arsort($age);&lt;br /&gt;
&lt;br /&gt;
Array ( [Peter] =&amp;gt; 345 [Joe] =&amp;gt; 43 [Ben] =&amp;gt; 3 ) &lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ksort''' ()&lt;br /&gt;
Ordena una matriz por clave, manteniendo la clave de las correlaciones de datos. Esto es útil principalmente para matrices asociativas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;200&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;99&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
ksort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Ben, Value=99&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''krsort'''()                &lt;br /&gt;
Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
krsort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Peter, Value=35&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=37&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''natsort''' ()&lt;br /&gt;
Esta función implementa un algoritmo de ordenamiento que ordena cadenas alfanuméricas en la forma en que lo haría un ser humano mientras mantiene asociaciones de clave / valor. Esto se describe como un &amp;quot;orden natural&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$array1 = $array2 = array(&amp;quot;img12.png&amp;quot;, &amp;quot;img10.png&amp;quot;, &amp;quot;img2.png&amp;quot;, &amp;quot;img1.png&amp;quot;);&lt;br /&gt;
sort($array1);&lt;br /&gt;
echo &amp;quot;Standard sorting\n&amp;quot;;print_r($array1);&lt;br /&gt;
natsort($array2);&lt;br /&gt;
echo &amp;quot;\nNatural order sorting\n&amp;quot;;print_r($array2);?&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The above example will output:&lt;br /&gt;
Standard sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; img1.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [2] =&amp;gt; img12.png&lt;br /&gt;
    [3] =&amp;gt; img2.png&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Natural order sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [3] =&amp;gt; img1.png&lt;br /&gt;
    [2] =&amp;gt; img2.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [0] =&amp;gt; img12.png&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
====Exercici: Ordenació ====&lt;br /&gt;
Crea una funció que ordeni un array. &lt;br /&gt;
*Per claus de menor a major i de major a menor&lt;br /&gt;
*Per valors de menor a major i de major a menor&lt;br /&gt;
&lt;br /&gt;
[[:Solucio_ordenacio]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Comprova minúscules ====&lt;br /&gt;
Crea una funció que comprovi si tots els caràcters d'un string son minúscules.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function is_str_lowercase($str1)  &lt;br /&gt;
   {  &lt;br /&gt;
    for ($sc = 0; $sc &amp;lt; strlen($str1); $sc++) {  &lt;br /&gt;
          if (ord($str1[$sc]) &amp;gt;= ord('A') &amp;amp;&amp;amp;  ord($str1[$sc]) &amp;lt;= ord('Z')) {    // ord — devuelve el valor ASCII de un caracter&lt;br /&gt;
      return false;  &lt;br /&gt;
         }  &lt;br /&gt;
         }  &lt;br /&gt;
      return true;  &lt;br /&gt;
       }  &lt;br /&gt;
var_dump(is_str_lowercase('abc def ghi'));  &lt;br /&gt;
var_dump(is_str_lowercase('abc dEf ghi'));  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
====Exercici: Primers====&lt;br /&gt;
Crea una funció que indiqui si un número és primer.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function IsPrime($n)  &lt;br /&gt;
{  &lt;br /&gt;
 for($x=2; $x&amp;lt;$n; $x++)  &lt;br /&gt;
   {  &lt;br /&gt;
      if($n %$x ==0)  &lt;br /&gt;
          {  &lt;br /&gt;
           return 0;  &lt;br /&gt;
          }  &lt;br /&gt;
    }  &lt;br /&gt;
  return 1;  &lt;br /&gt;
   }  &lt;br /&gt;
$a = IsPrime(3);  &lt;br /&gt;
if ($a==0)  &lt;br /&gt;
echo 'No es Primo.....';  &lt;br /&gt;
else  &lt;br /&gt;
echo 'ES primo..';  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici- Normalizar ===&lt;br /&gt;
&lt;br /&gt;
Tenemos una base de datos que sólo acepta nombres y apellidos SIN acentos, ni dieresis... por tanto, queremos que cuando escriba el usuario un nombre como &amp;quot;jÚlïÒ&amp;quot; lo normalice a &amp;quot;JULIO&amp;quot;. &lt;br /&gt;
  $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
&lt;br /&gt;
  $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
&lt;br /&gt;
Es interesante investigar sobre la función strtr&lt;br /&gt;
&lt;br /&gt;
solución:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UTF-8 es una codificación multibyte que puede representar cualquier carácter Unicode.&lt;br /&gt;
ISO 8859-1 es una codificación de un solo byte que puede representar los primeros 256 caracteres Unicode.&lt;br /&gt;
Ambos codifican ASCII exactamente de la misma manera.&lt;br /&gt;
&lt;br /&gt;
utf8_decode -&amp;gt;  Convierte una cadena con los caracteres codificados ISO-8859-1 con UTF-8 &lt;br /&gt;
&lt;br /&gt;
   //función que quita los acentos, dieresis, Ñ....&lt;br /&gt;
    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
    $cadena = utf8_decode($cadena);&lt;br /&gt;
    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);&lt;br /&gt;
    $cadena = strtoupper($cadena);&lt;br /&gt;
    return utf8_encode($cadena);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 //$cadena = strtr(utf8_decode($cadena), utf8_decode($originales), $modificadas);   //Altra solució&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipus de Dades en PHP ==&lt;br /&gt;
&lt;br /&gt;
*'''Boolean'''&lt;br /&gt;
És un tipus de dades molt simple que pot representar un valor cert (TRUE) o fals (FALSE). Aquest tipus de dades s’utilitza molt en estructures de control. Si feu conversió de dades és molt important que tingueu en&lt;br /&gt;
compte que es considerarà fals el nombre enter, la cadena 0 o una cadena buida, una matriu buida, un objecte sense variables, el tipus NULL i els objectes SimpleXML que s’hagin creat d’etiquetes buides.&lt;br /&gt;
&lt;br /&gt;
*'''Integer'''&lt;br /&gt;
Aquest tipus representa nombres no fraccionables per sota de la unitat. Poden ser positius i negatius. Aquests nombres enters els podeu representar en notació decimal, hexadecimal o octal. La plataforma sobre la&lt;br /&gt;
qual treballeu determinarà la mida de les variables enteres. El PHP forçarà un canvi de tipus a flotant si es produeix un desbordament, tant si és positiu com negatiu. A continuació, es mostren dos exemples de variables enteres.&lt;br /&gt;
&lt;br /&gt;
*'''float'''&lt;br /&gt;
Aquest tipus fa referència als nombres de coma flotant, i normalment treballa amb una precisió aproximada de catorze dígits decimals. A continuació, es mostra un exemple d’una variable amb coma flotant.&lt;br /&gt;
&lt;br /&gt;
*'''String'''&lt;br /&gt;
Es tracta d’una cadena de caràcters. El llenguatge del PHP no imposa un límit a la mida d’aquestes cadenes; ara bé, no oblideu que el límit el marcarà la memòria del maquinari en què estigui funcionant el PHP. Aquí&lt;br /&gt;
teniu diversos exemples de cadenes.&lt;br /&gt;
&lt;br /&gt;
*'''array'''&lt;br /&gt;
un array és una matriu, d’una dimensió o més, que conté dades que s’associen segons unes claus. És un tipus molt útil, i comprovareu que el seu ús té una gran potència. Per crear una matriu podeu utilitzar la paraula&lt;br /&gt;
reservada ''array()'' o bé acompanyar el nom de la variable amb ''[ ]''.&lt;br /&gt;
&lt;br /&gt;
*'''object'''&lt;br /&gt;
aquest tipus d’objecte està previst en el llenguatge PHP perquè suporta el llenguatge orientat a objectes. Un objecte és un ítem amb unes característiques i funcionalitats marcades per la classe a la qual pertany. Per crear un objecte cal utilitzar la partícula ''new''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//tipus boolean:&lt;br /&gt;
$sortir=FALSE;&lt;br /&gt;
$entrar=TRUE;&lt;br /&gt;
&lt;br /&gt;
//tipus integer:&lt;br /&gt;
$positiu=3451;&lt;br /&gt;
$negatiu= − 4345&lt;br /&gt;
&lt;br /&gt;
//tipus float:&lt;br /&gt;
$amb_coma=34.5;&lt;br /&gt;
&lt;br /&gt;
//tipus string:&lt;br /&gt;
$nom=’Wayan’;&lt;br /&gt;
$salutacio=&amp;quot;Hola $nom!&amp;quot;;&lt;br /&gt;
echo $salutacio.&amp;quot; Benvingut&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus array:&lt;br /&gt;
$grau_cicles=array(&amp;quot;superior&amp;quot;,&amp;quot;mitja&amp;quot;);&lt;br /&gt;
$families[]=&amp;quot;Informàtica&amp;quot;;&lt;br /&gt;
$families[]=&amp;quot;Electrònica&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus objecte:&lt;br /&gt;
class Alumne {&lt;br /&gt;
public function matricular($nom)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Ja estàs matriculat $nom&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$alumne1=new Alumne();&lt;br /&gt;
$alumne1−&amp;gt;matricular(’Made’);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Creació Classes/ OBJECTES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Coche&lt;br /&gt;
{&lt;br /&gt;
	static $numruedas = 4;&lt;br /&gt;
	var $color;&lt;br /&gt;
	var $posx;&lt;br /&gt;
	var $posy;&lt;br /&gt;
	var $velocidad;&lt;br /&gt;
	function __construct($color, $posx, $posy)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;color = $color;&lt;br /&gt;
		$this-&amp;gt;posx = $posx;&lt;br /&gt;
		$this-&amp;gt;posy = $posy;&lt;br /&gt;
		$this-&amp;gt;velocidad = 0;&lt;br /&gt;
	}&lt;br /&gt;
	function mover($x, $y)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;posx = $x;&lt;br /&gt;
		$this-&amp;gt;posy = $y;&lt;br /&gt;
	}&lt;br /&gt;
	function acelerar()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;velocidad = $this-&amp;gt;velocidad + 10;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
	function frenar()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;velocidad &amp;gt; 10)&lt;br /&gt;
			$this-&amp;gt;velocidad = $this-&amp;gt;velocidad - 10;&lt;br /&gt;
		else&lt;br /&gt;
			$this-&amp;gt;velocidad = 0;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$car = new Coche(&amp;quot;verde&amp;quot;,10,10);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les dades especials ===&lt;br /&gt;
*'''resource'''&lt;br /&gt;
La variable que pertany a aquest tipus farà referència a un recurs extern. Determinades funcions faran ús d’aquest recurs. Per exemple, la funció mysql_db_query, que té la funció d’enviar una petició mySQL, retorna un tipus resource. En l’exemple següent la variable $resultat és de tipus resource:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query=&amp;quot;SELECT * FROM alumnes&amp;quot;;&lt;br /&gt;
$resultat=mysql_query($query);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''NULL'''&lt;br /&gt;
Quan necessiteu una variable que no tingui cap valor haureu d’utilitzar aquest tipus.&lt;br /&gt;
&lt;br /&gt;
===Els pseudotipus===&lt;br /&gt;
* '''mixed''': aquest pseudotipus indica que la variable en questió pot emmagatzemar múltiples tipus.&lt;br /&gt;
* '''number''': indica que la variable pot contenir un valor enter o de coma flotant.&lt;br /&gt;
* '''callback''': utilitzareu aquest pseudotipus per emmagatzemar crides de retorn generades per funcions de l’usuari.&lt;br /&gt;
&lt;br /&gt;
=== Conversions de tipus ===&lt;br /&gt;
&lt;br /&gt;
Per forçar un canvi de tipus haureu d’especificar entre parèntesis el tipus al qual voleu fer la conversió i col·locar-lo davant la variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Senténcia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Modelat a &lt;br /&gt;
|-&lt;br /&gt;
| (integer), (int) ||integer.&lt;br /&gt;
|-&lt;br /&gt;
| (boolean)||boolean&lt;br /&gt;
|-&lt;br /&gt;
| (float), (double), (real) ||float&lt;br /&gt;
|-&lt;br /&gt;
| (string) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (binary) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (array)||array&lt;br /&gt;
|-&lt;br /&gt;
| (object)|| object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Sense modelar 27/5: &amp;quot;.(27/5).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;I ara ja modelat: &amp;quot;.(integer)(27/5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants===&lt;br /&gt;
Una constant és un identificador (nom) per expressar un valor simple. Com el nom suggereix, aquest valor no pot variar durant l'execució del script. (A excepció de les [[http://php.net/manual/es/language.constants.predefined.php constants màgiques]], que en realitat no són constants). Una constant és sensible a majúscules per defecte. Per convenció, els identificadors de constants sempre solen declarar-se en majúscules.&lt;br /&gt;
&lt;br /&gt;
El nom d'una constant segueix les mateixes regles que qualsevol altra etiqueta de PHP. Un nom de constant vàlid comença per una lletra o subguió, seguit per qualsevol nombre o lletres, nombres o subguions. Usant una expressió regular, es representaria de la següent manera: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('MIN_VALUE', '0.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
define('MAX_VALUE', '1.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
echo MIN_VALUE;&lt;br /&gt;
//const MIN_VALUE = 0.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
//const MAX_VALUE = 1.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
class Exemple1&lt;br /&gt;
{&lt;br /&gt;
  //define('MIN_VALUE', '0.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
  //define('MAX_VALUE', '1.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  const MIN_VALUE = 0.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
  const MAX_VALUE = 1.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  public static function getMinValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MIN_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static function getMaxValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MAX_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo Exemple1::getMinValue();   //invocamos clase &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Cuál es la diferencia entre $this y self:: ?'''&lt;br /&gt;
&lt;br /&gt;
Uno usa $this para referenciar al objeto actual, y se utiliza self:: para referenciar la clase actual. Se utiliza $this-&amp;gt;nombre para nombres no estáticos y se utiliza self::nombres para nombres estáticos.&lt;br /&gt;
&lt;br /&gt;
=== Variables predefinides ===&lt;br /&gt;
&lt;br /&gt;
En PHP hi ha una sèrie de variables predefinides que resulten de gran ajuda per al programador. Dins d’aquestes variables predefinides cal destacar un gran grup, el grup de les anomenades superglobals.&lt;br /&gt;
&lt;br /&gt;
Les variables '''superglobals''' són variables que sempre estan disponibles en tots els àmbits.&lt;br /&gt;
&lt;br /&gt;
*'''$GLOBALS''':fa referència a totes les variables disponibles en l’àmbit global. Es tracta d’una variable de tipus matriu associativa.&lt;br /&gt;
En l’exemple següent es recorre la variable superglobal $GLOBALS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$una_variable=&amp;quot;Hola&amp;quot;;&lt;br /&gt;
$una_altra_variable=&amp;quot;Com va?&amp;quot;;&lt;br /&gt;
foreach ($GLOBALS as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;GLOBALS[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_SERVER''':ofereix informació molt últil sobre el servidor i l’entorn d’execució. Els valors que emmagatzema són generats pel navegador web.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*Executeu-lo i veureu un seguit de dades&lt;br /&gt;
referents a la màquina que fa de servidor del PHP. Entre altres coses, identificareu&lt;br /&gt;
el nom de la màquina, la versió del navegador, la versió del servidor web, la&lt;br /&gt;
ubicació de fitxers importants i un llarg etcètera.*/&lt;br /&gt;
&lt;br /&gt;
foreach ($_SERVER as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;SERVER[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_GET''': correspon a la variable GET del protocol HTTP. Emmagatzema els valors de les variables que es trasmeten per mitjà del protocol HTTP mitjançant el mètode GET. El seu ús és molt normal en formularis.&lt;br /&gt;
&lt;br /&gt;
*'''$_POST''': correspon a la variable POST del protocol HTTP. Emmagatzema els valors de les variables que es transmeten per mitjà del protocol HTTP mitjançant el mètode POST. El seu ús és, generalment, més adequat que el mètode GET per a temes de seguretat.&lt;br /&gt;
&lt;br /&gt;
*'''$_COOKIE''': és una variable de tipus matriu associativa que emmagatzemarà les variables passades a l’script per mitjà de les galetes de l’HTML.&lt;br /&gt;
&lt;br /&gt;
*'''$_REQUEST''': és una matriu associativa que conté les dades de $_GET ,$_POST i $_COOKIE.&lt;br /&gt;
&lt;br /&gt;
*'''$_FILES''': aquesta variable s’utilitza en la càrrega de fitxers per mitjà del protocol HTTP. El mètode utilitzat és el POST.&lt;br /&gt;
&lt;br /&gt;
*'''$_SESSION''': conté les variables de sessió disponibles en l’script actual.&lt;br /&gt;
&lt;br /&gt;
*'''$_ENV''': conté les variables d’entorn.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Detecció del Navegador ===&lt;br /&gt;
Escriu un script en PHP que detecti el navegador que està utilitzant el client que ha demanat la pàgina.&lt;br /&gt;
&lt;br /&gt;
[[:solució_detecció_navegador_php]]&lt;br /&gt;
&lt;br /&gt;
=== Variables estàtiques ===&lt;br /&gt;
Les variables estàtiques sempre mantenen el valor encara que el programa abandoni l’àmbit de la variable, i existeixen només en l’àmbit local de les funcions. No s’hi pot accedir fora d’aquest àmbit.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function comptador()&lt;br /&gt;
{&lt;br /&gt;
   $a = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador: &amp;quot;.$a.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $a++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function comptadorEstatic()&lt;br /&gt;
{&lt;br /&gt;
   static $b = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador estàtic: &amp;quot;.$b.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $b++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for($i=0;$i&amp;lt;3;$i++)&lt;br /&gt;
{&lt;br /&gt;
   comptador();&lt;br /&gt;
   comptadorEstatic();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integració PHP ==&lt;br /&gt;
&lt;br /&gt;
Normalment trobareu el llenguatge de programació PHP dins d’altres llenguatges.&lt;br /&gt;
El més usual és escriure codi en PHP dins de codi HTML.&lt;br /&gt;
&lt;br /&gt;
Heu de recordar que el codi PHP és interpretat pel servidor, i els resultats es mostren en el navegador que utilitzeu. La simbiosi que es crea entre el PHP i l’HTML permet al PHP generar HTML i a l’HTML passar dades al PHP.&lt;br /&gt;
&lt;br /&gt;
=== PHP dintre de PHP ===&lt;br /&gt;
&lt;br /&gt;
==== Include vs Require ====&lt;br /&gt;
És possible inserir el contingut d'un fitxer PHP en un altre arxiu PHP (abans que el servidor l'executi), amb la declaració d'incloure o requerir. Les sentències d'inclusió i requereixen són idèntics , excepte en cas de fallada :&lt;br /&gt;
&lt;br /&gt;
*'''requerir''' (require) produirà un error fatal ( E_COMPILE_ERROR ) i aturar la seqüència de comandaments&lt;br /&gt;
*'''inclou''' (include) només produirà una advertència ( E_WARNING ) i el guió seguirà&lt;br /&gt;
&lt;br /&gt;
Per tant, si voleu que l'execució continuï mostrant als usuaris la sortida, fins i tot si el fitxer d'inclusió falta, utilitzeu la instrucció d'inclusió. Altrament, en cas de FrameWork, CMS, o amb aplicacions PHP complexes, sempre utilitzeu la instrucció que requereix el fitxer per a poder continuar l'execució. Això ajudarà a evitar posar en perill la seguretat i la integritat de l'aplicació, per si de cas un arxiu clau falta accidentalment.&lt;br /&gt;
&lt;br /&gt;
Inclusió d'arxius estalvia molta feina. Això significa que pots crear una capçalera, peu de pàgina o arxiu de menú estàndard per a totes les pàgines web. Llavors, quan la capçalera ha de ser actualitzada, només s'ha d'actualitzar la capçalera inclouen l'arxiu.&lt;br /&gt;
&lt;br /&gt;
'''Sintaxi'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include 'filename.php';&lt;br /&gt;
&lt;br /&gt;
//or&lt;br /&gt;
&lt;br /&gt;
require 'Otherfilename.php';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Include_once vs Require_once ====&lt;br /&gt;
Require_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a require.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Include_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a include.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redireccions ====&lt;br /&gt;
* Son sentencies on s'envia al navegador una nova pàgina. La pàgina que tenia el navegador desapareix i apareix una nova pàgina, la que està definida al location: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
header(&amp;quot;location: novapàgina.php&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici PHP amb cap i peus ===&lt;br /&gt;
&lt;br /&gt;
L’objectiu d’aquesta activitat és mostrar el funcionament de la inclusió d’arxius a PHP. Fer servir includes us permet simplificar el codi de les pàgines. Per exemple, podeu afegir un fitxer de capçalera (cap.php) i un de peu (peu.php) amb els continguts comuns de totes les pàgines del vostre lloc (el bàner, el menú, la informació general). Senzillament incloent aquests fitxers a totes les pàgines, podeu aconseguir una estètica comú. Si heu de canviar en algun moment la capçalera, modificant l’arxiu cap.php ho tindreu modificat a totes les pàgines del web.&lt;br /&gt;
Feu una pàgina web amb continguts estructurats amb dos fitxers: cap.php i peu.php&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
[[:solucio_cap_peus_php]]&lt;br /&gt;
&lt;br /&gt;
[[:solucio_cap_peus_php2]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP i Formularis HTML ===&lt;br /&gt;
El formulari electrònic és una eina molt potent fortament establida a Internet. Permet l’intercanvi o la introducció de dades entre usuaris d’una manera ràpida i senzilla. Un formulari permet la interactivitat i és el detonant que converteix Internet en l’eina més poderosa per enviar informació a un destinatari.&lt;br /&gt;
&lt;br /&gt;
El llenguatge PHP representa un salt qualitatiu enorme en l’ús de formularis. L’HTML no és un llenguatge creat pensant a utilitzar formularis, sinó que es va crear amb altres objectius. El llenguatge PHP té un gran potencial en la gestió de dades; per tant, quan HTML i PHP treballen juntament amb formularis ens trobem amb un binomi ideal.&lt;br /&gt;
&lt;br /&gt;
====Preparació de l’HTML====&lt;br /&gt;
El llenguatge HTML mostrarà la façana que l’usuari veurà a la pantalla del navegador. El PHP serà darrere d’aquesta primera pantalla i treballarà amb les dades.&lt;br /&gt;
El primer que cal programar per fer servir un formulari dissenyat en PHP és crear&lt;br /&gt;
el codi HTML. Un formulari en HTML s’emmarca entre les etiquetes &amp;lt;FORM&amp;gt; i &amp;lt;/FORM&amp;gt;. Per manipular aquest formulari s’utilitza l’atribut ''ACTION''.&lt;br /&gt;
L’atribut ''ACTION'' indica el programa que s’encarrega de manipular les dades, tasca que encomanareu a un codi dissenyat en llenguatge PHP.&lt;br /&gt;
L’etiqueta &amp;lt;form&amp;gt; us permet fer servir dos mètodes per enviar informació: '''GET''' i '''POST'''.&lt;br /&gt;
El mètode '''GET''' és molt útil en motors de cerca, però no ofereix gaire seguretat, ja que les dades que envia es poden veure en l’URL del navegador.&lt;br /&gt;
El mètode '''POST''' és molt més segur, ja que quan el servidor detecta que el mètode de transacció d’informació és '''POST''' espera rebre dades immediatament sense fer servir l’URL, la qual cosa implica que aquestes dades no seran visibles en l’URL.&lt;br /&gt;
Exemple de Formulari:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;El nostre primer exemple amb formularis&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Introdueix el teu nom i prem el botó!&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;FORM ACTION=&amp;quot;contesta.php&amp;quot; METHOD=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Si us plau, escriu el teu nom:&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;INPUT TYPE=&amp;quot;submit&amp;quot; VALUE=&amp;quot;Enviar&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/FORM&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Com valora el PHP un formulari ====&lt;br /&gt;
En el moment d’enviar les dades des del formulari d’una pàgina HTML a un fitxer escrit en PHP s’ha de tenir en compte que l’atribut ''NAME'' emmagatzema el valor.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Resposta a la petició de dades&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;...Continuem amb l’exemple!&amp;lt;/H1&amp;gt;&lt;br /&gt;
El teu nom és:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_POST['nom'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En el moment en què s’envien dades del formulari HTML cap a un fitxer PHP, aquestes dades apareixeran dins d’un array superglobal amb tots els seus valors.&lt;br /&gt;
&lt;br /&gt;
=== Exercici Mini Calculadora ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar una calculadora de sólo SUMA, para ello tendremos dos inputs y un botón, cuando se aprete el botón deberá enviar enviar el formulario al server haciendo la operación y mostrándola.&lt;br /&gt;
 &lt;br /&gt;
=== Exercici Formulari amb Vectors ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar un formulario en el servidor que genere 10 inputs y un botón, a continuación el servidor recogerá todos los datos los mostrará y calculará la suma total. &lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
:[[solu_vector_input]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Les matrius associatives i els formularis====&lt;br /&gt;
Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu ús, però, serà condicionat pel mètode utilitzat en el pas de dades en el codi HTML. Així, si en el codi HTMLel mètode és '''POST''' haureu de fer servir la matriu associativa '''$_POST'''; en canvi, si heu fet servir el mètode '''GET''' en el codi HTML, haureu de fer servir la matriu associativa '''$_GET'''.&lt;br /&gt;
&lt;br /&gt;
Per accedir als valors emmagatzemats en les matrius associatives fareu servir l’atribut corresponent '''NAME''' de l’HTML com a índex de la matriu associativa. &lt;br /&gt;
&lt;br /&gt;
No heu d’oblidar que el PHP és un llenguatge de programació que, entre altres coses, us permet utilitzar bucles. En el formulari següent es defineix una selecció múltiple, en què podreu marcar els navegadors que coneixeu.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Un exemple amb un formulari&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;seleccioMultiple.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Nom: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Correu electrònic: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Navegadors que coneixes: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;select name=&amp;quot;navegadors[]&amp;quot; multiple&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Chrome&amp;quot;&amp;gt;Chrome&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;MozillaFirefox&amp;quot;&amp;gt;Mozilla Firefox&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Safari&amp;quot;&amp;gt;Safari&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Opera&amp;quot;&amp;gt;Opera&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Lynx&amp;quot;&amp;gt;Lynx&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquí us trobareu amb un petit problema. Per recuperar els valors introduïts com a nom i correu electrònic no hi ha cap problema, la matriu $_POST us permetrà un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecció múltiple, però, sorgeix un petit problema. A diferència dels casos anteriors, ara navegadors pot contenir més d’un valor, com ho fareu per mostrar tots els valors per pantalla? La solució és utilitzar un bucle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach ($_POST['navegadors'] as $opcio)&lt;br /&gt;
echo $opcio.&amp;quot;\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un altre exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ($_POST) {&lt;br /&gt;
    echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
    //echo htmlspecialchars(print_r($_POST, true));&lt;br /&gt;
    print_r($_POST);&lt;br /&gt;
    print_r($_POST['personal']);&lt;br /&gt;
    print_r($_POST['personal']['nombre']);&lt;br /&gt;
    echo '&amp;lt;/pre&amp;gt;';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
    Nombre:  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[nombre]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Email:   &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[email]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Cerveza: &amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;select multiple name=&amp;quot;cerveza[]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;warthog&amp;quot;&amp;gt;Warthog&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;guinness&amp;quot;&amp;gt;Guinness&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;stuttgarter&amp;quot;&amp;gt;Stuttgarter Schwabenbräu&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;¡enviarme!&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode GET ===&lt;br /&gt;
*El mètode GET produeix una cadena llarga que apareix en els logs del servidor i a la URL del navegador.&lt;br /&gt;
&lt;br /&gt;
*GET envia les dades usant la URL&lt;br /&gt;
&lt;br /&gt;
*El mètode GET es limita a enviar fins a només 1.024 caràcters .&lt;br /&gt;
&lt;br /&gt;
*Mai utilitzeu el mètode GET, si voleu enviar la contrasenya o una altra informació confidencial al servidor .&lt;br /&gt;
&lt;br /&gt;
*GET no pot ser utilitzat per enviar dades binàries, com imatges o documents de text, al servidor .&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode GET es pot accedir mitjançant la variable d'entorn QUERY_STRING.&lt;br /&gt;
&lt;br /&gt;
*PHP proveeix la matriu associativa $_GET per accedeix a tota la informació que s'enviï mitjançant el mètode GET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$PHP_SELF = $_SERVER['PHP_SELF'];&lt;br /&gt;
echo $PHP_SELF ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if( isset($_GET[&amp;quot;name&amp;quot;])||  isset($_GET[&amp;quot;age&amp;quot;]) )&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_GET['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_GET['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt; method=&amp;quot;GET&amp;quot;&amp;gt;&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode POST ===&lt;br /&gt;
&lt;br /&gt;
*POST envía los datos de forma que no podemos verlos (en un segundo plano u &amp;quot;ocultos&amp;quot; al usuario).&lt;br /&gt;
&lt;br /&gt;
*El mètode POST no té cap restricció en la mida de les dades a enviar.&lt;br /&gt;
&lt;br /&gt;
*El mètode POST es pot utilitzar per enviar ASCII, així com dades binàries.&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode POST passa per la capçalera HTTP. La seguretat depèn de protocol HTTP. Mitjançant l'ús d'HTTP segur pots assegurar-te que la seva informació està segura .&lt;br /&gt;
&lt;br /&gt;
*El PHP proveeix de la matriu associativa $ _POST per accedeix a tota la informació enviada pel mètode POST.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(isset($_POST[&amp;quot;name&amp;quot;]) ||  isset($_POST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_POST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_POST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;   &amp;lt;!--&amp;lt;?php $_PHP_SELF ?&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== $_PHP_SELF ===&lt;br /&gt;
La variable $_PHP_SELF conté el nom del script PHP (pàgina php) el qual està executant.  ESTÁ DESFASADO USAR $_SERVER['PHP_SELF']&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(  isset($_REQUEST[&amp;quot;name&amp;quot;]) ||  isset($_REQUEST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_REQUEST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_REQUEST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo formulario POST ===&lt;br /&gt;
&lt;br /&gt;
Dissenyar una pàgina web simple amb php que demani a lusuari el preu de tres productes diferents en tres&lt;br /&gt;
establiments diferents. Exemple:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Form1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Un cop s'introdueixi aquesta&lt;br /&gt;
informació al formulari, s'ha de mostrar el resultat, dels tres preus introduïts i el preu mitjà del producte.&lt;br /&gt;
&lt;br /&gt;
  DATOS RECIBIDOS&lt;br /&gt;
  Precio Guitarra Martin D18 en Ubisa: 4.200 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Thomann 3.800 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Alfasonic 4.100 euros&lt;br /&gt;
&lt;br /&gt;
  El precio medio del producto es de 4.0333333333333 euros&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;PHP Calcula precios&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;form name=&amp;quot;formularioDatos&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;01-Formulari.php&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt; CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Ubisa, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;input value=&amp;quot;Calcular&amp;quot; type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
01-Formulari.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php //Ejemplo aprenderaprogramar.com&lt;br /&gt;
$precio1 = $_POST['precio1'];&lt;br /&gt;
&lt;br /&gt;
$media = ($precio1);&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; DATOS RECIBIDOS&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Ubisa: &amp;quot;. $precio1. &amp;quot; euros&amp;quot;;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; El precio medio del producto es de &amp;quot;. $media. &amp;quot; euros&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Acceso a Ficheros ===&lt;br /&gt;
&lt;br /&gt;
'''Abrir y cerrar el descriptor de ficheros'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $fitxer = fopen(&amp;quot;datos.txt&amp;quot;,&amp;quot;a&amp;quot;);&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'r' 	Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero. &lt;br /&gt;
'w+' 	Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear. &lt;br /&gt;
'a+' 	Apertura para lectura y escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() no tiene efecto, las escrituras siempre son pospuestas. &lt;br /&gt;
&lt;br /&gt;
'''Escribir datos en un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  $fp = fopen('datos.txt', 'a');&lt;br /&gt;
    fwrite($fp, 'Julio');&lt;br /&gt;
    fwrite($fp, 'Noguera');&lt;br /&gt;
    fclose($fp);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Leer datos de un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 $fitxer=fopen(&amp;quot;datos.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while(!feof($fitxer)){&lt;br /&gt;
       $line = fgets($fitxer);&lt;br /&gt;
       echo $line;&lt;br /&gt;
    }&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más info&lt;br /&gt;
http://www.php.net/manual/es/function.fopen.php&lt;br /&gt;
http://www.php.net/manual/es/function.fgets.php&lt;br /&gt;
http://www.php.net/manual/es/function.fwrite.php&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Formulari Insti // Acceso a ficheros ===&lt;br /&gt;
&lt;br /&gt;
Se desea crear un formulario donde se introduzcan los campos de nombre, apellidos, dni, contraseña, cuando se clique el botón de enviar, el servidor debe recibir todos los parámetros de ese usuario y escribirlos en un fichero de texto (fopen/fwrite), el siguiente usuario que rellene el formulario escribirá a continuación, después debe listar todos los ficheros que tiene el servidor (system()/shell_exec).&lt;br /&gt;
&lt;br /&gt;
solució: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
if ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;) { &lt;br /&gt;
&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    $nombre = $_POST['nombre'];  //recibe los parámetros del formulario&lt;br /&gt;
    $apellido = $_POST['apellido'];&lt;br /&gt;
    $dni = $_POST['dni'];&lt;br /&gt;
    $pass = $_POST['pass'];&lt;br /&gt;
&lt;br /&gt;
    $file = fopen(&amp;quot;clase.txt&amp;quot;, &amp;quot;a&amp;quot;);    //crea un descriptor de fichero&lt;br /&gt;
    fwrite($file, ($nombre) . &amp;quot;,&amp;quot; . ($apellido) . &amp;quot;,&amp;quot; . ($dni) . &amp;quot;,&amp;quot; . ($pass) . &amp;quot;\n&amp;quot;);  //introduce datos dentro del fichero&lt;br /&gt;
    fclose($file);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    $usuarioEnSistema = system('cat clase.txt');     //ejecuta terminal linux&lt;br /&gt;
   //$usuario = shell_exec('cat clase.txt'');   // comando más antiguo&lt;br /&gt;
&lt;br /&gt;
    echo $usuarioEnSistema;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nombre&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;apellido&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dni&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;pass&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Exercici: Calculadora PHP ===&lt;br /&gt;
Crea un formulari amb un únic TextBox on s'indiqui les operacions matemàtiques a realitzar. Envia el contingut del TextBox amb el mètode POST i realitza les operacions. Imprimeix per pantalla el resultat.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Solucio_calculadora_m6]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ISSET ===&lt;br /&gt;
&lt;br /&gt;
isset -&amp;gt; Devuelve '''true''' si la variable existe y tiene un valor distinto de null, false de lo contrario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var_dump( isset($var) );   //isset() devuelve '''false''' por que $var no ha sido definida&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''false''' aunque la variable haya sido declarada pues su valor es NULL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var = &amp;quot;&amp;quot;;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''true'''. El valor ya no es nulo aunque esté vacío&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Y cuando deberías usar isset()?'''&lt;br /&gt;
&lt;br /&gt;
Siempre y cuando que quieras comprobar que la variable existe (variable inicializada), un ejemplo bueno sería si quieres saber si se ha mandado un formulario:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;campo1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if (isset($_POST['submit']) {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''isset(), is_null() y empty(): Diferencias y ejemplos de uso'''&lt;br /&gt;
&lt;br /&gt;
https://cybmeta.com/isset-is_null-y-empty-diferencias-y-ejemplos-de-uso&lt;br /&gt;
&lt;br /&gt;
https://es.stackoverflow.com/questions/32133/como-y-cuando-se-usan-isset-y-empty-correctamente&lt;br /&gt;
&lt;br /&gt;
=== Exercici enviament de dades ===&lt;br /&gt;
És popular el disseny d’un document web, en què el mateix document conté la part del formulari HTML i el codi PHP que agafa les dades i les processa. Aquest procediment pot resultar estrany en principi, ja que esteu esperant dos documents ben diferenciats. Així i tot val la pena que veieu aquesta forma de treballar i decidiu si us resulta útil o no. Per fer-ho, simplement heu de fusionar els dos documents (el que envia les dades i el que les rep) en un document únic HTML+PHP de dues parts amb la següent estructura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(primera vegada que s'entra al document)&lt;br /&gt;
{&lt;br /&gt;
crear formulari HTML i enviar-ho al propi document&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
rebre les dades a través de POST o GET&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Feu un document amb aquestes característiques que enviï les següents dades:&lt;br /&gt;
*nom&lt;br /&gt;
*cognom&lt;br /&gt;
*contrasenya&lt;br /&gt;
*si l’usuari és alumne o professor&lt;br /&gt;
*si l’usuari és actiu o no&lt;br /&gt;
*foto (únicament el nom del fitxer)&lt;br /&gt;
*edat (entre 18 i 99)&lt;br /&gt;
*comentaris&lt;br /&gt;
*un camp ocult amb el nom ocult i valor prova&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[:solucio_enviament_dades_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Galetes ===&lt;br /&gt;
Les galetes són uns fitxers de text que emmagatzemen informació a l’ordinador client referent a la visita d’un usuari a una pàgina web.&lt;br /&gt;
Les galetes no són un acte d’intromissió per part de la pàgina web visitada; simplement, són una font d’informació molt útil per augmentar l’eficiència en l’accés.&lt;br /&gt;
Les galetes tenen una mida màxima d’1K i caduquen, la qual cosa fa molt difícil que s’utilitzin amb fins malintencionats. A més, únicament pot consultar la galeta el web que l’ha dipositada, la informació que conté no és visible per a la resta de pàgines web.&lt;br /&gt;
&lt;br /&gt;
Un ús molt freqüent de les galetes és emmagatzemar un perfil d’usuari. Així s’aconsegueix que cada vegada que el mateix usuari accedeix a un web, aquest en conegui les preferències i li mostri directament els continguts més adequats.&lt;br /&gt;
&lt;br /&gt;
Les galetes ajuden els programadors a crear un entorn més adequat per a l’usuari visitant. Moltes pàgines web permeten canviar la mida del text, els colors de la pàgina, la disposició d’alguns continguts, etc. Una vegada l’usuari ha modificat al seu gust l’aspecte de la pàgina web, aquestes dades s’emmagatzemen per a la propera visita.&lt;br /&gt;
&lt;br /&gt;
Importante: las cookies se envían al cliente mediante encabezados HTTP. Como cualquier otro encabezado, las cookies se deben enviar antes que cualquier salida que genere la página (antes que &amp;lt;html&amp;gt;, &amp;lt;head&amp;gt; o un simple espacio en blanco). &lt;br /&gt;
&lt;br /&gt;
'''Funcions del PHP per treballar amb galetes'''&lt;br /&gt;
&lt;br /&gt;
La funció que s’utilitza en PHP per crear galetes és setcookie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
bool setcookie(string $nom [, string $valor [, int $caduca= 0[, string $ruta [, string $domini [, bool $seguretat= false [, bool $nomeshttp=false]]]]]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* $nom: és obligatori i indica el nom que donareu a la galeta, la resta de paràmetres són opcionals.&lt;br /&gt;
* $valor: és el valor que tindrà la galeta.&lt;br /&gt;
* $caduca: indica els segons que té de vida la galeta; si no s’indica res la galeta deixarà d’existir quan finalitzi la sessió de l’usuari.&lt;br /&gt;
* $ruta: indica on podeu trobar la galeta dins el servidor.&lt;br /&gt;
Si no ponemos la ruta (Path), la cookie sólo se puede usar en páginas que se encuentren en el mismo directorio que la página que la creó. Si queremos que se utilice en un directorio en concreto debemos añadir la ruta.&lt;br /&gt;
&lt;br /&gt;
//Cookie creada en el directorio /registro/login&lt;br /&gt;
&lt;br /&gt;
//Si queremos que las páginas del directorio raíz / puedan acceder a la cookie&lt;br /&gt;
&lt;br /&gt;
* $domini: marca el domini en què la galeta està disponible.&lt;br /&gt;
* $seguretat: tindrà el valor TRUE si voleu que la galeta només s’utilitzi en una connexió segura (conexió HTTPs), i FALSE (que és el valor per defecte), si no és necessari un cert grau de seguretat.&lt;br /&gt;
* $nomeshttp: si té per valor TRUE marcarà que la galeta solament és accessible si s’utilitza el protocol HTTP.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
setcookie(&amp;quot;nom&amp;quot;, &amp;quot;Maadiva&amp;quot;, 3600, &amp;quot;/&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El segon fitxer s’encarregarà de consultar a la matriu associativa '''$_COOKIE''' el valor de la galeta indicada, que en aquest cas seria nom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_COOKIE[&amp;quot;nom&amp;quot;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
setcookie(&amp;quot;valor&amp;quot;, 1, time() + 30);    //time() tiempo desde que se originó unix.&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);    //no muestra todas las cookies por temas de seguridad&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unset($_COOKIE[&amp;quot;valor&amp;quot;]);  //otra forma setcookie('valor', 1, expire);  // setcookie(&amp;quot;valor&amp;quot;, 1, time() - 30);&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Se desea que cuente el número de visitas que realiza un usuario al visitar la página; este contador conserva su valor durante un año aún a pesar de que un usuario cierre el navegador y tarde días en volver a visitar la página.&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_contador_galletas]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Les cookies us permeten desar informació al navegador que estarà disponible més endavant pel vostre web. Per exemple, podeu desar la configuració personal de l’usuari o la llengua en què ha escollit visitar el web. La propera vegada que l’usuari visiti el web, el vostre codi PHP podrà obtenir aquesta informació desada i presentar a l’usuari el web amb la seva configuració personal o la llengua escollida. És important destacar que les cookies queden desades al navegador de l’usuari i no al servidor web.&lt;br /&gt;
&lt;br /&gt;
Feu un web amb dos fitxers. El primer, index.php, s’encarregarà d’obtenir el nom de l’usuari i la llengua que vol fer servir per defecte entre una llista desplegable mitjançant un formulari. Enviarà aquestes dades a un altre fitxer, cookie.php, que desarà la informació a les cookies.&lt;br /&gt;
La propera vegada que l’usuari accedeixi a index.php el formulari estarà emplenat amb la informació desada la vegada anterior que va accedir-hi.&lt;br /&gt;
&lt;br /&gt;
sol&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[:solucio_galetes_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sessió ===&lt;br /&gt;
&lt;br /&gt;
Les variables de sessió són variables que estan disponibles en múltiples pàgines sense haver de fer servir pas de paràmetres. Les variables de sessió tenen un temps de vida limitat i s’emmagatzemen en el servidor.&lt;br /&gt;
&lt;br /&gt;
Podeu fer servir les variables de sessió per mantenir informació (l’anomenada informació de sessió) entre diferents pàgines. Per exemple,&lt;br /&gt;
el nom d’usuari o una selecció de productes que ja s’hagi fet.&lt;br /&gt;
&lt;br /&gt;
A continuació, estudiareu un exemple format per tres fitxers. El primer fitxer és un formulari senzill que demana a l’usuari un identificador i una contrasenya. Aquestes dades s’envien a un segon fitxer, anomenat exempleAutenticar.php, que crea les variables de sessió. Finalment, trobareu un tercer fitxer anomenat continuem.php, que recupera la informació emmagatzemada en les variables de sessió.&lt;br /&gt;
&lt;br /&gt;
Just a sota d’aquest text hi ha el fitxer del qual partireu. L’hem anomena exempleSessions.php, però el podeu anomenar d’una altra manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Exemple amb variables de sessió&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
&amp;lt;form action=&amp;quot;exempleAutenticar.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
Escriu el teu nom:&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;usuari&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Escriu la teva contrasenya:&lt;br /&gt;
&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;contrasenya&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia!&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tot seguit apareix el codi del fitxer exempleAutenticar.php. En aquest fitxer creareu i inicialitzareu les dues variables de sessió que utilitzareu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION['id_usuari']=$_REQUEST['usuari'];&lt;br /&gt;
$_SESSION['clau_acces']=$_REQUEST['contrasenya'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...continueu amb l’exemple de variables de sessió...&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
Ja s’han emmagatzemat les variables de sessió.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;continuem.php&amp;quot;&amp;gt;Vinga! Cap al final de l’exemple!&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixeu-vos que el primer que es fa és cridar la funció '''session_start()'''. És obligatori que inicieu la sessió abans de cap etiqueta HTML perquè tot funcioni correctament.&lt;br /&gt;
Amb $_REQUEST es recuperen els dos valors que s’han passat des del fitxer inicial, és a dir, usuari i contrasenya, i els heu d’emmagatzemar en dues variables de sessió creades a $_SESSION, que rebran el nom d’id_usuari i clau_acces.&lt;br /&gt;
$_REQUEST és un array associatiu global que per defecte té els continguts de $_GET, $_POST i $_COOKIE.&lt;br /&gt;
A part de crear les variables de sessió i donar-los valors trobareu un enllaç cap al tercer fitxer.&lt;br /&gt;
El codi del tercer fitxer, continuem.php, el teniu a continuació:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com que esteu treballant amb sessions, el primer que hauríeu de fer és llançar la sessió amb session_start(). A continuació, es recuperen els valors emmagatzemats en les dues variables de sessió.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eliminar sesión&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
unset($_SESSION['id_usuari']); // will delete just the name data&lt;br /&gt;
&lt;br /&gt;
//session_destroy(); // borrará todos los datos asociados a ese usuario. También $_SESSION = array(); &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index3.php&amp;quot;&amp;gt;Destruir Variables de sesion&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les sessions us permeten emmagatzemar dades que podran ser compartides entre les diferents pàgines del web. Aquestes dades, a diferència de les cookies, estan emmagatzemades al servidor i estan disponibles durant tot el temps que l’usuari està interactuant amb la pàgina (temps de sessió).&lt;br /&gt;
Alguns exemples de dades que solen guardar-se a les sessions és si l’usuari ha accedit al web mitjançant els valors usuari/contrasenya, o un carret de la compra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici Sessions ====&lt;br /&gt;
1. Feu una pàgina web que passi entre les seves pàgines el nom de l’usuari i una variable (cost) que s’anirà incrementant en 10 cada vegada que l’usuari passa entre les pàgines (podem pensar que aquesta variable representa el cost de les compres que ha fet fins ara l’usuari al web).&lt;br /&gt;
La sessió es tancarà quan l’usuari torni a la pàgina de login.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://codigosdeprogramacion.com/2016/12/20/sistema-de-usuarios-y-sesiones-en-php-y-mysql-1-login-sesiones-y-logout/&lt;br /&gt;
&lt;br /&gt;
http://velozityweb.com/blog/php/login-de-usuarios-y-creacion-de-sesiones-con-php-y-mysql/#sthash.XbMcrnTA.PSO2jYQ9.dpbs&lt;br /&gt;
&lt;br /&gt;
http://www.formacionwebonline.com/crear-sesiones-php-en-intranet/&lt;br /&gt;
&lt;br /&gt;
=== Exercici Moodle ===&lt;br /&gt;
&lt;br /&gt;
2.Se trata de la hacer un moodle, tenemos un formulario y almacenaremos una base de datos (simulada) en la que guardaremos en un archivo el usuario, contraseña y rol de un profe y un alumno. &lt;br /&gt;
Deberá de comprobar si está registrado, en caso de estarlo se crearán las cookies y variables de sesión(5 minutos para el alumnado y 10 para el profe), en caso de no acceder deberán redireccionarse al login.&lt;br /&gt;
Si se validan correctamente, deberá acceder al menu y mostrar la información si tiene rol de alumno (ROLE_ALUMNO) y otra diferente si es profesor(ROLE_ALUMNO). &lt;br /&gt;
También deberá existir un logout en caso de querer terminar la sesión. &lt;br /&gt;
$_SESSION['caduca']=time()+60; &lt;br /&gt;
&lt;br /&gt;
Solució Exercici Moodle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_moodle]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejercicio Carrito ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--http://evilnapsis.com/2016/10/30/ejemplo-de-carrito-de-compras-sencillo-con-php-y-mysql/--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici Complert ====&lt;br /&gt;
Exercici que engloba Galetes, Idioma, Login, Intranet amb Cap, Peus, Menu i contingut i Sessions.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[http://www.infomerce.es/moodle/mod/resource/view.php?id=11136 Exercici de Classe]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
=== Creació del Arbre XML ===&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xmlDoc = new DOMDocument();&lt;br /&gt;
$xmlDoc-&amp;gt;load(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
=== Obtenir un element del arbre ===&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recòrrer tots els elemens ===&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print $xmlDoc-&amp;gt;saveXML(); //imprimir toda la info&lt;br /&gt;
&lt;br /&gt;
// recorrer las etiquetas y los valores&lt;br /&gt;
$x = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
foreach ($x-&amp;gt;childNodes AS $item) {&lt;br /&gt;
  print $item-&amp;gt;nodeName . &amp;quot; = &amp;quot; . $item-&amp;gt;nodeValue . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//otra manera de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   //selecciona todas las etiquetas aula y muestra el contenido dentro de ellas&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
    echo $aula-&amp;gt;nodeName;&lt;br /&gt;
    echo $aula-&amp;gt;nodeValue, PHP_EOL;&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Otra forma de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   // otra forma de acceder&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
   echo $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)[0]-&amp;gt;nodeValue;   //equivale a -&amp;gt;item(0)&lt;br /&gt;
   echo  $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
   echo $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Afegir un nou element ===&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$auladom = $xmlDoc-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmlDoc-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmlDoc-&amp;gt;createElement(&amp;quot;XARXA_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmlDoc-&amp;gt;createElement(&amp;quot;MASK_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmlDoc-&amp;gt;createElement(&amp;quot;INIT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmlDoc-&amp;gt;createElement(&amp;quot;CURRENT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
&lt;br /&gt;
$root = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
=== Esborrar un element ===&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//borrar nodo&lt;br /&gt;
$xmlDoc = new DOMDocument;&lt;br /&gt;
$xmlDoc-&amp;gt;load('file.xml');   //cargamos fichero&lt;br /&gt;
&lt;br /&gt;
$aula = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
&lt;br /&gt;
// seleccionamos el nodo concreto 0 y lo eleminamos&lt;br /&gt;
$aulaSeleccionada = $aula-&amp;gt;getElementsByTagName('aula')-&amp;gt;item(0);&lt;br /&gt;
$aulaborrada = $aula-&amp;gt;removeChild($aulaSeleccionada);&lt;br /&gt;
&lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;); //guardamos cambios&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici crear XML'''&lt;br /&gt;
&lt;br /&gt;
Tenim un formulari i volem ficar dins del nostre xml noves dades, per tant, haurem de crear un formulari on introduirem les dades.&lt;br /&gt;
&lt;br /&gt;
= Bibliografia / Webgrafia =&lt;br /&gt;
*[http://php.net/manual/es/ Manual oficial de PHP]&lt;br /&gt;
*[http://www.codeacademy.com Introducció a PHP]&lt;br /&gt;
*David Sklar, Adam Trachtenberg, &amp;quot;PHP Cookbook, Third Edition&amp;quot;, O’Reilly Media Inc., 2014. ISBN 978-1-449-36375-8&lt;br /&gt;
*Eduard García Sacristán, Eduard Latorre Jarque, Montserrat Madridejos Mora, Raúl Velaz Mayo, &amp;quot;Llenguatges de guions de servidor&amp;quot;, IOC, 2014 &lt;br /&gt;
*[https://docs.google.com/presentation/d/1ZQgIsW4KCyIfH8NyiqH9ueanM83Ym7bjitaxyQKS0hs/edit#slide=id.i14 Llenguatges de programació del costat del servidor]&lt;br /&gt;
*[http://www.adelat.org/media/docum/nuke_publico/lenguajes_del_lado_servidor_o_cliente.html www.Adelat.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EMMAGATZEMAR I LLEGIR FITXERS ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = '{&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}'&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SERIALIZACIÓN ==&lt;br /&gt;
&lt;br /&gt;
En PHP existe una forma muy sencilla de almacenar o transmitir cualquier tipo de valor (excepto el tipo resource) en forma de una cadena seriada: la serialización.&lt;br /&gt;
&lt;br /&gt;
La serialización te permite, por ejemplo, guardar un objeto o array en una base de datos o transmitirlo entre aplicaciones remotas, para luego volver a convertirlo a su tipo y estructura original.&lt;br /&gt;
&lt;br /&gt;
Supongamos que tienes el siguiente array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arr = array(&lt;br /&gt;
  &amp;quot;fruta&amp;quot; =&amp;gt; &amp;quot;manzana&amp;quot;, &lt;br /&gt;
  &amp;quot;objeto&amp;quot; =&amp;gt; &amp;quot;bicicleta&amp;quot;, &lt;br /&gt;
  &amp;quot;animales&amp;quot; =&amp;gt; array(&lt;br /&gt;
             &amp;quot;perro&amp;quot;, &lt;br /&gt;
             &amp;quot;gato&amp;quot;, &lt;br /&gt;
             &amp;quot;caballo&amp;quot;) &lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si lo deseas guardar en una tabla de una base de datos, lo puedes serializar de esta forma:&lt;br /&gt;
&lt;br /&gt;
'''$string = serialize($arr);'''&lt;br /&gt;
&lt;br /&gt;
La función serialize devolverá un valor fácilmente almacenable o transmitible:&lt;br /&gt;
&lt;br /&gt;
''a:3:{s:5:&amp;quot;fruta&amp;quot;;s:7:&amp;quot;manzana&amp;quot;;s:6:&amp;quot;objeto&amp;quot;;s:9:&amp;quot;bicicleta&amp;quot;;s:8:&amp;quot;animales&amp;quot;;a:3: i:0;s:5:&amp;quot;perro&amp;quot;;i:1;s:4:&amp;quot;gato&amp;quot;;i:2;s:7:&amp;quot;caballo&amp;quot;;}}''&lt;br /&gt;
&lt;br /&gt;
Para recuperar el valor original en PHP a partir de la cadena seriada:&lt;br /&gt;
&lt;br /&gt;
'''$arr = unserialize($string);'''&lt;br /&gt;
&lt;br /&gt;
Un ejemplo del uso de la serialización la tenemos en la forma en que WordPress almacena información variada en algunas de sus tablas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Serializar'''&lt;br /&gt;
&lt;br /&gt;
http://www.cucuza.com/como-serializar-datos-en-php/&lt;br /&gt;
&lt;br /&gt;
==EXEMPLE CLASSE SERIALIZACIÓN==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Serializer {&lt;br /&gt;
&lt;br /&gt;
    private static $path = &amp;quot;./database/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    public static function save($obj, $id) {  //$obj es un JSON , $id es el nombre del archivo &lt;br /&gt;
&lt;br /&gt;
        $arr = serialize($obj);&lt;br /&gt;
        &lt;br /&gt;
        return file_put_contents(self::$path . $id, $arr);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static function restore($id) {&lt;br /&gt;
        &lt;br /&gt;
        if  (file_exists ( self::$path . $id ) ){&lt;br /&gt;
            &lt;br /&gt;
            $xmlString = file_get_contents(self::$path . $id);&lt;br /&gt;
            &lt;br /&gt;
            return unserialize($xmlString);  &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static function showIds(){&lt;br /&gt;
        &lt;br /&gt;
        return array_slice(scandir(self::$path),2);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//al ser una classe estàtica es pot invocar els mètodes de la següent forma, per exemple:&lt;br /&gt;
&lt;br /&gt;
Serializer::save(json,nom_arxiu);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crear un JSON desde PHP (json_encode)==&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crear un objeto en PHP con JSON (json_decode)==&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ENVIAR CORREOS ==&lt;br /&gt;
&lt;br /&gt;
Mediente la función MAIL() de PHP podemos enviar correos, por ello, nuestro servidor deberá tener instalado el servicio.&lt;br /&gt;
En nuestro caso, en nuestro Hosting-ng lo tenemos.&lt;br /&gt;
Existe otra función PHPMailer dónde contiene más opciones. https://github.com/PHPMailer/PHPMailer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Forma simple'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// El mensaje&lt;br /&gt;
$msg = &amp;quot;Estimado alumno de La Mercè\nEstas invitado a participar en  clase&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// usar wordwrap() si las lineas son más largas de 70 caracteres&lt;br /&gt;
$msg = wordwrap($msg,70);&lt;br /&gt;
&lt;br /&gt;
// Enviar mail&lt;br /&gt;
mail(&amp;quot;alguien@ejemplo.cat&amp;quot;,&amp;quot;Mi título&amp;quot;,$msg);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Más opciones'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    $to = &amp;quot;ejemploPrueba@ejemplo.com&amp;quot;;&lt;br /&gt;
    $subject = &amp;quot;Asunto&amp;quot;;&lt;br /&gt;
    $txt = &amp;quot;Estamos en clase de DAW&amp;quot;;&lt;br /&gt;
    $headers = &amp;quot;From: webmaster@example.com&amp;quot; . &amp;quot;\r\n&amp;quot; .&lt;br /&gt;
        &amp;quot;CC: somebodyelse@example.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    mail($to,$subject,$txt,$headers);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' En terminal '''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//también podemos hacerlo desde el terminal de linux en nuestro servidor&lt;br /&gt;
system('mail -t alguien@ejemplo.cat -s ALTA ALUMNOS INSTI &amp;lt;&amp;lt;&amp;lt; &amp;quot;El alumno&amp;quot;'.$nom.&amp;quot; &amp;quot;.$cognoms.&amp;quot; está en espera de darse de alta&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SUBIR FICHEROS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// En versiones de PHP anteriores a la 4.1.0, debería utilizarse $HTTP_POST_FILES en lugar&lt;br /&gt;
// de $_FILES.&lt;br /&gt;
&lt;br /&gt;
 //Directori de pujada. Permís d'escriptura i accés per a www-data&lt;br /&gt;
$dir_subida = './';  &lt;br /&gt;
 //Anexem la carpeta amb el nos del finder que ens puja&lt;br /&gt;
$fichero_subido = $dir_subida . basename($_FILES['file']['name']); //basename: muestra el nombre del fichero con la extensión&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Movem el fitxer temporal creat a /tmp a la ubicació o nom indicats&lt;br /&gt;
echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
if (move_uploaded_file($_FILES['file']['tmp_name'], $fichero_subido)) {    &lt;br /&gt;
    echo &amp;quot;El fichero es válido y se subió con éxito.\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;¡Posible ataque de subida de ficheros!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo 'Más información de depuración:';&lt;br /&gt;
print_r($_FILES);&lt;br /&gt;
&lt;br /&gt;
/*$_FILES['file']['name'] -- original name of the file on the client machine.&lt;br /&gt;
$_FILES['file']['type'] -- mime type of the file, provided by the browser&lt;br /&gt;
$_FILES['file']['size'] -- size (in bytes) of the uploaded file&lt;br /&gt;
$_FILES['file']['tmp_name'] -- temporary filename of the uploaded file, stored on the server&lt;br /&gt;
$_FILES['file']['error'] -- returns an error code, useful for debugging.&lt;br /&gt;
*/&lt;br /&gt;
print &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; SUBIR FICHEROS &amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;!-- El tipo de codificación de datos, enctype, DEBE especificarse como sigue --&amp;gt;&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- MAX_FILE_SIZE debe preceder al campo de entrada del fichero --&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;MAX_FILE_SIZE&amp;quot; value=&amp;quot;30000&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- El nombre del elemento de entrada determina el nombre en el array $_FILES --&amp;gt;&lt;br /&gt;
    Enviar este fichero: &amp;lt;input name=&amp;quot;fichero_usuario&amp;quot; type=&amp;quot;file&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar fichero&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EXERCICI:'''&lt;br /&gt;
&lt;br /&gt;
Es desitja desenvolupar un formulari on pugui ficar el nom d'usuari i a més pujar un fitxer. Deurà haver una pàgina que mostre tots el fitxers d'eixe Usuari i el nombre d'arxius.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDF ==&lt;br /&gt;
Podem també generar pdf's a FPDF http://www.fpdf.org/ , però es deurà baixar la llibreria primer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require('fpdf.php');&lt;br /&gt;
&lt;br /&gt;
class PDF extends FPDF&lt;br /&gt;
{&lt;br /&gt;
// Page header&lt;br /&gt;
function Header()&lt;br /&gt;
{&lt;br /&gt;
    // Logo&lt;br /&gt;
    $this-&amp;gt;Image('logo.png',10,6,30);&lt;br /&gt;
    // Arial bold 15&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','B',15);&lt;br /&gt;
    // Move to the right&lt;br /&gt;
    $this-&amp;gt;Cell(80);&lt;br /&gt;
    // Title&lt;br /&gt;
    $this-&amp;gt;Cell(30,10,'Title',1,0,'C');&lt;br /&gt;
    // Line break&lt;br /&gt;
    $this-&amp;gt;Ln(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Page footer&lt;br /&gt;
function Footer()&lt;br /&gt;
{&lt;br /&gt;
    // Position at 1.5 cm from bottom&lt;br /&gt;
    $this-&amp;gt;SetY(-15);&lt;br /&gt;
    // Arial italic 8&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','I',8);&lt;br /&gt;
    // Page number&lt;br /&gt;
    $this-&amp;gt;Cell(0,10,'Page '.$this-&amp;gt;PageNo().'/{nb}',0,0,'C');&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Instanciation of inherited class&lt;br /&gt;
$pdf = new PDF();&lt;br /&gt;
$pdf-&amp;gt;AliasNbPages();&lt;br /&gt;
$pdf-&amp;gt;AddPage();&lt;br /&gt;
$pdf-&amp;gt;SetFont('Times','',12);&lt;br /&gt;
for($i=1;$i&amp;lt;=40;$i++)&lt;br /&gt;
    $pdf-&amp;gt;Cell(0,10,'Printing line number '.$i,0,1);&lt;br /&gt;
$pdf-&amp;gt;Output();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= QR =&lt;br /&gt;
&lt;br /&gt;
També podem crear codis QR al nostre servidor, hi han moltes libreries tanta en PHP com en JS.&lt;br /&gt;
https://sourceforge.net/projects/phpqrcode/&lt;br /&gt;
&lt;br /&gt;
Es deurà baixar la llibreria i ficar la carpeta &amp;quot;phpqrcode&amp;quot; dins del nostre servidor, a més de introduir el següent codi. &lt;br /&gt;
//'''NOTA''': deureu donar-li permisos d'escriptura a la carpeta&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   // la llibreria s'ha descomprimit dins d'una carpeta anomenada &amp;quot;phpqrcode&amp;quot;&lt;br /&gt;
   include('phpqrcode/qrlib.php');&lt;br /&gt;
   &lt;br /&gt;
   QRcode::png('http://wikiserver.infomerce.es', 'imatgeqr.png');&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
   &amp;lt;img src=&amp;quot;imatgeqr.png&amp;quot; /&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici- Inventario'''&lt;br /&gt;
&lt;br /&gt;
Queremos crear un registro o inventario de los ordenadores, por ellos, queremos generar códigos QR que serán pegatinas para poner en cada uno de los ordenadores de las diferentes aulas, por ello crearemos un formulario donde introduciremos el aula y el ordenador, deben almacenarse en un variable de sesión (ya que no sabemos todavía conectarnos a BD) y cuando cliquemos mostrar deben de aparecer todas los códigos QR del aula.&lt;br /&gt;
También se desea guardarlo en pdf (mirar librerias) con el título y el aula y el codigo QR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CONECTAR CON LDAP o ACTIVE DIRECTORY ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class LDAP &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
      //Asigno variables para accesar al servidor LDAP&lt;br /&gt;
   private $conectar;&lt;br /&gt;
   private $host;&lt;br /&gt;
   private $user;&lt;br /&gt;
   private $pswd;&lt;br /&gt;
   private $dn;&lt;br /&gt;
   private $OU;&lt;br /&gt;
   private $DC;&lt;br /&gt;
   private $DC1;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   public function __construct($user,$password,$ou,$dc,$dc1)&lt;br /&gt;
   {&lt;br /&gt;
    $this-&amp;gt;host= &amp;quot;172.16.208.174&amp;quot;;&lt;br /&gt;
    $this-&amp;gt;user = $user;&lt;br /&gt;
    $this-&amp;gt;pswd = $password;&lt;br /&gt;
    $this-&amp;gt;OU = $ou;&lt;br /&gt;
    $this-&amp;gt;DC = $dc;&lt;br /&gt;
    $this-&amp;gt;DC1 = $dc1;&lt;br /&gt;
    $this-&amp;gt;dn = &amp;quot;OU=&amp;quot;.$ou.&amp;quot;,DC=&amp;quot;.$dc.&amp;quot;,DC=&amp;quot;.$dc1.&amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function conexion()&lt;br /&gt;
   {&lt;br /&gt;
       $this-&amp;gt;conectar = ldap_connect($this-&amp;gt;host) or die(&amp;quot;Imposible Conectar&amp;quot;);&lt;br /&gt;
     // Especifico la versión del protocolo LDAP&lt;br /&gt;
    ldap_set_option($this-&amp;gt;conectar, LDAP_OPT_PROTOCOL_VERSION, 3)    or die (&amp;quot;Imposible asignar el Protocolo LDAP&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function credenciales(){&lt;br /&gt;
   // Valido las credenciales para accesar al servidor LDAP&lt;br /&gt;
    $bd = ldap_bind($this-&amp;gt;conectar, $this-&amp;gt;user, $this-&amp;gt;pswd)    or die (&amp;quot;Imposible Validar en el Servidor LDAP&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Especifico los parámetros que quiero que me regrese la consulta&lt;br /&gt;
    $attrs = array(&amp;quot;displayname&amp;quot;,&amp;quot;mail&amp;quot;,&amp;quot;samaccountname&amp;quot;,&amp;quot;telephonenumber&amp;quot;,&amp;quot;givenname&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
    // Creo el filtro para la busqueda&lt;br /&gt;
    $filter = &amp;quot;(samaccountname=&amp;quot;.$this-&amp;gt;user.&amp;quot;)&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    $search = ldap_search($this-&amp;gt;conectar, $this-&amp;gt;dn, $filter, $attrs)    or die (&amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    $entries = ldap_get_entries($this-&amp;gt;conectar, $search);&lt;br /&gt;
&lt;br /&gt;
    return $entries;&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17482</id>
		<title>NF2: Generació de documents web amb llenguatges de guions</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17482"/>
				<updated>2023-10-27T15:23:37Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introducció llenguatges de programació del costat Servidor =&lt;br /&gt;
&lt;br /&gt;
Existeix una multitud de llenguatges concebuts o no per a Internet. Cadascun d'ells explota més a fons certes característiques que ho fan més o menys útils per desenvolupar diferents aplicacions.&lt;br /&gt;
Un '''llenguatge del costat del servidor''' és aquell que '''s'executa en el servidor web, just abans que s'enviï la pàgina''' a través d'Internet al client. Les pàgines que s'executen en el servidor poden realitzar accessos a bases de dades, connexions en xarxa, i altres tasques per crear la pàgina final que veurà el client.&lt;br /&gt;
D'altra banda, els '''llenguatges de costat client''' (entre els quals no només es troba l'HTML sinó també el Java i el Javascript els quals són simplement inclosos en el codi HTML) són aquells que '''poden ser directament executats pel navegador i no necessiten un pretractament'''.&lt;br /&gt;
[[Fitxer:serverside.jpg|center]]&lt;br /&gt;
Els llenguatges de costat servidor més àmpliament utilitzats per al desenvolupament de pàgines dinàmiques són l'ASP, JSP, PERL i PHP.&lt;br /&gt;
== ASP.NET ==&lt;br /&gt;
Llenguatge comercialitzat per Microsoft, i usat per programadors per desenvolupar entre altres funcions, llocs web. ASP.NET és el successor de la tecnologia ASP, va ser llançada al mercat mitjançant una estratègia de mercat denominada .NET.&lt;br /&gt;
Es desenvolupat per resoldre les limitants que brindava el teu antecessor ASP. Per al desenvolupament d'ASP.NET es pot utilitzar C#, VB.NET o J#. Els arxius compten amb l'extensió (aspx). Per al seu funcionament de les pàgines es necessita tenir instal·lat IIS amb el Framework .Net. Microsft Windows 2003 inclou aquest framework, solament es necessitarà instal·lar-ho en versions anteriors.&lt;br /&gt;
El llenguatge ASP consisteix en una sèrie de classes .NET utilitzades per crear aplicacions Web, tant del costat client (Web Form) com del costat servidor (Web Service). La integració de nadiva .NET Framework amb el sistema operatiu Windows Server 2003 fa que la seva execució sigui més estable i ràpida que altres llenguatges de programació.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Completament orientat a objectes.&lt;br /&gt;
*Controls d'usuari i personalitzats.&lt;br /&gt;
*Divisió entre la capa d'aplicació o disseny i el codi.&lt;br /&gt;
*Facilita el manteniment de grans aplicacions.&lt;br /&gt;
*Increment de velocitat de resposta del servidor.&lt;br /&gt;
*Major velocitat.&lt;br /&gt;
*Major seguretat.&lt;br /&gt;
&lt;br /&gt;
'''Desavantatges: '''&lt;br /&gt;
*Major consum de recursos.&lt;br /&gt;
*Tecnologia propietària.&lt;br /&gt;
*Hostalatge de llocs web costosos.&lt;br /&gt;
&lt;br /&gt;
== JSP: Java Server Pages ==&lt;br /&gt;
És un llenguatge per a la creació de llocs web dinàmics, acrònim de Java Server Pages. Està orientat a desenvolupar pàgines web en Java. JSP és un llenguatge multiplataforma.&lt;br /&gt;
JSP va ser desenvolupat per Sun Microsystems. Comparteix avantatges similars a les d'ASP.NET, desenvolupat per a la creació d'aplicacions web potents. Posseeix un motor de pàgines basat en els servlets de Java. Per al seu funcionament es necessita tenir instal·lat un servidor Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Característiques'''&lt;br /&gt;
*Codi separat de la lògica del programa.&lt;br /&gt;
*Les pàgines són compilades en la primera petició.&lt;br /&gt;
*Permet separar la part dinàmica de l'estàtica a les pàgines web.&lt;br /&gt;
*Els arxius es troben amb l'extensió (jsp).&lt;br /&gt;
*El codi JSP pot ser incrustat en codi HTML.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Execució ràpida del servlets.&lt;br /&gt;
*Crear pàgines del costat del servidor.&lt;br /&gt;
*Multiplataforma.&lt;br /&gt;
*Codi ben estructurat.&lt;br /&gt;
*Integritat amb els mòduls de Java.&lt;br /&gt;
*La part dinàmica està escrita en Java.&lt;br /&gt;
== PERL (Practical Extraction and Report Language) ==&lt;br /&gt;
És un llenguatge de programació desenvolupat per Larry Wall (lwall at netlabs.com) inspirat en altres eines d'UNIX com són: sigueu, grep, awk, c-shell, per a l'administració de tasques pròpies de sistemes UNIX. No estableix cap filosofia de programació concreta. No es pot dir que sigui orientat a objectes, modular o estructurat encara que suporta directament tots aquests paradigmes; el seu punt fort són les labors de processament de textos i arxius. Llenguatge de programació basat en scripts portable a gairebé qualsevol plataforma. És molt utilitzat per escriure CGIs. Un dels seus elements més potents són les expressions regulars, que a partir de la seva versió en Perl han estat adoptades per altres llenguatges i plataformes com .NET o Javascript.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Es poden ajuntar diversos programes d'una forma senzilla per aconseguir una meta determinada. Els usuaris de Windows agrairan aquesta propietat ja que normalment emmalalteixen d'un bon llenguatge tipus “script”.&lt;br /&gt;
*És relativament ràpid per a un llenguatge tipus “script”.&lt;br /&gt;
*Està disponible en múltiples plataformes i sistemes operatius (UNIX, Linux i Windows). Un programa que s'escrigui tenint en compte la compatibilitat pot ser escrit en una plataforma i executat en una altra.&lt;br /&gt;
*Hi ha una col·lecció enorme de mòduls que poden ser incorporats a qualsevol “script” de Perl. Estan disponibles en el CPAN (“Comprehensive Perl Arxivi Network”). En particular existeix una extensió per a càlcul numèric denominada PDL.&lt;br /&gt;
*Perl és gratuït. Molt més que això, és “Programari Lliure”. Això vol dir que el codi font està disponible perquè qualsevol el pugui veure o modificar, i el que és més important, sempre ho estarà. Encara que mai pretenguis canviar el codi, és important disposar de la possibilitat de fer-ho, ja que sempre es podrà contractar a una tercera persona perquè ho modifiqui en el cas que hi hagi un error, i hauria de ser possible solucionar-ho.&lt;br /&gt;
*Li atorga al programador molta llibertat perquè faci el programa com vulgui. Tal com diu l'eslògan de Perl “Hi ha més d'una forma de fer-ho”&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
PHP és l'acrònim de Hipertext Preprocesor. És un llenguatge de programació del costat del servidor gratuït i independent de plataforma, ràpid, amb una gran llibreria de funcions i molta documentació. Va ser creat originalment en 1994 per Rasmus Lerdorf, però com PHP està desenvolupat en política de codi obert, al llarg de la seva història ha tingut moltes contribucions d'altres desenvolupadors.&lt;br /&gt;
El client solament rep una pàgina amb el codi HTML resultant de l'execució de la PHP. Com la pàgina resultant conté únicament codi HTML, és compatible amb tots els navegadors.&lt;br /&gt;
&lt;br /&gt;
https://luisjordan.net/node-js/node-js-vs-php-comparaciones-cms-beneficios-y-tiempos-de-respuesta/&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Molt fàcil d'aprendre.&lt;br /&gt;
*Es caracteritza per ser un llenguatge molt ràpid.&lt;br /&gt;
*Suporta en certa mesura l'orientació a objecte. Classes i herència.&lt;br /&gt;
*És un llenguatge multiplataforma: Linux, Windows, entre uns altres.&lt;br /&gt;
*Capacitat de connexió amb la majoria dels manejadores de base de dades: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre unes altres.&lt;br /&gt;
*Capacitat d'expandir el seu potencial utilitzant mòduls.&lt;br /&gt;
*Posseeix documentació a la seva pàgina oficial la qual inclou descripció i exemples de cadascuna de les seves funcions.&lt;br /&gt;
*És lliure, per la qual cosa es presenta com una alternativa de fàcil accés per a tots.&lt;br /&gt;
*Inclou gran quantitat de funcions.&lt;br /&gt;
*No requereix definició de tipus de variables ni maneig detallat del baix nivell.&lt;br /&gt;
&lt;br /&gt;
= Preparació de l'entorn =&lt;br /&gt;
== Instal·lació de servidors d'aplicacions Web ==&lt;br /&gt;
Internet s’ha convertit en la principal eina d’intercanvi d’informació a la societat actual. La connexió dels ordinadors a les xarxes locals i aquestes xarxes a d’altres de grans dimensions ha possibilitat la comunicació global d’informació entre els ordinadors arreu del món. Per poder oferir serveis web, els servidors han de tenir instal·lats una sèrie de serveis. El servidor web permet l’enviament de continguts a altres ordinadors a través de la xarxa. Els preprocessadors d’hipertext (com PHP) permeten crear continguts web de forma dinàmica. Els servidors de bases de dades permeten emmagatzemar informació de forma estructurada que es pot fer servir per generar contingut web. Aquests serveis han de ser instal·lats i configurats correctament abans de començar a crear el contingut web dinàmic del nostre web.&lt;br /&gt;
&lt;br /&gt;
Un '''servidor web''' és una peça de programari que respon a les peticions dels navegadors i lliura la pàgina per al navegador a través d’Internet. Quan es crida a una pàgina web per l’adreça –l’URL (uniform resource locator), per exemple, www.infomerce.es/index.html-, la comunicació entre el navegador i el servidor és possible gràcies a tres protocols:&lt;br /&gt;
* TCP(Transmission Control Protocol, protocol de control de transmissió): és el responsable de fer que el missatge arribi a la destinació sense errors.&lt;br /&gt;
* IP(Internet Protocol): és el responsable de fer que el missatge trobi el camí fins al servidor.&lt;br /&gt;
* HTTP(Hypertext Transfer Protocol, protocol de transferència d’hipertext): és el protocol que ha indicat l’usuari a l’hora de demanar el recurs al servidor. La primera part d’un recurs URL correspon al protocol que utilitzaran client i servidor per intercanviar dades.&lt;br /&gt;
== HTTP: comunicació entre servidor i client ==&lt;br /&gt;
Un cop establerta la connexió entra en joc el protocol HTTP: el navegador envia una petició al servidor en què sol·licita el recurs index.html. El servidor processa aquesta petició i retorna la pàgina sol·licitada al navegador, que interpreta les etiquetes HTML i la presenta a l’usuari.&lt;br /&gt;
[[Fitxer:peticiohttp.jpg|center]]&lt;br /&gt;
La informació que el client envia al servidor en la petició és la següent:&lt;br /&gt;
* El mètode HTTP: l’acció que s’ha de fer.&lt;br /&gt;
* El recurs a què s’ha d’accedir (una part de l’URL).&lt;br /&gt;
* La informació que l’usuari envia al servidor.&lt;br /&gt;
La informació que el servidor envia en la resposta té dues parts ben diferenciades: &lt;br /&gt;
* La capçalera: conté el codi que indica si la petició s’ha complert. També conté el tipus de contingut que enviarà al client.&lt;br /&gt;
* El contingut: (text, codi HTML, imatges, etc.) del recurs demanat.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Preparació M.V. amb Ubuntu i PHP ===&lt;br /&gt;
Es tracta d'importar una M.V. amb Ubuntu Server. Aquesta màquina virtual la utilitzarem al llarg del curs per desenvolupar programes amb el llenguatge PHP. LA M.V. ha de tenir les següents característiques:&lt;br /&gt;
*512 MB de Ram&lt;br /&gt;
*Targeta mode Pont (Has de reinicialitzar la @MAC i esborrar el fitxer: /etc/udev/rules.d/70-persistent-net.rules)&lt;br /&gt;
*Configura la @IP. &lt;br /&gt;
Instal·la el següent programari:&lt;br /&gt;
*openssh-server (per permetre comunicacions remotes)&lt;br /&gt;
*Servidor Web apache2&lt;br /&gt;
*Servidor PHP&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Primer projecte amb NetBeans ===&lt;br /&gt;
Crea un projecte PHP amb NetBeans. Fes que automàticament guardi tots els fitxers a la màquina virtual creada al apartat anterior. Crea una pàgina d'exemple i comprova que funciona.&lt;br /&gt;
La pàgina d'exemple pot ser la següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
     	&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;?php&lt;br /&gt;
            echo &amp;quot;Primera Pàgina amb PHP&amp;quot;; &lt;br /&gt;
          ?&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= El Llenguatge PHP =&lt;br /&gt;
== Introducció ==&lt;br /&gt;
'''PHP''' és un llenguatge de programació obert que s’integra directament en pàgines HTML. El seu ús ha esdevingut gairebé imprescindible en les pàgines que han d’utilitzar bases de dades o formularis.&lt;br /&gt;
Rasmus Lerdorf és el creador del llenguatge PHP. El 1995 presenta la primera edició d’aquest llenguatge amb el nom de Personal Home Page tools amb llicència pública GNU. Per crear el PHP, Rasmus utilitza el codi de programació C.&lt;br /&gt;
&lt;br /&gt;
El '''codi PHP''' que escriviu, '''l’haureu d’incrustar dins de codi HTML''', concretament dins les etiquetes \&amp;lt;body\&amp;gt; del document. Mitjançant unes marques l’HTML no interpretarà el codi PHP, el qual, i mitjançant les mateixes marques, s’executarà en el servidor.&lt;br /&gt;
&lt;br /&gt;
El codi PHP s’executa en un servidor i mostra el resultat en un client. Visualitzareu els resultats amb un navegador web.&lt;br /&gt;
&lt;br /&gt;
Quan arrenca el PHP es fa la lectura del fitxer '''php.ini'''. Aquest fitxer conté la configuració del PHP i es crea durant la instal·lació del PHP. És possible que necessiteu fer canvis en el fitxer de configuració, preneu la precaució de fer-ne una còpia de seguretat abans de fer aquestes modificacions.&lt;br /&gt;
Una inspecció visual del fitxer php.ini us servirà per comprendre’n el funcionament. Depenent del valor de les variables que conté aquest fitxer, el comportament del PHP variarà en la vostra màquina. Podeu comprovar que cada variable que forma part del fitxer està àmpliament comentada, amb comentaris que es marquen amb un punt i coma.&lt;br /&gt;
&lt;br /&gt;
== Mostrar Errors ==&lt;br /&gt;
Per mostrar els errors que fem al escriure programes en php s'ha d'especificar als fitxers que els vols veure per pantalla amb les següents sentències:&lt;br /&gt;
&lt;br /&gt;
http://www.anerbarrena.com/mostrar-errores-php-608/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* * ******************Errores******************* */&lt;br /&gt;
ini_set('display_errors', true);&lt;br /&gt;
error_reporting(E_ALL);&lt;br /&gt;
/* * ********************Usuarios****************** */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintaxi ==&lt;br /&gt;
=== Generalitats ===&lt;br /&gt;
La sintaxi d'un llenguatge de programació es defineix com el conjunt de regles que han de seguir-se en escriure el codi font dels programes per considerar-se com a correctes per a aquest llenguatge de programació.&lt;br /&gt;
Les normes bàsiques que defineixen la sintaxi de PHP són les següents:&lt;br /&gt;
*Si voleu que s’interpreti el vostre codi és imprescindible que encabiu el codi escrit en PHP entre dos delimitadors. Aquestes marques són &amp;lt;?php , que la fareu servir per indicar l’inici de codi en llenguatge PHP, i ?&amp;gt; , que utilitzareu per marcar el final del vostre codi PHP.&lt;br /&gt;
*Indicareu el final d’una instrucció amb punt i coma. Cada vegada que es detecti un punt i coma s’interpretarà el codi inserit fins a aquell punt.&lt;br /&gt;
*Els comentaris en PHP els podreu incloure mitjançant:&lt;br /&gt;
** Dues barres (//) o un coixinet (#) si voleu comentar una línia&lt;br /&gt;
** Una barra i un asterisc (/*) per indicar l’inici de comentari, i un asterisc i una barra per indicar el final de comentari si voleu comentar més d’una línia(/*).&lt;br /&gt;
*No es defineix el tipus de les variables: PHP és un llenguatge de programació que no obliga a declarar prèviament el nom de les variables que s’utilitzaran ni el seu tipus (és diu que és un llenguatge sense tipus o no tipat). Ara bé, tot i que existeixen els tipus de dades en PHP aquests no es comproven.&lt;br /&gt;
*No es distingeixen les majúscules i minúscules.&lt;br /&gt;
Exemples:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Aquí teniu una instrucció.&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;i aquí una altra instrucció.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Si voleu comentar una línia ho podeu fer d’aquesta manera...&lt;br /&gt;
#...o bé d’aquesta altra.&lt;br /&gt;
/* Però si necessiteu comentar&lt;br /&gt;
més línies aquesta és la millor&lt;br /&gt;
manera de fer − ho! */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Per representar una variable '''caldrà escriure el símbol del dòlar seguit pel nom que vulgueu posar'''. En el moment de donar nom a una variable heu de tenir en compte que es diferencien majúscules i minúscules i que haurà de començar amb una lletra o caràcter de subratllat.&lt;br /&gt;
En PHP, a diferència de molts altres llenguatges, no cal declarar una variable abans d’utilitzar-la. El símbol del dòlar és el que marca que es tracta d’una variable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$Nom='whovian';&lt;br /&gt;
$Familia='Informàtica';&lt;br /&gt;
$Cicle=&amp;quot;CFGS Desenvolupament d'aplicacions Web&amp;quot;;&lt;br /&gt;
$Modul = &amp;quot;DAW en entorn servidor&amp;quot;;&lt;br /&gt;
$Durada= 165;&lt;br /&gt;
echo &amp;quot;Hola $nom!&amp;lt;br&amp;gt;&lt;br /&gt;
Benvingut als estudis d’$Familia!!!&amp;lt;br&amp;gt;&lt;br /&gt;
Cicle: $Cicle&amp;lt;br&amp;gt;&lt;br /&gt;
Mòdul: $Modul&amp;lt;br&amp;gt;&lt;br /&gt;
Durada: $Durada hores&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com podeu veure, les variables poden adquirir qualsevol dels tipus suportats, i la variable $Durada emmagatzema l’enter 180, mentre que la resta de variables emmagatzemaran cadenes.&lt;br /&gt;
Les variables s’assignen per valor per defecte, però '''si voleu assignar un valor per referència''' ho haureu d’indicar fent servir el símbol''' &amp;amp; '''tot just davant de la variable&lt;br /&gt;
=== Àmbit de les variables ===&lt;br /&gt;
&lt;br /&gt;
Les variables tenen una vida determinada depenent d’on les declareu i com ho feu. És molt important conèixer l’àmbit de les variables per controlar els vostres codis. No comprendre aquesta part pot provocar fallades inesperades en les vostres creacions.&lt;br /&gt;
L’àmbit d’una variable és el context en què és definida.&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot declarar una variable nombroses vegades en àmbits diferents:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nom=’Nyoman’;&lt;br /&gt;
echo ’De moment $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
function canvi()&lt;br /&gt;
{&lt;br /&gt;
	$nom=’Ketut’;&lt;br /&gt;
	echo ’Però ara $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
canvi();&lt;br /&gt;
echo ’I de nou $nom torna a tenir el valor de ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadors ===&lt;br /&gt;
Permetran fer accions dins el codi. Podreu canviar i assignar valors, canviar l’adreça del codi, condicionar l’execució de blocs de codi i, en&lt;br /&gt;
definitiva, dotar de la complexitat necessària els vostres programes per aconseguir un objectiu.&lt;br /&gt;
Els operadors es poden agrupar en tres blocs segons el nombre de valors sobre els quals s’actua.&lt;br /&gt;
* L’operador '''unari''' opera sobre un valor i el que pot fer en aquest valor és negar-lo, incrementar-lo o decrementar-lo, entre altres coses.&lt;br /&gt;
* L’operador '''binari''' opera sobre dos valors i permet sumar-los, restar-los o comparar-los.&lt;br /&gt;
* L’operador '''ternari''' permet escollir entre dues expressions en funció d’una altra.&lt;br /&gt;
&lt;br /&gt;
'''Operadors Aritmètics '''&lt;br /&gt;
Teniu en compte que la divisió retornarà un valor en coma flotant si el resultat de la divisió no és exacte.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
|-$valor||Negació||Oposat de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor + $valorB ||Addició||Suma de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor - $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor * $valorB||Multiplicació||Producte de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor / $ valorB||Divisió||Quocient de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor % $valorB||Mòdul||Resta de $valor dividit per $valorB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors d'assignació '''&lt;br /&gt;
L’operador bàsic d’assignació és l’igual. Amb l’operador igual la variable de l’esquerra rep el valor de l’expressió de la dreta.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor = $valorB||Assignació||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor += $valorB||Addició i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor -= $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor.= “text”||Concatenació i Assignació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de bit '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp; $valorB||i||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor I $valorB||o i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor ˆ $valorB ||xor||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
|  ̃ $valor||Negació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;lt;$valorB ||Desplaçament a l’esquerra||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;&amp;gt;$valorB||Desplaçament a la dreta||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de comparació '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor == $valorB||Igual||TRUE si $valor és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor === $valorB||Idèntic||TRUE si $valor és igual a $valorB i són del mateix tipus.&lt;br /&gt;
|-&lt;br /&gt;
| $valor != $valorB ||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;gt; $ valorB||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor !== $valorB ||No idèntic||TRUE si $valor no és igual a $valorB o no són del mateix tipus&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt; $valorB||Més petit que||TRUE si $valor és més petit que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt; $valorB||Més gran que||TRUE si $valor és més gran que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;= $valorB||Més petit o igual que||TRUE si $valor és més petit o igual que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;= $valorB||Més gran o igual que||TRUE si $valor és més gran o igual que $valorB.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Operadors d’increment i decrement '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| ++$valor||Preincrement||Incrementa $valor una unitat, i després retorna $valor.&lt;br /&gt;
|-&lt;br /&gt;
| $valor++||Postincrement||Retorna $valor i incrementa $valor una unitat.&lt;br /&gt;
|-&lt;br /&gt;
| –$valor ||Predecrement||Decrementa $valor una unitat i retorna $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor–||Postdecrement||Retorna $valor i decrementa $valor una unitat.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de lògica '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor and valorB||i||TRUE si $valor i $valorB són TRUE&lt;br /&gt;
|-&lt;br /&gt;
| $valor or $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor xor $valorB ||xor||TRUE si $valor o $valorB són TRUE, però no tots dos alhora.&lt;br /&gt;
|-&lt;br /&gt;
| !$valor||No||Inverteix el contingut de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp;&amp;amp; $valorB ||i||TRUE si $valor i $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor II $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Els Vectors i les Matrius (Arrays) ===&lt;br /&gt;
Les matrius i els vectors són conjunts de dades que poden estar definides en un Guió de PHP. Les matrius poden contenir altres matrius dintre d'ells sense restricció (multidimensionals). &lt;br /&gt;
&lt;br /&gt;
Els vectors es poden crear de dues maneres. La primera consisteix en l'ús de la funció '''array()'''. La segona implica l'ús de claudàtors.&lt;br /&gt;
Exemple de declaracions d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$elmeuarray = array($valor1, $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
$elmeuarray[1] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//També es pot declarar de la següent manera:&lt;br /&gt;
$elmeuarray = array('mes1' =&amp;gt; $valor1, 'mes2' =&amp;gt; $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
$elmeuarray['mes2'] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//Però tambés es pot declarar directament amb claudàtors:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
//o amb la següent notació&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemples d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$array = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;type&amp;quot;=&amp;gt;&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;manufactured&amp;quot;=&amp;gt;&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2 = array(&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3 = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array['name']=&amp;quot;BMW&amp;quot;;&lt;br /&gt;
$array['type']=&amp;quot;SERIE 1&amp;quot;;&lt;br /&gt;
$array['colour']=&amp;quot;BLANCO&amp;quot;;&lt;br /&gt;
$array['manufactured']=&amp;quot;2035&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2[]=&amp;quot;AUDI&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;A5&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;ROJO&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;2038&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3['name']=&amp;quot;FERRARI&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;SPIDER&amp;quot;;&lt;br /&gt;
$array3['colour']=&amp;quot;VERDE&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;2013&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les matrius son vectors multidimensionals. Els elements d'un vector a la seva vegada poden ser un altre vector. Un exemple és el següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$cars = array(&lt;br /&gt;
   &amp;quot;car1&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Toyota&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;Green&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1999,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1998),&lt;br /&gt;
   &amp;quot;car2&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;BMW&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;RED&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 2005,&amp;quot;engine_cc&amp;quot; =&amp;gt; 2400),&lt;br /&gt;
   &amp;quot;car3&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Renault&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;White&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1993,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1395),&lt;br /&gt;
);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $cars['car1']['make'],&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo $cars['car3']['engine_cc'];&lt;br /&gt;
&lt;br /&gt;
/* El resultat de l'execució de les intruccions anteriors és:&lt;br /&gt;
Toyota&lt;br /&gt;
1395&lt;br /&gt;
*/&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Més informació sobre arrays [http://php.net/manual/en/language.types.array.php aquí.]&lt;br /&gt;
Existeixen MOLTES funcions per manipular els arrays. Dona una ullada a [http://php.net/manual/en/ref.array.php aquesta pàgina] abans que comencis a implementar funcions que ja existeixen a la llibreria de php.&lt;br /&gt;
&lt;br /&gt;
=== Estructures de control ===&lt;br /&gt;
==== La sentència '''IF''' i l'Operador Ternari ====&lt;br /&gt;
Les estructures condicionals s'utilitzen per controlar quines instruccions s'executen. Els condicionals en PHP estan estructurats de manera similar als trobats en C ++ i Java .&lt;br /&gt;
Exemple d'estructures condicionals:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//Exemple 1&lt;br /&gt;
$foo = 1;&lt;br /&gt;
$bar = 2;&lt;br /&gt;
if($foo == $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is equal to $bar.&amp;quot;;&lt;br /&gt;
} elseif ($foo &amp;gt; $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is greater than $bar.&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;$foo is less than $bar.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple 2&lt;br /&gt;
$lower = 10;&lt;br /&gt;
$upper = 100;&lt;br /&gt;
$needle = 25;&lt;br /&gt;
if(($needle &amp;gt;= $lower) &amp;amp;&amp;amp; ($needle &amp;lt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is in the haystack.&amp;quot;;&lt;br /&gt;
} elseif (($needle &amp;lt;= $lower) || ($needle &amp;gt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is outside of the haystack.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple Operador Ternari&lt;br /&gt;
&lt;br /&gt;
$missatge =  (date('G') &amp;lt; 12) ? 'Buenos días' : 'Buenas tardes';&lt;br /&gt;
&lt;br /&gt;
//equival a la següent estructura:&lt;br /&gt;
if (date('G') &amp;lt; 12) {&lt;br /&gt;
$missatge = 'Buenos días';&lt;br /&gt;
} else {&lt;br /&gt;
$missatge = 'Buenas tardes';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''SWITCH''' ====&lt;br /&gt;
Quan es necessita utilitzar un IF amb molts Else pot resultar que es vegi un codi molt redundant. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user_command == &amp;quot;n&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_north();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;e&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_east();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;s&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_south();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;w&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_west();&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  do_something_else();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per millorar la llegibilitat del codi utilitzarem l'estructura 'Switch' de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 switch($user_command)&lt;br /&gt;
 {&lt;br /&gt;
   case 'n':&lt;br /&gt;
     go_north();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'e':&lt;br /&gt;
     go_east();&lt;br /&gt;
     break;&lt;br /&gt;
   case 's':&lt;br /&gt;
     go_south();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'w':&lt;br /&gt;
     go_west();&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     do_something_else();&lt;br /&gt;
     break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Un altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($firstvariable == 'comparison1' &lt;br /&gt;
         || $firstvariable == 'comparison2')&lt;br /&gt;
 {&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
 }&lt;br /&gt;
 else if ($firstvariable == 'comparison3')&lt;br /&gt;
 {&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
      launchMissiles();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//amb l'estructura switch :&lt;br /&gt;
 switch($firstvariable)&lt;br /&gt;
 {&lt;br /&gt;
  case 'comparison1':&lt;br /&gt;
  case 'comparison2':&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  case 'comparison3':&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  default: &lt;br /&gt;
      launchMissiles();&lt;br /&gt;
      break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''WHILE''' ====&lt;br /&gt;
Aquesta sentència s'utilitzarà per repetir una serie d'instruccions tantes vegades com el condicional sigui evaluat a True.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$c = 0;&lt;br /&gt;
while ($c &amp;lt; 5) {&lt;br /&gt;
   echo $c++;&lt;br /&gt;
} ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mira el següent codi i enraona si serà un bucle infinit o no:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$c = 1;&lt;br /&gt;
$myName=&amp;quot;Fred&amp;quot;;&lt;br /&gt;
while ($myName != &amp;quot;Rumplestilskin&amp;quot;) &lt;br /&gt;
{&lt;br /&gt;
   if ($myName==&amp;quot;Fred&amp;quot;) &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Leslie&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Marc&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   $c++;&lt;br /&gt;
 &lt;br /&gt;
   if ($c==3) &lt;br /&gt;
   {&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
echo &amp;quot;You lose and I get your baby!\n&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''do ... WHILE''' ====&lt;br /&gt;
És semblan al bucle anterior però les intruccions sempre s'execulten almenys 1 vegada. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  $c = 6;&lt;br /&gt;
  do {&lt;br /&gt;
    echo 'Hi';&lt;br /&gt;
  } while ($c &amp;lt; 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''FOR''' ====&lt;br /&gt;
La sintaxi bàsica d'aquesta sentencia és la següent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for([initialization]; [condition]; [step])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'ús:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 for($i = 0; $i &amp;lt; 5; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilització amb arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $menu = array(&amp;quot;Toast and Jam&amp;quot;, &amp;quot;Bacon and Eggs&amp;quot;, &amp;quot;Homefries&amp;quot;, &amp;quot;Skillet&amp;quot;, &amp;quot;Milk and Cereal&amp;quot;);&lt;br /&gt;
 // note to self: get breakfast after writing this article&lt;br /&gt;
 $count = count($menu);&lt;br /&gt;
 for($i = 0; $i &amp;lt; $count; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i + 1 . &amp;quot;. &amp;quot; . $menu[$i] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== La sentència '''FOREACH''' ====&lt;br /&gt;
Aquesta sentència és molt utilitzada per recòrrer arrays. Com el parell array[key]=value pot ser string en ambdós casos, aquesta estructura ens permet obternir-los:&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach ($array as $someVar) {&lt;br /&gt;
  echo ($someVar . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//un altre exemple:&lt;br /&gt;
foreach ($array as $key =&amp;gt; $value) {&lt;br /&gt;
  echo ($key.&amp;quot;holds the value &amp;quot;.$value.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''break''' ====&lt;br /&gt;
&lt;br /&gt;
La sentència break provoca la sortida de qualsevol estructura de control, trencant així un bucle. Penseu per exemple un bucle que cerca un element d’un array. Una vegada trobat, és ineficient acabar de recórrer la resta de l’array.&lt;br /&gt;
''Podeu indicar a aquesta sentència quantes estructures de control voleu saltar. ''&lt;br /&gt;
En l’exemple següent el break provoca la sortida de dos blocs de codi:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
while($edat&amp;lt;20)&lt;br /&gt;
{&lt;br /&gt;
	for( ; ; $edat=$edat+1)&lt;br /&gt;
	{&lt;br /&gt;
		if($edat==18)&lt;br /&gt;
		{&lt;br /&gt;
			echo &amp;quot;Ara ja tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
			break 2;&lt;br /&gt;
		}&lt;br /&gt;
		echo &amp;quot;Encara ets menor d’edat, ja que tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;Aquesta línia no sortirà per pantalla!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;Ja no ets menor d’edat! Tens $edat anys!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
&lt;br /&gt;
===Exercici: tablita ===&lt;br /&gt;
Se desea crear una página web en la cual muestre un título y luego haga una tabla que imprima 10 filas mostrando &amp;quot;estamos en 2DAW&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;th&amp;gt;M09-PHP&amp;lt;/th&amp;gt;  &lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;?php&lt;br /&gt;
                $conta =1;&lt;br /&gt;
                while($conta&amp;lt;=10) { &lt;br /&gt;
                    echo &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;td&amp;gt;Estamos en DAW2&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    $conta++;&lt;br /&gt;
                }&lt;br /&gt;
            ?&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
     &amp;lt;/body&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exercici: Vector (opcional) ===&lt;br /&gt;
Queremos crear un vector &amp;quot;ciudades&amp;quot; donde introduciremos una serie  de ciudades, luego deberá mostrar cada una de las ciudades y el número total.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Recòrrer array ====&lt;br /&gt;
Donat el següent array:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$eu = array( &amp;quot;Italy&amp;quot;=&amp;gt;&amp;quot;Rome&amp;quot;, &amp;quot;Luxembourg&amp;quot;=&amp;gt;&amp;quot;Luxembourg&amp;quot;, &amp;quot;Belgium&amp;quot;=&amp;gt; &amp;quot;Brussels&amp;quot;, &lt;br /&gt;
&amp;quot;Denmark&amp;quot;=&amp;gt;&amp;quot;Copenhagen&amp;quot;, &amp;quot;Finland&amp;quot;=&amp;gt;&amp;quot;Helsinki&amp;quot;, &amp;quot;France&amp;quot; =&amp;gt; &amp;quot;Paris&amp;quot;, &amp;quot;Slovakia&amp;quot;=&amp;gt;&amp;quot;Bratislava&amp;quot;, &lt;br /&gt;
&amp;quot;Slovenia&amp;quot;=&amp;gt;&amp;quot;Ljubljana&amp;quot;, &amp;quot;Germany&amp;quot; =&amp;gt; &amp;quot;Berlin&amp;quot;, &amp;quot;Greece&amp;quot; =&amp;gt; &amp;quot;Athens&amp;quot;, &amp;quot;Ireland&amp;quot;=&amp;gt;&amp;quot;Dublin&amp;quot;, &lt;br /&gt;
&amp;quot;Netherlands&amp;quot;=&amp;gt;&amp;quot;Amsterdam&amp;quot;, &amp;quot;Portugal&amp;quot;=&amp;gt;&amp;quot;Lisbon&amp;quot;, &amp;quot;Spain&amp;quot;=&amp;gt;&amp;quot;Madrid&amp;quot;, &amp;quot;Sweden&amp;quot;=&amp;gt;&amp;quot;Stockholm&amp;quot;,&lt;br /&gt;
 &amp;quot;United Kingdom&amp;quot;=&amp;gt;&amp;quot;London&amp;quot;, &amp;quot;Cyprus&amp;quot;=&amp;gt;&amp;quot;Nicosia&amp;quot;, &amp;quot;Lithuania&amp;quot;=&amp;gt;&amp;quot;Vilnius&amp;quot;, &lt;br /&gt;
&amp;quot;Czech Republic&amp;quot;=&amp;gt;&amp;quot;Prague&amp;quot;, &amp;quot;Estonia&amp;quot;=&amp;gt;&amp;quot;Tallin&amp;quot;, &amp;quot;Hungary&amp;quot;=&amp;gt;&amp;quot;Budapest&amp;quot;, &amp;quot;Latvia&amp;quot;=&amp;gt;&amp;quot;Riga&amp;quot;, &lt;br /&gt;
&amp;quot;Malta&amp;quot;=&amp;gt;&amp;quot;Valetta&amp;quot;, &amp;quot;Austria&amp;quot; =&amp;gt; &amp;quot;Vienna&amp;quot;, &amp;quot;Poland&amp;quot;=&amp;gt;&amp;quot;Warsaw&amp;quot;) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Crea un script amb PHP que mostri un llistat amb el noms de les capitals i els seus corresponents països. El llistat ha de ser semblant a:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
La capital de Netherlands és Amsterdam&lt;br /&gt;
La capital de Greece és Athens&lt;br /&gt;
La capital de Germany és Berlin&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[solucio_php_recorrer_array]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Afegir un element a un array ====&lt;br /&gt;
Escriu un programa que afegeixi un nou element a un array en una posició determinada.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//abans:&lt;br /&gt;
12345&lt;br /&gt;
&lt;br /&gt;
//després d'afegir $ l'array és:&lt;br /&gt;
123$45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
:[[solucio_afegir_element_array_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Curta i llarga ====&lt;br /&gt;
Escriu un programa en PHP que retorni la longitud màxima i mínima dels strings que conté un array.&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ar = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$max=0;&lt;br /&gt;
$min = PHP_INT_MAX;&lt;br /&gt;
&lt;br /&gt;
foreach($ar as $valor){&lt;br /&gt;
    if( strlen($valor) &amp;lt; $min){&lt;br /&gt;
        $min = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
    if (strlen($valor) &amp;gt; $max){&lt;br /&gt;
        $max = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;La longitud mes curta es $min i la mes llarga es $max.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Otra solucion:&lt;br /&gt;
&lt;br /&gt;
$my_array = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$otroarray = array_map('strlen', $my_array);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;La longitud mes curta es &amp;quot;. min($otroarray) .&amp;quot; i la mes llarga es &amp;quot;. max($otroarray).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
print_r($otroarray);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==== Exercici: Dibuixa asteriscs ====&lt;br /&gt;
Dibuixa amb PHP utilitzant asteriscs el següent dibuix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* &lt;br /&gt;
* * &lt;br /&gt;
* * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * &lt;br /&gt;
* * &lt;br /&gt;
* &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
$n=5;  &lt;br /&gt;
&lt;br /&gt;
for($i=1; $i&amp;lt;=$n; $i++)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
for($i=$n; $i&amp;gt;=1; $i--)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Escacs ====&lt;br /&gt;
Dibuixa una taula d'escacs com la que pots veure a continuació. &lt;br /&gt;
Table width=&amp;quot;270px&amp;quot; i cada cel·la ocupa 30px d'amplada i d'altura.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:escacs.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:solucio_escacs_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcions ===&lt;br /&gt;
&lt;br /&gt;
Les funcions son grup d'instruccions que poden ser cridades en qualsevol moment. Les funcions són útils per re-utilitzar codi de manera sencilla dintre de la nostra aplicació.&lt;br /&gt;
====Funcions definides per l’usuari====&lt;br /&gt;
L’usuari pot definir totes les funcions que necessiti. És imprescindible que el nom donat a la funció no estigui prohibit, és a dir, no es poden fer servir:&lt;br /&gt;
*paraules reservades (per exemple, echo), &lt;br /&gt;
*començar amb un nombre o un caràcter especial&lt;br /&gt;
*repetir el nom d’una funció dins un mateix àmbit. &lt;br /&gt;
Tot i que el PHP '''no farà cap distinció entre majúscules i minúscules''', es recomana utilitzar el nom de la funció idèntic a l’utilitzat en la declaració.&lt;br /&gt;
Les funcions poden rebre paràmetres. El pas de paràmetres d’entrada es fa escrivint entre parèntesis i a continuació del nom de la funció.&lt;br /&gt;
En l’exemple següent podeu veure com es declara la funció missatge i com, posteriorment, es crida passant-hi un paràmetre.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function missatge($argument)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;$argument&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
missatge(&amp;quot;Aquest és l’argument que es passa en aquest exemple.&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les funcions també podran retornar valors. Per fer-ho caldrà utilitzar la sentència '''return'''.&lt;br /&gt;
En l’exemple següent comprovareu com la funció suma, la qual rep dos paràmetres, retorna el resultat de sumar dos nombres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function suma ($valor1,$valor2)&lt;br /&gt;
{&lt;br /&gt;
	return($valor1+$valor2);&lt;br /&gt;
}&lt;br /&gt;
echo suma(4,6);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Funcions Internes====&lt;br /&gt;
El llenguatge PHP té funcions definides internament. Aquestes funcions són de gran utilitat per al programador i resulta imprescindible estudiarles i conèixer-ne les més importants.&lt;br /&gt;
&lt;br /&gt;
És possible que diverses funcions no es reconeguin en el vostre entorn de treball del PHP; el motiu d’això és que algunes funcions internes no s’han inclòs en la compilació, la qual cosa ha fet necessària una compilació dels mòduls que les contenen. Amb phpinfo() es poden veure les extensions carregades en la vostra configuració del PHP.&lt;br /&gt;
&lt;br /&gt;
Són funcions internes molt usuals ''echo, fprintf, print, printf i sprintf'', en què queda demostrat que el llenguatge PHP ja té definides funcions específiques que poden ser de gran utilitat per a l’usuari. &lt;br /&gt;
&lt;br /&gt;
Podeu mirar l’ajuda de PHP a la [https://www.php.net/manual/es/funcref.php pàgina oficial].&lt;br /&gt;
Funcions de Strings: [http://php.net/manual/en/ref.strings.php pàgina oficial].&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot codificar amb codificació ''md5'' el contingut d’una variable:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom = 'Blanca';&lt;br /&gt;
echo(&amp;quot;La codificació md5 de $nom és:&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
echo md5($nom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Exercici===&lt;br /&gt;
El código de encriptación md5 y sha están comprometido ya que son fáciles de desencriptar. ¿Qué algoritmo se debería utilizar?&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Algoritmes d'ordenació====&lt;br /&gt;
Segons el següent array &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fruits = array(&amp;quot;lemon&amp;quot;, &amp;quot;orange&amp;quot;, &amp;quot;banana&amp;quot;, &amp;quot;apple&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SORT''' Esta función ordena una matriz. Los elementos se organizarán de menor a mayor cuando se haya completado esta función.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
sort($cars);&lt;br /&gt;
&lt;br /&gt;
BMW&lt;br /&gt;
Toyota&lt;br /&gt;
Volvo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''RSORT''' Esta función ordena una matriz en orden inverso (de mayor a menor).&lt;br /&gt;
Nota: Esta función asigna nuevas claves para los elementos en la matriz. Eliminará todas las claves existentes que haya asignado, en lugar de simplemente reordenar las claves.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
rsort($cars);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volvo&lt;br /&gt;
Toyota&lt;br /&gt;
BMW&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''asort'''()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;345&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;3&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
asort($age)&lt;br /&gt;
&lt;br /&gt;
Array ( [Ben] =&amp;gt; 3 [Joe] =&amp;gt; 43 [Peter] =&amp;gt; 345 ) &lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''arsort''' ()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
arsort($age);&lt;br /&gt;
&lt;br /&gt;
Array ( [Peter] =&amp;gt; 345 [Joe] =&amp;gt; 43 [Ben] =&amp;gt; 3 ) &lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ksort''' ()&lt;br /&gt;
Ordena una matriz por clave, manteniendo la clave de las correlaciones de datos. Esto es útil principalmente para matrices asociativas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;200&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;99&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
ksort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Ben, Value=99&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''krsort'''()                &lt;br /&gt;
Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
krsort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Peter, Value=35&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=37&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''natsort''' ()&lt;br /&gt;
Esta función implementa un algoritmo de ordenamiento que ordena cadenas alfanuméricas en la forma en que lo haría un ser humano mientras mantiene asociaciones de clave / valor. Esto se describe como un &amp;quot;orden natural&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$array1 = $array2 = array(&amp;quot;img12.png&amp;quot;, &amp;quot;img10.png&amp;quot;, &amp;quot;img2.png&amp;quot;, &amp;quot;img1.png&amp;quot;);&lt;br /&gt;
sort($array1);&lt;br /&gt;
echo &amp;quot;Standard sorting\n&amp;quot;;print_r($array1);&lt;br /&gt;
natsort($array2);&lt;br /&gt;
echo &amp;quot;\nNatural order sorting\n&amp;quot;;print_r($array2);?&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The above example will output:&lt;br /&gt;
Standard sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; img1.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [2] =&amp;gt; img12.png&lt;br /&gt;
    [3] =&amp;gt; img2.png&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Natural order sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [3] =&amp;gt; img1.png&lt;br /&gt;
    [2] =&amp;gt; img2.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [0] =&amp;gt; img12.png&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
====Exercici: Ordenació ====&lt;br /&gt;
Crea una funció que ordeni un array. &lt;br /&gt;
*Per claus de menor a major i de major a menor&lt;br /&gt;
*Per valors de menor a major i de major a menor&lt;br /&gt;
&lt;br /&gt;
[[:Solucio_ordenacio]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Comprova minúscules ====&lt;br /&gt;
Crea una funció que comprovi si tots els caràcters d'un string son minúscules.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function is_str_lowercase($str1)  &lt;br /&gt;
   {  &lt;br /&gt;
    for ($sc = 0; $sc &amp;lt; strlen($str1); $sc++) {  &lt;br /&gt;
          if (ord($str1[$sc]) &amp;gt;= ord('A') &amp;amp;&amp;amp;  ord($str1[$sc]) &amp;lt;= ord('Z')) {    // ord — devuelve el valor ASCII de un caracter&lt;br /&gt;
      return false;  &lt;br /&gt;
         }  &lt;br /&gt;
         }  &lt;br /&gt;
      return true;  &lt;br /&gt;
       }  &lt;br /&gt;
var_dump(is_str_lowercase('abc def ghi'));  &lt;br /&gt;
var_dump(is_str_lowercase('abc dEf ghi'));  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
====Exercici: Primers====&lt;br /&gt;
Crea una funció que indiqui si un número és primer.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function IsPrime($n)  &lt;br /&gt;
{  &lt;br /&gt;
 for($x=2; $x&amp;lt;$n; $x++)  &lt;br /&gt;
   {  &lt;br /&gt;
      if($n %$x ==0)  &lt;br /&gt;
          {  &lt;br /&gt;
           return 0;  &lt;br /&gt;
          }  &lt;br /&gt;
    }  &lt;br /&gt;
  return 1;  &lt;br /&gt;
   }  &lt;br /&gt;
$a = IsPrime(3);  &lt;br /&gt;
if ($a==0)  &lt;br /&gt;
echo 'No es Primo.....';  &lt;br /&gt;
else  &lt;br /&gt;
echo 'ES primo..';  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici- Normalizar ===&lt;br /&gt;
&lt;br /&gt;
Tenemos una base de datos que sólo acepta nombres y apellidos SIN acentos, ni dieresis... por tanto, queremos que cuando escriba el usuario un nombre como &amp;quot;jÚlïÒ&amp;quot; lo normalice a &amp;quot;JULIO&amp;quot;. &lt;br /&gt;
  $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
&lt;br /&gt;
  $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
&lt;br /&gt;
Es interesante investigar sobre la función strtr&lt;br /&gt;
&lt;br /&gt;
solución:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UTF-8 es una codificación multibyte que puede representar cualquier carácter Unicode.&lt;br /&gt;
ISO 8859-1 es una codificación de un solo byte que puede representar los primeros 256 caracteres Unicode.&lt;br /&gt;
Ambos codifican ASCII exactamente de la misma manera.&lt;br /&gt;
&lt;br /&gt;
utf8_decode -&amp;gt;  Convierte una cadena con los caracteres codificados ISO-8859-1 con UTF-8 &lt;br /&gt;
&lt;br /&gt;
   //función que quita los acentos, dieresis, Ñ....&lt;br /&gt;
    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
    $cadena = utf8_decode($cadena);&lt;br /&gt;
    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);&lt;br /&gt;
    $cadena = strtoupper($cadena);&lt;br /&gt;
    return utf8_encode($cadena);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 //$cadena = strtr(utf8_decode($cadena), utf8_decode($originales), $modificadas);   //Altra solució&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipus de Dades en PHP ==&lt;br /&gt;
&lt;br /&gt;
*'''Boolean'''&lt;br /&gt;
És un tipus de dades molt simple que pot representar un valor cert (TRUE) o fals (FALSE). Aquest tipus de dades s’utilitza molt en estructures de control. Si feu conversió de dades és molt important que tingueu en&lt;br /&gt;
compte que es considerarà fals el nombre enter, la cadena 0 o una cadena buida, una matriu buida, un objecte sense variables, el tipus NULL i els objectes SimpleXML que s’hagin creat d’etiquetes buides.&lt;br /&gt;
&lt;br /&gt;
*'''Integer'''&lt;br /&gt;
Aquest tipus representa nombres no fraccionables per sota de la unitat. Poden ser positius i negatius. Aquests nombres enters els podeu representar en notació decimal, hexadecimal o octal. La plataforma sobre la&lt;br /&gt;
qual treballeu determinarà la mida de les variables enteres. El PHP forçarà un canvi de tipus a flotant si es produeix un desbordament, tant si és positiu com negatiu. A continuació, es mostren dos exemples de variables enteres.&lt;br /&gt;
&lt;br /&gt;
*'''float'''&lt;br /&gt;
Aquest tipus fa referència als nombres de coma flotant, i normalment treballa amb una precisió aproximada de catorze dígits decimals. A continuació, es mostra un exemple d’una variable amb coma flotant.&lt;br /&gt;
&lt;br /&gt;
*'''String'''&lt;br /&gt;
Es tracta d’una cadena de caràcters. El llenguatge del PHP no imposa un límit a la mida d’aquestes cadenes; ara bé, no oblideu que el límit el marcarà la memòria del maquinari en què estigui funcionant el PHP. Aquí&lt;br /&gt;
teniu diversos exemples de cadenes.&lt;br /&gt;
&lt;br /&gt;
*'''array'''&lt;br /&gt;
un array és una matriu, d’una dimensió o més, que conté dades que s’associen segons unes claus. És un tipus molt útil, i comprovareu que el seu ús té una gran potència. Per crear una matriu podeu utilitzar la paraula&lt;br /&gt;
reservada ''array()'' o bé acompanyar el nom de la variable amb ''[ ]''.&lt;br /&gt;
&lt;br /&gt;
*'''object'''&lt;br /&gt;
aquest tipus d’objecte està previst en el llenguatge PHP perquè suporta el llenguatge orientat a objectes. Un objecte és un ítem amb unes característiques i funcionalitats marcades per la classe a la qual pertany. Per crear un objecte cal utilitzar la partícula ''new''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//tipus boolean:&lt;br /&gt;
$sortir=FALSE;&lt;br /&gt;
$entrar=TRUE;&lt;br /&gt;
&lt;br /&gt;
//tipus integer:&lt;br /&gt;
$positiu=3451;&lt;br /&gt;
$negatiu= − 4345&lt;br /&gt;
&lt;br /&gt;
//tipus float:&lt;br /&gt;
$amb_coma=34.5;&lt;br /&gt;
&lt;br /&gt;
//tipus string:&lt;br /&gt;
$nom=’Wayan’;&lt;br /&gt;
$salutacio=&amp;quot;Hola $nom!&amp;quot;;&lt;br /&gt;
echo $salutacio.&amp;quot; Benvingut&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus array:&lt;br /&gt;
$grau_cicles=array(&amp;quot;superior&amp;quot;,&amp;quot;mitja&amp;quot;);&lt;br /&gt;
$families[]=&amp;quot;Informàtica&amp;quot;;&lt;br /&gt;
$families[]=&amp;quot;Electrònica&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus objecte:&lt;br /&gt;
class Alumne {&lt;br /&gt;
public function matricular($nom)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Ja estàs matriculat $nom&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$alumne1=new Alumne();&lt;br /&gt;
$alumne1−&amp;gt;matricular(’Made’);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Creació Classes/ OBJECTES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Coche&lt;br /&gt;
{&lt;br /&gt;
	static $numruedas = 4;&lt;br /&gt;
	var $color;&lt;br /&gt;
	var $posx;&lt;br /&gt;
	var $posy;&lt;br /&gt;
	var $velocidad;&lt;br /&gt;
	function __construct($color, $posx, $posy)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;color = $color;&lt;br /&gt;
		$this-&amp;gt;posx = $posx;&lt;br /&gt;
		$this-&amp;gt;posy = $posy;&lt;br /&gt;
		$this-&amp;gt;velocidad = 0;&lt;br /&gt;
	}&lt;br /&gt;
	function mover($x, $y)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;posx = $x;&lt;br /&gt;
		$this-&amp;gt;posy = $y;&lt;br /&gt;
	}&lt;br /&gt;
	function acelerar()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;velocidad = $this-&amp;gt;velocidad + 10;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
	function frenar()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;velocidad &amp;gt; 10)&lt;br /&gt;
			$this-&amp;gt;velocidad = $this-&amp;gt;velocidad - 10;&lt;br /&gt;
		else&lt;br /&gt;
			$this-&amp;gt;velocidad = 0;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$car = new Coche(&amp;quot;verde&amp;quot;,10,10);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les dades especials ===&lt;br /&gt;
*'''resource'''&lt;br /&gt;
La variable que pertany a aquest tipus farà referència a un recurs extern. Determinades funcions faran ús d’aquest recurs. Per exemple, la funció mysql_db_query, que té la funció d’enviar una petició mySQL, retorna un tipus resource. En l’exemple següent la variable $resultat és de tipus resource:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query=&amp;quot;SELECT * FROM alumnes&amp;quot;;&lt;br /&gt;
$resultat=mysql_query($query);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''NULL'''&lt;br /&gt;
Quan necessiteu una variable que no tingui cap valor haureu d’utilitzar aquest tipus.&lt;br /&gt;
&lt;br /&gt;
===Els pseudotipus===&lt;br /&gt;
* '''mixed''': aquest pseudotipus indica que la variable en questió pot emmagatzemar múltiples tipus.&lt;br /&gt;
* '''number''': indica que la variable pot contenir un valor enter o de coma flotant.&lt;br /&gt;
* '''callback''': utilitzareu aquest pseudotipus per emmagatzemar crides de retorn generades per funcions de l’usuari.&lt;br /&gt;
&lt;br /&gt;
=== Conversions de tipus ===&lt;br /&gt;
&lt;br /&gt;
Per forçar un canvi de tipus haureu d’especificar entre parèntesis el tipus al qual voleu fer la conversió i col·locar-lo davant la variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Senténcia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Modelat a &lt;br /&gt;
|-&lt;br /&gt;
| (integer), (int) ||integer.&lt;br /&gt;
|-&lt;br /&gt;
| (boolean)||boolean&lt;br /&gt;
|-&lt;br /&gt;
| (float), (double), (real) ||float&lt;br /&gt;
|-&lt;br /&gt;
| (string) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (binary) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (array)||array&lt;br /&gt;
|-&lt;br /&gt;
| (object)|| object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Sense modelar 27/5: &amp;quot;.(27/5).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;I ara ja modelat: &amp;quot;.(integer)(27/5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants===&lt;br /&gt;
Una constant és un identificador (nom) per expressar un valor simple. Com el nom suggereix, aquest valor no pot variar durant l'execució del script. (A excepció de les [[http://php.net/manual/es/language.constants.predefined.php constants màgiques]], que en realitat no són constants). Una constant és sensible a majúscules per defecte. Per convenció, els identificadors de constants sempre solen declarar-se en majúscules.&lt;br /&gt;
&lt;br /&gt;
El nom d'una constant segueix les mateixes regles que qualsevol altra etiqueta de PHP. Un nom de constant vàlid comença per una lletra o subguió, seguit per qualsevol nombre o lletres, nombres o subguions. Usant una expressió regular, es representaria de la següent manera: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('MIN_VALUE', '0.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
define('MAX_VALUE', '1.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
echo MIN_VALUE;&lt;br /&gt;
//const MIN_VALUE = 0.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
//const MAX_VALUE = 1.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
class Exemple1&lt;br /&gt;
{&lt;br /&gt;
  //define('MIN_VALUE', '0.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
  //define('MAX_VALUE', '1.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  const MIN_VALUE = 0.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
  const MAX_VALUE = 1.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  public static function getMinValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MIN_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static function getMaxValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MAX_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo Exemple1::getMinValue();   //invocamos clase &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Cuál es la diferencia entre $this y self:: ?'''&lt;br /&gt;
&lt;br /&gt;
Uno usa $this para referenciar al objeto actual, y se utiliza self:: para referenciar la clase actual. Se utiliza $this-&amp;gt;nombre para nombres no estáticos y se utiliza self::nombres para nombres estáticos.&lt;br /&gt;
&lt;br /&gt;
=== Variables predefinides ===&lt;br /&gt;
&lt;br /&gt;
En PHP hi ha una sèrie de variables predefinides que resulten de gran ajuda per al programador. Dins d’aquestes variables predefinides cal destacar un gran grup, el grup de les anomenades superglobals.&lt;br /&gt;
&lt;br /&gt;
Les variables '''superglobals''' són variables que sempre estan disponibles en tots els àmbits.&lt;br /&gt;
&lt;br /&gt;
*'''$GLOBALS''':fa referència a totes les variables disponibles en l’àmbit global. Es tracta d’una variable de tipus matriu associativa.&lt;br /&gt;
En l’exemple següent es recorre la variable superglobal $GLOBALS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$una_variable=&amp;quot;Hola&amp;quot;;&lt;br /&gt;
$una_altra_variable=&amp;quot;Com va?&amp;quot;;&lt;br /&gt;
foreach ($GLOBALS as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;GLOBALS[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_SERVER''':ofereix informació molt últil sobre el servidor i l’entorn d’execució. Els valors que emmagatzema són generats pel navegador web.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*Executeu-lo i veureu un seguit de dades&lt;br /&gt;
referents a la màquina que fa de servidor del PHP. Entre altres coses, identificareu&lt;br /&gt;
el nom de la màquina, la versió del navegador, la versió del servidor web, la&lt;br /&gt;
ubicació de fitxers importants i un llarg etcètera.*/&lt;br /&gt;
&lt;br /&gt;
foreach ($_SERVER as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;SERVER[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_GET''': correspon a la variable GET del protocol HTTP. Emmagatzema els valors de les variables que es trasmeten per mitjà del protocol HTTP mitjançant el mètode GET. El seu ús és molt normal en formularis.&lt;br /&gt;
&lt;br /&gt;
*'''$_POST''': correspon a la variable POST del protocol HTTP. Emmagatzema els valors de les variables que es transmeten per mitjà del protocol HTTP mitjançant el mètode POST. El seu ús és, generalment, més adequat que el mètode GET per a temes de seguretat.&lt;br /&gt;
&lt;br /&gt;
*'''$_COOKIE''': és una variable de tipus matriu associativa que emmagatzemarà les variables passades a l’script per mitjà de les galetes de l’HTML.&lt;br /&gt;
&lt;br /&gt;
*'''$_REQUEST''': és una matriu associativa que conté les dades de $_GET ,$_POST i $_COOKIE.&lt;br /&gt;
&lt;br /&gt;
*'''$_FILES''': aquesta variable s’utilitza en la càrrega de fitxers per mitjà del protocol HTTP. El mètode utilitzat és el POST.&lt;br /&gt;
&lt;br /&gt;
*'''$_SESSION''': conté les variables de sessió disponibles en l’script actual.&lt;br /&gt;
&lt;br /&gt;
*'''$_ENV''': conté les variables d’entorn.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Detecció del Navegador ===&lt;br /&gt;
Escriu un script en PHP que detecti el navegador que està utilitzant el client que ha demanat la pàgina.&lt;br /&gt;
&lt;br /&gt;
[[:solució_detecció_navegador_php]]&lt;br /&gt;
&lt;br /&gt;
=== Variables estàtiques ===&lt;br /&gt;
Les variables estàtiques sempre mantenen el valor encara que el programa abandoni l’àmbit de la variable, i existeixen només en l’àmbit local de les funcions. No s’hi pot accedir fora d’aquest àmbit.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function comptador()&lt;br /&gt;
{&lt;br /&gt;
   $a = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador: &amp;quot;.$a.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $a++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function comptadorEstatic()&lt;br /&gt;
{&lt;br /&gt;
   static $b = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador estàtic: &amp;quot;.$b.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $b++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for($i=0;$i&amp;lt;3;$i++)&lt;br /&gt;
{&lt;br /&gt;
   comptador();&lt;br /&gt;
   comptadorEstatic();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integració PHP ==&lt;br /&gt;
&lt;br /&gt;
Normalment trobareu el llenguatge de programació PHP dins d’altres llenguatges.&lt;br /&gt;
El més usual és escriure codi en PHP dins de codi HTML.&lt;br /&gt;
&lt;br /&gt;
Heu de recordar que el codi PHP és interpretat pel servidor, i els resultats es mostren en el navegador que utilitzeu. La simbiosi que es crea entre el PHP i l’HTML permet al PHP generar HTML i a l’HTML passar dades al PHP.&lt;br /&gt;
&lt;br /&gt;
=== PHP dintre de PHP ===&lt;br /&gt;
&lt;br /&gt;
==== Include vs Require ====&lt;br /&gt;
És possible inserir el contingut d'un fitxer PHP en un altre arxiu PHP (abans que el servidor l'executi), amb la declaració d'incloure o requerir. Les sentències d'inclusió i requereixen són idèntics , excepte en cas de fallada :&lt;br /&gt;
&lt;br /&gt;
*'''requerir''' (require) produirà un error fatal ( E_COMPILE_ERROR ) i aturar la seqüència de comandaments&lt;br /&gt;
*'''inclou''' (include) només produirà una advertència ( E_WARNING ) i el guió seguirà&lt;br /&gt;
&lt;br /&gt;
Per tant, si voleu que l'execució continuï mostrant als usuaris la sortida, fins i tot si el fitxer d'inclusió falta, utilitzeu la instrucció d'inclusió. Altrament, en cas de FrameWork, CMS, o amb aplicacions PHP complexes, sempre utilitzeu la instrucció que requereix el fitxer per a poder continuar l'execució. Això ajudarà a evitar posar en perill la seguretat i la integritat de l'aplicació, per si de cas un arxiu clau falta accidentalment.&lt;br /&gt;
&lt;br /&gt;
Inclusió d'arxius estalvia molta feina. Això significa que pots crear una capçalera, peu de pàgina o arxiu de menú estàndard per a totes les pàgines web. Llavors, quan la capçalera ha de ser actualitzada, només s'ha d'actualitzar la capçalera inclouen l'arxiu.&lt;br /&gt;
&lt;br /&gt;
'''Sintaxi'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include 'filename.php';&lt;br /&gt;
&lt;br /&gt;
//or&lt;br /&gt;
&lt;br /&gt;
require 'Otherfilename.php';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Include_once vs Require_once ====&lt;br /&gt;
Require_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a require.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Include_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a include.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redireccions ====&lt;br /&gt;
* Son sentencies on s'envia al navegador una nova pàgina. La pàgina que tenia el navegador desapareix i apareix una nova pàgina, la que està definida al location: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
header(&amp;quot;location: novapàgina.php&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici PHP amb cap i peus ===&lt;br /&gt;
&lt;br /&gt;
L’objectiu d’aquesta activitat és mostrar el funcionament de la inclusió d’arxius a PHP. Fer servir includes us permet simplificar el codi de les pàgines. Per exemple, podeu afegir un fitxer de capçalera (cap.php) i un de peu (peu.php) amb els continguts comuns de totes les pàgines del vostre lloc (el bàner, el menú, la informació general). Senzillament incloent aquests fitxers a totes les pàgines, podeu aconseguir una estètica comú. Si heu de canviar en algun moment la capçalera, modificant l’arxiu cap.php ho tindreu modificat a totes les pàgines del web.&lt;br /&gt;
Feu una pàgina web amb continguts estructurats amb dos fitxers: cap.php i peu.php&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
[[:solucio_cap_peus_php]]&lt;br /&gt;
&lt;br /&gt;
[[:solucio_cap_peus_php2]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP i Formularis HTML ===&lt;br /&gt;
El formulari electrònic és una eina molt potent fortament establida a Internet. Permet l’intercanvi o la introducció de dades entre usuaris d’una manera ràpida i senzilla. Un formulari permet la interactivitat i és el detonant que converteix Internet en l’eina més poderosa per enviar informació a un destinatari.&lt;br /&gt;
&lt;br /&gt;
El llenguatge PHP representa un salt qualitatiu enorme en l’ús de formularis. L’HTML no és un llenguatge creat pensant a utilitzar formularis, sinó que es va crear amb altres objectius. El llenguatge PHP té un gran potencial en la gestió de dades; per tant, quan HTML i PHP treballen juntament amb formularis ens trobem amb un binomi ideal.&lt;br /&gt;
&lt;br /&gt;
====Preparació de l’HTML====&lt;br /&gt;
El llenguatge HTML mostrarà la façana que l’usuari veurà a la pantalla del navegador. El PHP serà darrere d’aquesta primera pantalla i treballarà amb les dades.&lt;br /&gt;
El primer que cal programar per fer servir un formulari dissenyat en PHP és crear&lt;br /&gt;
el codi HTML. Un formulari en HTML s’emmarca entre les etiquetes &amp;lt;FORM&amp;gt; i &amp;lt;/FORM&amp;gt;. Per manipular aquest formulari s’utilitza l’atribut ''ACTION''.&lt;br /&gt;
L’atribut ''ACTION'' indica el programa que s’encarrega de manipular les dades, tasca que encomanareu a un codi dissenyat en llenguatge PHP.&lt;br /&gt;
L’etiqueta &amp;lt;form&amp;gt; us permet fer servir dos mètodes per enviar informació: '''GET''' i '''POST'''.&lt;br /&gt;
El mètode '''GET''' és molt útil en motors de cerca, però no ofereix gaire seguretat, ja que les dades que envia es poden veure en l’URL del navegador.&lt;br /&gt;
El mètode '''POST''' és molt més segur, ja que quan el servidor detecta que el mètode de transacció d’informació és '''POST''' espera rebre dades immediatament sense fer servir l’URL, la qual cosa implica que aquestes dades no seran visibles en l’URL.&lt;br /&gt;
Exemple de Formulari:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;El nostre primer exemple amb formularis&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Introdueix el teu nom i prem el botó!&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;FORM ACTION=&amp;quot;contesta.php&amp;quot; METHOD=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Si us plau, escriu el teu nom:&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;INPUT TYPE=&amp;quot;submit&amp;quot; VALUE=&amp;quot;Enviar&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/FORM&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Com valora el PHP un formulari ====&lt;br /&gt;
En el moment d’enviar les dades des del formulari d’una pàgina HTML a un fitxer escrit en PHP s’ha de tenir en compte que l’atribut ''NAME'' emmagatzema el valor.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Resposta a la petició de dades&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;...Continuem amb l’exemple!&amp;lt;/H1&amp;gt;&lt;br /&gt;
El teu nom és:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_POST['nom'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En el moment en què s’envien dades del formulari HTML cap a un fitxer PHP, aquestes dades apareixeran dins d’un array superglobal amb tots els seus valors.&lt;br /&gt;
&lt;br /&gt;
=== Exercici Mini Calculadora ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar una calculadora de sólo SUMA, para ello tendremos dos inputs y un botón, cuando se aprete el botón deberá enviar enviar el formulario al server haciendo la operación y mostrándola.&lt;br /&gt;
 &lt;br /&gt;
=== Exercici Formulari amb Vectors ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar un formulario en el servidor que genere 10 inputs y un botón, a continuación el servidor recogerá todos los datos los mostrará y calculará la suma total. &lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
:[[solu_vector_input]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Les matrius associatives i els formularis====&lt;br /&gt;
Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu ús, però, serà condicionat pel mètode utilitzat en el pas de dades en el codi HTML. Així, si en el codi HTMLel mètode és '''POST''' haureu de fer servir la matriu associativa '''$_POST'''; en canvi, si heu fet servir el mètode '''GET''' en el codi HTML, haureu de fer servir la matriu associativa '''$_GET'''.&lt;br /&gt;
&lt;br /&gt;
Per accedir als valors emmagatzemats en les matrius associatives fareu servir l’atribut corresponent '''NAME''' de l’HTML com a índex de la matriu associativa. &lt;br /&gt;
&lt;br /&gt;
No heu d’oblidar que el PHP és un llenguatge de programació que, entre altres coses, us permet utilitzar bucles. En el formulari següent es defineix una selecció múltiple, en què podreu marcar els navegadors que coneixeu.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Un exemple amb un formulari&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;seleccioMultiple.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Nom: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Correu electrònic: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Navegadors que coneixes: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;select name=&amp;quot;navegadors[]&amp;quot; multiple&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Chrome&amp;quot;&amp;gt;Chrome&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;MozillaFirefox&amp;quot;&amp;gt;Mozilla Firefox&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Safari&amp;quot;&amp;gt;Safari&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Opera&amp;quot;&amp;gt;Opera&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Lynx&amp;quot;&amp;gt;Lynx&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquí us trobareu amb un petit problema. Per recuperar els valors introduïts com a nom i correu electrònic no hi ha cap problema, la matriu $_POST us permetrà un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecció múltiple, però, sorgeix un petit problema. A diferència dels casos anteriors, ara navegadors pot contenir més d’un valor, com ho fareu per mostrar tots els valors per pantalla? La solució és utilitzar un bucle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach ($_POST['navegadors'] as $opcio)&lt;br /&gt;
echo $opcio.&amp;quot;\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un altre exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ($_POST) {&lt;br /&gt;
    echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
    //echo htmlspecialchars(print_r($_POST, true));&lt;br /&gt;
    print_r($_POST);&lt;br /&gt;
    print_r($_POST['personal']);&lt;br /&gt;
    print_r($_POST['personal']['nombre']);&lt;br /&gt;
    echo '&amp;lt;/pre&amp;gt;';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
    Nombre:  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[nombre]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Email:   &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[email]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Cerveza: &amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;select multiple name=&amp;quot;cerveza[]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;warthog&amp;quot;&amp;gt;Warthog&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;guinness&amp;quot;&amp;gt;Guinness&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;stuttgarter&amp;quot;&amp;gt;Stuttgarter Schwabenbräu&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;¡enviarme!&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode GET ===&lt;br /&gt;
*El mètode GET produeix una cadena llarga que apareix en els logs del servidor i a la URL del navegador.&lt;br /&gt;
&lt;br /&gt;
*GET envia les dades usant la URL&lt;br /&gt;
&lt;br /&gt;
*El mètode GET es limita a enviar fins a només 1.024 caràcters .&lt;br /&gt;
&lt;br /&gt;
*Mai utilitzeu el mètode GET, si voleu enviar la contrasenya o una altra informació confidencial al servidor .&lt;br /&gt;
&lt;br /&gt;
*GET no pot ser utilitzat per enviar dades binàries, com imatges o documents de text, al servidor .&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode GET es pot accedir mitjançant la variable d'entorn QUERY_STRING.&lt;br /&gt;
&lt;br /&gt;
*PHP proveeix la matriu associativa $_GET per accedeix a tota la informació que s'enviï mitjançant el mètode GET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$PHP_SELF = $_SERVER['PHP_SELF'];&lt;br /&gt;
echo $PHP_SELF ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if( isset($_GET[&amp;quot;name&amp;quot;])||  isset($_GET[&amp;quot;age&amp;quot;]) )&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_GET['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_GET['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt; method=&amp;quot;GET&amp;quot;&amp;gt;&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode POST ===&lt;br /&gt;
&lt;br /&gt;
*POST envía los datos de forma que no podemos verlos (en un segundo plano u &amp;quot;ocultos&amp;quot; al usuario).&lt;br /&gt;
&lt;br /&gt;
*El mètode POST no té cap restricció en la mida de les dades a enviar.&lt;br /&gt;
&lt;br /&gt;
*El mètode POST es pot utilitzar per enviar ASCII, així com dades binàries.&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode POST passa per la capçalera HTTP. La seguretat depèn de protocol HTTP. Mitjançant l'ús d'HTTP segur pots assegurar-te que la seva informació està segura .&lt;br /&gt;
&lt;br /&gt;
*El PHP proveeix de la matriu associativa $ _POST per accedeix a tota la informació enviada pel mètode POST.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(isset($_POST[&amp;quot;name&amp;quot;]) ||  isset($_POST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_POST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_POST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;   &amp;lt;!--&amp;lt;?php $_PHP_SELF ?&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== $_PHP_SELF ===&lt;br /&gt;
La variable $_PHP_SELF conté el nom del script PHP (pàgina php) el qual està executant.  ESTÁ DESFASADO USAR $_SERVER['PHP_SELF']&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(  isset($_REQUEST[&amp;quot;name&amp;quot;]) ||  isset($_REQUEST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_REQUEST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_REQUEST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo formulario POST ===&lt;br /&gt;
&lt;br /&gt;
Dissenyar una pàgina web simple amb php que demani a lusuari el preu de tres productes diferents en tres&lt;br /&gt;
establiments diferents. Exemple:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Form1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Un cop s'introdueixi aquesta&lt;br /&gt;
informació al formulari, s'ha de mostrar el resultat, dels tres preus introduïts i el preu mitjà del producte.&lt;br /&gt;
&lt;br /&gt;
  DATOS RECIBIDOS&lt;br /&gt;
  Precio Guitarra Martin D18 en Ubisa: 4.200 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Thomann 3.800 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Alfasonic 4.100 euros&lt;br /&gt;
&lt;br /&gt;
  El precio medio del producto es de 4.0333333333333 euros&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;PHP Calcula precios&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;form name=&amp;quot;formularioDatos&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;01-Formulari.php&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt; CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Ubisa, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 input value=&amp;quot;Calcular&amp;quot; type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
01-Formulari.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php //Ejemplo aprenderaprogramar.com&lt;br /&gt;
$precio1 = $_POST['precio1'];&lt;br /&gt;
&lt;br /&gt;
$media = ($precio1);&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; DATOS RECIBIDOS&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Ubisa: &amp;quot;. $precio1. &amp;quot; euros&amp;quot;;&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; El precio medio del producto es de &amp;quot;. $media. &amp;quot; euros&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Acceso a Ficheros ===&lt;br /&gt;
&lt;br /&gt;
'''Abrir y cerrar el descriptor de ficheros'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $fitxer = fopen(&amp;quot;datos.txt&amp;quot;,&amp;quot;a&amp;quot;);&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'r' 	Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero. &lt;br /&gt;
'w+' 	Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear. &lt;br /&gt;
'a+' 	Apertura para lectura y escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() no tiene efecto, las escrituras siempre son pospuestas. &lt;br /&gt;
&lt;br /&gt;
'''Escribir datos en un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  $fp = fopen('datos.txt', 'a');&lt;br /&gt;
    fwrite($fp, 'Julio');&lt;br /&gt;
    fwrite($fp, 'Noguera');&lt;br /&gt;
    fclose($fp);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Leer datos de un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 $fitxer=fopen(&amp;quot;datos.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while(!feof($fitxer)){&lt;br /&gt;
       $line = fgets($fitxer);&lt;br /&gt;
       echo $line;&lt;br /&gt;
    }&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más info&lt;br /&gt;
http://www.php.net/manual/es/function.fopen.php&lt;br /&gt;
http://www.php.net/manual/es/function.fgets.php&lt;br /&gt;
http://www.php.net/manual/es/function.fwrite.php&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Formulari Insti // Acceso a ficheros ===&lt;br /&gt;
&lt;br /&gt;
Se desea crear un formulario donde se introduzcan los campos de nombre, apellidos, dni, contraseña, cuando se clique el botón de enviar, el servidor debe recibir todos los parámetros de ese usuario y escribirlos en un fichero de texto (fopen/fwrite), el siguiente usuario que rellene el formulario escribirá a continuación, después debe listar todos los ficheros que tiene el servidor (system()/shell_exec).&lt;br /&gt;
&lt;br /&gt;
solució: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
if ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;) { &lt;br /&gt;
&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    $nombre = $_POST['nombre'];  //recibe los parámetros del formulario&lt;br /&gt;
    $apellido = $_POST['apellido'];&lt;br /&gt;
    $dni = $_POST['dni'];&lt;br /&gt;
    $pass = $_POST['pass'];&lt;br /&gt;
&lt;br /&gt;
    $file = fopen(&amp;quot;clase.txt&amp;quot;, &amp;quot;a&amp;quot;);    //crea un descriptor de fichero&lt;br /&gt;
    fwrite($file, ($nombre) . &amp;quot;,&amp;quot; . ($apellido) . &amp;quot;,&amp;quot; . ($dni) . &amp;quot;,&amp;quot; . ($pass) . &amp;quot;\n&amp;quot;);  //introduce datos dentro del fichero&lt;br /&gt;
    fclose($file);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    $usuarioEnSistema = system('cat clase.txt');     //ejecuta terminal linux&lt;br /&gt;
   //$usuario = shell_exec('cat clase.txt'');   // comando más antiguo&lt;br /&gt;
&lt;br /&gt;
    echo $usuarioEnSistema;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nombre&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;apellido&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dni&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;pass&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Exercici: Calculadora PHP ===&lt;br /&gt;
Crea un formulari amb un únic TextBox on s'indiqui les operacions matemàtiques a realitzar. Envia el contingut del TextBox amb el mètode POST i realitza les operacions. Imprimeix per pantalla el resultat.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Solucio_calculadora_m6]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ISSET ===&lt;br /&gt;
&lt;br /&gt;
isset -&amp;gt; Devuelve '''true''' si la variable existe y tiene un valor distinto de null, false de lo contrario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var_dump( isset($var) );   //isset() devuelve '''false''' por que $var no ha sido definida&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''false''' aunque la variable haya sido declarada pues su valor es NULL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var = &amp;quot;&amp;quot;;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''true'''. El valor ya no es nulo aunque esté vacío&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Y cuando deberías usar isset()?'''&lt;br /&gt;
&lt;br /&gt;
Siempre y cuando que quieras comprobar que la variable existe (variable inicializada), un ejemplo bueno sería si quieres saber si se ha mandado un formulario:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;campo1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if (isset($_POST['submit']) {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''isset(), is_null() y empty(): Diferencias y ejemplos de uso'''&lt;br /&gt;
&lt;br /&gt;
https://cybmeta.com/isset-is_null-y-empty-diferencias-y-ejemplos-de-uso&lt;br /&gt;
&lt;br /&gt;
https://es.stackoverflow.com/questions/32133/como-y-cuando-se-usan-isset-y-empty-correctamente&lt;br /&gt;
&lt;br /&gt;
=== Exercici enviament de dades ===&lt;br /&gt;
És popular el disseny d’un document web, en què el mateix document conté la part del formulari HTML i el codi PHP que agafa les dades i les processa. Aquest procediment pot resultar estrany en principi, ja que esteu esperant dos documents ben diferenciats. Així i tot val la pena que veieu aquesta forma de treballar i decidiu si us resulta útil o no. Per fer-ho, simplement heu de fusionar els dos documents (el que envia les dades i el que les rep) en un document únic HTML+PHP de dues parts amb la següent estructura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(primera vegada que s'entra al document)&lt;br /&gt;
{&lt;br /&gt;
crear formulari HTML i enviar-ho al propi document&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
rebre les dades a través de POST o GET&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Feu un document amb aquestes característiques que enviï les següents dades:&lt;br /&gt;
*nom&lt;br /&gt;
*cognom&lt;br /&gt;
*contrasenya&lt;br /&gt;
*si l’usuari és alumne o professor&lt;br /&gt;
*si l’usuari és actiu o no&lt;br /&gt;
*foto (únicament el nom del fitxer)&lt;br /&gt;
*edat (entre 18 i 99)&lt;br /&gt;
*comentaris&lt;br /&gt;
*un camp ocult amb el nom ocult i valor prova&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[:solucio_enviament_dades_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Galetes ===&lt;br /&gt;
Les galetes són uns fitxers de text que emmagatzemen informació a l’ordinador client referent a la visita d’un usuari a una pàgina web.&lt;br /&gt;
Les galetes no són un acte d’intromissió per part de la pàgina web visitada; simplement, són una font d’informació molt útil per augmentar l’eficiència en l’accés.&lt;br /&gt;
Les galetes tenen una mida màxima d’1K i caduquen, la qual cosa fa molt difícil que s’utilitzin amb fins malintencionats. A més, únicament pot consultar la galeta el web que l’ha dipositada, la informació que conté no és visible per a la resta de pàgines web.&lt;br /&gt;
&lt;br /&gt;
Un ús molt freqüent de les galetes és emmagatzemar un perfil d’usuari. Així s’aconsegueix que cada vegada que el mateix usuari accedeix a un web, aquest en conegui les preferències i li mostri directament els continguts més adequats.&lt;br /&gt;
&lt;br /&gt;
Les galetes ajuden els programadors a crear un entorn més adequat per a l’usuari visitant. Moltes pàgines web permeten canviar la mida del text, els colors de la pàgina, la disposició d’alguns continguts, etc. Una vegada l’usuari ha modificat al seu gust l’aspecte de la pàgina web, aquestes dades s’emmagatzemen per a la propera visita.&lt;br /&gt;
&lt;br /&gt;
Importante: las cookies se envían al cliente mediante encabezados HTTP. Como cualquier otro encabezado, las cookies se deben enviar antes que cualquier salida que genere la página (antes que &amp;lt;html&amp;gt;, &amp;lt;head&amp;gt; o un simple espacio en blanco). &lt;br /&gt;
&lt;br /&gt;
'''Funcions del PHP per treballar amb galetes'''&lt;br /&gt;
&lt;br /&gt;
La funció que s’utilitza en PHP per crear galetes és setcookie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
bool setcookie(string $nom [, string $valor [, int $caduca= 0[, string $ruta [, string $domini [, bool $seguretat= false [, bool $nomeshttp=false]]]]]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* $nom: és obligatori i indica el nom que donareu a la galeta, la resta de paràmetres són opcionals.&lt;br /&gt;
* $valor: és el valor que tindrà la galeta.&lt;br /&gt;
* $caduca: indica els segons que té de vida la galeta; si no s’indica res la galeta deixarà d’existir quan finalitzi la sessió de l’usuari.&lt;br /&gt;
* $ruta: indica on podeu trobar la galeta dins el servidor.&lt;br /&gt;
Si no ponemos la ruta (Path), la cookie sólo se puede usar en páginas que se encuentren en el mismo directorio que la página que la creó. Si queremos que se utilice en un directorio en concreto debemos añadir la ruta.&lt;br /&gt;
&lt;br /&gt;
//Cookie creada en el directorio /registro/login&lt;br /&gt;
&lt;br /&gt;
//Si queremos que las páginas del directorio raíz / puedan acceder a la cookie&lt;br /&gt;
&lt;br /&gt;
* $domini: marca el domini en què la galeta està disponible.&lt;br /&gt;
* $seguretat: tindrà el valor TRUE si voleu que la galeta només s’utilitzi en una connexió segura (conexió HTTPs), i FALSE (que és el valor per defecte), si no és necessari un cert grau de seguretat.&lt;br /&gt;
* $nomeshttp: si té per valor TRUE marcarà que la galeta solament és accessible si s’utilitza el protocol HTTP.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
setcookie(&amp;quot;nom&amp;quot;, &amp;quot;Maadiva&amp;quot;, 3600, &amp;quot;/&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El segon fitxer s’encarregarà de consultar a la matriu associativa '''$_COOKIE''' el valor de la galeta indicada, que en aquest cas seria nom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_COOKIE[&amp;quot;nom&amp;quot;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
setcookie(&amp;quot;valor&amp;quot;, 1, time() + 30);    //time() tiempo desde que se originó unix.&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);    //no muestra todas las cookies por temas de seguridad&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unset($_COOKIE[&amp;quot;valor&amp;quot;]);  //otra forma setcookie('valor', 1, expire);  // setcookie(&amp;quot;valor&amp;quot;, 1, time() - 30);&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Se desea que cuente el número de visitas que realiza un usuario al visitar la página; este contador conserva su valor durante un año aún a pesar de que un usuario cierre el navegador y tarde días en volver a visitar la página.&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_contador_galletas]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Les cookies us permeten desar informació al navegador que estarà disponible més endavant pel vostre web. Per exemple, podeu desar la configuració personal de l’usuari o la llengua en què ha escollit visitar el web. La propera vegada que l’usuari visiti el web, el vostre codi PHP podrà obtenir aquesta informació desada i presentar a l’usuari el web amb la seva configuració personal o la llengua escollida. És important destacar que les cookies queden desades al navegador de l’usuari i no al servidor web.&lt;br /&gt;
&lt;br /&gt;
Feu un web amb dos fitxers. El primer, index.php, s’encarregarà d’obtenir el nom de l’usuari i la llengua que vol fer servir per defecte entre una llista desplegable mitjançant un formulari. Enviarà aquestes dades a un altre fitxer, cookie.php, que desarà la informació a les cookies.&lt;br /&gt;
La propera vegada que l’usuari accedeixi a index.php el formulari estarà emplenat amb la informació desada la vegada anterior que va accedir-hi.&lt;br /&gt;
&lt;br /&gt;
sol&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[:solucio_galetes_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sessió ===&lt;br /&gt;
&lt;br /&gt;
Les variables de sessió són variables que estan disponibles en múltiples pàgines sense haver de fer servir pas de paràmetres. Les variables de sessió tenen un temps de vida limitat i s’emmagatzemen en el servidor.&lt;br /&gt;
&lt;br /&gt;
Podeu fer servir les variables de sessió per mantenir informació (l’anomenada informació de sessió) entre diferents pàgines. Per exemple,&lt;br /&gt;
el nom d’usuari o una selecció de productes que ja s’hagi fet.&lt;br /&gt;
&lt;br /&gt;
A continuació, estudiareu un exemple format per tres fitxers. El primer fitxer és un formulari senzill que demana a l’usuari un identificador i una contrasenya. Aquestes dades s’envien a un segon fitxer, anomenat exempleAutenticar.php, que crea les variables de sessió. Finalment, trobareu un tercer fitxer anomenat continuem.php, que recupera la informació emmagatzemada en les variables de sessió.&lt;br /&gt;
&lt;br /&gt;
Just a sota d’aquest text hi ha el fitxer del qual partireu. L’hem anomena exempleSessions.php, però el podeu anomenar d’una altra manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Exemple amb variables de sessió&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
&amp;lt;form action=&amp;quot;exempleAutenticar.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
Escriu el teu nom:&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;usuari&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Escriu la teva contrasenya:&lt;br /&gt;
&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;contrasenya&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia!&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tot seguit apareix el codi del fitxer exempleAutenticar.php. En aquest fitxer creareu i inicialitzareu les dues variables de sessió que utilitzareu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION['id_usuari']=$_REQUEST['usuari'];&lt;br /&gt;
$_SESSION['clau_acces']=$_REQUEST['contrasenya'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...continueu amb l’exemple de variables de sessió...&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
Ja s’han emmagatzemat les variables de sessió.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;continuem.php&amp;quot;&amp;gt;Vinga! Cap al final de l’exemple!&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixeu-vos que el primer que es fa és cridar la funció '''session_start()'''. És obligatori que inicieu la sessió abans de cap etiqueta HTML perquè tot funcioni correctament.&lt;br /&gt;
Amb $_REQUEST es recuperen els dos valors que s’han passat des del fitxer inicial, és a dir, usuari i contrasenya, i els heu d’emmagatzemar en dues variables de sessió creades a $_SESSION, que rebran el nom d’id_usuari i clau_acces.&lt;br /&gt;
$_REQUEST és un array associatiu global que per defecte té els continguts de $_GET, $_POST i $_COOKIE.&lt;br /&gt;
A part de crear les variables de sessió i donar-los valors trobareu un enllaç cap al tercer fitxer.&lt;br /&gt;
El codi del tercer fitxer, continuem.php, el teniu a continuació:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com que esteu treballant amb sessions, el primer que hauríeu de fer és llançar la sessió amb session_start(). A continuació, es recuperen els valors emmagatzemats en les dues variables de sessió.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eliminar sesión&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
unset($_SESSION['id_usuari']); // will delete just the name data&lt;br /&gt;
&lt;br /&gt;
//session_destroy(); // borrará todos los datos asociados a ese usuario. También $_SESSION = array(); &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index3.php&amp;quot;&amp;gt;Destruir Variables de sesion&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les sessions us permeten emmagatzemar dades que podran ser compartides entre les diferents pàgines del web. Aquestes dades, a diferència de les cookies, estan emmagatzemades al servidor i estan disponibles durant tot el temps que l’usuari està interactuant amb la pàgina (temps de sessió).&lt;br /&gt;
Alguns exemples de dades que solen guardar-se a les sessions és si l’usuari ha accedit al web mitjançant els valors usuari/contrasenya, o un carret de la compra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici Sessions ====&lt;br /&gt;
1. Feu una pàgina web que passi entre les seves pàgines el nom de l’usuari i una variable (cost) que s’anirà incrementant en 10 cada vegada que l’usuari passa entre les pàgines (podem pensar que aquesta variable representa el cost de les compres que ha fet fins ara l’usuari al web).&lt;br /&gt;
La sessió es tancarà quan l’usuari torni a la pàgina de login.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://codigosdeprogramacion.com/2016/12/20/sistema-de-usuarios-y-sesiones-en-php-y-mysql-1-login-sesiones-y-logout/&lt;br /&gt;
&lt;br /&gt;
http://velozityweb.com/blog/php/login-de-usuarios-y-creacion-de-sesiones-con-php-y-mysql/#sthash.XbMcrnTA.PSO2jYQ9.dpbs&lt;br /&gt;
&lt;br /&gt;
http://www.formacionwebonline.com/crear-sesiones-php-en-intranet/&lt;br /&gt;
&lt;br /&gt;
=== Exercici Moodle ===&lt;br /&gt;
&lt;br /&gt;
2.Se trata de la hacer un moodle, tenemos un formulario y almacenaremos una base de datos (simulada) en la que guardaremos en un archivo el usuario, contraseña y rol de un profe y un alumno. &lt;br /&gt;
Deberá de comprobar si está registrado, en caso de estarlo se crearán las cookies y variables de sesión(5 minutos para el alumnado y 10 para el profe), en caso de no acceder deberán redireccionarse al login.&lt;br /&gt;
Si se validan correctamente, deberá acceder al menu y mostrar la información si tiene rol de alumno (ROLE_ALUMNO) y otra diferente si es profesor(ROLE_ALUMNO). &lt;br /&gt;
También deberá existir un logout en caso de querer terminar la sesión. &lt;br /&gt;
$_SESSION['caduca']=time()+60; &lt;br /&gt;
&lt;br /&gt;
Solució Exercici Moodle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_moodle]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejercicio Carrito ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--http://evilnapsis.com/2016/10/30/ejemplo-de-carrito-de-compras-sencillo-con-php-y-mysql/--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici Complert ====&lt;br /&gt;
Exercici que engloba Galetes, Idioma, Login, Intranet amb Cap, Peus, Menu i contingut i Sessions.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[http://www.infomerce.es/moodle/mod/resource/view.php?id=11136 Exercici de Classe]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
=== Creació del Arbre XML ===&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xmlDoc = new DOMDocument();&lt;br /&gt;
$xmlDoc-&amp;gt;load(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
=== Obtenir un element del arbre ===&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recòrrer tots els elemens ===&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print $xmlDoc-&amp;gt;saveXML(); //imprimir toda la info&lt;br /&gt;
&lt;br /&gt;
// recorrer las etiquetas y los valores&lt;br /&gt;
$x = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
foreach ($x-&amp;gt;childNodes AS $item) {&lt;br /&gt;
  print $item-&amp;gt;nodeName . &amp;quot; = &amp;quot; . $item-&amp;gt;nodeValue . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//otra manera de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   //selecciona todas las etiquetas aula y muestra el contenido dentro de ellas&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
    echo $aula-&amp;gt;nodeName;&lt;br /&gt;
    echo $aula-&amp;gt;nodeValue, PHP_EOL;&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Otra forma de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   // otra forma de acceder&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
   echo $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)[0]-&amp;gt;nodeValue;   //equivale a -&amp;gt;item(0)&lt;br /&gt;
   echo  $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
   echo $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Afegir un nou element ===&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$auladom = $xmlDoc-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmlDoc-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmlDoc-&amp;gt;createElement(&amp;quot;XARXA_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmlDoc-&amp;gt;createElement(&amp;quot;MASK_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmlDoc-&amp;gt;createElement(&amp;quot;INIT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmlDoc-&amp;gt;createElement(&amp;quot;CURRENT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
&lt;br /&gt;
$root = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
=== Esborrar un element ===&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//borrar nodo&lt;br /&gt;
$xmlDoc = new DOMDocument;&lt;br /&gt;
$xmlDoc-&amp;gt;load('file.xml');   //cargamos fichero&lt;br /&gt;
&lt;br /&gt;
$aula = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
&lt;br /&gt;
// seleccionamos el nodo concreto 0 y lo eleminamos&lt;br /&gt;
$aulaSeleccionada = $aula-&amp;gt;getElementsByTagName('aula')-&amp;gt;item(0);&lt;br /&gt;
$aulaborrada = $aula-&amp;gt;removeChild($aulaSeleccionada);&lt;br /&gt;
&lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;); //guardamos cambios&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici crear XML'''&lt;br /&gt;
&lt;br /&gt;
Tenim un formulari i volem ficar dins del nostre xml noves dades, per tant, haurem de crear un formulari on introduirem les dades.&lt;br /&gt;
&lt;br /&gt;
= Bibliografia / Webgrafia =&lt;br /&gt;
*[http://php.net/manual/es/ Manual oficial de PHP]&lt;br /&gt;
*[http://www.codeacademy.com Introducció a PHP]&lt;br /&gt;
*David Sklar, Adam Trachtenberg, &amp;quot;PHP Cookbook, Third Edition&amp;quot;, O’Reilly Media Inc., 2014. ISBN 978-1-449-36375-8&lt;br /&gt;
*Eduard García Sacristán, Eduard Latorre Jarque, Montserrat Madridejos Mora, Raúl Velaz Mayo, &amp;quot;Llenguatges de guions de servidor&amp;quot;, IOC, 2014 &lt;br /&gt;
*[https://docs.google.com/presentation/d/1ZQgIsW4KCyIfH8NyiqH9ueanM83Ym7bjitaxyQKS0hs/edit#slide=id.i14 Llenguatges de programació del costat del servidor]&lt;br /&gt;
*[http://www.adelat.org/media/docum/nuke_publico/lenguajes_del_lado_servidor_o_cliente.html www.Adelat.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EMMAGATZEMAR I LLEGIR FITXERS ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = '{&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}'&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SERIALIZACIÓN ==&lt;br /&gt;
&lt;br /&gt;
En PHP existe una forma muy sencilla de almacenar o transmitir cualquier tipo de valor (excepto el tipo resource) en forma de una cadena seriada: la serialización.&lt;br /&gt;
&lt;br /&gt;
La serialización te permite, por ejemplo, guardar un objeto o array en una base de datos o transmitirlo entre aplicaciones remotas, para luego volver a convertirlo a su tipo y estructura original.&lt;br /&gt;
&lt;br /&gt;
Supongamos que tienes el siguiente array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arr = array(&lt;br /&gt;
  &amp;quot;fruta&amp;quot; =&amp;gt; &amp;quot;manzana&amp;quot;, &lt;br /&gt;
  &amp;quot;objeto&amp;quot; =&amp;gt; &amp;quot;bicicleta&amp;quot;, &lt;br /&gt;
  &amp;quot;animales&amp;quot; =&amp;gt; array(&lt;br /&gt;
             &amp;quot;perro&amp;quot;, &lt;br /&gt;
             &amp;quot;gato&amp;quot;, &lt;br /&gt;
             &amp;quot;caballo&amp;quot;) &lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si lo deseas guardar en una tabla de una base de datos, lo puedes serializar de esta forma:&lt;br /&gt;
&lt;br /&gt;
'''$string = serialize($arr);'''&lt;br /&gt;
&lt;br /&gt;
La función serialize devolverá un valor fácilmente almacenable o transmitible:&lt;br /&gt;
&lt;br /&gt;
''a:3:{s:5:&amp;quot;fruta&amp;quot;;s:7:&amp;quot;manzana&amp;quot;;s:6:&amp;quot;objeto&amp;quot;;s:9:&amp;quot;bicicleta&amp;quot;;s:8:&amp;quot;animales&amp;quot;;a:3: i:0;s:5:&amp;quot;perro&amp;quot;;i:1;s:4:&amp;quot;gato&amp;quot;;i:2;s:7:&amp;quot;caballo&amp;quot;;}}''&lt;br /&gt;
&lt;br /&gt;
Para recuperar el valor original en PHP a partir de la cadena seriada:&lt;br /&gt;
&lt;br /&gt;
'''$arr = unserialize($string);'''&lt;br /&gt;
&lt;br /&gt;
Un ejemplo del uso de la serialización la tenemos en la forma en que WordPress almacena información variada en algunas de sus tablas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Serializar'''&lt;br /&gt;
&lt;br /&gt;
http://www.cucuza.com/como-serializar-datos-en-php/&lt;br /&gt;
&lt;br /&gt;
==EXEMPLE CLASSE SERIALIZACIÓN==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Serializer {&lt;br /&gt;
&lt;br /&gt;
    private static $path = &amp;quot;./database/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    public static function save($obj, $id) {  //$obj es un JSON , $id es el nombre del archivo &lt;br /&gt;
&lt;br /&gt;
        $arr = serialize($obj);&lt;br /&gt;
        &lt;br /&gt;
        return file_put_contents(self::$path . $id, $arr);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static function restore($id) {&lt;br /&gt;
        &lt;br /&gt;
        if  (file_exists ( self::$path . $id ) ){&lt;br /&gt;
            &lt;br /&gt;
            $xmlString = file_get_contents(self::$path . $id);&lt;br /&gt;
            &lt;br /&gt;
            return unserialize($xmlString);  &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static function showIds(){&lt;br /&gt;
        &lt;br /&gt;
        return array_slice(scandir(self::$path),2);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//al ser una classe estàtica es pot invocar els mètodes de la següent forma, per exemple:&lt;br /&gt;
&lt;br /&gt;
Serializer::save(json,nom_arxiu);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crear un JSON desde PHP (json_encode)==&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crear un objeto en PHP con JSON (json_decode)==&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ENVIAR CORREOS ==&lt;br /&gt;
&lt;br /&gt;
Mediente la función MAIL() de PHP podemos enviar correos, por ello, nuestro servidor deberá tener instalado el servicio.&lt;br /&gt;
En nuestro caso, en nuestro Hosting-ng lo tenemos.&lt;br /&gt;
Existe otra función PHPMailer dónde contiene más opciones. https://github.com/PHPMailer/PHPMailer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Forma simple'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// El mensaje&lt;br /&gt;
$msg = &amp;quot;Estimado alumno de La Mercè\nEstas invitado a participar en  clase&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// usar wordwrap() si las lineas son más largas de 70 caracteres&lt;br /&gt;
$msg = wordwrap($msg,70);&lt;br /&gt;
&lt;br /&gt;
// Enviar mail&lt;br /&gt;
mail(&amp;quot;alguien@ejemplo.cat&amp;quot;,&amp;quot;Mi título&amp;quot;,$msg);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Más opciones'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    $to = &amp;quot;ejemploPrueba@ejemplo.com&amp;quot;;&lt;br /&gt;
    $subject = &amp;quot;Asunto&amp;quot;;&lt;br /&gt;
    $txt = &amp;quot;Estamos en clase de DAW&amp;quot;;&lt;br /&gt;
    $headers = &amp;quot;From: webmaster@example.com&amp;quot; . &amp;quot;\r\n&amp;quot; .&lt;br /&gt;
        &amp;quot;CC: somebodyelse@example.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    mail($to,$subject,$txt,$headers);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' En terminal '''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//también podemos hacerlo desde el terminal de linux en nuestro servidor&lt;br /&gt;
system('mail -t alguien@ejemplo.cat -s ALTA ALUMNOS INSTI &amp;lt;&amp;lt;&amp;lt; &amp;quot;El alumno&amp;quot;'.$nom.&amp;quot; &amp;quot;.$cognoms.&amp;quot; está en espera de darse de alta&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SUBIR FICHEROS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// En versiones de PHP anteriores a la 4.1.0, debería utilizarse $HTTP_POST_FILES en lugar&lt;br /&gt;
// de $_FILES.&lt;br /&gt;
&lt;br /&gt;
 //Directori de pujada. Permís d'escriptura i accés per a www-data&lt;br /&gt;
$dir_subida = './';  &lt;br /&gt;
 //Anexem la carpeta amb el nos del finder que ens puja&lt;br /&gt;
$fichero_subido = $dir_subida . basename($_FILES['file']['name']); //basename: muestra el nombre del fichero con la extensión&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Movem el fitxer temporal creat a /tmp a la ubicació o nom indicats&lt;br /&gt;
echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
if (move_uploaded_file($_FILES['file']['tmp_name'], $fichero_subido)) {    &lt;br /&gt;
    echo &amp;quot;El fichero es válido y se subió con éxito.\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;¡Posible ataque de subida de ficheros!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo 'Más información de depuración:';&lt;br /&gt;
print_r($_FILES);&lt;br /&gt;
&lt;br /&gt;
/*$_FILES['file']['name'] -- original name of the file on the client machine.&lt;br /&gt;
$_FILES['file']['type'] -- mime type of the file, provided by the browser&lt;br /&gt;
$_FILES['file']['size'] -- size (in bytes) of the uploaded file&lt;br /&gt;
$_FILES['file']['tmp_name'] -- temporary filename of the uploaded file, stored on the server&lt;br /&gt;
$_FILES['file']['error'] -- returns an error code, useful for debugging.&lt;br /&gt;
*/&lt;br /&gt;
print &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; SUBIR FICHEROS &amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;!-- El tipo de codificación de datos, enctype, DEBE especificarse como sigue --&amp;gt;&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- MAX_FILE_SIZE debe preceder al campo de entrada del fichero --&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;MAX_FILE_SIZE&amp;quot; value=&amp;quot;30000&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- El nombre del elemento de entrada determina el nombre en el array $_FILES --&amp;gt;&lt;br /&gt;
    Enviar este fichero: &amp;lt;input name=&amp;quot;fichero_usuario&amp;quot; type=&amp;quot;file&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar fichero&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EXERCICI:'''&lt;br /&gt;
&lt;br /&gt;
Es desitja desenvolupar un formulari on pugui ficar el nom d'usuari i a més pujar un fitxer. Deurà haver una pàgina que mostre tots el fitxers d'eixe Usuari i el nombre d'arxius.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDF ==&lt;br /&gt;
Podem també generar pdf's a FPDF http://www.fpdf.org/ , però es deurà baixar la llibreria primer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require('fpdf.php');&lt;br /&gt;
&lt;br /&gt;
class PDF extends FPDF&lt;br /&gt;
{&lt;br /&gt;
// Page header&lt;br /&gt;
function Header()&lt;br /&gt;
{&lt;br /&gt;
    // Logo&lt;br /&gt;
    $this-&amp;gt;Image('logo.png',10,6,30);&lt;br /&gt;
    // Arial bold 15&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','B',15);&lt;br /&gt;
    // Move to the right&lt;br /&gt;
    $this-&amp;gt;Cell(80);&lt;br /&gt;
    // Title&lt;br /&gt;
    $this-&amp;gt;Cell(30,10,'Title',1,0,'C');&lt;br /&gt;
    // Line break&lt;br /&gt;
    $this-&amp;gt;Ln(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Page footer&lt;br /&gt;
function Footer()&lt;br /&gt;
{&lt;br /&gt;
    // Position at 1.5 cm from bottom&lt;br /&gt;
    $this-&amp;gt;SetY(-15);&lt;br /&gt;
    // Arial italic 8&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','I',8);&lt;br /&gt;
    // Page number&lt;br /&gt;
    $this-&amp;gt;Cell(0,10,'Page '.$this-&amp;gt;PageNo().'/{nb}',0,0,'C');&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Instanciation of inherited class&lt;br /&gt;
$pdf = new PDF();&lt;br /&gt;
$pdf-&amp;gt;AliasNbPages();&lt;br /&gt;
$pdf-&amp;gt;AddPage();&lt;br /&gt;
$pdf-&amp;gt;SetFont('Times','',12);&lt;br /&gt;
for($i=1;$i&amp;lt;=40;$i++)&lt;br /&gt;
    $pdf-&amp;gt;Cell(0,10,'Printing line number '.$i,0,1);&lt;br /&gt;
$pdf-&amp;gt;Output();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= QR =&lt;br /&gt;
&lt;br /&gt;
També podem crear codis QR al nostre servidor, hi han moltes libreries tanta en PHP com en JS.&lt;br /&gt;
https://sourceforge.net/projects/phpqrcode/&lt;br /&gt;
&lt;br /&gt;
Es deurà baixar la llibreria i ficar la carpeta &amp;quot;phpqrcode&amp;quot; dins del nostre servidor, a més de introduir el següent codi. &lt;br /&gt;
//'''NOTA''': deureu donar-li permisos d'escriptura a la carpeta&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   // la llibreria s'ha descomprimit dins d'una carpeta anomenada &amp;quot;phpqrcode&amp;quot;&lt;br /&gt;
   include('phpqrcode/qrlib.php');&lt;br /&gt;
   &lt;br /&gt;
   QRcode::png('http://wikiserver.infomerce.es', 'imatgeqr.png');&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
   &amp;lt;img src=&amp;quot;imatgeqr.png&amp;quot; /&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici- Inventario'''&lt;br /&gt;
&lt;br /&gt;
Queremos crear un registro o inventario de los ordenadores, por ellos, queremos generar códigos QR que serán pegatinas para poner en cada uno de los ordenadores de las diferentes aulas, por ello crearemos un formulario donde introduciremos el aula y el ordenador, deben almacenarse en un variable de sesión (ya que no sabemos todavía conectarnos a BD) y cuando cliquemos mostrar deben de aparecer todas los códigos QR del aula.&lt;br /&gt;
También se desea guardarlo en pdf (mirar librerias) con el título y el aula y el codigo QR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CONECTAR CON LDAP o ACTIVE DIRECTORY ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class LDAP &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
      //Asigno variables para accesar al servidor LDAP&lt;br /&gt;
   private $conectar;&lt;br /&gt;
   private $host;&lt;br /&gt;
   private $user;&lt;br /&gt;
   private $pswd;&lt;br /&gt;
   private $dn;&lt;br /&gt;
   private $OU;&lt;br /&gt;
   private $DC;&lt;br /&gt;
   private $DC1;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   public function __construct($user,$password,$ou,$dc,$dc1)&lt;br /&gt;
   {&lt;br /&gt;
    $this-&amp;gt;host= &amp;quot;172.16.208.174&amp;quot;;&lt;br /&gt;
    $this-&amp;gt;user = $user;&lt;br /&gt;
    $this-&amp;gt;pswd = $password;&lt;br /&gt;
    $this-&amp;gt;OU = $ou;&lt;br /&gt;
    $this-&amp;gt;DC = $dc;&lt;br /&gt;
    $this-&amp;gt;DC1 = $dc1;&lt;br /&gt;
    $this-&amp;gt;dn = &amp;quot;OU=&amp;quot;.$ou.&amp;quot;,DC=&amp;quot;.$dc.&amp;quot;,DC=&amp;quot;.$dc1.&amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function conexion()&lt;br /&gt;
   {&lt;br /&gt;
       $this-&amp;gt;conectar = ldap_connect($this-&amp;gt;host) or die(&amp;quot;Imposible Conectar&amp;quot;);&lt;br /&gt;
     // Especifico la versión del protocolo LDAP&lt;br /&gt;
    ldap_set_option($this-&amp;gt;conectar, LDAP_OPT_PROTOCOL_VERSION, 3)    or die (&amp;quot;Imposible asignar el Protocolo LDAP&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function credenciales(){&lt;br /&gt;
   // Valido las credenciales para accesar al servidor LDAP&lt;br /&gt;
    $bd = ldap_bind($this-&amp;gt;conectar, $this-&amp;gt;user, $this-&amp;gt;pswd)    or die (&amp;quot;Imposible Validar en el Servidor LDAP&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Especifico los parámetros que quiero que me regrese la consulta&lt;br /&gt;
    $attrs = array(&amp;quot;displayname&amp;quot;,&amp;quot;mail&amp;quot;,&amp;quot;samaccountname&amp;quot;,&amp;quot;telephonenumber&amp;quot;,&amp;quot;givenname&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
    // Creo el filtro para la busqueda&lt;br /&gt;
    $filter = &amp;quot;(samaccountname=&amp;quot;.$this-&amp;gt;user.&amp;quot;)&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    $search = ldap_search($this-&amp;gt;conectar, $this-&amp;gt;dn, $filter, $attrs)    or die (&amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    $entries = ldap_get_entries($this-&amp;gt;conectar, $search);&lt;br /&gt;
&lt;br /&gt;
    return $entries;&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17479</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17479"/>
				<updated>2023-10-19T11:41:25Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Colección de funciones para verificar fechas.'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con las opciones de menú correspondiente &lt;br /&gt;
a la colección de funciones de menú.&lt;br /&gt;
&lt;br /&gt;
En cada opción de menú se realizará la validación correspondiente a su función. &lt;br /&gt;
&lt;br /&gt;
El formato de la cadena es: AAAAMMDD.&lt;br /&gt;
Ejemplo: El 15 de diciembre de 2023 sería: &amp;quot;20231215&amp;quot;&lt;br /&gt;
&lt;br /&gt;
La Colección de funciones de validación se encuentra en el módulo fecha, en la carpeta tiempo.&lt;br /&gt;
&lt;br /&gt;
Y se implantará con la llamada:&lt;br /&gt;
&lt;br /&gt;
from tiempo import fecha  # otra opción: import tiempo.fecha as fecha&lt;br /&gt;
&lt;br /&gt;
Crar el menú de selección con CASE de funciones por pantalla e introducir en cada función la fecha que corresponda.&lt;br /&gt;
&lt;br /&gt;
En Moodle M03 - UF2, tenéis el zip &amp;quot;Material programa Fecha Tiempo&amp;quot;, donde encontraréis una versión en construcción para la llamada de fechas y las funciones &lt;br /&gt;
externas para validar las fechas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Colección de funciones:&lt;br /&gt;
&lt;br /&gt;
1. fecha_correcta: dice si la fecha que se pasa como parámetro es correcta.&lt;br /&gt;
&lt;br /&gt;
2. fecha_mas_1dia: suma un día a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
3. fecha_mas_ndias: suma una serie de días a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
4. fecha_menos_1dia: resta un día a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
5. fecha_menos_ndias: resta una serie de días a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
6. es_bisiesto: dice si la fecha que se pasa como parámetro es bisiesto.&lt;br /&gt;
&lt;br /&gt;
7. compara_fechas: recibe dos fechas y devuelve un valor negativo si la 1ª es anterior a la&lt;br /&gt;
   segunda, cero si son iguales, y un valor positivo si la 1ª es posterior a la segunda.&lt;br /&gt;
&lt;br /&gt;
8. fecha_formateada: recibe un fecha y devuelve una cadena con el formato:&lt;br /&gt;
   DD de {MES} de AAAA     (Ejemplo: &amp;quot;15 de Diciembre de 2023&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
9. año, mes, dia, nombre_mes: recibe un fecha y devuelve esos valores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Solucio_escacs_php&amp;diff=17465</id>
		<title>Solucio escacs php</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Solucio_escacs_php&amp;diff=17465"/>
				<updated>2023-10-06T16:20:17Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ESCACS&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt; TABLERO DE AJEDREZ DINÁMICO &amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;table width=&amp;quot;270px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; cellpadding=&amp;quot;0px&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?php&lt;br /&gt;
            for($x=0; $x&amp;lt;9;$x++){&lt;br /&gt;
                echo &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;;&lt;br /&gt;
                for($i=0; $i&amp;lt;9;$i++){&lt;br /&gt;
                    /* Si es impar = 1 True por tanto blanco, primera casilla = 0 */&lt;br /&gt;
                    if(($x+$i)%2){&lt;br /&gt;
                        echo &amp;quot;&amp;lt;td height='30px' width='30px' bgcolor='black'&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
                    }&lt;br /&gt;
                    else{&lt;br /&gt;
                        echo &amp;quot;&amp;lt;td height='30px' width='30px' bgcolor='white'&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                echo &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        &lt;br /&gt;
        ?&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
for ($i=0; $i &amp;lt;8 ; $i++) { &lt;br /&gt;
	&lt;br /&gt;
	for ($j=0; $j &amp;lt;8 ; $j++) { &lt;br /&gt;
		if($j%2==0) {&lt;br /&gt;
			echo &amp;quot;  *   &amp;quot;;&lt;br /&gt;
		}else{&lt;br /&gt;
			echo &amp;quot;   *  &amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=Solucio_escacs_php&amp;diff=17464</id>
		<title>Solucio escacs php</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=Solucio_escacs_php&amp;diff=17464"/>
				<updated>2023-10-06T16:19:40Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;ESCACS&amp;lt;/title&amp;gt;&lt;br /&gt;
        &amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;h3&amp;gt; TABLERO DE AJEDREZ DINÁMICO &amp;lt;/h3&amp;gt;&lt;br /&gt;
        &amp;lt;table width=&amp;quot;270px&amp;quot; cellspacing=&amp;quot;0px&amp;quot; cellpadding=&amp;quot;0px&amp;quot; border=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;?php&lt;br /&gt;
            for($x=0; $x&amp;lt;9;$x++){&lt;br /&gt;
                echo &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;;&lt;br /&gt;
                for($i=0; $i&amp;lt;9;$i++){&lt;br /&gt;
                    /* Si es impar = 1 True por tanto blanco*/&lt;br /&gt;
                    if(($x+$i)%2){&lt;br /&gt;
                        echo &amp;quot;&amp;lt;td height='30px' width='30px' bgcolor='black'&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
                    }&lt;br /&gt;
                    else{&lt;br /&gt;
                        echo &amp;quot;&amp;lt;td height='30px' width='30px' bgcolor='white'&amp;gt;&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
                echo &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        &lt;br /&gt;
        ?&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
    &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
for ($i=0; $i &amp;lt;8 ; $i++) { &lt;br /&gt;
	&lt;br /&gt;
	for ($j=0; $j &amp;lt;8 ; $j++) { &lt;br /&gt;
		if($j%2==0) {&lt;br /&gt;
			echo &amp;quot;  *   &amp;quot;;&lt;br /&gt;
		}else{&lt;br /&gt;
			echo &amp;quot;   *  &amp;quot;;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17461</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17461"/>
				<updated>2023-10-05T15:33:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
El número a buscar puede introducirse manualmente o bien ser aleatorio (Random)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Colección de funciones para verificar fechas.'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con las opciones de menú correspondiente &lt;br /&gt;
a la colección de funciones de menú.&lt;br /&gt;
&lt;br /&gt;
En cada opción de menú se realizará la validación correspondiente a su función. &lt;br /&gt;
&lt;br /&gt;
El formato de la cadena es: AAAAMMDD.&lt;br /&gt;
Ejemplo: El 15 de diciembre de 2023 sería: &amp;quot;20231215&amp;quot;&lt;br /&gt;
&lt;br /&gt;
La Colección de funciones de validación se encuentra en el módulo fecha, en la carpeta tiempo.&lt;br /&gt;
&lt;br /&gt;
Y se implantará con la llamada:&lt;br /&gt;
&lt;br /&gt;
from tiempo import fecha  # otra opción: import tiempo.fecha as fecha&lt;br /&gt;
&lt;br /&gt;
Crar el menú de selección de funciones por pantalla e introducir en cada función la fecha que corresponda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colección de funciones:&lt;br /&gt;
&lt;br /&gt;
1. fecha_correcta: dice si la fecha que se pasa como parámetro es correcta.&lt;br /&gt;
&lt;br /&gt;
2. fecha_mas_1dia: suma un día a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
3. fecha_mas_ndias: suma una serie de días a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
4. fecha_menos_1dia: resta un día a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
5. fecha_menos_ndias: resta una serie de días a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
6. es_bisiesto: dice si la fecha que se pasa como parámetro es bisiesto.&lt;br /&gt;
&lt;br /&gt;
7. compara_fechas: recibe dos fechas y devuelve un valor negativo si la 1ª es anterior a la&lt;br /&gt;
   segunda, cero si son iguales, y un valor positivo si la 1ª es posterior a la segunda.&lt;br /&gt;
&lt;br /&gt;
8. fecha_formateada: recibe un fecha y devuelve una cadena con el formato:&lt;br /&gt;
   DD de {MES} de AAAA     (Ejemplo: &amp;quot;15 de Diciembre de 2023&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
9. año, mes, dia, nombre_mes: recibe un fecha y devuelve esos valores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17460</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17460"/>
				<updated>2023-10-05T15:29:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Colección de funciones para verificar fechas.'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con las opciones de menú correspondiente &lt;br /&gt;
a la colección de funciones de menú.&lt;br /&gt;
&lt;br /&gt;
En cada opción de menú se realizará la validación correspondiente a su función. &lt;br /&gt;
&lt;br /&gt;
El formato de la cadena es: AAAAMMDD.&lt;br /&gt;
Ejemplo: El 15 de diciembre de 2023 sería: &amp;quot;20231215&amp;quot;&lt;br /&gt;
&lt;br /&gt;
La Colección de funciones de validación se encuentra en el módulo fecha, en la carpeta tiempo.&lt;br /&gt;
&lt;br /&gt;
Y se implantará con la llamada:&lt;br /&gt;
&lt;br /&gt;
from tiempo import fecha  # otra opción: import tiempo.fecha as fecha&lt;br /&gt;
&lt;br /&gt;
Crar el menú de selección de funciones por pantalla e introducir en cada función la fecha que corresponda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colección de funciones:&lt;br /&gt;
&lt;br /&gt;
1. fecha_correcta: dice si la fecha que se pasa como parámetro es correcta.&lt;br /&gt;
&lt;br /&gt;
2. fecha_mas_1dia: suma un día a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
3. fecha_mas_ndias: suma una serie de días a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
4. fecha_menos_1dia: resta un día a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
5. fecha_menos_ndias: resta una serie de días a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
6. es_bisiesto: dice si la fecha que se pasa como parámetro es bisiesto.&lt;br /&gt;
&lt;br /&gt;
7. compara_fechas: recibe dos fechas y devuelve un valor negativo si la 1ª es anterior a la&lt;br /&gt;
   segunda, cero si son iguales, y un valor positivo si la 1ª es posterior a la segunda.&lt;br /&gt;
&lt;br /&gt;
8. fecha_formateada: recibe un fecha y devuelve una cadena con el formato:&lt;br /&gt;
   DD de {MES} de AAAA     (Ejemplo: &amp;quot;15 de Diciembre de 2023&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
9. año, mes, dia, nombre_mes: recibe un fecha y devuelve esos valores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17459</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17459"/>
				<updated>2023-10-05T15:27:19Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5º Colección de funciones para verificar fechas.'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con las opciones de menú correspondiente &lt;br /&gt;
a la colección de funciones de menú.&lt;br /&gt;
&lt;br /&gt;
En cada opción de menú se realizará la validación correspondiente a su función. &lt;br /&gt;
&lt;br /&gt;
El formato de la cadena es: AAAAMMDD.&lt;br /&gt;
Ejemplo: El 15 de diciembre de 2023 sería: &amp;quot;20231215&amp;quot;&lt;br /&gt;
&lt;br /&gt;
La Colección de funciones de validación se encuentra en el módulo fecha, en la carpeta tiempo.&lt;br /&gt;
&lt;br /&gt;
Y se implantará con la llamada:&lt;br /&gt;
&lt;br /&gt;
from tiempo import fecha  # otra opción: import tiempo.fecha as fecha&lt;br /&gt;
&lt;br /&gt;
Crar el menú de selección de funciones por pantalla e introducir en cada función la fecha que corresponda.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Colección de funciones:&lt;br /&gt;
&lt;br /&gt;
1. fecha_correcta: dice si la fecha que se pasa como parámetro es correcta.&lt;br /&gt;
&lt;br /&gt;
2. fecha_mas_1dia: suma un día a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
3. fecha_mas_ndias: suma una serie de días a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
4. fecha_menos_1dia: resta un día a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
5. fecha_menos_ndias: resta una serie de días a la fecha que se pasa como parámetro y lo devuelve.&lt;br /&gt;
&lt;br /&gt;
6. es_bisiesto: dice si la fecha que se pasa como parámetro es bisiesto.&lt;br /&gt;
&lt;br /&gt;
7. compara_fechas: recibe dos fechas y devuelve un valor negativo si la 1ª es anterior a la&lt;br /&gt;
   segunda, cero si son iguales, y un valor positivo si la 1ª es posterior a la segunda.&lt;br /&gt;
&lt;br /&gt;
8. fecha_formateada: recibe un fecha y devuelve una cadena con el formato:&lt;br /&gt;
   DD de {MES} de AAAA     (Ejemplo: &amp;quot;15 de Diciembre de 2019&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
9. año, mes, dia, nombre_mes: recibe un fecha y devuelve esos valores.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17458</id>
		<title>ASIX-M3-UF2-A1.1-Exercicis disseny descendent</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=ASIX-M3-UF2-A1.1-Exercicis_disseny_descendent&amp;diff=17458"/>
				<updated>2023-10-05T15:08:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''1. Càlcul múltiple'''&lt;br /&gt;
&lt;br /&gt;
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del &lt;br /&gt;
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.&lt;br /&gt;
# Parámetros de entrada: dos números&lt;br /&gt;
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo &lt;br /&gt;
# del segundo, Falso en caso contrario.&lt;br /&gt;
&lt;br /&gt;
def CalMultiple(num1,num2):&lt;br /&gt;
	if num1 % num2 == 0:&lt;br /&gt;
		return True&lt;br /&gt;
	else:&lt;br /&gt;
		return False&lt;br /&gt;
&lt;br /&gt;
numero1 = int(input(&amp;quot;Número 1:&amp;quot;))&lt;br /&gt;
numero2 = int(input(&amp;quot;Número 2:&amp;quot;))&lt;br /&gt;
&lt;br /&gt;
if CalMultiple(numero1,numero2):&lt;br /&gt;
	print(numero1,&amp;quot;es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
else:&lt;br /&gt;
	print(numero1,&amp;quot;no es múltiplo de&amp;quot;,numero2)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
'''2. Càlcul temperatura mitjana'''&lt;br /&gt;
&lt;br /&gt;
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función calcularTemperaturaMedia: R&lt;br /&gt;
&lt;br /&gt;
def calcularTemperaturaMedia(temp1,temp2):&lt;br /&gt;
	return (temp1 + temp2)/2&lt;br /&gt;
&lt;br /&gt;
# Crear una función que calcule la temperatura media de un día a partir de la &lt;br /&gt;
# temperatura máxima y mínima. &lt;br /&gt;
&lt;br /&gt;
cantidad=int(input(&amp;quot;¿Cuántas temperaturas vas a calcular?:&amp;quot;))&lt;br /&gt;
for indice in range(cantidad):&lt;br /&gt;
	tmin = float(input(&amp;quot;Introduce temperatura mínima:&amp;quot;))&lt;br /&gt;
	tmax = float(input(&amp;quot;Introduce temperatura máxima:&amp;quot;))&lt;br /&gt;
	print(&amp;quot;Temperatura media:&amp;quot;,calcularTemperaturaMedia(tmin,tmax))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3. Cálculo de tiempo'''&lt;br /&gt;
&lt;br /&gt;
Escribir un programa con dos funciones que permitan calcular:&lt;br /&gt;
&lt;br /&gt;
  1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.&lt;br /&gt;
&lt;br /&gt;
  2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª&lt;br /&gt;
&lt;br /&gt;
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos &lt;br /&gt;
# y calcula a cuantos segundos corresponde.&lt;br /&gt;
# Parámetros de entrada: hora, minutos y segundos&lt;br /&gt;
# Dato devuelto: Segundos totales&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_Segundos(h,m,s):&lt;br /&gt;
	return h * 3600 + m * 60 + s&lt;br /&gt;
&lt;br /&gt;
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a &lt;br /&gt;
# que hora, minutos y segundos corresponde &lt;br /&gt;
# Parámetros de entrada: segundos&lt;br /&gt;
# Valores de salida: hora,minutos y segundos&lt;br /&gt;
&lt;br /&gt;
def Convertir_A_HMS(seg):&lt;br /&gt;
	# Horas = Divisíón entera de los segundos entre 3600&lt;br /&gt;
	h = seg//3600&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - h*3600&lt;br /&gt;
	# Minutos = División entera de los segundos entre 60&lt;br /&gt;
	m = seg//60&lt;br /&gt;
	# Decremento los segundos que me quedan por convertir&lt;br /&gt;
	seg = seg - m*60&lt;br /&gt;
	# Lo que me quedan corresponden a los segundos&lt;br /&gt;
	s = seg&lt;br /&gt;
	return h,m,s&lt;br /&gt;
&lt;br /&gt;
# Escribe un programa principal con un menú donde se pueda elegir la opción de &lt;br /&gt;
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
	print(&amp;quot;1.- Convertir a segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;2.- Convertir a horas, minutos y segundos&amp;quot;)&lt;br /&gt;
	print(&amp;quot;3.- Salir&amp;quot;)&lt;br /&gt;
	opcion = int(input())&lt;br /&gt;
	if opcion == 1:&lt;br /&gt;
		hor = int(input(&amp;quot;Horas:&amp;quot;))&lt;br /&gt;
		minu = int(input(&amp;quot;Minutos:&amp;quot;))&lt;br /&gt;
		seg = int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		print(&amp;quot;Corresponde a&amp;quot;,Convertir_A_Segundos(hor,minu,seg),&amp;quot;segundos.&amp;quot;)&lt;br /&gt;
	elif opcion == 2:&lt;br /&gt;
		segund=int(input(&amp;quot;Segundos:&amp;quot;))&lt;br /&gt;
		hor,minu,seg = Convertir_A_HMS(segund)&lt;br /&gt;
		print(&amp;quot;Corresponde a &amp;quot;,hor,&amp;quot;:&amp;quot;,minu,&amp;quot;:&amp;quot;,seg)&lt;br /&gt;
	elif opcion == 3:&lt;br /&gt;
		break&lt;br /&gt;
	else:&lt;br /&gt;
		print(&amp;quot;Opción incorrecta&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''4. ''Exercici:'' construir un joc &amp;quot;'' 'Guess The number' ''&amp;quot;'''&lt;br /&gt;
&lt;br /&gt;
Demanar a l'usuari que introdueixi dos números entre 0 i 100.&lt;br /&gt;
Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa:&lt;br /&gt;
&lt;br /&gt;
(Els números introduïts són teòrics, podrien ser uns altres)&lt;br /&gt;
&lt;br /&gt;
Quin és el límit inferior?: 0&lt;br /&gt;
&lt;br /&gt;
Quin és el límit superior?: 100&lt;br /&gt;
&lt;br /&gt;
Introduïu el número a endevinar entre 0 i 100 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Endevineu el nombre entre 0 i 100 inclosos: 40&lt;br /&gt;
&lt;br /&gt;
Massa petit&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 100 inclosos: 60&lt;br /&gt;
&lt;br /&gt;
Massa gran&lt;br /&gt;
&lt;br /&gt;
Endevineu el número entre 41 i 59 inclosos: 50&lt;br /&gt;
&lt;br /&gt;
Ha guanyat!&lt;br /&gt;
&lt;br /&gt;
Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar.&lt;br /&gt;
&lt;br /&gt;
Notas:&lt;br /&gt;
&lt;br /&gt;
Utilitzar  import sys&lt;br /&gt;
&lt;br /&gt;
Aquest programa s'ha de constituir mitjançant funcions:&lt;br /&gt;
&lt;br /&gt;
exemple:&lt;br /&gt;
def pedir_numero, &lt;br /&gt;
def pedir_numero_limite,&lt;br /&gt;
def jugar_una_vez&lt;br /&gt;
def jugar&lt;br /&gt;
def decidir_limites&lt;br /&gt;
def pedir_numero_incognita&lt;br /&gt;
etc..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''== Python avançat =='''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
22. Regne de Dracs&lt;br /&gt;
&lt;br /&gt;
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...  &lt;br /&gt;
&lt;br /&gt;
:* Mòduls a emprar:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
from random import randint  # per distribuir els dracs en les coves aleatoriament&lt;br /&gt;
from time import sleep      # per fer més &amp;quot;emocionant&amp;quot; el final del joc&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:* El programa principal podria ser semblant a:&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
# Programa principal &lt;br /&gt;
fiJoc = False&lt;br /&gt;
while not fiJoc:&lt;br /&gt;
    mostrarIntroduccio()&lt;br /&gt;
    numeroDeCova = escollirCova()&lt;br /&gt;
    explorarCova(numeroDeCova)    # sleep(2)   # randint(1, 2)&lt;br /&gt;
    jugarDeNuevo = jugar()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un '''nombre senar de files i columnes''' on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar&lt;br /&gt;
des de 1 fins a n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt; on n és el numero de files i columnes.&lt;br /&gt;
&lt;br /&gt;
Com construir-lo?&lt;br /&gt;
&lt;br /&gt;
:* El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).&lt;br /&gt;
&lt;br /&gt;
:* El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).&lt;br /&gt;
&lt;br /&gt;
:* Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.&lt;br /&gt;
&lt;br /&gt;
:* A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).&lt;br /&gt;
&lt;br /&gt;
:* Un exemple de quadrat màgic per a N=5 seria:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      23  6 19  2 15&lt;br /&gt;
      10 18  1 14 22&lt;br /&gt;
      17  5 13 21  9&lt;br /&gt;
       4 12 25  8 16&lt;br /&gt;
      11 24  7 20  3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:*El programa tindrà les següents funcions:&lt;br /&gt;
&lt;br /&gt;
::'''llegirDimensio''': Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.&lt;br /&gt;
::'''inicialitzarQuadrat''': Simplement posem tots els valors a 0&lt;br /&gt;
::'''calculaPosicioInicial''': Segons la dimensió, calculem la primera posició&lt;br /&gt;
::'''assignaValor''': Posa un valor en una posició&lt;br /&gt;
::'''calcularNovaPosicio''': Retorna els valors de fila i columna vàlids per a col·locar el proper valor.&lt;br /&gt;
::'''imprimirQuadrat''': Treu per pantalla el quadrat màgic,&lt;br /&gt;
&lt;br /&gt;
:* El programa serà semblant a aquest :&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
dim = llegirDimensio()&lt;br /&gt;
qm = inicialitzarQuadrat(dim)&lt;br /&gt;
pos = calculaPosicioInicial(dim)&lt;br /&gt;
limit = dim*dim;&lt;br /&gt;
for valor in range(1,limit+1):&lt;br /&gt;
   assignaValor(qm,pos,valor)&lt;br /&gt;
   pos = calcularNovaPosicio(qm, dim, pos) &lt;br /&gt;
imprimirQuadrat(qm)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
24. Mastermind&lt;br /&gt;
&lt;br /&gt;
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).&lt;br /&gt;
:* El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.&lt;br /&gt;
:* L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).&lt;br /&gt;
:* Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:&lt;br /&gt;
::* '''Encerts''': quants números s'han encertat i es troben en la posició correcta .&lt;br /&gt;
::* '''Coincidències''': quants números s'han encertat però no es troben en la posició correcta.&lt;br /&gt;
:* Exemple:&lt;br /&gt;
::* codi: 7539&lt;br /&gt;
::* proposta: 2590&lt;br /&gt;
::* pistes: 1 encert i 1 coincidència.&lt;br /&gt;
:* El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents. &lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_mastermind.png |400px|center| Diagrama flux &amp;quot;Mastermind&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
25. El Penjat&lt;br /&gt;
&lt;br /&gt;
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:&lt;br /&gt;
&lt;br /&gt;
:* Es presenta una forca i un guio per a cada lletra de la paraula.&lt;br /&gt;
:* El jugador proposa lletres (d'una en una) i:&lt;br /&gt;
::* si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.&lt;br /&gt;
::* sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).&lt;br /&gt;
:* El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.&lt;br /&gt;
:* El programa permetre tornar a jugar si així o vol el jugador.&lt;br /&gt;
:* Diagrama de flux&lt;br /&gt;
&lt;br /&gt;
[[Imatge:m3_uf2_diagrama_flux_el_penjat.png |400px|center| Diagrama flux &amp;quot;El Penjat&amp;quot;]]&lt;br /&gt;
&lt;br /&gt;
Podeu utilitzar:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
PENJAT = ['''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
      |   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|   |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
          |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     /    |&lt;br /&gt;
          |&lt;br /&gt;
    =========''', '''&lt;br /&gt;
      +---+&lt;br /&gt;
      |   |&lt;br /&gt;
      O   |&lt;br /&gt;
     /|\  |&lt;br /&gt;
     / \  |&lt;br /&gt;
          |&lt;br /&gt;
    =========''']&lt;br /&gt;
&lt;br /&gt;
paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
26. ==3 en ratlla==&lt;br /&gt;
&lt;br /&gt;
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.&lt;br /&gt;
&lt;br /&gt;
:* El jugador i l'ordinador alternen les jugades.&lt;br /&gt;
:* El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida&lt;br /&gt;
:* L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.&lt;br /&gt;
:* La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.&lt;br /&gt;
:* Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.&lt;br /&gt;
:* El programa permetrà tornar a jugar si així o vol el jugador.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    # &amp;quot;tauler&amp;quot; és una llista de 10 cadenes (obviem la posició 0 de la llista)&lt;br /&gt;
&lt;br /&gt;
    print(' 3 en ratlla')&lt;br /&gt;
    print()&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print('-----------')&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
    print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3])&lt;br /&gt;
    print('   |   |')&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs,&lt;br /&gt;
és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes).&lt;br /&gt;
Utilitzar la recursivitat.&lt;br /&gt;
&lt;br /&gt;
 0 59 38 33 30 17 8 63&lt;br /&gt;
 37 34 31 60 9 62 29 16&lt;br /&gt;
 58 1 36 39 32 27 18 7&lt;br /&gt;
 35 48 41 26 61 10 15 28&lt;br /&gt;
 42 57 2 49 40 23 6 19&lt;br /&gt;
 47 50 45 54 25 20 11 14&lt;br /&gt;
 56 43 52 3 22 13 24 5&lt;br /&gt;
 51 46 55 44 53 4 21 12&lt;br /&gt;
&lt;br /&gt;
Tenir en compte que hi pot haver més d'una solució,&lt;br /&gt;
aquesta funció imprimeix una de les solucions factibles.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Secció de Repàs --------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques.&lt;br /&gt;
Crear quatre funcion&lt;br /&gt;
s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.&lt;br /&gt;
&lt;br /&gt;
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;TRWAGMYFPDXBNJZSQVHLCKE&amp;quot;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17452</id>
		<title>NF2: Generació de documents web amb llenguatges de guions</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17452"/>
				<updated>2023-09-29T16:55:49Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introducció llenguatges de programació del costat Servidor =&lt;br /&gt;
&lt;br /&gt;
Existeix una multitud de llenguatges concebuts o no per a Internet. Cadascun d'ells explota més a fons certes característiques que ho fan més o menys útils per desenvolupar diferents aplicacions.&lt;br /&gt;
Un '''llenguatge del costat del servidor''' és aquell que '''s'executa en el servidor web, just abans que s'enviï la pàgina''' a través d'Internet al client. Les pàgines que s'executen en el servidor poden realitzar accessos a bases de dades, connexions en xarxa, i altres tasques per crear la pàgina final que veurà el client.&lt;br /&gt;
D'altra banda, els '''llenguatges de costat client''' (entre els quals no només es troba l'HTML sinó també el Java i el Javascript els quals són simplement inclosos en el codi HTML) són aquells que '''poden ser directament executats pel navegador i no necessiten un pretractament'''.&lt;br /&gt;
[[Fitxer:serverside.jpg|center]]&lt;br /&gt;
Els llenguatges de costat servidor més àmpliament utilitzats per al desenvolupament de pàgines dinàmiques són l'ASP, JSP, PERL i PHP.&lt;br /&gt;
== ASP.NET ==&lt;br /&gt;
Llenguatge comercialitzat per Microsoft, i usat per programadors per desenvolupar entre altres funcions, llocs web. ASP.NET és el successor de la tecnologia ASP, va ser llançada al mercat mitjançant una estratègia de mercat denominada .NET.&lt;br /&gt;
Es desenvolupat per resoldre les limitants que brindava el teu antecessor ASP. Per al desenvolupament d'ASP.NET es pot utilitzar C#, VB.NET o J#. Els arxius compten amb l'extensió (aspx). Per al seu funcionament de les pàgines es necessita tenir instal·lat IIS amb el Framework .Net. Microsft Windows 2003 inclou aquest framework, solament es necessitarà instal·lar-ho en versions anteriors.&lt;br /&gt;
El llenguatge ASP consisteix en una sèrie de classes .NET utilitzades per crear aplicacions Web, tant del costat client (Web Form) com del costat servidor (Web Service). La integració de nadiva .NET Framework amb el sistema operatiu Windows Server 2003 fa que la seva execució sigui més estable i ràpida que altres llenguatges de programació.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Completament orientat a objectes.&lt;br /&gt;
*Controls d'usuari i personalitzats.&lt;br /&gt;
*Divisió entre la capa d'aplicació o disseny i el codi.&lt;br /&gt;
*Facilita el manteniment de grans aplicacions.&lt;br /&gt;
*Increment de velocitat de resposta del servidor.&lt;br /&gt;
*Major velocitat.&lt;br /&gt;
*Major seguretat.&lt;br /&gt;
&lt;br /&gt;
'''Desavantatges: '''&lt;br /&gt;
*Major consum de recursos.&lt;br /&gt;
*Tecnologia propietària.&lt;br /&gt;
*Hostalatge de llocs web costosos.&lt;br /&gt;
&lt;br /&gt;
== JSP: Java Server Pages ==&lt;br /&gt;
És un llenguatge per a la creació de llocs web dinàmics, acrònim de Java Server Pages. Està orientat a desenvolupar pàgines web en Java. JSP és un llenguatge multiplataforma.&lt;br /&gt;
JSP va ser desenvolupat per Sun Microsystems. Comparteix avantatges similars a les d'ASP.NET, desenvolupat per a la creació d'aplicacions web potents. Posseeix un motor de pàgines basat en els servlets de Java. Per al seu funcionament es necessita tenir instal·lat un servidor Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Característiques'''&lt;br /&gt;
*Codi separat de la lògica del programa.&lt;br /&gt;
*Les pàgines són compilades en la primera petició.&lt;br /&gt;
*Permet separar la part dinàmica de l'estàtica a les pàgines web.&lt;br /&gt;
*Els arxius es troben amb l'extensió (jsp).&lt;br /&gt;
*El codi JSP pot ser incrustat en codi HTML.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Execució ràpida del servlets.&lt;br /&gt;
*Crear pàgines del costat del servidor.&lt;br /&gt;
*Multiplataforma.&lt;br /&gt;
*Codi ben estructurat.&lt;br /&gt;
*Integritat amb els mòduls de Java.&lt;br /&gt;
*La part dinàmica està escrita en Java.&lt;br /&gt;
== PERL (Practical Extraction and Report Language) ==&lt;br /&gt;
És un llenguatge de programació desenvolupat per Larry Wall (lwall at netlabs.com) inspirat en altres eines d'UNIX com són: sigueu, grep, awk, c-shell, per a l'administració de tasques pròpies de sistemes UNIX. No estableix cap filosofia de programació concreta. No es pot dir que sigui orientat a objectes, modular o estructurat encara que suporta directament tots aquests paradigmes; el seu punt fort són les labors de processament de textos i arxius. Llenguatge de programació basat en scripts portable a gairebé qualsevol plataforma. És molt utilitzat per escriure CGIs. Un dels seus elements més potents són les expressions regulars, que a partir de la seva versió en Perl han estat adoptades per altres llenguatges i plataformes com .NET o Javascript.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Es poden ajuntar diversos programes d'una forma senzilla per aconseguir una meta determinada. Els usuaris de Windows agrairan aquesta propietat ja que normalment emmalalteixen d'un bon llenguatge tipus “script”.&lt;br /&gt;
*És relativament ràpid per a un llenguatge tipus “script”.&lt;br /&gt;
*Està disponible en múltiples plataformes i sistemes operatius (UNIX, Linux i Windows). Un programa que s'escrigui tenint en compte la compatibilitat pot ser escrit en una plataforma i executat en una altra.&lt;br /&gt;
*Hi ha una col·lecció enorme de mòduls que poden ser incorporats a qualsevol “script” de Perl. Estan disponibles en el CPAN (“Comprehensive Perl Arxivi Network”). En particular existeix una extensió per a càlcul numèric denominada PDL.&lt;br /&gt;
*Perl és gratuït. Molt més que això, és “Programari Lliure”. Això vol dir que el codi font està disponible perquè qualsevol el pugui veure o modificar, i el que és més important, sempre ho estarà. Encara que mai pretenguis canviar el codi, és important disposar de la possibilitat de fer-ho, ja que sempre es podrà contractar a una tercera persona perquè ho modifiqui en el cas que hi hagi un error, i hauria de ser possible solucionar-ho.&lt;br /&gt;
*Li atorga al programador molta llibertat perquè faci el programa com vulgui. Tal com diu l'eslògan de Perl “Hi ha més d'una forma de fer-ho”&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
PHP és l'acrònim de Hipertext Preprocesor. És un llenguatge de programació del costat del servidor gratuït i independent de plataforma, ràpid, amb una gran llibreria de funcions i molta documentació. Va ser creat originalment en 1994 per Rasmus Lerdorf, però com PHP està desenvolupat en política de codi obert, al llarg de la seva història ha tingut moltes contribucions d'altres desenvolupadors.&lt;br /&gt;
El client solament rep una pàgina amb el codi HTML resultant de l'execució de la PHP. Com la pàgina resultant conté únicament codi HTML, és compatible amb tots els navegadors.&lt;br /&gt;
&lt;br /&gt;
https://luisjordan.net/node-js/node-js-vs-php-comparaciones-cms-beneficios-y-tiempos-de-respuesta/&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Molt fàcil d'aprendre.&lt;br /&gt;
*Es caracteritza per ser un llenguatge molt ràpid.&lt;br /&gt;
*Suporta en certa mesura l'orientació a objecte. Classes i herència.&lt;br /&gt;
*És un llenguatge multiplataforma: Linux, Windows, entre uns altres.&lt;br /&gt;
*Capacitat de connexió amb la majoria dels manejadores de base de dades: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre unes altres.&lt;br /&gt;
*Capacitat d'expandir el seu potencial utilitzant mòduls.&lt;br /&gt;
*Posseeix documentació a la seva pàgina oficial la qual inclou descripció i exemples de cadascuna de les seves funcions.&lt;br /&gt;
*És lliure, per la qual cosa es presenta com una alternativa de fàcil accés per a tots.&lt;br /&gt;
*Inclou gran quantitat de funcions.&lt;br /&gt;
*No requereix definició de tipus de variables ni maneig detallat del baix nivell.&lt;br /&gt;
&lt;br /&gt;
= Preparació de l'entorn =&lt;br /&gt;
== Instal·lació de servidors d'aplicacions Web ==&lt;br /&gt;
Internet s’ha convertit en la principal eina d’intercanvi d’informació a la societat actual. La connexió dels ordinadors a les xarxes locals i aquestes xarxes a d’altres de grans dimensions ha possibilitat la comunicació global d’informació entre els ordinadors arreu del món. Per poder oferir serveis web, els servidors han de tenir instal·lats una sèrie de serveis. El servidor web permet l’enviament de continguts a altres ordinadors a través de la xarxa. Els preprocessadors d’hipertext (com PHP) permeten crear continguts web de forma dinàmica. Els servidors de bases de dades permeten emmagatzemar informació de forma estructurada que es pot fer servir per generar contingut web. Aquests serveis han de ser instal·lats i configurats correctament abans de començar a crear el contingut web dinàmic del nostre web.&lt;br /&gt;
&lt;br /&gt;
Un '''servidor web''' és una peça de programari que respon a les peticions dels navegadors i lliura la pàgina per al navegador a través d’Internet. Quan es crida a una pàgina web per l’adreça –l’URL (uniform resource locator), per exemple, www.infomerce.es/index.html-, la comunicació entre el navegador i el servidor és possible gràcies a tres protocols:&lt;br /&gt;
* TCP(Transmission Control Protocol, protocol de control de transmissió): és el responsable de fer que el missatge arribi a la destinació sense errors.&lt;br /&gt;
* IP(Internet Protocol): és el responsable de fer que el missatge trobi el camí fins al servidor.&lt;br /&gt;
* HTTP(Hypertext Transfer Protocol, protocol de transferència d’hipertext): és el protocol que ha indicat l’usuari a l’hora de demanar el recurs al servidor. La primera part d’un recurs URL correspon al protocol que utilitzaran client i servidor per intercanviar dades.&lt;br /&gt;
== HTTP: comunicació entre servidor i client ==&lt;br /&gt;
Un cop establerta la connexió entra en joc el protocol HTTP: el navegador envia una petició al servidor en què sol·licita el recurs index.html. El servidor processa aquesta petició i retorna la pàgina sol·licitada al navegador, que interpreta les etiquetes HTML i la presenta a l’usuari.&lt;br /&gt;
[[Fitxer:peticiohttp.jpg|center]]&lt;br /&gt;
La informació que el client envia al servidor en la petició és la següent:&lt;br /&gt;
* El mètode HTTP: l’acció que s’ha de fer.&lt;br /&gt;
* El recurs a què s’ha d’accedir (una part de l’URL).&lt;br /&gt;
* La informació que l’usuari envia al servidor.&lt;br /&gt;
La informació que el servidor envia en la resposta té dues parts ben diferenciades: &lt;br /&gt;
* La capçalera: conté el codi que indica si la petició s’ha complert. També conté el tipus de contingut que enviarà al client.&lt;br /&gt;
* El contingut: (text, codi HTML, imatges, etc.) del recurs demanat.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Preparació M.V. amb Ubuntu i PHP ===&lt;br /&gt;
Es tracta d'importar una M.V. amb Ubuntu Server. Aquesta màquina virtual la utilitzarem al llarg del curs per desenvolupar programes amb el llenguatge PHP. LA M.V. ha de tenir les següents característiques:&lt;br /&gt;
*512 MB de Ram&lt;br /&gt;
*Targeta mode Pont (Has de reinicialitzar la @MAC i esborrar el fitxer: /etc/udev/rules.d/70-persistent-net.rules)&lt;br /&gt;
*Configura la @IP. &lt;br /&gt;
Instal·la el següent programari:&lt;br /&gt;
*openssh-server (per permetre comunicacions remotes)&lt;br /&gt;
*Servidor Web apache2&lt;br /&gt;
*Servidor PHP&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Primer projecte amb NetBeans ===&lt;br /&gt;
Crea un projecte PHP amb NetBeans. Fes que automàticament guardi tots els fitxers a la màquina virtual creada al apartat anterior. Crea una pàgina d'exemple i comprova que funciona.&lt;br /&gt;
La pàgina d'exemple pot ser la següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
     	&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;?php&lt;br /&gt;
            echo &amp;quot;Primera Pàgina amb PHP&amp;quot;; &lt;br /&gt;
          ?&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= El Llenguatge PHP =&lt;br /&gt;
== Introducció ==&lt;br /&gt;
'''PHP''' és un llenguatge de programació obert que s’integra directament en pàgines HTML. El seu ús ha esdevingut gairebé imprescindible en les pàgines que han d’utilitzar bases de dades o formularis.&lt;br /&gt;
Rasmus Lerdorf és el creador del llenguatge PHP. El 1995 presenta la primera edició d’aquest llenguatge amb el nom de Personal Home Page tools amb llicència pública GNU. Per crear el PHP, Rasmus utilitza el codi de programació C.&lt;br /&gt;
&lt;br /&gt;
El '''codi PHP''' que escriviu, '''l’haureu d’incrustar dins de codi HTML''', concretament dins les etiquetes \&amp;lt;body\&amp;gt; del document. Mitjançant unes marques l’HTML no interpretarà el codi PHP, el qual, i mitjançant les mateixes marques, s’executarà en el servidor.&lt;br /&gt;
&lt;br /&gt;
El codi PHP s’executa en un servidor i mostra el resultat en un client. Visualitzareu els resultats amb un navegador web.&lt;br /&gt;
&lt;br /&gt;
Quan arrenca el PHP es fa la lectura del fitxer '''php.ini'''. Aquest fitxer conté la configuració del PHP i es crea durant la instal·lació del PHP. És possible que necessiteu fer canvis en el fitxer de configuració, preneu la precaució de fer-ne una còpia de seguretat abans de fer aquestes modificacions.&lt;br /&gt;
Una inspecció visual del fitxer php.ini us servirà per comprendre’n el funcionament. Depenent del valor de les variables que conté aquest fitxer, el comportament del PHP variarà en la vostra màquina. Podeu comprovar que cada variable que forma part del fitxer està àmpliament comentada, amb comentaris que es marquen amb un punt i coma.&lt;br /&gt;
&lt;br /&gt;
== Mostrar Errors ==&lt;br /&gt;
Per mostrar els errors que fem al escriure programes en php s'ha d'especificar als fitxers que els vols veure per pantalla amb les següents sentències:&lt;br /&gt;
&lt;br /&gt;
http://www.anerbarrena.com/mostrar-errores-php-608/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* * ******************Errores******************* */&lt;br /&gt;
ini_set('display_errors', true);&lt;br /&gt;
error_reporting(E_ALL);&lt;br /&gt;
/* * ********************Usuarios****************** */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintaxi ==&lt;br /&gt;
=== Generalitats ===&lt;br /&gt;
La sintaxi d'un llenguatge de programació es defineix com el conjunt de regles que han de seguir-se en escriure el codi font dels programes per considerar-se com a correctes per a aquest llenguatge de programació.&lt;br /&gt;
Les normes bàsiques que defineixen la sintaxi de PHP són les següents:&lt;br /&gt;
*Si voleu que s’interpreti el vostre codi és imprescindible que encabiu el codi escrit en PHP entre dos delimitadors. Aquestes marques són &amp;lt;?php , que la fareu servir per indicar l’inici de codi en llenguatge PHP, i ?&amp;gt; , que utilitzareu per marcar el final del vostre codi PHP.&lt;br /&gt;
*Indicareu el final d’una instrucció amb punt i coma. Cada vegada que es detecti un punt i coma s’interpretarà el codi inserit fins a aquell punt.&lt;br /&gt;
*Els comentaris en PHP els podreu incloure mitjançant:&lt;br /&gt;
** Dues barres (//) o un coixinet (#) si voleu comentar una línia&lt;br /&gt;
** Una barra i un asterisc (/*) per indicar l’inici de comentari, i un asterisc i una barra per indicar el final de comentari si voleu comentar més d’una línia(/*).&lt;br /&gt;
*No es defineix el tipus de les variables: PHP és un llenguatge de programació que no obliga a declarar prèviament el nom de les variables que s’utilitzaran ni el seu tipus (és diu que és un llenguatge sense tipus o no tipat). Ara bé, tot i que existeixen els tipus de dades en PHP aquests no es comproven.&lt;br /&gt;
*No es distingeixen les majúscules i minúscules.&lt;br /&gt;
Exemples:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Aquí teniu una instrucció.&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;i aquí una altra instrucció.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Si voleu comentar una línia ho podeu fer d’aquesta manera...&lt;br /&gt;
#...o bé d’aquesta altra.&lt;br /&gt;
/* Però si necessiteu comentar&lt;br /&gt;
més línies aquesta és la millor&lt;br /&gt;
manera de fer − ho! */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Per representar una variable '''caldrà escriure el símbol del dòlar seguit pel nom que vulgueu posar'''. En el moment de donar nom a una variable heu de tenir en compte que es diferencien majúscules i minúscules i que haurà de començar amb una lletra o caràcter de subratllat.&lt;br /&gt;
En PHP, a diferència de molts altres llenguatges, no cal declarar una variable abans d’utilitzar-la. El símbol del dòlar és el que marca que es tracta d’una variable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$Nom='whovian';&lt;br /&gt;
$Familia='Informàtica';&lt;br /&gt;
$Cicle=&amp;quot;CFGS Desenvolupament d'aplicacions Web&amp;quot;;&lt;br /&gt;
$Modul = &amp;quot;DAW en entorn servidor&amp;quot;;&lt;br /&gt;
$Durada= 165;&lt;br /&gt;
echo &amp;quot;Hola $nom!&amp;lt;br&amp;gt;&lt;br /&gt;
Benvingut als estudis d’$Familia!!!&amp;lt;br&amp;gt;&lt;br /&gt;
Cicle: $Cicle&amp;lt;br&amp;gt;&lt;br /&gt;
Mòdul: $Modul&amp;lt;br&amp;gt;&lt;br /&gt;
Durada: $Durada hores&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com podeu veure, les variables poden adquirir qualsevol dels tipus suportats, i la variable $Durada emmagatzema l’enter 180, mentre que la resta de variables emmagatzemaran cadenes.&lt;br /&gt;
Les variables s’assignen per valor per defecte, però '''si voleu assignar un valor per referència''' ho haureu d’indicar fent servir el símbol''' &amp;amp; '''tot just davant de la variable&lt;br /&gt;
=== Àmbit de les variables ===&lt;br /&gt;
&lt;br /&gt;
Les variables tenen una vida determinada depenent d’on les declareu i com ho feu. És molt important conèixer l’àmbit de les variables per controlar els vostres codis. No comprendre aquesta part pot provocar fallades inesperades en les vostres creacions.&lt;br /&gt;
L’àmbit d’una variable és el context en què és definida.&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot declarar una variable nombroses vegades en àmbits diferents:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nom=’Nyoman’;&lt;br /&gt;
echo ’De moment $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
function canvi()&lt;br /&gt;
{&lt;br /&gt;
	$nom=’Ketut’;&lt;br /&gt;
	echo ’Però ara $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
canvi();&lt;br /&gt;
echo ’I de nou $nom torna a tenir el valor de ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadors ===&lt;br /&gt;
Permetran fer accions dins el codi. Podreu canviar i assignar valors, canviar l’adreça del codi, condicionar l’execució de blocs de codi i, en&lt;br /&gt;
definitiva, dotar de la complexitat necessària els vostres programes per aconseguir un objectiu.&lt;br /&gt;
Els operadors es poden agrupar en tres blocs segons el nombre de valors sobre els quals s’actua.&lt;br /&gt;
* L’operador '''unari''' opera sobre un valor i el que pot fer en aquest valor és negar-lo, incrementar-lo o decrementar-lo, entre altres coses.&lt;br /&gt;
* L’operador '''binari''' opera sobre dos valors i permet sumar-los, restar-los o comparar-los.&lt;br /&gt;
* L’operador '''ternari''' permet escollir entre dues expressions en funció d’una altra.&lt;br /&gt;
&lt;br /&gt;
'''Operadors Aritmètics '''&lt;br /&gt;
Teniu en compte que la divisió retornarà un valor en coma flotant si el resultat de la divisió no és exacte.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
|-$valor||Negació||Oposat de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor + $valorB ||Addició||Suma de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor - $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor * $valorB||Multiplicació||Producte de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor / $ valorB||Divisió||Quocient de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor % $valorB||Mòdul||Resta de $valor dividit per $valorB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors d'assignació '''&lt;br /&gt;
L’operador bàsic d’assignació és l’igual. Amb l’operador igual la variable de l’esquerra rep el valor de l’expressió de la dreta.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor = $valorB||Assignació||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor += $valorB||Addició i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor -= $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor.= “text”||Concatenació i Assignació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de bit '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp; $valorB||i||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor I $valorB||o i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor ˆ $valorB ||xor||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
|  ̃ $valor||Negació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;lt;$valorB ||Desplaçament a l’esquerra||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;&amp;gt;$valorB||Desplaçament a la dreta||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de comparació '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor == $valorB||Igual||TRUE si $valor és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor === $valorB||Idèntic||TRUE si $valor és igual a $valorB i són del mateix tipus.&lt;br /&gt;
|-&lt;br /&gt;
| $valor != $valorB ||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;gt; $ valorB||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor !== $valorB ||No idèntic||TRUE si $valor no és igual a $valorB o no són del mateix tipus&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt; $valorB||Més petit que||TRUE si $valor és més petit que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt; $valorB||Més gran que||TRUE si $valor és més gran que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;= $valorB||Més petit o igual que||TRUE si $valor és més petit o igual que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;= $valorB||Més gran o igual que||TRUE si $valor és més gran o igual que $valorB.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Operadors d’increment i decrement '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| ++$valor||Preincrement||Incrementa $valor una unitat, i després retorna $valor.&lt;br /&gt;
|-&lt;br /&gt;
| $valor++||Postincrement||Retorna $valor i incrementa $valor una unitat.&lt;br /&gt;
|-&lt;br /&gt;
| –$valor ||Predecrement||Decrementa $valor una unitat i retorna $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor–||Postdecrement||Retorna $valor i decrementa $valor una unitat.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de lògica '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor and valorB||i||TRUE si $valor i $valorB són TRUE&lt;br /&gt;
|-&lt;br /&gt;
| $valor or $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor xor $valorB ||xor||TRUE si $valor o $valorB són TRUE, però no tots dos alhora.&lt;br /&gt;
|-&lt;br /&gt;
| !$valor||No||Inverteix el contingut de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp;&amp;amp; $valorB ||i||TRUE si $valor i $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor II $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Els Vectors i les Matrius (Arrays) ===&lt;br /&gt;
Les matrius i els vectors són conjunts de dades que poden estar definides en un Guió de PHP. Les matrius poden contenir altres matrius dintre d'ells sense restricció (multidimensionals). &lt;br /&gt;
&lt;br /&gt;
Els vectors es poden crear de dues maneres. La primera consisteix en l'ús de la funció '''array()'''. La segona implica l'ús de claudàtors.&lt;br /&gt;
Exemple de declaracions d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$elmeuarray = array($valor1, $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
$elmeuarray[1] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//També es pot declarar de la següent manera:&lt;br /&gt;
$elmeuarray = array('mes1' =&amp;gt; $valor1, 'mes2' =&amp;gt; $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
$elmeuarray['mes2'] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//Però tambés es pot declarar directament amb claudàtors:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
//o amb la següent notació&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemples d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$array = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;type&amp;quot;=&amp;gt;&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;manufactured&amp;quot;=&amp;gt;&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2 = array(&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3 = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array['name']=&amp;quot;BMW&amp;quot;;&lt;br /&gt;
$array['type']=&amp;quot;SERIE 1&amp;quot;;&lt;br /&gt;
$array['colour']=&amp;quot;BLANCO&amp;quot;;&lt;br /&gt;
$array['manufactured']=&amp;quot;2035&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2[]=&amp;quot;AUDI&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;A5&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;ROJO&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;2038&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3['name']=&amp;quot;FERRARI&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;SPIDER&amp;quot;;&lt;br /&gt;
$array3['colour']=&amp;quot;VERDE&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;2013&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les matrius son vectors multidimensionals. Els elements d'un vector a la seva vegada poden ser un altre vector. Un exemple és el següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$cars = array(&lt;br /&gt;
   &amp;quot;car1&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Toyota&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;Green&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1999,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1998),&lt;br /&gt;
   &amp;quot;car2&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;BMW&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;RED&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 2005,&amp;quot;engine_cc&amp;quot; =&amp;gt; 2400),&lt;br /&gt;
   &amp;quot;car3&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Renault&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;White&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1993,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1395),&lt;br /&gt;
);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $cars['car1']['make'],&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo $cars['car3']['engine_cc'];&lt;br /&gt;
&lt;br /&gt;
/* El resultat de l'execució de les intruccions anteriors és:&lt;br /&gt;
Toyota&lt;br /&gt;
1395&lt;br /&gt;
*/&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Més informació sobre arrays [http://php.net/manual/en/language.types.array.php aquí.]&lt;br /&gt;
Existeixen MOLTES funcions per manipular els arrays. Dona una ullada a [http://php.net/manual/en/ref.array.php aquesta pàgina] abans que comencis a implementar funcions que ja existeixen a la llibreria de php.&lt;br /&gt;
&lt;br /&gt;
=== Estructures de control ===&lt;br /&gt;
==== La sentència '''IF''' i l'Operador Ternari ====&lt;br /&gt;
Les estructures condicionals s'utilitzen per controlar quines instruccions s'executen. Els condicionals en PHP estan estructurats de manera similar als trobats en C ++ i Java .&lt;br /&gt;
Exemple d'estructures condicionals:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//Exemple 1&lt;br /&gt;
$foo = 1;&lt;br /&gt;
$bar = 2;&lt;br /&gt;
if($foo == $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is equal to $bar.&amp;quot;;&lt;br /&gt;
} elseif ($foo &amp;gt; $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is greater than $bar.&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;$foo is less than $bar.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple 2&lt;br /&gt;
$lower = 10;&lt;br /&gt;
$upper = 100;&lt;br /&gt;
$needle = 25;&lt;br /&gt;
if(($needle &amp;gt;= $lower) &amp;amp;&amp;amp; ($needle &amp;lt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is in the haystack.&amp;quot;;&lt;br /&gt;
} elseif (($needle &amp;lt;= $lower) || ($needle &amp;gt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is outside of the haystack.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple Operador Ternari&lt;br /&gt;
&lt;br /&gt;
$missatge =  (date('G') &amp;lt; 12) ? 'Buenos días' : 'Buenas tardes';&lt;br /&gt;
&lt;br /&gt;
//equival a la següent estructura:&lt;br /&gt;
if (date('G') &amp;lt; 12) {&lt;br /&gt;
$missatge = 'Buenos días';&lt;br /&gt;
} else {&lt;br /&gt;
$missatge = 'Buenas tardes';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''SWITCH''' ====&lt;br /&gt;
Quan es necessita utilitzar un IF amb molts Else pot resultar que es vegi un codi molt redundant. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user_command == &amp;quot;n&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_north();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;e&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_east();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;s&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_south();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;w&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_west();&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  do_something_else();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per millorar la llegibilitat del codi utilitzarem l'estructura 'Switch' de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 switch($user_command)&lt;br /&gt;
 {&lt;br /&gt;
   case 'n':&lt;br /&gt;
     go_north();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'e':&lt;br /&gt;
     go_east();&lt;br /&gt;
     break;&lt;br /&gt;
   case 's':&lt;br /&gt;
     go_south();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'w':&lt;br /&gt;
     go_west();&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     do_something_else();&lt;br /&gt;
     break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Un altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($firstvariable == 'comparison1' &lt;br /&gt;
         || $firstvariable == 'comparison2')&lt;br /&gt;
 {&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
 }&lt;br /&gt;
 else if ($firstvariable == 'comparison3')&lt;br /&gt;
 {&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
      launchMissiles();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//amb l'estructura switch :&lt;br /&gt;
 switch($firstvariable)&lt;br /&gt;
 {&lt;br /&gt;
  case 'comparison1':&lt;br /&gt;
  case 'comparison2':&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  case 'comparison3':&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  default: &lt;br /&gt;
      launchMissiles();&lt;br /&gt;
      break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''WHILE''' ====&lt;br /&gt;
Aquesta sentència s'utilitzarà per repetir una serie d'instruccions tantes vegades com el condicional sigui evaluat a True.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$c = 0;&lt;br /&gt;
while ($c &amp;lt; 5) {&lt;br /&gt;
   echo $c++;&lt;br /&gt;
} ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mira el següent codi i enraona si serà un bucle infinit o no:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$c = 1;&lt;br /&gt;
$myName=&amp;quot;Fred&amp;quot;;&lt;br /&gt;
while ($myName != &amp;quot;Rumplestilskin&amp;quot;) &lt;br /&gt;
{&lt;br /&gt;
   if ($myName==&amp;quot;Fred&amp;quot;) &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Leslie&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Marc&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   $c++;&lt;br /&gt;
 &lt;br /&gt;
   if ($c==3) &lt;br /&gt;
   {&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
echo &amp;quot;You lose and I get your baby!\n&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''do ... WHILE''' ====&lt;br /&gt;
És semblan al bucle anterior però les intruccions sempre s'execulten almenys 1 vegada. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  $c = 6;&lt;br /&gt;
  do {&lt;br /&gt;
    echo 'Hi';&lt;br /&gt;
  } while ($c &amp;lt; 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''FOR''' ====&lt;br /&gt;
La sintaxi bàsica d'aquesta sentencia és la següent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for([initialization]; [condition]; [step])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'ús:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 for($i = 0; $i &amp;lt; 5; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilització amb arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $menu = array(&amp;quot;Toast and Jam&amp;quot;, &amp;quot;Bacon and Eggs&amp;quot;, &amp;quot;Homefries&amp;quot;, &amp;quot;Skillet&amp;quot;, &amp;quot;Milk and Cereal&amp;quot;);&lt;br /&gt;
 // note to self: get breakfast after writing this article&lt;br /&gt;
 $count = count($menu);&lt;br /&gt;
 for($i = 0; $i &amp;lt; $count; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i + 1 . &amp;quot;. &amp;quot; . $menu[$i] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== La sentència '''FOREACH''' ====&lt;br /&gt;
Aquesta sentència és molt utilitzada per recòrrer arrays. Com el parell array[key]=value pot ser string en ambdós casos, aquesta estructura ens permet obternir-los:&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach ($array as $someVar) {&lt;br /&gt;
  echo ($someVar . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//un altre exemple:&lt;br /&gt;
foreach ($array as $key =&amp;gt; $value) {&lt;br /&gt;
  echo ($key.&amp;quot;holds the value &amp;quot;.$value.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''break''' ====&lt;br /&gt;
&lt;br /&gt;
La sentència break provoca la sortida de qualsevol estructura de control, trencant així un bucle. Penseu per exemple un bucle que cerca un element d’un array. Una vegada trobat, és ineficient acabar de recórrer la resta de l’array.&lt;br /&gt;
''Podeu indicar a aquesta sentència quantes estructures de control voleu saltar. ''&lt;br /&gt;
En l’exemple següent el break provoca la sortida de dos blocs de codi:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
while($edat&amp;lt;20)&lt;br /&gt;
{&lt;br /&gt;
	for( ; ; $edat=$edat+1)&lt;br /&gt;
	{&lt;br /&gt;
		if($edat==18)&lt;br /&gt;
		{&lt;br /&gt;
			echo &amp;quot;Ara ja tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
			break 2;&lt;br /&gt;
		}&lt;br /&gt;
		echo &amp;quot;Encara ets menor d’edat, ja que tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;Aquesta línia no sortirà per pantalla!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;Ja no ets menor d’edat! Tens $edat anys!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
&lt;br /&gt;
===Exercici: tablita ===&lt;br /&gt;
Se desea crear una página web en la cual muestre un título y luego haga una tabla que imprima 10 filas mostrando &amp;quot;estamos en 2DAW&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;th&amp;gt;M09-PHP&amp;lt;/th&amp;gt;  &lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;?php&lt;br /&gt;
                $conta =1;&lt;br /&gt;
                while($conta&amp;lt;=10) { &lt;br /&gt;
                    echo &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;td&amp;gt;Estamos en DAW2&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    $conta++;&lt;br /&gt;
                }&lt;br /&gt;
            ?&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
     &amp;lt;/body&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exercici: Vector (opcional) ===&lt;br /&gt;
Queremos crear un vector &amp;quot;ciudades&amp;quot; donde introduciremos una serie  de ciudades, luego deberá mostrar cada una de las ciudades y el número total.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Recòrrer array ====&lt;br /&gt;
Donat el següent array:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$eu = array( &amp;quot;Italy&amp;quot;=&amp;gt;&amp;quot;Rome&amp;quot;, &amp;quot;Luxembourg&amp;quot;=&amp;gt;&amp;quot;Luxembourg&amp;quot;, &amp;quot;Belgium&amp;quot;=&amp;gt; &amp;quot;Brussels&amp;quot;, &lt;br /&gt;
&amp;quot;Denmark&amp;quot;=&amp;gt;&amp;quot;Copenhagen&amp;quot;, &amp;quot;Finland&amp;quot;=&amp;gt;&amp;quot;Helsinki&amp;quot;, &amp;quot;France&amp;quot; =&amp;gt; &amp;quot;Paris&amp;quot;, &amp;quot;Slovakia&amp;quot;=&amp;gt;&amp;quot;Bratislava&amp;quot;, &lt;br /&gt;
&amp;quot;Slovenia&amp;quot;=&amp;gt;&amp;quot;Ljubljana&amp;quot;, &amp;quot;Germany&amp;quot; =&amp;gt; &amp;quot;Berlin&amp;quot;, &amp;quot;Greece&amp;quot; =&amp;gt; &amp;quot;Athens&amp;quot;, &amp;quot;Ireland&amp;quot;=&amp;gt;&amp;quot;Dublin&amp;quot;, &lt;br /&gt;
&amp;quot;Netherlands&amp;quot;=&amp;gt;&amp;quot;Amsterdam&amp;quot;, &amp;quot;Portugal&amp;quot;=&amp;gt;&amp;quot;Lisbon&amp;quot;, &amp;quot;Spain&amp;quot;=&amp;gt;&amp;quot;Madrid&amp;quot;, &amp;quot;Sweden&amp;quot;=&amp;gt;&amp;quot;Stockholm&amp;quot;,&lt;br /&gt;
 &amp;quot;United Kingdom&amp;quot;=&amp;gt;&amp;quot;London&amp;quot;, &amp;quot;Cyprus&amp;quot;=&amp;gt;&amp;quot;Nicosia&amp;quot;, &amp;quot;Lithuania&amp;quot;=&amp;gt;&amp;quot;Vilnius&amp;quot;, &lt;br /&gt;
&amp;quot;Czech Republic&amp;quot;=&amp;gt;&amp;quot;Prague&amp;quot;, &amp;quot;Estonia&amp;quot;=&amp;gt;&amp;quot;Tallin&amp;quot;, &amp;quot;Hungary&amp;quot;=&amp;gt;&amp;quot;Budapest&amp;quot;, &amp;quot;Latvia&amp;quot;=&amp;gt;&amp;quot;Riga&amp;quot;, &lt;br /&gt;
&amp;quot;Malta&amp;quot;=&amp;gt;&amp;quot;Valetta&amp;quot;, &amp;quot;Austria&amp;quot; =&amp;gt; &amp;quot;Vienna&amp;quot;, &amp;quot;Poland&amp;quot;=&amp;gt;&amp;quot;Warsaw&amp;quot;) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Crea un script amb PHP que mostri un llistat amb el noms de les capitals i els seus corresponents països. El llistat ha de ser semblant a:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
La capital de Netherlands és Amsterdam&lt;br /&gt;
La capital de Greece és Athens&lt;br /&gt;
La capital de Germany és Berlin&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[solucio_php_recorrer_array]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Afegir un element a un array ====&lt;br /&gt;
Escriu un programa que afegeixi un nou element a un array en una posició determinada.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//abans:&lt;br /&gt;
12345&lt;br /&gt;
&lt;br /&gt;
//després d'afegir $ l'array és:&lt;br /&gt;
123$45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
:[[solucio_afegir_element_array_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Curta i llarga ====&lt;br /&gt;
Escriu un programa en PHP que retorni la longitud màxima i mínima dels strings que conté un array.&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ar = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$max=0;&lt;br /&gt;
$min = PHP_INT_MAX;&lt;br /&gt;
&lt;br /&gt;
foreach($ar as $valor){&lt;br /&gt;
    if( strlen($valor) &amp;lt; $min){&lt;br /&gt;
        $min = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
    if (strlen($valor) &amp;gt; $max){&lt;br /&gt;
        $max = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;La longitud mes curta es $min i la mes llarga es $max.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Otra solucion:&lt;br /&gt;
&lt;br /&gt;
$my_array = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$otroarray = array_map('strlen', $my_array);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;La longitud mes curta es &amp;quot;. min($otroarray) .&amp;quot; i la mes llarga es &amp;quot;. max($otroarray).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
print_r($otroarray);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==== Exercici: Dibuixa asteriscs ====&lt;br /&gt;
Dibuixa amb PHP utilitzant asteriscs el següent dibuix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* &lt;br /&gt;
* * &lt;br /&gt;
* * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * &lt;br /&gt;
* * &lt;br /&gt;
* &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
$n=5;  &lt;br /&gt;
&lt;br /&gt;
for($i=1; $i&amp;lt;=$n; $i++)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
for($i=$n; $i&amp;gt;=1; $i--)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Escacs ====&lt;br /&gt;
Dibuixa una taula d'escacs com la que pots veure a continuació. &lt;br /&gt;
Table width=&amp;quot;270px&amp;quot; i cada cel·la ocupa 30px d'amplada i d'altura.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:escacs.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:solucio_escacs_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcions ===&lt;br /&gt;
&lt;br /&gt;
Les funcions son grup d'instruccions que poden ser cridades en qualsevol moment. Les funcions són útils per re-utilitzar codi de manera sencilla dintre de la nostra aplicació.&lt;br /&gt;
====Funcions definides per l’usuari====&lt;br /&gt;
L’usuari pot definir totes les funcions que necessiti. És imprescindible que el nom donat a la funció no estigui prohibit, és a dir, no es poden fer servir:&lt;br /&gt;
*paraules reservades (per exemple, echo), &lt;br /&gt;
*començar amb un nombre o un caràcter especial&lt;br /&gt;
*repetir el nom d’una funció dins un mateix àmbit. &lt;br /&gt;
Tot i que el PHP '''no farà cap distinció entre majúscules i minúscules''', es recomana utilitzar el nom de la funció idèntic a l’utilitzat en la declaració.&lt;br /&gt;
Les funcions poden rebre paràmetres. El pas de paràmetres d’entrada es fa escrivint entre parèntesis i a continuació del nom de la funció.&lt;br /&gt;
En l’exemple següent podeu veure com es declara la funció missatge i com, posteriorment, es crida passant-hi un paràmetre.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function missatge($argument)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;$argument&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
missatge(&amp;quot;Aquest és l’argument que es passa en aquest exemple.&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les funcions també podran retornar valors. Per fer-ho caldrà utilitzar la sentència '''return'''.&lt;br /&gt;
En l’exemple següent comprovareu com la funció suma, la qual rep dos paràmetres, retorna el resultat de sumar dos nombres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function suma ($valor1,$valor2)&lt;br /&gt;
{&lt;br /&gt;
	return($valor1+$valor2);&lt;br /&gt;
}&lt;br /&gt;
echo suma(4,6);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Funcions Internes====&lt;br /&gt;
El llenguatge PHP té funcions definides internament. Aquestes funcions són de gran utilitat per al programador i resulta imprescindible estudiarles i conèixer-ne les més importants.&lt;br /&gt;
&lt;br /&gt;
És possible que diverses funcions no es reconeguin en el vostre entorn de treball del PHP; el motiu d’això és que algunes funcions internes no s’han inclòs en la compilació, la qual cosa ha fet necessària una compilació dels mòduls que les contenen. Amb phpinfo() es poden veure les extensions carregades en la vostra configuració del PHP.&lt;br /&gt;
&lt;br /&gt;
Són funcions internes molt usuals ''echo, fprintf, print, printf i sprintf'', en què queda demostrat que el llenguatge PHP ja té definides funcions específiques que poden ser de gran utilitat per a l’usuari. &lt;br /&gt;
&lt;br /&gt;
Podeu mirar l’ajuda de PHP a la [https://www.php.net/manual/es/funcref.php pàgina oficial].&lt;br /&gt;
Funcions de Strings: [http://php.net/manual/en/ref.strings.php pàgina oficial].&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot codificar amb codificació ''md5'' el contingut d’una variable:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom = 'Blanca';&lt;br /&gt;
echo(&amp;quot;La codificació md5 de $nom és:&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
echo md5($nom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Exercici===&lt;br /&gt;
El código de encriptación md5 y sha están comprometido ya que son fáciles de desencriptar. ¿Qué algoritmo se debería utilizar?&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Algoritmes d'ordenació====&lt;br /&gt;
Segons el següent array &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fruits = array(&amp;quot;lemon&amp;quot;, &amp;quot;orange&amp;quot;, &amp;quot;banana&amp;quot;, &amp;quot;apple&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SORT''' Esta función ordena una matriz. Los elementos se organizarán de menor a mayor cuando se haya completado esta función.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
sort($cars);&lt;br /&gt;
&lt;br /&gt;
BMW&lt;br /&gt;
Toyota&lt;br /&gt;
Volvo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''RSORT''' Esta función ordena una matriz en orden inverso (de mayor a menor).&lt;br /&gt;
Nota: Esta función asigna nuevas claves para los elementos en la matriz. Eliminará todas las claves existentes que haya asignado, en lugar de simplemente reordenar las claves.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
rsort($cars);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volvo&lt;br /&gt;
Toyota&lt;br /&gt;
BMW&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''asort'''()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;345&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;3&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
asort($age)&lt;br /&gt;
&lt;br /&gt;
Array ( [Ben] =&amp;gt; 3 [Joe] =&amp;gt; 43 [Peter] =&amp;gt; 345 ) &lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''arsort''' ()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
arsort($age);&lt;br /&gt;
&lt;br /&gt;
Array ( [Peter] =&amp;gt; 345 [Joe] =&amp;gt; 43 [Ben] =&amp;gt; 3 ) &lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ksort''' ()&lt;br /&gt;
Ordena una matriz por clave, manteniendo la clave de las correlaciones de datos. Esto es útil principalmente para matrices asociativas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;200&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;99&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
ksort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Ben, Value=99&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''krsort'''()                &lt;br /&gt;
Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
krsort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Peter, Value=35&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=37&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''natsort''' ()&lt;br /&gt;
Esta función implementa un algoritmo de ordenamiento que ordena cadenas alfanuméricas en la forma en que lo haría un ser humano mientras mantiene asociaciones de clave / valor. Esto se describe como un &amp;quot;orden natural&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$array1 = $array2 = array(&amp;quot;img12.png&amp;quot;, &amp;quot;img10.png&amp;quot;, &amp;quot;img2.png&amp;quot;, &amp;quot;img1.png&amp;quot;);&lt;br /&gt;
sort($array1);&lt;br /&gt;
echo &amp;quot;Standard sorting\n&amp;quot;;print_r($array1);&lt;br /&gt;
natsort($array2);&lt;br /&gt;
echo &amp;quot;\nNatural order sorting\n&amp;quot;;print_r($array2);?&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The above example will output:&lt;br /&gt;
Standard sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; img1.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [2] =&amp;gt; img12.png&lt;br /&gt;
    [3] =&amp;gt; img2.png&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Natural order sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [3] =&amp;gt; img1.png&lt;br /&gt;
    [2] =&amp;gt; img2.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [0] =&amp;gt; img12.png&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
====Exercici: Ordenació ====&lt;br /&gt;
Crea una funció que ordeni un array. &lt;br /&gt;
*Per claus de menor a major i de major a menor&lt;br /&gt;
*Per valors de menor a major i de major a menor&lt;br /&gt;
&lt;br /&gt;
[[:Solucio_ordenacio]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Comprova minúscules ====&lt;br /&gt;
Crea una funció que comprovi si tots els caràcters d'un string son minúscules.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function is_str_lowercase($str1)  &lt;br /&gt;
   {  &lt;br /&gt;
    for ($sc = 0; $sc &amp;lt; strlen($str1); $sc++) {  &lt;br /&gt;
          if (ord($str1[$sc]) &amp;gt;= ord('A') &amp;amp;&amp;amp;  ord($str1[$sc]) &amp;lt;= ord('Z')) {    // ord — devuelve el valor ASCII de un caracter&lt;br /&gt;
      return false;  &lt;br /&gt;
         }  &lt;br /&gt;
         }  &lt;br /&gt;
      return true;  &lt;br /&gt;
       }  &lt;br /&gt;
var_dump(is_str_lowercase('abc def ghi'));  &lt;br /&gt;
var_dump(is_str_lowercase('abc dEf ghi'));  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
====Exercici: Primers====&lt;br /&gt;
Crea una funció que indiqui si un número és primer.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function IsPrime($n)  &lt;br /&gt;
{  &lt;br /&gt;
 for($x=2; $x&amp;lt;$n; $x++)  &lt;br /&gt;
   {  &lt;br /&gt;
      if($n %$x ==0)  &lt;br /&gt;
          {  &lt;br /&gt;
           return 0;  &lt;br /&gt;
          }  &lt;br /&gt;
    }  &lt;br /&gt;
  return 1;  &lt;br /&gt;
   }  &lt;br /&gt;
$a = IsPrime(3);  &lt;br /&gt;
if ($a==0)  &lt;br /&gt;
echo 'No es Primo.....';  &lt;br /&gt;
else  &lt;br /&gt;
echo 'ES primo..';  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici- Normalizar ===&lt;br /&gt;
&lt;br /&gt;
Tenemos una base de datos que sólo acepta nombres y apellidos SIN acentos, ni dieresis... por tanto, queremos que cuando escriba el usuario un nombre como &amp;quot;jÚlïÒ&amp;quot; lo normalice a &amp;quot;JULIO&amp;quot;. &lt;br /&gt;
  $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
&lt;br /&gt;
  $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
&lt;br /&gt;
Es interesante investigar sobre la función strtr&lt;br /&gt;
&lt;br /&gt;
solución:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UTF-8 es una codificación multibyte que puede representar cualquier carácter Unicode.&lt;br /&gt;
ISO 8859-1 es una codificación de un solo byte que puede representar los primeros 256 caracteres Unicode.&lt;br /&gt;
Ambos codifican ASCII exactamente de la misma manera.&lt;br /&gt;
&lt;br /&gt;
utf8_decode -&amp;gt;  Convierte una cadena con los caracteres codificados ISO-8859-1 con UTF-8 &lt;br /&gt;
&lt;br /&gt;
   //función que quita los acentos, dieresis, Ñ....&lt;br /&gt;
    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
    $cadena = utf8_decode($cadena);&lt;br /&gt;
    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);&lt;br /&gt;
    $cadena = strtoupper($cadena);&lt;br /&gt;
    return utf8_encode($cadena);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 //$cadena = strtr(utf8_decode($cadena), utf8_decode($originales), $modificadas);   //Altra solució&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipus de Dades en PHP ==&lt;br /&gt;
&lt;br /&gt;
*'''Boolean'''&lt;br /&gt;
És un tipus de dades molt simple que pot representar un valor cert (TRUE) o fals (FALSE). Aquest tipus de dades s’utilitza molt en estructures de control. Si feu conversió de dades és molt important que tingueu en&lt;br /&gt;
compte que es considerarà fals el nombre enter, la cadena 0 o una cadena buida, una matriu buida, un objecte sense variables, el tipus NULL i els objectes SimpleXML que s’hagin creat d’etiquetes buides.&lt;br /&gt;
&lt;br /&gt;
*'''Integer'''&lt;br /&gt;
Aquest tipus representa nombres no fraccionables per sota de la unitat. Poden ser positius i negatius. Aquests nombres enters els podeu representar en notació decimal, hexadecimal o octal. La plataforma sobre la&lt;br /&gt;
qual treballeu determinarà la mida de les variables enteres. El PHP forçarà un canvi de tipus a flotant si es produeix un desbordament, tant si és positiu com negatiu. A continuació, es mostren dos exemples de variables enteres.&lt;br /&gt;
&lt;br /&gt;
*'''float'''&lt;br /&gt;
Aquest tipus fa referència als nombres de coma flotant, i normalment treballa amb una precisió aproximada de catorze dígits decimals. A continuació, es mostra un exemple d’una variable amb coma flotant.&lt;br /&gt;
&lt;br /&gt;
*'''String'''&lt;br /&gt;
Es tracta d’una cadena de caràcters. El llenguatge del PHP no imposa un límit a la mida d’aquestes cadenes; ara bé, no oblideu que el límit el marcarà la memòria del maquinari en què estigui funcionant el PHP. Aquí&lt;br /&gt;
teniu diversos exemples de cadenes.&lt;br /&gt;
&lt;br /&gt;
*'''array'''&lt;br /&gt;
un array és una matriu, d’una dimensió o més, que conté dades que s’associen segons unes claus. És un tipus molt útil, i comprovareu que el seu ús té una gran potència. Per crear una matriu podeu utilitzar la paraula&lt;br /&gt;
reservada ''array()'' o bé acompanyar el nom de la variable amb ''[ ]''.&lt;br /&gt;
&lt;br /&gt;
*'''object'''&lt;br /&gt;
aquest tipus d’objecte està previst en el llenguatge PHP perquè suporta el llenguatge orientat a objectes. Un objecte és un ítem amb unes característiques i funcionalitats marcades per la classe a la qual pertany. Per crear un objecte cal utilitzar la partícula ''new''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//tipus boolean:&lt;br /&gt;
$sortir=FALSE;&lt;br /&gt;
$entrar=TRUE;&lt;br /&gt;
&lt;br /&gt;
//tipus integer:&lt;br /&gt;
$positiu=3451;&lt;br /&gt;
$negatiu= − 4345&lt;br /&gt;
&lt;br /&gt;
//tipus float:&lt;br /&gt;
$amb_coma=34.5;&lt;br /&gt;
&lt;br /&gt;
//tipus string:&lt;br /&gt;
$nom=’Wayan’;&lt;br /&gt;
$salutacio=&amp;quot;Hola $nom!&amp;quot;;&lt;br /&gt;
echo $salutacio.&amp;quot; Benvingut&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus array:&lt;br /&gt;
$grau_cicles=array(&amp;quot;superior&amp;quot;,&amp;quot;mitja&amp;quot;);&lt;br /&gt;
$families[]=&amp;quot;Informàtica&amp;quot;;&lt;br /&gt;
$families[]=&amp;quot;Electrònica&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus objecte:&lt;br /&gt;
class Alumne {&lt;br /&gt;
public function matricular($nom)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Ja estàs matriculat $nom&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$alumne1=new Alumne();&lt;br /&gt;
$alumne1−&amp;gt;matricular(’Made’);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Creació Classes/ OBJECTES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Coche&lt;br /&gt;
{&lt;br /&gt;
	static $numruedas = 4;&lt;br /&gt;
	var $color;&lt;br /&gt;
	var $posx;&lt;br /&gt;
	var $posy;&lt;br /&gt;
	var $velocidad;&lt;br /&gt;
	function __construct($color, $posx, $posy)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;color = $color;&lt;br /&gt;
		$this-&amp;gt;posx = $posx;&lt;br /&gt;
		$this-&amp;gt;posy = $posy;&lt;br /&gt;
		$this-&amp;gt;velocidad = 0;&lt;br /&gt;
	}&lt;br /&gt;
	function mover($x, $y)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;posx = $x;&lt;br /&gt;
		$this-&amp;gt;posy = $y;&lt;br /&gt;
	}&lt;br /&gt;
	function acelerar()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;velocidad = $this-&amp;gt;velocidad + 10;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
	function frenar()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;velocidad &amp;gt; 10)&lt;br /&gt;
			$this-&amp;gt;velocidad = $this-&amp;gt;velocidad - 10;&lt;br /&gt;
		else&lt;br /&gt;
			$this-&amp;gt;velocidad = 0;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$car = new Coche(&amp;quot;verde&amp;quot;,10,10);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les dades especials ===&lt;br /&gt;
*'''resource'''&lt;br /&gt;
La variable que pertany a aquest tipus farà referència a un recurs extern. Determinades funcions faran ús d’aquest recurs. Per exemple, la funció mysql_db_query, que té la funció d’enviar una petició mySQL, retorna un tipus resource. En l’exemple següent la variable $resultat és de tipus resource:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query=&amp;quot;SELECT * FROM alumnes&amp;quot;;&lt;br /&gt;
$resultat=mysql_query($query);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''NULL'''&lt;br /&gt;
Quan necessiteu una variable que no tingui cap valor haureu d’utilitzar aquest tipus.&lt;br /&gt;
&lt;br /&gt;
===Els pseudotipus===&lt;br /&gt;
* '''mixed''': aquest pseudotipus indica que la variable en questió pot emmagatzemar múltiples tipus.&lt;br /&gt;
* '''number''': indica que la variable pot contenir un valor enter o de coma flotant.&lt;br /&gt;
* '''callback''': utilitzareu aquest pseudotipus per emmagatzemar crides de retorn generades per funcions de l’usuari.&lt;br /&gt;
&lt;br /&gt;
=== Conversions de tipus ===&lt;br /&gt;
&lt;br /&gt;
Per forçar un canvi de tipus haureu d’especificar entre parèntesis el tipus al qual voleu fer la conversió i col·locar-lo davant la variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Senténcia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Modelat a &lt;br /&gt;
|-&lt;br /&gt;
| (integer), (int) ||integer.&lt;br /&gt;
|-&lt;br /&gt;
| (boolean)||boolean&lt;br /&gt;
|-&lt;br /&gt;
| (float), (double), (real) ||float&lt;br /&gt;
|-&lt;br /&gt;
| (string) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (binary) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (array)||array&lt;br /&gt;
|-&lt;br /&gt;
| (object)|| object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Sense modelar 27/5: &amp;quot;.(27/5).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;I ara ja modelat: &amp;quot;.(integer)(27/5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants===&lt;br /&gt;
Una constant és un identificador (nom) per expressar un valor simple. Com el nom suggereix, aquest valor no pot variar durant l'execució del script. (A excepció de les [[http://php.net/manual/es/language.constants.predefined.php constants màgiques]], que en realitat no són constants). Una constant és sensible a majúscules per defecte. Per convenció, els identificadors de constants sempre solen declarar-se en majúscules.&lt;br /&gt;
&lt;br /&gt;
El nom d'una constant segueix les mateixes regles que qualsevol altra etiqueta de PHP. Un nom de constant vàlid comença per una lletra o subguió, seguit per qualsevol nombre o lletres, nombres o subguions. Usant una expressió regular, es representaria de la següent manera: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('MIN_VALUE', '0.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
define('MAX_VALUE', '1.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
echo MIN_VALUE;&lt;br /&gt;
//const MIN_VALUE = 0.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
//const MAX_VALUE = 1.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
class Exemple1&lt;br /&gt;
{&lt;br /&gt;
  //define('MIN_VALUE', '0.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
  //define('MAX_VALUE', '1.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  const MIN_VALUE = 0.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
  const MAX_VALUE = 1.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  public static function getMinValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MIN_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static function getMaxValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MAX_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo Exemple1::getMinValue();   //invocamos clase &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Cuál es la diferencia entre $this y self:: ?'''&lt;br /&gt;
&lt;br /&gt;
Uno usa $this para referenciar al objeto actual, y se utiliza self:: para referenciar la clase actual. Se utiliza $this-&amp;gt;nombre para nombres no estáticos y se utiliza self::nombres para nombres estáticos.&lt;br /&gt;
&lt;br /&gt;
=== Variables predefinides ===&lt;br /&gt;
&lt;br /&gt;
En PHP hi ha una sèrie de variables predefinides que resulten de gran ajuda per al programador. Dins d’aquestes variables predefinides cal destacar un gran grup, el grup de les anomenades superglobals.&lt;br /&gt;
&lt;br /&gt;
Les variables '''superglobals''' són variables que sempre estan disponibles en tots els àmbits.&lt;br /&gt;
&lt;br /&gt;
*'''$GLOBALS''':fa referència a totes les variables disponibles en l’àmbit global. Es tracta d’una variable de tipus matriu associativa.&lt;br /&gt;
En l’exemple següent es recorre la variable superglobal $GLOBALS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$una_variable=&amp;quot;Hola&amp;quot;;&lt;br /&gt;
$una_altra_variable=&amp;quot;Com va?&amp;quot;;&lt;br /&gt;
foreach ($GLOBALS as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;GLOBALS[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_SERVER''':ofereix informació molt últil sobre el servidor i l’entorn d’execució. Els valors que emmagatzema són generats pel navegador web.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*Executeu-lo i veureu un seguit de dades&lt;br /&gt;
referents a la màquina que fa de servidor del PHP. Entre altres coses, identificareu&lt;br /&gt;
el nom de la màquina, la versió del navegador, la versió del servidor web, la&lt;br /&gt;
ubicació de fitxers importants i un llarg etcètera.*/&lt;br /&gt;
&lt;br /&gt;
foreach ($_SERVER as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;SERVER[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_GET''': correspon a la variable GET del protocol HTTP. Emmagatzema els valors de les variables que es trasmeten per mitjà del protocol HTTP mitjançant el mètode GET. El seu ús és molt normal en formularis.&lt;br /&gt;
&lt;br /&gt;
*'''$_POST''': correspon a la variable POST del protocol HTTP. Emmagatzema els valors de les variables que es transmeten per mitjà del protocol HTTP mitjançant el mètode POST. El seu ús és, generalment, més adequat que el mètode GET per a temes de seguretat.&lt;br /&gt;
&lt;br /&gt;
*'''$_COOKIE''': és una variable de tipus matriu associativa que emmagatzemarà les variables passades a l’script per mitjà de les galetes de l’HTML.&lt;br /&gt;
&lt;br /&gt;
*'''$_REQUEST''': és una matriu associativa que conté les dades de $_GET ,$_POST i $_COOKIE.&lt;br /&gt;
&lt;br /&gt;
*'''$_FILES''': aquesta variable s’utilitza en la càrrega de fitxers per mitjà del protocol HTTP. El mètode utilitzat és el POST.&lt;br /&gt;
&lt;br /&gt;
*'''$_SESSION''': conté les variables de sessió disponibles en l’script actual.&lt;br /&gt;
&lt;br /&gt;
*'''$_ENV''': conté les variables d’entorn.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Detecció del Navegador ===&lt;br /&gt;
Escriu un script en PHP que detecti el navegador que està utilitzant el client que ha demanat la pàgina.&lt;br /&gt;
&lt;br /&gt;
[[:solució_detecció_navegador_php]]&lt;br /&gt;
&lt;br /&gt;
=== Variables estàtiques ===&lt;br /&gt;
Les variables estàtiques sempre mantenen el valor encara que el programa abandoni l’àmbit de la variable, i existeixen només en l’àmbit local de les funcions. No s’hi pot accedir fora d’aquest àmbit.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function comptador()&lt;br /&gt;
{&lt;br /&gt;
   $a = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador: &amp;quot;.$a.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $a++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function comptadorEstatic()&lt;br /&gt;
{&lt;br /&gt;
   static $b = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador estàtic: &amp;quot;.$b.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $b++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for($i=0;$i&amp;lt;3;$i++)&lt;br /&gt;
{&lt;br /&gt;
   comptador();&lt;br /&gt;
   comptadorEstatic();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integració PHP ==&lt;br /&gt;
&lt;br /&gt;
Normalment trobareu el llenguatge de programació PHP dins d’altres llenguatges.&lt;br /&gt;
El més usual és escriure codi en PHP dins de codi HTML.&lt;br /&gt;
&lt;br /&gt;
Heu de recordar que el codi PHP és interpretat pel servidor, i els resultats es mostren en el navegador que utilitzeu. La simbiosi que es crea entre el PHP i l’HTML permet al PHP generar HTML i a l’HTML passar dades al PHP.&lt;br /&gt;
&lt;br /&gt;
=== PHP dintre de PHP ===&lt;br /&gt;
&lt;br /&gt;
==== Include vs Require ====&lt;br /&gt;
És possible inserir el contingut d'un fitxer PHP en un altre arxiu PHP (abans que el servidor l'executi), amb la declaració d'incloure o requerir. Les sentències d'inclusió i requereixen són idèntics , excepte en cas de fallada :&lt;br /&gt;
&lt;br /&gt;
*'''requerir''' (require) produirà un error fatal ( E_COMPILE_ERROR ) i aturar la seqüència de comandaments&lt;br /&gt;
*'''inclou''' (include) només produirà una advertència ( E_WARNING ) i el guió seguirà&lt;br /&gt;
&lt;br /&gt;
Per tant, si voleu que l'execució continuï mostrant als usuaris la sortida, fins i tot si el fitxer d'inclusió falta, utilitzeu la instrucció d'inclusió. Altrament, en cas de FrameWork, CMS, o amb aplicacions PHP complexes, sempre utilitzeu la instrucció que requereix el fitxer per a poder continuar l'execució. Això ajudarà a evitar posar en perill la seguretat i la integritat de l'aplicació, per si de cas un arxiu clau falta accidentalment.&lt;br /&gt;
&lt;br /&gt;
Inclusió d'arxius estalvia molta feina. Això significa que pots crear una capçalera, peu de pàgina o arxiu de menú estàndard per a totes les pàgines web. Llavors, quan la capçalera ha de ser actualitzada, només s'ha d'actualitzar la capçalera inclouen l'arxiu.&lt;br /&gt;
&lt;br /&gt;
'''Sintaxi'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include 'filename.php';&lt;br /&gt;
&lt;br /&gt;
//or&lt;br /&gt;
&lt;br /&gt;
require 'Otherfilename.php';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Include_once vs Require_once ====&lt;br /&gt;
Require_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a require.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Include_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a include.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redireccions ====&lt;br /&gt;
* Son sentencies on s'envia al navegador una nova pàgina. La pàgina que tenia el navegador desapareix i apareix una nova pàgina, la que està definida al location: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
header(&amp;quot;location: novapàgina.php&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici PHP amb cap i peus ===&lt;br /&gt;
&lt;br /&gt;
L’objectiu d’aquesta activitat és mostrar el funcionament de la inclusió d’arxius a PHP. Fer servir includes us permet simplificar el codi de les pàgines. Per exemple, podeu afegir un fitxer de capçalera (cap.php) i un de peu (peu.php) amb els continguts comuns de totes les pàgines del vostre lloc (el bàner, el menú, la informació general). Senzillament incloent aquests fitxers a totes les pàgines, podeu aconseguir una estètica comú. Si heu de canviar en algun moment la capçalera, modificant l’arxiu cap.php ho tindreu modificat a totes les pàgines del web.&lt;br /&gt;
Feu una pàgina web amb continguts estructurats amb dos fitxers: cap.php i peu.php&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
[[:solucio_cap_peus_php]]&lt;br /&gt;
&lt;br /&gt;
[[:solucio_cap_peus_php2]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP i Formularis HTML ===&lt;br /&gt;
El formulari electrònic és una eina molt potent fortament establida a Internet. Permet l’intercanvi o la introducció de dades entre usuaris d’una manera ràpida i senzilla. Un formulari permet la interactivitat i és el detonant que converteix Internet en l’eina més poderosa per enviar informació a un destinatari.&lt;br /&gt;
&lt;br /&gt;
El llenguatge PHP representa un salt qualitatiu enorme en l’ús de formularis. L’HTML no és un llenguatge creat pensant a utilitzar formularis, sinó que es va crear amb altres objectius. El llenguatge PHP té un gran potencial en la gestió de dades; per tant, quan HTML i PHP treballen juntament amb formularis ens trobem amb un binomi ideal.&lt;br /&gt;
&lt;br /&gt;
====Preparació de l’HTML====&lt;br /&gt;
El llenguatge HTML mostrarà la façana que l’usuari veurà a la pantalla del navegador. El PHP serà darrere d’aquesta primera pantalla i treballarà amb les dades.&lt;br /&gt;
El primer que cal programar per fer servir un formulari dissenyat en PHP és crear&lt;br /&gt;
el codi HTML. Un formulari en HTML s’emmarca entre les etiquetes &amp;lt;FORM&amp;gt; i &amp;lt;/FORM&amp;gt;. Per manipular aquest formulari s’utilitza l’atribut ''ACTION''.&lt;br /&gt;
L’atribut ''ACTION'' indica el programa que s’encarrega de manipular les dades, tasca que encomanareu a un codi dissenyat en llenguatge PHP.&lt;br /&gt;
L’etiqueta &amp;lt;form&amp;gt; us permet fer servir dos mètodes per enviar informació: '''GET''' i '''POST'''.&lt;br /&gt;
El mètode '''GET''' és molt útil en motors de cerca, però no ofereix gaire seguretat, ja que les dades que envia es poden veure en l’URL del navegador.&lt;br /&gt;
El mètode '''POST''' és molt més segur, ja que quan el servidor detecta que el mètode de transacció d’informació és '''POST''' espera rebre dades immediatament sense fer servir l’URL, la qual cosa implica que aquestes dades no seran visibles en l’URL.&lt;br /&gt;
Exemple de Formulari:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;El nostre primer exemple amb formularis&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Introdueix el teu nom i prem el botó!&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;FORM ACTION=&amp;quot;contesta.php&amp;quot; METHOD=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Si us plau, escriu el teu nom:&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;INPUT TYPE=&amp;quot;submit&amp;quot; VALUE=&amp;quot;Enviar&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/FORM&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Com valora el PHP un formulari ====&lt;br /&gt;
En el moment d’enviar les dades des del formulari d’una pàgina HTML a un fitxer escrit en PHP s’ha de tenir en compte que l’atribut ''NAME'' emmagatzema el valor.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Resposta a la petició de dades&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;...Continuem amb l’exemple!&amp;lt;/H1&amp;gt;&lt;br /&gt;
El teu nom és:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_POST['nom'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En el moment en què s’envien dades del formulari HTML cap a un fitxer PHP, aquestes dades apareixeran dins d’un array superglobal amb tots els seus valors.&lt;br /&gt;
&lt;br /&gt;
=== Exercici Mini Calculadora ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar una calculadora de sólo SUMA, para ello tendremos dos inputs y un botón, cuando se aprete el botón deberá enviar enviar el formulario al server haciendo la operación y mostrándola.&lt;br /&gt;
 &lt;br /&gt;
=== Exercici Formulari amb Vectors ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar un formulario en el servidor que genere 10 inputs y un botón, a continuación el servidor recogerá todos los datos los mostrará y calculará la suma total. &lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
:[[solu_vector_input]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Les matrius associatives i els formularis====&lt;br /&gt;
Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu ús, però, serà condicionat pel mètode utilitzat en el pas de dades en el codi HTML. Així, si en el codi HTMLel mètode és '''POST''' haureu de fer servir la matriu associativa '''$_POST'''; en canvi, si heu fet servir el mètode '''GET''' en el codi HTML, haureu de fer servir la matriu associativa '''$_GET'''.&lt;br /&gt;
&lt;br /&gt;
Per accedir als valors emmagatzemats en les matrius associatives fareu servir l’atribut corresponent '''NAME''' de l’HTML com a índex de la matriu associativa. &lt;br /&gt;
&lt;br /&gt;
No heu d’oblidar que el PHP és un llenguatge de programació que, entre altres coses, us permet utilitzar bucles. En el formulari següent es defineix una selecció múltiple, en què podreu marcar els navegadors que coneixeu.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Un exemple amb un formulari&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;seleccioMultiple.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Nom: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Correu electrònic: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Navegadors que coneixes: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;select name=&amp;quot;navegadors[]&amp;quot; multiple&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Chrome&amp;quot;&amp;gt;Chrome&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;MozillaFirefox&amp;quot;&amp;gt;Mozilla Firefox&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Safari&amp;quot;&amp;gt;Safari&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Opera&amp;quot;&amp;gt;Opera&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Lynx&amp;quot;&amp;gt;Lynx&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquí us trobareu amb un petit problema. Per recuperar els valors introduïts com a nom i correu electrònic no hi ha cap problema, la matriu $_POST us permetrà un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecció múltiple, però, sorgeix un petit problema. A diferència dels casos anteriors, ara navegadors pot contenir més d’un valor, com ho fareu per mostrar tots els valors per pantalla? La solució és utilitzar un bucle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach ($_POST['navegadors'] as $opcio)&lt;br /&gt;
echo $opcio.&amp;quot;\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un altre exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ($_POST) {&lt;br /&gt;
    echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
    //echo htmlspecialchars(print_r($_POST, true));&lt;br /&gt;
    print_r($_POST);&lt;br /&gt;
    print_r($_POST['personal']);&lt;br /&gt;
    print_r($_POST['personal']['nombre']);&lt;br /&gt;
    echo '&amp;lt;/pre&amp;gt;';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
    Nombre:  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[nombre]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Email:   &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[email]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Cerveza: &amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;select multiple name=&amp;quot;cerveza[]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;warthog&amp;quot;&amp;gt;Warthog&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;guinness&amp;quot;&amp;gt;Guinness&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;stuttgarter&amp;quot;&amp;gt;Stuttgarter Schwabenbräu&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;¡enviarme!&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode GET ===&lt;br /&gt;
*El mètode GET produeix una cadena llarga que apareix en els logs del servidor i a la URL del navegador.&lt;br /&gt;
&lt;br /&gt;
*GET envia les dades usant la URL&lt;br /&gt;
&lt;br /&gt;
*El mètode GET es limita a enviar fins a només 1.024 caràcters .&lt;br /&gt;
&lt;br /&gt;
*Mai utilitzeu el mètode GET, si voleu enviar la contrasenya o una altra informació confidencial al servidor .&lt;br /&gt;
&lt;br /&gt;
*GET no pot ser utilitzat per enviar dades binàries, com imatges o documents de text, al servidor .&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode GET es pot accedir mitjançant la variable d'entorn QUERY_STRING.&lt;br /&gt;
&lt;br /&gt;
*PHP proveeix la matriu associativa $_GET per accedeix a tota la informació que s'enviï mitjançant el mètode GET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$PHP_SELF = $_SERVER['PHP_SELF'];&lt;br /&gt;
echo $PHP_SELF ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if( isset($_GET[&amp;quot;name&amp;quot;])||  isset($_GET[&amp;quot;age&amp;quot;]) )&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_GET['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_GET['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt; method=&amp;quot;GET&amp;quot;&amp;gt;&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode POST ===&lt;br /&gt;
&lt;br /&gt;
*POST envía los datos de forma que no podemos verlos (en un segundo plano u &amp;quot;ocultos&amp;quot; al usuario).&lt;br /&gt;
&lt;br /&gt;
*El mètode POST no té cap restricció en la mida de les dades a enviar.&lt;br /&gt;
&lt;br /&gt;
*El mètode POST es pot utilitzar per enviar ASCII, així com dades binàries.&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode POST passa per la capçalera HTTP. La seguretat depèn de protocol HTTP. Mitjançant l'ús d'HTTP segur pots assegurar-te que la seva informació està segura .&lt;br /&gt;
&lt;br /&gt;
*El PHP proveeix de la matriu associativa $ _POST per accedeix a tota la informació enviada pel mètode POST.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(isset($_POST[&amp;quot;name&amp;quot;]) ||  isset($_POST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_POST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_POST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;   &amp;lt;!--&amp;lt;?php $_PHP_SELF ?&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== $_PHP_SELF ===&lt;br /&gt;
La variable $_PHP_SELF conté el nom del script PHP (pàgina php) el qual està executant.  ESTÁ DESFASADO USAR $_SERVER['PHP_SELF']&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(  isset($_REQUEST[&amp;quot;name&amp;quot;]) ||  isset($_REQUEST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_REQUEST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_REQUEST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo formulario POST ===&lt;br /&gt;
&lt;br /&gt;
Dissenyar una pàgina web simple amb php que demani a lusuari el preu de tres productes diferents en tres&lt;br /&gt;
establiments diferents. Exemple:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Form1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Un cop s'introdueixi aquesta&lt;br /&gt;
informació al formulari, s'ha de mostrar el resultat, dels tres preus introduïts i el preu mitjà del producte.&lt;br /&gt;
&lt;br /&gt;
  DATOS RECIBIDOS&lt;br /&gt;
  Precio Guitarra Martin D18 en Ubisa: 4.200 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Thomann 3.800 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Alfasonic 4.100 euros&lt;br /&gt;
&lt;br /&gt;
  El precio medio del producto es de 4.0333333333333 euros&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;PHP Calcula precios&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;form name=&amp;quot;formularioDatos&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;01-Formulari.php&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt; CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Ubisa, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Thomann, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio2&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Alfasoni, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio3&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;input value=&amp;quot;Calcular&amp;quot; type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
01-Formulari.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php //Ejemplo aprenderaprogramar.com&lt;br /&gt;
$precio1 = $_POST['precio1'];&lt;br /&gt;
$precio2 = $_POST['precio2'];&lt;br /&gt;
$precio3 = $_POST['precio3'];&lt;br /&gt;
$media = ($precio1+$precio2+$precio3)/3;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; DATOS RECIBIDOS&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Ubisa: &amp;quot;. $precio1. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Thomann &amp;quot;. $precio2. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Alfasonic &amp;quot;. $precio3. &amp;quot; euros &amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; El precio medio del producto es de &amp;quot;. $media. &amp;quot; euros&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Acceso a Ficheros ===&lt;br /&gt;
&lt;br /&gt;
'''Abrir y cerrar el descriptor de ficheros'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $fitxer = fopen(&amp;quot;datos.txt&amp;quot;,&amp;quot;a&amp;quot;);&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'r' 	Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero. &lt;br /&gt;
'w+' 	Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear. &lt;br /&gt;
'a+' 	Apertura para lectura y escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() no tiene efecto, las escrituras siempre son pospuestas. &lt;br /&gt;
&lt;br /&gt;
'''Escribir datos en un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  $fp = fopen('datos.txt', 'a');&lt;br /&gt;
    fwrite($fp, 'Julio');&lt;br /&gt;
    fwrite($fp, 'Noguera');&lt;br /&gt;
    fclose($fp);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Leer datos de un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 $fitxer=fopen(&amp;quot;datos.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while(!feof($fitxer)){&lt;br /&gt;
       $line = fgets($fitxer);&lt;br /&gt;
       echo $line;&lt;br /&gt;
    }&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más info&lt;br /&gt;
http://www.php.net/manual/es/function.fopen.php&lt;br /&gt;
http://www.php.net/manual/es/function.fgets.php&lt;br /&gt;
http://www.php.net/manual/es/function.fwrite.php&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Formulari Insti // Acceso a ficheros ===&lt;br /&gt;
&lt;br /&gt;
Se desea crear un formulario donde se introduzcan los campos de nombre, apellidos, dni, contraseña, cuando se clique el botón de enviar, el servidor debe recibir todos los parámetros de ese usuario y escribirlos en un fichero de texto (fopen/fwrite), el siguiente usuario que rellene el formulario escribirá a continuación, después debe listar todos los ficheros que tiene el servidor (system()/shell_exec).&lt;br /&gt;
&lt;br /&gt;
solució: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
if ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;) { &lt;br /&gt;
&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    $nombre = $_POST['nombre'];  //recibe los parámetros del formulario&lt;br /&gt;
    $apellido = $_POST['apellido'];&lt;br /&gt;
    $dni = $_POST['dni'];&lt;br /&gt;
    $pass = $_POST['pass'];&lt;br /&gt;
&lt;br /&gt;
    $file = fopen(&amp;quot;clase.txt&amp;quot;, &amp;quot;a&amp;quot;);    //crea un descriptor de fichero&lt;br /&gt;
    fwrite($file, ($nombre) . &amp;quot;,&amp;quot; . ($apellido) . &amp;quot;,&amp;quot; . ($dni) . &amp;quot;,&amp;quot; . ($pass) . &amp;quot;\n&amp;quot;);  //introduce datos dentro del fichero&lt;br /&gt;
    fclose($file);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    $usuarioEnSistema = system('cat clase.txt');     //ejecuta terminal linux&lt;br /&gt;
   //$usuario = shell_exec('cat clase.txt'');   // comando más antiguo&lt;br /&gt;
&lt;br /&gt;
    echo $usuarioEnSistema;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nombre&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;apellido&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dni&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;pass&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Exercici: Calculadora PHP ===&lt;br /&gt;
Crea un formulari amb un únic TextBox on s'indiqui les operacions matemàtiques a realitzar. Envia el contingut del TextBox amb el mètode POST i realitza les operacions. Imprimeix per pantalla el resultat.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Solucio_calculadora_m6]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ISSET ===&lt;br /&gt;
&lt;br /&gt;
isset -&amp;gt; Devuelve '''true''' si la variable existe y tiene un valor distinto de null, false de lo contrario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var_dump( isset($var) );   //isset() devuelve '''false''' por que $var no ha sido definida&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''false''' aunque la variable haya sido declarada pues su valor es NULL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var = &amp;quot;&amp;quot;;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''true'''. El valor ya no es nulo aunque esté vacío&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Y cuando deberías usar isset()?'''&lt;br /&gt;
&lt;br /&gt;
Siempre y cuando que quieras comprobar que la variable existe (variable inicializada), un ejemplo bueno sería si quieres saber si se ha mandado un formulario:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;campo1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if (isset($_POST['submit']) {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''isset(), is_null() y empty(): Diferencias y ejemplos de uso'''&lt;br /&gt;
&lt;br /&gt;
https://cybmeta.com/isset-is_null-y-empty-diferencias-y-ejemplos-de-uso&lt;br /&gt;
&lt;br /&gt;
https://es.stackoverflow.com/questions/32133/como-y-cuando-se-usan-isset-y-empty-correctamente&lt;br /&gt;
&lt;br /&gt;
=== Exercici enviament de dades ===&lt;br /&gt;
És popular el disseny d’un document web, en què el mateix document conté la part del formulari HTML i el codi PHP que agafa les dades i les processa. Aquest procediment pot resultar estrany en principi, ja que esteu esperant dos documents ben diferenciats. Així i tot val la pena que veieu aquesta forma de treballar i decidiu si us resulta útil o no. Per fer-ho, simplement heu de fusionar els dos documents (el que envia les dades i el que les rep) en un document únic HTML+PHP de dues parts amb la següent estructura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(primera vegada que s'entra al document)&lt;br /&gt;
{&lt;br /&gt;
crear formulari HTML i enviar-ho al propi document&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
rebre les dades a través de POST o GET&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Feu un document amb aquestes característiques que enviï les següents dades:&lt;br /&gt;
*nom&lt;br /&gt;
*cognom&lt;br /&gt;
*contrasenya&lt;br /&gt;
*si l’usuari és alumne o professor&lt;br /&gt;
*si l’usuari és actiu o no&lt;br /&gt;
*foto (únicament el nom del fitxer)&lt;br /&gt;
*edat (entre 18 i 99)&lt;br /&gt;
*comentaris&lt;br /&gt;
*un camp ocult amb el nom ocult i valor prova&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[:solucio_enviament_dades_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Galetes ===&lt;br /&gt;
Les galetes són uns fitxers de text que emmagatzemen informació a l’ordinador client referent a la visita d’un usuari a una pàgina web.&lt;br /&gt;
Les galetes no són un acte d’intromissió per part de la pàgina web visitada; simplement, són una font d’informació molt útil per augmentar l’eficiència en l’accés.&lt;br /&gt;
Les galetes tenen una mida màxima d’1K i caduquen, la qual cosa fa molt difícil que s’utilitzin amb fins malintencionats. A més, únicament pot consultar la galeta el web que l’ha dipositada, la informació que conté no és visible per a la resta de pàgines web.&lt;br /&gt;
&lt;br /&gt;
Un ús molt freqüent de les galetes és emmagatzemar un perfil d’usuari. Així s’aconsegueix que cada vegada que el mateix usuari accedeix a un web, aquest en conegui les preferències i li mostri directament els continguts més adequats.&lt;br /&gt;
&lt;br /&gt;
Les galetes ajuden els programadors a crear un entorn més adequat per a l’usuari visitant. Moltes pàgines web permeten canviar la mida del text, els colors de la pàgina, la disposició d’alguns continguts, etc. Una vegada l’usuari ha modificat al seu gust l’aspecte de la pàgina web, aquestes dades s’emmagatzemen per a la propera visita.&lt;br /&gt;
&lt;br /&gt;
Importante: las cookies se envían al cliente mediante encabezados HTTP. Como cualquier otro encabezado, las cookies se deben enviar antes que cualquier salida que genere la página (antes que &amp;lt;html&amp;gt;, &amp;lt;head&amp;gt; o un simple espacio en blanco). &lt;br /&gt;
&lt;br /&gt;
'''Funcions del PHP per treballar amb galetes'''&lt;br /&gt;
&lt;br /&gt;
La funció que s’utilitza en PHP per crear galetes és setcookie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
bool setcookie(string $nom [, string $valor [, int $caduca= 0[, string $ruta [, string $domini [, bool $seguretat= false [, bool $nomeshttp=false]]]]]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* $nom: és obligatori i indica el nom que donareu a la galeta, la resta de paràmetres són opcionals.&lt;br /&gt;
* $valor: és el valor que tindrà la galeta.&lt;br /&gt;
* $caduca: indica els segons que té de vida la galeta; si no s’indica res la galeta deixarà d’existir quan finalitzi la sessió de l’usuari.&lt;br /&gt;
* $ruta: indica on podeu trobar la galeta dins el servidor.&lt;br /&gt;
Si no ponemos la ruta (Path), la cookie sólo se puede usar en páginas que se encuentren en el mismo directorio que la página que la creó. Si queremos que se utilice en un directorio en concreto debemos añadir la ruta.&lt;br /&gt;
&lt;br /&gt;
//Cookie creada en el directorio /registro/login&lt;br /&gt;
&lt;br /&gt;
//Si queremos que las páginas del directorio raíz / puedan acceder a la cookie&lt;br /&gt;
&lt;br /&gt;
* $domini: marca el domini en què la galeta està disponible.&lt;br /&gt;
* $seguretat: tindrà el valor TRUE si voleu que la galeta només s’utilitzi en una connexió segura (conexió HTTPs), i FALSE (que és el valor per defecte), si no és necessari un cert grau de seguretat.&lt;br /&gt;
* $nomeshttp: si té per valor TRUE marcarà que la galeta solament és accessible si s’utilitza el protocol HTTP.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
setcookie(&amp;quot;nom&amp;quot;, &amp;quot;Maadiva&amp;quot;, 3600, &amp;quot;/&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El segon fitxer s’encarregarà de consultar a la matriu associativa '''$_COOKIE''' el valor de la galeta indicada, que en aquest cas seria nom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_COOKIE[&amp;quot;nom&amp;quot;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
setcookie(&amp;quot;valor&amp;quot;, 1, time() + 30);    //time() tiempo desde que se originó unix.&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);    //no muestra todas las cookies por temas de seguridad&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unset($_COOKIE[&amp;quot;valor&amp;quot;]);  //otra forma setcookie('valor', 1, expire);  // setcookie(&amp;quot;valor&amp;quot;, 1, time() - 30);&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Se desea que cuente el número de visitas que realiza un usuario al visitar la página; este contador conserva su valor durante un año aún a pesar de que un usuario cierre el navegador y tarde días en volver a visitar la página.&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_contador_galletas]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Les cookies us permeten desar informació al navegador que estarà disponible més endavant pel vostre web. Per exemple, podeu desar la configuració personal de l’usuari o la llengua en què ha escollit visitar el web. La propera vegada que l’usuari visiti el web, el vostre codi PHP podrà obtenir aquesta informació desada i presentar a l’usuari el web amb la seva configuració personal o la llengua escollida. És important destacar que les cookies queden desades al navegador de l’usuari i no al servidor web.&lt;br /&gt;
&lt;br /&gt;
Feu un web amb dos fitxers. El primer, index.php, s’encarregarà d’obtenir el nom de l’usuari i la llengua que vol fer servir per defecte entre una llista desplegable mitjançant un formulari. Enviarà aquestes dades a un altre fitxer, cookie.php, que desarà la informació a les cookies.&lt;br /&gt;
La propera vegada que l’usuari accedeixi a index.php el formulari estarà emplenat amb la informació desada la vegada anterior que va accedir-hi.&lt;br /&gt;
&lt;br /&gt;
sol&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[:solucio_galetes_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sessió ===&lt;br /&gt;
&lt;br /&gt;
Les variables de sessió són variables que estan disponibles en múltiples pàgines sense haver de fer servir pas de paràmetres. Les variables de sessió tenen un temps de vida limitat i s’emmagatzemen en el servidor.&lt;br /&gt;
&lt;br /&gt;
Podeu fer servir les variables de sessió per mantenir informació (l’anomenada informació de sessió) entre diferents pàgines. Per exemple,&lt;br /&gt;
el nom d’usuari o una selecció de productes que ja s’hagi fet.&lt;br /&gt;
&lt;br /&gt;
A continuació, estudiareu un exemple format per tres fitxers. El primer fitxer és un formulari senzill que demana a l’usuari un identificador i una contrasenya. Aquestes dades s’envien a un segon fitxer, anomenat exempleAutenticar.php, que crea les variables de sessió. Finalment, trobareu un tercer fitxer anomenat continuem.php, que recupera la informació emmagatzemada en les variables de sessió.&lt;br /&gt;
&lt;br /&gt;
Just a sota d’aquest text hi ha el fitxer del qual partireu. L’hem anomena exempleSessions.php, però el podeu anomenar d’una altra manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Exemple amb variables de sessió&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
&amp;lt;form action=&amp;quot;exempleAutenticar.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
Escriu el teu nom:&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;usuari&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Escriu la teva contrasenya:&lt;br /&gt;
&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;contrasenya&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia!&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tot seguit apareix el codi del fitxer exempleAutenticar.php. En aquest fitxer creareu i inicialitzareu les dues variables de sessió que utilitzareu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION['id_usuari']=$_REQUEST['usuari'];&lt;br /&gt;
$_SESSION['clau_acces']=$_REQUEST['contrasenya'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...continueu amb l’exemple de variables de sessió...&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
Ja s’han emmagatzemat les variables de sessió.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;continuem.php&amp;quot;&amp;gt;Vinga! Cap al final de l’exemple!&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixeu-vos que el primer que es fa és cridar la funció '''session_start()'''. És obligatori que inicieu la sessió abans de cap etiqueta HTML perquè tot funcioni correctament.&lt;br /&gt;
Amb $_REQUEST es recuperen els dos valors que s’han passat des del fitxer inicial, és a dir, usuari i contrasenya, i els heu d’emmagatzemar en dues variables de sessió creades a $_SESSION, que rebran el nom d’id_usuari i clau_acces.&lt;br /&gt;
$_REQUEST és un array associatiu global que per defecte té els continguts de $_GET, $_POST i $_COOKIE.&lt;br /&gt;
A part de crear les variables de sessió i donar-los valors trobareu un enllaç cap al tercer fitxer.&lt;br /&gt;
El codi del tercer fitxer, continuem.php, el teniu a continuació:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com que esteu treballant amb sessions, el primer que hauríeu de fer és llançar la sessió amb session_start(). A continuació, es recuperen els valors emmagatzemats en les dues variables de sessió.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eliminar sesión&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
unset($_SESSION['id_usuari']); // will delete just the name data&lt;br /&gt;
&lt;br /&gt;
//session_destroy(); // borrará todos los datos asociados a ese usuario. También $_SESSION = array(); &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index3.php&amp;quot;&amp;gt;Destruir Variables de sesion&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les sessions us permeten emmagatzemar dades que podran ser compartides entre les diferents pàgines del web. Aquestes dades, a diferència de les cookies, estan emmagatzemades al servidor i estan disponibles durant tot el temps que l’usuari està interactuant amb la pàgina (temps de sessió).&lt;br /&gt;
Alguns exemples de dades que solen guardar-se a les sessions és si l’usuari ha accedit al web mitjançant els valors usuari/contrasenya, o un carret de la compra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici Sessions ====&lt;br /&gt;
1. Feu una pàgina web que passi entre les seves pàgines el nom de l’usuari i una variable (cost) que s’anirà incrementant en 10 cada vegada que l’usuari passa entre les pàgines (podem pensar que aquesta variable representa el cost de les compres que ha fet fins ara l’usuari al web).&lt;br /&gt;
La sessió es tancarà quan l’usuari torni a la pàgina de login.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://codigosdeprogramacion.com/2016/12/20/sistema-de-usuarios-y-sesiones-en-php-y-mysql-1-login-sesiones-y-logout/&lt;br /&gt;
&lt;br /&gt;
http://velozityweb.com/blog/php/login-de-usuarios-y-creacion-de-sesiones-con-php-y-mysql/#sthash.XbMcrnTA.PSO2jYQ9.dpbs&lt;br /&gt;
&lt;br /&gt;
http://www.formacionwebonline.com/crear-sesiones-php-en-intranet/&lt;br /&gt;
&lt;br /&gt;
=== Exercici Moodle ===&lt;br /&gt;
&lt;br /&gt;
2.Se trata de la hacer un moodle, tenemos un formulario y almacenaremos una base de datos (simulada) en la que guardaremos en un archivo el usuario, contraseña y rol de un profe y un alumno. &lt;br /&gt;
Deberá de comprobar si está registrado, en caso de estarlo se crearán las cookies y variables de sesión(5 minutos para el alumnado y 10 para el profe), en caso de no acceder deberán redireccionarse al login.&lt;br /&gt;
Si se validan correctamente, deberá acceder al menu y mostrar la información si tiene rol de alumno (ROLE_ALUMNO) y otra diferente si es profesor(ROLE_ALUMNO). &lt;br /&gt;
También deberá existir un logout en caso de querer terminar la sesión. &lt;br /&gt;
$_SESSION['caduca']=time()+60; &lt;br /&gt;
&lt;br /&gt;
Solució Exercici Moodle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_moodle]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejercicio Carrito ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--http://evilnapsis.com/2016/10/30/ejemplo-de-carrito-de-compras-sencillo-con-php-y-mysql/--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici Complert ====&lt;br /&gt;
Exercici que engloba Galetes, Idioma, Login, Intranet amb Cap, Peus, Menu i contingut i Sessions.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[http://www.infomerce.es/moodle/mod/resource/view.php?id=11136 Exercici de Classe]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
=== Creació del Arbre XML ===&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xmlDoc = new DOMDocument();&lt;br /&gt;
$xmlDoc-&amp;gt;load(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
=== Obtenir un element del arbre ===&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recòrrer tots els elemens ===&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print $xmlDoc-&amp;gt;saveXML(); //imprimir toda la info&lt;br /&gt;
&lt;br /&gt;
// recorrer las etiquetas y los valores&lt;br /&gt;
$x = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
foreach ($x-&amp;gt;childNodes AS $item) {&lt;br /&gt;
  print $item-&amp;gt;nodeName . &amp;quot; = &amp;quot; . $item-&amp;gt;nodeValue . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//otra manera de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   //selecciona todas las etiquetas aula y muestra el contenido dentro de ellas&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
    echo $aula-&amp;gt;nodeName;&lt;br /&gt;
    echo $aula-&amp;gt;nodeValue, PHP_EOL;&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Otra forma de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   // otra forma de acceder&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
   echo $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)[0]-&amp;gt;nodeValue;   //equivale a -&amp;gt;item(0)&lt;br /&gt;
   echo  $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
   echo $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Afegir un nou element ===&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$auladom = $xmlDoc-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmlDoc-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmlDoc-&amp;gt;createElement(&amp;quot;XARXA_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmlDoc-&amp;gt;createElement(&amp;quot;MASK_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmlDoc-&amp;gt;createElement(&amp;quot;INIT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmlDoc-&amp;gt;createElement(&amp;quot;CURRENT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
&lt;br /&gt;
$root = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
=== Esborrar un element ===&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//borrar nodo&lt;br /&gt;
$xmlDoc = new DOMDocument;&lt;br /&gt;
$xmlDoc-&amp;gt;load('file.xml');   //cargamos fichero&lt;br /&gt;
&lt;br /&gt;
$aula = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
&lt;br /&gt;
// seleccionamos el nodo concreto 0 y lo eleminamos&lt;br /&gt;
$aulaSeleccionada = $aula-&amp;gt;getElementsByTagName('aula')-&amp;gt;item(0);&lt;br /&gt;
$aulaborrada = $aula-&amp;gt;removeChild($aulaSeleccionada);&lt;br /&gt;
&lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;); //guardamos cambios&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici crear XML'''&lt;br /&gt;
&lt;br /&gt;
Tenim un formulari i volem ficar dins del nostre xml noves dades, per tant, haurem de crear un formulari on introduirem les dades.&lt;br /&gt;
&lt;br /&gt;
= Bibliografia / Webgrafia =&lt;br /&gt;
*[http://php.net/manual/es/ Manual oficial de PHP]&lt;br /&gt;
*[http://www.codeacademy.com Introducció a PHP]&lt;br /&gt;
*David Sklar, Adam Trachtenberg, &amp;quot;PHP Cookbook, Third Edition&amp;quot;, O’Reilly Media Inc., 2014. ISBN 978-1-449-36375-8&lt;br /&gt;
*Eduard García Sacristán, Eduard Latorre Jarque, Montserrat Madridejos Mora, Raúl Velaz Mayo, &amp;quot;Llenguatges de guions de servidor&amp;quot;, IOC, 2014 &lt;br /&gt;
*[https://docs.google.com/presentation/d/1ZQgIsW4KCyIfH8NyiqH9ueanM83Ym7bjitaxyQKS0hs/edit#slide=id.i14 Llenguatges de programació del costat del servidor]&lt;br /&gt;
*[http://www.adelat.org/media/docum/nuke_publico/lenguajes_del_lado_servidor_o_cliente.html www.Adelat.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EMMAGATZEMAR I LLEGIR FITXERS ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = '{&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}'&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SERIALIZACIÓN ==&lt;br /&gt;
&lt;br /&gt;
En PHP existe una forma muy sencilla de almacenar o transmitir cualquier tipo de valor (excepto el tipo resource) en forma de una cadena seriada: la serialización.&lt;br /&gt;
&lt;br /&gt;
La serialización te permite, por ejemplo, guardar un objeto o array en una base de datos o transmitirlo entre aplicaciones remotas, para luego volver a convertirlo a su tipo y estructura original.&lt;br /&gt;
&lt;br /&gt;
Supongamos que tienes el siguiente array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arr = array(&lt;br /&gt;
  &amp;quot;fruta&amp;quot; =&amp;gt; &amp;quot;manzana&amp;quot;, &lt;br /&gt;
  &amp;quot;objeto&amp;quot; =&amp;gt; &amp;quot;bicicleta&amp;quot;, &lt;br /&gt;
  &amp;quot;animales&amp;quot; =&amp;gt; array(&lt;br /&gt;
             &amp;quot;perro&amp;quot;, &lt;br /&gt;
             &amp;quot;gato&amp;quot;, &lt;br /&gt;
             &amp;quot;caballo&amp;quot;) &lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si lo deseas guardar en una tabla de una base de datos, lo puedes serializar de esta forma:&lt;br /&gt;
&lt;br /&gt;
'''$string = serialize($arr);'''&lt;br /&gt;
&lt;br /&gt;
La función serialize devolverá un valor fácilmente almacenable o transmitible:&lt;br /&gt;
&lt;br /&gt;
''a:3:{s:5:&amp;quot;fruta&amp;quot;;s:7:&amp;quot;manzana&amp;quot;;s:6:&amp;quot;objeto&amp;quot;;s:9:&amp;quot;bicicleta&amp;quot;;s:8:&amp;quot;animales&amp;quot;;a:3: i:0;s:5:&amp;quot;perro&amp;quot;;i:1;s:4:&amp;quot;gato&amp;quot;;i:2;s:7:&amp;quot;caballo&amp;quot;;}}''&lt;br /&gt;
&lt;br /&gt;
Para recuperar el valor original en PHP a partir de la cadena seriada:&lt;br /&gt;
&lt;br /&gt;
'''$arr = unserialize($string);'''&lt;br /&gt;
&lt;br /&gt;
Un ejemplo del uso de la serialización la tenemos en la forma en que WordPress almacena información variada en algunas de sus tablas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Serializar'''&lt;br /&gt;
&lt;br /&gt;
http://www.cucuza.com/como-serializar-datos-en-php/&lt;br /&gt;
&lt;br /&gt;
==EXEMPLE CLASSE SERIALIZACIÓN==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Serializer {&lt;br /&gt;
&lt;br /&gt;
    private static $path = &amp;quot;./database/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    public static function save($obj, $id) {  //$obj es un JSON , $id es el nombre del archivo &lt;br /&gt;
&lt;br /&gt;
        $arr = serialize($obj);&lt;br /&gt;
        &lt;br /&gt;
        return file_put_contents(self::$path . $id, $arr);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static function restore($id) {&lt;br /&gt;
        &lt;br /&gt;
        if  (file_exists ( self::$path . $id ) ){&lt;br /&gt;
            &lt;br /&gt;
            $xmlString = file_get_contents(self::$path . $id);&lt;br /&gt;
            &lt;br /&gt;
            return unserialize($xmlString);  &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static function showIds(){&lt;br /&gt;
        &lt;br /&gt;
        return array_slice(scandir(self::$path),2);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//al ser una classe estàtica es pot invocar els mètodes de la següent forma, per exemple:&lt;br /&gt;
&lt;br /&gt;
Serializer::save(json,nom_arxiu);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crear un JSON desde PHP (json_encode)==&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crear un objeto en PHP con JSON (json_decode)==&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ENVIAR CORREOS ==&lt;br /&gt;
&lt;br /&gt;
Mediente la función MAIL() de PHP podemos enviar correos, por ello, nuestro servidor deberá tener instalado el servicio.&lt;br /&gt;
En nuestro caso, en nuestro Hosting-ng lo tenemos.&lt;br /&gt;
Existe otra función PHPMailer dónde contiene más opciones. https://github.com/PHPMailer/PHPMailer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Forma simple'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// El mensaje&lt;br /&gt;
$msg = &amp;quot;Estimado alumno de La Mercè\nEstas invitado a participar en  clase&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// usar wordwrap() si las lineas son más largas de 70 caracteres&lt;br /&gt;
$msg = wordwrap($msg,70);&lt;br /&gt;
&lt;br /&gt;
// Enviar mail&lt;br /&gt;
mail(&amp;quot;alguien@ejemplo.cat&amp;quot;,&amp;quot;Mi título&amp;quot;,$msg);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Más opciones'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    $to = &amp;quot;ejemploPrueba@ejemplo.com&amp;quot;;&lt;br /&gt;
    $subject = &amp;quot;Asunto&amp;quot;;&lt;br /&gt;
    $txt = &amp;quot;Estamos en clase de DAW&amp;quot;;&lt;br /&gt;
    $headers = &amp;quot;From: webmaster@example.com&amp;quot; . &amp;quot;\r\n&amp;quot; .&lt;br /&gt;
        &amp;quot;CC: somebodyelse@example.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    mail($to,$subject,$txt,$headers);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' En terminal '''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//también podemos hacerlo desde el terminal de linux en nuestro servidor&lt;br /&gt;
system('mail -t alguien@ejemplo.cat -s ALTA ALUMNOS INSTI &amp;lt;&amp;lt;&amp;lt; &amp;quot;El alumno&amp;quot;'.$nom.&amp;quot; &amp;quot;.$cognoms.&amp;quot; está en espera de darse de alta&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SUBIR FICHEROS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// En versiones de PHP anteriores a la 4.1.0, debería utilizarse $HTTP_POST_FILES en lugar&lt;br /&gt;
// de $_FILES.&lt;br /&gt;
&lt;br /&gt;
 //Directori de pujada. Permís d'escriptura i accés per a www-data&lt;br /&gt;
$dir_subida = './';  &lt;br /&gt;
 //Anexem la carpeta amb el nos del finder que ens puja&lt;br /&gt;
$fichero_subido = $dir_subida . basename($_FILES['file']['name']); //basename: muestra el nombre del fichero con la extensión&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Movem el fitxer temporal creat a /tmp a la ubicació o nom indicats&lt;br /&gt;
echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
if (move_uploaded_file($_FILES['file']['tmp_name'], $fichero_subido)) {    &lt;br /&gt;
    echo &amp;quot;El fichero es válido y se subió con éxito.\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;¡Posible ataque de subida de ficheros!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo 'Más información de depuración:';&lt;br /&gt;
print_r($_FILES);&lt;br /&gt;
&lt;br /&gt;
/*$_FILES['file']['name'] -- original name of the file on the client machine.&lt;br /&gt;
$_FILES['file']['type'] -- mime type of the file, provided by the browser&lt;br /&gt;
$_FILES['file']['size'] -- size (in bytes) of the uploaded file&lt;br /&gt;
$_FILES['file']['tmp_name'] -- temporary filename of the uploaded file, stored on the server&lt;br /&gt;
$_FILES['file']['error'] -- returns an error code, useful for debugging.&lt;br /&gt;
*/&lt;br /&gt;
print &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; SUBIR FICHEROS &amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;!-- El tipo de codificación de datos, enctype, DEBE especificarse como sigue --&amp;gt;&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- MAX_FILE_SIZE debe preceder al campo de entrada del fichero --&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;MAX_FILE_SIZE&amp;quot; value=&amp;quot;30000&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- El nombre del elemento de entrada determina el nombre en el array $_FILES --&amp;gt;&lt;br /&gt;
    Enviar este fichero: &amp;lt;input name=&amp;quot;fichero_usuario&amp;quot; type=&amp;quot;file&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar fichero&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EXERCICI:'''&lt;br /&gt;
&lt;br /&gt;
Es desitja desenvolupar un formulari on pugui ficar el nom d'usuari i a més pujar un fitxer. Deurà haver una pàgina que mostre tots el fitxers d'eixe Usuari i el nombre d'arxius.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDF ==&lt;br /&gt;
Podem també generar pdf's a FPDF http://www.fpdf.org/ , però es deurà baixar la llibreria primer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require('fpdf.php');&lt;br /&gt;
&lt;br /&gt;
class PDF extends FPDF&lt;br /&gt;
{&lt;br /&gt;
// Page header&lt;br /&gt;
function Header()&lt;br /&gt;
{&lt;br /&gt;
    // Logo&lt;br /&gt;
    $this-&amp;gt;Image('logo.png',10,6,30);&lt;br /&gt;
    // Arial bold 15&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','B',15);&lt;br /&gt;
    // Move to the right&lt;br /&gt;
    $this-&amp;gt;Cell(80);&lt;br /&gt;
    // Title&lt;br /&gt;
    $this-&amp;gt;Cell(30,10,'Title',1,0,'C');&lt;br /&gt;
    // Line break&lt;br /&gt;
    $this-&amp;gt;Ln(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Page footer&lt;br /&gt;
function Footer()&lt;br /&gt;
{&lt;br /&gt;
    // Position at 1.5 cm from bottom&lt;br /&gt;
    $this-&amp;gt;SetY(-15);&lt;br /&gt;
    // Arial italic 8&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','I',8);&lt;br /&gt;
    // Page number&lt;br /&gt;
    $this-&amp;gt;Cell(0,10,'Page '.$this-&amp;gt;PageNo().'/{nb}',0,0,'C');&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Instanciation of inherited class&lt;br /&gt;
$pdf = new PDF();&lt;br /&gt;
$pdf-&amp;gt;AliasNbPages();&lt;br /&gt;
$pdf-&amp;gt;AddPage();&lt;br /&gt;
$pdf-&amp;gt;SetFont('Times','',12);&lt;br /&gt;
for($i=1;$i&amp;lt;=40;$i++)&lt;br /&gt;
    $pdf-&amp;gt;Cell(0,10,'Printing line number '.$i,0,1);&lt;br /&gt;
$pdf-&amp;gt;Output();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= QR =&lt;br /&gt;
&lt;br /&gt;
També podem crear codis QR al nostre servidor, hi han moltes libreries tanta en PHP com en JS.&lt;br /&gt;
https://sourceforge.net/projects/phpqrcode/&lt;br /&gt;
&lt;br /&gt;
Es deurà baixar la llibreria i ficar la carpeta &amp;quot;phpqrcode&amp;quot; dins del nostre servidor, a més de introduir el següent codi. &lt;br /&gt;
//'''NOTA''': deureu donar-li permisos d'escriptura a la carpeta&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   // la llibreria s'ha descomprimit dins d'una carpeta anomenada &amp;quot;phpqrcode&amp;quot;&lt;br /&gt;
   include('phpqrcode/qrlib.php');&lt;br /&gt;
   &lt;br /&gt;
   QRcode::png('http://wikiserver.infomerce.es', 'imatgeqr.png');&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
   &amp;lt;img src=&amp;quot;imatgeqr.png&amp;quot; /&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici- Inventario'''&lt;br /&gt;
&lt;br /&gt;
Queremos crear un registro o inventario de los ordenadores, por ellos, queremos generar códigos QR que serán pegatinas para poner en cada uno de los ordenadores de las diferentes aulas, por ello crearemos un formulario donde introduciremos el aula y el ordenador, deben almacenarse en un variable de sesión (ya que no sabemos todavía conectarnos a BD) y cuando cliquemos mostrar deben de aparecer todas los códigos QR del aula.&lt;br /&gt;
También se desea guardarlo en pdf (mirar librerias) con el título y el aula y el codigo QR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CONECTAR CON LDAP o ACTIVE DIRECTORY ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class LDAP &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
      //Asigno variables para accesar al servidor LDAP&lt;br /&gt;
   private $conectar;&lt;br /&gt;
   private $host;&lt;br /&gt;
   private $user;&lt;br /&gt;
   private $pswd;&lt;br /&gt;
   private $dn;&lt;br /&gt;
   private $OU;&lt;br /&gt;
   private $DC;&lt;br /&gt;
   private $DC1;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   public function __construct($user,$password,$ou,$dc,$dc1)&lt;br /&gt;
   {&lt;br /&gt;
    $this-&amp;gt;host= &amp;quot;172.16.208.174&amp;quot;;&lt;br /&gt;
    $this-&amp;gt;user = $user;&lt;br /&gt;
    $this-&amp;gt;pswd = $password;&lt;br /&gt;
    $this-&amp;gt;OU = $ou;&lt;br /&gt;
    $this-&amp;gt;DC = $dc;&lt;br /&gt;
    $this-&amp;gt;DC1 = $dc1;&lt;br /&gt;
    $this-&amp;gt;dn = &amp;quot;OU=&amp;quot;.$ou.&amp;quot;,DC=&amp;quot;.$dc.&amp;quot;,DC=&amp;quot;.$dc1.&amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function conexion()&lt;br /&gt;
   {&lt;br /&gt;
       $this-&amp;gt;conectar = ldap_connect($this-&amp;gt;host) or die(&amp;quot;Imposible Conectar&amp;quot;);&lt;br /&gt;
     // Especifico la versión del protocolo LDAP&lt;br /&gt;
    ldap_set_option($this-&amp;gt;conectar, LDAP_OPT_PROTOCOL_VERSION, 3)    or die (&amp;quot;Imposible asignar el Protocolo LDAP&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function credenciales(){&lt;br /&gt;
   // Valido las credenciales para accesar al servidor LDAP&lt;br /&gt;
    $bd = ldap_bind($this-&amp;gt;conectar, $this-&amp;gt;user, $this-&amp;gt;pswd)    or die (&amp;quot;Imposible Validar en el Servidor LDAP&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Especifico los parámetros que quiero que me regrese la consulta&lt;br /&gt;
    $attrs = array(&amp;quot;displayname&amp;quot;,&amp;quot;mail&amp;quot;,&amp;quot;samaccountname&amp;quot;,&amp;quot;telephonenumber&amp;quot;,&amp;quot;givenname&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
    // Creo el filtro para la busqueda&lt;br /&gt;
    $filter = &amp;quot;(samaccountname=&amp;quot;.$this-&amp;gt;user.&amp;quot;)&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    $search = ldap_search($this-&amp;gt;conectar, $this-&amp;gt;dn, $filter, $attrs)    or die (&amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    $entries = ldap_get_entries($this-&amp;gt;conectar, $search);&lt;br /&gt;
&lt;br /&gt;
    return $entries;&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17451</id>
		<title>NF2: Generació de documents web amb llenguatges de guions</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17451"/>
				<updated>2023-09-29T16:27:40Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introducció llenguatges de programació del costat Servidor =&lt;br /&gt;
&lt;br /&gt;
Existeix una multitud de llenguatges concebuts o no per a Internet. Cadascun d'ells explota més a fons certes característiques que ho fan més o menys útils per desenvolupar diferents aplicacions.&lt;br /&gt;
Un '''llenguatge del costat del servidor''' és aquell que '''s'executa en el servidor web, just abans que s'enviï la pàgina''' a través d'Internet al client. Les pàgines que s'executen en el servidor poden realitzar accessos a bases de dades, connexions en xarxa, i altres tasques per crear la pàgina final que veurà el client.&lt;br /&gt;
D'altra banda, els '''llenguatges de costat client''' (entre els quals no només es troba l'HTML sinó també el Java i el Javascript els quals són simplement inclosos en el codi HTML) són aquells que '''poden ser directament executats pel navegador i no necessiten un pretractament'''.&lt;br /&gt;
[[Fitxer:serverside.jpg|center]]&lt;br /&gt;
Els llenguatges de costat servidor més àmpliament utilitzats per al desenvolupament de pàgines dinàmiques són l'ASP, JSP, PERL i PHP.&lt;br /&gt;
== ASP.NET ==&lt;br /&gt;
Llenguatge comercialitzat per Microsoft, i usat per programadors per desenvolupar entre altres funcions, llocs web. ASP.NET és el successor de la tecnologia ASP, va ser llançada al mercat mitjançant una estratègia de mercat denominada .NET.&lt;br /&gt;
Es desenvolupat per resoldre les limitants que brindava el teu antecessor ASP. Per al desenvolupament d'ASP.NET es pot utilitzar C#, VB.NET o J#. Els arxius compten amb l'extensió (aspx). Per al seu funcionament de les pàgines es necessita tenir instal·lat IIS amb el Framework .Net. Microsft Windows 2003 inclou aquest framework, solament es necessitarà instal·lar-ho en versions anteriors.&lt;br /&gt;
El llenguatge ASP consisteix en una sèrie de classes .NET utilitzades per crear aplicacions Web, tant del costat client (Web Form) com del costat servidor (Web Service). La integració de nadiva .NET Framework amb el sistema operatiu Windows Server 2003 fa que la seva execució sigui més estable i ràpida que altres llenguatges de programació.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Completament orientat a objectes.&lt;br /&gt;
*Controls d'usuari i personalitzats.&lt;br /&gt;
*Divisió entre la capa d'aplicació o disseny i el codi.&lt;br /&gt;
*Facilita el manteniment de grans aplicacions.&lt;br /&gt;
*Increment de velocitat de resposta del servidor.&lt;br /&gt;
*Major velocitat.&lt;br /&gt;
*Major seguretat.&lt;br /&gt;
&lt;br /&gt;
'''Desavantatges: '''&lt;br /&gt;
*Major consum de recursos.&lt;br /&gt;
*Tecnologia propietària.&lt;br /&gt;
*Hostalatge de llocs web costosos.&lt;br /&gt;
&lt;br /&gt;
== JSP: Java Server Pages ==&lt;br /&gt;
És un llenguatge per a la creació de llocs web dinàmics, acrònim de Java Server Pages. Està orientat a desenvolupar pàgines web en Java. JSP és un llenguatge multiplataforma.&lt;br /&gt;
JSP va ser desenvolupat per Sun Microsystems. Comparteix avantatges similars a les d'ASP.NET, desenvolupat per a la creació d'aplicacions web potents. Posseeix un motor de pàgines basat en els servlets de Java. Per al seu funcionament es necessita tenir instal·lat un servidor Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Característiques'''&lt;br /&gt;
*Codi separat de la lògica del programa.&lt;br /&gt;
*Les pàgines són compilades en la primera petició.&lt;br /&gt;
*Permet separar la part dinàmica de l'estàtica a les pàgines web.&lt;br /&gt;
*Els arxius es troben amb l'extensió (jsp).&lt;br /&gt;
*El codi JSP pot ser incrustat en codi HTML.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Execució ràpida del servlets.&lt;br /&gt;
*Crear pàgines del costat del servidor.&lt;br /&gt;
*Multiplataforma.&lt;br /&gt;
*Codi ben estructurat.&lt;br /&gt;
*Integritat amb els mòduls de Java.&lt;br /&gt;
*La part dinàmica està escrita en Java.&lt;br /&gt;
== PERL (Practical Extraction and Report Language) ==&lt;br /&gt;
És un llenguatge de programació desenvolupat per Larry Wall (lwall at netlabs.com) inspirat en altres eines d'UNIX com són: sigueu, grep, awk, c-shell, per a l'administració de tasques pròpies de sistemes UNIX. No estableix cap filosofia de programació concreta. No es pot dir que sigui orientat a objectes, modular o estructurat encara que suporta directament tots aquests paradigmes; el seu punt fort són les labors de processament de textos i arxius. Llenguatge de programació basat en scripts portable a gairebé qualsevol plataforma. És molt utilitzat per escriure CGIs. Un dels seus elements més potents són les expressions regulars, que a partir de la seva versió en Perl han estat adoptades per altres llenguatges i plataformes com .NET o Javascript.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Es poden ajuntar diversos programes d'una forma senzilla per aconseguir una meta determinada. Els usuaris de Windows agrairan aquesta propietat ja que normalment emmalalteixen d'un bon llenguatge tipus “script”.&lt;br /&gt;
*És relativament ràpid per a un llenguatge tipus “script”.&lt;br /&gt;
*Està disponible en múltiples plataformes i sistemes operatius (UNIX, Linux i Windows). Un programa que s'escrigui tenint en compte la compatibilitat pot ser escrit en una plataforma i executat en una altra.&lt;br /&gt;
*Hi ha una col·lecció enorme de mòduls que poden ser incorporats a qualsevol “script” de Perl. Estan disponibles en el CPAN (“Comprehensive Perl Arxivi Network”). En particular existeix una extensió per a càlcul numèric denominada PDL.&lt;br /&gt;
*Perl és gratuït. Molt més que això, és “Programari Lliure”. Això vol dir que el codi font està disponible perquè qualsevol el pugui veure o modificar, i el que és més important, sempre ho estarà. Encara que mai pretenguis canviar el codi, és important disposar de la possibilitat de fer-ho, ja que sempre es podrà contractar a una tercera persona perquè ho modifiqui en el cas que hi hagi un error, i hauria de ser possible solucionar-ho.&lt;br /&gt;
*Li atorga al programador molta llibertat perquè faci el programa com vulgui. Tal com diu l'eslògan de Perl “Hi ha més d'una forma de fer-ho”&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
PHP és l'acrònim de Hipertext Preprocesor. És un llenguatge de programació del costat del servidor gratuït i independent de plataforma, ràpid, amb una gran llibreria de funcions i molta documentació. Va ser creat originalment en 1994 per Rasmus Lerdorf, però com PHP està desenvolupat en política de codi obert, al llarg de la seva història ha tingut moltes contribucions d'altres desenvolupadors.&lt;br /&gt;
El client solament rep una pàgina amb el codi HTML resultant de l'execució de la PHP. Com la pàgina resultant conté únicament codi HTML, és compatible amb tots els navegadors.&lt;br /&gt;
&lt;br /&gt;
https://luisjordan.net/node-js/node-js-vs-php-comparaciones-cms-beneficios-y-tiempos-de-respuesta/&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Molt fàcil d'aprendre.&lt;br /&gt;
*Es caracteritza per ser un llenguatge molt ràpid.&lt;br /&gt;
*Suporta en certa mesura l'orientació a objecte. Classes i herència.&lt;br /&gt;
*És un llenguatge multiplataforma: Linux, Windows, entre uns altres.&lt;br /&gt;
*Capacitat de connexió amb la majoria dels manejadores de base de dades: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre unes altres.&lt;br /&gt;
*Capacitat d'expandir el seu potencial utilitzant mòduls.&lt;br /&gt;
*Posseeix documentació a la seva pàgina oficial la qual inclou descripció i exemples de cadascuna de les seves funcions.&lt;br /&gt;
*És lliure, per la qual cosa es presenta com una alternativa de fàcil accés per a tots.&lt;br /&gt;
*Inclou gran quantitat de funcions.&lt;br /&gt;
*No requereix definició de tipus de variables ni maneig detallat del baix nivell.&lt;br /&gt;
&lt;br /&gt;
= Preparació de l'entorn =&lt;br /&gt;
== Instal·lació de servidors d'aplicacions Web ==&lt;br /&gt;
Internet s’ha convertit en la principal eina d’intercanvi d’informació a la societat actual. La connexió dels ordinadors a les xarxes locals i aquestes xarxes a d’altres de grans dimensions ha possibilitat la comunicació global d’informació entre els ordinadors arreu del món. Per poder oferir serveis web, els servidors han de tenir instal·lats una sèrie de serveis. El servidor web permet l’enviament de continguts a altres ordinadors a través de la xarxa. Els preprocessadors d’hipertext (com PHP) permeten crear continguts web de forma dinàmica. Els servidors de bases de dades permeten emmagatzemar informació de forma estructurada que es pot fer servir per generar contingut web. Aquests serveis han de ser instal·lats i configurats correctament abans de començar a crear el contingut web dinàmic del nostre web.&lt;br /&gt;
&lt;br /&gt;
Un '''servidor web''' és una peça de programari que respon a les peticions dels navegadors i lliura la pàgina per al navegador a través d’Internet. Quan es crida a una pàgina web per l’adreça –l’URL (uniform resource locator), per exemple, www.infomerce.es/index.html-, la comunicació entre el navegador i el servidor és possible gràcies a tres protocols:&lt;br /&gt;
* TCP(Transmission Control Protocol, protocol de control de transmissió): és el responsable de fer que el missatge arribi a la destinació sense errors.&lt;br /&gt;
* IP(Internet Protocol): és el responsable de fer que el missatge trobi el camí fins al servidor.&lt;br /&gt;
* HTTP(Hypertext Transfer Protocol, protocol de transferència d’hipertext): és el protocol que ha indicat l’usuari a l’hora de demanar el recurs al servidor. La primera part d’un recurs URL correspon al protocol que utilitzaran client i servidor per intercanviar dades.&lt;br /&gt;
== HTTP: comunicació entre servidor i client ==&lt;br /&gt;
Un cop establerta la connexió entra en joc el protocol HTTP: el navegador envia una petició al servidor en què sol·licita el recurs index.html. El servidor processa aquesta petició i retorna la pàgina sol·licitada al navegador, que interpreta les etiquetes HTML i la presenta a l’usuari.&lt;br /&gt;
[[Fitxer:peticiohttp.jpg|center]]&lt;br /&gt;
La informació que el client envia al servidor en la petició és la següent:&lt;br /&gt;
* El mètode HTTP: l’acció que s’ha de fer.&lt;br /&gt;
* El recurs a què s’ha d’accedir (una part de l’URL).&lt;br /&gt;
* La informació que l’usuari envia al servidor.&lt;br /&gt;
La informació que el servidor envia en la resposta té dues parts ben diferenciades: &lt;br /&gt;
* La capçalera: conté el codi que indica si la petició s’ha complert. També conté el tipus de contingut que enviarà al client.&lt;br /&gt;
* El contingut: (text, codi HTML, imatges, etc.) del recurs demanat.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Preparació M.V. amb Ubuntu i PHP ===&lt;br /&gt;
Es tracta d'importar una M.V. amb Ubuntu Server. Aquesta màquina virtual la utilitzarem al llarg del curs per desenvolupar programes amb el llenguatge PHP. LA M.V. ha de tenir les següents característiques:&lt;br /&gt;
*512 MB de Ram&lt;br /&gt;
*Targeta mode Pont (Has de reinicialitzar la @MAC i esborrar el fitxer: /etc/udev/rules.d/70-persistent-net.rules)&lt;br /&gt;
*Configura la @IP. &lt;br /&gt;
Instal·la el següent programari:&lt;br /&gt;
*openssh-server (per permetre comunicacions remotes)&lt;br /&gt;
*Servidor Web apache2&lt;br /&gt;
*Servidor PHP&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Primer projecte amb NetBeans ===&lt;br /&gt;
Crea un projecte PHP amb NetBeans. Fes que automàticament guardi tots els fitxers a la màquina virtual creada al apartat anterior. Crea una pàgina d'exemple i comprova que funciona.&lt;br /&gt;
La pàgina d'exemple pot ser la següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
     	&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;?php&lt;br /&gt;
            echo &amp;quot;Primera Pàgina amb PHP&amp;quot;; &lt;br /&gt;
          ?&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= El Llenguatge PHP =&lt;br /&gt;
== Introducció ==&lt;br /&gt;
'''PHP''' és un llenguatge de programació obert que s’integra directament en pàgines HTML. El seu ús ha esdevingut gairebé imprescindible en les pàgines que han d’utilitzar bases de dades o formularis.&lt;br /&gt;
Rasmus Lerdorf és el creador del llenguatge PHP. El 1995 presenta la primera edició d’aquest llenguatge amb el nom de Personal Home Page tools amb llicència pública GNU. Per crear el PHP, Rasmus utilitza el codi de programació C.&lt;br /&gt;
&lt;br /&gt;
El '''codi PHP''' que escriviu, '''l’haureu d’incrustar dins de codi HTML''', concretament dins les etiquetes \&amp;lt;body\&amp;gt; del document. Mitjançant unes marques l’HTML no interpretarà el codi PHP, el qual, i mitjançant les mateixes marques, s’executarà en el servidor.&lt;br /&gt;
&lt;br /&gt;
El codi PHP s’executa en un servidor i mostra el resultat en un client. Visualitzareu els resultats amb un navegador web.&lt;br /&gt;
&lt;br /&gt;
Quan arrenca el PHP es fa la lectura del fitxer '''php.ini'''. Aquest fitxer conté la configuració del PHP i es crea durant la instal·lació del PHP. És possible que necessiteu fer canvis en el fitxer de configuració, preneu la precaució de fer-ne una còpia de seguretat abans de fer aquestes modificacions.&lt;br /&gt;
Una inspecció visual del fitxer php.ini us servirà per comprendre’n el funcionament. Depenent del valor de les variables que conté aquest fitxer, el comportament del PHP variarà en la vostra màquina. Podeu comprovar que cada variable que forma part del fitxer està àmpliament comentada, amb comentaris que es marquen amb un punt i coma.&lt;br /&gt;
&lt;br /&gt;
== Mostrar Errors ==&lt;br /&gt;
Per mostrar els errors que fem al escriure programes en php s'ha d'especificar als fitxers que els vols veure per pantalla amb les següents sentències:&lt;br /&gt;
&lt;br /&gt;
http://www.anerbarrena.com/mostrar-errores-php-608/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* * ******************Errores******************* */&lt;br /&gt;
ini_set('display_errors', true);&lt;br /&gt;
error_reporting(E_ALL);&lt;br /&gt;
/* * ********************Usuarios****************** */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintaxi ==&lt;br /&gt;
=== Generalitats ===&lt;br /&gt;
La sintaxi d'un llenguatge de programació es defineix com el conjunt de regles que han de seguir-se en escriure el codi font dels programes per considerar-se com a correctes per a aquest llenguatge de programació.&lt;br /&gt;
Les normes bàsiques que defineixen la sintaxi de PHP són les següents:&lt;br /&gt;
*Si voleu que s’interpreti el vostre codi és imprescindible que encabiu el codi escrit en PHP entre dos delimitadors. Aquestes marques són &amp;lt;?php , que la fareu servir per indicar l’inici de codi en llenguatge PHP, i ?&amp;gt; , que utilitzareu per marcar el final del vostre codi PHP.&lt;br /&gt;
*Indicareu el final d’una instrucció amb punt i coma. Cada vegada que es detecti un punt i coma s’interpretarà el codi inserit fins a aquell punt.&lt;br /&gt;
*Els comentaris en PHP els podreu incloure mitjançant:&lt;br /&gt;
** Dues barres (//) o un coixinet (#) si voleu comentar una línia&lt;br /&gt;
** Una barra i un asterisc (/*) per indicar l’inici de comentari, i un asterisc i una barra per indicar el final de comentari si voleu comentar més d’una línia(/*).&lt;br /&gt;
*No es defineix el tipus de les variables: PHP és un llenguatge de programació que no obliga a declarar prèviament el nom de les variables que s’utilitzaran ni el seu tipus (és diu que és un llenguatge sense tipus o no tipat). Ara bé, tot i que existeixen els tipus de dades en PHP aquests no es comproven.&lt;br /&gt;
*No es distingeixen les majúscules i minúscules.&lt;br /&gt;
Exemples:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Aquí teniu una instrucció.&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;i aquí una altra instrucció.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Si voleu comentar una línia ho podeu fer d’aquesta manera...&lt;br /&gt;
#...o bé d’aquesta altra.&lt;br /&gt;
/* Però si necessiteu comentar&lt;br /&gt;
més línies aquesta és la millor&lt;br /&gt;
manera de fer − ho! */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Per representar una variable '''caldrà escriure el símbol del dòlar seguit pel nom que vulgueu posar'''. En el moment de donar nom a una variable heu de tenir en compte que es diferencien majúscules i minúscules i que haurà de començar amb una lletra o caràcter de subratllat.&lt;br /&gt;
En PHP, a diferència de molts altres llenguatges, no cal declarar una variable abans d’utilitzar-la. El símbol del dòlar és el que marca que es tracta d’una variable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$Nom='whovian';&lt;br /&gt;
$Familia='Informàtica';&lt;br /&gt;
$Cicle=&amp;quot;CFGS Desenvolupament d'aplicacions Web&amp;quot;;&lt;br /&gt;
$Modul = &amp;quot;DAW en entorn servidor&amp;quot;;&lt;br /&gt;
$Durada= 165;&lt;br /&gt;
echo &amp;quot;Hola $nom!&amp;lt;br&amp;gt;&lt;br /&gt;
Benvingut als estudis d’$Familia!!!&amp;lt;br&amp;gt;&lt;br /&gt;
Cicle: $Cicle&amp;lt;br&amp;gt;&lt;br /&gt;
Mòdul: $Modul&amp;lt;br&amp;gt;&lt;br /&gt;
Durada: $Durada hores&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com podeu veure, les variables poden adquirir qualsevol dels tipus suportats, i la variable $Durada emmagatzema l’enter 180, mentre que la resta de variables emmagatzemaran cadenes.&lt;br /&gt;
Les variables s’assignen per valor per defecte, però '''si voleu assignar un valor per referència''' ho haureu d’indicar fent servir el símbol''' &amp;amp; '''tot just davant de la variable&lt;br /&gt;
=== Àmbit de les variables ===&lt;br /&gt;
&lt;br /&gt;
Les variables tenen una vida determinada depenent d’on les declareu i com ho feu. És molt important conèixer l’àmbit de les variables per controlar els vostres codis. No comprendre aquesta part pot provocar fallades inesperades en les vostres creacions.&lt;br /&gt;
L’àmbit d’una variable és el context en què és definida.&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot declarar una variable nombroses vegades en àmbits diferents:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nom=’Nyoman’;&lt;br /&gt;
echo ’De moment $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
function canvi()&lt;br /&gt;
{&lt;br /&gt;
	$nom=’Ketut’;&lt;br /&gt;
	echo ’Però ara $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
canvi();&lt;br /&gt;
echo ’I de nou $nom torna a tenir el valor de ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadors ===&lt;br /&gt;
Permetran fer accions dins el codi. Podreu canviar i assignar valors, canviar l’adreça del codi, condicionar l’execució de blocs de codi i, en&lt;br /&gt;
definitiva, dotar de la complexitat necessària els vostres programes per aconseguir un objectiu.&lt;br /&gt;
Els operadors es poden agrupar en tres blocs segons el nombre de valors sobre els quals s’actua.&lt;br /&gt;
* L’operador '''unari''' opera sobre un valor i el que pot fer en aquest valor és negar-lo, incrementar-lo o decrementar-lo, entre altres coses.&lt;br /&gt;
* L’operador '''binari''' opera sobre dos valors i permet sumar-los, restar-los o comparar-los.&lt;br /&gt;
* L’operador '''ternari''' permet escollir entre dues expressions en funció d’una altra.&lt;br /&gt;
&lt;br /&gt;
'''Operadors Aritmètics '''&lt;br /&gt;
Teniu en compte que la divisió retornarà un valor en coma flotant si el resultat de la divisió no és exacte.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
|-$valor||Negació||Oposat de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor + $valorB ||Addició||Suma de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor - $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor * $valorB||Multiplicació||Producte de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor / $ valorB||Divisió||Quocient de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor % $valorB||Mòdul||Resta de $valor dividit per $valorB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors d'assignació '''&lt;br /&gt;
L’operador bàsic d’assignació és l’igual. Amb l’operador igual la variable de l’esquerra rep el valor de l’expressió de la dreta.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor = $valorB||Assignació||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor += $valorB||Addició i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor -= $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor.= “text”||Concatenació i Assignació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de bit '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp; $valorB||i||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor I $valorB||o i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor ˆ $valorB ||xor||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
|  ̃ $valor||Negació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;lt;$valorB ||Desplaçament a l’esquerra||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;&amp;gt;$valorB||Desplaçament a la dreta||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de comparació '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor == $valorB||Igual||TRUE si $valor és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor === $valorB||Idèntic||TRUE si $valor és igual a $valorB i són del mateix tipus.&lt;br /&gt;
|-&lt;br /&gt;
| $valor != $valorB ||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;gt; $ valorB||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor !== $valorB ||No idèntic||TRUE si $valor no és igual a $valorB o no són del mateix tipus&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt; $valorB||Més petit que||TRUE si $valor és més petit que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt; $valorB||Més gran que||TRUE si $valor és més gran que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;= $valorB||Més petit o igual que||TRUE si $valor és més petit o igual que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;= $valorB||Més gran o igual que||TRUE si $valor és més gran o igual que $valorB.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Operadors d’increment i decrement '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| ++$valor||Preincrement||Incrementa $valor una unitat, i després retorna $valor.&lt;br /&gt;
|-&lt;br /&gt;
| $valor++||Postincrement||Retorna $valor i incrementa $valor una unitat.&lt;br /&gt;
|-&lt;br /&gt;
| –$valor ||Predecrement||Decrementa $valor una unitat i retorna $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor–||Postdecrement||Retorna $valor i decrementa $valor una unitat.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de lògica '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor and valorB||i||TRUE si $valor i $valorB són TRUE&lt;br /&gt;
|-&lt;br /&gt;
| $valor or $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor xor $valorB ||xor||TRUE si $valor o $valorB són TRUE, però no tots dos alhora.&lt;br /&gt;
|-&lt;br /&gt;
| !$valor||No||Inverteix el contingut de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp;&amp;amp; $valorB ||i||TRUE si $valor i $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor II $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Els Vectors i les Matrius (Arrays) ===&lt;br /&gt;
Les matrius i els vectors són conjunts de dades que poden estar definides en un Guió de PHP. Les matrius poden contenir altres matrius dintre d'ells sense restricció (multidimensionals). &lt;br /&gt;
&lt;br /&gt;
Els vectors es poden crear de dues maneres. La primera consisteix en l'ús de la funció '''array()'''. La segona implica l'ús de claudàtors.&lt;br /&gt;
Exemple de declaracions d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$elmeuarray = array($valor1, $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
$elmeuarray[1] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//També es pot declarar de la següent manera:&lt;br /&gt;
$elmeuarray = array('mes1' =&amp;gt; $valor1, 'mes2' =&amp;gt; $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
$elmeuarray['mes2'] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//Però tambés es pot declarar directament amb claudàtors:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
//o amb la següent notació&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemples d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$array = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;type&amp;quot;=&amp;gt;&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;manufactured&amp;quot;=&amp;gt;&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2 = array(&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3 = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array['name']=&amp;quot;BMW&amp;quot;;&lt;br /&gt;
$array['type']=&amp;quot;SERIE 1&amp;quot;;&lt;br /&gt;
$array['colour']=&amp;quot;BLANCO&amp;quot;;&lt;br /&gt;
$array['manufactured']=&amp;quot;2035&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2[]=&amp;quot;AUDI&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;A5&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;ROJO&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;2038&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3['name']=&amp;quot;FERRARI&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;SPIDER&amp;quot;;&lt;br /&gt;
$array3['colour']=&amp;quot;VERDE&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;2013&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les matrius son vectors multidimensionals. Els elements d'un vector a la seva vegada poden ser un altre vector. Un exemple és el següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$cars = array(&lt;br /&gt;
   &amp;quot;car1&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Toyota&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;Green&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1999,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1998),&lt;br /&gt;
   &amp;quot;car2&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;BMW&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;RED&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 2005,&amp;quot;engine_cc&amp;quot; =&amp;gt; 2400),&lt;br /&gt;
   &amp;quot;car3&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Renault&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;White&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1993,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1395),&lt;br /&gt;
);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $cars['car1']['make'],&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo $cars['car3']['engine_cc'];&lt;br /&gt;
&lt;br /&gt;
/* El resultat de l'execució de les intruccions anteriors és:&lt;br /&gt;
Toyota&lt;br /&gt;
1395&lt;br /&gt;
*/&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Més informació sobre arrays [http://php.net/manual/en/language.types.array.php aquí.]&lt;br /&gt;
Existeixen MOLTES funcions per manipular els arrays. Dona una ullada a [http://php.net/manual/en/ref.array.php aquesta pàgina] abans que comencis a implementar funcions que ja existeixen a la llibreria de php.&lt;br /&gt;
&lt;br /&gt;
=== Estructures de control ===&lt;br /&gt;
==== La sentència '''IF''' i l'Operador Ternari ====&lt;br /&gt;
Les estructures condicionals s'utilitzen per controlar quines instruccions s'executen. Els condicionals en PHP estan estructurats de manera similar als trobats en C ++ i Java .&lt;br /&gt;
Exemple d'estructures condicionals:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//Exemple 1&lt;br /&gt;
$foo = 1;&lt;br /&gt;
$bar = 2;&lt;br /&gt;
if($foo == $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is equal to $bar.&amp;quot;;&lt;br /&gt;
} elseif ($foo &amp;gt; $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is greater than $bar.&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;$foo is less than $bar.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple 2&lt;br /&gt;
$lower = 10;&lt;br /&gt;
$upper = 100;&lt;br /&gt;
$needle = 25;&lt;br /&gt;
if(($needle &amp;gt;= $lower) &amp;amp;&amp;amp; ($needle &amp;lt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is in the haystack.&amp;quot;;&lt;br /&gt;
} elseif (($needle &amp;lt;= $lower) || ($needle &amp;gt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is outside of the haystack.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple Operador Ternari&lt;br /&gt;
&lt;br /&gt;
$missatge =  (date('G') &amp;lt; 12) ? 'Buenos días' : 'Buenas tardes';&lt;br /&gt;
&lt;br /&gt;
//equival a la següent estructura:&lt;br /&gt;
if (date('G') &amp;lt; 12) {&lt;br /&gt;
$missatge = 'Buenos días';&lt;br /&gt;
} else {&lt;br /&gt;
$missatge = 'Buenas tardes';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''SWITCH''' ====&lt;br /&gt;
Quan es necessita utilitzar un IF amb molts Else pot resultar que es vegi un codi molt redundant. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user_command == &amp;quot;n&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_north();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;e&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_east();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;s&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_south();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;w&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_west();&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  do_something_else();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per millorar la llegibilitat del codi utilitzarem l'estructura 'Switch' de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 switch($user_command)&lt;br /&gt;
 {&lt;br /&gt;
   case 'n':&lt;br /&gt;
     go_north();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'e':&lt;br /&gt;
     go_east();&lt;br /&gt;
     break;&lt;br /&gt;
   case 's':&lt;br /&gt;
     go_south();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'w':&lt;br /&gt;
     go_west();&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     do_something_else();&lt;br /&gt;
     break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Un altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($firstvariable == 'comparison1' &lt;br /&gt;
         || $firstvariable == 'comparison2')&lt;br /&gt;
 {&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
 }&lt;br /&gt;
 else if ($firstvariable == 'comparison3')&lt;br /&gt;
 {&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
      launchMissiles();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//amb l'estructura switch :&lt;br /&gt;
 switch($firstvariable)&lt;br /&gt;
 {&lt;br /&gt;
  case 'comparison1':&lt;br /&gt;
  case 'comparison2':&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  case 'comparison3':&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  default: &lt;br /&gt;
      launchMissiles();&lt;br /&gt;
      break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''WHILE''' ====&lt;br /&gt;
Aquesta sentència s'utilitzarà per repetir una serie d'instruccions tantes vegades com el condicional sigui evaluat a True.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$c = 0;&lt;br /&gt;
while ($c &amp;lt; 5) {&lt;br /&gt;
   echo $c++;&lt;br /&gt;
} ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mira el següent codi i enraona si serà un bucle infinit o no:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$c = 1;&lt;br /&gt;
$myName=&amp;quot;Fred&amp;quot;;&lt;br /&gt;
while ($myName != &amp;quot;Rumplestilskin&amp;quot;) &lt;br /&gt;
{&lt;br /&gt;
   if ($myName==&amp;quot;Fred&amp;quot;) &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Leslie&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Marc&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   $c++;&lt;br /&gt;
 &lt;br /&gt;
   if ($c==3) &lt;br /&gt;
   {&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
echo &amp;quot;You lose and I get your baby!\n&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''do ... WHILE''' ====&lt;br /&gt;
És semblan al bucle anterior però les intruccions sempre s'execulten almenys 1 vegada. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  $c = 6;&lt;br /&gt;
  do {&lt;br /&gt;
    echo 'Hi';&lt;br /&gt;
  } while ($c &amp;lt; 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''FOR''' ====&lt;br /&gt;
La sintaxi bàsica d'aquesta sentencia és la següent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for([initialization]; [condition]; [step])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'ús:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 for($i = 0; $i &amp;lt; 5; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilització amb arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $menu = array(&amp;quot;Toast and Jam&amp;quot;, &amp;quot;Bacon and Eggs&amp;quot;, &amp;quot;Homefries&amp;quot;, &amp;quot;Skillet&amp;quot;, &amp;quot;Milk and Cereal&amp;quot;);&lt;br /&gt;
 // note to self: get breakfast after writing this article&lt;br /&gt;
 $count = count($menu);&lt;br /&gt;
 for($i = 0; $i &amp;lt; $count; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i + 1 . &amp;quot;. &amp;quot; . $menu[$i] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== La sentència '''FOREACH''' ====&lt;br /&gt;
Aquesta sentència és molt utilitzada per recòrrer arrays. Com el parell array[key]=value pot ser string en ambdós casos, aquesta estructura ens permet obternir-los:&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach ($array as $someVar) {&lt;br /&gt;
  echo ($someVar . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//un altre exemple:&lt;br /&gt;
foreach ($array as $key =&amp;gt; $value) {&lt;br /&gt;
  echo ($key.&amp;quot;holds the value &amp;quot;.$value.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''break''' ====&lt;br /&gt;
&lt;br /&gt;
La sentència break provoca la sortida de qualsevol estructura de control, trencant així un bucle. Penseu per exemple un bucle que cerca un element d’un array. Una vegada trobat, és ineficient acabar de recórrer la resta de l’array.&lt;br /&gt;
''Podeu indicar a aquesta sentència quantes estructures de control voleu saltar. ''&lt;br /&gt;
En l’exemple següent el break provoca la sortida de dos blocs de codi:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
while($edat&amp;lt;20)&lt;br /&gt;
{&lt;br /&gt;
	for( ; ; $edat=$edat+1)&lt;br /&gt;
	{&lt;br /&gt;
		if($edat==18)&lt;br /&gt;
		{&lt;br /&gt;
			echo &amp;quot;Ara ja tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
			break 2;&lt;br /&gt;
		}&lt;br /&gt;
		echo &amp;quot;Encara ets menor d’edat, ja que tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;Aquesta línia no sortirà per pantalla!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;Ja no ets menor d’edat! Tens $edat anys!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
&lt;br /&gt;
===Exercici: tablita ===&lt;br /&gt;
Se desea crear una página web en la cual muestre un título y luego haga una tabla que imprima 10 filas mostrando &amp;quot;estamos en 2DAW&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
    &amp;lt;head&amp;gt;&lt;br /&gt;
        &amp;lt;meta charset=&amp;quot;UTF-8&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
    &amp;lt;/head&amp;gt;&lt;br /&gt;
    &amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;table&amp;gt;&lt;br /&gt;
              &amp;lt;tr&amp;gt;&lt;br /&gt;
                    &amp;lt;th&amp;gt;M09-PHP&amp;lt;/th&amp;gt;  &lt;br /&gt;
              &amp;lt;/tr&amp;gt;&lt;br /&gt;
            &amp;lt;?php&lt;br /&gt;
                $conta =1;&lt;br /&gt;
                while($conta&amp;lt;=10) { &lt;br /&gt;
                    echo &amp;quot;&amp;lt;tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;td&amp;gt;Estamos en DAW2&amp;lt;/td&amp;gt;&amp;quot;;&lt;br /&gt;
                    echo &amp;quot;&amp;lt;/tr&amp;gt;&amp;quot;;&lt;br /&gt;
                    $conta++;&lt;br /&gt;
                }&lt;br /&gt;
            ?&amp;gt;&lt;br /&gt;
        &amp;lt;/table&amp;gt;&lt;br /&gt;
     &amp;lt;/body&amp;gt;    &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Exercici: Vector (opcional) ===&lt;br /&gt;
Queremos crear un vector &amp;quot;ciudades&amp;quot; donde introduciremos una serie  de ciudades, luego deberá mostrar cada una de las ciudades y el número total.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Recòrrer array ====&lt;br /&gt;
Donat el següent array:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$eu = array( &amp;quot;Italy&amp;quot;=&amp;gt;&amp;quot;Rome&amp;quot;, &amp;quot;Luxembourg&amp;quot;=&amp;gt;&amp;quot;Luxembourg&amp;quot;, &amp;quot;Belgium&amp;quot;=&amp;gt; &amp;quot;Brussels&amp;quot;, &lt;br /&gt;
&amp;quot;Denmark&amp;quot;=&amp;gt;&amp;quot;Copenhagen&amp;quot;, &amp;quot;Finland&amp;quot;=&amp;gt;&amp;quot;Helsinki&amp;quot;, &amp;quot;France&amp;quot; =&amp;gt; &amp;quot;Paris&amp;quot;, &amp;quot;Slovakia&amp;quot;=&amp;gt;&amp;quot;Bratislava&amp;quot;, &lt;br /&gt;
&amp;quot;Slovenia&amp;quot;=&amp;gt;&amp;quot;Ljubljana&amp;quot;, &amp;quot;Germany&amp;quot; =&amp;gt; &amp;quot;Berlin&amp;quot;, &amp;quot;Greece&amp;quot; =&amp;gt; &amp;quot;Athens&amp;quot;, &amp;quot;Ireland&amp;quot;=&amp;gt;&amp;quot;Dublin&amp;quot;, &lt;br /&gt;
&amp;quot;Netherlands&amp;quot;=&amp;gt;&amp;quot;Amsterdam&amp;quot;, &amp;quot;Portugal&amp;quot;=&amp;gt;&amp;quot;Lisbon&amp;quot;, &amp;quot;Spain&amp;quot;=&amp;gt;&amp;quot;Madrid&amp;quot;, &amp;quot;Sweden&amp;quot;=&amp;gt;&amp;quot;Stockholm&amp;quot;,&lt;br /&gt;
 &amp;quot;United Kingdom&amp;quot;=&amp;gt;&amp;quot;London&amp;quot;, &amp;quot;Cyprus&amp;quot;=&amp;gt;&amp;quot;Nicosia&amp;quot;, &amp;quot;Lithuania&amp;quot;=&amp;gt;&amp;quot;Vilnius&amp;quot;, &lt;br /&gt;
&amp;quot;Czech Republic&amp;quot;=&amp;gt;&amp;quot;Prague&amp;quot;, &amp;quot;Estonia&amp;quot;=&amp;gt;&amp;quot;Tallin&amp;quot;, &amp;quot;Hungary&amp;quot;=&amp;gt;&amp;quot;Budapest&amp;quot;, &amp;quot;Latvia&amp;quot;=&amp;gt;&amp;quot;Riga&amp;quot;, &lt;br /&gt;
&amp;quot;Malta&amp;quot;=&amp;gt;&amp;quot;Valetta&amp;quot;, &amp;quot;Austria&amp;quot; =&amp;gt; &amp;quot;Vienna&amp;quot;, &amp;quot;Poland&amp;quot;=&amp;gt;&amp;quot;Warsaw&amp;quot;) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Crea un script amb PHP que mostri un llistat amb el noms de les capitals i els seus corresponents països. El llistat ha de ser semblant a:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
La capital de Netherlands és Amsterdam&lt;br /&gt;
La capital de Greece és Athens&lt;br /&gt;
La capital de Germany és Berlin&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[solucio_php_recorrer_array]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Afegir un element a un array ====&lt;br /&gt;
Escriu un programa que afegeixi un nou element a un array en una posició determinada.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//abans:&lt;br /&gt;
12345&lt;br /&gt;
&lt;br /&gt;
//després d'afegir $ l'array és:&lt;br /&gt;
123$45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
:[[solucio_afegir_element_array_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Curta i llarga ====&lt;br /&gt;
Escriu un programa en PHP que retorni la longitud màxima i mínima dels strings que conté un array.&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ar = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$max=0;&lt;br /&gt;
$min = PHP_INT_MAX;&lt;br /&gt;
&lt;br /&gt;
foreach($ar as $valor){&lt;br /&gt;
    if( strlen($valor) &amp;lt; $min){&lt;br /&gt;
        $min = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
    if (strlen($valor) &amp;gt; $max){&lt;br /&gt;
        $max = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;La longitud mes curta es $min i la mes llarga es $max.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Otra solucion:&lt;br /&gt;
&lt;br /&gt;
$my_array = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$otroarray = array_map('strlen', $my_array);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;La longitud mes curta es &amp;quot;. min($otroarray) .&amp;quot; i la mes llarga es &amp;quot;. max($otroarray).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
print_r($otroarray);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==== Exercici: Dibuixa asteriscs ====&lt;br /&gt;
Dibuixa amb PHP utilitzant asteriscs el següent dibuix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* &lt;br /&gt;
* * &lt;br /&gt;
* * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * &lt;br /&gt;
* * &lt;br /&gt;
* &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
$n=5;  &lt;br /&gt;
&lt;br /&gt;
for($i=1; $i&amp;lt;=$n; $i++)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
for($i=$n; $i&amp;gt;=1; $i--)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Escacs ====&lt;br /&gt;
Dibuixa una taula d'escacs com la que pots veure a continuació. &lt;br /&gt;
Table width=&amp;quot;270px&amp;quot; i cada cel·la ocupa 30px d'amplada i d'altura.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:escacs.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:solucio_escacs_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcions ===&lt;br /&gt;
&lt;br /&gt;
Les funcions son grup d'instruccions que poden ser cridades en qualsevol moment. Les funcions són útils per re-utilitzar codi de manera sencilla dintre de la nostra aplicació.&lt;br /&gt;
====Funcions definides per l’usuari====&lt;br /&gt;
L’usuari pot definir totes les funcions que necessiti. És imprescindible que el nom donat a la funció no estigui prohibit, és a dir, no es poden fer servir:&lt;br /&gt;
*paraules reservades (per exemple, echo), &lt;br /&gt;
*començar amb un nombre o un caràcter especial&lt;br /&gt;
*repetir el nom d’una funció dins un mateix àmbit. &lt;br /&gt;
Tot i que el PHP '''no farà cap distinció entre majúscules i minúscules''', es recomana utilitzar el nom de la funció idèntic a l’utilitzat en la declaració.&lt;br /&gt;
Les funcions poden rebre paràmetres. El pas de paràmetres d’entrada es fa escrivint entre parèntesis i a continuació del nom de la funció.&lt;br /&gt;
En l’exemple següent podeu veure com es declara la funció missatge i com, posteriorment, es crida passant-hi un paràmetre.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function missatge($argument)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;$argument&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
missatge(&amp;quot;Aquest és l’argument que es passa en aquest exemple.&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les funcions també podran retornar valors. Per fer-ho caldrà utilitzar la sentència '''return'''.&lt;br /&gt;
En l’exemple següent comprovareu com la funció suma, la qual rep dos paràmetres, retorna el resultat de sumar dos nombres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function suma ($valor1,$valor2)&lt;br /&gt;
{&lt;br /&gt;
	return($valor1+$valor2);&lt;br /&gt;
}&lt;br /&gt;
echo suma(4,6);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Funcions Internes====&lt;br /&gt;
El llenguatge PHP té funcions definides internament. Aquestes funcions són de gran utilitat per al programador i resulta imprescindible estudiarles i conèixer-ne les més importants.&lt;br /&gt;
&lt;br /&gt;
És possible que diverses funcions no es reconeguin en el vostre entorn de treball del PHP; el motiu d’això és que algunes funcions internes no s’han inclòs en la compilació, la qual cosa ha fet necessària una compilació dels mòduls que les contenen. Amb phpinfo() es poden veure les extensions carregades en la vostra configuració del PHP.&lt;br /&gt;
&lt;br /&gt;
Són funcions internes molt usuals ''echo, fprintf, print, printf i sprintf'', en què queda demostrat que el llenguatge PHP ja té definides funcions específiques que poden ser de gran utilitat per a l’usuari. &lt;br /&gt;
&lt;br /&gt;
Podeu mirar l’ajuda de PHP a la [https://www.php.net/manual/es/funcref.php pàgina oficial].&lt;br /&gt;
Funcions de Strings: [http://php.net/manual/en/ref.strings.php pàgina oficial].&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot codificar amb codificació ''md5'' el contingut d’una variable:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom = 'Blanca';&lt;br /&gt;
echo(&amp;quot;La codificació md5 de $nom és:&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
echo md5($nom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Exercici===&lt;br /&gt;
El código de encriptación md5 y sha están comprometido ya que son fáciles de desencriptar. ¿Qué algoritmo se debería utilizar?&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Algoritmes d'ordenació====&lt;br /&gt;
Segons el següent array &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fruits = array(&amp;quot;lemon&amp;quot;, &amp;quot;orange&amp;quot;, &amp;quot;banana&amp;quot;, &amp;quot;apple&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SORT''' Esta función ordena una matriz. Los elementos se organizarán de menor a mayor cuando se haya completado esta función.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
sort($cars);&lt;br /&gt;
&lt;br /&gt;
BMW&lt;br /&gt;
Toyota&lt;br /&gt;
Volvo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''RSORT''' Esta función ordena una matriz en orden inverso (de mayor a menor).&lt;br /&gt;
Nota: Esta función asigna nuevas claves para los elementos en la matriz. Eliminará todas las claves existentes que haya asignado, en lugar de simplemente reordenar las claves.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
rsort($cars);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volvo&lt;br /&gt;
Toyota&lt;br /&gt;
BMW&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''asort'''()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;345&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;3&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
asort($age)&lt;br /&gt;
&lt;br /&gt;
Array ( [Ben] =&amp;gt; 3 [Joe] =&amp;gt; 43 [Peter] =&amp;gt; 345 ) &lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''arsort''' ()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
arsort($age);&lt;br /&gt;
&lt;br /&gt;
Array ( [Peter] =&amp;gt; 345 [Joe] =&amp;gt; 43 [Ben] =&amp;gt; 3 ) &lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ksort''' ()&lt;br /&gt;
Ordena una matriz por clave, manteniendo la clave de las correlaciones de datos. Esto es útil principalmente para matrices asociativas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;200&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;99&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
ksort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Ben, Value=99&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''krsort'''()                &lt;br /&gt;
Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
krsort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Peter, Value=35&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=37&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''natsort''' ()&lt;br /&gt;
Esta función implementa un algoritmo de ordenamiento que ordena cadenas alfanuméricas en la forma en que lo haría un ser humano mientras mantiene asociaciones de clave / valor. Esto se describe como un &amp;quot;orden natural&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$array1 = $array2 = array(&amp;quot;img12.png&amp;quot;, &amp;quot;img10.png&amp;quot;, &amp;quot;img2.png&amp;quot;, &amp;quot;img1.png&amp;quot;);&lt;br /&gt;
sort($array1);&lt;br /&gt;
echo &amp;quot;Standard sorting\n&amp;quot;;print_r($array1);&lt;br /&gt;
natsort($array2);&lt;br /&gt;
echo &amp;quot;\nNatural order sorting\n&amp;quot;;print_r($array2);?&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The above example will output:&lt;br /&gt;
Standard sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; img1.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [2] =&amp;gt; img12.png&lt;br /&gt;
    [3] =&amp;gt; img2.png&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Natural order sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [3] =&amp;gt; img1.png&lt;br /&gt;
    [2] =&amp;gt; img2.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [0] =&amp;gt; img12.png&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
====Exercici: Ordenació ====&lt;br /&gt;
Crea una funció que ordeni un array. &lt;br /&gt;
*Per claus de menor a major i de major a menor&lt;br /&gt;
*Per valors de menor a major i de major a menor&lt;br /&gt;
&lt;br /&gt;
[[:Solucio_ordenacio]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Comprova minúscules ====&lt;br /&gt;
Crea una funció que comprovi si tots els caràcters d'un string son minúscules.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function is_str_lowercase($str1)  &lt;br /&gt;
   {  &lt;br /&gt;
    for ($sc = 0; $sc &amp;lt; strlen($str1); $sc++) {  &lt;br /&gt;
          if (ord($str1[$sc]) &amp;gt;= ord('A') &amp;amp;&amp;amp;  ord($str1[$sc]) &amp;lt;= ord('Z')) {    // ord — devuelve el valor ASCII de un caracter&lt;br /&gt;
      return false;  &lt;br /&gt;
         }  &lt;br /&gt;
         }  &lt;br /&gt;
      return true;  &lt;br /&gt;
       }  &lt;br /&gt;
var_dump(is_str_lowercase('abc def ghi'));  &lt;br /&gt;
var_dump(is_str_lowercase('abc dEf ghi'));  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
====Exercici: Primers====&lt;br /&gt;
Crea una funció que indiqui si un número és primer.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function IsPrime($n)  &lt;br /&gt;
{  &lt;br /&gt;
 for($x=2; $x&amp;lt;$n; $x++)  &lt;br /&gt;
   {  &lt;br /&gt;
      if($n %$x ==0)  &lt;br /&gt;
          {  &lt;br /&gt;
           return 0;  &lt;br /&gt;
          }  &lt;br /&gt;
    }  &lt;br /&gt;
  return 1;  &lt;br /&gt;
   }  &lt;br /&gt;
$a = IsPrime(3);  &lt;br /&gt;
if ($a==0)  &lt;br /&gt;
echo 'No es Primo.....';  &lt;br /&gt;
else  &lt;br /&gt;
echo 'ES primo..';  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici- Normalizar ===&lt;br /&gt;
&lt;br /&gt;
Tenemos una base de datos que sólo acepta nombres y apellidos SIN acentos, ni dieresis... por tanto, queremos que cuando escriba el usuario un nombre como &amp;quot;jÚlïÒ&amp;quot; lo normalice a &amp;quot;JULIO&amp;quot;. &lt;br /&gt;
  $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
&lt;br /&gt;
  $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
&lt;br /&gt;
Es interesante investigar sobre la función strtr&lt;br /&gt;
&lt;br /&gt;
solución:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UTF-8 es una codificación multibyte que puede representar cualquier carácter Unicode.&lt;br /&gt;
ISO 8859-1 es una codificación de un solo byte que puede representar los primeros 256 caracteres Unicode.&lt;br /&gt;
Ambos codifican ASCII exactamente de la misma manera.&lt;br /&gt;
&lt;br /&gt;
utf8_decode -&amp;gt;  Convierte una cadena con los caracteres codificados ISO-8859-1 con UTF-8 &lt;br /&gt;
&lt;br /&gt;
   //función que quita los acentos, dieresis, Ñ....&lt;br /&gt;
    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
    $cadena = utf8_decode($cadena);&lt;br /&gt;
    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);&lt;br /&gt;
    $cadena = strtoupper($cadena);&lt;br /&gt;
    return utf8_encode($cadena);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 //$cadena = strtr(utf8_decode($cadena), utf8_decode($originales), $modificadas);   //Altra solució&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipus de Dades en PHP ==&lt;br /&gt;
&lt;br /&gt;
*'''Boolean'''&lt;br /&gt;
És un tipus de dades molt simple que pot representar un valor cert (TRUE) o fals (FALSE). Aquest tipus de dades s’utilitza molt en estructures de control. Si feu conversió de dades és molt important que tingueu en&lt;br /&gt;
compte que es considerarà fals el nombre enter, la cadena 0 o una cadena buida, una matriu buida, un objecte sense variables, el tipus NULL i els objectes SimpleXML que s’hagin creat d’etiquetes buides.&lt;br /&gt;
&lt;br /&gt;
*'''Integer'''&lt;br /&gt;
Aquest tipus representa nombres no fraccionables per sota de la unitat. Poden ser positius i negatius. Aquests nombres enters els podeu representar en notació decimal, hexadecimal o octal. La plataforma sobre la&lt;br /&gt;
qual treballeu determinarà la mida de les variables enteres. El PHP forçarà un canvi de tipus a flotant si es produeix un desbordament, tant si és positiu com negatiu. A continuació, es mostren dos exemples de variables enteres.&lt;br /&gt;
&lt;br /&gt;
*'''float'''&lt;br /&gt;
Aquest tipus fa referència als nombres de coma flotant, i normalment treballa amb una precisió aproximada de catorze dígits decimals. A continuació, es mostra un exemple d’una variable amb coma flotant.&lt;br /&gt;
&lt;br /&gt;
*'''String'''&lt;br /&gt;
Es tracta d’una cadena de caràcters. El llenguatge del PHP no imposa un límit a la mida d’aquestes cadenes; ara bé, no oblideu que el límit el marcarà la memòria del maquinari en què estigui funcionant el PHP. Aquí&lt;br /&gt;
teniu diversos exemples de cadenes.&lt;br /&gt;
&lt;br /&gt;
*'''array'''&lt;br /&gt;
un array és una matriu, d’una dimensió o més, que conté dades que s’associen segons unes claus. És un tipus molt útil, i comprovareu que el seu ús té una gran potència. Per crear una matriu podeu utilitzar la paraula&lt;br /&gt;
reservada ''array()'' o bé acompanyar el nom de la variable amb ''[ ]''.&lt;br /&gt;
&lt;br /&gt;
*'''object'''&lt;br /&gt;
aquest tipus d’objecte està previst en el llenguatge PHP perquè suporta el llenguatge orientat a objectes. Un objecte és un ítem amb unes característiques i funcionalitats marcades per la classe a la qual pertany. Per crear un objecte cal utilitzar la partícula ''new''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//tipus boolean:&lt;br /&gt;
$sortir=FALSE;&lt;br /&gt;
$entrar=TRUE;&lt;br /&gt;
&lt;br /&gt;
//tipus integer:&lt;br /&gt;
$positiu=3451;&lt;br /&gt;
$negatiu= − 4345&lt;br /&gt;
&lt;br /&gt;
//tipus float:&lt;br /&gt;
$amb_coma=34.5;&lt;br /&gt;
&lt;br /&gt;
//tipus string:&lt;br /&gt;
$nom=’Wayan’;&lt;br /&gt;
$salutacio=&amp;quot;Hola $nom!&amp;quot;;&lt;br /&gt;
echo $salutacio.&amp;quot; Benvingut&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus array:&lt;br /&gt;
$grau_cicles=array(&amp;quot;superior&amp;quot;,&amp;quot;mitja&amp;quot;);&lt;br /&gt;
$families[]=&amp;quot;Informàtica&amp;quot;;&lt;br /&gt;
$families[]=&amp;quot;Electrònica&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus objecte:&lt;br /&gt;
class Alumne {&lt;br /&gt;
public function matricular($nom)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Ja estàs matriculat $nom&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$alumne1=new Alumne();&lt;br /&gt;
$alumne1−&amp;gt;matricular(’Made’);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Creació Classes/ OBJECTES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Coche&lt;br /&gt;
{&lt;br /&gt;
	static $numruedas = 4;&lt;br /&gt;
	var $color;&lt;br /&gt;
	var $posx;&lt;br /&gt;
	var $posy;&lt;br /&gt;
	var $velocidad;&lt;br /&gt;
	function __construct($color, $posx, $posy)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;color = $color;&lt;br /&gt;
		$this-&amp;gt;posx = $posx;&lt;br /&gt;
		$this-&amp;gt;posy = $posy;&lt;br /&gt;
		$this-&amp;gt;velocidad = 0;&lt;br /&gt;
	}&lt;br /&gt;
	function mover($x, $y)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;posx = $x;&lt;br /&gt;
		$this-&amp;gt;posy = $y;&lt;br /&gt;
	}&lt;br /&gt;
	function acelerar()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;velocidad = $this-&amp;gt;velocidad + 10;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
	function frenar()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;velocidad &amp;gt; 10)&lt;br /&gt;
			$this-&amp;gt;velocidad = $this-&amp;gt;velocidad - 10;&lt;br /&gt;
		else&lt;br /&gt;
			$this-&amp;gt;velocidad = 0;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$car = new Coche(&amp;quot;verde&amp;quot;,10,10);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les dades especials ===&lt;br /&gt;
*'''resource'''&lt;br /&gt;
La variable que pertany a aquest tipus farà referència a un recurs extern. Determinades funcions faran ús d’aquest recurs. Per exemple, la funció mysql_db_query, que té la funció d’enviar una petició mySQL, retorna un tipus resource. En l’exemple següent la variable $resultat és de tipus resource:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query=&amp;quot;SELECT * FROM alumnes&amp;quot;;&lt;br /&gt;
$resultat=mysql_query($query);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''NULL'''&lt;br /&gt;
Quan necessiteu una variable que no tingui cap valor haureu d’utilitzar aquest tipus.&lt;br /&gt;
&lt;br /&gt;
===Els pseudotipus===&lt;br /&gt;
* '''mixed''': aquest pseudotipus indica que la variable en questió pot emmagatzemar múltiples tipus.&lt;br /&gt;
* '''number''': indica que la variable pot contenir un valor enter o de coma flotant.&lt;br /&gt;
* '''callback''': utilitzareu aquest pseudotipus per emmagatzemar crides de retorn generades per funcions de l’usuari.&lt;br /&gt;
&lt;br /&gt;
=== Conversions de tipus ===&lt;br /&gt;
&lt;br /&gt;
Per forçar un canvi de tipus haureu d’especificar entre parèntesis el tipus al qual voleu fer la conversió i col·locar-lo davant la variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Senténcia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Modelat a &lt;br /&gt;
|-&lt;br /&gt;
| (integer), (int) ||integer.&lt;br /&gt;
|-&lt;br /&gt;
| (boolean)||boolean&lt;br /&gt;
|-&lt;br /&gt;
| (float), (double), (real) ||float&lt;br /&gt;
|-&lt;br /&gt;
| (string) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (binary) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (array)||array&lt;br /&gt;
|-&lt;br /&gt;
| (object)|| object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Sense modelar 27/5: &amp;quot;.(27/5).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;I ara ja modelat: &amp;quot;.(integer)(27/5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants===&lt;br /&gt;
Una constant és un identificador (nom) per expressar un valor simple. Com el nom suggereix, aquest valor no pot variar durant l'execució del script. (A excepció de les [[http://php.net/manual/es/language.constants.predefined.php constants màgiques]], que en realitat no són constants). Una constant és sensible a majúscules per defecte. Per convenció, els identificadors de constants sempre solen declarar-se en majúscules.&lt;br /&gt;
&lt;br /&gt;
El nom d'una constant segueix les mateixes regles que qualsevol altra etiqueta de PHP. Un nom de constant vàlid comença per una lletra o subguió, seguit per qualsevol nombre o lletres, nombres o subguions. Usant una expressió regular, es representaria de la següent manera: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('MIN_VALUE', '0.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
define('MAX_VALUE', '1.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
echo MIN_VALUE;&lt;br /&gt;
//const MIN_VALUE = 0.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
//const MAX_VALUE = 1.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
class Exemple1&lt;br /&gt;
{&lt;br /&gt;
  //define('MIN_VALUE', '0.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
  //define('MAX_VALUE', '1.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  const MIN_VALUE = 0.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
  const MAX_VALUE = 1.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  public static function getMinValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MIN_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static function getMaxValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MAX_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo Exemple1::getMinValue();   //invocamos clase &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Cuál es la diferencia entre $this y self:: ?'''&lt;br /&gt;
&lt;br /&gt;
Uno usa $this para referenciar al objeto actual, y se utiliza self:: para referenciar la clase actual. Se utiliza $this-&amp;gt;nombre para nombres no estáticos y se utiliza self::nombres para nombres estáticos.&lt;br /&gt;
&lt;br /&gt;
=== Variables predefinides ===&lt;br /&gt;
&lt;br /&gt;
En PHP hi ha una sèrie de variables predefinides que resulten de gran ajuda per al programador. Dins d’aquestes variables predefinides cal destacar un gran grup, el grup de les anomenades superglobals.&lt;br /&gt;
&lt;br /&gt;
Les variables '''superglobals''' són variables que sempre estan disponibles en tots els àmbits.&lt;br /&gt;
&lt;br /&gt;
*'''$GLOBALS''':fa referència a totes les variables disponibles en l’àmbit global. Es tracta d’una variable de tipus matriu associativa.&lt;br /&gt;
En l’exemple següent es recorre la variable superglobal $GLOBALS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$una_variable=&amp;quot;Hola&amp;quot;;&lt;br /&gt;
$una_altra_variable=&amp;quot;Com va?&amp;quot;;&lt;br /&gt;
foreach ($GLOBALS as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;GLOBALS[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_SERVER''':ofereix informació molt últil sobre el servidor i l’entorn d’execució. Els valors que emmagatzema són generats pel navegador web.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*Executeu-lo i veureu un seguit de dades&lt;br /&gt;
referents a la màquina que fa de servidor del PHP. Entre altres coses, identificareu&lt;br /&gt;
el nom de la màquina, la versió del navegador, la versió del servidor web, la&lt;br /&gt;
ubicació de fitxers importants i un llarg etcètera.*/&lt;br /&gt;
&lt;br /&gt;
foreach ($_SERVER as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;SERVER[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_GET''': correspon a la variable GET del protocol HTTP. Emmagatzema els valors de les variables que es trasmeten per mitjà del protocol HTTP mitjançant el mètode GET. El seu ús és molt normal en formularis.&lt;br /&gt;
&lt;br /&gt;
*'''$_POST''': correspon a la variable POST del protocol HTTP. Emmagatzema els valors de les variables que es transmeten per mitjà del protocol HTTP mitjançant el mètode POST. El seu ús és, generalment, més adequat que el mètode GET per a temes de seguretat.&lt;br /&gt;
&lt;br /&gt;
*'''$_COOKIE''': és una variable de tipus matriu associativa que emmagatzemarà les variables passades a l’script per mitjà de les galetes de l’HTML.&lt;br /&gt;
&lt;br /&gt;
*'''$_REQUEST''': és una matriu associativa que conté les dades de $_GET ,$_POST i $_COOKIE.&lt;br /&gt;
&lt;br /&gt;
*'''$_FILES''': aquesta variable s’utilitza en la càrrega de fitxers per mitjà del protocol HTTP. El mètode utilitzat és el POST.&lt;br /&gt;
&lt;br /&gt;
*'''$_SESSION''': conté les variables de sessió disponibles en l’script actual.&lt;br /&gt;
&lt;br /&gt;
*'''$_ENV''': conté les variables d’entorn.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Detecció del Navegador ===&lt;br /&gt;
Escriu un script en PHP que detecti el navegador que està utilitzant el client que ha demanat la pàgina.&lt;br /&gt;
&lt;br /&gt;
[[:solució_detecció_navegador_php]]&lt;br /&gt;
&lt;br /&gt;
=== Variables estàtiques ===&lt;br /&gt;
Les variables estàtiques sempre mantenen el valor encara que el programa abandoni l’àmbit de la variable, i existeixen només en l’àmbit local de les funcions. No s’hi pot accedir fora d’aquest àmbit.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function comptador()&lt;br /&gt;
{&lt;br /&gt;
   $a = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador: &amp;quot;.$a.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $a++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function comptadorEstatic()&lt;br /&gt;
{&lt;br /&gt;
   static $b = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador estàtic: &amp;quot;.$b.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $b++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for($i=0;$i&amp;lt;3;$i++)&lt;br /&gt;
{&lt;br /&gt;
   comptador();&lt;br /&gt;
   comptadorEstatic();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integració PHP ==&lt;br /&gt;
&lt;br /&gt;
Normalment trobareu el llenguatge de programació PHP dins d’altres llenguatges.&lt;br /&gt;
El més usual és escriure codi en PHP dins de codi HTML.&lt;br /&gt;
&lt;br /&gt;
Heu de recordar que el codi PHP és interpretat pel servidor, i els resultats es mostren en el navegador que utilitzeu. La simbiosi que es crea entre el PHP i l’HTML permet al PHP generar HTML i a l’HTML passar dades al PHP.&lt;br /&gt;
&lt;br /&gt;
=== PHP dintre de PHP ===&lt;br /&gt;
&lt;br /&gt;
==== Include vs Require ====&lt;br /&gt;
És possible inserir el contingut d'un fitxer PHP en un altre arxiu PHP (abans que el servidor l'executi), amb la declaració d'incloure o requerir. Les sentències d'inclusió i requereixen són idèntics , excepte en cas de fallada :&lt;br /&gt;
&lt;br /&gt;
*'''requerir''' (require) produirà un error fatal ( E_COMPILE_ERROR ) i aturar la seqüència de comandaments&lt;br /&gt;
*'''inclou''' (include) només produirà una advertència ( E_WARNING ) i el guió seguirà&lt;br /&gt;
&lt;br /&gt;
Per tant, si voleu que l'execució continuï mostrant als usuaris la sortida, fins i tot si el fitxer d'inclusió falta, utilitzeu la instrucció d'inclusió. Altrament, en cas de FrameWork, CMS, o amb aplicacions PHP complexes, sempre utilitzeu la instrucció que requereix el fitxer per a poder continuar l'execució. Això ajudarà a evitar posar en perill la seguretat i la integritat de l'aplicació, per si de cas un arxiu clau falta accidentalment.&lt;br /&gt;
&lt;br /&gt;
Inclusió d'arxius estalvia molta feina. Això significa que pots crear una capçalera, peu de pàgina o arxiu de menú estàndard per a totes les pàgines web. Llavors, quan la capçalera ha de ser actualitzada, només s'ha d'actualitzar la capçalera inclouen l'arxiu.&lt;br /&gt;
&lt;br /&gt;
'''Sintaxi'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include 'filename.php';&lt;br /&gt;
&lt;br /&gt;
//or&lt;br /&gt;
&lt;br /&gt;
require 'Otherfilename.php';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Include_once vs Require_once ====&lt;br /&gt;
Require_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a require.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Include_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a include.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redireccions ====&lt;br /&gt;
* Son sentencies on s'envia al navegador una nova pàgina. La pàgina que tenia el navegador desapareix i apareix una nova pàgina, la que està definida al location: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
header(&amp;quot;location: novapàgina.php&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici PHP amb cap i peus ===&lt;br /&gt;
&lt;br /&gt;
L’objectiu d’aquesta activitat és mostrar el funcionament de la inclusió d’arxius a PHP. Fer servir includes us permet simplificar el codi de les pàgines. Per exemple, podeu afegir un fitxer de capçalera (cap.php) i un de peu (peu.php) amb els continguts comuns de totes les pàgines del vostre lloc (el bàner, el menú, la informació general). Senzillament incloent aquests fitxers a totes les pàgines, podeu aconseguir una estètica comú. Si heu de canviar en algun moment la capçalera, modificant l’arxiu cap.php ho tindreu modificat a totes les pàgines del web.&lt;br /&gt;
Feu una pàgina web amb continguts estructurats amb dos fitxers: cap.php i peu.php&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
[[:solucio_cap_peus_php]]&lt;br /&gt;
&lt;br /&gt;
[[:solucio_cap_peus_php2]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP i Formularis HTML ===&lt;br /&gt;
El formulari electrònic és una eina molt potent fortament establida a Internet. Permet l’intercanvi o la introducció de dades entre usuaris d’una manera ràpida i senzilla. Un formulari permet la interactivitat i és el detonant que converteix Internet en l’eina més poderosa per enviar informació a un destinatari.&lt;br /&gt;
&lt;br /&gt;
El llenguatge PHP representa un salt qualitatiu enorme en l’ús de formularis. L’HTML no és un llenguatge creat pensant a utilitzar formularis, sinó que es va crear amb altres objectius. El llenguatge PHP té un gran potencial en la gestió de dades; per tant, quan HTML i PHP treballen juntament amb formularis ens trobem amb un binomi ideal.&lt;br /&gt;
&lt;br /&gt;
====Preparació de l’HTML====&lt;br /&gt;
El llenguatge HTML mostrarà la façana que l’usuari veurà a la pantalla del navegador. El PHP serà darrere d’aquesta primera pantalla i treballarà amb les dades.&lt;br /&gt;
El primer que cal programar per fer servir un formulari dissenyat en PHP és crear&lt;br /&gt;
el codi HTML. Un formulari en HTML s’emmarca entre les etiquetes &amp;lt;FORM&amp;gt; i &amp;lt;/FORM&amp;gt;. Per manipular aquest formulari s’utilitza l’atribut ''ACTION''.&lt;br /&gt;
L’atribut ''ACTION'' indica el programa que s’encarrega de manipular les dades, tasca que encomanareu a un codi dissenyat en llenguatge PHP.&lt;br /&gt;
L’etiqueta &amp;lt;form&amp;gt; us permet fer servir dos mètodes per enviar informació: '''GET''' i '''POST'''.&lt;br /&gt;
El mètode '''GET''' és molt útil en motors de cerca, però no ofereix gaire seguretat, ja que les dades que envia es poden veure en l’URL del navegador.&lt;br /&gt;
El mètode '''POST''' és molt més segur, ja que quan el servidor detecta que el mètode de transacció d’informació és '''POST''' espera rebre dades immediatament sense fer servir l’URL, la qual cosa implica que aquestes dades no seran visibles en l’URL.&lt;br /&gt;
Exemple de Formulari:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;El nostre primer exemple amb formularis&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Introdueix el teu nom i prem el botó!&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;FORM ACTION=&amp;quot;contesta.php&amp;quot; METHOD=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Si us plau, escriu el teu nom:&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;INPUT TYPE=&amp;quot;submit&amp;quot; VALUE=&amp;quot;Enviar&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/FORM&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Com valora el PHP un formulari ====&lt;br /&gt;
En el moment d’enviar les dades des del formulari d’una pàgina HTML a un fitxer escrit en PHP s’ha de tenir en compte que l’atribut ''NAME'' emmagatzema el valor.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Resposta a la petició de dades&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;...Continuem amb l’exemple!&amp;lt;/H1&amp;gt;&lt;br /&gt;
El teu nom és:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_POST['nom'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En el moment en què s’envien dades del formulari HTML cap a un fitxer PHP, aquestes dades apareixeran dins d’un array superglobal amb tots els seus valors.&lt;br /&gt;
&lt;br /&gt;
=== Exercici Mini Calculadora ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar una calculadora de sólo SUMA, para ello tendremos dos inputs y un botón, cuando se aprete el botón deberá enviar enviar el formulario al server haciendo la operación y mostrándola.&lt;br /&gt;
 &lt;br /&gt;
=== Exercici Formulari amb Vectors ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar un formulario en el servidor que genere 10 inputs y un botón, a continuación el servidor recogerá todos los datos los mostrará y calculará la suma total. &lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
:[[solu_vector_input]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Les matrius associatives i els formularis====&lt;br /&gt;
Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu ús, però, serà condicionat pel mètode utilitzat en el pas de dades en el codi HTML. Així, si en el codi HTMLel mètode és '''POST''' haureu de fer servir la matriu associativa '''$_POST'''; en canvi, si heu fet servir el mètode '''GET''' en el codi HTML, haureu de fer servir la matriu associativa '''$_GET'''.&lt;br /&gt;
&lt;br /&gt;
Per accedir als valors emmagatzemats en les matrius associatives fareu servir l’atribut corresponent '''NAME''' de l’HTML com a índex de la matriu associativa. &lt;br /&gt;
&lt;br /&gt;
No heu d’oblidar que el PHP és un llenguatge de programació que, entre altres coses, us permet utilitzar bucles. En el formulari següent es defineix una selecció múltiple, en què podreu marcar els navegadors que coneixeu.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Un exemple amb un formulari&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;seleccioMultiple.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Nom: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Correu electrònic: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Navegadors que coneixes: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;select name=&amp;quot;navegadors[]&amp;quot; multiple&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Chrome&amp;quot;&amp;gt;Chrome&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;MozillaFirefox&amp;quot;&amp;gt;Mozilla Firefox&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Safari&amp;quot;&amp;gt;Safari&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Opera&amp;quot;&amp;gt;Opera&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Lynx&amp;quot;&amp;gt;Lynx&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquí us trobareu amb un petit problema. Per recuperar els valors introduïts com a nom i correu electrònic no hi ha cap problema, la matriu $_POST us permetrà un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecció múltiple, però, sorgeix un petit problema. A diferència dels casos anteriors, ara navegadors pot contenir més d’un valor, com ho fareu per mostrar tots els valors per pantalla? La solució és utilitzar un bucle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach ($_POST['navegadors'] as $opcio)&lt;br /&gt;
echo $opcio.&amp;quot;\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un altre exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ($_POST) {&lt;br /&gt;
    echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
    //echo htmlspecialchars(print_r($_POST, true));&lt;br /&gt;
    print_r($_POST);&lt;br /&gt;
    print_r($_POST['personal']);&lt;br /&gt;
    print_r($_POST['personal']['nombre']);&lt;br /&gt;
    echo '&amp;lt;/pre&amp;gt;';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
    Nombre:  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[nombre]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Email:   &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[email]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Cerveza: &amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;select multiple name=&amp;quot;cerveza[]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;warthog&amp;quot;&amp;gt;Warthog&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;guinness&amp;quot;&amp;gt;Guinness&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;stuttgarter&amp;quot;&amp;gt;Stuttgarter Schwabenbräu&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;¡enviarme!&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode GET ===&lt;br /&gt;
*El mètode GET produeix una cadena llarga que apareix en els logs del servidor i a la URL del navegador.&lt;br /&gt;
&lt;br /&gt;
*GET envia les dades usant la URL&lt;br /&gt;
&lt;br /&gt;
*El mètode GET es limita a enviar fins a només 1.024 caràcters .&lt;br /&gt;
&lt;br /&gt;
*Mai utilitzeu el mètode GET, si voleu enviar la contrasenya o una altra informació confidencial al servidor .&lt;br /&gt;
&lt;br /&gt;
*GET no pot ser utilitzat per enviar dades binàries, com imatges o documents de text, al servidor .&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode GET es pot accedir mitjançant la variable d'entorn QUERY_STRING.&lt;br /&gt;
&lt;br /&gt;
*PHP proveeix la matriu associativa $_GET per accedeix a tota la informació que s'enviï mitjançant el mètode GET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$PHP_SELF = $_SERVER['PHP_SELF'];&lt;br /&gt;
echo $PHP_SELF ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if( isset($_GET[&amp;quot;name&amp;quot;])||  isset($_GET[&amp;quot;age&amp;quot;]) )&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_GET['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_GET['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt; method=&amp;quot;GET&amp;quot;&amp;gt;&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode POST ===&lt;br /&gt;
&lt;br /&gt;
*POST envía los datos de forma que no podemos verlos (en un segundo plano u &amp;quot;ocultos&amp;quot; al usuario).&lt;br /&gt;
&lt;br /&gt;
*El mètode POST no té cap restricció en la mida de les dades a enviar.&lt;br /&gt;
&lt;br /&gt;
*El mètode POST es pot utilitzar per enviar ASCII, així com dades binàries.&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode POST passa per la capçalera HTTP. La seguretat depèn de protocol HTTP. Mitjançant l'ús d'HTTP segur pots assegurar-te que la seva informació està segura .&lt;br /&gt;
&lt;br /&gt;
*El PHP proveeix de la matriu associativa $ _POST per accedeix a tota la informació enviada pel mètode POST.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(isset($_POST[&amp;quot;name&amp;quot;]) ||  isset($_POST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_POST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_POST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;   &amp;lt;!--&amp;lt;?php $_PHP_SELF ?&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== $_PHP_SELF ===&lt;br /&gt;
La variable $_PHP_SELF conté el nom del script PHP (pàgina php) el qual està executant.  ESTÁ DESFASADO USAR $_SERVER['PHP_SELF']&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(  isset($_REQUEST[&amp;quot;name&amp;quot;]) ||  isset($_REQUEST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_REQUEST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_REQUEST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo formulario POST ===&lt;br /&gt;
&lt;br /&gt;
Dissenyar una pàgina web simple amb php que demani a lusuari el preu de tres productes diferents en tres&lt;br /&gt;
establiments diferents. Exemple:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Form1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Un cop s'introdueixi aquesta&lt;br /&gt;
informació al formulari, s'ha de mostrar el resultat, dels tres preus introduïts i el preu mitjà del producte.&lt;br /&gt;
&lt;br /&gt;
  DATOS RECIBIDOS&lt;br /&gt;
  Precio Guitarra Martin D18 en Ubisa: 4.200 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Thomann 3.800 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Alfasonic 4.100 euros&lt;br /&gt;
&lt;br /&gt;
  El precio medio del producto es de 4.0333333333333 euros&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;PHP Calcula precios&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;form name=&amp;quot;formularioDatos&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;01-Formulari.php&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt; CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Ubisa, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Thomann, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio2&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Alfasoni, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio3&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;input value=&amp;quot;Calcular&amp;quot; type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
01-Formulari.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php //Ejemplo aprenderaprogramar.com&lt;br /&gt;
$precio1 = $_POST['precio1'];&lt;br /&gt;
$precio2 = $_POST['precio2'];&lt;br /&gt;
$precio3 = $_POST['precio3'];&lt;br /&gt;
$media = ($precio1+$precio2+$precio3)/3;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; DATOS RECIBIDOS&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Ubisa: &amp;quot;. $precio1. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Thomann &amp;quot;. $precio2. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Alfasonic &amp;quot;. $precio3. &amp;quot; euros &amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; El precio medio del producto es de &amp;quot;. $media. &amp;quot; euros&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Acceso a Ficheros ===&lt;br /&gt;
&lt;br /&gt;
'''Abrir y cerrar el descriptor de ficheros'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $fitxer = fopen(&amp;quot;datos.txt&amp;quot;,&amp;quot;a&amp;quot;);&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'r' 	Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero. &lt;br /&gt;
'w+' 	Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear. &lt;br /&gt;
'a+' 	Apertura para lectura y escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() no tiene efecto, las escrituras siempre son pospuestas. &lt;br /&gt;
&lt;br /&gt;
'''Escribir datos en un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  $fp = fopen('datos.txt', 'a');&lt;br /&gt;
    fwrite($fp, 'Julio');&lt;br /&gt;
    fwrite($fp, 'Noguera');&lt;br /&gt;
    fclose($fp);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Leer datos de un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 $fitxer=fopen(&amp;quot;datos.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while(!feof($fitxer)){&lt;br /&gt;
       $line = fgets($fitxer);&lt;br /&gt;
       echo $line;&lt;br /&gt;
    }&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más info&lt;br /&gt;
http://www.php.net/manual/es/function.fopen.php&lt;br /&gt;
http://www.php.net/manual/es/function.fgets.php&lt;br /&gt;
http://www.php.net/manual/es/function.fwrite.php&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Formulari Insti // Acceso a ficheros ===&lt;br /&gt;
&lt;br /&gt;
Se desea crear un formulario donde se introduzcan los campos de nombre, apellidos, dni, contraseña, cuando se clique el botón de enviar, el servidor debe recibir todos los parámetros de ese usuario y escribirlos en un fichero de texto (fopen/fwrite), el siguiente usuario que rellene el formulario escribirá a continuación, después debe listar todos los ficheros que tiene el servidor (system()/shell_exec).&lt;br /&gt;
&lt;br /&gt;
solució: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
if ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;) { &lt;br /&gt;
&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    $nombre = $_POST['nombre'];  //recibe los parámetros del formulario&lt;br /&gt;
    $apellido = $_POST['apellido'];&lt;br /&gt;
    $dni = $_POST['dni'];&lt;br /&gt;
    $pass = $_POST['pass'];&lt;br /&gt;
&lt;br /&gt;
    $file = fopen(&amp;quot;clase.txt&amp;quot;, &amp;quot;a&amp;quot;);    //crea un descriptor de fichero&lt;br /&gt;
    fwrite($file, ($nombre) . &amp;quot;,&amp;quot; . ($apellido) . &amp;quot;,&amp;quot; . ($dni) . &amp;quot;,&amp;quot; . ($pass) . &amp;quot;\n&amp;quot;);  //introduce datos dentro del fichero&lt;br /&gt;
    fclose($file);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    $usuarioEnSistema = system('cat clase.txt');     //ejecuta terminal linux&lt;br /&gt;
   //$usuario = shell_exec('cat clase.txt'');   // comando más antiguo&lt;br /&gt;
&lt;br /&gt;
    echo $usuarioEnSistema;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nombre&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;apellido&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dni&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;pass&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Exercici: Calculadora PHP ===&lt;br /&gt;
Crea un formulari amb un únic TextBox on s'indiqui les operacions matemàtiques a realitzar. Envia el contingut del TextBox amb el mètode POST i realitza les operacions. Imprimeix per pantalla el resultat.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Solucio_calculadora_m6]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ISSET ===&lt;br /&gt;
&lt;br /&gt;
isset -&amp;gt; Devuelve '''true''' si la variable existe y tiene un valor distinto de null, false de lo contrario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var_dump( isset($var) );   //isset() devuelve '''false''' por que $var no ha sido definida&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''false''' aunque la variable haya sido declarada pues su valor es NULL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var = &amp;quot;&amp;quot;;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''true'''. El valor ya no es nulo aunque esté vacío&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Y cuando deberías usar isset()?'''&lt;br /&gt;
&lt;br /&gt;
Siempre y cuando que quieras comprobar que la variable existe (variable inicializada), un ejemplo bueno sería si quieres saber si se ha mandado un formulario:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;campo1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if (isset($_POST['submit']) {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''isset(), is_null() y empty(): Diferencias y ejemplos de uso'''&lt;br /&gt;
&lt;br /&gt;
https://cybmeta.com/isset-is_null-y-empty-diferencias-y-ejemplos-de-uso&lt;br /&gt;
&lt;br /&gt;
https://es.stackoverflow.com/questions/32133/como-y-cuando-se-usan-isset-y-empty-correctamente&lt;br /&gt;
&lt;br /&gt;
=== Exercici enviament de dades ===&lt;br /&gt;
És popular el disseny d’un document web, en què el mateix document conté la part del formulari HTML i el codi PHP que agafa les dades i les processa. Aquest procediment pot resultar estrany en principi, ja que esteu esperant dos documents ben diferenciats. Així i tot val la pena que veieu aquesta forma de treballar i decidiu si us resulta útil o no. Per fer-ho, simplement heu de fusionar els dos documents (el que envia les dades i el que les rep) en un document únic HTML+PHP de dues parts amb la següent estructura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(primera vegada que s'entra al document)&lt;br /&gt;
{&lt;br /&gt;
crear formulari HTML i enviar-ho al propi document&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
rebre les dades a través de POST o GET&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Feu un document amb aquestes característiques que enviï les següents dades:&lt;br /&gt;
*nom&lt;br /&gt;
*cognom&lt;br /&gt;
*contrasenya&lt;br /&gt;
*si l’usuari és alumne o professor&lt;br /&gt;
*si l’usuari és actiu o no&lt;br /&gt;
*foto (únicament el nom del fitxer)&lt;br /&gt;
*edat (entre 18 i 99)&lt;br /&gt;
*comentaris&lt;br /&gt;
*un camp ocult amb el nom ocult i valor prova&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[:solucio_enviament_dades_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Galetes ===&lt;br /&gt;
Les galetes són uns fitxers de text que emmagatzemen informació a l’ordinador client referent a la visita d’un usuari a una pàgina web.&lt;br /&gt;
Les galetes no són un acte d’intromissió per part de la pàgina web visitada; simplement, són una font d’informació molt útil per augmentar l’eficiència en l’accés.&lt;br /&gt;
Les galetes tenen una mida màxima d’1K i caduquen, la qual cosa fa molt difícil que s’utilitzin amb fins malintencionats. A més, únicament pot consultar la galeta el web que l’ha dipositada, la informació que conté no és visible per a la resta de pàgines web.&lt;br /&gt;
&lt;br /&gt;
Un ús molt freqüent de les galetes és emmagatzemar un perfil d’usuari. Així s’aconsegueix que cada vegada que el mateix usuari accedeix a un web, aquest en conegui les preferències i li mostri directament els continguts més adequats.&lt;br /&gt;
&lt;br /&gt;
Les galetes ajuden els programadors a crear un entorn més adequat per a l’usuari visitant. Moltes pàgines web permeten canviar la mida del text, els colors de la pàgina, la disposició d’alguns continguts, etc. Una vegada l’usuari ha modificat al seu gust l’aspecte de la pàgina web, aquestes dades s’emmagatzemen per a la propera visita.&lt;br /&gt;
&lt;br /&gt;
Importante: las cookies se envían al cliente mediante encabezados HTTP. Como cualquier otro encabezado, las cookies se deben enviar antes que cualquier salida que genere la página (antes que &amp;lt;html&amp;gt;, &amp;lt;head&amp;gt; o un simple espacio en blanco). &lt;br /&gt;
&lt;br /&gt;
'''Funcions del PHP per treballar amb galetes'''&lt;br /&gt;
&lt;br /&gt;
La funció que s’utilitza en PHP per crear galetes és setcookie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
bool setcookie(string $nom [, string $valor [, int $caduca= 0[, string $ruta [, string $domini [, bool $seguretat= false [, bool $nomeshttp=false]]]]]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* $nom: és obligatori i indica el nom que donareu a la galeta, la resta de paràmetres són opcionals.&lt;br /&gt;
* $valor: és el valor que tindrà la galeta.&lt;br /&gt;
* $caduca: indica els segons que té de vida la galeta; si no s’indica res la galeta deixarà d’existir quan finalitzi la sessió de l’usuari.&lt;br /&gt;
* $ruta: indica on podeu trobar la galeta dins el servidor.&lt;br /&gt;
Si no ponemos la ruta (Path), la cookie sólo se puede usar en páginas que se encuentren en el mismo directorio que la página que la creó. Si queremos que se utilice en un directorio en concreto debemos añadir la ruta.&lt;br /&gt;
&lt;br /&gt;
//Cookie creada en el directorio /registro/login&lt;br /&gt;
&lt;br /&gt;
//Si queremos que las páginas del directorio raíz / puedan acceder a la cookie&lt;br /&gt;
&lt;br /&gt;
* $domini: marca el domini en què la galeta està disponible.&lt;br /&gt;
* $seguretat: tindrà el valor TRUE si voleu que la galeta només s’utilitzi en una connexió segura (conexió HTTPs), i FALSE (que és el valor per defecte), si no és necessari un cert grau de seguretat.&lt;br /&gt;
* $nomeshttp: si té per valor TRUE marcarà que la galeta solament és accessible si s’utilitza el protocol HTTP.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
setcookie(&amp;quot;nom&amp;quot;, &amp;quot;Maadiva&amp;quot;, 3600, &amp;quot;/&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El segon fitxer s’encarregarà de consultar a la matriu associativa '''$_COOKIE''' el valor de la galeta indicada, que en aquest cas seria nom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_COOKIE[&amp;quot;nom&amp;quot;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
setcookie(&amp;quot;valor&amp;quot;, 1, time() + 30);    //time() tiempo desde que se originó unix.&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);    //no muestra todas las cookies por temas de seguridad&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unset($_COOKIE[&amp;quot;valor&amp;quot;]);  //otra forma setcookie('valor', 1, expire);  // setcookie(&amp;quot;valor&amp;quot;, 1, time() - 30);&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Se desea que cuente el número de visitas que realiza un usuario al visitar la página; este contador conserva su valor durante un año aún a pesar de que un usuario cierre el navegador y tarde días en volver a visitar la página.&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_contador_galletas]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Les cookies us permeten desar informació al navegador que estarà disponible més endavant pel vostre web. Per exemple, podeu desar la configuració personal de l’usuari o la llengua en què ha escollit visitar el web. La propera vegada que l’usuari visiti el web, el vostre codi PHP podrà obtenir aquesta informació desada i presentar a l’usuari el web amb la seva configuració personal o la llengua escollida. És important destacar que les cookies queden desades al navegador de l’usuari i no al servidor web.&lt;br /&gt;
&lt;br /&gt;
Feu un web amb dos fitxers. El primer, index.php, s’encarregarà d’obtenir el nom de l’usuari i la llengua que vol fer servir per defecte entre una llista desplegable mitjançant un formulari. Enviarà aquestes dades a un altre fitxer, cookie.php, que desarà la informació a les cookies.&lt;br /&gt;
La propera vegada que l’usuari accedeixi a index.php el formulari estarà emplenat amb la informació desada la vegada anterior que va accedir-hi.&lt;br /&gt;
&lt;br /&gt;
sol&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[:solucio_galetes_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sessió ===&lt;br /&gt;
&lt;br /&gt;
Les variables de sessió són variables que estan disponibles en múltiples pàgines sense haver de fer servir pas de paràmetres. Les variables de sessió tenen un temps de vida limitat i s’emmagatzemen en el servidor.&lt;br /&gt;
&lt;br /&gt;
Podeu fer servir les variables de sessió per mantenir informació (l’anomenada informació de sessió) entre diferents pàgines. Per exemple,&lt;br /&gt;
el nom d’usuari o una selecció de productes que ja s’hagi fet.&lt;br /&gt;
&lt;br /&gt;
A continuació, estudiareu un exemple format per tres fitxers. El primer fitxer és un formulari senzill que demana a l’usuari un identificador i una contrasenya. Aquestes dades s’envien a un segon fitxer, anomenat exempleAutenticar.php, que crea les variables de sessió. Finalment, trobareu un tercer fitxer anomenat continuem.php, que recupera la informació emmagatzemada en les variables de sessió.&lt;br /&gt;
&lt;br /&gt;
Just a sota d’aquest text hi ha el fitxer del qual partireu. L’hem anomena exempleSessions.php, però el podeu anomenar d’una altra manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Exemple amb variables de sessió&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
&amp;lt;form action=&amp;quot;exempleAutenticar.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
Escriu el teu nom:&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;usuari&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Escriu la teva contrasenya:&lt;br /&gt;
&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;contrasenya&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia!&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tot seguit apareix el codi del fitxer exempleAutenticar.php. En aquest fitxer creareu i inicialitzareu les dues variables de sessió que utilitzareu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION['id_usuari']=$_REQUEST['usuari'];&lt;br /&gt;
$_SESSION['clau_acces']=$_REQUEST['contrasenya'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...continueu amb l’exemple de variables de sessió...&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
Ja s’han emmagatzemat les variables de sessió.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;continuem.php&amp;quot;&amp;gt;Vinga! Cap al final de l’exemple!&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixeu-vos que el primer que es fa és cridar la funció '''session_start()'''. És obligatori que inicieu la sessió abans de cap etiqueta HTML perquè tot funcioni correctament.&lt;br /&gt;
Amb $_REQUEST es recuperen els dos valors que s’han passat des del fitxer inicial, és a dir, usuari i contrasenya, i els heu d’emmagatzemar en dues variables de sessió creades a $_SESSION, que rebran el nom d’id_usuari i clau_acces.&lt;br /&gt;
$_REQUEST és un array associatiu global que per defecte té els continguts de $_GET, $_POST i $_COOKIE.&lt;br /&gt;
A part de crear les variables de sessió i donar-los valors trobareu un enllaç cap al tercer fitxer.&lt;br /&gt;
El codi del tercer fitxer, continuem.php, el teniu a continuació:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com que esteu treballant amb sessions, el primer que hauríeu de fer és llançar la sessió amb session_start(). A continuació, es recuperen els valors emmagatzemats en les dues variables de sessió.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eliminar sesión&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
unset($_SESSION['id_usuari']); // will delete just the name data&lt;br /&gt;
&lt;br /&gt;
//session_destroy(); // borrará todos los datos asociados a ese usuario. También $_SESSION = array(); &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index3.php&amp;quot;&amp;gt;Destruir Variables de sesion&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les sessions us permeten emmagatzemar dades que podran ser compartides entre les diferents pàgines del web. Aquestes dades, a diferència de les cookies, estan emmagatzemades al servidor i estan disponibles durant tot el temps que l’usuari està interactuant amb la pàgina (temps de sessió).&lt;br /&gt;
Alguns exemples de dades que solen guardar-se a les sessions és si l’usuari ha accedit al web mitjançant els valors usuari/contrasenya, o un carret de la compra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici Sessions ====&lt;br /&gt;
1. Feu una pàgina web que passi entre les seves pàgines el nom de l’usuari i una variable (cost) que s’anirà incrementant en 10 cada vegada que l’usuari passa entre les pàgines (podem pensar que aquesta variable representa el cost de les compres que ha fet fins ara l’usuari al web).&lt;br /&gt;
La sessió es tancarà quan l’usuari torni a la pàgina de login.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://codigosdeprogramacion.com/2016/12/20/sistema-de-usuarios-y-sesiones-en-php-y-mysql-1-login-sesiones-y-logout/&lt;br /&gt;
&lt;br /&gt;
http://velozityweb.com/blog/php/login-de-usuarios-y-creacion-de-sesiones-con-php-y-mysql/#sthash.XbMcrnTA.PSO2jYQ9.dpbs&lt;br /&gt;
&lt;br /&gt;
http://www.formacionwebonline.com/crear-sesiones-php-en-intranet/&lt;br /&gt;
&lt;br /&gt;
=== Exercici Moodle ===&lt;br /&gt;
&lt;br /&gt;
2.Se trata de la hacer un moodle, tenemos un formulario y almacenaremos una base de datos (simulada) en la que guardaremos en un archivo el usuario, contraseña y rol de un profe y un alumno. &lt;br /&gt;
Deberá de comprobar si está registrado, en caso de estarlo se crearán las cookies y variables de sesión(5 minutos para el alumnado y 10 para el profe), en caso de no acceder deberán redireccionarse al login.&lt;br /&gt;
Si se validan correctamente, deberá acceder al menu y mostrar la información si tiene rol de alumno (ROLE_ALUMNO) y otra diferente si es profesor(ROLE_ALUMNO). &lt;br /&gt;
También deberá existir un logout en caso de querer terminar la sesión. &lt;br /&gt;
$_SESSION['caduca']=time()+60; &lt;br /&gt;
&lt;br /&gt;
Solució Exercici Moodle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_moodle]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejercicio Carrito ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--http://evilnapsis.com/2016/10/30/ejemplo-de-carrito-de-compras-sencillo-con-php-y-mysql/--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici Complert ====&lt;br /&gt;
Exercici que engloba Galetes, Idioma, Login, Intranet amb Cap, Peus, Menu i contingut i Sessions.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[http://www.infomerce.es/moodle/mod/resource/view.php?id=11136 Exercici de Classe]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
=== Creació del Arbre XML ===&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xmlDoc = new DOMDocument();&lt;br /&gt;
$xmlDoc-&amp;gt;load(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
=== Obtenir un element del arbre ===&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recòrrer tots els elemens ===&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print $xmlDoc-&amp;gt;saveXML(); //imprimir toda la info&lt;br /&gt;
&lt;br /&gt;
// recorrer las etiquetas y los valores&lt;br /&gt;
$x = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
foreach ($x-&amp;gt;childNodes AS $item) {&lt;br /&gt;
  print $item-&amp;gt;nodeName . &amp;quot; = &amp;quot; . $item-&amp;gt;nodeValue . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//otra manera de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   //selecciona todas las etiquetas aula y muestra el contenido dentro de ellas&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
    echo $aula-&amp;gt;nodeName;&lt;br /&gt;
    echo $aula-&amp;gt;nodeValue, PHP_EOL;&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Otra forma de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   // otra forma de acceder&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
   echo $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)[0]-&amp;gt;nodeValue;   //equivale a -&amp;gt;item(0)&lt;br /&gt;
   echo  $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
   echo $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Afegir un nou element ===&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$auladom = $xmlDoc-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmlDoc-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmlDoc-&amp;gt;createElement(&amp;quot;XARXA_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmlDoc-&amp;gt;createElement(&amp;quot;MASK_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmlDoc-&amp;gt;createElement(&amp;quot;INIT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmlDoc-&amp;gt;createElement(&amp;quot;CURRENT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
&lt;br /&gt;
$root = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
=== Esborrar un element ===&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//borrar nodo&lt;br /&gt;
$xmlDoc = new DOMDocument;&lt;br /&gt;
$xmlDoc-&amp;gt;load('file.xml');   //cargamos fichero&lt;br /&gt;
&lt;br /&gt;
$aula = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
&lt;br /&gt;
// seleccionamos el nodo concreto 0 y lo eleminamos&lt;br /&gt;
$aulaSeleccionada = $aula-&amp;gt;getElementsByTagName('aula')-&amp;gt;item(0);&lt;br /&gt;
$aulaborrada = $aula-&amp;gt;removeChild($aulaSeleccionada);&lt;br /&gt;
&lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;); //guardamos cambios&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici crear XML'''&lt;br /&gt;
&lt;br /&gt;
Tenim un formulari i volem ficar dins del nostre xml noves dades, per tant, haurem de crear un formulari on introduirem les dades.&lt;br /&gt;
&lt;br /&gt;
= Bibliografia / Webgrafia =&lt;br /&gt;
*[http://php.net/manual/es/ Manual oficial de PHP]&lt;br /&gt;
*[http://www.codeacademy.com Introducció a PHP]&lt;br /&gt;
*David Sklar, Adam Trachtenberg, &amp;quot;PHP Cookbook, Third Edition&amp;quot;, O’Reilly Media Inc., 2014. ISBN 978-1-449-36375-8&lt;br /&gt;
*Eduard García Sacristán, Eduard Latorre Jarque, Montserrat Madridejos Mora, Raúl Velaz Mayo, &amp;quot;Llenguatges de guions de servidor&amp;quot;, IOC, 2014 &lt;br /&gt;
*[https://docs.google.com/presentation/d/1ZQgIsW4KCyIfH8NyiqH9ueanM83Ym7bjitaxyQKS0hs/edit#slide=id.i14 Llenguatges de programació del costat del servidor]&lt;br /&gt;
*[http://www.adelat.org/media/docum/nuke_publico/lenguajes_del_lado_servidor_o_cliente.html www.Adelat.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EMMAGATZEMAR I LLEGIR FITXERS ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = '{&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}'&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SERIALIZACIÓN ==&lt;br /&gt;
&lt;br /&gt;
En PHP existe una forma muy sencilla de almacenar o transmitir cualquier tipo de valor (excepto el tipo resource) en forma de una cadena seriada: la serialización.&lt;br /&gt;
&lt;br /&gt;
La serialización te permite, por ejemplo, guardar un objeto o array en una base de datos o transmitirlo entre aplicaciones remotas, para luego volver a convertirlo a su tipo y estructura original.&lt;br /&gt;
&lt;br /&gt;
Supongamos que tienes el siguiente array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arr = array(&lt;br /&gt;
  &amp;quot;fruta&amp;quot; =&amp;gt; &amp;quot;manzana&amp;quot;, &lt;br /&gt;
  &amp;quot;objeto&amp;quot; =&amp;gt; &amp;quot;bicicleta&amp;quot;, &lt;br /&gt;
  &amp;quot;animales&amp;quot; =&amp;gt; array(&lt;br /&gt;
             &amp;quot;perro&amp;quot;, &lt;br /&gt;
             &amp;quot;gato&amp;quot;, &lt;br /&gt;
             &amp;quot;caballo&amp;quot;) &lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si lo deseas guardar en una tabla de una base de datos, lo puedes serializar de esta forma:&lt;br /&gt;
&lt;br /&gt;
'''$string = serialize($arr);'''&lt;br /&gt;
&lt;br /&gt;
La función serialize devolverá un valor fácilmente almacenable o transmitible:&lt;br /&gt;
&lt;br /&gt;
''a:3:{s:5:&amp;quot;fruta&amp;quot;;s:7:&amp;quot;manzana&amp;quot;;s:6:&amp;quot;objeto&amp;quot;;s:9:&amp;quot;bicicleta&amp;quot;;s:8:&amp;quot;animales&amp;quot;;a:3: i:0;s:5:&amp;quot;perro&amp;quot;;i:1;s:4:&amp;quot;gato&amp;quot;;i:2;s:7:&amp;quot;caballo&amp;quot;;}}''&lt;br /&gt;
&lt;br /&gt;
Para recuperar el valor original en PHP a partir de la cadena seriada:&lt;br /&gt;
&lt;br /&gt;
'''$arr = unserialize($string);'''&lt;br /&gt;
&lt;br /&gt;
Un ejemplo del uso de la serialización la tenemos en la forma en que WordPress almacena información variada en algunas de sus tablas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Serializar'''&lt;br /&gt;
&lt;br /&gt;
http://www.cucuza.com/como-serializar-datos-en-php/&lt;br /&gt;
&lt;br /&gt;
==EXEMPLE CLASSE SERIALIZACIÓN==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Serializer {&lt;br /&gt;
&lt;br /&gt;
    private static $path = &amp;quot;./database/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    public static function save($obj, $id) {  //$obj es un JSON , $id es el nombre del archivo &lt;br /&gt;
&lt;br /&gt;
        $arr = serialize($obj);&lt;br /&gt;
        &lt;br /&gt;
        return file_put_contents(self::$path . $id, $arr);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static function restore($id) {&lt;br /&gt;
        &lt;br /&gt;
        if  (file_exists ( self::$path . $id ) ){&lt;br /&gt;
            &lt;br /&gt;
            $xmlString = file_get_contents(self::$path . $id);&lt;br /&gt;
            &lt;br /&gt;
            return unserialize($xmlString);  &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static function showIds(){&lt;br /&gt;
        &lt;br /&gt;
        return array_slice(scandir(self::$path),2);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//al ser una classe estàtica es pot invocar els mètodes de la següent forma, per exemple:&lt;br /&gt;
&lt;br /&gt;
Serializer::save(json,nom_arxiu);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crear un JSON desde PHP (json_encode)==&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crear un objeto en PHP con JSON (json_decode)==&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ENVIAR CORREOS ==&lt;br /&gt;
&lt;br /&gt;
Mediente la función MAIL() de PHP podemos enviar correos, por ello, nuestro servidor deberá tener instalado el servicio.&lt;br /&gt;
En nuestro caso, en nuestro Hosting-ng lo tenemos.&lt;br /&gt;
Existe otra función PHPMailer dónde contiene más opciones. https://github.com/PHPMailer/PHPMailer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Forma simple'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// El mensaje&lt;br /&gt;
$msg = &amp;quot;Estimado alumno de La Mercè\nEstas invitado a participar en  clase&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// usar wordwrap() si las lineas son más largas de 70 caracteres&lt;br /&gt;
$msg = wordwrap($msg,70);&lt;br /&gt;
&lt;br /&gt;
// Enviar mail&lt;br /&gt;
mail(&amp;quot;alguien@ejemplo.cat&amp;quot;,&amp;quot;Mi título&amp;quot;,$msg);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Más opciones'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    $to = &amp;quot;ejemploPrueba@ejemplo.com&amp;quot;;&lt;br /&gt;
    $subject = &amp;quot;Asunto&amp;quot;;&lt;br /&gt;
    $txt = &amp;quot;Estamos en clase de DAW&amp;quot;;&lt;br /&gt;
    $headers = &amp;quot;From: webmaster@example.com&amp;quot; . &amp;quot;\r\n&amp;quot; .&lt;br /&gt;
        &amp;quot;CC: somebodyelse@example.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    mail($to,$subject,$txt,$headers);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' En terminal '''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//también podemos hacerlo desde el terminal de linux en nuestro servidor&lt;br /&gt;
system('mail -t alguien@ejemplo.cat -s ALTA ALUMNOS INSTI &amp;lt;&amp;lt;&amp;lt; &amp;quot;El alumno&amp;quot;'.$nom.&amp;quot; &amp;quot;.$cognoms.&amp;quot; está en espera de darse de alta&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SUBIR FICHEROS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// En versiones de PHP anteriores a la 4.1.0, debería utilizarse $HTTP_POST_FILES en lugar&lt;br /&gt;
// de $_FILES.&lt;br /&gt;
&lt;br /&gt;
 //Directori de pujada. Permís d'escriptura i accés per a www-data&lt;br /&gt;
$dir_subida = './';  &lt;br /&gt;
 //Anexem la carpeta amb el nos del finder que ens puja&lt;br /&gt;
$fichero_subido = $dir_subida . basename($_FILES['file']['name']); //basename: muestra el nombre del fichero con la extensión&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Movem el fitxer temporal creat a /tmp a la ubicació o nom indicats&lt;br /&gt;
echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
if (move_uploaded_file($_FILES['file']['tmp_name'], $fichero_subido)) {    &lt;br /&gt;
    echo &amp;quot;El fichero es válido y se subió con éxito.\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;¡Posible ataque de subida de ficheros!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo 'Más información de depuración:';&lt;br /&gt;
print_r($_FILES);&lt;br /&gt;
&lt;br /&gt;
/*$_FILES['file']['name'] -- original name of the file on the client machine.&lt;br /&gt;
$_FILES['file']['type'] -- mime type of the file, provided by the browser&lt;br /&gt;
$_FILES['file']['size'] -- size (in bytes) of the uploaded file&lt;br /&gt;
$_FILES['file']['tmp_name'] -- temporary filename of the uploaded file, stored on the server&lt;br /&gt;
$_FILES['file']['error'] -- returns an error code, useful for debugging.&lt;br /&gt;
*/&lt;br /&gt;
print &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; SUBIR FICHEROS &amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;!-- El tipo de codificación de datos, enctype, DEBE especificarse como sigue --&amp;gt;&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- MAX_FILE_SIZE debe preceder al campo de entrada del fichero --&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;MAX_FILE_SIZE&amp;quot; value=&amp;quot;30000&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- El nombre del elemento de entrada determina el nombre en el array $_FILES --&amp;gt;&lt;br /&gt;
    Enviar este fichero: &amp;lt;input name=&amp;quot;fichero_usuario&amp;quot; type=&amp;quot;file&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar fichero&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EXERCICI:'''&lt;br /&gt;
&lt;br /&gt;
Es desitja desenvolupar un formulari on pugui ficar el nom d'usuari i a més pujar un fitxer. Deurà haver una pàgina que mostre tots el fitxers d'eixe Usuari i el nombre d'arxius.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDF ==&lt;br /&gt;
Podem també generar pdf's a FPDF http://www.fpdf.org/ , però es deurà baixar la llibreria primer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require('fpdf.php');&lt;br /&gt;
&lt;br /&gt;
class PDF extends FPDF&lt;br /&gt;
{&lt;br /&gt;
// Page header&lt;br /&gt;
function Header()&lt;br /&gt;
{&lt;br /&gt;
    // Logo&lt;br /&gt;
    $this-&amp;gt;Image('logo.png',10,6,30);&lt;br /&gt;
    // Arial bold 15&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','B',15);&lt;br /&gt;
    // Move to the right&lt;br /&gt;
    $this-&amp;gt;Cell(80);&lt;br /&gt;
    // Title&lt;br /&gt;
    $this-&amp;gt;Cell(30,10,'Title',1,0,'C');&lt;br /&gt;
    // Line break&lt;br /&gt;
    $this-&amp;gt;Ln(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Page footer&lt;br /&gt;
function Footer()&lt;br /&gt;
{&lt;br /&gt;
    // Position at 1.5 cm from bottom&lt;br /&gt;
    $this-&amp;gt;SetY(-15);&lt;br /&gt;
    // Arial italic 8&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','I',8);&lt;br /&gt;
    // Page number&lt;br /&gt;
    $this-&amp;gt;Cell(0,10,'Page '.$this-&amp;gt;PageNo().'/{nb}',0,0,'C');&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Instanciation of inherited class&lt;br /&gt;
$pdf = new PDF();&lt;br /&gt;
$pdf-&amp;gt;AliasNbPages();&lt;br /&gt;
$pdf-&amp;gt;AddPage();&lt;br /&gt;
$pdf-&amp;gt;SetFont('Times','',12);&lt;br /&gt;
for($i=1;$i&amp;lt;=40;$i++)&lt;br /&gt;
    $pdf-&amp;gt;Cell(0,10,'Printing line number '.$i,0,1);&lt;br /&gt;
$pdf-&amp;gt;Output();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= QR =&lt;br /&gt;
&lt;br /&gt;
També podem crear codis QR al nostre servidor, hi han moltes libreries tanta en PHP com en JS.&lt;br /&gt;
https://sourceforge.net/projects/phpqrcode/&lt;br /&gt;
&lt;br /&gt;
Es deurà baixar la llibreria i ficar la carpeta &amp;quot;phpqrcode&amp;quot; dins del nostre servidor, a més de introduir el següent codi. &lt;br /&gt;
//'''NOTA''': deureu donar-li permisos d'escriptura a la carpeta&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   // la llibreria s'ha descomprimit dins d'una carpeta anomenada &amp;quot;phpqrcode&amp;quot;&lt;br /&gt;
   include('phpqrcode/qrlib.php');&lt;br /&gt;
   &lt;br /&gt;
   QRcode::png('http://wikiserver.infomerce.es', 'imatgeqr.png');&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
   &amp;lt;img src=&amp;quot;imatgeqr.png&amp;quot; /&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici- Inventario'''&lt;br /&gt;
&lt;br /&gt;
Queremos crear un registro o inventario de los ordenadores, por ellos, queremos generar códigos QR que serán pegatinas para poner en cada uno de los ordenadores de las diferentes aulas, por ello crearemos un formulario donde introduciremos el aula y el ordenador, deben almacenarse en un variable de sesión (ya que no sabemos todavía conectarnos a BD) y cuando cliquemos mostrar deben de aparecer todas los códigos QR del aula.&lt;br /&gt;
También se desea guardarlo en pdf (mirar librerias) con el título y el aula y el codigo QR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CONECTAR CON LDAP o ACTIVE DIRECTORY ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class LDAP &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
      //Asigno variables para accesar al servidor LDAP&lt;br /&gt;
   private $conectar;&lt;br /&gt;
   private $host;&lt;br /&gt;
   private $user;&lt;br /&gt;
   private $pswd;&lt;br /&gt;
   private $dn;&lt;br /&gt;
   private $OU;&lt;br /&gt;
   private $DC;&lt;br /&gt;
   private $DC1;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   public function __construct($user,$password,$ou,$dc,$dc1)&lt;br /&gt;
   {&lt;br /&gt;
    $this-&amp;gt;host= &amp;quot;172.16.208.174&amp;quot;;&lt;br /&gt;
    $this-&amp;gt;user = $user;&lt;br /&gt;
    $this-&amp;gt;pswd = $password;&lt;br /&gt;
    $this-&amp;gt;OU = $ou;&lt;br /&gt;
    $this-&amp;gt;DC = $dc;&lt;br /&gt;
    $this-&amp;gt;DC1 = $dc1;&lt;br /&gt;
    $this-&amp;gt;dn = &amp;quot;OU=&amp;quot;.$ou.&amp;quot;,DC=&amp;quot;.$dc.&amp;quot;,DC=&amp;quot;.$dc1.&amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function conexion()&lt;br /&gt;
   {&lt;br /&gt;
       $this-&amp;gt;conectar = ldap_connect($this-&amp;gt;host) or die(&amp;quot;Imposible Conectar&amp;quot;);&lt;br /&gt;
     // Especifico la versión del protocolo LDAP&lt;br /&gt;
    ldap_set_option($this-&amp;gt;conectar, LDAP_OPT_PROTOCOL_VERSION, 3)    or die (&amp;quot;Imposible asignar el Protocolo LDAP&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function credenciales(){&lt;br /&gt;
   // Valido las credenciales para accesar al servidor LDAP&lt;br /&gt;
    $bd = ldap_bind($this-&amp;gt;conectar, $this-&amp;gt;user, $this-&amp;gt;pswd)    or die (&amp;quot;Imposible Validar en el Servidor LDAP&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Especifico los parámetros que quiero que me regrese la consulta&lt;br /&gt;
    $attrs = array(&amp;quot;displayname&amp;quot;,&amp;quot;mail&amp;quot;,&amp;quot;samaccountname&amp;quot;,&amp;quot;telephonenumber&amp;quot;,&amp;quot;givenname&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
    // Creo el filtro para la busqueda&lt;br /&gt;
    $filter = &amp;quot;(samaccountname=&amp;quot;.$this-&amp;gt;user.&amp;quot;)&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    $search = ldap_search($this-&amp;gt;conectar, $this-&amp;gt;dn, $filter, $attrs)    or die (&amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    $entries = ldap_get_entries($this-&amp;gt;conectar, $search);&lt;br /&gt;
&lt;br /&gt;
    return $entries;&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17449</id>
		<title>NF2: Generació de documents web amb llenguatges de guions</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17449"/>
				<updated>2023-09-29T15:09:20Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introducció llenguatges de programació del costat Servidor =&lt;br /&gt;
&lt;br /&gt;
Existeix una multitud de llenguatges concebuts o no per a Internet. Cadascun d'ells explota més a fons certes característiques que ho fan més o menys útils per desenvolupar diferents aplicacions.&lt;br /&gt;
Un '''llenguatge del costat del servidor''' és aquell que '''s'executa en el servidor web, just abans que s'enviï la pàgina''' a través d'Internet al client. Les pàgines que s'executen en el servidor poden realitzar accessos a bases de dades, connexions en xarxa, i altres tasques per crear la pàgina final que veurà el client.&lt;br /&gt;
D'altra banda, els '''llenguatges de costat client''' (entre els quals no només es troba l'HTML sinó també el Java i el Javascript els quals són simplement inclosos en el codi HTML) són aquells que '''poden ser directament executats pel navegador i no necessiten un pretractament'''.&lt;br /&gt;
[[Fitxer:serverside.jpg|center]]&lt;br /&gt;
Els llenguatges de costat servidor més àmpliament utilitzats per al desenvolupament de pàgines dinàmiques són l'ASP, JSP, PERL i PHP.&lt;br /&gt;
== ASP.NET ==&lt;br /&gt;
Llenguatge comercialitzat per Microsoft, i usat per programadors per desenvolupar entre altres funcions, llocs web. ASP.NET és el successor de la tecnologia ASP, va ser llançada al mercat mitjançant una estratègia de mercat denominada .NET.&lt;br /&gt;
Es desenvolupat per resoldre les limitants que brindava el teu antecessor ASP. Per al desenvolupament d'ASP.NET es pot utilitzar C#, VB.NET o J#. Els arxius compten amb l'extensió (aspx). Per al seu funcionament de les pàgines es necessita tenir instal·lat IIS amb el Framework .Net. Microsft Windows 2003 inclou aquest framework, solament es necessitarà instal·lar-ho en versions anteriors.&lt;br /&gt;
El llenguatge ASP consisteix en una sèrie de classes .NET utilitzades per crear aplicacions Web, tant del costat client (Web Form) com del costat servidor (Web Service). La integració de nadiva .NET Framework amb el sistema operatiu Windows Server 2003 fa que la seva execució sigui més estable i ràpida que altres llenguatges de programació.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Completament orientat a objectes.&lt;br /&gt;
*Controls d'usuari i personalitzats.&lt;br /&gt;
*Divisió entre la capa d'aplicació o disseny i el codi.&lt;br /&gt;
*Facilita el manteniment de grans aplicacions.&lt;br /&gt;
*Increment de velocitat de resposta del servidor.&lt;br /&gt;
*Major velocitat.&lt;br /&gt;
*Major seguretat.&lt;br /&gt;
&lt;br /&gt;
'''Desavantatges: '''&lt;br /&gt;
*Major consum de recursos.&lt;br /&gt;
*Tecnologia propietària.&lt;br /&gt;
*Hostalatge de llocs web costosos.&lt;br /&gt;
&lt;br /&gt;
== JSP: Java Server Pages ==&lt;br /&gt;
És un llenguatge per a la creació de llocs web dinàmics, acrònim de Java Server Pages. Està orientat a desenvolupar pàgines web en Java. JSP és un llenguatge multiplataforma.&lt;br /&gt;
JSP va ser desenvolupat per Sun Microsystems. Comparteix avantatges similars a les d'ASP.NET, desenvolupat per a la creació d'aplicacions web potents. Posseeix un motor de pàgines basat en els servlets de Java. Per al seu funcionament es necessita tenir instal·lat un servidor Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Característiques'''&lt;br /&gt;
*Codi separat de la lògica del programa.&lt;br /&gt;
*Les pàgines són compilades en la primera petició.&lt;br /&gt;
*Permet separar la part dinàmica de l'estàtica a les pàgines web.&lt;br /&gt;
*Els arxius es troben amb l'extensió (jsp).&lt;br /&gt;
*El codi JSP pot ser incrustat en codi HTML.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Execució ràpida del servlets.&lt;br /&gt;
*Crear pàgines del costat del servidor.&lt;br /&gt;
*Multiplataforma.&lt;br /&gt;
*Codi ben estructurat.&lt;br /&gt;
*Integritat amb els mòduls de Java.&lt;br /&gt;
*La part dinàmica està escrita en Java.&lt;br /&gt;
== PERL (Practical Extraction and Report Language) ==&lt;br /&gt;
És un llenguatge de programació desenvolupat per Larry Wall (lwall at netlabs.com) inspirat en altres eines d'UNIX com són: sigueu, grep, awk, c-shell, per a l'administració de tasques pròpies de sistemes UNIX. No estableix cap filosofia de programació concreta. No es pot dir que sigui orientat a objectes, modular o estructurat encara que suporta directament tots aquests paradigmes; el seu punt fort són les labors de processament de textos i arxius. Llenguatge de programació basat en scripts portable a gairebé qualsevol plataforma. És molt utilitzat per escriure CGIs. Un dels seus elements més potents són les expressions regulars, que a partir de la seva versió en Perl han estat adoptades per altres llenguatges i plataformes com .NET o Javascript.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Es poden ajuntar diversos programes d'una forma senzilla per aconseguir una meta determinada. Els usuaris de Windows agrairan aquesta propietat ja que normalment emmalalteixen d'un bon llenguatge tipus “script”.&lt;br /&gt;
*És relativament ràpid per a un llenguatge tipus “script”.&lt;br /&gt;
*Està disponible en múltiples plataformes i sistemes operatius (UNIX, Linux i Windows). Un programa que s'escrigui tenint en compte la compatibilitat pot ser escrit en una plataforma i executat en una altra.&lt;br /&gt;
*Hi ha una col·lecció enorme de mòduls que poden ser incorporats a qualsevol “script” de Perl. Estan disponibles en el CPAN (“Comprehensive Perl Arxivi Network”). En particular existeix una extensió per a càlcul numèric denominada PDL.&lt;br /&gt;
*Perl és gratuït. Molt més que això, és “Programari Lliure”. Això vol dir que el codi font està disponible perquè qualsevol el pugui veure o modificar, i el que és més important, sempre ho estarà. Encara que mai pretenguis canviar el codi, és important disposar de la possibilitat de fer-ho, ja que sempre es podrà contractar a una tercera persona perquè ho modifiqui en el cas que hi hagi un error, i hauria de ser possible solucionar-ho.&lt;br /&gt;
*Li atorga al programador molta llibertat perquè faci el programa com vulgui. Tal com diu l'eslògan de Perl “Hi ha més d'una forma de fer-ho”&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
PHP és l'acrònim de Hipertext Preprocesor. És un llenguatge de programació del costat del servidor gratuït i independent de plataforma, ràpid, amb una gran llibreria de funcions i molta documentació. Va ser creat originalment en 1994 per Rasmus Lerdorf, però com PHP està desenvolupat en política de codi obert, al llarg de la seva història ha tingut moltes contribucions d'altres desenvolupadors.&lt;br /&gt;
El client solament rep una pàgina amb el codi HTML resultant de l'execució de la PHP. Com la pàgina resultant conté únicament codi HTML, és compatible amb tots els navegadors.&lt;br /&gt;
&lt;br /&gt;
https://luisjordan.net/node-js/node-js-vs-php-comparaciones-cms-beneficios-y-tiempos-de-respuesta/&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Molt fàcil d'aprendre.&lt;br /&gt;
*Es caracteritza per ser un llenguatge molt ràpid.&lt;br /&gt;
*Suporta en certa mesura l'orientació a objecte. Classes i herència.&lt;br /&gt;
*És un llenguatge multiplataforma: Linux, Windows, entre uns altres.&lt;br /&gt;
*Capacitat de connexió amb la majoria dels manejadores de base de dades: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre unes altres.&lt;br /&gt;
*Capacitat d'expandir el seu potencial utilitzant mòduls.&lt;br /&gt;
*Posseeix documentació a la seva pàgina oficial la qual inclou descripció i exemples de cadascuna de les seves funcions.&lt;br /&gt;
*És lliure, per la qual cosa es presenta com una alternativa de fàcil accés per a tots.&lt;br /&gt;
*Inclou gran quantitat de funcions.&lt;br /&gt;
*No requereix definició de tipus de variables ni maneig detallat del baix nivell.&lt;br /&gt;
&lt;br /&gt;
= Preparació de l'entorn =&lt;br /&gt;
== Instal·lació de servidors d'aplicacions Web ==&lt;br /&gt;
Internet s’ha convertit en la principal eina d’intercanvi d’informació a la societat actual. La connexió dels ordinadors a les xarxes locals i aquestes xarxes a d’altres de grans dimensions ha possibilitat la comunicació global d’informació entre els ordinadors arreu del món. Per poder oferir serveis web, els servidors han de tenir instal·lats una sèrie de serveis. El servidor web permet l’enviament de continguts a altres ordinadors a través de la xarxa. Els preprocessadors d’hipertext (com PHP) permeten crear continguts web de forma dinàmica. Els servidors de bases de dades permeten emmagatzemar informació de forma estructurada que es pot fer servir per generar contingut web. Aquests serveis han de ser instal·lats i configurats correctament abans de començar a crear el contingut web dinàmic del nostre web.&lt;br /&gt;
&lt;br /&gt;
Un '''servidor web''' és una peça de programari que respon a les peticions dels navegadors i lliura la pàgina per al navegador a través d’Internet. Quan es crida a una pàgina web per l’adreça –l’URL (uniform resource locator), per exemple, www.infomerce.es/index.html-, la comunicació entre el navegador i el servidor és possible gràcies a tres protocols:&lt;br /&gt;
* TCP(Transmission Control Protocol, protocol de control de transmissió): és el responsable de fer que el missatge arribi a la destinació sense errors.&lt;br /&gt;
* IP(Internet Protocol): és el responsable de fer que el missatge trobi el camí fins al servidor.&lt;br /&gt;
* HTTP(Hypertext Transfer Protocol, protocol de transferència d’hipertext): és el protocol que ha indicat l’usuari a l’hora de demanar el recurs al servidor. La primera part d’un recurs URL correspon al protocol que utilitzaran client i servidor per intercanviar dades.&lt;br /&gt;
== HTTP: comunicació entre servidor i client ==&lt;br /&gt;
Un cop establerta la connexió entra en joc el protocol HTTP: el navegador envia una petició al servidor en què sol·licita el recurs index.html. El servidor processa aquesta petició i retorna la pàgina sol·licitada al navegador, que interpreta les etiquetes HTML i la presenta a l’usuari.&lt;br /&gt;
[[Fitxer:peticiohttp.jpg|center]]&lt;br /&gt;
La informació que el client envia al servidor en la petició és la següent:&lt;br /&gt;
* El mètode HTTP: l’acció que s’ha de fer.&lt;br /&gt;
* El recurs a què s’ha d’accedir (una part de l’URL).&lt;br /&gt;
* La informació que l’usuari envia al servidor.&lt;br /&gt;
La informació que el servidor envia en la resposta té dues parts ben diferenciades: &lt;br /&gt;
* La capçalera: conté el codi que indica si la petició s’ha complert. També conté el tipus de contingut que enviarà al client.&lt;br /&gt;
* El contingut: (text, codi HTML, imatges, etc.) del recurs demanat.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Preparació M.V. amb Ubuntu i PHP ===&lt;br /&gt;
Es tracta d'importar una M.V. amb Ubuntu Server. Aquesta màquina virtual la utilitzarem al llarg del curs per desenvolupar programes amb el llenguatge PHP. LA M.V. ha de tenir les següents característiques:&lt;br /&gt;
*512 MB de Ram&lt;br /&gt;
*Targeta mode Pont (Has de reinicialitzar la @MAC i esborrar el fitxer: /etc/udev/rules.d/70-persistent-net.rules)&lt;br /&gt;
*Configura la @IP. &lt;br /&gt;
Instal·la el següent programari:&lt;br /&gt;
*openssh-server (per permetre comunicacions remotes)&lt;br /&gt;
*Servidor Web apache2&lt;br /&gt;
*Servidor PHP&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Primer projecte amb NetBeans ===&lt;br /&gt;
Crea un projecte PHP amb NetBeans. Fes que automàticament guardi tots els fitxers a la màquina virtual creada al apartat anterior. Crea una pàgina d'exemple i comprova que funciona.&lt;br /&gt;
La pàgina d'exemple pot ser la següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
     	&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;?php&lt;br /&gt;
            echo &amp;quot;Primera Pàgina amb PHP&amp;quot;; &lt;br /&gt;
          ?&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= El Llenguatge PHP =&lt;br /&gt;
== Introducció ==&lt;br /&gt;
'''PHP''' és un llenguatge de programació obert que s’integra directament en pàgines HTML. El seu ús ha esdevingut gairebé imprescindible en les pàgines que han d’utilitzar bases de dades o formularis.&lt;br /&gt;
Rasmus Lerdorf és el creador del llenguatge PHP. El 1995 presenta la primera edició d’aquest llenguatge amb el nom de Personal Home Page tools amb llicència pública GNU. Per crear el PHP, Rasmus utilitza el codi de programació C.&lt;br /&gt;
&lt;br /&gt;
El '''codi PHP''' que escriviu, '''l’haureu d’incrustar dins de codi HTML''', concretament dins les etiquetes \&amp;lt;body\&amp;gt; del document. Mitjançant unes marques l’HTML no interpretarà el codi PHP, el qual, i mitjançant les mateixes marques, s’executarà en el servidor.&lt;br /&gt;
&lt;br /&gt;
El codi PHP s’executa en un servidor i mostra el resultat en un client. Visualitzareu els resultats amb un navegador web.&lt;br /&gt;
&lt;br /&gt;
Quan arrenca el PHP es fa la lectura del fitxer '''php.ini'''. Aquest fitxer conté la configuració del PHP i es crea durant la instal·lació del PHP. És possible que necessiteu fer canvis en el fitxer de configuració, preneu la precaució de fer-ne una còpia de seguretat abans de fer aquestes modificacions.&lt;br /&gt;
Una inspecció visual del fitxer php.ini us servirà per comprendre’n el funcionament. Depenent del valor de les variables que conté aquest fitxer, el comportament del PHP variarà en la vostra màquina. Podeu comprovar que cada variable que forma part del fitxer està àmpliament comentada, amb comentaris que es marquen amb un punt i coma.&lt;br /&gt;
&lt;br /&gt;
== Mostrar Errors ==&lt;br /&gt;
Per mostrar els errors que fem al escriure programes en php s'ha d'especificar als fitxers que els vols veure per pantalla amb les següents sentències:&lt;br /&gt;
&lt;br /&gt;
http://www.anerbarrena.com/mostrar-errores-php-608/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* * ******************Errores******************* */&lt;br /&gt;
ini_set('display_errors', true);&lt;br /&gt;
error_reporting(E_ALL);&lt;br /&gt;
/* * ********************Usuarios****************** */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintaxi ==&lt;br /&gt;
=== Generalitats ===&lt;br /&gt;
La sintaxi d'un llenguatge de programació es defineix com el conjunt de regles que han de seguir-se en escriure el codi font dels programes per considerar-se com a correctes per a aquest llenguatge de programació.&lt;br /&gt;
Les normes bàsiques que defineixen la sintaxi de PHP són les següents:&lt;br /&gt;
*Si voleu que s’interpreti el vostre codi és imprescindible que encabiu el codi escrit en PHP entre dos delimitadors. Aquestes marques són &amp;lt;?php , que la fareu servir per indicar l’inici de codi en llenguatge PHP, i ?&amp;gt; , que utilitzareu per marcar el final del vostre codi PHP.&lt;br /&gt;
*Indicareu el final d’una instrucció amb punt i coma. Cada vegada que es detecti un punt i coma s’interpretarà el codi inserit fins a aquell punt.&lt;br /&gt;
*Els comentaris en PHP els podreu incloure mitjançant:&lt;br /&gt;
** Dues barres (//) o un coixinet (#) si voleu comentar una línia&lt;br /&gt;
** Una barra i un asterisc (/*) per indicar l’inici de comentari, i un asterisc i una barra per indicar el final de comentari si voleu comentar més d’una línia(/*).&lt;br /&gt;
*No es defineix el tipus de les variables: PHP és un llenguatge de programació que no obliga a declarar prèviament el nom de les variables que s’utilitzaran ni el seu tipus (és diu que és un llenguatge sense tipus o no tipat). Ara bé, tot i que existeixen els tipus de dades en PHP aquests no es comproven.&lt;br /&gt;
*No es distingeixen les majúscules i minúscules.&lt;br /&gt;
Exemples:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Aquí teniu una instrucció.&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;i aquí una altra instrucció.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Si voleu comentar una línia ho podeu fer d’aquesta manera...&lt;br /&gt;
#...o bé d’aquesta altra.&lt;br /&gt;
/* Però si necessiteu comentar&lt;br /&gt;
més línies aquesta és la millor&lt;br /&gt;
manera de fer − ho! */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Per representar una variable '''caldrà escriure el símbol del dòlar seguit pel nom que vulgueu posar'''. En el moment de donar nom a una variable heu de tenir en compte que es diferencien majúscules i minúscules i que haurà de començar amb una lletra o caràcter de subratllat.&lt;br /&gt;
En PHP, a diferència de molts altres llenguatges, no cal declarar una variable abans d’utilitzar-la. El símbol del dòlar és el que marca que es tracta d’una variable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$Nom='whovian';&lt;br /&gt;
$Familia='Informàtica';&lt;br /&gt;
$Cicle=&amp;quot;CFGS Desenvolupament d'aplicacions Web&amp;quot;;&lt;br /&gt;
$Modul = &amp;quot;DAW en entorn servidor&amp;quot;;&lt;br /&gt;
$Durada= 165;&lt;br /&gt;
echo &amp;quot;Hola $nom!&amp;lt;br&amp;gt;&lt;br /&gt;
Benvingut als estudis d’$Familia!!!&amp;lt;br&amp;gt;&lt;br /&gt;
Cicle: $Cicle&amp;lt;br&amp;gt;&lt;br /&gt;
Mòdul: $Modul&amp;lt;br&amp;gt;&lt;br /&gt;
Durada: $Durada hores&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com podeu veure, les variables poden adquirir qualsevol dels tipus suportats, i la variable $Durada emmagatzema l’enter 180, mentre que la resta de variables emmagatzemaran cadenes.&lt;br /&gt;
Les variables s’assignen per valor per defecte, però '''si voleu assignar un valor per referència''' ho haureu d’indicar fent servir el símbol''' &amp;amp; '''tot just davant de la variable&lt;br /&gt;
=== Àmbit de les variables ===&lt;br /&gt;
&lt;br /&gt;
Les variables tenen una vida determinada depenent d’on les declareu i com ho feu. És molt important conèixer l’àmbit de les variables per controlar els vostres codis. No comprendre aquesta part pot provocar fallades inesperades en les vostres creacions.&lt;br /&gt;
L’àmbit d’una variable és el context en què és definida.&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot declarar una variable nombroses vegades en àmbits diferents:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nom=’Nyoman’;&lt;br /&gt;
echo ’De moment $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
function canvi()&lt;br /&gt;
{&lt;br /&gt;
	$nom=’Ketut’;&lt;br /&gt;
	echo ’Però ara $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
canvi();&lt;br /&gt;
echo ’I de nou $nom torna a tenir el valor de ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadors ===&lt;br /&gt;
Permetran fer accions dins el codi. Podreu canviar i assignar valors, canviar l’adreça del codi, condicionar l’execució de blocs de codi i, en&lt;br /&gt;
definitiva, dotar de la complexitat necessària els vostres programes per aconseguir un objectiu.&lt;br /&gt;
Els operadors es poden agrupar en tres blocs segons el nombre de valors sobre els quals s’actua.&lt;br /&gt;
* L’operador '''unari''' opera sobre un valor i el que pot fer en aquest valor és negar-lo, incrementar-lo o decrementar-lo, entre altres coses.&lt;br /&gt;
* L’operador '''binari''' opera sobre dos valors i permet sumar-los, restar-los o comparar-los.&lt;br /&gt;
* L’operador '''ternari''' permet escollir entre dues expressions en funció d’una altra.&lt;br /&gt;
&lt;br /&gt;
'''Operadors Aritmètics '''&lt;br /&gt;
Teniu en compte que la divisió retornarà un valor en coma flotant si el resultat de la divisió no és exacte.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
|-$valor||Negació||Oposat de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor + $valorB ||Addició||Suma de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor - $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor * $valorB||Multiplicació||Producte de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor / $ valorB||Divisió||Quocient de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor % $valorB||Mòdul||Resta de $valor dividit per $valorB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors d'assignació '''&lt;br /&gt;
L’operador bàsic d’assignació és l’igual. Amb l’operador igual la variable de l’esquerra rep el valor de l’expressió de la dreta.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor = $valorB||Assignació||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor += $valorB||Addició i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor -= $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor.= “text”||Concatenació i Assignació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de bit '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp; $valorB||i||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor I $valorB||o i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor ˆ $valorB ||xor||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
|  ̃ $valor||Negació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;lt;$valorB ||Desplaçament a l’esquerra||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;&amp;gt;$valorB||Desplaçament a la dreta||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de comparació '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor == $valorB||Igual||TRUE si $valor és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor === $valorB||Idèntic||TRUE si $valor és igual a $valorB i són del mateix tipus.&lt;br /&gt;
|-&lt;br /&gt;
| $valor != $valorB ||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;gt; $ valorB||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor !== $valorB ||No idèntic||TRUE si $valor no és igual a $valorB o no són del mateix tipus&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt; $valorB||Més petit que||TRUE si $valor és més petit que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt; $valorB||Més gran que||TRUE si $valor és més gran que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;= $valorB||Més petit o igual que||TRUE si $valor és més petit o igual que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;= $valorB||Més gran o igual que||TRUE si $valor és més gran o igual que $valorB.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Operadors d’increment i decrement '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| ++$valor||Preincrement||Incrementa $valor una unitat, i després retorna $valor.&lt;br /&gt;
|-&lt;br /&gt;
| $valor++||Postincrement||Retorna $valor i incrementa $valor una unitat.&lt;br /&gt;
|-&lt;br /&gt;
| –$valor ||Predecrement||Decrementa $valor una unitat i retorna $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor–||Postdecrement||Retorna $valor i decrementa $valor una unitat.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de lògica '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor and valorB||i||TRUE si $valor i $valorB són TRUE&lt;br /&gt;
|-&lt;br /&gt;
| $valor or $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor xor $valorB ||xor||TRUE si $valor o $valorB són TRUE, però no tots dos alhora.&lt;br /&gt;
|-&lt;br /&gt;
| !$valor||No||Inverteix el contingut de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp;&amp;amp; $valorB ||i||TRUE si $valor i $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor II $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Els Vectors i les Matrius (Arrays) ===&lt;br /&gt;
Les matrius i els vectors són conjunts de dades que poden estar definides en un Guió de PHP. Les matrius poden contenir altres matrius dintre d'ells sense restricció (multidimensionals). &lt;br /&gt;
&lt;br /&gt;
Els vectors es poden crear de dues maneres. La primera consisteix en l'ús de la funció '''array()'''. La segona implica l'ús de claudàtors.&lt;br /&gt;
Exemple de declaracions d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$elmeuarray = array($valor1, $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
$elmeuarray[1] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//També es pot declarar de la següent manera:&lt;br /&gt;
$elmeuarray = array('mes1' =&amp;gt; $valor1, 'mes2' =&amp;gt; $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
$elmeuarray['mes2'] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//Però tambés es pot declarar directament amb claudàtors:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
//o amb la següent notació&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemples d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$array = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;type&amp;quot;=&amp;gt;&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;manufactured&amp;quot;=&amp;gt;&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2 = array(&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3 = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array['name']=&amp;quot;BMW&amp;quot;;&lt;br /&gt;
$array['type']=&amp;quot;SERIE 1&amp;quot;;&lt;br /&gt;
$array['colour']=&amp;quot;BLANCO&amp;quot;;&lt;br /&gt;
$array['manufactured']=&amp;quot;2035&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2[]=&amp;quot;AUDI&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;A5&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;ROJO&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;2038&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3['name']=&amp;quot;FERRARI&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;SPIDER&amp;quot;;&lt;br /&gt;
$array3['colour']=&amp;quot;VERDE&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;2013&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les matrius son vectors multidimensionals. Els elements d'un vector a la seva vegada poden ser un altre vector. Un exemple és el següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$cars = array(&lt;br /&gt;
   &amp;quot;car1&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Toyota&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;Green&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1999,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1998),&lt;br /&gt;
   &amp;quot;car2&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;BMW&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;RED&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 2005,&amp;quot;engine_cc&amp;quot; =&amp;gt; 2400),&lt;br /&gt;
   &amp;quot;car3&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Renault&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;White&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1993,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1395),&lt;br /&gt;
);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $cars['car1']['make'],&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo $cars['car3']['engine_cc'];&lt;br /&gt;
&lt;br /&gt;
/* El resultat de l'execució de les intruccions anteriors és:&lt;br /&gt;
Toyota&lt;br /&gt;
1395&lt;br /&gt;
*/&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Més informació sobre arrays [http://php.net/manual/en/language.types.array.php aquí.]&lt;br /&gt;
Existeixen MOLTES funcions per manipular els arrays. Dona una ullada a [http://php.net/manual/en/ref.array.php aquesta pàgina] abans que comencis a implementar funcions que ja existeixen a la llibreria de php.&lt;br /&gt;
&lt;br /&gt;
=== Estructures de control ===&lt;br /&gt;
==== La sentència '''IF''' i l'Operador Ternari ====&lt;br /&gt;
Les estructures condicionals s'utilitzen per controlar quines instruccions s'executen. Els condicionals en PHP estan estructurats de manera similar als trobats en C ++ i Java .&lt;br /&gt;
Exemple d'estructures condicionals:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//Exemple 1&lt;br /&gt;
$foo = 1;&lt;br /&gt;
$bar = 2;&lt;br /&gt;
if($foo == $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is equal to $bar.&amp;quot;;&lt;br /&gt;
} elseif ($foo &amp;gt; $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is greater than $bar.&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;$foo is less than $bar.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple 2&lt;br /&gt;
$lower = 10;&lt;br /&gt;
$upper = 100;&lt;br /&gt;
$needle = 25;&lt;br /&gt;
if(($needle &amp;gt;= $lower) &amp;amp;&amp;amp; ($needle &amp;lt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is in the haystack.&amp;quot;;&lt;br /&gt;
} elseif (($needle &amp;lt;= $lower) || ($needle &amp;gt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is outside of the haystack.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple Operador Ternari&lt;br /&gt;
&lt;br /&gt;
$missatge =  (date('G') &amp;lt; 12) ? 'Buenos días' : 'Buenas tardes';&lt;br /&gt;
&lt;br /&gt;
//equival a la següent estructura:&lt;br /&gt;
if (date('G') &amp;lt; 12) {&lt;br /&gt;
$missatge = 'Buenos días';&lt;br /&gt;
} else {&lt;br /&gt;
$missatge = 'Buenas tardes';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''SWITCH''' ====&lt;br /&gt;
Quan es necessita utilitzar un IF amb molts Else pot resultar que es vegi un codi molt redundant. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user_command == &amp;quot;n&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_north();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;e&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_east();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;s&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_south();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;w&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_west();&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  do_something_else();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per millorar la llegibilitat del codi utilitzarem l'estructura 'Switch' de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 switch($user_command)&lt;br /&gt;
 {&lt;br /&gt;
   case 'n':&lt;br /&gt;
     go_north();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'e':&lt;br /&gt;
     go_east();&lt;br /&gt;
     break;&lt;br /&gt;
   case 's':&lt;br /&gt;
     go_south();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'w':&lt;br /&gt;
     go_west();&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     do_something_else();&lt;br /&gt;
     break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Un altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($firstvariable == 'comparison1' &lt;br /&gt;
         || $firstvariable == 'comparison2')&lt;br /&gt;
 {&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
 }&lt;br /&gt;
 else if ($firstvariable == 'comparison3')&lt;br /&gt;
 {&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
      launchMissiles();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//amb l'estructura switch :&lt;br /&gt;
 switch($firstvariable)&lt;br /&gt;
 {&lt;br /&gt;
  case 'comparison1':&lt;br /&gt;
  case 'comparison2':&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  case 'comparison3':&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  default: &lt;br /&gt;
      launchMissiles();&lt;br /&gt;
      break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''WHILE''' ====&lt;br /&gt;
Aquesta sentència s'utilitzarà per repetir una serie d'instruccions tantes vegades com el condicional sigui evaluat a True.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$c = 0;&lt;br /&gt;
while ($c &amp;lt; 5) {&lt;br /&gt;
   echo $c++;&lt;br /&gt;
} ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mira el següent codi i enraona si serà un bucle infinit o no:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$c = 1;&lt;br /&gt;
$myName=&amp;quot;Fred&amp;quot;;&lt;br /&gt;
while ($myName != &amp;quot;Rumplestilskin&amp;quot;) &lt;br /&gt;
{&lt;br /&gt;
   if ($myName==&amp;quot;Fred&amp;quot;) &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Leslie&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Marc&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   $c++;&lt;br /&gt;
 &lt;br /&gt;
   if ($c==3) &lt;br /&gt;
   {&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
echo &amp;quot;You lose and I get your baby!\n&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''do ... WHILE''' ====&lt;br /&gt;
És semblan al bucle anterior però les intruccions sempre s'execulten almenys 1 vegada. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  $c = 6;&lt;br /&gt;
  do {&lt;br /&gt;
    echo 'Hi';&lt;br /&gt;
  } while ($c &amp;lt; 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''FOR''' ====&lt;br /&gt;
La sintaxi bàsica d'aquesta sentencia és la següent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for([initialization]; [condition]; [step])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'ús:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 for($i = 0; $i &amp;lt; 5; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilització amb arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $menu = array(&amp;quot;Toast and Jam&amp;quot;, &amp;quot;Bacon and Eggs&amp;quot;, &amp;quot;Homefries&amp;quot;, &amp;quot;Skillet&amp;quot;, &amp;quot;Milk and Cereal&amp;quot;);&lt;br /&gt;
 // note to self: get breakfast after writing this article&lt;br /&gt;
 $count = count($menu);&lt;br /&gt;
 for($i = 0; $i &amp;lt; $count; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i + 1 . &amp;quot;. &amp;quot; . $menu[$i] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== La sentència '''FOREACH''' ====&lt;br /&gt;
Aquesta sentència és molt utilitzada per recòrrer arrays. Com el parell array[key]=value pot ser string en ambdós casos, aquesta estructura ens permet obternir-los:&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach ($array as $someVar) {&lt;br /&gt;
  echo ($someVar . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//un altre exemple:&lt;br /&gt;
foreach ($array as $key =&amp;gt; $value) {&lt;br /&gt;
  echo ($key.&amp;quot;holds the value &amp;quot;.$value.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''break''' ====&lt;br /&gt;
&lt;br /&gt;
La sentència break provoca la sortida de qualsevol estructura de control, trencant així un bucle. Penseu per exemple un bucle que cerca un element d’un array. Una vegada trobat, és ineficient acabar de recórrer la resta de l’array.&lt;br /&gt;
''Podeu indicar a aquesta sentència quantes estructures de control voleu saltar. ''&lt;br /&gt;
En l’exemple següent el break provoca la sortida de dos blocs de codi:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
while($edat&amp;lt;20)&lt;br /&gt;
{&lt;br /&gt;
	for( ; ; $edat=$edat+1)&lt;br /&gt;
	{&lt;br /&gt;
		if($edat==18)&lt;br /&gt;
		{&lt;br /&gt;
			echo &amp;quot;Ara ja tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
			break 2;&lt;br /&gt;
		}&lt;br /&gt;
		echo &amp;quot;Encara ets menor d’edat, ja que tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;Aquesta línia no sortirà per pantalla!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;Ja no ets menor d’edat! Tens $edat anys!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
&lt;br /&gt;
===Exercici: tablita ===&lt;br /&gt;
Se desea crear una página web en la cual muestre un título y luego haga una tabla que imprima 10 filas mostrando &amp;quot;estamos en 2DAW&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Exercici: Vector (opcional) ===&lt;br /&gt;
Queremos crear un vector &amp;quot;ciudades&amp;quot; donde introduciremos una serie  de ciudades, luego deberá mostrar cada una de las ciudades y el número total.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Recòrrer array ====&lt;br /&gt;
Donat el següent array:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$eu = array( &amp;quot;Italy&amp;quot;=&amp;gt;&amp;quot;Rome&amp;quot;, &amp;quot;Luxembourg&amp;quot;=&amp;gt;&amp;quot;Luxembourg&amp;quot;, &amp;quot;Belgium&amp;quot;=&amp;gt; &amp;quot;Brussels&amp;quot;, &lt;br /&gt;
&amp;quot;Denmark&amp;quot;=&amp;gt;&amp;quot;Copenhagen&amp;quot;, &amp;quot;Finland&amp;quot;=&amp;gt;&amp;quot;Helsinki&amp;quot;, &amp;quot;France&amp;quot; =&amp;gt; &amp;quot;Paris&amp;quot;, &amp;quot;Slovakia&amp;quot;=&amp;gt;&amp;quot;Bratislava&amp;quot;, &lt;br /&gt;
&amp;quot;Slovenia&amp;quot;=&amp;gt;&amp;quot;Ljubljana&amp;quot;, &amp;quot;Germany&amp;quot; =&amp;gt; &amp;quot;Berlin&amp;quot;, &amp;quot;Greece&amp;quot; =&amp;gt; &amp;quot;Athens&amp;quot;, &amp;quot;Ireland&amp;quot;=&amp;gt;&amp;quot;Dublin&amp;quot;, &lt;br /&gt;
&amp;quot;Netherlands&amp;quot;=&amp;gt;&amp;quot;Amsterdam&amp;quot;, &amp;quot;Portugal&amp;quot;=&amp;gt;&amp;quot;Lisbon&amp;quot;, &amp;quot;Spain&amp;quot;=&amp;gt;&amp;quot;Madrid&amp;quot;, &amp;quot;Sweden&amp;quot;=&amp;gt;&amp;quot;Stockholm&amp;quot;,&lt;br /&gt;
 &amp;quot;United Kingdom&amp;quot;=&amp;gt;&amp;quot;London&amp;quot;, &amp;quot;Cyprus&amp;quot;=&amp;gt;&amp;quot;Nicosia&amp;quot;, &amp;quot;Lithuania&amp;quot;=&amp;gt;&amp;quot;Vilnius&amp;quot;, &lt;br /&gt;
&amp;quot;Czech Republic&amp;quot;=&amp;gt;&amp;quot;Prague&amp;quot;, &amp;quot;Estonia&amp;quot;=&amp;gt;&amp;quot;Tallin&amp;quot;, &amp;quot;Hungary&amp;quot;=&amp;gt;&amp;quot;Budapest&amp;quot;, &amp;quot;Latvia&amp;quot;=&amp;gt;&amp;quot;Riga&amp;quot;, &lt;br /&gt;
&amp;quot;Malta&amp;quot;=&amp;gt;&amp;quot;Valetta&amp;quot;, &amp;quot;Austria&amp;quot; =&amp;gt; &amp;quot;Vienna&amp;quot;, &amp;quot;Poland&amp;quot;=&amp;gt;&amp;quot;Warsaw&amp;quot;) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Crea un script amb PHP que mostri un llistat amb el noms de les capitals i els seus corresponents països. El llistat ha de ser semblant a:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
La capital de Netherlands és Amsterdam&lt;br /&gt;
La capital de Greece és Athens&lt;br /&gt;
La capital de Germany és Berlin&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[solucio_php_recorrer_array]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Afegir un element a un array ====&lt;br /&gt;
Escriu un programa que afegeixi un nou element a un array en una posició determinada.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//abans:&lt;br /&gt;
12345&lt;br /&gt;
&lt;br /&gt;
//després d'afegir $ l'array és:&lt;br /&gt;
123$45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
:[[solucio_afegir_element_array_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Curta i llarga ====&lt;br /&gt;
Escriu un programa en PHP que retorni la longitud màxima i mínima dels strings que conté un array.&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ar = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$max=0;&lt;br /&gt;
$min = PHP_INT_MAX;&lt;br /&gt;
&lt;br /&gt;
foreach($ar as $valor){&lt;br /&gt;
    if( strlen($valor) &amp;lt; $min){&lt;br /&gt;
        $min = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
    if (strlen($valor) &amp;gt; $max){&lt;br /&gt;
        $max = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;La longitud mes curta es $min i la mes llarga es $max.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Otra solucion:&lt;br /&gt;
&lt;br /&gt;
$my_array = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$otroarray = array_map('strlen', $my_array);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;La longitud mes curta es &amp;quot;. min($otroarray) .&amp;quot; i la mes llarga es &amp;quot;. max($otroarray).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
print_r($otroarray);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==== Exercici: Dibuixa asteriscs ====&lt;br /&gt;
Dibuixa amb PHP utilitzant asteriscs el següent dibuix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* &lt;br /&gt;
* * &lt;br /&gt;
* * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * &lt;br /&gt;
* * &lt;br /&gt;
* &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
$n=5;  &lt;br /&gt;
&lt;br /&gt;
for($i=1; $i&amp;lt;=$n; $i++)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
for($i=$n; $i&amp;gt;=1; $i--)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Escacs ====&lt;br /&gt;
Dibuixa una taula d'escacs com la que pots veure a continuació. &lt;br /&gt;
Table width=&amp;quot;270px&amp;quot; i cada cel·la ocupa 30px d'amplada i d'altura.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:escacs.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:solucio_escacs_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcions ===&lt;br /&gt;
&lt;br /&gt;
Les funcions son grup d'instruccions que poden ser cridades en qualsevol moment. Les funcions són útils per re-utilitzar codi de manera sencilla dintre de la nostra aplicació.&lt;br /&gt;
====Funcions definides per l’usuari====&lt;br /&gt;
L’usuari pot definir totes les funcions que necessiti. És imprescindible que el nom donat a la funció no estigui prohibit, és a dir, no es poden fer servir:&lt;br /&gt;
*paraules reservades (per exemple, echo), &lt;br /&gt;
*començar amb un nombre o un caràcter especial&lt;br /&gt;
*repetir el nom d’una funció dins un mateix àmbit. &lt;br /&gt;
Tot i que el PHP '''no farà cap distinció entre majúscules i minúscules''', es recomana utilitzar el nom de la funció idèntic a l’utilitzat en la declaració.&lt;br /&gt;
Les funcions poden rebre paràmetres. El pas de paràmetres d’entrada es fa escrivint entre parèntesis i a continuació del nom de la funció.&lt;br /&gt;
En l’exemple següent podeu veure com es declara la funció missatge i com, posteriorment, es crida passant-hi un paràmetre.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function missatge($argument)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;$argument&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
missatge(&amp;quot;Aquest és l’argument que es passa en aquest exemple.&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les funcions també podran retornar valors. Per fer-ho caldrà utilitzar la sentència '''return'''.&lt;br /&gt;
En l’exemple següent comprovareu com la funció suma, la qual rep dos paràmetres, retorna el resultat de sumar dos nombres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function suma ($valor1,$valor2)&lt;br /&gt;
{&lt;br /&gt;
	return($valor1+$valor2);&lt;br /&gt;
}&lt;br /&gt;
echo suma(4,6);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Funcions Internes====&lt;br /&gt;
El llenguatge PHP té funcions definides internament. Aquestes funcions són de gran utilitat per al programador i resulta imprescindible estudiarles i conèixer-ne les més importants.&lt;br /&gt;
&lt;br /&gt;
És possible que diverses funcions no es reconeguin en el vostre entorn de treball del PHP; el motiu d’això és que algunes funcions internes no s’han inclòs en la compilació, la qual cosa ha fet necessària una compilació dels mòduls que les contenen. Amb phpinfo() es poden veure les extensions carregades en la vostra configuració del PHP.&lt;br /&gt;
&lt;br /&gt;
Són funcions internes molt usuals ''echo, fprintf, print, printf i sprintf'', en què queda demostrat que el llenguatge PHP ja té definides funcions específiques que poden ser de gran utilitat per a l’usuari. &lt;br /&gt;
&lt;br /&gt;
Podeu mirar l’ajuda de PHP a la [https://www.php.net/manual/es/funcref.php pàgina oficial].&lt;br /&gt;
Funcions de Strings: [http://php.net/manual/en/ref.strings.php pàgina oficial].&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot codificar amb codificació ''md5'' el contingut d’una variable:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom = 'Blanca';&lt;br /&gt;
echo(&amp;quot;La codificació md5 de $nom és:&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
echo md5($nom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Exercici===&lt;br /&gt;
El código de encriptación md5 y sha están comprometido ya que son fáciles de desencriptar. ¿Qué algoritmo se debería utilizar?&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Algoritmes d'ordenació====&lt;br /&gt;
Segons el següent array &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fruits = array(&amp;quot;lemon&amp;quot;, &amp;quot;orange&amp;quot;, &amp;quot;banana&amp;quot;, &amp;quot;apple&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SORT''' Esta función ordena una matriz. Los elementos se organizarán de menor a mayor cuando se haya completado esta función.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
sort($cars);&lt;br /&gt;
&lt;br /&gt;
BMW&lt;br /&gt;
Toyota&lt;br /&gt;
Volvo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''RSORT''' Esta función ordena una matriz en orden inverso (de mayor a menor).&lt;br /&gt;
Nota: Esta función asigna nuevas claves para los elementos en la matriz. Eliminará todas las claves existentes que haya asignado, en lugar de simplemente reordenar las claves.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
rsort($cars);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volvo&lt;br /&gt;
Toyota&lt;br /&gt;
BMW&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''asort'''()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;345&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;3&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
asort($age)&lt;br /&gt;
&lt;br /&gt;
Array ( [Ben] =&amp;gt; 3 [Joe] =&amp;gt; 43 [Peter] =&amp;gt; 345 ) &lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''arsort''' ()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
arsort($age);&lt;br /&gt;
&lt;br /&gt;
Array ( [Peter] =&amp;gt; 345 [Joe] =&amp;gt; 43 [Ben] =&amp;gt; 3 ) &lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ksort''' ()&lt;br /&gt;
Ordena una matriz por clave, manteniendo la clave de las correlaciones de datos. Esto es útil principalmente para matrices asociativas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;200&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;99&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
ksort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Ben, Value=99&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''krsort'''()                &lt;br /&gt;
Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
krsort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Peter, Value=35&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=37&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''natsort''' ()&lt;br /&gt;
Esta función implementa un algoritmo de ordenamiento que ordena cadenas alfanuméricas en la forma en que lo haría un ser humano mientras mantiene asociaciones de clave / valor. Esto se describe como un &amp;quot;orden natural&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$array1 = $array2 = array(&amp;quot;img12.png&amp;quot;, &amp;quot;img10.png&amp;quot;, &amp;quot;img2.png&amp;quot;, &amp;quot;img1.png&amp;quot;);&lt;br /&gt;
sort($array1);&lt;br /&gt;
echo &amp;quot;Standard sorting\n&amp;quot;;print_r($array1);&lt;br /&gt;
natsort($array2);&lt;br /&gt;
echo &amp;quot;\nNatural order sorting\n&amp;quot;;print_r($array2);?&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The above example will output:&lt;br /&gt;
Standard sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; img1.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [2] =&amp;gt; img12.png&lt;br /&gt;
    [3] =&amp;gt; img2.png&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Natural order sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [3] =&amp;gt; img1.png&lt;br /&gt;
    [2] =&amp;gt; img2.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [0] =&amp;gt; img12.png&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
====Exercici: Ordenació ====&lt;br /&gt;
Crea una funció que ordeni un array. &lt;br /&gt;
*Per claus de menor a major i de major a menor&lt;br /&gt;
*Per valors de menor a major i de major a menor&lt;br /&gt;
&lt;br /&gt;
[[:Solucio_ordenacio]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Comprova minúscules ====&lt;br /&gt;
Crea una funció que comprovi si tots els caràcters d'un string son minúscules.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function is_str_lowercase($str1)  &lt;br /&gt;
   {  &lt;br /&gt;
    for ($sc = 0; $sc &amp;lt; strlen($str1); $sc++) {  &lt;br /&gt;
          if (ord($str1[$sc]) &amp;gt;= ord('A') &amp;amp;&amp;amp;  ord($str1[$sc]) &amp;lt;= ord('Z')) {    // ord — devuelve el valor ASCII de un caracter&lt;br /&gt;
      return false;  &lt;br /&gt;
         }  &lt;br /&gt;
         }  &lt;br /&gt;
      return true;  &lt;br /&gt;
       }  &lt;br /&gt;
var_dump(is_str_lowercase('abc def ghi'));  &lt;br /&gt;
var_dump(is_str_lowercase('abc dEf ghi'));  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
====Exercici: Primers====&lt;br /&gt;
Crea una funció que indiqui si un número és primer.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function IsPrime($n)  &lt;br /&gt;
{  &lt;br /&gt;
 for($x=2; $x&amp;lt;$n; $x++)  &lt;br /&gt;
   {  &lt;br /&gt;
      if($n %$x ==0)  &lt;br /&gt;
          {  &lt;br /&gt;
           return 0;  &lt;br /&gt;
          }  &lt;br /&gt;
    }  &lt;br /&gt;
  return 1;  &lt;br /&gt;
   }  &lt;br /&gt;
$a = IsPrime(3);  &lt;br /&gt;
if ($a==0)  &lt;br /&gt;
echo 'No es Primo.....';  &lt;br /&gt;
else  &lt;br /&gt;
echo 'ES primo..';  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici- Normalizar ===&lt;br /&gt;
&lt;br /&gt;
Tenemos una base de datos que sólo acepta nombres y apellidos SIN acentos, ni dieresis... por tanto, queremos que cuando escriba el usuario un nombre como &amp;quot;jÚlïÒ&amp;quot; lo normalice a &amp;quot;JULIO&amp;quot;. &lt;br /&gt;
  $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
&lt;br /&gt;
  $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
&lt;br /&gt;
Es interesante investigar sobre la función strtr&lt;br /&gt;
&lt;br /&gt;
solución:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UTF-8 es una codificación multibyte que puede representar cualquier carácter Unicode.&lt;br /&gt;
ISO 8859-1 es una codificación de un solo byte que puede representar los primeros 256 caracteres Unicode.&lt;br /&gt;
Ambos codifican ASCII exactamente de la misma manera.&lt;br /&gt;
&lt;br /&gt;
utf8_decode -&amp;gt;  Convierte una cadena con los caracteres codificados ISO-8859-1 con UTF-8 &lt;br /&gt;
&lt;br /&gt;
   //función que quita los acentos, dieresis, Ñ....&lt;br /&gt;
    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
    $cadena = utf8_decode($cadena);&lt;br /&gt;
    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);&lt;br /&gt;
    $cadena = strtoupper($cadena);&lt;br /&gt;
    return utf8_encode($cadena);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 //$cadena = strtr(utf8_decode($cadena), utf8_decode($originales), $modificadas);   //Altra solució&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipus de Dades en PHP ==&lt;br /&gt;
&lt;br /&gt;
*'''Boolean'''&lt;br /&gt;
És un tipus de dades molt simple que pot representar un valor cert (TRUE) o fals (FALSE). Aquest tipus de dades s’utilitza molt en estructures de control. Si feu conversió de dades és molt important que tingueu en&lt;br /&gt;
compte que es considerarà fals el nombre enter, la cadena 0 o una cadena buida, una matriu buida, un objecte sense variables, el tipus NULL i els objectes SimpleXML que s’hagin creat d’etiquetes buides.&lt;br /&gt;
&lt;br /&gt;
*'''Integer'''&lt;br /&gt;
Aquest tipus representa nombres no fraccionables per sota de la unitat. Poden ser positius i negatius. Aquests nombres enters els podeu representar en notació decimal, hexadecimal o octal. La plataforma sobre la&lt;br /&gt;
qual treballeu determinarà la mida de les variables enteres. El PHP forçarà un canvi de tipus a flotant si es produeix un desbordament, tant si és positiu com negatiu. A continuació, es mostren dos exemples de variables enteres.&lt;br /&gt;
&lt;br /&gt;
*'''float'''&lt;br /&gt;
Aquest tipus fa referència als nombres de coma flotant, i normalment treballa amb una precisió aproximada de catorze dígits decimals. A continuació, es mostra un exemple d’una variable amb coma flotant.&lt;br /&gt;
&lt;br /&gt;
*'''String'''&lt;br /&gt;
Es tracta d’una cadena de caràcters. El llenguatge del PHP no imposa un límit a la mida d’aquestes cadenes; ara bé, no oblideu que el límit el marcarà la memòria del maquinari en què estigui funcionant el PHP. Aquí&lt;br /&gt;
teniu diversos exemples de cadenes.&lt;br /&gt;
&lt;br /&gt;
*'''array'''&lt;br /&gt;
un array és una matriu, d’una dimensió o més, que conté dades que s’associen segons unes claus. És un tipus molt útil, i comprovareu que el seu ús té una gran potència. Per crear una matriu podeu utilitzar la paraula&lt;br /&gt;
reservada ''array()'' o bé acompanyar el nom de la variable amb ''[ ]''.&lt;br /&gt;
&lt;br /&gt;
*'''object'''&lt;br /&gt;
aquest tipus d’objecte està previst en el llenguatge PHP perquè suporta el llenguatge orientat a objectes. Un objecte és un ítem amb unes característiques i funcionalitats marcades per la classe a la qual pertany. Per crear un objecte cal utilitzar la partícula ''new''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//tipus boolean:&lt;br /&gt;
$sortir=FALSE;&lt;br /&gt;
$entrar=TRUE;&lt;br /&gt;
&lt;br /&gt;
//tipus integer:&lt;br /&gt;
$positiu=3451;&lt;br /&gt;
$negatiu= − 4345&lt;br /&gt;
&lt;br /&gt;
//tipus float:&lt;br /&gt;
$amb_coma=34.5;&lt;br /&gt;
&lt;br /&gt;
//tipus string:&lt;br /&gt;
$nom=’Wayan’;&lt;br /&gt;
$salutacio=&amp;quot;Hola $nom!&amp;quot;;&lt;br /&gt;
echo $salutacio.&amp;quot; Benvingut&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus array:&lt;br /&gt;
$grau_cicles=array(&amp;quot;superior&amp;quot;,&amp;quot;mitja&amp;quot;);&lt;br /&gt;
$families[]=&amp;quot;Informàtica&amp;quot;;&lt;br /&gt;
$families[]=&amp;quot;Electrònica&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus objecte:&lt;br /&gt;
class Alumne {&lt;br /&gt;
public function matricular($nom)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Ja estàs matriculat $nom&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$alumne1=new Alumne();&lt;br /&gt;
$alumne1−&amp;gt;matricular(’Made’);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Creació Classes/ OBJECTES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Coche&lt;br /&gt;
{&lt;br /&gt;
	static $numruedas = 4;&lt;br /&gt;
	var $color;&lt;br /&gt;
	var $posx;&lt;br /&gt;
	var $posy;&lt;br /&gt;
	var $velocidad;&lt;br /&gt;
	function __construct($color, $posx, $posy)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;color = $color;&lt;br /&gt;
		$this-&amp;gt;posx = $posx;&lt;br /&gt;
		$this-&amp;gt;posy = $posy;&lt;br /&gt;
		$this-&amp;gt;velocidad = 0;&lt;br /&gt;
	}&lt;br /&gt;
	function mover($x, $y)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;posx = $x;&lt;br /&gt;
		$this-&amp;gt;posy = $y;&lt;br /&gt;
	}&lt;br /&gt;
	function acelerar()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;velocidad = $this-&amp;gt;velocidad + 10;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
	function frenar()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;velocidad &amp;gt; 10)&lt;br /&gt;
			$this-&amp;gt;velocidad = $this-&amp;gt;velocidad - 10;&lt;br /&gt;
		else&lt;br /&gt;
			$this-&amp;gt;velocidad = 0;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$car = new Coche(&amp;quot;verde&amp;quot;,10,10);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les dades especials ===&lt;br /&gt;
*'''resource'''&lt;br /&gt;
La variable que pertany a aquest tipus farà referència a un recurs extern. Determinades funcions faran ús d’aquest recurs. Per exemple, la funció mysql_db_query, que té la funció d’enviar una petició mySQL, retorna un tipus resource. En l’exemple següent la variable $resultat és de tipus resource:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query=&amp;quot;SELECT * FROM alumnes&amp;quot;;&lt;br /&gt;
$resultat=mysql_query($query);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''NULL'''&lt;br /&gt;
Quan necessiteu una variable que no tingui cap valor haureu d’utilitzar aquest tipus.&lt;br /&gt;
&lt;br /&gt;
===Els pseudotipus===&lt;br /&gt;
* '''mixed''': aquest pseudotipus indica que la variable en questió pot emmagatzemar múltiples tipus.&lt;br /&gt;
* '''number''': indica que la variable pot contenir un valor enter o de coma flotant.&lt;br /&gt;
* '''callback''': utilitzareu aquest pseudotipus per emmagatzemar crides de retorn generades per funcions de l’usuari.&lt;br /&gt;
&lt;br /&gt;
=== Conversions de tipus ===&lt;br /&gt;
&lt;br /&gt;
Per forçar un canvi de tipus haureu d’especificar entre parèntesis el tipus al qual voleu fer la conversió i col·locar-lo davant la variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Senténcia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Modelat a &lt;br /&gt;
|-&lt;br /&gt;
| (integer), (int) ||integer.&lt;br /&gt;
|-&lt;br /&gt;
| (boolean)||boolean&lt;br /&gt;
|-&lt;br /&gt;
| (float), (double), (real) ||float&lt;br /&gt;
|-&lt;br /&gt;
| (string) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (binary) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (array)||array&lt;br /&gt;
|-&lt;br /&gt;
| (object)|| object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Sense modelar 27/5: &amp;quot;.(27/5).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;I ara ja modelat: &amp;quot;.(integer)(27/5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants===&lt;br /&gt;
Una constant és un identificador (nom) per expressar un valor simple. Com el nom suggereix, aquest valor no pot variar durant l'execució del script. (A excepció de les [[http://php.net/manual/es/language.constants.predefined.php constants màgiques]], que en realitat no són constants). Una constant és sensible a majúscules per defecte. Per convenció, els identificadors de constants sempre solen declarar-se en majúscules.&lt;br /&gt;
&lt;br /&gt;
El nom d'una constant segueix les mateixes regles que qualsevol altra etiqueta de PHP. Un nom de constant vàlid comença per una lletra o subguió, seguit per qualsevol nombre o lletres, nombres o subguions. Usant una expressió regular, es representaria de la següent manera: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('MIN_VALUE', '0.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
define('MAX_VALUE', '1.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
echo MIN_VALUE;&lt;br /&gt;
//const MIN_VALUE = 0.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
//const MAX_VALUE = 1.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
class Exemple1&lt;br /&gt;
{&lt;br /&gt;
  //define('MIN_VALUE', '0.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
  //define('MAX_VALUE', '1.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  const MIN_VALUE = 0.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
  const MAX_VALUE = 1.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  public static function getMinValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MIN_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static function getMaxValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MAX_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo Exemple1::getMinValue();   //invocamos clase &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Cuál es la diferencia entre $this y self:: ?'''&lt;br /&gt;
&lt;br /&gt;
Uno usa $this para referenciar al objeto actual, y se utiliza self:: para referenciar la clase actual. Se utiliza $this-&amp;gt;nombre para nombres no estáticos y se utiliza self::nombres para nombres estáticos.&lt;br /&gt;
&lt;br /&gt;
=== Variables predefinides ===&lt;br /&gt;
&lt;br /&gt;
En PHP hi ha una sèrie de variables predefinides que resulten de gran ajuda per al programador. Dins d’aquestes variables predefinides cal destacar un gran grup, el grup de les anomenades superglobals.&lt;br /&gt;
&lt;br /&gt;
Les variables '''superglobals''' són variables que sempre estan disponibles en tots els àmbits.&lt;br /&gt;
&lt;br /&gt;
*'''$GLOBALS''':fa referència a totes les variables disponibles en l’àmbit global. Es tracta d’una variable de tipus matriu associativa.&lt;br /&gt;
En l’exemple següent es recorre la variable superglobal $GLOBALS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$una_variable=&amp;quot;Hola&amp;quot;;&lt;br /&gt;
$una_altra_variable=&amp;quot;Com va?&amp;quot;;&lt;br /&gt;
foreach ($GLOBALS as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;GLOBALS[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_SERVER''':ofereix informació molt últil sobre el servidor i l’entorn d’execució. Els valors que emmagatzema són generats pel navegador web.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*Executeu-lo i veureu un seguit de dades&lt;br /&gt;
referents a la màquina que fa de servidor del PHP. Entre altres coses, identificareu&lt;br /&gt;
el nom de la màquina, la versió del navegador, la versió del servidor web, la&lt;br /&gt;
ubicació de fitxers importants i un llarg etcètera.*/&lt;br /&gt;
&lt;br /&gt;
foreach ($_SERVER as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;SERVER[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_GET''': correspon a la variable GET del protocol HTTP. Emmagatzema els valors de les variables que es trasmeten per mitjà del protocol HTTP mitjançant el mètode GET. El seu ús és molt normal en formularis.&lt;br /&gt;
&lt;br /&gt;
*'''$_POST''': correspon a la variable POST del protocol HTTP. Emmagatzema els valors de les variables que es transmeten per mitjà del protocol HTTP mitjançant el mètode POST. El seu ús és, generalment, més adequat que el mètode GET per a temes de seguretat.&lt;br /&gt;
&lt;br /&gt;
*'''$_COOKIE''': és una variable de tipus matriu associativa que emmagatzemarà les variables passades a l’script per mitjà de les galetes de l’HTML.&lt;br /&gt;
&lt;br /&gt;
*'''$_REQUEST''': és una matriu associativa que conté les dades de $_GET ,$_POST i $_COOKIE.&lt;br /&gt;
&lt;br /&gt;
*'''$_FILES''': aquesta variable s’utilitza en la càrrega de fitxers per mitjà del protocol HTTP. El mètode utilitzat és el POST.&lt;br /&gt;
&lt;br /&gt;
*'''$_SESSION''': conté les variables de sessió disponibles en l’script actual.&lt;br /&gt;
&lt;br /&gt;
*'''$_ENV''': conté les variables d’entorn.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Detecció del Navegador ===&lt;br /&gt;
Escriu un script en PHP que detecti el navegador que està utilitzant el client que ha demanat la pàgina.&lt;br /&gt;
&lt;br /&gt;
[[:solució_detecció_navegador_php]]&lt;br /&gt;
&lt;br /&gt;
=== Variables estàtiques ===&lt;br /&gt;
Les variables estàtiques sempre mantenen el valor encara que el programa abandoni l’àmbit de la variable, i existeixen només en l’àmbit local de les funcions. No s’hi pot accedir fora d’aquest àmbit.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function comptador()&lt;br /&gt;
{&lt;br /&gt;
   $a = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador: &amp;quot;.$a.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $a++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function comptadorEstatic()&lt;br /&gt;
{&lt;br /&gt;
   static $b = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador estàtic: &amp;quot;.$b.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $b++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for($i=0;$i&amp;lt;3;$i++)&lt;br /&gt;
{&lt;br /&gt;
   comptador();&lt;br /&gt;
   comptadorEstatic();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integració PHP ==&lt;br /&gt;
&lt;br /&gt;
Normalment trobareu el llenguatge de programació PHP dins d’altres llenguatges.&lt;br /&gt;
El més usual és escriure codi en PHP dins de codi HTML.&lt;br /&gt;
&lt;br /&gt;
Heu de recordar que el codi PHP és interpretat pel servidor, i els resultats es mostren en el navegador que utilitzeu. La simbiosi que es crea entre el PHP i l’HTML permet al PHP generar HTML i a l’HTML passar dades al PHP.&lt;br /&gt;
&lt;br /&gt;
=== PHP dintre de PHP ===&lt;br /&gt;
&lt;br /&gt;
==== Include vs Require ====&lt;br /&gt;
És possible inserir el contingut d'un fitxer PHP en un altre arxiu PHP (abans que el servidor l'executi), amb la declaració d'incloure o requerir. Les sentències d'inclusió i requereixen són idèntics , excepte en cas de fallada :&lt;br /&gt;
&lt;br /&gt;
*'''requerir''' (require) produirà un error fatal ( E_COMPILE_ERROR ) i aturar la seqüència de comandaments&lt;br /&gt;
*'''inclou''' (include) només produirà una advertència ( E_WARNING ) i el guió seguirà&lt;br /&gt;
&lt;br /&gt;
Per tant, si voleu que l'execució continuï mostrant als usuaris la sortida, fins i tot si el fitxer d'inclusió falta, utilitzeu la instrucció d'inclusió. Altrament, en cas de FrameWork, CMS, o amb aplicacions PHP complexes, sempre utilitzeu la instrucció que requereix el fitxer per a poder continuar l'execució. Això ajudarà a evitar posar en perill la seguretat i la integritat de l'aplicació, per si de cas un arxiu clau falta accidentalment.&lt;br /&gt;
&lt;br /&gt;
Inclusió d'arxius estalvia molta feina. Això significa que pots crear una capçalera, peu de pàgina o arxiu de menú estàndard per a totes les pàgines web. Llavors, quan la capçalera ha de ser actualitzada, només s'ha d'actualitzar la capçalera inclouen l'arxiu.&lt;br /&gt;
&lt;br /&gt;
'''Sintaxi'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include 'filename.php';&lt;br /&gt;
&lt;br /&gt;
//or&lt;br /&gt;
&lt;br /&gt;
require 'Otherfilename.php';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Include_once vs Require_once ====&lt;br /&gt;
Require_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a require.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Include_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a include.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redireccions ====&lt;br /&gt;
* Son sentencies on s'envia al navegador una nova pàgina. La pàgina que tenia el navegador desapareix i apareix una nova pàgina, la que està definida al location: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
header(&amp;quot;location: novapàgina.php&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici PHP amb cap i peus ===&lt;br /&gt;
&lt;br /&gt;
L’objectiu d’aquesta activitat és mostrar el funcionament de la inclusió d’arxius a PHP. Fer servir includes us permet simplificar el codi de les pàgines. Per exemple, podeu afegir un fitxer de capçalera (cap.php) i un de peu (peu.php) amb els continguts comuns de totes les pàgines del vostre lloc (el bàner, el menú, la informació general). Senzillament incloent aquests fitxers a totes les pàgines, podeu aconseguir una estètica comú. Si heu de canviar en algun moment la capçalera, modificant l’arxiu cap.php ho tindreu modificat a totes les pàgines del web.&lt;br /&gt;
Feu una pàgina web amb continguts estructurats amb dos fitxers: cap.php i peu.php&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
[[:solucio_cap_peus_php]]&lt;br /&gt;
&lt;br /&gt;
[[:solucio_cap_peus_php2]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP i Formularis HTML ===&lt;br /&gt;
El formulari electrònic és una eina molt potent fortament establida a Internet. Permet l’intercanvi o la introducció de dades entre usuaris d’una manera ràpida i senzilla. Un formulari permet la interactivitat i és el detonant que converteix Internet en l’eina més poderosa per enviar informació a un destinatari.&lt;br /&gt;
&lt;br /&gt;
El llenguatge PHP representa un salt qualitatiu enorme en l’ús de formularis. L’HTML no és un llenguatge creat pensant a utilitzar formularis, sinó que es va crear amb altres objectius. El llenguatge PHP té un gran potencial en la gestió de dades; per tant, quan HTML i PHP treballen juntament amb formularis ens trobem amb un binomi ideal.&lt;br /&gt;
&lt;br /&gt;
====Preparació de l’HTML====&lt;br /&gt;
El llenguatge HTML mostrarà la façana que l’usuari veurà a la pantalla del navegador. El PHP serà darrere d’aquesta primera pantalla i treballarà amb les dades.&lt;br /&gt;
El primer que cal programar per fer servir un formulari dissenyat en PHP és crear&lt;br /&gt;
el codi HTML. Un formulari en HTML s’emmarca entre les etiquetes &amp;lt;FORM&amp;gt; i &amp;lt;/FORM&amp;gt;. Per manipular aquest formulari s’utilitza l’atribut ''ACTION''.&lt;br /&gt;
L’atribut ''ACTION'' indica el programa que s’encarrega de manipular les dades, tasca que encomanareu a un codi dissenyat en llenguatge PHP.&lt;br /&gt;
L’etiqueta &amp;lt;form&amp;gt; us permet fer servir dos mètodes per enviar informació: '''GET''' i '''POST'''.&lt;br /&gt;
El mètode '''GET''' és molt útil en motors de cerca, però no ofereix gaire seguretat, ja que les dades que envia es poden veure en l’URL del navegador.&lt;br /&gt;
El mètode '''POST''' és molt més segur, ja que quan el servidor detecta que el mètode de transacció d’informació és '''POST''' espera rebre dades immediatament sense fer servir l’URL, la qual cosa implica que aquestes dades no seran visibles en l’URL.&lt;br /&gt;
Exemple de Formulari:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;El nostre primer exemple amb formularis&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Introdueix el teu nom i prem el botó!&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;FORM ACTION=&amp;quot;contesta.php&amp;quot; METHOD=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Si us plau, escriu el teu nom:&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;INPUT TYPE=&amp;quot;submit&amp;quot; VALUE=&amp;quot;Enviar&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/FORM&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Com valora el PHP un formulari ====&lt;br /&gt;
En el moment d’enviar les dades des del formulari d’una pàgina HTML a un fitxer escrit en PHP s’ha de tenir en compte que l’atribut ''NAME'' emmagatzema el valor.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Resposta a la petició de dades&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;...Continuem amb l’exemple!&amp;lt;/H1&amp;gt;&lt;br /&gt;
El teu nom és:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_POST['nom'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En el moment en què s’envien dades del formulari HTML cap a un fitxer PHP, aquestes dades apareixeran dins d’un array superglobal amb tots els seus valors.&lt;br /&gt;
&lt;br /&gt;
=== Exercici Mini Calculadora ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar una calculadora de sólo SUMA, para ello tendremos dos inputs y un botón, cuando se aprete el botón deberá enviar enviar el formulario al server haciendo la operación y mostrándola.&lt;br /&gt;
 &lt;br /&gt;
=== Exercici Formulari amb Vectors ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar un formulario en el servidor que genere 10 inputs y un botón, a continuación el servidor recogerá todos los datos los mostrará y calculará la suma total. &lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
:[[solu_vector_input]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Les matrius associatives i els formularis====&lt;br /&gt;
Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu ús, però, serà condicionat pel mètode utilitzat en el pas de dades en el codi HTML. Així, si en el codi HTMLel mètode és '''POST''' haureu de fer servir la matriu associativa '''$_POST'''; en canvi, si heu fet servir el mètode '''GET''' en el codi HTML, haureu de fer servir la matriu associativa '''$_GET'''.&lt;br /&gt;
&lt;br /&gt;
Per accedir als valors emmagatzemats en les matrius associatives fareu servir l’atribut corresponent '''NAME''' de l’HTML com a índex de la matriu associativa. &lt;br /&gt;
&lt;br /&gt;
No heu d’oblidar que el PHP és un llenguatge de programació que, entre altres coses, us permet utilitzar bucles. En el formulari següent es defineix una selecció múltiple, en què podreu marcar els navegadors que coneixeu.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Un exemple amb un formulari&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;seleccioMultiple.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Nom: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Correu electrònic: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Navegadors que coneixes: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;select name=&amp;quot;navegadors[]&amp;quot; multiple&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Chrome&amp;quot;&amp;gt;Chrome&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;MozillaFirefox&amp;quot;&amp;gt;Mozilla Firefox&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Safari&amp;quot;&amp;gt;Safari&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Opera&amp;quot;&amp;gt;Opera&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Lynx&amp;quot;&amp;gt;Lynx&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquí us trobareu amb un petit problema. Per recuperar els valors introduïts com a nom i correu electrònic no hi ha cap problema, la matriu $_POST us permetrà un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecció múltiple, però, sorgeix un petit problema. A diferència dels casos anteriors, ara navegadors pot contenir més d’un valor, com ho fareu per mostrar tots els valors per pantalla? La solució és utilitzar un bucle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach ($_POST['navegadors'] as $opcio)&lt;br /&gt;
echo $opcio.&amp;quot;\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un altre exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ($_POST) {&lt;br /&gt;
    echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
    //echo htmlspecialchars(print_r($_POST, true));&lt;br /&gt;
    print_r($_POST);&lt;br /&gt;
    print_r($_POST['personal']);&lt;br /&gt;
    print_r($_POST['personal']['nombre']);&lt;br /&gt;
    echo '&amp;lt;/pre&amp;gt;';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
    Nombre:  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[nombre]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Email:   &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[email]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Cerveza: &amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;select multiple name=&amp;quot;cerveza[]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;warthog&amp;quot;&amp;gt;Warthog&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;guinness&amp;quot;&amp;gt;Guinness&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;stuttgarter&amp;quot;&amp;gt;Stuttgarter Schwabenbräu&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;¡enviarme!&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode GET ===&lt;br /&gt;
*El mètode GET produeix una cadena llarga que apareix en els logs del servidor i a la URL del navegador.&lt;br /&gt;
&lt;br /&gt;
*GET envia les dades usant la URL&lt;br /&gt;
&lt;br /&gt;
*El mètode GET es limita a enviar fins a només 1.024 caràcters .&lt;br /&gt;
&lt;br /&gt;
*Mai utilitzeu el mètode GET, si voleu enviar la contrasenya o una altra informació confidencial al servidor .&lt;br /&gt;
&lt;br /&gt;
*GET no pot ser utilitzat per enviar dades binàries, com imatges o documents de text, al servidor .&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode GET es pot accedir mitjançant la variable d'entorn QUERY_STRING.&lt;br /&gt;
&lt;br /&gt;
*PHP proveeix la matriu associativa $_GET per accedeix a tota la informació que s'enviï mitjançant el mètode GET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$PHP_SELF = $_SERVER['PHP_SELF'];&lt;br /&gt;
echo $PHP_SELF ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if( isset($_GET[&amp;quot;name&amp;quot;])||  isset($_GET[&amp;quot;age&amp;quot;]) )&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_GET['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_GET['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt; method=&amp;quot;GET&amp;quot;&amp;gt;&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode POST ===&lt;br /&gt;
&lt;br /&gt;
*POST envía los datos de forma que no podemos verlos (en un segundo plano u &amp;quot;ocultos&amp;quot; al usuario).&lt;br /&gt;
&lt;br /&gt;
*El mètode POST no té cap restricció en la mida de les dades a enviar.&lt;br /&gt;
&lt;br /&gt;
*El mètode POST es pot utilitzar per enviar ASCII, així com dades binàries.&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode POST passa per la capçalera HTTP. La seguretat depèn de protocol HTTP. Mitjançant l'ús d'HTTP segur pots assegurar-te que la seva informació està segura .&lt;br /&gt;
&lt;br /&gt;
*El PHP proveeix de la matriu associativa $ _POST per accedeix a tota la informació enviada pel mètode POST.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(isset($_POST[&amp;quot;name&amp;quot;]) ||  isset($_POST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_POST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_POST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;   &amp;lt;!--&amp;lt;?php $_PHP_SELF ?&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== $_PHP_SELF ===&lt;br /&gt;
La variable $_PHP_SELF conté el nom del script PHP (pàgina php) el qual està executant.  ESTÁ DESFASADO USAR $_SERVER['PHP_SELF']&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(  isset($_REQUEST[&amp;quot;name&amp;quot;]) ||  isset($_REQUEST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_REQUEST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_REQUEST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo formulario POST ===&lt;br /&gt;
&lt;br /&gt;
Dissenyar una pàgina web simple amb php que demani a lusuari el preu de tres productes diferents en tres&lt;br /&gt;
establiments diferents. Exemple:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Form1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Un cop s'introdueixi aquesta&lt;br /&gt;
informació al formulari, s'ha de mostrar el resultat, dels tres preus introduïts i el preu mitjà del producte.&lt;br /&gt;
&lt;br /&gt;
  DATOS RECIBIDOS&lt;br /&gt;
  Precio Guitarra Martin D18 en Ubisa: 4.200 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Thomann 3.800 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Alfasonic 4.100 euros&lt;br /&gt;
&lt;br /&gt;
  El precio medio del producto es de 4.0333333333333 euros&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;PHP Calcula precios&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;form name=&amp;quot;formularioDatos&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;01-Formulari.php&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt; CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Ubisa, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Thomann, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio2&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Alfasoni, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio3&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;input value=&amp;quot;Calcular&amp;quot; type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
01-Formulari.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php //Ejemplo aprenderaprogramar.com&lt;br /&gt;
$precio1 = $_POST['precio1'];&lt;br /&gt;
$precio2 = $_POST['precio2'];&lt;br /&gt;
$precio3 = $_POST['precio3'];&lt;br /&gt;
$media = ($precio1+$precio2+$precio3)/3;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; DATOS RECIBIDOS&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Ubisa: &amp;quot;. $precio1. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Thomann &amp;quot;. $precio2. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Alfasonic &amp;quot;. $precio3. &amp;quot; euros &amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; El precio medio del producto es de &amp;quot;. $media. &amp;quot; euros&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Acceso a Ficheros ===&lt;br /&gt;
&lt;br /&gt;
'''Abrir y cerrar el descriptor de ficheros'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $fitxer = fopen(&amp;quot;datos.txt&amp;quot;,&amp;quot;a&amp;quot;);&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'r' 	Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero. &lt;br /&gt;
'w+' 	Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear. &lt;br /&gt;
'a+' 	Apertura para lectura y escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() no tiene efecto, las escrituras siempre son pospuestas. &lt;br /&gt;
&lt;br /&gt;
'''Escribir datos en un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  $fp = fopen('datos.txt', 'a');&lt;br /&gt;
    fwrite($fp, 'Julio');&lt;br /&gt;
    fwrite($fp, 'Noguera');&lt;br /&gt;
    fclose($fp);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Leer datos de un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 $fitxer=fopen(&amp;quot;datos.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while(!feof($fitxer)){&lt;br /&gt;
       $line = fgets($fitxer);&lt;br /&gt;
       echo $line;&lt;br /&gt;
    }&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más info&lt;br /&gt;
http://www.php.net/manual/es/function.fopen.php&lt;br /&gt;
http://www.php.net/manual/es/function.fgets.php&lt;br /&gt;
http://www.php.net/manual/es/function.fwrite.php&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Formulari Insti // Acceso a ficheros ===&lt;br /&gt;
&lt;br /&gt;
Se desea crear un formulario donde se introduzcan los campos de nombre, apellidos, dni, contraseña, cuando se clique el botón de enviar, el servidor debe recibir todos los parámetros de ese usuario y escribirlos en un fichero de texto (fopen/fwrite), el siguiente usuario que rellene el formulario escribirá a continuación, después debe listar todos los ficheros que tiene el servidor (system()/shell_exec).&lt;br /&gt;
&lt;br /&gt;
solució: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
if ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;) { &lt;br /&gt;
&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    $nombre = $_POST['nombre'];  //recibe los parámetros del formulario&lt;br /&gt;
    $apellido = $_POST['apellido'];&lt;br /&gt;
    $dni = $_POST['dni'];&lt;br /&gt;
    $pass = $_POST['pass'];&lt;br /&gt;
&lt;br /&gt;
    $file = fopen(&amp;quot;clase.txt&amp;quot;, &amp;quot;a&amp;quot;);    //crea un descriptor de fichero&lt;br /&gt;
    fwrite($file, ($nombre) . &amp;quot;,&amp;quot; . ($apellido) . &amp;quot;,&amp;quot; . ($dni) . &amp;quot;,&amp;quot; . ($pass) . &amp;quot;\n&amp;quot;);  //introduce datos dentro del fichero&lt;br /&gt;
    fclose($file);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    $usuarioEnSistema = system('cat clase.txt');     //ejecuta terminal linux&lt;br /&gt;
   //$usuario = shell_exec('cat clase.txt'');   // comando más antiguo&lt;br /&gt;
&lt;br /&gt;
    echo $usuarioEnSistema;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nombre&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;apellido&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dni&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;pass&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Exercici: Calculadora PHP ===&lt;br /&gt;
Crea un formulari amb un únic TextBox on s'indiqui les operacions matemàtiques a realitzar. Envia el contingut del TextBox amb el mètode POST i realitza les operacions. Imprimeix per pantalla el resultat.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Solucio_calculadora_m6]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ISSET ===&lt;br /&gt;
&lt;br /&gt;
isset -&amp;gt; Devuelve '''true''' si la variable existe y tiene un valor distinto de null, false de lo contrario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var_dump( isset($var) );   //isset() devuelve '''false''' por que $var no ha sido definida&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''false''' aunque la variable haya sido declarada pues su valor es NULL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var = &amp;quot;&amp;quot;;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''true'''. El valor ya no es nulo aunque esté vacío&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Y cuando deberías usar isset()?'''&lt;br /&gt;
&lt;br /&gt;
Siempre y cuando que quieras comprobar que la variable existe (variable inicializada), un ejemplo bueno sería si quieres saber si se ha mandado un formulario:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;campo1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if (isset($_POST['submit']) {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''isset(), is_null() y empty(): Diferencias y ejemplos de uso'''&lt;br /&gt;
&lt;br /&gt;
https://cybmeta.com/isset-is_null-y-empty-diferencias-y-ejemplos-de-uso&lt;br /&gt;
&lt;br /&gt;
https://es.stackoverflow.com/questions/32133/como-y-cuando-se-usan-isset-y-empty-correctamente&lt;br /&gt;
&lt;br /&gt;
=== Exercici enviament de dades ===&lt;br /&gt;
És popular el disseny d’un document web, en què el mateix document conté la part del formulari HTML i el codi PHP que agafa les dades i les processa. Aquest procediment pot resultar estrany en principi, ja que esteu esperant dos documents ben diferenciats. Així i tot val la pena que veieu aquesta forma de treballar i decidiu si us resulta útil o no. Per fer-ho, simplement heu de fusionar els dos documents (el que envia les dades i el que les rep) en un document únic HTML+PHP de dues parts amb la següent estructura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(primera vegada que s'entra al document)&lt;br /&gt;
{&lt;br /&gt;
crear formulari HTML i enviar-ho al propi document&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
rebre les dades a través de POST o GET&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Feu un document amb aquestes característiques que enviï les següents dades:&lt;br /&gt;
*nom&lt;br /&gt;
*cognom&lt;br /&gt;
*contrasenya&lt;br /&gt;
*si l’usuari és alumne o professor&lt;br /&gt;
*si l’usuari és actiu o no&lt;br /&gt;
*foto (únicament el nom del fitxer)&lt;br /&gt;
*edat (entre 18 i 99)&lt;br /&gt;
*comentaris&lt;br /&gt;
*un camp ocult amb el nom ocult i valor prova&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[:solucio_enviament_dades_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Galetes ===&lt;br /&gt;
Les galetes són uns fitxers de text que emmagatzemen informació a l’ordinador client referent a la visita d’un usuari a una pàgina web.&lt;br /&gt;
Les galetes no són un acte d’intromissió per part de la pàgina web visitada; simplement, són una font d’informació molt útil per augmentar l’eficiència en l’accés.&lt;br /&gt;
Les galetes tenen una mida màxima d’1K i caduquen, la qual cosa fa molt difícil que s’utilitzin amb fins malintencionats. A més, únicament pot consultar la galeta el web que l’ha dipositada, la informació que conté no és visible per a la resta de pàgines web.&lt;br /&gt;
&lt;br /&gt;
Un ús molt freqüent de les galetes és emmagatzemar un perfil d’usuari. Així s’aconsegueix que cada vegada que el mateix usuari accedeix a un web, aquest en conegui les preferències i li mostri directament els continguts més adequats.&lt;br /&gt;
&lt;br /&gt;
Les galetes ajuden els programadors a crear un entorn més adequat per a l’usuari visitant. Moltes pàgines web permeten canviar la mida del text, els colors de la pàgina, la disposició d’alguns continguts, etc. Una vegada l’usuari ha modificat al seu gust l’aspecte de la pàgina web, aquestes dades s’emmagatzemen per a la propera visita.&lt;br /&gt;
&lt;br /&gt;
Importante: las cookies se envían al cliente mediante encabezados HTTP. Como cualquier otro encabezado, las cookies se deben enviar antes que cualquier salida que genere la página (antes que &amp;lt;html&amp;gt;, &amp;lt;head&amp;gt; o un simple espacio en blanco). &lt;br /&gt;
&lt;br /&gt;
'''Funcions del PHP per treballar amb galetes'''&lt;br /&gt;
&lt;br /&gt;
La funció que s’utilitza en PHP per crear galetes és setcookie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
bool setcookie(string $nom [, string $valor [, int $caduca= 0[, string $ruta [, string $domini [, bool $seguretat= false [, bool $nomeshttp=false]]]]]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* $nom: és obligatori i indica el nom que donareu a la galeta, la resta de paràmetres són opcionals.&lt;br /&gt;
* $valor: és el valor que tindrà la galeta.&lt;br /&gt;
* $caduca: indica els segons que té de vida la galeta; si no s’indica res la galeta deixarà d’existir quan finalitzi la sessió de l’usuari.&lt;br /&gt;
* $ruta: indica on podeu trobar la galeta dins el servidor.&lt;br /&gt;
Si no ponemos la ruta (Path), la cookie sólo se puede usar en páginas que se encuentren en el mismo directorio que la página que la creó. Si queremos que se utilice en un directorio en concreto debemos añadir la ruta.&lt;br /&gt;
&lt;br /&gt;
//Cookie creada en el directorio /registro/login&lt;br /&gt;
&lt;br /&gt;
//Si queremos que las páginas del directorio raíz / puedan acceder a la cookie&lt;br /&gt;
&lt;br /&gt;
* $domini: marca el domini en què la galeta està disponible.&lt;br /&gt;
* $seguretat: tindrà el valor TRUE si voleu que la galeta només s’utilitzi en una connexió segura (conexió HTTPs), i FALSE (que és el valor per defecte), si no és necessari un cert grau de seguretat.&lt;br /&gt;
* $nomeshttp: si té per valor TRUE marcarà que la galeta solament és accessible si s’utilitza el protocol HTTP.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
setcookie(&amp;quot;nom&amp;quot;, &amp;quot;Maadiva&amp;quot;, 3600, &amp;quot;/&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El segon fitxer s’encarregarà de consultar a la matriu associativa '''$_COOKIE''' el valor de la galeta indicada, que en aquest cas seria nom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_COOKIE[&amp;quot;nom&amp;quot;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
setcookie(&amp;quot;valor&amp;quot;, 1, time() + 30);    //time() tiempo desde que se originó unix.&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);    //no muestra todas las cookies por temas de seguridad&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unset($_COOKIE[&amp;quot;valor&amp;quot;]);  //otra forma setcookie('valor', 1, expire);  // setcookie(&amp;quot;valor&amp;quot;, 1, time() - 30);&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Se desea que cuente el número de visitas que realiza un usuario al visitar la página; este contador conserva su valor durante un año aún a pesar de que un usuario cierre el navegador y tarde días en volver a visitar la página.&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_contador_galletas]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Les cookies us permeten desar informació al navegador que estarà disponible més endavant pel vostre web. Per exemple, podeu desar la configuració personal de l’usuari o la llengua en què ha escollit visitar el web. La propera vegada que l’usuari visiti el web, el vostre codi PHP podrà obtenir aquesta informació desada i presentar a l’usuari el web amb la seva configuració personal o la llengua escollida. És important destacar que les cookies queden desades al navegador de l’usuari i no al servidor web.&lt;br /&gt;
&lt;br /&gt;
Feu un web amb dos fitxers. El primer, index.php, s’encarregarà d’obtenir el nom de l’usuari i la llengua que vol fer servir per defecte entre una llista desplegable mitjançant un formulari. Enviarà aquestes dades a un altre fitxer, cookie.php, que desarà la informació a les cookies.&lt;br /&gt;
La propera vegada que l’usuari accedeixi a index.php el formulari estarà emplenat amb la informació desada la vegada anterior que va accedir-hi.&lt;br /&gt;
&lt;br /&gt;
sol&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[:solucio_galetes_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sessió ===&lt;br /&gt;
&lt;br /&gt;
Les variables de sessió són variables que estan disponibles en múltiples pàgines sense haver de fer servir pas de paràmetres. Les variables de sessió tenen un temps de vida limitat i s’emmagatzemen en el servidor.&lt;br /&gt;
&lt;br /&gt;
Podeu fer servir les variables de sessió per mantenir informació (l’anomenada informació de sessió) entre diferents pàgines. Per exemple,&lt;br /&gt;
el nom d’usuari o una selecció de productes que ja s’hagi fet.&lt;br /&gt;
&lt;br /&gt;
A continuació, estudiareu un exemple format per tres fitxers. El primer fitxer és un formulari senzill que demana a l’usuari un identificador i una contrasenya. Aquestes dades s’envien a un segon fitxer, anomenat exempleAutenticar.php, que crea les variables de sessió. Finalment, trobareu un tercer fitxer anomenat continuem.php, que recupera la informació emmagatzemada en les variables de sessió.&lt;br /&gt;
&lt;br /&gt;
Just a sota d’aquest text hi ha el fitxer del qual partireu. L’hem anomena exempleSessions.php, però el podeu anomenar d’una altra manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Exemple amb variables de sessió&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
&amp;lt;form action=&amp;quot;exempleAutenticar.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
Escriu el teu nom:&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;usuari&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Escriu la teva contrasenya:&lt;br /&gt;
&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;contrasenya&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia!&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tot seguit apareix el codi del fitxer exempleAutenticar.php. En aquest fitxer creareu i inicialitzareu les dues variables de sessió que utilitzareu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION['id_usuari']=$_REQUEST['usuari'];&lt;br /&gt;
$_SESSION['clau_acces']=$_REQUEST['contrasenya'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...continueu amb l’exemple de variables de sessió...&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
Ja s’han emmagatzemat les variables de sessió.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;continuem.php&amp;quot;&amp;gt;Vinga! Cap al final de l’exemple!&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixeu-vos que el primer que es fa és cridar la funció '''session_start()'''. És obligatori que inicieu la sessió abans de cap etiqueta HTML perquè tot funcioni correctament.&lt;br /&gt;
Amb $_REQUEST es recuperen els dos valors que s’han passat des del fitxer inicial, és a dir, usuari i contrasenya, i els heu d’emmagatzemar en dues variables de sessió creades a $_SESSION, que rebran el nom d’id_usuari i clau_acces.&lt;br /&gt;
$_REQUEST és un array associatiu global que per defecte té els continguts de $_GET, $_POST i $_COOKIE.&lt;br /&gt;
A part de crear les variables de sessió i donar-los valors trobareu un enllaç cap al tercer fitxer.&lt;br /&gt;
El codi del tercer fitxer, continuem.php, el teniu a continuació:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com que esteu treballant amb sessions, el primer que hauríeu de fer és llançar la sessió amb session_start(). A continuació, es recuperen els valors emmagatzemats en les dues variables de sessió.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eliminar sesión&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
unset($_SESSION['id_usuari']); // will delete just the name data&lt;br /&gt;
&lt;br /&gt;
//session_destroy(); // borrará todos los datos asociados a ese usuario. También $_SESSION = array(); &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index3.php&amp;quot;&amp;gt;Destruir Variables de sesion&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les sessions us permeten emmagatzemar dades que podran ser compartides entre les diferents pàgines del web. Aquestes dades, a diferència de les cookies, estan emmagatzemades al servidor i estan disponibles durant tot el temps que l’usuari està interactuant amb la pàgina (temps de sessió).&lt;br /&gt;
Alguns exemples de dades que solen guardar-se a les sessions és si l’usuari ha accedit al web mitjançant els valors usuari/contrasenya, o un carret de la compra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici Sessions ====&lt;br /&gt;
1. Feu una pàgina web que passi entre les seves pàgines el nom de l’usuari i una variable (cost) que s’anirà incrementant en 10 cada vegada que l’usuari passa entre les pàgines (podem pensar que aquesta variable representa el cost de les compres que ha fet fins ara l’usuari al web).&lt;br /&gt;
La sessió es tancarà quan l’usuari torni a la pàgina de login.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://codigosdeprogramacion.com/2016/12/20/sistema-de-usuarios-y-sesiones-en-php-y-mysql-1-login-sesiones-y-logout/&lt;br /&gt;
&lt;br /&gt;
http://velozityweb.com/blog/php/login-de-usuarios-y-creacion-de-sesiones-con-php-y-mysql/#sthash.XbMcrnTA.PSO2jYQ9.dpbs&lt;br /&gt;
&lt;br /&gt;
http://www.formacionwebonline.com/crear-sesiones-php-en-intranet/&lt;br /&gt;
&lt;br /&gt;
=== Exercici Moodle ===&lt;br /&gt;
&lt;br /&gt;
2.Se trata de la hacer un moodle, tenemos un formulario y almacenaremos una base de datos (simulada) en la que guardaremos en un archivo el usuario, contraseña y rol de un profe y un alumno. &lt;br /&gt;
Deberá de comprobar si está registrado, en caso de estarlo se crearán las cookies y variables de sesión(5 minutos para el alumnado y 10 para el profe), en caso de no acceder deberán redireccionarse al login.&lt;br /&gt;
Si se validan correctamente, deberá acceder al menu y mostrar la información si tiene rol de alumno (ROLE_ALUMNO) y otra diferente si es profesor(ROLE_ALUMNO). &lt;br /&gt;
También deberá existir un logout en caso de querer terminar la sesión. &lt;br /&gt;
$_SESSION['caduca']=time()+60; &lt;br /&gt;
&lt;br /&gt;
Solució Exercici Moodle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_moodle]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejercicio Carrito ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--http://evilnapsis.com/2016/10/30/ejemplo-de-carrito-de-compras-sencillo-con-php-y-mysql/--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici Complert ====&lt;br /&gt;
Exercici que engloba Galetes, Idioma, Login, Intranet amb Cap, Peus, Menu i contingut i Sessions.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[http://www.infomerce.es/moodle/mod/resource/view.php?id=11136 Exercici de Classe]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
=== Creació del Arbre XML ===&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xmlDoc = new DOMDocument();&lt;br /&gt;
$xmlDoc-&amp;gt;load(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
=== Obtenir un element del arbre ===&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recòrrer tots els elemens ===&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print $xmlDoc-&amp;gt;saveXML(); //imprimir toda la info&lt;br /&gt;
&lt;br /&gt;
// recorrer las etiquetas y los valores&lt;br /&gt;
$x = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
foreach ($x-&amp;gt;childNodes AS $item) {&lt;br /&gt;
  print $item-&amp;gt;nodeName . &amp;quot; = &amp;quot; . $item-&amp;gt;nodeValue . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//otra manera de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   //selecciona todas las etiquetas aula y muestra el contenido dentro de ellas&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
    echo $aula-&amp;gt;nodeName;&lt;br /&gt;
    echo $aula-&amp;gt;nodeValue, PHP_EOL;&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Otra forma de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   // otra forma de acceder&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
   echo $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)[0]-&amp;gt;nodeValue;   //equivale a -&amp;gt;item(0)&lt;br /&gt;
   echo  $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
   echo $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Afegir un nou element ===&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$auladom = $xmlDoc-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmlDoc-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmlDoc-&amp;gt;createElement(&amp;quot;XARXA_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmlDoc-&amp;gt;createElement(&amp;quot;MASK_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmlDoc-&amp;gt;createElement(&amp;quot;INIT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmlDoc-&amp;gt;createElement(&amp;quot;CURRENT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
&lt;br /&gt;
$root = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
=== Esborrar un element ===&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//borrar nodo&lt;br /&gt;
$xmlDoc = new DOMDocument;&lt;br /&gt;
$xmlDoc-&amp;gt;load('file.xml');   //cargamos fichero&lt;br /&gt;
&lt;br /&gt;
$aula = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
&lt;br /&gt;
// seleccionamos el nodo concreto 0 y lo eleminamos&lt;br /&gt;
$aulaSeleccionada = $aula-&amp;gt;getElementsByTagName('aula')-&amp;gt;item(0);&lt;br /&gt;
$aulaborrada = $aula-&amp;gt;removeChild($aulaSeleccionada);&lt;br /&gt;
&lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;); //guardamos cambios&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici crear XML'''&lt;br /&gt;
&lt;br /&gt;
Tenim un formulari i volem ficar dins del nostre xml noves dades, per tant, haurem de crear un formulari on introduirem les dades.&lt;br /&gt;
&lt;br /&gt;
= Bibliografia / Webgrafia =&lt;br /&gt;
*[http://php.net/manual/es/ Manual oficial de PHP]&lt;br /&gt;
*[http://www.codeacademy.com Introducció a PHP]&lt;br /&gt;
*David Sklar, Adam Trachtenberg, &amp;quot;PHP Cookbook, Third Edition&amp;quot;, O’Reilly Media Inc., 2014. ISBN 978-1-449-36375-8&lt;br /&gt;
*Eduard García Sacristán, Eduard Latorre Jarque, Montserrat Madridejos Mora, Raúl Velaz Mayo, &amp;quot;Llenguatges de guions de servidor&amp;quot;, IOC, 2014 &lt;br /&gt;
*[https://docs.google.com/presentation/d/1ZQgIsW4KCyIfH8NyiqH9ueanM83Ym7bjitaxyQKS0hs/edit#slide=id.i14 Llenguatges de programació del costat del servidor]&lt;br /&gt;
*[http://www.adelat.org/media/docum/nuke_publico/lenguajes_del_lado_servidor_o_cliente.html www.Adelat.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EMMAGATZEMAR I LLEGIR FITXERS ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = '{&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}'&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SERIALIZACIÓN ==&lt;br /&gt;
&lt;br /&gt;
En PHP existe una forma muy sencilla de almacenar o transmitir cualquier tipo de valor (excepto el tipo resource) en forma de una cadena seriada: la serialización.&lt;br /&gt;
&lt;br /&gt;
La serialización te permite, por ejemplo, guardar un objeto o array en una base de datos o transmitirlo entre aplicaciones remotas, para luego volver a convertirlo a su tipo y estructura original.&lt;br /&gt;
&lt;br /&gt;
Supongamos que tienes el siguiente array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arr = array(&lt;br /&gt;
  &amp;quot;fruta&amp;quot; =&amp;gt; &amp;quot;manzana&amp;quot;, &lt;br /&gt;
  &amp;quot;objeto&amp;quot; =&amp;gt; &amp;quot;bicicleta&amp;quot;, &lt;br /&gt;
  &amp;quot;animales&amp;quot; =&amp;gt; array(&lt;br /&gt;
             &amp;quot;perro&amp;quot;, &lt;br /&gt;
             &amp;quot;gato&amp;quot;, &lt;br /&gt;
             &amp;quot;caballo&amp;quot;) &lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si lo deseas guardar en una tabla de una base de datos, lo puedes serializar de esta forma:&lt;br /&gt;
&lt;br /&gt;
'''$string = serialize($arr);'''&lt;br /&gt;
&lt;br /&gt;
La función serialize devolverá un valor fácilmente almacenable o transmitible:&lt;br /&gt;
&lt;br /&gt;
''a:3:{s:5:&amp;quot;fruta&amp;quot;;s:7:&amp;quot;manzana&amp;quot;;s:6:&amp;quot;objeto&amp;quot;;s:9:&amp;quot;bicicleta&amp;quot;;s:8:&amp;quot;animales&amp;quot;;a:3: i:0;s:5:&amp;quot;perro&amp;quot;;i:1;s:4:&amp;quot;gato&amp;quot;;i:2;s:7:&amp;quot;caballo&amp;quot;;}}''&lt;br /&gt;
&lt;br /&gt;
Para recuperar el valor original en PHP a partir de la cadena seriada:&lt;br /&gt;
&lt;br /&gt;
'''$arr = unserialize($string);'''&lt;br /&gt;
&lt;br /&gt;
Un ejemplo del uso de la serialización la tenemos en la forma en que WordPress almacena información variada en algunas de sus tablas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Serializar'''&lt;br /&gt;
&lt;br /&gt;
http://www.cucuza.com/como-serializar-datos-en-php/&lt;br /&gt;
&lt;br /&gt;
==EXEMPLE CLASSE SERIALIZACIÓN==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Serializer {&lt;br /&gt;
&lt;br /&gt;
    private static $path = &amp;quot;./database/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    public static function save($obj, $id) {  //$obj es un JSON , $id es el nombre del archivo &lt;br /&gt;
&lt;br /&gt;
        $arr = serialize($obj);&lt;br /&gt;
        &lt;br /&gt;
        return file_put_contents(self::$path . $id, $arr);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static function restore($id) {&lt;br /&gt;
        &lt;br /&gt;
        if  (file_exists ( self::$path . $id ) ){&lt;br /&gt;
            &lt;br /&gt;
            $xmlString = file_get_contents(self::$path . $id);&lt;br /&gt;
            &lt;br /&gt;
            return unserialize($xmlString);  &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static function showIds(){&lt;br /&gt;
        &lt;br /&gt;
        return array_slice(scandir(self::$path),2);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//al ser una classe estàtica es pot invocar els mètodes de la següent forma, per exemple:&lt;br /&gt;
&lt;br /&gt;
Serializer::save(json,nom_arxiu);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crear un JSON desde PHP (json_encode)==&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crear un objeto en PHP con JSON (json_decode)==&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ENVIAR CORREOS ==&lt;br /&gt;
&lt;br /&gt;
Mediente la función MAIL() de PHP podemos enviar correos, por ello, nuestro servidor deberá tener instalado el servicio.&lt;br /&gt;
En nuestro caso, en nuestro Hosting-ng lo tenemos.&lt;br /&gt;
Existe otra función PHPMailer dónde contiene más opciones. https://github.com/PHPMailer/PHPMailer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Forma simple'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// El mensaje&lt;br /&gt;
$msg = &amp;quot;Estimado alumno de La Mercè\nEstas invitado a participar en  clase&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// usar wordwrap() si las lineas son más largas de 70 caracteres&lt;br /&gt;
$msg = wordwrap($msg,70);&lt;br /&gt;
&lt;br /&gt;
// Enviar mail&lt;br /&gt;
mail(&amp;quot;alguien@ejemplo.cat&amp;quot;,&amp;quot;Mi título&amp;quot;,$msg);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Más opciones'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    $to = &amp;quot;ejemploPrueba@ejemplo.com&amp;quot;;&lt;br /&gt;
    $subject = &amp;quot;Asunto&amp;quot;;&lt;br /&gt;
    $txt = &amp;quot;Estamos en clase de DAW&amp;quot;;&lt;br /&gt;
    $headers = &amp;quot;From: webmaster@example.com&amp;quot; . &amp;quot;\r\n&amp;quot; .&lt;br /&gt;
        &amp;quot;CC: somebodyelse@example.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    mail($to,$subject,$txt,$headers);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' En terminal '''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//también podemos hacerlo desde el terminal de linux en nuestro servidor&lt;br /&gt;
system('mail -t alguien@ejemplo.cat -s ALTA ALUMNOS INSTI &amp;lt;&amp;lt;&amp;lt; &amp;quot;El alumno&amp;quot;'.$nom.&amp;quot; &amp;quot;.$cognoms.&amp;quot; está en espera de darse de alta&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SUBIR FICHEROS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// En versiones de PHP anteriores a la 4.1.0, debería utilizarse $HTTP_POST_FILES en lugar&lt;br /&gt;
// de $_FILES.&lt;br /&gt;
&lt;br /&gt;
 //Directori de pujada. Permís d'escriptura i accés per a www-data&lt;br /&gt;
$dir_subida = './';  &lt;br /&gt;
 //Anexem la carpeta amb el nos del finder que ens puja&lt;br /&gt;
$fichero_subido = $dir_subida . basename($_FILES['file']['name']); //basename: muestra el nombre del fichero con la extensión&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Movem el fitxer temporal creat a /tmp a la ubicació o nom indicats&lt;br /&gt;
echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
if (move_uploaded_file($_FILES['file']['tmp_name'], $fichero_subido)) {    &lt;br /&gt;
    echo &amp;quot;El fichero es válido y se subió con éxito.\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;¡Posible ataque de subida de ficheros!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo 'Más información de depuración:';&lt;br /&gt;
print_r($_FILES);&lt;br /&gt;
&lt;br /&gt;
/*$_FILES['file']['name'] -- original name of the file on the client machine.&lt;br /&gt;
$_FILES['file']['type'] -- mime type of the file, provided by the browser&lt;br /&gt;
$_FILES['file']['size'] -- size (in bytes) of the uploaded file&lt;br /&gt;
$_FILES['file']['tmp_name'] -- temporary filename of the uploaded file, stored on the server&lt;br /&gt;
$_FILES['file']['error'] -- returns an error code, useful for debugging.&lt;br /&gt;
*/&lt;br /&gt;
print &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; SUBIR FICHEROS &amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;!-- El tipo de codificación de datos, enctype, DEBE especificarse como sigue --&amp;gt;&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- MAX_FILE_SIZE debe preceder al campo de entrada del fichero --&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;MAX_FILE_SIZE&amp;quot; value=&amp;quot;30000&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- El nombre del elemento de entrada determina el nombre en el array $_FILES --&amp;gt;&lt;br /&gt;
    Enviar este fichero: &amp;lt;input name=&amp;quot;fichero_usuario&amp;quot; type=&amp;quot;file&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar fichero&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EXERCICI:'''&lt;br /&gt;
&lt;br /&gt;
Es desitja desenvolupar un formulari on pugui ficar el nom d'usuari i a més pujar un fitxer. Deurà haver una pàgina que mostre tots el fitxers d'eixe Usuari i el nombre d'arxius.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDF ==&lt;br /&gt;
Podem també generar pdf's a FPDF http://www.fpdf.org/ , però es deurà baixar la llibreria primer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require('fpdf.php');&lt;br /&gt;
&lt;br /&gt;
class PDF extends FPDF&lt;br /&gt;
{&lt;br /&gt;
// Page header&lt;br /&gt;
function Header()&lt;br /&gt;
{&lt;br /&gt;
    // Logo&lt;br /&gt;
    $this-&amp;gt;Image('logo.png',10,6,30);&lt;br /&gt;
    // Arial bold 15&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','B',15);&lt;br /&gt;
    // Move to the right&lt;br /&gt;
    $this-&amp;gt;Cell(80);&lt;br /&gt;
    // Title&lt;br /&gt;
    $this-&amp;gt;Cell(30,10,'Title',1,0,'C');&lt;br /&gt;
    // Line break&lt;br /&gt;
    $this-&amp;gt;Ln(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Page footer&lt;br /&gt;
function Footer()&lt;br /&gt;
{&lt;br /&gt;
    // Position at 1.5 cm from bottom&lt;br /&gt;
    $this-&amp;gt;SetY(-15);&lt;br /&gt;
    // Arial italic 8&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','I',8);&lt;br /&gt;
    // Page number&lt;br /&gt;
    $this-&amp;gt;Cell(0,10,'Page '.$this-&amp;gt;PageNo().'/{nb}',0,0,'C');&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Instanciation of inherited class&lt;br /&gt;
$pdf = new PDF();&lt;br /&gt;
$pdf-&amp;gt;AliasNbPages();&lt;br /&gt;
$pdf-&amp;gt;AddPage();&lt;br /&gt;
$pdf-&amp;gt;SetFont('Times','',12);&lt;br /&gt;
for($i=1;$i&amp;lt;=40;$i++)&lt;br /&gt;
    $pdf-&amp;gt;Cell(0,10,'Printing line number '.$i,0,1);&lt;br /&gt;
$pdf-&amp;gt;Output();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= QR =&lt;br /&gt;
&lt;br /&gt;
També podem crear codis QR al nostre servidor, hi han moltes libreries tanta en PHP com en JS.&lt;br /&gt;
https://sourceforge.net/projects/phpqrcode/&lt;br /&gt;
&lt;br /&gt;
Es deurà baixar la llibreria i ficar la carpeta &amp;quot;phpqrcode&amp;quot; dins del nostre servidor, a més de introduir el següent codi. &lt;br /&gt;
//'''NOTA''': deureu donar-li permisos d'escriptura a la carpeta&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   // la llibreria s'ha descomprimit dins d'una carpeta anomenada &amp;quot;phpqrcode&amp;quot;&lt;br /&gt;
   include('phpqrcode/qrlib.php');&lt;br /&gt;
   &lt;br /&gt;
   QRcode::png('http://wikiserver.infomerce.es', 'imatgeqr.png');&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
   &amp;lt;img src=&amp;quot;imatgeqr.png&amp;quot; /&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici- Inventario'''&lt;br /&gt;
&lt;br /&gt;
Queremos crear un registro o inventario de los ordenadores, por ellos, queremos generar códigos QR que serán pegatinas para poner en cada uno de los ordenadores de las diferentes aulas, por ello crearemos un formulario donde introduciremos el aula y el ordenador, deben almacenarse en un variable de sesión (ya que no sabemos todavía conectarnos a BD) y cuando cliquemos mostrar deben de aparecer todas los códigos QR del aula.&lt;br /&gt;
También se desea guardarlo en pdf (mirar librerias) con el título y el aula y el codigo QR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CONECTAR CON LDAP o ACTIVE DIRECTORY ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class LDAP &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
      //Asigno variables para accesar al servidor LDAP&lt;br /&gt;
   private $conectar;&lt;br /&gt;
   private $host;&lt;br /&gt;
   private $user;&lt;br /&gt;
   private $pswd;&lt;br /&gt;
   private $dn;&lt;br /&gt;
   private $OU;&lt;br /&gt;
   private $DC;&lt;br /&gt;
   private $DC1;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   public function __construct($user,$password,$ou,$dc,$dc1)&lt;br /&gt;
   {&lt;br /&gt;
    $this-&amp;gt;host= &amp;quot;172.16.208.174&amp;quot;;&lt;br /&gt;
    $this-&amp;gt;user = $user;&lt;br /&gt;
    $this-&amp;gt;pswd = $password;&lt;br /&gt;
    $this-&amp;gt;OU = $ou;&lt;br /&gt;
    $this-&amp;gt;DC = $dc;&lt;br /&gt;
    $this-&amp;gt;DC1 = $dc1;&lt;br /&gt;
    $this-&amp;gt;dn = &amp;quot;OU=&amp;quot;.$ou.&amp;quot;,DC=&amp;quot;.$dc.&amp;quot;,DC=&amp;quot;.$dc1.&amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function conexion()&lt;br /&gt;
   {&lt;br /&gt;
       $this-&amp;gt;conectar = ldap_connect($this-&amp;gt;host) or die(&amp;quot;Imposible Conectar&amp;quot;);&lt;br /&gt;
     // Especifico la versión del protocolo LDAP&lt;br /&gt;
    ldap_set_option($this-&amp;gt;conectar, LDAP_OPT_PROTOCOL_VERSION, 3)    or die (&amp;quot;Imposible asignar el Protocolo LDAP&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function credenciales(){&lt;br /&gt;
   // Valido las credenciales para accesar al servidor LDAP&lt;br /&gt;
    $bd = ldap_bind($this-&amp;gt;conectar, $this-&amp;gt;user, $this-&amp;gt;pswd)    or die (&amp;quot;Imposible Validar en el Servidor LDAP&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Especifico los parámetros que quiero que me regrese la consulta&lt;br /&gt;
    $attrs = array(&amp;quot;displayname&amp;quot;,&amp;quot;mail&amp;quot;,&amp;quot;samaccountname&amp;quot;,&amp;quot;telephonenumber&amp;quot;,&amp;quot;givenname&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
    // Creo el filtro para la busqueda&lt;br /&gt;
    $filter = &amp;quot;(samaccountname=&amp;quot;.$this-&amp;gt;user.&amp;quot;)&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    $search = ldap_search($this-&amp;gt;conectar, $this-&amp;gt;dn, $filter, $attrs)    or die (&amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    $entries = ldap_get_entries($this-&amp;gt;conectar, $search);&lt;br /&gt;
&lt;br /&gt;
    return $entries;&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17447</id>
		<title>NF2: Generació de documents web amb llenguatges de guions</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17447"/>
				<updated>2023-09-29T11:01:50Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introducció llenguatges de programació del costat Servidor =&lt;br /&gt;
&lt;br /&gt;
Existeix una multitud de llenguatges concebuts o no per a Internet. Cadascun d'ells explota més a fons certes característiques que ho fan més o menys útils per desenvolupar diferents aplicacions.&lt;br /&gt;
Un '''llenguatge del costat del servidor''' és aquell que '''s'executa en el servidor web, just abans que s'enviï la pàgina''' a través d'Internet al client. Les pàgines que s'executen en el servidor poden realitzar accessos a bases de dades, connexions en xarxa, i altres tasques per crear la pàgina final que veurà el client.&lt;br /&gt;
D'altra banda, els '''llenguatges de costat client''' (entre els quals no només es troba l'HTML sinó també el Java i el Javascript els quals són simplement inclosos en el codi HTML) són aquells que '''poden ser directament executats pel navegador i no necessiten un pretractament'''.&lt;br /&gt;
[[Fitxer:serverside.jpg|center]]&lt;br /&gt;
Els llenguatges de costat servidor més àmpliament utilitzats per al desenvolupament de pàgines dinàmiques són l'ASP, JSP, PERL i PHP.&lt;br /&gt;
== ASP.NET ==&lt;br /&gt;
Llenguatge comercialitzat per Microsoft, i usat per programadors per desenvolupar entre altres funcions, llocs web. ASP.NET és el successor de la tecnologia ASP, va ser llançada al mercat mitjançant una estratègia de mercat denominada .NET.&lt;br /&gt;
Es desenvolupat per resoldre les limitants que brindava el teu antecessor ASP. Per al desenvolupament d'ASP.NET es pot utilitzar C#, VB.NET o J#. Els arxius compten amb l'extensió (aspx). Per al seu funcionament de les pàgines es necessita tenir instal·lat IIS amb el Framework .Net. Microsft Windows 2003 inclou aquest framework, solament es necessitarà instal·lar-ho en versions anteriors.&lt;br /&gt;
El llenguatge ASP consisteix en una sèrie de classes .NET utilitzades per crear aplicacions Web, tant del costat client (Web Form) com del costat servidor (Web Service). La integració de nadiva .NET Framework amb el sistema operatiu Windows Server 2003 fa que la seva execució sigui més estable i ràpida que altres llenguatges de programació.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Completament orientat a objectes.&lt;br /&gt;
*Controls d'usuari i personalitzats.&lt;br /&gt;
*Divisió entre la capa d'aplicació o disseny i el codi.&lt;br /&gt;
*Facilita el manteniment de grans aplicacions.&lt;br /&gt;
*Increment de velocitat de resposta del servidor.&lt;br /&gt;
*Major velocitat.&lt;br /&gt;
*Major seguretat.&lt;br /&gt;
&lt;br /&gt;
'''Desavantatges: '''&lt;br /&gt;
*Major consum de recursos.&lt;br /&gt;
*Tecnologia propietària.&lt;br /&gt;
*Hostalatge de llocs web costosos.&lt;br /&gt;
&lt;br /&gt;
== JSP: Java Server Pages ==&lt;br /&gt;
És un llenguatge per a la creació de llocs web dinàmics, acrònim de Java Server Pages. Està orientat a desenvolupar pàgines web en Java. JSP és un llenguatge multiplataforma.&lt;br /&gt;
JSP va ser desenvolupat per Sun Microsystems. Comparteix avantatges similars a les d'ASP.NET, desenvolupat per a la creació d'aplicacions web potents. Posseeix un motor de pàgines basat en els servlets de Java. Per al seu funcionament es necessita tenir instal·lat un servidor Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Característiques'''&lt;br /&gt;
*Codi separat de la lògica del programa.&lt;br /&gt;
*Les pàgines són compilades en la primera petició.&lt;br /&gt;
*Permet separar la part dinàmica de l'estàtica a les pàgines web.&lt;br /&gt;
*Els arxius es troben amb l'extensió (jsp).&lt;br /&gt;
*El codi JSP pot ser incrustat en codi HTML.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Execució ràpida del servlets.&lt;br /&gt;
*Crear pàgines del costat del servidor.&lt;br /&gt;
*Multiplataforma.&lt;br /&gt;
*Codi ben estructurat.&lt;br /&gt;
*Integritat amb els mòduls de Java.&lt;br /&gt;
*La part dinàmica està escrita en Java.&lt;br /&gt;
== PERL (Practical Extraction and Report Language) ==&lt;br /&gt;
És un llenguatge de programació desenvolupat per Larry Wall (lwall at netlabs.com) inspirat en altres eines d'UNIX com són: sigueu, grep, awk, c-shell, per a l'administració de tasques pròpies de sistemes UNIX. No estableix cap filosofia de programació concreta. No es pot dir que sigui orientat a objectes, modular o estructurat encara que suporta directament tots aquests paradigmes; el seu punt fort són les labors de processament de textos i arxius. Llenguatge de programació basat en scripts portable a gairebé qualsevol plataforma. És molt utilitzat per escriure CGIs. Un dels seus elements més potents són les expressions regulars, que a partir de la seva versió en Perl han estat adoptades per altres llenguatges i plataformes com .NET o Javascript.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Es poden ajuntar diversos programes d'una forma senzilla per aconseguir una meta determinada. Els usuaris de Windows agrairan aquesta propietat ja que normalment emmalalteixen d'un bon llenguatge tipus “script”.&lt;br /&gt;
*És relativament ràpid per a un llenguatge tipus “script”.&lt;br /&gt;
*Està disponible en múltiples plataformes i sistemes operatius (UNIX, Linux i Windows). Un programa que s'escrigui tenint en compte la compatibilitat pot ser escrit en una plataforma i executat en una altra.&lt;br /&gt;
*Hi ha una col·lecció enorme de mòduls que poden ser incorporats a qualsevol “script” de Perl. Estan disponibles en el CPAN (“Comprehensive Perl Arxivi Network”). En particular existeix una extensió per a càlcul numèric denominada PDL.&lt;br /&gt;
*Perl és gratuït. Molt més que això, és “Programari Lliure”. Això vol dir que el codi font està disponible perquè qualsevol el pugui veure o modificar, i el que és més important, sempre ho estarà. Encara que mai pretenguis canviar el codi, és important disposar de la possibilitat de fer-ho, ja que sempre es podrà contractar a una tercera persona perquè ho modifiqui en el cas que hi hagi un error, i hauria de ser possible solucionar-ho.&lt;br /&gt;
*Li atorga al programador molta llibertat perquè faci el programa com vulgui. Tal com diu l'eslògan de Perl “Hi ha més d'una forma de fer-ho”&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
PHP és l'acrònim de Hipertext Preprocesor. És un llenguatge de programació del costat del servidor gratuït i independent de plataforma, ràpid, amb una gran llibreria de funcions i molta documentació. Va ser creat originalment en 1994 per Rasmus Lerdorf, però com PHP està desenvolupat en política de codi obert, al llarg de la seva història ha tingut moltes contribucions d'altres desenvolupadors.&lt;br /&gt;
El client solament rep una pàgina amb el codi HTML resultant de l'execució de la PHP. Com la pàgina resultant conté únicament codi HTML, és compatible amb tots els navegadors.&lt;br /&gt;
&lt;br /&gt;
https://luisjordan.net/node-js/node-js-vs-php-comparaciones-cms-beneficios-y-tiempos-de-respuesta/&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Molt fàcil d'aprendre.&lt;br /&gt;
*Es caracteritza per ser un llenguatge molt ràpid.&lt;br /&gt;
*Suporta en certa mesura l'orientació a objecte. Classes i herència.&lt;br /&gt;
*És un llenguatge multiplataforma: Linux, Windows, entre uns altres.&lt;br /&gt;
*Capacitat de connexió amb la majoria dels manejadores de base de dades: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre unes altres.&lt;br /&gt;
*Capacitat d'expandir el seu potencial utilitzant mòduls.&lt;br /&gt;
*Posseeix documentació a la seva pàgina oficial la qual inclou descripció i exemples de cadascuna de les seves funcions.&lt;br /&gt;
*És lliure, per la qual cosa es presenta com una alternativa de fàcil accés per a tots.&lt;br /&gt;
*Inclou gran quantitat de funcions.&lt;br /&gt;
*No requereix definició de tipus de variables ni maneig detallat del baix nivell.&lt;br /&gt;
&lt;br /&gt;
= Preparació de l'entorn =&lt;br /&gt;
== Instal·lació de servidors d'aplicacions Web ==&lt;br /&gt;
Internet s’ha convertit en la principal eina d’intercanvi d’informació a la societat actual. La connexió dels ordinadors a les xarxes locals i aquestes xarxes a d’altres de grans dimensions ha possibilitat la comunicació global d’informació entre els ordinadors arreu del món. Per poder oferir serveis web, els servidors han de tenir instal·lats una sèrie de serveis. El servidor web permet l’enviament de continguts a altres ordinadors a través de la xarxa. Els preprocessadors d’hipertext (com PHP) permeten crear continguts web de forma dinàmica. Els servidors de bases de dades permeten emmagatzemar informació de forma estructurada que es pot fer servir per generar contingut web. Aquests serveis han de ser instal·lats i configurats correctament abans de començar a crear el contingut web dinàmic del nostre web.&lt;br /&gt;
&lt;br /&gt;
Un '''servidor web''' és una peça de programari que respon a les peticions dels navegadors i lliura la pàgina per al navegador a través d’Internet. Quan es crida a una pàgina web per l’adreça –l’URL (uniform resource locator), per exemple, www.infomerce.es/index.html-, la comunicació entre el navegador i el servidor és possible gràcies a tres protocols:&lt;br /&gt;
* TCP(Transmission Control Protocol, protocol de control de transmissió): és el responsable de fer que el missatge arribi a la destinació sense errors.&lt;br /&gt;
* IP(Internet Protocol): és el responsable de fer que el missatge trobi el camí fins al servidor.&lt;br /&gt;
* HTTP(Hypertext Transfer Protocol, protocol de transferència d’hipertext): és el protocol que ha indicat l’usuari a l’hora de demanar el recurs al servidor. La primera part d’un recurs URL correspon al protocol que utilitzaran client i servidor per intercanviar dades.&lt;br /&gt;
== HTTP: comunicació entre servidor i client ==&lt;br /&gt;
Un cop establerta la connexió entra en joc el protocol HTTP: el navegador envia una petició al servidor en què sol·licita el recurs index.html. El servidor processa aquesta petició i retorna la pàgina sol·licitada al navegador, que interpreta les etiquetes HTML i la presenta a l’usuari.&lt;br /&gt;
[[Fitxer:peticiohttp.jpg|center]]&lt;br /&gt;
La informació que el client envia al servidor en la petició és la següent:&lt;br /&gt;
* El mètode HTTP: l’acció que s’ha de fer.&lt;br /&gt;
* El recurs a què s’ha d’accedir (una part de l’URL).&lt;br /&gt;
* La informació que l’usuari envia al servidor.&lt;br /&gt;
La informació que el servidor envia en la resposta té dues parts ben diferenciades: &lt;br /&gt;
* La capçalera: conté el codi que indica si la petició s’ha complert. També conté el tipus de contingut que enviarà al client.&lt;br /&gt;
* El contingut: (text, codi HTML, imatges, etc.) del recurs demanat.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Preparació M.V. amb Ubuntu i PHP ===&lt;br /&gt;
Es tracta d'importar una M.V. amb Ubuntu Server. Aquesta màquina virtual la utilitzarem al llarg del curs per desenvolupar programes amb el llenguatge PHP. LA M.V. ha de tenir les següents característiques:&lt;br /&gt;
*512 MB de Ram&lt;br /&gt;
*Targeta mode Pont (Has de reinicialitzar la @MAC i esborrar el fitxer: /etc/udev/rules.d/70-persistent-net.rules)&lt;br /&gt;
*Configura la @IP. &lt;br /&gt;
Instal·la el següent programari:&lt;br /&gt;
*openssh-server (per permetre comunicacions remotes)&lt;br /&gt;
*Servidor Web apache2&lt;br /&gt;
*Servidor PHP&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Primer projecte amb NetBeans ===&lt;br /&gt;
Crea un projecte PHP amb NetBeans. Fes que automàticament guardi tots els fitxers a la màquina virtual creada al apartat anterior. Crea una pàgina d'exemple i comprova que funciona.&lt;br /&gt;
La pàgina d'exemple pot ser la següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
     	&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;?php&lt;br /&gt;
            echo &amp;quot;Primera Pàgina amb PHP&amp;quot;; &lt;br /&gt;
          ?&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= El Llenguatge PHP =&lt;br /&gt;
== Introducció ==&lt;br /&gt;
'''PHP''' és un llenguatge de programació obert que s’integra directament en pàgines HTML. El seu ús ha esdevingut gairebé imprescindible en les pàgines que han d’utilitzar bases de dades o formularis.&lt;br /&gt;
Rasmus Lerdorf és el creador del llenguatge PHP. El 1995 presenta la primera edició d’aquest llenguatge amb el nom de Personal Home Page tools amb llicència pública GNU. Per crear el PHP, Rasmus utilitza el codi de programació C.&lt;br /&gt;
&lt;br /&gt;
El '''codi PHP''' que escriviu, '''l’haureu d’incrustar dins de codi HTML''', concretament dins les etiquetes \&amp;lt;body\&amp;gt; del document. Mitjançant unes marques l’HTML no interpretarà el codi PHP, el qual, i mitjançant les mateixes marques, s’executarà en el servidor.&lt;br /&gt;
&lt;br /&gt;
El codi PHP s’executa en un servidor i mostra el resultat en un client. Visualitzareu els resultats amb un navegador web.&lt;br /&gt;
&lt;br /&gt;
Quan arrenca el PHP es fa la lectura del fitxer '''php.ini'''. Aquest fitxer conté la configuració del PHP i es crea durant la instal·lació del PHP. És possible que necessiteu fer canvis en el fitxer de configuració, preneu la precaució de fer-ne una còpia de seguretat abans de fer aquestes modificacions.&lt;br /&gt;
Una inspecció visual del fitxer php.ini us servirà per comprendre’n el funcionament. Depenent del valor de les variables que conté aquest fitxer, el comportament del PHP variarà en la vostra màquina. Podeu comprovar que cada variable que forma part del fitxer està àmpliament comentada, amb comentaris que es marquen amb un punt i coma.&lt;br /&gt;
&lt;br /&gt;
== Mostrar Errors ==&lt;br /&gt;
Per mostrar els errors que fem al escriure programes en php s'ha d'especificar als fitxers que els vols veure per pantalla amb les següents sentències:&lt;br /&gt;
&lt;br /&gt;
http://www.anerbarrena.com/mostrar-errores-php-608/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* * ******************Errores******************* */&lt;br /&gt;
ini_set('display_errors', true);&lt;br /&gt;
error_reporting(E_ALL);&lt;br /&gt;
/* * ********************Usuarios****************** */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintaxi ==&lt;br /&gt;
=== Generalitats ===&lt;br /&gt;
La sintaxi d'un llenguatge de programació es defineix com el conjunt de regles que han de seguir-se en escriure el codi font dels programes per considerar-se com a correctes per a aquest llenguatge de programació.&lt;br /&gt;
Les normes bàsiques que defineixen la sintaxi de PHP són les següents:&lt;br /&gt;
*Si voleu que s’interpreti el vostre codi és imprescindible que encabiu el codi escrit en PHP entre dos delimitadors. Aquestes marques són &amp;lt;?php , que la fareu servir per indicar l’inici de codi en llenguatge PHP, i ?&amp;gt; , que utilitzareu per marcar el final del vostre codi PHP.&lt;br /&gt;
*Indicareu el final d’una instrucció amb punt i coma. Cada vegada que es detecti un punt i coma s’interpretarà el codi inserit fins a aquell punt.&lt;br /&gt;
*Els comentaris en PHP els podreu incloure mitjançant:&lt;br /&gt;
** Dues barres (//) o un coixinet (#) si voleu comentar una línia&lt;br /&gt;
** Una barra i un asterisc (/*) per indicar l’inici de comentari, i un asterisc i una barra per indicar el final de comentari si voleu comentar més d’una línia(/*).&lt;br /&gt;
*No es defineix el tipus de les variables: PHP és un llenguatge de programació que no obliga a declarar prèviament el nom de les variables que s’utilitzaran ni el seu tipus (és diu que és un llenguatge sense tipus o no tipat). Ara bé, tot i que existeixen els tipus de dades en PHP aquests no es comproven.&lt;br /&gt;
*No es distingeixen les majúscules i minúscules.&lt;br /&gt;
Exemples:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Aquí teniu una instrucció.&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;i aquí una altra instrucció.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Si voleu comentar una línia ho podeu fer d’aquesta manera...&lt;br /&gt;
#...o bé d’aquesta altra.&lt;br /&gt;
/* Però si necessiteu comentar&lt;br /&gt;
més línies aquesta és la millor&lt;br /&gt;
manera de fer − ho! */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Per representar una variable '''caldrà escriure el símbol del dòlar seguit pel nom que vulgueu posar'''. En el moment de donar nom a una variable heu de tenir en compte que es diferencien majúscules i minúscules i que haurà de començar amb una lletra o caràcter de subratllat.&lt;br /&gt;
En PHP, a diferència de molts altres llenguatges, no cal declarar una variable abans d’utilitzar-la. El símbol del dòlar és el que marca que es tracta d’una variable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$Nom='whovian';&lt;br /&gt;
$Familia='Informàtica';&lt;br /&gt;
$Cicle=&amp;quot;CFGS Desenvolupament d'aplicacions Web&amp;quot;;&lt;br /&gt;
$Modul = &amp;quot;DAW en entorn servidor&amp;quot;;&lt;br /&gt;
$Durada= 165;&lt;br /&gt;
echo &amp;quot;Hola $nom!&amp;lt;br&amp;gt;&lt;br /&gt;
Benvingut als estudis d’$Familia!!!&amp;lt;br&amp;gt;&lt;br /&gt;
Cicle: $Cicle&amp;lt;br&amp;gt;&lt;br /&gt;
Mòdul: $Modul&amp;lt;br&amp;gt;&lt;br /&gt;
Durada: $Durada hores&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com podeu veure, les variables poden adquirir qualsevol dels tipus suportats, i la variable $Durada emmagatzema l’enter 180, mentre que la resta de variables emmagatzemaran cadenes.&lt;br /&gt;
Les variables s’assignen per valor per defecte, però '''si voleu assignar un valor per referència''' ho haureu d’indicar fent servir el símbol''' &amp;amp; '''tot just davant de la variable&lt;br /&gt;
=== Àmbit de les variables ===&lt;br /&gt;
&lt;br /&gt;
Les variables tenen una vida determinada depenent d’on les declareu i com ho feu. És molt important conèixer l’àmbit de les variables per controlar els vostres codis. No comprendre aquesta part pot provocar fallades inesperades en les vostres creacions.&lt;br /&gt;
L’àmbit d’una variable és el context en què és definida.&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot declarar una variable nombroses vegades en àmbits diferents:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nom=’Nyoman’;&lt;br /&gt;
echo ’De moment $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
function canvi()&lt;br /&gt;
{&lt;br /&gt;
	$nom=’Ketut’;&lt;br /&gt;
	echo ’Però ara $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
canvi();&lt;br /&gt;
echo ’I de nou $nom torna a tenir el valor de ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadors ===&lt;br /&gt;
Permetran fer accions dins el codi. Podreu canviar i assignar valors, canviar l’adreça del codi, condicionar l’execució de blocs de codi i, en&lt;br /&gt;
definitiva, dotar de la complexitat necessària els vostres programes per aconseguir un objectiu.&lt;br /&gt;
Els operadors es poden agrupar en tres blocs segons el nombre de valors sobre els quals s’actua.&lt;br /&gt;
* L’operador '''unari''' opera sobre un valor i el que pot fer en aquest valor és negar-lo, incrementar-lo o decrementar-lo, entre altres coses.&lt;br /&gt;
* L’operador '''binari''' opera sobre dos valors i permet sumar-los, restar-los o comparar-los.&lt;br /&gt;
* L’operador '''ternari''' permet escollir entre dues expressions en funció d’una altra.&lt;br /&gt;
&lt;br /&gt;
'''Operadors Aritmètics '''&lt;br /&gt;
Teniu en compte que la divisió retornarà un valor en coma flotant si el resultat de la divisió no és exacte.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
|-$valor||Negació||Oposat de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor + $valorB ||Addició||Suma de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor - $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor * $valorB||Multiplicació||Producte de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor / $ valorB||Divisió||Quocient de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor % $valorB||Mòdul||Resta de $valor dividit per $valorB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors d'assignació '''&lt;br /&gt;
L’operador bàsic d’assignació és l’igual. Amb l’operador igual la variable de l’esquerra rep el valor de l’expressió de la dreta.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor = $valorB||Assignació||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor += $valorB||Addició i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor -= $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor.= “text”||Concatenació i Assignació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de bit '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp; $valorB||i||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor I $valorB||o i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor ˆ $valorB ||xor||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
|  ̃ $valor||Negació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;lt;$valorB ||Desplaçament a l’esquerra||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;&amp;gt;$valorB||Desplaçament a la dreta||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de comparació '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor == $valorB||Igual||TRUE si $valor és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor === $valorB||Idèntic||TRUE si $valor és igual a $valorB i són del mateix tipus.&lt;br /&gt;
|-&lt;br /&gt;
| $valor != $valorB ||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;gt; $ valorB||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor !== $valorB ||No idèntic||TRUE si $valor no és igual a $valorB o no són del mateix tipus&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt; $valorB||Més petit que||TRUE si $valor és més petit que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt; $valorB||Més gran que||TRUE si $valor és més gran que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;= $valorB||Més petit o igual que||TRUE si $valor és més petit o igual que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;= $valorB||Més gran o igual que||TRUE si $valor és més gran o igual que $valorB.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Operadors d’increment i decrement '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| ++$valor||Preincrement||Incrementa $valor una unitat, i després retorna $valor.&lt;br /&gt;
|-&lt;br /&gt;
| $valor++||Postincrement||Retorna $valor i incrementa $valor una unitat.&lt;br /&gt;
|-&lt;br /&gt;
| –$valor ||Predecrement||Decrementa $valor una unitat i retorna $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor–||Postdecrement||Retorna $valor i decrementa $valor una unitat.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de lògica '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor and valorB||i||TRUE si $valor i $valorB són TRUE&lt;br /&gt;
|-&lt;br /&gt;
| $valor or $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor xor $valorB ||xor||TRUE si $valor o $valorB són TRUE, però no tots dos alhora.&lt;br /&gt;
|-&lt;br /&gt;
| !$valor||No||Inverteix el contingut de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp;&amp;amp; $valorB ||i||TRUE si $valor i $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor II $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Els Vectors i les Matrius (Arrays) ===&lt;br /&gt;
Les matrius i els vectors són conjunts de dades que poden estar definides en un Guió de PHP. Les matrius poden contenir altres matrius dintre d'ells sense restricció (multidimensionals). &lt;br /&gt;
&lt;br /&gt;
Els vectors es poden crear de dues maneres. La primera consisteix en l'ús de la funció '''array()'''. La segona implica l'ús de claudàtors.&lt;br /&gt;
Exemple de declaracions d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$elmeuarray = array($valor1, $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
$elmeuarray[1] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//També es pot declarar de la següent manera:&lt;br /&gt;
$elmeuarray = array('mes1' =&amp;gt; $valor1, 'mes2' =&amp;gt; $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
$elmeuarray['mes2'] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//Però tambés es pot declarar directament amb claudàtors:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
//o amb la següent notació&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemples d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$array = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;type&amp;quot;=&amp;gt;&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;manufactured&amp;quot;=&amp;gt;&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2 = array(&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3 = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array['name']=&amp;quot;BMW&amp;quot;;&lt;br /&gt;
$array['type']=&amp;quot;SERIE 1&amp;quot;;&lt;br /&gt;
$array['colour']=&amp;quot;BLANCO&amp;quot;;&lt;br /&gt;
$array['manufactured']=&amp;quot;2035&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2[]=&amp;quot;AUDI&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;A5&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;ROJO&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;2038&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3['name']=&amp;quot;FERRARI&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;SPIDER&amp;quot;;&lt;br /&gt;
$array3['colour']=&amp;quot;VERDE&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;2013&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les matrius son vectors multidimensionals. Els elements d'un vector a la seva vegada poden ser un altre vector. Un exemple és el següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$cars = array(&lt;br /&gt;
   &amp;quot;car1&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Toyota&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;Green&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1999,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1998),&lt;br /&gt;
   &amp;quot;car2&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;BMW&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;RED&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 2005,&amp;quot;engine_cc&amp;quot; =&amp;gt; 2400),&lt;br /&gt;
   &amp;quot;car3&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Renault&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;White&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1993,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1395),&lt;br /&gt;
);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $cars['car1']['make'],&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo $cars['car3']['engine_cc'];&lt;br /&gt;
&lt;br /&gt;
/* El resultat de l'execució de les intruccions anteriors és:&lt;br /&gt;
Toyota&lt;br /&gt;
1395&lt;br /&gt;
*/&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Més informació sobre arrays [http://php.net/manual/en/language.types.array.php aquí.]&lt;br /&gt;
Existeixen MOLTES funcions per manipular els arrays. Dona una ullada a [http://php.net/manual/en/ref.array.php aquesta pàgina] abans que comencis a implementar funcions que ja existeixen a la llibreria de php.&lt;br /&gt;
&lt;br /&gt;
=== Estructures de control ===&lt;br /&gt;
==== La sentència '''IF''' i l'Operador Ternari ====&lt;br /&gt;
Les estructures condicionals s'utilitzen per controlar quines instruccions s'executen. Els condicionals en PHP estan estructurats de manera similar als trobats en C ++ i Java .&lt;br /&gt;
Exemple d'estructures condicionals:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//Exemple 1&lt;br /&gt;
$foo = 1;&lt;br /&gt;
$bar = 2;&lt;br /&gt;
if($foo == $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is equal to $bar.&amp;quot;;&lt;br /&gt;
} elseif ($foo &amp;gt; $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is greater than $bar.&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;$foo is less than $bar.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple 2&lt;br /&gt;
$lower = 10;&lt;br /&gt;
$upper = 100;&lt;br /&gt;
$needle = 25;&lt;br /&gt;
if(($needle &amp;gt;= $lower) &amp;amp;&amp;amp; ($needle &amp;lt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is in the haystack.&amp;quot;;&lt;br /&gt;
} elseif (($needle &amp;lt;= $lower) || ($needle &amp;gt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is outside of the haystack.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple Operador Ternari&lt;br /&gt;
&lt;br /&gt;
$missatge =  (date('G') &amp;lt; 12) ? 'Buenos días' : 'Buenas tardes';&lt;br /&gt;
&lt;br /&gt;
//equival a la següent estructura:&lt;br /&gt;
if (date('G') &amp;lt; 12) {&lt;br /&gt;
$missatge = 'Buenos días';&lt;br /&gt;
} else {&lt;br /&gt;
$missatge = 'Buenas tardes';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''SWITCH''' ====&lt;br /&gt;
Quan es necessita utilitzar un IF amb molts Else pot resultar que es vegi un codi molt redundant. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user_command == &amp;quot;n&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_north();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;e&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_east();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;s&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_south();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;w&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_west();&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  do_something_else();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per millorar la llegibilitat del codi utilitzarem l'estructura 'Switch' de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 switch($user_command)&lt;br /&gt;
 {&lt;br /&gt;
   case 'n':&lt;br /&gt;
     go_north();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'e':&lt;br /&gt;
     go_east();&lt;br /&gt;
     break;&lt;br /&gt;
   case 's':&lt;br /&gt;
     go_south();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'w':&lt;br /&gt;
     go_west();&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     do_something_else();&lt;br /&gt;
     break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Un altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($firstvariable == 'comparison1' &lt;br /&gt;
         || $firstvariable == 'comparison2')&lt;br /&gt;
 {&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
 }&lt;br /&gt;
 else if ($firstvariable == 'comparison3')&lt;br /&gt;
 {&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
      launchMissiles();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//amb l'estructura switch :&lt;br /&gt;
 switch($firstvariable)&lt;br /&gt;
 {&lt;br /&gt;
  case 'comparison1':&lt;br /&gt;
  case 'comparison2':&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  case 'comparison3':&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  default: &lt;br /&gt;
      launchMissiles();&lt;br /&gt;
      break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''WHILE''' ====&lt;br /&gt;
Aquesta sentència s'utilitzarà per repetir una serie d'instruccions tantes vegades com el condicional sigui evaluat a True.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$c = 0;&lt;br /&gt;
while ($c &amp;lt; 5) {&lt;br /&gt;
   echo $c++;&lt;br /&gt;
} ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mira el següent codi i enraona si serà un bucle infinit o no:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$c = 1;&lt;br /&gt;
$myName=&amp;quot;Fred&amp;quot;;&lt;br /&gt;
while ($myName != &amp;quot;Rumplestilskin&amp;quot;) &lt;br /&gt;
{&lt;br /&gt;
   if ($myName==&amp;quot;Fred&amp;quot;) &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Leslie&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Marc&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   $c++;&lt;br /&gt;
 &lt;br /&gt;
   if ($c==3) &lt;br /&gt;
   {&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
echo &amp;quot;You lose and I get your baby!\n&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''do ... WHILE''' ====&lt;br /&gt;
És semblan al bucle anterior però les intruccions sempre s'execulten almenys 1 vegada. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  $c = 6;&lt;br /&gt;
  do {&lt;br /&gt;
    echo 'Hi';&lt;br /&gt;
  } while ($c &amp;lt; 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''FOR''' ====&lt;br /&gt;
La sintaxi bàsica d'aquesta sentencia és la següent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for([initialization]; [condition]; [step])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'ús:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 for($i = 0; $i &amp;lt; 5; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilització amb arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $menu = array(&amp;quot;Toast and Jam&amp;quot;, &amp;quot;Bacon and Eggs&amp;quot;, &amp;quot;Homefries&amp;quot;, &amp;quot;Skillet&amp;quot;, &amp;quot;Milk and Cereal&amp;quot;);&lt;br /&gt;
 // note to self: get breakfast after writing this article&lt;br /&gt;
 $count = count($menu);&lt;br /&gt;
 for($i = 0; $i &amp;lt; $count; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i + 1 . &amp;quot;. &amp;quot; . $menu[$i] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== La sentència '''FOREACH''' ====&lt;br /&gt;
Aquesta sentència és molt utilitzada per recòrrer arrays. Com el parell array[key]=value pot ser string en ambdós casos, aquesta estructura ens permet obternir-los:&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach ($array as $someVar) {&lt;br /&gt;
  echo ($someVar . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//un altre exemple:&lt;br /&gt;
foreach ($array as $key =&amp;gt; $value) {&lt;br /&gt;
  echo ($key.&amp;quot;holds the value &amp;quot;.$value.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''break''' ====&lt;br /&gt;
&lt;br /&gt;
La sentència break provoca la sortida de qualsevol estructura de control, trencant així un bucle. Penseu per exemple un bucle que cerca un element d’un array. Una vegada trobat, és ineficient acabar de recórrer la resta de l’array.&lt;br /&gt;
''Podeu indicar a aquesta sentència quantes estructures de control voleu saltar. ''&lt;br /&gt;
En l’exemple següent el break provoca la sortida de dos blocs de codi:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
while($edat&amp;lt;20)&lt;br /&gt;
{&lt;br /&gt;
	for( ; ; $edat=$edat+1)&lt;br /&gt;
	{&lt;br /&gt;
		if($edat==18)&lt;br /&gt;
		{&lt;br /&gt;
			echo &amp;quot;Ara ja tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
			break 2;&lt;br /&gt;
		}&lt;br /&gt;
		echo &amp;quot;Encara ets menor d’edat, ja que tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;Aquesta línia no sortirà per pantalla!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;Ja no ets menor d’edat! Tens $edat anys!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
&lt;br /&gt;
===Exercici: tablita ===&lt;br /&gt;
Se desea crear una página web en la cual muestre un título y luego haga una tabla que imprima 10 filas mostrando &amp;quot;estamos en 2DAW&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Exercici: Vector ===&lt;br /&gt;
Queremos crear un vector &amp;quot;ciudades&amp;quot; donde introduciremos una serie  de ciudades, luego deberá mostrar cada una de las ciudades y el número total.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Recòrrer array ====&lt;br /&gt;
Donat el següent array:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$eu = array( &amp;quot;Italy&amp;quot;=&amp;gt;&amp;quot;Rome&amp;quot;, &amp;quot;Luxembourg&amp;quot;=&amp;gt;&amp;quot;Luxembourg&amp;quot;, &amp;quot;Belgium&amp;quot;=&amp;gt; &amp;quot;Brussels&amp;quot;, &lt;br /&gt;
&amp;quot;Denmark&amp;quot;=&amp;gt;&amp;quot;Copenhagen&amp;quot;, &amp;quot;Finland&amp;quot;=&amp;gt;&amp;quot;Helsinki&amp;quot;, &amp;quot;France&amp;quot; =&amp;gt; &amp;quot;Paris&amp;quot;, &amp;quot;Slovakia&amp;quot;=&amp;gt;&amp;quot;Bratislava&amp;quot;, &lt;br /&gt;
&amp;quot;Slovenia&amp;quot;=&amp;gt;&amp;quot;Ljubljana&amp;quot;, &amp;quot;Germany&amp;quot; =&amp;gt; &amp;quot;Berlin&amp;quot;, &amp;quot;Greece&amp;quot; =&amp;gt; &amp;quot;Athens&amp;quot;, &amp;quot;Ireland&amp;quot;=&amp;gt;&amp;quot;Dublin&amp;quot;, &lt;br /&gt;
&amp;quot;Netherlands&amp;quot;=&amp;gt;&amp;quot;Amsterdam&amp;quot;, &amp;quot;Portugal&amp;quot;=&amp;gt;&amp;quot;Lisbon&amp;quot;, &amp;quot;Spain&amp;quot;=&amp;gt;&amp;quot;Madrid&amp;quot;, &amp;quot;Sweden&amp;quot;=&amp;gt;&amp;quot;Stockholm&amp;quot;,&lt;br /&gt;
 &amp;quot;United Kingdom&amp;quot;=&amp;gt;&amp;quot;London&amp;quot;, &amp;quot;Cyprus&amp;quot;=&amp;gt;&amp;quot;Nicosia&amp;quot;, &amp;quot;Lithuania&amp;quot;=&amp;gt;&amp;quot;Vilnius&amp;quot;, &lt;br /&gt;
&amp;quot;Czech Republic&amp;quot;=&amp;gt;&amp;quot;Prague&amp;quot;, &amp;quot;Estonia&amp;quot;=&amp;gt;&amp;quot;Tallin&amp;quot;, &amp;quot;Hungary&amp;quot;=&amp;gt;&amp;quot;Budapest&amp;quot;, &amp;quot;Latvia&amp;quot;=&amp;gt;&amp;quot;Riga&amp;quot;, &lt;br /&gt;
&amp;quot;Malta&amp;quot;=&amp;gt;&amp;quot;Valetta&amp;quot;, &amp;quot;Austria&amp;quot; =&amp;gt; &amp;quot;Vienna&amp;quot;, &amp;quot;Poland&amp;quot;=&amp;gt;&amp;quot;Warsaw&amp;quot;) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Crea un script amb PHP que mostri un llistat amb el noms de les capitals i els seus corresponents països. El llistat ha de ser semblant a:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
La capital de Netherlands és Amsterdam&lt;br /&gt;
La capital de Greece és Athens&lt;br /&gt;
La capital de Germany és Berlin&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[solucio_php_recorrer_array]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Afegir un element a un array ====&lt;br /&gt;
Escriu un programa que afegeixi un nou element a un array en una posició determinada.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//abans:&lt;br /&gt;
12345&lt;br /&gt;
&lt;br /&gt;
//després d'afegir $ l'array és:&lt;br /&gt;
123$45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio_afegir_element_array_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Curta i llarga ====&lt;br /&gt;
Escriu un programa en PHP que retorni la longitud màxima i mínima dels strings que conté un array.&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ar = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$max=0;&lt;br /&gt;
$min = PHP_INT_MAX;&lt;br /&gt;
&lt;br /&gt;
foreach($ar as $valor){&lt;br /&gt;
    if( strlen($valor) &amp;lt; $min){&lt;br /&gt;
        $min = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
    if (strlen($valor) &amp;gt; $max){&lt;br /&gt;
        $max = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;La longitud mes curta es $min i la mes llarga es $max.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Otra solucion:&lt;br /&gt;
&lt;br /&gt;
$my_array = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$otroarray = array_map('strlen', $my_array);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;La longitud mes curta es &amp;quot;. min($otroarray) .&amp;quot; i la mes llarga es &amp;quot;. max($otroarray).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
print_r($otroarray);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==== Exercici: Dibuixa asteriscs ====&lt;br /&gt;
Dibuixa amb PHP utilitzant asteriscs el següent dibuix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* &lt;br /&gt;
* * &lt;br /&gt;
* * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * &lt;br /&gt;
* * &lt;br /&gt;
* &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
$n=5;  &lt;br /&gt;
&lt;br /&gt;
for($i=1; $i&amp;lt;=$n; $i++)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
for($i=$n; $i&amp;gt;=1; $i--)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Escacs ====&lt;br /&gt;
Dibuixa una taula d'escacs com la que pots veure a continuació. &lt;br /&gt;
Table width=&amp;quot;270px&amp;quot; i cada cel·la ocupa 30px d'amplada i d'altura.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:escacs.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:solucio_escacs_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcions ===&lt;br /&gt;
&lt;br /&gt;
Les funcions son grup d'instruccions que poden ser cridades en qualsevol moment. Les funcions són útils per re-utilitzar codi de manera sencilla dintre de la nostra aplicació.&lt;br /&gt;
====Funcions definides per l’usuari====&lt;br /&gt;
L’usuari pot definir totes les funcions que necessiti. És imprescindible que el nom donat a la funció no estigui prohibit, és a dir, no es poden fer servir:&lt;br /&gt;
*paraules reservades (per exemple, echo), &lt;br /&gt;
*començar amb un nombre o un caràcter especial&lt;br /&gt;
*repetir el nom d’una funció dins un mateix àmbit. &lt;br /&gt;
Tot i que el PHP '''no farà cap distinció entre majúscules i minúscules''', es recomana utilitzar el nom de la funció idèntic a l’utilitzat en la declaració.&lt;br /&gt;
Les funcions poden rebre paràmetres. El pas de paràmetres d’entrada es fa escrivint entre parèntesis i a continuació del nom de la funció.&lt;br /&gt;
En l’exemple següent podeu veure com es declara la funció missatge i com, posteriorment, es crida passant-hi un paràmetre.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function missatge($argument)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;$argument&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
missatge(&amp;quot;Aquest és l’argument que es passa en aquest exemple.&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les funcions també podran retornar valors. Per fer-ho caldrà utilitzar la sentència '''return'''.&lt;br /&gt;
En l’exemple següent comprovareu com la funció suma, la qual rep dos paràmetres, retorna el resultat de sumar dos nombres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function suma ($valor1,$valor2)&lt;br /&gt;
{&lt;br /&gt;
	return($valor1+$valor2);&lt;br /&gt;
}&lt;br /&gt;
echo suma(4,6);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Funcions Internes====&lt;br /&gt;
El llenguatge PHP té funcions definides internament. Aquestes funcions són de gran utilitat per al programador i resulta imprescindible estudiarles i conèixer-ne les més importants.&lt;br /&gt;
&lt;br /&gt;
És possible que diverses funcions no es reconeguin en el vostre entorn de treball del PHP; el motiu d’això és que algunes funcions internes no s’han inclòs en la compilació, la qual cosa ha fet necessària una compilació dels mòduls que les contenen. Amb phpinfo() es poden veure les extensions carregades en la vostra configuració del PHP.&lt;br /&gt;
&lt;br /&gt;
Són funcions internes molt usuals ''echo, fprintf, print, printf i sprintf'', en què queda demostrat que el llenguatge PHP ja té definides funcions específiques que poden ser de gran utilitat per a l’usuari. &lt;br /&gt;
&lt;br /&gt;
Podeu mirar l’ajuda de PHP a la [https://www.php.net/manual/es/funcref.php pàgina oficial].&lt;br /&gt;
Funcions de Strings: [http://php.net/manual/en/ref.strings.php pàgina oficial].&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot codificar amb codificació ''md5'' el contingut d’una variable:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom = 'Blanca';&lt;br /&gt;
echo(&amp;quot;La codificació md5 de $nom és:&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
echo md5($nom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Exercici===&lt;br /&gt;
El código de encriptación md5 y sha están comprometido ya que son fáciles de desencriptar. ¿Qué algoritmo se debería utilizar?&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Algoritmes d'ordenació====&lt;br /&gt;
Segons el següent array &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fruits = array(&amp;quot;lemon&amp;quot;, &amp;quot;orange&amp;quot;, &amp;quot;banana&amp;quot;, &amp;quot;apple&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SORT''' Esta función ordena una matriz. Los elementos se organizarán de menor a mayor cuando se haya completado esta función.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
sort($cars);&lt;br /&gt;
&lt;br /&gt;
BMW&lt;br /&gt;
Toyota&lt;br /&gt;
Volvo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''RSORT''' Esta función ordena una matriz en orden inverso (de mayor a menor).&lt;br /&gt;
Nota: Esta función asigna nuevas claves para los elementos en la matriz. Eliminará todas las claves existentes que haya asignado, en lugar de simplemente reordenar las claves.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
rsort($cars);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volvo&lt;br /&gt;
Toyota&lt;br /&gt;
BMW&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''asort'''()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;345&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;3&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
asort($age)&lt;br /&gt;
&lt;br /&gt;
Array ( [Ben] =&amp;gt; 3 [Joe] =&amp;gt; 43 [Peter] =&amp;gt; 345 ) &lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''arsort''' ()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
arsort($age);&lt;br /&gt;
&lt;br /&gt;
Array ( [Peter] =&amp;gt; 345 [Joe] =&amp;gt; 43 [Ben] =&amp;gt; 3 ) &lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ksort''' ()&lt;br /&gt;
Ordena una matriz por clave, manteniendo la clave de las correlaciones de datos. Esto es útil principalmente para matrices asociativas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;200&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;99&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
ksort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Ben, Value=99&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''krsort'''()                &lt;br /&gt;
Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
krsort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Peter, Value=35&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=37&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''natsort''' ()&lt;br /&gt;
Esta función implementa un algoritmo de ordenamiento que ordena cadenas alfanuméricas en la forma en que lo haría un ser humano mientras mantiene asociaciones de clave / valor. Esto se describe como un &amp;quot;orden natural&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$array1 = $array2 = array(&amp;quot;img12.png&amp;quot;, &amp;quot;img10.png&amp;quot;, &amp;quot;img2.png&amp;quot;, &amp;quot;img1.png&amp;quot;);&lt;br /&gt;
sort($array1);&lt;br /&gt;
echo &amp;quot;Standard sorting\n&amp;quot;;print_r($array1);&lt;br /&gt;
natsort($array2);&lt;br /&gt;
echo &amp;quot;\nNatural order sorting\n&amp;quot;;print_r($array2);?&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The above example will output:&lt;br /&gt;
Standard sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; img1.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [2] =&amp;gt; img12.png&lt;br /&gt;
    [3] =&amp;gt; img2.png&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Natural order sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [3] =&amp;gt; img1.png&lt;br /&gt;
    [2] =&amp;gt; img2.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [0] =&amp;gt; img12.png&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
====Exercici: Ordenació ====&lt;br /&gt;
Crea una funció que ordeni un array. &lt;br /&gt;
*Per claus de menor a major i de major a menor&lt;br /&gt;
*Per valors de menor a major i de major a menor&lt;br /&gt;
&lt;br /&gt;
[[:Solucio_ordenacio]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Comprova minúscules ====&lt;br /&gt;
Crea una funció que comprovi si tots els caràcters d'un string son minúscules.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function is_str_lowercase($str1)  &lt;br /&gt;
   {  &lt;br /&gt;
    for ($sc = 0; $sc &amp;lt; strlen($str1); $sc++) {  &lt;br /&gt;
          if (ord($str1[$sc]) &amp;gt;= ord('A') &amp;amp;&amp;amp;  ord($str1[$sc]) &amp;lt;= ord('Z')) {    // ord — devuelve el valor ASCII de un caracter&lt;br /&gt;
      return false;  &lt;br /&gt;
         }  &lt;br /&gt;
         }  &lt;br /&gt;
      return true;  &lt;br /&gt;
       }  &lt;br /&gt;
var_dump(is_str_lowercase('abc def ghi'));  &lt;br /&gt;
var_dump(is_str_lowercase('abc dEf ghi'));  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
====Exercici: Primers====&lt;br /&gt;
Crea una funció que indiqui si un número és primer.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function IsPrime($n)  &lt;br /&gt;
{  &lt;br /&gt;
 for($x=2; $x&amp;lt;$n; $x++)  &lt;br /&gt;
   {  &lt;br /&gt;
      if($n %$x ==0)  &lt;br /&gt;
          {  &lt;br /&gt;
           return 0;  &lt;br /&gt;
          }  &lt;br /&gt;
    }  &lt;br /&gt;
  return 1;  &lt;br /&gt;
   }  &lt;br /&gt;
$a = IsPrime(3);  &lt;br /&gt;
if ($a==0)  &lt;br /&gt;
echo 'No es Primo.....';  &lt;br /&gt;
else  &lt;br /&gt;
echo 'ES primo..';  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici- Normalizar ===&lt;br /&gt;
&lt;br /&gt;
Tenemos una base de datos que sólo acepta nombres y apellidos SIN acentos, ni dieresis... por tanto, queremos que cuando escriba el usuario un nombre como &amp;quot;jÚlïÒ&amp;quot; lo normalice a &amp;quot;JULIO&amp;quot;. &lt;br /&gt;
  $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
&lt;br /&gt;
  $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
&lt;br /&gt;
Es interesante investigar sobre la función strtr&lt;br /&gt;
&lt;br /&gt;
solución:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UTF-8 es una codificación multibyte que puede representar cualquier carácter Unicode.&lt;br /&gt;
ISO 8859-1 es una codificación de un solo byte que puede representar los primeros 256 caracteres Unicode.&lt;br /&gt;
Ambos codifican ASCII exactamente de la misma manera.&lt;br /&gt;
&lt;br /&gt;
utf8_decode -&amp;gt;  Convierte una cadena con los caracteres codificados ISO-8859-1 con UTF-8 &lt;br /&gt;
&lt;br /&gt;
   //función que quita los acentos, dieresis, Ñ....&lt;br /&gt;
    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
    $cadena = utf8_decode($cadena);&lt;br /&gt;
    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);&lt;br /&gt;
    $cadena = strtoupper($cadena);&lt;br /&gt;
    return utf8_encode($cadena);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 //$cadena = strtr(utf8_decode($cadena), utf8_decode($originales), $modificadas);   //Altra solució&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipus de Dades en PHP ==&lt;br /&gt;
&lt;br /&gt;
*'''Boolean'''&lt;br /&gt;
És un tipus de dades molt simple que pot representar un valor cert (TRUE) o fals (FALSE). Aquest tipus de dades s’utilitza molt en estructures de control. Si feu conversió de dades és molt important que tingueu en&lt;br /&gt;
compte que es considerarà fals el nombre enter, la cadena 0 o una cadena buida, una matriu buida, un objecte sense variables, el tipus NULL i els objectes SimpleXML que s’hagin creat d’etiquetes buides.&lt;br /&gt;
&lt;br /&gt;
*'''Integer'''&lt;br /&gt;
Aquest tipus representa nombres no fraccionables per sota de la unitat. Poden ser positius i negatius. Aquests nombres enters els podeu representar en notació decimal, hexadecimal o octal. La plataforma sobre la&lt;br /&gt;
qual treballeu determinarà la mida de les variables enteres. El PHP forçarà un canvi de tipus a flotant si es produeix un desbordament, tant si és positiu com negatiu. A continuació, es mostren dos exemples de variables enteres.&lt;br /&gt;
&lt;br /&gt;
*'''float'''&lt;br /&gt;
Aquest tipus fa referència als nombres de coma flotant, i normalment treballa amb una precisió aproximada de catorze dígits decimals. A continuació, es mostra un exemple d’una variable amb coma flotant.&lt;br /&gt;
&lt;br /&gt;
*'''String'''&lt;br /&gt;
Es tracta d’una cadena de caràcters. El llenguatge del PHP no imposa un límit a la mida d’aquestes cadenes; ara bé, no oblideu que el límit el marcarà la memòria del maquinari en què estigui funcionant el PHP. Aquí&lt;br /&gt;
teniu diversos exemples de cadenes.&lt;br /&gt;
&lt;br /&gt;
*'''array'''&lt;br /&gt;
un array és una matriu, d’una dimensió o més, que conté dades que s’associen segons unes claus. És un tipus molt útil, i comprovareu que el seu ús té una gran potència. Per crear una matriu podeu utilitzar la paraula&lt;br /&gt;
reservada ''array()'' o bé acompanyar el nom de la variable amb ''[ ]''.&lt;br /&gt;
&lt;br /&gt;
*'''object'''&lt;br /&gt;
aquest tipus d’objecte està previst en el llenguatge PHP perquè suporta el llenguatge orientat a objectes. Un objecte és un ítem amb unes característiques i funcionalitats marcades per la classe a la qual pertany. Per crear un objecte cal utilitzar la partícula ''new''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//tipus boolean:&lt;br /&gt;
$sortir=FALSE;&lt;br /&gt;
$entrar=TRUE;&lt;br /&gt;
&lt;br /&gt;
//tipus integer:&lt;br /&gt;
$positiu=3451;&lt;br /&gt;
$negatiu= − 4345&lt;br /&gt;
&lt;br /&gt;
//tipus float:&lt;br /&gt;
$amb_coma=34.5;&lt;br /&gt;
&lt;br /&gt;
//tipus string:&lt;br /&gt;
$nom=’Wayan’;&lt;br /&gt;
$salutacio=&amp;quot;Hola $nom!&amp;quot;;&lt;br /&gt;
echo $salutacio.&amp;quot; Benvingut&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus array:&lt;br /&gt;
$grau_cicles=array(&amp;quot;superior&amp;quot;,&amp;quot;mitja&amp;quot;);&lt;br /&gt;
$families[]=&amp;quot;Informàtica&amp;quot;;&lt;br /&gt;
$families[]=&amp;quot;Electrònica&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus objecte:&lt;br /&gt;
class Alumne {&lt;br /&gt;
public function matricular($nom)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Ja estàs matriculat $nom&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$alumne1=new Alumne();&lt;br /&gt;
$alumne1−&amp;gt;matricular(’Made’);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Creació Classes/ OBJECTES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Coche&lt;br /&gt;
{&lt;br /&gt;
	static $numruedas = 4;&lt;br /&gt;
	var $color;&lt;br /&gt;
	var $posx;&lt;br /&gt;
	var $posy;&lt;br /&gt;
	var $velocidad;&lt;br /&gt;
	function __construct($color, $posx, $posy)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;color = $color;&lt;br /&gt;
		$this-&amp;gt;posx = $posx;&lt;br /&gt;
		$this-&amp;gt;posy = $posy;&lt;br /&gt;
		$this-&amp;gt;velocidad = 0;&lt;br /&gt;
	}&lt;br /&gt;
	function mover($x, $y)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;posx = $x;&lt;br /&gt;
		$this-&amp;gt;posy = $y;&lt;br /&gt;
	}&lt;br /&gt;
	function acelerar()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;velocidad = $this-&amp;gt;velocidad + 10;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
	function frenar()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;velocidad &amp;gt; 10)&lt;br /&gt;
			$this-&amp;gt;velocidad = $this-&amp;gt;velocidad - 10;&lt;br /&gt;
		else&lt;br /&gt;
			$this-&amp;gt;velocidad = 0;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$car = new Coche(&amp;quot;verde&amp;quot;,10,10);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les dades especials ===&lt;br /&gt;
*'''resource'''&lt;br /&gt;
La variable que pertany a aquest tipus farà referència a un recurs extern. Determinades funcions faran ús d’aquest recurs. Per exemple, la funció mysql_db_query, que té la funció d’enviar una petició mySQL, retorna un tipus resource. En l’exemple següent la variable $resultat és de tipus resource:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query=&amp;quot;SELECT * FROM alumnes&amp;quot;;&lt;br /&gt;
$resultat=mysql_query($query);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''NULL'''&lt;br /&gt;
Quan necessiteu una variable que no tingui cap valor haureu d’utilitzar aquest tipus.&lt;br /&gt;
&lt;br /&gt;
===Els pseudotipus===&lt;br /&gt;
* '''mixed''': aquest pseudotipus indica que la variable en questió pot emmagatzemar múltiples tipus.&lt;br /&gt;
* '''number''': indica que la variable pot contenir un valor enter o de coma flotant.&lt;br /&gt;
* '''callback''': utilitzareu aquest pseudotipus per emmagatzemar crides de retorn generades per funcions de l’usuari.&lt;br /&gt;
&lt;br /&gt;
=== Conversions de tipus ===&lt;br /&gt;
&lt;br /&gt;
Per forçar un canvi de tipus haureu d’especificar entre parèntesis el tipus al qual voleu fer la conversió i col·locar-lo davant la variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Senténcia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Modelat a &lt;br /&gt;
|-&lt;br /&gt;
| (integer), (int) ||integer.&lt;br /&gt;
|-&lt;br /&gt;
| (boolean)||boolean&lt;br /&gt;
|-&lt;br /&gt;
| (float), (double), (real) ||float&lt;br /&gt;
|-&lt;br /&gt;
| (string) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (binary) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (array)||array&lt;br /&gt;
|-&lt;br /&gt;
| (object)|| object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Sense modelar 27/5: &amp;quot;.(27/5).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;I ara ja modelat: &amp;quot;.(integer)(27/5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants===&lt;br /&gt;
Una constant és un identificador (nom) per expressar un valor simple. Com el nom suggereix, aquest valor no pot variar durant l'execució del script. (A excepció de les [[http://php.net/manual/es/language.constants.predefined.php constants màgiques]], que en realitat no són constants). Una constant és sensible a majúscules per defecte. Per convenció, els identificadors de constants sempre solen declarar-se en majúscules.&lt;br /&gt;
&lt;br /&gt;
El nom d'una constant segueix les mateixes regles que qualsevol altra etiqueta de PHP. Un nom de constant vàlid comença per una lletra o subguió, seguit per qualsevol nombre o lletres, nombres o subguions. Usant una expressió regular, es representaria de la següent manera: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('MIN_VALUE', '0.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
define('MAX_VALUE', '1.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
echo MIN_VALUE;&lt;br /&gt;
//const MIN_VALUE = 0.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
//const MAX_VALUE = 1.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
class Exemple1&lt;br /&gt;
{&lt;br /&gt;
  //define('MIN_VALUE', '0.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
  //define('MAX_VALUE', '1.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  const MIN_VALUE = 0.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
  const MAX_VALUE = 1.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  public static function getMinValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MIN_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static function getMaxValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MAX_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo Exemple1::getMinValue();   //invocamos clase &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Cuál es la diferencia entre $this y self:: ?'''&lt;br /&gt;
&lt;br /&gt;
Uno usa $this para referenciar al objeto actual, y se utiliza self:: para referenciar la clase actual. Se utiliza $this-&amp;gt;nombre para nombres no estáticos y se utiliza self::nombres para nombres estáticos.&lt;br /&gt;
&lt;br /&gt;
=== Variables predefinides ===&lt;br /&gt;
&lt;br /&gt;
En PHP hi ha una sèrie de variables predefinides que resulten de gran ajuda per al programador. Dins d’aquestes variables predefinides cal destacar un gran grup, el grup de les anomenades superglobals.&lt;br /&gt;
&lt;br /&gt;
Les variables '''superglobals''' són variables que sempre estan disponibles en tots els àmbits.&lt;br /&gt;
&lt;br /&gt;
*'''$GLOBALS''':fa referència a totes les variables disponibles en l’àmbit global. Es tracta d’una variable de tipus matriu associativa.&lt;br /&gt;
En l’exemple següent es recorre la variable superglobal $GLOBALS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$una_variable=&amp;quot;Hola&amp;quot;;&lt;br /&gt;
$una_altra_variable=&amp;quot;Com va?&amp;quot;;&lt;br /&gt;
foreach ($GLOBALS as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;GLOBALS[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_SERVER''':ofereix informació molt últil sobre el servidor i l’entorn d’execució. Els valors que emmagatzema són generats pel navegador web.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*Executeu-lo i veureu un seguit de dades&lt;br /&gt;
referents a la màquina que fa de servidor del PHP. Entre altres coses, identificareu&lt;br /&gt;
el nom de la màquina, la versió del navegador, la versió del servidor web, la&lt;br /&gt;
ubicació de fitxers importants i un llarg etcètera.*/&lt;br /&gt;
&lt;br /&gt;
foreach ($_SERVER as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;SERVER[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_GET''': correspon a la variable GET del protocol HTTP. Emmagatzema els valors de les variables que es trasmeten per mitjà del protocol HTTP mitjançant el mètode GET. El seu ús és molt normal en formularis.&lt;br /&gt;
&lt;br /&gt;
*'''$_POST''': correspon a la variable POST del protocol HTTP. Emmagatzema els valors de les variables que es transmeten per mitjà del protocol HTTP mitjançant el mètode POST. El seu ús és, generalment, més adequat que el mètode GET per a temes de seguretat.&lt;br /&gt;
&lt;br /&gt;
*'''$_COOKIE''': és una variable de tipus matriu associativa que emmagatzemarà les variables passades a l’script per mitjà de les galetes de l’HTML.&lt;br /&gt;
&lt;br /&gt;
*'''$_REQUEST''': és una matriu associativa que conté les dades de $_GET ,$_POST i $_COOKIE.&lt;br /&gt;
&lt;br /&gt;
*'''$_FILES''': aquesta variable s’utilitza en la càrrega de fitxers per mitjà del protocol HTTP. El mètode utilitzat és el POST.&lt;br /&gt;
&lt;br /&gt;
*'''$_SESSION''': conté les variables de sessió disponibles en l’script actual.&lt;br /&gt;
&lt;br /&gt;
*'''$_ENV''': conté les variables d’entorn.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Detecció del Navegador ===&lt;br /&gt;
Escriu un script en PHP que detecti el navegador que està utilitzant el client que ha demanat la pàgina.&lt;br /&gt;
&lt;br /&gt;
[[:solució_detecció_navegador_php]]&lt;br /&gt;
&lt;br /&gt;
=== Variables estàtiques ===&lt;br /&gt;
Les variables estàtiques sempre mantenen el valor encara que el programa abandoni l’àmbit de la variable, i existeixen només en l’àmbit local de les funcions. No s’hi pot accedir fora d’aquest àmbit.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function comptador()&lt;br /&gt;
{&lt;br /&gt;
   $a = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador: &amp;quot;.$a.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $a++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function comptadorEstatic()&lt;br /&gt;
{&lt;br /&gt;
   static $b = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador estàtic: &amp;quot;.$b.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $b++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for($i=0;$i&amp;lt;3;$i++)&lt;br /&gt;
{&lt;br /&gt;
   comptador();&lt;br /&gt;
   comptadorEstatic();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integració PHP ==&lt;br /&gt;
&lt;br /&gt;
Normalment trobareu el llenguatge de programació PHP dins d’altres llenguatges.&lt;br /&gt;
El més usual és escriure codi en PHP dins de codi HTML.&lt;br /&gt;
&lt;br /&gt;
Heu de recordar que el codi PHP és interpretat pel servidor, i els resultats es mostren en el navegador que utilitzeu. La simbiosi que es crea entre el PHP i l’HTML permet al PHP generar HTML i a l’HTML passar dades al PHP.&lt;br /&gt;
&lt;br /&gt;
=== PHP dintre de PHP ===&lt;br /&gt;
&lt;br /&gt;
==== Include vs Require ====&lt;br /&gt;
És possible inserir el contingut d'un fitxer PHP en un altre arxiu PHP (abans que el servidor l'executi), amb la declaració d'incloure o requerir. Les sentències d'inclusió i requereixen són idèntics , excepte en cas de fallada :&lt;br /&gt;
&lt;br /&gt;
*'''requerir''' (require) produirà un error fatal ( E_COMPILE_ERROR ) i aturar la seqüència de comandaments&lt;br /&gt;
*'''inclou''' (include) només produirà una advertència ( E_WARNING ) i el guió seguirà&lt;br /&gt;
&lt;br /&gt;
Per tant, si voleu que l'execució continuï mostrant als usuaris la sortida, fins i tot si el fitxer d'inclusió falta, utilitzeu la instrucció d'inclusió. Altrament, en cas de FrameWork, CMS, o amb aplicacions PHP complexes, sempre utilitzeu la instrucció que requereix el fitxer per a poder continuar l'execució. Això ajudarà a evitar posar en perill la seguretat i la integritat de l'aplicació, per si de cas un arxiu clau falta accidentalment.&lt;br /&gt;
&lt;br /&gt;
Inclusió d'arxius estalvia molta feina. Això significa que pots crear una capçalera, peu de pàgina o arxiu de menú estàndard per a totes les pàgines web. Llavors, quan la capçalera ha de ser actualitzada, només s'ha d'actualitzar la capçalera inclouen l'arxiu.&lt;br /&gt;
&lt;br /&gt;
'''Sintaxi'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include 'filename.php';&lt;br /&gt;
&lt;br /&gt;
//or&lt;br /&gt;
&lt;br /&gt;
require 'Otherfilename.php';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Include_once vs Require_once ====&lt;br /&gt;
Require_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a require.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Include_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a include.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redireccions ====&lt;br /&gt;
* Son sentencies on s'envia al navegador una nova pàgina. La pàgina que tenia el navegador desapareix i apareix una nova pàgina, la que està definida al location: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
header(&amp;quot;location: novapàgina.php&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici PHP amb cap i peus ===&lt;br /&gt;
&lt;br /&gt;
L’objectiu d’aquesta activitat és mostrar el funcionament de la inclusió d’arxius a PHP. Fer servir includes us permet simplificar el codi de les pàgines. Per exemple, podeu afegir un fitxer de capçalera (cap.php) i un de peu (peu.php) amb els continguts comuns de totes les pàgines del vostre lloc (el bàner, el menú, la informació general). Senzillament incloent aquests fitxers a totes les pàgines, podeu aconseguir una estètica comú. Si heu de canviar en algun moment la capçalera, modificant l’arxiu cap.php ho tindreu modificat a totes les pàgines del web.&lt;br /&gt;
Feu una pàgina web amb continguts estructurats amb dos fitxers: cap.php i peu.php&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
[[:solucio_cap_peus_php]]&lt;br /&gt;
&lt;br /&gt;
[[:solucio_cap_peus_php2]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP i Formularis HTML ===&lt;br /&gt;
El formulari electrònic és una eina molt potent fortament establida a Internet. Permet l’intercanvi o la introducció de dades entre usuaris d’una manera ràpida i senzilla. Un formulari permet la interactivitat i és el detonant que converteix Internet en l’eina més poderosa per enviar informació a un destinatari.&lt;br /&gt;
&lt;br /&gt;
El llenguatge PHP representa un salt qualitatiu enorme en l’ús de formularis. L’HTML no és un llenguatge creat pensant a utilitzar formularis, sinó que es va crear amb altres objectius. El llenguatge PHP té un gran potencial en la gestió de dades; per tant, quan HTML i PHP treballen juntament amb formularis ens trobem amb un binomi ideal.&lt;br /&gt;
&lt;br /&gt;
====Preparació de l’HTML====&lt;br /&gt;
El llenguatge HTML mostrarà la façana que l’usuari veurà a la pantalla del navegador. El PHP serà darrere d’aquesta primera pantalla i treballarà amb les dades.&lt;br /&gt;
El primer que cal programar per fer servir un formulari dissenyat en PHP és crear&lt;br /&gt;
el codi HTML. Un formulari en HTML s’emmarca entre les etiquetes &amp;lt;FORM&amp;gt; i &amp;lt;/FORM&amp;gt;. Per manipular aquest formulari s’utilitza l’atribut ''ACTION''.&lt;br /&gt;
L’atribut ''ACTION'' indica el programa que s’encarrega de manipular les dades, tasca que encomanareu a un codi dissenyat en llenguatge PHP.&lt;br /&gt;
L’etiqueta &amp;lt;form&amp;gt; us permet fer servir dos mètodes per enviar informació: '''GET''' i '''POST'''.&lt;br /&gt;
El mètode '''GET''' és molt útil en motors de cerca, però no ofereix gaire seguretat, ja que les dades que envia es poden veure en l’URL del navegador.&lt;br /&gt;
El mètode '''POST''' és molt més segur, ja que quan el servidor detecta que el mètode de transacció d’informació és '''POST''' espera rebre dades immediatament sense fer servir l’URL, la qual cosa implica que aquestes dades no seran visibles en l’URL.&lt;br /&gt;
Exemple de Formulari:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;El nostre primer exemple amb formularis&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Introdueix el teu nom i prem el botó!&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;FORM ACTION=&amp;quot;contesta.php&amp;quot; METHOD=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Si us plau, escriu el teu nom:&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;INPUT TYPE=&amp;quot;submit&amp;quot; VALUE=&amp;quot;Enviar&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/FORM&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Com valora el PHP un formulari ====&lt;br /&gt;
En el moment d’enviar les dades des del formulari d’una pàgina HTML a un fitxer escrit en PHP s’ha de tenir en compte que l’atribut ''NAME'' emmagatzema el valor.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Resposta a la petició de dades&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;...Continuem amb l’exemple!&amp;lt;/H1&amp;gt;&lt;br /&gt;
El teu nom és:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_POST['nom'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En el moment en què s’envien dades del formulari HTML cap a un fitxer PHP, aquestes dades apareixeran dins d’un array superglobal amb tots els seus valors.&lt;br /&gt;
&lt;br /&gt;
=== Exercici Mini Calculadora ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar una calculadora de sólo SUMA, para ello tendremos dos inputs y un botón, cuando se aprete el botón deberá enviar enviar el formulario al server haciendo la operación y mostrándola.&lt;br /&gt;
 &lt;br /&gt;
=== Exercici Formulari amb Vectors ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar un formulario en el servidor que genere 10 inputs y un botón, a continuación el servidor recogerá todos los datos los mostrará y calculará la suma total. &lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
:[[solu_vector_input]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Les matrius associatives i els formularis====&lt;br /&gt;
Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu ús, però, serà condicionat pel mètode utilitzat en el pas de dades en el codi HTML. Així, si en el codi HTMLel mètode és '''POST''' haureu de fer servir la matriu associativa '''$_POST'''; en canvi, si heu fet servir el mètode '''GET''' en el codi HTML, haureu de fer servir la matriu associativa '''$_GET'''.&lt;br /&gt;
&lt;br /&gt;
Per accedir als valors emmagatzemats en les matrius associatives fareu servir l’atribut corresponent '''NAME''' de l’HTML com a índex de la matriu associativa. &lt;br /&gt;
&lt;br /&gt;
No heu d’oblidar que el PHP és un llenguatge de programació que, entre altres coses, us permet utilitzar bucles. En el formulari següent es defineix una selecció múltiple, en què podreu marcar els navegadors que coneixeu.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Un exemple amb un formulari&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;seleccioMultiple.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Nom: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Correu electrònic: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Navegadors que coneixes: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;select name=&amp;quot;navegadors[]&amp;quot; multiple&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Chrome&amp;quot;&amp;gt;Chrome&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;MozillaFirefox&amp;quot;&amp;gt;Mozilla Firefox&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Safari&amp;quot;&amp;gt;Safari&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Opera&amp;quot;&amp;gt;Opera&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Lynx&amp;quot;&amp;gt;Lynx&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquí us trobareu amb un petit problema. Per recuperar els valors introduïts com a nom i correu electrònic no hi ha cap problema, la matriu $_POST us permetrà un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecció múltiple, però, sorgeix un petit problema. A diferència dels casos anteriors, ara navegadors pot contenir més d’un valor, com ho fareu per mostrar tots els valors per pantalla? La solució és utilitzar un bucle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach ($_POST['navegadors'] as $opcio)&lt;br /&gt;
echo $opcio.&amp;quot;\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un altre exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ($_POST) {&lt;br /&gt;
    echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
    //echo htmlspecialchars(print_r($_POST, true));&lt;br /&gt;
    print_r($_POST);&lt;br /&gt;
    print_r($_POST['personal']);&lt;br /&gt;
    print_r($_POST['personal']['nombre']);&lt;br /&gt;
    echo '&amp;lt;/pre&amp;gt;';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
    Nombre:  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[nombre]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Email:   &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[email]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Cerveza: &amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;select multiple name=&amp;quot;cerveza[]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;warthog&amp;quot;&amp;gt;Warthog&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;guinness&amp;quot;&amp;gt;Guinness&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;stuttgarter&amp;quot;&amp;gt;Stuttgarter Schwabenbräu&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;¡enviarme!&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode GET ===&lt;br /&gt;
*El mètode GET produeix una cadena llarga que apareix en els logs del servidor i a la URL del navegador.&lt;br /&gt;
&lt;br /&gt;
*GET envia les dades usant la URL&lt;br /&gt;
&lt;br /&gt;
*El mètode GET es limita a enviar fins a només 1.024 caràcters .&lt;br /&gt;
&lt;br /&gt;
*Mai utilitzeu el mètode GET, si voleu enviar la contrasenya o una altra informació confidencial al servidor .&lt;br /&gt;
&lt;br /&gt;
*GET no pot ser utilitzat per enviar dades binàries, com imatges o documents de text, al servidor .&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode GET es pot accedir mitjançant la variable d'entorn QUERY_STRING.&lt;br /&gt;
&lt;br /&gt;
*PHP proveeix la matriu associativa $_GET per accedeix a tota la informació que s'enviï mitjançant el mètode GET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$PHP_SELF = $_SERVER['PHP_SELF'];&lt;br /&gt;
echo $PHP_SELF ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if( isset($_GET[&amp;quot;name&amp;quot;])||  isset($_GET[&amp;quot;age&amp;quot;]) )&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_GET['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_GET['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt; method=&amp;quot;GET&amp;quot;&amp;gt;&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode POST ===&lt;br /&gt;
&lt;br /&gt;
*POST envía los datos de forma que no podemos verlos (en un segundo plano u &amp;quot;ocultos&amp;quot; al usuario).&lt;br /&gt;
&lt;br /&gt;
*El mètode POST no té cap restricció en la mida de les dades a enviar.&lt;br /&gt;
&lt;br /&gt;
*El mètode POST es pot utilitzar per enviar ASCII, així com dades binàries.&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode POST passa per la capçalera HTTP. La seguretat depèn de protocol HTTP. Mitjançant l'ús d'HTTP segur pots assegurar-te que la seva informació està segura .&lt;br /&gt;
&lt;br /&gt;
*El PHP proveeix de la matriu associativa $ _POST per accedeix a tota la informació enviada pel mètode POST.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(isset($_POST[&amp;quot;name&amp;quot;]) ||  isset($_POST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_POST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_POST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;   &amp;lt;!--&amp;lt;?php $_PHP_SELF ?&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== $_PHP_SELF ===&lt;br /&gt;
La variable $_PHP_SELF conté el nom del script PHP (pàgina php) el qual està executant.  ESTÁ DESFASADO USAR $_SERVER['PHP_SELF']&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(  isset($_REQUEST[&amp;quot;name&amp;quot;]) ||  isset($_REQUEST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_REQUEST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_REQUEST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo formulario POST ===&lt;br /&gt;
&lt;br /&gt;
Dissenyar una pàgina web simple amb php que demani a lusuari el preu de tres productes diferents en tres&lt;br /&gt;
establiments diferents. Exemple:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Form1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Un cop s'introdueixi aquesta&lt;br /&gt;
informació al formulari, s'ha de mostrar el resultat, dels tres preus introduïts i el preu mitjà del producte.&lt;br /&gt;
&lt;br /&gt;
  DATOS RECIBIDOS&lt;br /&gt;
  Precio Guitarra Martin D18 en Ubisa: 4.200 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Thomann 3.800 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Alfasonic 4.100 euros&lt;br /&gt;
&lt;br /&gt;
  El precio medio del producto es de 4.0333333333333 euros&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;PHP Calcula precios&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;form name=&amp;quot;formularioDatos&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;01-Formulari.php&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt; CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Ubisa, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Thomann, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio2&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Alfasoni, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio3&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;input value=&amp;quot;Calcular&amp;quot; type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
01-Formulari.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php //Ejemplo aprenderaprogramar.com&lt;br /&gt;
$precio1 = $_POST['precio1'];&lt;br /&gt;
$precio2 = $_POST['precio2'];&lt;br /&gt;
$precio3 = $_POST['precio3'];&lt;br /&gt;
$media = ($precio1+$precio2+$precio3)/3;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; DATOS RECIBIDOS&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Ubisa: &amp;quot;. $precio1. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Thomann &amp;quot;. $precio2. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Alfasonic &amp;quot;. $precio3. &amp;quot; euros &amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; El precio medio del producto es de &amp;quot;. $media. &amp;quot; euros&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Acceso a Ficheros ===&lt;br /&gt;
&lt;br /&gt;
'''Abrir y cerrar el descriptor de ficheros'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $fitxer = fopen(&amp;quot;datos.txt&amp;quot;,&amp;quot;a&amp;quot;);&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'r' 	Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero. &lt;br /&gt;
'w+' 	Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear. &lt;br /&gt;
'a+' 	Apertura para lectura y escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() no tiene efecto, las escrituras siempre son pospuestas. &lt;br /&gt;
&lt;br /&gt;
'''Escribir datos en un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  $fp = fopen('datos.txt', 'a');&lt;br /&gt;
    fwrite($fp, 'Julio');&lt;br /&gt;
    fwrite($fp, 'Noguera');&lt;br /&gt;
    fclose($fp);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Leer datos de un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 $fitxer=fopen(&amp;quot;datos.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while(!feof($fitxer)){&lt;br /&gt;
       $line = fgets($fitxer);&lt;br /&gt;
       echo $line;&lt;br /&gt;
    }&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más info&lt;br /&gt;
http://www.php.net/manual/es/function.fopen.php&lt;br /&gt;
http://www.php.net/manual/es/function.fgets.php&lt;br /&gt;
http://www.php.net/manual/es/function.fwrite.php&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Formulari Insti // Acceso a ficheros ===&lt;br /&gt;
&lt;br /&gt;
Se desea crear un formulario donde se introduzcan los campos de nombre, apellidos, dni, contraseña, cuando se clique el botón de enviar, el servidor debe recibir todos los parámetros de ese usuario y escribirlos en un fichero de texto (fopen/fwrite), el siguiente usuario que rellene el formulario escribirá a continuación, después debe listar todos los ficheros que tiene el servidor (system()/shell_exec).&lt;br /&gt;
&lt;br /&gt;
solució: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
if ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;) { &lt;br /&gt;
&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    $nombre = $_POST['nombre'];  //recibe los parámetros del formulario&lt;br /&gt;
    $apellido = $_POST['apellido'];&lt;br /&gt;
    $dni = $_POST['dni'];&lt;br /&gt;
    $pass = $_POST['pass'];&lt;br /&gt;
&lt;br /&gt;
    $file = fopen(&amp;quot;clase.txt&amp;quot;, &amp;quot;a&amp;quot;);    //crea un descriptor de fichero&lt;br /&gt;
    fwrite($file, ($nombre) . &amp;quot;,&amp;quot; . ($apellido) . &amp;quot;,&amp;quot; . ($dni) . &amp;quot;,&amp;quot; . ($pass) . &amp;quot;\n&amp;quot;);  //introduce datos dentro del fichero&lt;br /&gt;
    fclose($file);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    $usuarioEnSistema = system('cat clase.txt');     //ejecuta terminal linux&lt;br /&gt;
   //$usuario = shell_exec('cat clase.txt'');   // comando más antiguo&lt;br /&gt;
&lt;br /&gt;
    echo $usuarioEnSistema;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nombre&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;apellido&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dni&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;pass&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Exercici: Calculadora PHP ===&lt;br /&gt;
Crea un formulari amb un únic TextBox on s'indiqui les operacions matemàtiques a realitzar. Envia el contingut del TextBox amb el mètode POST i realitza les operacions. Imprimeix per pantalla el resultat.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Solucio_calculadora_m6]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ISSET ===&lt;br /&gt;
&lt;br /&gt;
isset -&amp;gt; Devuelve '''true''' si la variable existe y tiene un valor distinto de null, false de lo contrario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var_dump( isset($var) );   //isset() devuelve '''false''' por que $var no ha sido definida&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''false''' aunque la variable haya sido declarada pues su valor es NULL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var = &amp;quot;&amp;quot;;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''true'''. El valor ya no es nulo aunque esté vacío&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Y cuando deberías usar isset()?'''&lt;br /&gt;
&lt;br /&gt;
Siempre y cuando que quieras comprobar que la variable existe (variable inicializada), un ejemplo bueno sería si quieres saber si se ha mandado un formulario:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;campo1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if (isset($_POST['submit']) {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''isset(), is_null() y empty(): Diferencias y ejemplos de uso'''&lt;br /&gt;
&lt;br /&gt;
https://cybmeta.com/isset-is_null-y-empty-diferencias-y-ejemplos-de-uso&lt;br /&gt;
&lt;br /&gt;
https://es.stackoverflow.com/questions/32133/como-y-cuando-se-usan-isset-y-empty-correctamente&lt;br /&gt;
&lt;br /&gt;
=== Exercici enviament de dades ===&lt;br /&gt;
És popular el disseny d’un document web, en què el mateix document conté la part del formulari HTML i el codi PHP que agafa les dades i les processa. Aquest procediment pot resultar estrany en principi, ja que esteu esperant dos documents ben diferenciats. Així i tot val la pena que veieu aquesta forma de treballar i decidiu si us resulta útil o no. Per fer-ho, simplement heu de fusionar els dos documents (el que envia les dades i el que les rep) en un document únic HTML+PHP de dues parts amb la següent estructura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(primera vegada que s'entra al document)&lt;br /&gt;
{&lt;br /&gt;
crear formulari HTML i enviar-ho al propi document&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
rebre les dades a través de POST o GET&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Feu un document amb aquestes característiques que enviï les següents dades:&lt;br /&gt;
*nom&lt;br /&gt;
*cognom&lt;br /&gt;
*contrasenya&lt;br /&gt;
*si l’usuari és alumne o professor&lt;br /&gt;
*si l’usuari és actiu o no&lt;br /&gt;
*foto (únicament el nom del fitxer)&lt;br /&gt;
*edat (entre 18 i 99)&lt;br /&gt;
*comentaris&lt;br /&gt;
*un camp ocult amb el nom ocult i valor prova&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[:solucio_enviament_dades_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Galetes ===&lt;br /&gt;
Les galetes són uns fitxers de text que emmagatzemen informació a l’ordinador client referent a la visita d’un usuari a una pàgina web.&lt;br /&gt;
Les galetes no són un acte d’intromissió per part de la pàgina web visitada; simplement, són una font d’informació molt útil per augmentar l’eficiència en l’accés.&lt;br /&gt;
Les galetes tenen una mida màxima d’1K i caduquen, la qual cosa fa molt difícil que s’utilitzin amb fins malintencionats. A més, únicament pot consultar la galeta el web que l’ha dipositada, la informació que conté no és visible per a la resta de pàgines web.&lt;br /&gt;
&lt;br /&gt;
Un ús molt freqüent de les galetes és emmagatzemar un perfil d’usuari. Així s’aconsegueix que cada vegada que el mateix usuari accedeix a un web, aquest en conegui les preferències i li mostri directament els continguts més adequats.&lt;br /&gt;
&lt;br /&gt;
Les galetes ajuden els programadors a crear un entorn més adequat per a l’usuari visitant. Moltes pàgines web permeten canviar la mida del text, els colors de la pàgina, la disposició d’alguns continguts, etc. Una vegada l’usuari ha modificat al seu gust l’aspecte de la pàgina web, aquestes dades s’emmagatzemen per a la propera visita.&lt;br /&gt;
&lt;br /&gt;
Importante: las cookies se envían al cliente mediante encabezados HTTP. Como cualquier otro encabezado, las cookies se deben enviar antes que cualquier salida que genere la página (antes que &amp;lt;html&amp;gt;, &amp;lt;head&amp;gt; o un simple espacio en blanco). &lt;br /&gt;
&lt;br /&gt;
'''Funcions del PHP per treballar amb galetes'''&lt;br /&gt;
&lt;br /&gt;
La funció que s’utilitza en PHP per crear galetes és setcookie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
bool setcookie(string $nom [, string $valor [, int $caduca= 0[, string $ruta [, string $domini [, bool $seguretat= false [, bool $nomeshttp=false]]]]]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* $nom: és obligatori i indica el nom que donareu a la galeta, la resta de paràmetres són opcionals.&lt;br /&gt;
* $valor: és el valor que tindrà la galeta.&lt;br /&gt;
* $caduca: indica els segons que té de vida la galeta; si no s’indica res la galeta deixarà d’existir quan finalitzi la sessió de l’usuari.&lt;br /&gt;
* $ruta: indica on podeu trobar la galeta dins el servidor.&lt;br /&gt;
Si no ponemos la ruta (Path), la cookie sólo se puede usar en páginas que se encuentren en el mismo directorio que la página que la creó. Si queremos que se utilice en un directorio en concreto debemos añadir la ruta.&lt;br /&gt;
&lt;br /&gt;
//Cookie creada en el directorio /registro/login&lt;br /&gt;
&lt;br /&gt;
//Si queremos que las páginas del directorio raíz / puedan acceder a la cookie&lt;br /&gt;
&lt;br /&gt;
* $domini: marca el domini en què la galeta està disponible.&lt;br /&gt;
* $seguretat: tindrà el valor TRUE si voleu que la galeta només s’utilitzi en una connexió segura (conexió HTTPs), i FALSE (que és el valor per defecte), si no és necessari un cert grau de seguretat.&lt;br /&gt;
* $nomeshttp: si té per valor TRUE marcarà que la galeta solament és accessible si s’utilitza el protocol HTTP.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
setcookie(&amp;quot;nom&amp;quot;, &amp;quot;Maadiva&amp;quot;, 3600, &amp;quot;/&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El segon fitxer s’encarregarà de consultar a la matriu associativa '''$_COOKIE''' el valor de la galeta indicada, que en aquest cas seria nom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_COOKIE[&amp;quot;nom&amp;quot;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
setcookie(&amp;quot;valor&amp;quot;, 1, time() + 30);    //time() tiempo desde que se originó unix.&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);    //no muestra todas las cookies por temas de seguridad&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unset($_COOKIE[&amp;quot;valor&amp;quot;]);  //otra forma setcookie('valor', 1, expire);  // setcookie(&amp;quot;valor&amp;quot;, 1, time() - 30);&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Se desea que cuente el número de visitas que realiza un usuario al visitar la página; este contador conserva su valor durante un año aún a pesar de que un usuario cierre el navegador y tarde días en volver a visitar la página.&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_contador_galletas]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Les cookies us permeten desar informació al navegador que estarà disponible més endavant pel vostre web. Per exemple, podeu desar la configuració personal de l’usuari o la llengua en què ha escollit visitar el web. La propera vegada que l’usuari visiti el web, el vostre codi PHP podrà obtenir aquesta informació desada i presentar a l’usuari el web amb la seva configuració personal o la llengua escollida. És important destacar que les cookies queden desades al navegador de l’usuari i no al servidor web.&lt;br /&gt;
&lt;br /&gt;
Feu un web amb dos fitxers. El primer, index.php, s’encarregarà d’obtenir el nom de l’usuari i la llengua que vol fer servir per defecte entre una llista desplegable mitjançant un formulari. Enviarà aquestes dades a un altre fitxer, cookie.php, que desarà la informació a les cookies.&lt;br /&gt;
La propera vegada que l’usuari accedeixi a index.php el formulari estarà emplenat amb la informació desada la vegada anterior que va accedir-hi.&lt;br /&gt;
&lt;br /&gt;
sol&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[:solucio_galetes_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sessió ===&lt;br /&gt;
&lt;br /&gt;
Les variables de sessió són variables que estan disponibles en múltiples pàgines sense haver de fer servir pas de paràmetres. Les variables de sessió tenen un temps de vida limitat i s’emmagatzemen en el servidor.&lt;br /&gt;
&lt;br /&gt;
Podeu fer servir les variables de sessió per mantenir informació (l’anomenada informació de sessió) entre diferents pàgines. Per exemple,&lt;br /&gt;
el nom d’usuari o una selecció de productes que ja s’hagi fet.&lt;br /&gt;
&lt;br /&gt;
A continuació, estudiareu un exemple format per tres fitxers. El primer fitxer és un formulari senzill que demana a l’usuari un identificador i una contrasenya. Aquestes dades s’envien a un segon fitxer, anomenat exempleAutenticar.php, que crea les variables de sessió. Finalment, trobareu un tercer fitxer anomenat continuem.php, que recupera la informació emmagatzemada en les variables de sessió.&lt;br /&gt;
&lt;br /&gt;
Just a sota d’aquest text hi ha el fitxer del qual partireu. L’hem anomena exempleSessions.php, però el podeu anomenar d’una altra manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Exemple amb variables de sessió&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
&amp;lt;form action=&amp;quot;exempleAutenticar.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
Escriu el teu nom:&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;usuari&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Escriu la teva contrasenya:&lt;br /&gt;
&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;contrasenya&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia!&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tot seguit apareix el codi del fitxer exempleAutenticar.php. En aquest fitxer creareu i inicialitzareu les dues variables de sessió que utilitzareu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION['id_usuari']=$_REQUEST['usuari'];&lt;br /&gt;
$_SESSION['clau_acces']=$_REQUEST['contrasenya'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...continueu amb l’exemple de variables de sessió...&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
Ja s’han emmagatzemat les variables de sessió.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;continuem.php&amp;quot;&amp;gt;Vinga! Cap al final de l’exemple!&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixeu-vos que el primer que es fa és cridar la funció '''session_start()'''. És obligatori que inicieu la sessió abans de cap etiqueta HTML perquè tot funcioni correctament.&lt;br /&gt;
Amb $_REQUEST es recuperen els dos valors que s’han passat des del fitxer inicial, és a dir, usuari i contrasenya, i els heu d’emmagatzemar en dues variables de sessió creades a $_SESSION, que rebran el nom d’id_usuari i clau_acces.&lt;br /&gt;
$_REQUEST és un array associatiu global que per defecte té els continguts de $_GET, $_POST i $_COOKIE.&lt;br /&gt;
A part de crear les variables de sessió i donar-los valors trobareu un enllaç cap al tercer fitxer.&lt;br /&gt;
El codi del tercer fitxer, continuem.php, el teniu a continuació:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com que esteu treballant amb sessions, el primer que hauríeu de fer és llançar la sessió amb session_start(). A continuació, es recuperen els valors emmagatzemats en les dues variables de sessió.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eliminar sesión&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
unset($_SESSION['id_usuari']); // will delete just the name data&lt;br /&gt;
&lt;br /&gt;
//session_destroy(); // borrará todos los datos asociados a ese usuario. También $_SESSION = array(); &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index3.php&amp;quot;&amp;gt;Destruir Variables de sesion&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les sessions us permeten emmagatzemar dades que podran ser compartides entre les diferents pàgines del web. Aquestes dades, a diferència de les cookies, estan emmagatzemades al servidor i estan disponibles durant tot el temps que l’usuari està interactuant amb la pàgina (temps de sessió).&lt;br /&gt;
Alguns exemples de dades que solen guardar-se a les sessions és si l’usuari ha accedit al web mitjançant els valors usuari/contrasenya, o un carret de la compra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici Sessions ====&lt;br /&gt;
1. Feu una pàgina web que passi entre les seves pàgines el nom de l’usuari i una variable (cost) que s’anirà incrementant en 10 cada vegada que l’usuari passa entre les pàgines (podem pensar que aquesta variable representa el cost de les compres que ha fet fins ara l’usuari al web).&lt;br /&gt;
La sessió es tancarà quan l’usuari torni a la pàgina de login.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://codigosdeprogramacion.com/2016/12/20/sistema-de-usuarios-y-sesiones-en-php-y-mysql-1-login-sesiones-y-logout/&lt;br /&gt;
&lt;br /&gt;
http://velozityweb.com/blog/php/login-de-usuarios-y-creacion-de-sesiones-con-php-y-mysql/#sthash.XbMcrnTA.PSO2jYQ9.dpbs&lt;br /&gt;
&lt;br /&gt;
http://www.formacionwebonline.com/crear-sesiones-php-en-intranet/&lt;br /&gt;
&lt;br /&gt;
=== Exercici Moodle ===&lt;br /&gt;
&lt;br /&gt;
2.Se trata de la hacer un moodle, tenemos un formulario y almacenaremos una base de datos (simulada) en la que guardaremos en un archivo el usuario, contraseña y rol de un profe y un alumno. &lt;br /&gt;
Deberá de comprobar si está registrado, en caso de estarlo se crearán las cookies y variables de sesión(5 minutos para el alumnado y 10 para el profe), en caso de no acceder deberán redireccionarse al login.&lt;br /&gt;
Si se validan correctamente, deberá acceder al menu y mostrar la información si tiene rol de alumno (ROLE_ALUMNO) y otra diferente si es profesor(ROLE_ALUMNO). &lt;br /&gt;
También deberá existir un logout en caso de querer terminar la sesión. &lt;br /&gt;
$_SESSION['caduca']=time()+60; &lt;br /&gt;
&lt;br /&gt;
Solució Exercici Moodle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_moodle]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejercicio Carrito ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--http://evilnapsis.com/2016/10/30/ejemplo-de-carrito-de-compras-sencillo-con-php-y-mysql/--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici Complert ====&lt;br /&gt;
Exercici que engloba Galetes, Idioma, Login, Intranet amb Cap, Peus, Menu i contingut i Sessions.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[http://www.infomerce.es/moodle/mod/resource/view.php?id=11136 Exercici de Classe]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
=== Creació del Arbre XML ===&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xmlDoc = new DOMDocument();&lt;br /&gt;
$xmlDoc-&amp;gt;load(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
=== Obtenir un element del arbre ===&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recòrrer tots els elemens ===&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print $xmlDoc-&amp;gt;saveXML(); //imprimir toda la info&lt;br /&gt;
&lt;br /&gt;
// recorrer las etiquetas y los valores&lt;br /&gt;
$x = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
foreach ($x-&amp;gt;childNodes AS $item) {&lt;br /&gt;
  print $item-&amp;gt;nodeName . &amp;quot; = &amp;quot; . $item-&amp;gt;nodeValue . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//otra manera de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   //selecciona todas las etiquetas aula y muestra el contenido dentro de ellas&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
    echo $aula-&amp;gt;nodeName;&lt;br /&gt;
    echo $aula-&amp;gt;nodeValue, PHP_EOL;&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Otra forma de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   // otra forma de acceder&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
   echo $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)[0]-&amp;gt;nodeValue;   //equivale a -&amp;gt;item(0)&lt;br /&gt;
   echo  $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
   echo $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Afegir un nou element ===&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$auladom = $xmlDoc-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmlDoc-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmlDoc-&amp;gt;createElement(&amp;quot;XARXA_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmlDoc-&amp;gt;createElement(&amp;quot;MASK_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmlDoc-&amp;gt;createElement(&amp;quot;INIT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmlDoc-&amp;gt;createElement(&amp;quot;CURRENT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
&lt;br /&gt;
$root = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
=== Esborrar un element ===&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//borrar nodo&lt;br /&gt;
$xmlDoc = new DOMDocument;&lt;br /&gt;
$xmlDoc-&amp;gt;load('file.xml');   //cargamos fichero&lt;br /&gt;
&lt;br /&gt;
$aula = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
&lt;br /&gt;
// seleccionamos el nodo concreto 0 y lo eleminamos&lt;br /&gt;
$aulaSeleccionada = $aula-&amp;gt;getElementsByTagName('aula')-&amp;gt;item(0);&lt;br /&gt;
$aulaborrada = $aula-&amp;gt;removeChild($aulaSeleccionada);&lt;br /&gt;
&lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;); //guardamos cambios&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici crear XML'''&lt;br /&gt;
&lt;br /&gt;
Tenim un formulari i volem ficar dins del nostre xml noves dades, per tant, haurem de crear un formulari on introduirem les dades.&lt;br /&gt;
&lt;br /&gt;
= Bibliografia / Webgrafia =&lt;br /&gt;
*[http://php.net/manual/es/ Manual oficial de PHP]&lt;br /&gt;
*[http://www.codeacademy.com Introducció a PHP]&lt;br /&gt;
*David Sklar, Adam Trachtenberg, &amp;quot;PHP Cookbook, Third Edition&amp;quot;, O’Reilly Media Inc., 2014. ISBN 978-1-449-36375-8&lt;br /&gt;
*Eduard García Sacristán, Eduard Latorre Jarque, Montserrat Madridejos Mora, Raúl Velaz Mayo, &amp;quot;Llenguatges de guions de servidor&amp;quot;, IOC, 2014 &lt;br /&gt;
*[https://docs.google.com/presentation/d/1ZQgIsW4KCyIfH8NyiqH9ueanM83Ym7bjitaxyQKS0hs/edit#slide=id.i14 Llenguatges de programació del costat del servidor]&lt;br /&gt;
*[http://www.adelat.org/media/docum/nuke_publico/lenguajes_del_lado_servidor_o_cliente.html www.Adelat.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EMMAGATZEMAR I LLEGIR FITXERS ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = '{&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}'&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SERIALIZACIÓN ==&lt;br /&gt;
&lt;br /&gt;
En PHP existe una forma muy sencilla de almacenar o transmitir cualquier tipo de valor (excepto el tipo resource) en forma de una cadena seriada: la serialización.&lt;br /&gt;
&lt;br /&gt;
La serialización te permite, por ejemplo, guardar un objeto o array en una base de datos o transmitirlo entre aplicaciones remotas, para luego volver a convertirlo a su tipo y estructura original.&lt;br /&gt;
&lt;br /&gt;
Supongamos que tienes el siguiente array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arr = array(&lt;br /&gt;
  &amp;quot;fruta&amp;quot; =&amp;gt; &amp;quot;manzana&amp;quot;, &lt;br /&gt;
  &amp;quot;objeto&amp;quot; =&amp;gt; &amp;quot;bicicleta&amp;quot;, &lt;br /&gt;
  &amp;quot;animales&amp;quot; =&amp;gt; array(&lt;br /&gt;
             &amp;quot;perro&amp;quot;, &lt;br /&gt;
             &amp;quot;gato&amp;quot;, &lt;br /&gt;
             &amp;quot;caballo&amp;quot;) &lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si lo deseas guardar en una tabla de una base de datos, lo puedes serializar de esta forma:&lt;br /&gt;
&lt;br /&gt;
'''$string = serialize($arr);'''&lt;br /&gt;
&lt;br /&gt;
La función serialize devolverá un valor fácilmente almacenable o transmitible:&lt;br /&gt;
&lt;br /&gt;
''a:3:{s:5:&amp;quot;fruta&amp;quot;;s:7:&amp;quot;manzana&amp;quot;;s:6:&amp;quot;objeto&amp;quot;;s:9:&amp;quot;bicicleta&amp;quot;;s:8:&amp;quot;animales&amp;quot;;a:3: i:0;s:5:&amp;quot;perro&amp;quot;;i:1;s:4:&amp;quot;gato&amp;quot;;i:2;s:7:&amp;quot;caballo&amp;quot;;}}''&lt;br /&gt;
&lt;br /&gt;
Para recuperar el valor original en PHP a partir de la cadena seriada:&lt;br /&gt;
&lt;br /&gt;
'''$arr = unserialize($string);'''&lt;br /&gt;
&lt;br /&gt;
Un ejemplo del uso de la serialización la tenemos en la forma en que WordPress almacena información variada en algunas de sus tablas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Serializar'''&lt;br /&gt;
&lt;br /&gt;
http://www.cucuza.com/como-serializar-datos-en-php/&lt;br /&gt;
&lt;br /&gt;
==EXEMPLE CLASSE SERIALIZACIÓN==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Serializer {&lt;br /&gt;
&lt;br /&gt;
    private static $path = &amp;quot;./database/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    public static function save($obj, $id) {  //$obj es un JSON , $id es el nombre del archivo &lt;br /&gt;
&lt;br /&gt;
        $arr = serialize($obj);&lt;br /&gt;
        &lt;br /&gt;
        return file_put_contents(self::$path . $id, $arr);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static function restore($id) {&lt;br /&gt;
        &lt;br /&gt;
        if  (file_exists ( self::$path . $id ) ){&lt;br /&gt;
            &lt;br /&gt;
            $xmlString = file_get_contents(self::$path . $id);&lt;br /&gt;
            &lt;br /&gt;
            return unserialize($xmlString);  &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static function showIds(){&lt;br /&gt;
        &lt;br /&gt;
        return array_slice(scandir(self::$path),2);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//al ser una classe estàtica es pot invocar els mètodes de la següent forma, per exemple:&lt;br /&gt;
&lt;br /&gt;
Serializer::save(json,nom_arxiu);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crear un JSON desde PHP (json_encode)==&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crear un objeto en PHP con JSON (json_decode)==&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ENVIAR CORREOS ==&lt;br /&gt;
&lt;br /&gt;
Mediente la función MAIL() de PHP podemos enviar correos, por ello, nuestro servidor deberá tener instalado el servicio.&lt;br /&gt;
En nuestro caso, en nuestro Hosting-ng lo tenemos.&lt;br /&gt;
Existe otra función PHPMailer dónde contiene más opciones. https://github.com/PHPMailer/PHPMailer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Forma simple'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// El mensaje&lt;br /&gt;
$msg = &amp;quot;Estimado alumno de La Mercè\nEstas invitado a participar en  clase&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// usar wordwrap() si las lineas son más largas de 70 caracteres&lt;br /&gt;
$msg = wordwrap($msg,70);&lt;br /&gt;
&lt;br /&gt;
// Enviar mail&lt;br /&gt;
mail(&amp;quot;alguien@ejemplo.cat&amp;quot;,&amp;quot;Mi título&amp;quot;,$msg);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Más opciones'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    $to = &amp;quot;ejemploPrueba@ejemplo.com&amp;quot;;&lt;br /&gt;
    $subject = &amp;quot;Asunto&amp;quot;;&lt;br /&gt;
    $txt = &amp;quot;Estamos en clase de DAW&amp;quot;;&lt;br /&gt;
    $headers = &amp;quot;From: webmaster@example.com&amp;quot; . &amp;quot;\r\n&amp;quot; .&lt;br /&gt;
        &amp;quot;CC: somebodyelse@example.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    mail($to,$subject,$txt,$headers);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' En terminal '''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//también podemos hacerlo desde el terminal de linux en nuestro servidor&lt;br /&gt;
system('mail -t alguien@ejemplo.cat -s ALTA ALUMNOS INSTI &amp;lt;&amp;lt;&amp;lt; &amp;quot;El alumno&amp;quot;'.$nom.&amp;quot; &amp;quot;.$cognoms.&amp;quot; está en espera de darse de alta&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SUBIR FICHEROS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// En versiones de PHP anteriores a la 4.1.0, debería utilizarse $HTTP_POST_FILES en lugar&lt;br /&gt;
// de $_FILES.&lt;br /&gt;
&lt;br /&gt;
 //Directori de pujada. Permís d'escriptura i accés per a www-data&lt;br /&gt;
$dir_subida = './';  &lt;br /&gt;
 //Anexem la carpeta amb el nos del finder que ens puja&lt;br /&gt;
$fichero_subido = $dir_subida . basename($_FILES['file']['name']); //basename: muestra el nombre del fichero con la extensión&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Movem el fitxer temporal creat a /tmp a la ubicació o nom indicats&lt;br /&gt;
echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
if (move_uploaded_file($_FILES['file']['tmp_name'], $fichero_subido)) {    &lt;br /&gt;
    echo &amp;quot;El fichero es válido y se subió con éxito.\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;¡Posible ataque de subida de ficheros!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo 'Más información de depuración:';&lt;br /&gt;
print_r($_FILES);&lt;br /&gt;
&lt;br /&gt;
/*$_FILES['file']['name'] -- original name of the file on the client machine.&lt;br /&gt;
$_FILES['file']['type'] -- mime type of the file, provided by the browser&lt;br /&gt;
$_FILES['file']['size'] -- size (in bytes) of the uploaded file&lt;br /&gt;
$_FILES['file']['tmp_name'] -- temporary filename of the uploaded file, stored on the server&lt;br /&gt;
$_FILES['file']['error'] -- returns an error code, useful for debugging.&lt;br /&gt;
*/&lt;br /&gt;
print &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; SUBIR FICHEROS &amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;!-- El tipo de codificación de datos, enctype, DEBE especificarse como sigue --&amp;gt;&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- MAX_FILE_SIZE debe preceder al campo de entrada del fichero --&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;MAX_FILE_SIZE&amp;quot; value=&amp;quot;30000&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- El nombre del elemento de entrada determina el nombre en el array $_FILES --&amp;gt;&lt;br /&gt;
    Enviar este fichero: &amp;lt;input name=&amp;quot;fichero_usuario&amp;quot; type=&amp;quot;file&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar fichero&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EXERCICI:'''&lt;br /&gt;
&lt;br /&gt;
Es desitja desenvolupar un formulari on pugui ficar el nom d'usuari i a més pujar un fitxer. Deurà haver una pàgina que mostre tots el fitxers d'eixe Usuari i el nombre d'arxius.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDF ==&lt;br /&gt;
Podem també generar pdf's a FPDF http://www.fpdf.org/ , però es deurà baixar la llibreria primer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require('fpdf.php');&lt;br /&gt;
&lt;br /&gt;
class PDF extends FPDF&lt;br /&gt;
{&lt;br /&gt;
// Page header&lt;br /&gt;
function Header()&lt;br /&gt;
{&lt;br /&gt;
    // Logo&lt;br /&gt;
    $this-&amp;gt;Image('logo.png',10,6,30);&lt;br /&gt;
    // Arial bold 15&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','B',15);&lt;br /&gt;
    // Move to the right&lt;br /&gt;
    $this-&amp;gt;Cell(80);&lt;br /&gt;
    // Title&lt;br /&gt;
    $this-&amp;gt;Cell(30,10,'Title',1,0,'C');&lt;br /&gt;
    // Line break&lt;br /&gt;
    $this-&amp;gt;Ln(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Page footer&lt;br /&gt;
function Footer()&lt;br /&gt;
{&lt;br /&gt;
    // Position at 1.5 cm from bottom&lt;br /&gt;
    $this-&amp;gt;SetY(-15);&lt;br /&gt;
    // Arial italic 8&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','I',8);&lt;br /&gt;
    // Page number&lt;br /&gt;
    $this-&amp;gt;Cell(0,10,'Page '.$this-&amp;gt;PageNo().'/{nb}',0,0,'C');&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Instanciation of inherited class&lt;br /&gt;
$pdf = new PDF();&lt;br /&gt;
$pdf-&amp;gt;AliasNbPages();&lt;br /&gt;
$pdf-&amp;gt;AddPage();&lt;br /&gt;
$pdf-&amp;gt;SetFont('Times','',12);&lt;br /&gt;
for($i=1;$i&amp;lt;=40;$i++)&lt;br /&gt;
    $pdf-&amp;gt;Cell(0,10,'Printing line number '.$i,0,1);&lt;br /&gt;
$pdf-&amp;gt;Output();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= QR =&lt;br /&gt;
&lt;br /&gt;
També podem crear codis QR al nostre servidor, hi han moltes libreries tanta en PHP com en JS.&lt;br /&gt;
https://sourceforge.net/projects/phpqrcode/&lt;br /&gt;
&lt;br /&gt;
Es deurà baixar la llibreria i ficar la carpeta &amp;quot;phpqrcode&amp;quot; dins del nostre servidor, a més de introduir el següent codi. &lt;br /&gt;
//'''NOTA''': deureu donar-li permisos d'escriptura a la carpeta&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   // la llibreria s'ha descomprimit dins d'una carpeta anomenada &amp;quot;phpqrcode&amp;quot;&lt;br /&gt;
   include('phpqrcode/qrlib.php');&lt;br /&gt;
   &lt;br /&gt;
   QRcode::png('http://wikiserver.infomerce.es', 'imatgeqr.png');&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
   &amp;lt;img src=&amp;quot;imatgeqr.png&amp;quot; /&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici- Inventario'''&lt;br /&gt;
&lt;br /&gt;
Queremos crear un registro o inventario de los ordenadores, por ellos, queremos generar códigos QR que serán pegatinas para poner en cada uno de los ordenadores de las diferentes aulas, por ello crearemos un formulario donde introduciremos el aula y el ordenador, deben almacenarse en un variable de sesión (ya que no sabemos todavía conectarnos a BD) y cuando cliquemos mostrar deben de aparecer todas los códigos QR del aula.&lt;br /&gt;
También se desea guardarlo en pdf (mirar librerias) con el título y el aula y el codigo QR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CONECTAR CON LDAP o ACTIVE DIRECTORY ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class LDAP &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
      //Asigno variables para accesar al servidor LDAP&lt;br /&gt;
   private $conectar;&lt;br /&gt;
   private $host;&lt;br /&gt;
   private $user;&lt;br /&gt;
   private $pswd;&lt;br /&gt;
   private $dn;&lt;br /&gt;
   private $OU;&lt;br /&gt;
   private $DC;&lt;br /&gt;
   private $DC1;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   public function __construct($user,$password,$ou,$dc,$dc1)&lt;br /&gt;
   {&lt;br /&gt;
    $this-&amp;gt;host= &amp;quot;172.16.208.174&amp;quot;;&lt;br /&gt;
    $this-&amp;gt;user = $user;&lt;br /&gt;
    $this-&amp;gt;pswd = $password;&lt;br /&gt;
    $this-&amp;gt;OU = $ou;&lt;br /&gt;
    $this-&amp;gt;DC = $dc;&lt;br /&gt;
    $this-&amp;gt;DC1 = $dc1;&lt;br /&gt;
    $this-&amp;gt;dn = &amp;quot;OU=&amp;quot;.$ou.&amp;quot;,DC=&amp;quot;.$dc.&amp;quot;,DC=&amp;quot;.$dc1.&amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function conexion()&lt;br /&gt;
   {&lt;br /&gt;
       $this-&amp;gt;conectar = ldap_connect($this-&amp;gt;host) or die(&amp;quot;Imposible Conectar&amp;quot;);&lt;br /&gt;
     // Especifico la versión del protocolo LDAP&lt;br /&gt;
    ldap_set_option($this-&amp;gt;conectar, LDAP_OPT_PROTOCOL_VERSION, 3)    or die (&amp;quot;Imposible asignar el Protocolo LDAP&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function credenciales(){&lt;br /&gt;
   // Valido las credenciales para accesar al servidor LDAP&lt;br /&gt;
    $bd = ldap_bind($this-&amp;gt;conectar, $this-&amp;gt;user, $this-&amp;gt;pswd)    or die (&amp;quot;Imposible Validar en el Servidor LDAP&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Especifico los parámetros que quiero que me regrese la consulta&lt;br /&gt;
    $attrs = array(&amp;quot;displayname&amp;quot;,&amp;quot;mail&amp;quot;,&amp;quot;samaccountname&amp;quot;,&amp;quot;telephonenumber&amp;quot;,&amp;quot;givenname&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
    // Creo el filtro para la busqueda&lt;br /&gt;
    $filter = &amp;quot;(samaccountname=&amp;quot;.$this-&amp;gt;user.&amp;quot;)&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    $search = ldap_search($this-&amp;gt;conectar, $this-&amp;gt;dn, $filter, $attrs)    or die (&amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    $entries = ldap_get_entries($this-&amp;gt;conectar, $search);&lt;br /&gt;
&lt;br /&gt;
    return $entries;&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	<entry>
		<id>http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17446</id>
		<title>NF2: Generació de documents web amb llenguatges de guions</title>
		<link rel="alternate" type="text/html" href="http://wikiserver.infomerce.es/index.php?title=NF2:_Generaci%C3%B3_de_documents_web_amb_llenguatges_de_guions&amp;diff=17446"/>
				<updated>2023-09-29T10:56:53Z</updated>
		
		<summary type="html">&lt;p&gt;Jmoreno: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introducció llenguatges de programació del costat Servidor =&lt;br /&gt;
&lt;br /&gt;
Existeix una multitud de llenguatges concebuts o no per a Internet. Cadascun d'ells explota més a fons certes característiques que ho fan més o menys útils per desenvolupar diferents aplicacions.&lt;br /&gt;
Un '''llenguatge del costat del servidor''' és aquell que '''s'executa en el servidor web, just abans que s'enviï la pàgina''' a través d'Internet al client. Les pàgines que s'executen en el servidor poden realitzar accessos a bases de dades, connexions en xarxa, i altres tasques per crear la pàgina final que veurà el client.&lt;br /&gt;
D'altra banda, els '''llenguatges de costat client''' (entre els quals no només es troba l'HTML sinó també el Java i el Javascript els quals són simplement inclosos en el codi HTML) són aquells que '''poden ser directament executats pel navegador i no necessiten un pretractament'''.&lt;br /&gt;
[[Fitxer:serverside.jpg|center]]&lt;br /&gt;
Els llenguatges de costat servidor més àmpliament utilitzats per al desenvolupament de pàgines dinàmiques són l'ASP, JSP, PERL i PHP.&lt;br /&gt;
== ASP.NET ==&lt;br /&gt;
Llenguatge comercialitzat per Microsoft, i usat per programadors per desenvolupar entre altres funcions, llocs web. ASP.NET és el successor de la tecnologia ASP, va ser llançada al mercat mitjançant una estratègia de mercat denominada .NET.&lt;br /&gt;
Es desenvolupat per resoldre les limitants que brindava el teu antecessor ASP. Per al desenvolupament d'ASP.NET es pot utilitzar C#, VB.NET o J#. Els arxius compten amb l'extensió (aspx). Per al seu funcionament de les pàgines es necessita tenir instal·lat IIS amb el Framework .Net. Microsft Windows 2003 inclou aquest framework, solament es necessitarà instal·lar-ho en versions anteriors.&lt;br /&gt;
El llenguatge ASP consisteix en una sèrie de classes .NET utilitzades per crear aplicacions Web, tant del costat client (Web Form) com del costat servidor (Web Service). La integració de nadiva .NET Framework amb el sistema operatiu Windows Server 2003 fa que la seva execució sigui més estable i ràpida que altres llenguatges de programació.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Completament orientat a objectes.&lt;br /&gt;
*Controls d'usuari i personalitzats.&lt;br /&gt;
*Divisió entre la capa d'aplicació o disseny i el codi.&lt;br /&gt;
*Facilita el manteniment de grans aplicacions.&lt;br /&gt;
*Increment de velocitat de resposta del servidor.&lt;br /&gt;
*Major velocitat.&lt;br /&gt;
*Major seguretat.&lt;br /&gt;
&lt;br /&gt;
'''Desavantatges: '''&lt;br /&gt;
*Major consum de recursos.&lt;br /&gt;
*Tecnologia propietària.&lt;br /&gt;
*Hostalatge de llocs web costosos.&lt;br /&gt;
&lt;br /&gt;
== JSP: Java Server Pages ==&lt;br /&gt;
És un llenguatge per a la creació de llocs web dinàmics, acrònim de Java Server Pages. Està orientat a desenvolupar pàgines web en Java. JSP és un llenguatge multiplataforma.&lt;br /&gt;
JSP va ser desenvolupat per Sun Microsystems. Comparteix avantatges similars a les d'ASP.NET, desenvolupat per a la creació d'aplicacions web potents. Posseeix un motor de pàgines basat en els servlets de Java. Per al seu funcionament es necessita tenir instal·lat un servidor Tomcat.&lt;br /&gt;
&lt;br /&gt;
'''Característiques'''&lt;br /&gt;
*Codi separat de la lògica del programa.&lt;br /&gt;
*Les pàgines són compilades en la primera petició.&lt;br /&gt;
*Permet separar la part dinàmica de l'estàtica a les pàgines web.&lt;br /&gt;
*Els arxius es troben amb l'extensió (jsp).&lt;br /&gt;
*El codi JSP pot ser incrustat en codi HTML.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges:'''&lt;br /&gt;
*Execució ràpida del servlets.&lt;br /&gt;
*Crear pàgines del costat del servidor.&lt;br /&gt;
*Multiplataforma.&lt;br /&gt;
*Codi ben estructurat.&lt;br /&gt;
*Integritat amb els mòduls de Java.&lt;br /&gt;
*La part dinàmica està escrita en Java.&lt;br /&gt;
== PERL (Practical Extraction and Report Language) ==&lt;br /&gt;
És un llenguatge de programació desenvolupat per Larry Wall (lwall at netlabs.com) inspirat en altres eines d'UNIX com són: sigueu, grep, awk, c-shell, per a l'administració de tasques pròpies de sistemes UNIX. No estableix cap filosofia de programació concreta. No es pot dir que sigui orientat a objectes, modular o estructurat encara que suporta directament tots aquests paradigmes; el seu punt fort són les labors de processament de textos i arxius. Llenguatge de programació basat en scripts portable a gairebé qualsevol plataforma. És molt utilitzat per escriure CGIs. Un dels seus elements més potents són les expressions regulars, que a partir de la seva versió en Perl han estat adoptades per altres llenguatges i plataformes com .NET o Javascript.&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Es poden ajuntar diversos programes d'una forma senzilla per aconseguir una meta determinada. Els usuaris de Windows agrairan aquesta propietat ja que normalment emmalalteixen d'un bon llenguatge tipus “script”.&lt;br /&gt;
*És relativament ràpid per a un llenguatge tipus “script”.&lt;br /&gt;
*Està disponible en múltiples plataformes i sistemes operatius (UNIX, Linux i Windows). Un programa que s'escrigui tenint en compte la compatibilitat pot ser escrit en una plataforma i executat en una altra.&lt;br /&gt;
*Hi ha una col·lecció enorme de mòduls que poden ser incorporats a qualsevol “script” de Perl. Estan disponibles en el CPAN (“Comprehensive Perl Arxivi Network”). En particular existeix una extensió per a càlcul numèric denominada PDL.&lt;br /&gt;
*Perl és gratuït. Molt més que això, és “Programari Lliure”. Això vol dir que el codi font està disponible perquè qualsevol el pugui veure o modificar, i el que és més important, sempre ho estarà. Encara que mai pretenguis canviar el codi, és important disposar de la possibilitat de fer-ho, ja que sempre es podrà contractar a una tercera persona perquè ho modifiqui en el cas que hi hagi un error, i hauria de ser possible solucionar-ho.&lt;br /&gt;
*Li atorga al programador molta llibertat perquè faci el programa com vulgui. Tal com diu l'eslògan de Perl “Hi ha més d'una forma de fer-ho”&lt;br /&gt;
&lt;br /&gt;
== PHP ==&lt;br /&gt;
PHP és l'acrònim de Hipertext Preprocesor. És un llenguatge de programació del costat del servidor gratuït i independent de plataforma, ràpid, amb una gran llibreria de funcions i molta documentació. Va ser creat originalment en 1994 per Rasmus Lerdorf, però com PHP està desenvolupat en política de codi obert, al llarg de la seva història ha tingut moltes contribucions d'altres desenvolupadors.&lt;br /&gt;
El client solament rep una pàgina amb el codi HTML resultant de l'execució de la PHP. Com la pàgina resultant conté únicament codi HTML, és compatible amb tots els navegadors.&lt;br /&gt;
&lt;br /&gt;
https://luisjordan.net/node-js/node-js-vs-php-comparaciones-cms-beneficios-y-tiempos-de-respuesta/&lt;br /&gt;
&lt;br /&gt;
'''Avantatges'''&lt;br /&gt;
*Molt fàcil d'aprendre.&lt;br /&gt;
*Es caracteritza per ser un llenguatge molt ràpid.&lt;br /&gt;
*Suporta en certa mesura l'orientació a objecte. Classes i herència.&lt;br /&gt;
*És un llenguatge multiplataforma: Linux, Windows, entre uns altres.&lt;br /&gt;
*Capacitat de connexió amb la majoria dels manejadores de base de dades: MysSQL, PostgreSQL, Oracle, MS SQL Server, entre unes altres.&lt;br /&gt;
*Capacitat d'expandir el seu potencial utilitzant mòduls.&lt;br /&gt;
*Posseeix documentació a la seva pàgina oficial la qual inclou descripció i exemples de cadascuna de les seves funcions.&lt;br /&gt;
*És lliure, per la qual cosa es presenta com una alternativa de fàcil accés per a tots.&lt;br /&gt;
*Inclou gran quantitat de funcions.&lt;br /&gt;
*No requereix definició de tipus de variables ni maneig detallat del baix nivell.&lt;br /&gt;
&lt;br /&gt;
= Preparació de l'entorn =&lt;br /&gt;
== Instal·lació de servidors d'aplicacions Web ==&lt;br /&gt;
Internet s’ha convertit en la principal eina d’intercanvi d’informació a la societat actual. La connexió dels ordinadors a les xarxes locals i aquestes xarxes a d’altres de grans dimensions ha possibilitat la comunicació global d’informació entre els ordinadors arreu del món. Per poder oferir serveis web, els servidors han de tenir instal·lats una sèrie de serveis. El servidor web permet l’enviament de continguts a altres ordinadors a través de la xarxa. Els preprocessadors d’hipertext (com PHP) permeten crear continguts web de forma dinàmica. Els servidors de bases de dades permeten emmagatzemar informació de forma estructurada que es pot fer servir per generar contingut web. Aquests serveis han de ser instal·lats i configurats correctament abans de començar a crear el contingut web dinàmic del nostre web.&lt;br /&gt;
&lt;br /&gt;
Un '''servidor web''' és una peça de programari que respon a les peticions dels navegadors i lliura la pàgina per al navegador a través d’Internet. Quan es crida a una pàgina web per l’adreça –l’URL (uniform resource locator), per exemple, www.infomerce.es/index.html-, la comunicació entre el navegador i el servidor és possible gràcies a tres protocols:&lt;br /&gt;
* TCP(Transmission Control Protocol, protocol de control de transmissió): és el responsable de fer que el missatge arribi a la destinació sense errors.&lt;br /&gt;
* IP(Internet Protocol): és el responsable de fer que el missatge trobi el camí fins al servidor.&lt;br /&gt;
* HTTP(Hypertext Transfer Protocol, protocol de transferència d’hipertext): és el protocol que ha indicat l’usuari a l’hora de demanar el recurs al servidor. La primera part d’un recurs URL correspon al protocol que utilitzaran client i servidor per intercanviar dades.&lt;br /&gt;
== HTTP: comunicació entre servidor i client ==&lt;br /&gt;
Un cop establerta la connexió entra en joc el protocol HTTP: el navegador envia una petició al servidor en què sol·licita el recurs index.html. El servidor processa aquesta petició i retorna la pàgina sol·licitada al navegador, que interpreta les etiquetes HTML i la presenta a l’usuari.&lt;br /&gt;
[[Fitxer:peticiohttp.jpg|center]]&lt;br /&gt;
La informació que el client envia al servidor en la petició és la següent:&lt;br /&gt;
* El mètode HTTP: l’acció que s’ha de fer.&lt;br /&gt;
* El recurs a què s’ha d’accedir (una part de l’URL).&lt;br /&gt;
* La informació que l’usuari envia al servidor.&lt;br /&gt;
La informació que el servidor envia en la resposta té dues parts ben diferenciades: &lt;br /&gt;
* La capçalera: conté el codi que indica si la petició s’ha complert. També conté el tipus de contingut que enviarà al client.&lt;br /&gt;
* El contingut: (text, codi HTML, imatges, etc.) del recurs demanat.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Preparació M.V. amb Ubuntu i PHP ===&lt;br /&gt;
Es tracta d'importar una M.V. amb Ubuntu Server. Aquesta màquina virtual la utilitzarem al llarg del curs per desenvolupar programes amb el llenguatge PHP. LA M.V. ha de tenir les següents característiques:&lt;br /&gt;
*512 MB de Ram&lt;br /&gt;
*Targeta mode Pont (Has de reinicialitzar la @MAC i esborrar el fitxer: /etc/udev/rules.d/70-persistent-net.rules)&lt;br /&gt;
*Configura la @IP. &lt;br /&gt;
Instal·la el següent programari:&lt;br /&gt;
*openssh-server (per permetre comunicacions remotes)&lt;br /&gt;
*Servidor Web apache2&lt;br /&gt;
*Servidor PHP&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Primer projecte amb NetBeans ===&lt;br /&gt;
Crea un projecte PHP amb NetBeans. Fes que automàticament guardi tots els fitxers a la màquina virtual creada al apartat anterior. Crea una pàgina d'exemple i comprova que funciona.&lt;br /&gt;
La pàgina d'exemple pot ser la següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
     	&amp;lt;head&amp;gt;&lt;br /&gt;
	&amp;lt;/head&amp;gt;&lt;br /&gt;
	&amp;lt;body&amp;gt;&lt;br /&gt;
        &amp;lt;p&amp;gt;&lt;br /&gt;
          &amp;lt;?php&lt;br /&gt;
            echo &amp;quot;Primera Pàgina amb PHP&amp;quot;; &lt;br /&gt;
          ?&amp;gt;&lt;br /&gt;
        &amp;lt;/p&amp;gt;&lt;br /&gt;
	&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= El Llenguatge PHP =&lt;br /&gt;
== Introducció ==&lt;br /&gt;
'''PHP''' és un llenguatge de programació obert que s’integra directament en pàgines HTML. El seu ús ha esdevingut gairebé imprescindible en les pàgines que han d’utilitzar bases de dades o formularis.&lt;br /&gt;
Rasmus Lerdorf és el creador del llenguatge PHP. El 1995 presenta la primera edició d’aquest llenguatge amb el nom de Personal Home Page tools amb llicència pública GNU. Per crear el PHP, Rasmus utilitza el codi de programació C.&lt;br /&gt;
&lt;br /&gt;
El '''codi PHP''' que escriviu, '''l’haureu d’incrustar dins de codi HTML''', concretament dins les etiquetes \&amp;lt;body\&amp;gt; del document. Mitjançant unes marques l’HTML no interpretarà el codi PHP, el qual, i mitjançant les mateixes marques, s’executarà en el servidor.&lt;br /&gt;
&lt;br /&gt;
El codi PHP s’executa en un servidor i mostra el resultat en un client. Visualitzareu els resultats amb un navegador web.&lt;br /&gt;
&lt;br /&gt;
Quan arrenca el PHP es fa la lectura del fitxer '''php.ini'''. Aquest fitxer conté la configuració del PHP i es crea durant la instal·lació del PHP. És possible que necessiteu fer canvis en el fitxer de configuració, preneu la precaució de fer-ne una còpia de seguretat abans de fer aquestes modificacions.&lt;br /&gt;
Una inspecció visual del fitxer php.ini us servirà per comprendre’n el funcionament. Depenent del valor de les variables que conté aquest fitxer, el comportament del PHP variarà en la vostra màquina. Podeu comprovar que cada variable que forma part del fitxer està àmpliament comentada, amb comentaris que es marquen amb un punt i coma.&lt;br /&gt;
&lt;br /&gt;
== Mostrar Errors ==&lt;br /&gt;
Per mostrar els errors que fem al escriure programes en php s'ha d'especificar als fitxers que els vols veure per pantalla amb les següents sentències:&lt;br /&gt;
&lt;br /&gt;
http://www.anerbarrena.com/mostrar-errores-php-608/&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/* * ******************Errores******************* */&lt;br /&gt;
ini_set('display_errors', true);&lt;br /&gt;
error_reporting(E_ALL);&lt;br /&gt;
/* * ********************Usuarios****************** */&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sintaxi ==&lt;br /&gt;
=== Generalitats ===&lt;br /&gt;
La sintaxi d'un llenguatge de programació es defineix com el conjunt de regles que han de seguir-se en escriure el codi font dels programes per considerar-se com a correctes per a aquest llenguatge de programació.&lt;br /&gt;
Les normes bàsiques que defineixen la sintaxi de PHP són les següents:&lt;br /&gt;
*Si voleu que s’interpreti el vostre codi és imprescindible que encabiu el codi escrit en PHP entre dos delimitadors. Aquestes marques són &amp;lt;?php , que la fareu servir per indicar l’inici de codi en llenguatge PHP, i ?&amp;gt; , que utilitzareu per marcar el final del vostre codi PHP.&lt;br /&gt;
*Indicareu el final d’una instrucció amb punt i coma. Cada vegada que es detecti un punt i coma s’interpretarà el codi inserit fins a aquell punt.&lt;br /&gt;
*Els comentaris en PHP els podreu incloure mitjançant:&lt;br /&gt;
** Dues barres (//) o un coixinet (#) si voleu comentar una línia&lt;br /&gt;
** Una barra i un asterisc (/*) per indicar l’inici de comentari, i un asterisc i una barra per indicar el final de comentari si voleu comentar més d’una línia(/*).&lt;br /&gt;
*No es defineix el tipus de les variables: PHP és un llenguatge de programació que no obliga a declarar prèviament el nom de les variables que s’utilitzaran ni el seu tipus (és diu que és un llenguatge sense tipus o no tipat). Ara bé, tot i que existeixen els tipus de dades en PHP aquests no es comproven.&lt;br /&gt;
*No es distingeixen les majúscules i minúscules.&lt;br /&gt;
Exemples:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;Aquí teniu una instrucció.&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;i aquí una altra instrucció.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Si voleu comentar una línia ho podeu fer d’aquesta manera...&lt;br /&gt;
#...o bé d’aquesta altra.&lt;br /&gt;
/* Però si necessiteu comentar&lt;br /&gt;
més línies aquesta és la millor&lt;br /&gt;
manera de fer − ho! */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Variables ===&lt;br /&gt;
Per representar una variable '''caldrà escriure el símbol del dòlar seguit pel nom que vulgueu posar'''. En el moment de donar nom a una variable heu de tenir en compte que es diferencien majúscules i minúscules i que haurà de començar amb una lletra o caràcter de subratllat.&lt;br /&gt;
En PHP, a diferència de molts altres llenguatges, no cal declarar una variable abans d’utilitzar-la. El símbol del dòlar és el que marca que es tracta d’una variable.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$Nom='whovian';&lt;br /&gt;
$Familia='Informàtica';&lt;br /&gt;
$Cicle=&amp;quot;CFGS Desenvolupament d'aplicacions Web&amp;quot;;&lt;br /&gt;
$Modul = &amp;quot;DAW en entorn servidor&amp;quot;;&lt;br /&gt;
$Durada= 165;&lt;br /&gt;
echo &amp;quot;Hola $nom!&amp;lt;br&amp;gt;&lt;br /&gt;
Benvingut als estudis d’$Familia!!!&amp;lt;br&amp;gt;&lt;br /&gt;
Cicle: $Cicle&amp;lt;br&amp;gt;&lt;br /&gt;
Mòdul: $Modul&amp;lt;br&amp;gt;&lt;br /&gt;
Durada: $Durada hores&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com podeu veure, les variables poden adquirir qualsevol dels tipus suportats, i la variable $Durada emmagatzema l’enter 180, mentre que la resta de variables emmagatzemaran cadenes.&lt;br /&gt;
Les variables s’assignen per valor per defecte, però '''si voleu assignar un valor per referència''' ho haureu d’indicar fent servir el símbol''' &amp;amp; '''tot just davant de la variable&lt;br /&gt;
=== Àmbit de les variables ===&lt;br /&gt;
&lt;br /&gt;
Les variables tenen una vida determinada depenent d’on les declareu i com ho feu. És molt important conèixer l’àmbit de les variables per controlar els vostres codis. No comprendre aquesta part pot provocar fallades inesperades en les vostres creacions.&lt;br /&gt;
L’àmbit d’una variable és el context en què és definida.&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot declarar una variable nombroses vegades en àmbits diferents:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$nom=’Nyoman’;&lt;br /&gt;
echo ’De moment $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
function canvi()&lt;br /&gt;
{&lt;br /&gt;
	$nom=’Ketut’;&lt;br /&gt;
	echo ’Però ara $nom val ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
canvi();&lt;br /&gt;
echo ’I de nou $nom torna a tenir el valor de ’.$nom.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Operadors ===&lt;br /&gt;
Permetran fer accions dins el codi. Podreu canviar i assignar valors, canviar l’adreça del codi, condicionar l’execució de blocs de codi i, en&lt;br /&gt;
definitiva, dotar de la complexitat necessària els vostres programes per aconseguir un objectiu.&lt;br /&gt;
Els operadors es poden agrupar en tres blocs segons el nombre de valors sobre els quals s’actua.&lt;br /&gt;
* L’operador '''unari''' opera sobre un valor i el que pot fer en aquest valor és negar-lo, incrementar-lo o decrementar-lo, entre altres coses.&lt;br /&gt;
* L’operador '''binari''' opera sobre dos valors i permet sumar-los, restar-los o comparar-los.&lt;br /&gt;
* L’operador '''ternari''' permet escollir entre dues expressions en funció d’una altra.&lt;br /&gt;
&lt;br /&gt;
'''Operadors Aritmètics '''&lt;br /&gt;
Teniu en compte que la divisió retornarà un valor en coma flotant si el resultat de la divisió no és exacte.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
|-$valor||Negació||Oposat de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor + $valorB ||Addició||Suma de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor - $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor * $valorB||Multiplicació||Producte de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor / $ valorB||Divisió||Quocient de $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor % $valorB||Mòdul||Resta de $valor dividit per $valorB&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors d'assignació '''&lt;br /&gt;
L’operador bàsic d’assignació és l’igual. Amb l’operador igual la variable de l’esquerra rep el valor de l’expressió de la dreta.&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor = $valorB||Assignació||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor += $valorB||Addició i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor -= $valorB ||Subtracció||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
| $valor.= “text”||Concatenació i Assignació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de bit '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp; $valorB||i||Assignar el contingut de $valorB a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor I $valorB||o i Assignació||Suma de $valor i $valorB i ho emmagatzemar a $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor ˆ $valorB ||xor||Diferència entre $valor i $valorB&lt;br /&gt;
|-&lt;br /&gt;
|  ̃ $valor||Negació||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;lt;$valorB ||Desplaçament a l’esquerra||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;&amp;gt;$valorB||Desplaçament a la dreta||Concatenar la cadena de la dreta a la de l’esquerra&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de comparació '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor == $valorB||Igual||TRUE si $valor és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor === $valorB||Idèntic||TRUE si $valor és igual a $valorB i són del mateix tipus.&lt;br /&gt;
|-&lt;br /&gt;
| $valor != $valorB ||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;&amp;gt; $ valorB||Diferent||TRUE si $valor no és igual a $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor !== $valorB ||No idèntic||TRUE si $valor no és igual a $valorB o no són del mateix tipus&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt; $valorB||Més petit que||TRUE si $valor és més petit que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt; $valorB||Més gran que||TRUE si $valor és més gran que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;lt;= $valorB||Més petit o igual que||TRUE si $valor és més petit o igual que $valorB.&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;gt;= $valorB||Més gran o igual que||TRUE si $valor és més gran o igual que $valorB.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Operadors d’increment i decrement '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| ++$valor||Preincrement||Incrementa $valor una unitat, i després retorna $valor.&lt;br /&gt;
|-&lt;br /&gt;
| $valor++||Postincrement||Retorna $valor i incrementa $valor una unitat.&lt;br /&gt;
|-&lt;br /&gt;
| –$valor ||Predecrement||Decrementa $valor una unitat i retorna $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor–||Postdecrement||Retorna $valor i decrementa $valor una unitat.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
'''Operadors de lògica '''&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Operador&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Nom&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;250 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Acció&lt;br /&gt;
|-&lt;br /&gt;
| $valor and valorB||i||TRUE si $valor i $valorB són TRUE&lt;br /&gt;
|-&lt;br /&gt;
| $valor or $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor xor $valorB ||xor||TRUE si $valor o $valorB són TRUE, però no tots dos alhora.&lt;br /&gt;
|-&lt;br /&gt;
| !$valor||No||Inverteix el contingut de $valor&lt;br /&gt;
|-&lt;br /&gt;
| $valor &amp;amp;&amp;amp; $valorB ||i||TRUE si $valor i $valorB són TRUE.&lt;br /&gt;
|-&lt;br /&gt;
| $valor II $valorB||o||TRUE si $valor o $valorB són TRUE.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Els Vectors i les Matrius (Arrays) ===&lt;br /&gt;
Les matrius i els vectors són conjunts de dades que poden estar definides en un Guió de PHP. Les matrius poden contenir altres matrius dintre d'ells sense restricció (multidimensionals). &lt;br /&gt;
&lt;br /&gt;
Els vectors es poden crear de dues maneres. La primera consisteix en l'ús de la funció '''array()'''. La segona implica l'ús de claudàtors.&lt;br /&gt;
Exemple de declaracions d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$elmeuarray = array($valor1, $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
$elmeuarray[1] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//També es pot declarar de la següent manera:&lt;br /&gt;
$elmeuarray = array('mes1' =&amp;gt; $valor1, 'mes2' =&amp;gt; $valor2);&lt;br /&gt;
//Aquesta declaració genera un array a la variable '$elmeuarray' que te la següent informació:&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
$elmeuarray['mes2'] = $valor2;&lt;br /&gt;
&lt;br /&gt;
//Però tambés es pot declarar directament amb claudàtors:&lt;br /&gt;
$elmeuarray[0] = $valor1;&lt;br /&gt;
//o amb la següent notació&lt;br /&gt;
$elmeuarray['mes1'] = $valor1;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Exemples d'arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$array = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;type&amp;quot;=&amp;gt;&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;manufactured&amp;quot;=&amp;gt;&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2 = array(&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3 = array(&amp;quot;name&amp;quot;=&amp;gt;&amp;quot;Toyota&amp;quot;,&amp;quot;Celica&amp;quot;,&amp;quot;colour&amp;quot;=&amp;gt;&amp;quot;black&amp;quot;,&amp;quot;1991&amp;quot;);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array['name']=&amp;quot;BMW&amp;quot;;&lt;br /&gt;
$array['type']=&amp;quot;SERIE 1&amp;quot;;&lt;br /&gt;
$array['colour']=&amp;quot;BLANCO&amp;quot;;&lt;br /&gt;
$array['manufactured']=&amp;quot;2035&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array2[]=&amp;quot;AUDI&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;A5&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;ROJO&amp;quot;;&lt;br /&gt;
$array2[]=&amp;quot;2038&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
$array3['name']=&amp;quot;FERRARI&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;SPIDER&amp;quot;;&lt;br /&gt;
$array3['colour']=&amp;quot;VERDE&amp;quot;;&lt;br /&gt;
$array3[]=&amp;quot;2013&amp;quot;;&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array2);&lt;br /&gt;
print_r(&amp;quot;&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
print_r($array3);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les matrius son vectors multidimensionals. Els elements d'un vector a la seva vegada poden ser un altre vector. Un exemple és el següent:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$cars = array(&lt;br /&gt;
   &amp;quot;car1&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Toyota&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;Green&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1999,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1998),&lt;br /&gt;
   &amp;quot;car2&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;BMW&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;RED&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 2005,&amp;quot;engine_cc&amp;quot; =&amp;gt; 2400),&lt;br /&gt;
   &amp;quot;car3&amp;quot; =&amp;gt; array(&amp;quot;make&amp;quot; =&amp;gt; &amp;quot;Renault&amp;quot;,&amp;quot;colour&amp;quot; =&amp;gt; &amp;quot;White&amp;quot;,&amp;quot;year&amp;quot; =&amp;gt; 1993,&amp;quot;engine_cc&amp;quot; =&amp;gt; 1395),&lt;br /&gt;
);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $cars['car1']['make'],&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo $cars['car3']['engine_cc'];&lt;br /&gt;
&lt;br /&gt;
/* El resultat de l'execució de les intruccions anteriors és:&lt;br /&gt;
Toyota&lt;br /&gt;
1395&lt;br /&gt;
*/&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Més informació sobre arrays [http://php.net/manual/en/language.types.array.php aquí.]&lt;br /&gt;
Existeixen MOLTES funcions per manipular els arrays. Dona una ullada a [http://php.net/manual/en/ref.array.php aquesta pàgina] abans que comencis a implementar funcions que ja existeixen a la llibreria de php.&lt;br /&gt;
&lt;br /&gt;
=== Estructures de control ===&lt;br /&gt;
==== La sentència '''IF''' i l'Operador Ternari ====&lt;br /&gt;
Les estructures condicionals s'utilitzen per controlar quines instruccions s'executen. Els condicionals en PHP estan estructurats de manera similar als trobats en C ++ i Java .&lt;br /&gt;
Exemple d'estructures condicionals:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//Exemple 1&lt;br /&gt;
$foo = 1;&lt;br /&gt;
$bar = 2;&lt;br /&gt;
if($foo == $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is equal to $bar.&amp;quot;;&lt;br /&gt;
} elseif ($foo &amp;gt; $bar) {&lt;br /&gt;
    echo &amp;quot;$foo is greater than $bar.&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;$foo is less than $bar.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple 2&lt;br /&gt;
$lower = 10;&lt;br /&gt;
$upper = 100;&lt;br /&gt;
$needle = 25;&lt;br /&gt;
if(($needle &amp;gt;= $lower) &amp;amp;&amp;amp; ($needle &amp;lt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is in the haystack.&amp;quot;;&lt;br /&gt;
} elseif (($needle &amp;lt;= $lower) || ($needle &amp;gt;= $upper)) {&lt;br /&gt;
    echo &amp;quot;The needle is outside of the haystack.&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//Exemple Operador Ternari&lt;br /&gt;
&lt;br /&gt;
$missatge =  (date('G') &amp;lt; 12) ? 'Buenos días' : 'Buenas tardes';&lt;br /&gt;
&lt;br /&gt;
//equival a la següent estructura:&lt;br /&gt;
if (date('G') &amp;lt; 12) {&lt;br /&gt;
$missatge = 'Buenos días';&lt;br /&gt;
} else {&lt;br /&gt;
$missatge = 'Buenas tardes';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''SWITCH''' ====&lt;br /&gt;
Quan es necessita utilitzar un IF amb molts Else pot resultar que es vegi un codi molt redundant. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($user_command == &amp;quot;n&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_north();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;e&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_east();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;s&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_south();&lt;br /&gt;
}&lt;br /&gt;
else if($user_command == &amp;quot;w&amp;quot;)&lt;br /&gt;
{&lt;br /&gt;
  go_west();&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
  do_something_else();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Per millorar la llegibilitat del codi utilitzarem l'estructura 'Switch' de la següent manera:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 switch($user_command)&lt;br /&gt;
 {&lt;br /&gt;
   case 'n':&lt;br /&gt;
     go_north();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'e':&lt;br /&gt;
     go_east();&lt;br /&gt;
     break;&lt;br /&gt;
   case 's':&lt;br /&gt;
     go_south();&lt;br /&gt;
     break;&lt;br /&gt;
   case 'w':&lt;br /&gt;
     go_west();&lt;br /&gt;
     break;&lt;br /&gt;
   default:&lt;br /&gt;
     do_something_else();&lt;br /&gt;
     break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Un altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if($firstvariable == 'comparison1' &lt;br /&gt;
         || $firstvariable == 'comparison2')&lt;br /&gt;
 {&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
 }&lt;br /&gt;
 else if ($firstvariable == 'comparison3')&lt;br /&gt;
 {&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
 }&lt;br /&gt;
 else&lt;br /&gt;
 {&lt;br /&gt;
      launchMissiles();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//amb l'estructura switch :&lt;br /&gt;
 switch($firstvariable)&lt;br /&gt;
 {&lt;br /&gt;
  case 'comparison1':&lt;br /&gt;
  case 'comparison2':&lt;br /&gt;
      doSomething();&lt;br /&gt;
      doSomethingElse();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  case 'comparison3':&lt;br /&gt;
      doAThirdThing();&lt;br /&gt;
      break;&lt;br /&gt;
 &lt;br /&gt;
  default: &lt;br /&gt;
      launchMissiles();&lt;br /&gt;
      break;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''WHILE''' ====&lt;br /&gt;
Aquesta sentència s'utilitzarà per repetir una serie d'instruccions tantes vegades com el condicional sigui evaluat a True.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$c = 0;&lt;br /&gt;
while ($c &amp;lt; 5) {&lt;br /&gt;
   echo $c++;&lt;br /&gt;
} ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Mira el següent codi i enraona si serà un bucle infinit o no:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$c = 1;&lt;br /&gt;
$myName=&amp;quot;Fred&amp;quot;;&lt;br /&gt;
while ($myName != &amp;quot;Rumplestilskin&amp;quot;) &lt;br /&gt;
{&lt;br /&gt;
   if ($myName==&amp;quot;Fred&amp;quot;) &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Leslie&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
   else &lt;br /&gt;
   {&lt;br /&gt;
      $myName=&amp;quot;Marc&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
   $c++;&lt;br /&gt;
 &lt;br /&gt;
   if ($c==3) &lt;br /&gt;
   {&lt;br /&gt;
      break;&lt;br /&gt;
   }&lt;br /&gt;
};&lt;br /&gt;
echo &amp;quot;You lose and I get your baby!\n&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''do ... WHILE''' ====&lt;br /&gt;
És semblan al bucle anterior però les intruccions sempre s'execulten almenys 1 vegada. Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
  $c = 6;&lt;br /&gt;
  do {&lt;br /&gt;
    echo 'Hi';&lt;br /&gt;
  } while ($c &amp;lt; 5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''FOR''' ====&lt;br /&gt;
La sintaxi bàsica d'aquesta sentencia és la següent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 for([initialization]; [condition]; [step])&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'ús:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 for($i = 0; $i &amp;lt; 5; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Exemple d'utilització amb arrays:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
 $menu = array(&amp;quot;Toast and Jam&amp;quot;, &amp;quot;Bacon and Eggs&amp;quot;, &amp;quot;Homefries&amp;quot;, &amp;quot;Skillet&amp;quot;, &amp;quot;Milk and Cereal&amp;quot;);&lt;br /&gt;
 // note to self: get breakfast after writing this article&lt;br /&gt;
 $count = count($menu);&lt;br /&gt;
 for($i = 0; $i &amp;lt; $count; $i++)&lt;br /&gt;
 {&lt;br /&gt;
  echo($i + 1 . &amp;quot;. &amp;quot; . $menu[$i] . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==== La sentència '''FOREACH''' ====&lt;br /&gt;
Aquesta sentència és molt utilitzada per recòrrer arrays. Com el parell array[key]=value pot ser string en ambdós casos, aquesta estructura ens permet obternir-los:&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
foreach ($array as $someVar) {&lt;br /&gt;
  echo ($someVar . &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//un altre exemple:&lt;br /&gt;
foreach ($array as $key =&amp;gt; $value) {&lt;br /&gt;
  echo ($key.&amp;quot;holds the value &amp;quot;.$value.&amp;quot;&amp;lt;br /&amp;gt;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== La sentència '''break''' ====&lt;br /&gt;
&lt;br /&gt;
La sentència break provoca la sortida de qualsevol estructura de control, trencant així un bucle. Penseu per exemple un bucle que cerca un element d’un array. Una vegada trobat, és ineficient acabar de recórrer la resta de l’array.&lt;br /&gt;
''Podeu indicar a aquesta sentència quantes estructures de control voleu saltar. ''&lt;br /&gt;
En l’exemple següent el break provoca la sortida de dos blocs de codi:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
while($edat&amp;lt;20)&lt;br /&gt;
{&lt;br /&gt;
	for( ; ; $edat=$edat+1)&lt;br /&gt;
	{&lt;br /&gt;
		if($edat==18)&lt;br /&gt;
		{&lt;br /&gt;
			echo &amp;quot;Ara ja tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
			break 2;&lt;br /&gt;
		}&lt;br /&gt;
		echo &amp;quot;Encara ets menor d’edat, ja que tens $edat anys!&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	echo &amp;quot;Aquesta línia no sortirà per pantalla!&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
echo &amp;quot;Ja no ets menor d’edat! Tens $edat anys!&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
&lt;br /&gt;
===Exercici: tablita ===&lt;br /&gt;
Se desea crear una página web en la cual muestre un título y luego haga una tabla que imprima 10 filas mostrando &amp;quot;estamos en 2DAW&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Exercici: Vector ===&lt;br /&gt;
Queremos crear un vector &amp;quot;ciudades&amp;quot; donde introduciremos una serie  de ciudades, luego deberá mostrar cada una de las ciudades y el número total.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Recòrrer array ====&lt;br /&gt;
Donat el següent array:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$eu = array( &amp;quot;Italy&amp;quot;=&amp;gt;&amp;quot;Rome&amp;quot;, &amp;quot;Luxembourg&amp;quot;=&amp;gt;&amp;quot;Luxembourg&amp;quot;, &amp;quot;Belgium&amp;quot;=&amp;gt; &amp;quot;Brussels&amp;quot;, &lt;br /&gt;
&amp;quot;Denmark&amp;quot;=&amp;gt;&amp;quot;Copenhagen&amp;quot;, &amp;quot;Finland&amp;quot;=&amp;gt;&amp;quot;Helsinki&amp;quot;, &amp;quot;France&amp;quot; =&amp;gt; &amp;quot;Paris&amp;quot;, &amp;quot;Slovakia&amp;quot;=&amp;gt;&amp;quot;Bratislava&amp;quot;, &lt;br /&gt;
&amp;quot;Slovenia&amp;quot;=&amp;gt;&amp;quot;Ljubljana&amp;quot;, &amp;quot;Germany&amp;quot; =&amp;gt; &amp;quot;Berlin&amp;quot;, &amp;quot;Greece&amp;quot; =&amp;gt; &amp;quot;Athens&amp;quot;, &amp;quot;Ireland&amp;quot;=&amp;gt;&amp;quot;Dublin&amp;quot;, &lt;br /&gt;
&amp;quot;Netherlands&amp;quot;=&amp;gt;&amp;quot;Amsterdam&amp;quot;, &amp;quot;Portugal&amp;quot;=&amp;gt;&amp;quot;Lisbon&amp;quot;, &amp;quot;Spain&amp;quot;=&amp;gt;&amp;quot;Madrid&amp;quot;, &amp;quot;Sweden&amp;quot;=&amp;gt;&amp;quot;Stockholm&amp;quot;,&lt;br /&gt;
 &amp;quot;United Kingdom&amp;quot;=&amp;gt;&amp;quot;London&amp;quot;, &amp;quot;Cyprus&amp;quot;=&amp;gt;&amp;quot;Nicosia&amp;quot;, &amp;quot;Lithuania&amp;quot;=&amp;gt;&amp;quot;Vilnius&amp;quot;, &lt;br /&gt;
&amp;quot;Czech Republic&amp;quot;=&amp;gt;&amp;quot;Prague&amp;quot;, &amp;quot;Estonia&amp;quot;=&amp;gt;&amp;quot;Tallin&amp;quot;, &amp;quot;Hungary&amp;quot;=&amp;gt;&amp;quot;Budapest&amp;quot;, &amp;quot;Latvia&amp;quot;=&amp;gt;&amp;quot;Riga&amp;quot;, &lt;br /&gt;
&amp;quot;Malta&amp;quot;=&amp;gt;&amp;quot;Valetta&amp;quot;, &amp;quot;Austria&amp;quot; =&amp;gt; &amp;quot;Vienna&amp;quot;, &amp;quot;Poland&amp;quot;=&amp;gt;&amp;quot;Warsaw&amp;quot;) ;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Crea un script amb PHP que mostri un llistat amb el noms de les capitals i els seus corresponents països. El llistat ha de ser semblant a:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
La capital de Netherlands és Amsterdam&lt;br /&gt;
La capital de Greece és Athens&lt;br /&gt;
La capital de Germany és Berlin&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:[[solucio_php_recorrer_array]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Afegir un element a un array ====&lt;br /&gt;
Escriu un programa que afegeixi un nou element a un array en una posició determinada.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//abans:&lt;br /&gt;
12345&lt;br /&gt;
&lt;br /&gt;
//després d'afegir $ l'array és:&lt;br /&gt;
123$45&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[solucio_afegir_element_array_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Curta i llarga ====&lt;br /&gt;
Escriu un programa en PHP que retorni la longitud màxima i mínima dels strings que conté un array.&lt;br /&gt;
Exemple:&lt;br /&gt;
&lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
&lt;br /&gt;
/* &lt;br /&gt;
array: (&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
La longitud més curta és 1 i la més llarga és 4.&lt;br /&gt;
&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$ar = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$max=0;&lt;br /&gt;
$min = PHP_INT_MAX;&lt;br /&gt;
&lt;br /&gt;
foreach($ar as $valor){&lt;br /&gt;
    if( strlen($valor) &amp;lt; $min){&lt;br /&gt;
        $min = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
    if (strlen($valor) &amp;gt; $max){&lt;br /&gt;
        $max = strlen($valor);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;La longitud mes curta es $min i la mes llarga es $max.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//Otra solucion:&lt;br /&gt;
&lt;br /&gt;
$my_array = array(&amp;quot;abcd&amp;quot;,&amp;quot;abc&amp;quot;,&amp;quot;de&amp;quot;,&amp;quot;hjjj&amp;quot;,&amp;quot;g&amp;quot;,&amp;quot;wer&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
$otroarray = array_map('strlen', $my_array);&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;La longitud mes curta es &amp;quot;. min($otroarray) .&amp;quot; i la mes llarga es &amp;quot;. max($otroarray).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
print_r($otroarray);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
==== Exercici: Dibuixa asteriscs ====&lt;br /&gt;
Dibuixa amb PHP utilitzant asteriscs el següent dibuix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
* &lt;br /&gt;
* * &lt;br /&gt;
* * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * * &lt;br /&gt;
* * * * &lt;br /&gt;
* * * &lt;br /&gt;
* * &lt;br /&gt;
* &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
$n=5;  &lt;br /&gt;
&lt;br /&gt;
for($i=1; $i&amp;lt;=$n; $i++)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
&lt;br /&gt;
for($i=$n; $i&amp;gt;=1; $i--)  &lt;br /&gt;
{  &lt;br /&gt;
  for($j=1; $j&amp;lt;=$i; $j++)  &lt;br /&gt;
  {  &lt;br /&gt;
    echo ' * ';  &lt;br /&gt;
  }  &lt;br /&gt;
  echo '&amp;lt;br&amp;gt;';  &lt;br /&gt;
}  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Escacs ====&lt;br /&gt;
Dibuixa una taula d'escacs com la que pots veure a continuació. &lt;br /&gt;
Table width=&amp;quot;270px&amp;quot; i cada cel·la ocupa 30px d'amplada i d'altura.&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:escacs.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:solucio_escacs_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Funcions ===&lt;br /&gt;
&lt;br /&gt;
Les funcions son grup d'instruccions que poden ser cridades en qualsevol moment. Les funcions són útils per re-utilitzar codi de manera sencilla dintre de la nostra aplicació.&lt;br /&gt;
====Funcions definides per l’usuari====&lt;br /&gt;
L’usuari pot definir totes les funcions que necessiti. És imprescindible que el nom donat a la funció no estigui prohibit, és a dir, no es poden fer servir:&lt;br /&gt;
*paraules reservades (per exemple, echo), &lt;br /&gt;
*començar amb un nombre o un caràcter especial&lt;br /&gt;
*repetir el nom d’una funció dins un mateix àmbit. &lt;br /&gt;
Tot i que el PHP '''no farà cap distinció entre majúscules i minúscules''', es recomana utilitzar el nom de la funció idèntic a l’utilitzat en la declaració.&lt;br /&gt;
Les funcions poden rebre paràmetres. El pas de paràmetres d’entrada es fa escrivint entre parèntesis i a continuació del nom de la funció.&lt;br /&gt;
En l’exemple següent podeu veure com es declara la funció missatge i com, posteriorment, es crida passant-hi un paràmetre.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function missatge($argument)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;$argument&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
missatge(&amp;quot;Aquest és l’argument que es passa en aquest exemple.&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les funcions també podran retornar valors. Per fer-ho caldrà utilitzar la sentència '''return'''.&lt;br /&gt;
En l’exemple següent comprovareu com la funció suma, la qual rep dos paràmetres, retorna el resultat de sumar dos nombres:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
function suma ($valor1,$valor2)&lt;br /&gt;
{&lt;br /&gt;
	return($valor1+$valor2);&lt;br /&gt;
}&lt;br /&gt;
echo suma(4,6);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Funcions Internes====&lt;br /&gt;
El llenguatge PHP té funcions definides internament. Aquestes funcions són de gran utilitat per al programador i resulta imprescindible estudiarles i conèixer-ne les més importants.&lt;br /&gt;
&lt;br /&gt;
És possible que diverses funcions no es reconeguin en el vostre entorn de treball del PHP; el motiu d’això és que algunes funcions internes no s’han inclòs en la compilació, la qual cosa ha fet necessària una compilació dels mòduls que les contenen. Amb phpinfo() es poden veure les extensions carregades en la vostra configuració del PHP.&lt;br /&gt;
&lt;br /&gt;
Són funcions internes molt usuals ''echo, fprintf, print, printf i sprintf'', en què queda demostrat que el llenguatge PHP ja té definides funcions específiques que poden ser de gran utilitat per a l’usuari. &lt;br /&gt;
&lt;br /&gt;
Podeu mirar l’ajuda de PHP a la [https://www.php.net/manual/es/funcref.php pàgina oficial].&lt;br /&gt;
Funcions de Strings: [http://php.net/manual/en/ref.strings.php pàgina oficial].&lt;br /&gt;
&lt;br /&gt;
En l’exemple següent es mostra com es pot codificar amb codificació ''md5'' el contingut d’una variable:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$nom = 'Blanca';&lt;br /&gt;
echo(&amp;quot;La codificació md5 de $nom és:&amp;lt;br&amp;gt;&amp;quot;);&lt;br /&gt;
echo md5($nom);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
===Exercici===&lt;br /&gt;
El código de encriptación md5 y sha están comprometido ya que son fáciles de desencriptar. ¿Qué algoritmo se debería utilizar?&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Algoritmes d'ordenació====&lt;br /&gt;
Segons el següent array &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$fruits = array(&amp;quot;lemon&amp;quot;, &amp;quot;orange&amp;quot;, &amp;quot;banana&amp;quot;, &amp;quot;apple&amp;quot;); &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''SORT''' Esta función ordena una matriz. Los elementos se organizarán de menor a mayor cuando se haya completado esta función.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
sort($cars);&lt;br /&gt;
&lt;br /&gt;
BMW&lt;br /&gt;
Toyota&lt;br /&gt;
Volvo&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''RSORT''' Esta función ordena una matriz en orden inverso (de mayor a menor).&lt;br /&gt;
Nota: Esta función asigna nuevas claves para los elementos en la matriz. Eliminará todas las claves existentes que haya asignado, en lugar de simplemente reordenar las claves.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$cars=array(&amp;quot;Volvo&amp;quot;,&amp;quot;BMW&amp;quot;,&amp;quot;Toyota&amp;quot;);&lt;br /&gt;
rsort($cars);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Volvo&lt;br /&gt;
Toyota&lt;br /&gt;
BMW&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''asort'''()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;345&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;3&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
asort($age)&lt;br /&gt;
&lt;br /&gt;
Array ( [Ben] =&amp;gt; 3 [Joe] =&amp;gt; 43 [Peter] =&amp;gt; 345 ) &lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''arsort''' ()&lt;br /&gt;
Esta función ordena una matriz de modo que los índices de la matriz mantengan su correlación con los elementos de la matriz a los que están asociados. Esto se usa principalmente al ordenar matrices asociativas donde el orden de los elementos reales es significativo.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
arsort($age);&lt;br /&gt;
&lt;br /&gt;
Array ( [Peter] =&amp;gt; 345 [Joe] =&amp;gt; 43 [Ben] =&amp;gt; 3 ) &lt;br /&gt;
Key=Peter, Value=345&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=3&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''ksort''' ()&lt;br /&gt;
Ordena una matriz por clave, manteniendo la clave de las correlaciones de datos. Esto es útil principalmente para matrices asociativas.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;200&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;99&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
ksort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Ben, Value=99&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Peter, Value=200&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''krsort'''()                &lt;br /&gt;
Sorts an array by key in reverse order, maintaining key to data correlations. This is useful mainly for associative arrays.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$age=array(&amp;quot;Peter&amp;quot;=&amp;gt;&amp;quot;35&amp;quot;,&amp;quot;Ben&amp;quot;=&amp;gt;&amp;quot;37&amp;quot;,&amp;quot;Joe&amp;quot;=&amp;gt;&amp;quot;43&amp;quot;);&lt;br /&gt;
krsort($age);&lt;br /&gt;
&lt;br /&gt;
Key=Peter, Value=35&lt;br /&gt;
Key=Joe, Value=43&lt;br /&gt;
Key=Ben, Value=37&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''natsort''' ()&lt;br /&gt;
Esta función implementa un algoritmo de ordenamiento que ordena cadenas alfanuméricas en la forma en que lo haría un ser humano mientras mantiene asociaciones de clave / valor. Esto se describe como un &amp;quot;orden natural&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$array1 = $array2 = array(&amp;quot;img12.png&amp;quot;, &amp;quot;img10.png&amp;quot;, &amp;quot;img2.png&amp;quot;, &amp;quot;img1.png&amp;quot;);&lt;br /&gt;
sort($array1);&lt;br /&gt;
echo &amp;quot;Standard sorting\n&amp;quot;;print_r($array1);&lt;br /&gt;
natsort($array2);&lt;br /&gt;
echo &amp;quot;\nNatural order sorting\n&amp;quot;;print_r($array2);?&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
The above example will output:&lt;br /&gt;
Standard sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [0] =&amp;gt; img1.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [2] =&amp;gt; img12.png&lt;br /&gt;
    [3] =&amp;gt; img2.png&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
Natural order sorting&lt;br /&gt;
Array&lt;br /&gt;
(&lt;br /&gt;
    [3] =&amp;gt; img1.png&lt;br /&gt;
    [2] =&amp;gt; img2.png&lt;br /&gt;
    [1] =&amp;gt; img10.png&lt;br /&gt;
    [0] =&amp;gt; img12.png&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercicis ===&lt;br /&gt;
====Exercici: Ordenació ====&lt;br /&gt;
Crea una funció que ordeni un array. &lt;br /&gt;
*Per claus de menor a major i de major a menor&lt;br /&gt;
*Per valors de menor a major i de major a menor&lt;br /&gt;
&lt;br /&gt;
[[:Solucio_ordenacio]]&lt;br /&gt;
&lt;br /&gt;
==== Exercici: Comprova minúscules ====&lt;br /&gt;
Crea una funció que comprovi si tots els caràcters d'un string son minúscules.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function is_str_lowercase($str1)  &lt;br /&gt;
   {  &lt;br /&gt;
    for ($sc = 0; $sc &amp;lt; strlen($str1); $sc++) {  &lt;br /&gt;
          if (ord($str1[$sc]) &amp;gt;= ord('A') &amp;amp;&amp;amp;  ord($str1[$sc]) &amp;lt;= ord('Z')) {    // ord — devuelve el valor ASCII de un caracter&lt;br /&gt;
      return false;  &lt;br /&gt;
         }  &lt;br /&gt;
         }  &lt;br /&gt;
      return true;  &lt;br /&gt;
       }  &lt;br /&gt;
var_dump(is_str_lowercase('abc def ghi'));  &lt;br /&gt;
var_dump(is_str_lowercase('abc dEf ghi'));  &lt;br /&gt;
?&amp;gt;  &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Exercici: Primers====&lt;br /&gt;
Crea una funció que indiqui si un número és primer.&lt;br /&gt;
&lt;br /&gt;
Solució:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
function IsPrime($n)  &lt;br /&gt;
{  &lt;br /&gt;
 for($x=2; $x&amp;lt;$n; $x++)  &lt;br /&gt;
   {  &lt;br /&gt;
      if($n %$x ==0)  &lt;br /&gt;
          {  &lt;br /&gt;
           return 0;  &lt;br /&gt;
          }  &lt;br /&gt;
    }  &lt;br /&gt;
  return 1;  &lt;br /&gt;
   }  &lt;br /&gt;
$a = IsPrime(3);  &lt;br /&gt;
if ($a==0)  &lt;br /&gt;
echo 'No es Primo.....';  &lt;br /&gt;
else  &lt;br /&gt;
echo 'ES primo..';  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici- Normalizar ===&lt;br /&gt;
&lt;br /&gt;
Tenemos una base de datos que sólo acepta nombres y apellidos SIN acentos, ni dieresis... por tanto, queremos que cuando escriba el usuario un nombre como &amp;quot;jÚlïÒ&amp;quot; lo normalice a &amp;quot;JULIO&amp;quot;. &lt;br /&gt;
  $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
&lt;br /&gt;
  $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
&lt;br /&gt;
Es interesante investigar sobre la función strtr&lt;br /&gt;
&lt;br /&gt;
solución:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UTF-8 es una codificación multibyte que puede representar cualquier carácter Unicode.&lt;br /&gt;
ISO 8859-1 es una codificación de un solo byte que puede representar los primeros 256 caracteres Unicode.&lt;br /&gt;
Ambos codifican ASCII exactamente de la misma manera.&lt;br /&gt;
&lt;br /&gt;
utf8_decode -&amp;gt;  Convierte una cadena con los caracteres codificados ISO-8859-1 con UTF-8 &lt;br /&gt;
&lt;br /&gt;
   //función que quita los acentos, dieresis, Ñ....&lt;br /&gt;
    $originales = 'ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûýýþÿŔŕ';&lt;br /&gt;
    $modificadas = 'aaaaaaaceeeeiiiidnoooooouuuuybsaaaaaaaceeeeiiiidnoooooouuuyybyRr';&lt;br /&gt;
    $cadena = utf8_decode($cadena);&lt;br /&gt;
    $cadena = strtr($cadena, utf8_decode($originales), $modificadas);&lt;br /&gt;
    $cadena = strtoupper($cadena);&lt;br /&gt;
    return utf8_encode($cadena);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 //$cadena = strtr(utf8_decode($cadena), utf8_decode($originales), $modificadas);   //Altra solució&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tipus de Dades en PHP ==&lt;br /&gt;
&lt;br /&gt;
*'''Boolean'''&lt;br /&gt;
És un tipus de dades molt simple que pot representar un valor cert (TRUE) o fals (FALSE). Aquest tipus de dades s’utilitza molt en estructures de control. Si feu conversió de dades és molt important que tingueu en&lt;br /&gt;
compte que es considerarà fals el nombre enter, la cadena 0 o una cadena buida, una matriu buida, un objecte sense variables, el tipus NULL i els objectes SimpleXML que s’hagin creat d’etiquetes buides.&lt;br /&gt;
&lt;br /&gt;
*'''Integer'''&lt;br /&gt;
Aquest tipus representa nombres no fraccionables per sota de la unitat. Poden ser positius i negatius. Aquests nombres enters els podeu representar en notació decimal, hexadecimal o octal. La plataforma sobre la&lt;br /&gt;
qual treballeu determinarà la mida de les variables enteres. El PHP forçarà un canvi de tipus a flotant si es produeix un desbordament, tant si és positiu com negatiu. A continuació, es mostren dos exemples de variables enteres.&lt;br /&gt;
&lt;br /&gt;
*'''float'''&lt;br /&gt;
Aquest tipus fa referència als nombres de coma flotant, i normalment treballa amb una precisió aproximada de catorze dígits decimals. A continuació, es mostra un exemple d’una variable amb coma flotant.&lt;br /&gt;
&lt;br /&gt;
*'''String'''&lt;br /&gt;
Es tracta d’una cadena de caràcters. El llenguatge del PHP no imposa un límit a la mida d’aquestes cadenes; ara bé, no oblideu que el límit el marcarà la memòria del maquinari en què estigui funcionant el PHP. Aquí&lt;br /&gt;
teniu diversos exemples de cadenes.&lt;br /&gt;
&lt;br /&gt;
*'''array'''&lt;br /&gt;
un array és una matriu, d’una dimensió o més, que conté dades que s’associen segons unes claus. És un tipus molt útil, i comprovareu que el seu ús té una gran potència. Per crear una matriu podeu utilitzar la paraula&lt;br /&gt;
reservada ''array()'' o bé acompanyar el nom de la variable amb ''[ ]''.&lt;br /&gt;
&lt;br /&gt;
*'''object'''&lt;br /&gt;
aquest tipus d’objecte està previst en el llenguatge PHP perquè suporta el llenguatge orientat a objectes. Un objecte és un ítem amb unes característiques i funcionalitats marcades per la classe a la qual pertany. Per crear un objecte cal utilitzar la partícula ''new''.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
//tipus boolean:&lt;br /&gt;
$sortir=FALSE;&lt;br /&gt;
$entrar=TRUE;&lt;br /&gt;
&lt;br /&gt;
//tipus integer:&lt;br /&gt;
$positiu=3451;&lt;br /&gt;
$negatiu= − 4345&lt;br /&gt;
&lt;br /&gt;
//tipus float:&lt;br /&gt;
$amb_coma=34.5;&lt;br /&gt;
&lt;br /&gt;
//tipus string:&lt;br /&gt;
$nom=’Wayan’;&lt;br /&gt;
$salutacio=&amp;quot;Hola $nom!&amp;quot;;&lt;br /&gt;
echo $salutacio.&amp;quot; Benvingut&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus array:&lt;br /&gt;
$grau_cicles=array(&amp;quot;superior&amp;quot;,&amp;quot;mitja&amp;quot;);&lt;br /&gt;
$families[]=&amp;quot;Informàtica&amp;quot;;&lt;br /&gt;
$families[]=&amp;quot;Electrònica&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
//tipus objecte:&lt;br /&gt;
class Alumne {&lt;br /&gt;
public function matricular($nom)&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Ja estàs matriculat $nom&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
$alumne1=new Alumne();&lt;br /&gt;
$alumne1−&amp;gt;matricular(’Made’);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Creació Classes/ OBJECTES'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class Coche&lt;br /&gt;
{&lt;br /&gt;
	static $numruedas = 4;&lt;br /&gt;
	var $color;&lt;br /&gt;
	var $posx;&lt;br /&gt;
	var $posy;&lt;br /&gt;
	var $velocidad;&lt;br /&gt;
	function __construct($color, $posx, $posy)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;color = $color;&lt;br /&gt;
		$this-&amp;gt;posx = $posx;&lt;br /&gt;
		$this-&amp;gt;posy = $posy;&lt;br /&gt;
		$this-&amp;gt;velocidad = 0;&lt;br /&gt;
	}&lt;br /&gt;
	function mover($x, $y)&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;posx = $x;&lt;br /&gt;
		$this-&amp;gt;posy = $y;&lt;br /&gt;
	}&lt;br /&gt;
	function acelerar()&lt;br /&gt;
	{&lt;br /&gt;
		$this-&amp;gt;velocidad = $this-&amp;gt;velocidad + 10;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
	function frenar()&lt;br /&gt;
	{&lt;br /&gt;
		if ($this-&amp;gt;velocidad &amp;gt; 10)&lt;br /&gt;
			$this-&amp;gt;velocidad = $this-&amp;gt;velocidad - 10;&lt;br /&gt;
		else&lt;br /&gt;
			$this-&amp;gt;velocidad = 0;&lt;br /&gt;
		return $this-&amp;gt;velocidad;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$car = new Coche(&amp;quot;verde&amp;quot;,10,10);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Les dades especials ===&lt;br /&gt;
*'''resource'''&lt;br /&gt;
La variable que pertany a aquest tipus farà referència a un recurs extern. Determinades funcions faran ús d’aquest recurs. Per exemple, la funció mysql_db_query, que té la funció d’enviar una petició mySQL, retorna un tipus resource. En l’exemple següent la variable $resultat és de tipus resource:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$query=&amp;quot;SELECT * FROM alumnes&amp;quot;;&lt;br /&gt;
$resultat=mysql_query($query);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''NULL'''&lt;br /&gt;
Quan necessiteu una variable que no tingui cap valor haureu d’utilitzar aquest tipus.&lt;br /&gt;
&lt;br /&gt;
===Els pseudotipus===&lt;br /&gt;
* '''mixed''': aquest pseudotipus indica que la variable en questió pot emmagatzemar múltiples tipus.&lt;br /&gt;
* '''number''': indica que la variable pot contenir un valor enter o de coma flotant.&lt;br /&gt;
* '''callback''': utilitzareu aquest pseudotipus per emmagatzemar crides de retorn generades per funcions de l’usuari.&lt;br /&gt;
&lt;br /&gt;
=== Conversions de tipus ===&lt;br /&gt;
&lt;br /&gt;
Per forçar un canvi de tipus haureu d’especificar entre parèntesis el tipus al qual voleu fer la conversió i col·locar-lo davant la variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;2&amp;quot; cellpadding=&amp;quot;4&amp;quot; cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;&amp;quot;&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Senténcia&lt;br /&gt;
! align=&amp;quot;left&amp;quot; width=&amp;quot;150 px&amp;quot; style=&amp;quot;background:Lavender; color:Black&amp;quot;|Modelat a &lt;br /&gt;
|-&lt;br /&gt;
| (integer), (int) ||integer.&lt;br /&gt;
|-&lt;br /&gt;
| (boolean)||boolean&lt;br /&gt;
|-&lt;br /&gt;
| (float), (double), (real) ||float&lt;br /&gt;
|-&lt;br /&gt;
| (string) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (binary) ||string&lt;br /&gt;
|-&lt;br /&gt;
| (array)||array&lt;br /&gt;
|-&lt;br /&gt;
| (object)|| object&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;quot;Sense modelar 27/5: &amp;quot;.(27/5).&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;I ara ja modelat: &amp;quot;.(integer)(27/5);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Constants===&lt;br /&gt;
Una constant és un identificador (nom) per expressar un valor simple. Com el nom suggereix, aquest valor no pot variar durant l'execució del script. (A excepció de les [[http://php.net/manual/es/language.constants.predefined.php constants màgiques]], que en realitat no són constants). Una constant és sensible a majúscules per defecte. Per convenció, els identificadors de constants sempre solen declarar-se en majúscules.&lt;br /&gt;
&lt;br /&gt;
El nom d'una constant segueix les mateixes regles que qualsevol altra etiqueta de PHP. Un nom de constant vàlid comença per una lletra o subguió, seguit per qualsevol nombre o lletres, nombres o subguions. Usant una expressió regular, es representaria de la següent manera: [a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
define('MIN_VALUE', '0.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
define('MAX_VALUE', '1.0');   // OK - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
echo MIN_VALUE;&lt;br /&gt;
//const MIN_VALUE = 0.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
//const MAX_VALUE = 1.0;         Aquí Malament - Però funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
class Exemple1&lt;br /&gt;
{&lt;br /&gt;
  //define('MIN_VALUE', '0.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
  //define('MAX_VALUE', '1.0');  Malament - Funciona FORA d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  const MIN_VALUE = 0.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
  const MAX_VALUE = 1.0;      // OK - Funciona DINTRE d'una definició de classe&lt;br /&gt;
&lt;br /&gt;
  public static function getMinValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MIN_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  public static function getMaxValue()&lt;br /&gt;
  {&lt;br /&gt;
    return self::MAX_VALUE;&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo Exemple1::getMinValue();   //invocamos clase &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Cuál es la diferencia entre $this y self:: ?'''&lt;br /&gt;
&lt;br /&gt;
Uno usa $this para referenciar al objeto actual, y se utiliza self:: para referenciar la clase actual. Se utiliza $this-&amp;gt;nombre para nombres no estáticos y se utiliza self::nombres para nombres estáticos.&lt;br /&gt;
&lt;br /&gt;
=== Variables predefinides ===&lt;br /&gt;
&lt;br /&gt;
En PHP hi ha una sèrie de variables predefinides que resulten de gran ajuda per al programador. Dins d’aquestes variables predefinides cal destacar un gran grup, el grup de les anomenades superglobals.&lt;br /&gt;
&lt;br /&gt;
Les variables '''superglobals''' són variables que sempre estan disponibles en tots els àmbits.&lt;br /&gt;
&lt;br /&gt;
*'''$GLOBALS''':fa referència a totes les variables disponibles en l’àmbit global. Es tracta d’una variable de tipus matriu associativa.&lt;br /&gt;
En l’exemple següent es recorre la variable superglobal $GLOBALS:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$una_variable=&amp;quot;Hola&amp;quot;;&lt;br /&gt;
$una_altra_variable=&amp;quot;Com va?&amp;quot;;&lt;br /&gt;
foreach ($GLOBALS as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;GLOBALS[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_SERVER''':ofereix informació molt últil sobre el servidor i l’entorn d’execució. Els valors que emmagatzema són generats pel navegador web.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
/*Executeu-lo i veureu un seguit de dades&lt;br /&gt;
referents a la màquina que fa de servidor del PHP. Entre altres coses, identificareu&lt;br /&gt;
el nom de la màquina, la versió del navegador, la versió del servidor web, la&lt;br /&gt;
ubicació de fitxers importants i un llarg etcètera.*/&lt;br /&gt;
&lt;br /&gt;
foreach ($_SERVER as $key =&amp;gt; $valor)&lt;br /&gt;
   echo &amp;quot;SERVER[$key] = $valor&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*'''$_GET''': correspon a la variable GET del protocol HTTP. Emmagatzema els valors de les variables que es trasmeten per mitjà del protocol HTTP mitjançant el mètode GET. El seu ús és molt normal en formularis.&lt;br /&gt;
&lt;br /&gt;
*'''$_POST''': correspon a la variable POST del protocol HTTP. Emmagatzema els valors de les variables que es transmeten per mitjà del protocol HTTP mitjançant el mètode POST. El seu ús és, generalment, més adequat que el mètode GET per a temes de seguretat.&lt;br /&gt;
&lt;br /&gt;
*'''$_COOKIE''': és una variable de tipus matriu associativa que emmagatzemarà les variables passades a l’script per mitjà de les galetes de l’HTML.&lt;br /&gt;
&lt;br /&gt;
*'''$_REQUEST''': és una matriu associativa que conté les dades de $_GET ,$_POST i $_COOKIE.&lt;br /&gt;
&lt;br /&gt;
*'''$_FILES''': aquesta variable s’utilitza en la càrrega de fitxers per mitjà del protocol HTTP. El mètode utilitzat és el POST.&lt;br /&gt;
&lt;br /&gt;
*'''$_SESSION''': conté les variables de sessió disponibles en l’script actual.&lt;br /&gt;
&lt;br /&gt;
*'''$_ENV''': conté les variables d’entorn.&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Detecció del Navegador ===&lt;br /&gt;
Escriu un script en PHP que detecti el navegador que està utilitzant el client que ha demanat la pàgina.&lt;br /&gt;
&lt;br /&gt;
[[:solució_detecció_navegador_php]]&lt;br /&gt;
&lt;br /&gt;
=== Variables estàtiques ===&lt;br /&gt;
Les variables estàtiques sempre mantenen el valor encara que el programa abandoni l’àmbit de la variable, i existeixen només en l’àmbit local de les funcions. No s’hi pot accedir fora d’aquest àmbit.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
function comptador()&lt;br /&gt;
{&lt;br /&gt;
   $a = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador: &amp;quot;.$a.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $a++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function comptadorEstatic()&lt;br /&gt;
{&lt;br /&gt;
   static $b = 0;&lt;br /&gt;
   echo &amp;quot;Al comptador estàtic: &amp;quot;.$b.&amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
   $b++;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
for($i=0;$i&amp;lt;3;$i++)&lt;br /&gt;
{&lt;br /&gt;
   comptador();&lt;br /&gt;
   comptadorEstatic();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Integració PHP ==&lt;br /&gt;
&lt;br /&gt;
Normalment trobareu el llenguatge de programació PHP dins d’altres llenguatges.&lt;br /&gt;
El més usual és escriure codi en PHP dins de codi HTML.&lt;br /&gt;
&lt;br /&gt;
Heu de recordar que el codi PHP és interpretat pel servidor, i els resultats es mostren en el navegador que utilitzeu. La simbiosi que es crea entre el PHP i l’HTML permet al PHP generar HTML i a l’HTML passar dades al PHP.&lt;br /&gt;
&lt;br /&gt;
=== PHP dintre de PHP ===&lt;br /&gt;
&lt;br /&gt;
==== Include vs Require ====&lt;br /&gt;
És possible inserir el contingut d'un fitxer PHP en un altre arxiu PHP (abans que el servidor l'executi), amb la declaració d'incloure o requerir. Les sentències d'inclusió i requereixen són idèntics , excepte en cas de fallada :&lt;br /&gt;
&lt;br /&gt;
*'''requerir''' (require) produirà un error fatal ( E_COMPILE_ERROR ) i aturar la seqüència de comandaments&lt;br /&gt;
*'''inclou''' (include) només produirà una advertència ( E_WARNING ) i el guió seguirà&lt;br /&gt;
&lt;br /&gt;
Per tant, si voleu que l'execució continuï mostrant als usuaris la sortida, fins i tot si el fitxer d'inclusió falta, utilitzeu la instrucció d'inclusió. Altrament, en cas de FrameWork, CMS, o amb aplicacions PHP complexes, sempre utilitzeu la instrucció que requereix el fitxer per a poder continuar l'execució. Això ajudarà a evitar posar en perill la seguretat i la integritat de l'aplicació, per si de cas un arxiu clau falta accidentalment.&lt;br /&gt;
&lt;br /&gt;
Inclusió d'arxius estalvia molta feina. Això significa que pots crear una capçalera, peu de pàgina o arxiu de menú estàndard per a totes les pàgines web. Llavors, quan la capçalera ha de ser actualitzada, només s'ha d'actualitzar la capçalera inclouen l'arxiu.&lt;br /&gt;
&lt;br /&gt;
'''Sintaxi'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include 'filename.php';&lt;br /&gt;
&lt;br /&gt;
//or&lt;br /&gt;
&lt;br /&gt;
require 'Otherfilename.php';&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Include_once vs Require_once ====&lt;br /&gt;
Require_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a require.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
require_once('x.php');  &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Include_once() es pot utilitzar per incloure un arxiu PHP en un altre, quan potser s'hagi de incloure el fitxer anomenat més d'una vegada. Si es comprova que l'arxiu ja ha estat inclòs, ignorarà altres inclusions. El seu funcionament és identic a include.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
include_once('x.php');  &lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Redireccions ====&lt;br /&gt;
* Son sentencies on s'envia al navegador una nova pàgina. La pàgina que tenia el navegador desapareix i apareix una nova pàgina, la que està definida al location: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
header(&amp;quot;location: novapàgina.php&amp;quot;)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Exercici PHP amb cap i peus ===&lt;br /&gt;
&lt;br /&gt;
L’objectiu d’aquesta activitat és mostrar el funcionament de la inclusió d’arxius a PHP. Fer servir includes us permet simplificar el codi de les pàgines. Per exemple, podeu afegir un fitxer de capçalera (cap.php) i un de peu (peu.php) amb els continguts comuns de totes les pàgines del vostre lloc (el bàner, el menú, la informació general). Senzillament incloent aquests fitxers a totes les pàgines, podeu aconseguir una estètica comú. Si heu de canviar en algun moment la capçalera, modificant l’arxiu cap.php ho tindreu modificat a totes les pàgines del web.&lt;br /&gt;
Feu una pàgina web amb continguts estructurats amb dos fitxers: cap.php i peu.php&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!----&amp;gt;&lt;br /&gt;
[[:solucio_cap_peus_php]]&lt;br /&gt;
&lt;br /&gt;
[[:solucio_cap_peus_php2]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== PHP i Formularis HTML ===&lt;br /&gt;
El formulari electrònic és una eina molt potent fortament establida a Internet. Permet l’intercanvi o la introducció de dades entre usuaris d’una manera ràpida i senzilla. Un formulari permet la interactivitat i és el detonant que converteix Internet en l’eina més poderosa per enviar informació a un destinatari.&lt;br /&gt;
&lt;br /&gt;
El llenguatge PHP representa un salt qualitatiu enorme en l’ús de formularis. L’HTML no és un llenguatge creat pensant a utilitzar formularis, sinó que es va crear amb altres objectius. El llenguatge PHP té un gran potencial en la gestió de dades; per tant, quan HTML i PHP treballen juntament amb formularis ens trobem amb un binomi ideal.&lt;br /&gt;
&lt;br /&gt;
====Preparació de l’HTML====&lt;br /&gt;
El llenguatge HTML mostrarà la façana que l’usuari veurà a la pantalla del navegador. El PHP serà darrere d’aquesta primera pantalla i treballarà amb les dades.&lt;br /&gt;
El primer que cal programar per fer servir un formulari dissenyat en PHP és crear&lt;br /&gt;
el codi HTML. Un formulari en HTML s’emmarca entre les etiquetes &amp;lt;FORM&amp;gt; i &amp;lt;/FORM&amp;gt;. Per manipular aquest formulari s’utilitza l’atribut ''ACTION''.&lt;br /&gt;
L’atribut ''ACTION'' indica el programa que s’encarrega de manipular les dades, tasca que encomanareu a un codi dissenyat en llenguatge PHP.&lt;br /&gt;
L’etiqueta &amp;lt;form&amp;gt; us permet fer servir dos mètodes per enviar informació: '''GET''' i '''POST'''.&lt;br /&gt;
El mètode '''GET''' és molt útil en motors de cerca, però no ofereix gaire seguretat, ja que les dades que envia es poden veure en l’URL del navegador.&lt;br /&gt;
El mètode '''POST''' és molt més segur, ja que quan el servidor detecta que el mètode de transacció d’informació és '''POST''' espera rebre dades immediatament sense fer servir l’URL, la qual cosa implica que aquestes dades no seran visibles en l’URL.&lt;br /&gt;
Exemple de Formulari:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;El nostre primer exemple amb formularis&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;Introdueix el teu nom i prem el botó!&amp;lt;/H1&amp;gt;&lt;br /&gt;
&amp;lt;FORM ACTION=&amp;quot;contesta.php&amp;quot; METHOD=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Si us plau, escriu el teu nom:&amp;lt;INPUT TYPE=&amp;quot;text&amp;quot; NAME=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;INPUT TYPE=&amp;quot;submit&amp;quot; VALUE=&amp;quot;Enviar&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/FORM&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Com valora el PHP un formulari ====&lt;br /&gt;
En el moment d’enviar les dades des del formulari d’una pàgina HTML a un fitxer escrit en PHP s’ha de tenir en compte que l’atribut ''NAME'' emmagatzema el valor.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Resposta a la petició de dades&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;H1&amp;gt;...Continuem amb l’exemple!&amp;lt;/H1&amp;gt;&lt;br /&gt;
El teu nom és:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_POST['nom'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
En el moment en què s’envien dades del formulari HTML cap a un fitxer PHP, aquestes dades apareixeran dins d’un array superglobal amb tots els seus valors.&lt;br /&gt;
&lt;br /&gt;
=== Exercici Mini Calculadora ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar una calculadora de sólo SUMA, para ello tendremos dos inputs y un botón, cuando se aprete el botón deberá enviar enviar el formulario al server haciendo la operación y mostrándola.&lt;br /&gt;
 &lt;br /&gt;
=== Exercici Formulari amb Vectors ===&lt;br /&gt;
&lt;br /&gt;
Se desea realizar un formulario en el servidor que genere 10 inputs y un botón, a continuación el servidor recogerá todos los datos los mostrará y calculará la suma total. &lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
:[[solu_vector_input]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
====Les matrius associatives i els formularis====&lt;br /&gt;
Podeu utilitzar les matrius associatives $_POST i $_GET ; el seu ús, però, serà condicionat pel mètode utilitzat en el pas de dades en el codi HTML. Així, si en el codi HTMLel mètode és '''POST''' haureu de fer servir la matriu associativa '''$_POST'''; en canvi, si heu fet servir el mètode '''GET''' en el codi HTML, haureu de fer servir la matriu associativa '''$_GET'''.&lt;br /&gt;
&lt;br /&gt;
Per accedir als valors emmagatzemats en les matrius associatives fareu servir l’atribut corresponent '''NAME''' de l’HTML com a índex de la matriu associativa. &lt;br /&gt;
&lt;br /&gt;
No heu d’oblidar que el PHP és un llenguatge de programació que, entre altres coses, us permet utilitzar bucles. En el formulari següent es defineix una selecció múltiple, en què podreu marcar els navegadors que coneixeu.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Un exemple amb un formulari&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;seleccioMultiple.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
Nom: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nom&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Correu electrònic: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;email&amp;quot;&amp;gt; &amp;lt;br&amp;gt;&lt;br /&gt;
Navegadors que coneixes: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;select name=&amp;quot;navegadors[]&amp;quot; multiple&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Chrome&amp;quot;&amp;gt;Chrome&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;MozillaFirefox&amp;quot;&amp;gt;Mozilla Firefox&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Safari&amp;quot;&amp;gt;Safari&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Opera&amp;quot;&amp;gt;Opera&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;option value=&amp;quot;Lynx&amp;quot;&amp;gt;Lynx&amp;lt;/option&amp;gt;&lt;br /&gt;
&amp;lt;/select&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Aquí us trobareu amb un petit problema. Per recuperar els valors introduïts com a nom i correu electrònic no hi ha cap problema, la matriu $_POST us permetrà un recorregut buscant els valors emmagatzemats a nom iemail. Amb la selecció múltiple, però, sorgeix un petit problema. A diferència dels casos anteriors, ara navegadors pot contenir més d’un valor, com ho fareu per mostrar tots els valors per pantalla? La solució és utilitzar un bucle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
foreach ($_POST['navegadors'] as $opcio)&lt;br /&gt;
echo $opcio.&amp;quot;\n&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Un altre exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
if ($_POST) {&lt;br /&gt;
    echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
    //echo htmlspecialchars(print_r($_POST, true));&lt;br /&gt;
    print_r($_POST);&lt;br /&gt;
    print_r($_POST['personal']);&lt;br /&gt;
    print_r($_POST['personal']['nombre']);&lt;br /&gt;
    echo '&amp;lt;/pre&amp;gt;';&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
    Nombre:  &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[nombre]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Email:   &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;personal[email]&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    Cerveza: &amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;select multiple name=&amp;quot;cerveza[]&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;warthog&amp;quot;&amp;gt;Warthog&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;guinness&amp;quot;&amp;gt;Guinness&amp;lt;/option&amp;gt;&lt;br /&gt;
        &amp;lt;option value=&amp;quot;stuttgarter&amp;quot;&amp;gt;Stuttgarter Schwabenbräu&amp;lt;/option&amp;gt;&lt;br /&gt;
    &amp;lt;/select&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;¡enviarme!&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode GET ===&lt;br /&gt;
*El mètode GET produeix una cadena llarga que apareix en els logs del servidor i a la URL del navegador.&lt;br /&gt;
&lt;br /&gt;
*GET envia les dades usant la URL&lt;br /&gt;
&lt;br /&gt;
*El mètode GET es limita a enviar fins a només 1.024 caràcters .&lt;br /&gt;
&lt;br /&gt;
*Mai utilitzeu el mètode GET, si voleu enviar la contrasenya o una altra informació confidencial al servidor .&lt;br /&gt;
&lt;br /&gt;
*GET no pot ser utilitzat per enviar dades binàries, com imatges o documents de text, al servidor .&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode GET es pot accedir mitjançant la variable d'entorn QUERY_STRING.&lt;br /&gt;
&lt;br /&gt;
*PHP proveeix la matriu associativa $_GET per accedeix a tota la informació que s'enviï mitjançant el mètode GET&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$PHP_SELF = $_SERVER['PHP_SELF'];&lt;br /&gt;
echo $PHP_SELF ;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  if( isset($_GET[&amp;quot;name&amp;quot;])||  isset($_GET[&amp;quot;age&amp;quot;]) )&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_GET['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_GET['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt; method=&amp;quot;GET&amp;quot;&amp;gt;&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== El mètode POST ===&lt;br /&gt;
&lt;br /&gt;
*POST envía los datos de forma que no podemos verlos (en un segundo plano u &amp;quot;ocultos&amp;quot; al usuario).&lt;br /&gt;
&lt;br /&gt;
*El mètode POST no té cap restricció en la mida de les dades a enviar.&lt;br /&gt;
&lt;br /&gt;
*El mètode POST es pot utilitzar per enviar ASCII, així com dades binàries.&lt;br /&gt;
&lt;br /&gt;
*Les dades enviades pel mètode POST passa per la capçalera HTTP. La seguretat depèn de protocol HTTP. Mitjançant l'ús d'HTTP segur pots assegurar-te que la seva informació està segura .&lt;br /&gt;
&lt;br /&gt;
*El PHP proveeix de la matriu associativa $ _POST per accedeix a tota la informació enviada pel mètode POST.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(isset($_POST[&amp;quot;name&amp;quot;]) ||  isset($_POST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_POST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_POST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;   &amp;lt;!--&amp;lt;?php $_PHP_SELF ?&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== $_PHP_SELF ===&lt;br /&gt;
La variable $_PHP_SELF conté el nom del script PHP (pàgina php) el qual està executant.  ESTÁ DESFASADO USAR $_SERVER['PHP_SELF']&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  if(  isset($_REQUEST[&amp;quot;name&amp;quot;]) ||  isset($_REQUEST[&amp;quot;age&amp;quot;]))&lt;br /&gt;
  {&lt;br /&gt;
     echo &amp;quot;Welcome &amp;quot;. $_REQUEST['name']. &amp;quot;&amp;lt;br /&amp;gt;&amp;quot;;&lt;br /&gt;
     echo &amp;quot;You are &amp;quot;. $_REQUEST['age']. &amp;quot; years old.&amp;quot;;&lt;br /&gt;
     exit();&lt;br /&gt;
  }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
  &amp;lt;form action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  Name: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;name&amp;quot; /&amp;gt;&lt;br /&gt;
  Age: &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;age&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;input type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejemplo formulario POST ===&lt;br /&gt;
&lt;br /&gt;
Dissenyar una pàgina web simple amb php que demani a lusuari el preu de tres productes diferents en tres&lt;br /&gt;
establiments diferents. Exemple:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Fitxer:Form1.PNG]]&lt;br /&gt;
&lt;br /&gt;
Un cop s'introdueixi aquesta&lt;br /&gt;
informació al formulari, s'ha de mostrar el resultat, dels tres preus introduïts i el preu mitjà del producte.&lt;br /&gt;
&lt;br /&gt;
  DATOS RECIBIDOS&lt;br /&gt;
  Precio Guitarra Martin D18 en Ubisa: 4.200 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Thomann 3.800 euros&lt;br /&gt;
  Precio Guitarra Martin D18 en Alfasonic 4.100 euros&lt;br /&gt;
&lt;br /&gt;
  El precio medio del producto es de 4.0333333333333 euros&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!DOCTYPE HTML PUBLIC &amp;quot;-//W3C//DTD HTML 4.01 Transitional//EN&amp;quot;&lt;br /&gt;
&amp;quot;http://www.w3.org/TR/html4/loose.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt;PHP Calcula precios&amp;lt;/title&amp;gt;&lt;br /&gt;
 &amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
 &amp;lt;body&amp;gt;&lt;br /&gt;
 &amp;lt;form name=&amp;quot;formularioDatos&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;01-Formulari.php&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;p&amp;gt; CÁLCULO DEL PRECIO MEDIO DE UN PRODUCTO &amp;lt;/p&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Ubisa, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Thomann, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio2&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 Introduzca el precio Guitarra Martin D18 en Alfasoni, en euros:&lt;br /&gt;
 &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;precio3&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;br/&amp;gt; &amp;lt;br/&amp;gt;&lt;br /&gt;
 &amp;lt;input value=&amp;quot;Calcular&amp;quot; type=&amp;quot;submit&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/form&amp;gt;&lt;br /&gt;
 &amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt; &lt;br /&gt;
&lt;br /&gt;
01-Formulari.php&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php //Ejemplo aprenderaprogramar.com&lt;br /&gt;
$precio1 = $_POST['precio1'];&lt;br /&gt;
$precio2 = $_POST['precio2'];&lt;br /&gt;
$precio3 = $_POST['precio3'];&lt;br /&gt;
$media = ($precio1+$precio2+$precio3)/3;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; DATOS RECIBIDOS&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Ubisa: &amp;quot;. $precio1. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Thomann &amp;quot;. $precio2. &amp;quot; euros&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; Precio Guitarra Martin D18 en Alfasonic &amp;quot;. $precio3. &amp;quot; euros &amp;lt;br/&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;&amp;lt;br/&amp;gt; &amp;amp;nbsp; El precio medio del producto es de &amp;quot;. $media. &amp;quot; euros&amp;quot;;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Acceso a Ficheros ===&lt;br /&gt;
&lt;br /&gt;
'''Abrir y cerrar el descriptor de ficheros'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    $fitxer = fopen(&amp;quot;datos.txt&amp;quot;,&amp;quot;a&amp;quot;);&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'r' 	Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero. &lt;br /&gt;
'w+' 	Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear. &lt;br /&gt;
'a+' 	Apertura para lectura y escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() no tiene efecto, las escrituras siempre son pospuestas. &lt;br /&gt;
&lt;br /&gt;
'''Escribir datos en un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
  $fp = fopen('datos.txt', 'a');&lt;br /&gt;
    fwrite($fp, 'Julio');&lt;br /&gt;
    fwrite($fp, 'Noguera');&lt;br /&gt;
    fclose($fp);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Leer datos de un fichero'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
 $fitxer=fopen(&amp;quot;datos.txt&amp;quot;, &amp;quot;r&amp;quot;);&lt;br /&gt;
    while(!feof($fitxer)){&lt;br /&gt;
       $line = fgets($fitxer);&lt;br /&gt;
       echo $line;&lt;br /&gt;
    }&lt;br /&gt;
    fclose($fitxer);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Más info&lt;br /&gt;
http://www.php.net/manual/es/function.fopen.php&lt;br /&gt;
http://www.php.net/manual/es/function.fgets.php&lt;br /&gt;
http://www.php.net/manual/es/function.fwrite.php&lt;br /&gt;
&lt;br /&gt;
=== Exercici: Formulari Insti // Acceso a ficheros ===&lt;br /&gt;
&lt;br /&gt;
Se desea crear un formulario donde se introduzcan los campos de nombre, apellidos, dni, contraseña, cuando se clique el botón de enviar, el servidor debe recibir todos los parámetros de ese usuario y escribirlos en un fichero de texto (fopen/fwrite), el siguiente usuario que rellene el formulario escribirá a continuación, después debe listar todos los ficheros que tiene el servidor (system()/shell_exec).&lt;br /&gt;
&lt;br /&gt;
solució: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
if ($_SERVER[&amp;quot;REQUEST_METHOD&amp;quot;] == &amp;quot;POST&amp;quot;) { &lt;br /&gt;
&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php echo $_SERVER['PHP_SELF']; ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
    &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    $nombre = $_POST['nombre'];  //recibe los parámetros del formulario&lt;br /&gt;
    $apellido = $_POST['apellido'];&lt;br /&gt;
    $dni = $_POST['dni'];&lt;br /&gt;
    $pass = $_POST['pass'];&lt;br /&gt;
&lt;br /&gt;
    $file = fopen(&amp;quot;clase.txt&amp;quot;, &amp;quot;a&amp;quot;);    //crea un descriptor de fichero&lt;br /&gt;
    fwrite($file, ($nombre) . &amp;quot;,&amp;quot; . ($apellido) . &amp;quot;,&amp;quot; . ($dni) . &amp;quot;,&amp;quot; . ($pass) . &amp;quot;\n&amp;quot;);  //introduce datos dentro del fichero&lt;br /&gt;
    fclose($file);&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
    $usuarioEnSistema = system('cat clase.txt');     //ejecuta terminal linux&lt;br /&gt;
   //$usuario = shell_exec('cat clase.txt'');   // comando más antiguo&lt;br /&gt;
&lt;br /&gt;
    echo $usuarioEnSistema;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;lt;?php $_PHP_SELF ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;nombre&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;apellido&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;dni&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;pass&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
=== Exercici: Calculadora PHP ===&lt;br /&gt;
Crea un formulari amb un únic TextBox on s'indiqui les operacions matemàtiques a realitzar. Envia el contingut del TextBox amb el mètode POST i realitza les operacions. Imprimeix per pantalla el resultat.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[Solucio_calculadora_m6]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== ISSET ===&lt;br /&gt;
&lt;br /&gt;
isset -&amp;gt; Devuelve '''true''' si la variable existe y tiene un valor distinto de null, false de lo contrario.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
var_dump( isset($var) );   //isset() devuelve '''false''' por que $var no ha sido definida&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''false''' aunque la variable haya sido declarada pues su valor es NULL&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
$var = &amp;quot;&amp;quot;;&lt;br /&gt;
var_dump( isset($var) );  //isset() devuelve '''true'''. El valor ya no es nulo aunque esté vacío&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''¿Y cuando deberías usar isset()?'''&lt;br /&gt;
&lt;br /&gt;
Siempre y cuando que quieras comprobar que la variable existe (variable inicializada), un ejemplo bueno sería si quieres saber si se ha mandado un formulario:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    ...&lt;br /&gt;
    &amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;campo1&amp;quot; value=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; name=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar formulario&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
if (isset($_POST['submit']) {&lt;br /&gt;
  ...&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''isset(), is_null() y empty(): Diferencias y ejemplos de uso'''&lt;br /&gt;
&lt;br /&gt;
https://cybmeta.com/isset-is_null-y-empty-diferencias-y-ejemplos-de-uso&lt;br /&gt;
&lt;br /&gt;
https://es.stackoverflow.com/questions/32133/como-y-cuando-se-usan-isset-y-empty-correctamente&lt;br /&gt;
&lt;br /&gt;
=== Exercici enviament de dades ===&lt;br /&gt;
És popular el disseny d’un document web, en què el mateix document conté la part del formulari HTML i el codi PHP que agafa les dades i les processa. Aquest procediment pot resultar estrany en principi, ja que esteu esperant dos documents ben diferenciats. Així i tot val la pena que veieu aquesta forma de treballar i decidiu si us resulta útil o no. Per fer-ho, simplement heu de fusionar els dos documents (el que envia les dades i el que les rep) en un document únic HTML+PHP de dues parts amb la següent estructura:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
if(primera vegada que s'entra al document)&lt;br /&gt;
{&lt;br /&gt;
crear formulari HTML i enviar-ho al propi document&lt;br /&gt;
}&lt;br /&gt;
else&lt;br /&gt;
{&lt;br /&gt;
rebre les dades a través de POST o GET&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Feu un document amb aquestes característiques que enviï les següents dades:&lt;br /&gt;
*nom&lt;br /&gt;
*cognom&lt;br /&gt;
*contrasenya&lt;br /&gt;
*si l’usuari és alumne o professor&lt;br /&gt;
*si l’usuari és actiu o no&lt;br /&gt;
*foto (únicament el nom del fitxer)&lt;br /&gt;
*edat (entre 18 i 99)&lt;br /&gt;
*comentaris&lt;br /&gt;
*un camp ocult amb el nom ocult i valor prova&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
[[:solucio_enviament_dades_php]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Galetes ===&lt;br /&gt;
Les galetes són uns fitxers de text que emmagatzemen informació a l’ordinador client referent a la visita d’un usuari a una pàgina web.&lt;br /&gt;
Les galetes no són un acte d’intromissió per part de la pàgina web visitada; simplement, són una font d’informació molt útil per augmentar l’eficiència en l’accés.&lt;br /&gt;
Les galetes tenen una mida màxima d’1K i caduquen, la qual cosa fa molt difícil que s’utilitzin amb fins malintencionats. A més, únicament pot consultar la galeta el web que l’ha dipositada, la informació que conté no és visible per a la resta de pàgines web.&lt;br /&gt;
&lt;br /&gt;
Un ús molt freqüent de les galetes és emmagatzemar un perfil d’usuari. Així s’aconsegueix que cada vegada que el mateix usuari accedeix a un web, aquest en conegui les preferències i li mostri directament els continguts més adequats.&lt;br /&gt;
&lt;br /&gt;
Les galetes ajuden els programadors a crear un entorn més adequat per a l’usuari visitant. Moltes pàgines web permeten canviar la mida del text, els colors de la pàgina, la disposició d’alguns continguts, etc. Una vegada l’usuari ha modificat al seu gust l’aspecte de la pàgina web, aquestes dades s’emmagatzemen per a la propera visita.&lt;br /&gt;
&lt;br /&gt;
Importante: las cookies se envían al cliente mediante encabezados HTTP. Como cualquier otro encabezado, las cookies se deben enviar antes que cualquier salida que genere la página (antes que &amp;lt;html&amp;gt;, &amp;lt;head&amp;gt; o un simple espacio en blanco). &lt;br /&gt;
&lt;br /&gt;
'''Funcions del PHP per treballar amb galetes'''&lt;br /&gt;
&lt;br /&gt;
La funció que s’utilitza en PHP per crear galetes és setcookie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
bool setcookie(string $nom [, string $valor [, int $caduca= 0[, string $ruta [, string $domini [, bool $seguretat= false [, bool $nomeshttp=false]]]]]])&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* $nom: és obligatori i indica el nom que donareu a la galeta, la resta de paràmetres són opcionals.&lt;br /&gt;
* $valor: és el valor que tindrà la galeta.&lt;br /&gt;
* $caduca: indica els segons que té de vida la galeta; si no s’indica res la galeta deixarà d’existir quan finalitzi la sessió de l’usuari.&lt;br /&gt;
* $ruta: indica on podeu trobar la galeta dins el servidor.&lt;br /&gt;
Si no ponemos la ruta (Path), la cookie sólo se puede usar en páginas que se encuentren en el mismo directorio que la página que la creó. Si queremos que se utilice en un directorio en concreto debemos añadir la ruta.&lt;br /&gt;
&lt;br /&gt;
//Cookie creada en el directorio /registro/login&lt;br /&gt;
&lt;br /&gt;
//Si queremos que las páginas del directorio raíz / puedan acceder a la cookie&lt;br /&gt;
&lt;br /&gt;
* $domini: marca el domini en què la galeta està disponible.&lt;br /&gt;
* $seguretat: tindrà el valor TRUE si voleu que la galeta només s’utilitzi en una connexió segura (conexió HTTPs), i FALSE (que és el valor per defecte), si no és necessari un cert grau de seguretat.&lt;br /&gt;
* $nomeshttp: si té per valor TRUE marcarà que la galeta solament és accessible si s’utilitza el protocol HTTP.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
setcookie(&amp;quot;nom&amp;quot;, &amp;quot;Maadiva&amp;quot;, 3600, &amp;quot;/&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
El segon fitxer s’encarregarà de consultar a la matriu associativa '''$_COOKIE''' el valor de la galeta indicada, que en aquest cas seria nom:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo $_COOKIE[&amp;quot;nom&amp;quot;];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
setcookie(&amp;quot;valor&amp;quot;, 1, time() + 30);    //time() tiempo desde que se originó unix.&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);    //no muestra todas las cookies por temas de seguridad&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
unset($_COOKIE[&amp;quot;valor&amp;quot;]);  //otra forma setcookie('valor', 1, expire);  // setcookie(&amp;quot;valor&amp;quot;, 1, time() - 30);&lt;br /&gt;
&lt;br /&gt;
print_r($_COOKIE);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Se desea que cuente el número de visitas que realiza un usuario al visitar la página; este contador conserva su valor durante un año aún a pesar de que un usuario cierre el navegador y tarde días en volver a visitar la página.&lt;br /&gt;
&lt;br /&gt;
solució:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_contador_galletas]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici galetes ====&lt;br /&gt;
Les cookies us permeten desar informació al navegador que estarà disponible més endavant pel vostre web. Per exemple, podeu desar la configuració personal de l’usuari o la llengua en què ha escollit visitar el web. La propera vegada que l’usuari visiti el web, el vostre codi PHP podrà obtenir aquesta informació desada i presentar a l’usuari el web amb la seva configuració personal o la llengua escollida. És important destacar que les cookies queden desades al navegador de l’usuari i no al servidor web.&lt;br /&gt;
&lt;br /&gt;
Feu un web amb dos fitxers. El primer, index.php, s’encarregarà d’obtenir el nom de l’usuari i la llengua que vol fer servir per defecte entre una llista desplegable mitjançant un formulari. Enviarà aquestes dades a un altre fitxer, cookie.php, que desarà la informació a les cookies.&lt;br /&gt;
La propera vegada que l’usuari accedeixi a index.php el formulari estarà emplenat amb la informació desada la vegada anterior que va accedir-hi.&lt;br /&gt;
&lt;br /&gt;
sol&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[[:solucio_galetes_php]]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Sessió ===&lt;br /&gt;
&lt;br /&gt;
Les variables de sessió són variables que estan disponibles en múltiples pàgines sense haver de fer servir pas de paràmetres. Les variables de sessió tenen un temps de vida limitat i s’emmagatzemen en el servidor.&lt;br /&gt;
&lt;br /&gt;
Podeu fer servir les variables de sessió per mantenir informació (l’anomenada informació de sessió) entre diferents pàgines. Per exemple,&lt;br /&gt;
el nom d’usuari o una selecció de productes que ja s’hagi fet.&lt;br /&gt;
&lt;br /&gt;
A continuació, estudiareu un exemple format per tres fitxers. El primer fitxer és un formulari senzill que demana a l’usuari un identificador i una contrasenya. Aquestes dades s’envien a un segon fitxer, anomenat exempleAutenticar.php, que crea les variables de sessió. Finalment, trobareu un tercer fitxer anomenat continuem.php, que recupera la informació emmagatzemada en les variables de sessió.&lt;br /&gt;
&lt;br /&gt;
Just a sota d’aquest text hi ha el fitxer del qual partireu. L’hem anomena exempleSessions.php, però el podeu anomenar d’una altra manera:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Exemple amb variables de sessió&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt; &lt;br /&gt;
&amp;lt;form action=&amp;quot;exempleAutenticar.php&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
Escriu el teu nom:&lt;br /&gt;
&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;usuari&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Escriu la teva contrasenya:&lt;br /&gt;
&amp;lt;input type=&amp;quot;password&amp;quot; name=&amp;quot;contrasenya&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Envia!&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Tot seguit apareix el codi del fitxer exempleAutenticar.php. En aquest fitxer creareu i inicialitzareu les dues variables de sessió que utilitzareu.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
$_SESSION['id_usuari']=$_REQUEST['usuari'];&lt;br /&gt;
$_SESSION['clau_acces']=$_REQUEST['contrasenya'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;HTML&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...continueu amb l’exemple de variables de sessió...&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
Ja s’han emmagatzemat les variables de sessió.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;continuem.php&amp;quot;&amp;gt;Vinga! Cap al final de l’exemple!&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Fixeu-vos que el primer que es fa és cridar la funció '''session_start()'''. És obligatori que inicieu la sessió abans de cap etiqueta HTML perquè tot funcioni correctament.&lt;br /&gt;
Amb $_REQUEST es recuperen els dos valors que s’han passat des del fitxer inicial, és a dir, usuari i contrasenya, i els heu d’emmagatzemar en dues variables de sessió creades a $_SESSION, que rebran el nom d’id_usuari i clau_acces.&lt;br /&gt;
$_REQUEST és un array associatiu global que per defecte té els continguts de $_GET, $_POST i $_COOKIE.&lt;br /&gt;
A part de crear les variables de sessió i donar-los valors trobareu un enllaç cap al tercer fitxer.&lt;br /&gt;
El codi del tercer fitxer, continuem.php, el teniu a continuació:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Com que esteu treballant amb sessions, el primer que hauríeu de fer és llançar la sessió amb session_start(). A continuació, es recuperen els valors emmagatzemats en les dues variables de sessió.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Eliminar sesión&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
session_start();&lt;br /&gt;
unset($_SESSION['id_usuari']); // will delete just the name data&lt;br /&gt;
&lt;br /&gt;
//session_destroy(); // borrará todos los datos asociados a ese usuario. También $_SESSION = array(); &lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;...i acabem l’exemple de variables de sessió!&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
echo &amp;quot;L’usuari que havíeu escrit era: &amp;quot;.$_SESSION['id_usuari'];echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
echo &amp;quot;La contrasenya que havíeu escrit era: &amp;quot;.$_SESSION['clau_acces'];&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;a href=&amp;quot;index3.php&amp;quot;&amp;gt;Destruir Variables de sesion&amp;lt;/a&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/HTML&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Les sessions us permeten emmagatzemar dades que podran ser compartides entre les diferents pàgines del web. Aquestes dades, a diferència de les cookies, estan emmagatzemades al servidor i estan disponibles durant tot el temps que l’usuari està interactuant amb la pàgina (temps de sessió).&lt;br /&gt;
Alguns exemples de dades que solen guardar-se a les sessions és si l’usuari ha accedit al web mitjançant els valors usuari/contrasenya, o un carret de la compra.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Exercici Sessions ====&lt;br /&gt;
1. Feu una pàgina web que passi entre les seves pàgines el nom de l’usuari i una variable (cost) que s’anirà incrementant en 10 cada vegada que l’usuari passa entre les pàgines (podem pensar que aquesta variable representa el cost de les compres que ha fet fins ara l’usuari al web).&lt;br /&gt;
La sessió es tancarà quan l’usuari torni a la pàgina de login.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
https://codigosdeprogramacion.com/2016/12/20/sistema-de-usuarios-y-sesiones-en-php-y-mysql-1-login-sesiones-y-logout/&lt;br /&gt;
&lt;br /&gt;
http://velozityweb.com/blog/php/login-de-usuarios-y-creacion-de-sesiones-con-php-y-mysql/#sthash.XbMcrnTA.PSO2jYQ9.dpbs&lt;br /&gt;
&lt;br /&gt;
http://www.formacionwebonline.com/crear-sesiones-php-en-intranet/&lt;br /&gt;
&lt;br /&gt;
=== Exercici Moodle ===&lt;br /&gt;
&lt;br /&gt;
2.Se trata de la hacer un moodle, tenemos un formulario y almacenaremos una base de datos (simulada) en la que guardaremos en un archivo el usuario, contraseña y rol de un profe y un alumno. &lt;br /&gt;
Deberá de comprobar si está registrado, en caso de estarlo se crearán las cookies y variables de sesión(5 minutos para el alumnado y 10 para el profe), en caso de no acceder deberán redireccionarse al login.&lt;br /&gt;
Si se validan correctamente, deberá acceder al menu y mostrar la información si tiene rol de alumno (ROLE_ALUMNO) y otra diferente si es profesor(ROLE_ALUMNO). &lt;br /&gt;
También deberá existir un logout en caso de querer terminar la sesión. &lt;br /&gt;
$_SESSION['caduca']=time()+60; &lt;br /&gt;
&lt;br /&gt;
Solució Exercici Moodle:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
:[[sol_moodle]]&lt;br /&gt;
&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ejercicio Carrito ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--http://evilnapsis.com/2016/10/30/ejemplo-de-carrito-de-compras-sencillo-con-php-y-mysql/--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Exercici Complert ====&lt;br /&gt;
Exercici que engloba Galetes, Idioma, Login, Intranet amb Cap, Peus, Menu i contingut i Sessions.&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
[http://www.infomerce.es/moodle/mod/resource/view.php?id=11136 Exercici de Classe]&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== XML ==&lt;br /&gt;
En aquest apartat es veurà com utilitzar XML per guardar dades des de un servidor PHP.&lt;br /&gt;
Exemple de XML:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
Fitxer aules.xml:&lt;br /&gt;
&amp;lt;aules&amp;gt;   &lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;205&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.205.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;filtra&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
    &amp;lt;aula&amp;gt;&lt;br /&gt;
        &amp;lt;nom&amp;gt;206&amp;lt;/nom&amp;gt;&lt;br /&gt;
        &amp;lt;subxarxa&amp;gt;172.16.206.0&amp;lt;/subxarxa&amp;gt;&lt;br /&gt;
        &amp;lt;mascara&amp;gt;24&amp;lt;/mascara&amp;gt;&lt;br /&gt;
        &amp;lt;estatinicial&amp;gt;denega&amp;lt;/estatinicial&amp;gt;&lt;br /&gt;
        &amp;lt;estatactual&amp;gt;denega&amp;lt;/estatactual&amp;gt;&lt;br /&gt;
    &amp;lt;/aula&amp;gt;&lt;br /&gt;
&amp;lt;/aules&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Per representar aquest fitxer com a un arbre i poder-lo recòrrer s'utilitza la llibreria DOMDocument de PHP.&lt;br /&gt;
&lt;br /&gt;
=== Creació del Arbre XML ===&lt;br /&gt;
Per crear una representació del fitxer anterior, primer s'ha de crear l'objecte DOMDocument i a continuació llegir el fitxer:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$xmlDoc = new DOMDocument();&lt;br /&gt;
$xmlDoc-&amp;gt;load(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
=== Obtenir un element del arbre ===&lt;br /&gt;
Es pot utilitzar la funció ''getElementsByTagName''. Exemple:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$aules = $xmldom-&amp;gt;getElementsByTagName(&amp;quot;aula&amp;quot;);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Recòrrer tots els elemens ===&lt;br /&gt;
Podem recòrrer tots els element amb un foreach:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
print $xmlDoc-&amp;gt;saveXML(); //imprimir toda la info&lt;br /&gt;
&lt;br /&gt;
// recorrer las etiquetas y los valores&lt;br /&gt;
$x = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
foreach ($x-&amp;gt;childNodes AS $item) {&lt;br /&gt;
  print $item-&amp;gt;nodeName . &amp;quot; = &amp;quot; . $item-&amp;gt;nodeValue . &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//otra manera de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   //selecciona todas las etiquetas aula y muestra el contenido dentro de ellas&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
    echo $aula-&amp;gt;nodeName;&lt;br /&gt;
    echo $aula-&amp;gt;nodeValue, PHP_EOL;&lt;br /&gt;
    echo &amp;quot;&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Otra forma de recorrer&lt;br /&gt;
$aulas = $xmlDoc-&amp;gt;getElementsByTagName('aula');   // otra forma de acceder&lt;br /&gt;
foreach ($aulas as $aula) {&lt;br /&gt;
   echo $name = $aula-&amp;gt;getElementsByTagName(&amp;quot;nom&amp;quot;)[0]-&amp;gt;nodeValue;   //equivale a -&amp;gt;item(0)&lt;br /&gt;
   echo  $net = $aula-&amp;gt;getElementsByTagName(&amp;quot;subxarxa&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
   echo $mask = $aula-&amp;gt;getElementsByTagName(&amp;quot;mascara&amp;quot;)-&amp;gt;item(0)-&amp;gt;nodeValue;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Afegir un nou element ===&lt;br /&gt;
Per afegir un nou elment s'ha de crear un node nou i afegir tos els fills que es necessiti per crear el XML correcte.&lt;br /&gt;
Exemple:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$auladom = $xmlDoc-&amp;gt;createElement(&amp;quot;aula&amp;quot;);&lt;br /&gt;
//creamos el nodo NOM con su valor $classroomname&lt;br /&gt;
$aulanomdom = $xmlDoc-&amp;gt;createElement(&amp;quot;nom&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanomdom-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanomdom);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo NETWORK con su valor $network&lt;br /&gt;
$aulanetwork = $xmlDoc-&amp;gt;createElement(&amp;quot;XARXA_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulanetwork-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulanetwork);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo MASK con su valor $mask&lt;br /&gt;
$aulamask = $xmlDoc-&amp;gt;createElement(&amp;quot;MASK_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulamask-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulamask);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo initial status con su valor $initialstatus&lt;br /&gt;
$aulastatus = $xmlDoc-&amp;gt;createElement(&amp;quot;INIT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulastatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulastatus);&lt;br /&gt;
&lt;br /&gt;
//creamos el nodo current status con su valor $initialstatus&lt;br /&gt;
$aulacurrentstatus = $xmlDoc-&amp;gt;createElement(&amp;quot;CURRENT_AULA_XML&amp;quot;);&lt;br /&gt;
$domnode = $xmlDoc-&amp;gt;createTextNode(strtolower(&amp;quot;prueba&amp;quot;));&lt;br /&gt;
$aulacurrentstatus-&amp;gt;appendChild($domnode);&lt;br /&gt;
$auladom-&amp;gt;appendChild($aulacurrentstatus);&lt;br /&gt;
&lt;br /&gt;
//afegim el node aula a la llista de nodes&lt;br /&gt;
&lt;br /&gt;
$root = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
$root-&amp;gt;appendChild($auladom);&lt;br /&gt;
&lt;br /&gt;
//guardem        &lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Finalment, s'ha de guardar el dom resultant al fitxer per mantenir correctament els canvis. Es fa amb la funció ''save''.&lt;br /&gt;
&lt;br /&gt;
=== Esborrar un element ===&lt;br /&gt;
Per esborrar un element, primer s'ha de cercar, després dir-li al pare que ens volem eliminar. Però també hem d'esborrar els fills!.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//borrar nodo&lt;br /&gt;
$xmlDoc = new DOMDocument;&lt;br /&gt;
$xmlDoc-&amp;gt;load('file.xml');   //cargamos fichero&lt;br /&gt;
&lt;br /&gt;
$aula = $xmlDoc-&amp;gt;documentElement;&lt;br /&gt;
&lt;br /&gt;
// seleccionamos el nodo concreto 0 y lo eleminamos&lt;br /&gt;
$aulaSeleccionada = $aula-&amp;gt;getElementsByTagName('aula')-&amp;gt;item(0);&lt;br /&gt;
$aulaborrada = $aula-&amp;gt;removeChild($aulaSeleccionada);&lt;br /&gt;
&lt;br /&gt;
$xmlDoc-&amp;gt;save(&amp;quot;file.xml&amp;quot;); //guardamos cambios&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Podeu trobar més informació a http://www.php.net/manual/en/class.domdocument.php&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici crear XML'''&lt;br /&gt;
&lt;br /&gt;
Tenim un formulari i volem ficar dins del nostre xml noves dades, per tant, haurem de crear un formulari on introduirem les dades.&lt;br /&gt;
&lt;br /&gt;
= Bibliografia / Webgrafia =&lt;br /&gt;
*[http://php.net/manual/es/ Manual oficial de PHP]&lt;br /&gt;
*[http://www.codeacademy.com Introducció a PHP]&lt;br /&gt;
*David Sklar, Adam Trachtenberg, &amp;quot;PHP Cookbook, Third Edition&amp;quot;, O’Reilly Media Inc., 2014. ISBN 978-1-449-36375-8&lt;br /&gt;
*Eduard García Sacristán, Eduard Latorre Jarque, Montserrat Madridejos Mora, Raúl Velaz Mayo, &amp;quot;Llenguatges de guions de servidor&amp;quot;, IOC, 2014 &lt;br /&gt;
*[https://docs.google.com/presentation/d/1ZQgIsW4KCyIfH8NyiqH9ueanM83Ym7bjitaxyQKS0hs/edit#slide=id.i14 Llenguatges de programació del costat del servidor]&lt;br /&gt;
*[http://www.adelat.org/media/docum/nuke_publico/lenguajes_del_lado_servidor_o_cliente.html www.Adelat.org]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== EMMAGATZEMAR I LLEGIR FITXERS ==&lt;br /&gt;
A PHP s'utilitzen dos funcions per manipular JSON: json_encode i json_decode. A la següent Web trobareu com utilitzar-les: http://www.php.net/manual/es/function.json-decode.php&lt;br /&gt;
&lt;br /&gt;
'''LLegir i escriure  Fitxer desde PHP '''&lt;br /&gt;
&lt;br /&gt;
Si volem llegir un fitxer .json haurem d'utilitzar la instrucció &amp;quot;file_get_contents&amp;quot;. Les dades que obtinguis d'aquesta funció, els hauràs de guardar en una variable qualsevol&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json = file_get_contents (&amp;quot;./datos.json&amp;quot;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Guarda información dentro de un fichero, en este caso un JSON&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$json_string1 = '{&amp;quot;posicionX&amp;quot;:250,&amp;quot;posicionY&amp;quot;:100}'&lt;br /&gt;
file_put_contents('./datos.json', $json_string1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==SERIALIZACIÓN ==&lt;br /&gt;
&lt;br /&gt;
En PHP existe una forma muy sencilla de almacenar o transmitir cualquier tipo de valor (excepto el tipo resource) en forma de una cadena seriada: la serialización.&lt;br /&gt;
&lt;br /&gt;
La serialización te permite, por ejemplo, guardar un objeto o array en una base de datos o transmitirlo entre aplicaciones remotas, para luego volver a convertirlo a su tipo y estructura original.&lt;br /&gt;
&lt;br /&gt;
Supongamos que tienes el siguiente array:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$arr = array(&lt;br /&gt;
  &amp;quot;fruta&amp;quot; =&amp;gt; &amp;quot;manzana&amp;quot;, &lt;br /&gt;
  &amp;quot;objeto&amp;quot; =&amp;gt; &amp;quot;bicicleta&amp;quot;, &lt;br /&gt;
  &amp;quot;animales&amp;quot; =&amp;gt; array(&lt;br /&gt;
             &amp;quot;perro&amp;quot;, &lt;br /&gt;
             &amp;quot;gato&amp;quot;, &lt;br /&gt;
             &amp;quot;caballo&amp;quot;) &lt;br /&gt;
);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Si lo deseas guardar en una tabla de una base de datos, lo puedes serializar de esta forma:&lt;br /&gt;
&lt;br /&gt;
'''$string = serialize($arr);'''&lt;br /&gt;
&lt;br /&gt;
La función serialize devolverá un valor fácilmente almacenable o transmitible:&lt;br /&gt;
&lt;br /&gt;
''a:3:{s:5:&amp;quot;fruta&amp;quot;;s:7:&amp;quot;manzana&amp;quot;;s:6:&amp;quot;objeto&amp;quot;;s:9:&amp;quot;bicicleta&amp;quot;;s:8:&amp;quot;animales&amp;quot;;a:3: i:0;s:5:&amp;quot;perro&amp;quot;;i:1;s:4:&amp;quot;gato&amp;quot;;i:2;s:7:&amp;quot;caballo&amp;quot;;}}''&lt;br /&gt;
&lt;br /&gt;
Para recuperar el valor original en PHP a partir de la cadena seriada:&lt;br /&gt;
&lt;br /&gt;
'''$arr = unserialize($string);'''&lt;br /&gt;
&lt;br /&gt;
Un ejemplo del uso de la serialización la tenemos en la forma en que WordPress almacena información variada en algunas de sus tablas.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Serializar'''&lt;br /&gt;
&lt;br /&gt;
http://www.cucuza.com/como-serializar-datos-en-php/&lt;br /&gt;
&lt;br /&gt;
==EXEMPLE CLASSE SERIALIZACIÓN==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;PHP&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
class Serializer {&lt;br /&gt;
&lt;br /&gt;
    private static $path = &amp;quot;./database/&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    public static function save($obj, $id) {  //$obj es un JSON , $id es el nombre del archivo &lt;br /&gt;
&lt;br /&gt;
        $arr = serialize($obj);&lt;br /&gt;
        &lt;br /&gt;
        return file_put_contents(self::$path . $id, $arr);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    public static function restore($id) {&lt;br /&gt;
        &lt;br /&gt;
        if  (file_exists ( self::$path . $id ) ){&lt;br /&gt;
            &lt;br /&gt;
            $xmlString = file_get_contents(self::$path . $id);&lt;br /&gt;
            &lt;br /&gt;
            return unserialize($xmlString);  &lt;br /&gt;
            &lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    public static function showIds(){&lt;br /&gt;
        &lt;br /&gt;
        return array_slice(scandir(self::$path),2);&lt;br /&gt;
        &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//al ser una classe estàtica es pot invocar els mètodes de la següent forma, per exemple:&lt;br /&gt;
&lt;br /&gt;
Serializer::save(json,nom_arxiu);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Crear un JSON desde PHP (json_encode)==&lt;br /&gt;
&lt;br /&gt;
Creem un objecte Json a partir de un array en PHP&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$miArray = array(&amp;quot;manzana&amp;quot;=&amp;gt;&amp;quot;verde&amp;quot;, &amp;quot;uva&amp;quot;=&amp;gt;&amp;quot;Morada&amp;quot;, &amp;quot;fresa&amp;quot;=&amp;gt;&amp;quot;roja&amp;quot;);&lt;br /&gt;
print_r(json_encode($miArray));&lt;br /&gt;
&lt;br /&gt;
//resultat que mostrar  {&amp;quot;manzana&amp;quot;:&amp;quot;verde&amp;quot;,&amp;quot;uva&amp;quot;:&amp;quot;Morada&amp;quot;,&amp;quot;fresa&amp;quot;:&amp;quot;roja&amp;quot;}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Crear un objeto en PHP con JSON (json_decode)==&lt;br /&gt;
&lt;br /&gt;
Tenim un objecte Json y el transformen a un array de PHP&lt;br /&gt;
exemple 1 un json simple.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$jsonData = '{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; }';&lt;br /&gt;
&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
//stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) &lt;br /&gt;
&lt;br /&gt;
//en el cas de volver recorrer l'array mostraría la clau i el valor&lt;br /&gt;
foreach ($phpArray as $key =&amp;gt; $value) { &lt;br /&gt;
    echo &amp;quot;&amp;lt;p&amp;gt;$key | $value&amp;lt;/p&amp;gt;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;php&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Altre exemple&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$jsonData = '[{ &amp;quot;usuario&amp;quot;:&amp;quot;Julio&amp;quot;, &amp;quot;edad&amp;quot;:30, &amp;quot;comunidad&amp;quot;:&amp;quot;catalunya&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pepe&amp;quot;, &amp;quot;edad&amp;quot;:28, &amp;quot;comunidad&amp;quot;:&amp;quot;valencia&amp;quot; },{ &amp;quot;usuario&amp;quot;:&amp;quot;pep&amp;quot;, &amp;quot;edad&amp;quot;:23, &amp;quot;comunidad&amp;quot;:&amp;quot;murcia&amp;quot; }]';&lt;br /&gt;
$phpArray = json_decode($jsonData);&lt;br /&gt;
&lt;br /&gt;
//print_r($phpArray);&lt;br /&gt;
/*Array ( [0] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; Julio [edad] =&amp;gt; 30 [comunidad] =&amp;gt; catalunya ) [1] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pepe [edad] =&amp;gt; 28 [comunidad] =&amp;gt; valencia ) [2] =&amp;gt; stdClass Object ( [usuario] =&amp;gt; pep [edad] =&amp;gt; 23 [comunidad] =&amp;gt; murcia ) ) Julio 30 catalunya pepe 28 valencia pep 23 murcia */&lt;br /&gt;
&lt;br /&gt;
//recorrer un array i mostrar les dades.&lt;br /&gt;
foreach($phpArray as $obj){&lt;br /&gt;
        $id_usuario = $obj-&amp;gt;usuario;&lt;br /&gt;
        $edad = $obj-&amp;gt;edad;&lt;br /&gt;
        $comunidad = $obj-&amp;gt;comunidad;&lt;br /&gt;
        echo $id_usuario.&amp;quot; &amp;quot;.$edad.&amp;quot; &amp;quot;.$comunidad;&lt;br /&gt;
        echo &amp;quot;&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//també podem accedir al contingut de la seguüent manera echo &amp;quot;$phparray[0]-&amp;gt;usuario&amp;quot;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== ENVIAR CORREOS ==&lt;br /&gt;
&lt;br /&gt;
Mediente la función MAIL() de PHP podemos enviar correos, por ello, nuestro servidor deberá tener instalado el servicio.&lt;br /&gt;
En nuestro caso, en nuestro Hosting-ng lo tenemos.&lt;br /&gt;
Existe otra función PHPMailer dónde contiene más opciones. https://github.com/PHPMailer/PHPMailer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Forma simple'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// El mensaje&lt;br /&gt;
$msg = &amp;quot;Estimado alumno de La Mercè\nEstas invitado a participar en  clase&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// usar wordwrap() si las lineas son más largas de 70 caracteres&lt;br /&gt;
$msg = wordwrap($msg,70);&lt;br /&gt;
&lt;br /&gt;
// Enviar mail&lt;br /&gt;
mail(&amp;quot;alguien@ejemplo.cat&amp;quot;,&amp;quot;Mi título&amp;quot;,$msg);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Más opciones'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
    $to = &amp;quot;ejemploPrueba@ejemplo.com&amp;quot;;&lt;br /&gt;
    $subject = &amp;quot;Asunto&amp;quot;;&lt;br /&gt;
    $txt = &amp;quot;Estamos en clase de DAW&amp;quot;;&lt;br /&gt;
    $headers = &amp;quot;From: webmaster@example.com&amp;quot; . &amp;quot;\r\n&amp;quot; .&lt;br /&gt;
        &amp;quot;CC: somebodyelse@example.com&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
    mail($to,$subject,$txt,$headers);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
''' En terminal '''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
//también podemos hacerlo desde el terminal de linux en nuestro servidor&lt;br /&gt;
system('mail -t alguien@ejemplo.cat -s ALTA ALUMNOS INSTI &amp;lt;&amp;lt;&amp;lt; &amp;quot;El alumno&amp;quot;'.$nom.&amp;quot; &amp;quot;.$cognoms.&amp;quot; está en espera de darse de alta&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= SUBIR FICHEROS =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
// En versiones de PHP anteriores a la 4.1.0, debería utilizarse $HTTP_POST_FILES en lugar&lt;br /&gt;
// de $_FILES.&lt;br /&gt;
&lt;br /&gt;
 //Directori de pujada. Permís d'escriptura i accés per a www-data&lt;br /&gt;
$dir_subida = './';  &lt;br /&gt;
 //Anexem la carpeta amb el nos del finder que ens puja&lt;br /&gt;
$fichero_subido = $dir_subida . basename($_FILES['file']['name']); //basename: muestra el nombre del fichero con la extensión&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Movem el fitxer temporal creat a /tmp a la ubicació o nom indicats&lt;br /&gt;
echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;
if (move_uploaded_file($_FILES['file']['tmp_name'], $fichero_subido)) {    &lt;br /&gt;
    echo &amp;quot;El fichero es válido y se subió con éxito.\n&amp;quot;;&lt;br /&gt;
} else {&lt;br /&gt;
    echo &amp;quot;¡Posible ataque de subida de ficheros!\n&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
echo 'Más información de depuración:';&lt;br /&gt;
print_r($_FILES);&lt;br /&gt;
&lt;br /&gt;
/*$_FILES['file']['name'] -- original name of the file on the client machine.&lt;br /&gt;
$_FILES['file']['type'] -- mime type of the file, provided by the browser&lt;br /&gt;
$_FILES['file']['size'] -- size (in bytes) of the uploaded file&lt;br /&gt;
$_FILES['file']['tmp_name'] -- temporary filename of the uploaded file, stored on the server&lt;br /&gt;
$_FILES['file']['error'] -- returns an error code, useful for debugging.&lt;br /&gt;
*/&lt;br /&gt;
print &amp;quot;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt; &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE&amp;gt;&lt;br /&gt;
&amp;lt;html&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
 &amp;lt;title&amp;gt; SUBIR FICHEROS &amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&amp;lt;!-- El tipo de codificación de datos, enctype, DEBE especificarse como sigue --&amp;gt;&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; action=&amp;quot;index.php&amp;quot; method=&amp;quot;POST&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- MAX_FILE_SIZE debe preceder al campo de entrada del fichero --&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;MAX_FILE_SIZE&amp;quot; value=&amp;quot;30000&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;!-- El nombre del elemento de entrada determina el nombre en el array $_FILES --&amp;gt;&lt;br /&gt;
    Enviar este fichero: &amp;lt;input name=&amp;quot;fichero_usuario&amp;quot; type=&amp;quot;file&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Enviar fichero&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''EXERCICI:'''&lt;br /&gt;
&lt;br /&gt;
Es desitja desenvolupar un formulari on pugui ficar el nom d'usuari i a més pujar un fitxer. Deurà haver una pàgina que mostre tots el fitxers d'eixe Usuari i el nombre d'arxius.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== PDF ==&lt;br /&gt;
Podem també generar pdf's a FPDF http://www.fpdf.org/ , però es deurà baixar la llibreria primer.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
require('fpdf.php');&lt;br /&gt;
&lt;br /&gt;
class PDF extends FPDF&lt;br /&gt;
{&lt;br /&gt;
// Page header&lt;br /&gt;
function Header()&lt;br /&gt;
{&lt;br /&gt;
    // Logo&lt;br /&gt;
    $this-&amp;gt;Image('logo.png',10,6,30);&lt;br /&gt;
    // Arial bold 15&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','B',15);&lt;br /&gt;
    // Move to the right&lt;br /&gt;
    $this-&amp;gt;Cell(80);&lt;br /&gt;
    // Title&lt;br /&gt;
    $this-&amp;gt;Cell(30,10,'Title',1,0,'C');&lt;br /&gt;
    // Line break&lt;br /&gt;
    $this-&amp;gt;Ln(20);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Page footer&lt;br /&gt;
function Footer()&lt;br /&gt;
{&lt;br /&gt;
    // Position at 1.5 cm from bottom&lt;br /&gt;
    $this-&amp;gt;SetY(-15);&lt;br /&gt;
    // Arial italic 8&lt;br /&gt;
    $this-&amp;gt;SetFont('Arial','I',8);&lt;br /&gt;
    // Page number&lt;br /&gt;
    $this-&amp;gt;Cell(0,10,'Page '.$this-&amp;gt;PageNo().'/{nb}',0,0,'C');&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Instanciation of inherited class&lt;br /&gt;
$pdf = new PDF();&lt;br /&gt;
$pdf-&amp;gt;AliasNbPages();&lt;br /&gt;
$pdf-&amp;gt;AddPage();&lt;br /&gt;
$pdf-&amp;gt;SetFont('Times','',12);&lt;br /&gt;
for($i=1;$i&amp;lt;=40;$i++)&lt;br /&gt;
    $pdf-&amp;gt;Cell(0,10,'Printing line number '.$i,0,1);&lt;br /&gt;
$pdf-&amp;gt;Output();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= QR =&lt;br /&gt;
&lt;br /&gt;
També podem crear codis QR al nostre servidor, hi han moltes libreries tanta en PHP com en JS.&lt;br /&gt;
https://sourceforge.net/projects/phpqrcode/&lt;br /&gt;
&lt;br /&gt;
Es deurà baixar la llibreria i ficar la carpeta &amp;quot;phpqrcode&amp;quot; dins del nostre servidor, a més de introduir el següent codi. &lt;br /&gt;
//'''NOTA''': deureu donar-li permisos d'escriptura a la carpeta&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   // la llibreria s'ha descomprimit dins d'una carpeta anomenada &amp;quot;phpqrcode&amp;quot;&lt;br /&gt;
   include('phpqrcode/qrlib.php');&lt;br /&gt;
   &lt;br /&gt;
   QRcode::png('http://wikiserver.infomerce.es', 'imatgeqr.png');&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
   &amp;lt;img src=&amp;quot;imatgeqr.png&amp;quot; /&amp;gt;  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Exercici- Inventario'''&lt;br /&gt;
&lt;br /&gt;
Queremos crear un registro o inventario de los ordenadores, por ellos, queremos generar códigos QR que serán pegatinas para poner en cada uno de los ordenadores de las diferentes aulas, por ello crearemos un formulario donde introduciremos el aula y el ordenador, deben almacenarse en un variable de sesión (ya que no sabemos todavía conectarnos a BD) y cuando cliquemos mostrar deben de aparecer todas los códigos QR del aula.&lt;br /&gt;
También se desea guardarlo en pdf (mirar librerias) con el título y el aula y el codigo QR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== CONECTAR CON LDAP o ACTIVE DIRECTORY ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
class LDAP &lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
      //Asigno variables para accesar al servidor LDAP&lt;br /&gt;
   private $conectar;&lt;br /&gt;
   private $host;&lt;br /&gt;
   private $user;&lt;br /&gt;
   private $pswd;&lt;br /&gt;
   private $dn;&lt;br /&gt;
   private $OU;&lt;br /&gt;
   private $DC;&lt;br /&gt;
   private $DC1;&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   public function __construct($user,$password,$ou,$dc,$dc1)&lt;br /&gt;
   {&lt;br /&gt;
    $this-&amp;gt;host= &amp;quot;172.16.208.174&amp;quot;;&lt;br /&gt;
    $this-&amp;gt;user = $user;&lt;br /&gt;
    $this-&amp;gt;pswd = $password;&lt;br /&gt;
    $this-&amp;gt;OU = $ou;&lt;br /&gt;
    $this-&amp;gt;DC = $dc;&lt;br /&gt;
    $this-&amp;gt;DC1 = $dc1;&lt;br /&gt;
    $this-&amp;gt;dn = &amp;quot;OU=&amp;quot;.$ou.&amp;quot;,DC=&amp;quot;.$dc.&amp;quot;,DC=&amp;quot;.$dc1.&amp;quot;&amp;quot;;&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function conexion()&lt;br /&gt;
   {&lt;br /&gt;
       $this-&amp;gt;conectar = ldap_connect($this-&amp;gt;host) or die(&amp;quot;Imposible Conectar&amp;quot;);&lt;br /&gt;
     // Especifico la versión del protocolo LDAP&lt;br /&gt;
    ldap_set_option($this-&amp;gt;conectar, LDAP_OPT_PROTOCOL_VERSION, 3)    or die (&amp;quot;Imposible asignar el Protocolo LDAP&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
   &lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
   public function credenciales(){&lt;br /&gt;
   // Valido las credenciales para accesar al servidor LDAP&lt;br /&gt;
    $bd = ldap_bind($this-&amp;gt;conectar, $this-&amp;gt;user, $this-&amp;gt;pswd)    or die (&amp;quot;Imposible Validar en el Servidor LDAP&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    // Especifico los parámetros que quiero que me regrese la consulta&lt;br /&gt;
    $attrs = array(&amp;quot;displayname&amp;quot;,&amp;quot;mail&amp;quot;,&amp;quot;samaccountname&amp;quot;,&amp;quot;telephonenumber&amp;quot;,&amp;quot;givenname&amp;quot;);&lt;br /&gt;
     &lt;br /&gt;
    // Creo el filtro para la busqueda&lt;br /&gt;
    $filter = &amp;quot;(samaccountname=&amp;quot;.$this-&amp;gt;user.&amp;quot;)&amp;quot;;&lt;br /&gt;
 &lt;br /&gt;
    $search = ldap_search($this-&amp;gt;conectar, $this-&amp;gt;dn, $filter, $attrs)    or die (&amp;quot;&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
    $entries = ldap_get_entries($this-&amp;gt;conectar, $search);&lt;br /&gt;
&lt;br /&gt;
    return $entries;&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Jmoreno</name></author>	</entry>

	</feed>