abr
10
2009
3

Minicurso PHP: 4ª Parte – Formulários Web: Passagem de Parâmetros e Método GET

Olá,

Antes de tratarmos do método GET, vamos resolver o exercício passado na primeira parte desse tutorial sobre passagem de parâmetros e formulários PHP. O exercício era: “vamos montar uma página com o formulário de login. Os dados digitados pelo usuário serão comparados com valores armazenados em dois arrays. Caso o login e senha batam com os valores do array, imprima uma mensagem de sucesso, caso contrário, imprimo uma mensagem de erro”. Abaixo segue a resolução:

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
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$login = array("user01", "user02", "user03", "user04", "user05");
$senha = array("senha01", "senha02", "senha03", "senha04", "senha05");
//Calculo o tamanho do array $login
$tamArray = count($login);
//Crio uma variável auxiliar
$msg = FALSE;
//Uso um loop para percorrer o array - escolherei o FOR, mas você pode usar qualquer outro
for ($i = 0; $i < $tamArray; $i++) {
if ($_POST["login"] == $login[$i] && $_POST["senha"] == $senha[$i]) {
$msg = TRUE;
break;
}
}
//Verifico se a variável auxiliar $msg saiu do loop com o valor TRUE (indicando login efetuado com sucesso)
if ($msg) {
echo "ok";
}
else {
echo "erro";
}
?>

Bem, vamos ao GET!!!! :-D

MÉTODO GET: FORMULÁRIOS

Vimos que com o método POST os dados de um formulário são enviados ao servidor por uma conexão paralela, de forma oculta. O método GET envia os valores pela URL, de forma aberta, onde todos enxergam os parâmetros passados. Se o formulário acima for enviado pelo método GET, a URL de requisição ao servidor ficará assim: “validaLogin.php?login=user01&senha=senha01″, onde “?” divide o caminho da página dos parâmetros enviados pela requisição; “&” permite o envio de vários parâmetros encadeados, sempre que for necessário enviar um parâmetro novo, precisamos concatená-lo aos demias parâmetros com “&”. Para resgatar parâmetros enviados pelo método GET, usamos o array associativo $_GET, onde os índices equivalem aos atributos NAME dos campos do formulário (assim como o $_POST).

Bem, além da forma de envio de parâmetros, qual a diferença entre POST e GET? O método GET possui limites quanto a capacidade envio de dados (2KB apenas), e não pode ser usado para envio de dados confidenciais, uma vez que todas as informações são passadas abertamente pela URL. Usamos GET para envio de palavras-chave de busca e outros parâmetros curtos que não prejudiquem a segurança do usuário (ou você quer a senha dele passeando por URL’s a fora?). Veja o nosso exemplo anterior reescrito com o método GET:

FORM.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- Nesse formulário irei cadastrar vários campos de diferentes tipos -->
<form action="recebeForm.php" method="get" id="form" name="form">
<label for="nome">Nome: <input type="text" name="nome" id="nome" /></label>
<label for="email">Email: <input type="text" name="email" id="email" /></label>
<label for="telefone">Telefone: <input type="text" name="telefone" id="telefone" /></label>
<label for="assunto">Assunto:
<select name="assunto" id="assunto">
<option value="elogios">Elogios</option>
<option value="sugestoes">Sugestões</option>
<option value="reclamacoes">Reclamações</option>
<option value="outros">Outros</option>
</select>
</label>
<label for="mensagem">Mensagem: <textarea name="assunto" id="assunto"></textarea></label>
<button type="submit">ENVIAR</button>
</form>

RECEBEFORM.PHP

1
2
3
4
5
6
7
8
9
10
11
<?php
//Vamos receber os dados do formulário, armazená-los em variáveis e imprimí-los na tela
$nome = $_GET["nome"];
$email = $_GET["email"];
$telefone = $_GET["telefone"];
//Recebo o valor enviado pelo SELECT assunto. Reparem que o valor resgatado corresponde ao VALUE do option selecionado pelo usuário
$assunto = $_GET["assunto"];
$mensagem = $_GET["mensagem"];
 
echo "Nome: $nome <br /> Email: $email <br /> Telefone: $telefone <br /> Assunto: $assunto <br /> Mensagem: $mensagem";
?>

MÉTODO GET: LINKS

Uma das vantagens do método GET é que com ele não ficamos atrelados a formulários. Uma vez que os parâmetros são passados todos pela URL, é bem fácil enviar parâmetros a partir de links diretamente no atributo HREF da tag <a>. Veja o exemplo abaixo:

MENU.PHP

1
2
3
4
5
6
7
<ul id="menu">
<li><a href="conteudo.php?id=0">Item 1</a></li>
<li><a href="conteudo.php?id=1">Item 2</a></li>
<li><a href="conteudo.php?id=2">Item 3</a></li>
<li><a href="conteudo.php?id=3">Item 4</a></li>
<li><a href="conteudo.php?id=4">Item 5</a></li>
</ul>

CONTEUDO.PHP

1
2
3
4
5
6
7
8
<?php
//Monto um array com todos os conteúdos
$conteudo = array("Conteúdo 0...", "Conteúdo 1...", "Conteúdo 2...", "Conteúdo 3...", "Conteúdo 4...");
//Resgato o ID do conteúdo
$id = $_GET["id;"];
//Imprimo o conteúdo referente ao ID passado pelo usuário
echo $conteudo[$id];
?>

E aí? Gostaram? Esse é o princípio para se trabalhar com consultas a banco de dados (aliás, boa parte desses exercícios que fazemos com arrays são preparatórios para quando trabalharmos com MySQL). Então para encerrar, vou deixar um exercício: tentem construir um sistema de menu e conteúdo parecido com esse último exemplo, usando APENAS UMA PÁGINA. Ou seja, você vai criar uma página chamada “index.php” e apontar todos os links para ela mesma. E o conteúdo da página muda conforme o link de menu que o usuário clique. Para fechar esse quarto ciclo de tutoriais, falaremos sobre como enviar emails a partir do PHP. Até amanhã.

Abraços,
Diego.

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.

abr
07
2009
0

Minicurso PHP: 4ª Parte – Formulários Web: Passagem de Parâmetros e Método POST (ParteI)

Olá Pessoal,

Segue o post de hoje, com algum atraso, mas foi por uma boa causa: eu quis incrementar um pouco mais com exemplos e outras explicações.

Finalmente entramos na parte IV do nosso minicurso. Daqui até o fim da semana falaremos sobre passagem de parâmetros entre páginas e formulários em PHP. É um assunto muito importante, e espero que o conteúdo seja assimilado por todos. Bem, até o presente momento a única coisa que fizemos foi utilizar variáveis e arrays declarados em um documento. Com o conhecimento que temos, é impossível passar valores de uma página para outra. O que não faz muito sentido, uma vez que a idéia de hyperlink é interligar vários documentos, construindo o que entendemos por web. O PHP nos permite passar parâmetros de duas formas distintas: usando a URL ou enviando dados em uma conexão paralela. A passagem de parâmetros pela URL é conhecida como método GET. Já a passagem de parâmetros por uma conexão paralela é conhecida como método POST. Em ambos os casos passamos informações de uma página para outra. Com isso seremos capazes de criar mecanismos de busca, login, cadastro de usuários, manipulação de dados no banco, upload de arquivo, envio de emails etc. Acho que com isso deu pra entender o quanto é importante estudar o assunto com atenção. Vamos ver cada um desses métodos com detalhes!

MÉTODO POST: FORMULÁRIOS

Ao criar um formulário web etiquetamos vários elementos de entrada de dados com as tags

. Dentro da tag

usamos alguns atributos importantes para o nosso estudo:

Name: Define o nome do formulário (pode ser usado como referência em funções JavaScript).
Action: Define o caminho do arquivo que receberá os dados do formulários.
Method: Define o método de envio dos dados do formulário. Admite os seguintes valores: POST e GET.
Enctype: Define o formato de como os dados serão enviados ao servidor. É obrigatório quando desejamos enviar arquivos a partir do formulário. Esse atributo só funciona com método POST.

O método POST não possui limite de tamanho para envio de dados. Outra coisa importante, os dados do formulário são enviados ocultos junto com a mensagem a ser enviada para o servidor. É o método mais usado, por questões de segurança e capacidade para envio de dados. Só usamos o método GET para troca de informações pequenas que não geram problemas de segurança. Veja a página abaixo:

FORM.PHP

1
2
3
4
5
<form action="recebeForm.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>

Nessa página criamos um formulário simples, com dois campos input e um botão para disparar o envio do formulário. Enviar para onde? Para o caminho declarado no atributo “action” da tag
!!!! E de qual forma? POST ou GET? Será enviado pelo método declarado no atributo “method”. No nosso caso, declaramos o método como POST. Toda vez que clicarmos no botão LOGIN, os dados digitados no campo do formulário serão enviados para a página “recebeForm.php”, usando o método POST. Ok! Enviar dados nós já sabemos mas… E como vamos receber esses dados na página “recebeForm.php”??? De uma forma tão simples quanto a tabuada de cinco. Para resgatar valores com PHP usaremos o array associativo $_POST. Ao enviar um formulário pelo método POST, seus dados são recebidos como um array e atribuídos a variável superglobal $_POST. Sendo $_POST um array, precisaremos de índices para referenciar cada posição. Lembrando que cada posição corresponde a um elemento do formulário. Os índices do array $_POST são os valores do atributo “NAME” de cada campo do formulário. Por exemplo, os dois campos de formulário da página FORM.PHP possuem os seguintes names: login e senha. Assim sendo, resgataremos os valores com $_POST["login"] e $_POST["senha"]. Veja o código abaixo:

RECEBEFORM.PHP

1
2
3
<?php
echo $_POST["login"]." - ".$_POST["senha"];
?>

Viram como é simples? Vamos brincar um pouco mais:

FORM.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- Nesse formulário irei cadastrar vários campos de diferentes tipos -->
<form action="recebeForm.php" method="post" id="form" name="form">
<label for="nome">Nome: <input type="text" name="nome" id="nome" /></label>
<label for="email">Email: <input type="text" name="email" id="email" /></label>
<label for="telefone">Telefone: <input type="text" name="telefone" id="telefone" /></label>
<label for="assunto">Assunto:
<select name="assunto" id="assunto">
<option value="elogios">Elogios</option>
<option value="sugestoes">Sugestões</option>
<option value="reclamacoes">Reclamações</option>
<option value="outros">Outros</option>
</select>
</label>
<label for="mensagem">Mensagem: <textarea name="assunto" id="assunto"></textarea></label>
<button type="submit">ENVIAR</button>
</form>

RECEBEFORM.PHP

1
2
3
4
5
6
7
8
9
10
11
<?php
//Vamos receber os dados do formulário, armazená-los em variáveis e imprimí-los na tela
$nome = $_POST["nome"];
$email = $_POST["email"];
$telefone = $_POST["telefone"];
//Recebo o valor enviado pelo SELECT assunto. Reparem que o valor resgatado corresponde ao VALUE do option selecionado pelo usuário
$assunto = $_POST["assunto"];
$mensagem = $_POST["mensagem"];
 
echo "Nome: $nome <br /> Email: $email <br /> Telefone: $telefone <br /> Assunto: $assunto <br /> Mensagem: $mensagem";
?>

Experimentem um pouco mais da passagem de parâmetros. Criem alguns formulários, resgatem valores, imprimam na tela, concatenem com strings (como fiz nos exemplos acima) e testem diferentes formatações. Amanhã falaremos sobre como trabalhar com checkbox, radiobuttons e select multiple. Dessa forma poderemos selecionar várias informações em um formulário e mandá-las agrupadas. É algo bem útil.

Enquanto isso, deixo um exercício para vocês praticarem: vamos montar uma página com o formulário de login. Os dados digitados pelo usuário serão comparados com valores armazenados em dois arrays. Caso o login e senha batam com os valores do array, imprima uma mensagem de sucesso, caso contrário, imprimo uma mensagem de erro. Seguem os códigos abaixo:

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
$login = array("user01", "user02", "user03", "user04", "user05");
$senha = array("senha01", "senha02", "senha03", "senha04", "senha05");
?>

Mãos a obra e bons estudos! Até amanhã.

Abraços,
Diego.

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