Unidade D – Linguagem PHP com acesso a banco de dados – parte 2

Manutenção completa

Nosso objetivo é mostrar a manutenção completa da tabela de cidades (listar, incluir, alterar e excluir) na área administrativa do site (siteBD).  Para tanto, trabalharemos com uma estrutura de manutenção com os seguintes arquivos:

Arquivo Descrição
cidades_list.php É o arquivo para listar os dados de cidades. Contém código (X)HTML e PHP
cidades_form.php É o arquivo que contém o formulário para incluir e alterar dados. Contém código (X)HTML e PHP.
cidades.php É o gerenciador da manutenção. Este arquivo contém apenas código PHP e é responsável por receber as requisições do usuário e proceder a execução do código correspondente.

Os arquivos cidades_list.php e cidades_form.php inicialmente possuem a mesma estrutura do index.php. A partir desta estrutura básica, primeiro vamos incluir a parte (X)HTML para depois fazer a programação PHP.

Para começar, vamos ver como é a estrutura básica do arquivo cidades_list.php (figura D.14). Observe que a figura está mostrando apenas a parte de código que está na div conteudo,  pois já vimos na figura D.11 a estrutura básica. Por hora o código não possui programação PHP, apenas a estrutura (X)HTML. Na figura D.15 você pode conferir como fica a apresentação do cidades_list.php no navegador. Alguns apontamentos sobre o código:

- veja que existem alguns links, na linha 17, 30 e 33. Todos são direcionados para cidades.php, este arquivo é o gerenciador da manutenção, por isso, sempre ele será requisitado.Veja que é uma requisição GET passando por parâmetro um valor para acao. Este parâmetro acao (ação) indica qual a intenção do usuário, neste arquivo pode ser: incluir, alterar e excluir.

- entre as linhas 19 e 25 temos a primeira linha da tabela que é o cabeçalho;

- entre as linhas 26 e 35 temos a segunda linha da tabela. Esta linha posteriormente será repetida para cada registro da tabela cidades mostrando seus dados. Na penúltima coluna tem o link para alterar e na última coluna há um link para excluir que faz uma chamada da JavaScrip para confirmar a exclusão

Na figura D.16 pode ser analisado o código (X)HTML do formulário (cidades_form.php). Alguns apontamentos sobre o (X)HTML:

- linha 15 – o action do form faz referência ao cidades.php, ou seja, quando submeter o form (clicar em gravar) chamará o cidades.php;

- linha 20 – readonly indica que a caixa de texto é apenas leitura. O usuário não pode editar, isso porque o campo id de cidades é gerado automaticamente;

- linha 29 – possui um elemento select chamado uf sem options. Depois acrescentaremos as opções.

- linha 34 e 35- quando clicar no botão cancelar altera a location para cidades.php (chama o cidades.php);

- linha 36 – tem um campo oculto chamado acao. Logo veremos porque este campo é necessário.

- é muito importante saber o nome dos objetos criados no form, principalmente: id, nome, uf, acao. Vamos precisar depois.

A figura D.17 apresenta a visualização do cidades_form.php no navegador.

Agora vamos para a programação PHP que vai integrar os arquivos da listagem e formulário. O código referente ao gerenciador da manutenção, arquivo cidades.php é mostrados na figura D.18.

Vamos analisar todo código:

Linha 5 – o $_REQUEST[]  é um array super global do PHP  que pode ser usado para pegar dados que sejam recebidos tanto pelo método GET quanto pelo POST. $acao será o parâmetro utilizado para verificar a ação que o usuário selecionou, que pode ser incluir, alterar, excluir, entre outras. O valor para acao pode ser passado tanto por GET como POST, por isso estamos usando o $_REQUEST;

Linha 6 – a variável $redireciona quando possuir valor true vai redirecionar para a listagem das cidades. Inicialmente possui valor false;

Linha 8 – quando a $acao não possuir um valor, vamos sempre mostrar a listagem de cidades. Isso vai ocorre quando for chamado diretamente cidades.php sem passar nenhum parâmetro. Neste caso, executa o SQL para selecionar os registros de cidades em ordem de nome e faz o include do cidades_list.php que vai listar os dados;

Linhas 14 e 15 – quando a $acao for incluir faz o include do cidades_form.php que vem em branco.

Linhas 18 até 23 – quando a $acao for alterar, vai fazer a alteração de uma cidade cujo id (identificador) será recebido por parâmetro. A linha 19 pega o valor de id, para então na linha 20 montar o SQL que busca o registro da cidade e executa na linha 21. Após faz o include de cidades_form.php que mostrará o formulário com os dados da cidade.

Linhas  24 até 29 - quando a $acao for excluir, vai fazer a exclusão de uma cidade cujo id (identificador) será recebido por parâmetro. A linha 25 pega o valor de id, para então na linha 26 montar o SQL que busca o registro da cidade e executa na linha 27. Na linha 28 altera o valor da variável $redireciona para true (isto vai fazer voltar para a listagem atualizada).

Linhas 30 até 38 - quando a $acao for gravar_incluir, vai fazer a inclusão de uma cidade cujos dados vieram do formulário. Primeiro uma questão, de onde vem o valor gravar_incluir?  Deverá vir do formulário quando for uma inclusão. Veremos como fazer isso quando incluirmos programação PHP no cidades_form.php. Lembra que destacamos a importância de saber o nome dos objetos do formulário? Agora vamos precisar deles. Nas linhas 31 e 32 estamos recuperando a informação do nome e da UF da cidade que foram informados no formulário (usa método POST). Após montamos um SQL de inserção usando estes valores. Outra forma seria fazer diretamente o uso do $_POST no SQL, desta forma:

Fique a vontade para usar a forma que achar melhor. Na linha 34 o SQL é executado atribuindo o resultado para $rs. Na linha 35 testa se ocorreu erro e na linha 36 atribui uma mensagem de erro para variável $mensagem (se for o caso). Na linha 37 altera o valor da variável $redireciona para true (isto vai fazer voltar para a listagem atualizada).

Linhas 39 até 48 - quando a $acao for gravar_alterar, vai fazer a alteração de uma cidade cujos dados vieram do formulário. De onde vem o valor gravar_alterar?  Deverá vir do formulário quando for uma alteração. Veremos como fazer isso quando incluirmos programação PHP no cidades_form.php. Nas linhas 40, 41 e 42 estamos recuperando a informação id, nome e UF da cidade do formulário (usa método POST). Após montamos um SQL de alteração usando estes valores. Na linha 44 o SQL é executado atribuindo o resultado para $rs. Na linha 45 testa se ocorreu erro e na linha 46 atribui uma mensagem de erro para variável $mensagem(se for o caso). Na linha 47 altera o valor da variável $redireciona para true (isto vai fazer voltar para a listagem atualizada).

Linhas 50 até 52 – se a variável $mensagem possuir algum valor, faz mostrar a mensagem usando JavaScript.

Linhas 54 até 56 – se a variável $redireciona possuir valor true, usa JavaScript para redirecionar para  cidades.php(vai mostrar a listagem).

Nosso cidades.php está pronto. Agora precisamos retornar ao cidades_list.php e ao cidades_form.php para incluir a programação PHP.  Com esta estrutura que trabalhamos, teremos pouca codificação PHP neste dois arquivos. A maior parte da codificação é no cidades.php. Isso é interessante, pois facilita a manutenção posterior do código. Vamos ver agora o código completo dos arquivos cidades_list.php e cidades_form.php e alguns comentários.

cidades_list.php

A figura D.19 apresenta o cidades_list.php com a inclusão da programação PHP. Vamos comentar agora o que programamos neste arquivo:

- Para mostrar todas as cidades retornadas a partir do SQL executado na linha 10 do cidades.php, precisamos de um laço (while). Entre as linhas 26 de 31 foi incluído um código PHP com o início de laço while para percorrer todos resultado. Nas linhas 28, 29 e 30 recuperamos os dados que vamos mostrar, atribuindo para variáveis.  É importante observar que a segunda linha da tabela fica dentro do laço, ou seja, será repetida para cada cidade. Na linha 41 tem o código para avançar para o próximo registro e o laço é fechado na linha 42;

- Para mostrar os dados nas colunas da tabela, foram mostradas as variáveis nas linhas 33, 34 e 35;

- Para o processo de alteração e exclusão precisamos saber o id (identificador/chave) do registro. Por isso, nos links de alterar e excluir precisamos passar esta informação. A adição de código nas linhas 36 e 38 tem este objetivo. Acrescentamos no link mais um parâmetro (& para indicar que vem outro parâmetro) cujo nome é id e usando PHP mostramos o valor da variável $id.

cidades_form.php

A figura D.20 apresenta o cidades_form.php com a inclusão da programação PHP. O que basicamente foi alterado:

- inserção de código PHP no atributo value para mostrar os dados que vem do banco de dados (vai mostrar quando o formulário é chamado para uma alteração de cidade). Nas linhas 21 e 27 utiliza a variável $rs do resultado do SQL (criado na linha 21 do cidades.php) e pega o valor do campo usando fields;

-  Para mostrar a lista de estados no menu de lista, estamos incluindo na linha 33 a chamada de uma função denominada lista_uf()  que está definida no arquivo funcoes.php (foi incluído no cidades.php). Esta função recebe por parâmetro a UF da cidade. Este parâmetro serve para trazer selecionada a UF da cidade quando for um processo de alteração. A seguir vamos ver em detalhes a função lista_uf();

- lembra que comentamos sobre os valores  gravar_incluir e gravar_alterar do $acao? Quando o formulário for submetido enviará um valor para o campo oculto acao que está na linha 41. Atribuímos para o valeu dele o seguinte:

Isto significa que quando o formulário for chamado a partir de um valor de $acao igual a incluir, o campo oculto ficará valendo gravar_incluir. Se for chamado a partir de um valor de $acao igual a alterar, o campo oculto ficará valendo gravar_alterar. Com isso, podemos saber no cidades.php se é necessário fazer um processo de inclusão ou alteração.

Funcão lista_uf()

Como visto acima, usamos a função lista_uf() para mostrar a lista de unidades federativas no cidades_form.php. Agora vamos dar uma olhada com mais detalhes nesta função que está definida no funcoes.php. A figura D.21 mostra o código da função. Uma primeira observação importante a fazer é sobre como é montada uma lista de opções para um menu de lista. O código de exemplo abaixo apresenta cinco opções, sendo que a primeira não possui valor, fica em branco. Cada opção está em um elemento option que por sua vez possui um atributo value para o valor correspondente ao que está sendo mostrado, no caso da UF tem o mesmo valor. Mas observe que uma option possui atributo selected. Isto significa que o elemento que possuir este atributo virá com este valor selecionado para o menu de lista. Neste exemplo o menu de lista viria com a opção AM selecionada. No caso do nosso exemplo este atributo será importante para mostrar a UF correspondente à cidade que está sendo alterada.

Alguns apontamentos:

linha 4 – define um array com todas as unidades federativas;
linha 7 – ordena o vetor em ordem alfabética;
linha 8 – inicializa a variável $lista com a primeira opção em branco;
linha 9  - faz um foreach para percorrer todo o array. $sigla recebe cada vez um dos valores do vetor;
linha 10 – cria a variável $s sendo uma string sem valor;
linhas 11 e 12 – verifica se o valor do vetor ($sigla) é igual a $uf recebida por parâmetro (UF da cidade a ser alterada). Se for igual atribui “selected” para variável $s. Isso fará com que esta UF seja a selecionada.
Linha 13 – monta a opção e concatena na variável $lista;
Linha 14- fim do foreach
Linha 15- retorna as opções montadas (variável $lista).