10 - ACESSO A BANCOS DE DADOS EXEMPLO PRÁTICO Este tutorial foi preparado especialmente para os usuários que estão começando seu aprendizado na linguagem PHP e com o Banco de Dados MySQL. Vamos fazer um cadastro de clientes onde teremos a opção de incluir novos clientes, alterar os dados dos clientes existentes, excluir e buscar determinado cliente, bem como gerar relatório de clientes cadastrados na nossa base de dados. Cadastro de clientes Área do nosso sistema para a inclusão de novos clientes. Abaixo, segue a estrutura da nossa tabela. tb_clientes - id_cli - Número auto–incremento, vai ser a nossa chave primária (PK) - inclusao_cli - Data e horário do cadastro do cliente - nome_cli - Nome completo - end_cli - Endereço - bairro_cli - Bairro - email_cli - Email - tel_cli - Telefone - cidade_cli - Cidade - estado_cli - Código do Estado (FK) tb_estados - Essa tabela contém os estados do Brasil. - id_estado - Número auto–incremento, vai ser a nossa chave primária (PK) - estado - Nome do Estado - uf - Sigla do Estado tb_user – Essa tabela contém os usuários que tem permissão para mexer na área administrativa - id_user - Número auto–incremento, vai ser a nossa chave primária (PK) - apelido - apelido do usuário que vai ter acesso ao sistema. - senha - senha do usuário que vai ter acesso ao sistema. Criando as tabelas Se você usa o Windows, aconselho você a baixar um software de gerenciamento de banco de dados, nesse caso o PHPMyAdmin (http://www.phpmyadmin.net/) que é uma ótima ferramenta para manipular base de dados MySQL. No WAMPSERVER já existe préinstalado o PHPMyAdmin. Antes de criarmos as tabelas, devemos criar o nosso Database, para isso digite o seguinte comando: CREATE DATABASE projeto; Como vocês podem observar eu criei um database chamado projeto, abaixo segue as tabelas que farão parte da nossa base de dados. tb_clientes - Tabela com os clientes cadastrados no sistema tb_estados - Tabela com os estados do Brasil tb_user - Usuários que tem permissão para entrar na área administrativa do sistema. Crie as tabelas no MySQL, executando os comandos abaixo dentro do database projeto: CREATE TABLE tb_clientes( id_cli int auto_increment primary key, inclusao_cli datetime, nome_cli varchar(80), end_cli varchar(80), bairro_cli varchar(40), email_cli varchar(90), tel_cli varchar(25), cidade_cli varchar(80), estado_cli int ); CREATE TABLE tb_estados( id_estado int auto_increment primary key, estado varchar(60), uf char(2)); CREATE TABLE tb_user( id_user int auto_increment primary key, apelido varchar(60), senha varchar(20)); Depois de termos criado as tabelas, vamos “popular” a tabela de estados, ou seja, vamos cadastrar os estados e um usuário administrador do sistema. Para isso vamos fazer uso do comando SQL: INSERT INTO. INSERT INTO `tb_estados` (uf,estado) VALUES('AC', 'Acre'); INSERT INTO `tb_estados` (uf,estado) VALUES('AL', 'Alagoas'); INSERT INTO `tb_estados` (uf,estado) VALUES('AP', 'Amapá'); INSERT INTO `tb_estados` (uf,estado) VALUES('AM', 'Amazonas'); INSERT INTO `tb_estados` (uf,estado) VALUES('BA', 'Bahia'); INSERT INTO `tb_estados` (uf,estado) VALUES('CE', 'Ceará'); INSERT INTO `tb_estados` (uf,estado) VALUES('DF', 'Distrito `tb_estados` (uf,estado) VALUES('ES', 'Espírito Federal'); INSERT INTO Santo'); INSERT INTO `tb_estados` (uf,estado) VALUES('GO', 'Goiás'); INSERT INTO `tb_estados` (uf,estado) VALUES('MA', 'Maranhão'); INSERT INTO `tb_estados` (uf,estado) VALUES('MT', 'Mato Grosso'); INSERT INTO `tb_estados` (uf,estado) VALUES('MS', 'Mato Grosso do Sul'); INSERT INTO `tb_estados` (uf,estado) VALUES('MG', 'Minas Gerais'); INSERT INTO `tb_estados` (uf,estado) VALUES('PA', 'Pará'); INSERT INTO `tb_estados` (uf,estado) VALUES('PB', 'Paraíba'); INSERT INTO `tb_estados` (uf,estado) VALUES('PR', 'Paraná'); INSERT INTO `tb_estados` (uf,estado) VALUES('PE', 'Pernambuco'); INSERT INTO `tb_estados` (uf,estado) VALUES('PI', 'Piauí'); INSERT INTO `tb_estados` (uf,estado) VALUES('RN', 'Rio Grande do Norte'); INSERT INTO `tb_estados` (uf,estado) VALUES('RS', 'Rio Grande do Sul'); INSERT INTO `tb_estados` (uf,estado) VALUES('RJ', 'Rio de Janeiro'); INSERT INTO `tb_estados` (uf,estado) VALUES('RO', 'Rondônia'); INSERT INTO `tb_estados` (uf,estado) VALUES('RR', 'Roraima'); INSERT INTO `tb_estados` (uf,estado) VALUES('SC', 'Santa Catarina'); INSERT INTO `tb_estados` (uf,estado) VALUES('SP', 'São Paulo'); INSERT INTO `tb_estados` (uf,estado) VALUES('SE', 'Sergipe'); INSERT INTO `tb_estados` (uf,estado) VALUES('TO', 'Tocantins'); INSERT INTO `tb_user` (`id_user`, `apelido`, `senha`) VALUES (1, 'universo', 'php'); Antes de começarmos a criar nossos arquivos, vamos criar um diretório chamado projeto2016 dentro de c:/wamp/www/dw3. Salve todos os seus arquivos dentro deste diretório (c:/wamp/www/dw3/projeto2016). Agora, antes de construirmos o formulário de cadastro de clientes, vamos criar o arquivo que vai estabelecer a conexão com a nossa base de dados. Arquivo: conecta.php <?php $dbname="projeto"; $usuario="root"; $password=""; //1º passo - Conecta ao servidor MySQL if(!($id = mysql_connect("localhost",$usuario,$password))) { echo "<p align=\"center\"><big><strong>Não foi possível estabelecer uma conexão com o gerenciador MySQL. Favor contatar o Administrador. </strong></big></p>"; exit; } //2º passo - Seleciona o Banco de Dados if(!($con=mysql_select_db($dbname,$id))) { echo " <p align=\"center\"><big><strong>Não foi possível estabelecer uma conexão com o Banco de Dados informado. Favor contatar o Administrador. </strong></big></p>"; exit; } ?> A conexão com o MySQL acima mostrada, é para quem está trabalhando localmente na máquina (localhost). mysql_connect - Abre uma conexão com o banco de dados MySQL No nosso código acima, caso ele não consiga estabelecer uma conexão com o servidor MySQL ele exibe a mensagem: “Não foi possível estabelecer uma conexão com o gerenciador MySQL. Favor contatar o Administrador”. mysql_select_db - Seleciona um Banco de Dados MySQL. Funciona da mesma maneira, caso ocorra algum erro na hora de selecionar a base de dados (projeto), ele emitirá uma mensagem de erro: “Não foi possível estabelecer uma conexão com o Banco de Dados informado. Favor contatar o Administrador.”. Área Administrativa É a área responsável por fazer o controle dos clientes cadastrados, ou seja, nela vamos poder incluir, alterar, excluir e buscar qualquer cliente que esteja cadastro em nossa base de dados. Vamos fazer uso das sessões em PHP nessa área (método para gerenciamento de usuários que está disponível a partir da versão 4 do PHP), pois precisamos restringir o acesso a essa área apenas para pessoas que tenham permissão. Página inicial (index.php) Essa é a página inicial do nosso sistema. É aonde vamos ter que digitar o apelido e a senha para o acesso à área administrativa. Código fonte: <?php include "conecta.php"; //Arquivo que conecta com o MySQL //INICIALIZA A SESSÃO session_start(); //DESTRÓI AS VARIÁVEIS unset($_SESSION[id_projeto]); unset($_SESSION[apelido_projeto]); unset($_SESSION[senha_projeto]); //DESTRÓI TODOS OS DADOS INICIALIZADOS NA SESSÃO session_destroy(); //RECEBE OS DADOS DO FORMULÁRIO $apelido_login = $_POST[apelido_login]; $senha_login = $_POST[senha_login]; if(($apelido_login) AND ($senha_login)) { //Ele entra nessa condição se as duas variáveis não estiverem vazias $sql = mysql_query("SELECT apelido='$apelido_login' AND * FROM tb_user senha='$senha_login'") no comando SQL :".mysql_error()); or WHERE die("ERRO if(mysql_num_rows($sql) > 0) { $id_projeto = mysql_result($sql,0,"id_user"); $apelido_projeto = mysql_result($sql,0,"apelido"); $senha_projeto = mysql_result($sql,0,"senha"); //INICIALIZA A SESSÃO session_start(); //GRAVA AS VARIÁVEIS NA SESSÃO $_SESSION[id_projeto] = $id_projeto; $_SESSION[apelido_projeto] = $apelido_projeto; $_SESSION[senha_projeto] = $senha_projeto; header("Location:opcoes.php"); //Redireciona para a página de opções } else{ echo "<font color=\"#FF0000\"><b>Apelido ou Senha incorretos. Tente novamente!</b>"; } } ?> <html> <head> <title>Tutorial UNIVERSO</title> </head> <body bgcolor="#FFFFFF" text="#000000"> <center> <form name="frm_login" method="post" action="<?php echo basename($_SERVER['PHP_SELF']); ?>"> <table width="200" border="0" cellspacing="0" cellpadding="0"> <tr> <td colspan="2" align="center"><b><font size="3">IDENTIFICAÇÃO</font></b></td> </tr> <tr> face="Arial" <td width="33%" height="25"><font face="Arial" height="25"><font face="Arial" size="2">Apelido:</font></td> <td width="67%" size="2"><input type="text" name="apelido_login"></font></td> </tr> <tr> <td width="33%" height="25"><font face="Arial" height="25"><font face="Arial" size="2">Senha:</font></td> <td width="67%" size="2"><input type="password" name="senha_login"></font></td> </tr> <tr> <td colspan="2"><input type="submit" name="entrar" value="Entrar &gt;&gt;"></td> </tr> </table> </form> </center> <script>document.frm_login.apelido_login.focus()</script> </body> </html> Essa página vai mostrar um formulário com dois campos: um de apelido e outro de senha. No action do form temos <?php echo basename($_SERVER['PHP_SELF']); ?>, isso quer dizer que os dados serão enviados para a mesma página. Note que no começo do código temos um if(($apelido_login) AND ($senha_login)). Depois que digitamos o apelido e a senha e clicamos no botão Entrar >>, vamos cair nessa condição que vai verificar se o usuário e a senha foram digitados. Em seguida é verificado se estes dados existem em nosso banco de dados. Caso exista é criada uma sessão e nela são registradas 3 variáveis, sendo o id, o apelido e a senha do usuário. Em seguida através do comando header(“Location:opcoes.php”) somos redirecionados para a página de opções. Atenção: Vale lembrar, que depois da página index.php, todas as outras são de uso restrito. Portanto, precisamos criar um arquivo que vai verificar se o usuário está ativo na sessão ou não. Vamos ver seu código fonte: Código fonte: ver_sessao.php <?php //INICIALIZA A SESSÃO session_start(); //SE NÃO TIVER VARIÁVEIS REGISTRADAS //RETORNA PARA A TELA DE LOGIN if( (!isset($_SESSION[id_projeto])) (!isset($_SESSION[apelido_pojeto])) AND AND (!isset($_SESSION[senha_pojeto])) ) Header("Location: index.php"); ?> Inicializamos a sessão através do session_start(), e verificamos se as variáveis estão registradas na sessão através do comando if acima (verifica se as variáveis estão “setadas”). Caso elas não estejam, é automaticamente redirecionado para a página index.php Atenção: Precisamos colocar uma require com esse arquivo em todas as páginas que são de uso restrito (require("ver_sessao.php");). Página com as opções (opcoes.php) Se o apelido e a senha forem digitados corretamente iremos ser redirecionados para a página opcoes.php que é apenas uma página HTML simples, onde iremos escolher uma das opções fornecidas. As opções são: - Cadastrar clientes - Gerenciar clientes - Pesquisar clientes Na primeira opção, temos a oportunidade de cadastrar um novo cliente no sistema. Na segunda opção, temos uma listagem dos clientes cadastrados, com as opções para se fazer uma busca, alterar os dados ou excluir determinado cliente. Na terceira opção, poderemos montar um relatório com os clientes de acordo com as opções de pesquisa. <?php require("ver_sessao.php"); //Verifica se a sessão está ativa ?> <html> <head> <title>Tutorial UNIVERSO</title> </head> <body> <table width="60%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td height="60"><div align="center"><font face="Arial" size="4"><b>Menu Principal</b></font></div></td> </tr> </table> <br /> <p align="center"> <font face=Arial size=2> - <a href="cadclientes.php?acao=entrar">Cadastrar Clientes</a><br /><br /> - <a href="gerclientes.php">Gerenciar Clientes</a><br /><br /> - <a href="pesqclientes_a.php">Pesquisar Clientes</a><br /> </font> </p> </body> </html> Cadastro de Clientes (cadclientes.php) A principal função desse arquivo é cadastrar um novo cliente ao sistema. Código fonte: <?php require("ver_sessao.php"); //Verifica se a sessão está ativa require("conecta.php"); //Conecta com a nosso banco de dados MySQL ?> <html> <head> <title>Tutorial UNIVERSO</title> </head> <body bgcolor="#FFFFFF" text="#000000"> <br /> <table width="60%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td height="60"> <div align="center"><font face="Arial" size="4"><b>Cadastro de Clientes</b></font></div></td> </tr> </table> <br /> <?php //RECEBE OS DADOS DA URL $acao = $_GET[acao]; if($acao == 'cadastrar') { /*Cadastra formulário for enviado */ //RECEBE OS DADOS DO FORMULÁRIO $nome_cli = $_POST[nome_cli]; $end_cli = $_POST[end_cli]; $bairro_cli = $_POST[bairro_cli]; $email_cli = $_POST[email_cli]; $tel_cli = $_POST[tel_cli]; o cliente depois que o $cidade_cli = $_POST[cidade_cli]; $estado_cli = $_POST[estado_cli]; //Verifica os dados enviados if($nome_cli == '') { $erros++; $html_erros = $html_erros."<br />Nome"; } if($end_cli == '') { $erros++; $html_erros = $html_erros."<br />Endere&ccedil;o"; } if($bairro_cli == '') { $erros++; $html_erros = $html_erros."<br />Bairro"; } if($email_cli == '') { $erros++; $html_erros = $html_erros."<br />Email"; } if($tel_cli == '') { $erros++; $html_erros = $html_erros."<br />Telefone"; } if($cidade_cli == '') { $erros++; $html_erros = $html_erros."<br />Cidade"; } if($estado_cli == 0) { $erros++; $html_erros = $html_erros."<br />Estado"; } if($erros == 0) { //Se não tiver nenhum erro, faz a inclusão $sql = mysql_query("INSERT INTO tb_clientes(inclusao_cli,nome_cli,end_cli,bairro_cli,email_cli, tel_cli,cidade_cli,estado_cli) VALUES(now(),'$nome_cli','$end_cli','$bairro_cli', '$email_cli','$tel_cli','$cidade_cli','$estado_cli')") or die("Erro no comando SQL:".mysql_error()); echo "<div align=center><font face=Arial size=2>Cliente cadastrado com Sucesso!!</font></div><br /><br />"; } //fecha $erros == 0 else { echo "<div align=center><font face=Arial size=2><b> ATEN&Ccedil;&Atilde;O </b><br /><br />Foram encontrados <b>$erros</b> erro(s) no cadastro do cliente:<br /><b>$html_erros</b> <br /><br /><a href='javascript:history.go(-1)'><< Voltar</a></font></div><br /><br />"; }//fecha else } /*fecha acao= cadastrar*/ ?> <?php if($acao == 'entrar') { /*Mostra o formulário de cadastro de clientes */ $sql_estados = mysql_query("SELECT * FROM tb_estados ORDER BY estado") or die("ERRO no comando SQL:".mysql_error()); ?> <form name="frm_clientes" method="post" action="<?php echo basename($_SERVER['PHP_SELF']); ?>?acao=cadastrar"> <table width="500" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="24%" height="25"><font face="Arial" size="2">Nome:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="nome_cli" size="35"></font></td> </tr> <tr> <td height="25" width="24%"><font size="2">Endere&ccedil;o:</font></td> face="Arial" <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="end_cli" size="30"></font></td> </tr> <tr> <td height="25" width="24%"><font face="Arial" size="2">Bairro:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="bairro_cli" size="30"></font></td> </tr> <tr> <td height="25" width="24%"><font face="Arial" size="2">Email:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="email_cli" size="35"></font></td> </tr> <tr> <td height="25" width="24%"><font face="Arial" size="2">Telefone:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="tel_cli" size="20"></font></td> </tr> <tr> <td height="25" width="24%"><font face="Arial" size="2">Cidade:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="cidade_cli" size="35"></font></td> </tr> <tr> <td height="25" width="24%"><font face="Arial" size="2">Estado:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <select name="estado_cli"> <option value="0"><< Selecione o estado >></option> <?php while($array = mysql_fetch_array($sql_estados)) {?> <option value="<?echo $array['id_estado'];?>"><?echo $array['estado'];?></option> <?php }?> </select></font></td> </tr> <tr> <td height="25" colspan="2"> <div align="center"> <input type="submit" name="cadastrar" value="Cadastrar cliente &gt;&gt;"></div></td> </tr> </table> </form> <script>document.frm_clientes.nome_cli.focus()</script> <?} /*fecha acao=entrar */?> <div align=center><font face=Arial size=2> [ <a href='opcoes.php'>Voltar para o menu principal</a> ]</font> </div> </body> </html> Quando clicamos na opção para cadastrar cliente na página opcoes.php, caímos na página cadclientes.php?acao=entrar, que nada mais é, que a página que contém o formulário de cadastro e a rotina para a inclusão dos dados em nossa base de dados. Como vocês podem observar acima temos uma condição depois do nome do arquivo: cadclientes.php?acao=entrar. Vá até o código acima e procure uma linha if($acao==’entrar’). Encontrou? É aí que começa a nossa página. Depois de ter preenchido todos os dados e clicarmos no botão Cadastrar cliente >> seremos redirecionados para a mesma página, isso ocorre porque no action do form temos o comando <?php echo basename($_SERVER['PHP_SELF']); ?>mais ele não vem sozinho, ele está acompanhado do ?acao=cadastrar, encontramos aqui, mais uma condição. Vá ao código acima e procure a linha if($acao==’cadastrar’). Como vocês podem observar, recebemos os dados da url (GET) e do formulário (POST), fazemos uma verificação dos dados que foram enviados, para ver se nenhum foi enviado em branco, caso algum dado seja enviado em branco é mostrado uma mensagem de erro e pedimos para a pessoa retornar ao formulário e complementar os dados que estão faltando. Observe essa linha: $sql = mysql_query("INSERT INTO tb_clientes(inclusao_cli,nome_cli,end_cli,bairro_cli,email_cli, tel_cli,cidade_cli,estado_cli) VALUES(now(),'$nome_cli','$end_cli','$bairro_cli', '$email_cli','$tel_cli','$cidade_cli','$estado_cli')") or die("Erro no comando SQL:".mysql_error()); mysql_query => Envia uma consulta SQL ao banco de dados MySQL. E o comando SQL para a inserção de dados em uma determinada tabela é o INSERT INTO. Gerenciamento de clientes (gerclientes.php) Através desse arquivo vamos ter uma listagem de todos os clientes cadastrados no sistema. Além disso, será possível também fazer uma busca, alteração ou exclusão de determinado cliente. Código fonte: <?php require("ver_sessao.php"); //Verifica se a sessão está ativa require("conecta.php"); //Conecta com a nosso banco de dados MySQL ?> <html> <head> <title>Tutorial UNIVERSO</title> </head> <body bgcolor="#FFFFFF" text="#000000"> <?php //RECEBE OS DADOS DO FORMULÁRIO $pesquisar = $_POST[pesquisar]; $criterio = $_POST[criterio]; $sql_cliente = "SELECT id_cli,date_format(inclusao_cli,'%d/%m/%Y %H:%i') as inclusao_cli, nome_cli,cidade_cli,uf FROM tb_clientes,tb_estados WHERE tb_estados.id_estado = tb_clientes.estado_cli"; if($pesquisar == 'sim') $sql_cliente = $sql_cliente." AND nome_cli LIKE \"%$criterio%\""; $sql_cliente = $sql_cliente." ORDER BY inclusao_cli"; $sql_cliente = mysql_query($sql_cliente) or die("Erro no SQL: ".mysql_error()); ?> <br /> <table width="60%" align="center"> <tr> <td height="60"> border="0" cellspacing="0" cellpadding="0" <div align="center"><font face="Arial" size="4"><b>Gerenciamento de Clientes</b></font></div></td> </tr> </table> <br /> <form name="frm_pesq" method="post" action="<?echo $PHP_SELF?>"> <table width="700" border="0" cellspacing="1" cellpadding="0" align="center"> <tr bgcolor="#6699CC"> <td colspan="2"> <div align="center"><font face="Arial" size="2"><b>Pesquisa</b></font></div></td> </tr> <tr bgcolor="ebebeb"> <td width="32%" align="center"><font face="Arial" size="2">Nome a ser procurado:</font></td> <td width="68%"> <font face="Arial" size="2"><input type="text" name="criterio" size="25"> <input type="submit" name="pesq" value="Pesquisar &gt;&gt;"> <input type="hidden" name="pesquisar" value="sim"></font></td> </tr> </table> </form> <script>document.frm_pesq.criterio.focus()</script> <br /> <?if(mysql_num_rows($sql_cliente) > 0) {?> <table width="700" border="0" cellspacing="1" cellpadding="0" align="center"> <tr bgcolor="#6699CC"> <td colspan="5"> <div align="center"><font face="Arial" size="2"><b><font color="#FFFFFF">Clientes cadastrados</font></b></font></div> </td> </tr> <tr bgcolor="cccccc"> <td width="19%"> <div align="center"><b><font face="Arial" size="2">Data de inclus&atilde;o</font></b></div> </td> <td width="33%"> <div align="center"><b><font face="Arial" size="2">Cliente</font></b></div> </td> <td width="23%"> <div align="center"><b><font face="Arial" size="2">Cidade/UF</font></b></div> </td> <td width="13%"> <div align="center"><b><font face="Arial" size="2">Alterar </font></b></div> </td> <td width="12%"> <div align="center"><b><font face="Arial" size="2">Excluir</font></b></div> </td> </tr> <?php while($array_cliente = mysql_fetch_array($sql_cliente)) {?> <tr bgcolor="ebebeb"> <td width="19%" height="25"><font face="Arial" size="2"> <?php echo $array_cliente['inclusao_cli'];?> hs </font></td> <td width="33%" height="25"><font face="Arial" size="2"> <?php echo $array_cliente['nome_cli'];?> </font></td> <td width="23%" height="25"><font face="Arial" size="2"> <?php echo $array_cliente['cidade_cli'];?> / <?echo $array_cliente['uf'];?> </font></td> <td width="13%" height="25"> <div align="center"><font face="Arial" href='altclientes.php?id_cliente=<?echo size="2">[ <a $array_cliente['id_cli'];?>&acao=entrar'>Alterar</a> ]</font></div> </td> <td width="12%" height="25"> <div align="center"><font face="Arial" size="2">[ href='excluirclientes.php?id_cliente=<?php <a echo $array_cliente['id_cli'];?>'>Excluir</a> ]</font></div> </td> </tr> <?}?> </table> <?}/* fecha mysql_num_rows > 0 */ else{ echo "<br /><br /><div align=center><font face=Arial size=2> Nenhum registro encontrado!<br /><br /></font></div>"; }?> <br /> <div align=center><font face=Arial size=2> [ <a href='opcoes.php'>Voltar para o menu principal</a> ]</font> </div> </body> </html> Caso o usuário faça uma pesquisa passamos um campo oculto: <input type="hidden" name="pesquisar" value="sim"> Note, que no SQL não efetuamos direto o mysql_query(), fomos concatenando a variável que continha o SQL. <?php $sql_cliente = "SELECT id_cli,date_format(inclusao_cli,'%d/%m/%Y %H:%i') as inclusao_cli, nome_cli,cidade_cli,uf FROM tb_clientes,tb_estados WHERE tb_estados.id_estado tb_clientes.estado_cli"; if($pesquisar == 'sim') $sql_cliente = $sql_cliente." AND nome_cli LIKE \"%$criterio%\""; $sql_cliente = $sql_cliente." ORDER BY inclusao_cli"; = $sql_cliente = mysql_query($sql_cliente) or die("Erro no SQL: ".mysql_error()); ?> Para fazer a pesquisa usamos no SQL a opção LIKE. Note, que formatamos a saída da data usando date_format(). Alteração dos dados do cliente (altclientes.php) Esse arquivo é bem parecido com o de cadastro de clientes, a única coisa que muda é que um faz a inserção de um novo cliente e o outro faz a alteração dos dados. Observação: O cadastro de clientes e o de alteração poderia ter sido fundido em um arquivo só, em vez de criarmos dois. Código fonte: <?php require("ver_sessao.php"); //Verifica se a sessão está ativa require("conecta.php"); //Conecta com a nosso banco de dados MySQL ?> <html> <head> <title>Tutorial UNIVERSO</title> </head> <body bgcolor="#FFFFFF" text="#000000"> <br /> <table width="60%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td height="60"> <div align="center"><font face="Arial" size="4"><b>Alterar do Cliente</b></font></div> </td> </tr> </table> <br /> <?php //RECEBE OS DADOS DA URL $acao = $_GET[acao]; $id_cliente = $_GET[id_cliente]; if($acao == 'alterar') { /*Cadastra o cliente depois que o formulário for enviado */ //RECEBE OS DADOS DO FORMULÁRIO $nome_cli = $_POST[nome_cli]; dados $end_cli = $_POST[end_cli]; $bairro_cli = $_POST[bairro_cli]; $email_cli = $_POST[email_cli]; $tel_cli = $_POST[tel_cli]; $cidade_cli = $_POST[cidade_cli]; $estado_cli = $_POST[estado_cli]; $id_cliente = $_POST[id_cliente]; //Verifica os dados enviados if($nome_cli == '') { $erros++; $html_erros = $html_erros."<br />Nome"; } if($end_cli == '') { $erros++; $html_erros = $html_erros."<br />Endere&ccedil;o"; } if($bairro_cli == '') { $erros++; $html_erros = $html_erros."<br />Bairro"; } if($email_cli == '') { $erros++; $html_erros = $html_erros."<br />Email"; } if($tel_cli == '') { $erros++; $html_erros = $html_erros."<br />Telefone"; } if($cidade_cli == '') { $erros++; $html_erros = $html_erros."<br />Cidade"; } if($estado_cli == 0) { $erros++; $html_erros = $html_erros."<br />Estado"; } if($erros == 0) { //Se não tiver nenhum erro, grava os dados na tabela $sql = mysql_query("UPDATE tb_clientes SET nome_cli='$nome_cli',end_cli='$end_cli', bairro_cli='$bairro_cli',email_cli='$email_cli',tel_cli='$tel_cli' ,cidade_cli='$cidade_cli',estado_cli='$estado_cli' WHERE id_cli='$id_cliente'") or die("Erro no comando SQL:".mysql_error()); echo "<div align=center><font face=Arial size=2>Dados do cliente <b>$nome_cli</b> alterados com Sucesso!!<br /><br /><a href='gerclientes.php'><< Voltar</a></font></div><br /><br />"; } //fecha $erros == 0 else { echo "<div align=center><font face=Arial size=2><b> ATEN&Ccedil;&Atilde;O </b><br /><br />Foram encontrados <b>$erros</b> erro(s) no cadastro do cliente:<br /><b>$html_erros</b> <br /><br /><a href='javascript:history.go(-1)'><< Voltar</a></font></div><br /><br />"; }//fecha else } /*fecha acao= alterar*/ ?> <?php if($acao == 'entrar') { /*Mostra o formulário de alteração dos dados do cliente */ $sql_cliente = mysql_query("SELECT * FROM tb_clientes WHERE id_cli='$id_cliente'") or die("ERRO no comando SQL:".mysql_error()); $array_cliente = mysql_fetch_array($sql_cliente); $sql_estados = mysql_query("SELECT * FROM estado") or die("ERRO no comando SQL:".mysql_error()); ?> tb_estados ORDER BY <form name="frm_clientes" method="post" action="<?php echo $_SERVER[PHP_SELF];?>?acao=alterar"> <table width="500" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td width="24%" height="25"><font face="Arial" size="2">Nome:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="nome_cli" size="35" value="<?php echo $array_cliente['nome_cli'];?>"></font></td> </tr> <tr> <td height="25" width="24%"><font face="Arial" size="2">Endere&ccedil;o:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="end_cli" size="30" value="<?php echo $array_cliente['end_cli'];?>"></font></td> </tr> <tr> <td height="25" width="24%"><font face="Arial" size="2">Bairro:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="bairro_cli" size="30" value="<?php echo $array_cliente['bairro_cli'];?>"></font></td> </tr> <tr> <td height="25" width="24%"><font face="Arial" size="2">Email:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="email_cli" size="35" value="<?php echo $array_cliente['email_cli'];?>"></font></td> </tr> <tr> <td height="25" width="24%"><font face="Arial" size="2">Telefone:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="tel_cli" size="20" value="<?php echo $array_cliente['tel_cli'];?>"></font></td> </tr> <tr> <td height="25" width="24%"><font face="Arial" size="2">Cidade:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <input type="text" name="cidade_cli" size="35" value="<?php echo $array_cliente['cidade_cli'];?>"></font></td> </tr> <tr> <td height="25" width="24%"><font face="Arial" size="2">Estado:</font></td> <td height="25" width="76%"><font face="Arial" size="2"> <select name="estado_cli"> <option value="0"><< Selecione o estado >></option> <?php while($array = mysql_fetch_array($sql_estados)) { $estado_cliente = $array_cliente['estado_cli']; $cod_estado = $array['id_estado']; $estado = $array['estado']; if($estado_cliente == $cod_estado) echo "<option value='$estado_cliente' selected>$estado</option>"; else echo "<option value='$cod_estado'>$estado</option>"; }?> </select></font></td> </tr> <tr> <td height="25" colspan="2"> <div align="center"> <input type="submit" name="alterar" value="Alterar dados &gt;&gt;"> <input type="hidden" $array_cliente['id_cli'];?>"> </div></td> name="id_cliente" value="<?echo </tr> </table> </form> <?php } /*fecha acao=entrar */ ?> <div align=center><font face=Arial size=2> [ <a href='opcoes.php'>Voltar para o menu principal</a> ]</font> </div> </body> </html> Na página gerclientes.php (página de gerenciamento), passamos como parâmetro o id do cliente que vai ser alterado. Na página altclientes.php (página que altera os dados) fizemos um SELECT na tabela de clientes acrescentando na cláusula WHERE o id_cliente sendo igual ao código que foi passado como parâmetro. Com isso, não teremos os dados de todos os clientes mais sim todos os dados de um determinado cliente. Depois de ter executado o mysql_query(), usamos o comando mysql_fetch_array() que vai retornar o resultado da consulta como um array, aí fica mais fácil para manipularmos os dados do cliente. Como disse anteriormente, esse arquivo é bem parecido com o de cadastro, e na hora de alterar os dados fazemos uso do comando SQL: UPDATE tabela SET campo=’$campo’. No nosso caso, precisamos acrescentar um WHERE porque senão ele vai alterar os dados de todos os clientes que temos no banco de dados e não é isso que queremos. É para ele alterar apenas o do usuário escolhido. Então o nosso código vai ficar desse jeito. <?php $sql = mysql_query("UPDATE tb_clientes SET nome_cli = '$nome_cli',end_cli='$end_cli',bairro_cli='$bairro_cli',email_cli= '$email_cli',tel_cli='$tel_cli',cidade_cli='$cidade_cli', estado_cli='$estado_cli' WHERE id_cli='$id_cliente'") or die("Erro no comando SQL:".mysql_error()); ?> Sendo que na cláusula WHERE, aquele id_cliente é o código do cliente que está sendo modificado. Exclusão do cliente (excluirclientes.php) Essa página contém apenas o comando SQL para excluir o usuário da tabela conforme o parâmetro passado. Esse parâmetro será passado pela página ger_clientes.php que nada mais é que o código do cliente que vai ser excluído. Código fonte: <?php require("ver_sessao.php"); //Verifica se a sessão está ativa require("conecta.php"); //Conecta com a nosso banco de dados MySQL //RECEBE OS DADOS DA URL $id_cliente = $_GET[id_cliente]; $sql_del = mysql_query("DELETE FROM tb_clientes WHERE id_cli='$id_cliente'") or die("Erro no SQL: ".mysql_error()); echo "<br /><br /><div align=center><font face=Arial size=2>Cliente EXCLU&Iacute;DO com Sucesso! <br /><br /><a href='opcoes.php'>[ Voltar para o menu principal ]</a> </font></div><br />"; ?> Se ficar simplesmente assim, poderemos excluir algum cliente sem querer. Portanto, vamos alterar o arquivo gerclientes.php para que, ao clicarmos em [ Excluir ], uma janela seja aberta perguntando se temos certeza que queremos excluir o cliente. Para isso, vamos utilizar o javascript: <script language="javascript"> function confirmaExclusao(aURL) { if(confirm('Tem certeza que deseja excluir?')) { location.href = aURL; } } </script> Vamos colocar o código fonte acima entre a linha <body bgcolor="#FFFFFF" text="#000000"> e a linha <?php do arquivo gerclientes.php. Devemos agora substituir o trecho de código abaixo (próximo a linha 95) do mesmo arquivo (gerclientes.php): <div align="center"><font face="Arial" size="2">[ href='excluirclientes.php?id_cliente=<?php <a echo $array_cliente['id_cli'];?>'>Excluir</a> ]</font></div> por este código: <div align="center"><font face="Arial" size="2">[ <a href="javascript:confirmaExclusao('excluirclientes.php?id_cliente= <?php echo $array_cliente['id_cli'];?>')">Excluir</a> ]</font></div> Vamos rodar o programa e testar se está funcionando corretamente. Pesquisar Clientes (pesqclientes_a.php) A principal função desse arquivo é apresentar um formulário com algumas opções de pesquisa de clientes, que gerará um relatório com os mesmos. Código fonte: <?php require("ver_sessao.php"); //Verifica se a sessão está ativa ?> <html> <head> <title>Tutorial UNIVERSO</title> </head> <body bgcolor="#FFFFFF" text="#000000"> <script language=javascript> function verifyForm() { if(document.pesquisa.dtinicial.value == "") { alert("A Data Inicial deverá ser digitada !!!"); document.pesquisa.dtinicial.focus(); return(false); }; if(document.pesquisa.dtfinal.value == "") { alert("A Data Final deverá ser digitada !!!"); document.pesquisa.dtfinal.focus(); return(false); }; if(document.pesquisa.dtinicial.value.length<10) { alert("A Data Inicial deve possuir 10 dígitos. Ex: 01/01/2015"); document.pesquisa.dtinicial.focus(); return(false); }; if(document.pesquisa.dtfinal.value.length<10) { alert("A Data Final deve possuir 10 dígitos. Ex: 30/06/2015"); document.pesquisa.dtfinal.focus(); return(false); }; return(true); }; <!-- MASCARA CAMPO DATA--> function formatar(src, mask) { var i = src.value.length; var saida = mask.substring(0,1); var texto = mask.substring(i) if (texto.substring(0,1) != saida) { src.value += texto.substring(0,1); } } function mascara(o,f) { //alert("Cheguei na função!!!"); v_obj=o v_fun=f setTimeout("execmascara()",1) } function execmascara() { v_obj.value=v_fun(v_obj.value) } function mesano(v) { v=v.replace(/\D/g,"") //Remove tudo o que não é dígito v=v.replace(/(\d{2})(\d{1,4})$/,"$1/$2") //Coloca uma barra entre o segundo e o terceiro dígito return v } function masc_data(v) { v=v.replace(/\D/g,"") //Remove tudo o que não é dígito v=v.replace(/(\d{2})(\d)/,"$1/$2") //Coloca uma //Coloca uma barra entre o segundo e o terceiro dígitos v=v.replace(/(\d{2})(\d)/,"$1/$2") barra entre o quarot e o quinto dígitos return v } function processo(v) { v=v.replace(/\D/g,"") //Remove tudo o que não é dígito v=v.replace(/(\d{6})(\d{1,4})$/,"$1/$2") barra entre o quinto e o sexto dígito return v } function soNumeros(v) { return v.replace(/\D/g,"") } </SCRIPT> <br /> //Coloca uma <table width="60%" border="0" cellspacing="0" cellpadding="0" align="center"> <tr> <td height="60"> <div align="center"><font face="Arial" size="4"><b>Pesquisar Clientes</b></font></div> </td> </tr> </table> <br /> <font face="Arial"> <center> Digite <b>Data o <b>DADO</b> Inicial de desejado, escolha Cadastro</b>,<br o /> critério, a <b>Data digite Final a de Cadastro</b> e clique em <b>Pesquisar</b>.<br /> <br /> <TABLE border="0" cellPadding="1" cellSpacing="1" width="750" valign="top" bgcolor="#000000"> <tr> <td bgcolor="#eeeeee" width="20%" valign="top"> <br /><CENTER> <form name="pesquisa" method="post" action="pesqclientes.php" target="_blank"> Digite o <B>DADO</B> desejado: &nbsp;<input type="text" name="criterio" value=""><br /><br /> &nbsp;<input type="radio" name="campo" value="nome_cli" checked>Nome do Cliente &nbsp;<input type="radio" name="campo" value="end_cli">Endereço &nbsp;<input type="radio" name="campo" value="bairro_cli">Bairro &nbsp;<input name="campo" value="email_cli">E-mail type="radio" &nbsp;<input type="radio" name="campo" value="tel_cli">Telefone &nbsp;<input type="radio" name="campo" value="cidade_cli">Cidade &nbsp;<input type="radio" name="campo" value="uf">Estado (Ex: MG)<br /><br /> <b>Digite o período abaixo, considerando como base a Data de Cadastro:</b><br /> <b>Data type="text" Inicial:</b>&nbsp;<input name="dtinicial" value="" size="10" onkeyup="mascara(this,masc_data)" maxlength="10">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <b>Data type="text" name="dtfinal" Final:</b>&nbsp;<input value="" size="10" onkeyup="mascara(this,masc_data)" maxlength="10"><br /> <br /> <b>Ordenar por:</b><br /> <input name="ordenar_por" type="radio" value="nome_cli" checked>Nome do Cliente <input name="ordenar_por" type="radio" value="inclusao_cli">Data / Hora de Cadastro <input name="ordenar_por" type="radio" value="bairro_cli,end_cli">Bairro / Endereço<br /> <br /> &nbsp;<input onclick=javascript:return(verifyForm()); type="submit" Pesquisar "><br /><br /> </form> <script>document.pesquisa.criterio.focus()</script> </CENTER> </td> </tr> </table> </center> value=" </font> <br /> <div align=center><font face=Arial size=2> [ <a href='opcoes.php'>Voltar para o menu principal</a> ]</font> </div> </body> </html> Agora que já temos o formulário de Pesquisa de Clientes criado, vamos montar o arquivo que exibirá o resultado da pesquisa (pesqclientes.php): Código fonte: <?php require("ver_sessao.php"); //Verifica se a sessão está ativa require("conecta.php") //Conecta com a nosso banco de dados MySQL ?> <html> <head> <title>Tutorial UNIVERSO - Relat&oacute;rio Clientes</title> </head> <body> <!-- MUDAR COR DA TABELA--> <script language="javascript"> function mudar_cor_over(celula){ celula.style.backgroundColor="#cccccc" } function mudar_cor_out(celula){ celula.style.backgroundColor="#ffffff" } </script> <center> de <font size="+2" face="Arial Narrow"><b>Relat&oacute;rio de Clientes</b></font> </center> <br /> <?php //RECEBE OS DADOS DO FORMULÁRIO $criterio = $_POST[criterio]; $campo = $_POST[campo]; $dtinicial = $_POST[dtinicial]; $dtfinal = $_POST[dtfinal]; $ordenar_por = $_POST[ordenar_por]; // Colocando a Data Inicial no formato aaaa-mm-dd $dti_dia = substr($dtinicial, 0, 2); $dti_mes = substr($dtinicial, 3, 2); $dti_ano = substr($dtinicial, 6, 4); $dti = "$dti_ano-" . "$dti_mes-" . "$dti_dia " . "00:00:00"; // Colocando a Data Final no formato aaaa-mm-dd $dtf_dia = substr($dtfinal, 0, 2); $dtf_mes = substr($dtfinal, 3, 2); $dtf_ano = substr($dtfinal, 6, 4); $dtf = "$dtf_ano-" . "$dtf_mes-" . "$dtf_dia " . "23:59:59"; ?> <?php $sql = "SELECT id_cli,inclusao_cli,date_format(inclusao_cli,'%d/%m/%Y as inclusao_cli_formatado, nome_cli, end_cli, - %H:%i') bairro_cli, email_cli, tel_cli, cidade_cli, estado_cli, uf FROM tb_clientes,tb_estados WHERE tb_estados.id_estado = tb_clientes.estado_cli AND $campo Like \"%" . $criterio. "%\" and inclusao_cli >= '$dti' and inclusao_cli <= '$dtf' order by $ordenar_por"; $sql_result=mysql_query($sql); $numreg = mysql_numrows($sql_result); $i = 0; ?> <center> <b> <FONT SIZE=+1 FACE="Arial"> <?php if ($campo == "nome_cli") { $campo = "pelo Nome do Cliente";} if ($campo == "end_cli") { $campo = "pelo Endere&ccedil;o do Cliente";} if ($campo == "bairro_cli") { $campo = "pelo Bairro do Cliente";} if ($campo == "email_cli") { $campo = "pelo E-mail do Cliente";} if ($campo == "tel_cli") { $campo = "pelo Telefone do Cliente";} if ($campo == "cidade_cli") { $campo = "pela Cidade do Cliente";} if ($campo == "uf") { $campo = "pelo Estado do Cliente (Ex: MG)";} if ($ordenar_por == "nome_cli") { $ordenado_por_ext = "Ordenado pelo Nome do Cliente";} if ($ordenar_por == "inclusao_cli") { $ordenado_por_ext = "Ordenado pela Data de Inclus&atilde;o do Cliente";} if ($ordenar_por == "bairro_cli,end_cli") { $ordenado_por_ext = "Ordenado pelo Bairro Endere&ccedil;o do Cliente";} // Colocando a data no formato certo: dd/mm/aaa print "Pesquisa efetuada $campo igual a '$criterio' \n<br /> "; / print "no per&iacute;odo de '$dtinicial' at&eacute; '$dtfinal' \n<br /> "; print "<font size='2'>$ordenado_por_ext</font>" . "<br /><br />"; print "N&uacute;mero de Clientes encontrados: " .$numreg. " <br />"; ?> <br /> </FONT> </b> </center> <center> <table border="1" cellspacing="3" cellpadding="3" width="800"> <tr> <td> <Center><B><FONT SIZE="-1" FACE="Arial">Nome do Cliente</FONT></B></Center> </td> <td> <Center><B><FONT SIZE="-1" FACE="Arial">Email</FONT></B></Center> </td> <td> <Center><B><FONT SIZE="-1" FACE="Arial">Telefone</FONT></B></Center> </td> <td> <Center><B><FONT SIZE="-1" FACE="Arial">Endere&ccedil;o</FONT></B></Center> </td> <td> <Center><B><FONT FACE="Arial">Bairro</FONT></B></Center> </td> <td> SIZE="-1" <Center><B><FONT SIZE="-1" FACE="Arial">Cidade / Estado</FONT></B></Center> </td> <td> <Center><B><FONT SIZE="-1" FACE="Arial">Data e Hora de Cadastro</FONT></B></Center> </td> </tr> <?php while ($row = mysql_fetch_array($sql_result)) { ?> <tr onmouseover="mudar_cor_over(this)" onmouseout="mudar_cor_out(this)"> <td> <Center><FONT SIZE="-2" FACE="Arial"><?php echo($row['nome_cli']) ?></FONT></Center> </td> <td> <Center><FONT SIZE="-2" FACE="Arial"><?php echo($row['email_cli']) ?></FONT></Center> </td> <td> <Center><FONT SIZE="-2" FACE="Arial"><?php echo($row['tel_cli']) ?></FONT></Center> </td> <td> <Center><FONT SIZE="-2" FACE="Arial"><?php echo($row['end_cli']) ?></FONT></Center> </td> <td> <Center><FONT SIZE="-2" FACE="Arial"><?php echo($row['bairro_cli']) ?></FONT></Center> </td> <td> <Center><FONT SIZE="-2" FACE="Arial"><?php echo($row['cidade_cli']) ?> / <?php echo($row['uf']) ?></FONT></Center> </td> <td> <Center><FONT SIZE="-2" FACE="Arial"><?php echo($row['inclusao_cli_formatado']) ?> hs</FONT></Center> </td> </tr> <?php } if ( mysql_num_rows($sql_result) == 0) { ?> <tr> <td COLSPAN="7"> <FONT SIZE=+1 FACE="Arial"> <center>Nenhum registro encontrado!</center> </FONT> </td> </tr> <?php } ?> </table> </center> <!--RODAPÉ DO RELATÓRIO--> <br /> <center><a HREF="javascript:self.print()">Imprimir</a>&nbsp;&nbsp;&nbsp;&nbsp ;&nbsp; <a HREF="javascript:self.close()">Fechar</A></center> </body> </html> Vamos rodar o programa e verificar se tudo está funcionando perfeitamente.