Deploy tramite custom CI/CD Action
All checks were successful
Deploy / trigger (push) Successful in 2s
192
esercizio.css
Normal file
@@ -0,0 +1,192 @@
|
|||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
color-scheme: dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
body,
|
||||||
|
input,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-family: "Outfit", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: hsl(219, 62%, 80%);
|
||||||
|
color: hsl(219, 62%, 10%);
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
width: 95%;
|
||||||
|
max-width: 1200px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
section {
|
||||||
|
margin-top: 4rem;
|
||||||
|
margin-bottom: 4rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
section h2 {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
font-size: 95%;
|
||||||
|
padding: 0.4rem 0.6rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
background-color: hsl(219, 62%, 30%);
|
||||||
|
color: hsl(219, 62%, 95%);
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.button:hover {
|
||||||
|
background-color: hsl(219, 62%, 22%);
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr 1fr;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
width: 99%;
|
||||||
|
max-width: 1000px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background-color: hsl(219, 62%, 95%);
|
||||||
|
border-radius: 1rem;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0px 0px 20px hsla(219, 62%, 70%, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .image {
|
||||||
|
flex-grow: 1;
|
||||||
|
max-width: 10rem;
|
||||||
|
min-width: 10rem;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .image img {
|
||||||
|
width: 60%;
|
||||||
|
object-fit: contain;
|
||||||
|
height: 60%;
|
||||||
|
display: block;
|
||||||
|
aspect-ratio: 1/1;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data {
|
||||||
|
flex-grow: 2;
|
||||||
|
text-align: left;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data h3 {
|
||||||
|
font-size: 1.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 767px) {
|
||||||
|
section .boxes .box .image {
|
||||||
|
max-width: 12rem;
|
||||||
|
min-width: 12rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data h3 {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
|
||||||
|
section .boxes .box .image {
|
||||||
|
max-width: 100%;
|
||||||
|
min-width: 12rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
section .boxes .box .data .meta {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin: 1rem 0;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data .meta p {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
width: max-content;
|
||||||
|
padding: 0.2rem 0.4rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
background-color: hsl(219, 62%, 70%);
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data .grow {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .buttons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 0.5rem;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data .buttons {
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
text-align: center;
|
||||||
|
background-color: hsl(219, 62%, 70%);
|
||||||
|
padding: 1rem 0;
|
||||||
|
}
|
||||||
314
esercizio1/eventi.css
Normal file
@@ -0,0 +1,314 @@
|
|||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
color-scheme: dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
body,
|
||||||
|
input,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-family: "Outfit", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: hsl(219, 69%, 10%);
|
||||||
|
color: #fff;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
width: 95%;
|
||||||
|
max-width: 1200px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
background-color: hsla(219, 69%, 6%, 0.9);
|
||||||
|
backdrop-filter: blur(6px);
|
||||||
|
-webkit-backdrop-filter: blur(6px);
|
||||||
|
padding: 0.5rem 0;
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
header .container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
justify-content: space-between;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header .logo img {
|
||||||
|
width: 100%;
|
||||||
|
height: auto;
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
header .logo {
|
||||||
|
width: 2rem;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero {
|
||||||
|
background-color: hsl(219, 69%, 10%);
|
||||||
|
background-image: url("img/hero.jpg");
|
||||||
|
background-position: 50% 80%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero .overlay {
|
||||||
|
padding: 12rem 1rem 8rem 1rem;
|
||||||
|
background-color: hsla(219, 69%, 5%, 0.6);
|
||||||
|
backdrop-filter: blur(2px);
|
||||||
|
-webkit-backdrop-filter: blur(2px);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
section {
|
||||||
|
margin-top: 4rem;
|
||||||
|
margin-bottom: 4rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
section h2 {
|
||||||
|
margin-bottom: 2rem;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1.5rem;
|
||||||
|
background-color: hsl(219, 69%, 20%);
|
||||||
|
width: 95%;
|
||||||
|
max-width: 900px;
|
||||||
|
margin: 1rem auto;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: 1rem;
|
||||||
|
box-shadow: 0px 0px 20px hsla(219, 69%, 10%, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset {
|
||||||
|
border: none;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
gap: 1rem;
|
||||||
|
text-align: left;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset.buttons {
|
||||||
|
max-width: max-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset label {
|
||||||
|
font-size: 1.2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="text"] {
|
||||||
|
font-size: 98%;
|
||||||
|
padding: 0.4rem 0.6rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
border: 1px solid hsla(219, 69%, 75%, 0.5);
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
background-color: hsla(219, 69%, 5%, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="text"]:hover,
|
||||||
|
section form fieldset input[type="text"]:focus {
|
||||||
|
border: 1px solid hsla(219, 69%, 75%, 1);
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="submit"],
|
||||||
|
section form fieldset input[type="button"],
|
||||||
|
.button {
|
||||||
|
font-size: 95%;
|
||||||
|
padding: 0.4rem 0.6rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
background-color: hsl(219, 69%, 75%);
|
||||||
|
color: hsl(219, 69%, 10%);
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="submit"]:hover,
|
||||||
|
section form fieldset input[type="button"]:hover,
|
||||||
|
.button:hover {
|
||||||
|
background-color: hsl(219, 69%, 70%);
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr 1fr;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
width: 99%;
|
||||||
|
max-width: 1100px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background-color: hsl(219, 69%, 20%);
|
||||||
|
border-radius: 1rem;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0px 0px 20px hsla(219, 69%, 10%, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .image {
|
||||||
|
flex-grow: 1;
|
||||||
|
max-width: 25rem;
|
||||||
|
min-width: 25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .image img {
|
||||||
|
width: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
height: 100%;
|
||||||
|
display: block;
|
||||||
|
aspect-ratio: 4/3;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data {
|
||||||
|
flex-grow: 2;
|
||||||
|
text-align: left;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data h3 {
|
||||||
|
font-size: 1.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 767px) {
|
||||||
|
section .boxes .box .image {
|
||||||
|
max-width: 12rem;
|
||||||
|
min-width: 12rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data h3 {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
section form {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .image {
|
||||||
|
max-width: 100%;
|
||||||
|
min-width: 12rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
section .boxes .box .data .meta {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin: 1rem 0;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data .meta p {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
width: max-content;
|
||||||
|
padding: 0.2rem 0.4rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
background-color: hsl(219, 69%, 30%);
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data .grow {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .buttons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 0.5rem;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data .buttons {
|
||||||
|
justify-content: flex-end;
|
||||||
|
margin-top: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background-color: hsl(221, 14%, 14%);
|
||||||
|
color: #ff6685;
|
||||||
|
padding: 0.2rem 0.3rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.count {
|
||||||
|
transition: all 150ms cubic-bezier(0.165, 0.84, 0.44, 1);
|
||||||
|
transform: scale(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.animated {
|
||||||
|
color: yellow;
|
||||||
|
transform: scale(1.2) rotate(3deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
text-align: center;
|
||||||
|
background-color: hsla(219, 69%, 6%, 0.8);
|
||||||
|
padding: 1rem 0;
|
||||||
|
}
|
||||||
BIN
esercizio1/favicon.png
Normal file
|
After Width: | Height: | Size: 45 KiB |
10
esercizio1/giustificazione_eventi.txt
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
Ho scelto di utilizzare il metodo GET per 3 motivi principali:
|
||||||
|
|
||||||
|
- Semplicità di implementazione
|
||||||
|
|
||||||
|
- Dati inviati non sensibili
|
||||||
|
|
||||||
|
- Possibilità dell'utente di mantenere e/o salvare la ricerca effettuata
|
||||||
|
|
||||||
|
I dati inviati saranno visibili nell'URL, nel formato chiave=valore dopo il simbolo ?.
|
||||||
|
Le coppie chiave-valore vengono separate dal simbolo &.
|
||||||
BIN
esercizio1/img/evento-bon-jovi.webp
Normal file
|
After Width: | Height: | Size: 198 KiB |
BIN
esercizio1/img/evento-david-gilmour.webp
Normal file
|
After Width: | Height: | Size: 87 KiB |
BIN
esercizio1/img/evento-matera.jpg
Normal file
|
After Width: | Height: | Size: 305 KiB |
BIN
esercizio1/img/evento-presepe-vivente-panettieri.jpg
Normal file
|
After Width: | Height: | Size: 384 KiB |
BIN
esercizio1/img/evento-scorpions.jpg
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
esercizio1/img/flag-ctf.jpg
Normal file
|
After Width: | Height: | Size: 39 KiB |
BIN
esercizio1/img/hero.jpg
Normal file
|
After Width: | Height: | Size: 1.0 MiB |
227
esercizio1/index.html
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="it">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>SecureTickets</title>
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="eventi.css">
|
||||||
|
<link rel="icon" type="image/png" href="favicon.png" sizes="96x96" />
|
||||||
|
<script src="https://kit.fontawesome.com/c2497a668c.js" crossorigin="anonymous" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<div class="container">
|
||||||
|
<div class="logo">
|
||||||
|
<img src="logo.png" alt="SecureTickets">
|
||||||
|
<h3>SecureTickets</h3>
|
||||||
|
</div>
|
||||||
|
<div class="count" id="animation">
|
||||||
|
<i class="fa-solid fa-ticket"></i> Biglietti: <span id="counter">0</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="hero">
|
||||||
|
<div class="overlay">
|
||||||
|
<div class="container">
|
||||||
|
<h1>Piattaforma n. 1 per cercare eventi</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<section class="container">
|
||||||
|
<h2>Cerca un evento</h2>
|
||||||
|
|
||||||
|
<p>Utilizza la nostra nuova ricerca sicura per trovare l'evento desiderato, oppure consulta la sezione in
|
||||||
|
evidenza!
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<form method="get" action="process_eventi.php">
|
||||||
|
<fieldset>
|
||||||
|
<label for="nome-evento"><i class="fa-solid fa-tag"></i></label>
|
||||||
|
<input type="text" id="nome-evento" name="nome-evento" placeholder="Nome evento" required>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<label for="citta"><i class="fa-solid fa-map-location-dot"></i></label>
|
||||||
|
<input type="text" id="citta" name="citta" placeholder="Città" required>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset class="buttons">
|
||||||
|
<input type="submit" value="Cerca">
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="container">
|
||||||
|
<h2>In evidenza</h2>
|
||||||
|
|
||||||
|
<div class="boxes">
|
||||||
|
<div class="box">
|
||||||
|
<div class="image">
|
||||||
|
<img src="img/evento-bon-jovi.webp" alt="Bon Jovi">
|
||||||
|
</div>
|
||||||
|
<div class="data">
|
||||||
|
<h3>Bon Jovi - Forever Tour</h3>
|
||||||
|
<div class="meta">
|
||||||
|
<p><i class="fa-solid fa-calendar-day"></i> 24 luglio 2026</p>
|
||||||
|
<p><i class="fa-solid fa-map-pin"></i> Arena di Verona</p>
|
||||||
|
</div>
|
||||||
|
<p>La leggenda del rock torna in Italia! Bon Jovi arriva all’Arena di Verona con il “Forever
|
||||||
|
Tour”,
|
||||||
|
per una serata di pura energia tra i brani del nuovo album e i grandi classici come Livin’
|
||||||
|
on a
|
||||||
|
Prayer, Always e It’s My Life.
|
||||||
|
</p>
|
||||||
|
<div class="grow"></div>
|
||||||
|
<div class="buttons">
|
||||||
|
<button class="button" onclick="addBiglietto()">Acquista biglietto</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="image">
|
||||||
|
<img src="img/evento-david-gilmour.webp" alt="David Gilmour">
|
||||||
|
</div>
|
||||||
|
<div class="data">
|
||||||
|
<h3>David Gilmour - Luck And Strange Tour</h3>
|
||||||
|
<div class="meta">
|
||||||
|
<p><i class="fa-solid fa-calendar-day"></i> 18 marzo 2026</p>
|
||||||
|
<p><i class="fa-solid fa-map-pin"></i> Circo Massimo, Roma</p>
|
||||||
|
</div>
|
||||||
|
<p>Il leggendario chitarrista dei Pink Floyd torna in Italia con il tour “Luck and Strange”.
|
||||||
|
Gilmour
|
||||||
|
presenta i brani del nuovo album e i capolavori che hanno fatto la storia del rock
|
||||||
|
psichedelico
|
||||||
|
in un emozionante viaggio sonoro al Circo Massimo.
|
||||||
|
</p>
|
||||||
|
<div class="grow"></div>
|
||||||
|
<div class="buttons">
|
||||||
|
<button class="button" onclick="addBiglietto()">Acquista biglietto</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="image">
|
||||||
|
<img src="img/evento-scorpions.jpg" alt="Scorpions">
|
||||||
|
</div>
|
||||||
|
<div class="data">
|
||||||
|
<h3>Scorpions - Coming Home 60th Years Tour</h3>
|
||||||
|
<div class="meta">
|
||||||
|
<p><i class="fa-solid fa-calendar-day"></i> 16 agosto 2026</p>
|
||||||
|
<p><i class="fa-solid fa-map-pin"></i> Arena di Verona</p>
|
||||||
|
</div>
|
||||||
|
<p>La storica band tedesca festeggia 60 anni di carriera con un tour speciale! Gli Scorpions tornano in Italia con tutti i loro successi, da Wind of Change a Still Loving You, fino all’energia di Rock You Like a Hurricane. Una serata esplosiva e ricca di emozioni nel segno del grande rock!
|
||||||
|
</p>
|
||||||
|
<div class="grow"></div>
|
||||||
|
<div class="buttons">
|
||||||
|
<button class="button" onclick="addBiglietto()">Acquista biglietto</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="image">
|
||||||
|
<img src="img/evento-presepe-vivente-panettieri.jpg" alt="Presepe Vivente">
|
||||||
|
</div>
|
||||||
|
<div class="data">
|
||||||
|
<h3>Presepe Vivente - XXI Edizione</h3>
|
||||||
|
<div class="meta">
|
||||||
|
<p><i class="fa-solid fa-calendar-day"></i> 24 dicembre 2025</p>
|
||||||
|
<p><i class="fa-solid fa-map-pin"></i> Panettieri (CS)</p>
|
||||||
|
</div>
|
||||||
|
<p>Torna il suggestivo Presepe Vivente di Panettieri, giunto alla ventunesima edizione. Le vie
|
||||||
|
del
|
||||||
|
borgo si animano con botteghe, figuranti e sapori tradizionali per rivivere la magia della
|
||||||
|
Natività nel cuore della Sila.
|
||||||
|
</p>
|
||||||
|
<div class="grow"></div>
|
||||||
|
<div class="buttons">
|
||||||
|
<button class="button" onclick="addBiglietto()">Acquista biglietto</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="image">
|
||||||
|
<img src="img/evento-matera.jpg" alt="Matera Light Festival">
|
||||||
|
</div>
|
||||||
|
<div class="data">
|
||||||
|
<h3>Matera Light Festival 2026</h3>
|
||||||
|
<div class="meta">
|
||||||
|
<p><i class="fa-solid fa-calendar-day"></i> 10-19 ottobre 2026</p>
|
||||||
|
<p><i class="fa-solid fa-map-pin"></i> Matera (MT)</p>
|
||||||
|
</div>
|
||||||
|
<p>La Città dei Sassi si illumina con il Matera Light Festival, dove arte, tecnologia e
|
||||||
|
paesaggio si
|
||||||
|
fondono in installazioni, videomapping e giochi di luce che valorizzano la bellezza senza
|
||||||
|
tempo
|
||||||
|
di Matera e del suo patrimonio UNESCO.
|
||||||
|
</p>
|
||||||
|
<div class="grow"></div>
|
||||||
|
<div class="buttons">
|
||||||
|
<button class="button" onclick="addBiglietto()">Acquista biglietto</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="container">
|
||||||
|
<h2>HTTP GET e POST</h2>
|
||||||
|
<div class="boxes">
|
||||||
|
<div class="box">
|
||||||
|
<div class="data">
|
||||||
|
<h3>GET</h3>
|
||||||
|
<p>Metodo di HTTP utilizzato per inviare dati al server. I dati sono inviati nell'URL, dopo il
|
||||||
|
simbolo <code>?</code> (Query String).</p>
|
||||||
|
<p>I valori inviati sono visibili, e vengono inviati secondo lo schema
|
||||||
|
<code>chiave=valore</code>, separando più coppie chiave-valore con il simbolo
|
||||||
|
<code>&</code>.</p>
|
||||||
|
<p>Possono essere inviati al massimo 2048 caratteri.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="data">
|
||||||
|
<h3>POST</h3>
|
||||||
|
<p>Metodo di HTTP utilizzato per inviare dati al server. I dati non vengono inseriti in chiaro
|
||||||
|
nell'URL, ma vengono inseriti nel <code>body</code> della richiesta HTTP.</p>
|
||||||
|
<p>Non ci sono limiti di caratteri per invio. Viene preferito il metodo POST per l'utilizzo di
|
||||||
|
file, grandi quantità di informazioni o dati sensibili.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<script>
|
||||||
|
function addBiglietto() {
|
||||||
|
const counter = document.getElementById("counter");
|
||||||
|
const animation = document.getElementById("animation");
|
||||||
|
animation.classList.add("animated");
|
||||||
|
const newValue = Number(counter.innerText) + 1;
|
||||||
|
counter.innerText = newValue;
|
||||||
|
setTimeout(() => {
|
||||||
|
animation.classList.remove("animated");
|
||||||
|
}, 200);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<div class="container">
|
||||||
|
Realizzato da Francesco Giuseppe Mancuso - classe 5E - www.francescomancuso.it
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
BIN
esercizio1/logo.png
Normal file
|
After Width: | Height: | Size: 331 KiB |
84
esercizio1/process_eventi.php
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
<?php
|
||||||
|
if (isset($_GET["sorgente"])) {
|
||||||
|
highlight_file("process_eventi.php");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="it">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Ricerca > SecureTickets</title>
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="eventi.css">
|
||||||
|
<link rel="icon" type="image/png" href="favicon.png" sizes="96x96" />
|
||||||
|
<script src="https://kit.fontawesome.com/c2497a668c.js" crossorigin="anonymous" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<div class="container">
|
||||||
|
<div class="logo">
|
||||||
|
<img src="logo.png" alt="SecureTickets">
|
||||||
|
<h3>SecureTickets</h3>
|
||||||
|
</div>
|
||||||
|
<div class="count">
|
||||||
|
Biglietti: 0
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="hero">
|
||||||
|
<div class="overlay">
|
||||||
|
<div class="container">
|
||||||
|
<h1>Piattaforma n. 1 per cercare eventi</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<section class="container">
|
||||||
|
<?php
|
||||||
|
if (!isset($_GET["nome-evento"]) || !isset($_GET["citta"])) {
|
||||||
|
// Dati non completi
|
||||||
|
?>
|
||||||
|
<h2>Richiesta non completa, riprova</h2>
|
||||||
|
<?php
|
||||||
|
} else {
|
||||||
|
// Sanitizzazione input necessaria per query DB ricerca
|
||||||
|
$nome = htmlspecialchars($_GET["nome-evento"]);
|
||||||
|
$citta = htmlspecialchars($_GET["citta"]);
|
||||||
|
|
||||||
|
echo "<h3>Hai cercato</h3>";
|
||||||
|
echo "<h2>" . $nome . " in " . $citta . "</h2>";
|
||||||
|
echo "<p>Nessun evento trovato, per ora, ma l'invio dei dati con l'array <code>$_GET</code> funziona!</p>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="container">
|
||||||
|
<div class="buttons">
|
||||||
|
<a class="button" onclick="history.back();">Torna indietro</a>
|
||||||
|
<a class="button" href="process_eventi.php?sorgente">Leggi sorgente</a>
|
||||||
|
<a class="button" href="../esercizio2">Es. successivo</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="container">
|
||||||
|
Realizzato da Francesco Giuseppe Mancuso - classe 5E - www.francescomancuso.it
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
BIN
esercizio2/favicon.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
3
esercizio2/giustificazione_iscrizione.txt
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
Ho scelto di utilizzare il metodo POST perché i dati inviati al server HTTP sono sensibili e non devono essere visibili in chiaro nell'URL.
|
||||||
|
|
||||||
|
I dati verranno quindi inseriti nel body della Request.
|
||||||
BIN
esercizio2/img/hero.jpg
Normal file
|
After Width: | Height: | Size: 1.6 MiB |
125
esercizio2/index.html
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="it">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Iscrizione</title>
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="iscrizione.css">
|
||||||
|
<link rel="icon" type="image/png" href="favicon.png" sizes="96x96" />
|
||||||
|
<script src="https://kit.fontawesome.com/c2497a668c.js" crossorigin="anonymous" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<div class="container">
|
||||||
|
<div class="logo">
|
||||||
|
<i class="fa-solid fa-code"></i>
|
||||||
|
<h3>Programmazione Web</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="hero">
|
||||||
|
<div class="overlay">
|
||||||
|
<div class="container">
|
||||||
|
<h1>Iscrizione online</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<section class="container">
|
||||||
|
<h2>1-minuto per iscriverti</h2>
|
||||||
|
|
||||||
|
<p>Compila il seguente modulo per iscriverti al corso online di Programmazione Web!</p>
|
||||||
|
<p>Riceverai un'email con tutti i dettagli per partecipazione, orari e programma.</p>
|
||||||
|
|
||||||
|
<form method="post" action="process_iscrizione.php">
|
||||||
|
<div class="orizzontale">
|
||||||
|
<fieldset>
|
||||||
|
<label for="nome"><i class="fa-solid fa-user"></i> Nome e Cognome</label>
|
||||||
|
<input type="text" id="nome" name="nome" placeholder="Tony Stark" required>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<label for="email"><i class="fa-solid fa-envelope"></i> E-mail</label>
|
||||||
|
<input type="email" id="email" name="email" placeholder="tony@starkindustries.com" required>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="corso-box">
|
||||||
|
<div class="image">
|
||||||
|
<img src="img/hero.jpg" alt="Il corso">
|
||||||
|
</div>
|
||||||
|
<div class="data">
|
||||||
|
<h3>Corso di programmazione Web</h3>
|
||||||
|
<p>Imparerai le basi della programmazione Web, il linguaggio HTML, il linguaggio CSS e la logica
|
||||||
|
client-side con JavaScript.</p>
|
||||||
|
<div class="meta">
|
||||||
|
<p><i class="fa-solid fa-hourglass-start"></i> 18 ore</p>
|
||||||
|
<p><i class="fa-solid fa-map-pin"></i> Online</p>
|
||||||
|
<p><i class="fa-solid fa-pencil"></i> Con quiz finale</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<input type="checkbox" id="conferma" name="conferma" required>
|
||||||
|
<label for="conferma">Confermo l'iscrizione al corso sopra descritto</label>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<fieldset>
|
||||||
|
<input type="checkbox" id="accetto" name="accetto" required>
|
||||||
|
<label for="accetto">Accetto l'Informativa sulla Privacy</label>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<fieldset class="buttons">
|
||||||
|
<input type="submit" value="Iscriviti ora!">
|
||||||
|
</fieldset>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="container">
|
||||||
|
<h2>HTTP GET e POST</h2>
|
||||||
|
<div class="boxes">
|
||||||
|
<div class="box">
|
||||||
|
<div class="data">
|
||||||
|
<h3>GET</h3>
|
||||||
|
<p>Metodo di HTTP utilizzato per inviare dati al server. I dati sono inviati nell'URL, dopo il
|
||||||
|
simbolo <code>?</code> (Query String).</p>
|
||||||
|
<p>I valori inviati sono visibili, e vengono inviati secondo lo schema
|
||||||
|
<code>chiave=valore</code>, separando più coppie chiave-valore con il simbolo
|
||||||
|
<code>&</code>.
|
||||||
|
</p>
|
||||||
|
<p>Possono essere inviati al massimo 2048 caratteri.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="data">
|
||||||
|
<h3>POST</h3>
|
||||||
|
<p>Metodo di HTTP utilizzato per inviare dati al server. I dati non vengono inseriti in chiaro
|
||||||
|
nell'URL, ma vengono inseriti nel <code>body</code> della richiesta HTTP.</p>
|
||||||
|
<p>Non ci sono limiti di caratteri per invio. Viene preferito il metodo POST per l'utilizzo di
|
||||||
|
file, grandi quantità di informazioni o dati sensibili.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="container">
|
||||||
|
Realizzato da Francesco Giuseppe Mancuso - classe 5E - www.francescomancuso.it
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
335
esercizio2/iscrizione.css
Normal file
@@ -0,0 +1,335 @@
|
|||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
color-scheme: dark;
|
||||||
|
}
|
||||||
|
|
||||||
|
body,
|
||||||
|
input,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-family: "Outfit", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: hsl(203, 93%, 9%);
|
||||||
|
color: #fff;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
width: 95%;
|
||||||
|
max-width: 1200px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
background-color: hsla(203, 93%, 6%, 0.9);
|
||||||
|
backdrop-filter: blur(6px);
|
||||||
|
-webkit-backdrop-filter: blur(6px);
|
||||||
|
padding: 1rem 0;
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
header .container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header .logo {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero {
|
||||||
|
background-color: hsl(203, 93%, 10%);
|
||||||
|
background-image: url("img/hero.jpg");
|
||||||
|
background-attachment: fixed;
|
||||||
|
background-position: 50% 80%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero .overlay {
|
||||||
|
padding: 12rem 1rem 8rem 1rem;
|
||||||
|
background-color: hsla(203, 93%, 5%, 0.6);
|
||||||
|
backdrop-filter: blur(2px);
|
||||||
|
-webkit-backdrop-filter: blur(2px);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
section {
|
||||||
|
margin-top: 4rem;
|
||||||
|
margin-bottom: 4rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
section h2 {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1rem;
|
||||||
|
background-color: hsl(203, 93%, 20%);
|
||||||
|
width: 95%;
|
||||||
|
max-width: 900px;
|
||||||
|
margin: 2rem auto;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: 1rem;
|
||||||
|
box-shadow: 0px 0px 20px hsla(203, 93%, 10%, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
section form .orizzontale {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
gap: 1rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset {
|
||||||
|
border: none;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
gap: 0.5rem;
|
||||||
|
text-align: left;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form .orizzontale fieldset {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset.buttons {
|
||||||
|
max-width: max-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset label {
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form .orizzontale fieldset label {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="text"],
|
||||||
|
section form fieldset input[type="email"] {
|
||||||
|
font-size: 98%;
|
||||||
|
padding: 0.4rem 0.6rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
border: 1px solid hsla(203, 93%, 75%, 0.5);
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
background-color: hsla(203, 93%, 5%, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="text"]:hover,
|
||||||
|
section form fieldset input[type="text"]:focus,
|
||||||
|
section form fieldset input[type="email"]:hover,
|
||||||
|
section form fieldset input[type="email"]:focus {
|
||||||
|
border: 1px solid hsla(203, 93%, 75%, 1);
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="submit"],
|
||||||
|
section form fieldset input[type="button"],
|
||||||
|
.button {
|
||||||
|
font-size: 95%;
|
||||||
|
padding: 0.4rem 0.6rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
background-color: hsl(203, 93%, 75%);
|
||||||
|
color: hsl(203, 93%, 10%);
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="submit"]:hover,
|
||||||
|
section form fieldset input[type="button"]:hover,
|
||||||
|
.button:hover {
|
||||||
|
background-color: hsl(203, 93%, 70%);
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr 1fr;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box,
|
||||||
|
.corso-box {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
width: 99%;
|
||||||
|
max-width: 1100px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background-color: hsl(203, 93%, 20%);
|
||||||
|
border-radius: 1rem;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0px 0px 20px hsla(203, 93%, 10%, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.corso-box {
|
||||||
|
background-color: hsl(203, 93%, 15%);
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .image {
|
||||||
|
flex-grow: 1;
|
||||||
|
max-width: 25rem;
|
||||||
|
min-width: 25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .image img {
|
||||||
|
width: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
height: 100%;
|
||||||
|
display: block;
|
||||||
|
aspect-ratio: 4/3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.corso-box .image {
|
||||||
|
flex-grow: 1;
|
||||||
|
max-width: 10rem;
|
||||||
|
min-width: 10rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.corso-box .image img {
|
||||||
|
width: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
height: 100%;
|
||||||
|
display: block;
|
||||||
|
aspect-ratio: 1/1;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data,
|
||||||
|
.corso-box .data {
|
||||||
|
flex-grow: 2;
|
||||||
|
text-align: left;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data h3,
|
||||||
|
.corso-box .data h3 {
|
||||||
|
font-size: 1.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 767px) {
|
||||||
|
|
||||||
|
section .boxes .box .data h3,
|
||||||
|
.corso-box .data h3 {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
section form .orizzontale {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
|
||||||
|
.corso-box {
|
||||||
|
flex-direction: column;
|
||||||
|
}
|
||||||
|
|
||||||
|
.corso-box .image {
|
||||||
|
max-width: 100%;
|
||||||
|
min-width: 100%;
|
||||||
|
height: 8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.corso-box .data h3 {
|
||||||
|
font-size: 1.3rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data .meta,
|
||||||
|
.corso-box .data .meta {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin: 1rem 0;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data .meta p,
|
||||||
|
.corso-box .data .meta p {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
width: max-content;
|
||||||
|
padding: 0.2rem 0.4rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
background-color: hsl(203, 93%, 30%);
|
||||||
|
}
|
||||||
|
|
||||||
|
section .buttons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 0.5rem;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background-color: hsl(221, 14%, 14%);
|
||||||
|
color: #ff6685;
|
||||||
|
padding: 0.2rem 0.3rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
text-align: center;
|
||||||
|
background-color: hsla(203, 93%, 6%, 0.8);
|
||||||
|
padding: 1rem 0;
|
||||||
|
}
|
||||||
BIN
esercizio2/logo.png
Normal file
|
After Width: | Height: | Size: 33 KiB |
86
esercizio2/process_iscrizione.php
Normal file
@@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
if (isset($_GET["sorgente"])) {
|
||||||
|
highlight_file("process_iscrizione.php");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER["REQUEST_METHOD"] === "GET") {
|
||||||
|
die("<code>Questa pagina blocca il metodo GET, compila prima il modulo!</code>");
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="it">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Iscrizione confermata</title>
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="iscrizione.css">
|
||||||
|
<link rel="icon" type="image/png" href="favicon.png" sizes="96x96" />
|
||||||
|
<script src="https://kit.fontawesome.com/c2497a668c.js" crossorigin="anonymous" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<div class="container">
|
||||||
|
<div class="logo">
|
||||||
|
<i class="fa-solid fa-code"></i>
|
||||||
|
<h3>Programmazione Web</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="hero">
|
||||||
|
<div class="overlay">
|
||||||
|
<div class="container">
|
||||||
|
<h1>Iscrizione confermata</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<section class="container">
|
||||||
|
<?php
|
||||||
|
if (!isset($_POST["nome"]) || !isset($_POST["email"])) {
|
||||||
|
// Dati non completi
|
||||||
|
?>
|
||||||
|
<h2>Invio dati del form non completo, riprova</h2>
|
||||||
|
<?php
|
||||||
|
} else {
|
||||||
|
// Sanitizzazione input necessaria
|
||||||
|
$nome = htmlspecialchars($_POST["nome"]);
|
||||||
|
$email = htmlspecialchars($_POST["email"]);
|
||||||
|
|
||||||
|
echo "<h2>Dati form inviati con successo!</h2>";
|
||||||
|
echo "<p>Contenuto dell'array <code>$_POST</code>:</p><br>";
|
||||||
|
echo "<p><strong>Nome</strong>: " . $nome ."</p>";
|
||||||
|
echo "<p><strong>E-mail</strong>: " . $email ."</p>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="container">
|
||||||
|
<div class="buttons">
|
||||||
|
<a class="button" onclick="history.back();">Torna indietro</a>
|
||||||
|
<a class="button" href="process_iscrizione.php?sorgente">Leggi sorgente</a>
|
||||||
|
<a class="button" href="../esercizio3">Es. successivo</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="container">
|
||||||
|
Realizzato da Francesco Giuseppe Mancuso - classe 5E - www.francescomancuso.it
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
403
esercizio3/candidatura.css
Normal file
@@ -0,0 +1,403 @@
|
|||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
color-scheme: light;
|
||||||
|
}
|
||||||
|
|
||||||
|
body,
|
||||||
|
input,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
textarea {
|
||||||
|
font-family: "Outfit", sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
background-color: hsl(44, 100%, 96%);
|
||||||
|
color: #000101;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
min-height: 100vh;
|
||||||
|
}
|
||||||
|
|
||||||
|
.container {
|
||||||
|
width: 95%;
|
||||||
|
max-width: 1200px;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
header {
|
||||||
|
position: fixed;
|
||||||
|
top: 0;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
background-color: #264f36;
|
||||||
|
backdrop-filter: blur(6px);
|
||||||
|
-webkit-backdrop-filter: blur(6px);
|
||||||
|
padding: 1rem 0;
|
||||||
|
z-index: 3;
|
||||||
|
}
|
||||||
|
|
||||||
|
header .container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
header .logo {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
header .logo img {
|
||||||
|
display: block;
|
||||||
|
height: auto;
|
||||||
|
width: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero {
|
||||||
|
background-color: #264f36;
|
||||||
|
background-image: url("img/hero.jpg");
|
||||||
|
background-position: 50% 20%;
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-size: cover;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hero .overlay {
|
||||||
|
padding: 12rem 1rem 8rem 1rem;
|
||||||
|
background-color: hsla(43, 100%, 53%, 0.8);
|
||||||
|
backdrop-filter: blur(2px);
|
||||||
|
-webkit-backdrop-filter: blur(2px);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
width: 100%
|
||||||
|
}
|
||||||
|
|
||||||
|
.page {
|
||||||
|
flex-grow: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
section {
|
||||||
|
margin-top: 4rem;
|
||||||
|
margin-bottom: 4rem;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
section h2 {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notice {
|
||||||
|
width: 95%;
|
||||||
|
max-width: 900px;
|
||||||
|
font-size: 87%;
|
||||||
|
opacity: 0.85;
|
||||||
|
margin: 0 auto;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form {
|
||||||
|
background-color: hsl(44, 100%, 86%);
|
||||||
|
width: 95%;
|
||||||
|
max-width: 900px;
|
||||||
|
margin: 2rem auto;
|
||||||
|
margin-bottom: 0;
|
||||||
|
padding: 0rem;
|
||||||
|
border-radius: 1rem;
|
||||||
|
box-shadow: 0px 0px 20px hsla(44, 100%, 86%, 0.4);
|
||||||
|
border: 1px solid hsla(43, 100%, 53%, 1);
|
||||||
|
position: relative;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form .effect {
|
||||||
|
background-color: hsla(43, 100%, 53%, 1);
|
||||||
|
background: linear-gradient(0deg, #ffbb0f 30%, transparent);
|
||||||
|
height: 65%;
|
||||||
|
width: 100%;
|
||||||
|
border-radius: 0 0 0.9rem 0.9rem;
|
||||||
|
position: absolute;
|
||||||
|
left: 0;
|
||||||
|
bottom: 0;
|
||||||
|
z-index: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form .container {
|
||||||
|
z-index: 1;
|
||||||
|
padding: 1rem;
|
||||||
|
padding-bottom: 2rem;
|
||||||
|
width: 100%;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
justify-content: center;
|
||||||
|
align-items: center;
|
||||||
|
position: relative;
|
||||||
|
gap: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form img {
|
||||||
|
height: auto;
|
||||||
|
width: calc(100% - 2rem);
|
||||||
|
position: absolute;
|
||||||
|
top: 100%;
|
||||||
|
left: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form .orizzontale {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: flex-start;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
gap: 1rem;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset {
|
||||||
|
border: none;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
gap: 0.5rem;
|
||||||
|
text-align: left;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form .orizzontale fieldset {
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: flex-start;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset.buttons {
|
||||||
|
max-width: max-content;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset label {
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form .orizzontale fieldset > label {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="text"],
|
||||||
|
section form fieldset input[type="email"],
|
||||||
|
section form fieldset textarea {
|
||||||
|
font-size: 98%;
|
||||||
|
padding: 0.4rem 0.6rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
border: 1px solid hsla(143, 35%, 23%, 0.5);
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
background-color: hsla(143, 35%, 95%, 0.8);
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="file"] {
|
||||||
|
font-size: 88%;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="text"]:hover,
|
||||||
|
section form fieldset input[type="text"]:focus,
|
||||||
|
section form fieldset input[type="email"]:hover,
|
||||||
|
section form fieldset input[type="email"]:focus,
|
||||||
|
section form fieldset textarea:hover,
|
||||||
|
section form fieldset textarea:focus {
|
||||||
|
border: 1px solid hsla(143, 35%, 23%, 1);
|
||||||
|
outline: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset textarea {
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="submit"],
|
||||||
|
section form fieldset input[type="button"],
|
||||||
|
.button {
|
||||||
|
font-size: 95%;
|
||||||
|
padding: 0.4rem 0.6rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
background-color: #264f36;
|
||||||
|
color: #fff;
|
||||||
|
font-weight: bold;
|
||||||
|
text-transform: uppercase;
|
||||||
|
border: none;
|
||||||
|
cursor: pointer;
|
||||||
|
text-decoration: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
section form fieldset input[type="submit"]:hover,
|
||||||
|
section form fieldset input[type="button"]:hover,
|
||||||
|
.button:hover {
|
||||||
|
background-color: hsl(143, 35%, 18%);
|
||||||
|
}
|
||||||
|
|
||||||
|
#upload {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uploader {
|
||||||
|
display: flex !important;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 1rem;
|
||||||
|
border-radius: 1rem;
|
||||||
|
width: 100%;
|
||||||
|
height: 8rem;
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 1rem;
|
||||||
|
border: 3px dashed hsla(143, 35%, 23%, 0.8);
|
||||||
|
background-color: hsla(143, 35%, 95%, 0.8);
|
||||||
|
white-space: unset;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
.uploader span {
|
||||||
|
font-weight: normal;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr 1fr;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: nowrap;
|
||||||
|
width: 99%;
|
||||||
|
max-width: 1100px;
|
||||||
|
margin: 0 auto;
|
||||||
|
background-color: hsl(143, 35%, 20%);
|
||||||
|
color: #fff;
|
||||||
|
border-radius: 1rem;
|
||||||
|
overflow: hidden;
|
||||||
|
box-shadow: 0px 0px 20px hsla(143, 35%, 10%, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .image {
|
||||||
|
flex-grow: 1;
|
||||||
|
max-width: 25rem;
|
||||||
|
min-width: 25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .image img {
|
||||||
|
width: 100%;
|
||||||
|
object-fit: cover;
|
||||||
|
height: 100%;
|
||||||
|
display: block;
|
||||||
|
aspect-ratio: 4/3;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data {
|
||||||
|
flex-grow: 2;
|
||||||
|
text-align: left;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
padding: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data h3,
|
||||||
|
.corso-box .data h3 {
|
||||||
|
font-size: 1.8rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 767px) {
|
||||||
|
|
||||||
|
section .boxes .box .data h3,
|
||||||
|
.corso-box .data h3 {
|
||||||
|
font-size: 1.5rem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
section form .orizzontale {
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: stretch;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
section .boxes .box .data .meta,
|
||||||
|
.corso-box .data .meta {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin: 1rem 0;
|
||||||
|
justify-content: flex-start;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
section .boxes .box .data .meta p,
|
||||||
|
.corso-box .data .meta p {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
align-items: center;
|
||||||
|
gap: 0.5rem;
|
||||||
|
width: max-content;
|
||||||
|
padding: 0.2rem 0.4rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
background-color: hsl(143, 35%, 30%);
|
||||||
|
}
|
||||||
|
|
||||||
|
section .buttons {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
gap: 0.5rem;
|
||||||
|
align-items: center;
|
||||||
|
justify-content: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
code {
|
||||||
|
background-color: #fff;
|
||||||
|
color: hsl(348, 100%, 40%);
|
||||||
|
padding: 0.2rem 0.3rem;
|
||||||
|
border-radius: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.post-data {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-items: center;
|
||||||
|
gap: 1rem;
|
||||||
|
margin-top: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: hsl(143, 35%, 23%);
|
||||||
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
text-align: center;
|
||||||
|
background-color: hsl(143, 35%, 23%);
|
||||||
|
padding: 1rem 0;
|
||||||
|
color: #fff;
|
||||||
|
}
|
||||||
BIN
esercizio3/favicon.png
Normal file
|
After Width: | Height: | Size: 5.3 KiB |
6
esercizio3/giustificazione_candidatura.txt
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
Ho scelto di utilizzare il metodo POST perché i dati inviati al server HTTP sono sensibili e non devono essere visibili in chiaro nell'URL.
|
||||||
|
|
||||||
|
I dati verranno quindi inseriti nel body della Request.
|
||||||
|
|
||||||
|
Ho aggiunto per la lettura dei metadata del file caricato l'attributo enctype="multipart/form-data" al <form>.
|
||||||
|
Lato server, ho utilizzato l'array associativo $_FILES[]
|
||||||
BIN
esercizio3/img/graphic.png
Normal file
|
After Width: | Height: | Size: 1.2 KiB |
BIN
esercizio3/img/hero.jpg
Normal file
|
After Width: | Height: | Size: 139 KiB |
161
esercizio3/index.html
Normal file
@@ -0,0 +1,161 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="it">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Candidati ora!</title>
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="candidatura.css">
|
||||||
|
<link rel="icon" type="image/png" href="favicon.png" sizes="96x96" />
|
||||||
|
<script src="https://kit.fontawesome.com/c2497a668c.js" crossorigin="anonymous" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<div class="container">
|
||||||
|
<div class="logo">
|
||||||
|
<img src="logo.png" alt="McDonald's">
|
||||||
|
<h3>McDonald's</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="hero">
|
||||||
|
<div class="overlay">
|
||||||
|
<div class="container">
|
||||||
|
<h1>Invia la tua candidatura</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<section class="container">
|
||||||
|
<h2>Vuoi far parte della nostra squadra?</h2>
|
||||||
|
|
||||||
|
<p>Compila il form e inviaci una candidatura spontanea!</p>
|
||||||
|
<br>
|
||||||
|
<p class="notice">Le rendiamo noto che la sua candidatura potrà essere gestita direttamente da McDonald’s
|
||||||
|
Italia S.r.l. in
|
||||||
|
qualità di titolare del trattamento oppure da soggetti appartenenti al sistema a marchio McDonald’s che
|
||||||
|
gestiranno la fase di selezione come Titolari autonomi del trattamento.</p>
|
||||||
|
|
||||||
|
<form method="post" action="process_candidatura.php" enctype="multipart/form-data">
|
||||||
|
<div class="effect"></div>
|
||||||
|
<img src="img/graphic.png">
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
|
<div class="orizzontale">
|
||||||
|
<fieldset>
|
||||||
|
<label for="nome"><i class="fa-solid fa-user"></i> Nome e Cognome</label>
|
||||||
|
<input type="text" id="nome" name="nome" required>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<label for="email"><i class="fa-solid fa-envelope"></i> E-mail</label>
|
||||||
|
<input type="email" id="email" name="email" required>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="orizzontale">
|
||||||
|
<fieldset>
|
||||||
|
<h4>Livello di esperienza</h4>
|
||||||
|
<div class="radio">
|
||||||
|
<input type="radio" id="junior" name="esperienza" value="Junior" required>
|
||||||
|
<label for="junior">Livello Junior</label><br>
|
||||||
|
<input type="radio" id="mid" name="esperienza" value="Mid">
|
||||||
|
<label for="mid">Livello Mid</label><br>
|
||||||
|
<input type="radio" id="senior" name="esperienza" value="Senior">
|
||||||
|
<label for="senior">Livello Senior</label>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
<fieldset>
|
||||||
|
<h4>Competenze</h4>
|
||||||
|
<div class="radio">
|
||||||
|
<input type="checkbox" id="html" name="competenze[]" value="Conoscenza di HTML">
|
||||||
|
<label for="html">Conoscenza di HTML</label><br>
|
||||||
|
<input type="checkbox" id="css" name="competenze[]" value="Conoscenza di CSS">
|
||||||
|
<label for="css">Conoscenza di CSS</label><br>
|
||||||
|
<input type="checkbox" id="js" name="competenze[]" value="Conoscenza di JavaScript">
|
||||||
|
<label for="js">Conoscenza di JavaScript</label><br>
|
||||||
|
<input type="checkbox" id="php" name="competenze[]" value="Conoscenza di PHP">
|
||||||
|
<label for="php">Conoscenza di PHP</label><br>
|
||||||
|
<input type="checkbox" id="py" name="competenze[]" value="Conoscenza di Python">
|
||||||
|
<label for="py">Conoscenza di Python</label>
|
||||||
|
</div>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="orizzontale">
|
||||||
|
<fieldset>
|
||||||
|
<label class="uploader" for="upload">Carica il tuo CV<br><span>Premi qui per selezionare un
|
||||||
|
documento</span></label>
|
||||||
|
<input id="upload" type="file" name="curriculum"
|
||||||
|
accept=".pdf,.doc,application/vnd.openxmlformats-officedocument.wordprocessingml.document">
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="orizzontale">
|
||||||
|
<fieldset>
|
||||||
|
<label for="lettera">Lettera di presentazione</label>
|
||||||
|
<textarea id="lettera" name="lettera" rows="5"
|
||||||
|
placeholder="Scrivi qui o incolla la tua lettera di presentazione..."
|
||||||
|
required></textarea>
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h4 style="width: 100%;text-align: left;margin-top: 0.5rem;">Informativa</h4>
|
||||||
|
<fieldset>
|
||||||
|
<input type="checkbox" id="accetto" name="accetto" required>
|
||||||
|
<label for="accetto">Accetto l'Informativa sulla Privacy</label>
|
||||||
|
</fieldset>
|
||||||
|
|
||||||
|
<fieldset class="buttons">
|
||||||
|
<input type="submit" value="Invia">
|
||||||
|
</fieldset>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="container">
|
||||||
|
<h2>HTTP GET e POST</h2>
|
||||||
|
<div class="boxes">
|
||||||
|
<div class="box">
|
||||||
|
<div class="data">
|
||||||
|
<h3>GET</h3>
|
||||||
|
<p>Metodo di HTTP utilizzato per inviare dati al server. I dati sono inviati nell'URL, dopo il
|
||||||
|
simbolo <code>?</code> (Query String).</p>
|
||||||
|
<p>I valori inviati sono visibili, e vengono inviati secondo lo schema
|
||||||
|
<code>chiave=valore</code>, separando più coppie chiave-valore con il simbolo
|
||||||
|
<code>&</code>.
|
||||||
|
</p>
|
||||||
|
<p>Possono essere inviati al massimo 2048 caratteri.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="data">
|
||||||
|
<h3>POST</h3>
|
||||||
|
<p>Metodo di HTTP utilizzato per inviare dati al server. I dati non vengono inseriti in chiaro
|
||||||
|
nell'URL, ma vengono inseriti nel <code>body</code> della richiesta HTTP.</p>
|
||||||
|
<p>Non ci sono limiti di caratteri per invio. Viene preferito il metodo POST per l'utilizzo di
|
||||||
|
file, grandi quantità di informazioni o dati sensibili.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="container">
|
||||||
|
Realizzato da Francesco Giuseppe Mancuso - classe 5E - www.francescomancuso.it
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
BIN
esercizio3/logo.png
Normal file
|
After Width: | Height: | Size: 15 KiB |
169
esercizio3/process_candidatura.php
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
<?php
|
||||||
|
if (isset($_GET["sorgente"])) {
|
||||||
|
highlight_file("process_candidatura.php");
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($_SERVER["REQUEST_METHOD"] === "GET") {
|
||||||
|
die("<code>Questa pagina blocca il metodo GET, compila prima il modulo!</code>");
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="it">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Candidatura confermata</title>
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="candidatura.css">
|
||||||
|
<link rel="icon" type="image/png" href="favicon.png" sizes="96x96" />
|
||||||
|
<script src="https://kit.fontawesome.com/c2497a668c.js" crossorigin="anonymous" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<header>
|
||||||
|
<div class="container">
|
||||||
|
<div class="logo">
|
||||||
|
<img src="logo.png" alt="McDonald's">
|
||||||
|
<h3>McDonald's</h3>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
|
||||||
|
<div class="hero">
|
||||||
|
<div class="overlay">
|
||||||
|
<div class="container">
|
||||||
|
<h1>Invio confermato!</h1>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<section class="container">
|
||||||
|
<h2>Grazie per aver inviato la tua candidatura!</h2>
|
||||||
|
|
||||||
|
<p>Ecco i dati che abbiamo ricevuto (array <code>$_POST</code>): </p>
|
||||||
|
|
||||||
|
<div class="post-data">
|
||||||
|
|
||||||
|
<?php
|
||||||
|
if (!isset($_POST)) {
|
||||||
|
// Dati mancanti
|
||||||
|
?>
|
||||||
|
<h2>Invio dati del form non completo, riprova!</h2>
|
||||||
|
<?php
|
||||||
|
} else {
|
||||||
|
|
||||||
|
// Controllo la presenza di ogni variabile
|
||||||
|
|
||||||
|
echo "<p><strong>Nome</strong><br>";
|
||||||
|
if (isset($_POST["nome"])) {
|
||||||
|
// Sanitizzazione input necessaria
|
||||||
|
$var = htmlspecialchars($_POST["nome"]);
|
||||||
|
echo $var;
|
||||||
|
} else {
|
||||||
|
echo "<code>NON PRESENTE</code>";
|
||||||
|
}
|
||||||
|
echo "</p>";
|
||||||
|
|
||||||
|
echo "<p><strong>E-mail</strong><br>";
|
||||||
|
if (isset($_POST["email"])) {
|
||||||
|
// Sanitizzazione input necessaria
|
||||||
|
$var = htmlspecialchars($_POST["email"]);
|
||||||
|
echo $var;
|
||||||
|
} else {
|
||||||
|
echo "<code>NON PRESENTE</code>";
|
||||||
|
}
|
||||||
|
echo "</p>";
|
||||||
|
|
||||||
|
echo "<p><strong>Esperienza</strong><br>";
|
||||||
|
if (isset($_POST["esperienza"])) {
|
||||||
|
// Sanitizzazione input necessaria
|
||||||
|
$var = htmlspecialchars($_POST["esperienza"]);
|
||||||
|
echo $var;
|
||||||
|
} else {
|
||||||
|
echo "<code>NON PRESENTE</code>";
|
||||||
|
}
|
||||||
|
echo "</p>";
|
||||||
|
|
||||||
|
echo "<p><strong>Competenze</strong><br>";
|
||||||
|
if (isset($_POST["competenze"])) {
|
||||||
|
// Sanitizzazione input necessaria
|
||||||
|
foreach ($_POST["competenze"] as $competenza) {
|
||||||
|
echo htmlspecialchars($competenza);
|
||||||
|
echo "<br>";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
echo "<code>NON PRESENTE</code>";
|
||||||
|
}
|
||||||
|
echo "</p>";
|
||||||
|
|
||||||
|
echo "<p><strong>File allegato</strong><br>";
|
||||||
|
if (isset($_POST["curriculum"]) || isset($_FILES["curriculum"])) {
|
||||||
|
// Sanitizzazione necessaria solo per salvataggio del file, con permessi di esecuzione bloccati
|
||||||
|
echo "<i>Nome</i>: " . $_FILES["curriculum"]['name'];
|
||||||
|
echo "<br><i>Tipo di file</i>: " . $_FILES['curriculum']['type'];
|
||||||
|
echo "<br><i>Directory temporanea</i>: " . $_FILES['curriculum']['tmp_name'];
|
||||||
|
echo "<br><i>Errori riscontrati</i>: " . $_FILES['curriculum']['error'];
|
||||||
|
echo "<br><i>Dimensione</i>: " . $_FILES['curriculum']['size'] . " B";
|
||||||
|
echo "<br><br>Utilizzato l'array di PHP <code>$_FILES</code> e l'attributo <code>enctype=\"multipart/form-data\"</code> al modulo";
|
||||||
|
} else {
|
||||||
|
echo "<code>NON PRESENTE</code>";
|
||||||
|
}
|
||||||
|
echo "</p>";
|
||||||
|
|
||||||
|
echo "<p><strong>Lettera di presentazione</strong><br>";
|
||||||
|
if (isset($_POST["lettera"])) {
|
||||||
|
// Sanitizzazione input necessaria
|
||||||
|
$var = htmlspecialchars($_POST["lettera"]);
|
||||||
|
echo $var;
|
||||||
|
} else {
|
||||||
|
echo "<code>NON PRESENTE</code>";
|
||||||
|
}
|
||||||
|
echo "</p>";
|
||||||
|
|
||||||
|
echo "<p><strong>Privacy accettata</strong><br>";
|
||||||
|
if (isset($_POST["accetto"])) {
|
||||||
|
echo "Si";
|
||||||
|
} else {
|
||||||
|
echo "No";
|
||||||
|
}
|
||||||
|
echo "</p>";
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="container">
|
||||||
|
<p>Verrai molto presto ricontattato da uno dei nostri addetti!<br><a
|
||||||
|
href="https://www.adaptivesecurity.com/blog/mcdonalds-password-data-breach" target="_blank">
|
||||||
|
Per approfondire <i class="fa-solid fa-arrow-up-right-from-square"></i></a></p>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
<section class="container">
|
||||||
|
<div class="buttons">
|
||||||
|
<a class="button" onclick="history.back();">Torna indietro</a>
|
||||||
|
<a class="button" href="process_candidatura.php?sorgente">Leggi sorgente</a>
|
||||||
|
<a class="button" href="../">Torna all'inizio</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="container">
|
||||||
|
Realizzato da Francesco Giuseppe Mancuso - classe 5E - www.francescomancuso.it
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
90
index.html
Normal file
@@ -0,0 +1,90 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="it">
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Esercizio HTTP</title>
|
||||||
|
|
||||||
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
|
<link href="https://fonts.googleapis.com/css2?family=Outfit:wght@100..900&display=swap" rel="stylesheet">
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="esercizio.css">
|
||||||
|
<link rel="icon" type="image/png" href="favicon.png" sizes="96x96" />
|
||||||
|
<script src="https://kit.fontawesome.com/c2497a668c.js" crossorigin="anonymous" type="text/javascript"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<section class="container">
|
||||||
|
<h2>Esercizi HTTP con GET e POST</h2>
|
||||||
|
<div class="boxes">
|
||||||
|
<div class="box">
|
||||||
|
<div class="image">
|
||||||
|
<img src="esercizio1/logo.png" style="width: 70%; height: 70%;">
|
||||||
|
</div>
|
||||||
|
<div class="data">
|
||||||
|
<h3>SecureTickets</h3>
|
||||||
|
<div class="meta">
|
||||||
|
<p>Esercizio 1</p>
|
||||||
|
<p>Metodo GET</p>
|
||||||
|
</div>
|
||||||
|
<p>Ricerca con metodo GET di eventi filtrando per nome e città. Trova facilmente e in modo sicuro l'evento desiderato! Sfoglia gli eventi in evidenza e acquista il tuo biglietto online.</p>
|
||||||
|
<div class="grow"></div>
|
||||||
|
<div class="buttons">
|
||||||
|
<a href="esercizio1/" class="button">Vai all'esercizio</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="image">
|
||||||
|
<img src="esercizio2/logo.png">
|
||||||
|
</div>
|
||||||
|
<div class="data">
|
||||||
|
<h3>Corso online</h3>
|
||||||
|
<div class="meta">
|
||||||
|
<p>Esercizio 2</p>
|
||||||
|
<p>Metodo POST</p>
|
||||||
|
</div>
|
||||||
|
<p>Acquisisci nuove competenze iscrivendoti al corso di Programmazione Web. Potrai imparare i linguaggi client-side (come HTML, CSS e JavaScript) e i linguaggi server-side (come PHP e Java).</p>
|
||||||
|
<div class="grow"></div>
|
||||||
|
<div class="buttons">
|
||||||
|
<a href="esercizio2/" class="button">Vai all'esercizio</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="box">
|
||||||
|
<div class="image">
|
||||||
|
<img src="esercizio3/logo.png">
|
||||||
|
</div>
|
||||||
|
<div class="data">
|
||||||
|
<h3>Candidatura</h3>
|
||||||
|
<div class="meta">
|
||||||
|
<p>Esercizio 3</p>
|
||||||
|
<p>Metodo POST</p>
|
||||||
|
</div>
|
||||||
|
<p>Invia la tua candidatura spontanea sulla nuovissima piattaforma dedicata! Inserisci i tuoi dati, carica il tuo CV e inizia subito. Ti aspettiamo!</p>
|
||||||
|
<div class="grow"></div>
|
||||||
|
<div class="buttons">
|
||||||
|
<a href="esercizio3/" class="button">Vai all'esercizio</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<footer>
|
||||||
|
<div class="container">
|
||||||
|
Realizzato da Francesco Giuseppe Mancuso - classe 5E - www.francescomancuso.it
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
|
||||||
|
</html>
|
||||||
30
index.php
@@ -1,30 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html lang="it">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>Funziona!</title>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
padding: 8rem 1rem;
|
|
||||||
margin: 0;
|
|
||||||
background-color: #111111;
|
|
||||||
color: #fafafa;
|
|
||||||
text-align: center;
|
|
||||||
font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>Funziona!</h1>
|
|
||||||
<p>Se vedi questa pagina, <code style="display: inline-block;">deploy-dynamic</code> funziona!</p>
|
|
||||||
<br>
|
|
||||||
<img src="https://media3.giphy.com/media/v1.Y2lkPTc5MGI3NjExZDcxMWdzaGY1aW1sdXBrN3pjbjR3dXRlc3A2aTRrenFwbjU4aWh1bCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/blSTtZehjAZ8I/giphy.gif" alt="PARTY" style="width:90%;max-width:500px">
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<span>Pagina generata dinamicamente con PHP il <?php date_default_timezone_set('Europe/Rome'); echo $current_date = date('d/m/Y H:i:s'); ?></span>
|
|
||||||
<br>
|
|
||||||
<br>
|
|
||||||
<p><i>Ospitato su vps.francescomancuso.it</i></p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||