Salve a tutti,
inizio con provare a fare il quadro di partenza:
ho un form dove ho vari campi tra cui uno è una select e come option prende i dati da un array che a sua volta è popolato dai dati prelevati da una tabella sql. Inserisco lo scorcio del codice del campo in questione:
<div id="tpl_fields" class="hidden">
<div class="field">
<label for="servizi-tpl">Linee da svolgere</label>
<select class="listserv" name='servizi-tpl[]'multiple>
<option value=''>Seleziona il servizio</option>
<?php
while ($riga = $servizi_da_svolgere -> fetch_assoc()) {
$servizio_inserito = $riga['servizio'].'--'.$riga['partenza'].'--'.$riga['orario_corsa'];
echo"
<option value='$servizio_inserito'>
$servizio_inserito
</option>";
}?>
</select>
</div>
</div>
e questo è il codice che preleva i dati dalla tabella sql
if($data_servizio >= $inizio_invernale && $data_servizio <= $inizio_estivo){
$query_linee_sql = "SELECT servizio,partenza,DATE_FORMAT(orario_corsa,'%H:%i') AS orario_corsa FROM gbgar_corse WHERE periodo='invernale' and frequenza='scolastica';";
$servizi_da_svolgere = $Conn->query($query_linee_sql);
}if ($servizi_da_svolgere == FALSE){
die("Errore nell'esecuzione della query:" . $query_linee_sql);
}
Questo è solo una cosa che provato a fare io per capire certe dinamiche ma il mio obiettivo sarebbe un tantino più complesso per cui volevo capire se il mio ragionamento è corretto prima di mettermi a scrivere codice inutilmente:
In pratica vorrei che quella variabile che ho chiamato $servizi_da_svolgere prima di essere passata al ciclo while per generare le option dovrebbe subire una scrematura:
Innanzi tutto ho un file.php dove ho pensato di determinare che "tipo" di data ho come riferimento, la quale può essere:
- invernale o estiva se rientra in un determinato intervallo di date;
- feriale;
- festiva se è una domenica o se coincide con festività fisse (l'unico problema qui sarebbe gestire la Pasqua, o meglio il lunedì di pasqua che varia sempre in base alla data pasquale anche se cmq il giorno di pasqua coincide con la domenica).
- e poi può avere eccezioni tra feriali compresi tra lun e ven e il sabato che a volte è da trattare come un feriale particolare.
Infatti la tabella "gbgar_corse" è cosi costituita:
MariaDB [gbgarage_test]> DESCRIBE gbgar_corse;
+--------------+------------------------------------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+--------------+------------------------------------------------------+------+-----+---------+----------------+
| ID | int(3) | NO | PRI | NULL | auto_increment |
| TABELLA | varchar(7) | YES | | NULL | |
| PERIODO | enum('estivo','invernale') | YES | | NULL | |
| SERVIZIO | varchar(50) | YES | | NULL | |
| PARTENZA | varchar(20) | YES | | NULL | |
| ORARIO_CORSA | time | YES | | NULL | |
| ARRIVO | varchar(20) | YES | | NULL | |
| FINE_CORSA | time | YES | | NULL | |
| TEMPO_CORSA | time | YES | | NULL | |
| KM | float | YES | | NULL | |
| FREQUENZA | enum('feriale','scolastica','festiva','giornaliera') | YES | | NULL | |
| ECCEZIONI | varchar(50) | YES | | NULL | |
+--------------+------------------------------------------------------+------+-----+---------+----------------+
12 rows in set (0,001 sec)
Una volta determinato i tipo di data che ho, con delle if eseguo query select con diverse condizioni, sulla tabella di cui sopra, il tutto per giungere ad avere il mio array che potrei chiamare $servizi_da_evadere.
Partendo quindi da $servizi_da_evadere per arrivare a $servizi_da_svolgere devo prima fare una differenza tra array (credo),
e per poterlo fare devo prima estrarre i servizi già inviati per la stessa data, dalla tabella sql "servizi_inviati".
Quindi l' array contenuto in $servizi_da_svolgere deve risultare dalla differenza tra $servizi_da_evadere meno $servizi_inviati.
E mentre scrivo mi sorge la seguente domanda: se per una data non è stato ancora inviato nessun servizio la sottrazione di array come andrebbe gestita?
In ogni caso, dovrei ottenere che la mia select, quella che ho nel form, di mano in mano che vengono inviati servizi, e che quindi si popola la tabella "servizi_inviati", per la medesima data, mi darà sempre meno options perché quelle già usate verranno sottratte.
Lo scopo intuibile è ottenere da una parte con le condizioni a monte, delle option meno numerose tra cui selezionare i servizi da inviare, e dall'altro anche una sorta di controllo a prevenire l'assegnazione errata dello stesso servizio a due operatori diversi.
Dico giusto?
Questo sarebbe il mio obiettivo, ma intanto devo capire col vostro aiuto se il ragionamento è fattibile && corretto.
Buona giornata a tutti e grazie comunque.
Filippo P.