Aggiunta base Faraci

This commit is contained in:
2026-03-24 08:21:14 +01:00
commit 7f9819c8d7
4 changed files with 346 additions and 0 deletions

84
MotoCare.sql Normal file
View File

@@ -0,0 +1,84 @@
DROP DATABASE IF EXISTS MotoCare;
CREATE DATABASE MotoCare;
USE MotoCare;
-- 1. CREAZIONE TABELLE
CREATE TABLE MOTOCICLISTA (
idTessera INT AUTO_INCREMENT PRIMARY KEY,
cognome VARCHAR(50) NOT NULL,
nome VARCHAR(50) NOT NULL,
dataNascita DATE,
marcaMoto VARCHAR(50),
email VARCHAR(100)
);
CREATE TABLE LAVORAZIONE (
codiceLavoro VARCHAR(10) PRIMARY KEY,
descrizione VARCHAR(100) NOT NULL,
meccanico VARCHAR(50)
);
-- Questa tabella deriva dalla relazione N:N "RICHIEDERE"
CREATE TABLE RICHIEDERE (
idRichiesta INT AUTO_INCREMENT PRIMARY KEY, -- inserita per meglio identificare ogni singola richiesta
dataRichiesta DATE NOT NULL,
costo DECIMAL(10, 2), -- Attributo della relazione
tipo VARCHAR(50), -- Attributo della relazione
idTessera INT, -- FK che punta a Motociclista
codiceLavoro VARCHAR(10), -- FK che punta a Lavorazione
FOREIGN KEY (idTessera) REFERENCES MOTOCICLISTA(idTessera),
FOREIGN KEY (codiceLavoro) REFERENCES LAVORAZIONE(codiceLavoro)
);
CREATE TABLE SINISTRO (
idSinistro INT AUTO_INCREMENT PRIMARY KEY,
dataSinistro DATE,
giorniFermo INT,
rimborsato CHAR(1) DEFAULT 'N', -- il valore di default è sempre 'N'
idTessera INT,
FOREIGN KEY (idTessera) REFERENCES MOTOCICLISTA(idTessera)
);
-- 2. INSERIMENTO DATI
-- NOTA BENE: Avendo inserito le Primary Key come INT AUTO_INCREMENT, nelle insert non vengono inserite perchè è il sistema che lo fa in automatico
INSERT INTO MOTOCICLISTA (cognome, nome, dataNascita, marcaMoto, email) VALUES
('Rossi', 'Marco', '1990-05-12', 'Ducati', 'marco.rossi@email.it'),
('Bianchi', 'Luca', '1985-11-20', 'Honda', 'luca.bianchi@email.it'),
('Verdi', 'Anna', '1995-02-15', 'Yamaha', NULL),
('Neri', 'Giorgio', '2000-08-10', 'Ducati', 'gio.neri@test.com'),
('Esposito', 'Giulia', '1998-07-01', 'BMW', 'giulia@email.it'),
('Romano', 'Paolo', '1988-12-30', 'KTM', NULL),
('Ferrari', 'Matteo', '1992-03-25', 'Aprilia', 'matteo@email.it');
INSERT INTO LAVORAZIONE (codiceLavoro, descrizione, meccanico) VALUES
('L01', 'Tagliando Completo', 'Mario Andero'),
('L02', 'Sostituzione Pneumatici', 'Luigi Coretti'),
('L03', 'Revisione Motore', 'Giovanni Arturi'),
('L04', 'Sostituzione Freni', 'Mario Andero'),
('L05', 'Controllo Elettronica', 'Anna Ferroli');
INSERT INTO RICHIEDERE (dataRichiesta, costo, tipo, idTessera, codiceLavoro) VALUES
('2024-01-10', 150.00, 'Tagliando', 1, 'L01'),
('2024-02-15', 40.00, 'Urgenza', 1, 'L02'),
('2024-03-20', 250.00, 'Straordinario', 2, 'L03'),
('2024-05-10', 90.00, 'Tagliando', 2, 'L01'),
('2024-06-05', 45.00, 'Ordinario', 3, 'L04'),
('2024-07-01', 300.00, 'Straordinario', 4, 'L03'),
('2024-08-12', 200.00, 'Ordinario', 5, 'L02'),
('2024-10-15', 500.00, 'Urgenza', 1, 'L03'),
('2024-09-09', 120.00, 'Urgenza', 4, 'L02'),
('2024-11-20', 180.00, 'Tagliando', 5, 'L01');
INSERT INTO SINISTRO (dataSinistro, giorniFermo, idTessera) VALUES
('2024-05-10', 3, 1),
('2024-06-20', 5, 1),
('2024-10-05', 2, 2),
('2024-10-25', 10, 3),
('2023-01-01', 1, 7),
('2023-02-01', 1, 7),
('2023-03-01', 1, 7),
('2023-04-01', 1, 7),
('2023-05-01', 1, 7),
('2023-06-01', 1, 7);

14
_db_config.php Normal file
View File

@@ -0,0 +1,14 @@
<?php
$host = "127.0.0.1";
$user = "root";
$password = "root";
$database = "MotoCare";
// Connessione
$conn = mysqli_connect($host, $user, $password, $database);
// Controllo connessione per evitare falsi positivi
if ($conn===false) {
die("Errore di connessione: " . mysqli_connect_error());
}
?>

76
home 1.php Normal file
View File

@@ -0,0 +1,76 @@
<?php
require_once "_db_config.php";
?>
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Ricerca Motociclisti</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h2>Cerca nel Registro Motociclisti</h2>
<!-- FORM DI RICERCA -->
<div class="search-box">
<form action="" method="POST">
<label for="cognome">Inserisci il cognome:</label>
<input type="text" name="cognome" id="cognome" placeholder="Es: Rossi" required>
<button type="submit" name="cerca">Cerca ora</button>
</form>
</div>
<?php
// Eseguiamo la ricerca solo se il form è stato inviato
if (isset($_POST['cerca']) && !empty($_POST['cognome'])) {
$cognome_ricercato = $_POST['cognome'];
// 1. Query con segnaposto può essere attaccata da sql injection 'OR '1'='1
// 2. SELECT ... WHERE cognome = ''; DROP TABLE motociclista; --';
$sql = "SELECT idTessera, cognome, nome, email FROM motociclista WHERE cognome = '$cognome_ricercato'";
if ($result = mysqli_query($conn, $sql)) {
if (mysqli_num_rows($result) > 0) {
echo "<h3>Risultati per: " . htmlspecialchars($cognome_ricercato) . "</h3>";
echo "<table>
<thead>
<tr>
<th>ID</th>
<th>Cognome</th>
<th>Nome</th>
<th>Email</th>
</tr>
</thead>
<tbody>";
//fetch vuol dire vai a prendere
while ($row = mysqli_fetch_assoc($result)) {
echo "<tr>";
echo "<td>" . htmlspecialchars($row['idTessera']) . "</td>";
echo "<td>" . htmlspecialchars($row['cognome']) . "</td>";
echo "<td>" . htmlspecialchars($row['nome']) . "</td>";
echo "<td>" . htmlspecialchars($row['email']) . "</td>";
echo "</tr>";
}
echo "</tbody></table>";
} else {
echo "<p class='no-results'>Nessun motociclista trovato con cognome: <strong>" . htmlspecialchars($cognome_ricercato) . "</strong></p>";
}
}
} else {
echo "<p>Inserisci un cognome e premi 'Cerca' per visualizzare i dati.</p>";
}
mysqli_close($conn);
?>
</body>
</html>

172
style.css Normal file
View File

@@ -0,0 +1,172 @@
/* ==========================================================================
1. VARIABILI E COLORI (Design Tokens 2026)
========================================================================== */
:root {
/* Palette 2026: Basata su "Cloud Dancer" (bianco caldo) e accenti vibranti */
--bg-page: #f9f9fb; /* Sfondo chiaro e riposante */
--text-main: #1a1a1c; /* Testo quasi nero per massimo contrasto */
--text-muted: #64748b; /* Testo secondario */
--primary: #2563eb; /* Blu moderno e saturo */
--primary-hover: #1d4ed8;
--accent: #f59e0b; /* Ambra per richiamare l'attenzione */
/* Colori per i Form */
--input-bg: #ffffff;
--input-border: #e2e8f0;
--input-focus: #3b82f6;
--error: #ef4444;
--success: #10b981;
/* Spaziature e Bordi */
--radius: 12px;
--shadow-sm: 0 1px 3px rgba(0,0,0,0.1);
--shadow-md: 0 4px 6px -1px rgba(0,0,0,0.1);
}
/* Modalità Notte Automatica */
@media (prefers-color-scheme: dark) {
:root {
--bg-page: #0f172a;
--text-main: #f8fafc;
--text-muted: #94a3b8;
--input-bg: #1e293b;
--input-border: #334155;
}
}
/* ==========================================================================
2. TIPOGRAFIA E TESTO NELLA PAGINA
========================================================================== */
body {
font-family: 'Inter', system-ui, -apple-system, sans-serif;
background-color: var(--bg-page);
color: var(--text-main);
line-height: 1.6;
/* Tipografia fluida: scala tra 16px e 18px in base alla finestra */
font-size: clamp(1rem, 0.95rem + 0.25vw, 1.125rem);
margin: 0;
padding: 2rem;
}
p {
margin-bottom: 1.5rem;
max-width: 70ch; /* Limita la larghezza per una lettura ottimale */
}
/* ==========================================================================
3. TITOLI (H1, H2, H3)
========================================================================== */
h1, h2, h3 {
margin-top: 2.5rem;
margin-bottom: 1rem;
font-weight: 800;
line-height: 1.2;
color: var(--primary);
}
h1 { font-size: clamp(2rem, 5vw, 3.5rem); letter-spacing: -0.02em; }
h2 { font-size: clamp(1.5rem, 4vw, 2.25rem); color: var(--text-main); }
h3 { font-size: clamp(1.25rem, 3vw, 1.75rem); border-left: 4px solid var(--accent); padding-left: 1rem; }
/* ==========================================================================
4. FORM E INPUT (Stile Moderno)
========================================================================== */
form {
display: flex;
flex-direction: column;
gap: 1.5rem;
max-width: 500px;
background: var(--input-bg);
padding: 2rem;
border-radius: var(--radius);
box-shadow: var(--shadow-md);
}
.form-group {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
label {
font-weight: 600;
font-size: 0.9rem;
}
input, textarea, select {
padding: 0.75rem 1rem;
border: 2px solid var(--input-border);
border-radius: 8px;
background-color: var(--input-bg);
color: var(--text-main);
transition: all 0.2s ease;
font-size: 1rem;
}
input:focus {
outline: none;
border-color: var(--input-focus);
box-shadow: 0 0 0 4px rgba(59, 130, 246, 0.1);
}
/* Feedback validazione nativa senza JS */
input:invalid:not(:placeholder-shown) { border-color: var(--error); }
input:valid:not(:placeholder-shown) { border-color: var(--success); }
button {
background-color: var(--primary);
color: white;
padding: 0.8rem 1.5rem;
border: none;
border-radius: 8px;
font-weight: 700;
cursor: pointer;
transition: background 0.3s ease;
}
button:hover { background-color: var(--primary-hover); }
/* ==========================================================================
5. TABELLE (Stile Minimalista Bento)
========================================================================== */
.table-container {
overflow-x: auto; /* Rende la tabella scrollabile su mobile */
margin: 2rem 0;
border-radius: var(--radius);
box-shadow: var(--shadow-sm);
}
table {
width: 100%;
border-collapse: collapse;
background: var(--input-bg);
text-align: left;
}
th, td {
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--input-border);
}
th {
background-color: var(--primary);
color: white;
font-weight: 600;
text-transform: uppercase;
font-size: 0.8rem;
letter-spacing: 0.05em;
position: sticky; /* Header fisso allo scroll */
top: 0;
}
tr:last-child td { border-bottom: none; }
/* Effetto riga al passaggio del mouse */
tr:hover td {
background-color: rgba(37, 99, 235, 0.05);
}
@media (max-width: 600px) {
th, td { padding: 0.75rem; font-size: 0.9rem; }
}