0% acharam este documento útil (0 voto)
98 visualizações

Com Banco de Dados para Front-Ends: Uma Abordagem Prática em Uma Linguagem Simples

Enviado por

nebesgustavo
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
98 visualizações

Com Banco de Dados para Front-Ends: Uma Abordagem Prática em Uma Linguagem Simples

Enviado por

nebesgustavo
Direitos autorais
© © All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
Você está na página 1/ 202

Rodrigo Madureira Mocellin

Lucas Rafael Filipak

PHP
com Banco de Dados
para Front-Ends
Uma abordagem prática em uma linguagem simples
Copyright © 2020 by Rodrigo Madureira Mocellin
Lucas Rafael Filipak

© 2020 – É proibida a reprodução, mesmo parcial, por qualquer processo, sem autorização
por escrito do autor e do detentor dos direitos autora

Impresso no Brasil
Printed in Brazil

Diagramação
Maria Oliveira

Capa
Rodrigo Madureira Mocellin

Revisão
Dos Autores

Dados Internacionais de Catalogação na Publicação (CIP)


Ficha Catalográfica

Piedade, Ricardo Augusto Pontes.


P613c Como se tornar um advogado tributarista. / Ricardo Augusto Pontes
Piedade.– Olinda: Livro Rápido, 2018.

378 p.

ISBN 978-85-5707-903-8

Fabiana Belo - CRB-4/1463

Livro Rápido Editora


Coordenadora editorial: Maria Oliveira
Rua Dr. João Tavares de Moura, 57/99 Peixinhos
Olinda – PE CEP: 53230-290
Fone: (81) 4100.0410/ (81) 4100.0411
[email protected]
www.livrorapido.com

2
OS AUTORES

Lucas Rafael Filipak

Atualmente professor Universitário


e atuante no mercado.

Formado em análise de sistemas,


pós graduado em MBA em Gestão
de pessoas e Mestrado em
Educação e Novas tecnologias
(Brasil / França).

Rodrigo Madureira Mocellin

Atualmente professor Universitário


e atuante no mercado.

Iniciou seus estudos precocemente


aos 12 anos de idade quando se
interessou por HTML e veio
aperfeiçoando os conhecimentos
através de cursos profissionalizantes, técnicos e
superiores. Apaixonado por internet hoje além de
trabalhar com desenvolvimento web também atua na
área de marketing digital.

[email protected]

3
4
Agradecemos principalmente à Deus por nos dar o dom da
vida. Aos nossos familiares que são a fonte de energia de
nossos afazeres. Aos nossos alunos os quais são os
responsáveis por escrevermos esse livro. E aqueles que
dedicaram seu tempo para analisar esse exemplar.

5
6
PREFÁCIO

A linguagem de programação PHP está entre as


cinco mais usadas no mundo, tendo grande aplicabilidade
na criação de conteúdo dinâmico, principalmente para
programas e aplicações web.
Este livro detém o conteúdo necessário para
compreender e empreender de forma prática as
funcionalidades do PHP, assim como introduz
propriamente a lógica de programação, que como um
todo é um tópico requerido a qualquer linguagem de
programação.
Como uma das alunas do Professor Mocellin,
participei da fase de testes do presente livro, onde ao
longo da disciplina de ‘sistemas de gerenciamento de
conteúdo’, a cada aula foi apresentado o conteúdo de um
capítulo. Algumas aulas ministradas pelo próprio
professor e outras onde apenas o material foi entregue
aos alunos com objetivo de instrução por esforço próprio,
a cerca disto posso afirmar que os dois métodos
atingiram resultados muito semelhantes, de fato o
professor escreve da mesma forma que da aula. Pude
pela experiência ser levada de um estado de habilidade
inoperante de programação à capacidade de desenvolver
sistemas dinâmicos por completo.
Composto por um módulo passo a passo, o livro
dispõe de um material extensivo, associado a listas de
exercícios que incentivam o aluno a praticar o que
aprendeu, como também, ir além ante ao raciocínio e a

7
lógica de programação, abrindo novas possibilidades
referentes ao conteúdo precedente visto.
Com uma escrita simples, objetiva e de fácil
entendimento, possibilita o aprendizado inteiramente
autodidata, tanto aos já programadores que desejam
aprender uma nova sintaxe, como aos que sem nenhum
conhecimento prévio, agora visam adentrar o mundo da
programação.
Desse modo, digo a você leitor, que o que tem em
mãos é um semestre inteiro de aulas de programação. Ao
findar deste percurso, seguindo pontualmente a proposta
do livro, estará apto a desenvolver logicamente
programas em diversos níveis de complexidade, exercer
gerenciamento de dados e conteúdo, assim como
progredir facilmente no estudo de outros métodos e
linguagens de programação.

- Queila Cristina Lima

8
SUMÁRIO

INTRODUÇÃO ....................................................... 13
RÁPIDA HISTÓRIA ................................................. 17
POR ONDE COMEÇAR? ........................................... 18
VAMOS AO CÓDIGO ............................................... 26
Limitadores ....................................................... 26
Primeiro comando .............................................. 26
Variáveis ........................................................... 27
Variáveis pré-definidas ....................................... 31
Destruindo variáveis ........................................... 32
Constante ......................................................... 32
Array (vetor) ..................................................... 33
Array multidimencional (matriz) ........................... 35
Comentários ...................................................... 36
Atividades ......................................................... 37
TIPOS DE DADOS E OPERADORES ........................... 39
Tipos de Dados .................................................. 39
Coerção ............................................................ 41
Operadores ....................................................... 42
Operador de string ............................................. 43
Operadores de atribuição .................................... 44
Operadores de comparação ................................. 45
Operadores lógicos ............................................. 47
Incremento ....................................................... 49
Atividades ......................................................... 50

9
ESTRUTURAS DE CONTROLE (Condicionais)............... 52
Switch (Caso) ..................................................... 54
If (Se) ............................................................... 55
Aplicando formulário a condicionais ....................... 58
Atividades .......................................................... 61
LAÇO DE REPETIÇÃO .............................................. 64
While (enquanto) ................................................ 65
Do while (faça enquanto) ..................................... 66
For (para) .......................................................... 67
Foreach (para cada) ............................................ 68
Break ................................................................ 71
Atividades .......................................................... 71
PORCENTAGEM ...................................................... 74
Exemplo 1 - desconto .......................................... 74
Exemplo 2 – acréscimo ........................................ 75
Atividades .......................................................... 75
FUNÇÃO ................................................................ 77
Funções pré-definidas ......................................... 80
Date .............................................................. 80
Pow ............................................................... 83
Funções de texto ............................................. 84
Funções de números ........................................ 85
Explode .......................................................... 86
Implode ......................................................... 87
Htmlentities .................................................... 87

10
Replace ......................................................... 88
Criptografia .................................................... 89
Funções com vetores (array) ............................ 93
Funções de inclusão ........................................ 95
Atividades ......................................................... 97
TRABALHANDO COM FORMULÁRIOS ........................ 99
Atividades ........................................................ 104
VALIDAÇÃO DE DADOS ......................................... 105
CPF ................................................................. 107
Telefone .......................................................... 108
E-mail ............................................................. 109
CEP ................................................................. 110
Atividade ......................................................... 112
BANDO DE DADOS ............................................... 113
PhpMyAdmin .................................................... 118
Exibir ........................................................... 125
Inserir .......................................................... 127
Alterar ......................................................... 128
Excluir .......................................................... 129
Backup do banco ........................................... 129
Atividades..................................................... 131
Conexão com o MySQL via PHP ........................... 132
Comandos de conexão ................................... 132
Consulta/Inserção ao dados no banco .............. 135
Exibir dados do banco .................................... 139

11
Atividade ...................................................... 143
Consulta através de campo de busca ............... 143
Alterar dado.................................................. 146
Excluir definitivamente ................................... 154
Excluir para o usuário mantendo o dado salvo ... 156
Atividade ...................................................... 159
Validação de Login e Senha ................................ 160
Páginas restritas............................................ 165
Logout ......................................................... 167
Atividade ...................................................... 167
MANIPULANDO ARQUIVO DE TEXTO ....................... 169
Gravando arquivo (.txt) ..................................... 169
Lendo arquivo (.txt) .......................................... 176
Atividade ......................................................... 179
FORMULÁRIO DE E-MAIL ....................................... 180
Atividade ......................................................... 184
UPLOAD DE ARQUIVO ........................................... 185
Banco de dados ................................................ 185
Formulário ....................................................... 186
Algoritmo ......................................................... 187
Atividade ......................................................... 191
PROJETO - CRIANDO UM CARRINHO DE COMPRAS ... 192
Atividade ......................................................... 198
CONSIDERAÇÕES FINAIS ...................................... 199

12
INTRODUÇÃO

Bem vindo ao PHP com banco de dados para front-


ends. Se você é designer e já tem conhecimentos em
HTML e CSS você está no livro certo. Se você é back-end
e nunca estudou esta linguagem e gostaria de iniciar seus
estudos você também está no livro certo. Juntamos nessa
obra um pouco de tudo que ensinamos em aula, podemos
dizer que este é uma extensão de nossas aulas. O que
você vai encontrar aqui? Uma linguagem muito fácil e
acessível para quem não sabe nem por onde começar a
estudar o PHP com uma linguagem voltada para designer
e novos programadores sem aqueles termos técnicos que
só os back-ends entendem. Também está aqui o que o
front-end precisa saber para resolver seus problemas de
mercado, muitas vezes sem precisar depender de um
programador para que isso aconteça. O que não está
aqui? Não usaremos linguagem complexa orientada a
objetos, pois pra isso precisaria-mos de pré-requisitos
mais avançados de programação o que não é o foco desse
livro. Lembre-se esse livro é pra facilitar sua vida e não
complicar. Após a leitura você pode pensar, que
deixamos de falar sobre alguns assuntos, e é verdade,
pois o foco é ensinar o front-end com funciona a
linguagem e a resolver problemas do dia-a-dia.

Antes de tudo é importante deixar claro que a maneira


de pensar no PHP é muito diferente do HTML uma vez que
se trata de uma linguagem de programação e não de
marcação. Estamos lidando com algo que pensa e não

13
algo que apenas mostra. A ideia é fazer com que o PHP
faça o trabalho por nós, apenas dando as orientações a
ele. Outra orientação que fazemos é para a carga de
informação que você terá a partir de agora que além do
HTML, CSS e muitas vezes o JavaScript você estudará
linguagem PHP e linguagem SQL, isso significa que em
suas aplicações você trabalhará com cinco linguagens
diferentes para mostrar um único resultado.
O PHP tem uma extrema importância na web pois
é a linguagem mais usada atualmente e além disso é base
para vários sistemas open source como é o caso do Word
Press, Magento, Open Cart, Joomla entre outros.
Não é uma linguagem de difícil compreensão, mas
seu raciocínio lógico contará na velocidade do
aprendizado. No caso do seu raciocínio não ser tão
apurado você deverá dedicar mais tempo, ler e reler
quantas vezes for necessário. Para alguns é uma tarefa
difícil e complexa, mas não é impossível, e lembre-se
sempre “A persistência é a essência de um sonho” (Autor
Desconhecido).
Não é de um dia para o outro que você aprenderá
a programar, é um caminho longo e árduo. O que temos
aqui é o mínimo necessário de conhecimento que você,
designer, web designer ou apenas um curioso deve saber
para criar um sistema gerenciador de conteúdo
atendendo as principais exigências do mercado.
Se você está lendo esse livro é porque seu
objetivo no momento é aprender o PHP, então seja bem
vindo a esse mundo e prepare-se para passar um bom
tempo conosco.
Mas antes vamos a algumas explicações.

14
Ao contrário do HTML, CSS e JavaScript o PHP não
pode ser interpretado pelo navegador. Isso significa que
não adianta você programa-lo, salva-lo e simplesmente
executar em um navegador. Imagine só que essa
linguagem faz o acesso direto ao banco de dados, não
seria muito seguro eu deixar esses dados fáceis a
qualquer pessoa que aperta “F12”, muito menos uma
senha de acesso direto a banco de dados.
O PHP é interpretado por um serviço chamado
Apache do qual interpreta a codificação PHP, ou seja,
executa e responde ao navegador em formato de HTML.
Por esse motivo que quando abrimos o código-fonte de
uma página o mesmo não conseguimos ver o PHP ou
quando executamos um arquivo PHP ele não executa a
linguagem.
O serviço do Apache fica instalado dentro do
servidor que contratamos ou quando estamos em fase de
desenvolvimento no nosso próprio computador. Nós o
transformamos em servidor apenas para testar nossos
arquivos antes de colocar no ar.
Existem alguns pacotes de serviços com o Apache
que podemos instalar nos computadores pessoais para
testar nossas aplicações entre eles temos o popular
XAMPP tem também o WampServer, EasyPHP entre
outros.
Aqui nós vamos aprender instalar e configurar o
XAMPP.
Porque utilizar PHP?
- Roda em diferentes plataformas (Windows,
Linux, Unix)
- É compatível com quase todos os servidores
- É open source

15
- Roda eficientemente no lado servidor

Cliente Servidor
Browser Sistema Operacional
X
(X)HTML Web Server (Apache)
HTTP
CSS CGI’S (PHP)
Java Script Data Base (MySQLl)

Então vamos ao que interessa.

16
RÁPIDA HISTÓRIA

O PHP é o acrônimo de “Personal Home Tools” e


foi criado em 1994 por Rasmus Lerdof, para fazer o
acompanhamento de visitas do seu currículo online. Em
1995, Rasmus liberou o código fonte para o público,
permitindo que outros usuários utilizassem e
fornecessem correções para o código, a fim de
aperfeiçoa-lo.
Em abril de 1996 o PHP sofreu uma grande
mudança, incluindo suporte aos bancos de dados DBM,
mSQL, e Postgres95, cookies, e muito mais. Passando de
um conjunto de códigos para realmente uma linguagem
de programação. Em 1998 uma pesquisa revelou que
mais de 60 mil domínios utilizavam o PHP. No mesmo
ano, Andi Gutmans e Zeev Suraski começaram a
trabalhar na reescrita do código, dando mais robustez e
melhorando a performance em aplicações complexas.
Em maio de 2000, o PHP estava todo modificado,
foi lançado a versão 4.0 que incluiu o suporte para a
maioria dos servidores web, sessões em HTTP, saídas de
buffering e outros diversos métodos seguros de
manipular os dados.
Importante ressaltar que o PHP não parou de ser
atualizado até hoje.

17
POR ONDE COMEÇAR?

O PHP é uma linguagem de programação baseada


em scripts, que pode ser embutida no código HTML, mas
que não tem relação com o layout. Todo o processamento
é realizado no servidor, retornando apenas o HTML para
o usuário final. O PHP é open source, software de código
aberto, gratuito para baixar e utilizar.
Precisamos basicamente de duas coisas uma
IDE(Integrated Development Environment ou Ambiente
de Desenvolvimento Integrado), que se você já trabalha
com HTML poderá usar a mesma, caso não tenha poderá
usar o Notepad++, Sublime, PhpStorm, NetBeans entre
os diversos editores que código que existem.
Como citado vamos precisar de pacote de serviços
que contenha o Apache e o Mysql para trabalhar-mos
com banco de dados que será o XAMPP.

PHP Linguagem de programação

Apache Servidor WEB

MySQL Banco de Dados

Tabela 1

Baixe-o e o instale. Após a instalação do XAMPP


vamos as configurações. Provavelmente ele colocou em
sua área de trabalho o XAMPP Control, caso ele não esteja
lá, acesse o diretório C:/xampp e clique no ícone xampp-
control.

18
Ao abrir o painel de controle do XAMPP conforme
a Figura 1, você precisará dar o start no serviço do
Apache e no serviço do MySQL.

Figura 1

Os outros serviços não serão interessantes para o


momento.
Tanto o Apache quanto o MySQL deverão ficar
com o botão de actions em stop como na Figura 2 para
garantir que foram iniciados corretamente.

Figura 2

Caso os dois serviços não iniciem teremos que


fazer algumas configurações no XAMPP pra que o serviço
funcione adequadamente.

19
No caso de ficar vermelho no lugar do verde quer
dizer que existe alguma incompatibilidade de algum outro
serviço. Vamos verificar os principais serviços que
poderão te trazer problemas. O primeiro é o serviço do
Skype que usa a mesma porta que o Apache, no caso
dele estar sendo executado no momento não será
possível dar início ao Apache, nesse caso temos duas
opções, uma delas é encerrar o Skype, outra delas caso
o serviço do Skype não possa ser finalizado é a alteração
da porta do Apache.
Com o painel funcionando corretamente (os dois
serviços ficaram verdes) vamos testar o serviço do
Apache. Para isso abra o navegador de sua preferência e
insira http://localhost na URL. Então ele deverá abrir o
dashboard do XAMPP.
Caso seja necessário alterar a porta então
precisamos entrar nas configurações pra fazer essa
alteração. Pra isso no painel onde se deu start no apache
clique em config e Apache (httpd.conf), irá abrir um
arquivo no bloco de notas. Procure pela linha onde está
escrito “Listen 80” é uma das poucas linha que não
possuem o símbolo de # na frente, altere para “Listen
8888” como na Figura 3. A porta 8888 normalmente está
vaga, no caso de não estar tente por outra usando quatro
dígitos. Lembre-se de salvar esse documento e apertar o
start do Apache novamente. O novo teste deve ser
usando a URL http://localhost:8888 para chamar a nova
porta.

20
Figura 3

Se mesmo fazendo essas configurações não for


possível iniciar o Apache você poderá verificar se o
serviço IIS(Internet Information Services) ou serviços de
informações de internet, muito usado por quem trabalha
com linguagens Microsoft e deverá desliga-lo. Se ainda
assim não funcionar deve-se verificar se algum outro
serviço está usando a porta ou o próprio Apache já está
sendo executado, ou até mesmo se existe algum bloqueio
de segurança em sua máquina.
Ainda existe a possibilidade o serviço do MySQL
também não iniciar. Isso é comum quando já temos o
MySQL Server instalado pois ele exigirá usuário e senha
para o acesso. O acesso pode ser feito direto no MySQL
server se assim você preferir, o mais fácil é usar o serviço
que o XAMPP nos disponibiliza que é muito próximo do
que encontramos nos servidores de hospedagem.
Vamos aos testes. Com o dashboard do XAMPP
aberto no menu superior você deve encontrar e clicar na
opção PHPMyAdmin.

21
Figura 4

Se abrir o sistema do PHPMyAdmin como na


Figura 4 então está funcionando. Caso contrário vamos
as configurações.
Mais antes pra seu conhecimento o PHPMyAdmin
é um sistema gestor do MySQL desenvolvido em PHP e
de código aberto, seu manuseio é fácil e ajuda na gestão
do banco de dados uma vez que não é preciso ter
conhecimentos avançados na linguagem SQL para
gerenciar um banco.
Por padrão o XAMPP deixa o usuário de acesso ao
banco de dados como “root” e a senha em branco,
havendo outras aplicações em sua máquina que já
possua o MySQL server, será necessário definir uma
senha de acesso ao banco. Possibilitando assim o
PHPMyAdmin acessar ao banco.
Para essa configuração, retornamos ao painel de
controle do XAMPP, na linha do Apache vamos no botão
config e em seguida na opção phpMyAdmin abrirá um

22
bloco de notas. Em meio ao código procure pelo
“password”. No código perceba:
$cfg['Servers'][$i]['user']=
'root';$cfg['Servers'][$i]['password'] = ' ‘
Na parte ['user'] = 'root' é onde definimos o
usuário que manteremos como “root” e ['password'] = ‘ ‘
para a senha que está vazia. Entre os apóstrofos defina
uma senha ficando: ['password'] = 'novasenha’ lembre-
se de não usar caracteres maiúsculos, caracteres
especiais e espaço em branco.
De início não iremos usar a opção do banco de
dados mas posteriormente quando formos criar as
conexões deveremos definir essa senha para conseguir
interagir o PHP com o banco de dados.
Salientamos que o XAMPP é um pacote de serviços
que instamos em nosso computador para fazer os testes
de resposta do servidor. Quando inserimos nossas
aplicações no on-line a forma de configuração é outra e
isso pode variar de servidor para servidor. Dependendo
do serviço que se contrata você pode criar seus usuários
de banco de dados como eles já podem vir configurados,
verifique com a empresa que lhe vendeu o serviço,
normalmente eles dão suporte a isso.
Por padrão o XAMPP tem um diretório específico
para salvar seu projeto. Pra acessa-lo abra o painel de
controle em seguida no menu lateral direito na opção
Explorer como na figura 5.

23
Figura 5

Encontre a pasta “htdocs” todo seu projeto deverá


ficar nela. Lembre-se de criar uma pasta para cada
projeto e não apagar as pastas que já tem lá.
Após criar a pasta para testar insira a URL
http://localhost/novapasta para então executar o
projeto. No caso de haver alteração na porta do Apache
a URL ficará http://localhost:8888/novapasta ou com a
porta designada em sua configuração.
Tantos os nomes de pastas quando em arquivos
nunca use caracteres especiais, acentuações e espaços
em branco, com o risco de funcionar localmente e não
funcionar remotamente. Hífen e underline estão liberados
eles ajudam os nomes e na criação de prefixos e
organização dos arquivos.
A partir de agora tudo salva-se no htdocs e todos
os arquivos que eram de extensão .html agora serão de
extensão .php

24
Toda e qualquer informação sobre o PHP pode ser
obtida pelo site: http://php.net é onde você encontra
todo o manual de utilização, porém, com uma linguagem
muito técnica.
Chato? Complicado? Difícil? Pode ser, é questão
de acostumar, depois nosso cérebro faz isso
automaticamente.
Sabendo de quais recursos precisamos, como
funciona e como salvar agora vamos ao código e fazer
isso tudo acontecer.

25
VAMOS AO CÓDIGO

LIMITADORES

Todos os códigos PHP devem utilizar os


limitadores. Como exemplo de delimitadores temos:

<?php <script language=”php”>


comandos comandos
?> </script>

<? <%
comandos comandos
?> %>

O limitador mais comum de ser encontrado é o


<?php comandos ?>. Os limitadores <? e <% recisam de
uma configuração adicional, por isso são menos
utilizados.

PRIMEIRO COMANDO

Vamos ao primeiro comando e assim vamos iniciar


os primeiros testes. Abra a IDE de sua escolha e insira o
código:

<?php
phpinfo();
?>

26
Salve como index.php em uma pasta de testes de
nome a sua escolha (salve dentro da pasta htdocs) e
execute a URL no navegador de sua preferência:
http://localhost/suapasta.

Figura 6

Acabamos de usar a função do PHP que nos


mostra informações sobre o estado atual PHP em relação
ao servidor que está sendo executado. Nela podemos
saber qual versão do PHP está sendo executada, apache,
sistema operacional, host dentre tantas informações.

VARIÁVEIS

As variáveis são espaços (uma posição,


frequentemente alocados na memória) utilizados para
armazenar algum valor ou expressão. Importante
relembrar que as variáveis só “existem” enquanto o
programa está em execução. As variáveis, na maioria das

27
linguagens de programação, estão vinculadas a um “tipo
de variável” que determina que tipo de dados essa
variável pode receber. Mas em PHP NÃO é necessário
declarar as variáveis, isto é feito quando atribuímos
algum valor para elas.
Elas podem ser criadas no início do algoritmo ou
durante ele. Na execução do programa a variável pode
sofrer mudanças de valores. São elas que irão carregar
os dados que serão processados por seu sistema. Por
exemplo:
Defino um valor para a variável A
então A recebe 0
se eu mando exibir a variável A ele irá mostrar 0.

Após, eu atribuo a varável A o valor 1


então agora A armazena o valor 1
mandando exibir a variável A ele irá mostrar 1.

Ou seja, a variável A iniciou com um valor e durante o


processo ela mudou o valor.
No PHP definimos as variáveis usando o símbolo
de $ mais o nome da variável, ficando assim: $variavel.
Para criar variáveis em PHP é preciso seguir
algumas regras:

Regra Exemplo

- Iniciar por $ seguida por uma $idade, $_sexo


string (letra) ou o caractere “_”

- Não é permitido espaços entre os $nome pai


caracteres no nome das variáveis

28
- É case sensitive $var é diferente
de $VAR

- Números são permitidos, se não $tel1,


colocados no início dos nomes $endereco2

- Não pode utilizar caracteres $em@il, $nome!


especiais

Tabela 2

Obs: É aconselhável utilizar os nomes de variáveis


com letras minúsculas, pois as variáveis pré-definidas da
linguagem utilizam letras maiúsculas.
Para definir o valor que a variável receberá
colocamos o símbolo de igualdade seguindo do valor e
finalizando com o ponto e vírgula, ficando:
$variavel=valor;

<?php
$a=0;
echo $a;
?>

No exemplo definimos a variável $a com o valor 0


e usamos o comando echo para exibir o valor da variável
$a.

29
Agora vamos atribuir uma variação ao dado da
variável:

<?php
$a=0;
echo $a;
?>
<br/>
<?php
$a=$a+1;
echo $a;
?>

Como citado anteriormente se você já teve


contato com alguma linguagem de programação já ouviu
falar em tipagem de variável, que nada mais é que
informar a variável qual o tipo de dado ela vai receber,
se é um valor inteiro(int), se é um texto(string), se é um
valor verdadeiro ou falso (boolean) entre outros. Para o
PHP a variável pode sofrer uma mudança de tipagem
como no exemplo:

<?php
$a=1;
echo $a;
?>
<br/>
<?php
$a=’’Olá Mundo’’;
echo $a;
?>

30
Nesse algoritmo a variável recebeu o conteúdo 1
ou seja do tipo “INT” depois sofreu alteração para texto
ou seja “STRING”. Todo texto(string) quando declarado
na variável deve estar entre aspas. Os demais dados
devem ser declarados apenas o seu valor.

VARIÁVEIS PRÉ-DEFINIDAS

Diferente das variáveis normais, onde o usuário


cria e define um valor para ela, cada variável pré-definida
tem uma função já estipulada no PHP. Abaixo exemples
de variáveis e suas utilizações:

$_SERVER Informação do servidor

$_GET Variáveis do tipo GET

$_POST Variáveis do tipo POST

$_FILES Upload de arquivos

$_REQUEST Variáveis de requisição

$_SESSION Variáveis de sessão

$_COOKIE Cookies

Tabela 3

Mais pra frente faremos o uso de variáveis pré-


definidas para coisas específicas e isso fará mais sentido
para você.

31
DESTRUINDO VARIÁVEIS

<?php
$a=1;
echo $a;
unset($a);
echo $a;
?>

A função unset destrói a variável, ou seja, libera a


memória ocupada por ela, fazendo com que ela deixe de
existir. Note nesse algoritmo que quando exibimos a
primeira vez a variável A ela exibe seu valor, após usar o
comando unset e tentamos exibi-la novamente
recebemos uma notificação de variável indefinida.

CONSTANTE

Diferente da variável a constante também são


espaços alocados na memória, porém com a diferença
que ela deve iniciar com um valor e esse valor será o
mesmo durante todo o algoritmo.
Para definir constantes utiliza-se a função
“define”. A assinatura da função define é a seguinte:

<?php
define("pi", 3.1415926536);
echo pi;
?>

32
Veja que na constante chamamos pelo seu nome.

ARRAY (VETOR)

Vetor é uma variável que armazena mais de um


dado, isso é muito comum quando trabalhamos com
banco de dados aonde os dados que estão armazenados
no banco ficam armazenados no vetor. Então chamamos
cada dado de acordo com a necessidade do sistema.

<?php
$linguagens=array('PHP', 'Java', 'C#',
'Python');
var_dump($linguagens);
?>

Veja que aqui para declarar o vetor iniciamos a


variável e declaramos “array” e dentro declaramos então
os dados, o comando “var dump” mostra os dados de
uma variável ou vetor, é normalmente usado somente
nos períodos de teste do sistema.
No próximo exemplo teremos uma outra forma de
aplicar o vetor substituindo array apenas por colchetes e
declaramos seus respectivos valores. Observe a forma
que é exibido o vetor usamos o comando de exibição
seguido da posição que o dado se encontra no vetor. Por
padrão o vetor sempre iniciará na posição 0.

33
<?php
$linguagens = ['PHP', 'Java', 'C#',
'Python'];
var_dump($linguagens);
echo "<br/>";
echo $linguagens[3];
?>

No próximo exemplo veja que podemos nomear o


dado e depois exibi-lo pelo seu nome.

<?php
$filmes = ['Harry Potter' => 2002,
'Titanic' => 1999];
var_dump($filmes);
echo "<br/>".$filmes['Titanic'];
?>

Observe que nesse exemplo foi usado um “ponto”


entre o comando<br/> e o vetor. Isso se chama
concatenação. Quando precisamos exibir dois valores
com tipos diferentes podemos usar a concatenação do
contrário teremos que mandar exibir um tipo e depois o
outro ficando dessa maneira o código:

<?php
$filmes = ['Harry Potter' => 2002,
'Titanic' => 1999];
var_dump($filmes);
echo "<br/>"
echo $filmes['Titanic'];
?>

34
ARRAY MULTIDIMENCIONAL (MATRIZ)

Matriz é um vetor que armazena outro vetor. Eu


posso ter um vetor com vários outros vetores
armazenados. Vamos ao exemplo que fica mais fácil na
prática.

<?php
$ar = [
1 => [
1 => [
'ex1_1_1',
'ex1_1_2'
],
2 => 'ex1_2'
],
2 => 'ex2',
3 => 'ex3'
];
echo $ar[1][2];
echo $ar[1][1][0];
?>

O resultado desse exemplo foi: ex1_2ex1_1_1


Pois o primeiro “echo” mandou exibir posição 1 e
depois posição 2 a qual estava armazenado: ex1_2.
No segundo “echo” mandou exibir a posição 1
depois a posição 1 e posição 0 que é a primeira posição
de um vetor caso ele não seja definido, resultando em
exibir: ex1_1_1.
Veja outro exemplo usando texto(string).

35
<?php
$clientes = [
[
'nome' => 'Leonardo',
'endereco' => 'Rua vinte e tres, 23',
'telefones' => [
'residencial' => '2222-2222',
'comercial' => '5555-5555'
]
],
[
'nome' => 'Ricardo',
'endereco' => 'Rua trinta e tres, 33',
'telefones' => [
'residencial' => '3333-3333',
'comercial' => '6666-6666'
]
]
];
echo $clientes[0]['nome'];
echo '<br>';
echo $clientes[0]['telefones']['residencial'];
?>

COMENTÁRIOS

Os comentários são comandos ou anotação que


estão escritas no algoritmo, mas que o depurador não vai
executar. Existem dois tipos de comentários em PHP:
linha e bloco

36
De uma linha:

<?php
echo “teste”;
// comentário de 1 linha
?>
<?php
echo “teste”;
# comentário de 1 linha
?>

De bloco (múltiplas linhas):

<?php
echo “teste”;
/* Isto é um comentário
com mais de uma linha */
?>

ATIVIDADES

1) Se abrirmos um documento PHP no browser e


tentarmos visualizar o código fonte, tudo o que veremos
são elementos HTML. Essa afirmação é:
a) verdadeira
b) falsa

2) Escreva um documento PHP que, quando executado,


exibe a seguinte mensagem:
Seja muito bem vindo ao nosso site.

37
Obs. a string deverá estar armazenada em constantes
para daí então ser exibida.

3) Exemplifique os tipos de comentários utilizados no


PHP.
_________________________________________________
_________________________________________________
_________________________________________________
_________________________________________________
_________________________________________________

4) Faça o que se pede:


A – Crie uma variável chamada “clientes”.
B – Essa variável “clientes” será uma array
multidimensional que conterá dados de clientes.
C – Para cada item da array você deverá definir um
índice(chave). Sendo: nome, endereço, telefones.
D – Dentro do índice(chave) telefones será criado as
opções de residencial e comercial.
E – Os valores dos clientes devem ser fictícios. Não
esqueça de preenche-los.
F – Dentro da array clientes você deverá criar ao menos
3 clientes.
G – Exiba o nome e telefone residencial de cada cliente.

38
TIPOS DE DADOS E OPERADORES

TIPOS DE DADOS

O PHP suporta os tipos de dados mais utilizados:


int (inteiro, somente números inteiros), ponto flutuante
(float, números com casas decimais), string(texto), array
(vetor) e objeto (quando trabalhamos com linguagem
orientada a objetos). Importante ressaltar que o PHP
utiliza checagem de tipos dinâmica não sendo necessário
declarar o tipo de uma variável como já comentamos.
Isso quer dizer que uma variável pode ter diversos tipos
durante seu tempo de vida e o interpretador PHP decidirá
qual o tipo da variável em tempo de execução.

Int:
$php = 1234; # inteiro positivo na base decimal
$php = -234; # inteiro negativo na base decimal

Float:
$php = 0.234;
$php = 10.43;
$php = 2.3e4; # equivale a 2.3 x 104 (23000)

String:
- Uma string é uma cadeia de caracteres (letras,
números e caracteres especiais) e é definido através de
textos entre aspas

Ex: $x = “Uma string”;

39
U M A S T R I N G
0 1 2 3 4 5 6 7 8 9

Strings podem ser atribuídos de duas maneiras:

Apóstrofo ( ' )
Desta maneira, o valor da variável será exatamente o
texto contido entre o apóstrofo (com exceção de \\ e
\'). Além disso as variáveis não são interpretadas. Por
exemplo que você digitar echo ‘$a’ ele irá imprimir
$a.
Aspas ( " )
Desta maneira, qualquer variável ou caractere de
escape será expandido antes de ser atribuído. Ou seja
se eu digital echo “$a” e o valor atribuído a variável
“a” for 1 ele irá imprimir 1.

Quando nos referíamos a apóstrofos estamos


falando do que é popularmente conhecido como aspas
simples. Já para a dupla, usamos o termo aspas duplas.

Caracteres de escape:

Sintaxe Significado
\’ Apóstrofo
\” Aspas

Vamos ao exemplo:
<?php
$a=1;
echo 'Temos \'apenas\' $a livro.';
echo "Temos \"apenas\" $a livro.";
?>

40
COERÇÃO

Quando ocorrem operações entre dois valores de


tipos diferentes, o PHP converte o valor do resultado
automaticamente.
Exemplo:

<?php
$a =1;// $a é do tipo int
var_dump($a);
$b = $a + 3.7;// $b é do tipo float
var_dump($b);
$c = $b + 1.5; // $c é do tipo float
var_dump($c);
?>

É possível também haver essas conversões de


string para int ou para float conforme exemplo:

<?php
$a ="1";// $a é do tipo string
var_dump($a);
$b = $a + 1;// $b é do tipo int
var_dump($b);
$c = $a + 3.7;// $c é do tipo float
var_dump($c);
?>

A concatenação pode ser feita independente de


tipagem de dados. É com ela também que podemos exibir
dados de uma operação. Por exemplo:

41
<?php
$a=1;
$b=2;
$c=3;
echo $a+$b+$c;
$op=$a+$b+$c;
echo "<br/>$a+$b+$c=".$op;
?>

OPERADORES

Assim como o Excel o PHP faz suas operações


seguindo as regras da matemática. Onde multiplicação e
divisão vêm antes da adição e subtração, em caso de
parênteses ele irá calcular primeiro o que está dentro. Os
operadores:

+ Adição

- Subtração

* Multiplicação

/ Divisão

% Módulo (Resto de uma divisão)

** Exponencial (Introduzido na versão


5.6)

Tabela 4

42
Exemplo com parênteses:

<?php
Exemploecho(1 + 8 possibilidades:
com outras * 3);
echo((1 + 8) * 3);
?>

<?php
$a=1;
$b=$a + 2;
echo $b."<br/>";
$c=$b * $b;
echo $c."<br/>";
$d= 4 ** 2;
echo $d."<br/>";
$e= 5 % 2;
echo $e."<br/>";
?>

OPERADOR DE STRING

A operação com string é a concatenação,


conforme vimos anteriormente. Este operador é utilizado
para juntar duas ou mais strings.

<?php
$var = "Bom Dia";
$nome = "meu nome é Joaquim";
$saudacao = $var . ", " . $nome;
echo "$saudacao";
?>
43
OPERADORES DE ATRIBUIÇÃO

= Atribuição simples

+= Atribuição com adição

-= Atribuição com subtração

*= Atribuição com multiplicação

/= Atribuição com divisão

%= Atribuição com mod

.= Atribuição com concatenação

Tabela 5

O PHP facilita também em relação aos operadores


onde:

<?php
$a=1;
$a=$a+1;
echo $a;
?>

É o mesmo que:

<?php
$a=1;
$a+=1;
echo $a;
?>

44
Outros exemplos:

<?php
$a= 10;
$a-= 3;
echo $a."<br/>";
$b= 10;
$b*= 3;
echo $b."<br/>";
$c= 10;
$c/= 3;
echo $c."<br/>";
$d= 10;
$d%= 3;
echo $d."<br/>";
?>

OPERADORES DE COMPARAÇÃO

Usamos os operadores de comparação sempre


que precisamos saber se algo é verdadeiro ou falso.
Normalmente é utilizado para comprar números e
posteriormente dependendo do resultado o sistema
deverá se portar de formas diferentes.
Tabela de Operadores de Comparação

Operador Resultado

$x==$y Verdadeiro (True) se variável x é


igual a variável y. Usamos duas
vezes o símbolo de igualdade pois

45
no caso de usar apenas uma o
sistema irá entender que a variável
x está recebendo o valor da
variável y não fazendo uma
comparação.

$x===$y Verdadeiro (True) se o valor e o


tipo da variavel x for igual ao valor
e o tipo de y. Por exemplo: $x=1;
$y=1; Ambos tem o valor 1 e o tipo
inteiro (int). Agora se fosse $x=1;
$y=”1” não será verdadeiro pois o
tipo de x é inteiro (int) e y é
texto(string).

$x!=$y Não igual. Verdadeiro (true) se os


valore forem diferentes.

$x<>$y Diferente. Verdadeiro (true) se os


valore forem diferentes.

$x!==$y Não idêntico. A mesma regra


contrária vale para quando usamos
três iguais

$x<$y Menor que. Verdadeiro (true) se x


for menor que y.

$x>$y Menor que. Verdadeiro (true) se x


for maior que y.

$x>=$y Menor ou igual que. Verdadeiro


(true) se x for menor ou igual a y.

$x<=$y Menor ou igual que. Verdadeiro


(true) se x for menor ou igual a y.

Tabela 6

46
Vamos ao exemplo:

<?php
$a=1;
$b=1;
$c=2;
var_dump($a==$b);
var_dump($a<>$b);
var_dump($b<$c);
var_dump($b>=$c);
?>

Quando formos trabalhar com condicionais os


operadores de comparação farão mais sentido para você.

OPERADORES LÓGICOS

Os operadores lógicos servem para comparar


expressões de operadores de comparação.
Tabela de operadores lógicos:

Operador Resultado

$x and $y Verdadeiro (true) se tanto $x e $y


forem verdadeiros.

$x or $y Verdadeiro (true) se tanto $x ou


$y forem verdadeiros.

$x xor $y Verdadeiro (true) se $x ou $y são


verdadeiros, mas não ambos.

47
!$x Verdadeiro (true) se $x não é
verdadeiro

$x && $y Verdadeiro (true) se tanto $x e $y


forem verdadeiros.

$x || $y Verdadeiro (true) se tanto $x ou


$y forem verdadeiros.

Tabela 7

Quando utilizamos o operador and (&&) todas as


variáveis devem ser verdadeiras para que a expressão
seja verdadeira. Ao utilizar o or (||), se apenas uma
variável for verdadeira, a expressão toda se torna
verdadeira

<?phpVamos exemplificar diretamente no PHP:


$a = FALSE;
$b = TRUE;
$c = TRUE;
// AND
var_dump( $a && $b ); // False
var_dump( $b && $a ); // False
var_dump( $b && $c ); // True
// OU
var_dump( $a || $b ); // True
var_dump( $b || $a ); // True
var_dump( $a || $a ); // False
var_dump( $b || $c ); // True
// Negação (Não)
var_dump(!$a ); // Não VERDADEIRO =
True
var_dump(!$b ); // Não VERDADEIRO =
False

48
// XOR
var_dump( $a XOR $b ); // True
var_dump( $b XOR $c ); // False
?>

INCREMENTO

Variáveis que já possuem valores podem receber


incrementos ou pré-incremento como no exemplo:

<?php
$a = 5;
// pré-incremento
echo ++$a; // imprime 6 já faz a
alteração nesta linha
var_dump( $a ); // 6

// pré-decremento
echo --$a; // 5 já subtrai neste
momento
var_dump( $a );
?>

49
Ou pós-incremento:

<?php
$a = 5;
// pós-incremento
echo $a++; // 5 só muda na próxima linha
var_dump( $a ); // 6
// pós-decremento
echo $a--; // 6
var_dump( $a );
?>

ATIVIDADES

1 - Escreva um programa que concatena os valores das


variáveis seguintes e escreve uma frase no documento.
Use o comando echo.
$trecho1 = “Programar em ”;
$trecho2 = “PHP ”;
$trecho3 = “é muito fácil!”;

2 - Qual é o número que somado a 234 totaliza 520?


Escreva um programa para apresentar o resultado deste
cálculo.

3 - Em uma fábrica, 36 funcionários montam 96


computadores cada um todos os dias. Escreva um
programa que exiba a quantidade de computadores
montados ao final de 5 dias.

50
4 - O operador % (módulo) é usado, em PHP, para
efetuar cálculos de porcentagem. Essa afirmação é:
a) Verdadeira
b) Falsa

5 - No trecho do código seguinte:


<?php
$valor = 24;
$total = $valor *(15/3)+(17-(3*2)/2);
echo $total;
?>

O valor da variável $total será 134. Esta afirmação é:


a) Verdadeira
b) Falsa

6 - Fazer um programa que mostre o resto da divisão de


50 por 12 e imprima o resultado.

51
ESTRUTURAS DE CONTROLE
(CONDICIONAIS)

A lógica de uma condicional é bem simples de


entender, pois usamos muito no dia a dia. São decisões
que o sistema terá que tomar se uma condição for
verdadeira ou falsa usando os operadores de
comparação.
Um exemplo: quando o sistema precisar decidir se
um usuário pode se cadastrar ou não de acordo com sua
idade. Leia-se: Se a idade for maior ou igual a 18 então
faça o cadastro se não mostre o aviso que ele não pode
se cadastrar.
Outro exemplo: quando o sistema precisar decidir
se o usuário pode se cadastrar de acordo com uma faixa
de idade. Leia-se: Se a idade maior ou igual a 18 e menor
que 65 então faça o cadastro se não mostre o aviso que
ele não pode se cadastrar.

Valores

Se Verdadeiro
Condicional Resultado

Se Falso
Resultado

52
Quando há mais de uma condicional. É quando
existem mais de uma condição a ser comparada. Quando
temos mais de dois resultados usamos mais condicionais.
Por exemplo: o desconto na folha de pagamento
de acordo com o salário. Leia-se: Se salário for menor ou
igual a 2000 aplique o desconto de 8%, se o salário for
menor ou igual a 4000 aplique o desconto de 9% se não
aplique o desconto de 10%. Mesmo que 1000 seja menor
que 2000 e 4000 como a condição menor ou igual a 2000
vem primeiro ele fará o filtro nessa condição o que não
for irá para a próxima. Caso tenha mais níveis de
condição ele irá passar por todos até chegar no resultado.

Valores

Se Verdadeiro 1
Resultado
Condicional 1

Se Falso
1
Se Verdadeiro 1
Condicional 2 Resultado

Se Falso 2
Resultado

53
Para as com condicionais podemos usar os
comandos SWITCH e IF.

SWITCH (CASO)

A sintaxe de SWITCH fica:

<?php
switch(valor){

case(condiçãol1):
echo “retorno”;
break;

case(condição2):
echo “retorno”;
break;

default:
echo “retorno”;

}
?>

Na sintaxe do switch entramos com os valores que


podem ser variáveis, aplicamos cada condição,
retornamos o comando break para finalizar o switch. A
opção default é executada quando nenhuma das outras
opções foram escolhidas e não necessita do comando
break pois é a última instrução.

54
No exemplo prático:

<?php
$idade = 14;
switch($idade) {
case ($idade<=12):
echo "Criança";
break;
case ($idade>12 and $idade<18):
echo "Adolescente";
break;
default:
echo "Adulto";
}
?>

Alterne o valor da variável idade para testar seu


sistema.

IF (SE)

A estrutura if (se) é uma das mais importantes


implementações de muitas linguagens pois permite a
execução condicional de fragmentos de código.
A sintaxe do IF fica:
<?php
if(condição){
condição se verdadeira;

55
}
?>

O comando else estende um comando if para


executar uma instrução caso a expressão no comando if
seja falsa. Se for verdade, faça tal coisa, caso contrário,
faça outra coisa.
O comando else NÃO possui expressão lógica
(condicional).
No exemplo prático:

<?php
$idade=14;
if($idade<=12){
echo "Criança";
}else{
echo "Jovem";
}
?>

Elseif é uma combinação de else e if, porém, ao


contrário de else, ele executará a expressão alternativa
somente se a expressão condicional do elseif for avaliada
como verdadeira. Em resumo teremos outro if dentro do
else.
Vamos ao exemplo:

56
<?php
$idade=14;
if($idade<=12){
echo “Criança”;
}elseif($idade<18){
echo “Adolescente”;
}else{
echo “Adulto”;
}
?>

Exemplo usando mais do que um Elseif no


algoritmo:

<?php
$idade=14;
if($idade<=12){
echo “Criança”;
}elseif($idade<18){
echo “Adolescente”;
}else if($idade<65){
echo “Adulto”;
}else{
echo “Idoso”;
}
?>

Note que o comando elseif também pode ser


escrito com espaço.

57
APLICANDO FORMULÁRIO A CONDICIONAIS

O atributo que envia os dados do formulário para


o PHP é o “name”, ele será a chave para enviar os dados
que o usuário inseriu para que o PHP faça o que lhe é
instruído.
Além disso, é preciso entender as diferenças entre
os métodos de envio. “Post “ e “get”. Sempre que há
ação após a entrada de dados do formulário ele precisará
de um método pra enviar, caso não seja definido o
método por padrão será usado o “get”.
O método post é envia os valores via protocolo
HTTP enquanto o método get envia via URL. Ou seja o
post é enviado as escuras enquanto o get é visto pelo
usuário na URL outra grande diferenças de várias outras
é que o método get tem um limite de 2083 caracteres
podendo cortar dados caso ultrapasse esse limite,
enquanto o post é ilimitado, mas isso pode depender da
configuração do servidor que está rodando a aplicação.
Outros exemplos de aplicação get veremos a
frente.
Como exemplo usaremos três entradas de dados
dois números e um operador:
Arquivo index.php

58
<form action=”acao.php” method=”post”>
<label for="vum">Valor um:</label>
<input type="text" id="vum" name=”vum” />
<label for="op">Operador:</label>
<select for="op" name="op">
<option value="soma">+</option>
<option value="subtracao">-</option>
<option value="multiplicacao">*</option>
<option value="divisao">/</option>
</select>
<label for="vdois">Valor um:</label>
<input type="text" id="vdois" name=”vdois”
/>
<input type="submit" value="Calcular"/>
</form>

De acordo com o método usado mais o nome do


campo será como iremos chamar os dados do formulário
para a variável no PHP, veja:
Arquivo acao.php

59
<?php
$vum=$_POST['vum'];
$op=$_POST['op'];
$vdois=$_POST['vdois'];
if($op=="soma"){
echo "A soma de ".$vum. " e ".
$vdois. " é de ";
echo $vum+$vdois;
}elseif($op=="subtracao"){
echo "A subtração de ".$vum. " e ".
$vdois. " é de ";
echo $vum-$vdois;
} elseif($op=="multiplicacao"){
echo "A multiplicação de ".$vum. "
e ". $vdois. " é de ";
echo $vum*$vdois;
}else{
echo "A divisão de ".$vum. " e ".
$vdois. " é de ";
echo $vum/$vdois;
}
?>

Não houve necessidade de criar uma validação


para a divisão pois das opções dadas ao usuário essa
seria a única que sobraria.
Essa foi uma aplicação simples usando
formulários, validações de dados devem ser levadas em
consideração para evitar que o usuário erre. Você pode
fazer uma validação com HTML5 porem mesmo assim é
preciso fazer uma validação com o PHP pois um usuário
avançado saberia como driblar a validação usando
apenas o HTML.

60
ATIVIDADES

1 - O trecho do código seguinte tenta verificar se a


expressão 15 x 11 é maior ou igual a 213:

<?php
$num = 15;
$num2 = 12;
$resultado = $num * $num2;

If ($resultado => 213)


{
echo “O resultado está correto”;
}
else {
echo “O resultado está incorreto”;
}
?>

O algoritmo possui um erro. Identifique e forneça o


resultado correto.

2 - Elaborar um programa que vai definir se um número


é positivo, negativo ou zero

3 – Criar um formulário no HTML onde vai ser informado


o sexo (M ou F) através de uma caixa de texto. O
programa deve imprimir o sexo de acordo com o que foi
informado.
M – Masculino
F – Feminino
Qualquer outro valor – Sexo Inválido

61
4 - Efetue um algoritmo PHP que receba quatro notas de
um aluno, calcule e imprima a média aritmética das notas
e a mensagem de aprovado para média superior ou igual
a 7.0, a mensagem de recuperação para média entre 4.0
e 6.9 e a mensagem de reprovado para média inferior a
4.0.

5 - Efetue um algoritmo PHP que receba a altura e o sexo


de uma pessoa, calcule e imprima o seu peso ideal,
utilizando as seguintes fórmulas:
Para homens: (72.7 * A) – 58
Para mulheres: (62.1 * A) - 44.

6 - O trecho de código:

<?php
$valor = 34-(2*56)/4;
If (($valor > 5) || ($valor % 2 == 3))
{
echo “A condição foi satisfeita”;
}
else {
echo “Efetue outro teste”;
}
?>

Exibirá a seguinte mensagem: Efetue outro teste

Essa afirmação é:
a) Verdadeira
b) Falsa

62
7 - Efetue um algoritmo PHP usando o comando CASE
onde o usuário entrará com o número de cada operação
(dentro de uma varável mesmo) e o sistema responderá
deverá imprimir o nome da operação para o usuário,
sendo: 1. Saldo Conta Corrente
2. Sacar dinheiro
3. Fazer empréstimo
4. Sair
No caso do usuário entrar com um valor diferente das
opções acima a resposta do sistema deverá ser: Opção
Inválida.

63
LAÇO DE REPETIÇÃO

O laço de repetição é usado sempre que


precisamos repetir uma ação mais de uma vez, por
exemplo: Em um e-commerce temos vários produtos,
quando vou exibir esses produtos para o usuário a sua
estrutura é a mesma para todos os produtos, porém a
quantidade desses produtos que serão exibidas poderá
variar de acordo com o número de produtos que temos
cadastrados. Ou seja, a ação de exibir o produto poderá
ser repetida uma vez, ou várias. Assim como poderá não
exibir nenhum caso não haja cadastros.
O algoritmo de laço de repetição só será
executado quando uma condição for verdadeira e ficará
se repetindo enquanto essa ação continuar sendo
verdadeira.

O contador é iniciado para que a condicional em


algum momento não seja mais verdadeira, pois

64
dependendo de como você insere o algoritmo ele poderá
criar um looping infinito ou erro ao executar o código.
Dependendo de como você insere a condicional ao laço
ele pode não ter um contador, mas para isso a sua
condicional deve resultar em true ou false.
O contador inicial é declarado por uma variável e
depois incrementada ou decrementa dentro da ação do
laço. Por exemplo: $a=1, na condicional colocamos que
$a<10. Nesse caso 1 é menor que 10 então deve-se
executar o que está no laço, dentro do algoritmo do laço
declaramos que $a++ ou seja variável a que é 1 vira 2,
volta para a condicional onde 2 é menor que 10, então
executamos a ação do laço novamente e assim
consecutivamente até que a condição seja falsa quando
a variável a for igual a 10 o laço irá parar de ser
executado.

WHILE (ENQUANTO)

Os laços while são o tipo mais simples de criar um


'loop' em PHP. Ele pede que o PHP execute os comandos
repetidamente, enquanto a expressão for verdadeira.
O valor da expressão é verificado cada vez que se
passa no começo do ‘loop’.
Exemplo:

<?php
$a = 20;
while ($a < 30) {
echo $a."-";
$a++;
}
echo($a);
?>
65
Analisando esse algoritmo podemos ver que a
variável a iniciou com valor 20, entrou no ‘loop’ e foi
validado a condição “20 é menor que 30”. Como a
condição foi verdadeira a variável foi exibida e depois
incrementada com mais um. Como se trata de um
enquanto ele retorna para a validação de condição
novamente, só que agora a é 21, pois foi incrementado,
e valida novamente 21 é menor que 30 e por ser
verdadeiro exibe a variável que agora é 21, e assim
consecutivamente até a variável ir sendo incrementada e
chegar em 30. Quando chegar no 30 vai para a validação
de condição com a expressão “30 é menor que 30”, sendo
a validação falsa então o ciclo do ‘loop’ se encerra para
então ser exibido.

DO WHILE (FAÇA ENQUANTO)

O laço do while é bem similares ao loop while, a


diferença está no fato da condição ser testada no fim de
cada iteração.
Nos loops do while regulares a primeira iteração é
sempre executada, ou seja se a condição do laço não for
verdadeira uma resposta sempre será dada ao usuário.
Veja no algoritmo:

<?php
$msg="Looping";
$i=150;
do{
echo "$i - $msg <br/>";
$i++;
}while($i<=100);
?>
66
Nesse algoritmo a variável $i está com o valor
150, para a primeira condicional do loop ela já é falsa,
portanto, não haverá loop, porém, como foi inserido o DO
WHILE ele será executado ao menos uma vez. Faça o
teste mudando $i para 50 e veja que o loop acontecerá
normalmente até a condição ser falsa.

FOR (PARA)

O laço for, atua como contadores até que uma


determinada condição esteja satisfeita. O teste também
é feito no início do loop, assim como no while.
Veja a sintaxe:
<?php

for (expr1; expr2; expr3) {

instruções;

?>

A expr1 é executada uma vez no começo do loop.


No começo de cada iteração, a expr2 é avaliada. E se ela
for verdadeira, o loop continua. No fim de cada iteração,
expr3 é executada.
No contexto geral utiliza-se:
- expr1 para definir o valor inicial da variável de
controle
- expr2 para definir a condição de continuidade
do loop
- expr3 para atualizar a variável do controle do
loop

67
Vamos ao exemplo:

<?php
for ($i = 10; $i < 40; $i++) {
echo $i."-";
}
?>

Agora vamos a um exemplo mais complexo


usando mais de uma variável de entrada e mais
incrementos:

<?php
for ($a = 1, $b = 1, $c = 1; $a<5;
$a++, $b++, $c++) {
echo "a: " . $a . "<br>";
echo "b: " . $b . "<br>";
echo "c: " . $c . "<br>";
}
?>
Veja que nesse exemplo a condicional está
baseada somente na variável $a, mas as demais
variáveis sofrem incrementos e são exibidas.
Note que o sinal de; é que delimita cada
expressão.

FOREACH (PARA CADA)

É importante deixar claro que o comando foreach


é utilizado apenas para vetores e objetos. Ele facilita o
laço de repetição deixando-o mais simples para essas

68
duas situações. Ele retornará erro caso use variável ou
outro tipo de valor. Para ficar fácil de entender vamos
fazer um exemplo com o for para exibir os dados de um
vetor.

<?php
$cursos = ["CSS3", "PHP",
"JavaScript", "HTML5"];
for($i=0;$i<count($cursos);$i++){
echo
"Curso:".$cursos[$i]."<br/>";
}
?>

Nesse exemplo tivemos que usar o comando count


para identificar a quantidade de valores no vetor para
então conseguirmos criar a condição do laço.
Agora vamos fazer o mesmo algoritmo usando o
foreach veja como ficará mais simples.

<?php
$cursos = ["CSS3", "PHP",
"JavaScript", "HTML5"];
foreach($cursos as $nome) {
echo "Curso: " . $nome .
"<br />";
}
?>

Mais enxuto e o mesmo resultado. Aqui a variável


$cursos ficou como variável $nome, dentro do foreach
tratamos ele como $nome devido a essa atribuição.

69
E se no caso o vetor tiver com chave de
atribuição? Funciona da mesma forma inclusive podemos
exibir a chave em questão. Veja o exemplo:

<?php
$arr = array(
"nome"=>"João",
"sobrenome"=>"da Silva",
"idade"=> 53,);
foreach ($arr as $key => $value)
{
echo $key.":
".$value."<br/>";
}
?>
Como explicado na introdução do nosso livro.
Nossa ideia aqui não é falar de orientação a objetos. Mas
como o foreach trabalha com vetor e objetos.
Deixaremos aqui um exemplo usando objetos com
foreach:

<?php
$obj = new stdClass();
$obj->nome = 'Reginaldo';
$obj->sobrenome = 'da Silva';
$obj->email =
'[email protected]';

foreach ($obj as $prop => $valor)


{
echo "$prop: $valor <br>";
}

70
BREAK

Usado para a quebra de fluxo. Pode ser usado em


laços while, do while, for e foreach. Ao encontrar um
break dentro de um desses laços, o interpretador PHP
para imediatamente a execução do laço.
Veja o exemplo:

<?php
$a = 1;
while ($a < 100) {
echo " PHP $a <br>";
if($a==5) {
break;
}
$a++;
}
?>

Veja que o laço estava programado para parar


quando a variável $a fosse menor que 100. Porém
através de um if implantado no meio do algoritmo, há
outra condição ($a == 5) e quando esta for verdadeira o
comando break será ativado e então encerrrá o laço.

ATIVIDADES

1 – Escreva um programa que use um laço para escrever


a frase seguinte 15 vezes:
Como é bom programa PHP.

71
2 – Desenvolva um programa que mostre os números de
1 até 5 com seus respectivos quadrados.

3 – Escreva um programa para escrever todos os


números pares menores que 180.

4 – Um estudante de PHP, após estudar o laço while,


resolveu escrever um código que imprima a frase “Veja
esta frase” 20 vezes no documento.
<?php

$num=0;

while ($num >= 20) {

echo “Veja esta frase”;

$num++;

?>

Tem algo errado? Explique:


_________________________________________________
_________________________________________________
_________________________________________________

5 – Escreva um programa para encontrar todos os


números menores que 500 que são divisíveis por 4 e 9
ao mesmo tempo.

6 – Efetue um algoritmo que receba um valor, calcule


exiba a tabuada do mesmo.
Ex: Recebeu valor 5.
5x1=5
5x2=10

72
5x3=15
5x4=20
E assim consecutivamente até 10.

7 – Crie um vetor em PHP que receba 10 países. Imprima


todos os países com o laço de repetição em ordem
numérica.
Ficando:
1-PrimeiroPaís
2-SegundoPaís
3-TerceiroPáis
E assim até chegar aos 10

8 – Efetue um algoritmo PHP que receba 2 valores


escritos pelo usuário e imprima os números de dois em
dois entre eles. Faça a verificação caso o usuário escreva
o segundo valor maior que o primeiro.

73
PORCENTAGEM

Os cálculos de porcentagem estão presentes em


muitos códigos que desenvolvemos. Há muitas utilidades
para a porcentagem, como dar desconto, acréscimo,
montar gráficos, etc.
Vamos explicar a utilização das porcentagens em
cima dos exemplos:

EXEMPLO 1 - DESCONTO

Suponhamos que um produto que custe R$ 50,00


sofra um desconto de 15%. Qual o valor final do produto?

<?php
$valor = 50.00;
$percentual = 15.0 / 100.0;
$valor_final = $valor -
($percentual * $valor);
echo "O valor final do produto é:
" . $valor_final;
?>

O resultado será 42.5

74
EXEMPLO 2 – ACRÉSCIMO

Um produto, cujo valor original era de R$ 75,00,


teve um acréscimo de 12%. Qual foi seu valor final?

<?php
$valor = 75.00;
$percentual = 12.0 / 100.0;
$valor_final = $valor +
O resultado será 84. * $valor);
($percentual
echo "O valor final do produto
é: " . $valor_final;
?>

O resultado será 84.


Note que a única diferença entre o código de
desconto e de acréscimo é o sinal na operação final. No
desconto o valor é diminuído e no acréscimo o valor é
somado.
É possível colocar os cálculos na mesma linha:
$valor_final_acrescimo = $valor + ($valor *
$percentual /100);
$valor_final_desconto = $valor - ($valor *
$percentual /100);

ATIVIDADES

1 – Faça um programa para receber um valor em uma


variável e informar quanto é 25% desse valor.

75
2 – O valor da compra foi de R$ 348,53. Qual seria o valor
se fosse pago à vista com desconto de 8%?

3 – Crie um algoritmo para efetuar o pagamento de uma


compra em uma Loja de Sapatos. Há quatro
possibilidades de pagamento:
a) Pagamento à vista: há um desconto de 10% sobre o
valor total da compra;
b) Pagamento 30 dias direto: há desconto de 5% sobre o
valor total da compra;
c) Pagamento 60 dias direto: valor da compra sem
desconto;
d) Pagamento 90 dias direto: há um acréscimo de 5%
sobre o valor total da compra;
Após ler o valor total da compra, deve ser lido qual será
a forma de pagamento, deve ser mostrado o valor a ser
pago pela compra.

4 – Em um concurso de perguntas e respostas, um jovem


acertou 67 das 80 perguntas apresentadas. Qual foi a
porcentagem de acertos? E a porcentagem de erros?

5 – Uma loja repassa 6% do lucro a seus vendedores. Se


um produto custa R$ 70,00, qual o valor em reais
repassado a um determinado vendedor?

76
FUNÇÃO

Uma função é um bloco de código que executa


uma determinada tarefa, baseado em um conjunto de
valores fornecidos, ou parâmetros, e retornando um
único valor. Funções permitem a melhora na leitura do
código e correção de bugs, visto que blocos de códigos
bem testados podem ser reutilizados inúmeras vezes em
seus programas.
Para exemplificar uma função, vamos imaginar
um código que verifica se um CPF é válido. Esse código
tem mais ou menos 20 linhas. Se no cadastro existem 4
CPFs, teríamos que repetir o código 4 vezes, mas ao invés
disso, criamos uma função com esse código e apenas
chamamos ela quantas vezes for necessária.
Veja um exemplo:

<?php
function nome($nome){
echo "$nome da Silva<br/>";
}
nome("Joel");
nome("Maria");
nome("Paulo");
?>

77
Outro exemplo usando mais de um parâmetro:

<?php
function nomeano($nome, $ano){
echo "$nome da Silva, nascido
em $ano<br/>";
}
nomeano("Joel",1975);
nomeano("Maria",1963);
nomeano("Paulo",1950);
?>

Com valor pré-determinado, caso não entre


nenhum valor quando a função for chamada.

<?php
function semvalor($valor=10){
echo "O valor é $valor<br/>";
}
semvalor(350);
semvalor();
semvalor(100);
?>

78
Vamos deixar mais complexo, usando um laço de
repetição dentro de uma função:

<?php
$nomes=['Carlos','Roberto','Maria'
,'Ricardo'];
function imprimetodos($param){
foreach($param as $valores){
echo $valores.", ";
}
}
imprimetodos($nomes);
?>

Em alguns momentos você encontrará a opção


return ao final de algumas funções. O que isso significa?
Se chamado de dentro de uma função, a instrução return
imediatamente termina a execução da função atual e
retorna seu argumento como o valor da chamada da
função. Veja o exemplo:

<?php
function somar($valor1, $valor2)
{
return ($valor1 + $valor2);
}
$soma = somar(3, 5);
echo "O resultado é: " . $soma;
?>

79
Observe o uso da palavra-chave return para
definirmos o valor que será retornado pela função. A
diferença está que o valor retornado vai retornar para
algum lugar ($variável). Note que na chamada da função
a variável $soma vai receber o valor retornado.

FUNÇÕES PRÉ-DEFINIDAS

São as funções da linguagem de programação.


Cada linguagem tem a sua sintaxe. O PHP assim como
outras linguagens possui várias funções pré-definidas,
entre elas está a phpinfo() que vimos no início desse
livro. Vamos ver as mais usadas:

Date

Retorna a data e hora local do servidor. Isso pode


ser um problema uma vez que muitos servidores estão
fora do país e em fuso horário diferente. Mas o PHP tem
função para resolver esse problema.
A função retorna da data/hora de acordo como
determinamos nela. Confira a tabela de retorno.

Caractere Descrição Exemplo


d Dia do mês, 2 01 até 31
dígitos com zero
à esquerda
j Dia do mês sem 1 até 31
zero à esquerda
m Representação 01 a 12
numérica de um

80
mês, com zero à
esquerda
n Representação 1 a 12
numérica de um
mês, sem zero à
esquerda
y Uma 99 ou 03
representação do
ano com dois
dígitos
Y Uma 1999 ou 2003
representação de
ano completa, 4
dígitos
g Formato 12- 1 até 12
horas de uma
hora sem zero à
esquerda
G Formato 24- 0 até 23
horas de uma
hora sem zero à
esquerda
h Formato 12- 01 até 12
horas de uma
hora com zero à
esquerda
H Formato 24- 00 até 23
horas de uma
hora com zero à
esquerda
i Minutos com zero 00 até 59
à esquerda
s Segundos, com 00 até 59
zero à esquerda

Tabela 8

81
Esses são os mais utilizados. Confira a tabela
completa na documentação do PHP em: php.net.
Vamos aos exemplos na prática:

<?php
echo date("d/m/Y");
echo date("d-m-Y");
echo date("m/Y");
echo date("m/y");
echo date("Y-m-d");
?>

O último exemplo (date(“Y-m-d”)) é um formato


padrão muito utilizado, principalmente por bancos de
dados. Ou seja, caso você precise gravar uma data no
banco de dados deverá usar nesse formato.
Vamos aos exemplos usando hora. Conforme
citado o fuso horário é sempre um problema mas o PHP
já é preparado para isso, veja no exemplo que antes de
iniciarmos a função de data iremos fornecer a função de
fuso horário:

<?php
date_default_timezone_set('Ameri
ca/Sao_Paulo');
echo date('d/m/Y H:i:s');
echo date('Y-m-d H:i:s');
?>

Nesse exemplo (date('Y-m-d H:i:s')) é o padrão


de banco de dados. Para outras regiões do Brasil que o
fuso horário é diferente basta alterar o valor

82
‘America/Sao_Paulo para ‘
America/Rio_Branco’, ‘America/Porto_Velho’, ‘
America/Maceio’ conforme disponibilidade na
documentação do PHP em php.net.
Para dia de semana por padrão o PHP irá usar em
inglês, mas ele também tem uma função para alterar o
idioma, como no exemplo:

<?php
Caso você retire a função ‘setlocate’ o dia da semana irá
setlocale(LC_ALL, 'pt_Br',
aparecer no idioma padrão.
'ptb');
Pow echo strftime('%A');
?>

Função destinada a resolver potência ou raiz. Veja


no exemplo:

<?php
$numero = 4 ;
echo pow($numero, 2) ;
$numero = pow($numero, 1/2);
echo $numero;
?>

Note que no primeiro exemplo foi impresso o valor


da variável $numero (4) elevado a 2 potência. No
segundo exemplo o valor da variável $numero ainda era
4, pois não foi atribuído nada mais à ela. Na linha 3 do
exemplo está sendo atribuído a raiz quadrada de
$numero para a variável $numero.
Para fazer raíz utilizando a função pow é só
adicionar o 1/ na frente do radical da raiz. Exemplo:
Raiz cúbica: pow($variaval, 1/3);

83
Raiz quinta: pow($variaval, 1/5);
Funções de texto

Função Descrição

Converte uma string para


strtolower
minúsculas

Converte uma string para


strtoupper
maiúsculas

Converte para maiúscula o


ucfirst
primeiro caractere de uma string

Converte para maiúsculas o


ucwords primeiro caractere de cada
palavra

Tabela 9

Exemplos aplicados:

<?php
$texto="Texto texto";
echo strtolower($texto)."<br/>";
echo strtoupper($texto)."<br/>";
echo ucfirst($texto)."<br/>";
echo ucwords($texto);
?>

84
Funções de números

Função Descrição

Arredonda de 0 a 4 para baixo e de


round
5 a 9 para cima.

Arredonda para cima. Podendo


ceil
limitar as casas decimais.

Arredonda para baixo. Podendo


floor
limitar as casas decimais.

Gera número randômico podendo ou


mt_rand
não determinar mínimo e máximo.

Tabela 10

Exemplos aplicados:
<?php
echo round(2.4);
echo round(5.5);
echo round(3.6, 0);
echo round(3.665, 2);

echo ceil(3.665);
echo ceil(3.2);
echo ceil(-2.12);

echo floor(3.665);
echo floor(3.2);
echo floor(-2.12);

echo mt_rand(5, 15);


echo mt_rand();
?>

85
Explode

Essa função irá separar string em array ou


variáveis definidas. Explode irá separar baseado em um
separador definido. Por exemplo. Se você quer separar
as palavras de uma frase o separador será o espeço em
branco entre elas. Caso você queira separar itens de uma
lista separada por vírgula, a virgula será o separador.
Exemplo prático:

<?php
$nomes = 'Lucas Paula Rodrigo
Luciana';
$nomes_arr = explode(' ', $nomes);
var_dump($nomes_arr);
?>

Veja que no exemplo anterior o separador foi um


espaço em branco. Veja agora o exemplo com virgula:

<?php
$nomes =
'Lucas,Paula,Rodrigo,Luciana';
$nomes_arr = explode(',', $nomes);
var_dump($nomes_arr);
?>

86
Outra possibilidade, porém, não tão usual é de
separar em variáveis definidas. Veja no exemplo:

<?php
$local =
"foo:*:1023:1000::/home/foo:/bin/sh";
list($a, $b, $c, $d, $e, $f, $g)
= explode(":", $local);
echo $f;
echo $b;
?>

Exiba a variável $e, verifique que a mesma ficou


vazia, pois não houve dado a ser armazenado.

Implode

Ao invés de separar o implode irá juntar. Veja o exemplo:

<?php
$var =
array('Olá','é','legal','estudar','PHP
!');
echo implode(" ",$var);
?>

Htmlentities

Quando inserimos algum código HTML em


impressões dentro do PHP ele interpreta o código HTML

87
exibindo conforme formatação. Mas caso você queira
realmente exibir as tags sem que elas sejam
interpretadas usamos a função htmllentities. Veja o
exemplo:

<?php
echo '<h1>Nos temos a tag
interpretada!</h1>';
echo '<br>';
echo htmlentities('<h1>Nos temos
a tag interpretada!</h1>');
?>

Replace

Uma das principais funções de replace é a str_replace que


busca no texto um parâmetro definido e o substitui por
outro. Veja o exemplo:

<?php
$texto = 'Olá nome1 e nome2 sejam
bem-vindo';
$busca = [
'nome1',
'nome2'
];
$troca = [
'Lucas',
'Rodrigo'
];
var_dump(str_replace($busca,
$troca, $texto));
?>
88
Aqui no exemplo fizermos com duas substituições,
porém isso pode variar para cima ou para baixo a
quantidade.
Outra possibilidade é usando expressão regular,
para isso usamos a função preg_replace. Não se
preocupe caso não entenda expressão regular iremos ver
em breve quando falarmos de validação de dados. Veja
no exemplo prático:

<?php
$frase = 'Altera (o) texto via
(regex)';
var_dump(preg_replace('/\(\w+\)/
', '(Alterou aqui)', $frase));
?>

Veja que via expressão regular, não ficamos preso


a algo pré-definido. Na expressão regular /\(\w+\)/
significa qualquer palavra entre parênteses, e foi o que
ocorreu, onde (o) e (regex) foram substituídos por
(Alterou aqui).

Criptografia

Vamos ver aqui três funções de criptografia a


MD5, a SHA1 e a BASE64. Ambas irão transformar strings
em caracteres criptografados. A diferença é que a MD5 e
SHA1 podem criptografar, mas não descriptografam. Já
a BASE64 pode criptografar como descriptografar.
Existem sites que dizem descriptografar MD5 e
SHA1 porém eles usam dados de um banco pra fazer isso,

89
se a senha for de nível difícil certamente não irão
conseguir fazer a descriptografia.
Não precisamos nem falar que a criptografia é
usada para guardar dados sigilosos como senhas ou
dados bancários. É feito isso para que caso alguém tenha
acesso ao banco de dados não consiga decifrar pelo
menos tão fácil os dados.

MD5

A mais simples e mais comum entre elas o MD5


gera uma string alfanumérica de 32 caracteres, isso é
independente do tamanho da sua string. Por exemplo, se
for apenas 2 caracteres ou 50 caracteres eles irão virar
32 caracteres após sofrerem a criptografia.

Pode acontecer mesmo que muito raramente duas


strings diferentes gerarem o mesmo alfanumérico de
MD5.
Exemplo:

<?php
$senha = '123456';
echo md5($senha);
?>

90
Algo que é possível também, é fazer uma
criptografia da criptografia. Isso mesmo, executar um
código alfanumérico já criptografado outra vez. Veja:

<?php
$senha = '123456';
$senha_cripto=md5($senha);
echo $senha_cripto.”<br/>”;
$senha_cripto_cripto=
md5($senha_cripto);
echo $senha_cripto_cripto;
?>

SHA1

Praticamente igual ao MD5 o SHA1 se diferencia


pela quantidade de caracteres alfanumérico que é de 40.
O que deixa uma possibilidade ainda mais rara de haver
duas strings com o mesmo alfanumérico. Para usar o
SHA1 é igual ao MD5 apenas alterando a função. Veja o
exemplo:

<?php
$senha = '123456';
echo sha1($senha);
?>

Se quiser você também pode misturar as


criptografias. Veja:

91
<?php
$senha = '123456';
$senha_cripto=md5($senha);
echo $senha_cripto.”<br/>”;
$senha_cripto_cripto=
sha1($senha_cripto);
echo $senha_cripto_cripto;
?>

BASE64

Por ser uma codificação de mão dupla, ela irá


criptografar e depois descriptografar. Como exemplo
podemos usar lembretes de senha, após o usuário
escreve-la será armazenada no banco de dados
criptografada, quando ele solicitar a frase ela irá aparecer
descriptografada. Exemplo prático:

<?php
$frase = 'Essa frase será
criptografada e depois descriptografada';
echo "Frase original:". $frase;
echo "<br/>";
$cripto = base64_encode($frase);
echo "Criptografada: ". $cripto;
echo "<br/>";
$descripto = base64_decode($cripto);
echo "Descriptografada: ".
$descripto;
?>

92
Funções com vetores (array)

Existem funções definidas para array que irão


facilitar a navegação entre eles assim como sua
organização. Veja as mais usadas na tabela 11.

Função Retorno

current Mostrará o dado selecionado, no caso


de não ter havido navegação mostrará
o da posição 0.

next Avança no índice.

key Mostra o índice que está a nevegação.

prev Retorna no índice.

end Vai para o fim do vetor.

sort Ordena em ordem crescente para


número e alfabética para strings.

rsort Ordena em ordem decrescente para


números e alfabética para strings.

asort Ordem crescente de acordo com a


chave.

ksort Ordem decrescente de acordo com a


chave.

Tabela 11

93
Veja no exemplo:

<?php
$cursos =
array("PHP","CSS3","HTML5","MySQL");
var_dump( current($cursos) ); //
Retorna: PHP
echo "<br/>";
var_dump( next($cursos) ); //
Retorna: CSS3
echo "<br/>";
var_dump( key($cursos) ); //
Retorna: Íncice do elemento atual = 1
echo "<br/>";
var_dump( current($cursos) ); //
Retorna: CSS3
echo "<br/>";
var_dump( prev($cursos) ); //
Retorna: PHP
echo "<br/>";
var_dump( end($cursos) ); //
Retorna: MySQL
echo "<br/>";
var_dump( current($cursos) ); //
Retorna: MySQL
echo "<br/>";
var_dump( prev($cursos) );

Retorna: HTML5
echo "<br/>";
var_dump( key($cursos) ); //
Retorna: Íncice do elemento atual=2
?>

94
Com outras funções:
<?php
$cursos =
array("PHP","CSS3","HTML5","MySQL");
sort($cursos);
print_r($cursos);
echo "<br/>";
rsort($cursos);
print_r($cursos);
echo "<br/>";
asort($cursos);
print_r($cursos);
echo "<br/>";
arsort($cursos);
print_r($cursos);
?>

Veja que nesse segundo exemplo para exibir


usamos o print_r que é a função específica para exibir
estruturas de vetor, caso use apenas o echo não seria
possível ver todos os dados do vetor nem a chave de uma
só vez.

Funções de inclusão

Muito utilizada para facilitar a organização de


nossos arquivos. Como no HTML que traz arquivos
externos de css e javascript a função de inclusão irá linkar
com outros arquivos que são importantes para que a
página execute todos os algoritmos que precisa. Veja,

95
quando criamos uma função é porque temos a intenção
de usa-la mais de uma vez no algoritmo, mas muitas
vezes a mesma função poderá servir para outras páginas,
pra isso podemos criar um arquivo chamado funcao.php
e então incluí-lo em todas as páginas que necessitarem
dele. Outro exemplo que podemos citar é o uso do menu
de navegação em um website ou sistema web. O menu é
o mesmo para todas as páginas sendo assim podemos
criar um arquivo chamado menu.php e incluir em todas
as páginas que o menu de navegação deverá aparecer.
Existem quatro funções de inclusão, são elas:

Função Retorno

include Inclui o arquivo passado no


parâmetro. Caso ele não exista irá
dar um aviso e continuará a executar
o restante do algoritmo.

include_once Mesmo funcionamento do include,


porém só será importado caso o
arquivo não tenha sido importante
antes.

required Inclui o arquivo passado no


parâmetro. Caso ele não exista irá
interromper a execução de todo o
algoritmo.

required_once Mesmo funcionamento do required,


porém só será importado caso o
arquivo não tenha sido importante
antes.

Tabela 12

96
Para ficar mais fácil o entendimento. A função
include deverá ser usada quando o arquivo que será
importado não interferir no restante do algoritmo. Como
exemplo usamos o menu, caso o menu não carregue
corretamente ele não irá interferir no restante do
algoritmo, podendo o restante ser executado sem a
dependência do arquivo importado. Já no caso do arquivo
de funções o ideal seria usar o required pois o mesmo
influencia no restante do algoritmo. O _once tanto do
include quanto do required, só irá garantir que o arquivo
importado não seja importado mais de uma vez,
podemos incluí-lo uma vez no início do arquivo e depois
acabar esquecendo e incluir novamente. Não usando o
_once o arquivo poderá ser importado mais de uma vez,
um problema que isso pode causar é de alguma variável
ser alterada anteriormente e quando inclusa novamente
entrar com o valor original.
Para importar arquivos use como no exemplo,
apenas substituindo a função caso julgue necessário:

<?php
include "config.php";
?>

ATIVIDADES

1 – Criar uma função para fazer a soma de dois números.


E outra para fazer a divisão de dois números.

97
2 – Armazene a frase “Olá muitas pessoas tem se
destacado no mercado de trabalho” em uma varável.
Crie um algoritmo que elimine as palavras “muitas” e
“trabalho” da frase.

3 – Faça o que se pede.


A) Crie 2 arquivos o “index.php” e o “arrays.php”
inclua o arquivo “arrays.php” no “index.php”;
B) No arquivo “arrays.php” crie uma variável
chamada $clientes, nessa variável insira separado por
vírgula o primeiro nome de 10 pessoas (fictícios). No
mesmo arquivo crie uma segunda variável chamada
$frase e insira a seguinte frase “Olá -nome- seja bem-
vindo(a)”;
C) No arquivo “index.php” exiba a frase da variável
$frase com os nomes da variável $clientes. Deve exibir
os 10 nomes em um laço de repetição.

98
TRABALHANDO COM FORMULÁRIOS

Existem vários atributos de formulários que não


entendemos direito o seu funcionamento. Como um
formulário depende de uma linguagem de programação
para ser efetivo esses atributos acabam passando
despercebidos, vamos vê-los e entender suas
funcionalidades. Veja eles na tabela 13:

Atributo Função

name o identificador do formulário. Utilizado


principalmente em scripts client-side
(JavaScript);

action nome do script que receberá os dados


do formulário ao ser submetido; #
recarrega a mesma página.

method método de envio dos dados: GET ou


POST

enctype formato em que os dados serão


enviados. O default é urlencoded. Se
for utilizado um elemento do tipo
upload de arquivo (file) é preciso
utilizar o tipo multipart/form-data.

Tabela 13

Cada elemento do formulário deve possuir um


nome que irá identificá-lo no momento em que o script

99
indicado no ACTION for tratar os dados. É através dele
que o HTML irá enviar o dado para o PHP.
Pontos importantes que você deverá observar
quando criar seus formulários para manipular dados no
PHP:
1 – O formulário deve conter um botão do tipo
"submit" para poder enviar as informações;
2 - Todos os campos do formulário que serão
tratados no script PHP devem conter o parâmetro
"name", caso contrário, os dados não serão passados
para o script PHP;

Existem 2 métodos como as informações podem


ser passadas: GET e POST. O recomendável sempre, para
todos os formulários é usar o método POST, onde os
dados enviados não são visíveis nas URLs, ocultando
possíveis importantes informações e permitindo o envio
de longas informações. O GET é totalmente o contrário
disso, ficando as variáveis e valores visíveis na url.
Outra informação importante é que o método GET
suporta apenas 255 caracteres (isso pode variar de um
navegador para outro, mas no geral esse é o limite). Já
o método post é enviado via requisito HTTP seu tamanho
é definido pela configuração “post_max_size” do seu
servidor, mas pode ficar tranquilo quanto a isso pois
normalmente é suficiente para envio de informações
textuais.

100
Vamos a um exemplo:
index.html

<form action="exemplo.php"
method="post">
<label for="um">Sua idade</label>
<input id="um" name="idade"
exemplo.php
type="number"/>
<input type="submit" value="Ok"/>
</form>

exemplo.php

<?php
$idade=$_POST['idade'];
echo "Sua idade é:".$idade;
?>

Veja que a variável $idade está recebendo, pelo


método POST, o valor que contem no campo com o nome
“campo_do_formulario”.
Se o formulário tivesse sido enviado usando o
método GET, você simplesmente usaria $_GET no lugar
de $_POST.
Lembrando que $_POST e $_GET são variáveis do
sistema e devem ser escritas com todas as letras em
maiúsculo.
Vamos a outro exemplo agora fazendo com que o
algoritmo do PHP seja executado no mesmo arquivo do
formulário. Veja:

101
index.php

<?php
if (@$_REQUEST['botao'] == "somar") {
$numero1 = $_POST['n1'];
$numero2 = $_POST['n2'];
echo $numero1 + $numero2;
}
?>
<form name="teste" method="post"
action="index.php"> // ou poderia usar
action="#"

<label for="numero1">Número
1</label>
<input id="numero1" type="number"
name="n1"/>
<label for="numero2">Número
2</label>
<input id="numero2" type="number"
name="n2"/>
<input type="submit" value="somar"
name="botao" />
</form>

Este exemplo é um programa onde o usuário vai


informar dois números e o programa vai mostrar a soma
dos dois números informados. Foi utilizado o @ para
desativar a notificação que o PHP retorna informando que
ainda não foi clicado no botão.
A variável $_REQUEST é utilizada para pegar os
valores passados por POST ou GET. Essa linha é a

102
tradução de “se clicar em um botão chamado somar” ele
vai executar o bloco de código.
O símbolo da arroba é utilizado para inibir as
mensagens do PHP (que podem ser erros ou
notificações).
Vamos agora a mais um exemplo:
<?php
@$numero1 = $_POST['n1'];
@$numero2 = $_POST['n2'];
@$desejo = $_POST['desejo'];
if ($desejo == "somar") {
$resultado = $numero1 + $numero2;
}
if ($desejo == "subtrair") {
$resultado = $numero1 - $numero2;
}
echo @$resultado;
?>
<form name="teste" method="post"
action="index.php">
<label for="numero1">Número 1</label>
<input id="numero1" type="number"
name="n1"/>
<label for="numero2">Número 2</label>
<input id="numero2" type="number"
name="n2"/>
<br/>
<label>O que deseja?</label>
<input id="somar" type="radio" name="desejo"
value="somar"/>
<label for="somar">+</label>
<input id="subtrair" type="radio"
name="desejo" value="subtrair"/>
<label for="subtrair">-</label>
<br/>
<input type="submit" value="Calcular"
name="botao" />
</form>

103
Note que a atribuição das variáveis $numero1 e
$numero2 estão fora do if, pois indiferente de qual botão
for clicado, os valores devem ser armazenados.

ATIVIDADES

1 – Criar um formulário para o usuário informar o nome,


a data de nascimento, a cidade que nasceu e o programa
deve imprimir na tela.

2 – Criar um formulário onde o usuário vai informar o


número inicial, o número final e o programa deverá
mostrar todos os números pares no intervalo. Faça a
verificação caso o usuário escreva o segundo valor maior
que o primeiro.

3 – Crie um formulário que receba 3 valores sendo um


número, um operador matemático e outro número
conforme imagem abaixo:

Crie uma função para cada operação, e execute a


operação de acordo com a opção escolhida pelo usuário.
Exiba a operação com o resultado.

104
VALIDAÇÃO DE DADOS

A validação de dados é muito importante para que


seu banco de dados não fique sujo no momento de uma
gravação. É nela que poderemos criar padrões de como
os dados deverão ser gravados. Imagine que você precise
armazenar um número de CPF, cada usuário pode digitar
de uma maneira, somente números, com o traço antes
dos dois últimos números, com pontos a cada três dígitos,
ou seja, cada usuário pode usar um formato diferente.
Uma das formas mais fáceis de fazer isso é usar
uma biblioteca nativa do PHP chamada Regex uma
maneira simples de trabalhar com expressões regulares.
Para isso é preciso seguir algumas regras de tais
expressões que ao junta-las conseguiremos validar se o
dado de entrada do usuário está dentro do padrão que
determinamos.
Vamos as principais. Você poderá encontrar na
internet algumas expressões prontas, mas aqui também
iremos ver as mais usadas.

Expressão Função

[A-Z] Letras maiúsculas

[a-z] Letras minúsculas

[A-Za-z] Letras maiúsculas e minúsculas

[0-9] Números

[A-za-z0-9] Letras e números

105
[!?,.] Sinais de pontuação (O que for
definido aqui é o que o usuário
poderá digitar)

[\t] Espaço de TAB

[\s] Espaço em branco

Tabela 14

Vamos a um exemplo onde o usuário só pode usar


um único número em um campo.

index.php
<form action="result.php" method="POST">
<label for="num">Entre com o
número</label>
<input id="numero" type="number"
size="20" name="numero"
placeholder="Utilize apenas números
inteiros" /><br/>
<input type="submit"
value="Validar"/>
</form>

result.php
<?php
$name = $_POST['numero'];
if (!preg_match("/^[0-9]$/",$name)) {
echo "Somente um número inteiro";
}else{
echo "Validação correta";
}?>

106
Nesse exemplo, caso você tente usar algum
número com vírgula ou pontuação o sistema irá notificar
sobre o problema.
Fazendo apenas uma modificação na função
“preg_match” o sistema passará a aceitar mais do que
um número, mas que seja inteiro.
Altere: if (!preg_match("/^[0-9]*$/",$name)) {

Colocando o asterisco o sistema irá aceitar


qualquer número inteiro e não apenas um número.

CPF

Esse algoritmo não irá validar se o CPF é valido ou


não, apenas se ele for escrito da maneira que você
determinou ao usuário. Veja o exemplo:

index.php

<form action="result.php" method="POST">


<label for="cpf">CPF</label>
<input id="cpf" type="text"
size="14" name="cpf"
placeholder="000.000.000-00" /><br/>
<input type="submit"
value="Validar"/>
</form>

107
result.php
<?php
$cpf = $_POST['cpf'];
if (!preg_match("/^[0-9][0-9][0-9].[0-
9][0-9][0-9].[0-9][0-9][0-9]-[0-9][0-
9]$/",$cpf)) {
echo "CPF Inválido";
}else{
echo "CPF Válido";
}
?>

Pra não ficar tão trabalhoso a regra dentro da


função “preg_match” você pode escrever da seguinte
maneira:
preg_match("/^[0-9]{3}.[0-9]{3}.[0-9]{3}-[0-
9]{2}$/",$name)

TELEFONE

Para validar o telefone, podemos criar uma regra


onde o usuário pode entrar com o DDD mais o número,
podendo esse número ter 9 dígitos como é para os
celulares ou apenas 8 como é para os fixos. Independente
se é 8 ou 9 algarismos a validação deve aceitar.

108
index.php
<form action="result.php" method="POST">
<label for="tel">Telefone</label>
<input id="tel" type="text"
size="15" name="telefone"
placeholder="(00)00000-0000"/><br/>
result.php
<input type="submit"
value="Validar"/>
</form>

result.php
<?php
$tel = $_POST['telefone'];
if (!preg_match("^\([0-9]{2}\)[0-
9]{4,5}-[0-9]{4}$^",$tel)) {
echo "Telefone Inválido";
}else{
echo "Telefone Válido";
}
?>

E-MAIL

Seguindo a validação com e-mail devemos aceitar


qualquer letra, número, underline, hífen depois o @
seguido de letras, números seguido do .com, .net,
.com.br entre outras possibilidades de domínios, pra isso
o algoritmo fica:

109
index.php
<form action="result.php" method="POST">
<label for="mail">E-mail</label>
<input id="mail" type="text"
size="50" name="mail"
placeholder="[email protected].
br"/><br/>
<input type="submit"
value="Validar"/>
</form>

result.php
<?php
$mail = $_POST['mail'];
if (!preg_match("/^[^0-9][a-zA-Z0-
9_]+([.][a-zA-Z0-9_]+)*[@][a-zA-Z0-
9_]+([.][a-zA-Z0-9_]+)*[.][a-zA-
Z]{2,4}$/",$mail)) {
echo "E-mail Inválido";
}else{
echo "E-mail Válido";
}
?>
CEP

Seguindo a mesma linha de raciocínio do CPF, o


CEP é moldado de acordo com a forma que você quer que
o usuário digite, no caso iremos colocar como regra 5
número, o hífen e depois mais 3 números. Ficando:

110
index.php
<form action="result.php"
method="POST">
<label for="cep">CEP</label>
<input id="cep" type="text"
size="9" name="cep"
placeholder="00000-000"/><br/>
<input type="submit"
value="Validar"/>
</form>

result.php
<?php
$cep = $_POST['cep'];
if (!preg_match("/^[0-9]{5,5}[-][0-
9]{3,3}$/",$cep)) {
echo "CEP Inválido";
}else{
echo "CEP Válido";
}
?>

Observação: Mesmo que você crie uma validação


usando o HTML ou JavaScript, é sempre importante fazer
a validação com o PHP antes manipular o dado, pois um
usuário avançado consegue facilmente driblar a validação
por essas linguagens.

111
ATIVIDADE

1 – Faça o que se pede.


A. Crie um formulário com os seguintes itens:
a. Nome:
b. Telefone:
c. E-mail:
d. Login:
e. Senha:
B. Todos os campos devem ser obrigatórios;
C. A senha deve ser criptografada;
D. Faça a validação específica para cada item, e as
respectivas mensagens caso não esteja dentro da regra
de validação;
E. No caso de todos os dados estarem corretos dê a
mensagem de “Cadastrado com Sucesso”.

112
BANDO DE DADOS

Trabalhar com banco de dados é uma tarefa bem


complexa na qual iremos deixar de uma forma bem
simples pra você font-end ou que está aprendendo a
desenvolver agora. Saiba que o mundo das bases de
dados vai muito mais além disso que iremos passar aqui,
cabe também um estudo mais profundo e até a leitura de
alguns livros especializados.
O que você precisa saber é que iremos trabalhar
com o banco de dados MySql o qual possui uma grande
conectividade com o PHP, que inclusive tem um sistema
para gerenciamento baseado em PHP que é o
PhpMyAdmin que facilita muito para quem não tem o
domínio sobre banco de dados. Será esse sistema que
vamos ver aqui.
Mas antes é preciso que você entenda alguns
conceitos básicos de banco de dados para darmos
continuidade nesse aprendizado. Vamos a eles.
A estrutura de um banco de dados é baseada em
tabelas, ou seja, cada dado que eu precise armazenar
será um campo dessa tabela. Imagine que você precise
armazenar os dados de um usuário no banco e pra isso
precisará criar a tabela dos dados que serão
armazenados. Pra isso é preciso criar a tabela e dar um
nome à ela, em seguida determinar quais são os campos
dessa tabela e suas características. No caso do cadastro
do usuário vamos colocar os campos: nome, data de
nascimento, e-mail, CPF e senha para que esses dados

113
no futuro possam ser usados como forma de login em um
sistema.
Nossa tabela ficará assim:

Cadastro

nome

data_de_nascimento

email

cpf

senha

Tabela 15

Veja na tabela 15 que só listamos os itens que


iremos armazenar, com o nome da tabela no topo da
lista. Se eu precisar cadastrar produtos, terei uma tabela
produtos com os campos que precisarão ser
armazenados para essa tabela, se eu tiver que cadastrar
serviços o mesmo deve acontecer para essa tabela.
Além disso como citado anteriormente as tabelas
do banco devem ter seus campos seguido de suas
característica, que vem a ser informar ao banco de dados
que tipo de dado ele deverá armazenar e o tamanho do
espaço máximo que ele pode ocupar. Vamos aos tipos de
dados mais usados para que você possa entender:
Int – para números inteiro.
Date – para datas no padrão aaaa-mm-dd.
Time – para horário no padrão hh:mm:ss.

114
Datetime – para data e horário seguindo o padrão
aaaa-mm-dd hh:mm:ss
Varchar – para texto no geral com determinação
de tamanho (até 255 caracteres).
Text – para texto no geral com determinação
máxima de tamanho que pode variar de acordo com a
configuração de seu servidor.
Float – para números de ponto flutuante (números
com casas decimais).
Boolean – para verdadeiro ou falso.
Vale a pena entender como funcionam os outros,
porém na prática esses são que você mais vai usar.
Uma observação é no caso de um telefone, CPF,
CNPJ, CEP, senha, e-mail entre tantos outros, esses
dados podem ser armazenados como varchar uma vez
que são apenas dados armazenados, já situações como
datas e números devem ficar em tipos específicos uma
vez que eles poderão sofrer intervenções de consultas.
Posso criar no meu sistema um filtro através de
data, por exemplo: quero exibir um relatório de produtos
cadastrados entre uma data e outra? Se os campo do
banco onde armazeno a data não for do tipo de data não
irei conseguir fazer a consulta no banco de dados
resultando em não conseguir exibir pro usuário tal
consulta.
Agora que sabemos como funciona a questão de
tipo de dados a mesma tabela que fizemos de cadastro
agora ficará assim:

115
Cadastro

nome varchar(100)

data_de_nascimento date

email varchar(50)

cpf varchar(14)

senha varchar(32)

Tabela 16

Veja que no caso do date eu não precisei definir


tamanho pois o mesmo levará em consideração seu
padrão para determinas seu tamanho.
Ainda não para por aqui. É importante todo
registro na tabela ter um número identificador único.
Como assim? Vamos lá.
Imagine que nessa tabela de cadastro eu tenha
dois registros que se chamam Lucas, quando eu for fazer
uma consulta no banco para exibir para o usuário qual
dos Lucas ele deverá exibir? Complicado né? Por isso todo
o registro deve ser identificado por um número único de
identificação que normalmente chamamos de ID no
banco de dados.
Esse número de identificação preencherá
automaticamente sempre que houver no novo registro
dentro do banco de dados, evitando assim possíveis
conflitos de dados.
Além disso esse número identificador servirá
como “chave primária” de sua tabela podendo ser usada
como “chave estrangeira” em outra tabela.

116
Veja, o ID de um registro da tabela poderá ser
usado no armazenamento de outro registro em outra
tabela, simplesmente para associar um registro com
outro. Como assim? Imagine que existe uma venda, para
que essa venda aconteça é preciso registrar na tabela de
vendas que o usuário de ID 1 fez a compra produto de ID
1. Ficando assim:

Tabela 17

Dessa forma deixamos registrado no banco de


dados que um cliente comprou um produto, ou seja,
houve uma venda. Quando eu faço com que o PHP grave
esses dados no banco e depois o exiba, o sistema então
estará fazendo uma venda.

117
Caberá agora a você pensar na sua base de dados
quando estiver diante da criação de um banco, todas as
possíveis tabelas que ele terá e todas as possíveis
conexão de chaves para que os dados fiquem
organizados e contribuam para o desenvolvimento do
sistema.
Tanto o PHP quanto o banco de dados devem estar
em perfeita harmonia para que o fluxo que você
determinou para o sistema funciona de forma adequada.

PHPMYADMIN

Vamos agora fazer esse mesmo exemplo dentro


do sistema criando as devidas tabelas.
Para acessar o PhpMyAdmin basta acessarmos o
Dashboard do Xampp e então clicarmos no menu. Caso
tenha dificuldades para fazer isso retorne ao capítulo “Por
onde começar?” que fizemos esse processo passo a
passo.
O primeiro passo é criarmos uma base de dados
para depois criarmos as devidas tabelas, para isso clique
em Base de Dados e depois dê o Nome da base de dados,
seguindo de clicar no botão criar, como na figura 7.

Figura 7

118
O nome de sua base deve seguir o padrão de não
ter caractere especial
Agora você terá que criar sua tabela. Vamos usar
como exemplo a tabela 17 e fazer uma reprodução fiel
dela.
A tabela de cadastro tem 6 colunas, então na
configuração, ficará como na Figura 8.

Figura 8

Após executar, virá a hora de cadastrar os itens


da tabela. O primeiro campo deverá ser o ID, mas
lembre-se que ele será Auto Increment e chave primária,
portanto encontre na linha do cadastro a opção A_I e
cheque ela, como na figura 9. Após checar irá abrir uma
janela perguntando se esse campo será também de
chave primária. Pode clicar em executar.

Figura 9

119
Feito isso, continue o preenchimento da tabela
conforme a figura 10. Após o preenchimento clique no
botão Guarda.

Figura 10

Agora temos nossa primeira tabela. Todas as


tabelas irão ficar visíveis quando você clicar na sua base
de dados como na figura 11.

Figura 11

Para ver sua estrutura, alterar e/ou inserir mais


um campo, mudar o tipo de algum campo, você deverá

120
clicar na tabela e em seguida em estrutura, como na
figura 12.

Figura 12

Veja que na linha dos itens de sua tabela, temos


a opção de ações, a qual podemos alterar (mudar) ou
excluir (eliminar) seus itens. Na própria figura 12
podemos ver na parte de baixo a opção Add onde é
possível inserir mais um campo na tabela.
Feito a primeira tabela continue a criar as demais
tabelas da Tabela 17, de Produto e Venda.
Mas atenção a tabela Venda tem o ID como chave
primária e o cliente e produto como chave estrangeira,
portanto o índice dos campos de chave estrangeiras
devem ser selecionados como Index, como na figura 13.

121
Figura 13

Após selecionar a opção index irá abrir a janela de


Adicionar Índice, se quiser pode dar um nome a ela, ou
clicar diretamente em executar.
O fato de ter feito isso não significa que a ligação
da chave estrangeira está pronta, apenas que deixamos
esse campo preparado para receber uma chave
estrangeira.
Feito as demais tabelas sua base de dados deverá
ficar como na figura 14.

Figura 14

Após a criação das demais tabelas, clique no menu


Mais e em seguida em Desenhador, como na figura 15.

122
Figura 15

No desenhador, perceba que temos agora algo


muito parecido com nossa tabela17.

Figura 16

Para finalizar a criação dessa base de dados


iremos agora criar as ligações entre chave primária com
chave estrangeira.
Dentro do desenhador, clique na opção Create
relationship, como na figura 17.

123
Figura 17

Basta agora clicar no ID do Cadastro e depois


clicar no campo cliente da tabela venda. Após o aviso
clique em OK.
Faça o mesmo com o Produto selecionando a
opção Create relationship depois ID do Produto, clicando
no campo produto da tabela Venda. E clicando em OK.
Temos agora a base de dados completa como na
tabela 18, só que agora dentro do banco de dados.

Figura 18

124
Feito isso, agora iremos exibir, inserir, alterar e
excluir dados diretamente no PhpMyAdmin.
Dica: Você verá agora que o próprio
PhpMyAdmin gera os códigos SQL que iremos
precisar para realizar essas ações no PHP.

Exibir

Em sua base de dados clique na tabela “cadastro”


por exemplo: veja que o PhpMyAdmin retornou uma
resposta “MySQL não retornou nenhum cadastro”. Isso
porque não inserimos nada nessa tabela, porém ele nos
mostra o registro da figura 19.

Figura 19

Observe que com a resposta ele nos mostra o


código SQL de consulta, sendo: SELECT * FROM
cadastro, esse é o código SQL para consultarmos todos
os registros da tabela cadastro.
Existem algumas variações que podemos colocar
junto ao código, por exemplo: SELECT * FROM
cadastro WHERE ID = 2. Nesse caso eu posso criar
uma consulta específica para um ID, isso pode ser
mudado para o nome, CPF, email e etc, só mudando a
nomenclatura no código. Por exemplo: SELECT * FROM
cadastro WHERE cpf= '000.000.000-00'

125
Para strings podemos ter algumas variações
como: SELECT * FROM cadastro WHERE nome LIKE
'Rodrigo%'. Nesse caso o LIKE, junto do símbolo de %
no final do nome irá buscar todos os registros que iniciem
com o nome Rodrigo. Ou podemos fazer dessa forma:
SELECT * FROM cadastro WHERE nome LIKE
'%Lucas%', isso fará com que qualquer parte do nome
que tenha Lucas será encontrado.
Além disso, podemos criar ordenações onde a
consulta pode ficar por ordem alfabética ou numérica,
crescente ou decrescente. Por exemplo: SELECT *
FROM cadastro ORDER BY nome para crescente, ou
SELECT * FROM cadastro ORDER BY nome DESC
para decrescente.
Os comandos OR e AND que vimos anteriormente
no PHP também funcionam aqui quando vamos fazer
consultas onde temos mais de um parâmetro. Por
exemplo: SELECT * FROM `cadastro` WHERE
`email` = '[email protected]' AND `cpf` =
'000.000.000-00'.
Para fazer os testes das variações do SQL você
pode usar o próprio PhpMyAdmin, clicando no menu
“SQL” e inserindo os devidos código seguindo do botão
“Executar”.
Todos esses exemplos de variações do SQL foram
feitos exibindo todos os itens da tabela devido ao fato de
usarmos o * (asterisco) em todas as consultas. Para
fazermos as consultas exibindo somente itens que
desejamos podemos alterar o asterisco pelos que
desejamos exibir. Como no exemplo: SELECT nome, cpf
FROM `cadastro` WHERE id=2.

126
Para ficar mais fácil entender a consulta é
interessante termos dados inseridos na tabela para
podermos ver os filtros acontecendo.
Inserir

O PhpMyAdmin facilita muito a vida aqui, pois para


inserir dado direto por ele basta preencher o formulário
com os itens da tabela e então executar.
Para inserir dados clique na tabela e depois no
menu superior insere.
Com isso irá aparecer um formulário com os itens
de sua tabela, basta preenche-los, o legal é que
dependendo do tipo de campo ele mostra diferente. Por
exemplo: se o tipo do campo é date irá aparecer a ícone
em formato de calendário.
Importante aqui é sempre que for inserir um dado
pelo PhpMyAdmin deixar o campo ID em branco, pois o
mesmo é auto incrementável.
Para senha ficar criptografada você pode
selecionar na coluna de função a opção MD5 ou SHA1
conforme vimos anteriormente.
Após clicar em executar o próprio sistema irá criar
o código SQL e inserção de dado, facilitando assim
quando estivermos trabalhando com o PHP.
Por exemplo: INSERT INTO `cadastro` (`id`,
`nome`, `data_de_nascimento`, `email`, `cpf`,
`senha`) VALUES (NULL, 'Rodrigo', '1989-12-15',
'[email protected]', '000.000.000-00',
MD5('teste'));
Perceba que para inserir os dados o código SQL
coloca os itens da tabela primeiro seguido dos devidos
valores exatamente na mesma sequência.

127
Dica: O formulário do PhpMyAdmin não faz
validação de dados, ele irá aceitar qualquer valor
que seja compatível com seu tipo de dado.
Alterar

Tarefa simples para quem já inseriu pois irá abrir


os dados já gravados em um formulário igual ao de
inserção.
Basta encontrar o registro e clicar em edita como
na figura 20.

Figura 20

Irá abrir no mesmo formulário de inserção com os


campos preenchidos, basta alterar os dados e clicar em
executar.
Com isso irá gerar o código de update usado no
SQL para alterar um registro já gravado como no
exemplo: UPDATE `cadastro` SET `nome` =
'Lucas', `email` = '[email protected]', `cpf` =
'111.111.111-11' WHERE `cadastro`.`id` = 1;
Diferente da inserção o alterar insere o item da
tabela seguido o = (igual) seguido do valor que foi
alterado e por último faz a indicação de qual é o ID que
pertence a alteração.

128
Excluir

Uma vez excluído o dado do banco não dará mais para


recupera-lo a não ser que você tenha feito um backup do
banco.
Essa tarefa é a mais fácil, pois basta clicar em
apagar ao lado da opção edita conforme mostra a figura
19.
Mas antes de excluir definitivamente o
PhPMyAdmin irá confirma a exclusão já dando o código
SQL que fará essa ação: Você realmente deseja executar
"DELETE FROM `cadastro` WHERE `cadastro`.`id`
= 1"?
Uma boa prática nos bancos de dados é usar a
opção alterar ao invés de excluir, pois dará para
recuperar o dado de forma mais fácil.
Para isso basta você inserir junto a sua tabela um
campo chamado ‘status’ aonde ele terá a chave 0 e 1
onde 0 é inativo e 1 é ativo. Sempre que você por exibir
o dado verifique se ele está ativo ou inativo. Por exemplo:
SELECT * FROM `cadastro` WHERE status = '1'
assim só irá exibir os ativos. Para excluir a invés de
excluir definitivamente faça uma alteração no campo
‘status’ passando de 1 para 0.
Sendo assim, caso o usuário do sistema exclua um
dado sem querer se torna mais fácil recuperar apenas
encontrado o dado e alterando seu ‘status’.

Backup do banco

Essa tarefa além de servir para você fazer


backup servirá também como forma de migrar seu banco

129
de dados que está sendo configurado de forma local para
um servidor on-line.
É uma tarefa simples de ser feita no PhpMyAdmin.
Acesse sua base de dados, clique no menu superior em
exportar, e sem seguida em executar conforme figura 21.

Figura 21

Ao executar irá baixar um arquivo denominado


com o nome da sua base de dados com a extensão .sql.
Para fazer o contrário, ou seja, inserir o backup do
banco de dados em uma nova base basta inicialmente
criar uma base de dados sem tabelas conforme vimos o
início desse capítulo e depois clicar no menu superior
importar. Clique em escolher arquivo conforme figura 22.

130
Figura 22

E em seguida no botão executar.


O próximo passo é criar a conexão entre o PHP e
o MySQL para que possamos gravar, alterar, excluir e
exibir os dados.

Atividades

1 – Crie uma base de dados seguindo os seguintes


parâmetros:
A) Tabela de cadastro de veículos, contendo suas
principais características;
B) Tabela de cadastro de peças de veículos, lembrando
que uma peça poderá se adequar a mais de um veículo,
por exemplo: A vela do Chevrolet Agile 1.4 2015 pode ser
usada também no Chevrolet Montana 1.4 2015 pois é o
mesmo motor, pra isso você deverá criar uma tabela de
conexão como especificado na parte C dessa atividade;
C) Tabela de conexão entre veículo e peça.

131
2 – Agora aplique a tabela criada na Atividade 1 dentro
do PhpMyAdmin, criando suas conexões e depois a
exportando.

CONEXÃO COM O MYSQL VIA PHP

Existem alguns métodos para fazermos a


interação PHP/MySQL, aqui iremos tratar com a mais
básica delas, o comando mysqli do PHP. Saiba que
existem outros comandos como o “mysql” que parou de
ser ligo na versão 7 do PHP e o PDO que usa orientação
a objetos para a comunicação com o banco. Como nosso
objetivo é ensinar font-ends a programar iremos usar a
forma mais simples.

Comandos de conexão

Para interagir com uma base de dados MySQL existem


três comandos básicos que devem ser utilizados: um que
faz a conexão com o servidor de banco de dados, um que
seleciona a base de dados a ser utilizada e um terceiro
que executa uma “query” (consulta) SQL. Existe, ainda,
um quarto comando que pode ou não ser utilizado, que é
o comando que fecha a conexão com o banco de dados.
São eles:
Abrindo e fechando conexão com o MySQL

mysqli_connect( )

Comando utilizado para criar a conexão com a


base de dados num servidor mySQL. O comando

132
mysql_pconnect também pode ser utilizado para criar a
conexão. A diferença entre os dois comandos é que o
mysql_connect estabelece uma conexão permanente, ou
seja, que não é encerrada ao final da execução do script.
Utilizaremos a primeira opção: mysql_connect.
Sintaxe:
mysqli_connect(string [host[:porta]] , string
[login] , string [senha] ) [ or die (“mensagem de erro”)];
Onde:
string [host[:porta]] – é o endereço do
servidor, onde o banco está armazenado no caso
trabalhando com o XAMPP ele será ‘localhost’;
string [login] – é o usuário do banco de dados,
no caso trabalhando com o XAMPP será ‘root’;
string [senha] – é a senha do usuário do banco
de dados MySQL no caso trabalhando com o XAMPP será
em branco.
die – parâmetro opcional que exibe uma
mensagem indicando que a conexão não foi efetuada.
Exemplo:

<?php
$conexao = mysqli_connect
(“localhost”, “root”, “”) or die
(“Conexão não efetuada”);
?>

O valor de retorno é um inteiro que identifica a


conexão, ou falso se a conexão falhar. Antes de tentar
estabelecer uma conexão, o interpretador PHP verifica se
já existe uma conexão estabelecida com o mesmo host,

133
o mesmo login e a mesma senha. Se existir, o
identificador desta conexão é retornado. Senão, uma
nova conexão é criada.
Assim, se a conexão for bem sucedida (existir um
servidor no endereço especificado que possua o usuário
com a senha fornecida), o identificador da conexão fica
armazenado na variável $conexao, caso contrário será
mostrada a mensagem “Conexão não efetuada”.
Como estamos utilizando o XAMPP a linha padrão
de conexão é:
$conexao = mysqli_connect (“localhost”, “root”,
“”);
O campo da senha não tem nenhum caractere
dentro.
mysqli_close( ): Comando utilizado para
encerrar uma conexão estabelecida com o comando
mysql_connect antes de chegar ao final do script. Caso
esse comando não seja utilizado a conexão é encerrada
no final do script.
Sintaxe:
mysqli_close(int [string da conexão] );
Se o identificador não for fornecido, a última
conexão estabelecida será encerrada.
Exemplo:

<?php
mysqli_close ($conexao);
?>

mysqli_select_db( )
Comando utilizado para selecionar a base de
dados depois que a conexão for estabelecida. Se

134
nenhuma de conexão é especificada, a última conexão
aberta é assumida.

Sintaxe:
mysql_select_db(conexão, banco de dados [string
de conexao]) or die [(“mensagem”)];
Onde:
banco de dados – é o banco de dados que será
utilizado;
string de conexão – é a conexão criada com o
servidor MySQL.

Exemplo:

<?php
$conexao =
mysqli_connect(“localhost”, “root”,
“focus”);
if (!$conexao)
{
die (“Conexão não
estabelecida”);
}
$db_select =
mysqli_select_db($conexao, “minha_base”);
?>

Este comando é utilizado para realizar executar


uma instrução do SQL no MySQL.
Consulta/Inserção ao dados no banco

135
Sintaxe:
mysqli_query(string da consulta/inserção);
Onde:
- String da consulta – é um comandos utilizados
do SQL que pode ser utilizado para consiltar, incluir,
alterar, deletar ou qualquer outro comando SQL.
O comando mysqli_query() envia uma query
(consulta) para o banco de dados ativo no servidor da
conexão informada em string da consulta. Se o
parâmetro string da consulta não é especificado, a
última conexão aberta é usada. Se nenhuma conexão
está aberta, a função tenta estabelecer uma conexão
como mysql_connect() seja chamada sem argumentos e
usá-la. O resultado é guardado em buffer.

Exemplo:
<?php
$sql = “SELECT * FROM cadastro WHERE
id = 10”;
mysqli_query($conexao, $sql);
?>

Vamos ver um exemplo de um script PHP


utilizando os comandos vistos acima que cria uma
conexão com o banco de dados sistema, seleciona a
tabela alunos e insere alguns dados na tabela.

136
<?php

$conexao = mysqli_connect('localhost',
'root', '');
mysqli_select_db($conexao,
'minha_base');

$insere = "INSERT INTO `cadastro`


(`id`, `nome`, `data_de_nascimento`,
`email`, `cpf`, `senha`) VALUES (NULL,
'Rodrigo', '1989-12-15',
'[email protected]', '000.000.000-
00', MD5('teste'))";

$insere1 = "INSERT INTO `cadastro`


(`id`, `nome`, `data_de_nascimento`,
`email`, `cpf`, `senha`) VALUES (NULL,
'Lucas', '1985-12-15',
'[email protected]', '111-111-111-11',
MD5('teste'))";

mysqli_query ($conexao, $insere) or


die ("Não foi possível executar.");

mysqli_query ($conexao, $insere1) or


die ("Não foi possível executar.");

echo "Todos os registros foram


cadastrados.";

mysqli_close ($conexao);

137
Verifique agora que os registros da variável
inserem e insere1 foram inseridos no PhpMyAdmin.
Vamos fazer o mesmo exemplo só que agora
capturando os dados do formulário:

<form action="index.php" method="POST">


<label for="nome">Nome:</label>
<input id="nome" type="text"
size="60" name="nome"/><br/>
<label for="nasc">Data de
Nascimento:</label>
<input id="nasc" type="date"
size="10" name="nasc"/><br/>
<label for="email">E-mail:</label>
<input id="email" type="email"
size="50" name="email"/><br/>
<label for="cpf">CPF:</label>
<input id="cpf" type="text"
size="14" name="cpf"/><br/>
<label for="senha">Senha:</label>
<input id="senha" type="password"
size="50" name="senha"/><br/>
<input type="submit"
value="Validar" name="validar"/>
</form>

<?php
if(isset($_POST['validar'])){
$conexao =
mysqli_connect('localhost', 'root', '');
mysqli_select_db($conexao,
'minha_base');

138
$nome=$_POST['nome'];
$nasc=$_POST['nasc'];
$email=$_POST['email'];
$cpf=$_POST['cpf'];
$senha=$_POST['senha'];

$insere = "INSERT INTO `cadastro`


(`id`, `nome`, `data_de_nascimento`,
`email`, `cpf`, `senha`) VALUES (NULL,
'$nome', '$nasc', '$email', '$cpf',
MD5('$senha'))";
mysqli_query ($conexao, $insere)
or die ("Não foi possível executar.");
echo "Formulário cadastrado.";
mysqli_close ($conexao);
}
?>

Nesse exemplo, nós não criamos validação de


dados, é importante fazer a validação antes de enviar os
dados ao banco, evitando erro por parte do usuário.

Exibir dados do banco

Para exibir usaremos a mesma conexão com o


banco de dados, porém ao invés de executarmos uma
query de inserção, iremos usar uma de seleção.
Os dados vindos do banco ficarão armazenados
em um vetor, no caso de a consulta exibir apenas um
dado, basta exibirmos o vetor. Mas no caso da consulta

139
poder exibir um ou mais dados então iremos inserir um
laço de repetição para mostrar todos.
Exemplo: Vamos exibir todos os dados já
armazenado na tabela cadastro da nossa base de dados
minha_base.

<?php
$conexao = mysqli_connect('localhost',
'root', '');
mysqli_select_db($conexao,
'minha_base');

$exibe = "SELECT * FROM `cadastro`";

$executa=mysqli_query ($conexao,
$exibe) or die ("Não foi possível
executar.");
$row=mysqli_fetch_array($executa);

echo $row['nome'];

mysqli_close ($conexao);
?>

Perceba nesse código que o mysqli_query ficou


dentro de uma variável denominada ‘executa’ pois ela
precisou ser executada posteriormente no comando
mysqli_fetch_array, ao qual irá armazenar em um vetor
que chamamos de ‘row’ para ser exibido depois.
Na execução do vetor inserimos a chave ‘nome’ a
chave é exatamente o nome do item da tabela. Então
para exibir outros dados basta inserir no lugar da chave

140
os itens da tabela. Por exemplo: experimente trocar para
$row['cpf'].
Nesse exemplo também só exibimos um único
dado, mas no caso da tabela cadastro haverá a
possibilidade de possuir mais linhas de registro, pra isso
iremos montar um exemplo utilizando um laço de
repetição.

<?php
$conexao = mysqli_connect('localhost',
'root', '');
mysqli_select_db($conexao,
'minha_base');

$exibe = "SELECT * FROM `cadastro`";

$executa=mysqli_query ($conexao,
$exibe) or die ("Não foi possível
executar.");

while($row=mysqli_fetch_array($executa
)){
echo $row['nome']."<br/>";
echo
$row['data_de_nascimento']."<br/>";
echo $row['email']."<br/>";
echo $row['cpf']."<br/>";
echo $row['senha']."<br/>";
echo "<hr/>";
}

mysqli_close ($conexao);
?>

141
Nesse exemplo ainda podemos fazer mais um
incremento, dando o feedback para o usuário caso a
consulta no banco de dados não retorne nenhum registro.
Outra particularidade desse exemplo é a data de
nascimento onde a exibição se dá no padrão gravado no
banco. Veremos no exemplo como exibir no padrão
brasileiro.
<?php
function data($data){
return date("d/m/Y", strtotime($data));
}
$conexao = mysqli_connect('localhost', 'root',
'');
mysqli_select_db($conexao, 'minha_base');

$exibe = "SELECT * FROM `cadastro`";

$executa=mysqli_query ($conexao, $exibe) or die


("Não foi possível executar.");

if(mysqli_num_rows($executa)==0){
echo "Não há registros";
}else{
echo "A consulta trouxe
".mysqli_num_rows($executa)." registro(s)
<br/>";
while($row=mysqli_fetch_array($executa)){
echo $row['nome']."<br/>";
echo
data($row['data_de_nascimento'])."<br/>";
echo $row['email']."<br/>";
echo $row['cpf']."<br/>";
echo $row['senha']."<br/>";
echo "<hr/>";
}
}

mysqli_close ($conexao);
?>

142
Atividade
1 – Crie uma base de dados denominada “mercado”.

A - Crie a seguinte tabela:

SETORES

id_set int(9) A_I Primary

nome_set varchar(20)

B - Crie um formulário para que o usuário possa cadastrar


os setores desse “mercado”. Coloque como regra que o
usuário é obrigado a escrever algo antes de mandar
gravar no banco de dados.
C – Abaixo do formulário, exiba os dados já cadastrados
no banco.

Consulta através de campo de busca

Nesse exemplo vamos criar um formulário onde o


usuário poderá fazer uma consulta no banco de dados
através do nome cadastrado no banco. Inicialmente
criaremos o formulário, depois inserimos o valor escrito
pelo usuário na consulta do banco e então exibimos caso
ele encontre algum registro.

143
<form action="index.php" method="POST">
<label for="busca">Busque pelo
nome:</label>
<input id="busca" name="busca"
type="text"/><br/>
<input type="submit" value="buscar"
name="buscar"/>
</form>
<?php
if(isset($_POST['buscar'])){
$conexao =
mysqli_connect('localhost', 'root', '');
mysqli_select_db($conexao,
'minha_base');

$busca=$_POST['busca'];

$consulta = "SELECT * FROM cadastro


WHERE nome LIKE '%$busca%'";

$executa=mysqli_query ($conexao,
$consulta) or die ("Não foi possível
executar.");

144
if(mysqli_num_rows($executa)==0){
echo "Nada encontrado";
}else{
function data($data){
return date("d/m/Y",
strtotime($data));
}

while($row=mysqli_fetch_array($e
xecuta)){
echo
$row['nome']."<br/>";
echo
data($row['data_de_nascimento'])."<br
/>";
echo
$row['email']."<br/>";
echo
$row['cpf']."<br/>";
echo
$row['senha']."<br/>";
echo "<hr/>";
}
}

mysqli_close ($conexao);
}
?>
O código SQL poderá mudar de acordo com as
regras que estabelecer no sistema, a mesma busca
também poderá ter mais do que um critério. Por

145
exemplo: Buscar por cadastros de pessoas que nasceram
em uma determinada data e iniciem com a letra A.

Alterar dado

Para alterar um dado no banco de dados é preciso


primeiro saber exibi-lo para depois alterá-lo.
Vamos dividir as fases de alteração dados em
partes, aqui vai a primeira delas, iremos exibir os dados
junto do botão que o usuário poderá clicar para alterar o
dado.
Primeiro vamos estabelecer a conexão com o
banco de dados, pra isso ao invés de toda vez que
precisarmos do banco chamar a conexão, iremos criar um
arquivo externo para incluir no algoritmo toda vez que
precisar. Ficando assim:
connect.php
<?php
$conexao =
mysqli_connect('localhost', 'root',
'');
mysqli_select_db($conexao,
'minha_base');
?>

Agora no arquivo index o qual iremos usar para


exibir os dados inicialmente iremos usar o comando
include para chamar o arquivo de conexão e já fazer o
algoritmo de exibição.

146
index.php
<?php
include "connect.php";

$consulta = "SELECT * FROM


cadastro";

$executa=mysqli_query ($conexao,
$consulta) or die ("Não foi possível
executar.");

if(mysqli_num_rows($executa)==0){
echo "Nada encontrado";
}else{
function data($data){
return date("d/m/Y",
strtotime($data));
}

while($row=mysqli_fetch_array($exec
uta)){
echo $row['nome']."<br/>";
echo
data($row['data_de_nascimento'])."<br/>"
;
echo
$row['email']."<br/>";
echo $row['cpf']."<br/>";
echo
$row['senha']."<br/>";
echo "<hr/>";
}
}
?>
147
Veja que a única coisa que mudou nesse algoritmo
em relação aos exemplos anteriores que vimos é o fato
de usar a conexão com o banco de dados de forma
externa.
Agora iremos incluir o botão Alterar, você verá que
ele é apenas um link direcionando para o arquivo
alterar.php porém iremos acrescentar nele o parâmetro
de ID.
O parâmetro de ID será necessário para que o
algoritmo do arquivo alterar.php saiba qual o dado ele
precisará exibir no formulário pré-preenchido para então
o usuário possa mudar o dado que quiser e alterar no
banco de dados.
index.php
...
while($row=mysqli_fetch_array($executa)){
echo $row['nome']."<br/>";
echo
data($row['data_de_nascimento'])."<br/>";
echo
$row['email']."<br/>";
echo $row['cpf']."<br/>";
echo
$row['senha']."<br/>";
echo "<a
href='alterar.php?id=".$row['id']."'>Alte
rar</a>";
echo "<hr/>";
}
...

148
Perceba que inserimos junto ao link um ponto de
interrogação é utilizado para determinar parâmetro na
URL, em seguida colocamos o ID que será no nome do
parâmetro o qual será usado pelo arquivo alterar.php
para identificar o registro junto ao banco.
Feito isso perceba que quando executa o arquivo
e aponta o mouse para o link alterar ele exibe o
parâmetro do id correspondente ao registro, como na
figura 23.

Figura 23

Vamos agora receber o parâmetro no arquivo


alterar.php, fazer uma nova consulta no banco de dados
e exibir os dados no formulário.

alterar.php
<?php
include "connect.php";

$id=$_GET['id'];

$consulta = "SELECT * FROM cadastro


WHERE id='$id'";

$executa=mysqli_query ($conexao,
$consulta) or die ("Não foi possível
executar.");

$row=mysqli_fetch_array($executa);
?>
149
<form action="alterar.php"
method="POST">
<label for="nome">Nome:</label>
<input id="nome" type="text"
size="60" name="nome" value="<?php
echo $row['nome']; ?>"/><br/>
<label for="nasc">Data de
Nascimento:</label>
<input id="nasc" type="date"
size="10" name="nasc" value="<?php
echo $row['data_de_nascimento'];
?>"/><br/>
<label for="email">E-
mail:</label>
<input id="email" type="email"
size="50" name="email" value="<?php
echo $row['email']; ?>"/><br/>
<label for="cpf">CPF:</label>
<input id="cpf" type="text"
size="14" name="cpf" value="<?php echo
$row['cpf']; ?>"/><br/>
<input type="submit"
value="Alterar" name="alterar"/>
</form>

Inicialmente no algoritmo resgatamos o número


do ID que foi passado para o arquivo alterar.php pelo
parâmetro de URL por isso que usamos a opção GET na
variável da ID.
Em seguida fizemos uma consulta no banco de
dados a fim de buscar o dado do ID específico.

150
Após, criamos o formulário só que dessa vez
aplicamos o atributo value="<?php echo
$row['nome']; ?>" para cada um dos itens do
formulário.
O resultado disso foi o registro selecionado pelo
usuário no arquivo index.php aparecer pré-preenchido no
formulário o arquivo alterar.php.
Agora será preciso criar o algoritmo que fará a
alteração dos dados no banco de dados.
Quando o usuário clicar no botão alterar do
formulário ele irá recarregar a página alterar.php
portanto irá perder o parâmetro da URL. Para resolver
isso e o sistema gravar o dado no lugar certo iremos
incluir dentro desse formulário um item “invisível”
(apenas para o usuário) que irá armazenar a ID e então
o algoritmo identificar qual é o ID que sofrerá a alteração.
Para isso iremos incluir o seguinte código:

alterar.php
...
<input id="cpf" type="text" size="14"
name="cpf" value="<?php echo
$row['cpf']; ?>"/><br/>
<input name="id" value="<?php
echo $row['id']; ?>" type="hidden"/>
<input type="submit"
value="Alterar" name="alterar"/>
...

Feito isso precisamos inserir o algoritmo que faça


o update no banco de dados com o novo dado. Ficará
assim:

151
alterar.php
...
<input type="submit" value="Alterar"
name="alterar"/>
</form>

<?php
if(isset($_POST['alterar'])){
include "connect.php";

$id=$_POST['id'];
$nome=$_POST['nome'];
$data=$_POST['nasc'];
$email=$_POST['email'];
$cpf=$_POST['cpf'];

$alterar = "UPDATE cadastro


SET nome = '$nome', data_de_nascimento
= '$data', email = '$email', cpf =
'$cpf' WHERE cadastro.id = $id;";

$executa=mysqli_query
($conexao, $alterar) or die ("Não foi
possível executar.");

echo "Dados alterardos com


sucesso!";
echo "<br/><a
href='index.php'>Voltar</a>";
}
?>

152
Nesse exemplo colocamos o botão voltar após a
mensagem de sucesso para o usuário poder voltar a
página de exibição.
Ps. No exemplo não colocamos a opção de alterar
a senha do registro. Por boas práticas a senha ter uma
área de alteração exclusiva para que o sistema possa
verificar a atual senha e gravar a nova senha fazendo o
usuário digitar duas vezes para validar e gravar.
Executando o arquivo alterar da forma com que
explicamos nos exemplos irá gerar uma notificação:

Notice: Undefined index: id


in C:\xampp\htdocs\livro\alterar.php

Essa notificação apareceu, pois, após o usuário


clicar no botão alterar a página alterar foi recarregada e
o algoritmo estava esperando pelo parâmetro da URL que
dessa vez não veio.
Para resolver esse problema podemos colocar o
símbolo do @ na frente da variável que recebe a ID da
URL, ficando assim:

alterar.php
<?php
include "connect.php";

@$id=$_GET['id'];

$consulta = "SELECT * FROM


cadastro WHERE id='$id'";
...

153
Excluir definitivamente

Como já explicado o ideal para exclusão é inserir uma


coluna denominada status na tabela com a chave 0 para
inativa e 1 para ativa pois o registro nunca se apagará.
Iremos ver na sequência um exemplo assim.
Levando ao pé da letra, a exclusão irá sumir com
os dados do banco de dados e não será mais possível
recupera-los, somente caso você tenha feito um backup
do banco.
Usando como exemplo o mesmo algoritmo que
fizemos no alterar, vamos incluir o botão de excluir junto
ao botão alterar na exibição dos dados. Usando a mesma
lógica.

index.php
...
echo $row['senha']."<br/>";
echo "<a
href='alterar.php?id=".$row['id']."'>A
lterar</a>";
echo "<a
href='excluir.php?id=".$row['id']."'>E
xcluir</a>";
echo "<hr/>";
}
...

Será necessário passar por parâmetro também a


ID para a exclusão para o algoritmo identificar qual o
registro deverá excluir.

154
Por boa prática é importante perguntar para o
usuário se ele tem certeza que deseja fazer a exclusão.
Para isso no arquivo excluir.php iremos fazer essa
pergunta antes de excluir definitivamente.

excluir.php
<?php
include "connect.php";

$id=$_GET['id'];

$consulta = "SELECT * FROM


cadastro WHERE id='$id'";

$executa=mysqli_query ($conexao,
$consulta) or die ("Não foi possível
executar.");

$row=mysqli_fetch_array($executa)
;
?>
<h1>Tem certeza que deseja excluir
<?php echo $row['nome']; ?>?</h1>
<a
href="excluir_definitivamente.php?id=<
?php echo $id; ?>">Sim</a>
<a href="index.php">Não</a>

Nesse algoritmo fizemos uma consulta no banco de


dados para exibir o nome do registro fazendo a pergunta
para o usuário. No caso dele responder “não” irá retornar
para a página e exibição, no caso de clicar em “sim” irá

155
prosseguir para a página excluir_definifitavamente.php
que fará a ação.

Veja que o link da opção “sim” foi inserido o


parâmetro para o arquivo excluir_definitivamente.php
saber qual registro excluir.

excluir_definitivamente.php
<?php
include "connect.php";

$id=$_GET['id'];

$excluir = "DELETE FROM cadastro


WHERE cadastro.id = $id";

$executa=mysqli_query ($conexao,
$excluir) or die ("Não foi possível
executar.");

echo "Dado excluído com sucesso!";


?>
<br/>
<a href="index.php">Voltar</a>

Excluir para o usuário mantendo o dado salvo

Pra isso vamos ter que fazer algumas


modificações na estrutura do nosso banco de dados.
Teremos que inserir uma nova coluna na tabela
cadastro.

156
No PhpMyAdmin clique na tabela Cadastro, menu
superior Estrutura, e depois configure a opção Add abaixo
da tabela como na figura 24.

Figura 24

Mantenha a configuração da figura 24 e clique em


Executar.
Configure o novo campo mantendo os dados como
na figura 25.

Figura 25

Em seguida clique em Guarda.


O novo campo foi inserido e por padrão receberá
o valor 0, altere todos os campos que você quer que
apareça no PHP para valor 1.
No arquivo index.php na exibição dos registros
iremos fazer uma mudança:

157
index.php

...
include "connect.php";

$consulta = "SELECT * FROM cadastro


WHERE status='1'";

$executa=mysqli_query ($conexao,
$consulta) or die ("Não foi possível
executar.");
...

Agora só serão exibidos os registros cujo o status


é 1.
No arquivo excluir_definitivamente.php iremos
fazer uma alteração também, veja:

excluir_definitivamente.php
...
$id=$_GET['id'];

$excluir = "UPDATE cadastro SET


status = '0' WHERE cadastro.id = $id;";

$executa=mysqli_query ($conexao,
$excluir) or die ("Não foi possível
executar.");
...

158
Com essas alterações o sistema não irá exibir os
dados para o usuário, porém irá manter guardado no
banco de dados, ficando assim fácil para recuperar algum
dado que tenha sido perdido por um equívoco do usuário.

Atividade

1 – Faça o que se pede.

A. Crie um formulário com os seguintes itens:


a. Nome do Produto: (caixa de texto)
b. Setor do Produto: (caixa de seleção)
c. Preço de Custo: (caixa de texto)
d. Preço de Venda: (caixa de texto)
e. Estoque: (caixa de número)
B. O item setor do produto deve consultar na base
de dados os setores cadastrados em uma tabela
específica para setores, e armazenado seu id na tabela
de produtos conforme descrito a baixo.

PRODUTOS SETORES

id_prod int(9) A_I id_set int(9) A_I


Primary Key Primary Key

nome_prod varchar(30) nome_set varchar(20)

setor_prod int(9)

custo_prod float(10)

venda_prod float(10)

estoque_prod int (5)

situacao_prod int(1)

159
C. Exiba os produtos cadastrados em uma tabela
dando ao usuário a opção alterar o produto. Então deverá
exibir no formulário pré-preenchido os dados do produto
selecionado para alteração e fazer a ação da alteração
após o clique do usuário.
D. Juntamente na tabela deverá haver um segundo
botão para exclusão. Este então deverá alterar a chave
do item “situacao_prod” para “0” fazendo apenas uma
alteração nos dados e não excluindo definitivamente.
ps. Você poderá usar a atividade anterior para dar
sequência a essa.

VALIDAÇÃO DE LOGIN E SENHA

Até agora já aprendemos as funções básicas do


PHP, comandos de decisão, laços de repetição, integração
com HTML e com o banco de dados e os principais
comandos de interação com MySQL.
Estamos prontos para desenvolver um sistema, e
nesse capítulo vamos abordar questões de segurança
como criação de login, para áreas restritas.
Como gravar um cadastro com a senha
criptografada já foi abordado anteriormente, com esse
cadastro pronto vamos validar o login e a senha.
Iremos usar a tabela Cadastro da base
Minha_base que criamos anteriormente e manipulamos
até agora.
Como já existem cadastros na tabela iremos usar
como parâmetro de validação de login e senha os campos
CPF, por ser um campo com valor único, ou seja, cada
usuário terá o seu CPF e a coluna Senha que é gravada
de forma criptografada no banco.

160
Primeiro precisamos criar o formulário onde o
usuário entrará com o CPF e a Senha para o algoritmo
validar.

login.php
<form action="index.php" method="post">
<label for="cpf">CPF:</label>
<input id="cpf" name="cpf"
type="text"/>
<label for="senha">Senha:</label>
<input id="senha" name="senha"
type="password"/>
<input type="submit" name="login"
value="Entrar"/>
</form>

Inserido os dados de CPF e Senha precisamos criar


um algoritmo que consulte no banco de dados se o CPF e
a Senha pretendem ao mesmo cadastro e se o registro
realmente existe.

161
login.php

...
</form>
<?php
if(isset($_POST['login'])){
$conexao =
mysqli_connect('localhost', 'root', '');
mysqli_select_db($conexao,
'minha_base');

$cpf=$_POST['cpf'];
$senha=$_POST['senha'];

$consulta="SELECT * FROM
cadastro WHERE cpf ='$cpf' AND
senha=md5('$senha');";

$executa=mysqli_query ($conexao,
$consulta) or die ("Não foi possível
executar.");

if(mysqli_num_rows($executa)==0){
echo "CPF ou senha
inválido";
}else{
echo "CPF e senha válida";
}
}
?>

162
Nesse algoritmo fizemos apenas a validação se o
login ou senha existem. Se o usuário escrever o login
certo e a senha errada irá dar o aviso “CPF ou senha
inválido” ou se o login estiver incorreto e a senha correta
dará o mesmo aviso, assim como para se ambos
estiverem incorretos.
No caso de estar correto o virá o aviso “CPF e
senha válida”.
Mas não é exatamente isso que nós queremos,
nesse código apenas verificamos diante de uma consulta
no banco se o usuário poderá logar ou não.
Para ele o buraco é um pouco mais em baixo, pois
teremos que trabalhar com sessão no PHP. Existem
outros métodos, mas esse é o mais simples.
Sessão é como se fosse uma variável que dura
mais tempo. Como assim? Uma variável armazena um
valor enquanto o arquivo estiver sendo executado, se o
usuário sair de uma página e entrar em outra a variável
será esquecida. Mas a sessão não, muitas vezes quando
você acessa sites de redes sociais você loga uma vez e
depois quando acessa novamente não precisará logar de
novo, pois o sistema gravou qual é o usuário que acessou
a última vez por um determinado dispositivo.
A sessão durará enquanto a sua máquina estiver
ligada no caso do uso do Xampp. Mas no caso de um
servidor remoto dependerá da configuração desse
servidor.
Independentemente do número de páginas que o
usuário navegar no seu sistema o dado ficará
armazenado na sessão, a não ser que ele “destrua” a
sessão.

163
Para uma validação de login e senha nós
armazenamos na sessão o usuário que acabou de fazer a
validação de login, assim quando ele navegar nas páginas
do sistema o validador de login irá verificar se há uma
sessão aberta então deixará o usuário entrar na
determinada página.
Na prática:
Vamos fazer uma alteração no arquivo login.php

login.php
... }else{
session_start();
$row=mysqli_fetch_array($executa);
$id=$row['id'];
$_SESSION['login']=$id;
header('location:
index.php');
}
}
?>

Veja que iniciamos a sessão com o comando


session_start(), armazenamos na variável ROW o vetor
da consulta no banco, armazenamos na variável ID o id
referente ao cpf e senha encontrado e armazenamos o
valor de ID na sessão login.
Após isso direcionamos o usuário para o arquivo
index.php.
Agora temos uma sessão aberta e sabemos qual é
o usuário que está logado no sistema.

164
Nesse momento se o usuário acessar o arquivo
index.php diretamente da URL sem logar ele irá conseguir
ver o arquivo.

Páginas restritas

Precisamos então criar uma validação no arquivo


index para que o usuário só possa ver seu conteúdo
validando seu CPF e senha.

index.php
<?php
session_start();
if(!isset($_SESSION['login'])){
header('location:login.php');
}
?>

Esse algoritmo abriu uma sessão, verificou se a


sessão login está ativa ou não. Não estando ativa irá
direcionar para o arquivo login.php para o usuário
executar a ação.
Após logar no sistema terá acesso ao arquivo
index.
Todas as páginas do seu sistema que precisarem
que o usuário tenha feito o login para ter acesso ao
conteúdo deverá contar esse algoritmo de verificação. É
importante que ele esteja na primeira linha do arquivo
pois deverá ser o primeiro algoritmo a se executando.
Não estando logado não verá o restante do conteúdo,
sendo direcionado imediatamente para fazer o login.

165
Para exemplificar melhor isso vamos criar uma
saudação para o usuário e também dar a possibilidade de
ele fazer o logout.

index.php
...
?>
<h1>Painel de Controle</h1>
<?php
$conexao =
mysqli_connect('localhost', 'root',
'');
mysqli_select_db($conexao,
'minha_base');

$id=$_SESSION['login'];

$consulta="SELECT nome FROM


cadastro WHERE id = $id";

$executa=mysqli_query ($conexao,
$consulta) or die ("Não foi possível
executar.");

$row=mysqli_fetch_array($executa);

echo "Olá ".$row['nome'];


?>

Veja que através do dado armazenado na sessão


login fizemos uma consulta no banco de dados para exibir
o nome de quem logou.

166
Logout

Para fazer o logout precisamos apenas destruir as


sessões abertas. Pra isso é preciso inserir o link para o
arquivo logout.php que terá o algoritmo para fazer essa
ação.

index.php
...
echo "Olá ".$row['nome'];
?>
<a href="logout.php">Fazer Logout</a>

logout.php
<?php
session_start();
session_destroy();
header('location:login.php');
?>

Sessão destruída e usuário encaminhado para a


página de login.
Note que se após fazer o logout e tentar acessar
o arquivo index.php ele irá direcionar para a página de
login.

Atividade

1. Faça o que se pede.


A. Crie um arquivo chamado “login.php”, crie um
formulário que valide se o login e senha digitado pelo

167
usuário é válida ou não. Caso esteja correta envie-o
para o arquivo index.php.
B. No arquivo index.php mostre um aviso que o usuário
está logado mais o botão de fazer logoff. No caso do
cadastro do login ser “administrador” dê a
possibilidade para ele de cadastrar novo usuário, no
caso do login do usuário ser apenas “usuário” então
ele não poderá ver a opção de cadastrar novo login.
C. No arquivo “cadastro.php” crie um formulário para
cadastrar um novo login e senha determinando se o
novo usuário do login será um “administrador” ou um
“usuário”.
D. Os arquivos “index.php” e “cadastro.php” deve haver
validações de login para verificar se o usuário logou,
no caso de não ter logado, deverá ser direcionado
para o arquivo “login.php” par efetuar o login.

168
MANIPULANDO ARQUIVO DE TEXTO

GRAVANDO ARQUIVO (.TXT)

A criação e leitura de arquivo texto é um recurso muito


utilizado em todas as linguagens de programação. Existe
várias finalidades em se manipular arquivos de texto.
Uma delas é armazenar dados (como um dB), gravar logs
ou na geração de arquivos de remessa e retorno para o
banco (boleto).

Criação do Arquivo

fopen() – abre um arquivo

fwrite() – escreve em um arquivo

fclose() – fecha um arquivo

<?php
$abrir = fopen("arquivo.txt",
"a");
$escreve = fwrite($abrir,
"Escrever no arquivo");
fclose($abrir);
?>

Perceba que ao executar o documento irá criar na


pasta o arquivo.txt, executando o arquivo PHP mais de
uma vez ele irá incrementar o texto mais vezes.

169
Na função fopen, é passado dois parâmetros: o
nome do arquivo e a permissão. O nome do arquivo serve
para abrir o arquivo ou criá-lo. São 6 as permissões que
podem ser utilizadas:

'r' Abre o arquivo no formato somente para leitura


e coloca o ponteiro no começo do arquivo.

'r+' Abre o arquivo para leitura e gravação e coloca


o ponteiro no começo do arquivo.

'w' Abre o arquivo somente para gravação, coloca


o ponteiro no começo do arquivo e apaga o
conteúdo que já foi escrito. Se o arquivo não
existir, tentar criá-lo.

'w+' Abre o arquivo para leitura e escrita, coloca o


ponteiro no início do arquivo e apaga o
conteúdo que já foi escrito. Se o arquivo não
existir, tentar criá-lo.

'a' Abre o arquivo somente para escrita, coloca o


ponteiro no fim do arquivo. Se o arquivo não
existir, tentar criá-lo.

'a+' Abre o arquivo para leitura e gravação, coloca


o ponteiro no fim do arquivo. Se o arquivo não
existir, tentar criá-lo.

Tabela 17

Existem duas maneiras de montar o layout de um


arquivo texto. A primeira é por posições fixas onde todos
os campos seguem um padrão de posição. A outra
maneira é usando um caractere que serve para separar

170
os campos. Esse caractere é conhecido como delimitador.
Exemplo:

Figura 26

O caractere | (pipe) está separando um campo do


outro. Note que os campos NÃO estão na mesma coluna
do arquivo.
O nome Lucas começa na coluna 2, mas o nome
Maria começa na coluna 4.
O primeiro exemplo utiliza os delimitadores.
Vamos a criação de um arquivo de exemplo.

<?php
$handle = fopen
("catraca.txt",'a+');

$nome = "Lucas";
$idade = "29";
$sexo = "M";

$exportacao = $nome."|".$idade.
"|".$sexo;
fwrite($handle, $exportacao);

fclose($handle);
?>

171
Figura 27

Nesse exemplo simples, o programa apenas criou


um arquivo chamado catraca.txt e gravou as três
variáveis separados por |.
O método mais utilizado é o de posições fixas.
Vamos montar um exemplo, com os mesmos campos, só
que utilizando o método de posições fixas.

<form action="index.php"
method="post">
<label for="nome">Nome:</label>
<input id="nome" name="nome"
type="text"/>
<br/>
<label for="idade">Idade:</label>
<input id="idade" name="idade"
type="number"/>
<br/>
<label for="sexo">Sexo:</label>
<input id="sexo" name="sexo"
type="text"/>
<br/>
<input type="submit"
name="exportar" value="Exportar"/>
</form>

172
<?php
function fcomplemento($palavra,$tamanho)
{
$TamanhoNumero = strlen($palavra);

if ($TamanhoNumero < $tamanho)


{
while ($TamanhoNumero < $tamanho)
{
$palavra = $palavra." ";
$TamanhoNumero =
strlen($palavra);
}
}
return $palavra;
}

if (isset($_POST['exportar'])){

$handle = fopen ("catraca.txt",'a+');

$nome = $_POST['nome'];
$idade = $_POST['idade'];
$sexo = $_POST['sexo'];

$nome = fcomplemento($nome, 10);


$idade = fcomplemento($idade, 4);

$exportacao =
$nome.$idade.$sexo."\r\n";
fwrite($handle, $exportacao);

fclose($handle);
}
?>
173
No exemplo existe uma função chamada
fcomplemento que é utilizada para deixar as variáveis do
mesmo tamanho. Todos os nomes vão ocupar o espaço
de 10 caracteres, mesmo que o nome digitado for menor
que 10 a função vai complementar com espaços em
branco até o nome ficar com 10 posições.

Figura 28

Outra função já conhecida é a substr. Lembrando


ela é uma função do PHP e serve para pegar um pedaço
de uma string. Exemplo:
$nome = "Joaquim da Silva";
$novo_nome = substr($nome, 0, 10);
A variável $novo_nome ficará apenas com os 10
primeiros caracteres da variável $nome. Evitando assim
deslocar o próximo campo.
O campo idade começa na coluna 11, pois o nome
ocupou as 10 primeiras colunas. O comando "\r\n" é o
responsável por fazer a quebra de linha.
Outra aplicação do arquivo texto é a comunicação
com a catraca (controle de acesso), onde pela manhã o
sistema da faculdade manda um arquivo texto para o
sistema da catraca com as informações para as

174
passagens dos alunos e à noite a sistema da catraca gera
outro arquivo texto que é lido pelo sistema da faculdade
contendo os dados de passagens dos alunos.
O exemplo abaixo é um arquivo real de dados
enviados para a catraca.

Figura 29

Para explicar o arquivo, vamos retirar uma linha


apenas. Lembrando que todas as linhas seguem o mesmo
padrão.
0050280715123025102010311220103L
005028 – código do aluno
0715 – hora de entrada
1230 – hora de saída
25102010 – data de inicio
31122010 – data de termino
3 – via da carteirinha
L – pagamento (L Liberado e B Bloqueado)

Esse layout (padrão) é definido pela empresa que


desenvolveu o software da catraca. Nele a empresa vai
informar que o código do aluno deve iniciar na posição 0

175
e ir até a posição 6, que a hora de saída deve iniciar na
posição 11 e terminar na posição 15. E assim acontece
com todos os campos, cada um com a sua posição de
início e de término definidas. E porque isso? Simples, o
software da catraca lê exatamente essas posições, ele
pega esses conteúdos e joga para variáveis no seu
programa.
O comando utilizado para deletar um arquivo é o
unlink. Coloca-se a arroba na frente para que não
apareça notícias caso o arquivo já tenha sido deletado.
Exemplo:
@unlink("catraca.txt");

LENDO ARQUIVO (.TXT)

A leitura de um arquivo texto tem duas finalidades


básicas: gerar um relatório ou importar os dados para um
banco de dados. Para ler um arquivo utiliza-se o
parâmetro 'r' (do inglês read) na função fopen.
Considere os registros da figura 30.

Figura 30

176
<?php
$filename = 'catraca.txt';
$handle = fopen($filename,'r');

while(!feof($handle))
{
$conteudolinha = fgets ($handle);

$array = explode("|",
$conteudolinha);

$nome = $array[0];
$idade = $array[1];
$sexo = $array[2];

echo $nome."|".$idade."|".$sexo;
}

fclose($handle);
?>

No laço de repetição existe a condição feof (do


inglês find end of file) que vai percorrer todo o arquivo.
Note a condição está na negação (caracter !), traduzindo
a condição, ela fica assim: "enquanto não chegar ao final
do arquivo".
A função fgets move para a variável
$conteudolinha, todo o conteúdo de uma linha do
arquivo. Lembrando que cada linha é um registro. Como
o layout do arquivo utiliza um delimitador, usamos a

177
função explode para separar os conteúdos e montar um
array com os dados.
Depois é só atribuir os valores dos arrays para as
variáveis.
Na importação de um layout com posições fixas a
única mudança é que não existe um delimitador. Como
os dados são separados por posições, utiliza-se a função
substr para pegar pedaços de uma string e mover para
as variáveis.

<?php
$filename = 'catraca.txt';
$handle = fopen($filename,'r');

while(!feof($handle))
{
$conteudolinha = fgets ($handle);

$nome =
substr($conteudolinha,0,10);
$idade =
substr($conteudolinha,10,3);
$sexo =
substr($conteudolinha,14,1);

echo $nome.$idade.$sexo;
}

fclose($handle);
?>

178
ATIVIDADE

1 – Crie um formulário que receba os seguintes valores:


Nome do produto;
Preço de compra;
Validade(data);
Largura;
Altura;
Profundidade;

Armazene em um arquivo .txt denominado produtos e


utilize o | como separador.
Exiba os produtos armazenados no arquivo .txt em
formato de tabela.

2) Montar um cadastro que grave os dados em um


arquivo chamado data.txt, onde a data é pega
automaticamente. Seguir o padrão indicado.
Coluna Inicio Tamanho
Nome 0 40
Idade 41 3
Sexo 45 1
Cidade 47 40

179
FORMULÁRIO DE E-MAIL

A um tempo atrás fazer o envio de e-mail com


formulário era uma tarefa bem simples. O PHP tem uma
função designada MAIL que faz o envio de e-mail de uma
forma bem simples e fácil.
Porém hoje a maioria dos servidores de
hospedagem bloquearam essa função, justamente para
não se criar sistemas de spam o que baixava a reputação
do servidor, não entregando os e-mails de forma eficaz.
É importante saber que para enviar um e-mail por
formulário é preciso que o algoritmo esteja on-line, ou
seja é preciso hospeda-lo em algum servidor para que o
envio realmente aconteça.
Para resolver esse problema os servidores
colocaram como regra o envio de e-mail via SMTP que o
PHP faz o envio como se fosse da caixa de saída.
Para facilitar sua vida em relação a isso
deixaremos aqui o link de uma biblioteca já pronta para
isso:
https://bit.ly/php-mailer
Baixe os arquivos dessa biblioteca que iremos usar
no nosso exemplo.
Os arquivos do PHPMailer já estão programados
para esse acesso ao e-mail já existente bastando apenas
você configurar essa biblioteca no formulário que você
deseja.
É importante que você tenha um e-mail real e
esteja configurado para poder fazer o acesso via SMTP.

180
O Gmail por exemplo é preciso entrar nas configurações
para habilitar.
Mesmo fazendo o envio por e-mail é uma boa
prática você também armazenar o formulário no banco
de dados para caso o e-mail se perca por algum motivo
você ter um backup no sistema.
Faremos um exemplo fazendo um formulário com
campo nome, e-mail e mensagem.

index.php

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


<label for="nome">Nome:</label>
<input id="nome" name="nome"
type="text"/>
<br/>
<label for="email">E-mail</label>
<input id="email" name="email"
type="email"/>
<br/>
<label
for="mensagem">Mensagem</label><br/>
<textarea id="mensagem"
name="mensagem"></textarea>
<br/>
<input type="submit"
value="Enviar"/>
</form>

No arquivo enviar.php iremos armazenar em


variáveis os dados vindos do formulário, chamar a
biblioteca e então fazer a ação de envio.

181
A biblioteca usa linguagem orientada a objetos,
mas é só copiar o código que dará certo.

enviar.php

<?php
$nome=$_POST['nome'];
$email=$_POST['email'];
$mensagem=$_POST['mensagem'];

$corpo="
Nome: $nome <br/>
E-mail: $email <br/>
Mensagem: $mensagem
";

include("phpmailer/class.phpmailer.
php");
include("phpmailer/class.smtp.php");

$mailDestino =
"[email protected]";
$nome = "Contato Site";
include("envio.php");

echo "Enviado com sucesso!";

?>
<a href="index.php">Voltar</a>

Veja que incluímos aqui a biblioteca do PHPmailer


e é importante que ela esteja na pasta raiz do seu
sistema para que funcione adequadamente.

182
Destacamos no algoritmo o e-mail que receberá o
formulário.
Incluímos também o arquivo envio.php que será
onde iremos definir as configurações de envio, tais como
e-mail, porta de SMTP, senha do e-mail entre outras.

envio.php
<?php
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->CharSet = 'UTF-8';
$mail->True;
$mail->Host = "smtp.server.com"; //
Servidor SMTP
$mail->SMTPSecure = "tls";
$mail->Port = 587;
$mail->SMTPAuth = true;
$mail->Username =
"[email protected]";
$mail->Password = "senha do e-mail";
$mail->FromName = "Nome de quem envia";
$mail->AddAddress($mailDestino, $nome);
$mail->WordWrap = 50;
$mail->IsHTML = true ;
$mail->Subject = "Assunto do E-mail" ;
$mail->Body = '<br/>' . $corpo . '<br/>'
;
$mail->AltBody = "$corpo" ;

if(!$mail->Send())
{
echo "Houve algum erro em enviar sua
solicitação por e-mail.";
}
?>
183
No arquivo envio.php é importante que você
configure corretamente, do contrário formulário não
funcionará.
Os servidores de e-mail normalmente possuem
manuais de como você fazer essa configuração usando
softwares como Outlook e Thunderbird. As mesmas
configurações para essas aplicações serão necessárias
para o arquivo envio.php, basta preenche-lo e testar.

ATIVIDADE

1 – Agora que você conseguiu fazer o formulário com os


campos nome, e-mail e mensagem. Inclua o campo
assunto e além de enviar o e-mail para você, envie uma
cópia também para quem preencheu o formulário.

184
UPLOAD DE ARQUIVO

Existem 2 métodos para armazenarmos nossos


arquivos provenientes de um upload:
- Salvar a imagem literalmente em uma coluna do
banco de dados;
- Enviar o arquivo para uma pasta dentro do nosso
projeto e somente gravar o caminho/nome na coluna do
banco de dados.
O método de enviar para uma pasta é o mais
utilizado e vamos explica-lo melhor. Para isso
precisaremos apenas de um campo de texto na estrutura
da tabela do banco de dados.

BANCO DE DADOS

Considere criar uma nova base de dados


denominada arquivos e então crie a seguinte tabela:

ARQUIVOS

id_arq int(9) A_I Primary Key

nome_arq varchar(30)

url_arq varchar(50)

Tabela 18

Crie agora na pasta raiz do seu projeto uma pasta


chamada “arquivos” será lá que o sistema irá enviar os

185
arquivos que sofrerem upload. Caso essa pasta não
exista irá dar erro no algoritmo que apresentaremos a
seguir.

FORMULÁRIO

Criado essa estrutura é preciso fazer um


incremento no HTML junto a tag “form”.
<form action="index.php" method="post"
enctype="multipart/form-data">
É importante inserir o atributo enctype no
cabeçalho do formulário, do contrário ele não será capaz
de transferir um arquivo.
Criando o formulário.

<form action="index.php"
method="post"
enctype="multipart/form-data">
<label for="nome">Nome:</label>
<input id="nome" name="nome"
type="text"/>
<br/>
<label
for="arquivo">Arquivo</label>
<input id="arquivo"
name="arquivo" type="file"/>
<br/>
<input name="upload"
type="submit" value="Gravar"/>
</form>

186
ALGORITMO

Nesse mesmo arquivo insira o seguinte código:

...
</form>
<?php
if(isset($_POST['upload'])){
$nome=$_POST['nome'];
$_UP['pasta']="arquivos/";
$_UP['tamanho']=1024*1024*2; //2mb
$_UP['extensao']=array('jpg','png',
'jpeg');
$_UP['renomear']=true;

O algoritmo irá verificar se o formulário enviou a


ação de upload especificada no botão submit do
formulário.
Irá armazenar o dado escrito no campo nome.
Irá validar o nome da pasta especificada para
fazer o upload do arquivo na pasta raiz do sistema.
Irá validar no caso de uma imagem o tamanho
dela em megabites para que o usuário não tente inserir
um arquivo muito grande podendo travar o sistema.
Irá validar as extensões aceitas pelo sistema, no
exemplo fizemos com imagens, mas poderiam ser
arquivo de texto.
Irá verificar se deverá renomear o arquivo quando
salvar na pasta. Essa opção é interessante no caso do
usuário fazer o upload de um documento com o mesmo
nome. Caso ele faça isso o arquivo novo irá substituir o

187
arquivo antigo de mesmo nome, podendo causar
problemas.
Imagine que o usuário A irá enviar sua foto de
perfil cujo o nome é imagem.jpg. Após alguns dias o
usuário B também faz o upload de uma imagem chamada
imagem.jpg. Quando o usuário A abrir o sistema sua foto
terá sido alterada sem ele ter feito a ação. Por esse
motivo é uma boa prática renomear os arquivos.
Como podem existir situações que não há essa
necessidade basta alterar para false o valor de
$_UP['renomear'].
Continuando esse algoritmo. Será feita agora as
devidas validações.

188
...
$_UP['renomear']=true;

$explode=explode('.',$_FILES['ar
quivo']['name']);
$aponta=end($explode);
$extensao=strtolower($aponta);
if(array_search($extensao,$_UP['
extensao'])===false){
echo "Extensão não Aceita";
exit;
}

if($_UP['renomear']===true){

$nome_final=md5(time()).".$exten
sao";
}else{

$nome_final=$_FILES['arquivo']['
name'];
}

if($_UP['tamanho']<=$_FILES['arq
uivo']['size']){
echo "Arquivo muito
grande";
exit;
}

A primeira validação verifica se a extensão do


arquivo é aceita. A segunda renomeia o arquivo

189
criptografando o dia e horário que ele está sendo feito,
assim não haverá possibilidade de arquivos terem o
mesmo nome. E o ultimo verifica se o tamanho em de
armazenamento está de acordo com o especificado em
$_UP['tamanho'].
Agora é preciso mover o arquivo para a pasta
destino e então gravar isso no banco de dados.
...
echo "Arquivo muito grande";
exit;
}

if(move_uploaded_file($_FILES['arqui
vo']['tmp_name'],
$_UP['pasta'].$nome_final)){

$url=$_UP['pasta'].$nome_final;

$conexao =
mysqli_connect('localhost', 'root', '');
mysqli_select_db($conexao,
'arquivos');

$grava="INSERT INTO arquivos


(id_arq, nome_arq, url_arq) VALUES (NULL,
'$nome', '$url');";

$executa=mysqli_query
($conexao, $grava) or die ("Não foi
possível executar.");

echo "Gravado com Sucesso";


}
}
?>

190
Verifique na tabela do banco que o novo registro
foi gravado. Verifique também na pasta arquivos que
você criou na pasta raiz do sistema consta o documento
que você fez o upload renomeado.
Agora é só exibir, nesse exemplo que se tratou de
uma imagem você terá que exibir a URL armazenada no
banco dentro da tag IMG no atributo HREF para exibir
como imagem.
Se tratando de outro tipo de arquivo poderá inserir
a URL na tag A no atributo SRC.

ATIVIDADE

1- No exemplo que fizemos gravamos no banco um


arquivo de imagem.
Agora usando o mesmo formulário faça o upload de
um arquivo PDF.
Abaixo do formulário exiba os arquivos armazenados
com o link de download para os PDFs em questão.

191
PROJETO - CRIANDO UM CARRINHO DE
COMPRAS

Iremos usar o conceito aprendido anteriormente


sobre sessão para fazer um carrinho de compras.
Lembre-se que é possível fazer de outras formas
também.
Considere criar uma nova base de dados
denominada “loja” e insira a seguinte tabela:

PRODUTOS

id_prod int(9) A_I Primary Key

nome_prod varchar(30)

valor_prod float

desc_prod text

Tabela 19

É importante o campo de valor_prod seja do tipo


float pois o valor será calculado no carrinho de compras.
Insira dados na sua tabela pois nesse exemplo não
iremos fazer a gravar dados vindos de formulários.
config.php
<?php
$conexao = mysqli_connect('localhost',
'root', '');
mysqli_select_db($conexao, 'loja');
?>
192
index.php
<h1>Produtos</h1>
<?php
include 'config.php';
$exibe="SELECT * FROM produtos";
$executa=mysqli_query ($conexao,
$exibe) or die ("Não foi possível
executar.");

if(mysqli_num_rows($executa)==0){
echo "Não há produtos";
}else{

while($row=mysqli_fetch_array($exec
uta)){
echo $row['nome_prod']." |
".$row['desc_prod']." | R$"

.number_format($row['valor_prod'],
2, ',', '.')." | <a
href=\"carrinho.php?add&id=".$row['id_pr
od']."\">Comprar</a><br/>";
}
}
?>
<br/>
<a href="carrinho.php">Ir pro
carrinho</a>
Repare nesse algoritmo que fizemos apenas a
exibição dos dados já armazenados no banco, inserindo
os parâmetros de URL ADD e ID. Parâmetro ADD servirá
para o código do arquivo carrinho.php entender que o

193
usuário está adicionando ao carrinho, pois
posteriormente irá poder deletar, e o ID identificando
qual o produto.
Parte 1:

carrinho.php
<?php
include 'config.php';
session_start();
if(!isset($_SESSION['carrinho'])){
$_SESSION['carrinho']=array();
}
if(isset($_GET['add'])){
$id=$_GET['id'];

if(!isset($_SESSION['carrinho'][$id])
){

$_SESSION['carrinho'][$id]=1;
}else{

$_SESSION['carrinho'][$id]+=1;
}
}
if(isset($_GET['del'])){
$id=$_GET['id'];

unset($_SESSION['carrinho'][$id]);
}
if(isset($_GET['up'])){
$qtd=$_GET['qtd'];
$id=$_GET['id'];
$_SESSION['carrinho'][$id]=$qtd;
}
?>
194
Na primeira parte adicionamos cada ID em uma
sessão, veja que criamos a sessão carrinho e junto a ela
o ID que poderá ter várias sessões de carrinhs com IDs
distintas.
O valor armazenado em cada uma das sessões
carrinho ID é a quantidade de itens colocadas no carrinho
sendo:
$_SESSION[‘carrinho’][1]=1

Caso o usuário seleciona o mesmo produto novamente


será incrementado +1 na quantidade. Ficando:
$_SESSION[‘carrinho’][1]=2
Em seguida configuramos a opção de deletar o
item do carrinho dando um unset nele. Fazendo com que
aquela sessão seja esquecida.
E por último um UP que servirá quando o usuário
alterar a quantidade do produto diretamente no carrinho.
Que vamos ver na parte 2.
Parte 2:

carrinho.php
...
$_SESSION['carrinho'][$id]=$qtd;
}
?>
<h1>Carrinho</h1>
<?php
if(count($_SESSION['carrinho'])==
0){
echo "Não há itens no
carrinho";
}else{

195
foreach($_SESSION['carrinho']as$id=>$qtd)
{
$exibe="SELECT * FROM
produtos WHERE id_prod=$id";

$executa=mysqli_query($conexao,
$exibe);

$row_sel=mysqli_fetch_array($executa
);
echo
"<form
action=\"carrinho.php\">"
.$row_sel['nome_prod']." |
"
.$row_sel['desc_prod']." |
R$"

.number_format($row_sel['valor_prod'
], 2, ',', '.')
." | Qtd:
<input
type=\"number\" min=\"1\" name=\"qtd\"
value=\"".$qtd."\" />
<input
type=\"hidden\" name=\"id\"
value=\"".$row_sel['id_prod']."\" />
<input
type=\"submit\" name=\"up\"
value=\"Atualizar\"/>

196
| Sub-Total:
".number_format($row_sel['valor_prod']
*$qtd, 2, ',', '.')."
| <a
href=\"carrinho.php?del&id=".$row_sel[
'id_prod']."\">Deletar</a><br/>
</form>";

@$total+=$row_sel['valor_prod']*$qtd;
}
}
?>

A parte 2 apesar de longa é fácil de entender. Se


trata de uma consulta no banco de dados para exibir
dentro de um laço de repetição todos os IDs armazenados
na sessão carrinho, juntamente com seus valores de
quantidade.
A quantidade foi colocada em um formulário
possibilitando o usuário de atualizar a quantidade de cada
item já somando no sub total.
Parte 3:
<h4>Total do Pedido: R$
<?php

echo @number_format($total, 2,
',', '.');
?>
</h4>

<br/>
<a href="index.php">Continuar
Comprando</a>
197
A parte 3 exibirá o total do carrinho somando
todos os subtotais.

ATIVIDADE

1 - Após a criação do carrinho de compras crie os


próximos passos para finalização da compra:

A. Não será necessário fazer um sistema de


pagamento;
B. Crie uma área restrita para o administrador onde ele
poderá cadastrar os produtos;
C. Deverá haver um sistema de cadastro para o usuário
(criar base de dados para isso);
D. Armazenar toda a compra vinculado ao usuário (criar
base de dados para isso);
E. No painel administrativo do administrador deverá
listar as compras dos usuários.

198
CONSIDERAÇÕES FINAIS

Esperamos ter contribuído para seu aprendizado


com esse livro, ele significou mutas horas de trabalho e
de testes com alunos para validar seu método.
Há muito ainda o que estudar com relação a
linguagem de programação e o PHP. Focamos em ensinar
o básico para que uma pessoa leiga consiga entender e
programar.
Com certeza após o entendimento de todos os
tópicos que abordamos você front-end já irá conseguir
realizar muitos trabalhos sem precisar apelar para um
programador back-end.
A, e você programador iniciante que usou nosso
livro para dar o primeiro passo na sua carreira,
esperamos que tenha aproveitado ao máximo tudo que
propomos aqui.
Se realmente o que você aprendeu aqui foi
significativo, não deixe de indicá-lo para seus colegas e
amigos da área.
Um abraço.

199
200
201
202

Você também pode gostar