Sei sulla pagina 1di 32

Manuale tecnico - Registro

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

3.3 - Visualizzazione assenze pag.13


3.4 - Visualizzazione agenda pag.15
3.4.1 - Dettaglio evento pag.23
3.5 - Didattica pag.24
3.6 - Note disciplinari pag.25
3.7 - Gestione profilo pag.25
4.0 - Docente pag.27
4.1 - Home pag.27
4.2 - Visualizzazione e inserimento voti pag.27
4.2.1 - Inserimento voto pag.34
4.3 - Inserimento assenza pag.35
4.4 - Visualizzazione agenda pag.37
4.4.1 - Inserimento voto pag.37
4.4.2 - Modifica e elimina evento
pag.38
4.5 - Note disciplinari pag.40
4.6 - Gestione profilo pag.42
5.0 - Logout pag.43

1.0) ANALISI E STRUTTURA DATABASE

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.

SCHEMA E/R E LOGICO


Manuale tecnico - Registro
4
Elettronico

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);

if (mysqli_num_rows($res) != 1) //controllo se esiste un docente


{
$_SESSION["errore"] = "ERRORE GENERICO";
header('Location:errore.php');
exit();
}
else
{
// stato trovato un DOCENTE
$riga = mysqli_fetch_assoc($res); // ritorna un array associativo
if ($pw == $riga["password"])
{
// Password corretta
$_SESSION["email"] = $email;
$_SESSION["Cod_Docente"]=$riga["Cod_Docente"];
$_SESSION['Tipo']="D";
header('Location:homedocenti.php');
exit();
}
else
{
// Password errata
$_SESSION["errore"] = "ATTENZIONE PASSWORD ERRATI!";
unset($_POST["password"]);
Manuale tecnico - Registro
6
Elettronico
header('Location:index.php');
exit();
}
}
}
else
{
// stato trovato uno STUDENTE

$riga = mysqli_fetch_assoc($res); // ritorna un array associativo


if ($pw == $riga["password"])
{
// Password corretta
$_SESSION["email"] = $email;
$_SESSION["Cod_Studente"]=$riga["Cod_Studente"];
$_SESSION['Tipo']="S";
$_SESSION["Cod_Studente"] = $riga["Cod_Studente"];
header('Location:homestudenti.php');
exit();
} else
{
// Password errata
$_SESSION["errore"] = "ATTENZIONE PASSWORD ERRATI!";
unset($_POST["password"]);
header('Location:index.php');
exit();
}
}

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:

$sql="Select * FROM Eventi WHERE Eventi.Cod_Classi=$classe AND WEEK(Data)=WEEK(CURRENT_DATE()) ORDER BY Data";

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 ";

$res = mysqli_query($cn, $sqlVoti);


if ($res===false)
{
// errore di lettura DB o istruzione SQL
$_SESSION["errore"] = "ATTENZIONE ERRORE DI LETTURA DATABASE";
header('Location:errore.php');
exit();
}

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";
}
?>

3.2.1) VISUALIZZAZIONE DETTAGLIO VOTI


Cliccando sul bottone VISUALIZZAZIONE DETTAGLIO nella pagina precedente andremo a visualizzare i
voti in dettaglio, ovvero tramite la query le valutazioni saranno caratterizzate, oltre che dalla materia,
anche dalla data di svolgimento della prova e di uneventuale descrizione.

$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)
{

$TABELLA = "<table border='2'>\n";


$TABELLA .= "<tr><td><b>Materia</b></td><td><b>Data</b></td><td><b>Descrizione</b></td><td><b>Valutazione</b></td></tr>";

while ($riga = mysqli_fetch_assoc($res))


{
$TABELLA .= "<tr>";
$TABELLA .= "<td>".$riga["Nome"]."</td>";
$TABELLA .= "<td>".$riga["Data"]."</td>";
$TABELLA .= "<td>".$riga["Descrizione"]."</td>";
$TABELLA .= "<td>".$riga["Valutazione"]."</td>";
$TABELLA .= "</tr>\n";
}
Manuale tecnico - Registro
10
Elettronico
//chiusura della tabella
$TABELLA .= "</table>\n";
}
else
{
//caso query non restituisce nessun dato
$TABELLA = "<h3>NESSUN DATO IN TABELLA</h3>\n";
}

3.3) VISUALIZZAZIONE ASSENZE


Questa sezione come facilmente intuibile elencher le assenze effettuate dallo studente, il layout sar
molto simile al precedente con una tabella nella quale saranno inserite le caratteristiche prese sempre
tramite uninterrogazione al database.

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";
}
}

3.4) VISUALIZZAZIONE AGENDA


Per la creazione di una pagina che svolgesse la funzione di agenda ci siamo serviti di un pacchetto
precompilato di bootstrap, il full calendar.
Tramite lutilizzo di questo software grafico precompilato abbiamo realizzato una pagina nella quale
ogni riga della tabella rappresenta un giorno della settimana, indicato nellintestazione in alto.
allinterno di queste caselle andranno a posizionarsi gli eventi relativi a quello stesso giorno, nellaltra
visualizzazione si possono vedere gli eventi giorno per giorno.
Nella parte PHP di questa pagina abbiamo anche il controllo che identifica o lo studente o il docente ( i
dati sono memorizzati in sessione), a seconda dellutente che ha effettuato laccesso avremo diverse
funzionalit. In questa situazione vengono visualizzati tutti gli eventi relativi alla classe di appartenenza
dello studente automaticamente. Inoltre possibile ottenere una visualizzazione pi ottimale cliccando
sullevento preso in considerazione.

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>

<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>
<?php
if($docente)
{
?>

<div class="collapse navbar-collapse" id="closeButton">


<div class="collapse navbar-collapse" id="bs-sidebar-navbar-collapse-1">
<a class="navbar-brand" href="homedocenti.php"><?php echo $riga1["Nome"]; echo " "; echo $riga1["Cognome"];?></a>
<ul class="nav navbar-nav">
<li><a href="votiClasse.php">VOTI</a></li>
<li><a href="inserimentoAssenza.php">ASSENZE</a></li>
<li class="active"><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>
<?php
}
else {
?>
Manuale tecnico - Registro
14
Elettronico
<div class="collapse navbar-collapse" id="closeButton">
<div class="collapse navbar-collapse" id="bs-sidebar-navbar-collapse-1">
<a class="navbar-brand" href="homestudenti.php"><?php echo $riga1["Nome"]; echo " "; echo $riga1["Cognome"];?></a>
<ul class="nav navbar-nav">
<li><a href="visualizzaVoti.php">VOTI</a></li>
<li><a href="assenze.php">ASSENZE</a></li>
<li class="active"><a href='agenda.php'>AGENDA</a></li>
<li><a href='Didattica.php'>DIDATTICA</a></li>
<li><a href='note.php'>NOTE</a></li>
<li><a href='myaccount.php'>PROFILO</a></li>
<li><a href='logout.php'>LOGOUT</a></li>
</ul>
</div>
</div>
<?php
}
?>
</div>
</div>
</nav>
<div class="container">
<form method="post" action="agenda.php">
<div class="container">
<?php
if($docente&&!$selezionato)
{
?>
<select class="form-control" id="dropdown1" name="scelta">
<option role="separator" class="divider" disabled></option>
<?php echo $dropdown;?>
</select>
<br>
<button type="submit" class="btn btn-info btn-sm">CONFERMA</button>
<?php } ?>
</div>
</form>

<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">

<a href="inserimentoEvento.php" class="btn btn-info" role="button">NUOVO EVENTO</a>

</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>

3.4.1) DETTAGLIO EVENTO


Questa pagina condivisa tra docenti e studenti come la precedente, quindi ci sar il medesimo
controllo, in questo caso lo studente non sar in grado di modificare o eliminare un evento, ma solo di
poter accedere nella visualizzazione dettagliata e tornare allagenda principale tramite lapposito
bottone.
In questo caso il codice dellevento viene preso nellaltra pagina tramite il metodo get, in seguito questo
verr inserito allinterno di una query che in output fornir i dati relativi a quellevento.

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

PAGINA NON ANCORA IMPLEMENTATA

3.6) NOTE DISCIPLINARI


Nella pagina note verranno visualizzate le note ottenute dalla classe, se risulter uno specifico alunno
coinvolto, questo dovr essere inserito nella descrizione del rapporto disciplinare.
Anche in questo caso i dati visualizzati in tabella saranno presi dal database tramite una query.
Il codice della classe rilevato tramite il codice dello studente salvato in sessione attraverso
uninterrogazione SQL che permette, inoltre, la visualizzazione del nome nella barra di navigazione
superiore.

La query di selezione la seguente:


$sql="SELECT * FROM Note WHERE Cod_Classi='$cod'";
3.7) GESTIONE PROFILO
In questa sezione possibile vedere i propri dati personali presi dal database attraverso il proprio codice
salvato in sessione, oltre alla visualizzazione sar possibile anche effettuare laggiornamento di alcuni di
essi, in particolare: residenza, recapito telefonico, email, password e cliccare in seguito sul bottone
INVIA.
Manuale tecnico - Registro
17
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'];

} else $errresidenza = " *INSERIRE RESIDENZA*";


if (!empty($_POST['telefono']))
{
$telefono = $_POST['telefono'];
} else $errtelefono = " *INSERIRE TELEFONO*";
if (!empty($_POST['mail']))
{
$email = $_POST['mail'];
} else $errmail = " *INSERIRE E-MAIL*";

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'";

4.2) VISUALIZZAZIONE ED INSERIMENTO VOTI


Tenendo conto che, seguendo lanalisi, un docente pu insegnare in pi classi e in una classe egli pu
insegnare pi materie, occorre una selezione della classe e della materia per il quale debba visualizzare e/o
inserire i voti. La soluzione a questo problema stata risolta attraverso lutilizzo di due drop-down i quali
dati interni vengono modificati con il modificarsi della precedente drop-down. Sono presenti perci due
pagine le quali ne permettono la gestione:
dropClassi.php
<?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();
}
Manuale tecnico - Registro
19
Elettronico

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]";

$dropdown2[$i] = "<div class='div-select-materie' id='$i'><select class='form-control' name='materia$".$i."'>\n";


$res=mysqli_query($cn,$sql);
while($riga=mysqli_fetch_assoc($res))
{
$dropdown2[$i].="<option value=".$riga['CodiceMateria'].">".$riga['Materia']."</option>\n";
$materie[$i][] = $riga['CodiceMateria'];
}
$dropdown2[$i].="</select></div>\n\n";
}

?>
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;

$classe = split('[$]', $_POST['scelta']);


$materia = $_POST['materia$'.$classe[1]];
$id=$classe[0];

$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";

$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

$TABELLA.="<tr><th align='center'>COGNOME</th> <th align='center' >NOME</th><th colspan='".$NMaxVoti."'>VALUTAZIONI</th></tr>";


$curcognome="";
$curnome="";
$i=0;
$firstline = false;
if (mysqli_num_rows($res) > 0)
{
while($riga = mysqli_fetch_assoc($res))
{
Manuale tecnico - Registro
22
Elettronico

$cognome = $riga['Cognome'];
$nome=$riga['Nome'];

if($cognome!=$curcognome&&$nome!=$curnome && $firstline==false)


{

$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>

<a class="navbar-brand" href="homedocenti.php"><?php echo $nomedoc["Nome"]; echo " "; echo


$nomedoc["Cognome"];?></a>

</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)
{?>

<form method="post" action="votiClasse.php">


<select class="form-control" id="dropdown1" name="scelta" onchange="show_dropdown2()">
<option role="separator" class="divider" disabled></option>
<?php echo $dropdown;?>
</select>
<br>
<?php
for($i=0;$i<count($classi);$i++)
echo $dropdown2[$i];
?>
<br>
<button type="submit" class="btn btn-primary">INVIA</button>
</form>
<?php }
else
{?>
<div class="page-header">
<h1>Voti della classe</h1>
Manuale tecnico - Registro
24
Elettronico
</div>
<?php
$bottone=true;
}?>
</div>
</div>

<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>

4.2.1) INSERIMENTO VOTO


Linserimento del voto viene effettuato successivamente alla selezione della classe e della materia relativa:
cliccando sul bottone INSERISCI VOTO si viene reindirizzati ad una nuova pagina la quale permette
linserimento dello stesso attraverso una drop-down degli studenti e una dei voti. La prima, come le
precedenti, creata da una pagina esterna:

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]";

$dropdown2[$i] = "<div class='div-select-studenti' id='$i'><select class='form-control' name='studente$".$i."'>\n";


$res=mysqli_query($cn,$sql);
while($riga=mysqli_fetch_assoc($res))
{
$dropdown2[$i].="<option value=".$riga['Cod_Studente'].">".$riga['Cognome']." ".$riga['Nome']."</option>\n";
$studenti[$i][] = $riga['Cod_Studente'];
}
$dropdown2[$i].="</select></div>\n\n";
}

?>
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

La causale un campo obbligatorio da compilare e rappresenta la causa dellassenza in modo sintetico


(trasporto, salute, ecc); la descrizione serve per ampliare le motivazioni della causale ma non
obbligatoria.
Linserimento viene gestito da unaltra pagina PHP la quale effettua loperazione di richiesta al db:
<?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['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();
}
?>

4.4) VISUALIZZAZIONE AGENDA


La visualizzazione degli eventi nellagenda relativa ad una classe specifica: per questo motivo prima di
osservare gli eventi nella tabella occorre selezionare la classe. Una volta inserita verr visualizzata lagenda
con il programma relativo ed un bottone che permette linserimento di un nuovo evento.
Manuale tecnico - Registro
27
Elettronico

4.4.1) INSERIMENTO EVENTO


Linserimento viene effettuato in una nuova pagina e permette di andare a compilare i campi di data
(attraverso un datatimepicker presente nel pacchetto di bootstrap), lora di esecuzione (formato OO:MM:SS)
e la descrizione.

<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();
}

$sql = "DELETE FROM Eventi WHERE Cod_Evento=".$_SESSION['id'].";";


$res=mysqli_query($cn,$sql);
Manuale tecnico - Registro
29
Elettronico
header('Location:agenda.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'];

$sql = "UPDATE Eventi SET Data=date('".$data."'), Ora=time('".$ora."'), Descrizione='".$descr."' WHERE Cod_Evento=".$_SESSION['id'].";";


echo $sql;
$res=mysqli_query($cn,$sql);
header('Location:agenda.php');
exit();

?>
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).

4.5) NOTE DISCIPLINARI


Nella pagina relativa alla gestione delle note possibile visualizzarle dopo aver selezionato la classe. La
tabella rappresenta la data in cui stata inserita e il testo del provvedimento.

<?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 = "<table border='2'>\n";


$TABELLA .= "<tr><td><b>Data</b></td><td><b>Nota</b></td></tr>";

while ($riga = mysqli_fetch_assoc($res))


{

$TABELLA .= "<tr>";
$TABELLA .= "<td>".$riga["Data"]."</td>";
$TABELLA .= "<td>".$riga["Descrizione"]."</td>";

$TABELLA .= "</tr>\n";
}

//chiusura della tabella


$TABELLA .= "</table>\n";
}
else
{
//caso query non restituisce nessun dato
$TABELLA = "<h3>NESSUN DATO IN TABELLA</h3>\n";
}
}
}
?>
Il bottone INSERISCI NOTA permette di crearne una nuova. Sia la data che la descrizione sono obbligatori e,
una volta inseriti, verr mostrata la tabella aggiornata.

<?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();
}

?>

4.6) GESTIONE PROFILO


La pagina di gestione del profilo con i vari dati personali condivisa da studente e docente, il
funzionamento il medesimo in quanto solo i campi di residenza, recapito telefonico, email e password
saranno modificabili.
Di conseguenza eccetto il controllo in sessione se al momento connesso un docente o uno studente, il
codice per laggiornamento sar lo stesso dato che condividono gli stessi dati.

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();

?>