AULA 10 – IMPLEMENTAR TELA COMPLEXA PARA CADASTRO UTILIZANDO
A CLASSE – PARTE 2
FUNÇÕES PARA TRATAMENTO DE STRINGS
Para armazenarmos informações vindos de um formulários, em uma tabela de banco de dados,
muitas das vezes precisamos tratá-las de alguma forma, para que estas informações tenham
alguma organização.
Por exemplo, o usuário preenche campos de um formulário de cadastro. No caso de
preenchimento de strings, se ele digitar em minúsculo ou maíusculo, é exatamente desta forma
que será armazenado na tabela.
O ideal é que criemos um padrão de cadastro de informações. Por exemplo: ao cadastrar um
nome ou um endereço, padronizar para que este cadastro seja sempre em caixa alta.
Sem contar em compatibilizar padrões de formulário com o padrão do banco de dados, que
normalmente é UTF8. A recomendação é que, se o site for desenvolvido em PHP, ASP, e ainda
com conexão com banco de dados, o ideal é que o charset seja iso-8859-1.
Sabemos que os dados vindos de um formulário são todos tratados como texto puro. Sendo
assim, usaremos o PHP para tratar estas informações.
Nesta versão de nosso exemplo, as regras de instância da classe e chamada dos métodos que
estavam em cadalunos.php agora estão no programa cadalunos_regras.php. E no programa
cadalunos.php o programa cadalunos_regras.php passar a ser uma include.
O trecho é o seguinte:
/*
--- Tratando alguns campos antes de instanciar os atributos
ut8_encode : Esta função codifica uma string data para UTF-8, e retorna uma versão codificada.
UTF-8 é o mecanismo padrão usado pela Unicode para codificação de valores amplos de
caractere dentro de um byte stream. Ou seja, acerta os caracteres especiais como acentos por
exemplo.
// strtoupper: Retorna string com todos os caracteres do alfabeto convertidos para maiúsculas.
*/
$nome = strtoupper($_POST['Xnome']); // convertendo para maiusculo
$nome = utf8_encode($nome); // convertendo para utf8 padrão do banco de dados
$endereco = strtoupper($_POST['Xendereco']);
$endereco = utf8_encode($endereco);
$bairro = utf8_encode($_POST['Xbairro']);
$bairro = utf8_encode($bairro);
$objeto->nome = $nome; // Instanciando o atributo
$objeto->endereco = $endereco; // Instanciando o atributo
$objeto->bairro = $bairro; // Instanciando o atributo
$objeto->telefone = $_POST['telefone']; // Instanciando o atributo
$objeto->datanasc = $_POST['datanasc']; // Instanciando o atributo
$objeto->codcurso = $_POST['Xcodcurso']; // Instanciando o atributo
$objeto->codturno = $_POST['Xcodturno']; // Instanciando o atributo
$objeto->codstatus = $_POST['Xcodstatus']; // Instanciando o atributo
1
O campos nome e endereço estão sofrendo dois (2) tipos de tratamento.
Strtoupper() : Retorna string com todos os caracteres do alfabeto convertidos para
maiúsculas.
ut8_encode() : Esta função codifica uma string data para UTF-8, e retorna uma versão
codificada.
===> Na maior parte das vezes existe incompatibilidade entre a codificação ASCII entre o
formulário e o banco de dados. Por isso ao gravar dados com acento em uma tabela, ao invés de
gravar os acentos, são gravados caracteres especiais.
EXIBINDO OS DADOS NA PROPRIEDADE VALUE
Para exibir os dados no value da tag <input>, teremos que utilizar o método Pesquisar():
// Método para selecionar os campos de apenas 1 aluno, de acordo com o valor do
// atributo matricula, retornando uma array com estes dados
public function Pesquisar() {
$sql = "SET DATESTYLE TO 'SQL, DMY';
SELECT
matricula, nome, endereco, bairro, telefone, datanasc, codcurso, codturno,
codstatus
FROM alunos
WHERE matricula = $this->matricula";
$res = @pg_query($sql);
$dados = @pg_fetch_all($res);
return $dados;
}
No programa cadalunos_regras.php, executamos o método Pesquisar() e atriburemos a uma
variável... sabemos que o método Pesquisar() retorna os dados de 1 (um) aluno e os dados estão
em formato array.
Os dados retornados devem ser atribuidos a variáveis.
// Execução do método para Pesquisar uma matricula na tabela
$dados = $objeto->Pesquisar();
// Atribuindo o resultado a variáveis que serão exibidas no "value" dos inputs do formulário
$matricula = $dados[0]['matricula'];
$nome = $dados[0]['nome'];
$endereco = $dados[0]['endereco'];
$bairro = $dados[0]['bairro'];
$telefone = $dados[0]['telefone'];
$datanasc = $dados[0]['datanasc'];
$codcurso = $dados[0]['codcurso'];
$codturno = $dados[0]['codturno'];
$codstatus = $dados[0]['codstatus'];
No programa cadalunos.php, estas variáveis serão exibidas dentro da tag input dentro da
propriedade value.
EXEMPLO:
<div><label>MATRICULA</label> <input type="text" name="Xmatricula" size="10" value="<?php
echo $matricula; ?>"></div>
Este procedimento facilita o usuário no momento de alterar ou excluir uma informação.
2
LISTANDO DADOS CADASTRADOS
Uma das funcionalidades da tela de cadastro de alunos, é listar os dados dos alunos para, além
de consultar estes dados, também dar a opção de alterar ou excluir as informações cadastradas.
No programa class.alunos.php, teremos um método para listar os dados e retornar uma array.
Serão exibidos matricula, nome e o curso de cada aluno. Neste caso, precisaremos utilizar a
clásula INNER JOIN para unir as tabelas alunos e cursos. Vamos aproveitar e unir também turno
e tipostatus. Este método poderá ser útil para gerar um relatório, por exemplo.
// Selecionar todos os dados de uma tabela
public function Listar() {
$sql = "SET DATESTYLE TO 'SQL, DMY';
SELECT
matricula, nome, endereco, bairro, telefone, datanasc, c.codcurso,
nomecurso, t.codturno, desturno, s.codstatus, descricao
FROM
alunos a
NNER JOIN cursos c ON c.codcurso=a.codcurso
INNER JOIN turnos t ON t.codturno=a.codturno
INNER JOIN tipostatus s ON s.codstatus=a.codstatus
ORDER BY nome";
$res = pg_query($sql);
$dados = pg_fetch_all($res);
return $dados;
}
IMPORTANTE
Uma novidade, é na nossa modelagem termos acrescentado um campo do tipo DATE.
Como existem problemas com formatação de data, um dos recursos que podemos
utilizar é o comando SQL “SET DATESTYLE TO 'SQL, DMY';”. O comando SET DATESTYLE,
que é um comando SQL, formata o estilo de data de acordo com o que desejarmos. No nosso
caso, o nosso formato é dia/mes/ano (DMY).
Existem outras formas de retornar uma data formatada, mas o importante é que seja feito, pois
senão a data poderá retorna em formato americano (YMD).
A partir do método Listar(), poderemos exibir os dados do aluno, no programa cadalunos.php.
EXIBINDO OS DADOS NA TELA
<?php
$lista = $objeto->Listar(); // Executando método que retorna todos os dados de uma
tabela
echo "<table border=1>";
echo "<tr>";
echo "<td width=100>Matricula</td>";
echo "<td width=370>Nome do aluno</td>";
echo "<td width=100>Curso</td>";
echo "</tr>";
3
for($indice=0; $indice < sizeof($lista); $indice++) { // lendo os dados da tabela
echo "<tr>";
echo "<td>";
echo $lista[$indice]['matricula']; // Exibindo a matricula
echo "</td>";
echo "<td>";
echo utf8_decode($lista[$indice]['nome']); // Exibindo o nome
echo "</td>";
echo "<td>";
echo utf8_decode($lista[$indice]['nomecurso']); // Exibindo o curso
echo "</td>";
$matricula = $lista[$indice]['matricula'];
// Abaixo, link para redirecionar a matricula através da url (método GET)
echo "<td>";
echo "<a href='cadalunos.php?matricula=$matricula'>Escolher</a>";
echo "</td>";
echo "</tr>";
}
?>
</table>
--- Trecho que redireciona a matricula cujo formulário será preenchido para alteração ou
exclusão
echo "<td>";
echo "<a href='cadalunos.php?matricula=$matricula'>Escolher</a>";
echo "</td>";
O trecho acima nada mais é do que um link para o próprio cadastro de alunos. Junto com esse
direcionamento, concatenamos a matricula do aluno para que a pesquisa seja ativada e o
formulário seja preenchido.
Importante:
ut8_decode() : Esta função codifica uma string data de UTF-8, e retorna uma versão
codificada iso-8859-1.
4
VALIDAÇÃO DE CAMPOS (validacao.php)
Através do seguinte trecho, todos os inputs do tipo text que estiverem com a proprieda name
iniciando com X serão considerados campos obrigatórios, e passarão pela verificação do seguinte
script PHP.
<?php
if ($_POST AND $_POST['opcao']<>'Limpar') {
// Os comandos abaixo serão lidos somente após o "click" em um dos submit
foreach ($_POST as $campo=>$conteudo) { // Lendo as linhas do vetor $_POST
if ($conteudo==NULL) { // Se o conteudo digitado for NULO
// verificar a 1a.posição do campo, se está marcado como obrigatório
if (substr($campo,0,1) == 'X') {
$descampo = substr($campo,1,40);
$retorno .= "<p><font color='red'> CAMPO $descampo É OBRIGATÓRIO </font></p>"; //
Mensagem ficará armazenada em uma variável
}
}
}
}
?>
5
Download

aula 10 – implementar tela complexa para cadastro utilizando a