abr
09
2009
0

Minicurso PHP: 4ª Parte – Formulários Web: Passagem de Parâmetros e Método POST (ParteII) – Resgatando múltiplos valores de um select e checkboxes

Olá Pessoal,

Para compensar o dia de ontem, o post de hoje será duplo. Assim não temos perdas. Fecharemos a passagem de parâmetros pelo método POST e veremos o método GET. Mãos à obra!

No tutorial passado vimos como passar parâmetros de uma página para outra usando um formulário, pelo método POST. Até agora sabemos que os campos do formulário devem possuir um atributo NAME, e o valor desse atributo será usado pelo array $_POST para resgatar o conteúdo digitado pelo usuário nesse campo. Exemplo:

LOGIN.PHP

1
2
3
4
5
<form action="validaLogin.php" method="post" id="form" name="form">
<label for="login">Login: <input type="text" name="login" id="login" /></label>
<label for="senha">Senha: <input type="password" name="senha" id="senha" /></label>
<button type="submit">LOGIN</button>
</form>

VALIDALOGIN.PHP

1
2
3
4
<?php
//Imprimo os valores digitados pelo usuário nos campos LOGIN e SENHA
echo $_POST["login"]." - ".$_POST["senha"];
?>

Ou seja, cada campo do formulário possui um valor associado a ser resgatado pelo array associativo $_POST. Mas… e se eu precisar resgatar vários valores em um único campo? Como assim? Imaginem a seguinte situação: eu quero me cadastrar para receber newsletters de um site, e tenho uma lista de assuntos para escolher um ou vários. Como vocês fariam para resgatar esses valores? Vamos começar a testar:

NEWS.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<form action="valida.php" method="post" id="form" name="form">
<label for="assunto">Escolha os assuntos:
<select name="assunto" id="assunto">
<option value="design">WebDesign</option>
<option value="desenvolvimento">Desenvolvimento</option>
<option value="banco">Banco de Dados</option>
<option value="marketing">Marketing Digital</option>
<option value="direito">Direito Digital</option>
<option value="padroes">Padrões Web</option>
<option value="redacao">WebWritting</option>
</select>
</label>
<button type="submit">ENVIAR</button>
</form>

VALIDA.PHP

1
2
3
<?php
echo $_POST["assunto"];
?>

Como vocês podem perceber, só conseguimos selecionar uma opção e resgatar o valor apenas da opção selecionada. Não é o que queremos. A nossa necessidade é selecionar vários itens simultaneamente. Bem, no exemplo acima usamos um SELECT, permitindo a escolha de apenas um assunto. Se adicionarmos o atributo multiple=”multiple” no SELECT, ele nos permitirá selecionar vários itens (basta manter a tecla CTRL pressionada enquanto clica nos itens). Veja como ficaria o código:

NEWS.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<form action="valida.php" method="post" id="form" name="form">
<label for="assunto">Escolha os assuntos:
<select name="assunto" id="assunto" multiple="multiple">
<option value="design">WebDesign</option>
<option value="desenvolvimento">Desenvolvimento</option>
<option value="banco">Banco de Dados</option>
<option value="marketing">Marketing Digital</option>
<option value="direito">Direito Digital</option>
<option value="padroes">Padrões Web</option>
<option value="redacao">WebWritting</option>
</select>
</label>
<button type="submit">ENVIAR</button>
</form>

VALIDA.PHP

1
2
3
<?php
echo $_POST["assunto"];
?>

Legal! Agora podemos selecionar vários itens e tudo mais!!! Porém… não conseguimos resgatar todos os valores selecionados… Veja que na página “valida.php” imprimimos apenas um assunto… Pois bem, quando trabalhamos com um SELECT MULTIPLE, passamos como parâmetro um array com todas as opções selecionadas e, é preciso informar a página que receberá os dados do FORM que estamos passando um array, ao invés de um valor único. Para fazer isso é bem simples: basta adicionar [] ao fim do NAME do campo. Veja como fica o código:

NEWS.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<form action="valida.php" method="post" id="form" name="form">
<label for="assunto">Escolha os assuntos:
<!-- Adiciono [] ao fim do NAME do meu select -->
<select name="assunto[]" id="assunto" multiple="multiple">
<option value="design">WebDesign</option>
<option value="desenvolvimento">Desenvolvimento</option>
<option value="banco">Banco de Dados</option>
<option value="marketing">Marketing Digital</option>
<option value="direito">Direito Digital</option>
<option value="padroes">Padrões Web</option>
<option value="redacao">WebWritting</option>
</select>
</label>
<button type="submit">ENVIAR</button>
</form>

VALIDA.PHP

1
2
3
4
5
6
7
8
<?php
//Recebo o array $_POST["assunto"] a o atribuo a uma variável 
$assunto = $_POST["assunto"];
//Por se tratar de um array montarei um loop para percorrê-lo
foreach($assunto as $indice => $valor) {
echo $valor.";<br />";
}
?>

Legal, né? E a lógica é a mesma para qualquer outro tipo de campo de formulário. Por exemplo, ao invés de usar um SELECT MULTIPLE, usaremos vários CHECKBOX para o usuário marcar quais assuntos deseja receber uma newsletter. Veja o código abaixo:

NEWS.PHP

1
2
3
4
5
6
7
8
9
10
11
12
<form action="valida.php" method="post" id="form" name="form">
<label for="assunto">Escolha os assuntos:
<input type="checkbox" name="assunto[]" value="design">WebDesign
<input type="checkbox" name="assunto[]" value="desenvolvimento">Desenvolvimento
<input type="checkbox" name="assunto[]" value="banco">Banco de Dados
<input type="checkbox" name="assunto[]" value="marketing">Marketing Digital
<input type="checkbox" name="assunto[]" value="direito">Direito Digital
<input type="checkbox" name="assunto[]" value="padroes">Padrões Web
<input type="checkbox" name="assunto[]" value="redacao">WebWritting
</label>
<button type="submit">ENVIAR</button>
</form>

VALIDA.PHP

1
2
3
4
5
6
7
8
<?php
//Recebo o array $_POST["assunto"] a o atribuo a uma variável 
$assunto = $_POST["assunto"];
//Por se tratar de um array montarei um loop para percorrê-lo
foreach($assunto as $indice => $valor) {
echo $valor.";<br />";
}
?>

Viram como é fácil? No próximo tutorial – que postaria um pouco mais tarde – entraremos no outro método para passagem de parâmetros via PHP: o método GET. Até daqui a pouco.

Abraços,
Diego.

Powered by WordPress | Theme: Aeros 2.0 by TheBuckmaker.com