PHP – Simples forma de preencher um select com PHP

Fernando Valler 06/04/2020 MySQL, PHP


Quando comecei a programar em PHP uma das coisas que me incomodava era a forma que usávamos para preencher um select com os simples dados de uma tabela. Um dia pensando em facilitar esse processo tive a ideia de criar uma função (um helper) que passando os dados ou mesmo a query de uma consulta ele me retornasse os option do select já formatados.

Versão que utiliza o mysql_query

// Retorna os option de uma consulta
function form_select($sql, $value, $option, $selected = ''){

  $res = mysql_query("$sql");
  $res_t = mysql_num_rows($res);
  if($res_t > 0)
  while($row = mysql_fetch_array($res)){
    if(is_array($selected)){
      $sd = in_array($row[$value], $selected) ? 'selected="selected"' : '';
      $op .= "<option value=\"$row[$value]\" $sd>$row[$option] (#$row[$value])</option>";
    } else {
      $sd = ($selected == $row[$value]) ? 'selected="selected"' : '';
      $op .= "<option value=\"$row[$value]\" $sd>$row[$option] (#$row[$value])</option>";
    }
  } 

  return $op;
}

Exemplo de uso:

<!-- Preenchendo o select com clientes -->
<select name="id_cliente">
  <option value=""></option>
  <?= form_select("SELECT * FROM clientes", 'id', 'nome') ?>
</select>

<!-- Para preencher e selecionar um cliente basta informar o id do cliente  -->
<select name="id_cliente">  
  <option value=""></option>
  <?= form_select("SELECT * FROM clientes", 'id', 'nome', $id_cliente) ?>
</select>

Versão que receber um array com os dados a serem preenchidos.

// Select de array
function form_select_array($dados, $value, $option, $selected = '', $display_id = true){

 if(!is_array($dados))
    return false;

  foreach ($dados as $row) {
    if(is_array($selected)){
      $sd = in_array($row[$value], $selected) ? 'selected="selected"' : '';
      //$op .= "<option value=\"$row[$value]\" $sd>$row[$option]</option>";
      $id = $display_id ? " (#{$row[$value]})" : '';
      $op .= "<option value=\"$row[$value]\" {$sd}>{$row[$option]}{$id}</option>";
    } else {      

      //Padronizar dados
      $selected = trim($selected);
      $row[$value] = trim($row[$value]);

      $sd = (strtoupper($selected) == strtoupper($row[$value]))? 'selected="selected"' : '';
      $id = $display_id ? " (#{$row[$value]})" : '';

      $option_array = explode('|', $option);
      $option2 = !empty($row[$option_array[0]]) ? $option_array[0] : $option_array[1];
      //debug($row[$option_array[0]], false);

      $op .= "<option value=\"$row[$value]\" {$sd}>{$row[$option2]}{$id}</option>";
    }

  }

  return $op;
}

Exemplo de uso:

<!-- Preenchendo o select com clientes -->
<select name="id_cliente">
  <option value=""></option>
  <?= form_select_array($clientes_array, 'id', 'nome') ?>
</select>

<!-- Para preencher e selecionar um cliente basta informar o id do cliente  -->
<select name="id_cliente">
  <option value=""></option>
  <?= form_select_array($clientes_array, 'id', 'nome', $id_cliente) ?>
</select>

Você também pode fazer os ajustes para melhor se adaptar a sua necessidade.
 


Fernando Valler - Programador Web
Fernando Valler

Sou programador web, motivado por desafios e sempre buscando aprender algo novo. Aqui você pode encontrar alguns projetos.