Estrazione Array da in array

di il
7 risposte

Estrazione Array da in array

Salve a tutti.

La mia domanda riguarda l'array multidimensionale e associativo che ottengo nella variabile super-globale $_Post che dal form giunge al file di atterraggio page.php.

Il form ha 5 campi di cui l'ultimo è  una select a scelta multipla il quale ha come attributo "name=qualcosa[]" 

Mettendo le quadre dopo al valore "name" ottengo quindi che $_Post risulti un Array associativo con 5 chiavi dove l'utima chiave però , che assume il name della select chiamata "qualcosa", contiene a sua volta un Array ordinario dove abbiamo [0]->"A" [1]->"B"  [2]->"C".

Ora, abbinando le chiavi associative di $_Post a rispettive variabili posso di conseguenza impostare la query INSERT INTO per scrivere i dati nella tabella sql impostata.

Il problema è che nella colonna "qualcosa" PHP mi scrive solo Array e non i valori di [0][1][2]...

Prima devo trasformare "qualcosa" in una stringa? ...

Mi potreste illuminare come devo fare?

Sperando di essere riuscito a spiegare a dovere la questione.

Grazie in ogni caso

Filippo P.

7 Risposte

  • Re: Estrazione Array da in array

    Non ho capito il tuo intento... 

    una sql restituisce un array, perchè vuoi trasferire questo array in un altro array? 

    06/02/2025 - Pierpippo73 ha scritto:

    Il problema è che nella colonna "qualcosa" PHP mi scrive solo Array e non i valori di [0][1][2]...

    puoi spiegarti meglio? la colonna qualcosa ha come valore "Array" piuttosto che "[0][1] ecc.."?

    06/02/2025 - Pierpippo73 ha scritto:

    Prima devo trasformare "qualcosa" in una stringa? ...

    se ti serve una stringa lascia il valore del campo della sql..

    06/02/2025 - Pierpippo73 ha scritto:

    Mi potreste illuminare come devo fare?

    puoi illuminarmi su cosa hai e cosa vuoi ottenere (usa dati e nomi fittizi).

  • Re: Estrazione Array da in array

    07/02/2025 - sihsandrea ha scritto:

    una sql restituisce un array, perchè vuoi trasferire questo array in un altro array? 

    Non voglio trasferire un array in un altro array, devo estrarre i dati da un array che è , come devo definirlo.... "annidiato" dentro l'array $_Post che dalla pagina del form arriva alla pagina page.php

    facendo   var_dump($_POST);

    ottengo il seguente array che raccoglie i dati compilati nel form. 

    array(7) { ["seleziona_autista"]=> string(13) "Filippo_Pieri" ["stato"]=> string(9) "operativo" ["data_servizio"]=> string(10) "2025-02-07" ["tipologia"]=> string(3) "tpl" ["macchina"]=> string(7) "iveco47" ["servizi_da_svolgere"]=> array(2) { [0]=> string(33) "start L 157--Roncalceci--06:40:00" [1]=> string(42) "start L 157--Forlì Centro Studi--13:20:00" } ["invia"]=> string(5) "INVIA" } inserimento servizio riuscito
    torna alla maschera di inserimento

    Nella chiave "Servizi_da_svolgere" non ho un valore unico da poter riversare come stringa in una variabile $servizi_da_svolgere per poi passarla come value alla query ISERT INTO.

    Per intenderci, lo script che segue mostra come sono mappati i campi del form che arrivano come chiavi dell'array  multidimensionale $_Post generato dalla compilazione e invio del form 

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

    La colonna "servizi_da_svolgere" della tabella gbgar_servizi viene popolata in questa maniera dalla parola "array" anziché dal valore della chiave in quanto questo valore non è un valore unico ma un array di valori che penso vadano estrapolati  e penso concatenati, prima di essere riversati nella variabile $Servizi_da_Svolgere da passare alla query INSERT INTO.

    La questione quindi è come devo fare questa cosa? 

    La funzione dovrebbe essere implode (ho letto in una documentazione riguardante la manipolazione degli array) ma .... come faccio ad eseguirla su un array che è annidiato dentro un array multidimensionale?

    Spero di esser riuscito a spiegarmi meglio.

    In ogni caso grazie 

    Filippo.

  • Re: Estrazione Array da in array

    Penso é semplice da spiegare con codice ridotto al minimo.

    Il tuo errore é che tratti un valore array come stringa. Uso implode con stringa vuota tra parole. La funzione array se non diversamente specificato inizia da indice numerico 0, la variabile copy é il contenitore per mia comodità ($arr['chiave'][0] o $copy[0] sono esattamente uguali)

    <?php
    
    $arr = array('chiave' => array('primo valore', 'secondo valore'));
    $stringa = 'Inizio ';
    $copy = $arr['chiave'];
    var_dump($stringa . $copy, implode('', $copy));
    
    ?>

    Che produce:

    Warning: Array to string conversion in /in/GqMfG on line 6
    string(12) "Inizio Array"
    string(26) "primo valoresecondo valore"
  • Re: Estrazione Array da in array

    Uhm...

    Io mi sono bloccato in quell'array...

    Sembra che stai prelevando dei dati da una schermata di campi singoli ma la parte servizi da svolgere proviene o da una lista o da una combo.

    Non puoi usare una insert in un campo che propone due valori.

    Con quale criterio imputi l'uno o l'altro [0] [1]?

    Forse quel valore sarebbe una insert relativa ad una tabella detail?

    Se si esegui la update con idmaster e secondo campo in array.

    Se non ho interpretato male.

  • Re: Estrazione Array da in array

    07/02/2025 - sihsandrea ha scritto:

    Non puoi usare una insert in un campo che propone due valori.

    Con quale criterio imputi l'uno o l'altro [0] [1]?

    Allora scusate a cosa diavolo serve avere un select a selezione multipla nel form?

    Io vorrei ottenere che nella colonna del database vengano scritti i valori della  select a scelta multipla del form. 

    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? ma in questo caso la mia domanda torna ad essere:

    a cosa diavolo servono nei form i campi di tipo select con l'attributo multiple="multiple"?????

    Grazie e buona serata a tutti

    Filippo P.

  • Re: Estrazione Array da in array

    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.

  • Re: Estrazione Array da in array

    08/02/2025 - Alka ha scritto:

    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,

    Ok, allora devo creare una tabella a parte che abbia due colonne (o campi, ma preferisco chiamarle colonne anche se magari non corretto ma tanto per non far confusione coi campi del form), una come chiave esterna che prenderà come valore l' id dei record principali, e la seconda colonna per i servizi_da svolgere.
    Ma come recupero l'id? Esso non è stato ancora generato visto che page.php ha ricevuto i dati tramite $_Post ma non ha ancora eseguito alcuna query insert into.....  
    Capisco l'idea di avere una tabella dedicata ai servizi_da_svolgere rispetto alla tabella principale ma non credo di esser in grado di attuare i tuoi suggerimenti.

    Cosi a naso direi allora che il form deve essere diviso in due parti, la prima col suo tasto "submit" per popolare la tabella gbgar_servizi e la seconda (caratterizzata da un unico campo di tipo select con attributo di scelta multipla, oltre ovviamente al suo "submit") che va a popolare la tabella gbgar_servizi _assegnati  correlata alla prima attraverso l'id del record principale. Dico bene ?

    Ma come recupero l'id ?

    08/02/2025 - Alka ha scritto:

    avvio di una nuova transazione sul database; 

    Intendi una connessione al database? be per forza altrimenti page.php cosa se ne fa dell'array $_Post proveniente dal form?

    08/02/2025 - Alka ha scritto:

    Come estrapolare i valori dall'array ti è stato già indicato,

    Si ma non so se ho capito esattamente..... cioè devo cmq fare una implode dell'array $_post che arriva dalla seconda parte del form?

    In ogni caso mi arriverebbe tramite $_Post cmq un array multidimensionale anche dal secondo form giusto .... tipo: 

    array(2) ["servizi_da_svolgere"]=> array(2) {[0]=> string(n) "valore_uno" [1]=> string(n) "valore_due"} ["invia"]=> string(5) "INVIA" } inserimento servizio riuscito

    Potresti spiegarmelo meglio.... ?

    Quindi devo trasformare cmq l'array in una stringa e mi par di ricadere nello stesso identico problema a prescindere di quale tabella vada poi ad essere popolata.... boooohhh!!!

    08/02/2025 - Alka ha scritto:

    commit delle transazione per confermare tutti i record (o rollback in caso di errore, per annullarli tutti).

    Non conosco questi termini.... sarebbe? ma.... una cosa alla volta..... è già abbastanza difficile cosi ;-)

    Filippo P. 

Devi accedere o registrarti per scrivere nel forum
7 risposte