Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1
Elettronico
MANUALE
TECNICO
http://registroelettronico.altervista.org
BARTOLINI JONATHAN - CAPITANELLI MARCO
A.S. 2016/17
INDICE
DATABASE
1.0 - Analisi e struttura database
pag.3
PORTALE WEB
2.0 - Login pag.5
3.0 - Studente pag.7
3.1 - Home pag.7
3.2 - Visualizzazione Voti pag.8
3.2.1 - Visualizzazione dettaglio voti pag.11
Manuale tecnico - Registro
2
Elettronico
Il database riportato sotto rappresenta la struttura utilizzata per implementare le funzioni del registro
elettronico, ma non tutte le entit pianificate sono state utilizzate.
Partendo dallentit centrale, ovvero lo studente, vediamo subito che caratterizzato dai dati anagrafici
generali oltre che da una matricola che servir da chiave primaria ed email e password che saranno i
dati necessari per accedere al registro e la foreign key collegate alla classe di riferimento.
Notiamo subito un collegamento 1:N con lentit assenza, questo perch ognuna di esse riferita
solamente ad uno studente ma che a sua volta potr effettuarne molteplici.
Ogni assenza caratterizzata da un identificativo, la data di svolgimento, la causale ed uneventuale
descrizione e la foreign key collegata allo studente.
Questultimo a sua volta collegato anche con lentit genitore perch nella pianificazione del progetto
era prevista la possibilit che essi potessero vedere i dati dei propri figli e poter effettuate alcune
operazioni, ma queste non sono state implementate.
Una relazione chiave del database quella tra classe e studente di tipo 1:N.
La classe caratterizzata dallidentificativo, dalla sezione (5A, 4B...) e dallindirizzo (informatica,
elettronica ).
Ad essa sono collegate altre due entit, entrambe 1:N, che sono con evento e note.
Manuale tecnico - Registro
3
Elettronico
Il primo serve per la gestione dellagenda ed ha come campi la data, lora, la descrizione, il suo
identificativo e la chiave esterna della classe.
Daltra parte le note sono state gestite a livello di classe e sono composte dallidentificativo, la
descrizione e anche qui la chiave esterna della classe.
Laltra entit chiave del database sicuramente il docente.
Ha gli stessi dati anagrafici dello studente ed ha una relazione N:N con la classe, questa stata
semplificata attraverso linserimento dellentit segue che contiene le chiavi esterne delle entit pi un
identificativo proprio.
Medesima relazione avviene anche con Materie in quanto una di esse pu essere insegnata da pi
docenti e ogni insegnante pu averne a carico pi di una.
La materia descritta semplicemente dallidentificativo e dal nome.
La materia si collega a sua volta con lentit voti legata anche allo studente.
Questo permette la gestione dei voti sia a livello di classe e sia a livello del singolo studente in base alla
materia.
Ogni voto viene caratterizzato dalla valutazione, dalla data, da una descrizione, la chiave primaria e dalle
chiavi esterne riferite a studente e a materia.
Unaltra entit non implementata nel progetto finale quella dei materiali didattici, ovvero dei file che
dovevano essere visualizzati a livello di classe, con la quale lentit legata tramite abbinamento, poi
visualizzabili anche dallo studente.
2.0)LOGIN
Questa linterfaccia che permette allutente che utilizza il software di effettuare laccesso al portale per
arrivare alla sua area personale.
Manuale tecnico - Registro
5
Elettronico
Per effettuare questa operazione sar sufficiente inserire le credenziali di accesso, in seguito tramite il
linguaggio PHP verr interrogato il database con una query SQL.
I dati da controllare saranno inviati tramite metodo POST ad unaltra pagina php che effettuer i relativi
controlli sulla base di dati.
Se la query avr un esito positivo lutente riuscir ad accedere mentre, in caso contrario, avverr un
reindirizzamento nella pagina di login.
CHECK.PHP
if (mysqli_num_rows($res) != 1 && mysqli_num_rows($res) == 0) //controllo se esiste uno studente
{
$sql = "SELECT * FROM Docenti WHERE Docenti.email='$email'"; // select selezione docente
$res = mysqli_query($cn, $sql);
Come si nota dal codice ci sono due diverse tipologie di utente, infatti potr accedere al registro sia un
docente che uno studente e ognuno di essi avr un proprio spazio con funzionalit differenti.
3.0) STUDENTE
3.1) HOME
Effettuando laccesso con uno studente ci troveremo di fronte ad una home con diverse attivit da
intraprendere, le quali saranno elencate in una barra di navigazione laterale (accessibili tramite link) e come
intestazione ci sar il nome e cognome dello studente che ha effettuato laccesso.
Nella parte destra sar visualizzata una tabella che mostrer allutente gli eventi in programma per questa
settimana, questi sono presi tramite uninterrogazione al database con la seguente query:
Selezionando lopzione di logout lutente si disconnetter, verr portato di nuovo alla pagina di login e la
sessione verr formattata.
Manuale tecnico - Registro
7
Elettronico
3.2) VOTI
Selezionando Voti dalla home salteremo ad una pagina avente una barra di navigazione questa volta posta
nel lato superiore della pagina (che sar presente anche in ogni altra) e visualizzeremo una tabella con i voti
dello studente pi un pulsante che ci permetter di cambiare metodo di visualizzazione andando ad uno pi
mirato e dettagliato.
Questa prima query servir a ottenere il numero massimo di voti per una singola materia che ci
permetter in seguito di formattare la tabella in modo corretto.
$NMaxVoti = null;
$sqlNMaxVoti = "SELECT MAX(Conta.NumVoti) AS NMaxVoti FROM (
SELECT COUNT(Voti.Valutazione) AS NumVoti FROM Voti
Manuale tecnico - Registro
8
Elettronico
INNER JOIN Studenti ON Studenti.Cod_Studente = Voti.Cod_Studente
INNER JOIN Materie ON Materie.Cod_Materia = Voti.Materie_Cod_Materia
WHERE Studenti.Cod_Studente = $id
GROUP BY Materie.Nome) AS Conta;";
$res = mysqli_query($cn, $sqlNMaxVoti);
if (!$res) {
// errore di lettura DB o istruzione SQL
$_SESSION["errore"] = "ATTENZIONE ERRORE DI LETTURA DATABASE";
header('Location:login.php');
exit();
} else {
$row = mysqli_fetch_assoc($res);
$NMaxVoti = $row['NMaxVoti'];
// echo $NMaxVoti;
}
Questa permette di selezionare dal database per quel determinato studente tutti i voti che ha registrati
raggruppandoli per materia per gestire meglio la loro visualizzazione.
$sqlVoti = "SELECT Materie.Nome, Valutazione
FROM Voti
INNER JOIN Studenti ON Studenti.Cod_Studente = Voti.Cod_Studente
INNER JOIN Materie ON Materie.Cod_Materia = Voti.Materie_Cod_Materia
WHERE Studenti.Cod_Studente =$id
ORDER BY Materie.Nome ASC ";
Lultima parte di questo blocco di codice si occupa di formare una tabella per visualizzare tutti i voti
raggruppandoli per materia, utilizzando un algoritmo logico che permette il ridimensionamento delle
colonne da creare accanto al nome della materia per una stampa efficace delle valutazioni.
//$TABELLA = ""; //conterr una stringa
$TABELLA.="<tr><th align='center'>MATERIA</th><th colspan='".$NMaxVoti."'>VALUTAZIONI</th></tr>";
$curmateria="";
$i=0;
$firstline = false;
if (mysqli_num_rows($res) > 0)
{
while($riga = mysqli_fetch_assoc($res))
{
$materia = $riga['Nome'];
if($materia!=$curmateria && $firstline==false)
{
$TABELLA.="<tr><td>".$materia."</td>";
$i = 0;
}
else if($materia!=$curmateria)
{
for($i;$i<$NMaxVoti;$i++)
{
$TABELLA.="<td> </td>";
}
$TABELLA.="</tr><tr><td>".$materia."</td>";
$i = 0;
}
$curmateria = $materia;
$TABELLA.="<td>".$riga['Valutazione']."</td>";
$i++;
$firstline=true;
}
for($i;$i<$NMaxVoti;$i++)
{
$TABELLA.="<td> </td>";
Manuale tecnico - Registro
9
Elettronico
}
}
}
else
{
//caso query non restituisce nessun dato
$TABELLA = "<h3>NESSUN DATO IN TABELLA</h3>\n";
}
?>
$sql = "SELECT Materie.Nome, Voti.Descrizione, Voti.Data, Voti.Valutazione FROM Voti INNER JOIN Studenti ON Studenti.Cod_Studente =
Voti.Cod_Studente INNER JOIN Materie ON Materie.Cod_Materia = Voti.Materie_Cod_Materia WHERE Studenti.Cod_Studente =$id ORDER BY
Materie.Nome ASC ";
$res = mysqli_query($cn, $sql);
if ($res===false)
{
// errore di lettura DB o istruzione SQL
$_SESSION["errore"] = "ATTENZIONE ERRORE DI LETTURA DATABASE";
header('Location:errore.php');
exit();
}
$TABELLA = ""; //conterr una stringa
//verifico il numero di righe restituite
if (mysqli_num_rows($res) > 0)
{
if(isset($_SESSION["Cod_Studente"]))
$id=$_SESSION["Cod_Studente"];
$sql="Select Nome, Cognome, Cod_Classi FROM Studenti WHERE Cod_Studente=$id";
$res=mysqli_query($cn,$sql);
$riga1=mysqli_fetch_assoc($res);
$cod=$riga1["Cod_Classi"];
$indice = 1;
$sql="SELECT * FROM Assenze WHERE Cod_Studente='$id'";;
$res = mysqli_query($cn, $sql);
if ($res===false)
{
// errore di lettura DB o istruzione SQL
$_SESSION["errore"] = "ATTENZIONE ERRORE DI LETTURA DATABASE";
header('Location:errore.php');
exit();
}
$TABELLA = ""; //conterr una stringa
//verifico il numero di righe restituite
if (mysqli_num_rows($res) > 0)
{
$TABELLA = "<table border='2'>\n";
$TABELLA .= "<tr><td><b>Numero assenza</b></td><td><b>Data</b></td><td><b>Causale</b></td><td><b>Descrizione</b></td></tr>";
while ($riga = mysqli_fetch_assoc($res))
{
$TABELLA .= "<tr>";
$TABELLA .= "<td>".$indice."</td>";
$TABELLA .= "<td>".$riga["Data"]."</td>";
$TABELLA .= "<td>".$riga["Causale"]."</td>";
$TABELLA .= "<td>".$riga["Descrizione"]."</td>";
$TABELLA .= "</tr>\n";
$indice++;
}
//chiusura della tabella
$TABELLA .= "</table>\n";
}
else
{
//caso query non restituisce nessun dato
Manuale tecnico - Registro
11
Elettronico
$TABELLA = "<h3>NESSUN ASSENZA EFFETTUATA NELL'ANNO IN CORSO</h3>\n";
}
}
Nellimmagine successiva si pu notare come il pacchetto full calendar permette una seconda struttura per
rendere visibili gli eventi in programma: la pagina caratterizzata dal programma giornaliero che pu essere
selezionato grazie alle frecce situate in alto a destra.
<?php
include('dropClassi.php');
Manuale tecnico - Registro
12
Elettronico
if(isset($_SESSION["Cod_Studente"]))
{
$id=$_SESSION["Cod_Studente"];
$sql="Select * FROM Studenti WHERE Cod_Studente=$id";
$res=mysqli_query($cn,$sql);
$riga1=mysqli_fetch_assoc($res);
}else
{
if(isset($_SESSION["Cod_Docente"]))
{
$docente=true;
$id=$_SESSION["Cod_Docente"];
$sql="Select * FROM Docenti WHERE Cod_Docente=$id";
$res=mysqli_query($cn,$sql);
$riga1=mysqli_fetch_assoc($res);
}
else {
header('Location:index.php');
exit();
}
}
$selezionato=false;
if(isset($_POST['scelta']))
{
$classeid=$_POST['scelta'];
$_SESSION['classeEvento']=$classeid;
$selezionato=true;
$id=0;
$EVENTS = array();
$SQL = "SELECT * FROM Eventi WHERE Cod_Classi='".$classeid."'";
$RES = mysqli_query($cn, $SQL);
if ($RES) {
if (mysqli_num_rows($RES) > 0) {
while ($ROW = mysqli_fetch_array($RES)) {
array_unshift($EVENTS, (object)array(
'id' => $ROW['Cod_Evento'],
'title' => $ROW['Descrizione'],
'start' => $ROW['Data']." ".$ROW['Ora'],
'url' => './vistaEvento.php?id='.$ROW['Cod_Evento']
));
}
}
} else {
}
}
else
{
if(isset($riga1['Cod_Classi'])&&isset($riga1['Cod_Studente']))
{
$classeid=$riga1['Cod_Classi'];
$id=0;
$EVENTS = array();
$SQL = "SELECT * FROM Eventi WHERE Cod_Classi='".$classeid."'";
$RES = mysqli_query($cn, $SQL);
if ($RES) {
if (mysqli_num_rows($RES) > 0) {
while ($ROW = mysqli_fetch_array($RES)) {
array_unshift($EVENTS, (object)array(
'id' => $ROW['Cod_Evento'],
'title' => $ROW['Descrizione'],
'start' => $ROW['Data']." ".$ROW['Ora'],
'url' => './vistaEvento.php?id='.$ROW['Cod_Evento']
));
}
}
} else {
}
Manuale tecnico - Registro
13
Elettronico
}
}
$_SESSION['classeEvento']=$classeid+0;
if($_SESSION['Tipo']=='D')
{
$docente=true;
}
?>
<html lang="it">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Agenda</title>
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet" >
<link href="fullcalendar/fullcalendar.css" rel="stylesheet" >
<link href="css/styles.css" rel="stylesheet" >
<link href="css/footer.css" rel="stylesheet" type="text/css">
<link rel="shortcut icon" type="image/x-icon" href="image/favicon.ico">
<script src="JQuery/jquery-3.2.0.min.js"></script>
<script src="JQuery/moment.js"></script>
<script src="JQuery/bootstrap-datetimepicker.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
<script src="JQuery/jquery.mousewheel.js"></script>
</head>
<body>
<section>
<script type="text/javascript">
$(document).ready(function() { $(function() {
$('#datetimepicker1').datetimepicker({
viewMode: 'years',
format: 'YYYY-MM-DD'
});
});
});
</script>
</div>
<div class="container">
<div class="page-header">
<h1>Agenda</h1><?php if($selezionato){ ?>
<div class="text-right">
</div>
<?php } ?>
</div>
<div class="container-fluid">
<div id="calendar"></div>
</div>
</div>
</section>
<script src="bootstrap/js/jquery.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
<script src="fullcalendar/lib/moment.min.js"></script>
Manuale tecnico - Registro
15
Elettronico
<script src="fullcalendar/fullcalendar.js"></script>
<script src="fullcalendar/locale/it.js"></script>
<script type="text/javascript">
$(document).ready(function () {
$('#calendar').fullCalendar({
locale: 'it',
header: {
left: 'title',
center: 'month,listDay, userSub,dipSub',
right: 'prev,today,next'
},
events: <?php echo json_encode($EVENTS); ?>
});
});
</script>
</body>
</html>
if(isset($_GET[id]))
{
$_SESSION['id']=$_GET[id];
$sql = "SELECT * FROM Eventi WHERE Cod_Evento = $_GET[id]";
$res=mysqli_query($cn,$sql);
if($res===false)
{
$_SESSION["errore"] = "ATTENZIONE ERRORE DI LETTURA DATABASE";
header('Location:errore.php');
exit();
}
$risultato=mysqli_fetch_array($res);
$data=$risultato['Data'];
$ora=$risultato['Ora'];
$descrizione=$risultato['Descrizione'];}
3.5) DIDATTICA
Nella didattica andremo a visualizzare i file relativi alla classe dello studente attualmente in sessione,
cliccando sotto la colonna con intestazione file sar possibile scaricarlo.
Manuale tecnico - Registro
16
Elettronico
if(isset($_SESSION['Cod_Studente']))
{
$id=$_SESSION['Cod_Studente'];
$sql="UPDATE Studenti SET email='$email', password='$pw', Residenza='".$residenza."', Telefono='$telefono' WHERE
Cod_Studente=$id";
$res=mysqli_query($cn,$sql);
}
La gestione degli errori di inserimento viene gestita attraverso un blocco di codice che permette di
effettuare la query solo se tutti i campi sono stati compilati:
if(isset($_POST['residenza']) && isset($_POST['telefono'])
&& isset($_POST['mail']) && isset($_POST['pw']))
{
if (!empty($_POST['residenza']))
{
$residenza = $_POST['residenza'];
if (!empty($_POST['pw']))
{
$pw = $_POST['pw'];
} else $errpw= " *INSERIRE PASSWORD*";
Manuale tecnico - Registro
18
Elettronico
4.0) DOCENTI
4.1) HOME
Laccesso come utente di tipo docente implica una serie di permessi che permette la gestione dei dati della
classe in cui linsegnante insegna. Attraverso la barra di navigazione posta a destra dello schermo si possono
selezionare diverse attivit da effettuare le quali possono permettere:
- Inserimento e visualizzazione dei voti
- Inserimento assenza dellalunno
- Visualizzazione e inserimento (modifica ed eliminazione ) degli eventi nellagenda
- Inserimento delle note disciplinari della classe
- Gestione del profilo
- Logout dal portale
Nella parte a destra dello schermo presente un pannello che fornisce la possibilit di visualizzare quali
sono le classi in cui quel docente insegna e di quale indirizzo di specializzazione appartengono. La selezione
delle stesse viene effettuata tramite la seguente query:
$sql="Select Classi.Classe, Classi.Indirizzo FROM Classi inner join Segue ON Classi.Cod_Classi=Segue.Cod_Classi INNER JOIN Docenti on
Docenti.Cod_Docente=Segue.Cod_Docente WHERE Docenti.Cod_Docente='$cod'";
if(!isset($_SESSION['Cod_Docente'])&&!isset($_SESSION['Cod_Studente']))
{
header('Location:index.php');
exit();
}
if(isset($_SESSION['Cod_Docente']))
{
$cod= $_SESSION['Cod_Docente'];
$sql = "SELECT * from Classi INNER JOIN Segue ON Segue.Cod_classi = Classi.Cod_classi WHERE Segue.Cod_Docente = $cod";
$res = mysqli_query($cn, $sql);
if ($res===false)
{
// errore di lettura DB o istruzione SQL
$_SESSION["errore"] = "ATTENZIONE ERRORE DI LETTURA DATABASE";
header('Location:errore.php');
exit();
}
$dropdown="";
$i=0;
while($riga=mysqli_fetch_assoc($res))
{
$dropdown.="<option value=".$riga['Cod_Classi']."$".$i.">".$riga['Classe']."</option>";
$classi[]=$riga['Cod_Classi'];
$i++;
}
}
?>
Questa pagina permette di selezionare le classi in cui il docente insegna ed inserisce allinterno del
componente i valori (ossia i nomi delle classi e la sezione).
dropMaterie.php
<?php
include("dropClassi.php");
$cod=$_SESSION["Cod_Docente"];
for($i=0;$i<count($classi);$i++)
{
$sql="SELECT Materie.Nome as 'Materia', Materie.Cod_Materia as 'CodiceMateria', Abbinamento.Cod_Classi as 'CodiceClasse',
Insegna.Cod_Docente as 'CodiceDocente' FROM Insegna INNER JOIN Materie ON Materie.Cod_Materia=Insegna.Cod_Materia INNER JOIN
Abbinamento ON Abbinamento.Cod_Insegna=Insegna.Cod_Insegna WHERE Insegna.Cod_Docente=$cod AND Abbinamento.Cod_Classi=$classi[$i]";
?>
In base a quale classe stata selezionata vengono presi le materie e inserite allinterno del drop-down. Il
tutto salvato allinterno di una matrice di dati.
La loro visualizzazione viene effettuata nella pagina dei voti e, nel momento in cui viene confermata
lopzione scelta, vengono visualizzati i voti della classe:
Manuale tecnico - Registro
20
Elettronico
<?php
session_start();
include("DatiConnessione.php");
$cn = mysqli_connect($HOSTDB,$USERDB,$PASSDB,$NAMEDB);
if (!$cn)
{
$_SESSION["errore"] = "ATTENZIONE ERRORE DI CONNESSIONE DATABASE";
header('Location:agenda.php');
exit();
}
$mostra=true;
if(!isset($_SESSION['Cod_Docente']))
{
header('Location:index.php');
exit();
$cod= $_SESSION['Cod_Docente'];
$bottone=false;
if(isset($_SESSION["Cod_Docente"]))
{
$id=$_SESSION["Cod_Docente"];
$sql="SELECT * FROM Docenti WHERE Cod_Docente=$cod";
$res=mysqli_query($cn,$sql);
if(mysqli_num_rows($res)==1)
{
$nomedoc=mysqli_fetch_assoc($res);
}
}
Manuale tecnico - Registro
21
Elettronico
include("dropMaterie.php");
if(isset($_POST['scelta']))
{
$mostra=false;
$abilita=false;
}
if(isset($materia)&&isset($id)&&!empty($materia)&&!empty($id))
{
$_SESSION['CODmateria']=$materia;
$_SESSION['CODclasse']=$id;
$sql="SELECT MAX(Conta.NumVoti) AS NMaxVoti FROM (
SELECT COUNT(Voti.Valutazione) AS NumVoti FROM Voti
INNER JOIN Studenti ON Studenti.Cod_Studente = Voti.Cod_Studente
INNER JOIN Materie ON Materie.Cod_Materia = Voti.Materie_Cod_Materia
WHERE Materie.Cod_Materia=$materia and Studenti.Cod_Classi=$id
GROUP BY Studenti.Nome) AS Conta";
$res = mysqli_query($cn, $sql);
if (!$res) {
// errore di lettura DB o istruzione SQL
$_SESSION["errore"] = "ATTENZIONE ERRORE DI LETTURA DATABASE";
header('Location:login.php');
exit();
} else {
$row = mysqli_fetch_assoc($res);
$NMaxVoti = $row['NMaxVoti'];
}
$sql="SELECT Studenti.Cognome,Studenti.Nome, Valutazione
FROM Voti INNER JOIN Studenti ON Studenti.Cod_Studente = Voti.Cod_Studente
INNER JOIN Materie ON Materie.Cod_Materia = Voti.Materie_Cod_Materia INNER JOIN Classi ON Classi.Cod_Classi = Studenti.Cod_Classi
WHERE Materie.Cod_Materia=$materia and Classi.Cod_Classi=$id
ORDER BY Studenti.Cognome, Studenti.Nome ASC";
$cognome = $riga['Cognome'];
$nome=$riga['Nome'];
$TABELLA.="<tr><td>".$cognome."</td>";
$TABELLA.="<td>".$nome."</td>";
$i = 0;
}
else if($cognome!=$curcognome&&$nome!=$curcognome)
{
for($i;$i<$NMaxVoti;$i++)
{
$TABELLA.="<td> </td>";
}
$TABELLA.="</tr><tr><td>".$cognome."</td>";
$TABELLA.="<td>".$nome."</td>";
$i = 0;
}
$curcognome = $cognome;
$curnome = $nome;
$TABELLA.="<td>".$riga['Valutazione']."</td>";
$i++;
$firstline=true;
}
for($i;$i<$NMaxVoti;$i++)
{
$TABELLA.="<td> </td>";
}
}
else
{
//caso query non restituisce nessun dato
$TABELLA = "<h3>NESSUN DATO IN TABELLA</h3>\n";
}
?>
<script>
function show_dropdown2()
{
for(i=0;i<<?php echo count($classi);?>;i++)
{
var x = document.getElementById(i).style.display="none";
}
var x = document.getElementById("dropdown1").selectedIndex;
document.getElementById(x-1).style.display = "block";
}
</script>
Manuale tecnico - Registro
23
Elettronico
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
<link href="bootstrap/css/bootstrap.min.css" rel="stylesheet">
<link href="css/styles.css" rel="stylesheet" >
<link href="css/footermain.css" rel="stylesheet" type="text/css">
<link href="css/stylevoti.css" rel="stylesheet" >
<link rel="shortcut icon" type="image/x-icon" href="image/favicon.ico">
<style>
body{
position: center;
}
</style>
<body>
<nav class="navbar navbar-inverse">
<div class="container-fluid">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-sidebar-navbar-collapse-1" >
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="collapse navbar-collapse" id="bs-sidebar-navbar-collapse-1">
<ul class="nav navbar-nav">
<li class="active"><a href="votiClasse.php">VOTI</a></li>
<li><a href="inserimentoAssenza.php">ASSENZE</a></li>
<li><a href='agenda.php'>AGENDA</a></li>
<li><a href='workinprogress.php'>DIDATTICA</a></li>
<li><a href='noteDocenti.php'>NOTE</a></li>
<li><a href='myaccount.php'>PROFILO</a></li>
<li><a href='logout.php'>LOGOUT</a></li>
</ul>
</div>
</div>
</nav>
<div class="container">
<div class="form-group">
<?php if($mostra)
{?>
<div class="container">
<div class="table-responsive">
<table class="table table-striped">
<tbody>
<?php echo $TABELLA; ?>
</tbody>
</table>
</div>
<?php if($bottone)
{
?>
<a href="inserisciVoto.php" class="btn btn-info" role="button">INSERISCI VOTO</a><?php } ?>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="bootstrap/js/bootstrap.min.js"></script>
<script>
show_dropdown2();
</script>
<br>
</body>
</head>
</html>
dropStudenti.php
<?php
include("dropClassi.php");
$cod=$_SESSION["Cod_Docente"];
for($i=0;$i<count($classi);$i++)
{
$sql="SELECT Studenti.Cognome as 'Cognome', Studenti.Nome as 'Nome', Studenti.Cod_Studente as 'Cod_Studente' FROM Studenti WHERE
Studenti.Cod_Classi=$classi[$i]";
?>
Manuale tecnico - Registro
25
Elettronico
La pagina dellinserimento cos strutturata mentre la richiesta al database viene effettuata da una nuova
pagina alla quale vengono passati i valori in POST dalla schermata successiva:
<?php
session_start();
include('DatiConnessione.php');
$cn=mysqli_connect($HOSTDB,$USERDB,$PASSDB,$NAMEDB);
if (!$cn)
{
// errore di connessione DB
$_SESSION["errore"] = "ATTENZIONE ERRORE DI CONNESSIONE DATABASE";
header('Location:login.php');
exit();
}
if(isset($_POST['voto'])&&isset($_POST['data'])&&!empty($_POST['voto'])&&!empty($_POST['data']))
{
$descr=$_POST['descr'];
$studente=$_POST['studente'];
$materia=$_SESSION['CODmateria'];
$sql = "INSERT INTO Voti (Valutazione, Descrizione, Data, Cod_Studente, Materie_Cod_Materia) VALUES (".$_POST['voto'].",'".$descr."',date('".
$_POST['data']."'),".$studente.",".$materia.");";
$res=mysqli_query($cn,$sql);
header('Location:votiClasse.php');
exit();
}
else
{
$_SESSION['errore']="Errore: campi non completi";
header('Location:errore.php');
exit();
}?>
4.3) INSERIMENTO ASSENZA
Con la stessa tecnica dei voti viene gestita lassenza di uno studente: nella pagina principale vengono
visualizzati la classe e gli studenti e, una volta selezionati, si passa alla pagina di inserimento.
Manuale tecnico - Registro
26
Elettronico
if (!$cn)
{
// errore di connessione DB
$_SESSION["errore"] = "ATTENZIONE ERRORE DI CONNESSIONE DATABASE";
header('Location:login.php');
exit();
}
if(isset($_POST['causale'])&&isset($_POST['descr'])&&!empty($_POST['causale'])&&!empty($_POST['descr']))
{
$data= $_POST['data'];
$causale=$_POST['causale'];
$descr=$_POST['descr'];
$sql = "INSERT INTO Assenze (Data, Causale, Descrizione, Cod_Studente) VALUES ( NOW(), '".$causale."','".$descr."', ".$_SESSION['studente'].");";
$res=mysqli_query($cn,$sql);
header('Location:inserimentoAssenza.php');
exit();
}
else
{
$_SESSION['errore']="Errore: campi non completi";
header('Location:errore.php');
exit();
}
?>
<script src="bootstrap/datetimepicker/bootstrap-datetimepicker.min.js"></script>
<script type="text/javascript">
$(document).ready(function() {
$('#datetimepicker').datetimepicker({
viewMode: 'years',
format: 'YYYY-MM-DD'
});
});
</script>
La gestione del datatimepicker viene effettuata con una libreria inclusa e un codice in formato javascript.
Tutti i campi sono obbligatori e, cliccando su CONFERMA, viene effettuato linserimento e visualizzata la
nuova agenda aggiornata:
<?php
session_start();
include('DatiConnessione.php');
$cn=mysqli_connect($HOSTDB,$USERDB,$PASSDB,$NAMEDB);
if (!$cn)
Manuale tecnico - Registro
28
Elettronico
{
// errore di connessione DB
$_SESSION["errore"] = "ATTENZIONE ERRORE DI CONNESSIONE DATABASE";
header('Location:login.php');
exit();
}
if(isset($_POST['data'])&&isset($_POST['ora'])&&isset($_POST['descr'])&&!empty($_POST['data'])&&!empty($_POST['ora'])&&!
empty($_POST['descr']))
{
$data= $_POST['data'];
$ora=$_POST['ora'];
$descr=$_POST['descr'];
$sql = "INSERT INTO Eventi (Data, Descrizione, Ora, Cod_Classi) VALUES (date('".$data."'), '".$descr."', time('".$ora."'),'".
$_SESSION['classeEvento']."');";
$res=mysqli_query($cn,$sql);
header('Location:agenda.php');
exit();
}
else
{
$_SESSION['errore']="Errore: campi non completi";
header('Location:errore.php');
exit();
}
?>
4.4.2) MODIFICA ED ELIMINA EVENTO
Cliccando sullevento si viene reindirizzati sulla pagina di visualizzazione dettagliata dello stesso: essendo
loggato un docente esso ha il permesso di eliminarlo (ELIMINA) oppure di modificarlo (MODIFICA): nel
secondo caso verr mandato su una nuova pagina la quale permetter di effettuare le opportune modifiche:
eliminaEvento.php
<?php
session_start();
include('DatiConnessione.php');
$cn=mysqli_connect($HOSTDB,$USERDB,$PASSDB,$NAMEDB);
if (!$cn)
{
// errore di connessione DB
$_SESSION["errore"] = "ATTENZIONE ERRORE DI CONNESSIONE DATABASE";
header('Location:login.php');
exit();
}
?>
updateEvento.php
<?php
session_start();
include('DatiConnessione.php');
$cn=mysqli_connect($HOSTDB,$USERDB,$PASSDB,$NAMEDB);
if (!$cn)
{
// errore di connessione DB
$_SESSION["errore"] = "ATTENZIONE ERRORE DI CONNESSIONE DATABASE";
header('Location:login.php');
exit();
}
$data= $_POST['data'];
$ora=$_POST['ora'];
$descr=$_POST['descr'];
?>
I dati dellevento sono captati tramite query che utilizzano il codice identificativo che viene memorizzato
sullURL della pagina e preso in GET (non un dato sensibile).
<?php
include('dropClassi.php'); //passaggio anche della connessione e relativo codice docente
if(isset($_SESSION["Cod_Docente"]))
{
$mostra=true;
$id=$_SESSION["Cod_Docente"];
$sql="Select Nome, Cognome FROM Docenti WHERE Cod_Docente=$id";
$res=mysqli_query($cn,$sql);
$riga1=mysqli_fetch_assoc($res);
if(isset($_POST['scelta']))
Manuale tecnico - Registro
30
Elettronico
{
$mostra=false;
$classe=$_POST['scelta'];
$_SESSION['CodiceClasse']=$classe;
$sql="SELECT * FROM Note WHERE Cod_Classi='$classe'";
$res = mysqli_query($cn, $sql);
$TABELLA = ""; //conterr una stringa
//verifico il numero di righe restituite
if (mysqli_num_rows($res) > 0)
{
$TABELLA .= "<tr>";
$TABELLA .= "<td>".$riga["Data"]."</td>";
$TABELLA .= "<td>".$riga["Descrizione"]."</td>";
$TABELLA .= "</tr>\n";
}
<?php
session_start();
include("DatiConnessione.php");
$cn = mysqli_connect($HOSTDB,$USERDB,$PASSDB,$NAMEDB);
if (!$cn)
{
$_SESSION["errore"] = "ATTENZIONE ERRORE DI CONNESSIONE DATABASE";
header('Location:index.php');
exit();
}
if(isset($_POST['descr'])&&isset($_POST['data'])&&!empty($_POST['descr'])&&!empty($_POST['data']))
{
$descr=$_POST['descr'];
Manuale tecnico - Registro
31
Elettronico
$classe=$_SESSION['CodiceClasse'];
echo $classe;
$sql = "INSERT INTO `Note` (`Descrizione` ,`Data`,`Cod_Classi`) VALUES ('".$descr."','".$_POST['data']."','".$classe."')";
$res=mysqli_query($cn,$sql);
header('Location:noteDocenti.php');
exit();
}
else
{
$_SESSION['errore']="Errore: campi non completi";
header('Location:errore.php');
exit();
}
?>
if(isset($_SESSION["Cod_Studente"]))
{
$id=$_SESSION["Cod_Studente"];
$sql="SELECT * FROM Studenti WHERE Cod_Studente='$id'";
Manuale tecnico - Registro
32
Elettronico
$res=mysqli_query($cn,$sql);
if(mysqli_num_rows($res)==1)
{
$riga=mysqli_fetch_assoc($res);
}
}
else
{
if(isset($_SESSION["Cod_Docente"]))
{
$docente=true;
$id=$_SESSION["Cod_Docente"];
$sql="SELECT * FROM Docenti WHERE Cod_Docente='$id'";
$res=mysqli_query($cn,$sql);
if(mysqli_num_rows($res)==1)
{
$riga=mysqli_fetch_assoc($res);
}
}
5.0) LOGOUT
Lultima opzione della barra di navigazione la logout generale.
E una pagina php non visibile allutente, che elimina tutti i dati in sessione e reindirizza alla pagina di login.
<?php
session_start();
session_destroy();
unset($_SESSION["Cod_Studente"]);
unset($_SESSION["Cod_Docente"]);
header('Location:index.php');
exit();
?>