Com Banco de Dados para Front-Ends: Uma Abordagem Prática em Uma Linguagem Simples
Com Banco de Dados para Front-Ends: Uma Abordagem Prática em Uma Linguagem Simples
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
378 p.
ISBN 978-85-5707-903-8
2
OS AUTORES
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
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.
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
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)
16
RÁPIDA HISTÓRIA
17
POR ONDE COMEÇAR?
Tabela 1
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
Figura 2
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
21
Figura 4
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
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
<? <%
comandos comandos
?> %>
PRIMEIRO COMANDO
<?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
VARIÁVEIS
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.
Regra Exemplo
28
- É case sensitive $var é diferente
de $VAR
Tabela 2
<?php
$a=0;
echo $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;
?>
<?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
$_COOKIE Cookies
Tabela 3
31
DESTRUINDO VARIÁVEIS
<?php
$a=1;
echo $a;
unset($a);
echo $a;
?>
CONSTANTE
<?php
define("pi", 3.1415926536);
echo pi;
?>
32
Veja que na constante chamamos pelo seu nome.
ARRAY (VETOR)
<?php
$linguagens=array('PHP', 'Java', 'C#',
'Python');
var_dump($linguagens);
?>
33
<?php
$linguagens = ['PHP', 'Java', 'C#',
'Python'];
var_dump($linguagens);
echo "<br/>";
echo $linguagens[3];
?>
<?php
$filmes = ['Harry Potter' => 2002,
'Titanic' => 1999];
var_dump($filmes);
echo "<br/>".$filmes['Titanic'];
?>
<?php
$filmes = ['Harry Potter' => 2002,
'Titanic' => 1999];
var_dump($filmes);
echo "<br/>"
echo $filmes['Titanic'];
?>
34
ARRAY MULTIDIMENCIONAL (MATRIZ)
<?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];
?>
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
36
De uma linha:
<?php
echo “teste”;
// comentário de 1 linha
?>
<?php
echo “teste”;
# comentário de 1 linha
?>
<?php
echo “teste”;
/* Isto é um comentário
com mais de uma linha */
?>
ATIVIDADES
37
Obs. a string deverá estar armazenada em constantes
para daí então ser exibida.
38
TIPOS DE DADOS E OPERADORES
TIPOS DE DADOS
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
39
U M A S T R I N G
0 1 2 3 4 5 6 7 8 9
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.
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
<?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);
?>
<?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);
?>
41
<?php
$a=1;
$b=2;
$c=3;
echo $a+$b+$c;
$op=$a+$b+$c;
echo "<br/>$a+$b+$c=".$op;
?>
OPERADORES
+ Adição
- Subtração
* Multiplicação
/ Divisão
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
<?php
$var = "Bom Dia";
$nome = "meu nome é Joaquim";
$saudacao = $var . ", " . $nome;
echo "$saudacao";
?>
43
OPERADORES DE ATRIBUIÇÃO
= Atribuição simples
Tabela 5
<?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
Operador Resultado
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.
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);
?>
OPERADORES LÓGICOS
Operador Resultado
47
!$x Verdadeiro (true) se $x não é
verdadeiro
Tabela 7
48
// XOR
var_dump( $a XOR $b ); // True
var_dump( $b XOR $c ); // False
?>
INCREMENTO
<?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
50
4 - O operador % (módulo) é usado, em PHP, para
efetuar cálculos de porcentagem. Essa afirmação é:
a) Verdadeira
b) Falsa
51
ESTRUTURAS DE CONTROLE
(CONDICIONAIS)
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)
<?php
switch(valor){
case(condiçãol1):
echo “retorno”;
break;
case(condição2):
echo “retorno”;
break;
default:
echo “retorno”;
}
?>
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";
}
?>
IF (SE)
55
}
?>
<?php
$idade=14;
if($idade<=12){
echo "Criança";
}else{
echo "Jovem";
}
?>
56
<?php
$idade=14;
if($idade<=12){
echo “Criança”;
}elseif($idade<18){
echo “Adolescente”;
}else{
echo “Adulto”;
}
?>
<?php
$idade=14;
if($idade<=12){
echo “Criança”;
}elseif($idade<18){
echo “Adolescente”;
}else if($idade<65){
echo “Adulto”;
}else{
echo “Idoso”;
}
?>
57
APLICANDO FORMULÁRIO A CONDICIONAIS
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>
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;
}
?>
60
ATIVIDADES
<?php
$num = 15;
$num2 = 12;
$resultado = $num * $num2;
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.
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”;
}
?>
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
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)
<?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.
<?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)
instruções;
?>
67
Vamos ao exemplo:
<?php
for ($i = 10; $i < 40; $i++) {
echo $i."-";
}
?>
<?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.
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/>";
}
?>
<?php
$cursos = ["CSS3", "PHP",
"JavaScript", "HTML5"];
foreach($cursos as $nome) {
echo "Curso: " . $nome .
"<br />";
}
?>
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]';
70
BREAK
<?php
$a = 1;
while ($a < 100) {
echo " PHP $a <br>";
if($a==5) {
break;
}
$a++;
}
?>
ATIVIDADES
71
2 – Desenvolva um programa que mostre os números de
1 até 5 com seus respectivos quadrados.
$num=0;
$num++;
?>
72
5x3=15
5x4=20
E assim consecutivamente até 10.
73
PORCENTAGEM
EXEMPLO 1 - DESCONTO
<?php
$valor = 50.00;
$percentual = 15.0 / 100.0;
$valor_final = $valor -
($percentual * $valor);
echo "O valor final do produto é:
" . $valor_final;
?>
74
EXEMPLO 2 – ACRÉSCIMO
<?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;
?>
ATIVIDADES
75
2 – O valor da compra foi de R$ 348,53. Qual seria o valor
se fosse pago à vista com desconto de 8%?
76
FUNÇÃO
<?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);
?>
<?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);
?>
<?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
Date
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");
?>
<?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');
?>
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');
?>
<?php
$numero = 4 ;
echo pow($numero, 2) ;
$numero = pow($numero, 1/2);
echo $numero;
?>
83
Raiz quinta: pow($variaval, 1/5);
Funções de texto
Função Descrição
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
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);
85
Explode
<?php
$nomes = 'Lucas Paula Rodrigo
Luciana';
$nomes_arr = explode(' ', $nomes);
var_dump($nomes_arr);
?>
<?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;
?>
Implode
<?php
$var =
array('Olá','é','legal','estudar','PHP
!');
echo implode(" ",$var);
?>
Htmlentities
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
<?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));
?>
Criptografia
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
<?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
<?php
$senha = '123456';
echo sha1($senha);
?>
91
<?php
$senha = '123456';
$senha_cripto=md5($senha);
echo $senha_cripto.”<br/>”;
$senha_cripto_cripto=
sha1($senha_cripto);
echo $senha_cripto_cripto;
?>
BASE64
<?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)
Função Retorno
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);
?>
Funções de inclusão
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
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
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.
98
TRABALHANDO COM FORMULÁRIOS
Atributo Função
Tabela 13
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;
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;
?>
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>
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
104
VALIDAÇÃO DE DADOS
Expressão Função
[0-9] Números
105
[!?,.] Sinais de pontuação (O que for
definido aqui é o que o usuário
poderá digitar)
Tabela 14
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)) {
CPF
index.php
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";
}
?>
TELEFONE
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";
}
?>
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
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";
}
?>
111
ATIVIDADE
112
BANDO DE DADOS
113
no futuro possam ser usados como forma de login em um
sistema.
Nossa tabela ficará assim:
Cadastro
nome
data_de_nascimento
cpf
senha
Tabela 15
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
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
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
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
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
Figura 11
120
clicar na tabela e em seguida em estrutura, como na
figura 12.
Figura 12
121
Figura 13
Figura 14
122
Figura 15
Figura 16
123
Figura 17
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
Figura 19
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
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
Figura 20
128
Excluir
Backup do 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
130
Figura 22
Atividades
131
2 – Agora aplique a tabela criada na Atividade 1 dentro
do PhpMyAdmin, criando suas conexões e depois a
exportando.
Comandos de conexão
mysqli_connect( )
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”);
?>
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”);
?>
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);
?>
136
<?php
$conexao = mysqli_connect('localhost',
'root', '');
mysqli_select_db($conexao,
'minha_base');
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:
<?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'];
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');
$executa=mysqli_query ($conexao,
$exibe) or die ("Não foi possível
executar.");
$row=mysqli_fetch_array($executa);
echo $row['nome'];
mysqli_close ($conexao);
?>
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');
$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');
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”.
SETORES
nome_set varchar(20)
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'];
$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
146
index.php
<?php
include "connect.php";
$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
alterar.php
<?php
include "connect.php";
$id=$_GET['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>
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"/>
...
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'];
$executa=mysqli_query
($conexao, $alterar) or die ("Não foi
possível executar.");
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:
alterar.php
<?php
include "connect.php";
@$id=$_GET['id'];
153
Excluir definitivamente
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/>";
}
...
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'];
$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>
155
prosseguir para a página excluir_definifitavamente.php
que fará a ação.
excluir_definitivamente.php
<?php
include "connect.php";
$id=$_GET['id'];
$executa=mysqli_query ($conexao,
$excluir) or die ("Não foi possível
executar.");
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
Figura 25
157
index.php
...
include "connect.php";
$executa=mysqli_query ($conexao,
$consulta) or die ("Não foi possível
executar.");
...
excluir_definitivamente.php
...
$id=$_GET['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
PRODUTOS SETORES
setor_prod int(9)
custo_prod float(10)
venda_prod float(10)
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.
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>
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');
}
}
?>
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
index.php
<?php
session_start();
if(!isset($_SESSION['login'])){
header('location:login.php');
}
?>
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'];
$executa=mysqli_query ($conexao,
$consulta) or die ("Não foi possível
executar.");
$row=mysqli_fetch_array($executa);
166
Logout
index.php
...
echo "Olá ".$row['nome'];
?>
<a href="logout.php">Fazer Logout</a>
logout.php
<?php
session_start();
session_destroy();
header('location:login.php');
?>
Atividade
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
Criação do Arquivo
<?php
$abrir = fopen("arquivo.txt",
"a");
$escreve = fwrite($abrir,
"Escrever no arquivo");
fclose($abrir);
?>
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:
Tabela 17
170
os campos. Esse caractere é conhecido como delimitador.
Exemplo:
Figura 26
<?php
$handle = fopen
("catraca.txt",'a+');
$nome = "Lucas";
$idade = "29";
$sexo = "M";
$exportacao = $nome."|".$idade.
"|".$sexo;
fwrite($handle, $exportacao);
fclose($handle);
?>
171
Figura 27
<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 (isset($_POST['exportar'])){
$nome = $_POST['nome'];
$idade = $_POST['idade'];
$sexo = $_POST['sexo'];
$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
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
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");
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);
?>
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
179
FORMULÁRIO DE E-MAIL
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
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");
?>
<a href="index.php">Voltar</a>
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
184
UPLOAD DE ARQUIVO
BANCO DE DADOS
ARQUIVOS
nome_arq varchar(30)
url_arq varchar(50)
Tabela 18
185
arquivos que sofrerem upload. Caso essa pasta não
exista irá dar erro no algoritmo que apresentaremos a
seguir.
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
...
</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;
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;
}
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');
$executa=mysqli_query
($conexao, $grava) or die ("Não foi
possível executar.");
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
191
PROJETO - CRIANDO UM CARRINHO DE
COMPRAS
PRODUTOS
nome_prod varchar(30)
valor_prod float
desc_prod text
Tabela 19
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
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;
}
}
?>
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
198
CONSIDERAÇÕES FINAIS
199
200
201
202