├── .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 |
23 | 24 | 25 |
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 |
23 | 24 | 25 |
26 | 27 | 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 |
22 | 23 | 24 |
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 |
4 | 5 | 6 | 10 | 11 |
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 | -------------------------------------------------------------------------------- /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 | 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 |
11 |
12 | 13 | 17 |
18 |
19 | 20 | 24 |
25 | 26 |
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 |
4 | 5 | 13 | 14 |
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 | 96 | 97 | 98 | 99 |
100 | 101 | 102 |
103 |
104 | 108 |
109 |
110 | 111 |
112 |
113 |
114 | 115 |
116 | 117 |
118 |
119 | 120 | 124 |
125 | 126 |
127 |
128 |
129 | 130 | 135 |
136 | 137 |
138 |
139 |
140 |
141 |
142 | 143 | 147 |
148 | 149 |
150 |
151 |
152 | 153 | 157 |
158 | 159 |
160 |
161 |
162 |
163 |
164 | 165 | 170 |
171 | 172 |
173 |
174 |
175 | 176 | 181 |
182 | 183 |
184 |
185 |
186 | 187 |
-------------------------------------------------------------------------------- /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 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 42 | 43 | 44 | 45 | 46 |
CódigoNomeNascimentoE-mail
38 | 41 |
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 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 49 | 55 | 56 | 57 | 58 |
IDNomeEmailNascimentoAções
45 | 48 | 50 | 52 | Excluir 53 | 54 |
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 | 74 | 75 | 76 | 77 |
78 |
79 |
80 | 81 | 85 |
86 | 87 |
88 |
89 |
90 | 91 | 96 |
97 | 98 |
99 |
100 |
101 |
102 |
103 | 104 | 108 |
109 | 110 |
111 |
112 |
113 | 114 | 118 |
119 | 120 |
121 |
122 |
123 |
124 |
125 | 126 | 131 |
132 | 133 |
134 |
135 |
136 | 137 | 142 |
143 | 144 |
145 |
146 |
147 | 148 |
-------------------------------------------------------------------------------- /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 | 50 | 51 | 52 | 53 |
54 |
55 |
56 | 57 | 61 |
62 | 63 |
64 |
65 |
66 | 67 | 72 |
73 | 74 |
75 |
76 |
77 |
78 |
79 | 80 | 84 |
85 | 86 |
87 |
88 |
89 | 90 | 94 |
95 | 96 |
97 |
98 |
99 |
100 |
101 | 102 | 107 |
108 | 109 |
110 |
111 |
112 | 113 | 118 |
119 | 120 |
121 |
122 |
123 | 124 |
-------------------------------------------------------------------------------- /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 |

61 | 62 |
63 | 64 |
65 |
66 | 67 | 68 |
69 |
70 | 71 | 72 |
73 | 74 |
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 |
11 |
12 | 13 | 17 |
18 |
19 | 20 | 24 |
25 | 26 |
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 |
4 | 5 | 13 | 14 |
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 ""; 25 | } 26 | echo ''; 27 | } 28 | ?> 29 |
$valor
30 | 31 | 32 | $linha) { 34 | $style = $index % 2 === 0 ? 35 | 'background-color: lightblue;' : ''; 36 | echo ""; 37 | foreach($linha as $valor) { 38 | echo ""; 39 | } 40 | echo ''; 41 | } 42 | ?> 43 |
$valor
44 | 45 | -------------------------------------------------------------------------------- /exercicios/repeticoes/desafio_tabela_2.php: -------------------------------------------------------------------------------- 1 |
Desafio Tabela #02
2 | 3 |
4 |
5 | 6 | 7 | name="linhas" id="linhas"> 8 |
9 |
10 | 11 | 12 | name="colunas" id="colunas"> 13 |
14 | 15 |
16 | 17 | 18 | "; 28 | for($j = 0; $j < $colunas; $j++) { 29 | echo ""; 30 | $num++; 31 | } 32 | echo ""; 33 | } 34 | ?> 35 |
$num
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:
12 | 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 |
12 |

13 |

Os batimentos efetuados hoje

14 |
15 |
16 |
17 | Entrada 1: time1 ?? '---' ?> 18 | Saída 1: time2 ?? '---' ?> 19 |
20 |
21 | Entrada 2: time3 ?? '---' ?> 22 | Saída 2: time4 ?? '---' ?> 23 |
24 |
25 | 31 |
32 | 33 |
34 |
35 | 37 | 40 |
41 |
42 | 43 |
-------------------------------------------------------------------------------- /innout/src/views/login.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | In N' Out 12 | 13 | 14 |
15 |
16 |
17 | 18 | In 19 | N' 20 | Out 21 | 22 |
23 |
24 | 25 |
26 | 27 | 31 |
32 | 33 |
34 |
35 |
36 | 37 | 40 |
41 | 42 |
43 |
44 |
45 | 48 |
49 |
50 | 51 | -------------------------------------------------------------------------------- /innout/src/views/manager_report.php: -------------------------------------------------------------------------------- 1 |
2 | 9 | 10 |
11 |
12 | 13 |

Qtde de Funcionários

14 |

15 |
16 |
17 | 18 |

Faltas

19 |

20 |
21 |
22 | 23 |

Horas no Mês

24 |

25 |
26 |
27 | 28 | 0): ?> 29 |
30 |
31 |

Faltosos do Dia

32 |

Relação dos funcionários que ainda não bateram o ponto

33 |
34 |
35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
Nome
47 |
48 |
49 | 50 |
-------------------------------------------------------------------------------- /innout/src/views/monthly_report.php: -------------------------------------------------------------------------------- 1 |
2 | 9 |
10 |
11 |
12 | is_admin): ?> 13 | 22 | 23 | 31 | 34 |
35 |
36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 |
DiaEntrada 1Saída 1Entrada 2Saída 2Saldo
work_date, '%A, %d de %B de %Y') ?>time1 ?>time2 ?>time3 ?>time4 ?>getBalance() ?>
Horas TrabalhadasSaldo Mensal
65 |
66 |
-------------------------------------------------------------------------------- /innout/src/views/save_user.php: -------------------------------------------------------------------------------- 1 |
2 | 11 | 12 |
13 | 14 |
15 |
16 | 17 | 20 |
21 | 22 |
23 |
24 |
25 | 26 | 29 |
30 | 31 |
32 |
33 |
34 |
35 |
36 | 37 | 39 |
40 | 41 |
42 |
43 |
44 | 45 | 48 |
49 | 50 |
51 |
52 |
53 |
54 |
55 | 56 | 59 |
60 | 61 |
62 |
63 |
64 | 65 | 68 |
69 | 70 |
71 |
72 |
73 |
74 |
75 | 76 | > 79 |
80 | 81 |
82 |
83 |
84 |
85 | 86 | Cancelar 88 |
89 |
90 |
-------------------------------------------------------------------------------- /innout/src/views/template/footer.php: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /innout/src/views/template/header.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | In N' Out 12 | 13 | 14 |
15 | 22 | 25 |
26 | 47 |
-------------------------------------------------------------------------------- /innout/src/views/template/left.php: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /innout/src/views/template/messages.php: -------------------------------------------------------------------------------- 1 | 'error', 11 | 'message' => $exception->getMessage() 12 | ]; 13 | 14 | if(get_class($exception) === 'ValidationException') { 15 | $errors = $exception->getErrors(); 16 | } 17 | } 18 | 19 | $alertType = ''; 20 | 21 | if($message['type'] === 'error') { 22 | $alertType = 'danger'; 23 | } else { 24 | $alertType = 'success'; 25 | } 26 | ?> 27 | 28 | 29 | 33 | -------------------------------------------------------------------------------- /innout/src/views/template/title.php: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 |
6 |

7 |

8 |
9 |
-------------------------------------------------------------------------------- /innout/src/views/users.php: -------------------------------------------------------------------------------- 1 |
2 | 11 | 12 | Novo Usuário 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 40 | 41 | 42 | 43 |
NomeEmailData de AdmissãoData de DesligamentoAções
name ?>email ?>start_date ?>end_date ?> 31 | 33 | 34 | 35 | 37 | 38 | 39 |
44 |
--------------------------------------------------------------------------------