07/02/2025 - Pierpippo73 ha scritto:
Allora scusate a cosa diavolo serve avere un select a selezione multipla nel form?
La casella a selezione multipla nel form serve a selezionare più valori e inviarli al server: come vengono poi gestiti, sono appunto affari del server.
I valori multipli vengono inviati correttamente: il problema è come vengono trattati sul server. Non è che se io metto un campo di testo su un form, ci scrivo dentro, invio il contenuto e poi sbaglio la modalità con cui lo salvo del DB, allora di colpo tutti i campi di testo esistenti nei form sull'intero Web diventano inutili. :)
Sono due problematiche disgiunte.
07/02/2025 - Pierpippo73 ha scritto:
Io vorrei ottenere che nella colonna del database vengano scritti i valori della select a scelta multipla del form.
Quello che tu devi fare è salvare i valori multipli che provengono dal form.
Se vuoi metterli in una unica colonna, devi estrapolare tali valori come stringa trasformandoli in un elenco testuale, separato da virgola (o altro separatore) e salvare quella stringa all'interno della colonna, però poi dovrai giocoforza "interpretarla" quando vai a leggere quella stringa per ottenere dal testo i valori originali.
Questa soluzione, per quanto fattibile, è parecchio sconsigliabile e inefficiente.
07/02/2025 - Pierpippo73 ha scritto:
Se il form ha 5 campi di cui uno è una select a scelta multipla e all'invio del form compilato, si genera un array multidimensionale con 5 chiavi + la chiave "invio"; di cui le prime 4 portano ognuna un valore e solo l'ultima porta un array di 2 o più valori, potrò estrarli in qualche maniera? occorre un ciclo forse... quale, come ? chiaro che poi devo concatenare i valori dell'array che una volta estrapolati saranno si una stringa che assegno ad una variabile da passare alla query insert into......
Non si può fare?
Come detto, si può fare, ma è meglio una soluzione alternativa: predisporre una tabella separata, dedicata a queste selezioni, associata al record principale che si trova nella tabella in cui volevi mettere la famosa colonna, e fare diversi inserimenti.
Il primo inserimento è quello del record principale, salvando tutti i valori tranne quello della selezione multipla. Una volta recuperato l'ID del record principale, usi quell'ID per fare l'INSERT INTO in una tabella correlata alla prima, inserendo tanti record quante sono le selezioni operate nella casella del form, ossia i valori che hai recuperato, mettendo l'ID del record principale come valore nel campo di correlazione e l'ID (o il valore stesso) che è stato selezionato.
In breve farai
- avvio di una nuova transazione sul database;
- una INSERT INTO gbgar_servizi, e recuperi l'ID,
- tante INSERT INTO gbgar_servizi_da_svolgere (nome inventato) quante sono le selezioni effettuate, mettendo di volta in volta ciascun valore selezionato e l'ID recuperato per il record precedente;
- commit delle transazione per confermare tutti i record (o rollback in caso di errore, per annullarli tutti).
La cosa importante è che sia chiaro lo scenario e la soluzione a livello concettuale. Come estrapolare i valori dall'array ti è stato già indicato, quindi ti basta creare la tabella secondaria correlata alla prima tramite una "foreign key", e inserire uno per uno i record delle selezioni dopo aver inserito il principale, come stai già facendo; la colonna "servizi_da_svolgere" nella tabella principale ovviamente non servirà più.
In questo modo, il database è anche normalizzato e facilmente indicizzabile.