[PHP] individuare chiave elemento array

Discussione in 'PHP' iniziata da samurai.sette, 19 Febbraio 2019.

  1. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    192
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao a tutti. Come da titolo mi chiedevo come individuare la chiave di uno o più elementi presenti in un array.
    Mi spiego. Nel mio form ho inserito una serie di checkbox contenenti i nomi delle colonne di una tabella. Dopo che l'utente ha selezionato una o più checkbox, come faccio a individuare le relative chiavi nell'array?
    Le checkbox le ho inserire in questo modo
    PHP:
            $query_colonne mysqli_query ($con"show columns from tabella");
            
            while (
    $result_colonne mysqli_fetch_array($query_colonne))
            {
                
    $nomi_colonne[] = $result_colonne[0];
            }
            
    $num_colonne count($nomi_colonne);
            for (
    $i=0$i<$num_colonne$i++)
            {
                echo 
    '<input type="checkbox" name="colonne[]" id="colonne" value="'.$nomi_colonne[$i].'" />' $nomi_colonne[$i] . "<br />";
            }
    Ciao, grazie mille!
     
  2. fratt

    fratt Nuovo Utente

    Registrato:
    19 Gennaio 2019
    Messaggi:
    33
    Mi Piace Ricevuti:
    4
    Punteggio:
    8
    Occupazione:
    Dilettante
    io di solito faccio così
    PHP:
    $i 0;
    while (isset(
    $_POST['colonne'][$i])) {

      
    $i++;
    }
     
  3. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    921
    Mi Piace Ricevuti:
    53
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    PHP:
    $conn=new mysqli('host','user','pass','db');
    $colonne=$conn->query('show columns from tabella')->fetch_all(MYSQLI_ASSOC);
    foreach (
    array_keys($colonne[0]) as $items){
       echo 
    '<input type="checkbox" name="colonne[]" id="colonne" value="'.items.'" />' items "<br />";
    }


     
  4. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    192
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao a tutti, scusate se non ho risposto subito ma il lavoro mi prende un pò di tempo.
    Ho visto le voste soluzioni ma non vanno bene perchè quando seleziono uno o più checkbox le chiavi dell'array sono errate.
    Faccio un esempio: se seleziono le checkbox n° 3-5-6-8, le chiavi dell'array che ottengo sono 0-1-2-3. Invece dovrei ottenere 3-5-6-8.
     
  5. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    921
    Mi Piace Ricevuti:
    53
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Quindi l'estrazione no da DB, ma input allora hai formulato la domanda in modo ambiguo...
    effettua il loop sulle check e identifica i valori no le chiavi....
    Quindi
    PHP:
    $col=[];
    foreach(
    $colonne as $k=>$v){
                       
    //$k è la chiave dell'array "colonne" preso da input per intenderci 0,1,2,3...
         
    $col[]=$v// $v è il valore della selezione che rispecchia quanto richiesto:  3,5,6,7,8
    }
    print_r($col);
     
  6. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    192
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao a tutti, richiedo scusa per la lentezza nel rispondere.
    Provo a rispiegare il problema che ho in quanto non penso di averlo esposto a dovere. Quello che devo fare è questo.
    Devo estrarre da una tabella i nomi di tutte le colonne e le devo inserire in una serie di checkbox. Per fare ciò faccio in questo modo:
    PHP:
    $query_colonne mysqli_query ($con"show columns from tabella");
    while (
    $result_colonne mysqli_fetch_array($query_colonne))
    {
      
    $nomi_colonne[] = $result_colonne[0];
    }

    $num_colonne count($nomi_colonne);
    for (
    $i=0$i<$num_colonne$i++)
    {
      echo 
    '<input type="checkbox" name="colonne[]" id="colonne" value="'.$nomi_colonne[$i].'" />' $nomi_colonne[$i] . "<br />";
    }
    Quando l'utente sceglie uno o più checkbox (ad esempio checkbox n. 2,4,7,9) come faccio ad individuare le chiavi degli elementi scelti?
    Le soluzioni che mi avete proposto non vanno bene perchè invece di ottenere le chiavi delle checkbox n. 2,4,7,9 ottengo le chiavi n. 0,1,2,3.
    Ciao, grazie mille
     
  7. macus_adi

    macus_adi Utente Attivo

    Registrato:
    5 Dicembre 2017
    Messaggi:
    921
    Mi Piace Ricevuti:
    53
    Punteggio:
    28
    Sesso:
    Maschio
    Occupazione:
    Developer
    Località:
    L'Aquila
    Ok allora il problema è sull'input....
    Questo problema è dato dalla mancanza di indice su colonne[];
    PHP:
    echo '<form method="post">';
    foreach (
    $res as $items){
       echo 
    '<input type="checkbox" name="colonne[]" id="colonne" value="'.$items.'" />' $items "<br />";
    }
    echo 
    '<button type="submit">Invia</button>';
    echo 
    '</form>';

    if(!empty(
    $_POST))print_r($_POST);
    OUTPUT ERRATO
    Codice:
    Array ( [0] => id [1] => name [2] => url [3] => method [4] => backend )
    id
    name
    url
    method
    backend
    Array ( [colonne] => Array ( [0] => name [1] => url ) )
    

    Per gestire come ti serve modifica in questo modo....
    PHP:
    echo '<form method="post">';
    foreach (
    $res as $k=>$items){
      
    //viene aggiunto l'indice su $colonne[$k]
       
    echo '<input type="checkbox" name="colonne['.$k.']" id="colonne" value="'.$items.'" />' $items "<br />";
    }
    echo 
    '<button type="submit">Invia</button>';
    echo 
    '</form>';

    if(!empty(
    $_POST))print_r($_POST);
    OUTPUT CORRETTO
    Codice:
    Array ( [0] => id [1] => name [2] => url [3] => method [4] => backend )
    id
    name
    url
    method
    backend
    Array ( [colonne] => Array ( [1] => name [2] => url ) )
    
    Sappi che stai rendendo posizionale l'input e non è forse la soluzione ottima! Buon lavoro
     
  8. samurai.sette

    samurai.sette Utente Attivo

    Registrato:
    17 Dicembre 2015
    Messaggi:
    192
    Mi Piace Ricevuti:
    5
    Punteggio:
    18
    Ciao Macus_adi. Grazie mille, hai centrato in pieno quello che dovevo fare.
     
Sto caricando...

Condividi questa Pagina