Painel de administração com PHP + OOP - Aula Extra

Aviso importante!

Eu sei que você não quer ver propagandas, porém o conteúdo gratuito só está aqui graças a publicidade. Considere desativar o AdBlock para esse site.

Sejam todos bem vindos à mais uma aula do curso de criação de um painel administrativo utilizando PHP e orientação a objetos. Nesta aula vamos apenas fazer algumas correções e melhorias em nosso sistema, a fim de prover mais segurança e praticidade em algumas funções.

Função anti SQL Inject

function antiInject($string){
// remove palavras que contenham sintaxe sql
$string = preg_replace("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/i","",$string);
$string = trim($string);//limpa espacos vazios
$string = strip_tags($string);//tira tags html e php
if(!get_magic_quotes_gpc())
$string = addslashes($string);//Adiciona barras invertidas a uma string
return $string;
}

Erro HEADER ALREADY SENT

Se você está com esse erro ao upar seu sistema em algum servidor, basta colocar no início (primeira linha) do arquivo funcoes.php um ob_start(); e no final (última linha) do arquivo um ob_clean();

Mais posts desta série

Este post faz parte de uma série, confira tudo que já foi publicado sobre o mesmo assunto.

Sobre o autor

Ricardo Bernardi

Sou técnico em hardware e desenvolvedor web, e sobre estes dois assuntos comecei a compartilhar aulas e artigos, tornando-me blogueiro em 2008. Em 2010 esse hobby virou profissão, e desde então tenho buscado melhorar e profissionalizar cada vez mais os projetos que mantenho na web.

Comentários

Atualmente temos 73 comentários para este post. Participe você também, clique aqui e comente sobre o assunto.

  • peward comentou em

    Olá, Ricardo! Gostei bastante dessas aulas com seu jeito de explicar. Há um tempo venho tentando compreender a lógica da orientação a objetos, comprei vários livros, fiz alguns cursos, mas só com as suas aulas e sua excelente didática pude compreender o processo. Então, fico-lhe muito grato. Mais uma vez, parabéns!

    Responder
  • Fernando comentou em

    Olá Ricardo

    Parabéns pelo curso novamente; sei que não é sua obrigação dizer como fazer alterações no programa, mas poderia apenas dar uma luz de como eu poderia implementar uma lógica para deletar vários registros de uma só vez através do paineladm? por exemplo, clicando nas caixas tipo checkbox (como nos sistemas de email).

    obrigado pela boa vontade

    Responder
  • redman comentou em

    Olá Ricardo
    Parabéns pelo curso, achei ótimo mesmo; consegui implementar algumas coisas diferentes, mas a lógica foi você quem ditou.
    Continue assim!
    abc

    Responder
  • Oi Ricardo Bernardi tudo bem, parabéns pelo curso e pelo profissional que você é, tenho uma pequena duvida como eu faço
    para estar utilizando o sistema em um site pois não lembro ter visto isso no curso.
    Sera que você pode me da uma ajuda?
    Grato pela atenção.

    Responder
    • Nem tudo se ensina em um curso, cabe a cada um usar a lógica ensinada aqui para implementações do sistema ou para adaptações conforme a necessidade. O que você aprendeu nesse curso serve para administrar um site, alimentar um banco de dados que terá o conteúdo que está sendo exibido no site, mas como você fará esse integração, bom, tem várias formas e cabe a cada um decidir como fazer isso.

      Responder
  • Reginaldo comentou em

    Meus Parabéns por Tudo...
    Estou com um problema ao adicionar o gerador de pdf dompdf no sistema.
    A problema com o Autoload.
    erro:
    Warning: require_once(/DOMPDF.class.php): failed to open stream: No such file or directory in C:\xampp\htdocs\painel\classes\Autoload.php on line 8

    Fatal error: require_once(): Failed opening required '/DOMPDF.class.php' (include_path='.;C:\xampp\php\PEAR') in C:\xampp\htdocs\painel\classes\Autoload.php on line 8
    me ajuda por gentileza,
    ja tentei muito mas não consigo
    sem estar com o sistema eu consigo montar o pdf perfeito
    mas quando vou pelo sistema nao vai
    Espero que me ajuda,
    fico no aguardo até mais...
    obrigados mesmo.

    Responder
  • João Rubens comentou em

    Cara adorei suas video aulas, esse curso foi excelente, assisti uma as vezes três videos por dia cara deu tudo certinho gostei de mais parabéns vc tem muito a manha em ensinar so tenho a agradecer obrigado !!!

    Responder
  • michel spirlandeli comentou em

    Olá ricardo estou com o seguinte erro não consigo acessar a tela de login para logar no sistema ja revi toda o arquivo de função e não conseguir encontrar o erro.

    Notice: Undefined index: logoff in I:\Program Files (x86)\EasyPHP-12.1\www\Painel _Adm\funcoes.php on line 17

    Modulo inexistente nesse sistema!

    Responder
    • Se a tela de login não está aparecendo é porque você errou em alguma parte do código, caso contrário tudo estaria funcionando. Pelo que você relatou está chamando um módulo inexistente.

      Responder
  • Gabriel comentou em

    Ricardo, como poderia resolver este erro. Ja tentei tudo que sei.. e nada de resolver, alguma idéia ?

    Warning: Cannot modify header information - headers already sent by (output started at /home/horag517/public_html/promoter/index.php:12) in /home/horag517/public_html/promoter/funcoes.php on line 61
    Responder
  • Ivan comentou em

    Parabéns pelas aulas, sou muito grato me ajudaram bastante, muito sucesso e novamente parabéns pela iniciativa!

    Responder
  • Parabêns pelas aulas, você realmente tem uma didatica muito boa, ficou quase tudo perfeito aqui, só falta resolver, o problema de que quando eu cadastro ele cadastra valores nulos, vou dar uma repassada nas aulas do crud para ver onde alterar, de resto perfeito.

    Responder
  • Roberto comentou em

    Eu sei Ricardo, pode ficar tranquilo.
    Eu só preciso saber qual o melhor método (e como) realizar a conexão com o SQL Server 2008.

    Pesquisei muito e só consegui achar usando o objeto "COM"... Você poderia me informar qual a melhor maneira de acesso a esse SGBD?

    Responder
    • Eu não sei lhe indicar o método pois as aplicações nas quais usei o SQL Server eram desktop e não web. Veja as aulas do CRUD genérico e você verá toda lógica, daí pra frente são apenas adaptações.

      Responder
      • Roberto comentou em

        Ok Ricardo,
        Muito obrigado. Tentei usar PDO, mssql e etc mas não consegui fazer a conexão com o SQL Server 2008.
        Mesmo assim muito obrigado por tudo... Abraços!

        >> Se alguém souber, deixem a resposta por favor. <<

        Responder
  • Roberto comentou em

    Ricardo,
    Teria como você nos mostrar só um exemplo (parte de login por exemplo) em MVC usando este sistema (Painel Adm)?
    Estou tentando, mas me complico muito ao usar os controllers e etc... Acredito que todos ou a maioria procuram por este assunto.

    Espero que possa nos dar essa ajuda. Já procurei por vários sites, em nenhum encontrei este assunto, só encontro pequenos exemplos.
    Abraços!!

    Responder
      • Roberto comentou em

        Beleza Ricardo,
        Era só para entender mais o MVC no código (puro), sem usar nenhum framework.
        Mesmo assim, valeu por tudo!

        Responder
        • Roberto comentou em

          Só mais uma pergunta, Ricardo:
          Como faço para conectar esse painel com o banco no sql server 2008?

          Usando mssql e PDO, não sei se é pedir demais.
          Mas procurei e até agora nada, baixei dll's e etc e nada! ):

          Abraços!

          Responder
          • Roberto, eu fiz um exemplo para que este sirva de base para cada um poder fazer modificações conforme a necessidade pessoal. Fica a seu critério adaptar para outras tecnologias.

  • Anderson Silva comentou em

    Na verdade, não aparece no vídeo o final do codigo do arquivo banco.class.php, derepente seja isso!

    Abraço
    Anderson

    Responder
  • Anderson Silva comentou em

    Olá, primeiramente, parabéns pelas EXCELENTES aulas!!!
    Cheguei até a aula 5, mas, não mostra o codigo do arquivo banco.class.php, daí não consigo prosseguir o curso, pois, não loga!
    Aparece o seguinte erro:

    Fatal error: Call to undefined method usuarios::trataerro() in C:\xampp\htdocs\caseii\paineladm\classes\banco.class.php on line 26

    Se puder me ajudar!
    Obrigado pela atenção!
    Anderson Silva

    Responder
  • fabriciolimeira comentou em

    olá Ricardo muito bom este post, estou utilizando em um sistema de controle de estoque, gostaria de adicionar um limitador de tempo logado... a cada 30minutos faz logoff ou 15 minutos sem atualizaçao faz logoff, como posso criar essa função?

    Responder
  • aramispaes comentou em

    Professor retirei a barra require_once($pathlocal."/$classe.class.php");

    mas ta dando

    esse erro:
    Warning: require_once(C:\wamp\www\aulas\php\paineladm\classesautoload.php) [function.require-once]: failed to open stream: No such file or directory in C:\wamp\www\aulas\php\paineladm\classes\usuarios.class.php on line 2
    Call Stack

    Responder
  • clauberson comentou em

    Olá Ricardo, parabéns pelas excelentes aulas e tenho uma dúvida, não sei se já perguntaram anteriormente, mas quero contar quantos usuários tem cadastrados como faço, desde já agradeço pela ajuda...

    Responder
  • Gledson comentou em

    Olá Ricardo, agradeço pelas aulas aprendi muito com elas.

    Tenho só uma observação simples a fazer que talvez possa ser dúvida de alguém aqui também.

    Quando esta mensagem aparece.
    'Você não tem permissão para acessar esta página. Voltar'

    O link 'Voltar' não funciona no Chrome, como solução alterei o 'onclick="history.back()"' pelo 'onclick="history.go(-1);return false"'

    Agora está funcionando. =)
    Abraços

    Responder
  • ProtesT comentou em

    ele esta normal ricardo

    porém um amigo me falo assim

    " Primeiro de tudo, isso:
    if($user->linhasafetadas==1):

    Não é o correto a ser feito. Pois a query pode funcionar, mas não possuir nenhuma linha alterada, assim, você passará a mensagem de que a query não funcionou. De longe, a melhor forma é com exception, depois é com o retorno do método que executa a query.

    Segundo, algum motivo para cada um ter uma cor diferente? Isso pode ser um início, no seu código atual não nos diz muito.

    Qual o sentido dessa linha?
    if ($duplicado!=TRUE):"

    Responder
  • gilberto comentou em

    Sou iniciante em PHP, estou contente até então....estou acompanhando o mode de Painel de Administração em PHP + OOP.

    Responder
  • Olá Ricardo! Tenho uma dúvida! Para um desenvolvedor criar um site com painel administrativo.

    Estou desenvolvendo um site para um cliente e dentro do painel além do cadastro de clientes coloquei 2 módulos de pagamento que geram cobranças, pagamento cartão de crédito, boleto bancário, etc. Fora outras coisas como rastreamento do cliente logado por e-mail, e upload de imagens, etc...

    Não tenho muita noção sobre preço. Gostaria de saber o valor + ou -

    Responder
  • Bom dia Ricardo! Aprendi muito com suas aulas, tenho o painel funcionando perfeitamente no wamp server.

    Tenho uma duvida! No google chromer o layout fica cetralizado normal, no iexplorer e mozila, não fica centralizado, aparece no lado esquerdo da tela.

    Responder
    • Você deve fazer o CSS compatível, pois a formatação cross browser não é abordada no curso. De qualquer forma verifique se não há erros, pois pra mim fica normal em todos os navegadores.

      Responder
  • Michelle comentou em

    Boa tarde Ricardo!

    Como faço p/ que quando o usuario estiver logado o ip apareça no banco de dados mysql? Ja tentei mas não consigo pegar o ip do usuario cadastrado no mysql.

    Responder
  • Warlley Alessandro comentou em

    Bom dia, Ricardo estou executando o sistema e esta dando a seguinte mensagem.

    Fatal error: Call to undefined function verificaLogin() in C:\xampp\htdocs\Paineladm\header.php on line 3

    Responder
  • Itamar comentou em

    Ricardo, primeiramente gostaria de parabeniza-lo pelas excelentes videos desta série. Sou iniciante em PHP e posso dizer que aprendi muito com estas aulas, simples, direto e didáticas direto ao ponto. Excelente!
    Bom... aproveitando a deixa, gostaria de perguntar se vc prentende fazer algumas video-aulas semelhantes a estas usando algum framework mvc, ZendFramework ou CakePHP ?
    seria muito interessante....

    Responder
    • Não pretendo, já estou fazendo com Codeigniter e Foundation. Porém somente vou começar a postar quando estiver 100% gravado, e atualmente está com 80% das gravações prontas.

      Responder
  • Ricardo Salim comentou em

    Oi Ricardo, sou eu de novo. Os problemas acima eu já consegui resolver. Era problema com um "/" a mais mesmo.
    Porém, agora veio outro problema. Na verdade, não sei pq tá dando.
    Quando eu hospedo no uol, ele vai perfeitamente, o problema é quando eu passo pra outra hospedagem.
    Ele dá o seguinte erro:

    Fatal error: Cannot instantiate non-existent class: sessao in E:\vhosts\versatilsinal.com.br\httpdocs\admin\modulos\usuarios.php on line 8

    é bem na parte do case 'login' que abre a $sessao = new sessao();

    Responder
    • Gente por favor (isso não vale somente pro Ricardo), vocês precisam entender os erros nos scripts de vocês. Usem tradutores, pensem, usem lógica, não sejam programadores totalmente dependentes de outras pessoas para achar erros no código fonte.
      O erro acima citado está dizendo que "Não é possível instanciar uma classe não existente", ou seja, o sistema não achou nenhuma classe chamada sessão.

      Motivos: o nome da classe está diferente, o arquivo da classe não existe no diretório indicado ou o arquivo não está incluso na execução do script.

      Responder
      • Ricardo Salim comentou em

        Oi ricardo, boa tarde!
        Desculpa a ignorancia nos outros posts.
        Dessa vez eu fiz tudo o que podia e o que sabia.
        Eu sou bem leigo no assunto php, mas pesquisei e li e reli o código. Fiz e desfiz e mesmo assim não consegui arrumar uma coisa.
        Os erros que eu citei anteriormente eu consegui arrumar, o problema agora é outro.

        Isso é o que aparece quando eu aprto no botão para fazer login.
        Ele aparece que o header já foi enviado, que não pode enviar de novo.
        Ele fala que o erro tá na linha 58 do arquivo função, só que é bem na função de redireciona, bem na parte do código header.
        Eu simplesmente nção consegui arrumar isso e fazer o redirecionamento.
        Engraçado é que, no local, ele funciona perfeitamente. na minha hospedagem da uol, ele funciona perfeitamente. mas quando eu passo pra uma outra hospedagem, ele dá esse problema.

        Responder
        • Pelo que você me relatou está acontecendo erro de "Headers already send", se for isso você deve verificar se não há nenhum output antes do seu código, por exemplo um echo ou espaço em branco no início do seu header.
          Verifique também se não pode ser alguma configuração em seu host, contate uma pessoa do suporte para questionar isso.

          Responder
          • Ricardo Salim comentou em

            Então, no meu arquivo header.php está "de acordo com a aula", pelo que eu vejo aqui, o único espaço em branco que eu tenho é logo após o "<?php" eu eu dou um enter pra pular pra linha de baixo e dar o require_once...
            É exatamente esse erro que dá, mas eu não consigo achar uma solução.
            Ele tava dando alguns problemas, mas eu troquei a versão do php para a versão 5.2.17, aí os erros anteriores pararam, mas esse permaneceu.
            Só para você ver, esse é o começo do meu header.

          • Ricardo Salim comentou em

            Eu não consigo usar esse pastebin pra colar o código pra você ver, mas ele, aparentemente, dá erro nesse header.
            O engraçado é que eu achei em outros blogs a opção de fazer com um javascript, funciona, porém ele entre num loop infinito de painel.php?erro=3 e não loga.

          • Renata comentou em

            Ricardo Salim, salva o seu arquivo "sem BOM". Não posso dizer pelo aptana o caminho pois nunca usei, mas pelo notepad++ , depois de abrir o arquivo, vai em "Formatar" e depois em "Converter o arquivo para UTF-8 (sem bom)" ou no Dreamweaver, entra em propriedades da página ( Ctrl+J), vai na aba "Título/codificação" e desmarca a opção "Incluir a assinatura Unicode(BOM)" e depois salva o arquivo.

  • Ricardo Salim comentou em

    Ola Ricardo, boa tarde.
    Tive os mesmos problemas dos meus colegas ali em cima.
    Eu teria que arrumar o arquivo config.php correto?
    No BASEURL eu colocaria o caminho dos arquivos tipo"localhost/painel/adm/"
    na parte do banco, eu colocaria os dados certos dos servidores.
    eu fiz isso, mas ele continua dando problema.

    PHP Warning: require_once(/sessao.class.php) [function.require-once]: failed to open stream: No such file or directory in E:homerjrdesignWebclientesadminclassesautoload.php on line 6
    PHP Fatal error: require_once() [function.require]: Failed opening required '/sessao.class.php' (include_path='.;C:php5pear') in E:homerjrdesignWebclientesadminclassesautoload.php on line 6

    Eu colei acima o que aparece no erro

    Responder
  • Paulo Roberto JUnio comentou em

    Olá,
    Também sou iniciante em php e acompanhei suas vídeo aulas e o sistema esta rodando perfeitamente, agora queria colocar no hearder.php o usuário que esta logado.
    Fiz alguns teste mais consegui mais ou menos assim:

    código fonte excluído, atenção para as regras ao postar comentários

    Responder
  • André comentou em

    Como vc mesmo fala, estudando e pesquisando se aprende, descobri como, tem que criar uma pg tipo usuarios.class para cada tabela, fiz e funcionou, obrigado da mesma forma, abraço

    Responder
  • André comentou em

    Bom dia Ricardo,acmpanhei todo o curso, parabéns pelas aulas, muito boas mesmo.
    Tenho uma duvida, como faço para inserir dados em outra tabela q criei banco de dados? Quais arquivos devo duplicar, desde já agradeço, abraços

    Responder
  • thiagoweb comentou em

    Ola Ricardo quando eu passar meu sistema para meu servidor web e faço login ele dar esse seguinte erro

    Warning: require_once(/usuarios.class.php) [function.require-once]: failed to open stream: No such file or directory in /home/tratodigital/www/login/classes/autoload.php on line 6
    
    Fatal error: require_once() [function.require]: Failed opening required '/usuarios.class.php' (include_path='.:/usr/local/lib/php') in /home/tratodigital/www/login/classes/autoload.php on line 6
    Responder
    • zumba65 comentou em

      estou com o mesmo problema. mas no meu caso, nem mesmo a tela de login aparece. vi os arquivos de log gerados pelo servidor e eles contem a seguinte mensagem:
      PHP Warning: require_once() [function.require-once]: Unable to access /sessao.class.php in /home/meunome/public_html/paineladm/classes/autoload.php on line 6

      Responder
      • Alexandre Hellis comentou em

        Olá Pessoa,

        Estou com o mesmo problema, vamos aguardar a resposta do Ricardo, deve ser bem interessante resolver este erro, já que não encontrei isso em lugar nenhum.

        Responder
      • Ricardo Salim comentou em

        Ola Ricardo, boa tarde.
        Tive os mesmos problemas dos meus colegas ali em cima.
        Eu teria que arrumar o arquivo config.php correto?
        No BASEURL eu colocaria o caminho dos arquivos tipo"localhost/painel/adm/"
        na parte do banco, eu colocaria os dados certos dos servidores.
        eu fiz isso, mas ele continua dando problema.

        Responder
  • everton.web comentou em

    Bom dia Ricardo
    Eu estou com problemas na função isAdmin
    Está parecendo o seguinte erro:

    Fatal error: Cannot access empty property in D:\wamp\www\painel\classes\banco.class.php on line 135
    Call Stack
    # Time Memory Function Location
    1 0.0018 369152 {main}( ) ..\painel.php:0
    2 0.1052 441024 loadmodulo( ) ..\painel.php:8
    3 0.1148 554776 include_once( 'D:\wamp\www\painel\modulos\usuarios.php' ) ..\funcoes.php:46
    4 0.1154 555192 isAdmin( ) ..\usuarios.php:178
    5 0.1358 686248 banco->retornaDados( ) ..\funcoes.php:106
    6 0.1359 686360 mysql_fetch_object ( ) ..\banco.class.php:135

    Já verifiquei o CRUD e está tudo correto, não entendo o que acontece que ele não está verificando se o usuário é admin.

    Responder
  • Claudimir comentou em

    Boa tarde Ricardo.
    Estou acompanhandoo curso e estou na aula 7, quando testo o aplicativo no Firefox, funciona perfeitamente, igual como vc desenvolveu, porém, ao testar no IE9, fica tudo desconfigurado. Tem como consertar isso? Alguma configuração especial?

    Responder
  • Edson Cardoso comentou em

    Antes de mais nada queria agradecer pelas aulas que são excelentes. Também queria da uma sugestão muito útil para min e que também pode servir muito para outros aprendizes do RBTECH, seria possível fazer mais uma aula ensinando a fazer um upload de image para o usuário? Se possível usando jQuery também. Eu ficaria muito feliz com mais uma aula para esse crud e tenho certeza que muitos outros usuários também gostariam pois ai seria possível utilizar o crud para um cadastro de produtos por ex: bom desde ja agradeço e fico na expectativa abraços...

    Responder
  • Sandro Fortkamp comentou em

    Muito boa aula Ricardo você está de parabéns, estou assistindo suas aulas e aprendendo bastante, também estou usando a sua lógica para implementação de alguns projetos meus, quando o negócio tornar um pouco rentável, irei assinar seu canal pois a sua linha de aprendizagio é show.

    Responder
  • Junior Eberhardt comentou em

    valeu Ricardo pelos extras...

    só uma coisa, sobre a verificação que você falou no início desta aula; eu vi, revisei, acompanhei minuciosamente, e fiz como você mostrou no vídeo, mas não funcionou, ele não deixava acessar o painel de administração...

    e quando eu tiro dos arquivos (funcoes.php e usuarios.php) esta parte:

    $sessao->getVar('logado')

    funciona certinho..

    valeu e obrigado por tudo.

    Responder
  • Enrico comentou em

    Ao invés de utilizar esta função poderia refazer a classe de SQL utilizando o PDO ou utilizar o mysql_real_escape_string para isto, imagine que a senha do usuário seja "INSERT", e a função removeria, ou seja, usuário nunca mais loga.

    E na parte de verificação do formulário poderia economizar código. Deixava o campo nome e email fora da condição (já que ambos podem alterar) e fazia uma condição só com a verificação de isAdmin e ali colocava os campos de ativo e admin.

    Responder
  • Murilo Henrique comentou em

    Gostei da aula, a função de anti SQL inject foi uma boa você passar porque nem todo mundo sabe se proteger dessa tecnica que parece que não mais é muito eficiente se não tiver uma devida proteção no sistema.

    Responder

Deixe seu comentário