IdFirstnameLastname
1Guillemguillem@example.com
3Guillemguillem@example.com
4Faiezfaiez@example.com
5JordilinuxTheBest@binefa.com
7Faiezfaiez@example.com
8JordilinuxTheBest@binefa.com
9Guillemguillem@example.com
10FaiezFaiez@example.com
11Guillemguillem@example.com
12Faiezfaiez@example.com
13JordilinuxTheBest@binefa.com
14Guillemguillem@example.com
15Faiezfaiez@example.com
16JordilinuxTheBest@binefa.com
17Guillemguillem@example.com
18FaiezFaiez@example.com
19Guillemguillem@example.com
20Faiezfaiez@example.com
21JordilinuxTheBest@binefa.com
22Guillemguillem@example.com
23Faiezfaiez@example.com
24JordilinuxTheBest@binefa.com
25Guillemguillem@example.com
26Guillemguillem@example.com
27FaiezFaiez@example.com
28Guillemguillem@example.com
29Faiezfaiez@example.com
30JordilinuxTheBest@binefa.com
31Guillemguillem@example.com
32Faiezfaiez@example.com
33JordilinuxTheBest@binefa.com
34Guillemguillem@example.com
35Faiezfaiez@example.com
36JordilinuxTheBest@binefa.com
37FaiezFaiez@example.com
38Guillemguillem@example.com
39Faiezfaiez@example.com
40JordilinuxTheBest@binefa.com
41Guillemguillem@example.com
42Faiezfaiez@example.com
43JordimicrosoftTheBest@binefa.com

Codi en PHP

<!DOCTYPE html>
<html lang="ca">
    <head>
        <title>Exemple Propi Seleccio Dades Guillem Serrat</title>
        <meta http-equiv="Content-type" content="text/html; charset=UTF-8">
    </head>
    <body>
        <?php
            echo "<table style='border: solid 1px black;'>";                    // Crea la taula
            echo "<tr><th>Id</th><th>Firstname</th><th>Lastname</th></tr>";     // Crea una fila per les capçeleres de la taula

            // Creem una classe que és filla de RecursiveIteratorIterator, una classe de PHP que permet recórrer estructures d'arrays
            class TableRows extends RecursiveIteratorIterator {
                // Sempre es crida al constructor 1 vegada abans de começar a iterar sobre un array
                function __construct($it) { 
                    parent::__construct($it, self::LEAVES_ONLY);
                    // Amb l'operador LEAVES_ONLY ens assegurem que únicament agafa el valor i res més
                }

                // Creem una funció anomenada current. L'objectiu de la funció és crear una cel·la i agafar el valor d'un registre SQL.
                // Aquesta funció la crida automàticament per l'objecte RecursiveIteratorIterator (no cal cridar-la, es fa sol)
                function current() :string { // Afegim :string per evitar el missatge "deprecated". Indiquem que retorna un String
                    return "<td style='width:150px;border:1px solid black;'>" . parent::current(). "</td>";
                }

                // Creem una funció anomenada beginChildren. L'objectiu de la funció és crear una nova fila.
                // Aquesta funció la crida automàticament per l'objecte RecursiveIteratorIterator (no cal cridar-la, es fa sol)
                // Aquesta funció és cridada cada vegada que es fa una iteració (1 volta, 1 registre en SQL)
                function beginChildren() :void { // Afegim :void per evitar el missatge "deprecated". Indiquem que no retorna res
                    echo "<tr>"; // Creem la fila
                }

                //Creem una funció anomenada endChildren L'objectiu de la funció és tancar la fila creada per la funció endChildren
                // Aquesta funció la crida automàticament per l'objecte RecursiveIteratorIterator (no cal cridar-la, es fa sol)
                // Aquesta funció és cridada cada vegada que es fa una iteració (1 volta, 1 registre en SQL)
                function endChildren() :void { // Afegim :void per evitar el missatge "deprecated"
                    echo "</tr>" . "\n"; // Tanquem la fila
                }

                // Resum del Flux de l'Iteració
                // 1. Inici de l'Iteració (Per a la primera fila): Es crida beginChildren() --> Imprimeix <tr>.
                // 2. Iteració de la Primera Columna (id): Es crida current() --> Imprimeix <td ...>1</td>.
                // 3. Iteració de la Segona Columna (firstname): Es crida current() --> Imprimeix <td ...>John</td>.
                // 4. Iteració de la Tercera Columna (lastname): Es crida current() --> Imprimeix <td ...>Doe</td>.
                // 5. Fi de l'Iteració de la Fila: Es crida endChildren() --> Imprimeix </tr>\n.
                // 6. Repetició (Per a la següent fila), tornant al punt 1.


            }

            $servidor = "127.0.0.1";
            $usuari = "root";
            $contrasenya = "fjeclot";
            $nomDB = "dbGserrat";
            $nomTaula = "Clients";

            try {
                // Definim un nou objecte de la classe PDO amb els atributs: host al que ens connectarem, el nom d'usuari i contrasenya.
                $connexio = new PDO("mysql:host=$servidor;dbname=$nomDB", $usuari, $contrasenya);

                // A través de la funció setAttribute, agafem el tipus d'error en cas de que n'hi hagi algun
                $connexio->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

                // Definim una preparació en la variable $consultaPreparada.
                $consultaPreparada = $connexio->prepare("SELECT id, nom, mail FROM $nomTaula");

                // Executem la preparació
                $consultaPreparada->execute();

                // Imprimim la taula fent servir la crida automàtica a les funcions de la classe RecursiveArrayIterator
                $resultat = $consultaPreparada->setFetchMode(PDO::FETCH_ASSOC);
                foreach(new TableRows(new RecursiveArrayIterator($consultaPreparada->fetchAll())) as $k=>$v) {
                    // new RecursiveArrayIterator($consultaPreparada->fetchAll()) converteix els registres en iteratius
                    echo $v; // Imprimeix tota la fila HTML ja processada per les funcions
                }
            } catch(PDOException $e) {                                                              // En cas de que hi hagi un error, PHP llença una PDOException, i la variable $e agafa aquesta excepció
                echo "No s'ha pogut mostrar les dades" . "<br>" . $e->getMessage();           // Si no s'executa correctament, imprimeix el missatge d'error de PDOException
            }
            $connexio = null;                                                                           // Tanca la connexió amb la BBDD
            echo "</table>";
        ?>
        
        <h1>Codi en PHP</h1>
        <?php
        show_source("ex7Propi.php");
        ?>
    </body>
</html>