5E e 5I Sia: esercizio completo in php e mysql con sessione e md5 per studenti Dsa e Bes

 

Procedura completa Php e Mysql



Lezione del 23 ottobre 2024 – prof. Paolo Latella

 

Script registro.sql (struttura e dati del database)

Ecco una spiegazione riga per riga del dump SQL fornito:

-- phpMyAdmin SQL Dump

Commento che indica che il file è un dump generato da phpMyAdmin.

-- version 4.8.5

Versione di phpMyAdmin utilizzata per generare il dump.

-- https://www.phpmyadmin.net/

Link al sito ufficiale di phpMyAdmin.

-- Host: 127.0.0.1

Indirizzo del server MySQL da cui è stato estratto il dump (localhost).

-- Creato il: Mag 07, 2024 alle 08:54

Data e ora in cui è stato creato il dump.

-- Versione del server: 10.1.38-MariaDB

Versione del server database utilizzato (MariaDB).

-- Versione PHP: 5.6.40

Versione di PHP in uso sul server.

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";

Imposta la modalità SQL per non permettere valori automatici a zero.

SET AUTOCOMMIT = 0;

Disabilita l'autocommit, il che significa che le modifiche non vengono applicate automaticamente.

START TRANSACTION;

Inizia una nuova transazione, che può essere completata o annullata in seguito.

SET time_zone = "+00:00";

Imposta il fuso orario della connessione al database.

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

Imposta variabili per ripristinare il set di caratteri client originale (comando compatibile con versioni specifiche di MySQL).

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

Salva il set di caratteri dei risultati originali.

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

Salva la collation della connessione originale.

/*!40101 SET NAMES utf8mb4 */;

Imposta il set di caratteri della connessione a `utf8mb4`.

--

-- Database: `register`

--

Commento che indica il nome del database a cui appartengono le tabelle seguenti.

-- --------------------------------------------------------

Separatore visivo tra diverse sezioni del dump.

--

-- Struttura della tabella `new_record`

--

Commento che introduce la definizione della tabella `new_record`.

CREATE TABLE `new_record` (

Inizio della definizione della tabella `new_record`.

  `id` int(11) NOT NULL,

Definizione della colonna `id` come intero (11 cifre) e non nullo.

  `trn_date` datetime NOT NULL,

Colonna `trn_date` definita come `datetime` e non nullo.

  `name` varchar(50) NOT NULL,

Colonna `name` definita come stringa (massimo 50 caratteri) e non nullo.

  `age` int(11) NOT NULL,

Colonna `age` definita come intero (11 cifre) e non nullo.

  `submittedby` varchar(50) NOT NULL

Colonna `submittedby` definita come stringa (massimo 50 caratteri) e non nullo.

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Chiusura della definizione della tabella, specificando il motore (InnoDB) e il set di caratteri predefinito (latin1).

--

-- Dump dei dati per la tabella `new_record`

--

Commento che introduce l'inserimento di dati nella tabella `new_record`.

INSERT INTO `new_record` (`id`, `trn_date`, `name`, `age`, `submittedby`) VALUES

(1, '2024-05-07 08:48:47', 'Paolo Latella', 30, 'Marco');

Comando per inserire un record nella tabella `new_record` con i valori specificati.

-- --------------------------------------------------------

Ulteriore separatore visivo.

--

-- Struttura della tabella `users`

--

Commento che introduce la definizione della tabella `users`.

CREATE TABLE `users` (

Inizio della definizione della tabella `users`.

  `id` int(11) NOT NULL,

Colonna `id` come intero (11 cifre) e non nullo.

  `username` varchar(50) NOT NULL,

Colonna `username` come stringa (massimo 50 caratteri) e non nullo.

  `email` varchar(50) NOT NULL,

Colonna `email` come stringa (massimo 50 caratteri) e non nullo.

  `password` varchar(50) NOT NULL,

Colonna `password` come stringa (massimo 50 caratteri) e non nullo.

  `trn_date` datetime NOT NULL

Colonna `trn_date` definita come `datetime` e non nullo.

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Chiusura della definizione della tabella `users`, specificando il motore (InnoDB) e il set di caratteri predefinito (latin1).

--

-- Dump dei dati per la tabella `users`

--

Commento che introduce l'inserimento di dati nella tabella `users`.

INSERT INTO `users` (`id`, `username`, `email`, `password`, `trn_date`) VALUES

(4, 'paololatella', 'prof.paololatella@gmail.com', '80646ba040f963e55fa15c632796380c', '2024-05-07 08:36:42'),

(5, 'Marco', 'latella.paolo@bassi.edu.it', 'a382e131ed798891b816f8d1e3ce1908', '2024-05-07 08:38:36');

Comando per inserire due record nella tabella `users` con i valori specificati.

-- Indici per le tabelle scaricate

--

```

Commento che indica che stanno per essere definiti gli indici per le tabelle.

--

-- Indici per le tabelle `new_record`

--

ALTER TABLE `new_record`

  ADD PRIMARY KEY (`id`);

Aggiunta della chiave primaria alla tabella `new_record` sulla colonna `id`.

--

-- Indici per le tabelle `users`

--

ALTER TABLE `users`

  ADD PRIMARY KEY (`id`);

Aggiunta della chiave primaria alla tabella `users` sulla colonna `id`.

--

-- AUTO_INCREMENT per le tabelle scaricate

--

Commento che indica che si sta per impostare l'AUTO_INCREMENT.

--

-- AUTO_INCREMENT per la tabella `new_record`

--

ALTER TABLE `new_record`

  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=2;

Imposta la colonna `id` della tabella `new_record` per utilizzare AUTO_INCREMENT e specifica che il prossimo valore sarà 2.

--

-- AUTO_INCREMENT per la tabella `users`

ALTER TABLE `users`

  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6;

Imposta la colonna `id` della tabella `users` per utilizzare AUTO_INCREMENT e specifica che il prossimo valore sarà 6.

COMMIT;

Applica tutte le modifiche fatte nella transazione.

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

Ripristina il set di caratteri client originale.

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

Ripristina il set di caratteri dei risultati originale.

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

Ripristina la collation della connessione originale.

Questa spiegazione copre ogni parte del dump SQL, inclusi i comandi per la creazione delle tabelle, l'inserimento dei dati e la configurazione degli indici e delle chiavi primarie.

 

 


 

Pagina auth.php

<?php

Inizio del codice PHP. Indica al server che il codice seguente è scritto in PHP.

session_start();

Questa funzione avvia una sessione o riprende una sessione esistente. Consente di accedere ai dati della sessione (come variabili memorizzate) che possono essere utilizzate per gestire informazioni specifiche per l'utente, come il suo stato di accesso.

if(!isset($_SESSION["username"])){

Questa riga verifica se la variabile di sessione `$_SESSION["username"]` è impostata. Se non è impostata (ossia, l'utente non ha effettuato il login), il blocco di codice all'interno delle parentesi graffe verrà eseguito.

 header("Location: login.php");

Se la condizione precedente è vera (l'utente non è autenticato), questa riga reindirizza l'utente alla pagina di login (`login.php`).

    exit();

Questa funzione termina l'esecuzione dello script corrente dopo il reindirizzamento. È una buona pratica utilizzare `exit()` dopo un reindirizzamento per evitare che il codice successivo venga eseguito.

}

Chiusura del blocco `if`.

Questo codice è tipicamente utilizzato per proteggere pagine da accessi non autorizzati, assicurandosi che solo gli utenti autenticati possano visualizzarle. Se l'utente non è autenticato, viene indirizzato alla pagina di login.


 

Pagina db.php

<?php

Inizio del codice PHP. Indica al server che il codice seguente è scritto in PHP.

$con = mysqli_connect("localhost", "root", "", "register");

Questa riga utilizza la funzione `mysqli_connect` per stabilire una connessione al database MySQL. I parametri forniti sono:

- `"localhost"`: l'indirizzo del server del database (in questo caso, il server locale).

- `"root"`: il nome utente per accedere al database.

- `""`: la password per l'utente (in questo caso, non è fornita).

- `"register"`: il nome del database al quale ci si sta connettendo.

La connessione stabilita è memorizzata nella variabile `$con`.

// Check connection

Commento che indica che il codice successivo verificherà se la connessione al database è andata a buon fine.

if (mysqli_connect_errno())

Questa riga controlla se ci sono stati errori durante il tentativo di connessione al database utilizzando `mysqli_connect_errno()`, che restituisce il codice di errore se la connessione è fallita.

  {

Apertura del blocco `if`.

  echo "Failed to connect to MySQL: " . mysqli_connect_error();

Se la connessione è fallita, questa riga stampa un messaggio di errore che include la descrizione dell'errore, ottenuta con `mysqli_connect_error()`.

 

  }

Chiusura del blocco `if`.

Questo codice è tipicamente utilizzato per stabilire una connessione a un database MySQL e gestire eventuali errori di connessione, consentendo di capire se c'è un problema nel collegamento al database.


 

Pagina Login.php:

<?php

session_start();

?>

Inizio del codice PHP. La funzione `session_start()` avvia una sessione o riprende una sessione esistente, permettendo di memorizzare informazioni (come il nome utente) per l'utente attuale.

<!DOCTYPE html>

Dichiarazione del tipo di documento HTML5. Indica al browser che il contenuto seguente è un documento HTML.

<html>

Inizio del documento HTML.

<head>

Inizio della sezione `<head>`, che contiene metadati e link a risorse.

<meta charset="utf-8">

Imposta la codifica dei caratteri del documento su UTF-8, che supporta la maggior parte dei caratteri e simboli internazionali.

<title>Login</title>

Specifica il titolo della pagina, che apparirà nella scheda del browser.

<link rel="stylesheet" href="css/style.css" />

Collega un foglio di stile CSS esterno per definire lo stile della pagina, specificando il percorso del file CSS.

</head>

Fine della sezione `<head>`.

 

<body>

Inizio della sezione `<body>`, che contiene il contenuto visibile della pagina.

<?php

                    require('db.php');

Include il file `db.php`, che presumibilmente contiene il codice per la connessione al database.

// If form submitted, insert values into the database.

if (isset($_POST['username'])){

Controlla se il modulo di login è stato inviato verificando se il campo `username` è impostato.

$username = stripslashes($_REQUEST['username']); // removes backslashes

Rimuove eventuali backslash dal nome utente, nel caso in cui siano stati aggiunti.

$username = mysqli_real_escape_string($con, $username); //escapes special characters in a string

Utilizza la funzione `mysqli_real_escape_string()` per eseguire l'escape di caratteri speciali nel nome utente, proteggendo contro le iniezioni SQL.

$password = stripslashes($_REQUEST['password']);

Rimuove eventuali backslash dalla password.

$password = mysqli_real_escape_string($con, $password);

Esegue l'escape della password per proteggerla da iniezioni SQL.

//Checking if user exists in the database or not

Commento che indica che il codice successivo controllerà se l'utente esiste nel database.

$query = "SELECT * FROM `users` WHERE username='$username' and password='".md5($password)."'";

Costruisce una query SQL per selezionare tutte le colonne dalla tabella `users` dove il nome utente e la password (criptata con MD5) corrispondono ai valori forniti.

$result = mysqli_query($con, $query) or die(mysqli_error($con));

Esegue la query sul database e memorizza il risultato. Se si verifica un errore, il messaggio di errore verrà stampato.

$rows = mysqli_num_rows($result);

Conta il numero di righe restituite dalla query.

if($rows == 1){

Controlla se esiste esattamente una riga (cioè, l'utente è stato trovato).

$_SESSION['username'] = $username;

Memorizza il nome utente nella sessione, consentendo di riconoscere l'utente nelle pagine successive.

header("Location: index.php"); // Redirect user to index.php

Reindirizza l'utente alla pagina `index.php` dopo un login riuscito.

exit();

Termina l'esecuzione dello script per assicurarsi che nessun codice successivo venga eseguito dopo il reindirizzamento.

  } else {

In caso contrario (se non è stato trovato un utente corrispondente):

echo "<div class='form'><h3>Username/password is incorrect.</h3><br/>Click here to <a href='login.php'>Login</a></div>";

Stampa un messaggio di errore che informa l'utente che il nome utente o la password è errato, con un link per tornare alla pagina di login.

}

    } else {

Se il modulo non è stato inviato, viene eseguito il codice seguente.

<div class="form">

Inizio di un div con la classe `form`, che contiene il modulo di login.

<h1>Log In</h1>

Titolo del modulo di login.

<form action="" method="post" name="login">

Inizio del modulo. L'attributo `action` è vuoto, quindi il modulo verrà inviato alla stessa pagina. Il metodo di invio è `POST`.

<input type="text" name="username" placeholder="Username" required />

Campo di input per il nome utente, con un placeholder e l'attributo `required` per richiederne il completamento.

<input type="password" name="password" placeholder="Password" required />

Campo di input per la password, anch'esso con un placeholder e `required`.

<input name="submit" type="submit" value="Login" />

Pulsante di invio per il modulo, con l'etichetta "Login".

</form>

Fine del modulo.

<p>Not registered yet? <a href='registration.php'>Register Here</a></p>

Messaggio che invita gli utenti non registrati a registrarsi, con un link alla pagina di registrazione.

<br /><br />

</div>

Due interruzioni di riga seguite dalla chiusura del div contenitore del modulo.

 

<?php } ?>

Chiusura della condizione `if`, che controlla se il modulo è stato inviato.

</body>

</html>

Fine del corpo del documento HTML e della pagina.

Questo codice gestisce il processo di login, dalla visualizzazione del modulo di login all'autenticazione dell'utente e alla gestione degli errori.


 

Pagina logout.php

<?php

Inizio del codice PHP. Indica al server che il contenuto successivo è scritto in PHP.

session_start();

Avvia o riprende una sessione esistente. Questo è necessario per accedere alle variabili di sessione precedentemente memorizzate.

if(session_destroy()) // Destroying All Sessions

Chiama la funzione `session_destroy()`, che distrugge tutte le sessioni attive e cancella i dati di sessione memorizzati. Se l'operazione ha successo (la funzione restituisce `true`), viene eseguita la parte interna dell'`if`.

{

Apertura del blocco `if`.

    header("Location: login.php"); // Redirecting To Login Page

Utilizza la funzione `header()` per inviare un'intestazione HTTP che reindirizza l'utente alla pagina `login.php`. Questo è utile per inviare l'utente alla pagina di login dopo la disconnessione.

    exit();

Termina l'esecuzione dello script PHP. Questo è importante per assicurarsi che nessun codice successivo venga eseguito dopo il reindirizzamento.

}

Chiusura del blocco `if`.

In sintesi, questo codice gestisce la disconnessione di un utente: distrugge la sessione e reindirizza l'utente alla pagina di login.


 

Pagina insert.php

Ecco la spiegazione riga per riga del codice PHP e HTML fornito:

<?php

include("auth.php");

Includiamo il file `auth.php`, che probabilmente gestisce l'autenticazione degli utenti, assicurando che solo gli utenti autorizzati possano accedere a questa pagina.

require('db.php');

Includiamo il file `db.php`, che contiene le informazioni necessarie per connettersi al database. Se il file non viene trovato, il programma si fermerà con un errore.

$status = "";

Inizializziamo la variabile `$status` come una stringa vuota. Questa variabile verrà utilizzata per memorizzare eventuali messaggi di stato.

if(isset($_POST['new']) && $_POST['new']==1)

{

Controlliamo se il modulo è stato inviato e se il valore del campo `new` è uguale a 1. Questo serve a verificare che l'utente stia cercando di inserire un nuovo record.

$trn_date = date("Y-m-d H:i:s");

 

Impostiamo la variabile `$trn_date` con la data e l'ora attuali nel formato `YYYY-MM-DD HH:MM:SS`.

$name = $_REQUEST['name'];

Assegniamo il valore del campo `name` dal modulo alla variabile `$name`.

 

$age = $_REQUEST['age'];

Assegniamo il valore del campo `age` dal modulo alla variabile `$age`.

$submittedby = $_SESSION["username"];

Impostiamo la variabile `$submittedby` con il nome utente dell'utente attualmente connesso, recuperato dalla sessione.

$ins_query = "insert into new_record (`trn_date`,`name`,`age`,`submittedby`) values ('$trn_date','$name','$age','$submittedby')";

Creiamo la query SQL per inserire un nuovo record nella tabella `new_record`, specificando i valori da inserire.

mysqli_query($con, $ins_query) or die(mysqli_error($con));

Eseguiamo la query di inserimento. Se si verifica un errore, il programma si interrompe e stampa l'errore.

$status = "New Record Inserted Successfully.</br></br><a href='view.php'>View Inserted Record</a>";

Se l'inserimento ha successo, aggiorniamo la variabile `$status` con un messaggio di conferma e un link per visualizzare il record inserito.

}

?>

Fine del blocco condizionale.

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8">

<title>Insert New Record</title>

<link rel="stylesheet" href="css/style.css" />

</head>

<body>

Inizio del documento HTML. Specifica il tipo di documento, il set di caratteri e include il foglio di stile CSS.

<div class="form">

<p><a href="dashboard.php">Dashboard</a> | <a href="view.php">View Records</a> | <a href="logout.php">Logout</a></p>

Creiamo un contenitore `div` con la classe `form`. All'interno, ci sono link per navigare verso il dashboard, visualizzare i record e disconnettersi.

<div>

<h1>Insert New Record</h1>

Aggiungiamo un titolo alla pagina.

<form name="form" method="post" action="">

Iniziamo il modulo per l'inserimento di un nuovo record. Il metodo di invio è `POST`.

<input type="hidden" name="new" value="1" />

Aggiungiamo un campo nascosto per indicare che si sta creando un nuovo record.

<p><input type="text" name="name" placeholder="Enter Name" required /></p>

Campo di input per il nome, obbligatorio.

<p><input type="text" name="age" placeholder="Enter Age" required /></p>

Campo di input per l'età, obbligatorio.

<p><input name="submit" type="submit" value="Submit" /></p>

Pulsante di invio per il modulo.

</form>

Chiusura del modulo.

<p style="color:#FF0000;"><?php echo $status; ?></p>

Visualizziamo eventuali messaggi di stato, formattati in rosso.

<br /><br /><br /><br />

Aggiungiamo spaziature vuote.

</div>

</div>

</body>

</html>

Chiusura dei vari tag HTML, concludendo la pagina.

Questa spiegazione copre ogni parte del codice, evidenziando il funzionamento sia della logica PHP che della struttura HTML.


 

Pagina registration.php

<!DOCTYPE html>

Dichiara il tipo di documento, informando il browser che il file è un documento HTML5.

<html>

Inizio del documento HTML.

<head>

Inizio della sezione `<head>`, che contiene metadati e collegamenti a risorse esterne.

<meta charset="utf-8">

Imposta il set di caratteri del documento su UTF-8, consentendo la corretta visualizzazione di caratteri speciali.

<title>Registration</title>

Definisce il titolo della pagina, che verrà visualizzato nella scheda del browser.

<link rel="stylesheet" href="css/style.css" />

Collega un foglio di stile CSS esterno per la formattazione della pagina.

</head>

<body>

Chiusura della sezione `<head>` e inizio del corpo del documento.

<?php

                    require('db.php');

Inizio del blocco PHP. Qui includiamo il file `db.php`, che stabilisce la connessione al database.

    // If form submitted, insert values into the database.

    if (isset($_REQUEST['username'])){

Commento descrittivo e verifica se il campo `username` è stato inviato tramite una richiesta (POST o GET).

                                       $username = stripslashes($_REQUEST['username']); // removes backslashes

Assegniamo il valore del campo `username` alla variabile `$username`, rimuovendo eventuali backslash.

                                       $username = mysqli_real_escape_string($con,$username); //escapes special characters in a string

Eseguiamo l'escaping dei caratteri speciali nella variabile `$username` per prevenire attacchi di SQL injection.

$email = stripslashes($_REQUEST['email']);

Assegniamo il valore del campo `email` alla variabile `$email`, rimuovendo eventuali backslash.

$email = mysqli_real_escape_string($con,$email);

Eseguiamo l'escaping dei caratteri speciali nella variabile `$email`.

                                       $password = stripslashes($_REQUEST['password']);

Assegniamo il valore del campo `password` alla variabile `$password`, rimuovendo eventuali backslash.

                                       $password = mysqli_real_escape_string($con,$password);

Eseguiamo l'escaping dei caratteri speciali nella variabile `$password`.

                                       $trn_date = date("Y-m-d H:i:s");

Impostiamo la variabile `$trn_date` con la data e l'ora attuali nel formato `YYYY-MM-DD HH:MM:SS`.

        $query = "INSERT into `users` (username, password, email, trn_date) VALUES ('$username', '".md5($password)."', '$email', '$trn_date')";

Creiamo una query SQL per inserire un nuovo utente nella tabella `users`, con i valori forniti, dove la password è cifrata utilizzando `md5`.

        $result = mysqli_query($con,$query);

Eseguiamo la query di inserimento. La variabile `$result` conterrà il risultato dell'operazione.

        if($result){

Verifichiamo se l'operazione di inserimento è andata a buon fine.

            echo "<div class='form'><h3>You are registered successfully.</h3><br/>Click here to <a href='login.php'>Login</a></div>";

Se l'utente è stato registrato con successo, visualizziamo un messaggio di conferma e un link per accedere alla pagina di login.

        }

    }else{

Chiusura del blocco `if` e inizio del blocco `else`, che si attiva se il modulo non è stato inviato.

?>

<div class="form">

<h1>Registration</h1>

Inizio della sezione HTML per il modulo di registrazione.

<form name="registration" action="" method="post">

Inizio del modulo con il nome `registration`. Il modulo invia dati tramite il metodo POST.

<input type="text" name="username" placeholder="Username" required />

Campo di input per il nome utente, con un messaggio segnaposto e contrassegnato come obbligatorio.

<input type="email" name="email" placeholder="Email" required />

Campo di input per l'email, con un messaggio segnaposto e contrassegnato come obbligatorio.

<input type="password" name="password" placeholder="Password" required />

Campo di input per la password, con un messaggio segnaposto e contrassegnato come obbligatorio.

<input type="submit" name="submit" value="Register" />

Pulsante di invio del modulo, etichettato "Register".

</form>

<br /><br />

</div>

<?php } ?>

Chiusura del modulo e del div. Se il modulo non è stato inviato, mostra il modulo di registrazione.

</body>

</html>

Chiusura del corpo e del documento HTML.

Questa spiegazione copre ogni parte del codice, evidenziando la logica PHP e la struttura HTML.


 

Pagina view.php

<?php

include("auth.php");

Includiamo il file `auth.php`, che si occupa di gestire l'autenticazione dell'utente. Questo serve per garantire che solo gli utenti autorizzati possano accedere a questa pagina.

require('db.php');

Richiediamo il file `db.php`, che stabilisce la connessione al database. Se il file non viene trovato, l'esecuzione si interrompe.

<!DOCTYPE html>

Dichiara il tipo di documento, informando il browser che il file è un documento HTML5.

<html>

Inizio del documento HTML.

<head>

Inizio della sezione `<head>`, che contiene metadati e riferimenti a risorse esterne.

<meta charset="utf-8">

Imposta il set di caratteri del documento su UTF-8, consentendo la corretta visualizzazione di caratteri speciali.

<title>View Records</title>

Definisce il titolo della pagina, che verrà visualizzato nella scheda del browser.

<link rel="stylesheet" href="css/style.css" />

Collega un foglio di stile CSS esterno per la formattazione della pagina.

</head>

<body>

Chiusura della sezione `<head>` e inizio del corpo del documento.

<div class="form">

Inizio di un div con la classe `form`, usato per contenere il contenuto della pagina.

<p><a href="index.php">Home</a> | <a href="insert.php">Insert New Record</a> | <a href="logout.php">Logout</a></p>

Fornisce un menu di navigazione con link alla homepage, a una pagina per inserire nuovi record e un link per disconnettersi.

<h2>View Records</h2>

Titolo della sezione, che indica che si stanno visualizzando i record.

<table width="100%" border="1" style="border-collapse:collapse;">

Inizio di una tabella che occuperà il 100% della larghezza disponibile, con un bordo di 1 pixel e senza spazi tra le celle.

<thead>

Inizio della sezione dell'intestazione della tabella.

<tr><th><strong>S.No</strong></th><th><strong>Name</strong></th><th><strong>Age</strong></th><th><strong>Edit</strong></th><th><strong>Delete</strong></th></tr>

Creazione di una riga di intestazione con le colonne: "S.No" (numero seriale), "Name" (nome), "Age" (età), "Edit" (modifica) e "Delete" (elimina).

</thead>

<tbody>

Chiusura della sezione dell'intestazione e inizio del corpo della tabella.

<?php

$count=1;

Inizio di un blocco PHP. Inizializziamo la variabile `$count` a 1, che servirà per numerare i record.

$sel_query="Select * from new_record ORDER BY id desc;";

Definiamo una query SQL per selezionare tutti i record dalla tabella `new_record`, ordinati per `id` in ordine decrescente.

$result = mysqli_query($con,$sel_query);

Eseguiamo la query e salviamo il risultato nella variabile `$result`.

while($row = mysqli_fetch_assoc($result)) { ?>

Avviamo un ciclo `while` che itera su ogni riga restituita dalla query, convertendo il risultato in un array associativo e assegnandolo alla variabile `$row`.

 

<tr><td align="center"><?php echo $count; ?></td><td align="center"><?php echo $row["name"]; ?></td><td align="center"><?php echo $row["age"]; ?></td><td align="center"><a href="edit.php?id=<?php echo $row["id"]; ?>">Edit</a></td><td align="center"><a href="delete.php?id=<?php echo $row["id"]; ?>">Delete</a></td></tr>

Creiamo una riga della tabella per ogni record.

- La prima cella mostra il numero di record (`$count`).

- La seconda cella mostra il nome (`$row["name"]`).

- La terza cella mostra l'età (`$row["age"]`).

- La quarta cella contiene un link per modificare il record, passando l'`id` del record come parametro.

- La quinta cella contiene un link per eliminare il record, anch'esso con l'`id` come parametro.

<?php $count++; } ?>

Incrementiamo `$count` per il prossimo record e chiudiamo il ciclo `while`.

</tbody>

</table>

Chiusura del corpo della tabella e della tabella stessa.

<br /><br /><br /><br />

</div>

</body>

</html>

Aggiungiamo degli spazi verticali e chiudiamo il div, il corpo e il documento HTML.

Questa spiegazione copre ogni parte del codice, evidenziando la logica PHP e la struttura HTML.


 

Pagina index.php

<?php

include("auth.php"); //include auth.php file on all secure pages

Questa riga include il file `auth.php`, che gestisce l'autenticazione degli utenti. In questo modo, si garantisce che solo gli utenti autenticati possano accedere a questa pagina. Il commento specifica che il file è incluso in tutte le pagine sicure.

<!DOCTYPE html>

Dichiara il tipo di documento, informando il browser che il file è un documento HTML5.

<html>

Inizio del documento HTML.

<head>

Inizio della sezione `<head>`, che contiene metadati e riferimenti a risorse esterne.

<meta charset="utf-8">

Imposta il set di caratteri del documento su UTF-8, consentendo la corretta visualizzazione di caratteri speciali.

<title>Welcome Home</title>

Definisce il titolo della pagina, che verrà visualizzato nella scheda del browser.

<link rel="stylesheet" href="css/style.css" />

Collega un foglio di stile CSS esterno per la formattazione della pagina.

</head>

<body>

Chiusura della sezione `<head>` e inizio del corpo del documento.

<div class="form">

Inizio di un div con la classe `form`, usato per contenere il contenuto della pagina.

<p>Welcome <?php echo $_SESSION['username']; ?>!</p>

Mostra un messaggio di benvenuto all'utente, estraendo il nome utente dalla sessione (`$_SESSION['username']`). Se l'utente è autenticato, il suo nome verrà visualizzato qui.

<p>This is secure area.</p>

Un semplice messaggio che informa l'utente che si trova in un'area protetta della pagina.

<p><a href="dashboard.php">Dashboard</a></p>

Fornisce un link alla pagina del dashboard, consentendo all'utente di accedere facilmente a questa sezione.

<a href="logout.php">Logout</a>

Fornisce un link per disconnettersi, reindirizzando l'utente alla pagina `logout.php`.

<br /><br /><br /><br />

Aggiunge degli spazi verticali nella pagina.

</div>

</body>

</html>

Chiusura del div, del corpo e del documento HTML.

Questa spiegazione copre ogni parte del codice, evidenziando la logica PHP e la struttura HTML.


 

Pagina edit.php

<?php

include("auth.php");

Questa riga include il file `auth.php`, che gestisce l'autenticazione degli utenti, assicurando che solo gli utenti autenticati possano accedere a questa pagina.

require('db.php');

Questa riga richiede il file `db.php`, che probabilmente contiene la connessione al database.

$id=$_REQUEST['id'];

Qui si ottiene l'ID del record da aggiornare, passando come parametro nella richiesta HTTP. L'ID viene memorizzato nella variabile `$id`.

$query = "SELECT * from new_record where id='".$id."'";

Questa riga crea una query SQL per selezionare tutti i campi dalla tabella `new_record` dove l'ID corrisponde a quello fornito.

$result = mysqli_query($con, $query) or die ( mysqli_error($con));

Esegue la query sul database e memorizza il risultato nella variabile `$result`. Se la query fallisce, viene mostrato un messaggio di errore.

$row = mysqli_fetch_assoc($result);

Questa riga estrae una riga di dati dal risultato come un array associativo e la memorizza nella variabile `$row`.

<!DOCTYPE html>

<html>

<head>

Inizio della struttura HTML, dichiarando che si tratta di un documento HTML5.

 

<meta charset="utf-8">

Imposta il set di caratteri del documento su UTF-8, per supportare caratteri speciali.

<title>Update Record</title>

Definisce il titolo della pagina, visualizzato nella scheda del browser.

<link rel="stylesheet" href="css/style.css" />

Collega un foglio di stile CSS esterno per la formattazione della pagina.

</head>

<body>

Chiusura della sezione `<head>` e inizio del corpo del documento.

<div class="form">

Inizio di un div con la classe `form`, utilizzato per contenere gli elementi della pagina.

<p><a href="dashboard.php">Dashboard</a> | <a href="insert.php">Insert New Record</a> | <a href="logout.php">Logout</a></p>

Fornisce un menu di navigazione con link al dashboard, alla pagina per inserire nuovi record e alla pagina di logout.

<h1>Update Record</h1>

Un titolo che indica che la pagina è per l'aggiornamento di un record.

$status = "";

Inizializza una variabile `$status` per memorizzare eventuali messaggi di stato da mostrare all'utente.

if(isset($_POST['new']) && $_POST['new']==1)

Controlla se il modulo è stato inviato e se il campo `new` è impostato a 1, indicando che si sta cercando di aggiornare un record.

{

$id=$_REQUEST['id'];

Ricava di nuovo l'ID del record da aggiornare dalla richiesta.

$trn_date = date("Y-m-d H:i:s");

Imposta la data e ora attuale in un formato compatibile con il database.

$name =$_REQUEST['name'];

Ottiene il nome fornito nel modulo.

$age =$_REQUEST['age'];

Ottiene l'età fornita nel modulo.

$submittedby = $_SESSION["username"];

Memorizza il nome utente dell'utente che sta effettuando l'aggiornamento, prelevandolo dalla sessione.

$update="update new_record set trn_date='".$trn_date."', name='".$name."', age='".$age."', submittedby='".$submittedby."' where id='".$id."'";

Crea la query SQL per aggiornare il record nella tabella `new_record` con i nuovi valori forniti.

mysqli_query($con, $update) or die(mysqli_error($con));

Esegue la query di aggiornamento e, se fallisce, mostra un errore.

$status = "Record Updated Successfully. </br></br><a href='view.php'>View Updated Record</a>";

Imposta un messaggio di stato che indica che il record è stato aggiornato con successo, fornendo anche un link per visualizzare il record aggiornato.

echo '<p style="color:#FF0000;">'.$status.'</p>';

Mostra il messaggio di stato sullo schermo, in rosso.

}else {

Se il modulo non è stato inviato, si esegue il blocco di codice successivo.

<div>

<form name="form" method="post" action="">

Inizio del modulo HTML per l'aggiornamento, con metodo `post`.

<input type="hidden" name="new" value="1" />

Un campo nascosto per indicare che il modulo è per un nuovo aggiornamento.

<input name="id" type="hidden" value="<?php echo $row['id'];?>" />

Un campo nascosto che memorizza l'ID del record attuale.

<p><input type="text" name="name" placeholder="Enter Name" required value="<?php echo $row['name'];?>" /></p>

Campo di input per il nome, con un valore precompilato che mostra il nome attuale del record.

<p><input type="text" name="age" placeholder="Enter Age" required value="<?php echo $row['age'];?>" /></p>

Campo di input per l'età, con un valore precompilato che mostra l'età attuale del record.

<p><input name="submit" type="submit" value="Update" /></p>

Pulsante per inviare il modulo per aggiornare il record.

<?php } ?>

Chiusura del blocco `if`/`else`.

<br /><br /><br /><br />

Aggiunge spazi verticali per il layout.

</div>

</div>

</body>

</html>

Chiusura dei div e del corpo e del documento HTML.

Questa spiegazione copre ogni parte del codice, evidenziando la logica PHP e la struttura HTML.


 

Pagina delete.php

<?php

Inizio del codice PHP.

require('db.php');

Questa riga include il file `db.php`, che contiene la connessione al database. Questo è necessario per eseguire query sul database.

$id=$_REQUEST['id'];

Qui si ottiene l'ID del record che si desidera eliminare. Viene prelevato dalla richiesta HTTP, sia essa GET o POST.

$query = "DELETE FROM new_record WHERE id=$id";

Questa riga crea una query SQL per eliminare un record dalla tabella `new_record` dove l'ID corrisponde a quello fornito. Il comando `DELETE` è utilizzato per rimuovere dati dal database.

$result = mysqli_query($con,$query) or die ( mysqli_error($con));

Esegue la query sul database utilizzando la connessione `$con`. Se la query fallisce, il codice genera un errore e termina l'esecuzione, mostrando il messaggio di errore specifico.

header("Location: view.php");

Questa riga reindirizza l'utente alla pagina `view.php` dopo che l'operazione di eliminazione è stata completata con successo. Questo è utile per aggiornare la visualizzazione dei dati.

exit();

Termina l'esecuzione dello script. È una buona pratica utilizzare `exit()` dopo un reindirizzamento per assicurarsi che non venga eseguito ulteriore codice non necessario.

Questo codice rappresenta un'operazione di eliminazione di un record da un database, gestendo la connessione, l'esecuzione della query e il reindirizzamento dell'utente.

Pagina dashboard.php

<?php

Inizio del codice PHP.

include("auth.php"); //include auth.php file on all secure pages

Questa riga include il file `auth.php`, che si occupa dell'autenticazione. Questo assicura che solo gli utenti autenticati possano accedere a questa pagina.

require('db.php');

Questa riga include il file `db.php`, che gestisce la connessione al database. È necessario per eseguire eventuali operazioni sul database in questa pagina.

<!DOCTYPE html>

Dichiarazione del tipo di documento HTML5.

<html>

Inizio del documento HTML.

<head>

Inizio della sezione `<head>` del documento HTML, che contiene metadati e collegamenti a risorse.

<meta charset="utf-8">

Imposta la codifica dei caratteri su UTF-8, garantendo che i caratteri speciali siano visualizzati correttamente.

<title>Dashboard - Secured Page</title>

Imposta il titolo della pagina che verrà visualizzato nella barra del titolo del browser.

<link rel="stylesheet" href="css/style.css" />

Collega un foglio di stile CSS esterno per la formattazione della pagina.

 

</head>

Fine della sezione `<head>`.

<body>

Inizio del corpo del documento HTML, dove verrà visualizzato il contenuto principale.

<div class="form">

Inizio di un `<div>` con la classe `form`, che può essere utilizzato per applicare stili specifici al contenuto al suo interno.

<p>Welcome to Dashboard.</p>

Un paragrafo che saluta l'utente e indica che si trova nella dashboard.

<p><a href="index.php">Home</a><p>

Collegamento alla pagina principale del sito, chiamata "Home".

<p><a href="insert.php">Insert New Record</a></p>

Collegamento alla pagina per inserire un nuovo record.

<p><a href="view.php">View Records</a><p>

Collegamento alla pagina per visualizzare i record esistenti.

<p><a href="logout.php">Logout</a></p>

Collegamento alla pagina di logout, permettendo all'utente di disconnettersi.

<br /><br /><br /><br />

Aggiunta di spazi verticali (linee vuote) per separare il contenuto.

</div>

Fine del `<div>` con la classe `form`.

</body>

Fine del corpo del documento HTML.

</html>

Fine del documento HTML.

Questo codice rappresenta una pagina di dashboard sicura per gli utenti autenticati, offrendo collegamenti per navigare tra diverse funzionalità del sito.


 

Pagina Style.css:
Ecco la spiegazione riga per riga del foglio di stile CSS fornito:

/*

Author: Paolo Latella

Website: https://profpaololatella.it

*/

Commento che indica l'autore del foglio di stile e il sito web associato.

body {font-family:Arial, Sans-Serif;}

Imposta il font predefinito del corpo della pagina su Arial e, in alternativa, su un font sans-serif se Arial non è disponibile.

.clearfix:before, .clearfix:after { content: ""; display: table; }

Aggiunge un contenuto vuoto e imposta il display su `table` per gli pseudo-elementi `:before` e `:after` della classe `clearfix`, utilizzato per risolvere problemi di "float".

.clearfix:after { clear: both; }

Applica una regola per pulire i float, garantendo che gli elementi successivi non si sovrappongano a quelli fluttuanti.

a {color:#0067ab; text-decoration:none;}

Imposta il colore dei collegamenti (`<a>`) su un blu specifico (#0067ab) e rimuove la sottolineatura predefinita.

a:hover {text-decoration:underline;}

Quando un utente passa il mouse su un collegamento, viene aggiunta una sottolineatura per indicare che è interattivo.

.form{width: 300px; margin: 0 auto;}

Imposta la larghezza degli elementi con la classe `form` a 300 pixel e centra il div orizzontalmente impostando i margini automatici.

input[type='text'], input[type='email'], input[type='password'] {width: 200px; border-radius: 2px; border: 1px solid #CCC; padding: 10px; color: #333; font-size: 14px; margin-top: 10px;}

Definisce lo stile per i campi di input di tipo testo, email e password: larghezza di 200 pixel, angoli arrotondati, bordo grigio chiaro, padding interno di 10 pixel, colore del testo scuro, dimensione del font di 14 pixel e margine superiore di 10 pixel.

input[type='submit']{padding: 10px 25px 8px; color: #fff; background-color: #0067ab; text-shadow: rgba(0,0,0,0.24) 0 1px 0; font-size: 16px; box-shadow: rgba(255,255,255,0.24) 0 2px 0 0 inset,#fff 0 1px 0 0; border: 1px solid #0164a5; border-radius: 2px; margin-top: 10px; cursor:pointer;}

Definisce lo stile per i pulsanti di invio (`input[type='submit']`): padding specifico, testo bianco, sfondo blu, ombra del testo per un effetto di profondità, dimensione del font di 16 pixel, ombra del box per un aspetto sollevato, bordo blu scuro, angoli arrotondati e cursore a forma di puntatore.

input[type='submit']:hover {background-color: #024978;}

Cambia il colore di sfondo del pulsante di invio a un blu più scuro quando il cursore passa sopra di esso, fornendo un feedback visivo interattivo.

Questo foglio di stile definisce un layout semplice e professionale per una pagina web, con un focus sulla leggibilità e sull'interazione degli utenti.

Commenti

Post popolari in questo blog

Esercizi in Excel e fogli di Google

Simulazioni di reti (con Cisco Packet Tracer)