generated from francesco/deploy-dinamico
Deploy tramite custom CI/CD Action
All checks were successful
Deploy / trigger (push) Successful in 2s
All checks were successful
Deploy / trigger (push) Successful in 2s
This commit is contained in:
BIN
esercizio2/favicon.png
Normal file
BIN
esercizio2/favicon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
3
esercizio2/giustificazione_iscrizione.txt
Normal file
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
BIN
esercizio2/img/hero.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1.6 MiB |
125
esercizio2/index.html
Normal file
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
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
BIN
esercizio2/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 33 KiB |
86
esercizio2/process_iscrizione.php
Normal file
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>
|
||||
Reference in New Issue
Block a user