Lição 11: Passando variáveis com uso de formulários

Sites interativos se baseiam em entrada de dados pelos usuários. Uma das formas mais comuns de coletar dados e com uso de formulários

Nesta lição estudaremos como construir formulários e processar seus dados no servidor.

<form>

Para o elemento form destinado a marcar um formulário estão previstos, entre outros, dois atributos de suma importância, são eles: action e method.

action
Destina-se a definir o URL para o qual os dados do formulário serão enviados para processamento. Neste URL encontra-se o arquivo com o script de processamento dos dados.
method
Este atributo admite os valores "post" e "get" que são dois métodos deferentes de passagem de dados. Por enquanto você não precisa saber as diferenças entre estes métodos, basta saber que com "get" os dados são passados pelo URL e com post "post" são enviados em forma de um bloco de dados via um mecanismo denominado STDIN. Na lição anterior estudamos como recuperar dados passados no URL com uso de documentação$_GET. Nesta lição veremos como recuperar dados passados com uso do método "post".

Formulário em uma página HTML

A página contendo o formulário não precisa, necessariamente, ser uma página PHP. Não precisa nem mesmo estar no mesmo site que recebe seus dados para processamento.

O nosso primeiro exemplo mostra uma página contendo um formulário bem simples contendo apenas um campo de entrada de dados:


	<html>
	<head>
	<title>Formulário</title>
	</head>
	<body>

	<h1>Informe seu nome</h1>

	<form method="post" action="handler.php">
	<input type="text" name="username">
	<input type="submit">
	</form>

	</body>
	</html>

	
	

A renderização no navegador é conforme mostrada a seguir:

Form

Agora vem a parte divertida: receber e manipular dados com PHP

Para requisitar dados enviados por um formulário usamos documentação$_POST:

	
	$_POST["fieldname"];
	
	

Retorna o valor de um campo do formulário. Vejamos um exemplo.

Crie uma página contendo o formulário mostrado anteriormente. Crie outra página chamada "handler.php" (notar que este nome é o mesmo daquele constante como valor do atributo action da tag <form> no nosso formulário).

O arquivo "handler.php" é como mostrado a seguir:


	<html>
	<head>
	<title>Formulário</title>
	</head>

	<body>

	<?php

	echo "<h1>Olá " . $_POST["username"] . "</h1>";

	?>

	</body>
	</html>
	
	

Dados do usuário e condicionais

No exemplo a seguir manipularemos os dados do usuário com condicionais. Nosso formulário será com mostrado a seguir:


	<html>
	<head>
	<title>Formulário</title>
	</head>
	<body>

	<form method="post" action="handler.php">

	<p>Qual é o seu nome:</p>
	<input type="text" name="username"></p>

	<p>Qual é a sua cor favorita:
	<input type="radio" name="favoritecolor" value="r" /> Vermelha 
	<input type="radio" name="favoritecolor" value="g" /> Verde 
	<input type="radio" name="favoritecolor" value="b" /> Azul </p>

	<input type="submit" value="Enviar" />

	</form>

	</body>
	</html>
	
	

A renderização no navegador é conforme mostrada a seguir:

A seguir mostraremos um script que usa o dado relativo a preferência de cor do usuário para mudar a cor do fundo da página conforme sua preferência. Faremos isso criando uma condicional (ver lição 6) que usa a cor escolhida pelo usuário no formulário.

	<?php

	$strHeading = "<h1>Olá " . $_POST["username"] . "</h1>";

	switch ($_POST["favoritecolor"]) {
	case "r":
		$strBackgroundColor = "rgb(255,0,0)";
		break;
	case "g";
		$strBackgroundColor = "rgb(0,255,0)";
		break;
	case "b":
		$strBackgroundColor = "rgb(0,0,255)";
		break;
	default:
		$strBackgroundColor = "rgb(255,255,255)";
		break;
	}

	?>

	<html>
	<head>
	<title>Formulário</title>

	</head>
	<body style="background: <?php echo $strBackgroundColor; ?>;">

	<? echo $strHeading; ?>

	</body>
	</html>
	
	

O fundo será branco se o usuário não escolher uma cor. Isto é feito com o uso da declaração default que define a ação a tomar se nenhuma das condições for satisfeita.

Mas, o que acontece se o usuário não fornece seu nome? O resultado será somente "Hello". Vamos usar mais uma condicional para resolver esta questão.


	<?php

	$strUsername = $_POST["username"];
	 
	If ($strUsername != "") {
	    $strHeading = "<h1>Olá " . $_POST["username"] . "</h1>";
	}
	else {
	    $strHeading = "<h1>Olá visitante!</h1> ";
	}

	switch ($_POST["favorite color"]) {
	case "r":
		$strBackgroundColor = "rgb(255,0,0)";
		break;
	case "g";
		$strBackgroundColor = "rgb(0,255,0)";
		break;
	case "b":
		$strBackgroundColor = "rgb(0,0,255)";
		break;
	default:
		$strBackgroundColor = "rgb(255,255,255)";
		break;
	}

	?>

	<html>

	<head>

	<title>Formulário</title>
	</head>
	<body style="background: <?php echo $strBackgroundColor; ?>;">

	<? echo $strHeading; ?>

	</body>
	</html>

	
	

No exemplo anterior usamos uma condicional para validar o dado entrado pelo usuário. Neste caso particular, se o usuário não fornecer seu nome, não haverá grande prejuízo. Contudo em scripts mais avançados é essencial que se considere a possibilidade do usuário não entrar o dado solicitado ou mesmo entrar um dado do tipo totalmente diferente daquele que imaginamos quando criamos o formulário.

Exemplo: Formulário de contato

Com os conhecimentos que você já adquiriu sobre PHP você já está em condições de criar um formulário de contato usando a função documentaçãomail, que tem a seguinte sintaxe:

	
	mail(to, subject, message);
	
	

Começamos com nosso formulário:


	<html>
	<head>
	<title>Formulário de contato</title>
	</head>
	<body>

	<h1>Formulário de contato</h1>

	<form method="post" action="handler.php">
	<p>Assunto:<br /><input type="text" name="subject" /></p>
	<p>Menssagem:<br /><textarea name="message"></textarea></p>
	<input type="submit">
	</form>

	</body>
	</html>
	
	

A seguir temos o script PHP para processar os dados:


	<html>
	<head>
	<title>Functions</title>
	</head>
	<body>

	<?php

	// Enviar para (use seu endereço de e-mail)
	$strEmail = "name@mydomain.com";

	// Coleta dados do usuário
	$strSubject = $_POST["subject"];
	$strMessage = $_POST["message"];

	mail($strEmail,$strSubject,$strMessage);
	echo "E-mail enviado.";
	 
	
	?>

	</body>
	</html>
	
	

Convém notar que o exemplo só funcionará se você tiver acesso a um serviço de email. Por padrão este não é o caso em XAMPP e na maioria dos serviços de hospedagem gratuitos. Alguns serviços de hospedagem requerem que você inclua um header "from" conforme mostrado a seguir:

	
	mail("you@yourdomain.com", "Teste", "Isto é um teste de email", "From: me@mydomain.com");
	
	


<< Lição 10: Passando variáveis no URL

Lição 12: Sessões >>