PROGRAMADOR PHP
RELÂMPAGO
Se Torne um Programador PHP em Tempo Recorde
INTRODUÇÃO
A linguagem de programação PHP (Hypertext Preprocessor) é ainda
uma das linguagens mais utilizadas na web, cerca de 60% a 70% dos
sites na web usam PHP.
O PHP conta com uma comunidade sempre muito ativa e pronta para
dar suporte aos mais novos.
Você consegue construir desde um blog até sistemas mais avançados
como uma plataforma ead ou até mesmo um marketplace.
Porque você deveria aprender PHP ainda hoje?
PHP é seguro
PHP é de código aberto e gratuito
Alguns dos aplicativos da web mais populares foram criados
usando PHP, como por exemplo, o Facebook e a própria Danki
Code.
A hospedagem PHP está disponível em todos os lugares.
A procura por programadores PHP é grande e os salários
costumam variar de 4 mil a 10 mil.
As possibilidades de trabalhar fora do Brasil são gigantes.
Consulte: Salário: Desenvolvedor PHP (Dezembro de 2022) | Glassdoor
Através do Ebook Programador PHP Relâmpago você conseguirá dar os
seus primeiros passos e criar os seus próprios sistemas web através
de exemplos e projetos práticos que vão do básico ao avançado.
ÍNDICE
PARTE 1 - PHP: O Início
1 História
2 Versões
PARTE 2 - Lógica de Programação
3 Lógica
4 Algoritmo
PARTE 3 - PHP Básico
5 Sintaxe
6 Variáveis
7 Comentários
8 Tipos
9 Constantes
10 Arrays
11 Operadores Lógicos
12 Operadores Aritméticos
13 Operadores de Atribuição
14 Operadores de Comparação
15 Operador de Incremento / Decremento
16 Funções
17 Funções Matemáticas
ÍNDICE
PARTE 4- PHP Intermediário
18 Manipulando Strings
19 Manipulação de Datas
20 Manipulando Arrays
21 Estruturas de Controle
a. Estrutura de Condição
i. if/else
ii. else if
iii. switch
b. Estrutura de Repetição
i. while
ii. for
iii. foreach
iv. do-while
22 Formulários
a. Introdução
b. GET vs POST
i. Quando usar POST
ii. Quando usar GET
PARTE 6 - Banco de Dados - SQL
24 Introdução
25 Tipos de Dados
ÍNDICE
26 Base de Dados
a. CREATE DATABASE
b. DROP DATABASE
c. CREATE TABLE
d. DROP TABLE
27 Operadores Lógicos
a. AND
b. BETWEEN
c. IN
d. LIKE
e. NOT
f. OR
28 Instruções
a. SELECT
b. INSERT
c. UPDATE
d. DELETE
29 Entendendo o WHERE
30 Filtrando com HAVING
31 ORDER BY e LIMIT
32 GROUP BY
33 Relacionamento de Tabelas
34 INNER JOIN, LEFT JOIN, RIGHT JOIN e FULL JOIN
ÍNDICE
PARTE 7 - Banco de dados com PDO
35 Introdução
36 Conexão
37 PDO Statement
38 Inserindo com PDO
39 Editando com PDO
40 Deletando com PDO
41 Selecionando apenas um Registro
42 Selecionando todos os registros de uma tabela com PDO
43 Erros e Exceções
PARTE 8 - Composer
44 Introdução
45 Autoload
PARTE 9 - PHP Avançado
46 include e include_once
47 require e require_once
48 Upload de Arquivos
49 Cookies
50 Sessões
51 Manipulando Arquivos
a. Abrindo, Lendo e Fechando
b. Criando e Escrevendo
52 Filtros no PHP
ÍNDICE
PARTE 10 - MVC: Model - View - Controller
53 Model
54 View
55 Controller
PARTE 11 - Segurança
56 Tratamento de Upload de Arquivos
57 Criptografia
58 SQL Injection
59 Ataques XSS
PHP - O Início
1 História:
O PHP é uma linguagem de programação ideal para iniciantes que
desejam desenvolver sites e sistemas.
Rasmus Lerdof é o autor da primeira versão da linguagem de
programação PHP criada em 1995. A sigla é um acrônimo para PHP:
Hypertext Preprocessor (Pré-Processador de Hipertexto).
Em 1997 e 1998, o PHP/FI contou com o apoio de milhares de usuários
em todo o mundo. Uma pesquisa da Netcraft de maio de 1998
descobriu que quase 60.000 domínios relataram ter cabeçalhos
contendo "PHP", indicando que o servidor host realmente tem o PHP
instalado. Esse número equivale a aproximadamente 1% de todos os
domínios da Internet na época.
01
PHP - O Início
2 Versões:
PHP 3
Na história do PHP, o PHP 3.0 foi a primeira versão que se assemelha
ao PHP como existe hoje.
PHP 4
Em 1998, logo após o lançamento oficial do PHP 3.0, Andi Gutmans e
Zeev Suraski começaram a trabalhar na reescrita do núcleo do PHP.
O objetivo do projeto era melhorar o desempenho de aplicativos
complexos e melhorar a modularização da base de código PHP.
PHP 5
O PHP 5 foi lançado em julho de 2004 após um longo
desenvolvimento e vários lançamentos preliminares. Ele é
alimentado principalmente por seu núcleo Zend Engine 2.0, com um
novo modelo de objeto e dezenas de outros novos recursos.
PHP 7
Após anos de desenvolvimento, foi lançado oficialmente o PHP 7 em
dezembro de 2015. Entre as novidades mais importantes do PHP
versão 7 está seu desempenho.
02
Lógica de Programação
3 Lógica:
Sempre que decidimos fazer alguma atividade em nosso dia a dia,
acabamos seguindo uma sequência lógica. Na maioria das vezes
fazemos isso com tanta naturalidade que nem percebemos, mas
quando o fazemos, podemos ver as etapas que levaram ao
resultado final.
Vamos pensar logicamente nas etapas para se fazer um bolo.
1. Selecionar os ingredientes da receita;
2. Selecionar tigela;
3. Colocar farinha, de acordo com a medida;
4. Selecionar ovos;
5. Colocar manteiga e açúcar a gosto;
6. Colocar leite;
7. Misturar todos os ingredientes na tigela;
8. Despejar a massa na forma;
9. Levar ao forno;
10. Aguardar 40 minutos;
11. Retirar do forno;
12. Servir o bolo.
Quando se trata de programação, definir os passos do que precisa
ser feito é muito importante, pois instruir um computador ainda é
bem diferente de instruir um ser humano.
03
Lógica de Programação
Quando existe a necessidade de desenvolver um programa ou rotina
para o computador executar, precisamos ter clareza sobre a
sequência que precisa ser seguida para atingir o resultado
esperado.
4 Algoritmo
Algoritmos são sequências de passos que seguimos com a intenção
de atingir um objetivo, por exemplo, atravessar a rua, fazer um bolo
ou definir os critérios pelos quais um aluno será aprovado ou
reprovado.
Antes de programar, precisamos saber o que precisa ser feito e
planejar passo a passo, ou seja, criar um algoritmo e avaliar se o
resultado obtido é a solução esperada. Tendo entendido isso,
definimos uma linguagem de programação para implementar
nossos algoritmos, nesse ebook tratamos da linguagem de
programação PHP.
04
PHP Básico - O Início
Um script PHP é executado do lado do servidor, e após isso o
resultado é enviado ao navegador.
5 Sintaxe
Para trabalhar com PHP é necessário seguir a sintaxe padrão da
linguagem.
Um script PHP começa com: <?php e finaliza com ?>
Exemplo:
<?php
// código php aqui
?>
A extensão padrão do PHP é: .php
Sempre que formos trabalhar com PHP é necessário informar a sua
extensão .php
Um script PHP pode contar tags HTML e também um script PHP.
05
PHP Básico
Exemplo de uma página contendo tags HTML e script PHP:
<!DOCTYPE html>
<html>
<head>
<title>Página PHP</title>
</head>
<body>
<?php
echo "Olá, Mundo!";
?>
</body>
</html>
No exemplo acima estamos usando o echo() do PHP para
mostrarmos a frase “Olá, mundo!” em nosso navegador.
6 Variáveis
As variáveis servem para guardar informações.
Em PHP começamos uma variável com $ seguido do nome da
variável.
Exemplo:
<?php Atribuímos a variável $texto, o valor “Olá,
$texto = "Olá, Mundo!"; Mundo!” Uma vez que tenha sido atribuído
um valor a variável nós podemos recuperar
echo $texto; o seu valor posteriormente.
?>
06
PHP Básico
Recomendações para a declaração de nomes das variáveis
As variáveis sempre começam com o sinal $ seguido do nome da
variável.
Os nomes de variáveis devem começar com uma letra ou caractere
de sublinhado.
O nome de uma variável não pode começar com um número.
Os nomes de variáveis podem conter apenas caracteres de a-z,
números e sublinhado.
Os nomes das variáveis diferenciam maiúsculas de minúsculas
($idadee e $IDADE são duas variáveis diferentes).
07
PHP Básico
7 Comentários
Um comentário não será executado como uma parte do script, a
função dele é de apenas ser lido por quem estiver com acesso ao
código.
Exemplo:
<?php
// Comentário de linha única
# Comentário de linha única
/*
Comentário de múltiplas linhas
*/
?>
8 Tipos
O PHP suporta os tipos de dados: integer, float, string, array e etc.
Confira abaixo alguns dos tipos de dados mais usados em PHP:
String
O tipo String recebe caracteres.
Exemplo:
<?php
$texto = "Olá, Mundo!";
echo $texto;
?>
08
PHP Básico
Integer
O tipo integer é um número não decimal.
Exemplo:
<?php
$x = 2022;
var_dump($x);
?>
Nesse exemplo a função var_dump() irá imprimir / mostrar o valor
da variável $x e o tipo de dado da variável.
Float (usado para números de ponto flutuante)
O tipo float (número de ponto flutuante) é um número com um ponto
decimal.
Exemplo:
<?php
$resultado = 12.34;
echo $resultado;
?>
Boolean
O tipo booleano aceita apenas os valores true ou false.
Esse tipo de dado é muito útil quando queremos validar alguma
condição.
09
PHP Básico
Exemplo:
<?php
$online = true;
if($online){
echo 'O valor da variável: $online é verdadeiro';
}
?>
Array
Um array permite criar uma lista com diversos valores, isso significa
que se você tiver dez nomes para apresentar na tela, não será
necessário criar uma variável específica para cada um desses
nomes. Com um array você conseguirá gravar esses 10 nomes em
uma única variável.
Exemplo:
<?php
$dc = ['Superman', 'Batman', 'Sandman', 'Flash'];
print_r($dc);
?>
Object
Um objeto é o que retorna de uma classe.
No capítulo de orientação a objetos iremos ver com detalhes o que
são classes.
10
PHP Básico
NULL
Esse tipo de dado é usado para indicar que a variável não tem valor,
ou seja, nenhum valor foi atribuído ainda.
Exemplo:
<?php
$nome = "Bruce Wayne";
$nome = null;
if(is_null($nome)){
echo "é nulo";
}
9 Constantes
Constantes são variáveis, mas uma vez que tenham sido definidas
não podem ser alteradas.
Diferente das variáveis, as constantes ficam disponíveis em todo o
projeto.
Para criar uma constante, use a função define()
Sintaxe:
define(name, value, case-insensitive)
11
PHP Básico
Parâmetros:
name: especifica o nome da constante.
value: especifica o valor da constante.
case-insensitive: especifica o nome deve diferenciar maiúsculas e
minúsculas.
Exemplo:
<?php
define("DANKICODE", "Os melhores cursos para você!");
echo DANKICODE;
?>
10 Arrays
Um array permite guardar diversos valores em uma única variável.
Para criar um array use: array() ou []
Exemplo com a função array():
<?php
$conteudos = array("Web", "Games", "Marketing", "Empreendedorismo");
echo "Aprenda sobre " . $conteudos[0] . ", " . $conteudos[1] . ", " . $conteudos[2] . ", " .
$conteudos[3] . " e muito mais.";
?>
12
PHP Básico
Exemplo com a forma curta []
<?php
$conteudos = ["Web", "Games", "Marketing", "Empreendedorismo"];
echo "Aprenda sobre " . $conteudos[0] . ", " . $conteudos[1] . ", " . $conteudos[2] . ", " . $conteudos[3] . " e muito mais.";
?>
11 Operadores Lógicos
and
or
xor
!
operador AND:
Será verdadeiro apenas quando TODAS as expressões comparadas forem verdadeiras.
operador OR:
Quando uma OU outra expressão for verdadeira, então toda a expressão será verdadeira.
operador XOR:
Será verdadeiro se QUALQUER uma das expressões forem verdadeiras.
operador !:
Esse operador inverte o que é TRUE para FALSE, e FALSE para TRUE.
operador &&:
Igual o operador AND
operador ||:
Igual o operador OR
13
PHP Básico
12 Operadores Aritméticos
+ adição
exemplo: $x + $y
- subtração
exemplo: $x - $y
* multiplicação
exemplo: $x * $y
/ divisão
exemplo: $x / $y
% módulo
exemplo: $x % $y
** exponenciação
exemplo: $x ** $y
14
PHP Básico
13 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 módulos
.=
atribuição com concatenação
15
PHP Básico
14 Operadores de Comparação
== igual
=== idêntico
!= não é igual
<> não é igual
!== não é idêntico
> maior que
< menor que
>= maior ou igual a
<= menor ou igual a
16
PHP Básico
15 Operadores de Incremento / Decremento
++$x pré-incremento - primeiro incrementa e somente depois
realiza a operação.
$x++ pós-incremento - primeiro faz a operação e somente depois
incrementa.
--$x pré-decremento - primeiro decrementa e somente depois faz a
operação.
$x-- pós-decremento - primeiro faz a operação e somente depois
decrementa.
17
PHP Básico
16 Funções
Uma função é um bloco de instruções que pode ser usado
repetidamente dentro do projeto.
Para criar uma função:
Exemplo:
<?php
function exemplo()
{
//código que será executado
}
?>
Obs: Dê um nome que reflita o que a função irá fazer.
Abaixo temos uma função que irá "imprimir" a mensagem "Olá,
mundo!".
Exemplo:
<?php
function olaMundo()
{
echo "Olá, Mundo!";
}
olaMundo();
?>
18
PHP Básico
Iniciamos definindo o nome de olaMundo() para a nossa função, em
seguida abrimos chaves { para indicar que iremos começar a
escrever o código da nossa função, após isso iremos finalizar a
função com as chaves }
Para chamar a função basta escrever o nome dela: olaMundo()
Argumentos de função:
É possível passarmos argumentos em nossas funções.
Os argumentos são passados dentro de () após o nome da função.
Caso deseje adicionar mais argumentos basta separá-los por
vírgula.
Exemplo:
<?php
function area($nome, $categoria){
echo "Curso $nome em $categoria<br>";
}
area("criação de sites", "web e mobile");
area("criação de games", "games");
area("marketing", "negócios");
area("empreendedorismo", "negócios");
?>
19
PHP Básico
Retornar valores:
Para retornarmos valores usamos o return.
Exemplo:
<?php
function soma($x, $y){
return $x + $y;
}
echo soma(4, 9);
?>
17 Funções Matemáticas
No link abaixo você poderá consultar algumas funções matemáticas
que irão ajudar a resolver alguns cálculos matemáticos, como por
exemplo: cosseno, potência, seno, tangente, raiz quadrada e
outras.
Consulte: PHP: Funções Matemáticas - Manual
20
PHP Intermediário
18 Manipulando Strings
Uma string é uma sequência de caracteres alfanuméricos, onde a
sequência de caracteres é delimitada por aspas.
Ou seja, para criar uma nova String, primeiro você precisa abrir as
aspas, colocar uma sequência de caracteres alfanuméricos e
depois fechar as aspas, por exemplo, "senha1234".
As strings se comportam como a maioria das linguagens de
programação.
Funções mais usadas:
explode:
O objetivo da função explodir é dividir a String em partes, após o
que a função retornará uma lista de String contendo todas as
partes da String original, que é um array.
implode:
A função explodir retorna um array contendo partes de uma string,
enquanto a função implode retorna uma string que consiste em
todas as strings do array.
21
PHP Intermediário
substr:
Se você precisar extrair uma parte de uma String, precisará
determinar o comprimento da String e onde começar a extrair a
String que deseja extrair.
substr_replace:
A função substr_replace substitui texto em uma string, esta função
recebe como parâmetros o texto a ser encontrado, o novo texto que
irá substituir, e a string na qual será feita a busca e substituição,
veja a estrutura da função um pouco abaixo.
strlen:
Essa função recebe uma string como parâmetro e retorna o número
total de caracteres que a string possui, que é o comprimento da
string.
strtoupper:
A função strtoupper pega uma string como argumento e retorna a
mesma string com todos os caracteres em maiúsculas.
strtolower:
Se você tiver uma string em que os caracteres desta string são
maiúsculos e minúsculos e deseja que todos os caracteres sejam
minúsculos.
22
PHP Intermediário
19 Manipulação de Datas
A linguagem de programação PHP vem com algumas funções
internas de data e hora que nos ajudarão a lidar com datas de uma
maneira mais fácil.
Você certamente precisará usar datas e horas em seus
sites/sistemas. Por exemplo, você pode querer exibir a data da
última modificação em uma postagem ou mencionar há quanto
tempo um leitor deixou um comentário. Você também pode querer
exibir uma contagem regressiva até que um evento especial ocorra.
O que é o date?
Usando a função date(), podemos formatar a data atual de várias
maneiras:
echo date("d/m/Y"); // retorna a data atual no formato dia/mês/ano
echo date("H:i:s"); // retorna a hora atual no formato horas:minutos:segundos
echo date("d/m/Y H:i:s"); //retorna data e hora atual
23
PHP Intermediário
O que é o timestamp?
A função time() é a maneira mais fácil de obter o timestamp unix da
data atual, basta digitar time() e terá o valor:
echo time();
20 Manipulando Arrays
Array em PHP nada mais é do que uma estrutura de dados que nos
permite gravar e acessar dados de forma heterogênea ou
isomórfica, ou seja, podemos criar um Array para gravar mais de um
tipo de dado, como inserir Integer, String , Object e outros tipos de
valores
Inicialmente podemos criar um array vazio simplesmente chamando
esta função sem passar nenhum argumento, então ela retornará
um novo array vazio.
Exemplo:
$arr = array();
print_r($arr);
24
PHP Intermediário
Se quisermos criar um array com seus elementos iniciais já
definidos, podemos defini-los passando-os como argumentos para
uma função array, onde para cada elemento temos que separá-los
com vírgulas, e para cada elemento precisamos Definir sua chave e
valor separado pelo operador =>, mas também podemos omitir a
chave do elemento, assim ele irá gerar automaticamente o formato
do número na ordem.
Exemplo:
$arr = array(
'chave1' => 'valor1', 'chave2' => 'valor2', 'chave3' => 'valor3'
);
print_r($arr);
Podemos criar arrays usando a sintaxe concisa usando colchetes a
partir do PHP versão 5.4:
Exemplo:
$arr = [
'chave1' => 'valor1', 'chave2' => 'valor2', 'chave3' => 'valor3'
];
print_r($arr);
25
PHP Intermediário
Podemos também definir os elementos do nosso array
dinamicamente sem informar a chave.
Exemplo:
//declarando um array da forma reduzida que foi disponibilizada a partir da versão 5.4
$dc = []; //array vazio
//primeira posição começa em 0
$dc[] = "Batman"; // a chave será igual a 0 e com o valor Batman
$dc[] = "Superman"; // a chave será igual a 1 e com o valor Superman
$dc[] = "Mulher Maravilha"; // a chave será igual a 2 e com o valor Mulher Maravilha
print_r($dc);
Contando quantos elementos existem no nosso array através da
função count()
Exemplo:
$dc = ['Batman', "Superman", "Mulher Maravilha"];
echo count($dc);
Percorrendo um array para fazer iterações através da estrutura de
repetição foreach()
A estrutura foreach() foi criada especialmente para lidarmos com
arrays e objetos.
26
PHP Intermediário
$dc[] = "Batman"; // a chave será igual a 0 e com o valor Batman
$dc[] = "Superman"; // a chave será igual a 1 e com o valor Superman
$dc[] = "Mulher Maravilha"; // a chave será igual a 2 e com o valor Mulher Maravilha
//usando o foreach para apresentarmos todos os valores do array $dc
foreach($dc as $value){
echo $value;
}
21 Estruturas de Controle
a. Estrutura de Condição
if/else
else if
switch
As estruturas condicionais são essenciais para desenvolver a lógica
de qualquer sistema ou aplicativo. Use-os quando algum código
precisar ser executado somente quando uma condição for atendida.
Elas são utilizadas para avaliar certa condição e de acordo com o
resultado, executar uma rotina específica.
27
PHP Intermediário
if else
if/else é um operador condicional, usado quando queremos
executar um bloco de código somente se uma determinada
condição for atendida, por exemplo, exibir conteúdo somente se o
usuário for maior de idade.
<?php
$idade = 18;
if ($idade >= 18) {
// maior de idade;
echo "Maior de idade";
} else {
// menor de idade;
echo "Menor de idade";
}
?>
else if
Use else if se duas ou mais condições precisam ser verificadas.
<
28
PHP Intermediário
Quando nenhuma condição for atendida, usaremos o else.
switch/case
Ao contrário da estrutura if/else, o switch/case avalia apenas as
condições de igualdade. Ou seja, verifica se o valor recebido como
parâmetro é igual a uma das opções especificadas em seu corpo.
Esse comportamento é equivalente ao uso de várias sequências
if/else, mas com uma sintaxe mais enxuta e legível.
Ele começa aceitando uma expressão como parâmetro e verifica se
ela corresponde a algum dos valores especificados.
switch (expressão) {
case valor1:
//código a ser executado se a expressão for igual ao valor1
break;
case valor2:
//código a ser executado se a expressão for igual ao valor2
break;
case valorN:
//código a ser executado se a expressão for igual ao valorN
break;
}
Exemplos usados:
Clique Aqui
29
PHP Intermediário
b. Estrutura de Repetição
while
do-while
for
foreach
Ao trabalhar com estruturas de repetição, precisamos verificar a
existência de um ponto de parada, caso contrário o script entrará
em loop infinito.
while – Um estrutura while é uma estrutura de repetição que avalia
uma expressão e executa um bloco de código enquanto o resultado
da expressão for verdadeiro, caso o resultado seja falso, a
execução do bloco de código é interrompida.
Exemplo:
$count = 1;
while ($count <= 5) {
echo $count;
$count++;
}
// Resultado: 12345
30
PHP Intermediário
do while – A estrutura do while é muito semelhante com a estrutura
while, mas a verificação da expressão fica depois do bloco de
código.
$check = false;
do {
echo 'Danki Code';
} while ($check == true);
// Resultado: Danki Code
for – A estrutura for é uma das estruturas de repetição mais
famosas, sua sintaxe é bem diferente, definimos 3 comandos
internos separados por ponto e vírgula.
Primeiro definimos um contador, depois uma expressão de
verificação e, finalmente, uma instrução para modificar o contador.
for ($i = 1; $i <= 5; $i++) {
echo $i;
}
// Resultado: 1 2 3 4 5
31
PHP Intermediário
foreach – A estrutura foreach é uma estrutura de repetição
simplificada, ela foi feita para ser a primeira alternativa quando se
pretende iterar(navegar) pelos itens de um array, mas não se limita
somente a array, pode ser utilizada com dois ou três parâmetros.
$var = array('batman', 'superman', 'mulher maravilha');
foreach ($var as $value) {
echo $value;
}
// Resultado: batman, superman, mulher maravilha
Usando dois ou mais parâmetros.
foreach ($var as $key => $value) { Exemplos usados
echo "{$key} = {$value}"; Clique Aqui
}
// Resultado: 0 = batman 1 = superman 2 = mulher maravilha
22 Formulários
Introdução
A forma mais comum para o envio de dados é através do uso de
formulário HTML. Um formulário é construído através do uso da TAG
<form> e nesta é definido o script para onde este formulário deve
ser enviado, no caso, o atributo action e também, o método em que
32
PHP Intermediário
as informações deverão ser submetidas, no caso, temos que definir
se o formulário será enviado através do métodos GET ou então do
método POST no atributo de nome method da TAG.
Como criar um formulário:
Em HTML, o formulário TAG é <form>. Na definição, a TAG <form>
possui 2 atributos, são eles: action e method.
O atributo action é a URL absoluta para o PHP Script, então é para
onde queremos enviar o formulário.
O atributo method especifica o tipo de solicitação, ou seja: GET ou
POST
Cada input contido no formulário deve conter um atributo name,
pois os valores estão associados à propriedade name de cada input.
<form action="" method="">
<input type="text" name="nome" id="">
<input type="email" name="email" id="">
<input type="submit" name="enviar" value="Enviar">
</form>
33
PHP Intermediário
GET ou POST
GET envia parâmetros na própria URL, visto que esses parâmetros
não são "secretos" e as pessoas podem acessá-los tranquilamente.
Saída na url ao usarmos o GET:
minhapagina?nome=bruce&
[email protected]Recuperando valores vindo do formulário quando definimos o
method como GET:
Exemplos usados
Clique Aqui
34
PHP Intermediário
O POST é utilizado quando é necessário enviar parâmetros no corpo
da requisição, ou seja, nenhum parâmetro será passado pela URL,
permitindo maior controle ao trabalhar com dados sensíveis (ex:
dados de cartão de crédito, senhas, etc).
Recuperando valores vindo do formulário quando definimos o
method como POST:
Exemplos usados
Clique Aqui
35
Banco de Dados - SQL
24 Introdução
Um banco de dados armazena informações sobre um determinado
domínio. De forma mais simples, é um agrupamento de dados
relacionados a um mesmo assunto que precisa ser salvo para
segurança ou para uma conferência futura.
É comum que as empresas tenham muitas informações que
precisam ser organizadas e disponibilizadas dentro do negócio para
que a equipe e a gestão consultem posteriormente.
É interessante ter um sistema gerenciador de banco de dados
(SGBD), para manipular as informações e simplificar a rotina da
empresa.
Existem vários tipos de SGBDs disponíveis hoje, e cada um é
adequado para as necessidades do cliente. Os mais comuns são:
Oracle, MySQL, SQL Server, PostgreSQL e outros.
25 Tipos de Dados
Em sua versão 8 encontramos os tipos: string, numeric, date e time.
Um desenvolvedor SQL deve decidir antes de criar as tabelas de sua
base de dados quais serão os tipos de dados definidos para cada
coluna em suas tabelas.
36
Banco de Dados - SQL
Ponto decimal com M dígitos no total (precisão) e D casas decimais
DECIMAL(M,D)
(escala); o padrão é 10,0; M vai até 65 e D até 30
Ponto flutuante com precisão M e escala D; o padrão é 10,2; D vai
FLOAT(M,D)
até 24
CHAR(M) String que ocupa tamanho fixo entre 0 e 255 caracteres
BOOL / BOOLEAN Valores binários 0 / 1; Na verdade, é um alias para o tipo TINYINT(1)
VARCHAR(M) String de tamanho variável, até 65535 caracteres
BLOB / Campo com tamanho máximo de 65535 caracteres binários; ‘Binary
MEDIUMBLOB/ Large Objects’, são usados para armazenar grandes quantidades de
TINYBLOB dados, como imagens.
MEDIUMTEXT Permite armazenar até 16.777.215 caracteres
LONGTEXT Permite armazenar até 4.294.967.295 caracteres
INT Permite armazenar até 2147483647
TINYINT Permite armazenar até 127
BIGINT Permite armazenar até 9223372036854775807
DATE Uma data de 01/01/1000 a 31/12/9999, no formato YYYY-MM-DD
Uma combinação de data e hora de 01/01/1000 00:00:00 a
DATETIME
31/12/9999 23:59:59, no formato YYYY-MM-DD HH:MM:SS
TIME Hora apenas, no formato HH:MM:SS
Ano nos formatos de 2 ou 4 dígitos; Se forem 2 (YEAR(2)), ano vai de
YEAR(M)
1970 a 2069; para 4 (YEAR(4)), vai de 1901 a 2155. O padrão é 4.
37
Banco de Dados - SQL
26 Base de Dados
CREATE DATABASE
A declaração CREATE DATABASE permite criar um novo banco de dados.
Exemplo:
CREATE DATABASE pacientes;
DROP DATABASE
A declaração DROP DATABASE irá excluir uma base de dados já existente.
Exemplo:
DROP DATABASE pacientes;
CREATE TABLE
A declaração CREATE TABLE permite a criação de uma nova tabela.
Exemplo:
CREATE TABLE pacientes (id int, nome varchar(255), endereco varchar(255));
DROP TABLE
A declaração DROP TABLE irá excluir uma tabela já existente.
Exemplo:
DROP TABLE pacientes;
38
Banco de Dados - SQL
27 Operadores Lógicos
AND
Será verdadeiro se todas as condições forem verdadeiras.
BETWEEN
O BETWEEN permite consultar valores que estão dentro de alguma faixa.
Exemplo:
Um valor que esteja entre 10 e 100
IN
O IN irá verificar se o valor de uma coluna está presente em uma lista de expressões.
LIKE
O LIKE irá retornar um registro se algum padrão for encontrado.
Exemplo:
LIKE 10
Caso exista, todos os registros com valor 10 serão retornados.
NOT
Irá retornar um registro caso a condição não seja verdadeira.
OR
Será verdadeiro se alguma das condições for verdadeira.
39
Banco de Dados - SQL
28 Instruções SQL
SELECT
A instrução SELECT irá selecionar registros de uma tabela.
Exemplo:
SELECT * FROM pacientes;
INSERT INTO
A instrução INSERT INTO irá inserir novos registros em uma tabela.
Exemplo:
INSERT INTO pacientes VALUES ("Bruce", "Wayne");
UPDATE
A instrução UPDATE é usada para editar registros de uma tabela.
Exemplo:
UPDATE pacientes SET coluna = valor WHERE condicao;
DELETE
A instrução DELETE irá excluir registros de uma tabela.
Exemplo:
DELETE FROM pacientes WHERE condicao;
40
Banco de Dados - SQL
29 Entendendo o WHERE
A cláusula WHERE é usada para filtrar registros que atendam a uma
condição.
Exemplo:
SELECT * FROM paises WHERE pais = 'Brasil';
Operadores que podem ser usados com a cláusula WHERE:
= igual.
> maior que.
< menor que.
>= maior ou igual.
<= menor ou igual.
<> diferente.
BETWEEN filtra valores que estão dentro de alguma faixa.
LIKE filtra valores que correspondam a um padrão.
IN filtra se o valor de uma coluna está presente em uma lista de expressões.
SELECT
A instrução SELECT irá selecionar registros de uma tabela.
Exemplo:
SELECT * FROM pacientes;
INSERT INTO
A instrução INSERT INTO irá inserir novos registros em uma tabela.
Exemplo:
INSERT INTO pacientes VALUES ("Bruce", "Wayne");
41
Banco de Dados - SQL
UPDATE
A instrução UPDATE é usada para editar registros de uma tabela.
Exemplo:
UPDATE pacientes SET coluna = valor WHERE condicao;
DELETE
A instrução DELETE irá excluir registros de uma tabela.
Exemplo:
DELETE FROM pacientes WHERE condicao;
30 Filtrando com HAVING
A cláusula HAVING especifica uma condição de pesquisa para um
grupo ou conjunto de registros e define critérios para limitar os
resultados obtidos agrupando os registros. É importante observar
que esta cláusula só pode ser usada em conjunto com GROUP BY.
O HAVING é diferente do WHERE. O WHERE limita os resultados obtidos
sempre que a cláusula FROM é utilizada, enquanto a cláusula HAVING
filtra o retorno do agrupamento e requer o uso de GROUP BY.
31 ORDER BY e LIMIT
Com ORDER BY você será capaz de ordenar os registros em ordem
crescente ou decrescente.
42
Banco de Dados - SQL
Por padrão os resultados já são mostrados em ordem crescente.
Para mostrar em ordem decrescente informe DESC.
Exemplo:
SELECT * FROM pacientes ORDER BY idade DESC;
32 GROUP BY
Entre outras coisas, a cláusula GROUP BY pode ser usada para
agrupar registros por tipo existente.
Exemplo:
Imagine que temos uma sala cheia de pessoas que nasceram em
países diferentes.
Se quiséssemos descobrir a altura média das pessoas em uma sala
por país, primeiro pedimos às pessoas que se dividissem em grupos
com base no país em que nasceram.
Após a divisão nos respectivos grupos, poderíamos calcular a altura
média de qualquer um desses grupos.
É assim que as instruções GROUP BY funcionam. Primeiro definimos
como queremos agrupar as informações, e então podemos realizar
cálculos ou agregações nos grupos.
43
Banco de Dados - SQL
33 Relacionamento de Tabelas
Um relacionamento de tabela é necessário quando temos várias
tabelas com informações que podem e devem ser
cruzadas/vinculadas, por exemplo: categorias e produtos. Cada
registro da tabela de produtos será vinculado a um registro da
tabela de categorias.
34 INNER JOIN, LEFT JOIN, RIGHT JOIN
INNER JOIN
Este é o tipo de padrão de JOIN caso nenhum JOIN for especificada.
Ele retorna todas as linhas onde há pelo menos uma
correspondência em ambas as tabelas.
Exemplo:
SELECT colunas
FROM tabela1
INNER JOIN tabela2
ON tabela1.coluna=tabela2.coluna;
Onde tabela1.coluna é o nome da primeira tabela concatenado com
um ponto e com o nome da coluna com chave primária ou
estrangeira da tabela, e tabela2.coluna é o nome da segunda tabela
concatenado com um ponto e com a chave estrangeira ou primária
dessa tabela que se relaciona com a chave da primeira tabela.
44
Banco de Dados - SQL
LEFT JOIN
O LEFT JOIN retorna todas as linhas da tabela à esquerda e as linhas
correspondentes da tabela à direita. As linhas da tabela da
esquerda serão retornadas mesmo que não tenham
correspondência na tabela da direita. As linhas da tabela da
esquerda que não correspondem à tabela da direita terão valores
nulos na tabela da direita.
RIGHT JOIN
O RIGHT JOIN retorna todas as linhas da tabela da direita e as linhas
correspondentes da tabela da esquerda. Ao contrário do LEFT JOIN,
ela retorna todas as linhas da tabela à direita, mesmo que não haja
correspondência na tabela à esquerda.
Exemplos usados
Clique Aqui
45
Banco de dados com PDO
35 Introdução
PDO é uma classe desenvolvida especificamente para trabalhar com
procedimentos relacionados a banco de dados. O interessante de
usar esse tipo de classe é a abstração de qual banco estamos
usando e a segurança extra que essa classe nos oferece.
Quando falamos em "abstração de banco de dados" queremos dizer
simplesmente que o PDO nos oferece recursos suficientes para
trabalharmos na implementação de toda a nossa aplicação sem
precisarmos nos preocupar com qual banco de dados utilizamos, ou
seja, mudar posteriormente não trará grandes problemas na
seleção do banco de dados de sua aplicação.
36 Conexão
Iremos criar uma nova instância de classe, o drive (será o mysql),
nome do banco de dados, user e senha do banco de dados.
Exemplo simples:
<?php
$conn = new PDO('mysql:host=localhost;dbname=meuBancoDeDados', "user",
"senha");
?>
46
Banco de dados com PDO
Precisamos tratar os erros para que eles sejam mostrados caso a
nossa conexão não seja bem sucedida.
Exemplo com tratamento de erros:
<?php
try {
$pdo = new PDO('mysql:host=' . HOST . ';dbname=' . "minhabasededados", "user",
"senha", array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
} catch (Exception $e) {
echo '<h2>Erro ao conectar</h2>';
} Exemplos usados
?> Clique Aqui
37 PDO Statement
O PDO suporta "prepared statements" (comandos SQL pré-
compilados) e “stored procedures” (procedimentos armazenados no
banco de dados). Os "prepared statements" são úteis porque
permitem criar instruções SQL genéricas e executá-las várias vezes,
substituindo os parâmetros reais por valores específicos de
execução.
47
Banco de dados com PDO
38 Inserindo com PDO
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco_de_dados',
'username','password');
$sql = $banco->prepare("INSERT INTO `usuario` VALUES(null, ?, ?, ?)");
$sql->execute([$nome, $email, $senha]);
echo "Usuário adicionado com sucesso!";
39 Editando com PDO
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco_de_dados',
'username','password');
$sql = $banco->prepare("UPDATE `usuario` set nome = ?, email = ?, senha = ? WHERE
id = ?");
$sql->execute([$nome, $email, $senha, $id]);
echo "Usuário editado com sucesso!";
40 Deletando com PDO
$id = 7;
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco_de_dados',
'username','password');
$sql = $banco->prepare("DELETE FROM `usuario` WHERE id = ?");
$sql->execute([$id]);
48
Banco de dados com PDO
41 Selecionando apenas um registro
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco_de_dados',
'username','password');
$id = 1;
$sql = $banco->prepare("SELECT * FROM `usuario` WHERE id = ?");
$sql->execute(["id"]);
$usuarios = $sql->fetch();
echo $usuarios['nome'];
42 Selecionando todos os registros de uma tabela com PDO
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco_de_dados',
'username','password');
$sql = $banco->prepare("SELECT * FROM `usuario`");
$sql->execute();
$usuarios = $sql->fetchAll();
foreach ($usuarios as $value) {
Exemplos usados
echo $value['nome'];
} Clique Aqui
49
Banco de dados com PDO
43 Erros e Exceções
O tratamento de exceções do PDO do PHP permite que você traga
erros e evite que seu programa pare de funcionar durante o uso.
Você pode usar manipuladores de exceção para exibir mensagens
de erro personalizadas, registrar erros ou executar outras ações.
50
Composer
44 Introdução
O Composer é um gerenciador de dependências para PHP. É através
deste gerenciador que você será capaz de utilizar bibliotecas de
terceiro.
Quando for necessário utilizar alguma biblioteca, é imprescindível
nos dias atuais incluir a biblioteca por meio do Composer.
Um gerenciador de dependências serve basicamente para analisar
todas as ações relacionadas às dependências do projeto.
Confira abaixo alguns dos principais gerenciadores de dependência:
Bower para gerenciar dependências do frontend (Javascript e CSS).
NPM ideal para gerenciar dependências Nodejs.
Composer é usado para dependências com PHP.
Maven para dependências com Java.
51
Composer
Instalando o Composer
Primeiro, você precisa baixá-lo em seu site, nele vocÊ encontrará
toda a documentação, além do link para baixar o instalador.
Site oficial: https://getcomposer.org/ Clique Aqui
Ao concluir a instalação usando o comando composer no prompt,
você poderá ver o resultado como este:
Comando:
composer
Exemplos usados
Clique Aqui
52
Composer
45 Autoload
O autoload nos permite utilizar classes sem usar o require() ou o
include().
Uma aplicação PHP, por menor que seja, deve ser dividida em vários
arquivos para manter a organização. Portanto, os arquivos devem
ser incluídos para usar o código neles contidos. Para isso, utilizamos
o que chamamos de autoloading no PHP, que é basicamente a lógica
de carregar automaticamente nossos arquivos.
Fazendo o autoloading
Crie um projeto e navegue até a pasta dele através do terminal/cmd
e rode o comando composer init
O comando composer init nos pede algumas informações sobre o
projeto, como nome do pacote, versão etc.
Feito isso o arquivo composer.json é criado e podemos iniciar nossa
aplicação.
Iremos definir agora a estrutura de pastas/arquivos que queremos.
A nossa estrutura ficará da seguinte forma:
53
Composer
src/
---App/
composer.json
index.php
vendor
Dentro de src/ criamos a pasta App que é onde teremos todo a
nossa aplicação.
Para que o composer faça o autoload das classes precisamos
alterar o arquivo composer.json mapeando esse namespace para
que ele entenda onde se encontrará os arquivos que precisam ser
carregados.
"require": {},
"autoload": {
"psr-4": {
"App\\": "src/App"
}
}
Após alterar o arquivo composer.json é necessário rodar o comando
composer dump-autoload para que nossa estrutura seja
reconhecida:
Agora podemos criar nossas classes e ver o autoloading
funcionando na prática.
54
Composer
Crie as pastas: Controllers, Models e Views dentro de src/App e um
arquivo/classe chamado Application dentro de App
src/
---App/
------Application.php
------Controllers
------Models
------Views
composer.json
vendor
index.php
Dentro do arquivo Application.php nós iremos apresentar a
mensagem "rodando" no construtor da nossa class Application
<?php
O arquivo responsável por fazer o
namespace App; carregamento das classes se chama
autoload.php e está presente na
class Application pasta vendor que foi gerada após
{ rodamos o comando composer init
public function __construct()
{
echo "rodando";
Exemplos usados
} Clique Aqui
}
?>
55
PHP Avançado
46 include e include_once
include:
A função include() do PHP tem como objetivo incluir um arquivo
dentro de outro arquivo quando acessado.
Caso aconteça algum problema ao incluir o arquivo, será exibido um
aviso de que o arquivo não pode ser incluído, mas a página
continuará a ser exibida normalmente sem o arquivo.
Exemplo:
<?php
include("arquivo.php");
?>
include_once:
A função include_once() é igual à função include().
A única diferença é que uma função com "once" permite que
apenas um arquivo seja incluso, isso significa que se esse arquivo
for incluso várias vezes ele será ignorado.
Exemplo:
<?php
include_once("umarquivo.php");
?>
56
PHP Avançado
47 require e require_once
require:
A função require() do PHP faz a mesma coisa que a função include(),
a única diferença é que se você incluir um arquivo que não exista ou
que não seja encontrado, um erro fatal será gerado, interrompendo
a execução de qualquer script depois.
Exemplo:
<?php
require("umarquivo.php");
?>
require_once:
Da mesma forma que a função include_once() é igual à função
include(), a require_once() também é idêntica à require().
Exemplo:
<?php
require_once("umarquivo.php"); Exemplos usados
?>
Clique Aqui
57
PHP Avançado
48 Upload de Arquivos
Quando trabalhamos com formulários pode ser necessário realizar o
envio de arquivos. Através de validações somos capazes de
controlar quais tipos de arquivos podem ser enviados. Ao fazermos
esses tipos de validações garantimos que apenas os tipos de
arquivos definidos por nós possam ser enviados e dessa forma os
nossos sistemas se tornam mais seguros.
Exemplo de formulário para upload de arquivo:
<h1>Upload de Arquivos - Danki Code</h1>
<form action="upload.php" method="post" enctype="multipart/form-data">
<label for="arquivo">Arquivo</label>
<input type="file" required name="arquivo" id="arquivo">
<input type="submit" value="Enviar" name="enviar">
</form>
É necessário que o atributo: enctype="multipart/form-data" tenha
sido informado, caso contrário o upload não irá funcionar.
O input que carrega o arquivo precisa ser do tipo “file”.
58
PHP Avançado
Exemplo do script PHP que irá realizar o upload:
<?php
$arquivo = $_FILES['arquivo'];
if (isset($arquivo['tmp_name']) && empty($arquivo['tmp_name']) != true) {
move_uploaded_file($_FILES['arquivo']['tmp_name'], "arquivos/" . $arquivo['name']);
echo "Arquivo enviado com sucesso";
}
?>
** Atenção **
Nenhuma validação foi feita no código acima e isso pode ser
extremamente prejudicial ao nosso sistema. No capítulo de
Segurança iremos ver como validar os arquivos antes de enviá-los
ao sistema.
Exemplos usados
Clique Aqui
59
PHP Avançado
49 Cookies
Os cookies podem ser usados para armazenar informações sobre os
visitantes para uso futuro. Um cookie pode ou não ter uma data de
expiração, se ativo permanecerá ativo mesmo que o visitante feche
ou desligue o computador.
Um exemplo simples são os sites que não pedem para você redigitar
sua senha para fazer login, os cookies também são muito úteis em
lojas virtuais, uma vez que um cookie é colocado em seu carrinho de
compras, você pode voltar ao site e encontrar itens você adicionou
anteriormente ao seu carrinho.
Exemplo:
<?php
// Cria um cookie chamado 'batman' com o valor 'Bruce'
setcookie('batman', 'Bruce');
// Cria o mesmo cookie acima só que irá durar três dias
setcookie('batman', 'Bruce', (time() + (3 * 24 * 3600)));
// Cria o novo cookie para durar duas horas
setcookie('superman', 'Clark', (time() + (2 * 3600)));
?>
Normalmente usamos três parâmetros, são eles:
nome do cookie (1), valor do cookie (2) e duração do cookie (3).
60
PHP Avançado
Porém, você pode adicionar mais 4 parâmetros, confira mais aqui:
https://www.php.net/setcookie
Clique Aqui
Se você não definir um tempo de vida (duração) do cookie, ele
durará enquanto o navegador permanecer aberto. Para definir o
tempo de vida do cookie, basta adicionar o número de segundos
desejado ao resultado da função time(), por exemplo: cinco horas
são 18000 segundos, então seria: 18000 + time() ou (3600 * 5) +
time().
Dica: cada hora tem 3600 segundos e cada dia tem 86400 segundos.
Se você deseja recuperar o valor do cookie posteriormente em
outra página do seu site, use este exemplo:
<?php
// cookie 'batman' definido anteriormente:
$valor = $_COOKIE['batman']; // Bruce
// Pega o valor do cookie 'superman' definido anteriormente:
$valor = $_COOKIE['superman']; // Clark
?>
61
PHP Avançado
Alterando o valor de um cookie
<?php
// Cria o cookie meu_cookie
setcookie('meu_cookie', 'Novo valor do cookie');
// Mostra os dados do cookie
echo $_COOKIE['meu_cookie'];
?>
Para excluir um cookie
Adicione uma data no passado e o cookie será destruído:
<?php
// Apagando o cookie meu_cookie
setcookie('meu_cookie', '', time() - 3600);
?>
$_COOKIE e $_SESSION são muito utilizados para sistemas de login,
além disso, são excelentes para passar dados de uma página para
outra sem ter que criar variáveis adicionais para isso.
Link dos exemplos:
Clique Aqui
62
PHP Avançado
50 Sessões
As sessões são uma maneira simples de armazenar dados para uso
durante toda a visita de um usuário. As sessões são pessoais para
cada visitante, e uma vez que esse valor tenha sido salvo na sessão,
ele poderá ser usado em qualquer lugar do site.
Esses valores permanecerão em uso para o visitante até que ele
feche o navegador ou a sessão seja destruída.
Iniciando uma sessão
Antes de armazenar qualquer informação em variáveis de sessão,
você deve primeiro iniciar a sessão. Para iniciar uma nova sessão,
basta chamar a função session_start() Isso cria uma nova sessão e
gera um ID de sessão exclusivo para o usuário.
O código PHP no exemplo abaixo simplesmente inicia uma nova
sessão.
<?php
// Iniciando uma sessão
session_start();
?>
IMPORTANTE: Você deve chamar a função session_start() no início da
página, ou seja, antes de qualquer saída gerada pelo script do seu
navegador.
63
PHP Avançado
Salvando dados na sessão
Você pode armazenar todos os seus dados de sessão como pares
chave-valor na variável super global $_SESSION[]. Os dados
armazenados podem ser acessados durante a sessão. Considere o
seguinte script que cria uma nova sessão e registra duas variáveis
de sessão.
<?php
// Iniciando uma sessão
session_start();
// Guardando dados na sessão
$_SESSION["nome"] = "Bruce";
$_SESSION["sobrenome"] = "Wayne";
?>
Acessando os dados definidos na sessão
Para acessar os dados da sessão que definimos em nosso exemplo
anterior, simplesmente recrie a sessão chamando session_start() e,
em seguida, passe a chave correspondente para o array $_SESSION.
<?php O código PHP no exemplo
// Iniciando uma sessão ao lado produz a seguinte
session_start(); saída.
Oi Bruce Wayne
// Acessando os dados da sessão
echo 'Oi, ' . $_SESSION["nome"] . ' ' . $_SESSION["sobrenome"];
?>
64
PHP Avançado
Para destruir uma sessão
Se você deseja remover determinados dados da sessão, basta
remover a chave correspondente da matriz $_SESSION, conforme
mostrado no exemplo a seguir:
<?php
// Inicia a sessão
session_start();
if (isset($_SESSION["sobrenome"])) {
// Remove o dado sobrenome da sessão
unset($_SESSION["sobrenome"]);
// Destrói a sessão e todos os dados inseridos nela
session_destroy();
}
?>
Cada sessão do PHP tem um valor de tempo limite, ela é medida em
segundos e determina quanto tempo a sessão deve permanecer
ativa sem nenhuma atividade do usuário. Você pode ajustar o
período de tempo limite alterando o valor da variável
session.gc_maxlifetime no arquivo de configuração PHP do seu
servidor host (php.ini).
Link dos exemplos:
Clique Aqui
65
PHP Avançado
51 Manipulando Arquivos
Abrindo, Lendo e Fechando
Abrindo um arquivo
Você pode abrir um novo arquivo para leitura através da permissão
do arquivo "r".
O primeiro parâmetro refere-se ao caminho de onde o arquivo que
você deseja abrir está.
Exemplo:
Lendo um arquivo com a função fgets()
Para ler um arquivo você para você pode o usar o fgets()
O primeiro refere-se ao caminho de onde o arquivo que você deseja
ler está.
66
PHP Avançado
Caso deseje fechar um arquivo use a função fclose()
Criando e Escrevendo
Criando e lendo um arquivo para escrita com o fopen()
A função fopen() possui dois parâmetros, o primeiro refere-se ao
caminho de onde você deseja salvar o seu arquivo e o segundo
refere-se a permissão do arquivo.
No exemplo acima usamos o "w" que permite apenas a escrita no
arquivo.
exemplo:
52 Filtros no PHP
Um filtro em PHP é usado para validar e filtrar dados provenientes
de fontes inseguras.
Testar, validar e filtrar a entrada do usuário ou outros dados é uma
parte importante de uma aplicação web.
Os filtros do PHP foram projetados para tornar a filtragem de dados
mais fácil e simples.
67
PHP Avançado
Quase todas as aplicações Web dependem de entradas externas.
Isso geralmente vem do usuário ou de outra aplicação (como um
serviço da Web). Usando filtros, você pode ter certeza de que sua
aplicação tem o valor correto.
Você deve sempre filtrar dados externos!
A filtragem de entrada é um dos problemas de segurança mais
sérios e você pode corrigi-los limpando e validando os dados
enviados através de um formulário para o seu servidor.
Validando e Limpando
Existem dois tipos de filtros:
Filtros de limpeza
São usados para permitir ou não determinados caracteres.
Vamos limpar o valor enviado como email para não aceitar
caracteres ilegais.
<?php
$email = "[email protected]";
//removendo caracteres ilegais.
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
?>
68
PHP Avançado
Filtros de validação
São usados para validar a entrada de dados.
Vamos validar o valor enviado como email.
<?php
$email = "[email protected]";
//removendo caracteres ilegais.
$email = filter_var($email, FILTER_SANITIZE_EMAIL);
//validando o email
if (!filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
echo ("$email é um endereço de email válido.");
} else {
echo ("$email não é um endereço de email válido.");
}
?>
Exemplos usados:
Clique Aqui
69
MVC: Model - View - Controller
O MVC é importante no desenvolvimento de sistemas porque
fornece uma estrutura básica para a criação de aplicativos
desenvolvidos nessa linguagem. Ele pode ser facilmente mantido e
dimensionado usando o planejamento da arquitetura de software.
Entenda o que significa MVC
53 Model / Modelo
O model é responsável por acessar os dados do aplicativo. Pode ser
dividido em classes de domínio que representam o estado dos
objetos (dados) e as regras de negócio aplicadas a eles, além das
interfaces para as lojas que são utilizadas para manipular esses
objetos no banco de dados.
54 View / Visão
A View é responsável por processar e formatar a saída do
programa, seja uma interface gráfica/textual com o usuário final ou
um arquivo de texto criado a partir de dados armazenados na
memória principal do computador.
70
MVC: Model - View - Controller
55 Controle / Controlador
O controller atua como um intermediário entre visualizações e
modelagem: pesquisar (obter), adicionar (enviar), alterar (inserir),
remover (excluir). Após receber o pedido, realiza todo o
processamento necessário para dar uma resposta adequada ao
pedido feito pelo cliente.
Link do Projeto MVC:
Clique Aqui
71
Segurança no PHP
Hoje, a criptografia de dados é tão importante que se tornou básica,
uma prática essencial. As formas de quebrar sistemas de
criptografia estão constantemente sendo pesquisadas, mas ainda
precisamos usar o maior potencial de segurança à nossa disposição
para tornar a nossa aplicação o mais segura possível.
56 Tratamento de Upload de Arquivos
Precisamos validar os arquivos carregados pelo usuário antes de
enviá-los ao nosso servidor.
Iremos fazer quatro validações simples, mas que irão deixar o
sistema mais seguro.
1) Verifique se o arquivo existe.
2) Verifique se o arquivo carregado está vazio.
3) Verifique o tamanho do arquivo.
4) Verifique o(s) tipo(s) de arquivos que serão aceitos.
1) Para verificar se um arquivo existe:
if (empty($_FILES["arquivo"]['tmp_name'])) {
echo "nenhum arquivo foi carregado";
}
72
Segurança no PHP
2)
if ($_FILES["arquivo"]['size'] === 0) {
echo "arquivo sem tamanho";
}
3)
if ($_FILES["arquivo"]['size'] >= 1000000) {
echo "tamanho grande";
}
4)
if ($_FILES["arquivo"]['type'] != "image/png") {
die("formato não permitido.");
}
Após isso podemos enviar o arquivo para o nosso servidor:
move_uploaded_file($_FILES['arquivo']['tmp_name'], "arquivos/" . $_FILES["arquivo"]
['name']);
echo "Arquivo enviado com sucesso";
73
Segurança no PHP
Código completo abaixo:
if (empty($_FILES["arquivo"]['tmp_name'])) {
echo "nenhum arquivo foi carregado";
}else{
if ($_FILES["arquivo"]['size'] === 0) {
echo "arquivo sem tamanho";
} else {
if ($_FILES["arquivo"]['size'] >= 1000000) {
echo "tamanho grande";
} else {
if ($_FILES["arquivo"]['type'] != "image/png") {
die("formato não permitido.");
}else{
move_uploaded_file($_FILES['arquivo']['tmp_name'], "arquivos/" .
$_FILES["arquivo"]['name']);
echo "Arquivo enviado com sucesso";
}
}
}
}
Exemplo usado:
Clique Aqui
57 Criptografia
Há alguns métodos de encriptação, como por exemplo: md5, crypt,
base64 e password_hash
74
Segurança no PHP
Iremos dar preferência para o uso do password_hash
Password Hash
A função password_hash() cria uma senha hash usando o algoritmo
padrão bcrypt.
Exemplo:
<?php
$password = $_POST['senha'];
$hash = password_hash($password, PASSWORD_DEFAULT);
// CASO A SENHA ESTEJA CORRETA
if (password_verify($password, $hash)) {
echo "Senha correta";
}
// CASO A SENHA ESTEJA INCORRETA
else {
echo "Senha incorreta";
}
Exemplo usado:
Clique Aqui
75
Segurança no PHP
58 SQL Injection
SQL Injection é uma das formas mais comuns de ataque na qual um
invasor pode injetar ou manipular consultas geradas pela aplicação,
que são enviadas diretamente para um banco de dados relacional.
A técnica de ataque mais simples usada pelo SQL Injection é
"falsificar" o formulário de login de uma aplicação.
A melhor maneira de proteger sites contra ataques de SQL Injection
é usar parâmetros SQL. Parâmetros SQL são valores que são
adicionados à consulta SQL em tempo de execução e de forma
controlada.
Utilizando Prepared Statements para proteger contra ataques de
SQL Injection:
Exemplo
$id = 7;
$banco = new PDO('mysql:host=localhost;dbname=nome_do_banco_de_dados',
'username','password');
$sql = $banco->prepare("DELETE FROM `usuario` WHERE id = ?");
$sql->execute([$id]);
76
Segurança no PHP
59 Ataques XSS
Cross-site scripting (XSS) é uma das principais (e mais comuns)
vulnerabilidades de segurança em sites e aplicativos da web. Ele
permite que um invasor insira um código malicioso em uma página
da Web, que é executado no navegador de um usuário que visita
essa página da Web. Isso pode causar muitos problemas, desde o
roubo de dados confidenciais até a instalação de malware nos
dispositivos dos usuários.
Geralmente, os ataques ocorrem devido à falha na validação dos
dados inseridos pelo usuário e às respostas falhadas dos servidores
da web. Falhas de comunicação entre a entrada de dados no
navegador e a resposta do servidor de destino são praticamente
irreconhecíveis para o usuário.
Ataques XSS ocorrem quando:
A página da web permite a entrada de dados, mas não pode validar
efetivamente os dados;
A entrada de dados é feita por meio de conteúdo ativo, como HTML,
JavaScript, ActiveX, Flash, Silverlight, etc.
77
Segurança no PHP
Formas de prevenção em seu site/sistema:
1. Para implementar uma política de segurança sob o título de
CSP (Content Security Policy:
2. Evite executar scripts embutidos em HTML
3. Impedir o carregamento de scripts de fontes desconhecidas
4. Evite usar funções inseguras como Eval
5. Uso restrito de tags de objeto HTML
6. Estabeleça o atributo de segurança HttpOnly para reduzir o
impacto de ataques XSS
7. Valide todos os dados de entrada em uma lista branca de
caracteres permitidos
8. Codifique a saída de dados no respectivo código HTML de
acordo com o contexto, pelo menos para caracteres especiais
(&, <,>, ", '), seja JavaScript, CSS, HTML
9. Use uma biblioteca como HtmlSanitizer para higienizar dados
Leia mais:
https://cheatsheetseries.owasp.org/cheatsheets/Content_Security
_Policy_Cheat_Sheet.html
Clique Aqui
78
Segurança no PHP
Para evitar essas vulnerabilidades, você deve controlar a entrada
de dados no formulário (front-end) e processar esses dados no
servidor (back-end).
Um exemplo de processamento na linguagem de programação PHP
é usar a função htmlentites(), que remove todas as tags html e
converte aspas duplas do texto.
Exemplo:
htmlentities()
Dessa forma, quando a página carregar, o javascript no texto será
ignorado e não será executado. No entanto, é importante combinar
outras formas de autenticação, como o uso de outras medidas,
como tokens.
79
CONCLUSÃO
Esperamos que a sua caminhada até aqui tenha sido proveitosa.
Não deixe de nos chamar caso tenha dúvidas.
Iremos constantemente atualizar o ebook com novos projetos práticos
para você.
Um abraço da equipe da Danki Code.
Você deseja se tornar um Desenvolvedor Full-Stack e Dominar as
melhores Tecnologias do Mercado?
Então temos o curso certo para você.
Abaixo você confere mais de 25 Cursos que te ensinarão do Zero
ao Profissional a se tornar um Desenvolvedor Full-Stack.
Domine o Front-End e o Back-End Agora Mesmo!
Aproveite pois este SUPER DESCONTO não ficará disponível por muito tempo.
Adquira AGORA MESMO e se destaque no mercado nacional e
internacional.
Caso prefira levar todos os mais de 150 cursos da plataforma,
lançamentos futuros e funcionalidades exclusivas garanta sua
vaga no Plano Vitalício e se torne um #EternoDanki.