Buscar

08-PHP com PDO

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

PHP com PDO
PHP com PDO
 
Antes de falarmos especificamente do PDO precisamos entender uma
coisa muito importante: O PHP é e, ao mesmo tempo, não é orientado à
objetos. Sim, apesar de parecer estranho isso, não é difícil de entender os
motivos.
Originalmente o PHP nasceu e evoluiu sendo uma linguagem de scripts,
interpretada pelo servidor que o hospeda, entretanto o paradigma de
orientação a objetos passou a ser considerado na linguagem a partir de
sua versão 6 (embora na versão 5 já tenhamos o aparecimento de alguns
indícios), mas na versão 8 é que a orientação a objetos realmente ganhou
notoriedade no motor do PHP. Portanto, o PHP é uma linguagem que não
é orientada a objetos, mas com suporte a tal e, por isso, podemos dizer
que o PHP é e não é Orientado à Objetos.
Agora que esclarecemos um importante conceito da linguagem, podemos
voltar a falar do PDO, que significa PHP Data Object (Objeto de Dados
PHP) e é uma classe pronta com diversos recursos de acesso e
manipulação à bancos de dados e o mais legal e interessante: com
suporte aos principais bancos de dados relacionais do mercado (MySQL,
MariaDB, SQLServer, PostgreSQL, Oracle, SQLite etc.) de forma nativa,
ou seja, sem a necessidade de utilização de nenhuma biblioteca externa.
Para exemplificar o uso do PHP com PDO nada melhor do que
desenvolvemos um pequeno projeto. Vamos desenvolver um pequeno
sistema de ToDo (lista de tarefas).
Para começarmos este projeto, que será orientado a objetos, vamos
desenvolver nossa classe que representará uma tarefa (task). Seu
desenvolvimento pode ser visto abaixo, já com seu devido
encapsulamento dos atributos com os “métodos mágicos” (apenas um set
e apenas um get para todos os atributos).
<?php
 class Task {
 private $taskId;
 private $task;
 private $date;
 
 // Métodos "mágicos" de encapsulamento do PHP
 public function __get($atrib){
 return $this->$atrib;
 }
 
 public function __set($atrib, $value){
 $this->$atrib = $value;
 }
 }
?>
É natural que nossas tarefas fiquem armazenas no banco de dados e, por
isso, vamos utilizar uma única tabela para armazenar estes, devido à
simplicidade do contexto. O quadro abaixo mostra o script de criação da
tabela de tarefas. Repare que que há três colunas nessa tabela: a do
identificador único de cada tarefa, incremental e automático, o texto da
tarefa e um campo de hora, que usaremos para ordenar as tarefas
cronologicamente. Este campo possui um valor default, ou seja, padrão se
não informado, que utiliza a hora do servidor. Faça algumas inserções
manualmente, também, para já termos um banco preenchido para
testarmos a listagem.
CREATE TABLE tasks (
 taskId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
 task VARCHAR(300) NOT NULL,
 date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Agora podemos criar nossa classe de conexão com o banco de dados
para realizar as devidas manipulações. O quadro abaixo mostra o script
de como fazer isso utilizando a classe PDO do PHP. Apenas observe que
o nome do banco de dados pode variar caso a caso. O script em questão
mostra como o desenvolvido em aula.
<?php
 class Connection {
 private $serv = 'localhost'; //servidor
 private $db = 'aula_php_temp'; //nome do banco
 private $user = 'root'; //usuário do banco
 private $pass = ''; //senha do banco
 public function connect(){
 try{
 $conn = new PDO(
 "mysql:host=$this->serv;dbname=$this->db",
 "$this->user",
 "$this->pass"
 );
 return $conn;
 } catch(PDOException $e){
 echo $e->getMessage();
 }
 }
 }
?>
Pronto, agora que já temos nossa classe que representa uma tarefa no
sistema, nossa conexão e nosso banco de dados pronto, basta
começarmos a desenvolver o CRUD (Create, Read, Update, Delete –
Criar, Ler, Atualizar, Deletar). Para isso vamos criar dois scripts: Um que
será capaz de realizar todas as manipulações necessárias no banco de
dados (script de serviço – service) e outro que que recebe as requisições
do frontend e direciona para o backend (script de controle – controller). O
quadro abaixo mostra o script “taks_service.php”:
<?php
 class TaskService{
 private $conn; //conexão
 private $task; //tarefa
 //construtor da classe
 public function __construct(Connection $conn, Task $task){
 $this->conn = $conn->connect();
 $this->task = $task;
 }
 public function addTask(){
 $query = 'INSERT INTO tasks(task) VALUES(:task)'; //query
 $stm = $this->conn->prepare($query); //prepara a query
 $stm->bindValue(':task', $this->task->__get('task')); //substitui o
parâmetro
 $stm->execute(); //executa a query
 if($stm->rowCount() > 0){ 
 return true; //se inseriu, o rowCount do resultado é 1
 }
 return false; //caso cotrário, emcontramos um erro
 }
 public function getTasks() {
 $query = 'SELECT t.taskId, t.task, t.date
 FROM tasks as t
 ORDER BY t.date DESC'; //query
 $stm = $this->conn->prepare($query); //prepara
 $stm->execute(); //executa
 return $stm->fetchAll(PDO::FETCH_ASSOC); //retorna os dados
em um resultset
 //FETCH_ASSOC o array é indexado com os mesmos nomes das
colunas
 }
 public function deleteTask() {
 $query = "DELETE FROM tasks WHERE taskId = :taskId"; //query
 $stm = $this->conn->prepare($query); //prepara
 $stm->bindValue(':taskId', $this->task->__get('taskId')); //substitui o
id na query
 return $stm->execute(); //executa
 }
 }
?>
Agora o quadro abaixo mostra o script responsável por direcionar o as
requisições do frontend para o backend, baseado no tipo de acionamento
que ele recebe. O processo é bastante simples, feito com um “switch,
case” baseado no tipo de ação recebida. 
Neste projeto estamos tratando apenas três ações: Criação, listagem e
deleção. Sinta-se desafiado para criar a atualização de uma tarefa.
<?php
 //inclusão dos scripts necessários:
 require_once "task_model.php";
 require_once "task_service.php";
 require_once "connection.php";
 //verifica se o "act" está setado na requisição ou via variável
 $action = isset($_GET['act']) ? $_GET['act'] : $action;
 switch($action) {
 case 'getTasks': //dispara o evento de listar as tarefas
 $conn = new Connection();
 $taskService = new TaskService($conn, new Task());
 $tasks = $taskService->getTasks();
 break;
 case 'addTask': //dispara o evento de nova tarefa
 $task = new Task();
 $conn = new Connection();
 $task->__set('task', $_POST['task']);
 $taskService = new TaskService($conn, $task);
 if($taskService->addTask()) {
 echo 'Inseriu';
 header('Location: index.php');
 } else {
 echo 'Erro'; //apenas mostra que deu erro
 }
 break; 
 case 'deleteTask': //dispara o evento de deleção
 $conn = new Connection();
 $task = new Task();
 $task->__set('taskId', $_GET['taskId']);
 $taskService = new TaskService($conn, $task);
 if($taskService->deleteTask()) {
 header('Location: index.php');
 } else {
 echo 'Erro'; //apenas mostra que deu erro
 }
 break;
 default:
 header('Location: index.php');
 break;
 }
?>
Agora, finalmente podemos criar nosso frontend único, que é capas de
criar, listar e deletar tarefas, com um simplesformulário. O bloco abaixo
mostra o corpo do “index.php”. o cabeçalho (head) do arquivo é o padrão
de um arquivo html com Bootstrap, conforme o vídeo dessa aula mostra.
<body>
 <header>
 <nav class="navbar navbar-dark bg-primary">
 <a class="navbar-brand" href="index.php">
 <!-- ícone de: https://icons.getbootstrap.com/icons/card-checklist/
-->
 <svg xmlns="http://www.w3.org/2000/svg" width="32"
height="32" fill="currentColor" class="bi bi-card-checklist" viewBox="0 0 16
16">
 <path d="M14.5 3a.5.5 0 0 1 .5.5v9a.5.5 0 0 1-.5.5h-13a.5.5 0
0 1-.5-.5v-9a.5.5 0 0 1 .5-.5h13zm-13-1A1.5 1.5 0 0 0 0 3.5v9A1.5 1.5 0 0
0 1.5 14h13a1.5 1.5 0 0 0 1.5-1.5v-9A1.5 1.5 0 0 0 14.5 2h-13z"/>
 <path d="M7 5.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0
1-.5-.5zm-1.496-.854a.5.5 0 0 1 0 .708l-1.5 1.5a.5.5 0 0 1-.708
0l-.5-.5a.5.5 0 1 1 .708-.708l.146.147 1.146-1.147a.5.5 0 0 1 .708 0zM7
9.5a.5.5 0 0 1 .5-.5h5a.5.5 0 0 1 0 1h-5a.5.5 0 0 1-.5-.5zm-1.496-.854a.5.5
0 0 1 0 .708l-1.5 1.5a.5.5 0 0 1-.708 0l-.5-.5a.5.5 0 0 1 .708-.708l.146.147
1.146-1.147a.5.5 0 0 1 .708 0z"/>
 </svg>
 ToDo List
 </a>
 </nav>
 </header>
 <main>
 <div class="container pt-5">
 <h5>Incluir tarefa:</h5>
 <form method="POST" action="task_controller.php?
act=addTask">
 <div class="input-group">
 <input type="text" name="task" required class="form-control"
autofocus placeholder="Nova tarefa...">
 <div class="input-group-append">
 <button class="btn btn-primary"
type="submit">Adicionar</button>
 </div>
 </div>
 </form>
 <hr>
 <h2>Sua lita de tarefas:</h2>
 <?php foreach($tasks as $t) : ?>
 <ul>
 <li><?= $t["task"] ?> - <a href="task_controller.php?
act=deleteTask&taskId=<?=$t["taskId"]?>" class="btn btn-sm btn-
success">Concluir</a></li>
 </ul>
 <?php endforeach ?>
 </div>
 </main>
</body>
Prontinho. Terminamos de desenvolver nosso projeto completo com o
PHP com PDO. Não deixe de tentar melhorar este projeto e se aprofundar
em novos conceitos.
 
 
Atividade extra
Tente terminar o projeto desenvolvido nesta aula, incluindo a edição de
uma tarefa. Pode ser desenvolvida uma nova página para isso, onde a
tarefa é carregada em um campo de texto ou utilizar algo mais avançado,
como AJAX para que a edição ocorra na mesma tela inicial.
 
 
Referência Bibliográfica
Flatschart, F., HTML5 – Embarque imediato, Editora Brasport, 1ª Ed., 2011
Frain, B., Responsive Web Design with HTML5 and CSS, Editora Packt
Publishing, 3ª Ed., 2020
Libby, A., Gupta G., Talesra A., Responsive Web Design with HTML5 and
CSS3 Essentials, Editora Packt Publishing, 1ª Ed., 2016
Twitter Inc., Bootstrap, site oficial, disponível em
https://getbootstrap.com.br/, acessado em 16 de fevereiro de 2021
PHP, site oficial, disponível em http://www.php.net, acessado em 16 de
fevereiro de 2021
Ir para questão
https://getbootstrap.com.br/
http://www.php.net/

Continue navegando