Problema con creazione array

camionistaxcaso

Nuovo Utente
14 Mag 2015
11
0
1
Ciao a tutti. Ho creato un metodo che passandogli una variabile con il codice sql, (SELECT campo1, campo2 FROM tabella) esegue una select su una tabella, e crea un' array con i valori trovati eseguendo poi il return della stessa. L' array creata, la passo poi ad un altro metodo che crea delle options per una select html:

PHP:
//f_options_date() crea l' array 

 public function f_options_date($sql)
      {  $var = array();
        //Risultato della query 
        $result = mysqli_query($this->_link, $sql);
        //Creo array con nomi colonne 
        $get_column = $result->fetch_fields();
        foreach ($get_column as $column)
         {
           $columns[] = $column->name; 
         }
        //eseguo il ciclo while e creo l' array       
        while($row = mysqli_fetch_array($result, MYSQL_ASSOC))
        {     

              $var[] = array($row[$columns[0]], $row[$columns[1]]);
              
        }
        return $var;
     }
Quindi "da fuori" richiamo il metodo valorizzando una variabile e passandola al metodo che crea la select:
PHP:
//memorizzo l' array
$type = $o_db->f_options_date("SELECT id_type, info FROM t_site_type");
//passo l' array al metodo che crea la select html e creo la select

$myselect = $o_html_form->f_get_select('select1', 'type', 'myclass', $type);
Questo è il metodo che crea la select html:
PHP:
public function f_get_select($w, $name, $class, $arr)
  {  
     //Creo un' array contenente vari gruppi di input e le loro caratteristiche
     $attributes_list = array(  
                                
                                
                                "select1"      => array("name" => $name,
                                                        "class"=> $class
                                                        )
                                //Poi ne creo altri
                                 
                               
                              );
            
     $a = "<select class=\"".$attributes_list[$w]["class"]."\" name=\"".$attributes_list[$w]["name"]."\"> \n";
     //Elenco le options
     foreach($arr as $key => $value)
     {    
       for($i=0; $i<count($key); $i++)
       {
          //Creo le options 
          $a .= "<option value='".$value[0]."'>" .$value[1]. "</option>\n";
          
       }  
     }          
     $a .= "</select> \n";
     return $a;
                
  }
Insomma funziona tutto però lo posso utilizzare solo per creare select poichè, come potete vedere dal codice, nel metodo f_options_date() alla riga:
$var[] = array($row[$columns[0]], $row[$columns[1]]);
creo l' array con gli elementi che mi servono indicando manualmente l' indice dell' array $columns.
Io vorrei fare una cosa più variabile Ho provato a fare cosi nel while ma non funziona:

PHP:
while($row = mysqli_fetch_array($result, MYSQL_ASSOC))
        {     
              //Per quante colonne ha trovato
             for($i=0; $i<count($columns); $i++)
              {
                $var[] =  $row[$columns[$i]];
                
              }
              
              
        }
Mi da errore nel metodo f_get_select() alla riga:
$a .= "<option value='".$value[0]."'>" .$value[1]. "</option>\n";
Notice: Uninitialized string offset: 1 in C:\Program Files\xampp\htdocs\new_bs_site\class\c_html_form.php on line 71
immagino venga fuori un' array non compatibile o chissà che cosa...
Grazie 1000 a chi mi aiuta.
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, $row è già un array puoi fare semplicemente
PHP:
$var = array();
while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) {
    $var[] = $row;
}
return $var;
e non ti serve nemmenno il fetch_fields visto che i nomi delle colonne non li usi al di fuori del metodo
 

camionistaxcaso

Nuovo Utente
14 Mag 2015
11
0
1
Ciao, $row è già un array puoi fare semplicemente
PHP:
$var = array();
while ($row = mysqli_fetch_array($result, MYSQL_ASSOC)) {
    $var[] = $row;
}
return $var;
Mi sa che hai ragione...mi viene fuori una cosa di questo tipo e mi pare che vada bene:
array(2) { [0]=> array(2) { ["id_type"]=> string(1) "1" ["info"]=> string(11) "sede legale" } [1]=> array(2) { ["id_type"]=> string(1) "2" ["info"]=> string(13) "punto vendita" } }

solo che non mi crea le options nel metodo f_get_select() quello che crea la select, mi da questa sbarrica di notice:
Notice: Undefined offset: 0 in C:\Program Files\xampp\htdocs\new_bs_site\class\c_html_form.php on line 71

Notice: Undefined offset: 1 in C:\Program Files\xampp\htdocs\new_bs_site\class\c_html_form.php on line 71

Notice: Undefined offset: 0 in C:\Program Files\xampp\htdocs\new_bs_site\class\c_html_form.php on line 71

Notice: Undefined offset: 1 in C:\Program Files\xampp\htdocs\new_bs_site\class\c_html_form.php on line 71

Notice: Undefined offset: 0 in C:\Program Files\xampp\htdocs\new_bs_site\class\c_html_form.php on line 71

Notice: Undefined offset: 1 in C:\Program Files\xampp\htdocs\new_bs_site\class\c_html_form.php on line 71

Notice: Undefined offset: 0 in C:\Program Files\xampp\htdocs\new_bs_site\class\c_html_form.php on line 71

Notice: Undefined offset: 1 in C:\Program Files\xampp\htdocs\new_bs_site\class\c_html_form.php on line 71

Notice: Undefined offset: 0 in C:\Program Files\xampp\htdocs\new_bs_site\class\c_html_form.php on line 71

Notice: Undefined offset: 1 in C:\Program Files\xampp\htdocs\new_bs_site\class\c_html_form.php on line 71

nella riga 71 come puoi vedere nel precedente post c' è:
$a .= "<option value='".$value[0]."'>" .$value[1]. "</option>\n";
 
Ultima modifica di un moderatore:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
puoi modificare gli indici con i nomi dei campi
PHP:
$a .= "<option value='".$value['id_type]."'>" .$value['info]. "</option>\n";
oppure togliere il parametro MYSQL_ASSOC dal fetch in modo che ti restituisca l'indice numerico del campo anzichè il nome
 

camionistaxcaso

Nuovo Utente
14 Mag 2015
11
0
1
puoi modificare gli indici con i nomi dei campi
PHP:
$a .= "<option value='".$value['id_type]."'>" .$value['info]. "</option>\n";
oppure togliere il parametro MYSQL_ASSOC dal fetch in modo che ti restituisca l'indice numerico del campo anzichè il nome
Quello lo so anch' io, volevo farlo in maniera variabile proprio per riutilizzare il metodo anche x altro, è l' oggetto della discussione.
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
oppure togliere il parametro MYSQL_ASSOC dal fetch in modo che ti restituisca l'indice numerico del campo anzichè il nome
prova cosi
PHP:
mysqli_fetch_array($result,MYSQLI_NUM)