Ciao a tutti.
ho realizzato un form in un file form.php.
Questo perché uno degli elementi del form è una select in cui le option con scelta multipla sono determinate da una query che preleva i dati da una tabella del database mysql.
Questo l'estratto del codice ....
...
<tr>
<td>
<label for="servizi_da_svolgere">Servizi da <br> svolgere</label>
</td>
<td>
<?php
//eseguo query al database per avere la lista delle option della select prese dalla tabella del database
$query_sql = "SELECT servizio,partenza,orario_corsa FROM gbgar_lista_servizi;";
$servizi_da_svolgere = $Conn->query($query_sql);
if ($servizi_da_svolgere == FALSE){
die("Errore nell'esecuzione della query:" . $query_sql);
}
echo "<select name='servizi_da_svolgere' multiple='multiple' required>"; //scelta multipla abilitata
echo "<option value=\"\">Seleziona il servizio</option>";
while ($riga = $servizi_da_svolgere -> fetch_assoc()) {
$servizio_inserito = $riga['servizio'].'--'.$riga['partenza'].'--'.$riga['orario_corsa'];
//valori concatenati perché ogni servizio è caratterizzato da tre valori che nella tabella "servizi_assegnati"
devono essere scritti nello stesso record e nello stesso campo
echo "<option value='$servizio_inserito'> $servizio_inserito </option>";
}
echo"</select>";
$Conn->close();
?>
</td>
</tr>
...
Il punto è che questa select, all'interno dello script intero viene dopo la select in cui viene selezionato l' username (autista).
L'idea è che a ogni autista nella giornata vengono assegnati vari servizi da svolgere.
La domanda quindi è : volendo sfruttare il fatto che la select mi da modo di compiere scelte multiple tra le option che comprende, in teoria posso assegnare per ogni opzione effettuata nel campo "autista", varie opzioni contemporaneamente nel campo servizi da svolgere
Come posso fare che quindi affinché il file "inserimento_servizi.php" scriva nel database tutti i record?
Mi aspettavo che scegliendo due option ad esempio, di trovarmi due record con gli stessi valori tranne che nella colonna "servizi_assegnati" in cui avrei trovato nel primo record la prima option e nel secondo record la seconda option mentre mi trovo solo il record con la seconda option. :-\
Questo è il codice del file "inserimento_servizi.php" con le associazioni dei campi tra form e tabella del db e la query INSERT INTO.....
<?php
//creazione variabili che ricevono i dati dai campi del form.
$autista = $_POST["seleziona_autista"];
$stato = $_POST["stato"];
$data_servizio = $_POST["data_servizio"];
$tipologia = $_POST["tipologia"];
$macchina = $_POST["macchina"];
$servizi_da_svolgere = $_POST["servizi_da_svolgere"];
//inizializzo e riempio la variabile con la query al database.
$insert_sql = "INSERT INTO gbgar_servizi (
autista,
stato,
data_servizio,
tipologia,
macchina,
servizi_da_svolgere)
VALUES(
'$autista',
'$stato',
'$data_servizio',
'$tipologia',
'$macchina',
'$servizi_da_svolgere');";
/*ora si esegue la query contenuta nella viriabile chiamata $insert_sql per ottenere il risultato di scrittura del record e un output nella pagina page.php */
$risultato = $conn->query($insert_sql);
if ($risultato == TRUE) {
echo "inserimento servizio riuscito";
} else {
echo "inserimento servizio fallito: $insert_sql";
}
?>
<br>
<a href="http://localhost/test-gbgarage/gestione-servizi/form-serv.php">torna alla maschera di inserimento</a>
</body>
</html>
Penso da profano autididatta che la variabile $insert_sql viene riversata in $risultato e sostanzialmente è un array associativo, ma in esso la chiave ["servizi_da_svolgere"] quindi, porta solo il secondo valore selezionato nella select come se il secondo sovrascrivesse il primo....... è così ?
quindi .... come devo fare per ottenere la scrittura dei due valori selezionati contemporanemente nella select, in modo che chi deve compilare il form per assegnare i servizi non deve compilare il form tre o quattro volte per ogni autista, compiendo invece almeno una sola compilazione per ognuno....?
con la speranza di esser riuscito a farmi capire ringrazio tutti per le eventuali illuminazioni .
Grazie e buona Epifania !!!!