function gerarCombo($arrConteudo, $strNomeCombo, $strElementoSelecionado="", $strValor, $strLabel, $strComplemento="")
{
$strHtml = "<select name='$strNomeCombo' $strComplemento>\n";
if(strlen(trim($strElementoSelecionado)) == 0)
$strHtml .= "<option value='-1'>- Selecione -</option>\n";
for($intI=0;$intI<count($arrConteudo);$intI++){
$strValorElemento = $arrConteudo[$intI][$strValor];
$strLabelElemento = $arrConteudo[$intI][$strLabel];
if ($strElementoSelecionado == $strValorElemento)
$strHtml .= "<option value='$strValorElemento' selected>$strLabelElemento</option>";
else
$strHtml .= "<option value='$strValorElemento'>$strLabelElemento
</option>";
}
$strHtml .= "</select>";
return $strHtml;
}
Modo de usar
Cria-se uma matriz.
$arrConteudo[0]['texto'] = 'São Paulo';
$arrConteudo[0]['valor'] = 'SP';
$arrConteudo[1]['texto'] = 'Minas Gerais';
$arrConteudo[1]['valor'] = 'MG';
$arrConteudo[2]['texto'] = 'Rio de Janeiro';
$arrConteudo[2]['valor'] = 'RJ';
Define-se parametros
$strNomeCombo = "cmbEstado"; //nome do combo
$strElementoSelecionado = "MG"; //valor selecionado, deixando vazio entra como selecionado a opção 'Selecione'
$strValor = "valor"; // nome da chave que contem o valor
$strLabel = "texto"; // nome da chave que contem o label
$strComplemento="class='combo'"; //no caso de existir algum complemento na declaração do select
Chamada da funcão
gerarCombo($arrConteudo, $strNomeCombo, $strElementoSelecionado, $strValor, $strLabel, $strComplemento);
Por Luiz Felipe Baio
Comentários
SZCXmakqBKJXZwndEV - 17/02/2012 06:30
Cara, oibagrdo pela visita.Realizei um teste utilizando o metodo aplicado por voce, e constatei o que pensava, quando voce utiliza essa forma voce atribui o valor SP' a todos os options contidos no select e nao seleciona o Option que estava com o valor.Ja da forma que foi demonstrada no post, voce faz uma varredura nos options do Combo select e deixa aquele que estiver com o value igual ao pesquisado com o status de selected. E possibilita a pessoa selecionar outro valor dentro do Combo para alteracao.