• User Attivo

    Prendere valori da array multidimensionali ed inserirli nel DB

    Ecco il mio semplice problema, spero.
    Stò creando un portale per gli appassionati di tiro a volo. Lo dico per dare l'idea con ciò che ho a che fare.
    Ho creato un form dove l'utente, già nella sua area privata, sceglie la quantità di serie che ha sparato il giorno X (per "serie" si intende un ciclo di piattelli da sparare. Nel caso di SKEET il ciclo è di 25 piattelli, nel caso del DOUBLE TRAP è di 50, etc..).
    Da qui parte il primo ciclo for (per le serie. Es.: Serie 1) annidando un altro ciclo for dove per ogni checkbox, che corrisponde ad un piattello, se ceccata è uguale ad 1 (uno) altrimenti a 0 (zero).

    Fin qui tutto ok infatti provando l'invio dei dati avviene correttamente.
    Esempio:
    p-1-1
    p-1-1
    p-1-0
    p-1-1, etc...

    p-2-0
    p-2-1
    p-2-1
    p-2-0, etc...

    Nell'esempio la lettera "p" ed i trattini "-" sono statici affinchè possa poi usare explode per altri startagemmi mentre il primo numero rappresenta la serie ed il secondo il piattello.

    LA DOMANDA E' LA SEGUENTE: come inserisco i dati nel DB? :mmm:

    Il DB è composto dai 6 campi seguenti:** id** INT 11, id_tiratore INT 11, data DATE, tipo INT 2, piattelli VARCHAR 110, commento TEXT.
    Il campo "piattelli" deve contenere l'array dei piattelli per ciascuna serie.
    Vale a dire che devo inserire nel DB tanti record quante sono state le serie scelte e per ogni record il campo "piattelli" deve contenere l'array di tutti i piattelli della serie.

    Esempio array piattelli: 1-1-0-0-1-0-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-0-0-1

    Grazie ancora anticipatamente ... il forum merita veramente.


  • User

    Per ogni record il campo "piattelli" deve contenere l'array di tutti i piattelli della serie.

    per fare questo l'unica cosa che mi viene in mente al momento:

    [PHP]
    // crei una nuova variabile vuota da mettere in testa al ciclo che crea la lista piattelli della serie
    $piattelli = '';

    //all'interno del ciclo ci inserisci questa variabile creata ed inserendo l'array che dovrà contenere non dimenticare il . vicino il segno = in questo modo avrai la lista nella variabile $piattelli
    $piattelli .=
    [/PHP]

    non ho fatto nessuna prova ma teoricamente dovrebbe essere cosi (sempre se ho capito il problema)


  • User Attivo

    @ldgweb said:

    non ho fatto nessuna prova ma teoricamente dovrebbe essere cosi (sempre se ho capito il problema)

    In pratica riesco ad estrarre i dati dei piattelli per serie.
    Però dovrei inglobare il risultato finale, composto da 25 numeri per ogni serie in questo caso, proprio così
    Array piattelli: 1-1-0-0-1-0-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-0-0-1
    in una UNICA variabile.

    Il problema è che ci sono da inserire nel DB un numero di record indefiniti (dipende dalla scelta del tiratore), diciamo 6, e per ogni record nel campo "piattelli" inserire la variabile sopra citata.
    In pratica l'inserimento nel DB va fatto nel primo ciclo for. Rammento che stò considerando due cicli for. Il primo che mi indica la serie ed il secondo che estrapola i dati delle checkbox inviati dal form


  • User

    Appunto la struttura dovrebbe essere questa:

    [PHP]
    // primo ciclo
    for(){

    $piattelli = '';

    // secondo ciclo
    for(){

    // notare il puntino prima del simbolo =
    $piattelli .= 'valore ciclo';

    }

    mysql_query(insert into.... $piattelli );

    }
    [/PHP]


  • User Attivo

    OK grazie risolto.
    Sei stato gentilissimo ... di cuore.

    Alla prossima.


  • User Attivo

    @ldgweb said:

    Appunto la struttura dovrebbe essere questa:

    [php]
    // primo ciclo
    for(){

    $piattelli = '';

    // secondo ciclo
    for(){

    // notare il puntino prima del simbolo =
    $piattelli .= 'valore ciclo';

    }

    mysql_query(insert into.... $piattelli );

    }
    [/php]

    Scusa la confidenza ma ti saluto con un Ciao ...
    Ricordi l'inserimento dei dati nel DB?
    Adesso mi ritrovo col problema inverso. In pratica devo estrapolare tutte le serie fatte dall'utente, usare explode per prendere i valori numerici (rammento che il campo è di testo quindi la riga è la seguente 1-1-0-0-1-0-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-1-0-0-1), sommare il primo piattello, di seguito il secondo etc.., e tirare fuori una statistica per singolo piattello di tutte le serie.

    Scusa se chiedo troppo ma ti ringrazio anticipatamente.


  • User

    @mikslap said:

    Scusa la confidenza ma ti saluto con un Ciao ...
    Ciao figurati 😄

    Allora ho capito fino al punto di recuperare i valori numerici dal db con explode ma non ho capito sommarli con cosa tra loro??


  • User Attivo

    @ldgweb said:

    Ciao figurati 😄

    Allora ho capito fino al punto di recuperare i valori numerici dal db con explode ma non ho capito sommarli con cosa tra loro??

    Sommare i valori del primo piattello, secondo, terzo, etc..., di tutte le serie effettuate.
    Mi spiego meglio. Ogni serie contiene, nel campo "piattelli" del DB, la stringa scritta precedentemente. Dovrei sommare tutti i piatteli numero 1, 2, 3, etc... di ogni serie. Questo per fare una statistica, in percentuale, per ogni piattello.

    Spero sia stato più chiaro.


  • User

    Se devi sommare la serie 1-2-1-2-1-1-1-1-1 ecc..

    Dopo aver fatto l'explode avrai un array contenente tutti i piattelli esempio

    $piattello[0]
    $piattello[1]
    $piattello[2]
    $piattello[3]

    a questo punto crei un ciclo for in questo modo

    [PHP]
    $somma = 0;

    for(){
    $somma = $somma + $piattello*;
    }

    echo $somma; // <-- totale somma tra i vari piattelli

    echo count($piattello); // <-- totale serie

    [/PHP]

    Prova un pò e vediamo se vabbene 😄


  • User Attivo

    @ldgweb said:

    Se devi sommare la serie 1-2-1-2-1-1-1-1-1 ecc..

    Dopo aver fatto l'explode avrai un array contenente tutti i piattelli esempio

    $piattello[0]
    $piattello[1]
    $piattello[2]
    $piattello[3]

    a questo punto crei un ciclo for in questo modo

    [PHP]
    $somma = 0;

    for(){
    $somma = $somma + $piattello*;
    }

    echo $somma; // <-- totale somma tra i vari piattelli

    echo count($piattello); // <-- totale serie

    [/PHP]

    Prova un pò e vediamo se vabbene 😄

    Buon giorno ... innanzitutto.
    Se ho ben capito questo esempio mi restituisce la somma dei piattelli della singola serie. A me invece serve sommare il piattello numero uno
    (Es.: $serie[0] -> $piattello[0]; $serie[1] -> $piattello[0]; $serie[2] -> $piattello[0]; etc...) e poi di seguito il secondo, terzo, e così via.

    E' possibile farlo? Se non fosse possibile mi suggeriresti qualcosa?

    Grazie ancora per le celeri risposte e la disponibilità.


  • User

    Facciamo cosi scrivimi un risultato tipo dal database cosi come inserito e spiegami in che modo devi effettuare le operazioni ho bisogno di sapere proprio in che modo vengono salvate le informazioni nel database.

    Da quello che ho capito la steinga contiene dati:

    p-1-0-1-1-1-0 <-- questa è una serie

    p sta ad indicare i piattelli

    **1 **che corrisponde alla serie

    e numeri che seguono sono i vari colpi??

    e in un solo record avresti:

    p-1-0-1-1-1-0
    p-2-0-1-1-1-0
    p-3-0-1-1-1-0

    giusto??


  • User Attivo

    @ldgweb said:

    Facciamo cosi scrivimi un risultato tipo dal database cosi come inserito e spiegami in che modo devi effettuare le operazioni ho bisogno di sapere proprio in che modo vengono salvate le informazioni nel database.

    Da quello che ho capito la steinga contiene dati:

    p-1-0-1-1-1-0 <-- questa è una serie

    p sta ad indicare i piattelli

    **1 **che corrisponde alla serie

    e numeri che seguono sono i vari colpi??

    e in un solo record avresti:

    p-1-0-1-1-1-0
    p-2-0-1-1-1-0
    p-3-0-1-1-1-0

    giusto??

    NO.
    Allora iniziamo da "p-1-1" = nome campo checkbox dove "p-" è statico, "1" rappresenta la prima serie seguito da "1" che rappresenta il primo piattello. Quindi segue "p-1-2", "p-1-3", etc... per la prima serie; "p-2-1", "p-2-2", "p-2-3", etc...., per la seconda serie; etc.....

    Al DB arrivano i seguenti valori.
    id_tiratore = id univoco tiratore
    data = 2012-03-07
    piattelli = 1-1-1-1-1-0-0-1-0-1-1-1-1-1-0-1-1-1-1-1-1-1-1-1-1
    Questi sono i valori di una serie effettuata.


  • User

    Allora tu recuperi le varie serie di un determinato tiratore

    [PHP]
    $somma = array();
    $tot_piattelli = array();

    while($data = mysql_fetch_assoc($query)){

    $data['piattelli']; // <- contiene i valori di una serie

    $piattelli[id serie] = explode('-', $data['piattelli']);
    $tot_piattelli[id serie] = count($piattelli[id serie]);
    $somma[id serie] = 0;

    for(){
    // se il piattello riporta il valore 1 aumento totale conteggio serie
    // in questo modo conteggio solo i piattelli con valore 1
    if($piattelli[id serie]* == 1){
    $somma[id serie]+1;
    }
    }

    // ora avrò il totale della prima serie che posso recuperare in questo modo
    // $somma[id serie];

    }

    // lista valori creati dalle varie funzioni sopra per capirne meglio

    echo print_r($somma); // lista totale conteggi piattelli con valore 1

    echo print_r($tot_piattelli); // lista totale conteggi piattelli con valore 1 e 0

    // il totale di tutte le serie con valore 1 lo recupererai cosi:
    echo array_sum($somma);

    // il totale generale di tutte le serie indipendentemente se con valore 0 o 1
    echo array_sum($tot_piattelli);

    [/PHP]


  • User Attivo

    Che intendi per $variabile[id serie].
    [id serie] è l'id (univoco) della serie o cosa?

    Comunque adesso faccio delle prove e ti posto tutto il mio codice.

    Grazie ancora.


  • User

    @mikslap said:

    Che intendi per $variabile[id serie].
    [id serie] è l'id (univoco) della serie o cosa?
    Si. 🙂


  • User Attivo

    @ldgweb said:

    Si. 🙂

    Così, però, faccio la somma delle serie. Cioè per ogni record della tabella, in cui il campo "piattelli" contiene i valori, sommo i valori precedentemente espolsi.
    Il mio intento invece è quello di sommare solo i primi piattelli di tutte le serie con conseguente somma dei secondi, terzi e così via.

    In pratica se mi ritrovassi una tabella con 53 campi:
    id,** id_tiratore**, data, p1, p2, p3, ...... p50 non dovrei fare altro che la selezione della tabella con la clausula SUM dei campi p1, p2, p3, p4, etc....

    Il risultato finale di tale operazione deve essere la percentuale, in base alle serie effettuate, dei piattelli 1,2,3,4,5,6,7,..... fino a max 50

    Il tuo script mi da questo risultato:
    Array
    Array
    0
    26
    Array
    Array
    0
    26
    Array
    Array
    0
    26
    Array
    Array
    0
    26
    Array
    Array
    tante volte per quante serie sono.

    Il ciclo for di cui non hai fatto cenno l'ho compilato in questo modo:
    for($i = 0; $i <= $tot_piattelli['id'] - 1; $i++) in modo da inizializzare l'array con 0 (zero) concludendolo con 24 o 49.


  • User

    a questo punto mi viene in mente di fare così:

    mi creo un array predefinito con i 50 valori

    $totale_piattelli = array(0 => 0, 1 => 0, 2 => 0, 3 => 0, ecc. fino a 49);

    avrò quindi un array con 50 chiavi tutte con valore iniziale a 0

    poi faccio una somma nel ciclo for sulle chiavi dell'arra corrispondenti:

    $totale_piattelli* + $piattello_ottentuo_da_explode*;

    in teoria l'explode quando divide 1-1-1-1 crea array partendo da 0

    $piattello[0] e la chiave array dovrebbe corrispondere al nostro array predefinito $totale_piattelli[0] trovandosi quindi in un ciclo sommerà la prima serie poi la seconda e così via se qualcosa non esiste di default è impostata cmq a 0