Conheça o Plugfeed | » Início » Programação » PHP » Como obter dados de um SELECT MULTIPLE em PHP?
Conheça o Plugfeed | » Início » Programação » PHP » Como obter dados de um SELECT MULTIPLE em PHP? -->
 
Avaliação: | Publicado em: 02/06/2007
Como obter dados de um SELECT MULTIPLE em PHP?
José de Menezes é formado em Ciência da Computação pela UFMG, empresário e ex-atleta profissional. Possui interesses em desenvolvimento web e webdesign.
Como obter dados de um SELECT MULTIPLE em PHP?

Todos nós nos deparamos com este problema em algum momento de nossa programação. Precisamos usar um campo SELECT MULTIPLE e percebemos que o PHP só retorna o último valor selecionado, por que isto acontece? SELECT MULTIPLE é um campo de formulário, suas seleções acabam por possuir vários elementos com o mesmo nome, e aí é onde mora o problema...

Para compreender melhor o que desejamos fazer, é muito interessante fazer rodar o exemplo abaixo. Dê uma olhada no código-fonte:

<form action="exemplo.php" method="POST">
Nome: <input type="text" name="nome"><br>
Telefone: <input type="text" name="telefone"><br>
Email: <input type="text" name="email"> <br>
Comidas: <br>
<select multiple name="comida">
<option value="Japonesa">Japonesa</option>
<option value="Chinesa">Chinesa</option>
<option value="Mineira">Mineira</option>
<option value="Italiana"> Italiana </option>
<option value="Vegetariana"> Vegetariana </option>
...
</select><br>
<input type="submit" value="Enviar" >
</form>


O que desejamos é coletar as informações fornecidas pelo usuário em nosso formulário. Para isso, precisamos criar uma pequena programação onde as informações fornecidas via metodo POST são obtidas.

Os campos “nome”, “telefone” e “email” são facilmente coletados:

<?php
echo "Nome: ". $_POST["nome"];
echo "<br>Apelidos: ". $_POST["apelidos"];
echo "<br>E-mail: ". $_POST ["email"];
?>


Mas e quanto ao campo “comida”? Se usássemos "$comida=$_POST["comida"]" os option do select multiple têm todos o mesmo nome e somente obteríamos o último elemento selecionado. Para resolver isto é bem fácil, basta pôr “[ ]” no final do nome do campo select multiple. Desta maneira, o PHP interpreta o campo como sendo um array e assim cada posição é gravada da maneira correta.
Veja abaixo a maneira correta:

<form action="exemplo.php" method="POST">
Nome: <input type="text" name="nome"><br>
Telefone: <input type="text" name="telefone"><br>
Email: <input type="text" name="email"> <br>
Comidas: <br>
<select multiple name="comida[]">
<option value="Japonesa">Japonesa</option>
<option value="Chinesa">Chinesa</option>
<option value="Mineira">Mineira</option>
<option value="Italiana"> Italiana </option>
<option value="Vegetariana"> Vegetariana </option>
...
</select><br>
<input type="submit" value="Enviar" >
</form>


Nosso PHP seria construído da seguinte forma:

<?php
echo "Nome: ". $_POST["nome"];
echo "<br>Telefone: ". $_POST["telefone"];
echo "<br>E-mail: ". $_POST ["email"];
$comidas=$_POST["comida"];

//loop para visualizarmos os elementos selecionados
for ($i=0;$i<count($comidas);$i++)
{
   echo "<br> Comida " . $i . ": " . $comidas[$i];
}
?>


gostei sim...se eu tivesse lido isso uns meses atras teria me poupado muitas dores de cabeça
sensacional!! me ajudou bastante aki agora...
vlw
Como faço para gravar os dados selecionados (multiplos) no banco de dados ?
alysson x <dflkjl@lkj.com>
Bacana....Muito bom.
Como faço isso só que em vez de imprimir na tela enviar para e-mail








Um produto Detetive.net