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
Posta un commento