[PHP] Sistema di gestione presenze

Stato
Chiusa ad ulteriori risposte.

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
Buongiorno a tutti.
Sto realizzando un sistema di gestione presenze (per una speciale associazione scolastica che lavora con i bimbi down/autistici) con php/mysql/bootstrap/jquery datatable, che gira su un server intranet LAMP UBUNTU, modificando il codice (quando riesco) di uno script trovato in rete per adattarlo alle mie esigenze.
Il sistema sinora funziona "abbastanza" bene (non proprio del tutto), nel senso che registra nella tabella secondaria "time" (collegata alla tabella principale "student" contenente l'anagrafica): id, codice utente, nome e cognome, data e ora rilevati dell'evento attraverso la lettura di un barcode associato allo studente e restituisce con Javascript (attraverso uno specifico file login.js) un alert temporaneo al momento dell'inserimento, riportando la dicitura "è entrato ... il ...giorno... alle ore ..." .
Mi servirebbe poter aggiungere nella tabella "time" un campo che, nel momento in cui registro l'ingresso dello studente con il barcode, scriva il numero della lezione di quell'ID incrementandolo di 1 (da 1 a 8) e, giunto alla 8 (per quella riga) avvisi nello steso alert anzidetto il numero della lezione e che quella registrata è l'ultima lezione (di quella serie).
Per la serie di lezioni successive si agirebbe manualmente, reimpostando i giusti valori nei campi corrispondenti dell'anagrafica principale (data di inizio, giorno della settimana, ora programmata, numero 1 e così via).

Il bottone che registra la presenza è php (type = "button" id = "login"), non ha submit e quando cliccato aziona un file login.php dove ci sono alcune variabili per data e ora (+ una fetch_array che unisce i campi separati nome e cognome) e un paio di query (una SELECT che recupera i dati dello studente e la seconda INSERT che scrive i dati nella tabella "time" del DB), oltre a una echo .$variabile. + strtotime ecc. che restituisce i dati visualizzati nell'alert.

La questione per cui non riesco ad aggiungere questa funzionalità (e mi sto rompendo la testa, sinora) è che non so procedere correttamente:
1 - ad esempio, se aggiungo un campo "lezione" al fondo della tabella "time" non mi viene più registrato l'inserimento (quindi qualcosa confligge con login.js).
2 - se aggiungo una variabile per recuperare il dato di partenza dalla colonna "lezione" della tabella "student" (valore 1) si blocca tutto e non ne esco.
Ho letto il thread di un utente che chiedeva come inserire un valore incrementale, e sarebbe per me una buona opzione, ma non so come applicarla (thread: incrementare-variabile-alla-pressione-di-un-pulsante).

Qualcuno saprebbe come aiutarmi? Chiaro che io debba postare del codice, per far capire meglio ... Non sono sufficientemente preparato per cavarmela da solo ...
Se c'è chi mi può aiutare posterò tutto il necessario, non ho segreti di sorta...
Scusate la lunghezza ...
Grazie.

Aberto
 

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
Piano piano forse ci arrivo, ma non c'è nessuno che mi aiuta, per piacere?
Sono riuscito, dichiarando una variabile e aggiungendola alla query insert, a ottenere la scrittura del valore 1 in una colonna numerica aggiunta al fondo della tabella "time".
Ma la pagina login.php non legge il valore di partenza dal campo corrispondente della tabella "student" ... anche se il campo è vuoto la query inserisce 1 ....
AIUTO!!
Posto il codice della pagina che effettua la query (spero di non sbagliare con il tag CODE previsto dal regolamento ...)
PHP:
login.php
PHP
<?php
   require_once 'admin/connect.php';
   $student = $_POST['student'];      
   $time = date("H:i", strtotime("+0 HOURS"));
   $date = date("Y-m-d", strtotime("+0 HOURS"));
/* questa la variabile aggiunta */
   $student_lectia = $student['lectia'];
   $q_student = $conn->query("SELECT * FROM `student` WHERE `student_no` = '$student'") or die(mysqli_error());
   $f_student = $q_student->fetch_array();  
   $student_name = $f_student['lastname']." ".$f_student['firstname'];
/* '$student_lectia' aggiunta alla fine della query */      
   $conn->query("INSERT INTO `time` VALUES('', '$student', '$student_name', '$time', '$date', '$student_lectia')") or die(mysqli_error());
   echo "<h3 class = 'text-muted'>".$student_name." <label class = 'text-info'> la  ".date("H:i", strtotime($time))."</label></h3>";
?>

che posso fare?
 
Ultima modifica di un moderatore:

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
se ho capito, questo é il primo passo, ma non sufficiente
dovresti sommare 1 a "$student_lectia"
ma soprattutto devi aggiornare l'anagrafica dello studente con il nuovo conteggio
o sbaglio ?
PHP:
<?php
require_once 'admin/connect.php';
$student = $_POST['student'];
$time = date("H:i", strtotime("+0 HOURS"));
$date = date("Y-m-d", strtotime("+0 HOURS"));
$q_student = $conn->query("SELECT * FROM `student` WHERE `student_no` = '$student'") or die(mysqli_error());
$f_student = $q_student->fetch_array();

$student_name = $f_student['lastname']." ".$f_student['firstname'];

/* questa la variabile aggiunta */

$student_lectia = $f_student['lectia'];  //il valore viene recuperato dall'anagrafica, ma credo vada incrementato di 1

/* '$student_lectia' aggiunta alla fine della query */

$conn->query("INSERT INTO `time` VALUES('', '$student', '$student_name', '$time', '$date', '$student_lectia')") or die(mysqli_error());

/* qui dovrebbe essere inserito l'update dell'anagrafica per registrare il valore aggiornato di "lectia" */

echo "<h3 class = 'text-muted'>".$student_name." <label class = 'text-info'> la ".date("H:i", strtotime($time))."</label></h3>";
?>
 
Ultima modifica:

Max 1

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
29 Feb 2012
4.449
338
83
@brasoft2019
Purtroppo hai sbagliatoo il tag
php-png.6009
Leggi bene il regolamento e usa il tag php da qui
box-inserisci-2-png-jpg.6008
 

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
Grazie. Chiedo scusa per il tag sbagliato ... non era evidenziato il fatto (nelle istruzioni del regolamento) che il tag andasse inserito tra parentesi quadre come per uno shortcode in wordpress ... (sono un po' attempato e fatico a elaborare cose che per molti sono ovvie...). Cercherò di non sbagliare ulteriormente.
Allora: ho applicato la correzione suggerita da Max 1 e funziona. Nel campo "lectia" della tabella "time" viene scritto il valore del campo corrispondente letto dalla tabella "student". Essendo entrambi INT viene restituito zero se viene impostato a priori il valore di testo "occasionale" (è una possibilità reale e il risultato mi sta bene) e viene restituito il valore 1, 2 oppure 3 ecc. , quando numerico. E sin qui tutto OK.

In sostanza, trattandosi di cicli di 8 sedute terapeutiche che non incominciano lo stesso giorno, mi serve una reportistica giornaliera o per utente relativamente alla presenza e al numero di lezioni fruite. Quando si tratta di due o tre bambini le presenze si rilevano manualmente, quando sono 15-20 o più ogni giorno diventa un ginepraio...

Fortunatamente per la reportistica ci pensa jquery datatable con i filtri, una volta scritti i records basta stampare i report con il filtraggio desiderato (passo successivo: uno script per formattare il PDF, ma lo affronterò poi).
Adesso la questione è quella di incrementare il valore numerico del campo padre "lectie" quando viene premuto il bottone di inserimento della presenza, registrando contemporaneamente nel campo figlio "lectie", insieme a data e ora, il NUOVO VALORE.
In rete (non ricordo se da mrwebmaster o da altre fonti) ho trovato questo script (che Dio me la mandi buona con il tag):

HTML:
<!DOCTYPE HTML>
<html>
<head>
<title>Esempio</title>
<meta charset="utf-8">
<script type="text/javascript">
function seleziona(){
var e = document.getElementById("risultato");
e.innerHTML = Math.min(8,+e.innerHTML+1);
}
</script>
</head>
<body>
<button class="btn" onClick="seleziona()" id="selectbutton">Lezione</button>
<label id="risultato"></label>
</body>
</html>
 

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
Mi piacerebbe molto applicare questo script (oppure una soluzione analoga) per incrementare nel database il valore. Ma (ahimè) non so scrivere quanto necessario per rilevare il valore di partenza impostato nella cella utente "lectie" del DB (ponendo il caso che si possa impostare un valore iniziale superiore a 1 - per corsi già incominciati) e incrementarlo sino a 8. Quando raggiunto il valore 8 dovrei poter visualizzare un alert al momento della convalida barcode (con un popup, per esempio) che dica all'operatore "questa è l'ultima lezione del ciclo" e, eventualmente, non permettere ulteriori registrazioni di presenza per qual barcode, a meno di reimpostare i valori.
Giunti a quel punto la segreteria andrebbe a reinizializzare i dati per il ciclo successivo impostando i valori nei campi corrispondenti dell'anagrafica (c'è anche un campo con il numero del ciclo e la data d'inizio di quel ciclo).
Di seguito il codice del file index.php che registra il barcode (cancellati riferimenti personali (... ). Scusate se il codice non è tanto "pulito"... è possibile che ci siano anche errori formali ...).

A seguire il codice del file login.js che si occupa dell'alert temporaneo durante la registrazione

Grazie di cuore a chiunque possa aiutarmi.
Non alcun problema, quando il programma sarà operativo al 100%, a renderlo disponibile gratuitamente dietro richiesta diretta.
Io lo sto facendo gratuitamente per aiutare una Onlus umanitaria (psicomotricità infantile per bimbi Down e Autistici).

Dimenticavo: l'insieme del codice con tutte le altre parti che qui non ho postato, testato sul web in un dominio mio di prova , evidenzia errori legati a possibili attacchi legati a Mysql Injection (così mi è sembrato di capire leggendo qua e là - si rileva Warning: mysqli_error() expects exactly 1 parameter, 0 given in /home/.../www..../htdocs/.../login.php on line 9). Chiaro che, usandolo in locale su una macchina non connessa a internet posso tranquillamente ignorare gli avvisi che, sul mio server UBUNTU LAMP php 5.6 non vengono evidenziati. Tuttavia sarebbe bello poter risolvere gli errori... io non so come farlo, però.

Cordiali saluti.
Alberto.

- index.php -

PHP:
<!DOCTYPE html>
<?php
/*
Imposto un refresh della pagina corrente ogni 15 secondi
*/
$curpage = $_SERVER['PHP_SELF'];
header('Refresh: 15;' . $curpage);
?>  
<html lang = "eng">
   <head>
       <title> ... </title>
       <meta charset = "utf-8" />
       <meta name = "viewport" content = "width=device-width, initial-scale=1" />
       <link rel = "stylesheet" href = "admin/css/bootstrap.css" />   
       
   </head>
   <body class = "alert-info">
       <nav class = "navbar navbar-inverse navbar-fixed-top">
           <div class = "container-fluid">
               <div class = "navbar-header">
                   <img src = "admin/images/cs.png" width = "85px" height = "60px"/>
                   <p class = "navbar-text pull-right"><span style="font-size:24px;color:Gold"> ... </span></p>                   
               </div>
           </div>
       </nav>
       <div class = "container-fluid">               
           <br />
           <br />
           <br />           
           <div class = "col-lg-3"></div>
           <div class = "col-lg-6 well">               
               <h2 align="center">Registrazione presenza</h2>
               <br />               
               <div id = "result"></div>
               <br />               
               <form enctype = "multipart/form-data">
                   <div class = "form-group">                       
                       <center>
                       <label>&nbsp; Barcode ID :</label></center>
                       <br />
                       <input type = "text" id = "student" class = "form-control" required = "required"/>
                       
                       <!-- script focus sul campo immissione barcode -->
                       <script>window.onload = function()  
                       { document.getElementById('student').focus()  
                       }</script>
                       
                       <br />
                       <div id = "error"></div>
                       <br />                                       
                       <div id='skills-section' align="center">  
                       <div id='skills' >
                       <div class="skill" style="display: inline-block; margin:5px;"><h4>data &nbsp;e&nbsp; ora:&nbsp;</h4></div>
                       <div class="skill" style="display: inline-block; margin:5px;">
               <p style="font-size:16px;color:Green" ><?php $timestamp = strtotime("+0 day"); echo date('d-m-Y', $timestamp); ?></p></div>
               <div class="skill" style="display: inline-block;">&nbsp;|&nbsp;</div>  
                       <div class="skill" style="display: inline-block; margin:5px;">
               <p style="font-size:16px;color:Green"><?php $timestamp = strtotime("+0 day"); echo date('H:i', $timestamp); ?></p>
               </div>                 
               </div>  
               </div>
               </div>
                       <button type = "button" id = "login" class = "btn btn-primary btn-block"><span class = "glyphicon glyphicon-ok"style="font-size:20px;color:Gold"></span><span style="font-size:20px;color:Gold">&nbsp; REGISTRA</span></button>
                       
                       <br/>
<!--  CODE LAST BARCODE  (inserito in database) -->   
           <?php $conn = new mysqli('localhost', 'root', 'pw...', 'db...') or die(mysqli_error()); ?>               
               <div class = "box-1">
               <table id = "table" class = "table">
                   <thead class = "alert-info">
                       <?php
                       $q_time = $conn->query("SELECT * FROM `student` ORDER BY student_id DESC LIMIT 1") or die(mysqli_error());
                       while($f_time = $q_time->fetch_array()){  ?>
                       <tr>
                           <th>Ultimo barcode registrato :   
                       <?php echo $f_time['student_no']?></th> 
                       </tr>
                   </thead>
                   <tbody>
           <?php
           }
           ?>                   
<!-- / CODE  LAST BARCODE -->
                       <hr>
                        <p class = "active" align="center"><a href = "admin/index.php"><span class = "glyphicon glyphicon-log-in" style="font-size:15px;color:Magenta"></span>&nbsp;&nbsp; ADMIN</a></p>  
                       <p class = "active" align="center"><a href = "admin/logout.php"><span class = "glyphicon glyphicon-log-out" style="font-size:15px;color:Magenta"></span>&nbsp; LOGOUT </a></p>
                       
                   </div>
               </form>
           </div>
           
       </div>
   <div class = "navbar navbar-fixed-bottom alert-warning">
           <div class = "container-fluid">
               <div class="text" align="center"><span></span>&copy; ...</span></div>
           </div>   
       </div>   
   </body>
   <script src = "js/jquery.js"></script>
   <script src = "js/bootstrap.js"></script>
   <script src = "js/login.js"></script>
</html>

- login.js -

Codice:
$(document).ready(function(){
   $error = $('<center><h2 class = "text-danger">Non ho trovato questo ID...<h2></center>');
   $error1 = $('<center><h2 class = "text-danger">Scansiona il BARCODE o scrivi il numero ID<h2></center>');
   $('#login').click(function(){
       $error.remove();
       $error1.remove();
       $student = $('#student').val();
       if($student == ""){
           $error1.appendTo('#error');
       }else{   
           $.post('check.php', {student: $student},
               function(show){
                   if(show == 'Success'){
                       $.ajax({
                           type: 'POST',
                           url: 'login.php',
                           data: {
                               student: $student
                           },
                           success: function(result){
                               $result = $('<h2 class = "text-warning">Entra :</h2>' + result).appendTo('#result');
                               $('#student').val('');
                               setTimeout(function(){
                                   $result.remove();
                               }, 10000);
                           }
                       });
                   }else{
                       $('#student').val('');
                       $error.appendTo('#error');
                   }
               }
           )
       }   
   });
});
 

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
Ho sbagliato di nuovo con il codice. Chiedo ancora scusa.
Adesso ho capito, alla prossima non sbaglio più.
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Adesso la questione è quella di incrementare il valore numerico del campo padre "lectie" quando viene premuto il bottone di inserimento della presenza, registrando contemporaneamente nel campo figlio "lectie", insieme a data e ora, il NUOVO VALORE.
a mio parere non dovresti aver bisogno di un nuovo script ma, l'aggiornamento di "student" dovrebbe avvenire contestualmente alla scrittura in "time"
PHP:
$student_name = $f_student['lastname']." ".$f_student['firstname'];

/* questa la variabile aggiunta */
$student_lectia = 1 + $f_student['lectia'];  //il valore viene recuperato dall'anagrafica, ma credo vada incrementato di 1

/* '$student_lectia' aggiunta alla fine della query */
$conn->query("INSERT INTO `time` VALUES('', '$student', '$student_name', '$time', '$date', '$student_lectia')") or die(mysqli_error());

/* qui dovrebbe essere inserito l'update dell'anagrafica per registrare il valore aggiornato di "lectia" */
$conn->query("UPDATE student set lectia = '$student_lectia' WHERE student_no = '$student'") or die(mysqli_error());

echo "<h3 class = 'text-muted'>".$student_name." <label class = 'text-info'> la ".date("H:i", strtotime($time))."</label></h3>";
?>

quando "lectia" in "student" é zero, il bimbo non ha seguito sedute terapeutiche,
alla lettura del barcode,
1) viene letto "lectia" da "student" e incrementato di 1
2) viene inserito il record in "time"
3) viene aggiornato "student" con il nuovo valore "lectia"

ti sembra corretto ?
 
Ultima modifica:

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
Chapeau.
Bravo, Marino 51. Grazie! - la classe (non css, beninteso) non è acqua.
Io non avrei saputo scrivere la query, non sono sufficientemente ferrato. Tuttavia, per aggiornare i campi come desiderato e sperato ho dovuto aggiungere un +1 (...'$student_lectia' +1 WHERE....), altrimenti rimaneva costantemente al valore impostato, oppure a zero.
La ciliegina sarebbe ... fare in modo che arrivati al valore 8 il sistema non registri più nulla oltre e restituisca un warning, obbligando la segreteria a reimpostare via CRUD - bootstrap i valori nei campi "data inizio serie lezioni" ("data_serie"), numero serie ("n_serie") e numero lezioni ("lectie") di quella serie.
Poi (credo, spero, [... ahi, ahi, ahi ...]) passerò a studiarmi il modo di recuperare e implementare uno script per formattare e stampare i report in PDF con un minimo di grafica (ce ne sono diversi, uno è print.js, ma non so come usarlo - cosa mai fatta, sinora. Per adesso stampo da firefox via CUPS-PDF pulendo il codice dall'anteprima. Non è bello, ma funziona.
Servirà a dare alle famiglie una reportistica sulla frequenza.
Lo stesso software, opportunamente modificato, servirà a creare un sistema parallelo di schede di apprendimento laddove a un certo barcode (corrispondente all'anagrafica, ovviamente) saranno associati degli "step" specifici (via FORM) che restituiranno le date e le curve di miglioramento dei bimbi. Chiaro che questi dati saranno estremamente riservati, dato che sono sensibili, sensibilissimi ... (ho fatto un corso GDPR certificato).
Per questo penso al PDF: i genitori riceveranno via mail la reportistica, solo su espressa richiesta. Tutto il software sarà rigidamente INTRANET, con backup, ecc. ma non online. Il server mi fa anche da nas.

Diciamo che, se tutto va bene, lunedì prossimo metto questo primo software in "produzione" ripulendo un pò il codice da sporcature varie.
Grazie ancora, tutti i consigli sono bene accetti!
Buona Domenica!

Alberto
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
Tuttavia, per aggiornare i campi come desiderato e sperato ho dovuto aggiungere un +1 (...'$student_lectia' +1 WHERE....), altrimenti rimaneva costantemente al valore impostato, oppure a zero.
in realtà pensavo che il valore iniziale in "student" fosse zero quindi ho pensato che fosse meglio sommare 1 alla lettura di lectia ( rivedi il mio ultimo script postato )
PHP:
/* questa la variabile aggiunta */
$student_lectia = 1 + $f_student['lectia'];  //il valore viene recuperato dall'anagrafica, ma credo vada incrementato di 1
In questo modo i valori in "time" vanno da 1 a 8 ed al contempo viene aggiornato "studend" con l'ultimo valore usato
"student" e "time" sono ben allineati

La ciliegina sarebbe ... fare in modo che arrivati al valore 8 il sistema non registri più nulla oltre e restituisca un warning, obbligando la segreteria a reimpostare via CRUD - bootstrap i valori nei campi "data inizio serie lezioni" ("data_serie"), numero serie ("n_serie") e numero lezioni ("lectie") di quella serie.
secondo me andrebbe fatto al momento dell'inserimento del barcode
ma mi manca … il codice, se puoi postarmi il form che usi per inserire il barcode, potrei vedere come agire ….
Poi (credo, spero, [... ahi, ahi, ahi ...]) passerò a studiarmi il modo di recuperare e implementare uno script per formattare e stampare i report in PDF con un minimo di grafica (ce ne sono diversi, uno è print.js, ma non so come usarlo - cosa mai fatta, sinora. Per adesso stampo da firefox via CUPS-PDF pulendo il codice dall'anteprima. Non è bello, ma funziona.
io uso FPDF il report é generato con uno script php, qui un esempio di una lista (scusa se ho mascherato dei dati)
upload_2019-5-11_21-22-59.png


risolviamo prima la "numerazione" ….
 
Ultima modifica:

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
Mannaggia, che pollo sono ... non avevo visto la stringa di codice precedente con l'increment ... mea culpa.
Tuttavia ho pensato di usare il decrement, variando il segno e impostando 8 come valore di partenza.
E' una questione "psicologica", se vuoi: partendo da 8 (valore obbligato per le lezioni nei cicli mensili su 2 sedute a settimana o bimestrali una seduta a settimana) una volta arrivati a zero, se si procede con la registrazione attraverso barcode i numeri vanno in negativo e l'operatore, vedendo stampato a video -1 (oppure -2) ecc. capisce immediatamente che non è stato fatto qualcosa dal lato amministrativo e si risolve reimpostando i valori. Se lo lasciamo in positivo, in assenza di un popup alert, l'operatore potrebbe pensare che il bimbo esegue cicli di lezioni più lunghi di 8, e questo può danneggiare l'attività, che è calibrata appunto su 8 lezioni.
Ti spiego come funziona: il "micro server" sarà in segreteria (non ridere: sarà un raspberry PI prima serie, vecchiotto ma ok, con Raspbian - SD da 64GB, più che sufficiente per l'attività) insieme a un normale desktop per l'amministrazione ordinaria (Xubuntu 64). All'ingresso c'è un laptop Xubuntu con il lettore di barcode che rileva l'accesso dei bimbi alla sala di terapia. Il rilevamento viene fatto o dalla segretaria (il cambio turno è a ogni ora, principalmente di pomeriggio, finite le scuole) o da una ragazza Down che fa volontariato (per loro è una grandissima conquista sociale, quando possono fare qualcosa, e lo fanno BENE!).
E' tutto materiale informatico riciclato, le associazioni di volontariato non hanno denari per acquistare tecnologie e licenze, altrimenti di cms che fanno l'attendance, il timetracking e la reportistica per le scuole ce ne sono a vagonate, opensource e a pagamento. Ma in genere sono molto articolati e complessi, mentre qui serve una cosa basilare, semplice e funzionale.
Ok. adesso vado a pescare il codice e lo posto nella replica successiva.
 

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
HTML:
<!DOCTYPE html>
<?php
/*
Imposto un refresh della pagina corrente dopo 15 secondi
*/
$curpage = $_SERVER['PHP_SELF'];
header('Refresh: 15;' . $curpage);
?>
<html lang = "eng">
    <head>
        <title>... PRESENZE</title>
        <meta charset = "utf-8" />
        <meta name = "viewport" content = "width=device-width, initial-scale=1" />
        <link rel = "stylesheet" href = "admin/css/bootstrap.css" />   
        
    </head>
    <body class = "alert-info">
        <nav class = "navbar navbar-inverse navbar-fixed-top">
            <div class = "container-fluid">
                <div class = "navbar-header">
                    <img src = "admin/images/cs.png" width = "85px" height = "60px"/>
                    <p class = "navbar-text pull-right"><span style="font-size:24px;color:Gold"> Sistema di registrazione presenze bazin</span></p>                   
                </div>
            </div>
        </nav>
        <div class = "container-fluid">               
            <br />
            <br />
            <br />           
            <div class = "col-lg-3"></div>
            <div class = "col-lg-6 well">               
                <h2 align="center">Registra presenza</h2>
                <br />               
                <div id = "result"></div>
                <br />               
                <form enctype = "multipart/form-data">
                    <div class = "form-group">                       
                        <center>
                        <label>&nbsp; Barcode ID :</label></center>
                        <br />
                        <input type = "text" id = "student" class = "form-control" required = "required"/>
                        
                        <!-- script focus sul campo immissione barcode -->
                        <script>window.onload = function()
                        { document.getElementById('student').focus()
                        }</script>
                        
                        <br />
                        <div id = "error"></div>
                        <br />                                       
                        <div id='skills-section' align="center">
                        <div id='skills' >
                        <div class="skill" style="display: inline-block; margin:5px;"><h4>data &nbsp;si&nbsp; ora:&nbsp;</h4></div>
                        <div class="skill" style="display: inline-block; margin:5px;">
                <p style="font-size:16px;color:Green" ><?php $timestamp = strtotime("+0 day"); echo date('d-m-Y', $timestamp); ?></p></div>
                <div class="skill" style="display: inline-block;">&nbsp;|&nbsp;</div>
                        <div class="skill" style="display: inline-block; margin:5px;">
                <p style="font-size:16px;color:Green"><?php $timestamp = strtotime("+0 day"); echo date('H:i', $timestamp); ?></p>
                </div>                 
                </div>
                </div>
                </div>
                        <button type = "button" id = "login" class = "btn btn-primary btn-block"><span class = "glyphicon glyphicon-ok"style="font-size:20px;color:Gold"></span><span style="font-size:20px;color:Gold">&nbsp; Actualizare</span></button>
                        
                        <br/>
<!-- CODE LAST BARCODE                -->   
            <?php $conn = new mysqli('localhost', '...', ....', '....') or die(mysqli_error()); ?>               
                <div class = "box-1">
                <table id = "table" class = "table">
                    <thead class = "alert-info">
                        <?php
                        $q_time = $conn->query("SELECT * FROM `student` ORDER BY student_id DESC LIMIT 1") or die(mysqli_error());
                        while($f_time = $q_time->fetch_array()){  ?>
                        <tr>
                            <th>Ultimo barcode registrato :   
                        <?php echo $f_time['student_no']?></th>       
                        
                                                    
                        </tr>
                    </thead>
                    <tbody>
                    
            <?php
            }
            ?>                   
<!-- / CODE  LAST BARCODE -->
                        <hr>
                        
                        <p class = "active" align="center"><a href = "admin/index.php"><span class = "glyphicon glyphicon-log-in" style="font-size:15px;color:Magenta"></span>&nbsp;&nbsp; ADMIN</a></p>
                        <p class = "active" align="center"><a href = "admin/logout.php"><span class = "glyphicon glyphicon-log-out" style="font-size:15px;color:Magenta"></span>&nbsp; LOGOUT </a></p>
                        
                    </div>
                </form>
            </div>
            
        </div>
    <div class = "navbar navbar-fixed-bottom alert-warning">
            <div class = "container-fluid">
                <div class="text" align="center"><span></span>&copy; ...</span></div>
            </div>   
        </div>   
    </body>
    <script src = "js/jquery.js"></script>
    <script src = "js/bootstrap.js"></script>
    <script src = "js/login.js"></script>
</html>
 

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
Ho visto che il form lo avevo già postato (replica #6 sopra, index.php + login.js); inoltre adesso, provando, ho notato che (come decrement) va impostato il valore 7 di partenza, perchè se metto l'8 con la "lezione" zero il totale fa 9, prima di andare in negativo. Posso aggiungere nel testo dell'alert attuale la dicitura "ci sono ancora ...x... sedute" oppure soltanto "lezione"; ne parlerò con la psicomotricista.
Ok.
Per la stampa report: FPDF non l'ho mai usato. Andrò a vedere. Mi piacerebbe capire (non lo so con certezza) se si riesce a popolare in qualche modo un modello formattato di Openoffice Writer, forse si può fare con una o più macro ma, onestamente, non l'ho mai fatto e non ne sono capace così, a priori.
Se si potesse fare uscirebbero dei report graficamente carini con logo, intestazione ecc. che potrebbero cambiare sostanzialmente la qualità della comunicazione ai genitori, aumentando il livello della professionalità che è alta, nella psicomotricità. Un pò meno nelle mie capacità ... io mi occupo di cose leggermente diverse, di solito, non ho studiato informatica e mi ritengo analogo a un buon musicista amatore, non certo un professionista.
Anche se, perdonami, non ho trovato professionisti disposti a mettere mano al codice per volontariato, neppure se lo scopo è umanitario.
Grazie, tu sei una eccezione. Se vuoi, scrivimi in privato, ti darò maggiori informazioni personali e i riferimenti dell'associazione.
Potresti rimanere stupito ...
Ciao.
Alberto
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
non ridere: sarà un raspberry
mai succederà, anzi é da diverso tempo che ho nella testa di regalarne un paio ai miei nipoti
potrei sfruttare la tua esperienza

FPDF non l'ho mai usato
c'é un sito specifico con molti esempi significativi, http://www.fpdf.org/
ho integrato la classe con "header", "body" e "footer" e con poche righe di codice, ottengo liste "semplici" come quella postata in "minuti"

partendo da 8
se parti da 7 in "student" ti rimane uno zero alla fine del ciclo che confonde si si volesse usare una ricerca con zero per individuare i bimbi senza cicli di lezioni (ma sull'argomento tu "vedi" meglio la situazione)

ora cerco di capire il form e come inserire l'alert
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
puoi pubblicare lo script "check.php" per favore,
credo sia possibile modificare lui per gestire l'alert, per intenderci, gestendo qui la risposta
Codice:
           $.post('check.php', {student: $student},
               function(show){
                   if(show == 'Success'){
                       $.ajax({
                           type: 'POST',
                           url: 'login.php',
                           data: {
                               student: $student
                           },
                           success: function(result){

qui penso si possa controllare la risposta

                               $result = $('<h2 class = "text-warning">Entra :</h2>' + result).appendTo('#result');
                               $('#student').val('');
                               setTimeout(function(){
                                   $result.remove();
                               }, 10000);
                           }
                       });
                   }else{
                       $('#student').val('');
                       $error.appendTo('#error');
                   }
               }
 

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
Yes! Immediately!
PHP:
<?php
    require_once 'admin/connect.php';
    $student = $_POST['student'];
    $q_student = $conn->query("SELECT * FROM `student` WHERE `student_no` = '$student'") or die(mysqli_error());
    $v_student = $q_student->num_rows;
    if($v_student > 0){
        echo 'Success';
    }else{
        echo 'Error';
    }

A proposito di raspberry ... non so la versione 3, ma con la versione 1 (comprata poco dopo l'uscita) ci ho giocato un pò ... invece con Arduino non mi sono mai cimentato.
Siccome il mio lo darò all'associazione, conto di comprarmene un'altro per "giocarci" ancora, stavolta ultima versione.
A più tardi. Credo stasera, forse. Oggi esco con famiglia. Grazie, buona domenica.
 

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
P.S. Gli alert sono gestiti da login.js, per quello che ho capito io. Ma di sintassi Javascript ne so meno di PHP ...
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
P.S. Gli alert sono gestiti da login.js, per quello che ho capito io. Ma di sintassi Javascript ne so meno di PHP ...
check.php "genera" gli alert (vedi error)
login.js, li "gestisce"

con check.php modificato, in caso di lectia < 1 viene generato al momento lo stesso errore del barcode errato o vuoto
ho messo la candizione < 1 perché mi hai detto che parti da 7 a scendere
prova se funziona, se ok, nel passo successivo gestiamo bene il messaggio di errore

PHP:
<?php
require_once 'admin/connect.php';
$student = $_POST['student'];
$q_student = $conn->query("SELECT * FROM `student` WHERE `student_no` = '$student'") or die(mysqli_error());
$v_student = $q_student->num_rows;
if($v_student > 0) {
    while($f_student = $q_student->fetch_array()) {
        if ( $f_student['lectia'] < 1 ) {
            echo 'Error';
        }
        else {
            echo 'Success';
        }
    }
}
else {
    echo 'Error';
}
?>
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
check.php
PHP:
<?php
require_once 'admin/connect.php';
$student = $_POST['student'];
$q_student = $conn->query("SELECT * FROM `student` WHERE `student_no` = '$student'") or die(mysqli_error());
$v_student = $q_student->num_rows;
if($v_student > 0) {
    while($f_student = $q_student->fetch_array()) {
        if ( $f_student['lectia'] < 1 ) {
            echo 'Error3';
        }
        else {
            echo 'Success';
        }
    }
}
else {
    echo 'Error2';
}
?>

login.js
HTML:
$(document).ready(function(){
   $error1 = $('<center><h2 class = "text-danger">Scansiona il BARCODE o scrivi il numero ID<h2></center>');
   $error2 = $('<center><h2 class = "text-danger">Non ho trovato questo ID...<h2></center>');
   $error3 = $('<center><h2 class = "text-danger">Il ciclo di trattamento &egrave; concluso per questo barcode<h2></center>');
   $('#login').click(function(){
       $error1.remove();
       $error2.remove();
       $error3.remove();
       $student = $('#student').val();
       if($student == ""){
           $error1.appendTo('#error');
       }else{   
           $.post('check.php', {student: $student},
               function(show){
                   switch(show) {
                       case 'Success':
                           $.ajax({
                               type: 'POST',
                               url: 'login.php',
                               data: {
                                   student: $student
                               },
                               success: function(result){
                                   $result = $('<h2 class = "text-warning">Entra :</h2>' + result).appendTo('#result');
                                   $('#student').val('');
                                   setTimeout(function(){
                                       $result.remove();
                                   }, 10000);
                               }
                           });
                       break;
                       case 'Error2':
                           $('#student').val('');
                           $error2.appendTo('#error');
                       break;
                       case 'Error3':
                           $('#student').val('');
                           $error3.appendTo('#error');
                       break;
                   }
               }
           )
       }   
   });
});

il mio risultato
upload_2019-5-12_17-37-37.png
 

brasoft2019

Nuovo Utente
22 Apr 2019
20
0
1
Ciao, Marino 51.
Si, funziona, ma per i cicli soltanto.
Per poterlo utilizzare, si dovrebbe migliorare la condizione: infatti ci sono bimbi che fanno cicli di 8 lezioni e altri che invece arrivano al centro senza programmazione, oppure occasionalmente (e a cui si applicano "terapie" diverse dai quelle praticate nei cicli). Magari ci sono quelli che vengono una volta o due e poi non li vedi più...
Ho un campo immediatamente precedente al "lectie" (nome "tipabonament") che prevede appunto tre voci: occasionale, no_prog, 8_sedute.
Adesso il campo "lectie" è settato a zero in tutta la colonna (374 record per adesso, chiaro che nel momento in cui si vanno a inserire i valori per ciasun bimbo in anagrafica la situazione cambia). Prima delle tue correzioni, per testare il sistema, inserendo il barcode i valori zero vanno a -1, -2, ecc. (per quel record)
Se applico il codice i barcode "non settati " non sono più registrabili, restituisce sempre l'alert...
Guardando cosa hai scritto, vedo che l'alert compare quando la condizione è a < 1.
Come posso fare per restituire l'alert soltanto per i cicli di lezioni, lasciando la possibilità agli occasionali di venire registrati senza conteggi (solo con ora e data)?
Inserendo dopo if anche la condizione relativa al campo precedente "tipabonament", cioè se viene letta la condizione "8_sedute" si procede al conteggio, altrimenti no?
- tipo quando trovo la condizione "8 lectii" e il numero < 1 procedo con l'alert e il blocco della registrazione, altrimenti rimane tutto a zero (o in alternativa a -1, -2, -3, ecc. - che può essere un modo per visualizzare istantaneamente la diversa tipologia di prestazioni?
"...confused..."
 
Stato
Chiusa ad ulteriori risposte.
Discussioni simili
Autore Titolo Forum Risposte Data
T Sistema di gestione schede clienti PHP PHP 2
R [PHP] Creare sistema random PHP 3
loois Ho un problema nella creazione di un sistema di commenti in PHP PHP 11
Alessandro Le Mura Sistema votazione mysql - php a stelle PHP 3
M PHP/MySQL: Sistema per trovare multiaccount PHP 7
R Sistema di commenti in php PHP 1
P Sistema di messaggistica in PHP PHP 2
L Sistema login Ajax/Php Ajax 0
A PHP e sistema di autenticazione PHP 2
M PHP su sistema votazioni configurabile a 5/10 stelle PHP 0
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 1
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1

Discussioni simili