abr
13
2009
2

Minicurso PHP: 4ª Parte – Formulários Web: Enviando email com PHP

Olá Pessoal,

Aproveitaram bem o feriadão? Espero que sim. Vamos retomar a vida normal!!! :-D

Conforme prometido, vamos ver como disparar emails a partir do PHP. Na verdade é bem simples, basta usar a função mail. Uma vez instalado e configurado um serviço de SMTP (seu servidor de hospedagem, provavelmente, já tem isso pronto para você), basta usar a função, passar alguns parâmetros e pronto! Temos um email enviado. A função mail funciona da seguinte forma: mail(destinatário, mensagem, cabeçalhos), onde cabeçalhos são informações como remetente, cópia, cópia oculta e formato do email (texto normal ou html). Veja a função mail em funcionamento.

CONTATO.PHP

1
2
3
4
5
6
7
8
<form action="valida.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: <input type="text" name="assunto" id="assunto" /></label>
<label for="mensagem">Mensagem: <textarea name="mensagem" id="mensagem"></textarea></label>
<button type="submit">ENVIAR</button>
</form>

VALIDA.PHP

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?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"];
$assunto = $_POST["assunto"];
$mensagem = $_POST["mensagem"];
 
//Declaro os cabeçalhos do email - From indica o remetente da mensagem
$headers = "From: "$email \n";
//Cc: São os emails que receberão uma cópia da mensagem
$headers .= "Cc: teste2@teste.com.br \n";
//Bcc: São os endereços que receberão uma cópia da mensagem
$headers .= "Bcc: teste3@teste.com.br, teste4@teste.com.br \n";
//Content-type define o tipo do documento - text/plain indica texto comum, já text/html indica texto no formato HTML / charset é o padrão de codificação do conteúdo
$headers .= "Content-type: text/html; charset=iso-8859-1";
 
//Uso a função mail
if (mail("teste@teste.com.br", $mensagem, $headers)) {
echo "Ok";
}
else {
echo "Erro";
}
?>

A função mail() retorna um valor lógico TRUE ou FALSE. Bem, isso é o necessário para se enviar emails com PHP… Nada complicado, né? É provável que você não consiga disparar emails a partir do seu servidor local (localhost), devido a falta de um serviço de SMTP instalado. Recomendo testar direto em sua hospedagem, onde tudo já está devidamente configurado. :-)

Até amanhã, quando falaremos sobre funções para tratamento de strings (adentrando no tema validação de dados com PHP).

Forte abraço e até lá.
Diego.

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.

abr
05
2009
0

Minicurso PHP: 3ª Parte – Introdução ao PHP: Inclusão de arquivos – include() e require()

Olá Pessoal,

Começando a semana! Para finalizar o básicão do PHP, vamos trabalhar com inclusão de arquivos usando PHP. É comum precisarmos incluir um arquivo dentro de outro, seja para anexar um trechos de código, biblioteca de funções, declaração de variáveis e constantes, ou por questões de layout e organização da página. Pense em uma página com a seguinte estrutura: topo, menu lateral, conteúdo e rodapé. Digamos que a estrutura topo, menu e rodapé nunca mude, ou seja, apenas o conteúdo varia de uma página para outra. Existe mesmo a necessidade de repetir o código de topo, menu e rodapé para todas as páginas? Pois se fizermos desse jeito, será necessário atualizar todas as páginas do site, cada vez que mexernos em um item de menu por exemplo… Meio chato, né? Com as técnicas de inclusão de arquivos, podemos criar um único arquivo “menu.php” e incluí-lo em todas as páginas do site, de maneira que todas as modificações executadas nesse arquivo afetem o site como um todo. Legal, né?

A primeira instrução para inclusão de arquivos em PHP que veremos é a “include()”. Com o uso de include(), podemos inserir o código de um arquivo dentro de outro, basta passar o caminho do arquivo a ser incluído como parâmetro da função. Caso o arquivo não exista, include() retornará uma advertência (warning). Todo o código do arquivo incluído estará disponível para o arquivo principal da linha onde foi chamado a instrução “include()” em diante: variáveis, classes, funções etc. Veja a função include em ação:

Arquivo FUNCOES.PHP

1
2
3
4
5
6
7
8
9
10
11
12
<?php
function calculaMedia() {
$args = func_get_args();
$numArgs = func_num_args();
$soma = 0;
foreach ($args as $val) {
$soma += $val;
}
$media = $soma / $numArgs;
return $media;
}
?>

Arquivo PRINCIPAL.PHP

1
2
3
4
5
6
<?php
//Torno disponível para a página principal.php todos os códigos de funcoes.php
include (funcoes.php);
//Chamo uma função declarada em funcoes.php
echo calculaMedia(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
?>

Existe uma outra função chamada “require()”, cujo comportamento é o mesmo de include(), com um único diferencial: em caso de erro (arquivo inexistente) “include()” gera um warning (mensagem de advertência), já “require()” gera uma mensagem de FATAL ERROR, interrompendo a execução do programa principal. E por fim, temos as funções “include_once()” e “require_once()”. Elas fazem a mesma coisa que suas correspondentes, com um único diferencial: caso o arquivo passado como parâmetro já tenha sido incluído, essas funções não irão refazer a operação, ou seja inserir uma segunda vez o mesmo arquivo. É muito útil para inclusões feitas dentro de loops, evitando a repetição do mesmo código. Por questões de performance, evitamos usar a função “require_once()”.

Bem, é isso aí. Brinquem bastante com os conceitos básicos do PHP vistos até aqui. A partir de amanhã entraremos em uma nova unidade do nosso minicurso: passagem de parâmetros entre páginas. Trataremos de formulários em PHP, GET, POST e envio de emails. Aproveitem bem e até a próxima.

Abraços,
Diego.

abr
03
2009
0

Minicurso PHP: 3ª Parte – Introdução ao PHP: Funções

Olá,

Hoje vamos falar sobre funções no PHP. Como declará-las? O que é escopo de variável? Variáveis locais, globais etc. A função é uma das principais estruturas de uma linguagem de programação, com elas economizamos muitas linhas de código, podendo reutilizar linhas e mais linhas, sem precisar reescrevê-las. Em resumo, o uso de funções nos poupa muito “trabalho de corno”. A idéia principal é: existem certas tarefas que nós executamos de forma rotineira dentro de um sistema. Um exemplo? Uma verificação de segurança para os dados enviados a partir de um formulário web, impedindo que um hacker invada nosso sistema via SQL INJECTION (eu vou falar disso mais pro fim do minicurso… Prometo!!!), por exemplo. Ou seja, temos que verificar cada campo do formulário e validá-lo… Digamos que nosso site seja pequeno, e possua só… hum… 200 campos de formulário. E aí, quer escrever o mesmo código de verificação de segurança duzentas vezes? Claro que não! É bem mais fácil criar uma rotina que faça essa verificação, e apenas alimentá-la com os dados a serem validados. Ou seja, montamos o procedimento uma única vez, e aí apenas alimentamos ele com os dados para validação, ele valida e retorna o conteúdo todo formatado e redondo. Pois é… Uma função serve pra isso: modulariza nosso sistema, permitindo que reutilizemos trechos de códigos que executem determinadas ações que possam ser utilizadas em locais distintos do nosso programa.

DECLARANDO UMA FUNÇÃO

A função é a unidade básica para dotar nosso código de reusabilidade. Seu funcionamento é o seguinte: recebe um ou mais parâmetros (argumentos), processa esses parâmetros e retorna um dado. Funções são nomeadas livremente, e seguem as mesmas regras de nomenclatura para variáveis (inicia com uma letra, corta espaços etc.). A sintaxe para declaração de uma função no PHP é a seguinte: function nome_da_funcao($parametro01, $parametro02, …, $parametroN) { //bloco de instruções }

O operador “function” é obrigatório, e devemos especificá-lo antes do nome da função. Os argumentos da função são passados entre parênteses, separados por vírgulas. Os argumentos são variáveis com um escopo de ação limitado ao trecho de código entre os delimitadores “{” e “}”. O bloco de instruções é o conjunto de códigos a ser executado pela função. Essas instruções serão executadas gerando um resultado (um valor inteiro, string, array etc.), que deve ser retornado para o módulo ativador da função (quem a chama). Esse valor será retornado por meio da cláusula “return”. Veja a declaração de uma função, assim como sua chamada:

1
2
3
4
5
6
7
8
<?php
function calculaMedia($n1, $n2, $n3, $n4) {
$media = ($n1 + $n2 + $n3 + $n4) / 4;
return $media;
}
 
echo calculaMedia(5, 4, 3, 2);
?>

A função calculaMedia é declarada na linha 2 e chamada na linha 6, os argumentos são passados na chamada da função, recebidos e tratados. O valor resultante do cálculo da média é retornado para a chamada da função por meio da cláusula “return”. Assim sendo, a função executa todas as tarefas entre “{” e “}”, devolvendo apenas o resultado dessas tarefas, nesse caso, a média aritmética de quatro notas.

VARIÁVEIS LOCAIS E GLOBAIS

Experimente imprimir fora da função (ou seja, fora dos delimitadores “{” e “}”) a variável “$media”. Não apareceu nada, né? Pois é… Variáveis declaradas dentro de uma função possuem o que chamamos de escopo local. São chamadas variáveis locais aquelas cujo escopo se resume a função a qual foram declaradas. Se referenciarmos uma variável local fora da função onde ela foi declarada, não teremos acesso ao seu valor, pois para o resto do programa, aquela variável não existe… Veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
//Exemplo 01: Tento imprimir uma variável local fora do contexto de uma função
function calculaMedia($n1, $n2, $n3, $n4) {
            $media = ($n1 + $n2 + $n3 + $n4) / 4;
            return $media;
        }
 
        echo $media;
 
//Exemplo 02: Crio uma variável $media fora do contexto da função.
$media = 10;
function calculaMedia($n1, $n2, $n3, $n4) {
            $media = ($n1 + $n2 + $n3 + $n4) / 4;
            return $media;
        }
 
        echo $media;
 
//Exemplo 03: Imprimo o resultado da função e a variável $media
$media = 10;
function calculaMedia($n1, $n2, $n3, $n4) {
            $media = ($n1 + $n2 + $n3 + $n4) / 4;
            return $media;
        }
 
        echo $media."<br />".calculaMedia(5, 6, 7, 8);
?>

Percebeu que o PHP trata de forma diferenciada as variáveis declaradas dentro e fora de uma função? E por que quando declarei $media, em um escopo mais amplo que o local, ela não sobrescreveu a variável local homônima? Simples: variáveis locais predominam dentro do escopo da função. Ok, até aqui todos entenderam. E se eu quiser tornar disponível para todo o programa uma variável declarada dentro de uma função, sem precisar retorná-la? Ou declarar uma variável fora do escopo local, e ainda assim torná-la disponível dentro da função? A solução para isso é declarar uma variável como “global”. Variáveis globais são aquelas acessadas a partir de qualquer ponto da aplicação. Para declarar uma variável global, basta usar a cláusula “global”. Veja o código:

1
2
3
4
5
6
7
8
9
10
11
12
<?php
//Declarando variáveis globais
$somaNotas = 10;
 
function calculaMedia() {
            global $somaNotas;
            $media = $somaNotas / 4;
            return $media;
        }
 
        echo calculaMedia();
?>

PASSANDO PARÂMETROS

Existem duas formas de passar parâmetros para uma função: por valor e por referência. A passagem de parâmetros por valor é o modo default do PHP: nessa situação os parâmetros são tratados como variáveis locais da função, independente do seu valor externo. Veja um exemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function calculaMedia($n1, $n2, $n3, $n4) {
$media = ($n1 + $n2 + $n3 + $n4) / 4;
$n1 = $n3;
$n2 = $n4;
return $media;
        }
        $n1 = 5;
$n2 = 6;
$n3 = 7;
$n4 = 8;
calculaMedia($n1, $n2, $n3, $n4);
        echo $n1, $n2, $n3, $n4;
?>

Ok. As variáveis manipuladas dentro de uma função não alteram valores de variáveis externas. Agora, com a passagem de parâmetros por referência, todas as alterações realizadas na variável dentro da função são válidas para o escopo externo à função. Para indicar a passagem de parâmetros por referência, é preciso utilizar o operador & antes do parâmetro. Veja como fica:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$n1 = 5;
$n2 = 6;
$n3 = 7;
$n4 = 8;
function calculaMedia(&$n1, &$n2, &$n3, &$n4) {
$media = ($n1 + $n2 + $n3 + $n4) / 4;
$n1 = $n3;
$n2 = $n4;
return $media;
        }
calculaMedia($n1, $n2, $n3, $n4);
        echo $n1, $n2, $n3, $n4;
?>

CALCULANDO O NÚMERO DE ARGUMENTOS DE UMA FUNÇÃO

O PHP permite nos permite passar N argumentos para uma função, mesmo que eu não saiba quantos e quais são esses parâmetros. Ou seja, eu posso resgatar os parâmetros de uma função de forma dinâmica. A função func_get_args() retorna um array com todos os argumentos da função. Já a função func_num_args() retorna o número de argumentos que essa função possui. Veja o código abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
function calculaMedia() {
$args = func_get_args();
$numArgs = func_num_args();
$soma = 0;
foreach ($args as $val) {
$soma += $val;
}
$media = $soma / $numArgs;
return $media;
        }
echo calculaMedia(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
?>

Durante todo o minicurso trabalharemos com funções, sejam as nativas da linguagem ou aquelas que criaremos durante os tutoriais. Estudem bem o tema e até amanhã com o último tutorial dessa parte sobre introdução ao PHP: requisição de arquivos com as funções include() e require(). Até lá!

Abraços,
Diego.

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