Implementazione pagina web

This commit is contained in:
2026-04-17 11:46:15 +02:00
7 changed files with 409 additions and 4 deletions
+5 -4
View File
@@ -36,7 +36,8 @@ CREATE TABLE Utenti(
nome VARCHAR(30),
cognome VARCHAR(18),
email VARCHAR(255) UNIQUE NOT NULL,
password VARCHAR(255) NOT NULL
password VARCHAR(255) NOT NULL,
ruolo VARCHAR(16) DEFAULT 'utente'
);
-- 3. INSERIMENTO DATI (INSERT INTO)
@@ -78,6 +79,6 @@ INSERT INTO Statistiche_Social (id_fascia, piattaforma, minuti_medi_giornalieri,
-- Login utente esempio
-- Email: jeevacation@gmail.com
-- Password: changeme
INSERT INTO Utenti(nome,cognome,email,password) VALUES
('Jeffrey', 'Epstein', 'jeevacation@gmail.com', '$2y$10$1ZILQ71xxMjaAxDs2A6/Iut8UJfBPEGkeEuZgoIkVDapbNYUACxtW'),
('Andrea', 'Fiorencis', 'andrea@fiorencis.eu','$2y$10$y7fs8u4UOFJW5ds/dO84KumTxG2kh4jCubb1W0mAHzgmBZKRqA8Va');
INSERT INTO Utenti(nome,cognome,email,password,ruolo) VALUES
('Jeffrey', 'Epstein', 'jeevacation@gmail.com', '$2y$10$1ZILQ71xxMjaAxDs2A6/Iut8UJfBPEGkeEuZgoIkVDapbNYUACxtW', 'gestore'),
('Andrea', 'Fiorencis', 'andrea@fiorencis.eu','$2y$10$y7fs8u4UOFJW5ds/dO84KumTxG2kh4jCubb1W0mAHzgmBZKRqA8Va', 'gestore');
+14
View File
@@ -0,0 +1,14 @@
<?php
$host = 'localhost';
$username = 'root';
$password = '';
$database = 'GenZ_Usage_Stats';
// Creazione connessione
$conn = mysqli_connect($host, $username, $password, $database);
// Controllo connessione
if ($conn->connect_error) {
die("Connessione fallita: " . $conn->connect_error);
}
?>
+56
View File
@@ -0,0 +1,56 @@
<!-- RICHIESTA FILA A -->
<?php
session_start();
include 'db_conf.php';
// Query per ottenere il tempo totale di utilizzo giornaliero aggregato per fascia d'età
$sql = "SELECT f.range_eta, SUM(s.ore_medie_giornaliere) AS ore_totali
FROM Statistiche_Dispositivi s
JOIN Fasce_Eta f ON f.id_fascia=s.id_fascia
GROUP BY f.id_fascia, f.range_eta
ORDER BY f.id_fascia ASC";
$resultDispositivi = $conn->query($sql);
// Interruzione in caso di errore nella richiesta
if ($resultDispositivi === false){
die("Errore nella query: " . $conn->error);
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>GenZ Digital Hub</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<?php if (isset($_SESSION['id'])): ?>
<h1>Benvenuto, <?php echo htmlspecialchars($_SESSION['name'] . ' ' . $_SESSION['surname']); ?>!</h1>
<p><a href="logout.php">Logout</a></p>
<hr>
<h2>Tempo Totale di Utilizzo Giornaliero per Fascia d'Età</h2>
<table border="1" cellpadding="10" cellspacing="0">
<thead>
<tr>
<th>Fascia d'Età</th>
<th>Ore Totali Giornaliere</th>
</tr>
</thead>
<tbody>
<?php while ($row = $resultDispositivi->fetch_assoc()): ?>
<tr>
<td><?php echo htmlspecialchars($row['range_eta']); ?></td>
<td><?php echo number_format($row['ore_totali'], 2, ',', '.'); ?> ore</td>
</tr>
<?php endwhile; ?>
</tbody>
</table>
<?php else: ?>
<h1>Benvenuto su GenZ Digital Hub</h1>
<p><a href="login.php">Accedi</a> o <a href="register.php">Registrati</a> per visualizzare le statistiche.</p>
<?php endif; ?>
</body>
</html>
+64
View File
@@ -0,0 +1,64 @@
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Accesso</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<?php
session_start();
include 'db_conf.php';
$error = '';
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$email = $_POST['email'];
$password = $_POST['password'];
$sql = "SELECT id_utente, nome, cognome, password FROM Utenti WHERE email = ?";
if ($stmt = $conn->prepare($sql)) {
$stmt->bind_param("s", $email);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
$stmt->bind_result($user_id, $name, $surname, $hashed_password);
$stmt->fetch();
if (password_verify($password, $hashed_password)) {
$_SESSION['id'] = $user_id;
$_SESSION['name'] = $name;
$_SESSION['surname'] = $surname;
header('Location: index.php');
exit();
} else {
$error = 'Credenziali errate.';
}
} else {
$error = 'Credenziali errate.';
}
$stmt->close();
} else {
$error = 'Errore nel database.';
}
}
?>
<form action="" method="POST">
<h2>Login</h2>
<label for="email">Indirizzo e-mail:</label>
<input type="email" id="email" name="email" required><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br>
<?php if ($error): ?>
<p style="color: red; text-align: center;"><?php echo htmlspecialchars($error); ?></p>
<?php endif; ?>
<br>
<input type="submit" value="Accedi">
<br><br>
<p>Non hai un account? <a href="register.php">Registrati</a></p>
</form>
</body>
</html>
+6
View File
@@ -0,0 +1,6 @@
<?php
session_start();
session_destroy();
header('Location: index.php');
exit();
?>
+56
View File
@@ -0,0 +1,56 @@
<?php
include 'db_conf.php';
?>
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Registrazione - TechStore</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if($_POST['password'] !== $_POST['confirm_password']){
echo "<p style='color: red; text-align: center;'>Le password non corrispondono.</p>";
}
else{
$sql = "INSERT INTO Utenti (nome, cognome, email, password) VALUES (?, ?, ?, ?)";
if($stmt = $conn->prepare($sql)){
$stmt->bind_param("ssss", $name, $surname, $email, $password);
$name = $_POST['name'];
$surname = $_POST['surname'];
$email = $_POST['email'];
$password = password_hash($_POST['password'], PASSWORD_BCRYPT);
$stmt->execute();
echo "<p style='color: green; text-align: center;'>Registrazione avvenuta con successo! <a href=\"login.php\">Accedi</a></p>";
}
else{
echo "Errore: " . $conn->error;
}
}
}
?>
<form action="" method="POST">
<h2>Registrazione</h2>
<label for="name">Nome:</label>
<input type="text" id="name" name="name" required><br>
<label for="surname">Cognome:</label>
<input type="text" id="surname" name="surname" required><br>
<label for="email">Indirizzo e-mail:</label>
<input type="email" id="email" name="email" required><br>
<label for="password">Password:</label>
<input type="password" id="password" name="password" required><br>
<label for="confirm_password">Conferma password:</label>
<input type="password" id="confirm_password" name="confirm_password" required><br><br>
<input type="submit" value="Registrati">
<br><br>
<p>Hai già un account? <a href="login.php">Accedi</a></p>
</form>
</body>
</html>
+208
View File
@@ -0,0 +1,208 @@
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #1a1a2e 0%, #16213e 50%, #0f3460 100%);
color: #e0e0e0;
line-height: 1.6;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
padding: 20px;
}
/* Typography */
h1, h2 {
color: #00d4ff;
margin-bottom: 20px;
text-align: center;
/* Opzionale: aggiunge un leggero effetto di glow alle intestazioni */
/* text-shadow: 0 0 10px rgba(0, 212, 255, 0.5); */
}
h1 {
font-size: 2.5rem;
margin-bottom: 10px;
}
h2 {
font-size: 2rem;
margin-bottom: 5px;
}
p {
margin-bottom: 20px;
text-align: center;
}
/* Links */
a {
color: #00d4ff;
text-decoration: none;
transition: color 0.3s ease;
}
a:hover {
color: #0099cc;
text-decoration: underline;
}
/* Forms */
form {
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 15px;
padding: 40px;
width: 100%;
max-width: 400px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
animation: fadeIn 0.5s ease-in-out;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(-20px); }
to { opacity: 1; transform: translateY(0); }
}
label {
display: block;
margin-bottom: 8px;
font-weight: 600;
color: #b0b0b0;
}
input[type="text"],
input[type="email"],
input[type="password"] {
width: 100%;
padding: 12px 15px;
margin-bottom: 20px;
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 8px;
background: rgba(255, 255, 255, 0.1);
color: #e0e0e0;
font-size: 16px;
transition: all 0.3s ease;
}
input[type="text"]:focus,
input[type="email"]:focus,
input[type="password"]:focus {
outline: none;
border-color: #00d4ff;
box-shadow: 0 0 0 3px rgba(0, 212, 255, 0.2);
background: rgba(255, 255, 255, 0.15);
}
input[type="submit"] {
width: 100%;
padding: 12px;
background: linear-gradient(45deg, #00d4ff, #0099cc);
color: white;
border: none;
border-radius: 8px;
font-size: 16px;
font-weight: 600;
cursor: pointer;
transition: all 0.3s ease;
text-transform: uppercase;
letter-spacing: 1px;
}
input[type="submit"]:hover {
background: linear-gradient(45deg, #0099cc, #0077aa);
transform: translateY(-2px);
box-shadow: 0 4px 15px rgba(0, 212, 255, 0.3);
}
/* Error Messages */
p[style*="color: red"] {
background: rgba(255, 0, 0, 0.1);
border: 1px solid rgba(255, 0, 0, 0.3);
border-radius: 5px;
padding: 10px;
margin-bottom: 20px;
color: #ff6b6b !important;
}
p[style*="color: green"] {
background: rgba(0, 255, 0, 0.1);
border: 1px solid rgba(0, 255, 0, 0.3);
border-radius: 5px;
padding: 10px;
margin-bottom: 20px;
color: #51cf66 !important;
}
/* Horizontal Rule */
hr {
border: none;
height: 2px;
background: linear-gradient(90deg, transparent, #00d4ff, transparent);
margin: 30px 0;
}
/* Table Styles */
table {
width: 100%;
max-width: 800px;
margin: 20px auto;
border-collapse: collapse;
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(10px);
border-radius: 10px;
overflow: hidden;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
}
thead {
background: linear-gradient(45deg, #00d4ff, #0099cc);
}
th, td {
padding: 15px;
text-align: left;
border-bottom: 1px solid rgba(255, 255, 255, 0.1);
}
th {
font-weight: 600;
color: white;
text-transform: uppercase;
letter-spacing: 1px;
}
td {
color: #e0e0e0;
}
tbody tr:hover {
background: rgba(255, 255, 255, 0.05);
}
/* Responsive Design */
@media (max-width: 768px) {
body {
padding: 10px;
}
form {
padding: 20px;
max-width: 100%;
}
table {
font-size: 14px;
}
th, td {
padding: 10px;
}
}