Compare commits

...

12 Commits

7 changed files with 409 additions and 4 deletions
+5 -4
View File
@@ -36,7 +36,8 @@ CREATE TABLE Utenti(
nome VARCHAR(30), nome VARCHAR(30),
cognome VARCHAR(18), cognome VARCHAR(18),
email VARCHAR(255) UNIQUE NOT NULL, 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) -- 3. INSERIMENTO DATI (INSERT INTO)
@@ -78,6 +79,6 @@ INSERT INTO Statistiche_Social (id_fascia, piattaforma, minuti_medi_giornalieri,
-- Login utente esempio -- Login utente esempio
-- Email: jeevacation@gmail.com -- Email: jeevacation@gmail.com
-- Password: changeme -- Password: changeme
INSERT INTO Utenti(nome,cognome,email,password) VALUES INSERT INTO Utenti(nome,cognome,email,password,ruolo) VALUES
('Jeffrey', 'Epstein', 'jeevacation@gmail.com', '$2y$10$1ZILQ71xxMjaAxDs2A6/Iut8UJfBPEGkeEuZgoIkVDapbNYUACxtW'), ('Jeffrey', 'Epstein', 'jeevacation@gmail.com', '$2y$10$1ZILQ71xxMjaAxDs2A6/Iut8UJfBPEGkeEuZgoIkVDapbNYUACxtW', 'gestore'),
('Andrea', 'Fiorencis', 'andrea@fiorencis.eu','$2y$10$y7fs8u4UOFJW5ds/dO84KumTxG2kh4jCubb1W0mAHzgmBZKRqA8Va'); ('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;
}
}