Está en la página 1de 77

Davi Antonio Quierelli

Valdecir Aparecido Quierelli


Edson Carlos Baptista

Apostila de controle de vendas


php com banco mysql

1 edio

Leme
Davi Antonio Quierelli
2015
Todos os direitos reservados.
No permitida a reproduo no todo ou em parte da presente obra sem prvia
autorizao do autor (Lei 9.610/98).
Nota: Esta obra foi criada com o intuito de proporcionar um melhor aprendizado para o
leitor. No entanto, podem ocorrer erros de digitao, impresso ou dvidas quanto ao
entendimento do contedo da mesma.
Dessa forma, solicitamos que qualquer das hipteses acima, entre em contato para que
possamos esclarecer ou encaminhar a questo.

E-mail do autor: davi.quierelli@gmail.com

Apostila de controle de vendas php com banco mysql / Davi Antonio Quierelli, Valdecir
Aparecido Quierelli, Edson Carlos Baptista Leme-SP: Ed. Davi Antonio Quierelli, 2015.
76 p.

1. PHP.
2. Programao.
3. HTML.
4. CSS.
5. Internet.
Dedico esta obra minha famlia, que sempre esto ao meu lado com apoio, compreenso
e pacincia.

O sol nasce para todos, a sombra pra quem mais esperto.


Stanislaw Ponte Preta
SUMRIO

Introduo....................................................................................................................................................................... 8
Captulo 1 Preparando o ambiente ................................................................................................................... 10
Servidor Web................................................................................................................................................................ 11
Captulo 2 Banco de Dados ................................................................................................................................... 13
Criando o banco de dados com as tabelas.......................................................................................................... 14
Captulo 3 Criando os arquivos bsicos ........................................................................................................... 18
Arquivo de estilo em CSS. ......................................................................................................................................... 19
Arquivo de conexo do banco. ............................................................................................................................... 23
Arquivo de funes auxiliares................................................................................................................................ 23
Biblioteca JQuery ........................................................................................................................................................ 26
Arquivo de busca de produtos. .............................................................................................................................. 27
Captulo 4 Criando os cadastros ......................................................................................................................... 29
Cadastro de usurios ................................................................................................................................................. 30
Gravando os usurios................................................................................................................................................ 32
Alterao de usurios ............................................................................................................................................... 34
Gravando a alterao de usurios ........................................................................................................................ 35
Excluso de usurios ................................................................................................................................................. 37
Cadastro de produtos ................................................................................................................................................ 38
Gravando os produtos ............................................................................................................................................... 41
Alterao de produtos .............................................................................................................................................. 42
Gravando a alterao de produtos ....................................................................................................................... 44
Excluindo produtos .................................................................................................................................................... 45
Captulo 5 Tela de login ......................................................................................................................................... 46
Script de login .............................................................................................................................................................. 47
Captulo 6 Tela de vendas ..................................................................................................................................... 51
Tela de vendas. ............................................................................................................................................................ 52
Gravando os itens do pedido .................................................................................................................................. 58
Excluindo itens do pedido ....................................................................................................................................... 60
Gerando o troco do cliente. ..................................................................................................................................... 61
Captulo 7 Gerando relatrios ............................................................................................................................ 63
Relatrio de compras/estoque mnimo. ............................................................................................................ 64
Relatrio de compras/estoque mnimo em formato pdf. ............................................................................ 65
Relatrio de vendas ................................................................................................................................................... 68
Relatrio de vendas em formato pdf ................................................................................................................... 70
Gerando grficos ......................................................................................................................................................... 73
Referncias bibliogrficas .................................................................................................................................. 77
Introduo

A programao para Internet vem despontando como uma rea com muitas
oportunidades de emprego visto a quantidade de servios que a Internet oferece.
Nessa apostila ser apresentado um sistema de Controle de Vendas utilizando a
linguagem de programao PHP com banco de dados Mysql.
A ideia do sistema controlar a venda de produtos em um caixa centralizado
facilitando o controle das mesmas e o fluxo de caixa.
Alm da entrada e sada de dinheiro no caixa o sistema controla tambm a
quantidade de produtos em estoque alm do estoque mnimo para cada produto.
O sistema foi concebido de forma simples e com operaes bsicas para facilitar a
didtica na elaborao dessa apostila visando facilitar o aprendizado.
Para um melhor aprendizado so necessrios alguns requisitos que ajudaro o
entendimento do sistema, dentre os quais conhecer de forma bsica a linguagem de
marcao HTML, Folha de Estilo (CSS) e a linguagem de programao para Internet PHP,
essas linguagens formam a base de programao para a Internet.
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

[9]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Captulo 1 Preparando o ambiente

[ 10 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Servidor Web

A Linguagem PHP para ser utilizada precisa necessariamente de um servidor Web


que um programa que atende as requisies do cliente e devolve seu contedo. ele que
faz o meio campo entre a solicitao do usurio e a interpretao do cdigo escrito em
PHP que depois retornado como pgina ao usurio. Um dos servidores Web mais usados
na Internet o servidor Apache que livre, mantido por uma comunidade na Internet,
alm de rodar na maioria dos servidores em uso na rede, portanto, o mesmo ser utilizado
nos exemplos desta obra.
Para facilitar o trabalho de instalar e configurar o servidor Apache e a linguagem
PHP que sero necessrios para executar os exerccios, estaremos utilizando um aplicativo
chamado EasyPhp, onde so instalados e configurados os softwares:

PHP, Apache, Mysql.

Esse software pode ser baixado da Internet de graa, a sua instalao bem
simples, bastando apenas iniciar o instalador e seguir as telas de orientao at o final.
Acesse o site http://www.easyphp.org e faa o download da verso Devserver.

Execute o arquivo que foi baixado e siga os passos at o final, dessa forma todo o
trabalho de preparar o ambiente para desenvolver scripts em PHP j estar pronto.
Aps a instalao, o EasyPhp deve ser iniciado para que possamos usar o PHP em
nossos exemplos, lembrando que ao inici-lo automaticamente iniciado o PHP, o servidor
Web Apache e o servidor de banco de dados Mysql. Para saber se o EasyPhp est rodando
basta dar um duplo clique no cone do mesmo na barra de tarefas do Windows, que vai
aparecer uma tela onde duas imagens parecidas com um semforo devem aparecer na cor
verde, mostrando que o Apache e o Mysql esto iniciados.

[ 11 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Para que o sistema funcione devemos acessar a pasta do servidor Apache destinada
s pginas que sero publicadas, essa pasta a localweb que geralmente fica no
caminho:

C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb

Essa pasta pode mudar dependendo das configuraes do seu computador ou da


verso do Easyphp, de qualquer forma se no estiver nesse caminho, localize a pasta do
EasyPhp dentro de Arquivos de programas, que dentro da mesma se encontra a pasta
localweb.
Crie uma pasta denominada vendas dentro dessa pasta, cada arquivo que for criado para
o sistema dever ser colocado dentro da mesma para funcionar.
Para cada script deve ser criado um arquivo novo com a extenso .php que a
extenso da linguagem e dever ser salvo dentro da pasta do servidor web
data/localweb/vendas. Pode ser usado qualquer editor de texto puro como o bloco de
notas do Windows ou algum editor HTML como o DreamWeaver da Adobe.

[ 12 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Captulo 2 Banco de Dados

[ 13 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Criando o banco de dados com as tabelas.


Inicie o Easyphp e com o boto direito do mouse em cima do cone do mesmo na
barra de tarefas do Windows e selecione Administration.

Na tela do navegador que abrir clique no boto open para abrir o PhpMyAdmin que
um sistema que permite gerenciar o banco de dados Mysql de forma grfica sem usar
cdigos.

[ 14 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Na coluna da esquerda selecione o link New, e do lado direito informe o nome do


banco como vendas, veja na figura:

Aps criar o banco selecione-o do lado esquerdo e do lado direito informe a tabela
usurios com quatro campos. Note que o nome da tabela no deve ter caracteres especiais
tais como acentuao. Veja na figura:

Confirme a criao da tabela e na prxima tela informe os campos igual a figura


abaixo:

[ 15 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Campos da tabela usuarios:

usucod Int Chave primria Auto_increment


usunome Varchar(100)
usulogin Varchar(50)
ususenha Varchar(100)

Note que o campo usucod foi marcado como chave primria e auto_increment.

Na sequncia crie as tabelas abaixo:

produtos

pedidos

itens

[ 16 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

As tabelas que acabaram de ser criadas so necessrias para armazenar o mnimo


de informaes para que o sistema funcione.

Tabela de usuarios

Necessria para armazenar todos os usurios que podero acessar os relatrios do vendas.

Tabela de produtos

Armazenar todos os produtos para venda, com suas descries, valor unitrio, etc.

Tabela de pedidos

Responsvel por registrar as definies do pedido.

Tabela de itens

Conter todos os produtos que fazem parte de um pedido.

[ 17 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Captulo 3 Criando os arquivos bsicos

[ 18 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Para desenvolver as telas de cadastro de produtos, usurios, etc. necessrio criar


alguns arquivos bsicos, mas necessrios para auxiliar no desenvolvimento de telas e
tornar esses processos mais rpido.

Arquivo de estilo em CSS.


O CSS uma linguagem que ajuda muito no desenvolvimento de tela, pois atravs
dela possvel criar design das pginas mais elegante e limpo de cdigo, por isso as telas
do sistema sero todas formatadas com folha de estilo. Para isso deve ser criado o script
estilo.css e salvar dentro da pasta vendas que se encontra no caminho:

C:\Program Files (x86)\EasyPHP-DevServer-14.1VC11\data\localweb

Segue o cdigo do arquivo:

/*Box que engloba todo o site*/


body{
margin-top:0px;
}
#principal{
width:900px;
border:1px solid #006;
border-radius: 0.5em;
margin:auto;
}
.cab{
background-color:#06C;
color:#FFF;
text-align:center;
}
.preco{
color:#666;
border:#000 2px solid;
background-color:#ebebeb;
border-radius: 0.2em 0.2em 0.2em 0.2em;
box-shadow: #F90 0.01em 0.01em 0.5em 0.01em;
width:200px;
font-size:18px;
padding:1px;
float:right;
}
.informe{
color:#666;
border:#000 1px solid;
background-color:#FFF;

[ 19 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

border-radius: 0.2em 0.2em 0.2em 0.2em;


box-shadow: #F90 0.01em 0.01em 0.1em 0.01em;
width:180px;
margin-left:2px;
padding:1px;
float:left;
}
/*Div responsvel por montar um cabealho*/
#cabecalho{
width:98%;
background-color:#036;
color:#ccc;
font-size:22px;
float:left;
border-radius: 0.3em 0.3em 0em 0em;
padding:10px;
}
.total{
font-size:30px;
color:#03C;
}
/*Div que ficar no centro da tela com as informaes*/
#centro{
width:99%;
background-color:#ccc;
padding: 5px;
float:left;
text-align:center;
}
/*Div que monta o rodap das pginas*/
#rodape{
clear:both;
width:99%;
background-color:#036;
border-radius: 0em 0em 0.3em 0.3em;
padding: 5px;
color:#CCC;
}
/*Classe que mostra um gif animado carregando at obter
valores*/
.carregando2{
color:#666;
display:none;
}

[ 20 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

.qtde{
display:none;
}
/*Classe do boto corrige*/
.corrige{
color:#666;
display:none;
border:#000 1px solid;
float:left;
margin-left:20px;
border-radius: 0.2em 0.2em 0.2em 0.2em;
box-shadow: 0.2em 0.2em 0.2em 0.2em;
}
/*Classe do boto confirma*/
.confirma{
color:#fff;
display:none;
border:#000 1px solid;
float:left;
width:65px;
height:50px;
border-radius: 0.2em 0.2em 0.2em 0.2em;
box-shadow: 0.2em 0.2em 0.2em 0.2em;
background-color:#060;
}
/*Classe do logotipo*/
.logotipo{
color:#666;
float:left;
border:#000 1px solid;
margin:1px;
border-radius: 0.2em 0.2em 0.2em 0.2em;
box-shadow: 0.1em 0.1em 0.5em 0.1em;
width:480px;
padding:1px;
background-color:#FFF;
}
/*Classe do logotipo*/
.logotipo2{
color:#666;
border:#000 1px solid;
margin:10px;
border-radius: 0.2em 0.2em 0.2em 0.2em;
box-shadow: 0.1em 0.1em 0.5em 0.1em;

[ 21 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

padding:3px;
background-color:#FFF;
}

/*Classe para o login*/


.login{
color:#666;
border:#000 1px solid;
background-color:#F00;
margin:10px;
font-size:16px;
border-radius: 0.2em 0.2em 0.2em 0.2em;
box-shadow: #FFF 0.01em 0.01em 0.5em 0.01em;
width:100px;
padding:1px;
float:left;
}
/*Classe para o boto sair*/
.produto:hover{
background-color:#FF0;
box-shadow: #fff 0.01em 0.01em 0.5em 0.01em;
display: inline-block;
}

.produto{
display: inline-block;
color:#666;
font-size:16px;
border:#000 1px solid;
background-color:#ebebeb;
margin:10px;
border-radius: 0.2em 0.2em 0.2em 0.2em;
box-shadow: #F90 0.01em 0.01em 0.5em 0.01em;
width:70px;
padding:1px;
float:left;
text-align:center;
}

/*Classe para p ttulo*/


.titulo{
color:#666;
border:#000 1px solid;
background-color:#fff;

[ 22 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

margin:10px;
border-radius: 0.2em 0.2em 0.2em 0.2em;
box-shadow: #ebebeb 0.01em 0.01em 0.5em 0.01em;
width:200px;
padding:1px;
float:left;
}
/*Classe das mensagens de erros*/
.erro{
background-color:#F99;
color:#FFF;
border:#fff 1px solid;
box-shadow:gray 0.1em 0.1em 0.1em 0.1em;
border-radius: 0.2em 0.2em 0.2em 0.2em;
padding: 2px 2px 2px 2px;
margin:2px 2px 2px 2px;
font-size:20px;
}

Salve o script com o nome estilo.css dentro da pasta vendas.

Arquivo de conexo do banco.


Numa forma de centralizar a conexo com o banco de dados em apenas em um
local ser criado um arquivo denominado config.php, que ser responsvel por conectar
ao servidor Mysql e ao banco Vendas criado para essa apostila.

Segue o cdigo do arquivo:

<?php
$pdo = new PDO('mysql: host=localhost;dbname=vendas',
'root', '', array (PDO:: ATTR_PERSISTENT => true ) );

$pdo->setAttribute(PDO::ATTR_ERRMODE,
PDO::ERRMODE_EXCEPTION);
?>

So duas linhas de cdigo nesse arquivo, as linhas imediatamente abaixo de cada


uma fazem parte da mesma linha.

Salve o script com o nome config.php dentro da pasta vendas.

Arquivo de funes auxiliares.

[ 23 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

O layout do sistema ser feito por funes especficas para diminuir cdigo e ao
mesmo manter a mesma aparncia entre as pginas do sistema.
Dessa forma ser criado o arquivo funcoes.php que conter as funes
cabecalho() responsvel por montar a parte de cima do sistema usando os estilos do
arquivo estilo.css. A funo rodape() responsvel por fechar a estruturas do site na parte
inferior e a funo acesso() que restringir o acesso aos scripts que devem ser acessados
apenas por usurios cadastrados.
Note que o nome das funes no podem ter acentuao, pois do contrrio pode
gerar erro.

Segue o cdigo do arquivo:

<?php

function cabecalho(){
header("Pragma: no-cache");
header("Cache: no-cache");
header("Cache-Control: no-cache, must-revalidate");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");

echo "<!doctype html>


<html lang=\"pt-br\">
<head>
<meta charset=\"utf-8\">
<title>Controle de vendas</title>
<link type=\"text/css\" rel=\"stylesheet\"
href=\"estilo.css\">
<script type=\"text/javascript\" src=\"js/jquery-1.11.
0.min.js\"> </script>
";

// Se for a tela de votos aciona as funes em javascript


para enviar o voto ou corrigi-lo
if ($_SERVER['PHP_SELF']=="/vendas/index.php"){
echo "
<script>
function enviar(){
document.furna.submit();
}
function limpar(){
document.furna.codprod.value='';
document.furna.codprod.focus();
$('#valor').hide();
$('.confirma').hide();
$('.corrige').hide();

[ 24 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

$('.qtde').hide();
}

function EnterTab(InputId,Evento){
if(Evento.keyCode == 13){
var x = document.furna.codprod.value;
if (x == null || x == \"\") {
alert('Entre com o valor em dinheiro!');
document.f1.dinheiro.focus();
document.f1.dinheiro.select();
}else{
document.getElementById(InputId).focus();
}
}else if (Evento.keyCode == 113){
window.location.assign(\"http://127.0.0.1/vendas/novopedi
do.php\")
}
}
</script>";
}
// Monta os divs responsveis pelo layout em css.
echo"
</head>
<body>
<div id=\"principal\">
<div id=\"cabecalho\">
<div class=\"titulo\">
Controle de vendas
</div>
<div class=\"login\"><a href=\"novopedido.php\ ">Novo
Pedido</a></div>
<div class=\"produto\"> <a href=\"inicio.php\"> Incio
</a> </div>
<div class=\"produto\"> <a href=\"cadproduto.php\" >
Produtos </a> </div>
<div class=\"produto\"><a href=\"estoquemin.php\">Estoque
mnimo</a></div>
<div class=\"produto\"> <a href=\"relvendas.php\">
Relatrio </a> </div>
<div class=\"produto\"> <a href=\"cadusuario.php\">
Usurios </a> </div>
<div class=\"produto\"> <a href=\"index.php?
erro=logout\"> Sair </a></div>
</div>

[ 25 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

<div id=\"centro\">";
}

//Funo que monta o rodap de todos os scripts.


function rodape(){
echo "</div>
<div id=\"rodape\">Controle de Vendas - ".date("Y")."
</div>
</div>
</body>
</html>";
}

######### Funo que verifica se o usurio est logado


function acesso(){
session_start();
if (!isset($_SESSION['usucod'])){
header("Location: login.php");
exit;
}else{
echo "<h3>Usurio: $_SESSION[usunome]</h3>";
}
}
?>

Salve o script com o nome funcoes.php dentro da pasta vendas evitando acentuao no
nome do arquivo.

Biblioteca JQuery
Para deixar a tela de vendas mais dinmica e sem a necessidade de atualizar toda a
tela para buscar cada produto que ser inserido no pedido, a funo cabealho disponibiliza
o contedo da biblioteca Jquery no cabealho da pgina. Para esse procedimento
necessrio fazer download dessa biblioteca diretamente no site do desenvolvedor.

Acesse o site: https://jquery.com" e faa o download.

Crie uma pasta denominada js dentro da pasta vendas e copie o arquivo jquery
descompactado para dentro da mesma.

Localize a linha a seguir no cdigo do arquivo funcoes.php

<script type=\"text/javascript\" src=\"js/jquery-1.11.


0.min.js\"> </script>

[ 26 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Altere o nome do arquivo jquery-1.11.0.min.js para o nome do arquivo do JQuery


que foi feito download anteriormente para que funcione adequadamente.

Arquivo de busca de produtos.


Para que a tela de vendas no seja atualizada totalmente na busca de cada produto
so utilizados recursos de Ajax (Javascript Assncrono e XML) que fazem com que apenas
uma parte da tela seja recarregada. A ideia buscar o produto pelo cdigo e ao localiza-lo
o mesmo ser apresentado em uma rea da tela sem ter que carregar a pgina toda. Para
isso necessrio um script que faa a busca de produtos no banco de dados. Crie um novo
arquivo e copie o cdigo abaixo:

<?php
//Importa a conexo do banco.
require "config.php";

// Recebe o cdigo informado pelo usurio para ser


pesquisado no banco.
$codigo = $_GET['codigo'] ;

// Se o valor informado for um nmero ele faz a pesquisa.


if (is_numeric($codigo)){
$consulta = $pdo->prepare("SELECT * FROM produtos WHERE
codigo= :codigo");
$consulta->bindValue(':codigo', $_GET['codigo']);
$consulta->execute();

$conta=0;
while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
$imagem[] = array(
'codigo' => $linha['codigo'],
'descricao' => $linha['descricao'],
'valor' => $linha['valor'],
);
$conta++;
}

if ($conta==1){
// Retorna um array com os valores do candidato.
echo( json_encode( $imagem ) );
}else{
$imagem[] = array(
'codigo' => 0,

[ 27 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

'descricao' => '',


'valor' => 'invalido.png',
);
// Retorna um array com valores invlidos.
echo( json_encode( $imagem ) );
}
}else{
$imagem[] = array(
'codigo' => 0,
'descricao' => '',
'valor' => 'invalido.png',
);
// Retorna um array com valores invlidos.
echo( json_encode( $imagem ) );
}
?>

Salve o script com o nome buscaproduto.php dentro da pasta vendas.

[ 28 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Captulo 4 Criando os cadastros

[ 29 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Para poder criar a tela inicial que ser a tela de vendas teremos que criar os
cadastros de usurios e produtos para que possamos alimentar essas tabelas e assim
podermos desenvolver a tela de vendas.

Cadastro de usurios
Crie um arquivo novo e insira o cdigo abaixo:

<?php
//Importa a conexo do banco.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();
acesso();

// Obtm a varivel erro, responsvel por mostrar as


mensagens abaixo depois de sair do sistema.
if (isset($_GET['erro'])){
$erro=$_GET['erro'] ;
}else{
$erro="";
}

if ($erro=="logout"){
session_start();
session_destroy();
echo "<div class=\"erro\">Sesso encerrada!</div>";

// Monta o formulrio para o cadastro.


echo "<p><br>
<form action=\"gravausuario.php\" method=\"post\"
name=\"f1\" id=\"f1\">
<label>
Nome:
<input type=\"text\" name=\"txtnome\" size=\"50\"
maxlength=\"100\">
</label>
<p>

[ 30 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

<label>
Login:
<input type=\"text\" name=\"txtlogin\" size=\"50\"
maxlength=\"100\">
</label>
<label>
<p>
Senha:
<input type=\"password\" name=\"txtsenha\" size=\"50\"
maxlength=\"100\">
</label>
<p>
<input type=\"submit\" value=\"Gravar\"> <input
type=\"reset\" value=\"Limpar\">
</form>
<script>
document.furna.txtnome.focus();
</script>";

// Seleciona todos os usurios cadastrados ordenado por


cdigo
$consulta = $pdo->prepare("SELECT * FROM usuarios order
by usucod");
$consulta->execute();
echo "<table width=\"100%\">
<tr
bgcolor='#eb0'><td>CDIGO</td><td>NOME</td><td>LOGIN</td>
<td>Alterar</td><td>Excluir</td></tr>";
while ($row = $consulta->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>
<td>$row[usucod]</td>
<td>$row[usunome]</td>
<td>$row[usulogin]</td>
<td align=\"center\"><a href=\"alterarusuario.php?codigo=
$row[usucod]\">Alterar</a></td>
<td align=\"center\"><a href=\"excluirusuario.php?codigo=
$row[usucod]\">Excluir</a></td>
</tr>";
}
echo "
</table>";
//Chama a funo rodape.
rodape();
?>

[ 31 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Salve o script com o nome cadusuario.php dentro da pasta vendas.

Tela de cadastro de usurios

Gravando os usurios
Note que o formulrio de cadastro de usurios envia as informaes para um script
denominado gravausuario.php. Crie um arquivo novo e copie o cdigo abaixo:

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";
//Importa as funes cabecalho, rodape e menu.
require "funcoes.php";
//Chama a funo cabecalho para mont-lo.

cabecalho();

$nome=$_POST['txtnome'];
$login=$_POST['txtlogin'];
$senha=$_POST['txtsenha'];
$senha=md5($senha);

if ($nome==""){
echo "<h2>Campo <b>nome</b> em branco!</h2><p>";
echo "<input type=\"button\" value=\"Voltar\"
onClick=\"javascript:history.back()\">";

[ 32 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

rodape();
exit;
}

if ($login==""){
echo "<h2>Campo <b>login</b> em branco!</h2><p>";
echo "<input type=\"button\" value=\"Voltar\"
onClick=\"javascript:history.back()\">";
rodape();
exit;
}

if ($senha==""){
echo "<h2>Campo <b>senha</b> em branco!</h2><p>";
echo "<input type=\"button\" value=\"Voltar\"
onClick=\"javascript:history.back()\">";
rodape();
exit;
}

// Comando SQL que inseri na tabela usuarios.


$insert = $pdo->prepare("insert into usuarios
values(:codigo,:nome,:login,:senha)");
$insert->bindValue(':codigo', 0);
$insert->bindValue(':nome', $nome);
$insert->bindValue(':login', $login);
$insert->bindValue(':senha', $senha);

if($insert->execute()){
echo "<h1>Usurio cadastrado!</h1>";
header("Refresh: 2; URL=cadusuario.php");
}else{
echo "<h1>Erro ao cadastrar.</h1>";
}
rodape();
?>

Salve o script com o nome gravausuario.php dentro da pasta vendas.

Tela de confirmao do cadastro

[ 33 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Alterao de usurios
Crie um arquivo novo e insira o cdigo abaixo:

<?php
//Importa a conexo do banco.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();

$codigo=$_GET['codigo'];

$consulta = $pdo->prepare("SELECT * FROM usuarios where


usucod=:codigo");
$consulta->bindValue(':codigo', $codigo);
$consulta->execute();

while ($row = $consulta->fetch(PDO::FETCH_ASSOC)) {


$codigo=$row['usucod'];
$nome=$row['usunome'];
$login=$row['usulogin'];
}

echo "
<form action=\"gravaaltusuario.php\" method=\"post\"
name=\"f1\" id=\"f1\">
<input type=\"hidden\" name=\"txtcodigo\"
value=\"$codigo\">
<label>
Nome:

[ 34 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

<input type=\"text\" name=\"txtnome\" value=\"$nome\"


size=\"50\" maxlength=\"100\">
</label>
<p>
<label>
Login:
<input type=\"text\" name=\"txtlogin\" value=\"$login\"
size=\"50\" maxlength=\"100\">
</label>
<p>
<label>
Senha:
<input type=\"password\" name=\"txtsenha\" size=\"50\"
maxlength=\"100\">
</label>
<p>
<input type=\"submit\" value=\"Gravar\"><input
type=\"reset\" value=\"Limpar\">
</form>
<script>
document.furna.txtnome.focus();
</script>";

//Chama a funo rodape.


rodape();
?>

Salve o script com o nome alterarusuario.php dentro da pasta vendas.

Formulrio de alterao de usurios

Gravando a alterao de usurios

[ 35 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Note no cdigo anterior que o formulrio aponta para o script


gravaaltusuarios.php. Na sequncia crie um arquivo novo e digite o cdigo

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();

$codigo=$_POST['txtcodigo'];
$nome=$_POST['txtnome'];
$login=$_POST['txtlogin'];
$senha=$_POST['txtsenha'];
$senha=md5($senha);
$sql="update usuarios set usunome=:nome, usulogin=:login,
ususenha=:senha where usucod=:codigo";
$update = $pdo->prepare($sql);
$update->bindValue(':codigo', $codigo);
$update->bindValue(':nome', $nome);
$update->bindValue(':login', $login);
$update->bindValue(':senha', $senha);

if ($update->execute()){
echo "<h1>Usurio alterado!</h1>";
header("Refresh: 2; URL=cadusuario.php");
}else{
echo "<h1>Erro ao alterar o usurio.</h1>";
}
rodape();
?>

Salve o script com o nome gravaaltusuario.php dentro da pasta vendas.

Confirmao da alterao de usurios

[ 36 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Excluso de usurios
Para concluir os procedimentos de manuteno na tabela de usurios falta somente
o script responsvel por excluir um usurio quando necessrio. Crie um arquivo novo e na
sequencia copie o cdigo:

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();

$codigo=$_GET['codigo'];

$delete = $pdo->prepare("delete from usuarios WHERE


usucod= :codigo");
$delete->bindValue(':codigo', $codigo);
if($delete->execute()){
echo "<h1>Usurio excludo! Aguarde...</h1>";
header("Refresh: 2; URL=cadusuario.php");
}else{
echo "<h1>Erro ao excluir.</h1>";
}
rodape();
?>

Salve o script com o nome excluirusuario.php dentro da pasta vendas.

Confirmao da excluso de usurios

[ 37 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Cadastro de produtos
Com as telas de manuteno de usurios finalizadas, faremos o mesmo
procedimento com a tabela de produtos. Crie um arquivo novo e digite o cdigo abaixo:

<?php
//Importa a conexo do banco.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();
acesso();

// Obtm a varivel erro, responsvel por mostrar as


mensagens abaixo depois do sistema.
if (isset($_GET['erro'])){
$erro=$_GET['erro'];
}else{
$erro="";
}

if ($erro=="logout"){
session_start();
session_destroy();
echo "<div class=\"erro\">Sesso encerrada!</div>";

// Monta o formulrio para o cadastro.


echo "

[ 38 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

<form action=\"gravaprodutos.php\" method=\"post\"


name=\"f1\" id=\"f1\">
<label>
Descrio:
<input type=\"text\" name=\"txtdescricao\" size=\"50\"
maxlength=\"100\">
</label>
<p>
<label>
Valor:
<input type=\"text\" name=\"txtvalor\" size=\"10\"
maxlength=\"10\">
</label>
</p>
<label>
Quantidade em Estoque:
<input type=\"text\" name=\"txtestoque\" size=\"10\"
maxlength=\"10\">
</label>
</p>
<label>
Quantidade Mnima em Estoque:
<input type=\"text\" name=\"txtestoquemin\" size=\"10\"
maxlength=\"10\">
</label>
</p>
<p>
<input type=\"submit\" value=\"Gravar\"> <input
type=\"reset\" value=\"Limpar\">
</form>
<script>
document.furna.txtdescricao.focus();
</script>";

// Seleciona todos os candidatos cadastrados ordenado por


cdigo
$consulta = $pdo->query("select * from produtos order by
codigo");

echo "<table width=\"100%\" border>


<tr>
<td>Cdigo</td>
<td>Descrio</td>
<td>Valor</td>

[ 39 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

<td>Alterar</td>
<td>Excluir</td>
</tr>
";
// Mostra os candidatos.
while ($row = $consulta->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>
<td>$row[codigo]</td>
<td>$row[descricao]</td>
<td>$row[valor]</td>
<td align=\"center\"><a href=\"alterarprodutos.php?
codigo=$row[codigo]\">Alterar</a></td>
<td align=\"center\"><a href=\"excluirprodutos.php?
codigo=$row[codigo]\">Excluir</a></td>
</tr>";
}

echo "
</table>";

//Chama a funo rodape.


rodape();
?>

Salve o script com o nome cadproduto.php dentro da pasta vendas.

Tela de cadastro de produtos

[ 40 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Gravando os produtos
O formulrio de cadastro de produtos envia as informaes para um script
denominado gravaprodutos.php. Crie um arquivo novo e copie o cdigo abaixo:

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";
//Importa as funes cabecalho, rodape e menu.
require "funcoes.php";
//Chama a funo cabecalho para mont-lo.
cabecalho();
$descricao=$_POST['txtdescricao'];
$valor=$_POST['txtvalor'];
$estoque=$_POST['txtestoque'];
$estoquemin=$_POST['txtestoquemin'];

if ($descricao==""){
echo "<h2>Campo <b>descrio</b> em branco!</h2><p>";
echo "<input type=\"button\" value=\"Voltar\"
onClick=\"javascript:history.back()\">";
rodape();
exit;
}

if ($valor==""){
echo "<h2>Campo <b>valor</b> em branco!</h2><p>";
echo "<input type=\"button\" value=\"Voltar\"
onClick=\"javascript:history.back()\">";
rodape();
exit;
}

$insert = $pdo->prepare("insert into produtos


values(:codigo,:descricao,:valor,:estoque,:estoquemin)");
$insert->bindValue(':codigo', 0);
$insert->bindValue(':descricao', "$descricao");
$insert->bindValue(':valor', "$valor");
$insert->bindValue(':estoque', "$estoque");
$insert->bindValue(':estoquemin', "$estoquemin");
if($insert->execute()){
header("Location: cadproduto.php");

[ 41 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

}else{
echo "<h1>Erro ao cadastrar.</h1>";
}
rodape();
?>

Salve o script com o nome gravaprodutos.php dentro da pasta vendas.

Alterao de produtos
Para alterar um produto e necessrio montar um formulrio com as informaes
vindas do banco para que o usurio possa alterar os dados.

Crie um arquivo novo e insira o cdigo abaixo:

<?php
//Importa a conexo do banco.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();

$codigo=$_GET['codigo'];

$consulta = $pdo->query("select * from produtos where


codigo=$codigo");

while ($row = $consulta->fetch(PDO::FETCH_ASSOC)) {


$codigo=$row['codigo'];
$descricao=$row['descricao'];
$valor=$row['valor'];
$estoque=$row['estoque'];
$estoquemin=$row['estoquemin'];
}
echo "
<form action=\"gravaaltprodutos.php\" method=\"post\"
name=\"furna\" id=\"furna\">
<input type=\"hidden\" name=\"txtcodigo\" value=\"$codigo
\">
<label>
Descrio:

[ 42 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

<input type=\"text\" name=\"txtdescricao\" value=\"


$descricao\" size=\"50\" maxlength=\"100\">
</label>
<p>
<label>
Valor:
<input type=\"text\" name=\"txtvalor\" value=\"$valor\"
size=\"10\" maxlength=\"10\">
</label>
<p>
<label>
Quantidade em Estoque:
<input type=\"text\" name=\"txtestoque\" value=
\"$estoque\" size=\"10\" maxlength=\"10\">
</label>
</p>
<label>
Quantidade Mnima em Estoque:
<input type=\"text\" name=\"txtestoquemin\" value=
\"$estoquemin\" size=\"10\" maxlength=\"10\">
</label>
</p>
<input type=\"submit\" value=\"Gravar\"><input type=
\"reset\" value=\"Limpar\">
</form>
<script>
document.furna.txtdescricao.focus();
</script>";

//Chama a funo rodape.


rodape();
?>

Salve o script com o nome alterarprodutos.php dentro da pasta vendas.

Formulrio de alterao de produtos

[ 43 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Gravando a alterao de produtos


Na sequncia segue o cdigo para gravar as alteraes do produto:

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();

$codigo=$_POST['txtcodigo'];
$descricao=$_POST['txtdescricao'];
$valor=$_POST['txtvalor'];
$estoque=$_POST['txtestoque'];
$estoquemin=$_POST['txtestoquemin'];

$upd = $pdo->prepare("update produtos set


descricao=:descricao, valor=:valor, estoque=:estoque,
estoquemin=:estoquemin where codigo=:codigo");
$upd->bindValue(':codigo', $codigo);
$upd->bindValue(':descricao', "$descricao");
$upd->bindValue(':valor', "$valor");
$upd->bindValue(':estoque', "$estoque");
$upd->bindValue(':estoquemin', "$estoquemin");

if($upd->execute()){
header("Location: cadproduto.php");

[ 44 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

}else{
echo "<h1>Erro ao alterar o produto.</h1>";
}
rodape();
?>

Salve o script com o nome gravaaltprodutos.php dentro da pasta vendas.

Excluindo produtos
Abaixo segue o cdigo responsvel por excluir os produtos:

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();

$codigo=$_GET['codigo'];
$delete = $pdo->prepare("delete from produtos where
codigo=:codigo");
$delete->bindValue(':codigo', $codigo);
if ($delete->execute()){
header("Location: cadproduto.php");
}else{
echo "<h1>Erro ao excluir o produto.</h1>";
}
rodape();
?>

Salve o script com o nome excluirprodutos.php dentro da pasta vendas.

[ 45 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Captulo 5 Tela de login

[ 46 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Para ter acesso aos cadastros e relatrios necessrio fazer login no sistema atravs
de um usurio cadastrado na tabela de usurios.
A restrio de acesso feita atravs da funo acesso() que est localizada no
script funcoes.php. Ela utiliza sesses em php para poder autorizar o acesso dos usurios
que acessaram o sistema pela tela de login.
Para dar acesso aos usurios necessrio cria uma tela de login, para que o mesmo
fornea login e senha, segue o cdigo abaixo:

Script de login
<?php
//Importa a conexo do banco.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();

// Obtm a varivel erro, responsvel por mostrar as


mensagens abaixo depois de algum erro de autenticao.
if (isset($_GET['erro'])){
$erro=$_GET['erro'];
}else{
$erro="";
}

if ($erro=="invalido"){
echo "<div class=\"erro\">Usurio ou senha
invlidos!</div>";
}
?>

<form action="autentica.php" method="post" name="f1">


Usurio:
<input type="text" id="txtlogin" name="txtlogin"
class="txtbox" />
Senha:
<input type="password" id="txtsenha" name="txtsenha"
class="txtbox" />
<input type="submit" id="btnEntrar" value="Entrar"
class="button" />
</form>

[ 47 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

<script>
document.f1.txtlogin.focus();
</script>
<?php
rodape();
?>

Salve o script com o nome login.php dentro da pasta vendas.

Veja a tela de login.

O formulrio de login envia as informaes para um script denominado autentica.php,


que ser o responsvel por obter as informaes da tela de login, conectar ao banco de
dados, verificar se o login e senha esto corretos e criar a sesso. Segue o cdigo abaixo:

<?php
//Importa a conexo do banco.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

// Reseta todas as variveis de sesso.


session_start();
session_unset();
session_destroy();

// Obtm o logon e a senha


$login = $_POST['txtlogin'];
$senha = $_POST['txtsenha'];

// Criptografa a senha do usurio.


$senha = md5($senha);

$consulta = $pdo->prepare("select * from usuarios where


usuarios.usulogin= :login and usuarios.ususenha=
:senha");

[ 48 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

$consulta->bindValue(':login', $login);
$consulta->bindValue(':senha', $senha);
$consulta->execute();

$linha = $consulta->fetch(PDO::FETCH_ASSOC);

// Se no houve retorno de valores redirecionado para a


tela de login.
if ($linha['usucod'] == ""){
header("Location: login.php?erro=invalido");
exit;
}

// Inicia a sesso e registra as varivies na mesma.


session_start();
$_SESSION['usucod']=$linha['usucod'];
$_SESSION['usulogin']=$linha['usulogin'];
$_SESSION['usunome']=$linha['usunome'];
$_SESSION['ususenha']=$linha['ususenha'];

// Redireciona para a tela de apurao.


header("Location: inicio.php");
exit;
?>

Salve o script com o nome autentica.php dentro da pasta vendas.

Note que no final do cdigo acima feito um redirecionamento para um script


inicio.php, que a tela inicial que aparecer ao usurio assim que logar no sistema.

Segue abaixo o cdigo:

<?php
//Importa a conexo do banco.
require "config.php";

//Importa as funes cabecalho e rodape.


require "funcoes.php";
cabecalho();
acesso();
echo "<h1>rea Administrativa</h1>";
echo "<h2>Use o boto (Sair) para encerrar a sesso aps
o uso.</h2>";

[ 49 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

rodape();
?>

Salve o script com o nome inicio.php dentro da pasta vendas.

[ 50 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Captulo 6 Tela de vendas

[ 51 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Tela de vendas.
Vamos construir a tela inicial do sistema que a tela de vendas, nela ser utilizado
todos os arquivos auxiliares criados at o momento.

Segue o cdigo abaixo:

<?php
//Importa a conexo do banco.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Verifica se a varivel codped existe, caso contrrio


gerado um novo pedido
if (!isset($_GET['codped'])){
header("Location: novopedido.php");
}

cabecalho();
$codped=$_GET['codped'];

// Obtm a varivel erro, responsvel por mostrar as


mensagens .
if (isset($_GET['erro'])){
$erro=$_GET['erro'];
}else{
$erro="";
}

if ($erro=="logout"){
@session_start();
session_destroy();
setcookie("teste", "");
echo "<div class=\"erro\">Sesso encerrada!</div>";

// Monta o formulrio para a votao.

echo "<div class=\"informe\">


<table width=\"100%\"><tr><td align=\"center\">

[ 52 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

<form action=\"gravaitem.php\" method=\"post\"


name=\"furna\" id=\"furna\" onSubmit=\"return false\" >
<input type='hidden' name='codped' value=\"$codped\">
<label>
Produto:
<input type=\"text\" name=\"codprod\" size=\"3\"
maxlength=\"3\" id=\"codprod\"
onkeydown=\"javascript:EnterTab('qtde',event)\">
</label>
<p>
<span class=\"carregando2\"><img src=\"ajax-loader.gif\"
/></span>
<span class=\"total\" id=\"valor\"></span>
<script type=\"text/javascript\">
$(function(){
$('#codprod').keyup(function(){
if( $(this).val() ) {
$('#valor').hide();
$('.carregando2').show();
$.getJSON('buscaproduto.php?codigo=',{codigo:
$(this).val(), ajax: 'true'},function(j){
var cand;
for (var i = 0; i < j.length; i++) {
var cand = '<p><strong>'+j[i].descricao+' - R$
'+j[i].valor+'</strong></div>';
}
$('#valor').html(cand).show();
$('.carregando2').hide();
if (j[0].valor=='invalido.png'){
$('.confirma').hide();
$('.qtde').hide();
$('.corrige').show();
$('#valor').html('<img src=img/'+j[0].valor+' width=80
height=50>');
}else{
$('.confirma').show();
$('.corrige').show();
$('.qtde').show();
$('.qtde').focus();
}
});
} else {
$('#valor').html('');
$('.confirma').hide();

[ 53 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

$('.qtde').hide();
}
});
});
</script>
<p>
<span class=\"qtde\">Quantidade:<input type='text'
name='qtde' size='3' id='qtde'
onkeydown=\"javascript:EnterTab('confirma',event)\"></spa
n>
<table><tr><td>
<span class=\"corrige\" tabindex=0>
<img src=\"img/corrige.png\" width=\"60\" height=\"50\"
onClick=\"limpar();\">
</span>
</td><td>
<input type='button' class='confirma' value='Confirma'
id='confirma' onClick=\"enviar();\">
</td></tr></table>
</p>
</form>
</td></tr></table>
</div>
<script>
document.furna.codprod.focus();
</script>";
$consulta = $pdo->query("select * from pedidos, itens,
produtos
where pedidos.codped=itens.pedido and
itens.codprod=produtos.codigo and pedidos.codped=$codped
");
echo "<div class=\"logotipo\"><table border width='100%'>
<tr class='cab'>
<td>Cd</td>
<td>Prod</td>
<td>Qtde</td>
<td>R$</td>
<td>Subtotal</td>
<td>Excluir</td>
";
$total=0;
while ($linha = $consulta->fetch(PDO::FETCH_ASSOC)) {
$subtotal=$linha['qtde']*$linha['valor'];
$total=$total+$subtotal;

[ 54 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

echo "<tr align='center'>


<td><strong>$linha[codprod]</strong></td>
<td><strong>$linha[descricao]</strong></td>
<td><strong>$linha[qtde]</strong></td>
<td><strong>$linha[valor]</strong></td>
<td><strong>$subtotal</strong></td>
<td><strong><a
href='excluiritem.php?coditem=$linha[coditem]&codped=$lin
ha[codped]'>Excluir</a></strong></td>
</tr>";
}

$conped = $pdo->query("select sum(itens.qtde*itens.valor)


as total, pedidos.dinheiro, pedidos.troco from pedidos,
itens where pedidos.codped=$codped and
pedidos.codped=itens.pedido");
$pedido = $conped->fetch(PDO::FETCH_ASSOC);

echo "
<tr align='center'>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td></tr>
<tr align='center'>
<td>-</td>
<td>-</td>
<td>-</td>
<td>Total</td>
<td class='total'>R$ $total</td>
<td>-</td>
</tr>
<tr align='center'>
<td>-</td>
<td>-</td>
<td>-</td>
<td>Dinheiro</td>
<td>
<form name='f1' method='post' action='troco.php'>
<input type='hidden' name='codped' value='$codped'>
<input type='hidden' name='total' value='$pedido[total]'>

[ 55 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

<input type='text' name='dinheiro' value='$pedido


[dinheiro]' size='5' id='dinheiro'><br>
<input type='submit' value='Calcular Troco'></form></td>
</td>
<td>
</tr>
<tr align='center'>
<td></td>
<td>-</td>
<td>-</td>
<td>Troco</td>
<td class='total'>R$ $pedido[troco]</td>
<td>-</td>
</tr>
</table></div>";

//Chama a funo cabecalho para mont-lo.


$consulta = $pdo->query("select * from produtos order by
codigo");
echo "
<table width=\"100%\" class=\"preco\">
<tr>
<th>Cod</th>
<th>Produto</th>
<th>R$</th>
</tr>";
while ($row = $consulta->fetch(PDO::FETCH_ASSOC)) {
echo "<tr>
<td align=\"center\">$row[codigo]</td>
<td>$row[descricao]</td>
<td align=\"right\">$row[valor]</td>
</tr>";
}
echo "</table>
";

rodape();
?>

Salve o script com o nome index.php dentro da pasta vendas.

Veja a tela de venda como deve ficar:

[ 56 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Ao informar o cdigo do produto o sistema buscar o produto no banco de dados e


atualizar somente parte da tela. Veja na figura:

Na sequncia o usurio dever informar a quantidade do produto para ser


adicionada no pedido.
Para funcionar dessa forma corretamente ainda falta criar o script que tem a funo
de gravar o produto na tabela de itens do banco de dados, segue o cdigo abaixo:

[ 57 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Gravando os itens do pedido


<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();
// Recebe o voto do usurio.
$codped=$_POST['codped'];
$codprod=$_POST['codprod'];
$qtde=$_POST['qtde'];
//$valor=$_POST['valor'];

$con = $pdo->query("select * from produtos where


codigo=$codprod");
$prod = $con->fetch(PDO::FETCH_ASSOC);
$valor=$prod['valor'];
$estoque=$prod['estoque'];
$estoquemin=$prod['estoquemin'];

$consulta = $pdo->prepare("insert into itens


(coditem,pedido,codprod,valor,qtde) values(:coditem,
:codped, :codprod, :valor, :qtde)");

$consulta->bindValue(':coditem', 0);
$consulta->bindParam(':codped', $codped);
$consulta->bindParam(':codprod', $codprod);
$consulta->bindParam(':valor', $valor);
$consulta->bindParam(':qtde', $qtde);

if($consulta->execute()){
$estoqueatu=$estoque-$qtde;
$altest = $pdo->prepare("update produtos set
estoque=:estoque where codigo=$codprod");
$altest->bindValue(':estoque', $estoqueatu);
$altest->execute();
echo "<h1>Produto cadastrado. Obrigado!</h1><p>";
if ($estoque<=$estoquemin){

[ 58 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

echo "<h1>Ateno o produto atingiu o estoque mnimo!


Estoque atual: $estoqueatu</h1><p>";
rodape();
header("Refresh: 3; url=index.php?codped=$codped");
exit;
}
header("Location: index.php?codped=$codped");
}else{
echo "<h1>Erro ao cadastrar o produto.</h1>";
}

rodape();
?>

Salve o script com o nome gravaitem.php dentro da pasta vendas.

Ao confirmar o lanamento o produto aparecer na parte central da tela. Veja na


figura:

Alm de lanar o produto na tabela de itens o script gravaitem.php retira da


tabela de produtos a quantidade do produto que foi vendida, alm de informar o usurio se
o produto atingiu o estoque mnimo.
O usurio pode a qualquer momento excluir o produto clicando no link Excluir e
dessa forma desfazer todo o processo anterior, ou seja, retornar o produto para o estoque
e cancelar esse produto do pedido.

[ 59 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Excluindo itens do pedido


Segue o cdigo abaixo:

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();

$coditem=$_GET['coditem'];
$codped=$_GET['codped'];

$delete = $pdo->query("delete from itens where


coditem=$coditem");

if ($delete->execute()){
$conped = $pdo->query("select sum(itens.qtde*itens.valor)
as total, pedidos.dinheiro, pedidos.troco from pedidos,
itens where pedidos.codped=$codped and
pedidos.codped=itens.pedido");
$pedido = $conped->fetch(PDO::FETCH_ASSOC);

$troco=$pedido['dinheiro']-$pedido['total'];
$total = $pedido['total'];
$dinheiro = $pedido['dinheiro'];
if ($total==""){
$total=0;
}
if ($dinheiro==""){
$dinheiro=0;
}
$upd = $pdo->query("update pedidos set total=$total,
dinheiro=$dinheiro, troco=$troco where codped=$codped");
$upd->execute();

header("Location: index.php?codped=$codped");
}else{
echo "<h1>Erro ao excluir o produto.</h1>";
}

[ 60 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

rodape();
?>

Salve o script com o nome excluiritem.php dentro da pasta vendas.

Gerando o troco do cliente.


Na hora de fazer o troco deve ser informado a quantidade em dinheiro que o usurio
deu para pagar a conta, sendo assim necessrio mais um script que far essa operao,
segue o cdigo abaixo:

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();

$codped=$_POST['codped'];
$total=$_POST['total'];
$dinheiro=$_POST['dinheiro'];
$troco=$dinheiro-$total;

$upd = $pdo->query("update pedidos set total=$total,


dinheiro=$dinheiro, troco=$troco where codped=$codped");

if ($upd->execute()){
header("Location: index.php?codped=$codped");
}else{
echo "<h1>Erro ao fazer o troco.</h1>";
}
rodape();
?>

Salve o script com o nome troco.php dentro da pasta vendas.

[ 61 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

[ 62 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Captulo 7 Gerando relatrios

[ 63 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Os relatrios so muito importantes no sistema, pois atravs deles que podemos


verificar como esto as operaes que o sistema controla tais como vendas e estoque.
Sendo assim, faremos um relatrio para verificar os produtos que esto com estoque
baixo e que necessrio comprar para repor o estoque.

Relatrio de compras/estoque mnimo.


Segue o cdigo abaixo:

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();
acesso();

$consulta = $pdo->prepare("SELECT * FROM produtos where


estoque <= estoquemin order by descricao");
$consulta->execute();

echo "<div class=\"logotipo2\">


<h2>Relatrio de produtos para comprar</h2>
<table bordercolor=\"#666666\" width=\"600\"
border=\"1\">
<tr>
<tH>CDIGO</tH>
<tH>DESCRIO</tH>
<tH>ESTOQUE MNIMO</tH>
<tH>ESTOQUE ATUAL</tH>
</tr>
";
while($linha = $consulta->fetch(PDO::FETCH_ASSOC)){
echo "<tr>
<th>$linha[codigo]</th>
<th>$linha[descricao]</th>
<th>$linha[estoquemin]</th>
<th>$linha[estoque]</th>
</tr>";
}
echo "

[ 64 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

</table>

<h3>
<a href=\"relestoquemin.php\" target=\"new\">Gerar
relatrio em PDF</a></h3>

</div>";
rodape();
?>

Salve o script com o nome estoquemin.php dentro da pasta vendas.

Veja o relatrio na figura abaixo:

Note que o produto no relatrio est com 50 latas em estoque e o mnimo de 100,
portanto o relatrio est listando esse produto para que possa ser feita a compra.
Para enviar para impressora melhor um relatrio especfico onde somente as
informaes relevantes sero listadas no mesmo. Para isso ser gerado um relatrio no
formato pdf, onde o usurio pode tanto imprimir como salvar no computador.

Relatrio de compras/estoque mnimo em formato pdf.


Segue abaixo o cdigo:

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

[ 65 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

// Define a constante da bibllioteca MPDF e inclui a


mesma.
define('MPDF_PATH', 'MPDF57/');
include(MPDF_PATH.'mpdf.php');

// Cria um novo documento.


$mpdf=new mPDF('','', 0, '', 10, 10);

// Cria um array com valores de formatao


$arr = array (
'L' => array (
'content' => 'Controle de vendas',
'font-size' => 10,
'font-style' => 'B',
'font-family' => 'serif',
'color'=>'#000000'
),
'C' => array (
'content' => 'RELATRIO',
'font-size' => 10,
'font-style' => 'B',
'font-family' => 'serif',
'color'=>'#000000'
),
'R' => array (
'content' => '{DATE d/m/Y}',
'font-size' => 10,
'font-style' => 'B',
'font-family' => 'serif',
'color'=>'#000000'
),
'line' => 1,
);

// Define cabealho e rodap do documento.


$mpdf->SetHeader($arr, 'O');
$mpdf->SetFooter('2015 - Relatrio de estoque mnimo |
Pgina: {nb}');

// Busca o logo, nome e a totalizao de votos de cada


candidato.
$consulta = $pdo->prepare("SELECT * FROM produtos where
estoque <= estoquemin order by descricao");

[ 66 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

$consulta->execute();
$html = "<table border width='100%'>
<tr>
<th colspan='4'>RELATRIO DE PRODUTOS PARA COMPRAR</th>
</tr>
<tr>
<td colspan='4'>-----------------------------------------
---------------------------------------------------------
---------------------------------------------------------
-----</td></tr>
<tr>
<th>CDIGO</th>
<th>DESCRIO</th>
<th>ESTOQUE MNIMO</th>
<th>ESTOQUE ATUAL</th>
</tr>
<tr><td colspan='4'>-------------------------------------
---------------------------------------------------------
---------------------------------------------------------
---------</td></tr>";
while($linha = $consulta->fetch(PDO::FETCH_ASSOC)){
$html.="<tr>
<th>$linha[codigo]</th>
<th>$linha[descricao]</th>
<th>$linha[estoquemin]</th>
<th>$linha[estoque]</th>
</tr><tr><td colspan='4'>--------------------------------
---------------------------------------------------------
---------------------------------------------------------
--------------</td></tr>";
}
$html.="
</table>";
$mpdf->WriteHTML($html);
$mpdf->WriteHTML("---------------------------------------
---------------------------------------------------------
---------------------------------------------------------
-------");

$mpdf->Output();
exit();
?>

Salve o script com o nome relestoquemin.php dentro da pasta vendas.

[ 67 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Para esse relatrio necessrio fazer download na internet da biblioteca mpdf,


que baseada na licena GPL, que pode ser usada gratuitamente.
Descompacte o arquivo aps o download e extrai dentro da pasta de vendas e altere
o cdigo de acordo com o nmero da verso, abaixo so mostradas as linhas que devem
ser modificadas do arquivo relestoquemin.php:

define('MPDF_PATH', 'MPDF57/');
include(MPDF_PATH.'mpdf.php');

Essas linhas se encontram no incio do cdigo anterior.

Veja o relatrio na figura abaixo:

Relatrio de vendas
O relatrio de vendas tem como finalidade mostrar todos os produtos que foram
vendidos com suas quantidade, valor unitrio e subtotais.

Segue abaixo o cdigo:

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";

//Importa as funes cabecalho, rodape e menu.


require "funcoes.php";

//Chama a funo cabecalho para mont-lo.


cabecalho();
acesso();
// Busca a totalizao geral de vendas.
$totalg = $pdo->prepare("SELECT (itens.valor*sum
(itens.qtde)) as total FROM produtos,itens where

[ 68 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

produtos.codigo=itens.codprod group by itens.codprod,


itens.valor");
$totalg->execute();
$total=0;
while($row = $totalg->fetch(PDO::FETCH_ASSOC)){
$total=$total+$row['total'];
}

// Busca as vendas de todos os produtos


$consulta = $pdo->prepare("SELECT produtos.descricao,
sum(itens.qtde) as qtde, (itens.valor*sum(itens.qtde)) as
subtotal, itens.valor FROM produtos,itens where
produtos.codigo=itens.codprod group by itens.codprod,
itens.valor");
$consulta->execute();

echo "<div class=\"logotipo2\">


<h2>Relatrio de vendas</h2>
<table bordercolor=\"#666666\" width=\"600\" border=
\"1\">
<tr>
<tH>PRODUTO</tH>
<tH>QUANTIDADE</tH>
<tH>VALOR UNITRIO</tH>
<tH>SUBTOTAL</tH>
</tr>
";
while($linha = $consulta->fetch(PDO::FETCH_ASSOC)){
echo "<tr>
<th>$linha[descricao]</th>
<th>$linha[qtde]</th>
<th>$linha[valor]</th>
<th>$linha[subtotal]</th>
</tr>";
}
echo "
<tr>
<th></th>
<th></th>
<th>TOTAL</th>
<th>$total</th>
</tr>
</table>

[ 69 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

<h3>
<a href=\"relatorio.php\" target=\"new\">Gerar relatrio
em PDF</a></h3>
<p>Grficos
<a href=\"grafico.php?tipo=bars\">Barras</a> :: <a
href=\"grafico.php?tipo=Pie\">Pizza</a> :: <a href=\"
grafico.php?tipo=linepoints\">Linha e pontos</a> :: <a
href=\"grafico.php?tipo=area\">rea</a>
<p>
</div>";
rodape();
?>

Salve o script com o nome relvendas.php dentro da pasta vendas.

Veja o relatrio na figura abaixo:

Relatrio de vendas em formato pdf


Segue abaixo o cdigo para criar o mesmo relatrio em formato pdf para impresso.

<?php
//Importa o arquivo de configurao da conexo do Mysql.
require "config.php";

//Importa as funes cabecalho, rodape e menu.

[ 70 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

require "funcoes.php";

// Define a constante da bibllioteca MPDF e inclui a


mesma.
define('MPDF_PATH', 'MPDF57/');
include(MPDF_PATH.'mpdf.php');

// Cria um novo documento.


$mpdf=new mPDF('','', 0, '', 10, 10);

// Cria um array com valores de formatao


$arr = array (
'L' => array (
'content' => 'Controle de vendas',
'font-size' => 10,
'font-style' => 'B',
'font-family' => 'serif',
'color'=>'#000000'
),
'C' => array (
'content' => 'RELATRIO DE VENDAS',
'font-size' => 10,
'font-style' => 'B',
'font-family' => 'serif',
'color'=>'#000000'
),
'R' => array (
'content' => '{DATE d/m/Y}',
'font-size' => 10,
'font-style' => 'B',
'font-family' => 'serif',
'color'=>'#000000'
),
'line' => 1,
);

// Define cabealho e rodap do documento.


$mpdf->SetHeader($arr, 'O');
$mpdf->SetFooter('2015 - Relatrio de vendas | Pgina:
{nb}');

// Busca o total de vendas


$totalg = $pdo->prepare("SELECT (ITENS.valor*sum
(itens.qtde)) as total FROM produtos,itens where

[ 71 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

produtos.codigo=itens.codprod group by itens.codprod,


itens.valor");
$totalg->execute();
$total=0;
while($row = $totalg->fetch(PDO::FETCH_ASSOC)){
$total=$total+$row['total'];
}

// Busca o total de vendas por produto


$consulta = $pdo->prepare("SELECT produtos.descricao,
sum(itens.qtde) as qtde, (itens.valor*sum(itens.qtde)) as
subtotal, itens.valor FROM produtos,itens where
produtos.codigo=itens.codprod group by itens.codprod,
itens.valor");
$consulta->execute();
$html = "<table border width='100%'>
<tr>
<td>Produto</td>
<td>Quantidade</td>
<td>Valor Unitrio</td>
<td>Subtotal</td>
</tr>
<tr><td colspan='4'>-------------------------------------
---------------------------------------------------------
---------------------------------------------------------
---------</td></tr>";
while($linha = $consulta->fetch(PDO::FETCH_ASSOC)){

$html.="<tr>
<td>$linha[descricao]</td>
<td>$linha[qtde]</td>
<td>$linha[valor]</td>
<td>$linha[subtotal]</td>
</tr><tr><td colspan='4'>--------------------------------
---------------------------------------------------------
---------------------------------------------------------
--------------</td></tr>";
}
$html.="<tr>
<td></td>
<td></td>
<td>TOTAL</td>
<td>$total</td>
</tr></table>";

[ 72 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

$mpdf->WriteHTML($html);
$mpdf->WriteHTML("---------------------------------------
---------------------------------------------------------
---------------------------------------------------------
-------");

$mpdf->Output();
exit();
?>

Salve o script com o nome relatorio.php dentro da pasta vendas.

Veja o relatrio na figura abaixo:

Esse relatrio usa tambm a biblioteca mpdf que se for necessrio devem ser
mudadas as linhas em destaque do relatrio citado anteriormente.

Gerando grficos
O resultado das vendas podem ser mostrados em forma de grficos demonstrando
de uma forma diferente os resultados. Segue abaixo o cdigo para gerar grficos:

<?php
#Incluimos a biblioteca
require("phplot/phplot.php");
$tipo=$_GET['tipo'];

//Importa o arquivo de configurao da conexo do Mysql.

[ 73 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

require "config.php";

$consulta = $pdo->prepare("SELECT produtos.descricao,


sum(itens.qtde) as qtde FROM produtos,itens where
produtos.codigo=itens.codprod group by itens.codprod");
$consulta->execute();

$dados = array();
$legenda2 = array();
while($linha = $consulta->fetch(PDO::FETCH_ASSOC)){
$valor=array($linha['descricao'], $linha['qtde']);
array_push($dados,$valor);
$legenda=array($linha['descricao']);
array_push($legenda2,$legenda);
}

#Definimos o objeto para inicar a "montagem" do grfico


$grafico = new PHPlot();
$grafico->SetPlotType($tipo);
if ($tipo=="Pie"){
$grafico->SetDataType('text-data-single');
foreach ($legenda2 as $linha){
$grafico->SetLegend($linha[0]);
}
}

$grafico->SetDataValues($dados);
$grafico->SetTitle("Grfico $tipo");
#Exibimos o grfico
$grafico->DrawGraph();
?>

Salve o script com o nome grafico.php dentro da pasta vendas.

Veja o grfico na figura abaixo:

[ 74 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

[ 75 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

O mesmo script gera diversos grfico, isso ocorre pelo fato do arquivo est
preparado para receber do link que o chama o tipo de grfico que deve ser apresentado.

[ 76 ]
[Apostila de controle de vendas], por [Davi Antonio Quierelli, Valdecir Aparecido Quierelli, Edson Carlos Baptista]

Referncias bibliogrficas

ARAKAKI, Mrcio Eduardo de Carvalho; VARGAS, Elton da Silva. Dreamweaver CS3


Desenvolva Sites por Completo. Santa Cruz do Rio Pardo, SP: Editora Viena, 2010.

SALVADOR, Fbio Burch. Programando em PHP Manual Passo-a-Passo. Santa Cruz


do Rio Pardo, SP: Editora Viena, 2010.

THE PHP GROUP. 2015. Disponvel em: www.php.net. Acessado em: 20 abr. 2015.

QUIERELLI, Davi Antonio. Criando Sites com HTML-CSS-PHP Construindo um


Projeto Iniciante. Leme, SP: Edio do autor, 2012.

QUIERELLI, Davi Antonio. Programao para a Internet PHP com banco de dados
Mysql. Leme, SP: Edio do autor, 2012.

QUIERELLI, Davi Antonio. Aprenda a Programar Computadores Algoritmos e


Lgica de Programao. Leme, SP: Edio do autor, 2012.

[ 77 ]