• Nenhum resultado encontrado

Gravando e editando tarefas dentro da classe

No documento Book_ Desenvolvimento Web Com PHP e MySQL (páginas 103-106)

Gravando e editando tarefas dentro da classe

 Vamos mover também a gravação de novas tarefas e a edição de tarefas para den- tro da classe Tarefas. Aqui faremos basicamente os mesmos passos já feitos para mover a busca de tarefas para dentro da classe. Comece movendo as funções gravar_tarefa() e editar_tarefa() para métodos da classe, depois remova o parâmetro $conexao e, por último, troque o uso da variável $conexao pelo atributo $this->conexao. O método gravar_tarefa() fica assim:

<?php  // Arquivo classes/Tarefas.php ... class Tarefas { ...

public function gravar_tarefa($tarefa) {

$sqlGravar = " INSERT INTO tarefas 189

13.4. Gravando e editando tarefas dentro da classe Casa do Código

(nome, descricao, prioridade, prazo, concluida)  VALUES ( '{$tarefa['nome']}', '{$tarefa['descricao']}', {$tarefa['prioridade']}, '{$tarefa['prazo']}', {$tarefa['concluida']} ) "; mysqli_query($this->conexao, $sqlGravar);

} } ... ...

E o método editar_tarefa() fica assim: E o método editar_tarefa() fica assim: <?php

<?php

 // Arquivo class

 // Arquivo classes/Tes/Tarefarefas.phpas.php ... ... class Tarefas class Tarefas { { ... ... public

public function function editar_tarefeditar_tarefa($tarefa($tarefa)a) {

{

$sqlEditar = " $sqlEditar = " UPDATE tarefas SET UPDATE tarefas SET

nome = '{$tarefa['nome']}', nome = '{$tarefa['nome']}', descricao = '{$tarefa['descricao']}', descricao = '{$tarefa['descricao']}', prioridade =

prioridade = {$tarefa[{$tarefa['prioridade']},'prioridade']}, prazo =

prazo = '{$tarefa['{$tarefa['prazo']}','prazo']}', concluida = {$tarefa['concluida']} concluida = {$tarefa['concluida']} WHERE id = {$tarefa['id']} WHERE id = {$tarefa['id']} "; "; mysqli_query($this->conexa

mysqli_query($this->conexao, o, $sqlEditar);$sqlEditar); } } ... ... 190 190 Casa do Código Casa do Código

Capítulo 13. Programando com orientação a objetos Capítulo 13. Programando com orientação a objetos Depois, Depois, basta basta alterar alterar o o uso uso das das funções funções gravar_tarefa() gravar_tarefa() e e

editar_tarefa() pelos métodos de mesmo nome. No arquivo tarefas.php: editar_tarefa() pelos métodos de mesmo nome. No arquivo tarefas.php: <?php <?php ... ... if (! $tem_erros) { if (! $tem_erros) { $tarefas->gravar_tarefa($tarefa); $tarefas->gravar_tarefa($tarefa); if (isset($_POST['lembre

if (isset($_POST['lembrete']) && $_te']) && $_POST['lembretePOST['lembrete'] == ''] == '1') {1') { ... ... E no arquivo editar.php: E no arquivo editar.php: <?php <?php ... ... if (! $tem_erros) { if (! $tem_erros) { $tarefas->editar_tarefa($tarefa); $tarefas->editar_tarefa($tarefa); if (isset($_POST['lembre

if (isset($_POST['lembrete']) && $_te']) && $_POST['lembretePOST['lembrete'] == ''] == '1') {1') { ...

...

Com isso, temos mais duas funções transformadas em métodos. Com isso, temos mais duas funções transformadas em métodos. Perceba

Perceba que o arquivo que o arquivo

banco.php está esvaziando e agora tem apenas a conexao banco.php está esvaziando e agora tem apenas a conexao

com o MySQL e mais três funções ( buscar_anexos(), gravar_anexo() e com o MySQL e mais três funções ( buscar_anexos(), gravar_anexo() e remover_tarefa()). Dessa forma, estamos movendo toda a lógica relacionada remover_tarefa()). Dessa forma, estamos movendo toda a lógica relacionada às tarefas para a classe Tarefas e isso é muito bom, porque fica fácil de encontrar às tarefas para a classe Tarefas e isso é muito bom, porque fica fácil de encontrar as regras e mais organizado.

as regras e mais organizado. 13.5

13.5

Usando o MySQLi orientado a objetos Usando o MySQLi orientado a objetos

 Até agora usamos diversas funções mysqli_ e uma coisa que incomoda

 Até agora usamos diversas funções mysqli_ e uma coisa que incomoda um poum poucouco é ter que ficar passando a variável com a conexão para cada função que precisamos é ter que ficar passando a variável com a conexão para cada função que precisamos usar. Seria bem mais interessante se a própria conexão tivesse maneiras de realizar usar. Seria bem mais interessante se a própria conexão tivesse maneiras de realizar os comandos SQL, certo?

os comandos SQL, certo? Por isso o

Por isso oMySQLiMySQLipossui uma forma orientada a objetos de trabalhar que é bempossui uma forma orientada a objetos de trabalhar que é bem interessante e não é difícil de aplicar na nossa aplicação.

interessante e não é difícil de aplicar na nossa aplicação. 191

13.5. Usando o MySQLi orientado a objetos 13.5. Usando o MySQLi orientado a objetos Casa do Código

Casa do Código

Lembra da função mysqli_connect() usada no arquivo banco.php? Ela Lembra da função mysqli_connect() usada no arquivo banco.php? Ela

retorna a conexão que usamos em todas as outras funções mysqli_ até agora. Esta retorna a conexão que usamos em todas as outras funções mysqli_ até agora. Esta linha pode ser substituída pela criação de um objeto da classe mysqli e este objeto linha pode ser substituída pela criação de um objeto da classe mysqli e este objeto possui os métodos necessários para trabalharmos com o banco de dados.

possui os métodos necessários para trabalharmos com o banco de dados. Para criar o objeto, precisamos do operador new e vamos usar a classe mysqli. Para criar o objeto, precisamos do operador new e vamos usar a classe mysqli. Então, no arquivo banco.php troque a linha que cria a variável $conexao pela Então, no arquivo banco.php troque a linha que cria a variável $conexao pela criação do objeto $mysqli:

criação do objeto $mysqli: <?php

<?php

$mysqli = new mysqli(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_BANCO); $mysqli = new mysqli(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_BANCO); if ($mysql->connect_errno) {

if ($mysql->connect_errno) {

echo "Problemas para conectar no banco. Verifique os dados!"; echo "Problemas para conectar no banco. Verifique os dados!"; die(); die(); } } ... ...

Perceba que a verificação do erro de conexão já é feita usando um atributo do Perceba que a verificação do erro de conexão já é feita usando um atributo do objeto $mysqli e não mais a função mysqli_connect_errno().

objeto $mysqli e não mais a função mysqli_connect_errno().  Agora, altere os locais que cria

 Agora, altere os locais que criam um m um objeto objeto da classda classe Tarefe Tarefas para recas para receberemeberem o objeto $mysqli. Isso acontece nos arquivos tarefas.php, editar.php e o objeto $mysqli. Isso acontece nos arquivos tarefas.php, editar.php e tarefa.php.

tarefa.php.

 Veja como fica no arquivo

 Veja como fica no arquivo tareftarefas.php:as.php: <?php

<?php ... ...

$tarefas = new Tarefas($mysqli); $tarefas = new Tarefas($mysqli); ...

...

É claro que isso vai refletir nos nossos métodos da classe Tarefas que usam as É claro que isso vai refletir nos nossos métodos da classe Tarefas que usam as funções mysqli_. Então, para acertar a classe Tarefas vamos começar mudando funções mysqli_. Então, para acertar a classe Tarefas vamos começar mudando o atributo $conexao para mysqli:

o atributo $conexao para mysqli: <?php <?php class Tarefas class Tarefas { { 192 192 Casa do Código Casa do Código

Capítulo 13. Programando com orientação a objetos Capítulo 13. Programando com orientação a objetos public $tarefas = array();

public $tarefas = array(); public $

public $tarefatarefa;; public $mysqli; public $mysqli; ...

...

 Altere também o construto

 Altere também o construtor da classe Tar da classe Tarefarefas para usar o os para usar o objeto $bjeto $mysqli:mysqli: <?php

<?php ... ...

public function __construct($novo_mysqli) public function __construct($novo_mysqli) { { $this->mysqli = $novo_mysqli; $this->mysqli = $novo_mysqli; } } ... ...

E por fim, precisamos apenas trocar o uso da função E por fim, precisamos apenas trocar o uso da função mysqli_query() mysqli_query() pelo método pelo método query() do objeto query() do objeto $mysqli. $mysqli.

 Veja como fica o método  Veja como fica o método

buscar_tarefa(), por exemplo: buscar_tarefa(), por exemplo: <?php

<?php ... ... function

function buscar_tarebuscar_tarefa($id)fa($id) {

{

$sqlBusca = 'SELECT * FROM tarefas WHERE id = ' . $id; $sqlBusca = 'SELECT * FROM tarefas WHERE id = ' . $id; $resultado

$resultado = = $this->mysqli->quer$this->mysqli->query($sqlBuscay($sqlBusca);); $this->taref

$this->tarefa a = = mysqli_fetch_asmysqli_fetch_assoc($ressoc($resultado);ultado); }

}

 Agora o resultado

 Agora o resultado é obtido é obtido usandousando $this->mysqli->query(

$this->mysqli->query(), pois ), pois oo

mysqli é um objeto que é um atributo da classe

mysqli é um objeto que é um atributo da classe TarefasTarefas. Perceba que não mu-. Perceba que não mu- damos o uso da função mysqli_fetch_assoc(), já que ela continua recebendo damos o uso da função mysqli_fetch_assoc(), já que ela continua recebendo

um resultado do método $mysqli->query(). um resultado do método $mysqli->query().  Altere os outros

 Altere os outros métodos dmétodos da classa classee Tarefas

Tarefas

para usar o método para usar o método this->mysqli->que

this->mysqli->query() no ry() no lugar da função mysqli_qlugar da função mysqli_query()uery()..  Antes de executar a aplic

 Antes de executar a aplicaçãação também o também é necesé necessário alterar as fsário alterar as funçõesunções remover_tarefa(), gravar_anexo() e buscar_anexos() que estão no ar- remover_tarefa(), gravar_anexo() e buscar_anexos() que estão no ar-

quivo banco.php e que ainda não transformamos em métodos da classe Tarefas. quivo banco.php e que ainda não transformamos em métodos da classe Tarefas. 193

193

13.5. Usando o MySQLi orientado a objetos 13.5. Usando o MySQLi orientado a objetos Casa do Código

Casa do Código

No caso, estas funções ainda recebem como parâmetro a conexão, mas agora vão re- No caso, estas funções ainda recebem como parâmetro a conexão, mas agora vão re- ceber o objeto $mysqli. Veja como fica a função remover_tarefa():

ceber o objeto $mysqli. Veja como fica a função remover_tarefa(): <?php

<?php

function remover_tarefa($mysqli, $id) function remover_tarefa($mysqli, $id) {

{

$sqlRemover = "DELETE FROM tarefas WHERE id = {$id}"; $sqlRemover = "DELETE FROM tarefas WHERE id = {$id}"; $mysqli->query($sqlRemover);

$mysqli->query($sqlRemover); }

}

Nesta função mudamos o parâmetro para $mysqli e removemos a função Nesta função mudamos o parâmetro para $mysqli e removemos a função mysqli_query(), trocando seu uso pelo método $mysqli->query(). mysqli_query(), trocando seu uso pelo método $mysqli->query(). Já as funções gravar_anexo() e buscar_anexos() ficam assim: Já as funções gravar_anexo() e buscar_anexos() ficam assim: <?php

<?php

function gravar_anexo($mysqli, $anexo) function gravar_anexo($mysqli, $anexo) {

{

$sqlGravar = "INSERT INTO ... "; $sqlGravar = "INSERT INTO ... "; $mysqli->query($sqlGravar); $mysqli->query($sqlGravar); }

}

function

function buscar_anebuscar_anexos($mysqli, $xos($mysqli, $tareftarefa_id)a_id) {

{

$sqlBusca = "SELECT * FROM anexos WHERE tarefa_id = {$tarefa_id}"; $sqlBusca = "SELECT * FROM anexos WHERE tarefa_id = {$tarefa_id}"; $resultado

$resultado = $= $mysqli->query(mysqli->query($sqlBusca$sqlBusca);); ...

... } }

Deixei em destaque apenas as linhas mais importantes e que sofreram as mu- Deixei em destaque apenas as linhas mais importantes e que sofreram as mu- danças para usar o objeto $mysqli. O restante das funções funciona da mesma danças para usar o objeto $mysqli. O restante das funções funciona da mesma maneira que antes.

maneira que antes.

Estas funções são usadas nos arquivos Estas funções são usadas nos arquivos tarefas.php, tarefas.php, editar.php e editar.php e remover.php. remover.php.

Então devemos alterar suas chamadas para passar o objeto Então devemos alterar suas chamadas para passar o objeto

$mysqli no lugar da variável $conexao. No arquivo remover.php o uso da $mysqli no lugar da variável $conexao. No arquivo remover.php o uso da função remover_tarefa() fica assim:

função remover_tarefa() fica assim: 194

194

Casa do Código Casa do Código

Capítulo 13. Programando com orientação a objetos Capítulo 13. Programando com orientação a objetos <?php <?php include "config.php"; include "config.php"; include "banco.php"; include "banco.php"; remover_taref

remover_tarefa($mysqli, a($mysqli, $_GET['id']);$_GET['id']); header(

header('Location: 'Location: tareftarefas.php');as.php');  Após alterar também as chamada

 Após alterar também as chamadas das funçõess das funções gravar_anexo() e

gravar_anexo() e

buscar_anexos() a aplicação já poderá ser executada normalmente. buscar_anexos() a aplicação já poderá ser executada normalmente.

O uso da biblioteca MySQLi como um objeto é interessante pois deixa quase tudo O uso da biblioteca MySQLi como um objeto é interessante pois deixa quase tudo dentro de um único objeto, em vez de usar várias funções, além de não ser necessário dentro de um único objeto, em vez de usar várias funções, além de não ser necessário ficar passando a variável com a conexão para cada função que é chamada.

ficar passando a variável com a conexão para cada função que é chamada.

No documento Book_ Desenvolvimento Web Com PHP e MySQL (páginas 103-106)

Documentos relacionados