Nella prima versione di WIKIBEER la WEB APP che risolve i problemi con l’alcol abbiamo visto un codice di connessione sopra il recupero delle variabili in GET che suonava così:

$conn=mysqli_connect("localhost","root","");
mysqli_select_db($conn,"nomedeldatabasedatescelto");

Una buona organizzazione del codice però in fase di sviluppo prevede una migliore frammentazione delle parti gestibili con una inclusione per cui c’è da capire come funzionano le istruzioni, scartbellando in rete in particolare dal sito MRW.IT, https://www.mrw.it/php/includere-file-include-require_10480.html, approfondiamo la differenza tra include e require e anche tra include_once e require_once:

I due comandi include e require producono il medesimo risultato; l’unica differenza consiste nella gestione di eventuali errori: nel caso il file da includere non si trovato include() genererà un warning mentre require() un fatal error (bloccando, di fatto, l’esecuzione dello script). Si noti che, affinchè l’inclusione vada a buon fine, è necessario specificare il percorso corretto del file che si desidera includere. Mentre per usare include_once e require_once siamo allineati alla definizione precedente con la differenza che prima di includere il file verificano che questo non sia già stato precedentemente incluso nella pagina ed, in tal caso, non fanno nulla…

detto questo creo due file, uno chiamato config.php e l’altro connessione_db.php. Nel file config.php metto tra i tag PHP canonici le variabili che definiscono i parametri di connessione:

$host = "localhost";
$db_user = "tuonomeutente";
$db_psw = "tuapassword";
$db_name = "tuonomedatabase";

mentre nel file connessione_db inserirò sempre tra i tag PHP:

include("config.php");
$connect=mysqli_connect("$host","$db_user","");
mysqli_select_db($connect,"$db_name");

per cui la pagina index.php verrà semplificata eliminando la parte di connessione includendo il semplice file di connessione dopo il tag di apertura di PHP come prima riga prima del recupero delle variabili in get e della definizione della query con:

require('connessione_db.php');

In questo modo il nostro applicativo è cresciuto a livello strutturale, ma non basta, adesso dobbiamo preoccuparci di risolvere due questioni critiche, come quello della sicurezza e quello della sanificazione del campo testo! Quindi alla prossima bionda!

Per il riassunto delle puntate precedenti sulla nascita di WIKIBEER visionare:

https://umbriawayinfo.wordpress.com/

https://umbriawaydeveloper.wordpress.com/

Per finire diamo un occhiata anche allo script per una rappresentazione tabellare dei dati proposta in PDO dal punto di riferimento https://www.w3schools.com/:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<style>
#customers {
  font-family: Arial, Helvetica, sans-serif;
  border-collapse: collapse;
  width: 100%;
}

#customers td, #customers th {
  border: 1px solid #ddd;
  padding: 8px;
}

#customers tr:nth-child(even){background-color: #f2f2f2;}

#customers tr:hover {background-color: #ddd;}

#customers th {
  padding-top: 12px;
  padding-bottom: 12px;
  text-align: left;
  background-color: #4CAF50;
  color: white;
}
</style>
</head>

<body style="font-size:12px;font-family:verdana;text-align:justify">

<?php
echo "<table id='customers' style='border: solid 1px black;'>";
 echo "<tr><th>A</th><th>B</th><th>C</th><th>D</th><th>E</th><th>F</th><th>G</th><th>H</th><th>I</th></tr>";

class TableRows extends RecursiveIteratorIterator {
    function __construct($it) {
        parent::__construct($it, self::LEAVES_ONLY);
    }

    function current() {
        return "<td style='width: 150px; border: 1px solid black;'>" . parent::current(). "</td>";
    }

    function beginChildren() {
        echo "<tr>";
    }

    function endChildren() {
        echo "</tr>" . "\n";
    }
}

$servername = "localhost";
$username = "root";
$password = "root";
$dbname = "nomedelmiodatabase";



try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SELECT * FROM tbl_c2_wikibeer");
    $stmt->execute();

    // set the resulting array to associative
    $result = $stmt->setFetchMode(PDO::FETCH_ASSOC);

    foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
        echo $v;
    }
}
catch(PDOException $e) {
    echo "Error: " . $e->getMessage();
}
$conn = null;
echo "</table>";
?>

</body>
</html>