├── .DS_Store
├── README.md
├── exercicios
├── .DS_Store
├── api
│ ├── datas_01.php
│ ├── datas_02.php
│ ├── download.php
│ ├── escrever_arquivo.php
│ ├── imagens.php
│ ├── ler_arquivo.php
│ └── upload.php
├── array
│ ├── .DS_Store
│ ├── basico.php
│ ├── comparacao.php
│ ├── constantes.php
│ ├── desafio_index.php
│ ├── desafio_meses.php
│ ├── desafio_sorteio.php
│ ├── get.php
│ ├── mapa.php
│ ├── multi.php
│ ├── operacoes.php
│ └── post.php
├── basico
│ ├── comentarios.php
│ ├── css.php
│ ├── desafio.php
│ ├── html.php
│ └── ola.php
├── classes_objetos
│ ├── abstract.php
│ ├── classe.php
│ ├── construtor_destrutor.php
│ ├── data.php
│ ├── desafio_erros.php
│ ├── final.php
│ ├── heranca.php
│ ├── interface.php
│ ├── magic_methods.php
│ ├── polimorfismo.php
│ ├── static.php
│ ├── traits_01.php
│ ├── traits_02.php
│ └── visibilidade.php
├── controle
│ ├── desafio_operadores_logicos.php
│ ├── desafio_pi.php
│ ├── desafio_switch.php
│ ├── if_else.php
│ ├── operador_ternario.php
│ ├── operadores_logicos.php
│ ├── operadores_relacionais.php
│ └── switch.php
├── db
│ ├── alterar.php
│ ├── alterar_pdo.php
│ ├── conexao.php
│ ├── conexao_pdo.php
│ ├── consultar.php
│ ├── consultar_pdo.php
│ ├── criar_banco.php
│ ├── criar_tabela.php
│ ├── excluir_1.php
│ ├── excluir_2.php
│ ├── excluir_pdo.php
│ ├── inserir_1.php
│ ├── inserir_2.php
│ └── inserir_pdo.php
├── exercicio.php
├── files
│ ├── Finn.psd
│ ├── arthur.png
│ ├── formula.key
│ └── logo.png
├── formulario
│ └── formulario.php
├── funcoes
│ ├── anonimas.php
│ ├── arg_padrao.php
│ ├── args_retorno.php
│ ├── args_variaveis.php
│ ├── closure_callable.php
│ ├── desafio_recursao.php
│ ├── escopo.php
│ ├── map_filter.php
│ ├── palindromo.php
│ ├── recursividade.php
│ ├── retornando_funcao.php
│ └── usando_tipos.php
├── includes
│ ├── desafio.php
│ ├── include.php
│ ├── include_arquivo.php
│ ├── include_funcao.php
│ ├── include_once.php
│ ├── include_once_arquivo.php
│ ├── include_require.php
│ ├── pessoa.php
│ ├── require_return.php
│ ├── return_nao_usado.php
│ ├── return_usado.php
│ └── usuario.php
├── index.php
├── login.php
├── logout.php
├── menu.php
├── namespace
│ ├── basico.php
│ ├── sub_namespaces.php
│ ├── use_as.php
│ └── use_as_arquivo.php
├── recursos
│ ├── controle
│ │ ├── desafio_operadores_logicos.php
│ │ ├── desafio_pi.php
│ │ ├── desafio_switch.php
│ │ ├── if_else.php
│ │ ├── operador_ternario.php
│ │ ├── operadores_logicos.php
│ │ ├── operadores_relacionais.php
│ │ └── switch.php
│ └── css
│ │ ├── estilo.css
│ │ ├── exercicio.css
│ │ └── login.css
├── repeticoes
│ ├── break_continue.php
│ ├── desafio_for.php
│ ├── desafio_impressao.php
│ ├── desafio_tabela.php
│ ├── desafio_tabela_2.php
│ ├── for.php
│ ├── foreach.php
│ └── while.php
├── sessao
│ ├── basico_sessao.php
│ ├── basico_sessao_alterar.php
│ ├── basico_sessao_limpar.php
│ └── gerenciando_sessao.php
├── teste.txt
├── tipos
│ ├── aritmeticas.php
│ ├── booleano.php
│ ├── conversoes.php
│ ├── desafio_precedendia.php
│ ├── desafio_string.php
│ ├── float.php
│ ├── int.php
│ └── string.php
├── tratamento_erro
│ ├── desafio_intdiv.php
│ ├── desafio_intdiv_teste.php
│ ├── erros_personalizados.php
│ ├── gerenciador_erro.php
│ └── try_catch.php
└── variaveis
│ ├── atribuicoes.php
│ ├── basico.php
│ ├── constantes.php
│ ├── desafio_equacao.php
│ ├── desafio_variaveis.php
│ ├── interpolacao.php
│ ├── valor_referencia.php
│ └── variaveis_variaveis.php
└── innout
├── .DS_Store
├── .gitignore
├── extras
└── db.sql
├── public
├── .DS_Store
├── .htaccess
├── assets
│ ├── .DS_Store
│ ├── css
│ │ ├── .DS_Store
│ │ ├── bootstrap.min.css
│ │ ├── comum.css
│ │ ├── fonts
│ │ │ ├── Oswald-Bold.ttf
│ │ │ ├── Oswald-ExtraLight.ttf
│ │ │ ├── Oswald-Light.ttf
│ │ │ ├── Oswald-Medium.ttf
│ │ │ ├── Oswald-Regular.ttf
│ │ │ ├── Oswald-SemiBold.ttf
│ │ │ ├── icofont.eot
│ │ │ ├── icofont.svg
│ │ │ ├── icofont.ttf
│ │ │ ├── icofont.woff
│ │ │ └── icofont.woff2
│ │ ├── icofont.min.css
│ │ ├── login.css
│ │ └── template.css
│ └── js
│ │ └── app.js
└── index.php
└── src
├── config
├── config.php
├── database.php
├── date_utils.php
├── loader.php
├── session.php
└── utils.php
├── controllers
├── data_generator.php
├── day_records.php
├── innout.php
├── login.php
├── logout.php
├── manager_report.php
├── monthly_report.php
├── save_user.php
├── test.php
└── users.php
├── env.sample.ini
├── exceptions
├── AppException.php
└── ValidationException.php
├── models
├── Login.php
├── Model.php
├── User.php
└── WorkingHours.php
└── views
├── day_records.php
├── login.php
├── manager_report.php
├── monthly_report.php
├── save_user.php
├── template
├── footer.php
├── header.php
├── left.php
├── messages.php
└── title.php
└── users.php
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/.DS_Store
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # curso-php
--------------------------------------------------------------------------------
/exercicios/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/exercicios/.DS_Store
--------------------------------------------------------------------------------
/exercicios/api/datas_01.php:
--------------------------------------------------------------------------------
1 |
Datas #01
2 |
3 | ';
5 | echo date('D, d \d\e M \d\e Y H:i A') . '
';
6 |
7 | echo strftime('%A, %d de %B de %Y', time()) . '
';
8 | setlocale(LC_TIME, 'pt_BR', 'pt_BR.utf-8');
9 | echo strftime('%A, %d de %B de %Y', time()) . '
';
10 |
11 | $amanha = time() + (24 * 60 * 60);
12 | echo strftime('%A, %d de %B de %Y', $amanha) . '
';
13 |
14 | $proximaSemana = strtotime('+10 year');
15 | echo strftime('%A, %d de %B de %Y', $proximaSemana) . '
';
16 |
17 | $dataFixa = mktime(15, 30, 50, 1, 25, 1975);
18 | echo strftime('%A, %d de %B de %Y - %H:%M:%S', $dataFixa);
--------------------------------------------------------------------------------
/exercicios/api/datas_02.php:
--------------------------------------------------------------------------------
1 | Datas #02
2 |
3 | ';
12 |
13 | echo $agora->format($formatoData1) . '
';
14 |
15 | setlocale(LC_TIME, 'pt_BR');
16 | echo strftime($formatoData2, $agora->getTimestamp()) . '
';
17 |
18 | $dataFixa = new DateTime('1975-01-25 15:30:50');
19 | echo strftime($formatoDataHora, $dataFixa->getTimestamp()) . '
';
20 |
21 | $amanha = new DateTime('+2 week');
22 | echo strftime($formatoData2, $amanha->getTimestamp()) . '
';
23 |
24 | $amanha->modify('+1 day');
25 | echo strftime($formatoDataHora, $amanha->getTimestamp()) . '
';
26 |
27 | $amanha->setDate(2000, 5, 20);
28 | echo strftime($formatoDataHora, $amanha->getTimestamp()) . '
';
29 |
30 | $dataPassada = new DateTime('2000-05-17');
31 | $dataFutura = new DateTime('2030-11-26');
32 | $outraData = new DateTime('2030-11-26');
33 | echo ($amanha > $dataPassada ? 'Maior' : 'Menor') . '
';
34 | echo ($amanha > $dataFutura ? 'Maior' : 'Menor') . '
';
35 | echo $outraData == $dataFutura ? 'Igual' : 'Diferente';
36 |
37 | echo '
';
38 | $tz = new DateTimeZone('America/Sao_Paulo');
39 | $agora = new DateTime(null, $tz);
40 | echo $agora->format('d/M/Y H:i:s');
--------------------------------------------------------------------------------
/exercicios/api/download.php:
--------------------------------------------------------------------------------
1 | Download
2 |
3 | Arquivo válido e enviado com sucesso.";
14 | $arquivos[] = $nomeArquivo;
15 | $_SESSION['arquivos'] = $arquivos;
16 | } else {
17 | echo "
Erro no upload de arquivo!";
18 | }
19 | ?>
20 |
21 |
26 |
27 |
36 |
37 |
--------------------------------------------------------------------------------
/exercicios/api/escrever_arquivo.php:
--------------------------------------------------------------------------------
1 | Escrever Arquivo
2 |
3 | Imagens
2 |
3 | Arquivo válido e enviado com sucesso.";
14 | $arquivos[] = $nomeArquivo;
15 | $_SESSION['arquivos'] = $arquivos;
16 | } else {
17 | echo "
Erro no upload de arquivo!";
18 | }
19 | ?>
20 |
21 |
26 |
27 |
28 |
29 | 0): ?>
30 | -
31 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/exercicios/api/ler_arquivo.php:
--------------------------------------------------------------------------------
1 | Ler Arquivo
2 |
3 | ';
7 | echo fread($arquivo, 10);
8 | fclose($arquivo);
9 |
10 | echo '
';
11 |
12 | $arquivo = fopen('teste.txt', 'r');
13 | $tamanho = filesize('teste.txt');
14 | echo $tamanho, '
';
15 | echo fread($arquivo, $tamanho);
16 | fclose($arquivo);
17 |
18 | echo '
';
19 |
20 | $arquivo = fopen('teste.txt', 'r');
21 | echo fgets($arquivo), '
';
22 | echo fgets($arquivo), '
';
23 | var_dump(fgets($arquivo));
24 | echo '
';
25 | fclose($arquivo);
26 |
27 | echo '
';
28 |
29 | $arquivo = fopen('teste.txt', 'r');
30 | while(!feof($arquivo)) {
31 | echo fgets($arquivo), '
';
32 | }
33 | fclose($arquivo);
34 |
35 | echo '
';
36 | $arquivo = fopen('teste.txt', 'r');
37 | while(!feof($arquivo)) {
38 | echo fgetc($arquivo);
39 | }
40 | echo '
';
41 | fclose($arquivo);
42 |
43 | echo '
';
44 |
45 | $arquivo = fopen('teste.txt', 'r+');
46 | echo fgets($arquivo), '
';
47 | echo fgets($arquivo), '
';
48 | fwrite($arquivo, "\nAdicionado durante a leitura");
49 | fclose($arquivo);
50 |
51 | echo "Fim!";
--------------------------------------------------------------------------------
/exercicios/api/upload.php:
--------------------------------------------------------------------------------
1 | Upload
2 |
3 | Arquivo válido e enviado com sucesso.";
14 | } else {
15 | echo "
Erro no upload de arquivo!";
16 | }
17 | }
18 | ?>
19 |
20 |
25 |
26 |
--------------------------------------------------------------------------------
/exercicios/array/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/exercicios/array/.DS_Store
--------------------------------------------------------------------------------
/exercicios/array/basico.php:
--------------------------------------------------------------------------------
1 | Array
2 |
3 | ';
6 | var_dump($lista);
7 | echo '
';
8 | print_r($lista);
9 |
10 | $lista[0] = 1234;
11 | print_r($lista);
12 |
13 | echo '
' . $lista[0];
14 | echo '
' . $lista[1];
15 | echo '
' . $lista[2];
16 | echo '
' . $lista[3];
17 | echo '
';
18 | var_dump($lista[4]);
19 |
20 | $texto = 'Esse é um texto de teste';
21 | echo '
' . $texto[0];
22 | echo '
' . $texto[2];
23 | echo '
' . $texto[11]; // cuidado!
24 | echo '
' . mb_substr($texto, 10, 1);
--------------------------------------------------------------------------------
/exercicios/array/comparacao.php:
--------------------------------------------------------------------------------
1 | Comparação Arrays
2 |
3 | 'Maria', 'idade' => 20];
5 | $arr2 = ['nome' => 'Maria', 'idade' => 20];
6 | var_dump($arr1 == $arr2);
7 | var_dump($arr1 === $arr2);
8 |
9 | $arr3 = ['idade' => 20, 'nome' => 'Maria'];
10 | echo '
';
11 | var_dump($arr1 == $arr3);
12 | var_dump($arr1 === $arr3);
13 | var_dump($arr1 != $arr3);
14 | var_dump($arr1 !== $arr3);
15 |
16 | echo '
';
17 | $arr4 = ['idade' => '20', 'nome' => 'Maria'];
18 | var_dump($arr1 == $arr4);
19 | var_dump($arr1 === $arr4);
20 |
--------------------------------------------------------------------------------
/exercicios/array/constantes.php:
--------------------------------------------------------------------------------
1 | Arrays Constantes
2 |
3 | "Uno", "Ford" => "Fiesta"];
11 | // CARROS["BMW"] = '325i';
12 | echo '
' . CARROS["Fiat"];
13 |
14 | define('CIDADES', array('Belo Horizonte', 'Recife'));
15 | // CIDADES[0] = 'Rio de Janeiro';
16 | echo '
' . CIDADES[1];
--------------------------------------------------------------------------------
/exercicios/array/desafio_index.php:
--------------------------------------------------------------------------------
1 | Desafio Index
2 |
3 | 2,
7 | 3 => 3,
8 | 'a' => 4,
9 | 5,
10 | '9' => 6,
11 | '06' => 7,
12 | 0 => 8
13 | );
14 |
15 | // Array([0] => 8 [4] => 2 [3] => 3 [a] => 4 [5] => 5
16 | // [9] => 6 => [06] => 7)
17 | print_r($lista);
--------------------------------------------------------------------------------
/exercicios/array/desafio_meses.php:
--------------------------------------------------------------------------------
1 | Desafio Meses
2 |
3 | "Janeiro",
6 | "Fevereiro",
7 | "Março",
8 | "Abril",
9 | "Maio",
10 | "Junho",
11 | "Julho",
12 | "Agosto",
13 | "Setembro",
14 | "Outubro",
15 | "Novembro",
16 | "Dezembro"
17 | );
18 |
19 | print_r($meses);
20 | echo '
' . $meses[5];
21 | echo '
' . $meses[12];
--------------------------------------------------------------------------------
/exercicios/array/desafio_sorteio.php:
--------------------------------------------------------------------------------
1 | Desafio Sorteio
2 |
3 | {$nomes[$index]}
"
7 |
8 | ?>
9 |
10 |
--------------------------------------------------------------------------------
/exercicios/array/get.php:
--------------------------------------------------------------------------------
1 | $_GET
2 |
3 | ';
6 | print_r($_GET);
7 | echo "
{$_GET['nome']}";
--------------------------------------------------------------------------------
/exercicios/array/mapa.php:
--------------------------------------------------------------------------------
1 | Mapa
2 |
3 | 25,
6 | "cor" => "verde",
7 | "peso" => 49.8
8 | );
9 |
10 | print_r($dados);
11 |
12 | var_dump($dados[0]);
13 | echo '
' . $dados["idade"];
14 | echo '
' . $dados["cor"];
15 | echo '
' . $dados["peso"];
16 | echo '
';
17 | var_dump($dados["outra_informacao"]);
18 |
19 | $lista = array(
20 | "a",
21 | "cinco" => "b",
22 | "c",
23 | 8 => "d",
24 | "e",
25 | 6 => "f",
26 | "g",
27 | 8 => "h"
28 | );
29 |
30 | echo '
';
31 | print_r($lista);
32 |
33 | $lista[] = 'i';
34 | echo '
';
35 | print_r($lista);
36 |
37 | $lista['vinte'] = 'j';
38 | echo '
';
39 | print_r($lista);
--------------------------------------------------------------------------------
/exercicios/array/multi.php:
--------------------------------------------------------------------------------
1 | Multidimensionais
2 |
3 | "Roberto",
7 | "idade" => 26,
8 | "naturalidade" => "São Paulo"
9 | ],
10 | [
11 | "nome" => "Maria",
12 | "idade" => 25,
13 | "naturalidade" => "Bahia"
14 | ],
15 | ];
16 |
17 | print_r($dados);
18 | echo '
' . $dados[0]['idade'];
19 | echo '
' . $dados[1]['idade'];
20 |
21 | $dados[] = [
22 | "nome" => "Florinda",
23 | "idade" => 30,
24 | "naturalidade" => "Cidade do México"
25 | ];
26 |
27 | echo '
';
28 | print_r($dados);
29 | echo '
' . $dados[2]['idade'];
30 |
31 | $dados[2]["vizinho"] = "Chaves";
32 | echo '
';
33 | print_r($dados[2]);
34 |
35 | unset($dados[1]);
36 | echo '
';
37 | print_r($dados);
38 | var_dump($dados[1000]);
--------------------------------------------------------------------------------
/exercicios/array/operacoes.php:
--------------------------------------------------------------------------------
1 | Operações
2 |
3 | "Jose",
6 | "idade" => 28
7 | ];
8 |
9 | $dados2 = [
10 | "naturalidade" => "Fortaleza"
11 | ];
12 |
13 | $dados2["endereço"] = "Rua A";
14 |
15 | $dadosCompletos = $dados1 + $dados2;
16 | print_r($dadosCompletos);
17 |
18 | echo '
' . is_array($dadosCompletos);
19 | echo '
' . count($dadosCompletos);
20 |
21 | echo '
';
22 | $indice = array_rand($dadosCompletos);
23 | echo "$indice = $dadosCompletos[$indice]";
24 | echo '
';
25 | echo "{$dadosCompletos['idade']}";
26 | echo " ${dadosCompletos['idade']}";
27 |
28 | unset($dadosCompletos["nome"]);
29 | echo '
';
30 | print_r($dadosCompletos);
31 |
32 | unset($dadosCompletos);
33 | echo '
';
34 | var_dump($dadosCompletos);
35 |
36 | $impares = [1, 3, 5, 7, 9];
37 | $pares = [0, 2, 4, 6, 8];
38 |
39 | $decimais = $pares + $impares;
40 | echo '
';
41 | print_r($decimais);
42 |
43 | $decimais = array_merge($pares, $impares);
44 | echo '
';
45 | print_r($decimais);
46 |
47 | sort($decimais);
48 | echo '
';
49 | print_r($decimais);
--------------------------------------------------------------------------------
/exercicios/array/post.php:
--------------------------------------------------------------------------------
1 | $_POST
2 |
3 |
12 |
13 |
18 |
19 | ';
23 | print_r($_POST);
24 | echo '
' . count($_POST);
--------------------------------------------------------------------------------
/exercicios/basico/comentarios.php:
--------------------------------------------------------------------------------
1 | Comentários PHP
2 |
3 |
10 |
11 | Depois do primeiro bloco!
12 |
17 |
18 |
25 |
26 | Depois do segundo bloco!
--------------------------------------------------------------------------------
/exercicios/basico/css.php:
--------------------------------------------------------------------------------
1 | Integração CSS
2 |
3 |
4 | ';
7 | echo ' Mundo!';
8 | echo '';
9 | ?>
10 |
11 |
12 | = "Outra forma de me 'expressar'!
" ?>
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/exercicios/basico/desafio.php:
--------------------------------------------------------------------------------
1 | Desafio
2 |
3 |
4 | - 1 + 1 = = 1 + 1 ?>
5 | - 4 + 4 =
6 | - 8 + 8 = = "1" ?>
7 |
--------------------------------------------------------------------------------
/exercicios/basico/html.php:
--------------------------------------------------------------------------------
1 | Integração HTML
2 |
3 |
4 | ';
7 | echo ' Mundo!';
8 | echo '';
9 | ?>
10 |
11 |
12 | = "Outra forma de me 'expressar'!
" ?>
13 |
14 |
15 |
--------------------------------------------------------------------------------
/exercicios/basico/ola.php:
--------------------------------------------------------------------------------
1 | Olá PHP
2 |
3 | Exemplo A
4 |
8 |
9 | Exemplo B
10 | = "Outra forma de me 'expressar'!" ?>
11 |
12 | Classe Abstrata
2 |
3 | ";
12 | }
13 |
14 | abstract public function metodo3();
15 | }
16 |
17 | class Concreta extends FilhaAbstrata {
18 | public function metodo1() {
19 | echo "Executando método 1 extendido
";
20 | parent::metodo1();
21 | }
22 |
23 | protected function metodo2($parametro) {
24 | echo "Executando método 2, com parametro $parametro
";
25 | }
26 |
27 | public function metodo3() {
28 | echo "Executando método 3
";
29 | $this->metodo2('interno');
30 | }
31 | }
32 |
33 | $c = new Concreta();
34 | $c->metodo1();
35 | // $c->metodo2('externo');
36 | $c->metodo3();
37 |
38 | echo "
";
39 | var_dump($c);
40 |
41 | echo "
";
42 | var_dump($c instanceof Concreta);
43 | var_dump($c instanceof FilhaAbstrata);
44 | var_dump($c instanceof Abstrata);
45 |
--------------------------------------------------------------------------------
/exercicios/classes_objetos/classe.php:
--------------------------------------------------------------------------------
1 | Primeira Classe
2 |
3 | nome} Idade: {$this->idade}";
11 | }
12 | }
13 |
14 | $c1 = new Cliente();
15 | echo $c1->nome, '
';
16 | $c1->nome = 'Ana Silva';
17 | echo $c1->nome, '
';
18 | $c1->idade = 27.5;
19 |
20 | $c2 = new Cliente;
21 | $c2->nome = 'Gabriel';
22 | $c2->idade = 43;
23 |
24 | echo $c1->apresentar(), '
';
25 | echo $c2->apresentar();
--------------------------------------------------------------------------------
/exercicios/classes_objetos/construtor_destrutor.php:
--------------------------------------------------------------------------------
1 | Construtor e Destrutor
2 |
3 | ';
10 | $this->nome = $novoNome;
11 | $this->idade = $idade;
12 | }
13 |
14 | function __destruct() {
15 | echo 'E morreu!
';
16 | }
17 |
18 | public function apresentar() {
19 | echo "{$this->nome}, {$this->idade} anos
";
20 | }
21 | }
22 |
23 | // $pessoa = new Pessoa(); // Problema
24 |
25 | $pessoaA = new Pessoa('Rebeca Maria', 40);
26 | $pessoaB = new Pessoa('João Pedro');
27 |
28 | $pessoaA->apresentar();
29 | unset($pessoaA);
30 |
31 | $pessoaB->apresentar();
32 | $pessoaB = null;
--------------------------------------------------------------------------------
/exercicios/classes_objetos/data.php:
--------------------------------------------------------------------------------
1 | Classe Data
2 |
3 | dia}/{$this->mes}/{$this->ano}";
11 | }
12 | }
13 |
14 | $aniversario = new Data;
15 | $aniversario->dia = 15;
16 | $aniversario->mes = 8;
17 | $aniversario->ano = 2014;
18 |
19 | $casamento = new Data();
20 | $casamento->dia = 1;
21 | $casamento->mes = 8;
22 | $casamento->ano = 2009;
23 |
24 | echo $aniversario->apresentar(), '
';
25 | echo $casamento->apresentar();
--------------------------------------------------------------------------------
/exercicios/classes_objetos/desafio_erros.php:
--------------------------------------------------------------------------------
1 | Desafio Erros
2 |
3 | metodo3();
--------------------------------------------------------------------------------
/exercicios/classes_objetos/final.php:
--------------------------------------------------------------------------------
1 | Modificador Final
2 |
3 | ';
9 | }
10 | }
11 |
12 | class Classe extends Abstrata {
13 | public function metodo1() {
14 | echo 'Executando método 1
';
15 | }
16 |
17 | // public function metodo2() {
18 | // echo 'Extendendo método 2
';
19 | // }
20 | }
21 |
22 | $classe = new Classe();
23 | $classe->metodo1();
24 | $classe->metodo2();
25 |
26 | final class Unica {
27 | public $attr = 'Valor Único!!!';
28 | }
29 |
30 | $unica = new Unica();
31 | echo $unica->attr;
32 |
33 | // class Duplicata extends Unica {
34 | // public $att2;
35 | // }
--------------------------------------------------------------------------------
/exercicios/classes_objetos/heranca.php:
--------------------------------------------------------------------------------
1 | Herança
2 |
3 | nome = $nome;
10 | $this->idade = $idade;
11 | echo 'Pessoa Criada!
';
12 | }
13 |
14 | function __destruct() {
15 | echo 'Pessoa diz: Tchau!!';
16 | }
17 |
18 | public function apresentar() {
19 | echo "{$this->nome}, {$this->idade} anos
";
20 | }
21 | }
22 |
23 | class Usuario extends Pessoa {
24 | public $login;
25 |
26 | function __construct($nome, $idade, $login) {
27 | // $this->nome = $nome;
28 | // $this->idade = $idade;
29 | parent::__construct($nome, $idade);
30 | $this->login = $login;
31 | echo 'Usuario Criado!
';
32 | }
33 |
34 | function __destruct() {
35 | echo 'Usuário diz: Tchau!!
';
36 | parent::__destruct();
37 | }
38 |
39 | public function apresentar() {
40 | echo "@{$this->login}: ";
41 | parent::apresentar();
42 | }
43 | }
44 |
45 | $usuario = new Usuario('Gustavo Mendonça', 21, 'gust_mend');
46 | $usuario->apresentar();
47 | unset($usuario);
--------------------------------------------------------------------------------
/exercicios/classes_objetos/interface.php:
--------------------------------------------------------------------------------
1 | Interface
2 |
3 | respirar(), '
';
41 | echo $animal->latir(), '
';
42 | echo $animal->mamar(), '
';
43 | echo $animal->correr(), '
';
44 |
45 | echo '
';
46 | var_dump($animal);
47 |
48 | echo '
';
49 | var_dump($animal instanceof Cachorro);
50 | var_dump($animal instanceof Canino);
51 | var_dump($animal instanceof Mamifero);
52 | var_dump($animal instanceof Animal);
53 | var_dump($animal instanceof Felino);
--------------------------------------------------------------------------------
/exercicios/classes_objetos/magic_methods.php:
--------------------------------------------------------------------------------
1 | Métodos Mágicos
2 |
3 | ';
10 | $this->nome = $nome;
11 | $this->idade = $idade;
12 | }
13 |
14 | function __destruct() {
15 | echo '
E morreu!';
16 | }
17 |
18 | public function __toString() {
19 | return "{$this->nome} tem {$this->idade} anos.";
20 | }
21 |
22 | public function apresentar() {
23 | echo $this . "
";
24 | }
25 |
26 | public function __get($atrib) {
27 | echo "Lendo atributo não declarado: {$atrib}
";
28 | }
29 |
30 | public function __set($atrib, $valor) {
31 | echo "Alterando atributo não declarado: {$atrib}/{$valor}
";
32 | }
33 |
34 | public function __call($metodo, $params) {
35 | echo "Tentando executar método '${metodo}'";
36 | echo ", com os parametros: ";
37 | print_r($params);
38 | }
39 | }
40 |
41 | $pessoa = new Pessoa('Ricardo', 40); // __construct
42 | $pessoa->apresentar(); // chamando o __toString
43 | echo $pessoa, '
'; // chamando o __toString
44 | $pessoa->nome = 'Reinaldo';
45 |
46 | // chama o método diretamente sem __call
47 | $pessoa->apresentar();
48 |
49 | $pessoa->nomeCompleto = 'Muito Legal!!!'; // __set
50 | $pessoa->nomeCompleto; // __get
51 |
52 | // acessa o atributo diretamente sem __get
53 | echo $pessoa->nome;
54 |
55 | // __call pq o método não existe no objeto
56 | $pessoa->exec(1, 'teste', true, [1, 2, 3]);
57 |
58 | $pessoa = null; // __destruct
--------------------------------------------------------------------------------
/exercicios/classes_objetos/polimorfismo.php:
--------------------------------------------------------------------------------
1 | Polimorfismo
2 |
3 | peso = $peso;
30 | }
31 |
32 | public function comer(Comida $comida) {
33 | $this->peso += $comida->peso;
34 | }
35 | }
36 |
37 | $c1 = new Arroz();
38 | $c1->peso = 0.65;
39 |
40 | $c2 = new ArrozAGrega();
41 | $c2->peso = 0.25;
42 |
43 | $c3 = new Sorvete();
44 | $c3->peso = 1.5;
45 |
46 | $p = new Pessoa(83.45);
47 | $p->comer($c1);
48 | $p->comer($c2);
49 | $p->comer($c3);
50 |
51 | echo $p->peso;
--------------------------------------------------------------------------------
/exercicios/classes_objetos/static.php:
--------------------------------------------------------------------------------
1 | Membros Estáticos
2 |
3 | naoStatic}
";
10 | // Tentativa 1
11 | // echo "Estática = {$this->static}
";
12 | // Tentativa 2
13 | // echo "Estática = {self::$static}
";
14 | echo "Estática = " . self::$static . "
";
15 | }
16 |
17 | public static function mostrarStaticA() {
18 | // echo "Não estática = {$this->naoStatic}
";
19 | // echo "Estática = {$static}
";
20 | echo "Estática = " . self::$static . "
";
21 | }
22 | }
23 |
24 | $objetoA = new A();
25 | $objetoA->mostrarA();
26 | $objetoA->mostrarStaticA(); // não é a forma ideal
27 |
28 | echo '
';
29 | echo A::$static, '
'; // acessar diretamente pela classe
30 | A::mostrarStaticA(); // acessar diretamente pela classe
31 |
32 | A::$static = 'Alterado membro de classe!';
33 | echo A::$static, '
'; // acessar diretamente pela classe
--------------------------------------------------------------------------------
/exercicios/classes_objetos/traits_01.php:
--------------------------------------------------------------------------------
1 | Traits #01
2 |
3 | ', $this->c;
26 | }
27 | }
28 |
29 | // var_dump(validacao->validarString(''));
30 |
31 | $usuario = new Usuario();
32 | var_dump($usuario->validarString(' '));
33 | echo '
';
34 | var_dump($usuario->validarStringMelhor(' '));
35 | echo '
';
36 | echo $usuario->a, '
',$usuario->b;
37 | echo $usuario->imprimirValorC();
--------------------------------------------------------------------------------
/exercicios/classes_objetos/traits_02.php:
--------------------------------------------------------------------------------
1 | Traits #02
2 |
3 | validarString(' '));
27 | echo '
';
28 | var_dump($usuario->validacaoSimples(' '));
--------------------------------------------------------------------------------
/exercicios/classes_objetos/visibilidade.php:
--------------------------------------------------------------------------------
1 | Visibilidade
2 |
3 | publico}
";
11 | echo "Class A) Protegido = {$this->protegido}
";
12 | echo "Class A) Privado = {$this->privado}
";
13 | }
14 |
15 | protected function vaiPorHeranca() {
16 | echo 'Serei transmitido por herança!
';
17 | }
18 |
19 | private function naoMostrar() {
20 | echo 'Não vou imprimir!
';
21 | }
22 | }
23 |
24 | $a = new A();
25 | $a->mostrarA();
26 | // $a->naoMostrar();
27 |
28 | class B extends A {
29 | public function mostrarB() {
30 | echo "Class B) Publico = {$this->publico}
";
31 | echo "Class B) Protegido = {$this->protegido}
";
32 | echo "Class B) Privado = {$this->privado}
";
33 |
34 | parent::vaiPorHeranca();
35 | }
36 | }
37 | echo '
';
38 | $b = new B();
39 | $b->mostrarB();
40 | $b->mostrarA();
41 | // $b->vaiPorHeranca();
42 | // $b->naoMostrar();
--------------------------------------------------------------------------------
/exercicios/controle/desafio_operadores_logicos.php:
--------------------------------------------------------------------------------
1 | Desafio Operadores Lógicos
2 |
3 |
9 |
10 |
27 |
28 |
33 |
34 | Estamos mais saudáveis!';
62 | } else {
63 | $resultado .= '
Sorvete liberado \o/';
64 | }
65 |
66 | echo "$resultado
";
67 | }
--------------------------------------------------------------------------------
/exercicios/controle/desafio_pi.php:
--------------------------------------------------------------------------------
1 | Desafio PI
2 |
3 | Iguais!";
9 | } else {
10 | echo "
Diferentes!";
11 | }
12 |
13 | // Operador Relacional
14 | $piErrado = 2.8;
15 |
16 | // Resposta
17 | echo '
' . ($pi - pi());
18 | echo '
' . ($pi - $piErrado);
19 |
20 | if($pi - pi() <= 0.01) {
21 | echo '
Praticamente iguais!';
22 | }
23 |
24 | if($pi - $piErrado <= 0.01) {
25 | echo '
Praticamente iguais!';
26 | } else {
27 | echo '
Valor errado!!';
28 | }
--------------------------------------------------------------------------------
/exercicios/controle/desafio_switch.php:
--------------------------------------------------------------------------------
1 | Desafio Switch
2 |
3 |
15 |
16 |
21 |
22 | $mensagem";
--------------------------------------------------------------------------------
/exercicios/controle/if_else.php:
--------------------------------------------------------------------------------
1 | If Else
2 |
3 | ";
6 | }
7 |
8 | if(false) {
9 | echo "Verdadeiro - Parte A
";
10 | echo "Verdadeiro - Parte B
";
11 | } else {
12 | echo "Falso - Parte A
";
13 | echo "Falso - Parte B
";
14 | }
15 |
16 | if(false) {
17 | echo "Passo A
";
18 | } else if(false) {
19 | echo "Passo B
";
20 | } elseif(false) {
21 | echo "Passo C
";
22 | } elseif(false) {
23 | echo "Passo D
";
24 | } elseif(false) {
25 | echo "Passo E
";
26 | } else {
27 | echo "Úlitmo Passo
";
28 | }
29 |
30 | echo "Fim
";
--------------------------------------------------------------------------------
/exercicios/controle/operador_ternario.php:
--------------------------------------------------------------------------------
1 | Operador Ternário
2 |
3 | = 18) {
8 | $status = 'Maior de idade';
9 | } else {
10 | $status = 'Menor de idade';
11 | }
12 |
13 | echo "$status
";
14 |
15 | $idade = 17;
16 | $status = $idade >= 18 ? 'Maior de idade' : 'Menor de idade';
17 | echo "$status
";
18 |
19 | $status = $idade >= 18 ? $idade >= 65 ? 'Aposentado' : 'Maior de idade' : 'Menor de idade';
--------------------------------------------------------------------------------
/exercicios/controle/operadores_logicos.php:
--------------------------------------------------------------------------------
1 | Operadores Lógicos
2 |
3 | Negação Lógica
";
5 | var_dump(true);
6 | echo '
';
7 | var_dump(!true); // not
8 |
9 | echo "Tabela Verdade 'AND' (E)
";
10 | var_dump(true && true);
11 | var_dump(true && false);
12 | var_dump(false && true);
13 | var_dump(false && false);
14 |
15 | var_dump(true and true);
16 | var_dump(true and false);
17 | var_dump(false and true);
18 | var_dump(false and false);
19 |
20 | echo "Tabela Verdade 'OR' (OU)
";
21 | var_dump(true || true);
22 | var_dump(true || false);
23 | var_dump(false || true);
24 | var_dump(false || false);
25 |
26 | var_dump(true or true);
27 | var_dump(true or false);
28 | var_dump(false or true);
29 | var_dump(false or false);
30 |
31 | echo "Tabela Verdade 'XOR' (OU Exclusivo)
";
32 | var_dump(true xor true);
33 | var_dump(true xor false);
34 | var_dump(false xor true);
35 | var_dump(false xor false);
36 |
37 | var_dump(true != true);
38 | var_dump(true != false);
39 | var_dump(false != true);
40 | var_dump(false != false);
41 |
42 | echo "Exemplo
";
43 | $idade = 65;
44 | $sexo = 'M';
45 |
46 | $pagouPrevidencia = true;
47 | $criterioHomem = ($idade >= 65 && $sexo === 'M');
48 | $criterioMulher = ($idade >= 60 && $sexo === 'F');
49 | $atingiuCriterio = $criterioHomem || $criterioMulher;
50 | $podeSeAposentar = $pagouPrevidencia && $atingiuCriterio;
51 | echo "Pode se aposentar -> $podeSeAposentar.
";
52 |
53 | if($idade >= 60 && $sexo === 'F') {
54 | echo "Pode se aposentar -> $sexo";
55 | } elseif ($idade >= 65 && $sexo === 'M') {
56 | echo "Pode se aposentar -> $sexo";
57 | } else {
58 | echo 'Vai ter que trabalhar mais um pouco...';
59 | }
--------------------------------------------------------------------------------
/exercicios/controle/operadores_relacionais.php:
--------------------------------------------------------------------------------
1 | Operadores Relacionais
2 |
3 | 1); // false
6 | var_dump(1 >= 1); // true
7 | var_dump(4 < 23); // true
8 | var_dump(1 <= 7); // true
9 | var_dump(1 != 1); // false
10 | var_dump(1 <> 1); // false
11 |
12 | var_dump(111 == '111'); // true
13 | var_dump(111 === '111'); // false
14 | var_dump(111 != '111'); // false
15 | var_dump(111 !== '111'); // true
16 |
17 | echo "Relacionais no If/Else
";
18 | $idade = 15;
19 | if($idade < 18) {
20 | echo "Menor de idade = $idade anos
";
21 | } elseif($idade <= 65) {
22 | echo "Adulto = $idade anos
";
23 | } else {
24 | echo "Terceira idade = $idade anos!";
25 | }
26 |
27 | echo 'Spaceship
';
28 | var_dump(500 <=> 3);
29 | var_dump(50 <=> 50);
30 | var_dump(5 <=> 50);
31 |
32 |
33 | echo 'Valores pode ser V ou F
';
34 | var_dump(!!5);
35 | var_dump(!!0);
36 | var_dump(!!"");
37 | var_dump(!!" ");
--------------------------------------------------------------------------------
/exercicios/controle/switch.php:
--------------------------------------------------------------------------------
1 | Switch
2 |
3 | Carro: $carro
Preço: R$ $precoFormatado";
24 |
25 | $categoria = 'LUXO';
26 | switch (strtolower($categoria)) {
27 | case 'luxo':
28 | $carro = 'Mercedes';
29 | $preco = 250000;
30 | break;
31 | case 'suv':
32 | case 'suv básico':
33 | $carro = 'Renegade';
34 | $preco = 80000;
35 | break;
36 | case 'sedan':
37 | $carro = 'Etios';
38 | $preco = 55000;
39 | break;
40 | default:
41 | $carro = 'Mobi';
42 | $preco = 33000;
43 | break;
44 | }
45 |
46 | $precoFormatado = number_format($preco, 2, ',', '.');
47 | echo "Carro: $carro
Preço: $precoFormatado
";
--------------------------------------------------------------------------------
/exercicios/db/alterar.php:
--------------------------------------------------------------------------------
1 |
2 | Alterar Registro
3 |
4 | prepare($sql);
11 | $stmt->bind_param("i", $_GET['codigo']);
12 |
13 | if($stmt->execute()) {
14 | $resultado = $stmt->get_result();
15 | if($resultado->num_rows > 0) {
16 | $dados = $resultado->fetch_assoc();
17 | if($dados['nascimento']) {
18 | $dt = new DateTime($dados['nascimento']);
19 | $dados['nascimento'] = $dt->format('d/m/Y');
20 | }
21 | if($dados['salario']) {
22 | $dados['salario'] = str_replace(".", ",", $dados['salario']);
23 | }
24 | }
25 | }
26 | }
27 |
28 | if(count($_POST) > 0) {
29 | $dados = $_POST;
30 | $erros = [];
31 |
32 | if(trim($dados['nome']) === "") {
33 | $erros['nome'] = 'Nome é obrigatório';
34 | }
35 |
36 | if(isset($dados['nascimento'])) {
37 | $data = DateTime::createFromFormat(
38 | 'd/m/Y', $dados['nascimento']);
39 | if(!$data) {
40 | $erros['nascimento'] = 'Data deve estar no padrão dd/mm/aaaa';
41 | }
42 | }
43 |
44 | if(!filter_var($dados['email'], FILTER_VALIDATE_EMAIL)) {
45 | $erros['email'] = 'Email inválido';
46 | }
47 |
48 | if (!filter_var($dados['site'], FILTER_VALIDATE_URL)) {
49 | $erros['site'] = 'Site inválido';
50 | }
51 |
52 | $filhosConfig = [
53 | "options" => ["min_range" => 0, "max_range" => 20]
54 | ];
55 | if (!filter_var($dados['filhos'], FILTER_VALIDATE_INT,
56 | $filhosConfig) && $dados['filhos'] != 0) {
57 | $erros['filhos'] = 'Quantidade de filhos inválida (0-20).';
58 | }
59 |
60 | $salarioConfig = ['options' => ['decimal' => ',']];
61 | if (!filter_var($dados['salario'],
62 | FILTER_VALIDATE_FLOAT, $salarioConfig)) {
63 | $erros['salario'] = 'Salário inválido';
64 | }
65 |
66 | if(!count($erros)) {
67 | $sql = "UPDATE cadastro
68 | SET nome = ?, nascimento = ?, email = ?,
69 | site = ?, filhos = ?, salario = ?
70 | WHERE id = ?";
71 |
72 | $stmt = $conexao->prepare($sql);
73 |
74 | $params = [
75 | $dados['nome'],
76 | $data ? $data->format('Y-m-d') : null,
77 | $dados['email'],
78 | $dados['site'],
79 | $dados['filhos'],
80 | $dados['salario'] ? str_replace(",", ".", $dados['salario']) : null,
81 | $dados['id'],
82 | ];
83 |
84 | $stmt->bind_param("ssssidi", ...$params);
85 |
86 | if($stmt->execute()) {
87 | unset($dados);
88 | }
89 | }
90 | }
91 | ?>
92 |
93 |
94 |
95 | = "" // $erro ?>
96 |
97 |
98 |
99 |
114 |
115 |
--------------------------------------------------------------------------------
/exercicios/db/alterar_pdo.php:
--------------------------------------------------------------------------------
1 | PDO: Alterar
2 |
3 | prepare($sql);
13 |
14 | $resultado = $stmt->execute([
15 | 'Gui',
16 | '1980-12-12',
17 | 'gui@gui.com.br',
18 | 'http://gui.co',
19 | 1,
20 | 12000,
21 | 22
22 | ]);
23 |
24 | if($resultado) {
25 | echo "Sucesso :)";
26 | } else {
27 | print_r($stmt->errorInfo());
28 | }
--------------------------------------------------------------------------------
/exercicios/db/conexao.php:
--------------------------------------------------------------------------------
1 | connect_error) {
11 | die('Erro: ' . $conexao->connect_error);
12 | }
13 |
14 | return $conexao;
15 | }
--------------------------------------------------------------------------------
/exercicios/db/conexao_pdo.php:
--------------------------------------------------------------------------------
1 | getMessage());
14 | }
15 | }
--------------------------------------------------------------------------------
/exercicios/db/consultar.php:
--------------------------------------------------------------------------------
1 |
2 | Consultar Registros
3 |
4 | query($sql);
11 |
12 | $registros = [];
13 |
14 | if($resultado->num_rows > 0) {
15 | while($row = $resultado->fetch_assoc()) {
16 | $registros[] = $row;
17 | }
18 | } elseif($conexao->error) {
19 | echo "Erro: " . $conexao->error;
20 | }
21 |
22 | $conexao->close();
23 | ?>
24 |
25 |
26 |
27 | Código |
28 | Nome |
29 | Nascimento |
30 | E-mail |
31 |
32 |
33 |
34 |
35 | = $registro['id'] ?> |
36 | = $registro['nome'] ?> |
37 |
38 | =
39 | date('d/m/Y', strtotime($registro['nascimento']))
40 | ?>
41 | |
42 | = $registro['email'] ?> |
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/exercicios/db/consultar_pdo.php:
--------------------------------------------------------------------------------
1 | PDO: Consultar
2 |
3 | query($sql)->fetchAll(PDO::FETCH_ASSOC);
13 | print_r($resultado);
14 |
15 | echo "
";
16 |
17 | $sql = "SELECT * FROM cadastro LIMIT :qtde OFFSET :inicio";
18 |
19 | $stmt = $conexao->prepare($sql);
20 | $stmt->bindValue(':qtde', 2, PDO::PARAM_INT);
21 | $stmt->bindValue(':inicio', 3, PDO::PARAM_INT);
22 |
23 | // print_r(get_class_methods($stmt));
24 |
25 | if($stmt->execute()) {
26 | $resultado = $stmt->fetchAll();
27 | print_r($resultado);
28 | } else {
29 | echo "Código: " . $stmt->errorCode() . "
";
30 | print_r($stmt->errorInfo());
31 | }
32 |
33 | echo "
";
34 |
35 | $sql = "SELECT * FROM cadastro WHERE id = :id";
36 | $stmt = $conexao->prepare($sql);
37 | // $stmt->bindValue(':id', 15);
38 | // if($stmt->execute()) {
39 | // if($stmt->execute([14])) {
40 |
41 | if($stmt->execute([':id' => 1])) {
42 | $resultado = $stmt->fetch();
43 | print_r($resultado);
44 | } else {
45 | echo "Código: " . $stmt->errorCode() . "
";
46 | print_r($stmt->errorInfo());
47 | }
48 |
49 | $conexao->close();
--------------------------------------------------------------------------------
/exercicios/db/criar_banco.php:
--------------------------------------------------------------------------------
1 | Criar Banco
2 |
3 | query($sql);
11 |
12 | if($resultado) {
13 | echo "Sucesso :)";
14 | } else {
15 | echo "Erro: " . $conexao->error;
16 | }
17 |
18 | $conexao->close();
--------------------------------------------------------------------------------
/exercicios/db/criar_tabela.php:
--------------------------------------------------------------------------------
1 | Criar Tabela
2 |
3 | query($sql);
20 |
21 | if($resultado) {
22 | echo "Sucesso :)";
23 | } else {
24 | echo "Erro: " . $conexao->error;
25 | }
26 |
27 | $conexao->close();
--------------------------------------------------------------------------------
/exercicios/db/excluir_1.php:
--------------------------------------------------------------------------------
1 | Excluir Registro #01
2 |
3 | query($sql);
10 |
11 | if($resultado) {
12 | echo "Sucesso :)";
13 | } else {
14 | echo "Erro: " . $conexao->error;
15 | }
16 |
17 | $conexao->close();
--------------------------------------------------------------------------------
/exercicios/db/excluir_2.php:
--------------------------------------------------------------------------------
1 |
2 | Excluir Registro #02
3 |
4 | prepare($excluirSQL);
13 | $stmt->bind_param("i", $_GET['excluir']);
14 | $stmt->execute();
15 | }
16 |
17 | $sql = "SELECT id, nome, nascimento, email FROM cadastro";
18 | $resultado = $conexao->query($sql);
19 | if($resultado->num_rows > 0) {
20 | while($row = $resultado->fetch_assoc()) {
21 | $registros[] = $row;
22 | }
23 | } elseif($conexao->error) {
24 | echo "Erro: " . $conexao->error;
25 | }
26 |
27 | $conexao->close;
28 | ?>
29 |
30 |
31 |
32 | ID |
33 | Nome |
34 | Email |
35 | Nascimento |
36 | Ações |
37 |
38 |
39 |
40 |
41 | = $registro['id'] ?> |
42 | = $registro['nome'] ?> |
43 | = $registro['email'] ?> |
44 |
45 | =
46 | date('d/m/Y', strtotime($registro['nascimento']))
47 | ?>
48 | |
49 |
50 |
52 | Excluir
53 |
54 | |
55 |
56 |
57 |
58 |
59 |
60 |
--------------------------------------------------------------------------------
/exercicios/db/excluir_pdo.php:
--------------------------------------------------------------------------------
1 | PDO: Excluir
2 |
3 | prepare($sql);
9 |
10 | if($stmt->execute([':id' => 14])) {
11 | echo "Sucesso :)";
12 | } else {
13 | echo "Erro :(";
14 | print_r($stmt->errorInfo());
15 | }
--------------------------------------------------------------------------------
/exercicios/db/inserir_1.php:
--------------------------------------------------------------------------------
1 | Inserir Registro #01
2 |
3 | query($sql);
20 |
21 | if($resultado) {
22 | echo "Sucesso :)";
23 | } else {
24 | echo "Erro: " . $conexao->error;
25 | }
26 |
27 | $conexao->close();
--------------------------------------------------------------------------------
/exercicios/db/inserir_2.php:
--------------------------------------------------------------------------------
1 |
2 | Inserir Registro #02
3 |
4 | 0) {
6 | $dados = $_POST;
7 | $erros = [];
8 |
9 | if(trim($dados['nome']) === "") {
10 | $erros['nome'] = 'Nome é obrigatório';
11 | }
12 |
13 | if(isset($dados['nascimento'])) {
14 | $data = DateTime::createFromFormat(
15 | 'd/m/Y', $dados['nascimento']);
16 | if(!$data) {
17 | $erros['nascimento'] = 'Data deve estar no padrão dd/mm/aaaa';
18 | }
19 | }
20 |
21 | if(!filter_var($dados['email'], FILTER_VALIDATE_EMAIL)) {
22 | $erros['email'] = 'Email inválido';
23 | }
24 |
25 | if (!filter_var($dados['site'], FILTER_VALIDATE_URL)) {
26 | $erros['site'] = 'Site inválido';
27 | }
28 |
29 | $filhosConfig = [
30 | "options" => ["min_range" => 0, "max_range" => 20]
31 | ];
32 | if (!filter_var($dados['filhos'], FILTER_VALIDATE_INT,
33 | $filhosConfig) && $dados['filhos'] != 0) {
34 | $erros['filhos'] = 'Quantidade de filhos inválida (0-20).';
35 | }
36 |
37 | $salarioConfig = ['options' => ['decimal' => ',']];
38 | if (!filter_var($dados['salario'],
39 | FILTER_VALIDATE_FLOAT, $salarioConfig)) {
40 | $erros['salario'] = 'Salário inválido';
41 | }
42 |
43 | if(!count($erros)) {
44 | require_once "conexao.php";
45 |
46 | $sql = "INSERT INTO cadastro
47 | (nome, nascimento, email, site, filhos, salario)
48 | VALUES (?, ?, ?, ?, ?, ?)";
49 |
50 | $conexao = novaConexao();
51 | $stmt = $conexao->prepare($sql);
52 |
53 | $params = [
54 | $dados['nome'],
55 | $data ? $data->format('Y-m-d') : null,
56 | $dados['email'],
57 | $dados['site'],
58 | $dados['filhos'],
59 | $dados['salario'],
60 | ];
61 |
62 | $stmt->bind_param("ssssid", ...$params);
63 |
64 | if($stmt->execute()) {
65 | unset($dados);
66 | }
67 | }
68 | }
69 | ?>
70 |
71 |
72 |
73 | = "" // $erro ?>
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/exercicios/db/inserir_pdo.php:
--------------------------------------------------------------------------------
1 | PDO: Inserir
2 |
3 | exec($sql)) {
21 | $id = $conexao->lastInsertId();
22 | echo "Novo cadastro com id $id.";
23 | } else {
24 | echo $conexao->errorCode() . "
";
25 | print_r($conexao->errorInfo());
26 | }
27 |
28 | $conexao->close();
--------------------------------------------------------------------------------
/exercicios/exercicio.php:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 | Exercício
21 |
22 |
23 |
24 | Curso PHP
25 | Visualização do Exercício
26 |
27 |
34 |
35 |
36 |
39 |
40 |
41 |
44 |
45 |
--------------------------------------------------------------------------------
/exercicios/files/Finn.psd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/exercicios/files/Finn.psd
--------------------------------------------------------------------------------
/exercicios/files/arthur.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/exercicios/files/arthur.png
--------------------------------------------------------------------------------
/exercicios/files/formula.key:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/exercicios/files/formula.key
--------------------------------------------------------------------------------
/exercicios/files/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/exercicios/files/logo.png
--------------------------------------------------------------------------------
/exercicios/formulario/formulario.php:
--------------------------------------------------------------------------------
1 |
2 | Formulário
3 |
4 | Cadastro
5 |
6 | 0) {
8 | $erros = [];
9 |
10 | // isset($_POST['nome'])
11 | if(!filter_input(INPUT_POST, "nome")) {
12 | $erros['nome'] = 'Nome é obrigatório';
13 | }
14 |
15 | if(filter_input(INPUT_POST, "nascimento")) {
16 | $data = DateTime::createFromFormat(
17 | 'd/m/Y', $_POST['nascimento']);
18 | if(!$data) {
19 | $erros['nascimento'] = 'Data deve estar no padrão dd/mm/aaaa';
20 | }
21 | }
22 |
23 | if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
24 | $erros['email'] = 'Email inválido';
25 | }
26 |
27 | if (!filter_var($_POST['site'], FILTER_VALIDATE_URL)) {
28 | $erros['site'] = 'Site inválido';
29 | }
30 |
31 | $filhosConfig = [
32 | "options" => ["min_range" => 0, "max_range" => 20]
33 | ];
34 | if (!filter_var($_POST['filhos'], FILTER_VALIDATE_INT,
35 | $filhosConfig) && $_POST['filhos'] != 0) {
36 | $erros['filhos'] = 'Quantidade de filhos inválida (0-20).';
37 | }
38 |
39 | $salarioConfig = ['options' => ['decimal' => ',']];
40 | if (!filter_var($_POST['salario'],
41 | FILTER_VALIDATE_FLOAT, $salarioConfig)) {
42 | $erros['salario'] = 'Salário inválido';
43 | }
44 | }
45 | ?>
46 |
47 |
48 |
49 | = "" // $erro ?>
50 |
51 |
52 |
53 |
--------------------------------------------------------------------------------
/exercicios/funcoes/anonimas.php:
--------------------------------------------------------------------------------
1 | Funções Anônimas
2 |
3 | ';
9 |
10 | function executar($a, $b, $op, $funcao) {
11 | $resultado = $funcao($a, $b) ?? 'Nada';
12 | echo "$a $op $b = $resultado
";
13 | }
14 |
15 | executar(2, 3, '+', $soma);
16 |
17 | $multiplicacao = function($a, $b) {
18 | return $a * $b;
19 | };
20 |
21 | executar(2, 3, '*', $multiplicacao);
22 |
23 | function divisao($a, $b) {
24 | return $a / $b;
25 | }
26 |
27 | executar(9, 3, '/', divisao);
--------------------------------------------------------------------------------
/exercicios/funcoes/arg_padrao.php:
--------------------------------------------------------------------------------
1 | Argumento Padrão
2 |
3 | ";
6 | }
7 |
8 | echo saudacao();
9 | echo saudacao(NULL);
10 | echo saudacao(null, NULL);
11 | echo saudacao('Mestre', 'Supremo');
12 |
13 | function anotarPedido($comida, $bebida = 'Água') {
14 | echo "Para comer: $comida
";
15 | echo "Para beber: $bebida
";
16 | }
17 |
18 | anotarPedido('Hamburguer');
19 | anotarPedido('Pizza', 'Refrigerante');
20 |
21 | function anotarPedido2($bebida = 'Água', $comida) {
22 | echo "Para comer: $comida
";
23 | echo "Para beber: $bebida
";
24 | }
25 |
26 | // anotarPedido2('Hamburguer');
27 | anotarPedido2('Refrigerante2', 'Pizza2');
--------------------------------------------------------------------------------
/exercicios/funcoes/args_retorno.php:
--------------------------------------------------------------------------------
1 | Argumentos & Retorno
2 |
3 | ', obterMensagem();
12 | echo '
';
13 | var_dump(obterMensagem());
14 |
15 | function obterMensagemComNome($nome) {
16 | return "Bem vindo, {$nome}!";
17 | }
18 |
19 | echo '
', obterMensagemComNome('Wagner');
20 | echo '
', obterMensagemComNome('Tiago');
21 |
22 | function soma($a, $b) {
23 | return $a + $b;
24 | }
25 |
26 | $x = 4;
27 | $y = 5;
28 | echo '
', soma(45, 78);
29 | echo '
', soma($x, $y);
30 |
31 | function trocarValor($a, $novoValor) {
32 | $a = $novoValor;
33 | }
34 |
35 | $variavel = 1;
36 | trocarValor($variavel, 3);
37 | echo '
', $variavel;
38 |
39 | function trocarValorDeVerdade(&$a, $novoValor) {
40 | $a = $novoValor;
41 | }
42 |
43 | trocarValorDeVerdade($variavel, 5000);
44 | echo '
', $variavel;
--------------------------------------------------------------------------------
/exercicios/funcoes/args_variaveis.php:
--------------------------------------------------------------------------------
1 | Argumentos Variáveis
2 |
3 | ';
9 | echo soma(6, 5, 4) . '
';
10 |
11 | function somaCompleta(...$numeros) {
12 | $soma = 0;
13 | foreach($numeros as $num) {
14 | $soma += $num;
15 | }
16 | return $soma;
17 | }
18 |
19 | echo somaCompleta(1, 2, 3, 4, 5);
20 |
21 | $array = [6, 7, 8];
22 | echo '
' . somaCompleta(...$array);
23 |
24 | function membros($titular, ...$dependentes) {
25 | echo "Titular: $titular
";
26 | if($dependentes) {
27 | foreach($dependentes as $dep) {
28 | echo "Dependente: $dep
";
29 | }
30 | }
31 | }
32 |
33 | echo '
';
34 | membros("Ana Silva", "Pedro", "Rafaela", "Amanda");
35 |
36 | echo '
';
37 | membros("Roberto", "Junior");
--------------------------------------------------------------------------------
/exercicios/funcoes/closure_callable.php:
--------------------------------------------------------------------------------
1 | Closure & Callable
2 |
3 | ';
15 |
16 | echo soma2(2, 3) . ' ';
17 | echo (is_callable(soma2) ? 'Sim' : 'Não') . '
';
18 |
19 | var_dump($soma1);
20 |
21 | function executar1($a, $b, $op, Callable $funcao) {
22 | $resultado = $funcao($a, $b) ?? 'Nada';
23 | echo "$a $op $b = $resultado
";
24 | }
25 |
26 | echo '
';
27 | executar1(2, 3, '+', $soma1);
28 | executar1(2, 3, '+', soma2);
29 |
30 | function executar2($a, $b, $op, Closure $funcao) {
31 | $resultado = $funcao($a, $b) ?? 'Nada';
32 | echo "$a $op $b = $resultado
";
33 | }
34 |
35 | echo '
';
36 | executar2(100, 100, '+', $soma1);
37 | executar2(3000, 3000, '+', soma2);
--------------------------------------------------------------------------------
/exercicios/funcoes/desafio_recursao.php:
--------------------------------------------------------------------------------
1 | Desafio Recursão
2 |
3 | 1
7 | > 2
8 | >> 3
9 | >> 4
10 | >> 5
11 | > 6
12 | >> 7
13 | >>> 8
14 | >>> 9
15 | > 10
16 | */
17 |
18 | $array = [1, 2, [3, 4, 5], 6, [7, [8, 9]], 10];
19 |
20 | function imprimirArray($array, $nivel = '>') {
21 | foreach($array as $elemento) {
22 | if(is_array($elemento)) {
23 | imprimirArray($elemento, $nivel . $nivel[0]);
24 | } else {
25 | echo "$nivel $elemento
";
26 | }
27 | }
28 | }
29 |
30 | imprimirArray($array);
31 | imprimirArray($array, '#');
--------------------------------------------------------------------------------
/exercicios/funcoes/escopo.php:
--------------------------------------------------------------------------------
1 | Função & Escopo
2 |
3 | ";
7 | }
8 |
9 | imprimirMensagens();
10 | imprimirMensagens();
11 | imprimirMensagens();
12 |
13 | $variavel = 1;
14 |
15 | function trocaValor() {
16 | $variavel = 2;
17 | echo "Durante a função: $variavel
";
18 | }
19 |
20 | echo "Antes: $variavel
";
21 | trocaValor();
22 | echo "Depois: $variavel
";
23 |
24 | function trocaValorDeVerdade() {
25 | global $variavel;
26 | $variavel = 3;
27 | echo "Durante a função: $variavel
";
28 | }
29 |
30 | echo "Antes: $variavel
";
31 | trocaValorDeVerdade();
32 | echo "Depois: $variavel
";
33 |
34 | var_dump(trocaValorDeVerdade());
--------------------------------------------------------------------------------
/exercicios/funcoes/map_filter.php:
--------------------------------------------------------------------------------
1 | Map & Filter
2 |
3 | ';
14 | $notasFinais2 = array_map(round, $notas);
15 | print_r($notasFinais2);
16 |
17 | $apenasOsAprovados1 = [];
18 | foreach($notas as $nota) {
19 | if($nota >= 7) {
20 | $apenasOsAprovados1[] = $nota;
21 | }
22 | }
23 |
24 | echo '
';
25 | print_r($apenasOsAprovados1);
26 |
27 | function aprovados($nota) {
28 | return $nota >= 7;
29 | }
30 |
31 | echo '
';
32 | $apenasOsAprovados2 = array_filter($notas, aprovados);
33 | print_r($apenasOsAprovados2);
34 |
35 | function calculoLegal($nota) {
36 | $notaFinal = round($nota) + 1;
37 | return $notaFinal > 10 ? 10 : $notaFinal;
38 | }
39 |
40 | echo '
';
41 | $notasFinais3 = array_map(calculoLegal, $notas);
42 | print_r($notasFinais3);
--------------------------------------------------------------------------------
/exercicios/funcoes/palindromo.php:
--------------------------------------------------------------------------------
1 | Desafio Palindromo
2 |
3 | ';
19 |
20 | function palindromoSimples($palavra) {
21 | return $palavra === strrev($palavra) ? 'Sim': 'Não';
22 | }
23 |
24 | echo palindromoSimples('arara') . ' ';
25 | echo palindromoSimples('ana') . ' ';
26 | echo palindromoSimples('abccba') . ' ';
27 | echo palindromoSimples('bola') . ' ';
--------------------------------------------------------------------------------
/exercicios/funcoes/recursividade.php:
--------------------------------------------------------------------------------
1 | Recursividade
2 |
3 | ';
13 |
14 | function somaRecursivaUmAte($numero) {
15 | // Condição de Parada!!!!
16 | if($numero === 1) {
17 | return 1;
18 | } else {
19 | return $numero + somaRecursivaUmAte($numero - 1);
20 | }
21 | }
22 |
23 | echo somaRecursivaUmAte(150) . '
';
24 |
25 | function somaRecursivaEconomica($numero) {
26 | return $numero === 1 ? 1 : $numero + somaRecursivaEconomica($numero - 1);
27 | }
28 |
29 | echo somaRecursivaEconomica(150) . '
';
--------------------------------------------------------------------------------
/exercicios/funcoes/retornando_funcao.php:
--------------------------------------------------------------------------------
1 | Retornando Função
2 |
3 | ', $doisMais(10);
15 | echo '
', $doisMais(18);
--------------------------------------------------------------------------------
/exercicios/funcoes/usando_tipos.php:
--------------------------------------------------------------------------------
1 | Usando Tipos
2 |
3 | Somando $a + $b = ";
6 | return $a + $b;
7 | }
8 |
9 | echo somar1(1, 2) . '
';
10 | echo somar1(1.7, 2.5) . '
';
11 | echo somar1(1, '4dois') . '
';
12 |
13 | function somar2(int $a, int $b) {
14 | echo "Somando $a + $b = ";
15 | return $a + $b;
16 | }
17 |
18 | echo somar2(1, 2) . '
';
19 | echo somar2(1.7, 2.5) . '
';
20 | echo somar2(1, '4dois') . '
';
21 |
22 | function somar3($a, float $b): int {
23 | echo "Somando $a + $b = ";
24 | return $a + $b;
25 | }
26 |
27 | echo somar3(1, 2) . '
';
28 | echo somar3(1.7, 2.5) . '
';
29 | echo somar3(1, '4dois') . '
';
--------------------------------------------------------------------------------
/exercicios/includes/desafio.php:
--------------------------------------------------------------------------------
1 | Desafio do Módulo
2 |
3 | apresentar();
8 | unset($usuario);
--------------------------------------------------------------------------------
/exercicios/includes/include.php:
--------------------------------------------------------------------------------
1 | Include
2 |
3 | ';
5 | include('include_arquivo.php');
6 | // include('include_arquivo.php');
7 |
8 | echo soma(3, 8) . '!
';
9 | echo "O conteúdo da variável é '{$variavel}'.";
--------------------------------------------------------------------------------
/exercicios/includes/include_arquivo.php:
--------------------------------------------------------------------------------
1 | ';
3 |
4 | $variavel = 'Estou definida';
5 |
6 | if(!function_exists('soma')) {
7 | function soma($a, $b) {
8 | return $a + $b;
9 | }
10 | }
--------------------------------------------------------------------------------
/exercicios/includes/include_funcao.php:
--------------------------------------------------------------------------------
1 | Include Função
2 |
3 | ';
5 |
6 | function carregarArquivo() {
7 | include('include_arquivo.php');
8 |
9 | echo $variavel . '
';
10 | echo soma(2, 5) . '!
';
11 | }
12 |
13 | echo 'Novamente no arquivo include_funcao
';
14 | // echo soma(1, 8) . '!
';
15 | carregarArquivo();
16 |
17 | echo "Variável = '{$variavel}'.";
18 | // var_dump($variavel);
19 | echo '
' . soma(3, 8);
--------------------------------------------------------------------------------
/exercicios/includes/include_once.php:
--------------------------------------------------------------------------------
1 | Include Once
2 |
3 | ";
10 | $variavel = 'Variável Alterada';
11 | echo "Variável = '{$variavel}'.
";
12 |
13 | include('include_once_arquivo.php');
14 | echo "Variável = '{$variavel}'.
";
15 | $variavel = 'Variável Alterada';
16 | echo "Variável = '{$variavel}'.
";
17 |
18 | include_once('include_once_arquivo.php');
19 | echo "Variável = '{$variavel}'.
";
20 |
21 | require_once('include_once_arquivo.php');
22 | echo "Variável = '{$variavel}'.
";
--------------------------------------------------------------------------------
/exercicios/includes/include_once_arquivo.php:
--------------------------------------------------------------------------------
1 | ';
3 |
4 | $variavel = 'Estou definida';
5 |
6 | if(!function_exists('soma')) {
7 | function soma($a, $b) {
8 | return $a + $b;
9 | }
10 | }
--------------------------------------------------------------------------------
/exercicios/includes/include_require.php:
--------------------------------------------------------------------------------
1 | Include vs Require
2 |
3 | ';
7 | include('arquivo_inexistente.php');
8 |
9 | echo 'Usando require com arquivo inexistente...
';
10 | require('arquivo_inexistente.php');
11 |
12 | echo 'Não achou mesmo...
';
--------------------------------------------------------------------------------
/exercicios/includes/pessoa.php:
--------------------------------------------------------------------------------
1 | nome = $nome;
8 | $this->idade = $idade;
9 | }
10 |
11 | public function apresentar() {
12 | return "{$this->nome}, {$this->idade} anos";
13 | }
14 | }
--------------------------------------------------------------------------------
/exercicios/includes/require_return.php:
--------------------------------------------------------------------------------
1 | Require & Return
2 |
3 | ";
6 | echo "$variavelRetornada
";
7 |
8 | echo __DIR__ . '
';
9 |
10 | $valorRetorno2 = require(__DIR__ . '/return_nao_usado.php');
11 | // var_dump($valorRetorno2);
12 | echo "$valorRetorno2
";
13 | echo "$variavelDeclarada
";
--------------------------------------------------------------------------------
/exercicios/includes/return_nao_usado.php:
--------------------------------------------------------------------------------
1 | login = $login;
10 | }
11 |
12 | public function apresentar() {
13 | $login = "@{$this->login}: ";
14 | return $login . parent::apresentar();
15 | }
16 | }
--------------------------------------------------------------------------------
/exercicios/index.php:
--------------------------------------------------------------------------------
1 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 | Curso PHP
20 |
21 |
22 |
23 | Curso PHP
24 | Índice dos Exercícios
25 |
26 |
30 |
31 |
32 |
33 |
34 |
35 |
38 |
39 |
--------------------------------------------------------------------------------
/exercicios/login.php:
--------------------------------------------------------------------------------
1 | "Aluno Cod3r",
11 | "email" => "aluno@cod3r.com.br",
12 | "senha" => "1234567",
13 | ],
14 | [
15 | "nome" => "Outro Aluno",
16 | "email" => "outro@email.com.br",
17 | "senha" => "7654321",
18 | ],
19 | ];
20 |
21 | foreach($usuarios as $usuario) {
22 | $emailValido = $email === $usuario['email'];
23 | $senhaValida = $senha === $usuario['senha'];
24 |
25 | if($emailValido && $senhaValida) {
26 | $_SESSION['erros'] = null;
27 | $_SESSION['usuario'] = $usuario['nome'];
28 | $exp = time() + 60 * 60 * 24 * 30;
29 | setcookie('usuario', $usuario['nome'], $exp);
30 | header('Location: index.php');
31 | }
32 | }
33 |
34 | if(!$_SESSION['usuario']) {
35 | $_SESSION['erros'] = ['Usuário/Senha inválido!'];
36 | }
37 | }
38 | ?>
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 | Curso PHP
48 |
49 |
50 |
51 | Curso PHP
52 | Seja Bem Vindo
53 |
54 |
55 |
56 |
Identifique-se
57 |
58 |
59 |
60 |
= $erro ?>
61 |
62 |
63 |
64 |
75 |
76 |
77 |
80 |
81 |
--------------------------------------------------------------------------------
/exercicios/logout.php:
--------------------------------------------------------------------------------
1 |
2 |
3 | Exemplo Básico
4 |
5 | ';
7 | const constante1 = 123;
8 | define('contexto\constante2', 234);
9 | define(__NAMESPACE__ . '\constante3', 345);
10 | define('outro_contexto\constante4', 456);
11 |
12 | echo constante1 . '
';
13 | echo constante2 . '
';
14 | // echo contexto\constante3 . '
';
15 | echo \contexto\constante3 . '
';
16 | echo constant(__NAMESPACE__ . '\constante3') . '
';
17 | // echo constante4 . '
';
18 | echo \outro_contexto\constante4 . '
';
19 |
20 | function soma($a, $b) {
21 | return $a + $b;
22 | }
23 |
24 | echo \contexto\soma(1, 2) . '
';
25 | echo soma(1, 2) . '
';
26 |
27 | function strpos($str, $text) {
28 | echo "Buscando o texto '{$text}' em '{$str}'
";
29 | return 1;
30 | }
31 |
32 | echo strpos('Texto genérico para busca', 'busca') . '
';
33 | echo \strpos('Texto genérico para busca', 'busca') . '
';
--------------------------------------------------------------------------------
/exercicios/namespace/sub_namespaces.php:
--------------------------------------------------------------------------------
1 |
2 | Sub-Namespaces
3 |
4 | ';
6 | const constante = 123;
7 |
8 | namespace App\Principal;
9 | echo __NAMESPACE__ . '
';
10 | const constante = 234;
11 |
12 | namespace App\Principal\Especifico;
13 | echo __NAMESPACE__ . '
';
14 | const constante = 345;
15 |
16 | echo constante . '
';
17 | echo constant('\\' . __NAMESPACE__ . '\constante') . '
';
18 |
19 | echo \App\constante . '
';
20 | echo \App\Principal\constante . '
';
21 | echo \App\Principal\Especifico\constante;
--------------------------------------------------------------------------------
/exercicios/namespace/use_as.php:
--------------------------------------------------------------------------------
1 |
2 | Use/As
3 |
4 | ';
6 |
7 | include('use_as_arquivo.php');
8 |
9 | function soma($a, $b) {
10 | return $a . $b; // Eu sei!!!
11 | }
12 |
13 | class Classe {
14 | public $var;
15 |
16 | function func() {
17 | echo __NAMESPACE__ . ' -> ' .
18 | __CLASS__ . ' -> ' . __METHOD__ . '
';
19 | }
20 | }
21 |
22 | echo \Nome\Bem\Grande\constante . '
';
23 |
24 | use const \Nome\Bem\Grande\constante;
25 | echo constante . '
';
26 |
27 | use Nome\Bem\Grande as ctx;
28 |
29 | echo soma(1, 2) . '
';
30 | echo ctx\soma(1, 2) . '
';
31 |
32 | // use function Nome\Bem\Grande\soma;
33 | use function Nome\Bem\Grande\soma as somaReal;
34 | echo somaReal(100, 212) . '
';
35 |
36 | $a = new Classe();
37 | $a->func();
38 |
39 | $b = new \Nome\Bem\Grande\Classe();
40 | $b->func();
41 |
42 | $c = new ctx\Classe();
43 | $c->func();
44 |
45 | use \Nome\Bem\Grande\Classe as D;
46 | $d = new D();
47 | $d->func();
--------------------------------------------------------------------------------
/exercicios/namespace/use_as_arquivo.php:
--------------------------------------------------------------------------------
1 | ';
4 |
5 | const constante = 123;
6 |
7 | function soma($a, $b) {
8 | return $a + $b;
9 | }
10 |
11 | class Classe {
12 | public $var;
13 |
14 | function func() {
15 | echo __NAMESPACE__ . ' -> ' .
16 | __CLASS__ . ' -> ' . __METHOD__ . '
';
17 | }
18 | }
--------------------------------------------------------------------------------
/exercicios/recursos/controle/desafio_operadores_logicos.php:
--------------------------------------------------------------------------------
1 | Desafio Operadores Lógicos
2 |
3 |
9 |
10 |
27 |
28 |
33 |
34 | Estamos mais saudáveis!';
62 | } else {
63 | $resultado .= '
Sorvete liberado \o/';
64 | }
65 |
66 | echo "$resultado
";
67 | }
--------------------------------------------------------------------------------
/exercicios/recursos/controle/desafio_pi.php:
--------------------------------------------------------------------------------
1 | Desafio PI
2 |
3 | Iguais!";
9 | } else {
10 | echo "
Diferentes!";
11 | }
12 |
13 | // Operador Relacional
14 | $piErrado = 2.8;
15 |
16 | // Resposta
17 | echo '
' . ($pi - pi());
18 | echo '
' . ($pi - $piErrado);
19 |
20 | if($pi - pi() <= 0.01) {
21 | echo '
Praticamente iguais!';
22 | }
23 |
24 | if($pi - $piErrado <= 0.01) {
25 | echo '
Praticamente iguais!';
26 | } else {
27 | echo '
Valor errado!!';
28 | }
--------------------------------------------------------------------------------
/exercicios/recursos/controle/desafio_switch.php:
--------------------------------------------------------------------------------
1 | Desafio Switch
2 |
3 |
15 |
16 |
21 |
22 | $mensagem";
--------------------------------------------------------------------------------
/exercicios/recursos/controle/if_else.php:
--------------------------------------------------------------------------------
1 | If Else
2 |
3 | ";
6 | }
7 |
8 | if(false) {
9 | echo "Verdadeiro - Parte A
";
10 | echo "Verdadeiro - Parte B
";
11 | } else {
12 | echo "Falso - Parte A
";
13 | echo "Falso - Parte B
";
14 | }
15 |
16 | if(false) {
17 | echo "Passo A
";
18 | } else if(false) {
19 | echo "Passo B
";
20 | } elseif(false) {
21 | echo "Passo C
";
22 | } elseif(false) {
23 | echo "Passo D
";
24 | } elseif(false) {
25 | echo "Passo E
";
26 | } else {
27 | echo "Úlitmo Passo
";
28 | }
29 |
30 | echo "Fim
";
--------------------------------------------------------------------------------
/exercicios/recursos/controle/operador_ternario.php:
--------------------------------------------------------------------------------
1 | Operador Ternário
2 |
3 | = 18) {
8 | $status = 'Maior de idade';
9 | } else {
10 | $status = 'Menor de idade';
11 | }
12 |
13 | echo "$status
";
14 |
15 | $idade = 17;
16 | $status = $idade >= 18 ? 'Maior de idade' : 'Menor de idade';
17 | echo "$status
";
18 |
19 | $status = $idade >= 18 ? $idade >= 65 ? 'Aposentado' : 'Maior de idade' : 'Menor de idade';
--------------------------------------------------------------------------------
/exercicios/recursos/controle/operadores_logicos.php:
--------------------------------------------------------------------------------
1 | Operadores Lógicos
2 |
3 | Negação Lógica
";
5 | var_dump(true);
6 | echo '
';
7 | var_dump(!true); // not
8 |
9 | echo "Tabela Verdade 'AND' (E)
";
10 | var_dump(true && true);
11 | var_dump(true && false);
12 | var_dump(false && true);
13 | var_dump(false && false);
14 |
15 | var_dump(true and true);
16 | var_dump(true and false);
17 | var_dump(false and true);
18 | var_dump(false and false);
19 |
20 | echo "Tabela Verdade 'OR' (OU)
";
21 | var_dump(true || true);
22 | var_dump(true || false);
23 | var_dump(false || true);
24 | var_dump(false || false);
25 |
26 | var_dump(true or true);
27 | var_dump(true or false);
28 | var_dump(false or true);
29 | var_dump(false or false);
30 |
31 | echo "Tabela Verdade 'XOR' (OU Exclusivo)
";
32 | var_dump(true xor true);
33 | var_dump(true xor false);
34 | var_dump(false xor true);
35 | var_dump(false xor false);
36 |
37 | var_dump(true != true);
38 | var_dump(true != false);
39 | var_dump(false != true);
40 | var_dump(false != false);
41 |
42 | echo "Exemplo
";
43 | $idade = 65;
44 | $sexo = 'M';
45 |
46 | $pagouPrevidencia = true;
47 | $criterioHomem = ($idade >= 65 && $sexo === 'M');
48 | $criterioMulher = ($idade >= 60 && $sexo === 'F');
49 | $atingiuCriterio = $criterioHomem || $criterioMulher;
50 | $podeSeAposentar = $pagouPrevidencia && $atingiuCriterio;
51 | echo "Pode se aposentar -> $podeSeAposentar.
";
52 |
53 | if($idade >= 60 && $sexo === 'F') {
54 | echo "Pode se aposentar -> $sexo";
55 | } elseif ($idade >= 65 && $sexo === 'M') {
56 | echo "Pode se aposentar -> $sexo";
57 | } else {
58 | echo 'Vai ter que trabalhar mais um pouco...';
59 | }
--------------------------------------------------------------------------------
/exercicios/recursos/controle/operadores_relacionais.php:
--------------------------------------------------------------------------------
1 | Operadores Relacionais
2 |
3 | 1); // false
6 | var_dump(1 >= 1); // true
7 | var_dump(4 < 23); // true
8 | var_dump(1 <= 7); // true
9 | var_dump(1 != 1); // false
10 | var_dump(1 <> 1); // false
11 |
12 | var_dump(111 == '111'); // true
13 | var_dump(111 === '111'); // false
14 | var_dump(111 != '111'); // false
15 | var_dump(111 !== '111'); // true
16 |
17 | echo "Relacionais no If/Else
";
18 | $idade = 15;
19 | if($idade < 18) {
20 | echo "Menor de idade = $idade anos
";
21 | } elseif($idade <= 65) {
22 | echo "Adulto = $idade anos
";
23 | } else {
24 | echo "Terceira idade = $idade anos!";
25 | }
26 |
27 | echo 'Spaceship
';
28 | var_dump(500 <=> 3);
29 | var_dump(50 <=> 50);
30 | var_dump(5 <=> 50);
31 |
32 |
33 | echo 'Valores pode ser V ou F
';
34 | var_dump(!!5);
35 | var_dump(!!0);
36 | var_dump(!!"");
37 | var_dump(!!" ");
--------------------------------------------------------------------------------
/exercicios/recursos/controle/switch.php:
--------------------------------------------------------------------------------
1 | Switch
2 |
3 | Carro: $carro
Preço: R$ $precoFormatado";
24 |
25 | $categoria = 'LUXO';
26 | switch (strtolower($categoria)) {
27 | case 'luxo':
28 | $carro = 'Mercedes';
29 | $preco = 250000;
30 | break;
31 | case 'suv':
32 | case 'suv básico':
33 | $carro = 'Renegade';
34 | $preco = 80000;
35 | break;
36 | case 'sedan':
37 | $carro = 'Etios';
38 | $preco = 55000;
39 | break;
40 | default:
41 | $carro = 'Mobi';
42 | $preco = 33000;
43 | break;
44 | }
45 |
46 | $precoFormatado = number_format($preco, 2, ',', '.');
47 | echo "Carro: $carro
Preço: $precoFormatado
";
--------------------------------------------------------------------------------
/exercicios/recursos/css/estilo.css:
--------------------------------------------------------------------------------
1 | * {
2 | font-family: 'Oswald', sans-serif;
3 | box-sizing: border-box;
4 | }
5 |
6 | body {
7 | height: 100vh;
8 | margin: 0px;
9 | display: grid;
10 | grid-template-rows: 120px 60px 1fr 60px;
11 | grid-template-columns: 1fr;
12 | grid-template-areas:
13 | "cabecalho"
14 | "navegacao"
15 | "principal"
16 | "rodape";
17 | }
18 |
19 | .cabecalho {
20 | grid-area: cabecalho;
21 | background-color: #1867c0;
22 | color: white;
23 | display: flex;
24 | flex-direction: column;
25 | justify-content: center;
26 | align-items: center;
27 | padding-bottom: 10px;
28 | z-index: 1;
29 | box-shadow: 0px 4px 9px -2px rgba(0,0,0,0.75);
30 | }
31 |
32 | .cabecalho > h1 {
33 | margin: 0px;
34 | font-weight: 300;
35 | font-size: 2.8rem;
36 | }
37 |
38 | .cabecalho > h2 {
39 | margin: 0px;
40 | font-weight: 200;
41 | font-size: 1.6rem;
42 | }
43 |
44 | .principal {
45 | grid-area: principal;
46 | height: calc(100vh - 240px);
47 | background-color: #f0f0f0;
48 | padding: 20px;
49 | }
50 |
51 | .conteudo {
52 | position: relative;
53 | height: 100%;
54 | overflow-y: scroll;
55 | background-color: #fff;
56 | padding: 20px;
57 | box-shadow: 0px 0px 25px 0px rgba(0, 0, 0, 0.2);
58 | }
59 |
60 | .rodape {
61 | grid-area: rodape;
62 | background-color: #fff;
63 | display: flex;
64 | justify-content: flex-end;
65 | align-items: center;
66 | font-size: 1.2rem;
67 | padding-right: 20px;
68 | color: #444;
69 | }
70 |
71 | .modulos {
72 | display: flex;
73 | flex-wrap: wrap;
74 | justify-content: space-around;
75 | }
76 |
77 | .modulo {
78 | flex-basis: 32%;
79 | margin-bottom: 20px;
80 | border-radius: 5px;
81 | }
82 |
83 | .modulo > h3 {
84 | margin: 0px;
85 | color: #fff;
86 | font-weight: 300;
87 | font-size: 1.5rem;
88 | padding: 10px 20px;
89 | background-color: #1867c0;
90 | }
91 |
92 | .modulo > ul {
93 | margin: 0px;
94 | padding: 10px;
95 | list-style: none;
96 | }
97 |
98 | .modulo > ul > li {
99 | padding: 7px;
100 | font-size: 1.2rem;
101 | cursor: pointer;
102 | }
103 |
104 | .modulo > ul > li > a {
105 | display: flex;
106 | text-decoration: none;
107 | color: #222;
108 | }
109 |
110 | .modulo > ul > li:hover {
111 | background-color: #EEE;
112 | }
113 |
114 | .modulo.verde { border: 2px solid #4CAF50; }
115 | .modulo.verde > h3 { background-color: #4CAF50; }
116 |
117 | .modulo.vermelho { border: 2px solid #F44336; }
118 | .modulo.vermelho > h3 { background-color: #F44336; }
119 |
120 | .modulo.azul { border: 2px solid #2196F3; }
121 | .modulo.azul > h3 { background-color: #2196F3; }
122 |
123 | .modulo.roxo { border: 2px solid #9C27B0; }
124 | .modulo.roxo > h3 { background-color: #9C27B0; }
125 |
126 | .modulo.laranja { border: 2px solid #FF9800; }
127 | .modulo.laranja > h3 { background-color: #FF9800; }
128 |
129 | .modulo.verde-escuro { border: 2px solid #1B5E20; }
130 | .modulo.verde-escuro > h3 { background-color: #1B5E20; }
131 |
132 | .modulo.vermelho-escuro { border: 2px solid #B71C1C; }
133 | .modulo.vermelho-escuro > h3 { background-color: #B71C1C; }
134 |
135 | .modulo.azul-escuro { border: 2px solid #0D47A1; }
136 | .modulo.azul-escuro > h3 { background-color: #0D47A1; }
137 |
138 | .modulo.roxo-escuro { border: 2px solid #4A148C; }
139 | .modulo.roxo-escuro > h3 { background-color: #4A148C; }
140 |
141 | .modulo.laranja-escuro { border: 2px solid #E65527; }
142 | .modulo.laranja-escuro > h3 { background-color: #E65527; }
143 |
144 | p.divisao {
145 | margin-bottom: 0px;
146 | font-weight: bold;
147 | }
148 |
149 | hr {
150 | margin-top: 0px;
151 | }
152 |
153 | .navegacao {
154 | grid-area: navegacao;
155 | display: flex;
156 | justify-content: flex-end;
157 | align-items: center;
158 | background-color: #555;
159 | }
160 |
161 | .navegacao > a {
162 | text-decoration: none;
163 | color: #FFF;
164 | font-weight: 300;
165 | font-size: 1.3rem;
166 | background-color: #2196f3;
167 | padding: 5px 10px;
168 | margin-right: 10px;
169 | }
170 |
171 | .navegacao > a.verde { background-color: #4CAF50; }
172 | .navegacao > a.vermelho { background-color: #F44336; }
173 |
174 | span.usuario {
175 | flex-grow: 1;
176 | justify-self: flex-start;
177 | color: #EEE;
178 | padding-left: 10px;
179 | font-size: 1.2rem;
180 | font-weight: 300;
181 | }
--------------------------------------------------------------------------------
/exercicios/recursos/css/exercicio.css:
--------------------------------------------------------------------------------
1 | .conteudo {
2 | font-size: 2rem;
3 | }
4 |
5 | .conteudo > .titulo {
6 | font-size: 2.5rem;
7 | font-weight: 300;
8 | padding-bottom: 10px;
9 | border-bottom: 1px solid #999;
10 | margin-bottom: 20px;
11 | }
--------------------------------------------------------------------------------
/exercicios/recursos/css/login.css:
--------------------------------------------------------------------------------
1 | body.login {
2 | grid-template-rows: 120px 1fr 60px;
3 | grid-template-areas: "cabecalho" "principal" "rodape";
4 | }
5 |
6 | body.login .principal {
7 | height: calc(100vh - 180px);
8 | }
9 |
10 | h3 {
11 | font-size: 2.1rem;
12 | margin: 20px;
13 | }
14 |
15 | form > div {
16 | padding-bottom: 15px;
17 | }
18 |
19 | label, input, button {
20 | font-size: 1.5rem;
21 | }
22 |
23 | button {
24 | color: #FFF;
25 | background-color: #228b22;
26 | }
27 |
28 | .conteudo {
29 | display: flex;
30 | flex-direction: column;
31 | align-items: center;
32 | justify-content: center;
33 | }
34 |
35 | .erros > p {
36 | font-size: 1.4rem;
37 | font-weight: 300;
38 | color: #FFF;
39 | background-color: #ff4500;
40 | padding: 10px 25px;
41 | margin-top: 0px;
42 | }
--------------------------------------------------------------------------------
/exercicios/repeticoes/break_continue.php:
--------------------------------------------------------------------------------
1 | Break/Continue
2 |
3 | ";
7 | $cont++;
8 | if($cont > 20) {
9 | break;
10 | }
11 | }
12 |
13 | echo "
";
14 |
15 | for(;;) {
16 | $cont++;
17 | if($cont % 2 === 1) continue;
18 | echo "$cont
";
19 | if($cont >= 30) {
20 | break;
21 | }
22 | }
23 |
24 | foreach(array(1,2,3,4,5,6) as $valor) {
25 | if($valor === 5) break;
26 | if($valor % 2 === 0) continue;
27 | echo "$valor
";
28 | }
29 |
30 | echo "Fim!";
--------------------------------------------------------------------------------
/exercicios/repeticoes/desafio_for.php:
--------------------------------------------------------------------------------
1 | Desafio For
2 |
3 |
13 |
14 | ";
19 | }
20 |
21 | echo '
';
22 |
23 | for(
24 | $impressao2 = '#';
25 | $impressao2 !== '######';
26 | $impressao2 .= '#'
27 | ) {
28 | echo "$impressao2
";
29 | }
--------------------------------------------------------------------------------
/exercicios/repeticoes/desafio_impressao.php:
--------------------------------------------------------------------------------
1 | Desafio Impressão
2 |
3 |
9 |
10 | ";
26 |
27 | foreach($array as $chave => $valor) {
28 | if($chave % 2 !== 0) continue;
29 | echo "$valor ";
30 | }
--------------------------------------------------------------------------------
/exercicios/repeticoes/desafio_tabela.php:
--------------------------------------------------------------------------------
1 | Desafio Tabela #01
2 |
3 | ";
16 | }
17 | ?>
18 |
19 |
20 | ';
23 | foreach($linha as $valor) {
24 | echo "$valor | ";
25 | }
26 | echo '';
27 | }
28 | ?>
29 |
30 |
31 |
32 | $linha) {
34 | $style = $index % 2 === 0 ?
35 | 'background-color: lightblue;' : '';
36 | echo "";
37 | foreach($linha as $valor) {
38 | echo "$valor | ";
39 | }
40 | echo '
';
41 | }
42 | ?>
43 |
44 |
45 |
--------------------------------------------------------------------------------
/exercicios/repeticoes/desafio_tabela_2.php:
--------------------------------------------------------------------------------
1 | Desafio Tabela #02
2 |
3 |
16 |
17 |
18 | ";
28 | for($j = 0; $j < $colunas; $j++) {
29 | echo "$num | ";
30 | $num++;
31 | }
32 | echo "";
33 | }
34 | ?>
35 |
36 |
37 |
--------------------------------------------------------------------------------
/exercicios/repeticoes/for.php:
--------------------------------------------------------------------------------
1 | Laço For
2 |
3 | ";
6 | }
7 |
8 | echo "
";
9 |
10 | for(; $cont <= 10; $cont++) {
11 | echo "$cont
";
12 | }
13 |
14 | echo "
";
15 |
16 | for(; $cont <= 15; ) {
17 | echo "$cont
";
18 | $cont++;
19 | }
20 |
21 |
22 | $array = [
23 | 1 => 'Domingo',
24 | 'Segunda',
25 | 'Terça',
26 | 'Quarta',
27 | 'Quinta',
28 | 'Sexta',
29 | 'Sábado'
30 | ];
31 |
32 | print_r($array);
33 |
34 | echo "
";
35 |
36 | for($i = 1; $i <= count($array); $i++) {
37 | echo "{$array[$i]}
";
38 | }
39 |
40 | $matrix = [
41 | ['a', 'e', 'i', 'o', 'u'],
42 | ['b', 'c', 'd']
43 | ];
44 |
45 | echo "
";
46 |
47 | for($i = 0; $i < count($matrix); $i++) {
48 | for($j = 0; $j < count($matrix[$i]); $j++) {
49 | echo "{$matrix[$i][$j]} ";
50 | }
51 | echo "
";
52 | }
--------------------------------------------------------------------------------
/exercicios/repeticoes/foreach.php:
--------------------------------------------------------------------------------
1 | Foreach
2 |
3 | 'Domingo',
6 | 'Segunda',
7 | 'Terça',
8 | 'Quarta',
9 | 'Quinta',
10 | 'Sexta',
11 | 'Sábado'
12 | ];
13 |
14 | foreach ($array as $valor) {
15 | echo "$valor
";
16 | }
17 |
18 | foreach ($array as $indice => $valor) {
19 | echo "$indice => $valor
";
20 | }
21 |
22 | $matrix = [
23 | ['a', 'e', 'i', 'o', 'u'],
24 | ['b', 'c', 'd']
25 | ];
26 |
27 | foreach ($matrix as $linha) {
28 | // echo "$linha
";
29 | foreach($linha as $letra) {
30 | echo "$letra ";
31 | }
32 | echo "
";
33 | }
34 |
35 | $numeros = [1, 2, 3, 4, 5];
36 | foreach ($numeros as &$dobrar) {
37 | $dobrar *= 2;
38 | echo "$dobrar
";
39 | }
40 | print_r($numeros);
--------------------------------------------------------------------------------
/exercicios/repeticoes/while.php:
--------------------------------------------------------------------------------
1 | While/Do While
2 |
3 | ";
9 | $contador++;
10 | }
11 |
12 | $contador = 100;
13 | do {
14 | echo "do-while $contador
";
15 | $contador++;
16 | } while($contador < VALOR_LIMITE);
17 |
18 | $contador = 0;
19 | while(true) {
20 | echo "while(true) $contador
";
21 | $contador++;
22 | if($contador >= VALOR_LIMITE) break;
23 | }
--------------------------------------------------------------------------------
/exercicios/sessao/basico_sessao.php:
--------------------------------------------------------------------------------
1 | Sessão
2 |
3 | ';
8 |
9 | if(!$_SESSION['nome']) {
10 | $_SESSION['nome'] = 'Gabriel';
11 | }
12 |
13 | if(!$_SESSION['email']) {
14 | $_SESSION['email'] = 'gabriel@azmail.com';
15 | }
16 |
17 | print_r($_SESSION);
18 |
19 | ?>
20 |
21 |
22 |
23 | Alterar Sessão
24 |
25 |
--------------------------------------------------------------------------------
/exercicios/sessao/basico_sessao_alterar.php:
--------------------------------------------------------------------------------
1 |
5 |
6 |
9 |
10 |
11 | Nome: = $_SESSION['nome'] ?>
12 | Email: = $_SESSION['email'] ?>
13 |
14 |
15 |
16 |
17 | Voltar
18 |
19 |
20 | Limpar Sessão
21 |
--------------------------------------------------------------------------------
/exercicios/sessao/basico_sessao_limpar.php:
--------------------------------------------------------------------------------
1 | Gerenciando Sessão
2 |
3 | ' . $_SESSION['contador'];
11 |
12 | if($_SESSION['contador'] % 5 === 0) {
13 | session_regenerate_id();
14 | }
15 |
16 | if($_SESSION['contador'] >= 15) {
17 | session_destroy();
18 | }
--------------------------------------------------------------------------------
/exercicios/teste.txt:
--------------------------------------------------------------------------------
1 | Novo conteúdo com novos valores
2 | Adicionados em um segundo momento
3 |
4 | Adicionado durante a leitura
--------------------------------------------------------------------------------
/exercicios/tipos/aritmeticas.php:
--------------------------------------------------------------------------------
1 | Operações Aritméticas
2 |
3 | ';
5 | var_dump(1 + 1);
6 | echo '
';
7 | echo 1 + 2.5, '
';
8 | echo 10 - 2, '
';
9 | echo 2 * 5, '
';
10 | echo 7 / 4, '
';
11 | echo intdiv(7, 4), '
';
12 | echo round(7 / 4), '
';
13 | echo 7 % 4, '
';
14 | echo 7 % 2, '
';
15 | echo 8 % 2, '
';
16 | echo 7 / 0, '
';
17 | // echo intdiv(7, 0); # erro!
18 | echo 4 ** 2, '
';
19 |
20 | // Precedência de operadores:
21 | // () => ** => / * % => + -
22 | echo 'Precedência
';
23 | echo 2 + 3 * 4, '
';
24 | echo (2 + 3) * 4, '
';
25 | echo 2 + 3 * 4 ** 2, '
';
26 | echo ((2 + 3) * 4) ** 2;
--------------------------------------------------------------------------------
/exercicios/tipos/booleano.php:
--------------------------------------------------------------------------------
1 | Tipo Booleano
2 |
3 | ';
6 | echo FALSE;
7 |
8 | echo '
' . var_dump(true);
9 | echo '
' . var_dump(False);
10 | echo '
' . var_dump('false');
11 | echo '
' . is_bool(false);
12 | echo '
' . is_bool('true');
13 |
14 | // fazer as regras de conversões
15 | echo 'Regras:
';
16 | echo '
' . var_dump((bool) 0); // apenas zero é false
17 | echo '
' . var_dump((bool) 20);
18 | echo '
' . var_dump((bool) -1);
19 | echo '
' . var_dump((bool) 0.0);
20 | echo '
' . var_dump((bool) 0.0000000001);
21 | echo '
' . var_dump((bool) ""); // false
22 | echo '
' . var_dump((bool) "0"); // false
23 | echo '
' . var_dump((bool) " "); // todo resto é true
24 | echo '
' . var_dump((bool) "00");
25 | echo '
' . var_dump((bool) "false");
26 |
27 | echo '
' . var_dump(!!"false");
--------------------------------------------------------------------------------
/exercicios/tipos/conversoes.php:
--------------------------------------------------------------------------------
1 | Conversões
2 |
3 | ';
8 | var_dump(PHP_INT_MAX + 1);
9 | echo '
';
10 | var_dump(1 + 1.0);
11 | echo '
';
12 | var_dump((float) 3);
13 |
14 | // float para int
15 | echo 'Float para int
';
16 | var_dump((int) 6.8);
17 | echo '
';
18 | var_dump(intval(2.999));
19 | echo '
';
20 | var_dump((int) round(2.8));
21 |
22 | // operações com string
23 | echo 'Strings
';
24 | var_dump(3 + "2");
25 | echo '
';
26 | var_dump("3" + 2);
27 | echo '
';
28 | var_dump("3" . 2);
29 | echo '
', is_string("3" . 2);
30 | // echo '
', is_string("3" + 2);
31 | echo '
';
32 | var_dump(1 + "cinco");
33 | echo '
';
34 | var_dump(1 + "5 cinco");
35 | echo '
';
36 | var_dump(1 + "cinco 5");
37 | echo '
';
38 | var_dump(1 + "2+5");
39 | echo '
';
40 | var_dump(1 + "3.2");
41 | echo '
';
42 | var_dump(1 + "-3.2e2");
43 | echo '
';
44 | var_dump((int) "10.5");
45 | echo '
';
46 | var_dump((float) "10.5");
--------------------------------------------------------------------------------
/exercicios/tipos/desafio_precedendia.php:
--------------------------------------------------------------------------------
1 | Desafio Precedência
2 |
3 | 1. Qual o valor será impresso?';
5 | echo 2 + 5 * 3 + (12 / 6) / (-8 + 2 ** 3);
6 |
7 | echo '2. Qual expressão imprime o valor 100?
';
8 | echo 'a) ', (1 + 2) * 20 - 15;
9 | echo ' b) ', 4 * 5 ** 2;
10 | echo ' c) ', 2 ** 3 ** 4 / 1e25;
11 | echo ' d) ', 3 + (3 * 8) / 2 - 3;
--------------------------------------------------------------------------------
/exercicios/tipos/desafio_string.php:
--------------------------------------------------------------------------------
1 | Desafio String
2 |
3 | ';
11 | echo stripos('!AbcaBcabc', 'abc') . '
';
12 |
13 | echo strpos(strtolower('!AbcaBcabc'), strtolower('ABC'));
--------------------------------------------------------------------------------
/exercicios/tipos/float.php:
--------------------------------------------------------------------------------
1 | Tipo Float
2 |
3 | ';
5 |
6 | var_dump(1.0);
7 | echo '
';
8 |
9 | echo PHP_FLOAT_MAX, '
';
10 | echo PHP_FLOAT_MIN, '
';
11 | echo 1.2e3, '
'; // 1200
12 | echo 13E-3; // 0.013
--------------------------------------------------------------------------------
/exercicios/tipos/int.php:
--------------------------------------------------------------------------------
1 | Tipo Inteiro
2 |
3 | ';
6 |
7 | var_dump(11);
8 | echo '
';
9 |
10 | echo PHP_INT_MAX, '
';
11 | echo PHP_INT_MIN, '
';
12 | echo 017, '
'; // Base octal
13 | echo 0b11000111001, '
'; // Base binária
14 | echo 0x117acf0; // Base hexa
--------------------------------------------------------------------------------
/exercicios/tipos/string.php:
--------------------------------------------------------------------------------
1 | Tipo String
2 |
3 | ';
6 | var_dump("Eu também");
7 | echo '
';
8 |
9 | // concatenação
10 | echo("Nós também" . ' somos' . '
');
11 | echo("Número é " . 123);
12 | echo '
', "Também aceito", " virgulas";
13 |
14 | echo '
';
15 | echo "'Teste' " . '"Teste" ' . '\'Teste\' ' . "\"Teste\" " . "\\";
16 |
17 | print("
Também existe o função print");
18 | print "
Também existe o função print";
19 |
20 | // Algumas funções
21 | echo '
' . strtoupper('maximizado');
22 | echo '
' . strtolower('MINIMIZADO');
23 | echo '
' . ucfirst('só a primeira letra');
24 | echo '
' . ucwords('todas as palavras');
25 | echo '
' . strlen('Quantas letras?');
26 | echo '
' . mb_strlen("Eu também", "utf-8");
27 | echo '
' . substr('Só uma parte mesmo', 7, 6); // parte
28 | echo '
' . str_replace('isso', 'aquilo', 'Trocar isso isso');
--------------------------------------------------------------------------------
/exercicios/tratamento_erro/desafio_intdiv.php:
--------------------------------------------------------------------------------
1 | 0) {
14 | throw new NaoInteiroException();
15 | }
16 |
17 | return $a / $b;
18 | }
--------------------------------------------------------------------------------
/exercicios/tratamento_erro/desafio_intdiv_teste.php:
--------------------------------------------------------------------------------
1 | Desafio intdiv
2 |
3 | ';
9 | } catch(\Aritmetica\NaoInteiroException $e) {
10 | echo 'Resultado não é um número inteiro
';
11 | }
12 |
13 | try {
14 | echo intdiv(8, 0) . '
';
15 | } catch(DivisionByZeroError $e) {
16 | echo 'Divisão por zero
';
17 | }
18 |
19 | echo intdiv(8, 2) . '
';
20 | echo \intdiv(8, 2) . '
';
21 | echo \intdiv(8, 3) . '
';
--------------------------------------------------------------------------------
/exercicios/tratamento_erro/erros_personalizados.php:
--------------------------------------------------------------------------------
1 | Erros Personalizados
2 |
3 | 70) {
18 | throw new FaixaEtariaException(
19 | 'Já deveria estar aposentado');
20 | }
21 |
22 | return 70 - $idade;
23 | }
24 |
25 | $idadesAvaliadas = [15, 30, 60, 80];
26 |
27 | foreach($idadesAvaliadas as $idade) {
28 | try {
29 | $tempoRestante = calcularTempoAposentadoria($idade);
30 | echo "Idade: $idade, $tempoRestante anos restantes
";
31 | } catch(FaixaEtariaException $e) {
32 | echo "Não foi possível calcular para $idade anos.
";
33 | echo "Motivo: {$e->getMessage()}
";
34 | }
35 | }
36 |
37 | echo "Fim!";
--------------------------------------------------------------------------------
/exercicios/tratamento_erro/gerenciador_erro.php:
--------------------------------------------------------------------------------
1 | Error Handler
2 |
3 | ';
6 |
7 | error_reporting(E_ERROR);
8 | // echo 4 / 0 . '
';
9 |
10 | error_reporting(E_ALL);
11 | // echo 4 / 0 . '
';
12 |
13 | error_reporting(~E_ALL);
14 | echo 4 / 0 . '
';
15 |
16 | echo '
';
17 |
18 | error_reporting(E_ALL);
19 | echo 4 / 0 . '
';
20 | include 'arquivo_inexistente.php';
21 |
22 | function filtrarMensagem($errno, $errstring) {
23 | $text = 'include';
24 | // $text = 'by zero';
25 | return !!stripos(" $errstring", $text);
26 | }
27 |
28 | set_error_handler('filtrarMensagem', E_WARNING);
29 |
30 | echo '
';
31 | echo 4 / 0 . '
';
32 | include 'arquivo_inexistente.php';
33 |
34 | echo '
';
35 |
36 | restore_error_handler();
37 |
38 | echo 4 / 0 . '
';
39 | include 'arquivo_inexistente.php';
--------------------------------------------------------------------------------
/exercicios/tratamento_erro/try_catch.php:
--------------------------------------------------------------------------------
1 | Try/Catch
2 |
3 | ';
11 | }
12 |
13 | try {
14 | throw new Exception('Um erro muito estranho');
15 | echo intdiv(7, 0);
16 | } catch(DivisionByZeroError $e) {
17 | echo 'Divisão por zero
';
18 | } catch(Throwable $e) {
19 | echo 'Erro encontrado: ' . $e->getMessage() . '
';
20 | } finally {
21 | echo 'Sempre executado!
';
22 | }
23 |
24 | echo 'Execução continua...
';
--------------------------------------------------------------------------------
/exercicios/variaveis/atribuicoes.php:
--------------------------------------------------------------------------------
1 | Atribuições
2 |
3 | ' . $numero;
8 | $numero = $numero - 3;
9 | echo '
' . $numero;
10 | $numero = $numero + 1.5;
11 | echo '
' . $numero;
12 | $numero--; // $numero = $numero - 1;
13 | --$numero; // $numero = $numero - 1;
14 | echo '
' . $numero;
15 | $numero++; // $numero = $numero + 1;
16 | ++$numero; // $numero = $numero + 1;
17 | echo '
' . $numero;
18 | $numero = 20;
19 | echo '
' . $numero;
20 | $numero -= 5;
21 | echo '
' . $numero;
22 | $numero += 5;
23 | echo '
' . $numero;
24 | $numero *= 10;
25 | echo '
' . $numero;
26 | $numero /= 2;
27 | echo '
' . $numero;
28 | $numero %= 6;
29 | echo '
' . $numero;
30 | $numero **= 4;
31 | echo '
' . $numero;
32 | $numero .= 4; // apenas concatenação!
33 | echo '
' . $numero;
34 |
35 | $texto = 'Esse é um texto';
36 | echo '
' . $texto;
37 | $texto = $texto . ' qualquer';
38 | echo '
' . $texto;
39 | $texto .= ' de verdade!';
40 | echo '
' . $texto;
41 |
42 | // $variavelInexistente = 'valor existente';
43 | echo '
' . $variavelInexistente;
44 | $valor = $variavelInexistente ?? 'valor default';
45 | echo '
' . $valor;
--------------------------------------------------------------------------------
/exercicios/variaveis/basico.php:
--------------------------------------------------------------------------------
1 | Variáveis
2 |
3 | ';
6 | vaR_Dump($numeroA);
7 |
8 | echo '
';
9 | $a = 3;
10 | $b = 16;
11 | $somaDosNumeros = $a + $b;
12 | EcHo $somaDosNumeros;
13 |
14 | echo '
';
15 | echo isset($somaDosNumeros);
16 |
17 | unset($somaDosNumeros);
18 | echo '
';
19 | var_dump($somaDosNumeros);
20 |
21 | $variavel = 10;
22 | echo '
' . $variavel;
23 |
24 | $variavel = "Agora sou uma string!";
25 | echo '
' . $variavel;
26 |
27 | // Nomes de variável
28 | $var = 'valida';
29 | $var2 = 'valida';
30 | $VAR3 = 'valida';
31 | $_var_4 = 'valida';
32 | $vâr5 = 'valida'; // evitar!
33 | // $6var = 'invalida';
34 | // $%var7 = 'invalida';
35 | // $var8% = 'invalida';
36 |
37 | echo '
';
38 | var_dump($_SERVER["HTTP_HOST"]);
--------------------------------------------------------------------------------
/exercicios/variaveis/constantes.php:
--------------------------------------------------------------------------------
1 | Constantes
2 |
3 | ' . $TAXA_DE_JUROS . '!';
7 | // TAXA_DE_JUROS = 2.5;
8 |
9 | const NOVA_TAXA = 2.5;
10 | echo '
' . NOVA_TAXA;
11 |
12 | $valorVariavel = 2.8;
13 | // define('NOVISSIMA_TAXA', $valorVariavel);
14 | // const NOVISSIMA_TAXA = $valorVariavel;
15 | const NOVISSIMA_TAXA = 2.8 + 1.2;
16 | echo '
' . NOVISSIMA_TAXA;
17 |
18 | echo '
' . PHP_VERSION;
19 | echo '
' . PHP_INT_MAX;
20 |
21 | echo '
Linha: ' . __LINE__;
22 | echo '
' . __FILE__;
23 | echo '
' . __DIR__;
--------------------------------------------------------------------------------
/exercicios/variaveis/desafio_equacao.php:
--------------------------------------------------------------------------------
1 | Desafio Equação
2 |
3 | Desafio Variáveis
2 |
3 | ";
16 | echo "$a! {$$a} {$$$a} {$$$$a} {$$$$$a} {$$$$$$a}.";
--------------------------------------------------------------------------------
/exercicios/variaveis/interpolacao.php:
--------------------------------------------------------------------------------
1 | Interpolação
2 |
3 | $numero';
7 | echo "
$numero";
8 |
9 | $texto = "A sua nota é: $numero";
10 | echo "
$texto";
11 |
12 | $objeto = 'caneta';
13 | echo "
Eu tenho 5 $objetos";
14 | echo "
Eu tenho 5 {$objeto}s.";
15 | echo "
Eu tinha 5 { $objeto}s mas perdi 3 {$objeto }s";
--------------------------------------------------------------------------------
/exercicios/variaveis/valor_referencia.php:
--------------------------------------------------------------------------------
1 | Valor vs Referência
2 |
3 | $variavelValor";
10 | $variavelValor = 'novo valor';
11 | echo "
$variavel";
12 | echo " $variavelValor";
13 |
14 | // Atribuição por Referência
15 | $variavelReferencia = &$variavel;
16 | $variavelReferencia = 'mesma referencia';
17 |
18 | echo "
$variavel $variavelReferencia";
--------------------------------------------------------------------------------
/exercicios/variaveis/variaveis_variaveis.php:
--------------------------------------------------------------------------------
1 | Variáveis Variáveis
2 |
3 | ';
9 | $epa = 'opa';
10 | $opa = 'vish';
11 | $vish = 'eita!!!!';
12 | echo "$epa {$$epa} {$$$epa}";
--------------------------------------------------------------------------------
/innout/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/.DS_Store
--------------------------------------------------------------------------------
/innout/.gitignore:
--------------------------------------------------------------------------------
1 | env.ini
--------------------------------------------------------------------------------
/innout/extras/db.sql:
--------------------------------------------------------------------------------
1 | USE INNOUT;
2 |
3 | DROP TABLE IF EXISTS working_hours, users;
4 | CREATE TABLE users (
5 | id INT(6) AUTO_INCREMENT PRIMARY KEY,
6 | name VARCHAR(100) NOT NULL,
7 | password VARCHAR(100) NOT NULL,
8 | email VARCHAR(50) UNIQUE NOT NULL,
9 | start_date DATE NOT NULL,
10 | end_date DATE,
11 | is_admin BOOLEAN NOT NULL DEFAULT false
12 | );
13 | CREATE TABLE working_hours (
14 | id INT(6) AUTO_INCREMENT PRIMARY KEY,
15 | user_id INT(6),
16 | work_date DATE NOT NULL,
17 | time1 TIME,
18 | time2 TIME,
19 | time3 TIME,
20 | time4 TIME,
21 | worked_time INT,
22 |
23 | FOREIGN KEY (user_id) REFERENCES users(id),
24 | CONSTRAINT cons_user_day UNIQUE (user_id, work_date)
25 | );
26 |
27 | -- Essa senha criptografada corresponde ao valor "a"
28 | INSERT INTO users (id, name, password, email, start_date, end_date, is_admin)
29 | VALUES (1, 'Admin', '$2y$10$/vC1UKrEJQUZLN2iM3U9re/4DQP74sXCOVXlYXe/j9zuv1/MHD4o.', 'admin@cod3r.com.br', '2000-1-1', null, 1);
30 |
31 | INSERT INTO users (id, name, password, email, start_date, end_date, is_admin)
32 | VALUES (2, 'Chaves', '$2y$10$/vC1UKrEJQUZLN2iM3U9re/4DQP74sXCOVXlYXe/j9zuv1/MHD4o.', 'chaves@cod3r.com.br', '2000-1-1', null, 1);
33 |
34 | INSERT INTO users (id, name, password, email, start_date, end_date, is_admin)
35 | VALUES (3, 'Seu Barriga', '$2y$10$/vC1UKrEJQUZLN2iM3U9re/4DQP74sXCOVXlYXe/j9zuv1/MHD4o.', 'barriga@cod3r.com.br', '2000-1-1', null, 0);
36 |
37 | INSERT INTO users (id, name, password, email, start_date, end_date, is_admin)
38 | VALUES (4, 'Seu Madruga', '$2y$10$/vC1UKrEJQUZLN2iM3U9re/4DQP74sXCOVXlYXe/j9zuv1/MHD4o.', 'madruga@cod3r.com.br', '2000-1-1', null, 0);
39 |
40 | INSERT INTO users (id, name, password, email, start_date, end_date, is_admin)
41 | VALUES (5, 'Quico', '$2y$10$/vC1UKrEJQUZLN2iM3U9re/4DQP74sXCOVXlYXe/j9zuv1/MHD4o.', 'quico@cod3r.com.br', '2000-1-1', '2019-1-1', 0);
42 |
--------------------------------------------------------------------------------
/innout/public/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/.DS_Store
--------------------------------------------------------------------------------
/innout/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 | RewriteEngine On
3 | RewriteBase /
4 | RewriteRule ^index\.php$ - [L]
5 | RewriteCond %{REQUEST_FILENAME} !-f
6 | RewriteCond %{REQUEST_FILENAME} !-d
7 | RewriteRule . / [L]
8 |
--------------------------------------------------------------------------------
/innout/public/assets/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/assets/.DS_Store
--------------------------------------------------------------------------------
/innout/public/assets/css/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/assets/css/.DS_Store
--------------------------------------------------------------------------------
/innout/public/assets/css/comum.css:
--------------------------------------------------------------------------------
1 | * {
2 | font-family: 'Oswald', sans-serif;
3 | }
4 |
5 | @font-face {
6 | font-family: 'Oswald';
7 | font-weight: 200;
8 | src: url('./fonts/Oswald-ExtraLight.ttf') format('truetype');
9 | }
10 |
11 | @font-face {
12 | font-family: 'Oswald';
13 | font-weight: 300;
14 | src: url('./fonts/Oswald-Light.ttf') format('truetype');
15 | }
16 |
17 | @font-face {
18 | font-family: 'Oswald';
19 | font-weight: 400;
20 | src: url('./fonts/Oswald-Regular.ttf') format('truetype');
21 | }
22 |
23 | @font-face {
24 | font-family: 'Oswald';
25 | font-weight: 500;
26 | src: url('./fonts/Oswald-Medium.ttf') format('truetype');
27 | }
28 |
29 | @font-face {
30 | font-family: 'Oswald';
31 | font-weight: 600;
32 | src: url('./fonts/Oswald-SemiBold.ttf') format('truetype');
33 | }
34 |
35 | @font-face {
36 | font-family: 'Oswald';
37 | font-weight: 700;
38 | src: url('./fonts/Oswald-Bold.ttf') format('truetype');
39 | }
--------------------------------------------------------------------------------
/innout/public/assets/css/fonts/Oswald-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/assets/css/fonts/Oswald-Bold.ttf
--------------------------------------------------------------------------------
/innout/public/assets/css/fonts/Oswald-ExtraLight.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/assets/css/fonts/Oswald-ExtraLight.ttf
--------------------------------------------------------------------------------
/innout/public/assets/css/fonts/Oswald-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/assets/css/fonts/Oswald-Light.ttf
--------------------------------------------------------------------------------
/innout/public/assets/css/fonts/Oswald-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/assets/css/fonts/Oswald-Medium.ttf
--------------------------------------------------------------------------------
/innout/public/assets/css/fonts/Oswald-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/assets/css/fonts/Oswald-Regular.ttf
--------------------------------------------------------------------------------
/innout/public/assets/css/fonts/Oswald-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/assets/css/fonts/Oswald-SemiBold.ttf
--------------------------------------------------------------------------------
/innout/public/assets/css/fonts/icofont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/assets/css/fonts/icofont.ttf
--------------------------------------------------------------------------------
/innout/public/assets/css/fonts/icofont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/assets/css/fonts/icofont.woff
--------------------------------------------------------------------------------
/innout/public/assets/css/fonts/icofont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cod3rcursos/curso-php/7e9daaef34c50e7f67ba83cbf32aae7efc1bde5f/innout/public/assets/css/fonts/icofont.woff2
--------------------------------------------------------------------------------
/innout/public/assets/css/login.css:
--------------------------------------------------------------------------------
1 | body {
2 | height: 100vh;
3 | display: flex;
4 | justify-content: center;
5 | align-items: center;
6 | background-color: #DDD;
7 | }
8 |
9 | .form-login {
10 | flex-basis: 450px;
11 | }
12 |
13 | .login-card .card-header {
14 | display: flex;
15 | justify-content: center;
16 | align-items: center;
17 | font-size: 1.8rem;
18 | }
19 |
20 | .login-card .card-footer {
21 | display: flex;
22 | justify-content: flex-end;
23 | }
--------------------------------------------------------------------------------
/innout/public/assets/css/template.css:
--------------------------------------------------------------------------------
1 | body {
2 | display: grid;
3 | grid-template-columns: 250px 1fr;
4 | grid-template-rows: 64px 1fr 64px;
5 | grid-template-areas:
6 | "header header"
7 | "sidebar content"
8 | "sidebar footer";
9 | height: 100vh;
10 | margin: 0;
11 | background-color: #DDD;
12 | }
13 |
14 | body.hide-sidebar {
15 | grid-template-columns: 1fr;
16 | grid-template-areas:
17 | "header"
18 | "content"
19 | "footer";
20 | }
21 |
22 | header.header {
23 | grid-area: header;
24 | display: flex;
25 | background-color: #1976d2;
26 | align-items: center;
27 | z-index: 10;
28 | box-shadow:
29 | 0 2px 4px -1px rgba(0, 0, 0, .2),
30 | 0 4px 4px 0px rgba(0, 0, 0, .14),
31 | 0 1px 10px 0px rgba(0, 0, 0, .12);
32 | }
33 |
34 | header.header .logo {
35 | display: flex;
36 | justify-content: center;
37 | align-items: center;
38 | color: white;
39 | font-size: 2rem;
40 | flex-basis: 250px;
41 | height: 100%;
42 | }
43 |
44 | header.header .menu-toggle {
45 | color: white;
46 | cursor: pointer;
47 | }
48 |
49 | header.header .spacer {
50 | flex: 1;
51 | }
52 |
53 | header.header .dropdown {
54 | position: relative;
55 | height: 100%;
56 | }
57 |
58 | header.header .dropdown-button {
59 | display: flex;
60 | justify-content: center;
61 | align-items: center;
62 | height: 100%;
63 | font-size: 1.1rem;
64 | color: white;
65 | cursor: pointer;
66 | }
67 |
68 | header.header .dropdown-content {
69 | display: none;
70 | position: absolute;
71 | min-width: 100%;
72 | background-color: #f9f9f9;
73 | padding: 15px 0px;
74 | z-index: 100;
75 | box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, .2);
76 | }
77 |
78 | header.header .dropdown:hover .dropdown-content {
79 | display: block;
80 | }
81 |
82 | header.header .dropdown-content ul {
83 | list-style: none;
84 | padding-left: 0;
85 | margin-bottom: 0;
86 | }
87 |
88 | header.header .dropdown-content a {
89 | display: flex;
90 | align-items: center;
91 | text-decoration: none;
92 | color: #222;
93 | padding: 7px;
94 | font-size: 1.1rem;
95 | }
96 |
97 | header.header .dropdown-content a:hover {
98 | background-color: rgba(0, 0, 0, .05);
99 | }
100 |
101 | header.header .dropdown:hover {
102 | background-color: rgba(0, 0, 0, .1);
103 | }
104 |
105 | header.header .avatar {
106 | height: 75%;
107 | border-radius: 50%;
108 | margin-left: 10px;
109 | }
110 |
111 | aside.sidebar {
112 | display: flex;
113 | flex-direction: column;
114 | align-items: center;
115 | grid-area: sidebar;
116 | box-shadow: -5px 0px 25px 1px rgba(0, 0, 0, 0.4);
117 | background-color: #FFF;
118 | }
119 |
120 | aside.sidebar .menu {
121 | width: 100%;
122 | flex-grow: 1;
123 | }
124 |
125 | aside.sidebar .menu ul.nav-list {
126 | list-style: none;
127 | padding: 0;
128 | margin: 0;
129 | }
130 |
131 | aside.sidebar .menu li.nav-item {
132 | margin: 0;
133 | padding: 10px 10px 10px 25px;
134 | }
135 |
136 | aside.sidebar .menu li.nav-item:hover {
137 | background-color: rgba(0, 0, 0, 0.1);
138 | }
139 |
140 |
141 | aside.sidebar .menu li.nav-item a {
142 | font-size: 1.2rem;
143 | color: #555;
144 | text-decoration: none;
145 | }
146 |
147 | body.hide-sidebar aside.sidebar {
148 | display: none;
149 | }
150 |
151 | aside.sidebar .sidebar-widgets {
152 | position: sticky;
153 | bottom: 20px;
154 | }
155 |
156 | aside.sidebar .sidebar-widget {
157 | display: flex;
158 | align-items: center;
159 | }
160 |
161 | aside.sidebar .sidebar-widget .icon {
162 | font-size: 3.5rem;
163 | margin: 2px 10px 2px 0px;
164 | }
165 |
166 | aside.sidebar .sidebar-widget .info {
167 | display: flex;
168 | flex-direction: column;
169 | align-items: center;
170 | flex: 1;
171 | }
172 |
173 | .division {
174 | widows: 80%;
175 | border: solid 1px #EEE;
176 | }
177 |
178 | aside.sidebar .info .main {
179 | font-size: 2rem;
180 | }
181 |
182 | main.content {
183 | background-color: #FFF;
184 | grid-area: content;
185 | margin: 20px;
186 | padding: 20px;
187 | border-radius: 5px;
188 | box-shadow: 0px 0px 25px 0px rgba(0, 0, 0, 0.2);
189 | }
190 |
191 | main.content .content-title {
192 | display: flex;
193 | align-items: center;
194 | padding-bottom: 15px;
195 | border-bottom: 1px solid #CCC;
196 | }
197 |
198 | main.content .content-title .icon {
199 | font-size: 3rem;
200 | }
201 |
202 | main.content .content-title h1 {
203 | color: #444;
204 | font-size: 1.8rem;
205 | font-weight: 300;
206 | margin: 0;
207 | }
208 |
209 | main.content .content-title h2 {
210 | color: #888;
211 | font-size: 1.2rem;
212 | font-weight: 300;
213 | margin: 0;
214 | }
215 |
216 | footer.footer {
217 | display: flex;
218 | justify-content: flex-end;
219 | align-items: center;
220 | padding-right: 20px;
221 | font-size: 1.2rem;
222 | grid-area: footer;
223 | background-color: #222;
224 | color: #FFF;
225 | }
226 |
227 | .record {
228 | font-size: 2.2rem;
229 | }
230 |
231 | .summary-boxes {
232 | display: flex;
233 | justify-content: space-around;
234 | flex-wrap: wrap;
235 | }
236 |
237 | .summary-box {
238 | flex-grow: 1;
239 | display: flex;
240 | flex-direction: column;
241 | align-items: center;
242 | color: #fff;
243 | padding: 10px;
244 | border-radius: 10px;
245 | margin: 10px;
246 | min-width: 200px;
247 | }
248 |
249 | .summary-box .icon {
250 | font-size: 3.5rem;
251 | }
252 |
253 | .summary-box .title {
254 | font-size: 1.5rem;
255 | }
256 |
257 | .summary-box .value {
258 | font-size: 2rem;
259 | }
--------------------------------------------------------------------------------
/innout/public/assets/js/app.js:
--------------------------------------------------------------------------------
1 |
2 | (function () {
3 | const menuToggle = document.querySelector('.menu-toggle')
4 | menuToggle.onclick = function (e) {
5 | const body = document.querySelector('body')
6 | body.classList.toggle('hide-sidebar')
7 | }
8 | })()
9 |
10 | function activateClock() {
11 | const activeClock = document.querySelector('[active-clock]')
12 | if(!activeClock) return
13 |
14 | function addOneSecond(hours, minutes, seconds) {
15 | const d = new Date()
16 | d.setHours(parseInt(hours))
17 | d.setMinutes(parseInt(minutes))
18 | d.setSeconds(parseInt(seconds) + 1)
19 |
20 | const h = `${d.getHours()}`.padStart(2, 0)
21 | const m = `${d.getMinutes()}`.padStart(2, 0)
22 | const s = `${d.getSeconds()}`.padStart(2, 0)
23 |
24 | return `${h}:${m}:${s}`
25 | }
26 |
27 | setInterval(function() {
28 | // '07:27:19' => ['07', '27', '19']
29 | const parts = activeClock.innerHTML.split(':')
30 | activeClock.innerHTML = addOneSecond(...parts)
31 | }, 1000)
32 | }
33 |
34 | activateClock()
--------------------------------------------------------------------------------
/innout/public/index.php:
--------------------------------------------------------------------------------
1 | connect_error) {
12 | die("Erro: " . $conn->connect_error);
13 | }
14 |
15 | return $conn;
16 | }
17 |
18 | public static function getResultFromQuery($sql) {
19 | $conn = self::getConnection();
20 | $result = $conn->query($sql);
21 | $conn->close();
22 | return $result;
23 | }
24 |
25 | public static function executeSQL($sql) {
26 | $conn = self::getConnection();
27 | if(!mysqli_query($conn, $sql)) {
28 | throw new Exception(mysqli_error($conn));
29 | }
30 | $id = $conn->insert_id;
31 | $conn->close();
32 | return $id;
33 | }
34 | }
--------------------------------------------------------------------------------
/innout/src/config/date_utils.php:
--------------------------------------------------------------------------------
1 | format('N') >= 6;
10 | }
11 |
12 | function isBefore($date1, $date2) {
13 | $inputDate1 = getDateAsDateTime($date1);
14 | $inputDate2 = getDateAsDateTime($date2);
15 | return $inputDate1 <= $inputDate2;
16 | }
17 |
18 | function getNextDay($date) {
19 | $inputDate = getDateAsDateTime($date);
20 | $inputDate->modify('+1 day');
21 | return $inputDate;
22 | }
23 |
24 | function sumIntervals($interval1, $interval2) {
25 | $date = new DateTime('00:00:00');
26 | $date->add($interval1);
27 | $date->add($interval2);
28 | return (new DateTime('00:00:00'))->diff($date);
29 | }
30 |
31 | function subtractIntervals($interval1, $interval2) {
32 | $date = new DateTime('00:00:00');
33 | $date->add($interval1);
34 | $date->sub($interval2);
35 | return (new DateTime('00:00:00'))->diff($date);
36 | }
37 |
38 | function getDateFromInterval($interval) {
39 | return new DateTimeImmutable($interval->format('%H:%i:%s'));
40 | }
41 |
42 | function getDateFromString($str) {
43 | return DateTimeImmutable::createFromFormat('H:i:s', $str);
44 | }
45 |
46 | function getFirstDayOfMonth($date) {
47 | $time = getDateAsDateTime($date)->getTimestamp();
48 | return new DateTime(date('Y-m-1', $time));
49 | }
50 |
51 | function getLastDayOfMonth($date) {
52 | $time = getDateAsDateTime($date)->getTimestamp();
53 | return new DateTime(date('Y-m-t', $time));
54 | }
55 |
56 | function getSecondsFromDateInterval($interval) {
57 | $d1 = new DateTimeImmutable();
58 | $d2 = $d1->add($interval);
59 | return $d2->getTimestamp() - $d1->getTimestamp();
60 | }
61 |
62 | function isPastWorkday($date) {
63 | return !isWeekend($date) && isBefore($date, new DateTime());
64 | }
65 |
66 | function getTimeStringFromSeconds($seconds) {
67 | $h = intdiv($seconds, 3600);
68 | $m = intdiv($seconds % 3600, 60);
69 | $s = $seconds - ($h * 3600) - ($m * 60);
70 | return sprintf('%02d:%02d:%02d', $h, $m, $s);
71 | }
72 |
73 | function formatDateWithLocale($date, $pattern) {
74 | $time = getDateAsDateTime($date)->getTimestamp();
75 | return strftime($pattern, $time);
76 | }
--------------------------------------------------------------------------------
/innout/src/config/loader.php:
--------------------------------------------------------------------------------
1 | 0) {
10 | foreach($params as $key => $value) {
11 | if(strlen($key) > 0) {
12 | ${$key} = $value;
13 | }
14 | }
15 | }
16 |
17 | require_once(VIEW_PATH . "/{$viewName}.php");
18 | }
19 |
20 | function loadTemplateView($viewName, $params = array()) {
21 |
22 | if(count($params) > 0) {
23 | foreach($params as $key => $value) {
24 | if(strlen($key) > 0) {
25 | ${$key} = $value;
26 | }
27 | }
28 | }
29 |
30 | $user = $_SESSION['user'];
31 | $workingHours = WorkingHours::loadFromUserAndDate($user->id, date('Y-m-d'));
32 | $workedInterval = $workingHours->getWorkedInterval()->format('%H:%I:%S');
33 | $exitTime = $workingHours->getExitTime()->format('H:i:s');
34 | $activeClock = $workingHours->getActiveClock();
35 |
36 | require_once(TEMPLATE_PATH . "/header.php");
37 | require_once(TEMPLATE_PATH . "/left.php");
38 | require_once(VIEW_PATH . "/{$viewName}.php");
39 | require_once(TEMPLATE_PATH . "/footer.php");
40 | }
41 |
42 | function renderTitle($title, $subtitle, $icon = null) {
43 | require_once(TEMPLATE_PATH . "/title.php");
44 | }
--------------------------------------------------------------------------------
/innout/src/config/session.php:
--------------------------------------------------------------------------------
1 | is_admin) {
9 | addErrorMsg('Acesso negado!');
10 | header('Location: day_records.php');
11 | exit();
12 | }
13 | }
--------------------------------------------------------------------------------
/innout/src/config/utils.php:
--------------------------------------------------------------------------------
1 | 'success',
6 | 'message' => $msg
7 | ];
8 | }
9 |
10 | function addErrorMsg($msg) {
11 | $_SESSION['message'] = [
12 | 'type' => 'error',
13 | 'message' => $msg
14 | ];
15 | }
--------------------------------------------------------------------------------
/innout/src/controllers/data_generator.php:
--------------------------------------------------------------------------------
1 | 5');
4 |
5 | function getDayTemplateByOdds($regularRate, $extraRate, $lazyRate) {
6 | $regularDayTemplate = [
7 | 'time1' => '08:00:00',
8 | 'time2' => '12:00:00',
9 | 'time3' => '13:00:00',
10 | 'time4' => '17:00:00',
11 | 'worked_time' => DAILY_TIME
12 | ];
13 |
14 | $extraHourDayTemplate = [
15 | 'time1' => '08:00:00',
16 | 'time2' => '12:00:00',
17 | 'time3' => '13:00:00',
18 | 'time4' => '18:00:00',
19 | 'worked_time' => DAILY_TIME + 3600
20 | ];
21 |
22 | $lazyDayTemplate = [
23 | 'time1' => '08:30:00',
24 | 'time2' => '12:00:00',
25 | 'time3' => '13:00:00',
26 | 'time4' => '17:00:00',
27 | 'worked_time' => DAILY_TIME - 1800
28 | ];
29 |
30 | $value = rand(0, 100);
31 | if($value <= $regularRate) {
32 | return $regularDayTemplate;
33 | } elseif($value <= $regularRate + $extraRate) {
34 | return $extraHourDayTemplate;
35 | } else {
36 | return $lazyDayTemplate;
37 | }
38 | }
39 |
40 | function populateWorkingHours($userId, $initialDate, $regularRate, $extraRate, $lazyRate) {
41 | $currentDate = $initialDate;
42 | $yesterday = new DateTime();
43 | $yesterday->modify('-1 day');
44 | $columns = ['user_id' => $userId, 'work_date' => $currentDate];
45 |
46 | while(isBefore($currentDate, $yesterday)) {
47 | if(!isWeekend($currentDate)) {
48 | $template = getDayTemplateByOdds($regularRate, $extraRate, $lazyRate);
49 | $columns = array_merge($columns, $template);
50 | $workingHours = new WorkingHours($columns);
51 | $workingHours->insert();
52 | }
53 | $currentDate = getNextDay($currentDate)->format('Y-m-d');
54 | $columns['work_date'] = $currentDate;
55 | }
56 | }
57 |
58 | $lastMonth = strtotime('first day of last month');
59 | populateWorkingHours(1, date('Y-m-1'), 70, 20, 10);
60 | populateWorkingHours(3, date('Y-m-d', $lastMonth), 20, 75, 5);
61 | populateWorkingHours(4, date('Y-m-d', $lastMonth), 20, 10, 70);
62 |
63 | echo 'Tudo certo :)';
--------------------------------------------------------------------------------
/innout/src/controllers/day_records.php:
--------------------------------------------------------------------------------
1 | getTimestamp();
6 | $today = strftime('%d de %B de %Y', $date);
7 | loadTemplateView('day_records', ['today' => $today]);
--------------------------------------------------------------------------------
/innout/src/controllers/innout.php:
--------------------------------------------------------------------------------
1 | id, date('Y-m-d'));
7 |
8 | try {
9 | $currentTime = strftime('%H:%M:%S', time());
10 |
11 | if($_POST['forcedTime']) {
12 | $currentTime = $_POST['forcedTime'];
13 | }
14 |
15 | $records->innout($currentTime);
16 | addSuccessMsg('Ponto inserido com sucesso!');
17 | } catch(AppException $e) {
18 | addErrorMsg($e->getMessage());
19 | }
20 |
21 | header('Location: day_records.php');
--------------------------------------------------------------------------------
/innout/src/controllers/login.php:
--------------------------------------------------------------------------------
1 | 0) {
7 | $login = new Login($_POST);
8 | try {
9 | $user = $login->checkLogin();
10 | $_SESSION['user'] = $user;
11 | header("Location: day_records.php");
12 | } catch(AppException $e) {
13 | $exception = $e;
14 | }
15 | }
16 |
17 |
18 | loadView('login', $_POST + ['exception' => $exception]);
--------------------------------------------------------------------------------
/innout/src/controllers/logout.php:
--------------------------------------------------------------------------------
1 | format('Y-m');
9 | $seconds = WorkingHours::getWorkedTimeInMonth($yearAndMonth);
10 | $hoursInMonth = explode(':', getTimeStringFromSeconds($seconds))[0];
11 |
12 | loadTemplateView('manager_report', [
13 | 'activeUsersCount' => $activeUsersCount,
14 | 'absentUsers' => $absentUsers,
15 | 'hoursInMonth' => $hoursInMonth,
16 | ]);
--------------------------------------------------------------------------------
/innout/src/controllers/monthly_report.php:
--------------------------------------------------------------------------------
1 | id;
9 | $users = null;
10 | if($user->is_admin) {
11 | $users = User::get();
12 | $selectedUserId = $_POST['user'] ? $_POST['user'] : $user->id;
13 | }
14 |
15 | $selectedPeriod = $_POST['period'] ? $_POST['period'] : $currentDate->format('Y-m');
16 | $periods = [];
17 | for($yearDiff = 0; $yearDiff <= 2; $yearDiff++) {
18 | $year = date('Y') - $yearDiff;
19 | for($month = 12; $month >= 1; $month--) {
20 | $date = new DateTime("{$year}-{$month}-1");
21 | $periods[$date->format('Y-m')] = strftime('%B de %Y', $date->getTimestamp());
22 | }
23 | }
24 |
25 | $registries = WorkingHours::getMonthlyReport($selectedUserId, $selectedPeriod);
26 |
27 | $report = [];
28 | $workDay = 0;
29 | $sumOfWorkedTime = 0;
30 | $lastDay = getLastDayOfMonth($selectedPeriod)->format('d');
31 |
32 | for($day = 1; $day <= $lastDay; $day++) {
33 | $date = $selectedPeriod . '-' . sprintf('%02d', $day);
34 | $registry = $registries[$date];
35 |
36 | if(isPastWorkday($date)) $workDay++;
37 |
38 | if($registry) {
39 | $sumOfWorkedTime += $registry->worked_time;
40 | array_push($report, $registry);
41 | } else {
42 | array_push($report, new WorkingHours([
43 | 'work_date' => $date,
44 | 'worked_time' => 0
45 | ]));
46 | }
47 | }
48 |
49 | $expectedTime = $workDay * DAILY_TIME;
50 | $balance = getTimeStringFromSeconds(abs($sumOfWorkedTime - $expectedTime));
51 | $sign = ($sumOfWorkedTime >= $expectedTime) ? '+' : '-';
52 |
53 | loadTemplateView('monthly_report', [
54 | 'report' => $report,
55 | 'sumOfWorkedTime' => getTimeStringFromSeconds($sumOfWorkedTime),
56 | 'balance' => "{$sign}{$balance}",
57 | 'selectedPeriod' => $selectedPeriod,
58 | 'periods' => $periods,
59 | 'selectedUserId' => $selectedUserId,
60 | 'users' => $users,
61 | ]);
62 |
--------------------------------------------------------------------------------
/innout/src/controllers/save_user.php:
--------------------------------------------------------------------------------
1 | $_GET['update']]);
10 | $userData = $user->getValues();
11 | $userData['password'] = null;
12 | } elseif(count($_POST) > 0) {
13 | try {
14 | $dbUser = new User($_POST);
15 | if($dbUser->id) {
16 | $dbUser->update();
17 | addSuccessMsg('Usuário alterado com sucesso!');
18 | header('Location: users.php');
19 | exit();
20 | } else {
21 | $dbUser->insert();
22 | addSuccessMsg('Usuário cadastrado com sucesso!');
23 | }
24 | $_POST = [];
25 | } catch(Exception $e) {
26 | $exception = $e;
27 | } finally {
28 | $userData = $_POST;
29 | }
30 | }
31 |
32 | loadTemplateView('save_user', $userData + ['exception' => $exception]);
--------------------------------------------------------------------------------
/innout/src/controllers/test.php:
--------------------------------------------------------------------------------
1 | getMessage(), 'FOREIGN KEY')) {
13 | addErrorMsg('Não é possível excluir o usuário com registros de ponto.');
14 | } else {
15 | $exception = $e;
16 | }
17 | }
18 | }
19 |
20 | $users = User::get();
21 | foreach($users as $user) {
22 | $user->start_date = (new DateTime($user->start_date))->format('d/m/Y');
23 | if($user->end_date) {
24 | $user->end_date = (new DateTime($user->end_date))->format('d/m/Y');
25 | }
26 | }
27 |
28 | loadTemplateView('users', [
29 | 'users' => $users,
30 | 'exception' => $exception
31 | ]);
--------------------------------------------------------------------------------
/innout/src/env.sample.ini:
--------------------------------------------------------------------------------
1 | host = ""
2 | username = ""
3 | password = ""
4 | database = ""
5 |
--------------------------------------------------------------------------------
/innout/src/exceptions/AppException.php:
--------------------------------------------------------------------------------
1 | errors = $errors;
12 | }
13 |
14 | public function getErrors() {
15 | return $this->errors;
16 | }
17 |
18 | public function get($att) {
19 | return $this->errors[$att];
20 | }
21 | }
--------------------------------------------------------------------------------
/innout/src/models/Login.php:
--------------------------------------------------------------------------------
1 | email) {
8 | $errors['email'] = 'E-mail é um campo obrigatório.';
9 | }
10 |
11 | if(!$this->password) {
12 | $errors['password'] = 'Por favor, informe a senha.';
13 | }
14 |
15 | if(count($errors) > 0) {
16 | throw new ValidationException($errors);
17 | }
18 | }
19 |
20 | public function checkLogin() {
21 | $this->validate();
22 | $user = User::getOne(['email' => $this->email]);
23 | if($user) {
24 | if($user->end_date) {
25 | throw new AppException('Usuário está desligado da empresa.');
26 | }
27 |
28 | if(password_verify($this->password, $user->password)) {
29 | return $user;
30 | }
31 | }
32 | throw new AppException('Usuário e Senha inválidos.');
33 | }
34 | }
--------------------------------------------------------------------------------
/innout/src/models/Model.php:
--------------------------------------------------------------------------------
1 | loadFromArray($arr, $sanitize);
10 | }
11 |
12 | public function loadFromArray($arr, $sanitize = true) {
13 | if($arr) {
14 | // $conn = Database::getConnection();
15 | foreach($arr as $key => $value) {
16 | $cleanValue = $value;
17 | if($sanitize && isset($cleanValue)) {
18 | $cleanValue = strip_tags(trim($cleanValue));
19 | $cleanValue = htmlentities($cleanValue, ENT_NOQUOTES);
20 | // $cleanValue = mysqli_real_escape_string($conn, $cleanValue);
21 | }
22 | $this->$key = $cleanValue;
23 | }
24 | // $conn->close();
25 | }
26 | }
27 |
28 | public function __get($key) {
29 | return $this->values[$key];
30 | }
31 |
32 | public function __set($key, $value) {
33 | $this->values[$key] = $value;
34 | }
35 |
36 | public function getValues() {
37 | return $this->values;
38 | }
39 |
40 | public static function getOne($filters = [], $columns = '*') {
41 | $class = get_called_class();
42 | $result = static::getResultSetFromSelect($filters, $columns);
43 | return $result ? new $class($result->fetch_assoc()) : null;
44 | }
45 |
46 | public static function get($filters = [], $columns = '*') {
47 | $objects = [];
48 | $result = static::getResultSetFromSelect($filters, $columns);
49 | if($result) {
50 | $class = get_called_class();
51 | while($row = $result->fetch_assoc()) {
52 | array_push($objects, new $class($row));
53 | }
54 | }
55 | return $objects;
56 | }
57 |
58 | public static function getResultSetFromSelect($filters = [], $columns = '*') {
59 | $sql = "SELECT ${columns} FROM "
60 | . static::$tableName
61 | . static::getFilters($filters);
62 | $result = Database::getResultFromQuery($sql);
63 | if($result->num_rows === 0) {
64 | return null;
65 | } else {
66 | return $result;
67 | }
68 | }
69 |
70 | public function insert() {
71 | $sql = "INSERT INTO " . static::$tableName . " ("
72 | . implode(",", static::$columns) . ") VALUES (";
73 | foreach(static::$columns as $col) {
74 | $sql .= static::getFormatedValue($this->$col) . ",";
75 | }
76 | $sql[strlen($sql) - 1] = ')';
77 | $id = Database::executeSQL($sql);
78 | $this->id = $id;
79 | }
80 |
81 | public function update() {
82 | $sql = "UPDATE " . static::$tableName . " SET ";
83 | foreach(static::$columns as $col) {
84 | $sql .= " ${col} = " . static::getFormatedValue($this->$col) . ",";
85 | }
86 | $sql[strlen($sql) - 1] = ' ';
87 | $sql .= "WHERE id = {$this->id}";
88 | Database::executeSQL($sql);
89 | }
90 |
91 | public static function getCount($filters = []) {
92 | $result = static::getResultSetFromSelect(
93 | $filters, 'count(*) as count');
94 | return $result->fetch_assoc()['count'];
95 | }
96 |
97 | public function delete() {
98 | static::deleteById($this->id);
99 | }
100 |
101 | public static function deleteById($id) {
102 | $sql = "DELETE FROM " . static::$tableName . " WHERE id = {$id}";
103 | Database::executeSQL($sql);
104 | }
105 |
106 | private static function getFilters($filters) {
107 | $sql = '';
108 | if(count($filters) > 0) {
109 | $sql .= " WHERE 1 = 1";
110 | foreach($filters as $column => $value) {
111 | if($column == 'raw') {
112 | $sql .= " AND {$value}";
113 | } else {
114 | $sql .= " AND ${column} = " . static::getFormatedValue($value);
115 | }
116 | }
117 | }
118 | return $sql;
119 | }
120 |
121 | private static function getFormatedValue($value) {
122 | if(is_null($value)) {
123 | return "null";
124 | } elseif(gettype($value) === 'string') {
125 | return "'${value}'";
126 | } else {
127 | return $value;
128 | }
129 | }
130 | }
--------------------------------------------------------------------------------
/innout/src/models/User.php:
--------------------------------------------------------------------------------
1 | 'end_date IS NULL']);
16 | }
17 |
18 | public function insert() {
19 | $this->validate();
20 | $this->is_admin = $this->is_admin ? 1 : 0;
21 | if(!$this->end_date) $this->end_date = null;
22 | return parent::insert();
23 | }
24 |
25 | public function update() {
26 | $this->validate();
27 | $this->is_admin = $this->is_admin ? 1 : 0;
28 | if(!$this->end_date) $this->end_date = null;
29 | $this->password = password_hash($this->password, PASSWORD_DEFAULT);
30 | return parent::update();
31 | }
32 |
33 | private function validate() {
34 | $errors = [];
35 |
36 | if(!$this->name) {
37 | $errors['name'] = 'Nome é um campo abrigatório.';
38 | }
39 |
40 | if(!$this->email) {
41 | $errors['email'] = 'Email é um campo abrigatório.';
42 | } elseif(!filter_var($this->email, FILTER_VALIDATE_EMAIL)) {
43 | $errors['email'] = 'Email inválido.';
44 | }
45 |
46 | if(!$this->start_date) {
47 | $errors['start_date'] = 'Data de Admissão é um campo abrigatório.';
48 | } elseif(!DateTime::createFromFormat('Y-m-d', $this->start_date)) {
49 | $errors['start_date'] = 'Data de Admissão deve seguir o padrão dd/mm/aaaa.';
50 | }
51 |
52 | if($this->end_date && !DateTime::createFromFormat('Y-m-d', $this->end_date)) {
53 | $errors['end_date'] = 'Data de Desligamento deve seguir o padrão dd/mm/aaaa.';
54 | }
55 |
56 | if(!$this->password) {
57 | $errors['password'] = 'Senha é um campo abrigatório.';
58 | }
59 |
60 | if(!$this->confirm_password) {
61 | $errors['confirm_password'] = 'Confirmação de Senha é um campo abrigatório.';
62 | }
63 |
64 | if($this->password && $this->confirm_password
65 | && $this->password !== $this->confirm_password) {
66 | $errors['password'] = 'As senhas não são iguais.';
67 | $errors['confirm_password'] = 'As senhas não são iguais.';
68 | }
69 |
70 | if(count($errors) > 0) {
71 | throw new ValidationException($errors);
72 | }
73 | }
74 | }
--------------------------------------------------------------------------------
/innout/src/models/WorkingHours.php:
--------------------------------------------------------------------------------
1 | $userId, 'work_date' => $workDate]);
18 |
19 | if(!$registry) {
20 | $registry = new WorkingHours([
21 | 'user_id' => $userId,
22 | 'work_date' => $workDate,
23 | 'worked_time' => 0
24 | ]);
25 | }
26 |
27 | return $registry;
28 | }
29 |
30 | public function getNextTime() {
31 | if(!$this->time1) return 'time1';
32 | if(!$this->time2) return 'time2';
33 | if(!$this->time3) return 'time3';
34 | if(!$this->time4) return 'time4';
35 | return null;
36 | }
37 |
38 | public function getActiveClock() {
39 | $nextTime = $this->getNextTime();
40 | if($nextTime === 'time1' || $nextTime === 'time3') {
41 | return 'exitTime';
42 | } elseif($nextTime === 'time2' || $nextTime === 'time4') {
43 | return 'workedInterval';
44 | } else {
45 | return null;
46 | }
47 | }
48 |
49 | public function innout($time) {
50 | $timeColumn = $this->getNextTime();
51 | if(!$timeColumn) {
52 | throw new AppException("Você já fez os 4 batimentos do dia!");
53 | }
54 | $this->$timeColumn = $time;
55 | $this->worked_time = getSecondsFromDateInterval($this->getWorkedInterval());
56 | if($this->id) {
57 | $this->update();
58 | } else {
59 | $this->insert();
60 | }
61 | }
62 |
63 | function getWorkedInterval() {
64 | [$t1, $t2, $t3, $t4] = $this->getTimes();
65 |
66 | $part1 = new DateInterval('PT0S');
67 | $part2 = new DateInterval('PT0S');
68 |
69 | if($t1) $part1 = $t1->diff(new DateTime());
70 | if($t2) $part1 = $t1->diff($t2);
71 | if($t3) $part2 = $t3->diff(new DateTime());
72 | if($t4) $part2 = $t3->diff($t4);
73 |
74 | return sumIntervals($part1, $part2);
75 | }
76 |
77 | function getLunchInterval() {
78 | [, $t2, $t3,] = $this->getTimes();
79 | $lunchInterval = new DateInterval('PT0S');
80 |
81 | if($t2) $lunchInterval = $t2->diff(new DateTime());
82 | if($t3) $lunchInterval = $t2->diff($t3);
83 |
84 | return $lunchInterval;
85 | }
86 |
87 | function getExitTime() {
88 | [$t1,,, $t4] = $this->getTimes();
89 | $workday = DateInterval::createFromDateString('8 hours');
90 |
91 | if(!$t1) {
92 | return (new DateTimeImmutable())->add($workday);
93 | } elseif($t4) {
94 | return $t4;
95 | } else {
96 | $total = sumIntervals($workday, $this->getLunchInterval());
97 | return $t1->add($total);
98 | }
99 | }
100 |
101 | function getBalance() {
102 | if(!$this->time1 && !isPastWorkday($this->work_date)) return '';
103 | if($this->worked_time == DAILY_TIME) return '-';
104 |
105 | $balance = $this->worked_time - DAILY_TIME;
106 | $balanceString = getTimeStringFromSeconds(abs($balance));
107 | $sign = $this->worked_time >= DAILY_TIME ? '+' : '-';
108 | return "{$sign}{$balanceString}";
109 | }
110 |
111 | public static function getAbsentUsers() {
112 | $today = new DateTime();
113 | $result = Database::getResultFromQuery("
114 | SELECT name FROM users
115 | WHERE end_date is NULL
116 | AND id NOT IN (
117 | SELECT user_id FROM working_hours
118 | WHERE work_date = '{$today->format('Y-m-d')}'
119 | AND time1 IS NOT NULL
120 | )
121 | ");
122 |
123 | $absentUsers = [];
124 | if($result->num_rows > 0) {
125 | while($row = $result->fetch_assoc()) {
126 | array_push($absentUsers, $row['name']);
127 | }
128 | }
129 |
130 | return $absentUsers;
131 | }
132 |
133 | public static function getWorkedTimeInMonth($yearAndMonth) {
134 | $startDate = (new DateTime("{$yearAndMonth}-1"))->format('Y-m-d');
135 | $endDate = getLastDayOfMonth($yearAndMonth)->format('Y-m-d');
136 | $result = static::getResultSetFromSelect([
137 | 'raw' => "work_date BETWEEN '{$startDate}' AND '{$endDate}'"
138 | ], "sum(worked_time) as sum");
139 | return $result->fetch_assoc()['sum'];
140 | }
141 |
142 | public static function getMonthlyReport($userId, $date) {
143 | $registries = [];
144 | $startDate = getFirstDayOfMonth($date)->format('Y-m-d');
145 | $endDate = getLastDayOfMonth($date)->format('Y-m-d');
146 |
147 | $result = static::getResultSetFromSelect([
148 | 'user_id' => $userId,
149 | 'raw' => "work_date between '{$startDate}' AND '{$endDate}'"
150 | ]);
151 |
152 | if($result) {
153 | while($row = $result->fetch_assoc()) {
154 | $registries[$row['work_date']] = new WorkingHours($row);
155 | }
156 | }
157 |
158 | return $registries;
159 | }
160 |
161 | private function getTimes() {
162 | $times = [];
163 |
164 | $this->time1 ? array_push($times, getDateFromString($this->time1)) : array_push($times, null);
165 | $this->time2 ? array_push($times, getDateFromString($this->time2)) : array_push($times, null);
166 | $this->time3 ? array_push($times, getDateFromString($this->time3)) : array_push($times, null);
167 | $this->time4 ? array_push($times, getDateFromString($this->time4)) : array_push($times, null);
168 |
169 | return $times;
170 | }
171 | }
--------------------------------------------------------------------------------
/innout/src/views/day_records.php:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
15 |
16 |
17 | Entrada 1: = $workingHours->time1 ?? '---' ?>
18 | Saída 1: = $workingHours->time2 ?? '---' ?>
19 |
20 |
21 | Entrada 2: = $workingHours->time3 ?? '---' ?>
22 | Saída 2: = $workingHours->time4 ?? '---' ?>
23 |
24 |
25 |
31 |
32 |
33 |
42 |
43 |
--------------------------------------------------------------------------------
/innout/src/views/login.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | In N' Out
12 |
13 |
14 |
50 |
51 |
--------------------------------------------------------------------------------
/innout/src/views/manager_report.php:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
11 |
12 |
13 |
Qtde de Funcionários
14 |
= $activeUsersCount ?>
15 |
16 |
17 |
18 |
Faltas
19 |
= count($absentUsers) ?>
20 |
21 |
22 |
23 |
Horas no Mês
24 |
= $hoursInMonth ?>
25 |
26 |
27 |
28 | 0): ?>
29 |
30 |
34 |
35 |
36 |
37 | Nome |
38 |
39 |
40 |
41 |
42 | = $name ?> |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
--------------------------------------------------------------------------------
/innout/src/views/monthly_report.php:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
36 |
37 |
38 |
39 | Dia |
40 | Entrada 1 |
41 | Saída 1 |
42 | Entrada 2 |
43 | Saída 2 |
44 | Saldo |
45 |
46 |
47 |
48 |
49 | = formatDateWithLocale($registry->work_date, '%A, %d de %B de %Y') ?> |
50 | = $registry->time1 ?> |
51 | = $registry->time2 ?> |
52 | = $registry->time3 ?> |
53 | = $registry->time4 ?> |
54 | = $registry->getBalance() ?> |
55 |
56 |
57 |
58 | Horas Trabalhadas |
59 | = $sumOfWorkedTime ?> |
60 | Saldo Mensal |
61 | = $balance ?> |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/innout/src/views/save_user.php:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
90 |
--------------------------------------------------------------------------------
/innout/src/views/template/footer.php:
--------------------------------------------------------------------------------
1 |
6 |
7 |