| Id | Firstname | Lastname |
|---|
| 1 | Guillem | guillem@example.com |
| 3 | Guillem | guillem@example.com |
| 4 | Faiez | faiez@example.com |
| 5 | Jordi | linuxTheBest@binefa.com |
| 7 | Faiez | faiez@example.com |
| 8 | Jordi | linuxTheBest@binefa.com |
| 9 | Guillem | guillem@example.com |
| 10 | Faiez | Faiez@example.com |
| 11 | Guillem | guillem@example.com |
| 12 | Faiez | faiez@example.com |
| 13 | Jordi | linuxTheBest@binefa.com |
| 14 | Guillem | guillem@example.com |
| 15 | Faiez | faiez@example.com |
| 16 | Jordi | linuxTheBest@binefa.com |
| 17 | Guillem | guillem@example.com |
| 18 | Faiez | Faiez@example.com |
| 19 | Guillem | guillem@example.com |
| 20 | Faiez | faiez@example.com |
| 21 | Jordi | linuxTheBest@binefa.com |
| 22 | Guillem | guillem@example.com |
| 23 | Faiez | faiez@example.com |
| 24 | Jordi | linuxTheBest@binefa.com |
| 25 | Guillem | guillem@example.com |
| 26 | Guillem | guillem@example.com |
| 27 | Faiez | Faiez@example.com |
| 28 | Guillem | guillem@example.com |
| 29 | Faiez | faiez@example.com |
| 30 | Jordi | linuxTheBest@binefa.com |
| 31 | Guillem | guillem@example.com |
| 32 | Faiez | faiez@example.com |
| 33 | Jordi | linuxTheBest@binefa.com |
| 34 | Guillem | guillem@example.com |
| 35 | Faiez | faiez@example.com |
| 36 | Jordi | linuxTheBest@binefa.com |
| 37 | Faiez | Faiez@example.com |
| 38 | Guillem | guillem@example.com |
| 39 | Faiez | faiez@example.com |
| 40 | Jordi | linuxTheBest@binefa.com |
| 41 | Guillem | guillem@example.com |
| 42 | Faiez | faiez@example.com |
| 43 | Jordi | microsoftTheBest@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>