Elettroserratura: la parte server

 
Cominciamo con la pubblicazione delle pagine php lato server dell'elettroserratura.
Non dirò nulla sull'installazione e la configurazione di Apache, Mysql, PHP perché l'argomento esula da quanto stiamo facendo e costituisce una sorta di prerequisito, ma non è difficile installare un sistema LAMP (Linux-Apache-Mysql-PHP) o WAMP (Windows-Apache-Mysql-PHP) e su internet si trovano una miriade di ottimi tutorial.
I file necessario sono sette, io li ho chiamati così:
     abilita.php
     action.php
     config.php
     controllo.php
     crea_database.php
     credenziali.html
     log.php
Cominciamo da crea_database.php. La pagina fa quello che il nome dichiara: crea il database. Va lanciata per prima e poi cancellata, rilanciandola si ripristinerebbe un database vuoto.
Ecco il codice
 
     <?php
         include 'config.php';
         $mysqli = new mysqli($nomehost, $nomeuser, $password);
         if ($mysqli->connect_error) {
        die('Errore di connessione (' . $mysqli->connect_errno . ') '
.       $mysqli->connect_error);
                                                 }
              else {
                          echo 'Connesso. ' . $mysqli->host_info . "\n";
                     }
          // Creo il database
                    $mysqli->query("CREATE DATABASE chiavi");
         // Seleziono il database
                    $mysqli->query("USE chiavi");
        // creazione della tabella per gli utenti
                     $mysqli->query("CREATE TABLE utenti
                          ( id INT(5) NOT NULL AUTO_INCREMENT , nome VARCHAR(30) , cognome VARCHAR(30), id_chiave VARCHAR(50) , UNIQUE (id_chiave), PRIMARY KEY (id))");
      // creazione della tabella di log
                    $mysqli->query("CREATE TABLE log
                                           ( id INT(5) NOT NULL AUTO_INCREMENT , id_chiave VARCHAR(50), data DATE , ora TIME, PRIMARY KEY (id))");
                    $mysqli->close();
?>
 
Insomma creiamo un database chiamato “chiavi” che contiene due tabelle “utenti” e “log”, id_chiave è UNIQUE, ovvero non è possibile inserire due codici identici per evitare che una chiave possa essere abilitata due volte per errore. Si noti che la pagina include la pagina config.php, questa pagina, spesso chiamata config.inc, contiene dei dati per il collegamento al database. Nel nostro caso
 
    <?php
          // richiamo lo script responsabile della connessione a MySQL
           $nomehost = "localhost";
           $nomeuser = "Mio_nome_utente";
           $password = "Mia_password";
          $nomedb = "chiavi";
          date_default_timezone_set('Europe/Rome');
?>
 
Il file verrà incluso in tutte le pagine che si connettono al database.
Quindi passiamo alla pagina abilita.php
 
      <?php
                 include 'config.php';
                 //leggo il parametro passato da Arduino, ovvero il tag RFID
                 $chiave=$_GET["chiave"];
               //Mi connetto al datbase, usando i dati contenuti in config.php
               $mysqli = new mysqli($nomehost, $nomeuser, $password);
              //Controllo che la connessione sia attivata
              if ($mysqli->connect_error) {
              die('Errore di connessione (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
     }
//questa parte è commentata, ovvero non sarà eseguita perché non mi serve, c'è per il debug.
            /*else {
                        echo 'Connesso. ' . $mysqli->host_info . "\n";
                          }
            */
          // Seleziono il database
         $mysqli->query("USE chiavi");
         //preparo la query SQL
        $query = "INSERT INTO utenti (id_chiave) VALUES ('$chiave')";
        // Esecuzione della query e controllo degli eventuali errori
        if (!$mysqli->query($query)) {
       die($mysqli->error);
                                       }
          //Chiudo la connesione
         $mysqli->close();
?>
 
Quindi la pagina credenziali.html
      <form action="action.php" method="POST">
      <p>Nome: <input type="text" name="name" value="" /></p>
      <p>Cognome: <input type="text" name="surname" value ="" /></p>
     <p><input type="submit"></p>
     </form>
 
La pagina presenta un modulo per inserire e passare alla pagina action.php due variabili Nome e Cognome
Action.php
 
          <?php
                  include 'config.php';
                 $nome=$_POST["name"];
                $cognome=$_POST["surname"];
                $mysqli = new mysqli($nomehost, $nomeuser, $password);
               if ($mysqli->connect_error) {
             die('Errore di connessione (' . $mysqli->connect_errno . ') '
            . $mysqli->connect_error);
          }
              else {
                          echo 'Connesso. ' . $mysqli->host_info . "\n";
                      }
          // Seleziono il database
                    $mysqli->query("USE chiavi");
                    $query = "UPDATE utenti SET nome='$nome' ,cognome='$cognome' WHERE nome IS NULL OR '' ";
           // Esecuzione della query e controllo degli eventuali errori
                    if (!$mysqli->query($query)) {
                   die($mysqli->error);
                            }
                $mysqli->close();
  ?>
 
La pagina esegue una query SQL che aggiorna il record in cui è vuoto il campo Nome. Ricorderete che abilità.php inserisce solo il valore del tag RFID, per cui, dopo averla eseguita avremo un record con un solo campo inserito, basta cercarlo ed inserire i valori di Nome e Cognome.
L'unica pagina che l'utente vedrà è credenziali.html, il resto è quasi trasparente, apparirà la scritta “Connesso. Localhost via UNIX socket” come verifica che tutto sia stato a posto.
Quindi la pagina più importante controllo.php
 
     <?php
           include 'config.php';
           $chiave=$_GET["chiave"];
           $mysqli = new mysqli($nomehost, $nomeuser, $password);
           if ($mysqli->connect_error) {
          die('Errore di connessione (' . $mysqli->connect_errno . ') '
         . $mysqli->connect_error);
                       }
            /*else {
                   echo 'Connesso. ' ;
                     }
               */
         // Seleziono il database
          $mysqli->query("USE chiavi");
          $query = "SELECT * FROM utenti WHERE id_chiave='$chiave'";
          // Esecuzione della query e controllo degli eventuali errori
         if ($result = $mysqli->query($query))
        {
          /* controllo del risultato per verificare che ci sia almeno un record, ovvero che la chiave cercata sia stata trovata */
          $row_cnt = $result-> num_rows;
         //controllo se trovo la chiave
        if ($row_cnt > 0)
           {
                /*se la chiave c'è, invio la risposta S la <> mi servono per leggere la risposta con Arduino */
                echo '<S>';
               /*preparo la query che inserisce nella tabella log la chiave, la data e l'ora*/
              $query="INSERT INTO log (id_chiave,data, ora) VALUES('$chiave', NOW(), NOW()) ";
              // Esecuzione della query e controllo degli eventuali errori
              $mysqli->query($query); }
              //Se non trovo la chiave, ovvero il tag non è abilitato scrivo N
                   else {
                            echo '<N>';
                           }
               /* chiudo il controllo */
                      $result->close();
                    //chiudo la sessione
                      $mysqli->close();
                      }
  ?>
 
Infine la pagina log.php
 
          <?php
                 include 'config.php';
                 $mysqli = new mysqli($nomehost, $nomeuser, $password);
                 if ($mysqli->connect_error) {
                die('Errore di connessione (' . $mysqli->connect_errno . ') '
              . $mysqli->connect_error);
                        }
                /*else {
                             echo 'Connesso. ' . $mysqli->host_info . "\n";
                           }
                                */
                  // Seleziono il database
                        $mysqli->query("USE chiavi");
                     $query = "SELECT utenti.*,log.* FROM utenti,log WHERE utenti.id_chiave = log.id_chiave";
                // Esecuzione della query e controllo degli eventuali errori
                   if (!$mysqli->query($query)) {
                  die($mysqli->error);
                         }
               // visualizza i dati in tabella
                     echo "<p><b>Visualizza Tutto</b> | </p>";
                     $result = $mysqli->query($query);
                    echo ("Nome &nbsp &nbsp &nbsp Cognome &nbsp &nbsp &nbsp Data &nbsp &nbsp &nbsp &nbsp &nbsp &nbsp Ora" );
                  echo ("<BR>");
                   while ($row = $result->fetch_array(MYSQLI_NUM)) {
                   printf("%s &nbsp &nbsp &nbsp ", $row[1] );
                   printf("%s &nbsp &nbsp &nbsp", $row[2] );
                   printf("%s &nbsp &nbsp &nbsp", $row[6] );
                  printf("%s &nbsp &nbsp &nbsp <br />", $row[7] );
                                               }
         $mysqli->close();
  ?>
Semplicemente la pagina presenta un elenco di tutti gli accessi in una rudimentale tabella
 

tag: