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