Sistema Básico
Comentários (727) Trackbacks (1)
  1. Parabéns! Fiz download vou testa-lo!

    Obrigada pela ajuda ;D

    • Obrigado @Suelen.
      Qualquer dúvida é só falar.

      • Primeiramente parabéns por criar esse excelente sistema, principalmente para iniciantes.

        Mas só uma questão… … a recuperação de senha não está funcionando! Acho que deve ser alguma falha na busca das informações do usuário no BD ou seria a minha versão do MySQL? Seria pedir demais você revisar e nos informar algum possível erro? O restante está funcionando divinamente bem. Parabéns pela criatividade.

        Aguardo um retorno!

        • Olá @Everton, funciona sim ;)
          Me passe detalhes do problema que ocorreu com você.
          Erro na tela?
          Não chegou mensagem de email?
          Enfim… de detalhes.

          • Olá Roberto, ao solicitar uma nova senha, o e-mail com a nova senha não chega e, se vou logar com a senha antiga, ele entra normalmente. É como se a senha não estivesse sendo redefinida entende?

            O sistema funciona perfeitamente, o impasse é somente esse!

            Mais uma vez parabéns pelo incrível sistema!

            Agradeço pela atenção!
            Aguardo contato.

          • Olá @Everton, isso é estranho demais… pois se vc recebeu o email de ativação de cadastro, deveria também receber normalmente email para redefinição de senha.
            você fez alguma modificação nos arquivos originais?
            Você não recebe o email com a nova senha, mas quando solicitou a senha, imagino que tenha informado o mesmo email que cadastrou, certo?
            O problema é que apenas não chega o email, mas a mensagem de sucesso na geração da nova senha aparece certinho?

          • Olá Roberto, a questão da redefinição de senha eu já resolvi. Mas gostaria de saber por que as menssagens enviadas para confirmação de cadastro sempre caem no lixo eletrônico daa caixas de email. Fiz o teste com 5 e-mails diferente e sempre a mensagem entra na apsta de span.

            Poderia por gentileza me responder a essa dúvida?!

          • Olá @Everton.
            Essa é fácil… há mais de uma justificativa para isso acontecer… vou citar duas apenas:

            - Primeiro o que pode causar isso é o teu domínio ser encarado pelos provedores de email como hotmail, yahoo, gmail como um domínio novo e por isso não saberem se é um spammer ou não.
            Há procedimentos junto ao server que podem auxiliar os provedores a entenderem que teu server não é um server spammer, procure informações junto ao suporte de teu server.

            - Segundo é a função mail(), que ao meu ver é um pouco limitada nesse sentido. pois os cabeçalhos de envio são pobres e não passam muita informação para o servidor que recebe, e este, na dúvida encara como spammer. Procure no google sobre a variedade de headers a serem usados na mensagem usando mail() e utilize o máximo. Mesmo assim não é nada garantido.

            Solução eficiente: PHPMAILER
            Da uma olhada nesse meu tutorial abaixo, tente entender e adaptar para o sistema de envio deste tutorial de cadastro.
            http://www.sistemabasico.com.br/2011/01/20/como-e

            Envio autenticado é maior a chance de chegar no destinatário na caixa de entrada.
            Bons estudos!

          • Obrigado Roberto, é sempre bom ter alguém que possa tirar nossas dúvidas.

            Irei tentar fazer o que você está me aconselhando.

            Obrigado e abraço!

  2. Vou testar no servidor, me parece simples e eficiente. Grato!

  3. Roberto, facil entendimento!

    Como faço pra colocar um layout neste código, qual a possibilidade, eu teria que utilizar CSS e HTML, tipo um menu para acessar as informações, por exemplo:

    CADASTRAR/CONSULTAR/ATIVAR

    Obs: sei que aqui vc está demonstrando PHP, mas seria possível comentar, Obrigado!

    • Olá! Pelo que eu entendi você quer saber como fazer uma interface administrativa para gerenciar os usuários cadastrados, correto?
      Se for exatamente isso, a boa notícia é que nos próximos dias desenvolver um tutorial para essa questão.
      Abraço

      • Isso, mesmo uma interface!

        Mas eu estava precisando para até sexta feira rsrs..

        Nas verdade terei que criar Um cadastro de Usuario

        Cadastro Professor/Aluno/Notas…um sistema básico mesmo!

        Mas obrigadio pela atenção! Abraço

        • Você chegou a ver o <a title="Demonstração do cadastro com login e sessions" href="http://www.sistemabasico.com.br/php/cadastro/formulario_cadastro.php&quot; target="_blank" rel="nofollow">DEMO CADASTRO e a página DEMO ACESSO RESTRITO, com formulário de cadastro e inclusive exemplo da página restrita funcionando?
          Talvez seja uma boa pra começar a entender como fazer a interface, é HTML.
          Pra fazer o painel admin não seria muito diferente, o princípio é o mesmo, HTML para os formulários e consulta no banco de dados para listar os cadastros, criação de links que leva às páginas que exibem conteúdo com opções de edição, etc… mas pra sexta-feira fica apertado pra você conseguir eu acho.
          Se quiser contratar meus serviços, mande uma mensagem através do canal de <a title="contato" href="http://www.sistemabasico.com.br/contato/&quot; rel="nofollow">contato do site e a gente conversa.
          Abraço

  4. olá Roberto, gostei muito do seu tutorial, me ajudou baste. Mas agora estou com um problema e gostaria de saber se vc pode me ajudar. Essa mensagem aparece quando tento logar:

    Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at /home/gorkco5/public_html/podpopuli.com.br/verifica_usuario.php:10) in /home/gorkco5/public_html/podpopuli.com.br/verifica_usuario.php on line 12

    Como devo proceder? Obrigado!

    • Olá @André! Esse erro é comum acontecer quando tentamos dar algum tipo de saída antes de chamadas como session_start(), header() e outras…
      Qualquer tipo de saída, até mesmo um espaço pode causar esse erro se ele for lançado antes das funções que citei.
      Verifique se está colocando session_start(), exatamente acima de tudo no código.
      Uma outra opção um pouco deselegante de resolver o problema, seria colocar no topo do arquivo, antes mesmo de session_start(), a função ob_start(); e colocar no final de tudo, lá embaixo, a função ob_end_flush();.
      Tente aí, analise as possibilidades que eu citei, se continuar o problema manda outro comentário.
      Abraço

      • Oi Roberto, agora está funcionando! Fiz a primeira alternativa que vc disse, valeu!

        Mas agora estou com outro problema: a verificação não está confirmando usuário/senha de um cadastro de teste que fiz. Conferi no banco de dados e lá está ok. O que pode ser Roberto?

        Mais uma vez obrigado.

        • @André, pode ser diversas coisas, fica difícil adivinhar, mas me baseando na dúvida de centenas que já me enviaram email sobre esse tutorial de cadastro ao longo desses anos, chutarei algumas possibilidades que podem ser as suas.
          Primeiramente verifique se manteve a criação da tabela no banco de dados exatamente como informei, com os valores para VARCHAR em senha e VARCHAR em email, exatamente como indiquei no tutorial. Se está tudo Ok em relação à isso, verifique se o teu arquivo verifica_usuario.php está exatamente igual ao que que eu disponibilizo aqui no tutorial de cadastro de usuários com login.
          Se não for nenhuma dessa opções me diga exatamente o que ocorre, se aparece alguma mensagem de erro etc…
          Outra coisa que eu ia esquecendo… após você cadastrar um user teste, antes de tentar fazer login, você confirmou o cadastro clicando no link que é enviado ao seu email?
          Veja bem… isso é necessário para que após o clique o teu status se ative.

          Enfim… analise essas dicas

          Abraço

  5. Roberto, mais uma vez obrigado. A tabela foi cria conforme o tutorial assim como o arquivo "verifica_usuario.php".

    Confirmei o cadastro através do link enviado no email. Ao tentar o login aparece a mesagem: "Você não pode logar-se! Este usuário e/ou senha não são válidos! Por favor tente novamente!".

    Obrigado!

    • Veja bem @André, verifiquei teus arquivos e o erro que você cometeu foi o seguinte:
      Você alterou a forma de gerar senha no arquivo cadastra.php retirando a função que gera uma senha aleatória, mas até aí sem problemas se tens conhecimento a idéia é essa, explorar novas possibilidades, porém também retirou a função md5() (<a title="Função md5() do php – veja no manual do PHP" href="http://www.php.net/manual/pt_BR/function.md5.php&quot; target="_blank" rel="nofollow">veja sobre md5() no manual do php) que calcula o hash md5 de uma string e gera uma saída de 32 caracteres (tipo uma criptografia), só que você esqueceu de alterar o arquivo verifica_usuario.php.
      Veja como funciona…
      No arquivo cadastra.php a senha passa por md5() e é gravada no banco de dados desta forma, como expliquei acima, e na hora do login a senha informada também passa por md5() no arquivo verifica_usuario.php e o valor de md5() pra senha informada no login é comparado com o valor md5() gravado no banco de dados, se 'bater', passa, se não será exibido a mensagem que você estava recebendo.
      Acho que está me entendendo, você não retirando o md5() do arquivo verifica_usuario.php faz com que a comparação nunca 'bata', pois no banco de dados a senha está em sua forma original e no verifica_usuario.php está tentando comparar com a do banco de dados uma senha em md5().
      O mais seguro seria manter o md5(), obviamente nos dois arquivos, ou menos seguro seria retirar o md5() também de ambos arquivos, mas não é aconselhável.

      Observação: Se escolher retirar o md5(), não esqueça de verificar outros arquivos, principalmente os relacionados a senha, como por exemplo o gerar_nova_senha.php

      Espero que tenha entendido que mudanças requerem um pouco de atenção, pois nada que está no código original é por acaso.
      Qualquer 'vírgula' que você queira mudar deve estar consciente disso, sabendo que deve verificar se essa 'vírgula' não tem ligação com outros arquivos, deve seguir a lógica do programa para não ter esse problema, pois entendendo a lógica já é meio caminho andado, tudo fica muito fácil depois.

      Tente aí e veja se da certo depois de corrigir o que citei.
      Abraço

  6. Olá Roberto, tudo bem?

    Então, esses códigos são minha salvação, pois com ele posso terminar o meu site q estou fazendo para um trabalho de colégio. Porém, eu não sei onde depositar estes códigos.

    Eu baixei o programa que você recomendou, mas não consegui usá-lo, pois apenas tem algumas coisas como Styles ( CSS ), Config ( PHP ), Index ( PHP ), Scripts ( Js ) e Validate ( PHP ).

    Como eu faço para colocar os códigos em relação com o meu site e qual banco de dados eu deveria usar e onde depositar os códigos no banco de dados?

    Sei que são muitas perguntas mas eu realmente preciso disso para conseguir realizar meu projeto.

    Agradeço…

    • Olá @Guilherme, por favor quando for fazer um comentário, faça um novo, não responda o comentário de algum outro usuário, caso não vá acrescentar em relação a dúvida do outro usuário, pois me da um trabalho fazer essa separação depois. = ) Valeu

      Bom… quanto a tua dúvida ou diria melhor dúvidas hehehe fica meio difícil de ajudar, pois eu teria que praticamernte publicar uns 3 ou 4 tutoriais para sanar cada uma das tuas ansiedades por conhecimento.
      Sugiro que leia mais sobre lógica de programação e PHP para pelo menos poder interpretar e com o tempo já estará escrevendo ou modificando códigos de acordo com as tuas necessidades.

      Ainda assim irei tentar na medida do meu possível.
      Os arquivos são um exemplo 'reles' de um site completo, claro que está longe de sequer ser um prospecto de site hehehehe, mas a intenção é passar apenas a idéia de como utiliza-lo… a 'ponta da corda'.
      Se você seguir e entender a lógica do tutorial, ler ele todo, talvez consiga avançar.
      Entenda que não é um programa onde você baixa ele, apernta um botão INSTALAR e tudo se da como mágica, ou seja, os arquivos são aqueles ali mesmo e deves modifica-los apenas de acordo com o que eu indico no tutorial. Estes arquivos são apenas um adendo e não o todo, o importante é o tutorial, entender o que se faz, de outra forma sempre terá problemas.

      Bons estudos!

  7. Então, Roberto, eu estou usando o MySql. Eu consegui fazer a minha tabela de banco de dados e fiz um formulário no dreamweaver. Você poderia me dizer qual é meu próximo passo?

    E também gostaria de saber se você faz estes códigos para as pessoas, claro, sendo pago. Se faz, me passe o seu contato.

    Agradeço..

    • @Guilherme, se você tem a tabela já no banco de dados e já criou seu formulário html, então é só seguir o tutorial, onde você pode ver que também tem um formulário, o que tu tem que fazer é apenas transferir situações, por exemplo, no tutorial tem o form de cadastro, e você criou um aí… então é só imaginar que o que tu criou é o mesmo que o do tutorial e seguir os passos.
      Você tem que acompanhar o tutorial desde lá do topo. Todos os arquivos estão interligados, o formulário envia os dados para o cadastra.php e este grava no banco de dados na tabela mysql e assim por diante… cada arquivo tem sua função bem explicada no tutorial.
      Quanto a sua pergunta sobre eu desenvolver como prestação de serviços…
      Sim, faço e para entrar em contato comigo, basta enviar uma mensagem através do formulário de contato deste site.
      Abraço

  8. Roberto, só mais algumas perguntas…

    Eu preciso usar aquele primeiro código? Pois eu já tenho a tabela do banco de dados feita, e no código está escrito "create table usuarios".

    Como eu faço para inserir os códigos php lá no local host, com o phpmyadmin?

    E quando eu tiver que entregar este trabalho, eu vou ter que coloca-lo em um cd. Como eu vou fazer para botar o banco de dados e os códigos no cd, porque eles estão na Internet….?

    Cara, desculpe as perguntas inúteis, mas eu realmente não entendo nada disso e gostaria muito de aprender, por isso estou te enchendo tanto o saco…=)

    vlws

    • @Guilherme, juro que entendo tua ansiedade, mas infelizmente tuas dúvidas saem muito do propósito deste tutorial, não sei com o poderia gravar um sistema desses em um cd, desculpe.
      Quanto a tabela no banco de dados não precisa fazer outra se já fez uma igual à que indico neste tutorial, mas deve ser igual.
      Os arquivos são colocados exatamente onde os arquivos do teu site devem estar, se tem outro propósito para executar tal sistema que não seja em um servidor web, sinto muito.
      Amigo, vendo tamanha as dúvidas que tem sou obrigado a dizer que este tutorial apesar de ser básico, ainda não é pra você.
      Desculpe não poder ajudar mais por enquanto.

  9. cara to precisando de ajuda,

    eu baixei o arquivo zipado e upei no meu host no Awardspace, o problema é que quando eu tento cadastrar um novo usuario, ele aparece uma mensagem de erro, que é a seguinte:

    Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

    o que está dando errado? pq não está cadastrando novos usuários?

    obrigado desde já.

    • @Gigllyan, este erro é porque o sistema não está conseguindo conectar com o servidor MySQL.
      Você configurou o arquivo config.php com os dados referentes à tua conexão com o seu banco de dados?
      Veja que não basta baixar os arquivos no zip, deve ler o tutorial para aprender e configura-lo de acordo com os teus dados e melhor, deves ler o tutorial para aprender mais sobre o PHP.
      Abraço

      • hmmm, é pq sou 'meio' (pra não dizer completamente), leigo no assunto, e axei q so precisava upar e pronto, obrigado pela atenção, vou dar uma lida no seu tutor pra tentar resolver…

        obrigado pela ajuda, qualquer coisa eu volto, rsrs.

        • depois que recebi sua dica eu corri atras das soluções, encontrei esse tutorial que me ajudou a configurar o arquivo config.php, o erro que eu havia falado parou de aparecer, mas começou a aparecer outro erro:

          <code>

          Table '541921_1234.usuarios' doesn't exist

          </code>

          PS: eu criei um novo banco de dados com o nome 541921_1234

          o meu código do config.php ficou assim:

          <code>

          </code>

          e agora? o que você sugere?

          Abraços

  10. aonde eu posso baixar esse banco de dados nao tem como eu usar o de min

    ha hospedagem ,nao eu ja o usei para varias outras coisas como instalar foruns q hoje nao existem mais etc… se puder me ajudar agradeço tenho muito q cadastrar usuarios no meu site para que eles possam se logar e adiquirir conteudos exclusivos

    • Olá @wagner! Claro que você pode usar o banco de dados de sua hospedagem, alias… DEVE hehehehe, se ele for MySQL obviamente, se for outro banco de dados como Oracle, SQL, Firebird, PostgreSQL, Access, etc, terá que adaptar as querys e conexão com o banco de dados conforme for o seu.
      Se for MySQL você deve apenas criar esta tabela que instruo no tutorial dentro do teu banco de dados… e no arquivo config.php, deve informar os dados de acesso ao seu banco de dados conforme você mesmo já disse ter feito com fóruns, etc e tudo vai correr bem. O phpMyAdmin é 'apenas' um gerenciador amigável do banco de dados MySQL, desenvolvido em PHP e que nos facilita muito e na maioria das vezes é o gerenciador Mysql que os servidores de hospedagem disponibilizam.
      Bons estudos!

  11. *quando eue sto sempre aparece isso

    Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘usuário de banco de dados’@'localhost’ (using password: YES) in C:xampphtdocsconfig.php on line 7

    Warning: mysql_select_db() [function.mysql-select-db]: Access denied for user ‘ODBC’@'localhost’ (using password: NO) in C:xampphtdocsconfig.php on line 8

    Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in C:xampphtdocsconfig.php on line 8

    Warning: mysql_query() [function.mysql-query]: Access denied for user ‘ODBC’@'localhost’ (using password: NO) in C:xampphtdocscadastra.php on line 53

    Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:xampphtdocscadastra.php on line 53

    Warning: mysql_query() [function.mysql-query]: Access denied for user ‘ODBC’@'localhost’ (using password: NO) in C:xampphtdocscadastra.php on line 59

    Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:xampphtdocscadastra.php on line 59

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:xampphtdocscadastra.php on line 61

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:xampphtdocscadastra.php on line 62

    Warning: mysql_query() [function.mysql-query]: Access denied for user ‘ODBC’@'localhost’ (using password: NO) in C:xampphtdocscadastra.php on line 128

    Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in C:xampphtdocscadastra.php on line 128

    Access denied for user ‘ODBC’@'localhost’ (using password: NO).

    Nao sei o qfazer, ja tentei arrumar e nao adianta so aparece isso.Me ajuda por favor

    • Oi @Bianca, o teu problema é simples de resolver, basta que no arquivo config.php do tutorial, você informe os teus dados de conexão com o teu banco de dados de forma correta, ou seja, com as tuas informações de usuário, senha e nome do banco de dados.
      Abraço!

  12. Cara, fiz tudo certinho…

    Criei a base de dados, configuei o acesso ao DB no arquivo config.php, enfim, ao preencher o form de cadastro, ele redireciona para a cadastra.php e fica em branco a tela, não dá erro e nem mensagem alguma, apenas vai para a pagina da action no caso a cadastra.php porem sem nenhum resultado (tela em branco).

    O que pode ser?

    Segue link: http://www.alumidecor.com.br/sistema/formulario_c
    Desde já o parabenizo pelo seu site e pela excelente iniciativa.

    Obrigado!

    • Olá @Diego, tudo certinho você não fez, se tivesse feito não dava erro hehehehe

      @Diego problema está no teu arquivo cadastra.php, verifique as modificações que você fez e veja se não fala nada.

      Olha só te enviei um email, verifique o que te solicito lá.

      • Olá Roberto!

        Assim como todos que estão aqui no tuto, quero lhe parabenizar pelo excelente trabalho.
        Se todos que colocam tutoriais na web fizessem com a intenção de ensinar, o mundo seria melhor!

        Como tudo não são flores…hehehehe… estou com o mesmo problema do Diogo, ao enviar os dados, não aparece nenhuma mensagem de erro, apenas uma tela em branco.

        Você pode dar uma força pls!

        Valew!

        • Olá @Luiz, procure verificar o teu arquivo cadastra.php, se fez alguma mudança, etc.
          Se o erro fosse no script que eu disponibilizei, seria impossível funcionar pra uns e pra outros não… concorda?
          Desculpe… acho que inconscientemente estou respondendo ao Diogo que por email disse-me que corrigiu um erro meu no arquivo cadastra.php… equivocadamente, pois não há erro.
          Pedi à ele que mostrasse o erro, desde então nunca mais se manifestou.
          Mas focando na tua dúvida… reveja o arquivo… instale exatamente como fiz… limpo para testes, e se tudo der certo tente integrar ao teu site.
          Verifique se tua hospedagem da suporte as funções… enfim
          No aguardo.

          • Olá Roberto!

            Reinstalei os arquivos e como você disse, funcionou.

            Mais uma vez parabéns pelo site e obrigado!

  13. Aeee, funcionou:

    agora eu tenho outra dúvida, é que eu uso o serviço free do awardspace, nesse caso eu não tenho suporte a uma conta de email a não ser que eu pague.

    e pelo que eu vi eu preciso de uma conta de email, que vai enviar a confirmação quando o usuário se cadastra, e agora? eu posso usar um email de outro host? se sim, como deveria ser o procedimento?

    Ps: eu tentei adicionar meu outro subdominio, mas me parece que só é aceito domínios, e eu num tava muito afim de pagar pra poder usar o serviço

    Ps&sup2;: o site tá muito legal, continue assim.

    • PS&sup3;: eu ativei minha account pelo phpmyadm, e defini nivel 2 e depois nivel 1 de acesso, das duas formas eu não consegui visualizar o painel de controle, apesar de visualizar no código fonte do arquivo area restrita, a mensagem que aparece eh a mesma:

      Seu nível de usuário é 1.

      Com esse nível, você tem permisão de acesso à algumas áreas exclusivas do site.

      Seu nível de usuário é 2.

      Com esse nível, você tem permisão de acesso à algumas áreas exclusivas do site.

      • @Gigllyan, você claramente não leu o tutorial, não existe um painel de controle, não fiz essa parte…
        A idéia é que o usuário que utilize o tutorial, adquira conhecimentos e com eles possa criar um painel de controle para este sistema, pois não é difícil se o tutorial for bem entendido e se a aprendizagem do PHP evolua com as informações deste tutorial. Entenda que não é um código de copiar e colar… até pode ser usado desta forma, porém a aprendizagem é nula.
        Quanto aos níveis de usuário, eu expliquei no tutorial que iríamos fazer algo que a base para níveis ficasse pronta, mas o desenvolvimento de aplicações e verificações de níveis, permissões de áreas para um nível e outro não e assim por diante, ficaria por conta de vocês ou até eu lançar tutoriais para essa questão e quem sabe até um painel de controle.
        Enfim… se nos teus testes conseguiu chegar até a autenticação após o login, parabéns, você concluiu o tutorial com sucesso, reveja-o tentando entender os códigos, pois se conseguir isso sua mente se abrirá para muitas outras possibilidades, como reposição de códigos para outras ações e assim por diante… um passo de cada vez até ter mais facilidade de se aventurar com PHP. Pratique todo dia e notará a diferença.
        Bons estudos!

    • @Gigllyan, vc pode tentar utilizar uma conta do gmail, talvez você consiga.
      Eu consigo utilizar contas do gmail utilizando o phpMailer (uma classe de envios de email que utilza smtp autenticado, onde há a possibilidade de definir algumas características do gmail, como porta, autenticação etc.
      Nuinca testei o gmail e nenhum outro tipo de servidor externo com a função mail(), mas fica aí a seu critério tentar utilizar mail() com uma conta desses servidores ou tentar aprender utilizar o phpmailer.
      Em breve mandarei um tutorial sobre o pahpMailer. Por enquanto joga no google que tem muito material.

      • ah bom, eu achei que já vinha com painel de controle pq li no código essa parte:

        <code>

        if ($_SESSION['nivel_usuario'] == 0){

        echo "- ForumAbrir tópicos, postar em tópicos

        de terceiros.";

        }

        if ($_SESSION['nivel_usuario'] == 1){

        echo "- ForumAdministração -

        Acesso total ";

        }

        </code>

        e como eu falei não entendo muita coisa sobre programação em php, vo tentar essas suas últimas sugestões e ver no que dá… mas eu ja consegui usar suas dikas da forma que eu precisava, que era proteger alguns arquivos meus pra que somente eu pudesse visualizar e aproveitando pra adquirir mais alguns conhecimentos (apesar da preguiça)

        valeu mesmo, suas dicas estão ajudando bastante. e desculpe pela minha ignorância.

        abraços

        • Que isso @Gigllyan, não se desculpe, no início é assim mesmo, eu estou remando muito ainda com programação Web… e não tem fim… sempre tem algo à se aprender.

          Qualquer dúvida fala aí, se eu puder ajudar… ajudarei.

          ;)

  14. oi , eu conseguir arrumar graças a deus, mas agora na parte cadastrar ta assim:Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:xampphtdocscadastra.php on line 61

    Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:xampphtdocscadastra.php on line 62

    No database selected

    • Oi @Bianca, na verdade ainda não resolveu, pois permanece um erro referente à conexão com seu banco de dados.
      O trecho que está dando erro é quando é feito a verificação se usuário e email informados no cadastro já estão ou não sendo utilizado por outro usuário.
      Não sei quais as modificações que fez no cadastra.php, por isso não tenho como te dizer onde está errando… se não fez modificações alguma, então o problema ainda está somente no config.php, onde na função <code>mysql_select_db(BD_NAME)</code> não está rolando corretamente, pois não deve ter informado o nome do BD na constante BD_NAME, mais precisamente nessa linha: <code>define('BD_NAME', 'nome do seu banco de dados');</code> Tente aí ;)

    • @Bianca, que tal no config.php vc colocar aspas simples ao redor do usuario 'root' ?

      Assim: <code>mysql_connect('localhost', 'root');</code>

      Não sei se vai funcionar, mas tente.

      Depois me fale ;)

      • obrigada arrumei isso agora o erro ta no e-mail, so q eu nao entendir o erro , vc poderia me explicar?

        Warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:xampphtdocscadastra.php on line 175

        Foi enviado para seu email – ( bianca.prado.ramos@gmail.com ) um pedido de confirmação de cadastro, por favor verifique e sigas as instruções!

        eu entro no meu e-mail e nao aparece nada.Desculpa se to ti encomodando.

        • tambem tenho outra duvida, como vou saber o nivel do usuario?

          • Como assim @bianca?
            Você pega o nível do usuário quando ele faz login.
            Acompanhe o tutorial com atenção no arquivo verifica_usuario.php e verá que é gravado uma session com o valor do nível do usuário quando ele faz o login.
            No arquivo functions.php você pode verificar isso com condicionais. Pode criar uma segunda função, session_checker2() por exemplo e verificar se o usuário tem nível tal e nas páginas restritas para esse nível chamar essa segunda função e não a primeira. Use a criatividade, as possibilidades são inúmeras.
            Bons estudos!

        • @bianca, você não tem um servidor smtp instalado, então não tem como enviar emails, se vc usar um servidor remoto (hospedagem) estes geralmente te dão acesso e possibilidades de envio de emails…
          Se está utilizando o PHP instalado no seu computador, a dica fica para você configurar o php.ini de uma forma que a conta de email que irá enviar os emails seja o do gmail e assim talvez consiga utilizar a função mail localmente.
          Se não der recomendo a busca por PHPMailer no google e utilizar esta classe para envio SMTP de forma autenticada. Em breve postarei um tutorial de envio de email via smtp autenticado utilizando a classe PHPMailer.
          Bons estudos!

  15. Em primeiro lugar parabéns pelo tutorial ai, muito bom, tenho umas duvidas, estou atualmente aprendendo php, banco de dados e tal, tô refazendo o site da empresa aonde trabalho, tô querendo colocar esse sistema de login de usuario, area restrita e tal mas só de uma maneira, como aonde trabalho é uma empresa de exportação e importação, no site tem muitas fotos de produtos, queria um sistema que quando a pessoa entrasse no site, pudesse ver tudo, mas quando chegasse nas partes dos produtos, poderia ver as fotos em miniaturas lá, se a pessoa clicasse em uma das fotos para amplia-lá, ai apareceria um aviso falando pra ela se cadastrar ou fazer login para ter acesso , tem como fazer isso? se sim teria como me dar uma luz?

    vou agradar respostas

    Abraços

    • Olá @Felipe, o tutorial é justamente para situações como a que você descreveu.

      Você chegou a dar uma analisada nas possibilidades que abrem se acompanhar os ensinamentos do tutorial?

      Depois de tudo definido e configurado, o princípio ativo que bloqueia o acesso é a chamada para função session_checker() criada para verificação se o usuário que tenta acessar está logado, e quando não está, é redirecionado para página de formulário de login, sendo assim quando quiser bloqueio em alguma página/arquivo basta essa chamada da função como eu mostro em um exemplo bem claro no arquivo area_restrita.php no tutorial.

      Para teu caso uma forma de fazer entre milhares, seria todas as miniaturas liberadas ter um link padrão que envia o id da imagem como um parâmetro para uma mesma página/arquivo, o qual grava o id da imagem em uma session() e e depois faz uma verificação se o meliante está logado, se sim ele faz a consulta o banco de dados das imagens e exibe todas as miniaturas novamente e a que tem o id salvo na session(), ele exibe ampliada, pois com o id da imagem você faz tudo. Mas isso é uma idéia apenas e imaginando que tuas imagens estejam gravadas os nomes em banco de dados, o que seria ótimo e mais prático… digo apenas os nomes, as imagens podem ficar em pastas.

      Bom … ve se ajuda em alguma coisa as dicas.

      Bons estudos!

  16. Oi Roberto,

    Agradeço pelo tutorial. Correu tudo bem ate que deu erro (rsrs). Pode me ajudar, to arrancando meus cabelos aqui.

    Não cadastra no BD. Depois que preencho o formulario gera uma pagina em branco do cadastra.php. Acho que é porque errei na hora de preencher os dados que envia para o email para depois poder ativar.

    Segue o código:

    // Enviar um email ao usuario para confirmação e ativar o cadastro!

    $headers = "MIME-Version: 1.0
    ";

    $headers .= "Content-type: text/html; charset=iso-8859-1
    ";

    $headers .= "From: "; // TEU DOMÌNIO E TEU EMAIL

    $subject = "Confirmação de cadastro – Condominio";

    $mensagem = "Prezado $nome $sobrenome,

  17. Roberto,

    Ja resolvi. Apaguei o arquivo cadastra.php e fiz tudo de novo. Deu certo!!!

    Grata, seu tutorial é muito bom mesmo!!!

    Agora vou fazer um HTML bonitinho rsrs

  18. Excelente tutorial!!!

    Parabéns Lunelli!!

    Estou tentando aprender PHP, e é através de tutoriais como este que eu vou conseguindo aos poucos.

    Estou tentando fazer com que uma sessão encerre quando eu clico num botao "Sair". detalhe, não tem login na página, apenas uma carrinho de compras.

    aparentemente funciona só com o botão, mas não precisei chamar a função destroy, por isso fiquei sem saber se está funcionando de verdade.

    você pode me ajudar a entender? isso tudo é ainda muito complicado pra mim, mas eu chego lá!

    Obrigada!!!

    • Olá @Eloiza, desculpe-me a demora, mas estava corrido esses dias por aqui.
      Então, posso te ajudar sim, mas antes você terá que me ajudar a conseguir ti entender =)
      Sério, não entendi muito bem sua dúvida.
      Você quer encerrar a session() sem usar session_destroy()? é isso?
      Você pode tentar limpando a session com unset().
      Minha resposta ficou vaga até pra mim. Não entendi sua dúvida muito bem.
      De mais detalhes.
      ;)

      • Oi Lunelli!

        Eu estou coloquei um botão (submit) comum de saida de página. Quando clico nele, Sai da página que estava para outra aberta anteriormente. Não cheguei a usar a função destroy(), por isso não sei se é assim mesmo. Não faço idéia de como a função destroy funciona em PHP! É parecido com Java?

        [ EDITADO por Roberto Lunelli ]

        @Eloiza, para não ficar muito extenso teu comentário, retirei o imenso bloco de códigos que não tinha nenhuma relação com a ajuda que eu poderia te dar.
        Veja se minha resposta mais abaixo deste teu comentário lhe auxilia um pouco mais.

        [/ FECHANDO EDIÇÃO ]

        • Oi @Eloiza, se você usar apenas um botão input para sair, melhor dizendo, redirecionar para uma página em específico, você não está efetuado logout e ainda continuaria autenticada no site. Para efetuar logout com sucesso, ou seja, fazer com que o mesmo usuário ao tentar entrar em páginas restritas, precise efetuar login novamente, é necessário seguir os passos que ensino no tutorial.
          Quando é feito o login com sucesso, é registrado sessions que servirão para verificação se o usuário está cadastrado, ativado ou não e também que usuário seria este, baseando-se nas informações de cadastro dele, consultado a partir do valor de usuario_id gravado numa session assim que o login é efetuado, comparado com um id existente no banco de dados.
          Além da session relacionada ao id do usuário há outras sessions que pode acompanhar no tutorial se tiver atenção aos arquivos do mesmo.
          Para logout você precisa destruir essas sessions ou apaga-las, que no caso poderia também utilizar unset.
          A leitura do <a title="Manual do PHP" href="http://www.php.net/manual/pt_BR/&quot; target="_blank" rel="nofollow">manual do php para o entendimento e acompanhamento mais proveitoso deste e de qualquer tutorial é necessário.

          Leia mais sobre <a title="Manual PHP sobre Sessions" href="http://www.php.net/manual/pt_BR/book.session.php&quot; target="_blank" rel="nofollow">session(), <a title="Manual do PHP sobre Session_destroy" href="http://www.php.net/manual/pt_BR/function.session-destroy.php&quot; target="_blank" rel="nofollow">session_destroy() e <a title="Manual do PHP sobre Unset" href="http://www.php.net/manual/pt_BR/function.unset.php&quot; target="_blank" rel="nofollow">unset()

          Bons estudos!

  19. Boa tarde, gostaria de dar parabens pelo seu sistema de login, bem util. Tenho apenas um problema com ele, qnd faço o cadastro meu banco de dados recebe as informaçoes mais o email nao chega ao cliente. Alguma ideia do que possa estar acontecendo? estou trabalho com a hospedagem do uol, tem alguma cfg? abraçosss e parabenssss

    • Amigo, antes de mais nada obrigado.
      Quanto a seu problema, assim fica difícil adivinhar, mas você deve verificar o arquivo cadastra.php e ver se colocou o seu email corretamente, o email responsável pelo envio lá na variável $headers.
      Outra possibilidade é analisar como fica literalemnte gravado o email no banco de dados, se não cortou ele pela metade, por exemplo…. veja se está gravando o endereço de email completo.
      Amigo, estou chutando as possibilidades, fica difícil saber o que fez errado. Pode ser de uma simples falta de atenção até a incompatibilidade com a função mail() do php no server do uol.
      Faça essas verificações… se não for nada disso responde aí e vamos adiante achar o problema.
      Bons estudos!

  20. Boa noite amigo.. to retornando soh pra dizer q consegui resolver o problema :D

    Unica coisa q to com problema eh monta o layout do site dentro do verifica_usuario… mais vo da mais uma estudada ai e vejo se consigo

    abraçosss

    • Que bom que conseguiu @Bruno.
      Quanto ao layout não é difícil, entenda que o verifica_usuario.php é um arquivo que não precisa ter layout no caso de sucesso no login, pois ele vai redirecionar quando tudo certo.
      Você pode fazer a mesma coisa em caso de erro no login, ou seja, ao invés de dar include no form de login no próprio verifica_usuario.php, vc pode redirecionar para página de login quando der insucesso no usuário e senha.
      Entendeu a dica? Qualquer coisa fala aí.
      Bons estudos!

  21. Caro Roberto,

    criei todos os arquivos php e html, fiz as devidas alterações para o meu site e minhas necessidades, porem nao consegui criar o banco de dados, nao sei se estou tentando fazer errado, mas eu colei o codigo do banco no access e executei, so que da um erro de sintase no create tabela.

    Desculpe minha ignorancia, mas vc poderia responder ao meu email, pois na verdade estou tentando criar uma area restrita em um site maçonico com niveis, de acordo com os graus dos usuarios, porem no formulario de cadastro deveria constar campos com perguntas especificas e as respostas devem ser pre-definidas, ou seja, o usuario so consegue cadastrar e receber o email de confirmação se responder de maneira correta as perguntas no formulario de cadastro de acordo com o grau maconico (nivel), porem haveria no formulario um campo com cx de seleção, com os campos aprendiz, companheiro e mestre, com isso as perguntas iriam variar no proprio formulario de cadastro, de acordo com o grau que ele escolher, tipo quando vc escolhe uma cidade e o proximo campo ja abre os municipios dessa cidade, entende? gostaria de uma luz sua. abracos

    • Olá @Gilbert, primeiramente vamos pelo início de tuas dúvidas… ou seja, leia com mais atenção e irá ver que o tutorial em nenhum momento fala sobre utilizar o banco de dados access, o banco a ser utilizado se seguir o tutorial é o MySQL. Quanto as outras dúvidas é um pouco fora do escopo do tutorial, mas você pode usar AJAX para exibir opções de acordo com a escolha inicial, ficaria mais limpo, mas pode exibir as opções relativas a escolha inicial dando refresh na página, seria funcional da mesma forma.
      Bons estudos!

  22. Boa tarde, parabéns pela sua iniciativa de ajudar as pessoas é raro isso acontecer, que Deus o abençoe por isso.

    Tenho um problema com o ativar.php

    Criei uma index que chamava o formulário_cadastro funcionou perfeito, me cadastrei, recebi a mensagem no meu e-mail para poder ativar só que vem um link que não pode ser encontrato pela internet. Exemplo
    http://www.citydrive.com.br.com.br/ativar.php?id=

    como eu posso resolver isso por favor me ajude eu estou precisando muito.

    Desde já obrigado

    • Sim @Rodrigo, posso ajudar sim :)

      Perceba que quando cai na página de erro o endereço que não pode ser encontrado é citydrive.com.br.com.br/ativar.php

      Pegou ali onde está o seu erro?

      Verifique dentro da tag <code></code> no arquivo cadastra.php… a forma que está o endereço… tem um .com.br a mais na sua modificação.

      Melhor explicando:

      Entre as tags <code></code> AQUI<code></code> está correto, mas o valor de href que está errado na sua modificação ;)

      Bons estudos!

      • Bom dia Roberto, eu gostaria de saber como eu faço para que meus clientes do site possuão uma página expecífica para cada um deles. Por exemplo quando a pessoa logar ela pode acessar a sua conta onde vai conter o boleto da compra dela entre outras informações específicas para ela e só ela pode acessar com o login e senha dela.
        Muito obrigado pela sua ajuda, na outra pergunta.
        Grato por tudo!!!

        • Olá, @Rodrigo, não há necessidade de um arquivo diferente para cada usuário, basta um arquivo em comum pra todos, por exemplo painel.php e o que irá diferir nas informações neste arquivo será a consulta no banco de dados. Pois quando o usuário logou, o ID dele ficou registrado em session e é baseado nesse ID que poderá ser puxado todas as informações deste usuário. Por exemplo eu me logo com meu user e senha, e você tbm se loga com seu user e senha através de seu computador… nós dois estaremos vendo o arquivo painel.php, mas o conteúdo que será exibido para cada um de nós é respectivo à nós, eu vejo tudo em relação ao meu ID e você vê tudo em relação ao seu.
          A consulta no banco de dados é baseado no Id registrado na session após o login.
          Espero ter ajudado.
          Bons estudos!

          • Ok entendi, e isso é muito melhor do que eu estava pensando.

            Mas vc teria como postar algum código que faça essa função? É que eu não entendo muito de PHP. Ficaria muito grato pela sua ajuda.

            Se tiver também como fazer alguma contribuição para vc seria legal.

            Desde já muito obrigado por sua atenção e dedicação. :)

          • @Rodrigo, sim há como fazer uma contribuição, mas não é pra mim. Tudo que for arrecadado através deste site, é para ser usado neste site.
            Para contribuir acesse: http://www.sistemabasico.com.br/colabore/ que é relacionado ao link COLABORE no menu principal.

            Quanto aos códigos, veja bem… acompanhe o tutorial, procure entender/interpretar as etapas, irá ver que os códigos que deseja estão no tutorial :) basta adaptar.
            Por exemplo quando você faz login, é feito uma consulta no banco de dados para ver se teu usuário e usuário e senha existem… ou seja… tudo é a mesma coisa… só muda as opções, pois no painel.php por exemplo você quer consultar e listar todos os dados e não só consultar usuário e senha.

            Vou dar um exemplo da seguinte forma e com dois arquivos:

            - Crio o arquivo listar.php o qual é restrito, portanto precisa daquele cabeçalho de verificação lembra?
            - Nesse arquivo vamos pegar apenas id, nome e sobrenome de todos os usuários cadastrados, ok?
            - Aí montarei um link para painel.php, passando esse nome, sobrenome e id via URL, ou seja, na barra de endereço de seu navegador.
            - No arquivo painel.php pegarei esses valores enviados na URL com $_GET

            lista.php:

            $query = mysql_query("SELECT id, nome, sobrenome FROM usuarios ORDER BY nome,sobrenome DESC") or die(mysql_error());

            if (mysql_num_rows($query) != "0"))
            {

            while ($array = mysql_fetch_array($query))
            {

            echo "&lt;a href="" target="_blank"&gt;".$array['nome']." ".$array['sobrenome']."&lt;/a&gt;&lt;br /&gt;";

            }

            }

            Esse é um exemplo bem fuleiro do que seria o lista.php

            Agora vamos ao painel.php:

            // O ideal é definir todos os campos que quer consultar, ali no SELECT para melhor performance, mas esse comentário está ficando longo e por isso usarei um coringa "*" (sem aspas), mas não sugiro fazer igual.

            $query = mysql_query("SELECT * FROM usuarios WHERE id = ".$_GET=[id].") or die(mysql_error());

            if (mysql_num_rows($query) != "0")
            {

            $array = mysql_fetch_array($query)

            echo $array['nome']." ".$array['sobrenome']."&alt;br /&gt";
            echo $array['email']."&alt;br /&gt ";
            / / echo etc….

            }

            Pegou???
            Analisa isso e tenta entender, e antes de tudo tenha em mente que não utilizei nenhuma forma de segurança nesse exemplo, mas depois que começar a entender isso, poderá se aventurar com meios de segurança, mas não se acostume em pegar códigos prontos sem procurar entender, afinal a ideia é aprender e não ficar como 'papagaio de pirata' copiando sem saber o que está fazendo.

            Mas acredito que não é teu caso @Rodrigo Estou errado?
            Não esquece de seguir no twitter pra ficar ligado nas novidades, http://twitter.com/sistemabasico e não esquece daquela doação lá ;)

            Grande abraço

  23. Olá

    Eu já fiz sistemas de PHP usando o Dreamweaver (não gosto, mas foi muito bom para meu começo) Hoje desenvolvo sites HTML, CSS e aplico WP no layout, porém estou interessado em voltar a aprender PHP, seu tutorial está ótimo, parabéns. Mas tenho uma dúvida. Eu me lembro que quando criava uma tabela o ID eu colocava auto increment, int, valor 11, mas o seu está valor 5. Por que? Nunca entendi a questão de valores, poderia me dar uma breve explicação?

    Obrigado

    • Olá @João.
      O valor utilizado com o tipo INT vai depender do maior valor que tu espera pra esse campo.
      Vou explicar melhor usando o próprio campo ID autoincrement, que no caso, é o identificador do registro, ou seja, a cada registro um Id diferente e assim por diante.
      Mas até quantos registros você quer aceitar nessa tabela???
      Veja bem… se vc usar 11 para o INt deste campo, vc aceitará 99.999.999.999 registros… quantos '9' tem nesse inteiro? 11
      Eu utilizei 5 no INT poque sugeri o suporte para uma quantidade de registro igual a 99.999 (5)
      Se eu estiver errado e você souber diferente, diz aí.
      Bons estudos!

      • Mas isso é apenas no caso do INT? Por exemplo, se eu colocar 11 em um campo varchar, ele irá aceitar 99.999.999.999 registros, é isso?

        • @João, na verdade eu posso estar me equivocando, ao tentar dar uma explicação simplificada para que entenda facilmente.
          A explicação que dei antes de fato me referia apenas ao INT.
          No caso de VARCHAR se você colocar 11, só vai registrar até o décimo primeiro caracter.
          Por exemplo o campo 'nome' se tiver uma entrada 'RobertoLunelli', só será registrado até 'RobertoLune'.
          Para entender melhor e com mais propriedade do que eu consegui passar na minha resposta anterior, leia sobre os Tipos de campos/dados do MySQL.
          Bons estudos!

  24. Não estou conseguindo efetuar o registro no banco de dados. Não dá erro, ele simplesmente não vai. Esse é meu código após as validações

    mysql_query("INSERT INTO user(user_nome, user_pw, user_email, user_user, user_key) VALUES ('$nome', '$pw', '$email', '$key', now())");

    Essa não é a ordem que tá na tabela, isso tem alguma relação?

    • Sim… de certa forma a ordem tem uma relação bem relevante.

      @João, o seu PHP.ini deve estar programado para não exibir erros, coloque então no topo do arquivo PHP que está executando esse INSERT, a seguinte linha de código:

      error_reporting(-1);

      Assim quando executar essa ação será exibido todos os erros provenientes do PHP.

      Após a QUERY de execução no banco de dados, adicione uma chamada para mysql_error(), assim se sua query tiver algum erro na sintaxe, esse erro será exibido na tela.

      Exemplo:

      $sql=mysql_query(“INSERT INTO tabela (nome,sobrenome) VALUES (‘”.$nome.”‘, ‘”.$sobrenome.”)”) or die(“ERRO no MYSQL: “. mysql_error());

      Bons estudos!

      • Antes de responder meu comentário, descobri o que era. O now() que você pede pra colocar por algum motivo impedia, antes disso, deu alguns erros meus que eu resolvi, mas o que impedia de ser colocado no banco de dados foi o now(). Não sei se é por alguma atualização do PHP, só sei que eu tirei, e funcionou.

        Desculpa te encomodar tanto, mas se eu em algum campo coloco algo com acento, no PhpMyAdmin, a tabela se encontra com erros, tem alguma forma de resolver? Obrigado :)

        • @João, o NOW() refere-se a data, no caso a data do 'agora' … grava exatamente a data que o registro foi inserido no campo data.
          No seu caso dava erro, pois a ordem e a relação entre VALUES e campos definidos na sua query estava completamente desorganizado.
          Quanto à acentuação, refere-se ao charset do teu banco de dados e o charset do teu arquivo PHP, procure usar UTF-8 para ambos.
          Bons estudos!

  25. Warning: session_start() [function.session-start]: Cannot send session cookie – headers already sent by (output started at C:Documents and SettingsJoão PauloMeus documentosDropboxwebsites rollingloginsecuritycheck.php:1) in C:Documents and SettingsJoão PauloMeus documentosDropboxwebsites rollingloginsecuritycheck.php on line 2

    Dá esse erro quando ele vai dar o session_start(); não sei por que… Ajuda?

    • @João, você deve colocar session_start(); antes que de qualquer saída HTML e espaços.
      Se vc copiou e colou não é uma boa, mas se não, procure verificar se colocou session_start() antes de qualquer saída html, antes de qualquer 'echo'.
      Abraço!

      • Não, não copiei e colei, eu estou olhando seu tutorial e tirando minhas próprias conclusões, modificando e tal. Mas nunca copiando e colando, estou escrevendo para assimilar as formas e tal, mas vamos a minha dúvida. o action do form de login está redirecionando para securitycheck.php?action=login e no começo há o seguinte código:

        session_start();
        $action = $_GET['action'];
        include('functions.php');
        $user = $_POST['user'];
        $pw = $_POST['pw'];

        • @João me diga uma coisa… há algum espaço entre <?php e a chamada para session_start();???
          Há mais alguma chamada para session_start() neste arquivo que vc citou?
          Há alguma chamada para session_start() em algum arquivo que você esteja incluindo neste arquivo que citou?

          • <?php
            session_start();
            $action = $_GET['action'];
            include('functions.php');
            $user = $_POST['user'];
            $pw = $_POST['pw'];

            if($action == "login"){
            if(!$user or !$pw){ print "Preencha todos os campos.";} else {
            $senha = md5($senha);

            $sql = mysql_query("SELECT * FROM users WHERE user_user='{$user}' AND user_pw='{$pw}' AND user_canlogin='1'");
            $loginCheck = mysql_num_rows($sql);

            if($loginCheck > 0){
            while($row = mysql_fetch_array($sql)){
            foreach($row AS $key => $val){
            $$key = stripslashes($val);
            }
            $_SESSION['user_id'] = $user_id;
            $_SESSION['user_nome'] = $user_nome;
            $_SESSION['user_user'] = $user_user;
            $_SESSION['user_email'] = $user_email;
            $_SESSION['user_key'] = $user_key;

            print $user_key;
            }
            } else { print "fail"; };
            }
            }
            ?>

            Este é o código do arquivo

          • @João, primeiramente se não desse erro com o header, daria erro de sintaxe, esse seu código que enviou no comentário fala fechar uma '}'.
            Outro erro que também ocorreria se o erro de header fosse sanado seria o de conexão com o banco de dados, pois como pode ver, no seu código vc não inclui o arquivo config.php que tem os dados de conexão com o banco de dados.
            Enfim… quanto ao erro com o session_start(), uma das hipóteses é um espaço depois de <?php … pelo menos me pareceu aqui no código que vc enviou.
            Descartando essa hipótese, uma outra possibilidade é o Editor Web, inclusive o DW, adicionar codificação oculta e isso é interpretado como saída e se for antes do session_start() dará o erro. Procure sobre isso no google.

            MAS… se descartar essa hipótese, você poderá utilizar o método para controlar o buffer de saída. Para fazer isso tenha atenção aos seguintes passos: Levando em conta que o seu arquivo securitycheck.php não está sendo incluido (include) em nenhum outro arquivo e que vc verificou que o arquivo functions.php não tem sesion_start() em seu conteúdo, faça o seguinte… no arquivo securitycheck.php adicione antes de tudo, inclusive antes de session_start() a seguinte linha: ob_start(); e no final de tudo, logo antes de ?> adicione ob_end_flush();.
            Desta forma não ocorrerá o erro de header.
            Bons estudos!

          • Não sei o que fazer :/. Meu editor é o Notepad++, a conecção com o banco de dados está dentro do functions.php e conferi if por if, while, e tal, e não está faltando um '}'.

            Coloquei o ob_start() e ob_end_flush(), mas continua com erro de header. Isso tem a ver que eu estou usando xampp?

          • @João, desculpe, não tinha visto a '}' depois de 'fail'.
            Quanto ao erro persistente, só posso dizer mais uma coisa que costumo fazer quando me vejo travado em um determinado ponto, refaça tudo novamente. :|
            Minha dica seria pegar meu tutorial e fazer exatamente como ele é… sem tirar nem por, apenas alterar pelos seus dados de conexão e seus dados de domínio e email.
            Faça isso funcionar e depois sim vá modificando pedra por pedra e testando a cada pedra modificada, assim se der erro, saberá bem qual pedra foi movida de forma errada.
            Fazendo isso, vá perguntando que eu ajudo na medida do possível.
            Bons estudos!

          • @João andei verificando entre os comentários deste tuorial e encontrei um usuário com a mesma duvida e que conseguiu apos minha dica… mesma dica que te dei nessa postagem anterior à essa. Da uma lida no comentário dele: http://www.sistemabasico.com.br/2007/12/07/tutori… e em seguida na minha resposta.
            Bons estudos!

  26. entendi perfeitamente..mas soh para cnfirmar…
    em cada pagina eu teria que inserir o codigo de "area_restrita.php" ou seja colocar tudo aquilo antes de tudo nao eh????

    • Olá @Willian, não é todo o código não, seria apenas o topo:

      <?php

      session_start(); // Inicia a session
      include "functions.php"; // arquivo de funções.
      session_checker(); // chama a função que verifica se a session iniciada da acesso à página.

      Abaixo disso é o conteúdo da sua página normalmente, página que obviamente você deseja restringir o acesso.

      Bons estudos!

  27. Prezado Roberto, estou gostando bastante do tuto, porém a cada passo que consigo avançar dou uma nova tropeçada (coisas da vida). Verifiquei que não consigo gravar dados usando um "localhost", então subi meus arquivos para um servidor remoto, cuja hospedagem é paga, com suporte a php 5 e tals. Está gravando no banco direitinho, mas não recebo os e-mails. Vi que alguns colegas tiveram problemas semelhantes mas infelizmente ainda não encontrei a resposta. Sendo assim estou postando o trecho do código, na expectativa que você possa fazer a análise e apontar o erro.
    $headers = "MIME-Version: 1.0
    ";
    $headers .= "Content-type: text/html; charset=iso-8859-1
    ";
    $headers .= "From: graficapadrao.com – Webmaster<teste@graficapadrao.com>"; // TEU DOMÌNIO E TEU EMAIL

    $subject = "Confirmação de cadastro – graficapadrao.com";

    Só para facilitar o diálogo, meu host conta com serviço de e-mails e está habilitado para a conta que estou tentando. (localhost).

    Desde já agradeço.

  28. Boa tarde, Roberto.
    Removi o espaço mas ainda não rolou, quanto ao campo varchar está com 100 – igual ao tuto. Sobre a conta "teste@graficapadrao.com", sim ela existe. Eu administro a hospedagem para um cliente meu, então crio as contas que eu quiser ou precisar e esta eu criei ontem mesmo para efeito de testes e a configurei no meu outlook, o que está me garantindo que ela envia e recebe e-mails numa boa. fiz o cadastro no formulário com outras contas de e-mail tbm mas nehuma recebeu, no entanto todos os e-mails estão sendo gavados no banco, "bonitinhos".

    Uma correção, ontem no último parágrafo, eu disse que minha hospedagem é a localhost, na verdade fiz uma confusão de nomes. a hospedagem é a Hostnet.

    Agradeço mais uma vez pela atenção dispensada.

    • Jean, a função mail() do php realmente causa muitas instabilidades, pois servidores de hospedagem, ainda mais o da Hostnet, podem não disparar emails devido aos cabeçalhos não suprirem as exigências de SMTP impostas pela mesma. Outra hipótese seria o recebimento que esteja com problemas… tipo se enviar para o HOTMAIL, não tiver os cabeçalhos ele vai para um buraco… mas não sei ao certo se testou com esses provedores ou se está testando com emails criados pra teste no próprio servidor… .

      Se ainda não deu, me diga se a variável que está sendo colocada para 'recipient' está recebendo o valor exato ou se está vazio sei lá.. da uma saída na variável do 'email' que vem do bd.

      Se você fez tudo certo, só pode ser o lance do server mesmo, ou SMTP ou do server do provedor do destinatário.
      Sem tirar nem por, o sistema funcionou com milhares de pessoas já desde que publiquei esse tutorial em 2007.
      Procure mais informações sobre cabeçalhos para envio de email com php e mail() e tente completar melhor os $headers.
      Esse site http://www.htmlite.com/php029.php mostra alguns headers mais completinhos.
      Da uma olhada neste meu tutorial: http://www.sistemabasico.com.br/2011/01/20/como-e
      e tente adaptar no sistema de cadastro, pois este tutorial envia emails autenticados e a maioria dos provedores aceitam receber quando estes vem autenticados.
      Qualquer coisa fala aí.
      Bons estudos!

      • Boa noite Roberto, mais uma vez obrigado, principalmente por responder tão rápido. Acredito mesmo que possa ser alguma deficiência da hostnet. Sei que toda configuração de e-mail deles requer autenticação. De toda forma vou continuar tentando e seguindo as suas dicas sobre os outros tutoriais.

        Abraço.

  29. awe valeu consegui agora quero saber como faço para tirar a senha altoomatica quero colocar no modo que eles mesmo escolhema senha desejada

    • Gabriel, para efetuar essa mudança, são vários arquivos para serem modificados.
      O Tutorial ensina da forma que passei, da forma que você quer seria outro tutorial.
      Você pode se aventurar, mas possivelmente terá muitos erros pois os arquivos estão interligados, não basta modificar um.
      Entre eles teria que modificar o formulario_cadastro.php, cadastra.php, verica_usuario.php, gerar_nova_senha.php, etc…
      Mais pra frente eu faço um apêndice para este tutorial.
      Bons estudos!

  30. Eu sou analista de sistemas, (programador), trabalho com Delphi 7, estou começado com php agora, gostei muito do passo a passo. Gostaria de manter contato.

  31. Olá, adorei o script. Porém encontrei um problema: Quando fui testa – lo, quando vou fazer o cadastro aparece que O endereço de email [ ] que está tentando utilizar não é válido.
    Por favor, utilize um email válido.

    O que está acontecendo de errado? Fico no aguardo.

    Obrigado

    • Olá @Nelson, pelo formato do erro da mensagem, onde não foi exibido o tal email invalido entre Colchetes (perceba que os colchetes foram apresentados em branco), o que significa que se você preencheu o campo de email no cadastro, esse valor do campo email do form de cadastro não está passando, ou seja, o arquivo cadastrar.php, não está recebendo-o, sendo assim obviamente dará este erro.

      Verifique tudo isso que falei, veja se o arquivo cadastra.php está recebendo os valores exatos do form.

      Dica: Comente todo o arquivo cadatra.php e ensira apenas:

      <?php print_r($_POST); ?>

      … entre as tags pre do HTML e veja se todos os valores do form estão vindo corretamente.

      Bons estudos!

      • Olá Roberto…
        Já resolvi este problema rs. Estava testando local e quando enviei para o servidor funcionou ok.

        Só que agora me apareceu outro problema: Quando vou fazer o LOGIN, aparece a mensagem :

        Você não pode logar-se! Este usuário e/ou senha não são válidos!
        Por favor tente novamente!
        Login

        Não fiz alteração alguma no código quanto a criptografia da senha.

        O que pode ser?
        Obrigado

        • Você recebeu o email de ativação e confirmou o cadastro?
          Alterou o valor de VARCHAR para os campos no banco de dados para email e/ou senha?

          • Sim. Recebi o email e confirmei ok. Não alterei nada na criação do banco.
            Os arquivos estão dentro de uma pasta…não na raiz do site.
            Veja: http://www.traderline.com.br/teste_login/formular

            Isso influência em alguma coisa?

          • Testei e o que da pra ver é o seguinte:
            O teu arquivo verifica_usuario.php está direcionando no form de login novamente… deve estar ocorrendo algum erro nas condicionais deste teu arquivo.
            Primeiro verifique direto no banco de dados através do PHPMyADMIN e veja se o user ativado alterou com sucesso o status de ativado de 0 para 1.
            Depois verifique o arquivo verifica_usuario.php, e veja se nas condicionais está tudo correto.
            Analise também o seu functions.php, pois ele também leva ao formulário de logon se não encontra as devidas sessions abertas.

          • Roberto, quando o usuario autentica, muda o statos de 0 para 1.

            o arquivo verifica_usuario.php está assim:

            <?php

            session_start(); // Inicia a session

            include "config.php";

            $usuario = $_POST['usuario'];
            $senha = $_POST['senha'];

            if((!$usuario) || (!$senha)){

            echo "Por favor, todos campos devem ser preenchidos! ";
            include "formulario_login.html";

            }
            else{

            $senha = md5($senha);

            $sql = mysql_query("SELECT * FROM usuarios WHERE usuario='{$usuario}' AND senha='{$senha}' AND ativado='1'");
            $login_check = mysql_num_rows($sql);

            if($login_check > 0){

            while($row = mysql_fetch_array($sql)){

            foreach( $row AS $key => $val ){

            $$key = stripslashes( $val );

            }

            $_SESSION['usuario_id'] = $usuario_id;
            $_SESSION['nome'] = $nome;
            $_SESSION['sobrenome'] = $sobrenome;
            $_SESSION['email'] = $email;
            $_SESSION['nivel_usuario'] = $nivel_usuario;

            mysql_query("UPDATE usuarios SET data_ultimo_login = now() WHERE usuario_id ='{$usuario_id}'");

            header("Location: area_restrita.php");

            }

            }
            else{

            echo "Voc&ecirc; n&atilde;o pode logar-se! Este usu&aacute;rio e/ou senha n&atilde;o s&atilde;o v&aacute;lidos!
            Por favor tente novamente!";

            include "formulario_login.html";

            }
            }

            ?>

            O arquivo functions.php está assim:

            <?php

            function session_checker(){

            if(!isset($_SESSION['usuario_id'])){

            header ("Location:formulario_login.html");

            exit();
            }
            }

            function verifica_email($EMAIL){

            list($User, $Domain) = explode("@", $EMAIL);
            $result = @checkdnsrr($Domain, 'MX');

            return($result);

            }

            ?>

          • Bom… se muda de 0 para 1 então quanto à ativação está tudo Ok.
            Preciso saber qual o valor de VARCHAR para os campos no Banco de dados para usuario e senha.
            Obrigatóriamente senha tem que ser no mínimo 32 e usuário tem que ser um valor que vc tenha certeza que consiguirá abranger a quantidade de caracteres que você prevê para um nome de usuário.
            Por exemplo, se vc for exigir que o usuário utilize um user com no máximo 10 caracteres, então o campo usuário no BD deverá ter um VARCHAR no mínimo com valor 10.
            Imaginando que vc não tenha alterado nada em relação a criação de senha automática, basta verificar isso que falei, pois o código que me enviou está correto… aliás igual o meu, sem modificações.

            Obs.: Se modificou alguma coisa, preciso dos arquivos modificados e não os sem modificação.

            Abraço

          • Olá @Nélson. Você fez dois comentários e vou responder um de cada vez:
            Este código que você postou está errado, não é o mesmo do tutorial, logo os erros poderiam acontecer.
            No último '}else{' você colocou uma '}' a mais antes do 'else' verifique com atenção que tem mais '}' do que necessário.
            ;)

          • Roberto, meu DB ta assim:

            nomevarchar(50)
            sobrenomevarchar(50)
            emailvarchar(100)
            usuariovarchar(32)
            senhavarchar(32)

            No último else vc diz q tem um colchetes a mais fechando?
            Aqui:

            else{

            echo "Você não pode logar-se! Este usuário e/ou senha não são válidos!
            Por favor tente novamente!";

            include "formulario_login.html";

            }
            }

            ow é o colchetes q antecede o ultimo else?

          • Não @Nelson, eu havia respondido o outro comentário seu mas exclui, talvez você tenha visto antes de eu ter excluído. Está tudo certo quanto as 'chaves' e não 'colchetes' :)
            A única coisa que deves analisar é o que eu respondi no último comentário.
            ;)

          • De fato os valores do VARCHAR para os campos estão corretos, e a coisa está ficando estranho.
            Me passe pelo link de contato ali no menu, o endereço do teu sistema, juntamente com a senha para que eu teste pra vc.
            Isso se não for um problema me passar os dados.
            Aguardo

          • Roberto, tudo bem?

            Qual senha vc quer do DB?

  32. Roberto,

    Tranquilo, acho que não tem problemas.
    Vou confiar em vc…rs

    Vou mandar nesse email ae entao.

    • @Nelson, fiz os testes e cheguei a seguinte conclusão, teu servidor não da suporte à SESSIONS da forma adequada.

      Vou te passar um pequeno relatório:

      - Primeiro constatei um erro no teu arquivo verifica_usuario.php onde no foreach() é $$key e não $key (verifique o tutorial novamente nessa parte), mas mesmo eu corrigindo isso o erro persistia.
      - Criei um novo diretório (/sistema_login) e instalei meus próprios arquivos, mas o erro persistia
      - Então fui 'debugando', tentando imprimir o conteúdo do array de sessions registradas, para ver se estavam sendo gravadas devidamente.
      De fato estavam sendo gravadas no arquivo verifica_usuario.php, porém ao redirecionar deveriam manter-se gravadas e assim possibilitar a recuperação das mesmas nos arquivos subsequentes, mas isso não ocorre.
      Melhor dizendo… assim que elas foram gravadas no arquivo verifica_usuario.php elas deveriam ser acessadas normalmente no arquivo functions.php para comparação e também no arquivo area_restrita.php para exibição do nome, sobrenome e outros detalhes que eram para estar gravadas nas sessions, mas estes não estavam mais… é como se fossem apagadas e por isso que ao efetuar o login você é redirecionando para o arquivo formulario_login.html novamente, pois no arquivo functions.php é feito uma verificação se a session 'usuario_id' esta definida… e se está não estiver, deve redirecionar para o formulário_login.html

      Enfim… deves procurar saber o porque o teu server não está permitindo manter uma sessão registrada quando muda de arquivo.
      Utilizei os mesmos arquivos no meu server para desencargo de consciência e funcionou perfeitamente a passagem de sessions, ou seja o problema de fato é no teu server, na configuração do php.ini do teu server acredito eu.

      Para teu teste:
      Como eu disse antes, criei um novo diretório no teu server (/sistema_login)… acesse teusite.com.br/sistema_login/formulario_cadastro.php e efetue um cadastro teste e tente fazer o login… fiz algumas modificações para que ao efetuar o login tu caia no area_restrita.php e possa ver que as sessões não estão se mantendo… será exibido o conteúdo do array, mas como não tem nada definido por motivos que deverá descobrir junto ao teu server, aparecerá então apenas um array vazio.

      Espero ter ajudado, mesmo que não podendo apresentar a solução, pois esse quem deve é o suporte do teu provedor… questione eles sobre essa falha e volte aí pra dizer o que falaram.
      Outra possibilidade é testar em outro servidor.

      Observação: quando me cadastrei para testar, os emails disparados pelo teu email, no teu servidor, estão caindo na minha caixa de lixo eletrônico/spams, mas isso pode ser uma ação típica devido a fragilidade da função mail() do php.

      Bons estudos!

      • Oi Roberto..

        Já mandei um email lá pra locaweb.

        Assim que tiver uma resposta, eu te aviso aqui blz?

        Muito obrigado por tudo!
        Um grande abraço.

      • Roberto…

        O que eles me responderam foi isso:

        Altere a diretiva session.save_path para /var/lib/php-cgi/session no php.ini , desta forma você conseguirá salvar as sessões de seu site.

        • Justamente o que eu havia dito… não está salvando as sessions.
          Se não conseguir ter acesso ao php.ini para a alteração da diretiva, tem uma forma de fazer essa execução que eles disseram.
          Se a diretiva safe_mode estiver off é possível você utilizar a função ini_set() para tentar a diretiva session.save_path.

          Coloque no topo dos teus arquivos algo como isso:

          ini_set('session.save_path', '/var/lib/php-cgi/session');

          Mas é calro que o ideal nesse caso seria alterar direto no php.ini, pois a possibilidade de utilização de sessions deveria ser algo trivial na configuração de um server que se preste.
          Boa sorte!

  33. ola, sou mt leigo, nao consigo instalar corretamente o seu formulario de cadastro

    por favor alguem poderia me ajudar?

  34. Olá,Sistema Muito bom,só que tem um pequeno erro,no recuperar senha,aparece que da certo, mais a senha nao vai para o email.

    Abrass

    • Olá @Leonardo, não tem erro algum no sistema.
      Você fez alguma modificação no código ou testou ele exatamente como está?
      Já verificou o lixo eletrônico ou caixa de SPAM?
      O código não tem erro algum, isso posso te garantir.

  35. coloquei exatamente como está ai,e nao chega em lugar nenhum.

    • @Leonardo, fica impossível te ajudar me falando só isso, pois o sistema está perfeito e funcionando desde 2007, não seria agora que iria parar de funcionar.
      Já respondi centenas de comentários e emails sobre dúvidas desse tutorial, e centenas já usaram ou usam ele funcionando perfeitamente.
      É só na hora de recuperar a senha ou na hora do cadastro tbm não chega?
      Está testando localmente ou em hospedagem?
      Está usando conta de email do servidor de hospedagem para enviar?
      Já tentou testar um cadastro com outro email, gmail, hotmail, yahoo?
      Será que está sendo bloqueado por estar utilizando mail()?
      Já tentou phpMailer para enviar? Tem um tuto aqui no SB.
      @Leonardo, não tem como eu te ajudar mais, pois ainda não tenho a capacidade de adivinhar, e poderia enumerar dezenas de hipóteses, como fiz acima com algumas.
      Tente verificando alguma delas.
      Abraços

  36. Olá, Roberto otimo tutorial, so to com uma duvida no formulario de cadastro nao pede senha, como vou logar se na hora de cadastrar nao pede senha, e no login ele pede pra por senha mais eu nao tenho senha, é isso, valeu pelo tutorial ajudo muito aguardo o seu retorno

    • Olá @Jonatas, se seguir o tutorial, vai perceber e entender que a senha, no caso deste tutorial, é gerada de forma aleatória e enviada para o email do cadastrado. Este usuário terá que verificar seu email que usou no cadastro e pegar a sua senha, mas antes de logar, terá que clicar no link que foi enviado neste mesmo email, pois é este link que fará a ativação de sua conta… pois se tentar logar com a senha que recebeu e não tiver efetivado o registro, clicando no link recebido, não terá acesso…
      Espero ter ajudado.
      Bons estudos!

  37. vlw pela força, nem imaginei q a resposta viria tao rapido gostei de tudo otimo sistema valeu

  38. so mais uma duvida, gostaria de saber se é muito complicado de se colocar no cadastro uma senha criada pelo usuario, e q no email de comfirmaçao vinhece a senha criada pelo usuario

    • Não é complicado, mas é necessário um entendimento básico da situação… entenda que para fazer isso será necessário a alteração de vários arquivos que estão envolvidos com o procedimento de criação de senha.

  39. ok valew pela atençao, vo tentar fazer isso, to começando agora em php, ja tenho um conhecimento basico em html mais quero me aprofundar nesta area de web designer, tenho so 16 anos e ja quero aprender tbm linguagens de escript mais nao sei bem qual linguajem é melhor aprender, ja sei um pouco de linguagem “C” e notei uma certa semelhança com o PHP porem um amigo meu disse q linguagem “C” nao é tao usada e q eu buscace outra linguagem de escript para aprender sei q nao tem muito aver com a sua area mais queria saber se vc tinha uma opniao de q linguagem devo tentar, ja te agradeço por tudo vlw

    • C e C++ é forte, mas se tu tem interesse em programação web, deves utilizar algo mais direcionando para o desenvolvimento Web. Eu sou suspeito para sugerir, pois adoro PHP, sendo assim sugiro esta, mas você é novo e pode aprender muitas, tens tempo de sobra.
      Sugiro antes de tudo aprender lógica de programação e só depois partir para uma linguagem.
      Quanto ao esquema para trocar o modo de gerar senha, basta adicionar o campo senha no form e fazer algumas alterações em arquivos distintos, que no caso é como eu disse antes… precisa ter um conhecimento básico para saber quais e como fazer.
      Mais lá na frente eu posto um add-on para este tutorial, muitas pessoas perguntam sobre como fazer isso que quer.
      Voltando ao básico do PHP, o melhor lugar para começar é o próprio manual do PHP: http://www.php.net/manual/pt_BR/ mais precisamente aqui:
      http://www.php.net/manual/pt_BR/getting-started.php
      Bons estudos!

  40. ok valeu ja to dando uma olhada e estudada nos links q vc mandou muito obrigado vo tentar me aprofundar ao maximo em php tbm. so mais uma duvida eu queria saber se era possivel criar uma conexao de audio e de video so com tecnologia PHP ou isso envolve outras linguagens, tipo assim eu me comunicar com outra pessoa por meio de video ou de audio em tempo real (claro) .nao presisa dizer como se faz ate pq seria pedir d+ so me diz se é pocivel :). A e so mais uma pergunta indiscreta na maioria dos sites tem um sistema de doaçao, aqui no seu site eu pude notar q tem a opçao “colabore” a pergunta é : tem pessoas q fazem doaçao em dinheiro para esses sites? como ganhar dinheiro com um site? anunciantes? ate pq é preciso pagar pela ospedagem de um site ne? entao como obter lucro e pagar as dispesas de um site? OK eram essas minhas duvidas ja li agradesso de ja e obrigado pela paciensia :S

    • @Jonatas a a dica é… não tente reinventar a roda… já existem inúmeros softwares e sistemas de comunicação/mensagens instântaneas (IM) que já vem com essas opções.
      Mas respondendo sua pergunta… não sei ao certo. Nunca fui atrás dessa informação, mas acredito que aliado com outras tecnologias pode-se desenvolver um sistema sim usando PHP, mas não só ele.
      Creio eu… mas pode chegar alguém que sabe mais e me provar o contrário.
      Quanto ao link ‘Colabore’ que disponibilizei, sim é para doações e as pessoas fazem sim… ou pelo menos já fizeram, mas admito que faz tempo que não fazem… talvez eu tenha que dar mais visibilidade para essa opção, pois justamente como você disse, o site sobrevive de acordo com as doações. Coloquei o sistema de anúncios do Adsense do Google, mas não me rende nada no momento… talvez poderá ser possível sacar os primeiros U$100 daqui um ano e olhe lá.
      Conto sempre com a doação das pessoas, e quando não acontece, que é o que está ocorrendo no momento, eu tiro do meu bolso para continuar disponibilizando material de graça para a aprendizagem dos usuários iniciantes.
      Bons estudos!

  41. Pergunto o seguinte: tenho dúvida o que colocar na página que eu quero proteger. Poderia me esclarecer por gentileza. Seria só isso:

    <?php
    session_start(); // Inicia a session
    include "functions.php"; // arquivo de funções.
    session_checker(); // chama a função que verifica se a session iniciada da acesso à página.

    Fico com dúvida se falta alguma coisa neste script como fechar o <?php com outra.
    Grato.

  42. Olá Roberto,

    Obrigado por postar uma explicação tão didática, não tenho experiência com php nem com banco de dados, mas como vc mesmo diz que é para iniciantes… Bom, fiz todo o passo a passo ensinado aqui. Mas infelizmente quando fui testar o preenchimento do cadastro, os dados não vão para lugar algum. Já verifiquei todos os códigos e está exatamente como o seu. A tabela está toda certinha no PHPMySQL, a configuração está de acordo e tudo está ok, mas os dados do cadastro não conectam com o MySQL. O que devo estar errando? Por favor me ajude porque estou nisso há mais de quatro dias inteiros. Obrigada.

    • Apenas para constar resposta neste comentário, conforme falamos por email, o problema está baseado no servidor de hospedagem não dar suporte a função mail() do PHP e a melhor saída nesse caso seria utilizar de métodos que possibilitam o envio autenticado de email através da classe PHPMailer.

  43. Olá Roberto!

    Estou com uma dúvida e gostaria de saber se você pode me ajudar.

    Tendo um arquivo .zip para download, mesmo dentro de uma área restrita, sabemos que se você acessar o link (ex.: http://www.site.com.br/arquivo.zip) ele não está rotegido e, mesmo não estando logado, ele faz o download…

    Tem como proteger esse arquivo .zip para baixar somente quem está logado?

    Obrigado.
    Espero contar com sua ajuda!

    • Olá Everton. Muito legal a tua pergunta.
      Há como fazer isso sim e acredito que de variadas formas.
      A que me ocorreu de imediato seria com a utilização de mod_rewrite para redirecionar qualquer acesso direto à arquivos .zip.
      Os passos seriam: redirecionar para um arquivo.php que estaria armazenado no mesmo diretório que armazena os pacotes ZIPs. Neste arquivo é feito uma verificação se há alguma sessão aberta e um usuário autenticado… se sim, redireciona novamente para o arquivo ZIP e o download ocorreria normalmente.
      PEgou mais ou menos a idéia?

      • Sim Roberto…

        Já pensei também em mandar o arquivo para o banco de dados Mysql e implementar um header, para identificar o tipo de arquivo (Ex.: @header(“Content-type: application/zip”)). Não sei se daria certo e mesmo se desse, ficaria muito inviável, pois o meu Banco de dados tem capacidade para 100 mb, e o download ocupa 93,6mb.

        Ou também criando um sistema em PHP ex.:

        $download = $_POST[arquivo_down].”.zip”;
        $op = $open($arquivo, “r”);
        header(“Coment-Type:applcation/xls”);
        header(“Coment-Disposition:attachement; filename=$_POST[arquivo_1].xls”);
        header(“Coment-Transfer-Encoding:binary”);

        fpassthru ($op);

        Não cheguei a testar e nem sei se daria certo… Mas se você tiver alguma outra idéia que pudesse postar, ficaria muito grato!

        Everton

        • @Everton, você tentou da forma que eu indiquei?

          • Sim Roberto, mas pelo o que eu entendi, o arquivo php iria redirecionar se caso houvesse uma sessão aberta, só que o diretório onde fica armazenado o arquivo ZIP, poderia ser acessado da mesma forma, sendo feito o download por link, mesmo com sessão fechada.

            Acho que houve falha minha na criação do arquivo de redirecionamento, estive revisando mas, não encontrei falhas.

            Everton

          • @Everton, tu não pegou o espirito do lance… vou te ajudar mostrando como eu faria de forma bem simples… e pode ter certeza que funciona… se liga só no passo a passo.
            - Primeiro eu criaria uma pasta que seria só para armazenar todos meus ZIPs… sempre seria ali que eles ficariam.
            - Dentro desta pasta eu colocaria um arquivo .htaccess com uma regra que não permitirá o download digitando o endereço no navegador, permitindo apenas o download quando clicado em um link, e claro, esses links de downloads dos ZIPs estariam em uma área restrita… ta pegando a lógica? vai entender melhor nos próximos passos
            - Essa regra é simples e com ela você pode inclusive bloquear a exibição das tuas imagens por acesso direto pelo navegador e também que outras pessoas usem a URL delas para exibi-las em seus sites e assim consumindo a banda do teu servidor… isso se chama Hotlink e essa regra é justamente para isso… proteger contra hotlink e protege tbm do acesso direto pela barra de endereço.
            - Tá tá… quer a regra neh? então aguarde o próximo tutorial :) hehehehe … brincadeira segue aí embaixo a regra que deves colocar no arquivo .htacces:

            RewriteEngine on
            RewriteCond %{HTTP_REFERER} !^http://(.+\.)?teusite\.com\.br/ [NC]
            RewriteRule .*\.(jpe?g|gif|bmp|png|jpg|zip)$ http://www.teusite.com.br/erro.php [L]

            Explicando:

            Dentro do parenteses são os tipos de arquivo que só podem ser acessados pelo teu site e não por outros de terceiros, nem pela barra de endereço diretamente.
            Ainda na mesma linha veja que coloquei um exemplo de um endereço de arquivo que você pode criar omo quiser para exibir uma mensagem para os que tentarem acessar diretamente, use a tua criatividade para redirecionar o mal elemento para onde você quiser, inclusive para um texto informando como ele deve proceder se quiser fazer download do teu site ;)
            Não esqueça que o .htaccess, deve ficar dentro da pasta que contiver os ZIPs
            E não se preocupe que clicando em links para os ZIPs, você vai conseguir baixa-los normalmente, mas desde que os links sejam provenientes de seu próprio site… acredito que o mesmo link colocado em outro site, não daria para efetuar o download, pois a condicional e a regra são claras no .httaccess:

            RewriteCond %{HTTP_REFERER} !^http://(.+\.)?teusite\.com\.br/ [NC]

            … ou seja, tudo que NÃO vier de qualquer_coisa.teusite.com.br e tentar acessar esses tipos de aquivos:

            RewriteRule .*\.(jpe?g|gif|bmp|png|jpg|zip)$ http://www.teusite.com.br/erro.php [L]

            Será redirecionado.

            Pegou?
            Bons estudos, se tiver dificuldades fala aí

          • Olá Roberto, o aquivo htaccess foi criado e colocado no servidor, preciso agora saber como colocar na sessão, para acesso apenas a usuários logado.

            Tem como fazer isso?

            Everton

          • @Everton, é o seguinte, não precisa adicionar nada mais…
            Faça apenas isso:
            Coloca-se o .htaccess como eu te falei, dentro da pasta que terá os ZIPS.
            Pronto, ninguém mais conseguirá acessar os ZIPs via barra de endereço do navegador nem colocando o link em outro site e clicando.
            “Ah mas como eu faço pra disponibilizar os links para downloads?”
            Faz normalmente no teu site… HTML puro @Everton, só isso.
            “Ah mas assim todos terão acesso as páginas que terão os links.”
            Aí que entra a utilidade deste tutorial, basta tornar as páginas que terão os links para downloads como restritas.
            “Ah mas como eu vou fazer isso?”
            Aí estamos entrando num loop infinito @Everton heheheheheh, basta seguir o tutorial e você conseguirá tornar as páginas com os links de downloads como restritas.
            Não precisa modificar nada do tutorial, imagina que o arquivo area_restrita.php que usei como exemplo no tutorial seja a tua página de links de download.
            Segue essa lógica e faça quantas páginas restritas quiser.
            Bons estudos!

          • Roberto, isso é muito estranho, pois coloquei o arquivo .htaccess na pasta que contem os arquivos zip’s exatamente como você informou mas, mesmo assim ainda consigo fazer o download pela barra de endereços.

            Everton

          • Teu servidor é APACHE ou IIS?
            Windows ou Linux?
            Estranho pois aqui funcionou que é uma beleza.
            Cola o teu .htaccess aí.

          • O htaccess criado…

            RewriteEngine on
            RewriteCond %{HTTP_REFERER} !^http://(.+\.)?www.gigarenda\.com/ [NC]
            RewriteRule .*\.(jpe?g|gif|bmp|png|jpg|zip)$
            http://www.gigarenda.com/erro.php [L]

            e o link para download http://www.gigarenda.com/usuarios/resgate/downloads/PORD.zip

            Servidor com plataforma Windows.

            Espero que possa me ajudar!

          • @Everton, é muito estranho, olhe o meu teste:
            http://www.sistemabasico.com.br/zips/Mulher_Despeja_o_Marido.zip
            Agora tente digitandosistemabasico.com.br/zips/Mulher_Despeja_o_Marido.zipno teu navegador:
            Irá redirecionar para um arquivo erro.php que fiz para o teste.
            Veja bem… quando colei o código do .htaccess no comentário, o endereço do redirecionamento (… erro.php) foi para linha debaixo, porém o endereço deve estar logo após um espaço entre o símbolo ‘$’ na mesma linha do RewriteRule.
            Veja se isso ajuda, pois como pode ver comigo funcionou, e se não funcionar com você novamente, então deve ser algo em relação ao windows e estar usando IIS e não APACHE.
            Mas vamos tentando, se não for o caso da linha que mencionei, diga aí e vamos testar outras possibilidades.

          • Roberto, acho que encontrei o problema. (Pode não ser mas, aqui deu certo)

            Eu cliquei no link que você disponibilizou para teste e o download foi feito (até aqui tudo bem). Em seguida digitei na barra de endereços do navegador e também fez o download (Utilizando o Mozilla Firefox). Então, fui testar no IE8 digitando na barra de endereços e então, apareceu a página de erro.

            É como se o Mozilla gravasse um cookie do download ou sei lá.

            Não sei se é para funcionar desta forma, mas é o que está acontecendo aqui comigo. Talvez por isso não estava direcionando à página de erro, pois eu havia feito o download minutos antes de criar o .htaccess

            De toda foma, muito obrigado pela ajuda. Isso vai ser muito útil pra mim!

          • @Everton, há algum erro aí, pois não era para ter ocorrido o download quando digitou, em nenhum navegador.
            Nem no meu teste nem no teus testes.
            De qualquer forma é uma solução, pois não haverá forma de qualquer usuário não estando logado ter a oportunidade de clicar no link antes de tentar digitar, pois para clicar no link e gravar qualquer possível cookie precisaria estar logado, pois a ideia é mostrar links só para logados, sendo assim se a primeira tentativa for digitar irá bloquear e não haveria problemas.
            Faça outro teste: Limpe o cache, cookies etc. e tente digitando novamente pelo Firefox.
            Se tudo certo, então problema resolvido.
            Bons estudos!

          • Olá Roberto!
            Acho que descobri o problema.

            Contatei com o pessoal da hospedagem e descobri que o arquivo .htaccess para o IIS do Apache estava desabilitado, impedindo o uso de URL rewrite.

            Depois da ativação irei refazer os testes e postarei um comentário dos resultados.

            Trabalho com hospedagem terra e ultimamente encontrei muitos problemas e, por esse e outros motivos gostaria de mudar.

            Você teria alguma a me indicar ou aconselha não fazer a mudança??

            Desde já, agradeço pelo apoio!

          • Eu aconselho a mudar sim… eu recomendo sempre hospedagem Linux e não em Windows, mas cada um é cada um.
            Se desejar mudar de hospedagem de fato fale comigo, pois possuo um servidor e disponibilizo hospedagem de alta qualidade com data center no Brasil.
            Não é dos serviços mais baratos, mas a qualidade é alta e o supoirte é direto comigo pra qualquer problema.
            Planos mensais, trimestrais e anuais ou até bianuais.
            Se tiver interesse me da um toque que te passo valores via email.

        • Roberto,

          Pode me mandar seu orçamento!!

          evvertton@terra.com.br

          Fico no aguardo!

          • Te enviei os planos já.
            Abraço

          • Olá Roberto, há quanto tempo hein?!

            Mais uma vez insisto no assunto do mod Rewrite.
            Não estou conseguindo ou estou conseguindo mas não está dando certo…

            Mesmo que eu crie uma pasta no meu servidor somente para os arquivos em zip, e armazene os arquivos dentro desta pasta junto do arquivo file.htaccess, este ainda assim aceita dowload via digitação na barra de endereços.

            A proteção de hotlink não acontece!

            estou utilizando exatamente como você me instruiu no arquivo file.htaccess e também utilizei da internet outros meios do mesto tipo mas também não funcionou!

            Poderia me dar uma luz?
            Abraços!

          • Everton, não é file.htaccess e sim somente .htaccess, exatamente como escrevi agora: .htaccess
            Espero que consiga.

          • Olá Roberto!

            Logo acima, você fez um exemplo em seu site e pediu para eu testar, o que ocorreu perfeitamente como eu esperava.
            Seria pedir demais se eu pedisse para você postar aqui o seu arquivo .htaccess para eu comparar com o meu, pois criei o arquivo e, agora eu consigo impedir o download via digitação na barra de endereços, mas quando clico no link que não era para bloquear, ele também bloqueia.

            Fico no aguardo!

          • Olá @Everton, o meu arquivo .htaccess é como postei antes:

            RewriteEngine on
            RewriteCond %{HTTP_REFERER} !^http://(.+\.)?sistemabasico\.com\.br/ [NC]
            RewriteRule .*\.(zip|rar)$ http://www.sistemabasico.com.br/erro.php [L]

            Obs.: [NC] e [L] ficam ao final das linhas e não sozinhos na linha de baixo. foi exibido dessa forma por causa do sistema de comentários que é limitado.
            Esse arquivo erro.php é um arquivo que preparei para ser exibido quando o acesso ao download fosse contrariando a única forma permitida.

            Lembrando que o arquivo .htaccess é somente .haccess mesmo, ou seja, nada antes do ‘ponto’
            Bons estudos

  44. Meu camarada seu tutorial esta show.
    Porem sempre tem um probleminha aqui ou ali e o meu é o seguinte.
    Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource in /xxx/xxxxxxxx/xxxxxx/cadastrar.php on line 13
    Error:
    Meu server é o sql
    Fico grato se puder me ajudar

    • Olá @Cleison, o teu problema está no que diz respeito ao MySQL , mas isso tu já viu.
      O arquivo config.php está sendo incluído no cadastrar.php?
      O conteúdo do config.php está com os dados de conexão definidos corretamente?
      O nome do arquivo que está no action do form de cadastro é o mesmo nome utilizado no arquivo que cadastra, ou seja, cadastrar.php?
      O teu arquivo cadastrar PHP foi executado modificações ou está igual o do tutorial?
      Se executou modificações queias forma?
      Como está a sua linha 12, 13, 14 do arquivo cadastrar.php?
      Somente respondendo essas perguntas que poderei te ajudar @Cleison, de outra forma, apenas com bola de cristal :)
      Aguardo.

  45. Cara, muito obrigado pela informção, é de pessoas como vc que o mundo precisa! Que não tem medo de ensinar! Parabens.

    Só fiquei com uma duvida quanto a pagina de cadastro, eu tenho que salvar como cadastro.php mesmo?

    • Eu que te agradeço pelas palavras @Call.
      Quanto a tuas dúvidas, veja bem, você pode dar o nome aos arquivos da forma que quiser, mas deverá ter atenção de verificar se nos outros arquivos há chamadas para arquivos com nome que eu dei no tutorial e substituir pelos nomes que tu deu.
      Exemplo: Se um form aponta para o cadastrar.php lá no tutorial e vc muda para um nome qualquer o cadastrar.php, deve alterar no action do formulário também… é só um exemplo, pois deverá verificar todos os arquivos que possam ter ligações com os arquivos que tu alterar os nomes.
      Bons estudos!

  46. gostei do tutorial,mas queria saber se dá p/ complementar o codigo,com restricao a acessos simultaneos com a mesma senha e usuario,ou diferentes ip’s

    • Olá @fujiiartz… da pra fazer essas complementações sim… esteja livre para isso, a ideia do tutorial também é essa, passar o básico e o aprendizado envolve modificações no código depois que o domínio sobre o assunto aumenta. Para o que você mencionou, basta criar um ‘seletor’ no banco de dados na tabela dos usuários, algo como um campo ENUM ’0′,’1′ que no caso poderia ser definido ’0′ para se o user não estiver logado e ’1′ se estiver logado. Sempre que for efetuado o login, antes de dar a permissão verifica-se esse campo na tabela referente aquele usuário e senha… se estiver setado para ’1′ não da as permissões se tiver ’0′ da permissão e UPDATE para ’1′. Sacou?
      Quanto à IP, também funciona praticamente da mesma forma, salva o IP, e se alguém tentar entrar com o usuário novamente, faz-se a verificação do IP do novo login com o que está gravado e se não bater não da permissão, mas ainda assim prefiro a do ‘seletor’ e obviamente sempre que o usuário efetuar o logout, é feito um UPDATE na tabela novamente no campo tal, onde ‘reseta’ o valor para ’0′.
      Espero ter dado uma luz.
      Bons estudos!

  47. Uma duvida, deu quase tudo certo, porem quando voce termina o cadastro e clica em enviar vai para uma tela em que apareçe a mensagem:

    Parse error: syntax error, unexpected ‘<' in /home/pjouia/public_html/config.php on line 9

    meu config.php esta da seguinte forma:

    ?php

    define('BD_USER', 'usuário de banco de dados');
    define('BD_PASS', 'senha do banco de dados');
    define('BD_NAME', 'nome do seu banco de dados');

    mysql_connect('localhost', 'root');
    mysql_connect('localhost', BD_USER, BD_PASS);
    mysql_select_db(BD_NAME);

    ?>

    qual o problema?

    • @Call, mesmo você tendo resolvido, vou deixar aqui a resposta para que outros que tenha a mesma dificuldade possam resolver.
      Antes de tudo, você esqueceu da abertura de tag ‘< ' onde fez assim ?php quando deveria ser assim < ?php
      Agoira vamos nos aprofundar…
      Primeiramente modificações nos códigos do tutorial devem ser feitos com segurança, de outra forma as chances de não dar certo serão bem grandes.
      Veja bem, acredito que você sabe que os dados de BD_USER, BD_PASS e BD_NAME devem ser os dados relacionados aos teus e não ao que coloquei no tutorial, mas como eu disse, acredito que quanto à isso tudo bem, você deve ter feito desta forma.

      Depois e mais grave :) você adicionou uma linha mysql_connect() sem necessidade… veja como deveria ficar o código em relação ao teu caso:

      < ?php

      define('BD_USER', 'root');
      define('BD_PASS', '');
      define('BD_NAME', 'nome do seu banco de dados');

      mysql_connect('localhost', BD_USER, BD_PASS);
      mysql_select_db(BD_NAME);

      ?>

      Abraços

  48. Roberto Lunelli, ja resolvi o problema, agora, corre td bem, recebo o e-mail para confirmação, mas na hora de logar, aparece o seguinte erro:

    Warning: Cannot modify header information – headers already sent by (output started at /home/pjouia/public_html/config.php:1) in /home/pjouia/public_html/verifica_usuario.php on line 54

    como posso resolver isso?

    • Olá @Call, mais uma vez, fazer modificações nos arquivos causarão isso, erros.
      A dica é fazer exatamente como está e testar… fazer funcionar, depois sim ir modificando aos poucos.
      Esse erro se dá quando o arquivo envia ‘saída’ antes da função header().
      A função header() está sendo usada no teu arquivo verifica_usuário na linha 54, mas antes da função, você de alguma forma deu uma saída, seja um ‘echo’, seja um ‘html’ ou talvez um simples ‘espaço’ antes da tag < ?php no file config.php.
      Verifique essas possibilidades… inclusive se estiver usando os arquivos do tutorial baseado numa estrutura de includes.
      Bons estudos!

  49. Roberto, primeiramente queria te dar os parabens velho, sua atitude de deixar isso disponivel é mto da hora mesmo.

    Bem, eu coloquei o seus sitema no meu site, ta pegando perfeitamente. o fato é que assim, eu to fazendo um site pra um grupo de escoteiros, e eu tenho quero fazer é que na area restrito escoteiro, ele possa comentar o que ele fez, das liçoes dele… uma relação de home works, e todo post é contabilizado no banco de dados.

    passado um deteminado numero de posts, ele ganharia uma medalha de bronze, por exemplo.

    exemplo

    pra conseguir uma medalha de pra bonze ele precisa de 30 pots.

    o escoteiro do id=02 tem 30 posts

    entao aparece na pagina dele uma medalha de ouro..

    eu tentei varios codigos, mas o que eu acho que nao ta dando certo, é esse lance dele pegar por Sessoes, bem ve o meu codigo, e se vc pudesse Roberto, me falar o que está dando errado, por favor.

    // lugar do site onde você vai mostrar a medalha

    $sql = mysql_query(“SELECT * FROM post WHERE fk_id_escoteiro = 3″);
    $qtd = mysql_num_rows($sql);

    if ($qtd >= 10) {
    echo ”;
    } elseif ($qtd >= 20) {
    echo ”;
    }

    Eu li os comentarios, inclusive do Rodrigo onde vc coloca um codigo de duas paginas, lista.php e painel.php, só que quando eu testo o exemplo, pra poder trabalhar encima dele, ele da erro, acredito que exista algum “.” ou “;” a mais que eu não consigo encontrar, essas coisinhas que escapam e deixam a gente careca de raiva.

    agradeço desde já, curti mta a atitude do site sistemabasico, ou divulgar e quero fazer uma contribuição sim.

    • Olá @Bruno, primeiramente, obrigado pela consideração e sim, toda contribuição e divulgação positiva é válida sempre.
      Obs.: Mesclei teus 5 comentários para um completo com o teu codigo ;)
      Bom vamos focar na tua dúvida, onde a tua lógica não está de toda forma errada, mas vamos deixar bem claro isso:
      Se o sistema está funcionando perfeitamente então fica tudo mais fácil para essa implementação.
      Bom para o registros das postagens imagina-se que tenha-se uma tabela específica para isso e entre os campos da tabela no banco de dados referente a esta tabela possua obrigatoriamente o id da postagem e o id do usuário que postou…. bom até aí tudo bem… para exibição a simples lógica é uma contagem de posts referentes ao id do usuário, que acredito estar conseguindo fazer tbm.
      Teu problema então está em que parte?
      Não está registrando no bd, mais precisamente na tabela de postagens o ID do usuário?
      Pergunto isso, pois só isso impossibilitaria a contagem.
      Você deve fazer um teste antes de registrar a postagem, imprimindo o valor da variável $_SESSION['usuario_id'] e ver se imprime o valor id do usuário e se sim é esse valor que deve ser gravado no bd.
      Acredito que deva ter feito uma página onde o usuário efetue as postagens e esse arquivo tenha session_start() no topo e tbm as outras opções que a tornam restrita.
      Enfim… to apenas chutando varias possibilidades, pois não tenho como saber o que está fazendo ao certo, ou seria ao errado hehehe.
      Veja o que escrevi, veja se da uma luz, se não manda novamente aí.

  50. Roberto, a minha duvida está relacionada em como aplicar esses codigos na area restrita, onde cada usuario teria uma medalha diferente…

    entao assim, como eu poderia fazer:

    session_start(); // Inicia a session
    include “functions.php”; // arquivo de funções.
    session_checker(); // chama a função que verifica se a session iniciada da acesso à página.

    $sql = mysql_query(“SELECT * FROM post WHERE fk_id_escoteiro = “.$_SESSION['sessao_com_o_id_escoteiro'].””);
    $qtd = mysql_num_rows($sql);

    if ($qtd >= 10) {
    echo ”;
    } elseif ($qtd >= 20) {
    echo ”;
    }

    é assim que eu deveria atuar? é que nao está dando certo, se não for, se pudesse por favor corrigir meu erro pra que eu possa estar afetuando essa função, eu agradeço de verdade.

    iobrigado.

    • Olá @Bruno, como eu disse antes, mostrava exatamente o que fazer.
      Na tabela referente aos posts deve ser registrado ID do usuário também que está em $_SESSION[usuario_id]… certo até aí?
      Se está gravando na tabela dos posts o id do usuário então fica tudo mais fácil. Você está conseguindo gravar no bd o id do usuário?
      Enquanto você não me responde isso vou adiante como se tivesse conseguindo.
      O cabeçalho está correto, porém é o seguinte… se no arquivo terá uma consulta a banco de dados, então você esqueceu de incluir o arquivo de conexão, o config.php.

      O correto:


      session_start(); // Inicia a session
      include "config.php"; // Arquivo de conexão com o banco de dados
      include “functions.php”; // Arquivo de funções.
      session_checker(); // Chama a função que verifica se a session iniciada da acesso à página.

      Acho que isso vai te ajudar ;)

      Quanto a consulta no banco de dados propriamente dito e baseando-me no que você postou ali acredito que seria assim:


      < ?php

      $sql = mysql_query("SELECT COUNT(id_da_postagem) FROM post WHERE fk_id_escoteiro = ".$_SESSION['sessao_com_o_id_escoteiro']."") or die(mysql_error());

      $qtd = mysql_fetch_row($sql);

      if (($qtd[0] > 1) && ($qtd[0] < =10))
      echo "Medalha de Bronze";
      if (($qtd[0] > 10) && ($qtd[0] < =20))
      echo "Medalha de Prata";
      if ($qtd[0] > 20)
      echo "Medalha de Ouro";

      ?>

      Você pode brincar com os valores e definir como quiser a quantidade de pontos que é necessário para alcançar as medalhas.
      Existem outras diversas formas para se fazer isso que quer, mas segui o que já você vinha fazendo pra que possa entender melhor o processo.

      Teste e qualquer coisa fale aí.

      Abraço

  51. Bom sou novo no mundo PHP, jah tenho um site e queria muito colokar php e outras coisas bem participativas no meu site, ai quero saber por onde começo a aprender sobre php, MySQL e essa outras coisas ai, agradeço se pode ajudar nos meu estudos pois tenho muita vontade de entrar de cabeça nessa area, espero restposta.

    • Olá @Uilton, o que posso indicar é ir devagar e sempre, na verdade o que definirá a velocidade é a forma que você absorve o conhecimento passado.
      Existem diversas formas de aprender PHP, seja como autodidata (no peito e na raça), ou fazendo cursos especializados no assunto.
      Independente da forma que escolha, eu recomendo começar pelo começo, Aprenda xHTML básico pelo menos e tente pegar algumas noções iniciais sobre CSS, pois te ajudarão a ter resultados mais interessantes com o PHP quando estiver aprendendo o dito.
      Após aprender o básico do xHTML e um pouco de CSS, deverá ler um pouco sobre Lógica de programação (muito importante), mesmo que um pouco, mas leia, entenda o que é isso. Não é difícil entender e irá te preparar para entrar no mundo do PHP com mais compreensão do que irá ler e testar. Pronto, agora sim aventure-se no PHP.
      Como e por onde?
      Como eu disse no início: Como autodidata se achar que tem essa capacidade de aprender sozinho, ou melhor dizendo, buscando a informação pelos teus próprios méritos, através de livros, e na própria internet, testando, lendo etc… OU através de cursos especializados, mas entenda que os cursos acabam te passando apenas o básico (ajuda bastante a dar continuidade) e o bruto deverá aprender na prática. Qualquer das formas são validas, vai depender de tua capacidade de absorção e disponibilidade para aprender. Sem esquecer que usando o http://www.sistemabasico.com.br também podes aprender muita coisa durante todo esse processo. : )
      Bons estudos.

  52. Roberto, para mim funciona muito bem até o cadastro do banco de dados, mas não chega e-mail para o cara que se cadastrou. Estou achando que foi por conta de algumas mudanças que teve na locaweb, entretanto, utilizo outros formulários com MIME 1.1, mas também não funcionou, outra diferença é que nos formulários que funcionam está como text/plain, mas eu alterei e também não funcionou. Aparece a mensagem de que foi enviado pro e-mail e tudo. Mas não chega. Você pode me indicar alguma coisa pra tentar resolver? Obrigado.

    • Olá @Leonardo. Outras pessoas também vem tendo problemas com a função mail(), e muitas vezes seda por causa do servidor de quem está recebendo a mensagem.
      Procure verificar se está caindo em SPAM ou lixo eletrônico… tente enviar para hotmail, gmail, yahoo etc e veja se cai em lixo eletrônico ou spam tbm.
      Nos comentários (são muitos eu sei, mas passei algumas icas já de como tentar resolver esse problema… usando envio autenticado com a classe PHPMAILER ou ainda melhorando o cabeçalho dos headers para usar com a função mail() mesmo. Da uma olhada nesse tutorial que ensina a usar o PHPMailer localmente e tente adaptar as tuas necessidades. Email autenticado é email garantido na caixa de entrada hehehe.
      Outra coisa.. já recebi diversas reclamações sobre emails não funcionar na empresa que vc utiliza como hospedagem.
      Enfim… tente fazer como eu falei, estude o tuto do PHPMailer e tbm releia os coments deste tutorial..
      Bons estudos!

      • Olá Roberto, deu certo o uso da classe PHPMAILER. Chegando direitinho em qualquer e-mail. Muito obrigado pela ajuda. Você é muito bom! Parabéns.

        • Obrigado @Leonardo.
          Estou pensando em alterar o tutorial e utilizar a classe para não haver mais problemas.
          Assim que eu tiver um tempo irei implementar essa atualização.
          Se quiser pagar um cafézinho, esteja a vontade.
          Bons estudos!

  53. Boa Noite

    Script de activar conta não me está funcionando:s

    Diz sempre:

    Sua conta não pode ser ativada!

    • Amigo, com o que vc me passou só posso te dizer que deve ter feito algo errado.
      Se seguir exatemente passo a passo do tutorial, sem modificar absolutamente nada provavemente não ocorrerá erros.
      Se fez isso, refaça, pois em algum ponto deve ter feito algo fora do correto ou esquecido de fazer alguma coisa necessária.
      Veja se o link de ativação está correto, se os dados estão sendo gravados corretamente no bd pois se não, na hora da comparação dará o erro. Verifique tbm se de fato não alterou nada a respetio da senha, principalmente na encriptação e o formato aleatório de ser gerada, conforme o tutorial. Lembrando tbm que o banco de dados deve estar corretamente definito o valor do campo para senha, ou seja, no mínimo VARCHAR 32.
      Qualquer coisa fala aí.

  54. Boa Noite,

    Alterei o código sim, um pouco o que fiz foi o seguinte:

    o link é ex:(omeusite.com/activar_conta.php?id=40&code=2e4d1dc1cdb02b9482ac0c3c59ba5efa)

    __________________________

    /*activar_conta.php*/
    <?php

    $user_id = $_REQUEST['id'];
    $senha = $_REQUEST['code'];

    $sql = mysql_query(

    "UPDATE empresa SET activo='1'
    WHERE id_empresa='{$user_id}'
    AND senha='{$senha}'"

    );

    $sql_doublecheck = mysql_query(

    "SELECT * FROM empresa
    WHERE id_empresa='{$user_id}'
    AND senha='{$senha}'
    AND activo='1'"

    );

    $doublecheck = mysql_num_rows($sql_doublecheck);

    if ($doublecheck == 0){

    echo "Sua conta não pode ser ativada!“;

    }elseif ($doublecheck > 0){

    echo “A sua conta está activa!”;

    }

    ?>

  55. Já consegui, não estava a conectar com o banco de dados

    obrigado pela ajuda e bons posts

  56. Olá roberto, não entendo muito de php. mas entendo de html e css
    mas o que quero perguntar é o seguinte. se a pessoa digitar
    http://www.endosite.com.br/cofing.php e ler o código fonte ela terá acesso ao meu banco de dados?
    ou isso não é possível?

    excellente post! parabéns!

    • Olá @Taissa, tudo bem?
      Não… se a pessoa digitar o cominho do arquivo.php ele não consegue ler o código fonte do script PHP somente o HTML do arquivo.
      Se no arquivo config.php não tiver saída HTML nenhuma, ele simplesmente não verá nada. E se ele tentar salvar o arquivo, ele salvará um arquivo somente com HTML se este tiver alguma saída HTML.
      Claro que em um nível mais avançado, ainda podemos proteger melhor arquivos que não queremos de jeito nenhum que alguma pessoa possa sequer pensar em ter acesso, emsmoq eu seja praticamente impossível.
      Não é o seu caso… vá passo a passo e se precisar de mais ajuda entre em contato.
      Bons estudos!

  57. Olá, adorei o tutorial, é realmente muito bom, parabéns.
    Entretanto, estou com alguns problemas, há alguns bugs nas páginas e eu já conferi o código e está certinho, como você ensinou. Segue imagens (prints) do que está acontecendo:
    http://i54.tinypic.com/204jv7.png
    http://i56.tinypic.com/2910sax.png
    Aguardo resposta, obrigado.

    • Olá @Nathan… as mensagens inciadas por NOTICE, não são propriamente erros, e vc pode definir no php.ini para não serem exibidas ou no topo de seus arquivos adicionar essa linha:
      error_reporting(E_ALL ^ E_NOTICE);
      Essa linha acima define que é para exibir todos os erros que ocorrerem, menos as Notices .

      Quanto ao Warning que rolou conforme uns dos printcreens, refere-se à vc estar usando servidor local e como pode ter lido no tutorial eu deixo claro que usar localmente só se tiver um servidor de email instalado ou usar envio autenticado com emails do gmail por exemplo, usando a classe PHPMailer ao invés da obsoleta função mail() do PHP. Leia todos os comentários e achará informações mais precisas a respeito.

      Verifique esse tutorial: http://www.sistemabasico.com.br/2011/01/20/como-enviar-email-localmente-com-php-apache-phpmailer-gmail-windows/ e adapte à tua necessidade.
      Bons estudos!

  58. Eu consegui fazer, fiz algumas modificações e agora está funcionando certinho! Só tenho uma dúvida externa ao assunto do tutorial…
    Todo o texto escrito dentro do echo fica com os acentos bugados, ex: “Você não está mais logado em nosso site!”
    Gostaria de saber se isso é algum erro de configuração do editor (uso o DreamWeaver) ou outra coisa.
    Obrigado.

    • @Nathan, o causador desse conflito podem ser diversos fatores.
      Vou citar alguns para vc testar:
      Procure verificar o charset do documento no topo do arquivo, nas meta-tags, talvez esteja como utf-8, mude para iso-8859-1 e veja se resolve.
      Se os dados vem de banco de dados, veja se a codificação do banco de dados é igual ao do documento (arquivo).
      Outra forma e é a que eu uso… nunca digito meus textos como nesse exemplo: café e sim sempre faço café e nunca tenho erros em nenhuma codificação, seja utf, ou iso… a portabilidade para qualquer servidor ou banco de dados é maior e sem conflitos.
      Bons estudos.

  59. Olá Roberto

    Estou a fazer o sistema de login e está a acontecer-me um erro estranho que já corri tudo e não consigo resolver.

    É o seguinte quando insiro o utilizador e a senha caso os dados sejam correcto, abre http://www.empresasnanet.com/verifica_utilizador.php e fica tudo em branco se for errado mostra a mensagem de erro. :s

    o que pode ser o erro?

    penso que deveria mostrar
    “Bem vindo “. $_SESSION['nome'] .”!
    Você está acessando área restrita para usuários cadastrados!

    A unica alteração que efectuei é que o utilizador é o email e não existem niveis de permissão.

    • Olá @Rui, tente fazer sem modificação nenhuma, apenas para testar.
      Se tudo correr bem o problema está nas modificações que fez.
      Se der errado fazendo igual o tutorial, manda novamente a dúvida que vamos tentar resolver juntos.
      Da uma lida nos comentários postados pra ver se tem algo que possa ajudar também.
      Abraço

  60. Olá, Roberto…

    Fiz o tutorial, mas não entendo porque eu não recebo o e-mail de cadastro… =/

    Depois de preencher os dados e enviar aparece a msg: “Foi enviado para o seu – email um pedido de confirmação de cadastro, por favor verifique e siga as instruções!

    Se puder me ajudar agradeceria muito! =)

    Bjos! ;*

  61. com muito trabalho consegui editar o script.
    Mais quando eu valido o email, e vou fazer o login da esse erro:
    Você não pode logar-se! Este usuário e/ou senha não são válidos!
    Por favor tente novamente!

    Não sei mais oq fazer se alguem puder me ajudar ai esta meu email: gunnarcorrea@hotmail.com
    :/

  62. Salve Roberto!
    Primeiramente, queria agradecer por este excelente script, e deixar meus parabéns x)
    Bem, eu baixei seus arquivos e estava tentando fazer funcionar, mas aquele erro de header (que já citaram) persiste (no arquivo verifica_usuario.php)
    Dá erro no trecho: header(“Location: area_restrita.php”);

    O quê fazer pra redirecionar o usuário pra página restrita, se esse trecho não compila ? :/

    abraço!

    • Olá @Edu, se jogar no google sobre header() poderá observar que a maioria dos erros e dúvidas são iguais as suas e as repostas e soluções são as mesmas.
      Para utilizar a função header() não pode ter nenhuma saída antes da função, entenda saída como algo que possa ser exibido na tela do monitor.
      Em algum ponto dos teus códigos é certo que está dando uma saída antes do header()
      Se não conseguir encontrar onde você está errando, pode tentar algo com javascript para redirecionar, procure no google, mas não use Se ainda assim quiser usar header, utilize antes de tudo, logo após São as dicas que posso dar.
      Bons estudos!

      • Valeu pelos esclarecimentos, Roberto!
        Resolvi o problema colocando ob_start() no início da página que contém o header(), e funcionou perfeitamente x)

        abraço, e obrigado pelo suporte!

  63. ola amigo amei seu site.
    poderiar me ensinar como hospedar as paginas php.
    eu nao sei. se nao for encomodo. eu ja baixei alterei os dados mas onde coloco as paginas?

    • @ueliton, o tutorial é como se fosse um exemplo bem tosco de um site com opções de área restrita.
      Faça da mesma forma com seu site, protegendo as páginas que deseja.
      Se não entendeu o que eu quis dizer, amigo este tutorial ainda não é pra você.
      Bons estudos.

  64. me parece muito bom o tutorial, qdo eu estiver em casa vou testar, pois estou precisando de um sistema desse, eu gostaria de saber, se é possivel incrementar esse sistema de cadastro/login de usuarios, em uma pagina de efetuar pedidos, e realizar a compra? tem como? pois este ja possui o usuario_id certo?

    aguardo resposta, abraçooos e parabens!!

    • Olá @Roberto, este sistema pode ser integrado de varias formas. Vai da criatividade e conhecimento para tanto.
      Tem ‘usuario_id’ sim, mas isso é só o nome do campo no banco de dados, mas serve sim como referência para o usuário que efetuar o pedido.
      Para tanto bastará saber fazer um relacionamento entre as tabelas, ou seja, entre a tabela de usuários e a tabela de pedidos.
      Bons estudos.

  65. Olá Roberto Lunelli, tudo bem ? Primeiramente gostaria de parabenizá-lo pelo tutorial. Bom, estou tendo alguns problemas para configurar esse script e gostaria muito que você me ajudasse.

    Meu arquivo config.php esta dessa forma:

    Está certo ?

    Eu criei a minha tabela no CPANEL, fui em Banco de Dados MySQL, e a criei juntamente com um usuario, portanto não joguei no servidor o arquivo usuarios.sql que vc colocou para download.
    Quando clico no botão enviar (arquivo formulario_cadastro.php) aparece varios erros:

    Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘BD_USER’@’localhost’ (using password: YES) in /home/empor381/public_html/vip/config.php on line 7

    Warning: mysql_select_db() [function.mysql-select-db]: Access denied for user ‘empor381′@’localhost’ (using password: NO) in /home/empor381/public_html/vip/config.php on line 8

    Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in /home/empor381/public_html/vip/config.php on line 8

    Warning: mysql_query() [function.mysql-query]: Access denied for user ‘empor381′@’localhost’ (using password: NO) in /home/empor381/public_html/vip/cadastra.php on line 51

    Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/empor381/public_html/vip/cadastra.php on line 51

    Warning: mysql_query() [function.mysql-query]: Access denied for user ‘empor381′@’localhost’ (using password: NO) in /home/empor381/public_html/vip/cadastra.php on line 52

    Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/empor381/public_html/vip/cadastra.php on line 52

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/empor381/public_html/vip/cadastra.php on line 54

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/empor381/public_html/vip/cadastra.php on line 55

    Warning: mysql_query() [function.mysql-query]: Access denied for user ‘empor381′@’localhost’ (using password: NO) in /home/empor381/public_html/vip/cadastra.php on line 136

    Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/empor381/public_html/vip/cadastra.php on line 136
    Access denied for user ‘empor381′@’localhost’ (using password: NO)

    Você poderia me ajudar ?

    Fico no aguardo e desde já agradeço !

    Abraços
    Guilherme

  66. Olá Roberto, tinha colocado a configuração do meu arquivo config.php no outro post, mas não apareceu. Ai vai ela novamente:

    define(‘BD_USER’, ‘empor381_user’); // USE O TEU USUÁRIO DE BANCO DE DADOS
    define(‘BD_PASS’, ‘minhasenha’); // USE A TUA SENHA DO BANCO DE DADOS
    define(‘BD_NAME’, ‘empor381_usuarios’); // USE O NOME DO TEU BANCO DE DADOS

    mysql_connect(‘localhost’, ‘BD_USER’, ‘BD_PASS’);
    mysql_select_db(‘BD_NAME’);

    • Olá @Guilherme,
      os erros são característicos de uma conexão mal sucedida por falta de informação correta em relação à teu usuário, senha ou banco de dados.
      …ou seja, não foi possível estabelecer a conexão com o banco de dados devido aos dados incorretos fornecidos e obviamente, devido à isso, nenhuma query vai funcionar e por isso aquela cascata de mensagens de erros.

      Olhando por cima e já sabendo de antemão que tu usas CPANEL então posso imaginar onde está o erro no teu arquivo config.php… mas apenas vou dar um palpite :)

      Se o nome do banco de dados que você criou (veja bem, o nome do banco de dados e não da tabela) é exatamente esse: empor381_usuarios…
      então só resta um local para estar configurado errado: define(‘BD_USER’, ‘empor381_user’);

      Tente coloca r o usuário que vc usa para acessar o CPANEL… provavelmente apenas empor381

      Desta forma: define('BD_USER', 'empor381');

      Dica: use apostrofe (como fiz no exemplo acima) ou aspas, pois da forma que vc está usando acentuação (CRASE e AGUDO) pode dar conflito também.

      Bons estudos!

      • Olá, eu troquei o crase/agudo por aspas no config.php, agora o erro que da é esse:

        Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/empor381/public_html/vip/cadastra.php on line 107

        Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/empor381/public_html/vip/cadastra.php on line 109
        No database selected

        • @Guilherme, o próprio erro já informa onde está o problema: No database selected
          Como eu disse antes, os dados que vc está informando no arquivo config.php não conferem com a realidade ou vc não está incluindo o arquivo config.php (include "config.php";) no topo dos arquivos que fazem consultas ao banco de dados, pois o que está ocorrendo é a falta de seleção de um banco de dados.
          Bons estudos

  67. Olá Roberto, tudo bem ? eu fiz o que vc sugeriu, e os erros continuaram da mesma forma. Dai eu resolvi dar uma vasculhada no codigo cadastra.php. Achei alguns caminhos errados em relação ao meu site, pq joguei todo o codigo em uma pasta (www.emporiotecnologia.com.br/vip). Dai eu voltei o usuário da forma que estava antes, mas com apostrofe no arquivo config.php

    define(‘BD_USER’, ‘empor381_user’); // USE O TEU USUÁRIO DE BANCO DE DADOS
    define(‘BD_PASS’, ‘minhasenha’); // USE A TUA SENHA DO BANCO DE DADOS
    define(‘BD_NAME’, ‘empor381_usuarios’); // USE O NOME DO TEU BANCO DE DADOS

    mysql_connect(‘localhost’, BD_USER, BD_PASS);
    mysql_select_db(‘BD_NAME’);

    Agora quando clico no botão enviar (arquivo formulario_cadastro.php) aparece esses erros:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/empor381/public_html/vip/cadastra.php on line 107

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/empor381/public_html/vip/cadastra.php on line 109
    No database selected

    O problema agora seria o arquivo cadastra.php ?

    Fico no aguardo de uma luz e desde já agradeço.

    Guilherme

  68. ‘;Access denied for user ‘sacriaco’@’localhost’ (using password: NO)

    da isso quando vai se cadastrar.. e tah tudo certo..
    alhuem me ajuda..

    • Não @Febronio, não está tudo certo, pois se tivesse não daria esse erro.
      O que está ocorrendo é o seguinte: Ou você não colocou teus dados de conexão com o banco de dados correto ou não incluiu o arquivo config.php devidamente conforme o tutorial ou ainda ambos os erros.
      Verifique o config.php e se está dando include nele nos arquivos que exigem isso. Analise o tutorial com atenção.
      Bons estudos.

  69. Oi Roberto,

    olha, eu instalei o sistema no meu localhost, com o MAMP. Até ai tudo, certo!!
    O problema é o direcionamento para a página http://www.teusite.com!!
    Eu não consigo acessar a página e portanto não tenho como confirmar a senha que por sua vez não deixa eu fazer o login na página. Diz que o Login ou a Senha estão incorretos!!
    O que eu posso fazer? Eu tenho que alterar algum arquivo?

    Me ajude por favor!!

    att.

    Caio

  70. Gostei do script, porem gostaria de saber se esse script tem função anti sql injection ?

    grato

    • Olá @Andre… como mencionei nas explicações do tutorial, não é intenção nenhum método mais complexo inclusive de segurança, mas devido a forma que é feito, mesmo sendo simples… se vc conhece alguns métodos de executar sql injection… teste.
      Eu nunca sofri essa ‘violência’ em nenhum script meu hehehehe.
      Mas você pode usar a função mysql_real_escape_string( ) nas suas querys para se proteger caso esteja inseguro.
      Bons estudos

  71. Oi, Roberto!
    Adooorei o tutorial, caiu feito uma luva pra mim!

    Tudo corre bem até quando clico no link de ativação que consta no e-mail…antes dizia “sua conta não pode ser ativada!” e agora fica uma página em branco!
    =/
    Pode me ajudar?
    Tenho que entregar esse projeto o quanto antes, melhor!
    Obrigada!

    • Bem, Roberto!
      Agora fiz uma modificação e voltou a frase: “Sua conta não pode ser ativada!”
      =/
      Me descabelando aqui…kkkkkkk
      HELP, please!
      Obrigada!

      • Oi @Karla te enviei um email.
        Uma das hipóteses é porque deve ter alterado algo que não era para alterar, esquecido de configurar algo que era pra configurar ou ainda configurado algo que não era pra configurar.
        Fica difícil dizer o que pode ser.
        A dica é pegar o script e instalar separado do teu site… para testar.
        Se tudo der certo ai sim ir integrando aos poucos e com cuidado.
        Verifique o email que te mandei e vamos ver se consigo te ajudar.
        Bons estudos!

  72. Olá @Roberto Lunelli, obnrigado pela dica !!!

    Abraços

  73. Olá Roberto. Estou a tirar um curso de multimédia, mas ainda agora comecei a trabalhar com php.

    Estou a fazer um site que requer que o usuário faça login e que se mantenha com o login quando muda de página em página.

    Agora, estive a procurar, e vi que para isso acontecer, precisamos de usar cookies. Este teu script tambem mantém os usuarios logados saltando de página em página?

    Agradecimentos

    • Desculpa postar duas vezes, mas esqueci-me de te perguntar se eu consigo modificar o teu script tambem funciona para proteger includes

      Obrigado

      • Sim @Portas… ele mantém o user logado através de SESSIONS e não COOKIES.
        Quanto a proteger includes?? sim, basta usar a condicional verificando se uma determinanda SESSION está ativa, conforme o tutorial ensina.
        Pode ainda colocar apenas o cod de verificação, que usei para exemplificar no topo do include que deseja proteger.

        Assim ira redirecionar para outra página quando a SESSION não estiver ativa.
        Essa formatação de layout para usar includes fica por tua criatividade.

        Bons estudos

  74. Bom consegui fazer um sistema de login bastante simples sozinho. O problema é que ouvi dizer que nao se deve usar unset nem destroy session porque … está fora de uso no php 5 penso eu.
    Então como faço log out?

  75. Bom dia, eu estou com uma duvida que talvez nao faça sentido nenhum mas ca vai.
    o usuario ao fazer o login esta entrando numa parte restrita do site. o que eu queria saber era se ao fazer varias paginas é precisso fazer algo para que o broser nao se esqueça que o usuario esta cadastrado. se sim que elementos se deve usar.
    o tutorial que fez esta espectacular estou iniciando o estudo de PHP na escola e nem o meu professor me conseguiu esplicar esta materia tao bem. Obrigadao :)

    • Olá @Jorge… oque faz o usuário permanecer logado é as sessions que ele gravou ao se ‘logar’
      Quando o usuário faz logout ou fica muito tempo sem acessar a página, ou fecha o navegador e abre novamente e percebe que não está mais ‘logado’, é porque essas sessions que ele havia gravado anteriormente, estão destruídas, apagadas.
      Bons estudos!

      • bom dia e obrigado pela resposta. pelo que percebi o usuario faz o login e dai para a frente existe sempre uma ligação entre a base de dados e mostrando sempre os dados do usuario. é isso?

        se for me diga como ao passar entre varias paginas eu verifico o usuario que esta logado. ou seja o que eu queria é que ao passar entre paginas tivesse sempre no indice o nome do usuario.
        por exemplo :

        echo “olá”$nome
        como saber este $nome

        • Antes de Mais obrigado mas ao reler o tutorial que escreveu consegui perceber melhor e ja sei como fazer o que tenho andado a tentar e sem sucesso. mas ao tentar fazer de novo ele envia-me uma mensagem para o ecra assim:
          Notice: Undefined index: nome in c:\program files (x86)\easyphp1-8\www\sistema de cadastro e login\cadastrar.php on line 3

          Notice: Undefined index: sobrenome in c:\program files (x86)\easyphp1-8\www\sistema de cadastro e login\cadastrar.php on line 4

          Notice: Undefined index: email in c:\program files (x86)\easyphp1-8\www\sistema de cadastro e login\cadastrar.php on line 5

          Notice: Undefined index: usuario in c:\program files (x86)\easyphp1-8\www\sistema de cadastro e login\cadastrar.php on line 6

          Notice: Undefined index: info in c:\program files (x86)\easyphp1-8\www\sistema de cadastro e login\cadastrar.php on line 7
          ERRO:

          Nome é requerido.
          Sobrenome é requerido.

          Email é um campo requerido.

          Nome de Usuário é requerido.

          Preencha os campos abaixo:

          Nome:
          Sobrenome:
          Email:

          SABE O QUE SE PASSA E COMO RESOLVER?

          • Aa NOTICES, basta vc alterar no php.ini uma diretriz que evita que esses avisos sejam lançados… não são erros… quer dizer… eu os encaro como erros, mas não impedirão que o script seja executado. No php.ini procure por error reporting e altere ali o valor para não exibir NOTICES. No próprio php.ini tem exemplos e explicações dos valores possíveis de se usar ali na diretiva. Use algum tradutor se não souber inglês.

            Quanto aos outros problemas… deve verificar as mudanças que fez… os parâmetros dos campos dos formulários por exemplo (… input type=’text’ name=”AQUI” …) devem ser iguais aos recuperados no arquivo ao qual é enviado o formulário, de outra forma ele entenderá que o form enviou os campos vazios.

            Bons estudos

        • Olá Jorge.. o segredo são as SESSIONS gravadas na hora do login.
          Veja o arquivo verifica_usuario.php, aliás você tem que acompanhar todo o raciocínio lógico dos códigos…
          … nesse arquivo que mencionei que faz a gravação das sessions ao efetuar o login… o form de login é enviado para este arquivo então se for ver com atenção perceberá que entre outras sessions que são gravadas ele também grava essas:

          $_SESSION['nome'] = $nome;
          $_SESSION['sobrenome'] = $sobrenome;

          Pronto… que tal tentar uma condicional:

          echo (isset($_SESSION['nome']) && isset($_SESSION['sobrenome'])) ? "Olá ".$_SESSION['nome']." ".$_SESSION['sobrenome'] : "Olá visitante";

          Isso que fiz acima é a mesma coisa que vc usar if e else, como no exemplo abaixo:

          if (isset($_SESSION['nome']) && isset($_SESSION['sobrenome']))
          {

          echo "Olá ".$_SESSION['nome']." ".$_SESSION['sobrenome'];

          }
          else{

          echo "Olá visitante";

          }

          Bons estudos

          • peço desculpa por estar a ser tao chato mas é que eu estou mesmo a fim de conseguir efectuar este tutorial a 100% e por isso precisso de mais um pouco da sua ajuda. como posso chegar a esse php.ini? :&

          • Se você está tentando executar o conteúdo deste tutorial, localmente com o PHP instalado no teu computador, você precisa ter o PHP instalado e um servidor web também.
            Agora se você está tentando efetuar este tutorial em algum servidor de hospedagem… aí você não tem acesso ao php.ini
            Enfim… utilize o google e busque por ‘error reporting’ e vai encontrar infindáveis informações a respeito. Se filtrar a busca adicionando ‘NOTICE’ irá mais rápido ao ponto.
            Bons estudos

  76. OK olha eu tenho o easyphp instalado no pc. isso sera por causa disso ou seja quando eu publicar estes erros desaparecem?

    • Não @Jorge… isso não depende de publicação e sim de configuração do PHP, pois se vc publicar em um server que os NOTICES estão habilitados eles irão aparecer igualmente
      Mesmo tendo o easyphp, deve ter algum lugar que vc configure o PHP não tem?
      É neste lugar que vc irá procurar o que eu informei anteriormente.
      Não uso esses pacotes prontos, nunca usei e nem sei como usar, por isso não posso te dizer exatamente onde é no easyphp.
      Se quiser reinstalar teu PHP desde o início da forma mais adequada eu postei alguns tutoriais aqui no site.
      Outra forma de não exibir os NOTICES é mandar diretamente no topo dos teus arquivos um comando que desabilita a exibição dos NOTICES naquele determinado arquivo
      Para tanto, segue a mesma dica do coment anterior, use o google com quelas palavras chaves que indiquei.
      Bons estudos

      • talvez o phpdesigner ou o araneae resolvem este problema é que nao estou a perceber :(

        • Amigo… definitivamente você não tem intimidade com o google hehehe, é uma pena, deveria exercitar, pois ali você tem todas as respostas, inclusive deve ter achado esse meu site por ele, – não?
          Fiz o que você deveria ter feito, busquei no google informações sobre como achar o php.ini no easyphp e encontrei uma resposta simples, talvez ajude você.
          Não sei como é o easyphp, como já disse, mas se todos forem como o do rapaz que passou a dica na internet e que trago aqui,m vai ajuda-lo.
          Clique com o botão direito sobre o ícone do easyphp que fica ao lado do relógio, depois Configurações, PHP…
          Enfim… se com isso você achar um arquivo chamado php.ini, deverá procurar a linha que tem ‘error reporting = alguma coisa’
          substitua, definindo da seguinte forma: error_reporting = E_ALL & ~E_NOTICE
          Isso mostrará todos os erros padrões, menos as Notices
          Bons estudos

          • fiz o que me mandou mas mesmo assim ele mandou isto:
            logo ao abrir ele diz isto

            Notice: Undefined index: usuario in c:\program files (x86)\easyphp1-8\www\sistema de cadastro e login\outros\cadastra.php on line 9

            Notice: Undefined index: info in c:\program files (x86)\easyphp1-8\www\sistema de cadastro e login\outros\cadastra.php on line 10
            ERRO: Você não enviou as seguintes informações requeridas para o cadastro!

            Nome é um campo requerido.
            Sobrenome é um campo requerido.
            Email é um campo requerido.
            Nome de Usuário é um campo requerido.

            Preencha os campos necessários abaixo:

            Formulário de Cadastro
            EU ACHO BASTANTE ESTRANHO NAO ACHA?

          • Os NOTICES é porque vc não fez exatamente como eu disse não.
            O Erro no cadastro é alguma coisa que não está coincidindo na hora do envio e no arquivo que recebe os dados do envio.
            Provavelmente os NAMES dos inputs estão de um jeito e vc está resgatando de outro jeito.
            Verifique com calma

  77. O problema é que eu criei uma tabela com o nome de usuarios mas no php ele busca pela tabela usuario, so alterei o nome da tabela e funcionou beleza o cadastro

    • Isso que vc disse sim eu acho estranho, pois não tem haver com os erros gerados, pois não é feito nenhuma requisição ao banco de dados se aparecer aqueles erros.
      Aqueles erros de ‘nome’, ‘usuário’, etc, só aparecem se isso abaixo não estiver correto:

      $nome = trim($_POST['nome']);
      $sobrenome = trim($_POST['sobrenome']);
      $email = trim($_POST['email']);
      $usuario = trim($_POST['usuario']);
      $info = trim($_POST['info']);

      Por exemplo, se vc tentar pegar assim: $_POST['nome']
      … mas enviou pelo form o campo vazio ou ainda o name=”” do input que deve ser ‘nome’, mas está com outro valor irá gerar os erros que foram gerados e assim segue igual para os outros resgates.
      Aí que pode ter problema e causar o erro que ocorreu.

      Pode ter certeza de que se o cadastro rolou normal agora, é porque vc corrigiu e nem sabe como, pois esse lance que vc falou do nome da tabela no BD ser um e tu consultar outro é um ERRO TAMBÉM, mas não tem haver com o anterior.

      Abraço

  78. Olá, ótimo tutorial!

    Depois de cadastrado e com o login efetuado, o que devo fazer para que o usuário seja redirecionado para uma determinada página ? Como criar essa página para que ela seja restrita somente ao usuário cadastrado ?

  79. Ignore meu comentário acima!

    É so criar uma area_restrita.php com todo o design e colocar os códigos.

    Você poderia colocar um tutorial de como dento dessa area restrita, o usuário poder ter um “mini-perfil”, ou seja que nãoprecisa haver adições de amigos, mas envio de fotos, dados, como se fosse a página do orkut, mas sem amigos, comunidades, aplicativos, promova, enfim, O PERFIL!

    Agradeço desde já!

    • Olá @Lucas, veja bem, quando vc efetua o login vc grava algumas sessions como nome, sobrenome, nivel de usuário e PRINCIPALEMNTE o ID deste usuário que acaba de logar.
      Esse ID é justamente a identificação única deste usuário no banco de dados… toda e qualquer consulta no banco de dados usando a o campo do id na clausula WHERE ira retornar somente dados ligados ao id do usuário consultado.
      Partindo daí… acho que já ta entendendo, mas vamos lá… a partir daí, vc pode nessa área restrita exibir somente dados do cadastro desse usuário ou ainda através de outros forms, incluir mais dados no BD e em outras tabelas, mas sempre relacionando com esse ID gravado na session.
      Pegou isso? se sim… então agora o céu é o limite @Lucas hehehe
      Bons estudos

  80. sera que os dados estarem assim:
    while ($i <= 7){
    $num = rand() % 33;
    $tmp = substr($salt, $num, 1);
    $pass = $pass . $tmp;
    $i++;
    }
    ou assim altera alguma coisa como o php é case sesintive.
    while ($i <= 7){
    $num = rand() % 33;
    $tmp = substr($salt, $num, 1);
    $pass = $pass . $tmp;
    $i++;
    }

    • Juro que não entendi sua dúvida…
      Eu exclui seu outro comentário, pois era só código e igual à estes dois aí em cima.
      Explique melhor sua dúvida.
      Até tenho uma bolinha de cristal aqui e tentando decifrar tua dúvida, imagino que vc queira saber se o user ao digitar sua senha com letras maiúsculas ou minúsculas ele terá acesso igual?
      SIM… a senha ele pode digitar maiúscula ou minúscula e ele entra… mas vc pode mudar isso se tiver conhecimento para tal.
      Abraço

  81. Olá @Roberto Lunelli, primeiramente parabéns pelo tuto, estava a dias procurando um outro script de login até que achei o seu (100% funcional).

    Até implante um layout nele para meu uso aqui veja -> http://i56.tinypic.com/30ddk4n.png

    Gostaria se poderia me ajudar, pois sou leigo em !

    Como de padrão o script aceita conexão simultânea de um mesmo login, gostaria de saber se tem a possibilidade de fazer uma modificação, para quando for fazer o Login verifica-se se o mesmo já encontra-se logado, e consequentemente bloqueia a segunda conexão e exiba uma mensagem de aviso.

    Como posso fazer tal função… É Possível me ajudar.

    Grato Desde já !

    • Olá @Rodrigo, vc pode fazer de diversas formas, vou dar uma luz em 2 delas:
      Pegar o IP do user quando ele efetua o login, ou seja, no arquivo verifica_usuario.php e gravar no bd e se alguém tentar navegar na página com outro IP não deixar, não permitir o login, apenas quando o campo do IP no BD estiver vazio… para isso basta atualizar esse campo quando o user faz logout.
      Outra forma é um campo no BD como um interruptor de luz com valores que podem ser 0 ou 1… esse campo pode ser do tipo ENUM
      Quando o user loga o valor atualiza para 1, quando faz logout atualiza para 0, sendo assim se alguém tentar logar e o valor tiver em 1 nesse campo o login é negado.
      Num dos comentarios aqui neste tuto eu ensinei isso se não me engano, mas fica aí denovo hehehe
      Para pegar o IP do user eu mandei um tuto aqui no Sistema Básico, da uma olhada no Tutorial -> Como pegar o endereço IP real com PHP?
      Bons estudos

  82. Olá Roberto,
    Primeiro quero agradecer por dividir o conhecimento com todos.

    Gostaria de saber se pode me ajudar, já li uma dúvida igual a minha nos posts anteriores, mas não consegui resolve-la;

    Depois que faço o cadastro de teste, não recebo nenhum e-mail de ativação, já tentei com o da Locaweb e com o do gmail.

    Tentei também ativar direto no banco de dados e copiar a senha, mas não consegui me logar.

    O que posso estar fazendo de errado?

    http://setorsete.com/extranet/formulario_cadastro.php

    Obrigado mais uma vez.

    • Olá… tente enviando email de forma autenticada.
      Já tentou usar o PHPMailer?
      Tem um tutorial sobre envio de email com o PHPMailer aqui no Sistema Básico
      Da uma olhada, adapte, j´pa que o tuto é para envio local… e voc~e deve estar usando algum serviço de hospedagem.
      Se for a Locaweb deve ser por isso… a utilização da função mail() deve estar prejudicada nesse server… utilize a classe phpMailer que acredito que não terá problemas.
      Verifique também se a utilização de SESSIONS está ok no teu servidor, entre em contato com o suporte para que eles te informem…
      Se nada der certo e quiser servidor de hospedagem de gente grande, entre em contato via formulário de contato aqui do site.
      Bons estudos

      • Olá Roberto Lunelli, eu até entendi a logica, porém to perdidaço como fazer.

        Eu gostaria de fazer neste Esquema ((Outra forma é um campo no BD como um interruptor de luz com valores que podem ser 0 ou 1… esse campo pode ser do tipo ENUM))

        Poderia explicar como posso fazer, ou se vc ja tem algum esquema pronto pois n entendo nada de PHP e n sei como posso fazer isso

        VLW….

      • Cara, muito obrigado de novo, principalmente pela rapidez na resposta.

        Vou dar uma olhada, mas estou meio defasado na área de php, fiquei um tempo só no flash e agora vi que devia ter continuado com programação, então se puder dar uma dica um pouco mais “mastigada” eu agradeço, mas como li que está na correria se não puder tudo bem. Agradeço da mesma forma. Quanto a hospedagem, me interesso sim mas não pra agora, estou com outros dois projetos na Locaweb e não posso me desvincular por enquanto, mas se puder me passar mais informações seria bom.

        Abraço!

        • No arquivo cadastra.php se for analisar o raciocínio e sequência lógica do script, vai perceber que é ele que envia o email e com um pouco de atenção vai perceber também exatamente onde é efetuado o envio.
          Justamente na função mail()… seguindo o tutorial que indiquei ( PHPMAILER ), vc pode substituir o método, ao invés de usar a função mail(), utilizar a classe phpmailer para o envio.
          Se eu mastigar mais que isso, só fazendo pra vc, pois não tenho mais o que dizer a respeito… já estaria entrando numa área de ensino, propriamente, do PHP e se assim for, a conversa é outra e por email, se tiver interesse.
          Grande abraço

  83. Primeiramente muito bom o seu trabalho e todos nós estudantes ficamos muito grato, bom fiz o tutorial como foi passado cadastro, recebo o e-mail, ativo, e quando vou entrar com a senha e login não acontece nada, mas quando coloco errado informa que eu digitei errado, e quando vou redefinir enviando um e-mail para mim não envia e também não acontece nada, o que pode ser ?

    • Vc fez alguma alteração nos valores dos tipos de campos no banco de dados?
      Vc fez alguma alteração em qualquer parte do arquivo?
      Talvez teu problema possa estar ligado ao registro das sessions tbm… testou localmente ou em server remoto?
      De mais detalhes para qu e eu possa tentar ajudar.
      Abraços

      • banco de dados é copia, revisei todo arquivo sem alterações, pois estou aprendendo e não me atrevi alterar, estou usando em um servidor remoto, no qual tem uma loja virtual instalada. Não testei local, pois tenho que configurar o xamp para enviar e-mail vi que aqui no seu blogue você ensina; é melhor testar na minha maquina primeiro?

        • Quando vc digita a senha corretamente, vc diz não acontecer nada… mas quando acontece esse “não acontecer nada” que endereço está exatamente na sua barra do navegador?
          verifica_usuario.php ? Se for, é porque ele não está redirecionando… verifique isso

  84. Estamos progredindo foi isso… No formulario_senha_perdida.html coloquei : action=”gerar_nova_senha.php” e no verifica_usuario.php coloquei: header(“Location: http://www.eletromel.com.br/php/area_restrita.php“);
    Resolvido o problema, agora esta acontecendo a mesma coisa quando clico em sim: Você realmente deseja sair da área restrita?
    Sim | Não

    ou seja fica parado na mesma tela só muda a url: http://www.eletromel.com.br/php/logout.php?logmeout

    observei no codigo que deveria aparecer uma mensagem depois disso:

    <?php

    session_start();

    if (!isset($_SESSION['logmeout'])){

    echo "Você realmente deseja sair da área restrita? “;
    echo “Sim | “;
    echo “Não“;

    }else{

    session_destroy();

    if (!session_is_registered(‘nome’)) {

    echo “Você não está mais logado em nosso site!“;
    echo ” Login: ,”;

    include “formulario_login.html”;

    }
    }

    ?>

    E a outra questão é porque não esta aparecendo acentuação grafica?

    Bem vindo leandro Freitas!
    Você está acessando área restrita para usuários cadastrados!

    Seu nível de usuário é 0.
    Com esse nível, você tem permisão de acesso às seguintes áreas:

    - Forum
    Abrir tópicos, postar em tópicos de terceiros.

    • @Leandro, você está fazendo modificações no código, por isso as coisas não dão certo.
      não é if (!isset($_SESSION['logmeout'])){
      Da uma olhada no tutorial e perceberá que é if (!isset($_REQUEST['logmeout'])){
      Com SESSION nunca vai dar certo mesmo, pois não foi gravada a session anteriormente em relação a logmeout.
      Fica esperto!
      Quanto à acentuação tem a ver com o charset dos teus arquivos… deve estar usando utf-8 altere para charset=iso-8859-1 na metatag: meta http-equiv="Content-Type"...
      Bons estudos

  85. Realmente, estava tão ansioso que não percebi, já esta funcionando 100%. Muito obrigado pela atenção e mais uma vez meus parabens pela iniciativa vou fazer os outros tutorias propostos pelo blog.

  86. Boa Noite!
    Parabéns! O simples conteúdo que disponibiliza aqui que é de grande valor para muitos, como eu, que estão começando a aprender agora.
    Roberto tive a oportunidade de testar este tutorial em dois servidores web (hotel e Loca), e alguma coisa errada eu fiz :( , nos dois servidores obtive o mesmo problema, apos editar o config.php e configurar o banco MySQL (sem fazer qualquer outra alteração nos outros arquivos).
    Sempre que preencho o ‘formulario_cadastro.php’ ao clicar em enviar as informações o site começa a carregar o arquivo cadastra.php, mas fica tudo em branco. Já fiz todo tipo de teste, desde editar o config.php, o cadastra.php, trocar a pasta onde estão locados os arquivo, colocar senha errada para ver os erros e criar um novo banco de dados, mas o mais longe que cheguei foi a tela em branco.

    Acredito que a unica coisa que não tenha feito corretamente foi conseguir importar o arquivo usuarios.sql, consigo criar o banco da forma que esta no site, um pouco diferente do arquivo que fiz o download que apresenta o erro:

    #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘{\rtf1\ansi\ansicpg1252\deff0\deflang1046{\fonttbl{\f0\fswiss\fcharset0 Arial’ at line 1

    Meu Banco esta assim.

    CREATE TABLE usuarios(
    usuario_id int(5) NOT NULL auto_increment,
    nome varchar(50) NOT NULL default ”,
    sobrenome varchar(50) NOT NULL default ”,
    email varchar(100) NOT NULL default ”,
    usuario varchar(32) NOT NULL default ”,
    senha varchar(32) NOT NULL default ”,
    info text NOT NULL,
    nivel_usuario enum(’0′,’1′,’2′) NOT NULL default ’0′,
    data_cadastro datetime NOT NULL default ’0000-00-00 00:00:00′,
    data_ultimo_login datetime NOT NULL default ’0000-00-00 00:00:00′,
    ativado enum(’0′,’1′) NOT NULL default ’0′,
    PRIMARY KEY (usuario_id)
    ) ENGINE = MYISAM CHARACTER SET latin1 COLLATE latin1_general_ci COMMENT = ”;

    Se puder dar uma ajuda ai, Agradeço desde Já!
    Muito Obrigado!
    Qualquer coisa estamos ai!! Vlw!

    • Olá Renan, primeiramente queria dizer que entendo que são 273 comentários referente à este tutorial, mas tenho certeza que já respondi a questão igual a sua nesse mar de coments acima do seu.
      Justamente em relação a Locaweb… não sei porque eles barram a questão, talvez porque hoje em dia cada vezes mais os servers de hospedagem exigem cada vez o envio de email autenticado e por isso indico na maioria das repostas à utilizarem uma alternativa, inclusive melhor, que seria a utilização da classe PHPMailer e que já até postei um tutorial sobre. Outra possibilidade que já ocorreu também era de não estar mantendo as sessions gravadas e por isso não redirecionar para a devida página após o login.
      Quanto ao fato de ter testado localmente e também não ter dado certo, primeiramente precisaria ter um server SMTP instalado para dar certo localmente, ou utilizar a classe PHPMailer para envio autenticado através de alternativas como a do Gmail.
      Além de ter a paciência de percorrer entre os coments acima do seu, vou te pedir para dar uma olhada com atenção nesse tutorial sobre PHPMailer e envio autenticado de emails que postei no sistema Básico.
      Quando ao SQL vc fez correto e o arquivo exportado deve ter dado erro por estar num formato incompatível com sql … regravarei esse arquivo para que a importação passe a funcionar a partir de hoje, obrigado por relatar.
      Da uma atenção à estes pontos que citei e depois qualquer coisa da um retorno aqui novamente.
      Abraço

  87. Ok eu tenho os códigos mais não sei com montar o sistema…
    por exemplo o codigo para logout eu apenas coloco ele na pasta raiz do site? e os outros códigos?
    rsrsrs
    abraço!

    • Caio, basta seguir exatamente como falei no tutorial, pois não basta ter os códigos…
      Não é só script para fazer download e tentar integrar ao seu site e sim um tutorial ensinando como fazer algo do genêro.
      Se a ideia é apenas baixar e instalar e ver como é… sinto muito… não poderei ajudar, pois essa não era a ideia quando postei ele.
      Bons esudos.

  88. Boa tarde, a minha página ativar.php, nao funciona :c
    Recebo o e-mail, e quando faço clique no link ele aparece que a pagina nao existe, e ela esta no servidor :s
    Preciso de ajuda rapidamente …

    • Bom… primeiramente, para dar Boa tarde, provavelmente deve estar em Portugal ou qualquer lugar cujo o fuso horário faz como que agora seja o período da tarde aí.
      Em segundo, acredito que não tenha a ver com o local de onde vens, pois conheço pessoas de Portugal e de outros lugares do mundo e sei que de forma geral o povo sabe ser educado.
      … aqui no Brasil entendemos a expressão “Preciso de ajuda rapidamente…” como se fosse uma ordem e não aceitamos muito bem.
      Saber se expressar na internet é primordial, pois como não estamos frente a frente com o próximo não sabemos em que tom está sendo dirigido a palavra.
      Vou fazer ainda um tutorial básico e postar aqui de como se portar em solicitações de suporte, comentários, emails e fóruns.
      Palavras como por favor e muito obrigado são mágicas para se conseguir algo por aqui…de outra forma é ignorado… eu ia ignorar, ma como dormi com os pés destapados resolvi ajudar ‘rapidamente’… mais pensando em um próximo que possa ter a mesma dúvida.
      Se está dando como página não encontrada, é porque o arquivo não está no mesmo local que o link do email aponta, ou o nome é outro.
      …. já parou pra analisar isso?
      Bons estudos!

      • Boa noite, sim, sou portugues.
        E desculpe o uso da expressão, “Preciso de ajuda rapidamente…”, não sabia que ai era reconhecida como uma ordem.
        E obrigado, pela resposta a minha dúvida, olhei mais atentamente, e agora já funciona perfeitamente.
        Muito obrigado (:

  89. Primeiramente, estou impressionado com a dedicação empregada em um trabalho como este que é estremamente desgastante e, por isso, te dou parabéns. Um trabalho assim é dificil de se achar.

    Por isso, fiz questão de contribuir com uma pequena doação pelo paypal para que possa lhe ser util de alguma forma e, se possivel, que voçê possa continuar a nos prestigiar com seus conhecimentos.

    Sou técnico por amor e gosto muito do que faço. Não cheguei a fazer nenhum curso que me desse base em banco de dados e programação por não achar que fosse neçessario em minha vida profissional.

    Vou aproveitar seu tutorial e implanta-lo em um site pessoal de musicas que estou desenvolvendo juntamente com um amigo (por hobby, colecionamos músicas antigas) e gostaria de sua atenção, pois não sei muito bem como fazer para que os visitantes do site não acessem as paginas antes de se cadastrarem e logarem no mesmo.

    Eu ja criei as paginas com os códigos e os formulários de login, senha….

    Adicionar os campos de cadastro, login, logout na pagina principal não é tão complicado assim, mas eu não sei como fazer para deixar as paginas bloqueadas até o acesso via cadastramento/login. Você poderia me orientar?

    • Olá Rodrigo, antes de tudo obrigado.
      Rodrigo, no tutorial usei o arquivo ara_restrita.php para exemplificar o que seria uma página restrita pelo sistema.
      Notará que no topo deste arquivo chamo uma função através da linha session_checker();

      Isso é uma chamada para a função que está no arquivo functions.php que fará a verificação se as sessions necessárias para dar acesso estão registradas e abertas.
      Estas sessions só estão registradas e abertas quando há um login c om sucesso, de outra forma a função redireciona para o formulário de login.

      A partir daí a lógica é que no arquivo que vc colocar a chamada para esas função intende-se que o usuário será travado ehhehe se não tiver feito o login.
      Coloque a chamada na index do diretório principal e tudo se dará como mágica.
      Mas veja bem… na página de cadastro não pode haver o session_checker() se não o user não conseguirá acessa-la para efetuar cadastro ;)

      Lembrando que a função session_start() deve estar no topo e session checker() logo abaixo da session_start()
      Qualquer dúvida vai falando aí que vou ajudando.
      Bons estudos

  90. Roberto, estou muito feliz e próximo de conseguir colocar nosso site no ar, restando apenas a contratação de um serviço de hospedagem para ele.

    Farei questão de citar você e seu site como facilitadores deste processo.

    Assim que estiver pronto, te convidarei para se cadastrar e visualizar as nossas exposições.

    Abraço e obrigado.

    • Olá @Rodrigo, fico feliz em saber que ajudei.
      Rodrigo, quanto a hospedagem eu forneço esse serviço com qualidade de estrutura e qualidade no suporte direto comigo sempre.
      O espaço que disponibilizo é somente para clientes de desenvolvimento, mas abro exceções para o pessoal que se beneficia com meus tutoriais.
      [JABA ON] Te mandei e-mail com mais referências sobre a hospedagem.[JABA OFF]

  91. Ola Roberto. Estou com dúvida no formulário de cadastro.

    Em seu site você o descreve como formulário, campos de formulário, cabeçalho… que nos leva a entender que ele é html (me corrija se estiver errado), mas aqui ele está recebendo a terminação de php. Veja: formulario_cadastro.php. Tem que ser assim mesmo?

    Outra coisa, quando eu o executo aqui no servidor que montei em casa, ele só executa corretamente quando o abro com algum browser e, o que me leva a crer que realmente sua terminação de arquivo está trocada e, nos campos value, aparecem os comandos php ao invés de campos vazios. Ta certo isso?

    • Sim @Rodirgo, está tudo certo, a terminação é PHP sim, mas poderia ser HTML se quiser, porém os comandos que vc observou nos campos VALUE não funcionariam.

      Para que entenda o que são aqueles comandos:
      Se vc enviar o form onde é efetuado o POST, e ocorrer algum erro no preenchimento, o formulário é apresentado novamente ao usuário, mas com os campos todos preenchidos para ele verificar o que digitou errado.
      Se não tiver aqueles comandos, ao exibir o form novamente eles viriam todos vazios, o que seria muito chato, principalmente quando o form é grande com muitos campos, – concorda?

      Quanto a exibição dos arquivos PHP no navegador… sim, eles só serão vistos no navegador e online ou se tiveres um servidor web instalado no teu computador.
      Abraço

  92. Roberto, estou começando a mecher com PHP agora seu tutortial me ajudou muito, mas estou com um problema quando abro o formulario de cadastro todos os campos estão preenchido com: “Notice: Undefined index: nome in C:\Program Files\EasyPHP-5.3.6.0\www\formulario_cadastro.php on line 18

    Se possivel de uma olhada na imagem: http://imageshack.us/photo/my-images/15/errojr.jpg/

    Desde ja Abradeço,

    Abraço

    • Olá @Eduardo, faça assim, substitua todos os VALUE dos inputs do formulário por algo como isso:

      value = "< ?php echo (isset($_POST['nome'] ? $nome : NULL; ?>"

      Lembrando que a variável e o $_POST é referente ao name do campo input, ou seja, não é $_POST['nome'] e $nome para todos heheh
      Mas isso tu pegou neh?
      Tente aí e depois diga
      Bons estudos

      Roberto

      • Valeu Roberto agora esta tudo Ok.

        Só estão aparecendo algumas mensagens ao fazer as seguintes funções

        Ao Cadastrar
        Notice: Undefined variable: pass in C:\…\www\cadastra.php on line 118
        Linha 118-> $pass = $pass . $tmp;

        Ao Fazer Logout
        Deprecated: Function session_is_registered() is deprecated in C:\…\www\logout.php on line 15.
        Linha 15-> if(!session_is_registered(‘nome’)){

        Ao Redefinir Senha
        Notice: Undefined variable: pass in C:\…\www\gerar_nova_senha.php on line 60
        Linha 60-> $pass = $pass . $tmp;

        Sendo que funciona tudo perfeitamente: cadastra, faz logout, e redefine a senha normalmente.
        Só gostaria de saber se essas mensagens de “erro” tem ou vao gerar algum problema e se tem como tirar elas.

        • Na verdade não são alertas de erros e sim notificações.
          Se vc está testando localmente vc mantém essas mensagens ativas para saber o que está acontecendo em teus scripts, mas se está desenvolvendo para uma saída final de algum site, seria interessante alterar a diretiva que exibe erros.
          Outra coisa, alguns Notices .. principalmente mensagens sobre funções ou formas Deprecated, leve em consideração que esse script é de 2007.
          Prometo desenvolver uma versão mais atual… um dia.
          Bons estudos

  93. Gostaria de uma ajuda, estou criando um site, e vou usar esse sistema seu, porém, mas gostaria de uma ajuda..
    Na parte “area_restrita.php”, apareçe Bem vindo “nome da pessoa” que está cadastrado no banco de dados, mas eu também gostaria que aparesse outra informação da tabela, aquela chamada “info”, gostaria que apareçesse quando a pessoa logasse abaixo do “bem vindo”, já tentei de tudo, já coloquei o “info” na tabela igual as outras coisas (var char, etc), ta igual os outros dados, porém não sei como fazer, já tentei substituir o sobrenome por “Info” igual abaixo, mas nao da.

    echo “Gostaria que aparecesse a info aqui “. $_SESSION['info'].”.

    Ficarei grato se puder ajudar.

    • Olá @Alaor, o que está fazendo errado é não ter lido com atenção o tutorial desde o início, é a pressa de ver as coisas funcionando.. eu entendo.
      Vou explicar… Quando o usuário faz login, é feito uma consulta no banco de dados que retorna alguns valores, como nome, sobrenome e mais alguns… esses valores no mesmo instante são gravados em session (é mais ou menos colmo gravar algo na área de transferência) que ai ser chamado pelo nome que foi dado quando gravado ele aparece) Recomendo a leitura mais aprofundada sobre sessions para maior compreensão.
      Continuando… no arquivo exemplo de area restrita eu chamei pela sessiona alguns dos valores, pois estes estavam gravados no login e seriam exibidos perfeitamente.
      Para exibir outros e qualquer valores ligados ao usuário logado, deve-se fazer uma nova consulta no banco de dados WHERE o id do usuáriol é igual ao ID gravado na session referente ao user logado.
      Você monta essa query de selecão (SELECT) no próprio arquivo area_restrita.php por exemplo e resultará os valores dos campos que deseja, no seu caso o campo ‘info’ e outros que definir na query.
      Bons estudos.

  94. Certo, consegui isso que eu queria, agora queria saber outra coisa, eu estou usando o codigo

    Em todas as paginas que eu quero proteger, mas eu não queria protejer a pagina inteira, eu queria apenas proteger um link que esteja nessa pagina, por exemplo
    Só pode clicar aqui se estiver logado, ou entao pode até clicar, mas da erro que precisa logar para abrir.

    Gostaria de saber se é possivel isso, proteger apenas PARTE de uma pagina, nao ela inteira.

  95. cara gostaria de pedir se não tem um jeito nesse cadastro para que na hora de recuperar a senha o usuario pudesse definir a senha que ele quiser?

    • Olá @nilo. Sim, há como, mas é preciso alterar alguns arquivos.. todos que tiverem relação com a criação da senha automática e redefinição da senha automática. Arquivos de cadastro, verificação de usuário e senha e mais alguns.
      As alterações, basicamente surtiriam efeito no banco de dados, e na forma que é feito a comparação dos dados. Quanto ao envio de uma própria senha… esse seria o menor dos teus problemas. O segredo está todo no recebimento dos dados e como eles são tratados.

      Já ajudei um pessoal que fez doação para o site em relação à isso e à muitas outras opções.
      Estou pensando em fazer uma área vip no site para todos que fizeram ou fizerem doação e dispor nessa seção opções mais avançadas dos mesmo tutoriais que já disponibilizei como básico no sistema básico. O que acha da ideia?
      Bons estudos!

  96. Gostaria de uma ajuda, se possivel, tem como eu fazer um link com 2 paginas? por exemplo, quando eu clicar no link ele verifica a sessão, se estiver logado, o link abre uma pagina, se não estiver logado abre outra pagina diferente? tem como? e se possivel me envie o codigo.

  97. Estou recebendo o seguinte erro: “#1046 – No database selected” O que poderia ser? (Estou rodando o seguinte cód: CREATE TABLE usuarios(
    usuario_id int(5) NOT NULL auto_increment,
    nome varchar(50) NOT NULL default ”,
    sobrenome varchar(50) NOT NULL default ”,
    email varchar(100) NOT NULL default ”,
    usuario varchar(32) NOT NULL default ”,
    senha varchar(32) NOT NULL default ”,
    info text NOT NULL,
    nivel_usuario enum(’0′,’1′,’2′) NOT NULL default ’0′,
    data_cadastro datetime NOT NULL default ’0000-00-00 00:00:00′,
    data_ultimo_login datetime NOT NULL default ’0000-00-00 00:00:00′,
    ativado enum(’0′,’1′) NOT NULL default ’0′,
    PRIMARY KEY (usuario_id)
    ) ENGINE = MYISAM CHARACTER SET latin1 COLLATE latin1_general_ci COMMENT = ”;

  98. Ola, roberto vou explicar minha situacao, eu consigo me cadastrar no meu site, a senha e enviada para o meu email eu confirmo a conta e eu consigo logar e ir para area restrita e sair, ate ai tudo certo, a unica coisa que esta me pertubando a a redefinicao de senha ou seja quando eu coloco meu email para recuperar minha senha e clico em gerar senha da tipo uma atualizada na pagina e nao acontece nada, nao da mensagem de erro nem nada, e nem a mensagem vai para o meu email.
    segue abaixo meu arquivo gerar_senha.php:

    <?php

    include "config.php";

    $recupera = $_POST['recupera'];
    $email = $_POST['email'];

    switch ($recupera){

    case "recupera" :

    recupera_senha($email);
    break;

    default :

    include "formulario_senha_perdida.html";
    break;

    }

    function recupera_senha($email){

    if (!isset($email)){

    echo "Você esqueceu de preencher seu email.
    Use o mesmo email que utilizou em seu cadastro.“;

    include “formulario_senha_perdida.html”;

    exit();

    } // Checando se o email informado está cadastrado

    $sql_check = mysql_query(“SELECT * FROM usuarios WHERE email=’{$email}’”);
    $sql_check_num = mysql_num_rows($sql_check);

    if ($sql_check_num == 0){

    echo “Este email não está cadastrado em nosso banco de dados.”;

    include “formulario_senha_perdida.html”;

    exit();

    }

    // Se tudo OK vamos gerar uma nova senha e enviar para o email do usuário!

    function makeRandomPassword(){

    $salt = “abchefghjkmnpqrstuvwxyz0123456789″;
    srand((double)microtime()*1000000);
    $i = 0;

    while ($i <= 7){

    $num = rand() % 33;
    $tmp = substr($salt, $num, 1);
    $pass = $pass . $tmp;
    $i++;

    }

    return $pass;

    }

    $senha_randomica = makeRandomPassword();
    $senha = md5($senha_randomica);
    $sql = mysql_query(

    "UPDATE usuarios SET senha='{$senha}'
    WHERE email ='{$email}'"

    );

    $headers = "MIME-Version: 1.0\n";
    $headers .= "Content-type: text/html; charset=iso-8859-1\n";
    $headers .= "From: Great shot – Webmaster”;

    $subject = “Sua nova senha em http://greathost.heliohost.org“;

    $message = “Olá, redefinimos sua senha.
    Nova Senha: {$senha_randomica}

    http://greathost.heliohost.org/

    Obrigado!
    Webmaster

    Esta é uma mensagem automática, por favor não responda!”;

    mail($email, $subject, $message, $headers);

    echo “Sua nova senha foi gerada com sucesso e enviada para o seu email!
    Por favor verifique seu email!”;

    include “index.php”;

    }

    ?>

    voce deve ter percebido que em include “index.php” era pra tar o formulario de login correto, mas como eu criei um cantinho de logar na pagina inicial ai tudo bem . o meu unico poblema e a redefinicao de senha.

  99. Iae, voltei aqui pra falar que resolvi o meu poblema ta tudo pegando perfeitamente. mas quero modificar algumas coisas se voce puder me ajudar. add msn ae =)

    • Olá @Daniel, desculpe a demora, mas eu não estava mais recebendo notificações de coments no meu email.
      Enfim… seu problema anterior se tratava simplesmente disso:

      Você usou isso:
      $recupera = $_POST['recupera'];
      $email = $_POST['email'];


      E devia ter usado como no tutorial

      $recupera = $_REQUEST['recupera'];
      $email = $_REQUEST['email'];

      E sim…. mediante a uma colaboração com o site, doação, conforme todos que fizerem… receberá um suporte diferenciado e posso auxiliar em modificações básicas ou até mais complexas… isso depende da colaboração.

      Abraço

  100. Bom amigo, eu fiz deu certo, mas tinha que configurar umas coisas, eu fui configurei e quando fui tentar novamente eu não estava recebendo o e-mail para confirmar a conta, para verificar se eu tinha feito alguma coisa de errada, eu coloquei todo o código sem nenhum alteração e mesmo assim não recebo o e-mail para confirmar a conta, eu estou usando o phpmyadmin, com conta free, poderia me ajudar por favor?

    • amigo fiz mais alguns testes e eu só recebo o e-mail de confirmação depois da terceira conta criada, então eu me cadastro, só vou receber o e-mail quando mais 2 pessoas se cadastrarem, pq isso?

      • Olá @Bruno, na verdade não sei porque está ocorrendo isso, mas posso imaginar algumas hipóteses como lentidão no servidor para enviar a mensagem.
        Assim vc não espera e já cria outra, e assim por diante, e isso lhe da a impressão que só foi enviado depois de criar outras contas, mas não tem sentido isso.
        Faça o teste.
        Crie um cadastro e aguarde, mesmo que minutos, pois essa possibilidade não é vaga, visto que o server que está usando é gratuito.
        Abraço

  101. Olá Roberto, sou novato aqui na comunidade, estou tendo um problema com as headers no script de verificação, verifica_usuario.php, até estou te enviando as msgs dos erros produzidos, que mesmo que eu tenha colocado esta função ob_start(), continua retornando esse erro: veja só:
    Warning: session_start(): Cannot send session cookie – headers already sent by (output started at /home/sspmcaceres/www/verifica_usuario.php:1) in /home/sspmcaceres/www/verifica_usuario.php on line 3, mas, o sistema está cadastrando normalmente, só que qdo loga depois de ter o cadastro inserido, na validação do acesso do usuario, ele retorna esse erro nas linhas onde a chamada de iniciar a sessão…

    Gostaria muito de que vc me ajudasse a resolver essa questao, pra facilitar, envio o script abaixo:

    “verifica_usuario.php”

    <?php
    ob_start();
    session_start(); // Inicia a session

    include "cnf.php";

    $usuario = $_POST['usuario'];
    $senha = $_POST['senha'];

    if ((!$usuario) || (!$senha)){

    echo "Por favor, todos campos devem ser preenchidos! “;

    include “formulario_login.html”;

    }else{

    $senha = md5($senha);

    $sql = mysql_query(

    “SELECT * FROM usuarios
    WHERE usuario=’{$usuario}’
    AND senha=’{$senha}’
    AND ativado=’1′”

    );

    $login_check = mysql_num_rows($sql);

    if ($login_check > 0){

    while ($row = mysql_fetch_array($sql)){

    foreach ($row AS $key => $val){

    $$key = stripslashes( $val );

    }

    $_SESSION['usuario_id'] = $usuario_id;
    $_SESSION['nome'] = $nome;
    $_SESSION['sobrenome'] = $sobrenome;
    $_SESSION['email'] = $email;
    $_SESSION['nivel_usuario'] = $nivel_usuario;

    mysql_query(

    “UPDATE usuarios SET data_ultimo_login = now()
    WHERE usuario_id =’{$usuario_id}’”

    );

    header(“Location: area_restrita.php”);

    }

    }else{

    echo “Você não pode logar-se! Este usuário e/ou senha não são válidos!
    Por favor tente novamente!”;

    include “formulario_login.html”;

    }

    }

    ?>

  102. Ah, desde já, agradeço muitissimo e que Deus lhe pague…

  103. Boa madruga, brother Roberto,

    Bom, parte do problema resolvi, nao usando as funções chamada ao servidor o original do arquivo, mudei ele pelas que já uso, e como já tenho um arquivo, config.php no servidor, pra nao substitui-lo, preferi nomea-lo como cnf.php, quanto ao “verifica_usuário.php”, baixei o original em cima dele e mudei, colocando as chamadas das sessoes, session_start() depois de ob_start(), e lá no final coloquei ob_end_flush(), so que ainda continua exibindo erro no arquivo area_restrita.php, vejam abaixo, como o erro está sendo exibido em tempo de execução: Warning: session_start(): Cannot send session cache limiter – headers already sent (output started at /home/sspmcaceres/www/area_restrita.php:1) in /home/sspmcaceres/www/area_restrita.php on line 3 Bem vindo Milton Costa Ribeiro!
    Você está acessando área restrita para usuários cadastrados!

    Seu nível de usuário é 1.
    Com esse nível, você tem permisão de acesso às seguintes áreas:

    - Forum
    Administração – Acesso total

    Sair;

    e agora o script modificado, como dito:

    <?php
    ob_start();
    session_start(); // Inicia a session

    include "functions.php"; // arquivo de funções.
    session_checker(); // chama a função que verifica se a session iniciada da acesso à página.

    echo "Bem vindo “. $_SESSION['nome'] .” “. $_SESSION['sobrenome'] .”!
    Você está acessando área restrita para usuários cadastrados!
    “;

    echo “Seu nível de usuário é “. $_SESSION['nivel_usuario'].”.
    Com esse nível, você tem permisão de acesso às
    seguintes áreas: “;

    if ($_SESSION['nivel_usuario'] == 0){

    echo “- ForumAbrir tópicos, postar em tópicos
    de terceiros.”;

    }

    if ($_SESSION['nivel_usuario'] == 1){

    echo “- ForumAdministração -
    Acesso total “;

    }

    /* Não colocarei representações para outros níveis de acesso, mas fica entendido que o
    limite de níveis de acesso quem define é você*/

    echo “Sair“;
    ob_end_flush();
    ?>

  104. Ola, amigo,
    eu de novo, mas, dessa vez pra te agradecer, olha, eu refiz todo o caminho de volta, reescrevi como estava os exemplos line by line, e tornei upar para o servidor, e desta vez funcionou, ate sem a necessidade de ob_start() e ob_end_flush(). Segui as explains que vc passou aos colegas usuarios, confesso que estou retornando depois de tanto tempo parado sem escrever uma linha sequer de nenhum codigo (linguagem,
    quando comecei, comecei em ASP, e no meio do caminho resolvi migrar para o PHP, mas sem a disponibilidade de equipamento (PC proprio), diferente de agora, que disponho…
    Fiquei tao feliz, olha só ela em execução:
    “(Mensagem exemplo)

    Bem vindo Milton Costa Ribeiro!
    Voc� está acessando área restrita para usuários cadastrados!

    Seu nível de usuário é 1.
    Com esse nível, você tem permisão de acesso à algumas áreas exclusivas do site.

    Sair”…

    Por isso, rogo a Deus, Roberto pra que ele te abençoe por tua inteligencia, por poder compartilhar com as pessoas interessadas em aprender, e outras a construir um caminho, embora que entre pedras, mas, um caminho…

    Seu amigo… continue assim…

    • Olá @Milton, primeiramente queria pedir desculpas pela demora no suporte, mas não estava recebendo as notificações de coments em meu email, e como estou sempre em correria não estava vindo aqui à alguns dias.
      Comecei a responder os coments hoje e respondi alguns seus mais abaixo e não tinha visto esse.
      Fico muito feliz que tenha conseguido fazer funcionar e te agradeço imensamente pelas palavras.
      A utilização do ob_start() e ob_end_flush() na verdade é uma gambiarra para resolver esses problemas, mas o interessante é realmente fazer funcionar sem.
      O que causa muitos desses erros é o copiar e colar, onde o ideal é mesmo redigitar tudo.
      Enfim… grande abraço

      • Olá, acabo de ler as respostas,

        Mas, so mais uma coisa, em sua homenagem, colega, em que esppaço uso o header() pra redirecionar para pagina de cadastro de noticias?
        no script “area_restrita.php”, e como faço pra que o usuário logado apareça seu nome na página permitida?

        • Não entendi bem a questão em relação ao header(), no exemplo eu usei para redirecionar para o arquivo area_estrita.php, mas vc pode redirecionar para o arquivo que desejar.
          Quanto a questão de exibir o nome, é simples, se o usuário estiver logado, basta imprimir a session referente ao nome e sobrenome que foram gravadas na hora do login

          echo "Olá ".$_SESSION['nome']." ".$_SESSION['sobrenome']."!";

  105. Belo script, e funciona mas, nao entendi a utilização do “trim” na variável de recebimento dos dados do cadastro.

    E seria importante se ao invés de mostrar o erro na página que está sendo enviado os dados, fosse criado um laço com os erros e mostrado no próprio formulário, evitando o uso do include”formulario_cadastro.php”

    poderia ser usado a função javascript dentro do php também ex.: echo “alert(‘nome é requerido’) location.href=’javascript:history.back()’ ISSO IRIA EVITAR DE O USUÁRIO INSERIR OS DADOS TUDO DENOVO.

    Belo script, mas ainda não entendi o uso do trim para pegar os dados…

    • Olá @Catatau… sim… pode ser feito da forma que falou… pode-se ainda usar jQuery e etc… essas implementações simples são com vocês usuários… o tutorial não tem a intenção de ensinar isso.
      Quanto ao trim() da uma olhada no manual do PHP para maiores explanações e vai entender o porque da utilização do trim().
      Basicamente é para retirar todos os espaços em branco antes e depois da string.
      Bons estudos

  106. Seus tutoriais são ótimos. por esete motivo são muito comentados, porém, seria de excelente idéia que você paginasse os comentários, pois numa conexão lenta, essas páginas demoram eternidades para carregar, com isso tira o usuário do seu site logo na primeira instância.

    Não estou criticando, e sim sugerindo!

  107. Sim, muito obrigado pelas respostas e o incentivo, vc é dez…

  108. Desculpe, Roberto,

    Segue o texto correto:

    Fui usar como sugeriu, assim “”
    sem a gambiarra como vc diz, ele nao exibe o nome do usuário logado, aí coloquei como abaixo, e exibe erro de limitador de cache,
    com o resultado executado:
    Warning: session_start(): Cannot send session cache limiter – headers already sent (output started at /home/sspmcaceres/www/index.php:204) in /home/sspmcaceres/www/index.php on line 226 Olá Milton Costa Ribeiro!
    Exibe o Nome do usuário, mas com erro…
    O que será que pode ter dado errado???
    Obrigado, mano!!!
    Milton…

  109. Sua sugestão: echo “Olá “.$_SESSION['nome'].” “.$_SESSION['sobrenome'].”!”;

  110. Adorei os códigos, fiz os teste e deu tudo certo, porém o usuário não tem a opção de alterar a senha depois do login, teria como criar uma página onde ele pudesse colocar a senha que quizesse.

    • OLá @Leonardo, há como sim, mas é necessário a alteração de mais de um arquivo do tutorial e requer alguma atenção especial.
      Se quiser auxilio nessas modificações, por favor, efetue uma doação para o site.
      Abraços

  111. Olá estou com um pequeno problema, eu cadastrei funciono direitinho so q na hora de loga ele loga mais a pagina fica em branco ao invez de aparece “o painel para dos usuarios”

    obrigado!

    • Olá @Caio, provavelmente o teu server não está guardando as sessions
      Outros usuários passaram por isso … e resolveram com seus servidores de hospedagem.
      Não sei ao certo o local, mas da uma lida nos coments, pacienciosamente.
      Bons estudos.

  112. Olá Roberto.

    Meu problema é o seguinte, fiz as configurações, estou hospedade em um servidor particular, e o sistema está funcionando perfeitamente, porém o e-mail que é enviado para confirmar a ativação da conta, chega em branco.
    Ele vem com o assunto, destinatário, mas sem mensagem, como se não houve nada escrito, verifiquei no banco de dados, e todas as informações colocadas no formulário são inseridas no DB normalmente.

    O que poderia ser?

  113. Roberto, montei todo o sistema e logo de cara tá dando um erro que imagino que é de conexão ao banco de dados (que é meu calcanhar de aquiles em qualquer linguagem). Então vou ter passar por partes pq imagin que esse primeiro erro no arquivo config.php, vai acarretar uma série de outros na execução. Aparentemente tá dando um erro com login e senha do meu banco de dados no mysql. Ocorre que nem sei onde coloca essa senha lá no programa, e se tiver alguma, tá no default, pq sou iniciante mesmo, não coloquei senha nenhuma lá. Veja se me dá uma luz. O erro da vez é:
    Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘usuário de banco de dados’@’localhost’ (using password: YES) in C:\Arquivos de programas\EasyPHP-5.3.8.0\www\config.php on line 7

    • @Neto, obviamente o problema é na autenticação dos dados de conexão.
      Vc substituiu os que estão no tutorial pelos seus dados?
      Se vc está testando no PHP instalado no seu PC provavelmente não precisará senha, bastará user como root e senha em branco
      Bons estudos

  114. Roberto, excepcional.
    Voce ta de parabens cara. seu sistema esta perfeitamente explicado., Quem nao sabe nada de programação, de db, ou de php, consegue fazer isso, numa perfeita ordem.

    continua assim cara.. vai longe
    abraço!
    sistema full

  115. Boa tarde !
    Há semanas venho tentando encontrar algum tutorial tão completo quanto o seu.
    Pois bem, atualizei o arquivo “config.php” tudo certinho, tá funcionando. Utilizo o EasyPhp para testes, que futuramente serão implementados em meu site.
    O meu problema é o seguinte, tá tudo certinho só que na hora que vou no endereço “127.0.0.1/formulario_login.html” (que está somente local, para testes) insiro um nome de usuário e uma senha que foram cadastrados no BD, e apesar disso ele apresenta um erro:

    “Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in C:\Arquivos de programas\EasyPHP-5.3.8.0\www\verifica_usuario.php on line 29″

    Espero que você possa me orientar.
    Mais uma vez agradeço pelo valor que este tutorial agregou a todos os usuários da internet.
    Fico no aguardo,
    abçs.

    • Olá @Henrique nessa linha que vc citou está essa linha de cod:

      $sql = mysql_query(

      "SELECT * FROM usuarios
      WHERE usuario='{$usuario}'
      AND senha='{$senha}'
      AND ativado='1'"

      );

      $login_check = mysql_num_rows($sql);

      Sendo assim reveja se escreveu o que está acima.

      Abraço

  116. Cara Ótimo tutorial, aprendi muito estudando cada arquivo, desde da tabela até as funções php, com sua ajuda e mais de uns outros tutoriais conseguir montar um fã site do jogo habbo com suas funções, mas complementei com algumas coisas como puchar o personagem do jogo para o site.

    Gostaria de tirar uma dúvida, tem como vc me ajudar a criar um formulario de alterar senha assim que fizer o 1º logon no site.

    Vlw..

  117. Boa tarde Roberto.
    Parabéns pelo tutorial. Muito completo e de fácil entendimento.

    Utilizei as informações contidas nesse tutorial e tudo está funcionando perfeitamente.

    Tenho duas dúvidas e gostaria de saber se vc poderia me ajudar.

    1ª – Quando o usuário clica para gerar uma nova senha, seria possível que o nome do usuário cadastrado fosse incluso no e-mail de recuperação de senha?

    2ª – Seria possível, nesse mesmo “Gerar nova senha” que o usuário possa reedefinir sua senha para uma senha normal que ele mesmo escolha (a reedefinição de senha também gera uma senha randomica)?

    Obrigado pela atenção.

    Abraços

    • Olá @Douglas
      – Sim, basta inclui-lo no corpo da mensagem no arquivo ‘gerar_nova_senha.php
      para isso vc pode aproveitar a query $sql_check que faz a verificação se o email informado é válido e retornar o valor do campo ‘usuario‘ da tabela referente à este email informado.
      perceba que a verificação é feita apenas com mysql_num_rows(), sendo assim para retornar vc terá tbm que usar uma função para retornar do mysql o resultado array como o mysql_fetch_array()

      - Sim há como, mas precisa modificações em diversos arquivos para não haver erros e para que eu possa ajudar nisso, apenas mediante uma doação, assim como fiz com muitos usuários que solicitaram modificações.
      Sim, o gerar nova senha tbm é rândomico.

      Qualquer coisa entre em contato

      Bons estudos

  118. Entendi Roberto.

    Funcionou certinho a inclusão do usuário no e-mail. Muito obrigado.

    Gostaria de saber se poderia me esclarecer outras dúvidas:

    1º – O arquivo ‘area_restrita.php’ é acessado apenas com cadastro do usuário. Como poderia ser feita a programacao para conseguir acessar outra página restrita (por ex: dentro de area restrita tem um link para ‘area_restrita1.php’, mas também, apenas mediante senha, a ‘area_restrita1.php’ poderia ser acessada acessada).

    2º – É possivel na hora do login, substituir nome de usuário por e-mail?
    Ex: usuário: email@dominio.com.br
    senha: ********

    Obrigado novamente pela atenção.

    Douglas.

    • @Douglas, vc pode tornar qualquer página restrita, basta seguir o exemplo area_restrita.php, como coloquei no topo, com a chamada para função session_checker()
      a uma lida com atenção no tutorial, vai notar que explico direitinho isso.
      Bons estudos.

  119. Roberto,

    de novo, eu aqui, o problema que acontecendo agora é o mesmo que o Everton ta expondo acima, vc entra com o e-mail, e pede pra gerar nova senha e ele diz que já mandou pro seu endereço mas, vai la e nao tem nada, e nao da erro, da que parece que gerou a senha mas vc nao acha ela em lugar nenhum!!!

  120. Olá Roberto.

    Obrigado por compartilhar esse Tutorial!

    Eu tenho um problema (Olhando pelos comentários vi que muitas pessoas tinham o mesmo Problema) eu segui o tutorial e deu quase tudo certo o único problema é que o E-mail de Confirmação não chega e o Usuário é cadastrado no Banco de Dados.

    Você andou comentando sobre o PHPMailer mas não conseguir usar, Você poderia me ajudar na questão do E-mail que não está chegando?

    Eu utilizo o webcindario.com.

    • Pode ser o teu server, pode estar caindo em spam, por isso que sugiro a todos que usem o phpmailer para enviar autenticadamente
      Postei alguma coisa sobre phpmailer aqui no site… teste separadamente o tutorial de phpmailer e depois tente integrar.
      Através de doação para o site faço pra vc ensinando como se faz.
      Bons estudos

  121. estou com esse erro o que seria isso? o erro é

    Contagem de colunas não confere com a contagem de valores na linha 1

  122. Amigo to com um problema com o teu código, o cadastro está funcionando tranquilo, mais quando o cadastro é efetuado com sucesso a página fica toda em branco, e não volta pra pagina de form, por que ta acontecendo isso o include que chama a página nao foi alterada em nada.

    grato.

  123. Bom dia, eu queria saber se vc pode me ensinar como faço para criar uma intranet, ou um sistema de vendas..

    agradeço desde ja.

  124. Gostaria de saber se tem como colocar um upload de imagens neste sistema e se tiver gostaria de saber como posso fazer isso onde baixo o upload e como fazer que apareçam junto as informações , e o bd deste upload obrigado dez de já

    • @Jonathan, pela forma que colocou sua dúvida, ficou claro que não irá compreender se eu passar poucas palavras e sim precisaria de um tutorial detalhado para que vc pudesse acompanhar.
      Não estou nos melhores períodos do ano em relação a tempo para tal feito.
      Em breve tentarei adicionar um tutorial sobre upload de imagens e assim ficará mais fácil a sua compreensão de como integrar.
      Por hora a única coisa que posso recomendar é o google.
      Bons estudos

  125. Olá, teria como o usuário se cadastrar, e conseguir comentar nos posts das notícias do site com essa conta?

    Estou com o sistema de notícias do CuteNews, teria outro em que isso de comentar com a conta seria possível?

    • @Wallace, vc pode fazer no sistema uma restrição para o user só poder comentar se estiver logado, portanto obviamente cadastrado.
      Basta em uma condicional exibir o form de coment apenas se for identificado a session aberta em referencia ao user logado.
      Não é difícil, basta usar um pouco de lógica.
      Bons estudos

      • É, pensei nisso antes de me responder, colocar o fullpost somente para usuários logados.

        Instalei aqui, fiz layout, ficou legal, mas tenho um problema ao conectar. Aparece isso:

        “Warning: mysql_connect() [function.mysql-connect]: Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)”

        Procurei aí em cima e achei um comentário com o mesmo problema. A solução que você disse era conferir os dados do config.php, mas os meus estão certos e o problema continua:

        Sim, o user e o banco de dados possuem o mesmo nome.

        E então, o que tem errado?

        Se quiser ver, é aqui:

        http://www.royalneo.com/contas/cadastrar.php

        ;)

        • Você incluiu o config.php no arquivo cadastra.php?

          • Obrigado por responder. ;)

            Sim, tem uma parte do código do cadastra.php que é assim:

            include “config.php”;
            include “functions.php”;

            É para tirar?

          • Não é pra tirar não
            Fica difícil saber oque é…
            Que é erro na tua conexão com o bd é óbvio, mas porque está ocorrendo esse erro com vc que tá difícil de entender.
            Refaça… debugando.
            Imprimindo as variáveis para saber se os valores estão sendo passados.
            Boa sorte.

  126. Boa noite Roberto.
    Parabéns pelo tutorial, foi de vital importancia para mim. Instalei o sistema, e o mesmo funciona perfeitamente.

    Gostaria de saber como poderia adicionar um campo select no formulário de cadastro, se puder me ajudar eu agradeço muito, pois estou tentando algumas coisas aqui mas sem sucesso.

    Estou colocando o seguinte no formulario de cadastro:

    <option value=" “>Sim
    <option value=" “>Não

    isso esta certo?

    Criei uma coluna nova no banco de dados com o nome “news” e adicionei esta variável no arquivo cadastra.php. Mas quando cadastro um novo usuário, o campo da coluna “news” fica com um 0 em vez do “Sim” ou “não” do select.

    Atenciosamente,

    Jasar Graça

    • O value está vazio e cadê o <select name… ??

      • Bom dia Roberto, no comentário que fiz acima, não saiu o código inteiro que copiei da página, mas já consegui acrescentar o que precisava.

        Você teria idéia de como fazer uma página para o usuário editar os seus dados?

        Obrigado pela atenção,

        Jasar

        • Olá @Jasar, a ideia é simples.
          Uma vez o usuário logado, basta criar um arquivo que obviamente só pode ser acessado se estiver logado.
          Uma vez logado, prepare esse arquivo de forma que ele consulte o banco de dados e o resultado desta consulta seja exibido como o Value=”” de campos inputs de um formulário.
          Os dados do usuário que serão exibidos neste formulário poderão ser modificados e ao enviar o form, os dados serão resgatados em um arquivo separado que você irá criar, que irá fazer o mesmo processo de cadastro, porém a query a ser utilizada não usará INSERT e sim UPDATE, mas para isso procure saber sobre a sintaxe do UPDATE. É simples, no próprio tutorial é utilizado UPDATE em algumas situações, basta usar a lógica.
          Leia com atenção e vá em frente. Quando tiver dúvida novamente vamos tentando resolver.
          Bons estudos.

  127. Olá Roberto Lunelli, Bom dia!

    eu fiz todos os procedimentos do exemplo, mas ao inves de abrirem as respostas que as paginas em HTML teriam que abrir em PHP o meu browser faz é o download do arquivo e nem abre nada, instalei o xampp e o apache aki na maquina, estou meio louco aqui querendo e precisando desse php, o que tenho de fazer a mais do que isso? estarei fazendo algo errado aki?

    grato!

  128. Refiz tudo de novo, e continuou não dando certo… Entrei em contato com a hospedagem, agora é com eles.

    Obrigado pela ajuda! ;)

  129. Prezado Roberto

    Muito obrigado pelo tutorial.
    Apenas não entendi uma coisa, onde fica o local restrito, permitido acesso somente para usuários cadastrados ?

    Por exemplo, se entro com id e senha válidos, e aperto “Submit” o meu navegador recebe uma mensagem avisando que posso acessar uma área restrita.

    Mas cadê esta área ?
    Poderiam ser pastas ? Como faço estas pastas serem restritas
    Como as abro pelo PHP ?

    Grato

    Sérgio

    seja http://www.meuSite.com.br/acessoRestrito/
    ../

    • @Sergio, vc não entendeu.
      O Arquivo/página que vc leu estas mensagens é uma área restrita em si.
      Vc só tem acesso à essa página se estiver logado.
      Se ter mais atenção ao tutorial, perceberá que eu menciono claramente como tornar um arquivo restrito, afinal esse é o objetivo do tutorial.
      Eu apenas usei esse arquivo/página que exibe essa mensagem pr vc, como um exemplo, mas vc pode exibir o que quiser.

      Releia o tutorial e tudo que falo em relação a cada arquivo e suas funções.
      Da uma tenção ao cabeçalho do arquivo area_restrita.php depois.

      Bons estudos.

      area-restrita

      • De fato, não expliquei bem…

        Quando crio uma pasta protegida, “www.meuSite.com.br/teste” no provedor de hospedagem e
        coloco esse endereço no navegador e vai aparecer uma tela pedindo login e senha.
        Isso é realmente restrito

        Mas no seu sistema de login e senha, a pasta onde está a “página restrita” é na verdade bem acessível, tanto que o navegador lista todo seu conteúdo
        Sim, é bem verdade que ninguém avança para além da sua “página restrita” pois o próprio código redireciona o navegador para uma página de login.

        Contudo, eu gostaria de que todo o conteúdo da uma pasta ficasse restrito aos usuários cadastrados e não apenas alguns arquivos de código.
        Assim, evitaria acesso não autorizado para imagens, sons, textos, etc.

        Gostaria de saber se é possível com o PHP, em um sistema.de login e senha, dar acesso somente aos cadastrados para uma pasta e não apenas à alguns arquivos.

        • Não @Sergio, se vc cessar pelo meu sistema DEMO perceberá que não consegue listar nada do diretório.
          E sim meu sistema é para proteger acesso a conteúdo e não a arquivos.

          Para proteger arquivos exstem outros métodos utilizando o arquivo .htaccess e definindo algumas regras.

  130. De fatodor, não dá para listar o seu diretório “demo”

    Mas no meu caso, eu criei um ditetório http://www.ubatumirim.com.br/PHP e coloquei lá todos os arquivos e até minha vovozinha consegue listar o conteúdo. :-)
    Se torno este diretório “PHP” protegido nem eu mesmo acesso sem o login e senha cadastrados no provedor.

    Bom, é isso que não estou conseguindo fazer: Um diretório como o seu “DEMO”.

    Como é que se faz isso ?

    • Tenho certeza que nem sua vovózinha nem ninguém irá conseguir listar se fizer o básico para proteger a listagem de arquivos de um diretório, que se trata de uma indexação.
      Em melhores palavras, seria possibilitar o acesso direto através de um arquivo index.
      Vc pode colocar um index.html ou index.php vazio nesse diretório ou com o conteúdo que quiser… e os arquivos do dir não serão mais listados, ou ainda usar através do .htaccess uma regra para não listar arquivos…
      Qualquer uma das duas opções dispensa login para acessar o dir
      Se escolher o .htacces, busca no google mais informações, em outro momento eu posto algum tutorial a respeito.
      Se usar o CPANEL, o próprio tem disponível opções de indexação de diretórios.
      Bons estudos.

  131. Bom dia Roberto

    De fato, minha vovozinha tá tendo muita dificuldade em listar o diretório quando tem um arquivo index,htm dentro dele… :-)

    Mas mudando de pato pra ganso: É possível usar um arquivo de texto no lugar de um banco de dados para armazenar informações, né?
    Isso traria limitações do tipo:
    1- Espaço em disco
    2- Velocidade de processamento (não de programação)

    Sem se falar no fato que um banco de dados é já está pronto e é fácil de usar, que pensa a respeito ?

    • Só uma coisa para dizer a respeito, –> Segurança.
      Inviável a possibilidade de um sistema de cadastro em txt que possibilite opções de segurança adequadas.
      Estamos falando de dados como senhas, dados pessoais de usuários, etc…
      Bons estudos

  132. Estou fazendo um sistema de troca de mensagens e a segurança que já existe no acesso ao provedor já é suficiente.

    Contudo tenho dúvidas se um “txt” pode ter problemas sérios com tamanho e velocidade
    Resumindo: A mesma quantidade de informações dentro dos dois sistemas (mysql e txt) tem o mesmo tamanho nos arquivos ?

    Meu receio é que o arquivo TXT tenha capacidade menor de arquivamento, por não ter compressão ou outros recursos.

    Mudando mais uma vez de pato pra ganso: Tem como me enviar uma cópia do seu arquivo
    “http://www.sistemabasico.com.br/wp-comments-post.php” ?

  133. Bom dia Roberto

    Quanto ao arquivo que pedi, o “wp-comments-post.php”, é que achei muito boa a maneira que podemos postar mensagens em sua página e me pareceu que é esse o arquivo que faz isso.
    Gostaria de saber como fazer esse tipo de página. por favor poderia me ajudar nisso?

    • No meu caso é um CM conhecido na internet… entre em http://wordpress.org e também joga ‘tutoriais wordpress’ no google que tu vai encontrar muito material.
      Se desejar aprender a fazer um sistema de comentários em postagens ‘na unha’, utilizando PHP/MyQL, vai ter que se dedicar.
      Eu já desenvolvi algo assim e pode ser que em breve eu disponibilize um tutorial.
      Bons estudos

  134. Roberto,

    No trecho $salt = “abchefghjkmnpqrstuvwxyz0123456789″, que está presente nos arquivos cadastrar.php e gerar_nova_senha.php, você repetiu a letra H e tbm faltaram letras. Inicialmente pensei que tinha sido um erro seu, mas vi em outro tópico d outro tutorial que a mesma técnica foi usada de deixar faltar letras. Por que isso?

    • Eu percebi que a letra ‘d’ foi substituída pelo ‘h’ e a falta da letra ‘l’, ‘o’

      A princípio pensei que a letra ‘l’ e ‘o’ seria para evitar confusão com os números ’1′ e ’0′, porém a retirada da letra ‘d’ e substituição pela repetição do ‘h’ me confundiram.
      Procurei rapidamente sobre o assunto, mas não achei nada que definisse de fato o significado disso, mas como eu disse, procurei rapidamente, e inclusive vi situações que é usando o alfabeto completo e correto em alguns sistemas semelhantes.
      Essa função eu utilizava a muito tempo para um sistema de sorteios e agreguei ao sistema de cadastro, porém desde a primeira vez que usei nunca questionei isso… falha minha.
      Se eu souber de algo a respeito eu torno a responder… e se vc descobrir antes de mim, fala aí.
      Abração

  135. Bom domingo!

    passei o dia estudando esse formário que baixei…tá tudo fucionando certinho mais….mais pra levar o usuario cadastrado o TAL PAGINA RESTRITA não tá facil. não mesmo usar os comandos. Poderia me mandar ai um exemplo para que eu posso conniuar a editar!

    Abraço

    • OLá @Gil, eu não te entendi… vc quer mais exemplificado do que já está no tutorial?
      Faça o que eu ensino no tutorial e tente acessar o arquivo area_restrita.php sem estar logado.
      Não vai conseguir.

      O nome do arquivo é ‘area_restrita’, apenas para ilustrar, mas poderia ser qualquer nome e pode ter quantos arquivos restritos quiser.
      Basta seguir o exemplo do topo do arquivo que usei como exemplo.

      Bons estudos.

  136. Olá amigo! Primeiro parabéns pelo sistema excelente que montou aqui!
    Gostaria de saber qual o problema que está havendo em meu script.
    Quando eu cadastro meus dados na pagina de cadastro, retorna uma pagina com um erro:

    Warning: mail() [function.mail]: SMTP server response: 501 Syntax error in parameters or arguments in C:\…\lidyconstrucoes.com.br\httpdocs\cadastra.php on line 175
    Foi enviado para seu email – (meuemail@hotmail.com ) um pedido de confirmação de cadastro, por favor verifique e sigas as instruções!

    pode me ajudar?

  137. Ótimo tutorial. Parabéns pelo trabalho e paciência em responder a todos. Abraços!

  138. Em primeiro lugar gostaria de parabenizá-lo pelo excelente tutorial!!!

    Minha dúvida é a seguinte: é possível fazer um login simultâneo entre dois sites distintos

    e.x. quero cadastrar usuários no meu site e, quando esses usuários cadastrados fizerem o login na minha página, quero que em uma parte da página a ser exibida eles vejam o conteúdo de outro site (que exige senha e login também)?

    é possível? se sim, você poderia fazer um exemplo

    obrigado

    • Há possibilidade sim, mas estaria completamente ligado à outros métodos.
      Se os domínios estiverem no mesmo server facilita um pouco.
      Bons estudos

      • Quais outros métodos? você poderia exemplificar?

        • Amigo, foge muito do escopo do tuto, assim que eu tiver tempo pra respirar eu abordo essa questão.
          Geralmente eu presto suporte um pouco mais direcionando pra quem efetua doação para manutenção do site que não tem patrocinador e banco de meu bolso.

          O que posso te ajudar no momento é sugerir que estude sobre CURL, SESSIONS, COOKIES, e no estudar sobre isso vai perceber que precisará estudar outros temas ligados que envolvem uma questão muito importante… segurança.

          Bons estudos

  139. Olá Roberto! gostei muito do seu tuto, até aprendi um pouco mais de php só testando o sistema no meu site!
    Mas eu tava querendo fazer o seguinte: na hora de fazer o login, cada usuário seria enviado para uma página específica, por exemplo: usuario A vai pra página A, usuário B vai pra página B e assim por diante..

    Tem como fazer isso? se tiver pode me ajudar? ou até mesmo fazer um tutorial para isso?

    obrigado!

  140. Roberto Gostaria de saber.se voçe não pode criar um sistema que o usúario escolhe a senha que quer botar,não que o gerador em php envie uma senha!Se Der por favor crie um pra nós concerteza muitos usúarios querem isso

  141. Como faço um perfil do usuário cadastrado?

    • No arquivo exemplo area_restrita.php vc ve um exemplo de página restrita apenas ao usuário cadastrado e logado, sendo assim vc pode criar um arquivo o qual é restrito da mesma forma… onde neste vc poderá fazer uma consulta no banco de dados relacionando com o id do usuário logado, que no caso vc tem na session criada na hora do login.

      Bons estudos

  142. Esse foi o melhor tutorial explicativo que achei na WEB, simples, bem adaptável e eficaz.

    Vlw mesmo, estou utilizando em meu site todos os conceitos.

  143. Roberto, tó com uma dúvida será que você pode ajudar? fiz uma adaptações no seu código, mas na hora de logar a página que pretendo restringir só reconhece a $_SESSION['login'] = $login e $_SESSION['password'] = $password; Estou querendo que ela reconheça a $_SESSION['nomeusuario'] = $nomeusuario e $_SESSION['nivel_acesso'] = $nivel_acesso.

    Não sei onde estou errando… o código está abaixo:

    <?php
    // inclui o arquiv o de configuração do sistema
    include "configuracaodosistema.php";
    // revebe dados do formulario
    $login = htmlspecialchars($_POST['login']);
    $password = $_POST['password'];

    // verifica se o usuario existe
    $existe = mysql_query("select * from tabela where login='$login' AND ativacao='1'");
    $espacos = mysql_num_rows($existe);
    if($espacos != 0) {
    // se o usuario existir verifica a senha dele
    if($password != mysql_result($existe,0,"password")) {
    echo "
    Senha incorreta!
    “;

    exit;
    } else {

    // estiver tudo certo vamos ver se ele é o administrador
    if($login == $loginadmininstrador) {
    // se for o login do administrador vamos verificar a senha dele
    // se é igual a do administrado
    if($passowrd == $passwordadministrador) {
    // se for o administrador vomos criar a sessão
    session_start();
    $_SESSION['usuario_identifica'] = $usuario_identifica;
    $_SESSION['login'] = $login;
    $_SESSION['password'] = $password;
    $_SESSION['nomeusuario'] = $nomeusuario;
    $_SESSION['nivel_acesso'] = $nivel_acesso;

    mysql_query (“UPDATE usuarios SET data_login = now() WHERE login=’{$login}’”);

    // redireciona o link para a página do administrador
    header(“Location: paginaadministrador.php”);

    }
    } else {
    // se o login não for do administrado vamos criar a sessão dele
    session_start();
    $_SESSION['usuario_identifica'] = $usuario_identifica;
    $_SESSION['login'] = $login;
    $_SESSION['password'] = $password;
    $_SESSION['nomeusuario'] = $nomeusuario;
    $_SESSION['nivel_acesso'] = $nivel_acesso;

    mysql_query (“UPDATE usuarios SET data_login = now() WHERE login=’{$login}’”);

    // redireciona o link para uma outra pagina
    header(“Location: paginausuario.php”);
    }
    }
    } else {
    echo “
    O usuario não existe
    “;
    exit;
    }
    ?>

    Obrigado

    att.

    • Amigo, tuas adaptações não estão boas não.
      Deves seguir o tutorial, pois a consulta no banco de dados que fiz no tutorial recebe todos os campos do banco de dados dentro de um foreach e atribui o seu valor para uma variável com o respectivo nome do campo no bd.

      Perceba que na sua consulta no banco de dados vc não selecionou o nome do usuário e nivel de acesso, sendo assim a session que está gravando para esses valores está vazia.
      Outro erro grave é a localização do session_start()… vc deve utilizar apenas uma vez em cada arquivo e no topo …. sempre.

      Tente entender melhor a lógica do arquivo original no tutorial e refaça as tuas adaptações com mais cuidado.
      Bons estudos

  144. Valeu pelo post… está td funfando certinho.
    Estou aprendendo php, e com estes fontes bem estruturado ajuda muito.

  145. Parabéns pelo post :D
    Vai seer muuuuito útil pra quem ta começando .

  146. Ola Roberto muito bom esse sistema, aqui em casa testei com o wampserver,
    não alterei nada, aceto pelos meus dados do meu banco, mas ta dando alguns erros…

    1° – Quando abro o formulario de cadastro, nos campos ao invés de ficar em branco fica o seguinte…

    Notice: Undefined index: nome in C:\site\formulario_cadastro.php on line 12

    … em todos os campos aparecem isso, o que pode ser?

    2° – Quando preencho todo o formulario da os seguintes erros…

    Notice: Undefined variable: pass in C:\cadastra.php on line 118

    Warning: mail() [function.mail]: Failed to connect to mailserver at “localhost” port 25, verify your “SMTP” and “smtp_port” setting in php.ini or use ini_set() in C:\site\cadastra.php on line 194
    Foi enviado para seu email – ( nome_do_email@hotmail.com ) um pedido de confirmação de cadastro, por favor verifique e sigas as instruções!

    … o que poder ser tbm?
    mais uma vez te parabenizo pelo sistema, valeu!

    • AS NOTICES não são erros propriamente dito, são avisos de algo que está fora dos padrões.
      Eu os encaro como erros tbm…

      Provavelmente porque nos campos do form nos VALUEs há uma variável já chamada sem ter sido definida, ou seja, sem existir ainda.

      Substitua em todos os campos no parâmetro VALUE dos campos … a variável pela variável GLOBAL $_POST

      Exemplo: ao invés disso ... echo $sobrenome; , faça isso echo $_POST['sobrenome'];

      Faça isso com todos os campos e as NOTICES desaparecerão

      Quanto ao WARNING, pé porque vc tentou enviar uma mensagem de email sem ter um servidor de email (SMTP)
      Para contornar esse problema de envio de emailk via sevidor local (sua máquina), ou instala um server SMTP no teu pc…(não abordarei como fazer isso) ou da uma lida em outro tutorial meu sobre envio de emails localmente utilisando PHPMailer e contas de email do GMAIL.

      Bons estudos.

      • Obrigado pela resposta Roberto!
        Consegui as NOTICES…
        e tambem instalei Easy SMTP Server 2.9 no meu pc, não configurei nada, pq esta em ingles, rsrs, e tambem não entendo muito, sou meio leigo,
        tah instalei daí tentei cadastrar e aparece o seguinte…

        “Notice: Undefined variable: pass in C:\site\login\cadastrar.php on line 106

        Foi enviado para seu email – ( nome_email@hotmail.com ) um pedido de confirmação de cadastro, por favor verifique e sigas as instruções!”

        …não recebi o email ainda, e essa NOTICE é um erro? e que pode ser?
        Valeu!

        • Quanto a vc receber o email ou não, provavelmente é algo relacionando a confuguração do servidor smtp que está usando e que no caso, não posso ajudar.
          Quanto a Notice, é interessannte deixar habilitado no php.ini para exibir todos os erros e notices na plataforma de desevolvimento, mas saiba que na maioria dos servidores de hospedagem as NOTICES estão desabilitadas para exibição… e ainda assim mesmo que nnão estejam, vc pode desabilitar diretamente no script… procure por ‘desabilitar exibição de erros no php’ e bons estudos.
          ‘Notices’ não atrapalharão no processo do teu script.
          ;)

  147. carra deu exatamente tudo certinho aki, mas na parte cadastro quando eu entro para cadastrar ele não espera eu preencher os dados para informar se tem erros, ele ja carrega a ´pagina dizendo isso em cima:
    ERRO: Você não enviou as seguintes informações requeridas para o cadastro!

    Nome é um campo requerido.
    Sobrenome é um campo requerido.
    Email é um campo requerido.
    Nome de Usuário é um campo requerido.

    Preencha os campos necessários abaixo:

    —————————-
    DAE AKI TEM O FORMULARIO
    —————————-

    oque deve estar errado?

    outra coisa q eu precizo mudar q é o usuario poder escolher a senha, e não ela ser automatica, por favor eu precizo meeesmo, e tbm dá pra tirar a parte + informações sobre você e colocar lá o campo senha e repetir senha

    outra, na parte recuperar senha tbm deveria ter essa opção de escolher uma senha nova tipo:
    didite seu e-mail: dae confere se ele existe e redireciona para a pagina nova_senha.php dae lá dah para eu por senha: minhanovasenha entende??

    por favorrrrr isso é urgente mesmo tenho q terminar o meu progeto ate este final deste mes (janeiro)
    entra em contato no meu msn sanderluis@hotmail.com vlwwwww supermassa este sistema ae….

    • Olá @Sander, vamos com calma….
      Em relação às informações de erros aparecerem direto, é porque vc está acessando o arquivo cadastrar.php, o correto é acessar o formulario_cadastro.php.
      Este sim é o formulário que envia os dados para o arquivo cadastrar.php que por sua vez verifica os dados enviados e se não estiver(em) correto(s) ele informa os erros.
      Acessando o cadstrar.php diretamente, obvio qeu aparecerá os erros, pois ele não estará recebendo os dados do form e acusará os erros de campos não preenchidos corretamente.
      Entendeu isso? Se não entra em contato.

      Quanto ao fato das senhas poderem ser definidas pelo usuário, há a possibilidade sim de se fazer essa alteração, mas será necessário a edição de diversos arquivos coligados.
      Se não fizer as alterações corretamente em todos os arquivos relacionados à definição de senha o sistema não funcionará corretamente.

      Se ler todos os coments (sei que são muitos) deste tutorial, irá perceber que não é o primeiro que solicita essas modificações e em todos eu respondi que não faz parte do escopo deste tutorial, dar suporte gratuíto à modificações.

      Este suporte eu presto para quem colaborar com o site que se sustenta graças as doações dos usuários que se beneficiam do material e por gratidão fazem suas doações via Paypal ou PagSeguroUol através do banner na lateral esquerda do site.

      Qualquer dúvida spbre isso, pode entrar em contato.
      Grande abraço
      Bons estudos!

  148. Olá, tudo bem?
    Ótimo script, parabéns.

    Sou novo em php, testei seu script, deu quase tudo certo, usei num servidor kinghost, com suporte a enviou emails, então:

    Quando faço o cadastro, chega a senha randomica e o usuário tudo certinho no meu email do gmail, porém, quando vou em “gerar_nova_senha.php” e digito meu e-mail cadastro, o script não envia o email para mim.

    É estranho, pois recebo o e-mail de cadastro mas não o de redefinição de senha.
    “Ah, já ia me esquecendo, quando envio email de redefinição, o script muda minha senha no banco, só não está enviando no e-mail…

    “Não fiz nenhuma modificação nos script, só abri e apenas estudei-os.

    Tem alguma idéia do que seria esse issue?

    Obrigado.

    • Antes de testar o gerador de nova senha vc confirmou o cadastro no primeiro email enviado à vc?
      O que posso dizer é que não faço ideia do que possa ser, visto que não tem nada de errado com o script.
      Testei e deu tudo certo pra mim.

      Pegue seu arquivo de gerar nova senha e ‘debugue’ ele… ou seja, ao invés de processar o script, apenas imprima as variáveis e querys para ver se os valores estão sendo passados.
      Bons estudos!

      • Ah sim, fiz isso, pegou, mudei o 2 emails demonstrativos para o mesmo um do meu dominio que tinham no plugin e funcionou agora.

        Se caso eu queira que qualquer um possa acessar o arquivos “area_restrita.php”.
        Quero tirar a restrição, pq quando uma pessoa não cadastrada vai acessar “area_restrita ele redireciona para formulario_login…

        É que tou fazendo um site projeto pessoal, e quero colocar na pagina principal index.php

        <?php

        session_start();

        include "functions.php";

        session_checker();

        echo "(Mensagem exemplo)”;
        echo “”;

        echo “Bem vindo “. $_SESSION['nome'] .” “. $_SESSION['sobrenome'] .”!
        Você está acessando área restrita para usuários cadastrados!”;

        echo “Seu nível de usuário é “. $_SESSION['nivel_usuario'].”.
        Com esse nível, você tem permisão de acesso à algumas áreas exclusivas do site.”;

        /*if($_SESSION['nivel_usuario'] == 0){

        echo “- SITE – Acesso à áreas exclusivas do site”;
        }

        if($_SESSION['nivel_usuario'] == 1){

        echo “- PAINEL ADMINAcesso total ao site e painel administrativo para gerenciar todos os usuários do site.”;
        }*/

        echo “Sair“;

        ?>

        mas quero que que não esteja logado ou n tenha cadastro veja o restante do site ainda, e que quem tenha cadastro veja as informações, o script tá bloqueando o restante do conteudo…

        • Amigo, se queres apenas usar o sistema para exibir mensagens expecíficas, basta retirar o session_checker() e apenas no espaço que quer exibir a mensagem verificar se algumas das sessions que são registradas na hora do login estão abertas. É lógico o racioncínio… se alguma das sessions estiver aberta vc exibe a mensagem senão, não exibe… deves trabalhar apenas com condicionais… simples.
          Bons estudos

  149. Boa noite Roberto,
    cara, estou com um problema aqui
    o e-mail de ativação só chega para usuários que usam Gmail
    nenhum outro chega, seja hotmail, ig, uol, yahoo.
    O que pode estar errado?
    Obrigado

  150. Ola.. Roberto.

    Tive a fazer todo este topico, mais estou com um erro no começo do registro de usuario!!

    1. Faço o cadastro no formulário de cadastro de usuário
    2. aparece a mensagem para verificar o email cadastrado a confirmação e finalização do cadastro.
    3. vou ate o email que recebe o pedido de confirmação. Clico no link para ativar o usuário e aparece a mensagem que a conta não pode ser ativada.

    OBS. OS DADOS SÃO INSERIDO CORRETAMENTE NO BD E O EMAIL DE CONFIRMAÇÃO TAMBÉM CORRE BEM SÓ O CAMPO DA TABELA USUÁRIOS ATIVADO PERMANECE {0}

    • Verifique se quando copiou o codigo não foi alguma sugeira.
      Veja se não alterou nada em relação ao banco de dados como os tamanhos dos campos do tipo VARCHAR.
      Fica difícil adivinhar o que pode estar fazendo errado.
      Bons estudos

  151. Sistema muito bom, achei códigos de segurança que não utilizava em meus sistemas, entre códigos mais organizado relados aqui. Obrigado.

  152. olá roberto, seu codigo através do post ficou incrivel, td funcionando certinho on line , e ai queria te pedir algo mais se não lhe for pedir muito hahaha.

    Cara como faço para direcionar cada login para uma pagina especifica.

    Exemplo: Login: fernando ( se estiver ok) avança para a pagina Fernando_restrito.php
    marcela ( se estiver ok) avança para a pagina marcela_restrito.php
    douglas ( se estiver ok ) avança para a pagina douglas_restrito.php

    sei qeu tenho que usar if e else e sei tbm que tem que ser na pagina verifica usuario mas não sei como nem em que parte do codigo posso fazer isto.

    se puder dar essa ajuda o/, mesmo assim nota mil brown , abraçoss!

    • Olá @Marko.
      Poderia me dizer a finalidade?
      Se for para cada user ter uma página específica para exibir seus dados, não é necessário.
      Basta entender a lógica do sistema.
      Visto que se um user logado gera uma session com o valor de seu ID, que por sua vez ID este que está registrado no banco de dados, então é possível exibir todos os dados deste usuário unicamente baseando-se no ID gravado na session, ou seja, fazendo a consulta no bd em relação à este ID o arquivo puxa todos os dados do user logado e exibe na página.
      Para tanto é necessário um arquivo apenas que faça essa consulta e a cada user logado será exibido apenas as suas respectivas informações.
      Não vejo outra forma de se fazer isso… qualquer outra forma, como criar um arquivo para cada user e através de algum campo no BD fazer uma verificação que arquivo à ser exibido, seria o caminho errado, mesmo que funcione.
      Bons estudos

  153. Olá Roberto…

    Tive a mandar um Email para verificar se você pudesse fazer uma atualização no seu sistema e o mesmo não foi respondido. Se caso você não recebeu o Email me informe para que eu possa mandar outro. Para qual Email?

    Obrigado..

    Leandro Medeiros

  154. Olá, Roberto!
    Bem, fiz tudo certinho, não ‘copiei e colei’… mas mesmo assim estou enfrentando problemas! Eu uso os serviços de hospedagem do http://www.000webhost.com, que inclusive fornece aos seus usuários o MySQL. Sempre aparece mensagens de erro no serviço, não faço ideia de qual seja o motivo. aqui está o link para o cadastro ‘http://bebserver.net63.net/formulario_cadastro.php’ cadastre-se e veja o erro que aparece. Desculpe-me se o erro for algo banal; mas é porque sou totalmente leigo nesse assunto. Agradeço profundamente a sua resposta.

    • O únio problema se dá nas suas definições de conexão com o banco de dados.
      Verifique o arquivo config.php… é ali que deve ter os dados definidos corretamente.
      Esses dados devem ser de acordo com o servidor de hospedagem que está utilizando.
      Entre em contato com o Host.
      Bons estudos

  155. Erro

    consulta SQL:

    { \ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang1046{ \ fonttbl{ \ f0 \ fswiss \ fcharset0 Arial;

    Mensagens do MySQL : Documentação
    #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘{\rtf1\ansi\ansicpg1252\deff0\deflang1046{\fonttbl{\f0\fswiss\fcharset0 Arial’ at line 1

    amigo to com esse problem PODE ME AJUDA

    • Olá @Valdenir, isso acontece porque vc não digitou os códigos.
      Provavelmente o arquivo .sql deve ter tido interpretação errada pelo teu gerenciador mysql.

      Vou salvar ourto arquivo .sql e disponibilizar no download, mas não espere por isso, pois o propósito é vc digitar o código.
      Outra saída é vc clicar duas vezes sobre o codigo direto no tutorial e ele ficará em forma de codigo e poderá ser copiado com Ctrl+C e colado com Ctrl+V.

      Bons estudos!

  156. Perfeito o sistema, Removi o MD5, pois vai ser somente para uso interno,
    Muito Obrigado..

  157. No verifica_usuario.php, na parte que você define os valores da session, eu não entendi. Você usou varias variaveis, cada uma para uma parte da session, até ai tudo bem. Mas de onde vieram essas variaveis? Elas não tinham sido criadas antes, de onde vem o valor delas?
    Esse $_SESSION['nivel_usuario'] = $nivel_usuario; por exemplo, não daria erro? Afinal o $nivel_usuario ainda não foi criado e está vazio….

    • Olá @Bruno, foram criadas sim bruno todas elas foram ciradas antes do registro da session, lá dentro do foreach()

      Mais precisamente nesse trecho:

      foreach ($row AS $key => $val){
      $$key = stripslashes( $val );
      }

      Você não percebeu isso dentro do foreach() que está dentro do while da consulta sql? $$key ??
      De uma lida sobre Variáveis Variáveis

      Resumindo, com esse foreach(), cada seleção de um campo no banco de dados é criado uma variável de mesmo nome.

      Pegou?
      Bons estudos.

      • Valeu, esse for each foi um pouco complexo pra mim, ainda não entendi, mas agora já sei sobre o que pesquisar para entende-lo. Valeu.

        • Nossa, segui o seu link e ja entendi. Basicamente o conteudo de uma variavel vira o nome da outra.
          Deixa eu aproveitar e mandar outra pergunta. Sobre o uso da chave ‘{‘ ou ‘}’ em uma string. Eu não entendi pra que serve. É pra concatenar? Porque se eu fizer simplesmente echo “blabla $var” ele ja substitui a variavel por seu conteudo, sem precisar fazer echo “blabla {$var}” ou echo “blabla “.$var

          • @Bruno, existem diversas formas de escrever PHP, porém nem todas sempre funcionarão nas diversas configurações dos servidores remotos por aí a fora e nem todas as versões terão uma mesma interpretação correta de um modo de escrita ou de outro.

            As CHAVES antes e depois de uma variável numa string diz ao PHP que o que tem dentro delas é de fato uma variável e o que deve ser retornado é seu valor e não seu nome literal.
            Não colocar as chaves muitas vezes irá funcionar perfeitmente, porem algumas vezes pode haver equivocos de serem interpretadas como uma string literal. Por isso as chaves podem ser uma boa prática.

            Eu particularmente tenho o hábito de concatenar escapando o que é string literal e o que é variável.

            Exemplo:

            $a = "concateno";
            $b = "Eu ".$a." minhas strings desta forma";
            echo $b;

            Bons estudos.

  158. quando envio o formulario de cadastro aparece somente uma tela em branco??? o que seria e nao grava no bd

  159. por favor me ajude fiquei umas 2 horas e li todos os comentarios e nao consegui achar a causa do meu problema
    (quando envio os dados da pagina cadastro simplismente aparece uma pagina em branco e nada acontece, ja testei todas as outras paginas li e reli todo o codigo mas nao encontrei a solução)
    a pagina de cadastra.php fica em branco e nao faz nada nao cadastra nem nada

    meu servidor e da uolhost nao sei qual e o problema;;;
    me ajude…. por favor…

    • Amigo para que eu te ajude vc tem que me ajduar, afinal ainda não sou adivinho… quem sabe um dia.
      Nos coments há muitas possibilidades que poderiam se encaixar como respostas às tuas dúvidas e problemas, mas já que disse que não achou nada que pudesse ajudar.
      Bom ele não está cadastradndo nada no banco de dados, é possível que teu arquivo de conexão esteja com os dados erraods e não sei como funciona o UOL em relação à tratamentos dos erros… se ele exibe mensagens ou não. Se o PHP do UOL está programado para não exibir erros, pode ser que seja isso que citei acima, mas tbm pode ser outras diversas possibilidades.
      Existem muitas maneiras de encontrar os erros em um script, uma delas é observação do script linha por linha, mas para iniciantes pode ser falho.
      Uma maneira interessante é ao invés de registrar no banco de dados vc imprime na tela com 'echo' a sua query SQL, ou seja, ao enviar o form o arquivo responsável por pegar os dados enviados e registrar no bd vai ser modificado… em vez de $var = mysql_query("INSERT...etc"); vc apenas atribui à variável a string de consulta.

      Exemplo:
      $var = "INSERT...etc";
      echo $var;

      Desta forma vc poderá ver na tela se os dados enviados pelo form estão sendo enviados corretamente e de fato completam perfeitamente a query de registro.
      Se tudo Ok vamos adiante que o erro é em outro lugar.

  160. boa tarde, eu sou leigo em php ainda rs
    o erro que ta dando aqui é que quando em clico pra abrir o cadastrar.php, o site fica com os codigos de php em vez de mostrar o formulario, não sei se é falta de instalar alguma coisa
    eu fiz o banco de dados em wamp server e não sei se tenho que instalar esse tal de md5 e se tiver, por favor, pode me mandar o link ?
    valeu cara o/
    fora isso, nos seus demos funcionou perfeitamente

  161. Ola, o tutorial eh mt bom, quando eu clico em enviar para cadastrar no formulario.cadastro.php ele nao envia para o banco e aparece uma tela falando pra mim abaixar o cadastrar.php, oque pode ser?

  162. Bom dia Roberto, primeiramente parabens e obrigado pelo tutorial.
    No meu teste apresentou uma problema, qdo finalizo o cadastro ele diz Foi enviado para seu email – ( “meuemail…@gmail.com” ) um pedido de confirmação de cadastro, por favor verifique e sigas as instruções!
    porem não chega nada.
    Fiz o mesmo teste no DEMO deste site e funciona. Tem alguma configuração que devo fazer ?

    obrigado

  163. Resolvido Roberto, alterei as informações do meu dominio no cadastrar.php.
    Obrigado

  164. Certo, consigui agora, o unico problema eh q o email nao eh enviado, nao da erro nenhum, apenas nao envia o email

    • @Ricardo, para resolver esse problema deve estar atento à alguns detalhes.
      Um deles é que vc precisa ter um servidor SMTP de email no seu computador para poder enviar emails a partir dele.
      Uma alernativa para isso é usar o servidor do google com uma conta do gmail para esses envios locais.
      Para tanto deves seguir este tutorial: Como enviar email localmente com PHP + Apache + PHPMailer e Gmail no Windows.
      Uma outra alternativa ainda é ler todos os coments deste tutorial de cadastros e com certeza irá verificar diversas dúvidas como a sua… algumas resolvidas, outras não.
      Bons estudos

  165. MARAVILHOSO ESSE SEU TUTORIAL ROBERTO!
    nenhum erro! rodou redondissimo e era exatamente o que eu precisava!

    TÁ DE PARABÉNS !!!

  166. Roberto no meu caso estou, nao estou usando ele local, eu tenho um site e estou usando ele para hospedar, caso queria da uma olha o site é http://www.prosperebrasil.com.br/sistema/formulario.cadastro.php , neste caso a ond devo configurar o smtp?

    • @Ricardo, é como eu já te disse.
      Se você tivesse seguido uma das alternativas que eu dei, “Ler os coments anteriores“, teria encontrado informações de que o provedor de hospedagem o qual você utiliza (@locaweb) não da um suporte adequado para função mail() do PHP, a qual é utilizada para o envio de mensagens no sistema de cadastros deste tutorial, sendo assim, deverá usar a dica que eu dei sobre estudar o tutorial de envio autenticado de emails usando a classe PHPMAILER, o qual deverá substituir alguns parâmetros para funcionar com seu email gerado no seu domínio no seu Host.. como a conta de email que envia as mensagens, substituindo pela sua ao invés de uma do gmail, susbtituir o Host pelo ensedreço do teu server de email do teu server de hospedagem e retirando alguns parâmetros de segurança do google como SMTPSecure (protocolo tls) e Port, que serverm apenas para autenticar no google (gmail).
      Enfim…
      Estude aquele tuto e implemente no sistema de cadastro substituindo pela função mail().
      Qualquer dúvida a respeito da config do phpMailer, pergunte no tutorial específico sobre o envio de emails.
      Bons estudos!

  167. Como configura niveis de permissao nesse negocio?

    • @Igor, primeiro não tem ‘negócio’ nenhum aqui, sim um script simples para aprendizado.
      Quanto aos níveis, se ler o tutorial com atenção, perceberá que montei ele de forma que fosse possível trabalhar com níveis de acesso posteriormente, mas isso seria algo para quem se interessasse em ir adiante, por conta própria.
      Para implementações extras nos scripts dos tutoriais os quais escrevo, somente após doação via Paypal ou PagSeguroUol, ou se a implementação for mais complexa envolvendo um sistema completo para alguma finalidade, com relação ou não aos meus tutorias… somente após prévio orçamento.
      Bons estudos.

  168. Olá Roberto, tudo bem
    Estou seguindo o tutorial passo-a-passo, e está bem completo e bem comentado.

    Eu já consegui cadastrar varios usuarios, definindo níveis de permissão e tudo mais!

    Só está falhando na hora de logar no sistema.
    Pode me orientar para ver onde errei?

    Grato,

    Leonardo

  169. Olá Amigo , parabéns pelo site..

    Baixei os arquivos e ao importar o SQL apresntou o seguinte erro”Erro

    consulta SQL:

    { \ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang1046{ \ fonttbl{ \ f0 \ fswiss \ fcharset0 Arial;

    Mensagens do MySQL : Documentação
    #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘{\rtf1\ansi\ansicpg1252\deff0\deflang1046{\fonttbl{\f0\fswiss\fcharset0 Arial’ at line 1

    Como posso resolver..

    Abraços

    • @Adilson, faça assim: Digite no campo SQL do phpMyadmin ao invés de importar o arquivo sql.
      O que ocorreru é que o arquivo está salvo com formatação, não ficou um sql puro e ao importar há caracteres inválidos.
      Irei recolocar um arquivo SQL no ZIP, mas sugiro digitar o cod.
      Bons estudos!

  170. Ola Roberto , Obrigado deu certo , agora quando usei o formulario de cadastrar e dei enviar apareceu este erro “Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/contabil/public_html/cadastra.php on line 54

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/contabil/public_html/cadastra.php on line 55
    Unknown column ‘sobrenome’ in ‘field list’ ”

    Obrigado..
    Abs

    • Olá @Adilson. Veja com atenção a mesnagem de erro. Oque ela te sugere?
      Na tua tabela no banco de dados existe o campo ‘sobrenome’?
      Se sim, verifique se foi digitado errado o nome do campo no bd ou errado o nome do campo na query SQL no seu arquivo cadastra.php
      Bons estudos!

  171. tem como vc simplificar para mim esse esse tutorial pq como faço para direcionar para pagina que eu quero
    e como bloquear alguns arquivos para ter acesso so quem pagar .

    como eu faço para conveter o codigo php para html ?

    onde fica armazaenado os dados dos clentes ?

    como deixar seguro protegido?
    estou aguardando resposta obg.

    • Olá anonimo ¬¬
      Simplificar mais que isso não tem como.
      Para redirecionar para página que você quer, basta defini-la no arquivo verifica_usuario.php. De uma analisada.
      Tem como bloquear sim, mas a implementação de verificação se foi pago você deve contruir a parte.
      Eu tenho uma solução com pagamento via Paypal, mas não é graatuito -> R$800,00 -> DEMO – PAYPAL WEBSITE INTEGRATION

      Amigo, código HTML não faz isso. HTML é só a marcação da estrutura das páginas.
      O Armazenamento fica no banco de dados MySQL (Você leu o tutorial?)
      Para deixar seguro e protegido, o que foi passado no tutorial já da uma base boa, mas se desejar algumas aprimorações, uma grande dica é tratar tudo que vem dos forms, verificando sempre se não vem código malicioso.

      Bons estudos

  172. Bom dia.
    estou tentando usar seu tutorial, mas estou com um simples problema, rsrsrsrsrs
    nao recebo no email a informação do cadastro.
    mysql funciona perfeitamente.
    quando cadastro o usuario, diz q foi enviado para o email uma solicitação de confirmação. porem isso nao chega ao email.

    poderia me ajudar?
    desde ja agradeço

  173. Olá amigo estou com um probleminha, talves seja ate coisa boba…eu fiz e dava esse erro..ai ate baixei o DEmo que vc desponibilizou e continuou dando erro..coloquei ate do jeio que esta aparecendo..

    Desde já agradeço sua atenção

    Notice: Undefined index: nome in C:\Program Files (x86)\EasyPHP-5.3.9\www\login-\formulario_cadastro.php on line 19

    Notice: Undefined index: sobrenome in C:\Program Files (x86)\EasyPHP-5.3.9\www\login-\formulario_cadastro.php on line 24

    Notice: Undefined index: email in C:\Program Files (x86)\EasyPHP-5.3.9\www\login-\formulario_cadastro.php on line 28

    Notice: Undefined index: usuario in C:\Program Files (x86)\EasyPHP-5.3.9\www\login-\formulario_cadastro.php on line 33

    Notice: Undefined index: info in C:\Program Files (x86)\EasyPHP-5.3.9\www\login-\formulario_cadastro.php on line 37

  174. cara muito bom…

    cara tem como cadastrar uma imagem para esse usuário e ter uma forma dele trocar…acho que já que ele tem sua própria página poderiamos personalizar…com logo ou imagem dele mesmo…

    • Basta adicionar o campo de envio de imagem no form.
      Adicionar o campo no banco de dados.
      Criar uma pasta para armazenar as fotos/imagens
      Escrever algumas linhas de código para manipular o envio, armazenar no bd o seu nome e a imagem na pasta.
      Desenvolver um painel para edição dos dados cadastrados de todos os usuários para o admin gerenciar.
      Desenvolver um painel de controle para o usuário gerenciar seus próprios dados.
      A lógicas é essa… bons estudos!

  175. Olá, parabéns mt bom o tuto.

    Eu fiz o download dos arquivos e quando eu crio um usuario ou tento recuperar a senha ele da essa msgm:
    Notice: Undefined variable: pass in C:\xampp\htdocs\…\gerar_nova_senha.php on line 60

    Como faço pra remove ela?

    Muito obrigado.

    • Olá @Marcus, isto é uma Notice, não se trata de um erro propriamente dito.
      O sistema continuará a funcionar.
      Como o sistema foi feito a alguns anos, algumas coisas devem ser alteraqdas.
      Deve-se definir a variável ‘pass’ no arquivo gerar_nova_senha.php
      Da uma olhada nos coments, eu já ajudei respondi isso em detalhes.
      O ideal é escrever scripts que não gerem Notices, mas se não se preocupa com isso, tem como definir no oho.ini para não apresentar as Notices e outras mensagens.
      Da uma olhada http://php.net/manual/pt_BR/errorfunc.configuration.php
      Bons estudos

  176. Olá Robert, ótimo sistema, muito bom!

    Porém estou iniciando e preciso de um sistema um pouco mais complexo, partiria de um cadastro, igual o seu mesmo.
    Só que ao fazer o login, o usuário teria 5 fichas para preencherem, como novos formulários, e essas fichas ficariam no banco. entende?
    Me cadastrei, me loguei, na página restrita encontrei 5 fihas para eu preencher, preenchi com as minhas informações pessoas e ficou no BD.

    Cada usuário preencheria as suas ficha.

    Como faço isso? me de uma dica pois estou na dúvida de como asocciar as fichas aos usuários.

    Pois preciasaria criar também uma administração que visse todos os usúarios e suas fichas.

    Poderia me ajudar com isso?

    Desde já muito obrigado! Forte Abraços!

    • Olá @William.
      É tranquilo fazer esta relação Wiliam, basta gravar o id do usuário quando for registrado os dados dessas fichas de formulário que vc disse.
      Crie uma tabela para armazenar essas fichas… nessa tabela além do id das fichas vc adiciona um campo para receber o id do user que respondeu as fichas.

      Para relacionar as fichas com o ususário que respondeu, basta fazer a consulta com relação ao id do user na tabela de usuários e o id do user na tabela das fichas.
      A igualdade desse ID liga o memso com as fichas.

      Como pegar o id do user na hora que ele está respondendo as fichas??
      Simples… o id dele já está numa session a partir do momento que ele se logou.

      Para criar um painel admin é outra situação à qual não poderei ajudar no momento, pois não está na proposta do tutorial.

      Se tiver interesse através de orçamento prévio, podemos tratar sobre a criação deste teu painel, formulários e banco de dados para as ‘fichas’ tão como essa relação de ids que mencionei.
      Bons estudos.

  177. Olá Roberto, tudo bem? Primeiramente parabens e MUITO obrigado pelo tutorial, são poucos os que querem ajudar e sem dúvida você e´um desse poucos.

    meu problema é o seguinte, preciso de um sistema de cadastro no meu site, (www.contabiliza.net.br/contabiliza).

    após ver seu tutorial resolvir abandonar outro que estava tentando, porem, ao tentar importar a tabela usuarios.sql. tenho o erro abaixo, vir que outro leitor teve o mesmo problema e você recomendou digitar em vez de importar, no meu caso não resolveu e gostaria de sua ajuda.

    Erro
    consulta SQL:

    { \ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang1046{ \ fonttbl{ \ f0 \ fswiss \ fcharset0 Arial;

    Mensagens do MySQL :

    #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘{\rtf1\ansi\ansicpg1252\deff0\deflang1046{\fonttbl{\f0\fswiss\fcharset0 Arial’ at line 1

    uso WAMP5, local, Win XP,

    obrigado

    • Olá @Jario, esse erro que dá é porque o arquivo .sql no pacote deve estar comrrompido, não foi salvo por da forma correta por mim.
      Indiquei sim à outro user que digitasse diretamente na caixa SQL do phpMyAdmin para que desse certo e de fato não tem como dar erro quando feito dessa forma.

      Cuidado ao copiar e colar o cod da página do tuto, pois virá com codificação desnecessária.
      Deves dar 2 cliques sobre a caixa de cod no tuto e assim ele ficará em formato texto e desta forma copiar somente o codigo.
      Bons estudos, se não der manda aí mais um coment.

      • ROBERTO, nais uma vez muito obrigado, depois de rever seu tutorial e refazer algun passos agora deu certo quanto ao cadastro já está certinho.

        minha outra dúvida é comrrelação a área do usuário, não estou conseguindo fazer com que cada usuário tenha sua área, todos abrem a mesma página de teste (area_restrita.php), o que preciso mudar para resolver isso?

        mais uma vez muito obrigado e desclupa minha ignirância.

        • Entenda que se no arquivo area_restrita.php quando acessado com sucesaso após lçogin, vc ve o seu nome na mensagem de olá.
          Se outro usuário acessar esse mesmo arquivo logado com os dados dele ele verá o nome dele.
          Está entendendo a lógica?

          Quando um usuário ‘loga’, este tem disponível numa session o seu respectivo ID que está cadastrado no banco de dados.
          Tendo o ID, é possível fazer a consulta no banco de dados e exibir toos os dados baseado no ID.
          Obviamente cada ID refere-se à dados unicos de cada usuário, sendo assim cada usuário verá apenas os seus próprios dados.

          Com isso vc pode montar um formulário e definir os VALUES dos inputs com os dados vindos da consulta no banco de dados.
          Vc pode ir mais além… caso tenha outros sistemas que utiliza banco de dados, pode relacionar o conteúdo com o ID da tabelka de usuários, assim cada user pode ter mais opções exclusivas, como galeria de imagens, postagens, etc… de acordo com os outros sistemas que venha a relacionar.

          Enfim… tua criatividade e conhecimento da linguagem é teu limite… ultrapasse essa linha e você faz qualquer coisa.
          Bons estudos

          • ROBERTO, tudo bem?
            não estou conseguindo enviara arquivos para o sevidor SQL!!
            vc tem algum código para enviar arquivos para o servidor SQL?


            Descrição  Arquivo

            Descrição
            Arquivo


            require(“dbconnect.inc.php”);

            $arquiivo = $_FILES['arquivo']['tmp_name'];
            $tamanho = $_FILES['arquivo']['size'];
            $tipo = $_FILES['arquivo']['type'];
            $nome = $_FILES['arquivo']['name'];
            $titulo = $_POST['titulo'];

            if ( $arquivo != “none” )
            {
            $fp = fopen($arquivo, “rb”);
            $conteudo = fread($fp, $tamanho);
            $conteudo = addslashes($conteudo);
            fclose($fp);

            $qry = “INSERT INTO arquivos VALUES
            (0,”$nome”,”$titulo”,”$conteudo”,”$tipo”)”;

            mysql_query($qry);

            if(mysql_affected_rows($conn) > 0)
            print “O arquivo foi gravado na base de dados.”;
            else
            print “Não foi possível gravar o arquivo na base de dados.”;
            }
            else
            print “Não foi possível carregar o arquivo para o servidor.”;


            require(“dbconnect.inc.php”);

            $qry = “SELECT id, nome, titulo, tipo FROM arquivos”;
            $res = mysql_query($qry);

            while($fila = mysql_fetch_array($res))
            {
            print “$fila[titulo]

            $fila[nome] ($fila[tipo])

            Fazer Download

            “;
            }

            o que estou fazendo errado..?

            se vc tiver outra maneira mais simples eu agradeço…

          • Tudo, acredsito que esteja fazendo tudo errado.
            Mais simples? Google, ‘tutorial upload arquivos gravar banco de dados mysql’
            Sua dúvida não diz respeito ao tutorial e confesso tambémq ue seu código está muito confuso.
            O erro que mandou no coment anterior, na verade não é erro, e sim o código… ou seria melhor dizer… erro mesmo.
            Enfim… talvez se me disser em detalhes o que deseja fazer eu possa auxiliar com pelo menos uma lógica mais limpa e simples.
            De qualquer forma, Boa sorte … o google tem diversos resultados para esse esquema que deseja fazer.

          • ROBERTO, mil desculpas a minha ignorãncia e se não mim expresei muito bem,

            realmente e código postado não refere-se ao seu.

            vou tentar se o mais claro possivel pois realmente estou precisando muito dessa ajuda e vindo de um profissional como vc não tem preço.

            1º Com seu código eu conseguir cadastrar e logar os osuários.
            tudo bem…

            ao logar aparece a seguinte menssagem…

            >>
            (Mensagem exemplo)

            ——————————————————————————–

            Bem vindo 6 contabiliza@contabiliza.net.br!
            Você está acessando área restrita para usuários cadastrados!

            Seu nível de usuário é 0.
            Com esse nível, você tem permisão de acesso à algumas áreas exclusivas do site.

            Sair

            >>>
            tudo bem….

            2º Como faço para carregar os arquivos e ligar com cada usuário..?
            os arquivos são PDF, JPEG, etc…

            Obrigado.

          • 1º Ter uma pasta no servidor para onde será enviado os arquiovos através de um form e processado por script de upload
            2º Vc precisa ter uma tabela no banco de dados mysql para armazenar o nome destes arquivos que acabaram de ser salvos na pasta mencionada acima
            3º Nessa tabela que falo deverá ter campos para registrar valores como id do registro que será automátio (autoincrement), id do usuário que pode ser pego no valor da session aberta pelo user logado, conforme tutorial (é esse id que fará a relação dos arquivos com o determinado usuário dono do mesmo ID), nome do arquivo e já seria o sufuciente, pode ainda registrar o nome da pasta dos arquivos para não precisar declara-lo em todos arquivos que for exibir os arquivos, pode registrar a data do registro dos dados tbm.
            Acho que é por aí o caminho @Jario.

  178. Não estou conseguindo resolver estes errros…
    Vi uma pergunta e resposta mas não funcionou…
    Desde já agraedeço.

    Warning: session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /home/zmaisweb/www/novahome/index.php:9) in /home/zmaisweb/www/novahome/conteudo/angulocentral.php on line 2

    Warning: Cannot modify header information – headers already sent by (output started at /home/zmaisweb/www/novahome/index.php:9) in /home/zmaisweb/www/novahome/LG/functions.php on line 7

    • Não se pode dar nenhum tipo de saída html, nem mesmos espaços antes de session_start().
      Já respondi sobre isso aí nos coments e se procurar vai achar uma solução.
      Se quiser dar uma vasculahda no google procure por ob_start() e ob_end_flush()
      Bons estudos

  179. Estou tentando testar seu sistema, mas de cara tenho a MSG
    PHP Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\home\mobilepet\Web\Banco8\cadastra.php on line 54
    PHP Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in E:\home\mobilepet\Web\Banco8\cadastra.php on line 55
    O que pode ser ?

    • Sem saber oque vc fez na linha 54 e 55 não tenho como ajudar.
      Cole aí o cod da linha 50 até a 55.

      Provavelmente a $var à que vc atribuiu mysql_query(“… não é a mesma que utilizou em mysql_fetch_array($var)
      Aguardo
      Bons estudos!

  180. Puxa, que retorno rápido.. Obrigado amigo..
    Eu não mudei nada em seu php, criei o banco da forma que vc falou, mas parece que o comando mysql_fetch_array(): supplied argument is not a valid MySQ , não pe suportado no meu Mysql..

    /* Vamos checar se o nome de Usuário escolhido e/ou Email já existem no banco de dados */

    $sql_email_check = mysql_query(“SELECT COUNT(email_id) FROM usuarios WHERE email=’{$email}’”);
    $sql_usuario_check = mysql_query(“SELECT COUNT(usuario_id) FROM usuarios WHERE usuario=’{$usuario}’”);

    $eReg = mysql_fetch_array($sql_email_check);
    $uReg = mysql_fetch_array($sql_usuario_check);

    $email_check = $eReg[0];
    $usuario_check = $uReg[0];

    //$email_check = mysql_num_rows($sql_email_check);

    Já tentei ver seus tópicos e internet, mas não entendi o erro, conheço um pouco de banco, mas o básico…
    Acho que vc poderia me ajudar em meu projeto, já tenho patente, e se puder me ajudar na parceria do negócio, podemos conversar.. o site é http://www.mobilpet.com.br
    abs
    Marcio
    11 7871-8338 id 84*57382

    • Estranho…
      Quanto a não ser suportado no seu MySQL é impossível… pois é uma função comum e necessária.
      Entrarei em contato.

      ps.: quanto ao site o link que me passou não existe.

      Abraço

  181. Desculpe, passei errado, faltou o e do Mobil, se quiser ligar podemos conversar ainda hoje.. . O projeto é algo mais complexo, o banco precisa ser modificado.. abs Marcio

    • @Marcio, te enviei um email anteriormente. Chegou a receber?
      Da uma olhada no seu email do Hotmail.. cover…
      Quanto ao seu projeto vamos conversar por email também, pelo menos inicialmente.
      Abraço

    • @Marcio respondi por email, mas repasso aqui também para que fique de referência para outras pessoas que possam ter a mesma falta de atenção. Isso é normal.
      Se você verificar melhor o cod do arquivo cadastra.php que me mandou por email, tem um erro na seguinte linha:

      $sql_email_check = mysql_query("SELECT COUNT(email_id) FROM usuarios WHERE email='{$email}'");

      Verifique que na função COUNT() você está fazendo referência ao campo email_id, porém além desse campo não existir, o correto seria fazer referência ao campo usuario_id, afinal a ideia ali é a contagem de IDs que possuem aquele email que foi utilizado no cadastro, ou seja uma verificação para não se repetir cadastros com mesmo email.

      Enfim… fiquei na dúvida e verifiquei se o arquivo ZIP que disponibilizo no final do tutorial estava com esse erro, mas não está.
      Verifiquei o tutorial em si, e também está correto.

      Sendo assim, acredito que se ajustar isso que indiquei, tudo ficará correto pra você.
      Tente aí.
      Bons estudos.

  182. Boa tarde. Primeiramente parabéns pela iniciativa, tem me ajudado muito.
    Consegui testar a maioria das funcionalidades aqui no meu computador e to aprendendo a usar o phpMyAdmin.

    A parte do cadastro funciona ok, ele insere os cadastros na tabela, mas não recebo nenhum e-mail para ativar e assim não consigo fazer login! Mesmo abrindo a tabela e mudando manualmente o valor de “ativado” para 1 ele não reconhece nem faz login nunca!

    Fiz muita confusão? rsrs sabe o que estou fazendo de errado?
    Desculpa a dúvida boba,
    Abraços!

  183. oi boa noite queria sabe como colocar esse arquivo no blog ou se tem como colocar no blog e como er não entendo e como fazer para bloqueia a pagina do blog obrigado espero resposta vlw

    • Olá @Show, primeiramente precisaria saber que blog é, mais especificamente que tipo de sistema de blog, ou seja, blogger, wordpress.com já adianto que não vai rolar aassim tão fácil, pelo menos eu desconheço a possibilidade, mas… sempre tem saída pra tudo, wordpress .org já é mais acessível, pois se tem acesso aos arquivos fontes do mesmo.

  184. Oi Roberto! Nossa, muito obrigada pele post. Me ajudou bastante. Com ele pude aprender várias coisas!
    Bom, eu queria saber se por acaso vc tem um post sobre imprimir noticias cadastradas em tela… é que estou fazendo um TCC e estou empacada nessa parte… e.e’

    Desde já agradeço.
    Att. Midori

  185. Olá, Roberto!

    Gostaría de saber se há como cada usuário ser direcionado para uma página específica ao realizar o login.

    • Olá @Ulíscio, há como fazer sim… porém não vejo a necessidade disso, por isso te pergunto, qual a intenção com esse processo?
      Sei de mil possibilidades do porque, mas dependendo, se for a mais óbica ou outras 890 possibildiades mais inusitadas, ainda não há necessidade desse redirecionamento para cada user para uma página específica. Todos podem ser redirecionadnos para uma mesma página/arquivo e neste arquivo processar para que seja exibido informações relacionadads com o user logado.
      Se deres uma boa lida nos coments vai eprceber que tem muito amterial adicional, dúvias esclarecidas que também podem te auxiliar pelo menos com alguma ideia do que fazer.
      Bons estudos

      • Olá, Roberto!

        Obrigado pela resposta. Na verdade, cada cliente precisaria de sua página por que será exibido relatórios gerenciais de compras, vendas, contas em atraso e links para downloads de documentos. Então para mim, que não compreendo muito bem de programação, seria mais viável que, ao realizar login, cada usuário/ cliente seja redirecionado para uma página específica. Se souberes de algum tutorial do ‘sistemabasico.com.br’ que contenha esclarecimentos sobre minha dúvida e que você possa postar o link aqui, ficaria muito agradecido! Mas de qualquer forma, continuarei pesquisando nos comentários.

        Mais uma vez, obrigado!

        • @Ulíscio, é como eu disse, essa tua necessidade está entre as 890 possibilidades que dispensam página/arquivo específico.
          Você tem um arquivo específico ok? Este servirá de container para organização e exibição do conteúdo de cada user, baseado no ID deste user no banco de dados que estará registrado numa session a partir do login efetuado com sucesso.

          No caso do tuto eu usei como exemplo um arquivo chamado area_restrita.php
          Entenda que do princípio de que se o user está logado, o tutorial ensina que é gravado uma SESSION com o valor ID deste user… esse ID é único, pois é o registro deste user no banco de dados…
          Não importa se é usuário ciclano ou beltrano ou fulano acessando o arquivo area_restrita.php, pois lá só será exibido dados vindos do banco de dados, referentes ao ID do user acessando.
          O que eu ver não é o mesmo que vc vê, entende?
          Sendo assim esses relatórios, links para downloads devem estar registrados em Banco de dados tbm, e relacionadaos com o id do user, assim cada user verá apenas seus relatórios, etc.

          Não necessáriamente apenas um arquivo deve estar atrelado aos dados do usuário, vc pode ter mais de um arquivo para organizar e exibir dados, documentos, fotos, relatórios, links etc, ligados à este mesmo user, pois como a session está registrada com ID dele, enquanto ele estiver logado, não importa a página que ele estiver, poderá ser exibido material relacionadno apenas com este user logado e material público tbm, claro.

          Inclusive pelo site todo vc condiciona ao user o conteúdo, pois para distinguir o material restrito deve condincionar ao fato do user estar logado ou não conforme ensino no tutorial com o arquivo functions.php que tem uma função que faz a verificação. Se está logado, obviamente o ID do user estará pronta pra ser usada e assim condicionar uma consulta SQL na clausula WHERE iduser = ".$_SESSION[iduser]." (não lembro se usei estes nomes de campo e sessions, faça conforme está desenvolvendo aí).
          Espero ter dado uma luz.
          Abraço e bons estudos

          • Bem, lhe sendo bem sincero, acho que essa não seria a maneira mais prática para mim de montar esse sistema de login, visto que tenho pouquíssima instrução nessa área. O jeito mesmo é estudar! Muitíssimo obrigado por sua ajuda; irei analisar o tutorial e tentar adaptá-lo as minhas necessidades.
            Mais uma vez, obrigado!

          • Deixa te explicar @Ulíscio, não vejo forma mais prática. Eu não saberia fazer de outra forma. Qualquer outra forma seria uma gambiarra inviável.
            Imagina a situação de vc ter 1000 usuários… como vc faria para ter 1000 redirecionamentos específicos??
            É que você não tá pegando o espirito da coisa… mas é normal, só não pode desistir… eu não desisti e aprendi um pouco.
            No início tudo era ‘Esperanto’ para mim, eu não entendia nada, porém depois que aprende a ler os códigos o entendimento melhora muito.
            Da forma que indiquei simula infinitos redirecionamentos, tantos quanto for o número de users cadastrados.
            Da mesma fora que se regisdra dados no banco de dados, se consulta os mesmos dados, alterando um pouco a sintaxe (forma de escreve) sql.
            Estou bolando um curso básico de PHP (pago -> Baratinho) e vou ministrar via Web, quem sabe é a solução pra teus problemas.
            Tudo que mencionei sobre essa solução está claro, mas vc precisa achar a ponta do carretel de linha, depois vc desenrola numa boa.
            Fazer pra vc não seria o proprosito, interessante seria o entendimento e ir em frente tirando as dúvidas a cada passo.
            Se for algum trsabalho que tenha que entregar, sugiro a contratação de alguém que possa fazer e te ensinar ao mesmo tempo.
            Fiz isso algumas vezes nos primórdios.
            Bons estudos!

          • Não é bem um trabalho que tenho que entregar. Eu gostaria de integrar esse sistema no site da minha empresa para oferecer mais comodidade aos nossos clientes, oferecendo, por exemplo, a 2ª via dos boletos bancários, notas fiscais e outros documentos.
            Dependendo do valor cobrado pelo curso que você irá ministrar, posso pensar na possibilidade em me inscrever.
            Mas de uma coisa é certa: não irei desistir mesmo de aprender esse conteúdo!
            Desde já agradeço a presteza e a eficiência nas suas respostas e ajudas! Depois podes entrar em contato comigo por email!
            Até logo!

  186. Roberto preciso de sua ajuda.. Primeiramente ADOREI o sistema Parabéns. Bom eu estava testando o sistema e fui me cadastrar para ver ele funcionando, aconteceu que ele cadastra no banco de dados porem ele não envia o email.(Pelo menos eu não o encontrei aqui.)
    E tambem gostaria de saber se tem algum problema em usar o EasyPHP?? Porque é o eu estou acostumada a usar e …
    Obrigada

    • Oi @Jaqueline vou responder à todas as tuas questões apenas nesse coment ok?
      Quanto ao email, se der uma analisada em coments anteriores pode achar uma solução viável, muitos passam por esse problema de acordo com o servidor que utilizam. Ainda mais se estiver testando localmente, pois vai precisar de um servidor de envio, acredito que a utilização do phpMailer seja a solução amsi apropriada ao invés da função mail().
      Já postei um tutorial de envio de email com PHPMAILER localmente aqui no site… podes utiliza-lo para envio local e com adaptações simples pode usar remotamente também.

      Quanto ao EasyPHP, nunca utilizei nenhum pacote integrado destes, e não recomendo nem pra iniciantes. Mas se ainda assim preferir utilizar, acredito que não terá problemas nenhum se o mesmo estiver bem instalado e funcionando perfeitamente, e nessa situação de utilização local do sistema, para estudo ou qualquer outra forma, se faz necessário o PHPMAILER e a forma que ensino no tutorial citado acima.

      Quanto ao erro gerado na linha 194, se puder postar a menssagem de erro na integra eu agradeço, só assim podrerei ajudar, poisa esse erro foi gerado pelo teu cod e não o apresentado no tutorial, sendo assim não consigo reproduzi-lo.

      Fico no aguardo.
      Bons estudos!

  187. Muito obrigada por estar me ajudando primeiro de tudo né. :)
    Bom os erros que aparecem são esses.
    Quando eu vou cadastrar no formulario
    Notice: Undefined variable: pass in H:\Jaqueline\Login e Senha\sistema-cadastro-login-sessions-php-mysql\cadastra.php on line 118

    Warning: mail(): Failed to connect to mailserver at “127.0.0.1″ port 25, verify your “SMTP” and “smtp_port” setting in php.ini or use ini_set() in H:\Jaqueline\Login e Senha\sistema-cadastro-login-sessions-php-mysql\cadastra.php on line 194
    Foi enviado para seu email – ( o email que eu digitei ) um pedido de confirmação de cadastro, por favor verifique e sigas as instruções!
    Mas ele não aparece. :(
    Ai ele pega e registra a senha no banco, tudo direitinho.
    Quando eu peço pra ele gerar uma nova senha aparece isso:
    Notice: Undefined variable: pass in H:\Jaqueline\Login e Senha\sistema-cadastro-login-sessions-php-mysql\gerar_nova_senha.php on line 60

    Warning: mail(): Failed to connect to mailserver at “127.0.0.1″ port 25, verify your “SMTP” and “smtp_port” setting in php.ini or use ini_set() in H:\Jaqueline\Login e Senha\sistema-cadastro-login-sessions-php-mysql\gerar_nova_senha.php on line 93
    Sua nova senha foi gerada com sucesso e enviada para o seu email!
    Por favor verifique seu email!
    Ele é alterada no banco, mas não chega nada tambem no email. HELP Please.
    Obrigada e desculpa estar te pertubando, eu fiquei muito tempo analisando esse codigo até uma hora que não deu mais…

    • @Jaqueline teu problema na verdade é simples… vamos por partes.
      A mensagem de ‘Notice:’ não é um erro que faz o script falhar, é literalemtne uma notificação de que, no caso, uma variável está sendo chamada para exibir seu valor sem ter sido testado se a variável existe e que a mesma temnha um valor, mesmo que vazio ou nulo. Ocorre porque o tuto é de anos atrás e os servidores e configurações do PHP ignoravam isso.
      Para resolver basta dar uma lida em alguns coments acima do teu que vai achar alguma ajuda, pois já respondi diversas vezes sobre isso.

      Quanto ao ‘Warning: mail():’ esse sim é um erro, está te avisando que a função mail() não pode ser processada justamente porque vc está testando o sistema localmente e como você não tem um server SMTP para envios de email configurado no seu servidor, esse erro será gerado sempre. Na minha resposta anterior eu havia falado sobre a utilização da classe phpMailer para envio autenticado de emails de forma local usando emails do gmail… da uma olhada nos coments acima tbm, já respondi diversas vezes sobre isso e talvez possa achar alguma conversa que ajude um pouco mais.

      Bons estudos.

  188. olá, gostaria se possível, ajuda com um trabalho de faculdade, como dicas e sugestões do que fazer para:
    criar um site fictício com os seguintes requisitos:
    1. Área administrativa (login de acesso) para inserção, edição e exclusão de dados.
    2. Apresentação visual (layout) utilizando Tableless, ou seja, Folhas de Estilos, CSS. NÃO utilizem tabelas (table) para criar o layout.
    3. Banco de Dados para a manipulação dos dados e dos usuários que terão acesso à área restrita (obrigatoriamente Firebird – não será aceito MySql ou qualquer outro SGBD).
    4. Área administrativa que permita a inserção, edição e exclusão das notícias.
    5. Formulário de Fale conosco, não necessariamente precise estar funcionando,
    6. Upload de imagens ou arquivos (pode-se fazer o upload de foto no cadastro de usuários, por exemplo).
    7. Utilize a linguagem JavaScript para validar os campos dos formulários (Fale Conosco e cadastros).
    8. Topos, rodapés, laterais e o arquivo de conexão que se repetem em várias páginas devem ser criados uma única vez e devem ser incluídos através do método include, nas páginas que o utilizam.
    Não sei por onde começar, a resolver, por isso estou procurando ajuda.

  189. ROBERTO tudo bem.
    kara mais uma vez estou precisando de sua ajuda…

    1º tenho essa função para ger senha (seu tutorual) como faço um formulário para que o usuário possa alterar essa senha a seu gosto…?

    // Se tudo OK vamos gerar uma nova senha e enviar para o email do usuário!

    function makeRandomPassword(){

    $salt = “012345678901234567890123456789″;
    srand((double)microtime()*1000000);

    $i = 0;

    while ($i <= 5){

    $num = rand() % 33;
    $tmp = substr($salt, $num, 1);
    $pass = $pass . $tmp;
    $i++;

    }

    return $pass;

    }

    obrigado..

    • @Jairo essa função é pra gerar senha randômica e automática.
      Para fazer como vc deseja, deverá além de desativar a utilização dessa função, alterar varios arquivos interligados.
      Se não fizer em todos os arquivos necessários obterá erros diversos.

      Deves alterar todos arquivos relacionados com a senha, tanto o arquivo de cadastro como o arquivo de gerar nova senha, como tbm o arquivo de verificar usuário quando é feito o login e mais alguns.
      Perceba também que além da senha ser gerada automaticamente é passado por uma função nativa do PHP, no caso a MD5(), que criará um hash da string, ou seja uma nova string de 32 caracteres como se fosse uma criptografia da mesma, porém sem caminho inverso, ou seja, uma vez esquecida a senha, só gerando outra. Não recomendo retirar essa função do script por motivos de segurança.

      Para alterar tais funcionalidades que deseja, precisa prmeiro entender bem todo o código do sistema e não terá problemas.
      Faça uma leitura e procure captar como ele funciona e o que faz oque.

      Entenda que a cada login que um user faz o dado SENHA entrado no input do form é trasnformado nesse hash de 32 caracteres e só depois comparado com o que está no banco de dados, pois o que está lá é apenas o hash da senha gerada no cadastro.

      - No Form de cadastro então deverá adicionar um campo para senha.
      - No arquivo cadastrar.php deverá retirar aquela função de gerar senha e passar o que vier do form enviar para o user por email e passar pela MD5() e gravar no bd.
      - No arquivo de gerar nova senha deverá solicitar o email como já é feito, enviar para o user um link para este gerar uma nova senha e nesse arquivo oferecer o campo de senah para ele crair uma nova.
      - Ajustar o arquivo que receberá essa nova senha, retirando a função de gerar senha, envair a senha para o user e passar pelo MD5() e gravar no bd.
      - No arquivo que verifica o login, e todos os ouitros que mencionaei deverá sempre utilizar o MD5() como já é feito na semnha gerada automaticamente, porém agora será na senha criada manualmente.

      Obs.: Como é criado um hash de 32 caracteres para senha,, obrigatóriamente o campo senha no banco de dados deverá ter o valor de VARCHAR 32

      Se resolver numa ação infeliz de retirar a função MD5(), deverá dar atenção a todos esses arquivos que mencionei acima.

      Espero que esse coment ajude a todos que desejam fazer essa alteração e não sabem como começar ou já tentaram e não sabem porque deu errado.
      Se quiser pagar um RedBull eu agradeço ;)
      Bons estudos!

  190. Um dos tutoriais melhor explicados que já vi. O funcionamento está perfeito. Já encontrei vários tutoriais onde se tem a impressão de que não se quer que se aprenda, o código não funciona, etc. Situação totalmente oposta ao deste. Agradeço por disponibilizá-lo.

  191. como e onde vou dizer o que o nível de permissão 0 é para X funções e o nível de permissão 1 é para Y funções?

    • Olá @Ednilson.
      A questão dos níveis foi algo que não entrei muit no mérito neste tutorial, inclusive citei que era algo a se desenvolver pelo próprio usuário.
      Legal que se interessou e por tanto segue alguma dica pra iluminar o caminho rs* :
      O conteúdo a ser exibido de acordo com o nível vc pode definir numa condicional em relação a session do nível do usuário que foi gravada no momento do login com sucesso.
      Perceba duas coisas:
      - No arquivo de verificação de login grava entre algumas sessions, também a do nível do user.
      - No arquivo functions.php é verificado apenas se a session usuario_id foi gravada.

      Melhorando essa função para verificar o nivel de user vc pode trabalhar a questão de exibição do conteúdo
      Voce pode também, de forma mais fácil, criar uma segunda função de verificação com as características que citei acima, verificando o nível, dando outro nome pra essa função e em todas as páginas que quiser que apenas o nível específico condicionado na função acesse tal página. Para isso deverá colcoar no topo dos arquivos essa função nova que criou ao invés da função de verificação simples, session_checker(). Não é dificil… conseguiu pegar o raciocínio?
      Nesta função vc pode verificar se o user tem o nível permitido e redirecionar para uma página que o nível permita caso não tenha.
      Quando o user logado sem nível pra acessar determinada área tentar entrar, exibe uma mensagem pra ele negando o acesso e redirecionando pra Home.
      Apenas uma ideia, ams nem sei se aplica às tuas.
      Bons estudos!

  192. Ola Roberto, já tem um tempo que “programo” para web, mas só HTML e CSS. E a cada dia que passava vinha notando que tinha que aprende ruma linguagem de programação. (Já que HTML ainda não é considerado linguagem de programação). Bom, na verade tenho Duas perguntas “OFFTOPIC” para você.

    Tem algum material que você recomende a leitura, fora claro seus tutoriais?
    Video aulas tem tambem?

    Quanto a seu script, tenho uma pergunta, eu gostaria de ter mais dois campos no formulario, um para confirmar o email, e outro para confirmar a senha.

    Neste caso la no cadastrar.php acima de onde você faz a verificação se os campos estão vazios ou não, eu adcionei:
    if ($confsenha != $senha){
    echo “Confirme sua Senha! Elas não batem”;
    }
    Mas ele exibi pra mim o erro, e passa mesmo assim o Form. Como impedir que ele passe a validação?

    Desde já muito obrigado e Parabens pelo tutorial.

    • Olá @Gregory…
      Primeiro recomendo o básico e nessa ordem:

      >> Lógica de programação >> Aprender a interpretar o código racionalmente, o que cada coisa faz >> começar alterar alguns códigos prontos para teu benefício e necessidade >> escrever teus próprios sistemas

      Obviamente em cada etapa dessas tem que se aprofundar um pouco.
      Entenda linguagem de programação como um novo idioma que tem suas características próprias e algumas copiada de outras linguagens.
      Com o tempo, dependendo do teu entusiasmo e envolvmento, estará louco como eu e muitos outros que trabalham com isso rs*
      Poderia listar muitos tutoriais, livros, video tutoriais aqui, mas posso resumir em apenas dois lugares:

      Google e PHP.NET

      E claro, acompanhar os tutos aqui do site. ;)
      Qualquer coisa só falar, se tiver ao meu alcance te ajudo.
      Bons estudos

  193. Boa tarde, gostaria de saber como coloco como BD_HOST sendo que seria uma url?
    exemplo

    academico.fumep.edu.br/phpmyadmin

    teria como?

  194. Boa tarde
    Consegui arrumar a autenticação da url

    agora estou com problemas para configurar o enrereço de smtp pelo qual será enviado o e-mail do usuario cadastrado

    seria apenas no arquivo cadatra.php? e quais os parametros para a configuração?

    Fico no aguardo

    Obrigado desde já

  195. boa tarde roberto estou utilizando este cadastro que colocasse, mas ta dando um erro que quando eu clico para confirmar o email ele nao esta aparecendo a pagina de login, o que pode ser da pagina nao pode ser exibida

    • @Roger, vc leu com atenção o tutorial ou só copiou e colou?
      Tem cereteza que o link de ativação que vai pro email está com os dados do seu domínio ou apontando pra arquivo de fato existente?
      Enfim… sem uma bola de cristal não tenho como adivinhar o que ocorreru… estou apenas ‘hipoteticando’
      Me dê mais detalhes, ams antes refaça, releia, leia ops coments todos que já rolaram… talvez ache respostas pra sua dúvda.
      Bons estudos!

  196. Roberto tudo bem..?
    como faço para quando o usuário se cadastrar, esse formuláro enviar tambem um emal para o adminstrador avisando que alguem se cadastru no ssite.. segue parte do código..
    Obrigado….
    ha… passa o nº de sua conta para que possa dazer om depósito pra você, para ajudar em seus códigos..
    manda no meu e-mail..

    // Enviar um email ao usuário para confirmação e ativar o cadastro!

    $headers = “MIME-Version: 1.0\n”;
    $headers .= “Content-type: text/html; charset=iso-8859-1\n”;
    $headers .= “From: Contabiliza Consultoria Contábil e Tributária”; // TEU DOMÌNIO E TEU EMAIL
    $subject = “Confirmação de cadastro – http://www.contabiliza.net.br“;
    $mensagem = “Prezado $nome. CNPJ: $cnpj,

    Obrigado pelo seu cadastro em nosso site,
    http://www.contabiliza.net.br!

    Para confirmar seu cadastro e ativar sua conta, podendo assim acessar áreas exclusivas,
    por favor clique no link abaixo ou copie e cole o link na barra de endereço do seu navegador.


    http://www.contabiliza.net.br/cadastro/ativar.php?id=$usuario_id&code=$senha

    Após a ativação de sua conta, você poderá ter acesso ao conteúdo exclusivo,
    efetuando o usuario com os dados abaixo:

    Usuario: {$usuario}

    Senha: {$senha_randomica}

    Obrigado!

    Contabiliza Consultoria Contábil e Tributária LTDA.

    Esta é uma mensagem automática, por favor não responda!”;

    mail($email, $subject, $mensagem, $headers);

    echo “Foi enviado para seu email – ( “.$email.” ) um pedido de confirmação de cadastro,
    por favor verifique e sigas as instruções!”;
    }

    }else{

    echo “ERRO:“;
    echo “O endereço de email [ ".$email." ] que está tentando utilizar não é válido.”;
    echo “Por favor, utilize um email válido.”;
    include “formulario_cadastro_pj.php”;

    }

    }

    • Olá @Jario, basta repetir o bloco de envio que você citou, porém alterando o nome das variáveis e alterando o corpo da mensagem.
      Lembrando que o destinatário para esse segundo bloco de envio não será $email e sim o seu email, o qual deseja receber a mensagem.
      Qualquer coisa só falar.
      ps.: Te enviei um email com os dados.
      Bons estudos!

      • Roberto tudo bem..?
        Kara preciso de mais uma ajuda sua.. ou duas..

        1ª Si usuário cadástar e tentar logar sem ative > vc precisa ativer seu logim….

        2ª Si usuário cadástar e acessar mas após a consulta no BD não tiver arquivos para o mesmo > não encontrado arquivos..

        desde já muito obrigado..

          • Pode ser muito simples mas não estou conseguindo inserir um mensagem se o resultado da consulto for =0, (não encontrar arquivos) uso o código para consulta.

            <?php
            /*
            require("config.php");

            $qry = "SELECT usuario_id, nome, arquivo FROM info WHERE usuario_id = $usuario_id";
            $res = mysql_query($qry);

            while($fila = mysql_fetch_array($res))
            {
            print "$fila[arquivo]

            “;

            }*/
            ?>

            *********************************************************************
            este não consigo onde que insiro um if para que se o cliente estiver cadastrado mas não estivar ativado > usuario não ativado.

            code
            /*
            else{

            $senha = md5($senha);

            $sql = mysql_query(“SELECT * FROM usuarios WHERE usuario=’{$usuario}’ AND senha=’{$senha}’ AND ativado=’1′”);
            $login_check = mysql_num_rows($sql);

            if($login_check > 0){

            while($row = mysql_fetch_array($sql)){

            foreach( $row AS $key => $val ){

            $$key = stripslashes( $val );

            }

            $_SESSION['usuario_id'] = $usuario_id;
            $_SESSION['nome'] = $nome;
            $_SESSION['razao_social'] = $razao_social;
            $_SESSION['cnpj'] = $cnpj;
            $_SESSION['email'] = $email;
            $_SESSION['nivel_usuario'] = $nivel_usuario;

            mysql_query(“UPDATE usuarios SET data_ultimo_login = now() WHERE usuario_id =’{$usuario_id}’”);

            //echo “”;
            header(“Location: area_restrita.php”);
            //header(“Location: ../links.html”);

            }

            }
            else{

            echo “Você não pode logar-se! Este usuário e/ou senha não são válidos!
            Por favor tente novamente!”;

            //include “formulario_login.html”;

            }
            }
            */
            ?>

            obrigado..

          • Realmente tudo muito confuso…

  197. Olá

    Muito bom o script! Te enviei um contato para conversarmos sobre um trabalho que preciso que faça para meu site! (combinar preço)

    Abraços

  198. Boa Noite Roberto,

    Quando importei o SQL deu o seguinte erro:

    Erro
    consulta SQL:

    { \ rtf1 \ ansi \ ansicpg1252 \ deff0 \ deflang1046{ \ fonttbl{ \ f0 \ fswiss \ fcharset0 Arial;

    Mensagens do MySQL :

    #1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘{\rtf1\ansi\ansicpg1252\deff0\deflang1046{\fonttbl{\f0\fswiss\fcharset0 Arial’ at line 1

    • Ok @Adilson, irei colocar um novo arquivo sql na opção de download. Ocorre que quando salvei o arquivo SQL não fiz corretamente e cria essa codificação no mesmo.

      Para te adiantar o lado sugiro o seguinte: No próprio tutorial, mais precisamente no bloco de código referente a criação da tabela no banco de dados, vc pode dar 2 cliques sobre a caixa do codigo e automaticamente ele selecionará o conteúdo e assim poderá copiar e colar diretamente dentro do ‘textarea’ para SQL do phpMyadmin e criar a tabela sem erros.
      Qualquer coisa, só dizer.
      Bons estudos!

  199. Valeu Roberto …Muito obrigado deu certo …

  200. Esse Script n funfo com Xampp aqui

  201. Roberto , coinas mo faço para determinar ara restrita na paginas que eu quero , qual codigo devo colocar?

    Abs

    • Olá @Adilson, siga o exemplo do arquivo artea_restrita.php
      Ele é o exemplo vivo de um arquivo restrito à usuários logado, perceba como o topo é diferente, … melhor ainda… releia com atenção o que eu tento ensinar no tutorial.
      Releia os coments todos, tem muita dica.
      Bons estudos!

  202. exelente tutorial , parabens ,

    mas eu nao percebi como é que se faz aquilo do banco de dados .

  203. como voce coloca estos codigos no site , como voce fez no cadastro DEMO , eu quero por uma imagem de fundo e o loguin ma mesma pagina

  204. Olá Roberto!

    Em primeiro lugar, parabéns pelo trabalho!
    Em segundo lugar, parabéns pelo site!
    Em terceiro lugar, parabéns pelo tutorial!

    Em quarto lugar, por favor veja o meu apelo…
    Estou em uma encrenca danada!

    Sei que não tem nada a ver com isso mas espero que me ajude!

    Gostaria de cadastrar no banco de dados os valores $nome, $sobrenome do script “cadastrar.php” para poder utilizar como uma variaveis válida no futuro.

    cadastrar é fácil, consegui utilizando um textarea, acontece que quando busco do banco de dados para então utilizar como variável válida, ele não lê o conteúdo da variável, e sim somente a palavra normamente ($nome)($sobrenome).

    A idéia é fazer uma recuperação de senha com uma mensagem personalizada por um administrador, com a mensagem precadastrada no banco de dados com todas as variáveis.

    Acontece que quando vou enviar, no email destino aparece ($nome) ($sobrenome) sem o valor da variável.

    Estou utilizando a classe de envio PHPmailer com as orientações que pegeui neste site (parabéns, tambem é um potimo tutorial).

    Será que teria como enviar o valor da variável sem que apareça no e-mail como se fosse uma palavra comum e sim com o seu valor?

    Já tentei cabeçalho html, função addslashes, strislashes, striptags, htmlspecialchar, trim, enfim…
    Ao meu conhecimento, não tenho mais o que tentar.

    • Olá @Tinho, acho que entendi o que deseja, porém não vejo a necessidade de fazer desta forma…
      Como não tenho certeza se entendi o que necessita, não posso me precipitar na sugestão.
      Mas tenha como princípio que se vc tem um user cadastrado e deseja enviar uma mensagem pra ele, então vc deve apenas consultar o campo ‘nome’ e ‘sobrenome’ deste user que por padrão eu ensinei neste tutorial.

      Não entendi a dificuldade :|

      Caso tenha uma mensagem padrão que quer utilizar para envio de newsletter, comunicados para os users cadastrados, é outra coisa, mas tão simples como.
      Me confirme se é isso qeu falei por último que dou umas dicas.
      Bons estudos!

      • Olá Roberto,

        Estou feliz que você está disposto a me ajudar…

        Na verdade, o que você falou realmente faz sentido, bastaria consultar os campos no banco de dados e então enviar.
        Mas…

        1- Imagine que um administrador deseje personalizar a mensagem de envio de recuperação de senha,
        2- Então, esta mensagem está cadastrada em um banco de dados, já com as variáveis prontas para envio. Tipo $nome, $sobrenome…
        3- Seria correto afirmar que estas variáveis seriam lidas/reconhecidas ao serem inseridas em uma página (mesmo com formatação HTML)??

        Para ser mais claro, veja um exemplo prático.

        $nome = ‘Alguma’;
        $sobrenome = ‘Coisa’;

        $mensagem = $msg;
        Veja: a variável $mensagem tem o valor de $msg, que está vindo do banco de dados já com as variáveis $nome e $sobranome.

        Na verdade, as variáveis $nome e $sobrenome, têm seu valor como mostrado acima, eu só achava que, esta sendo exibida em uma string, com dados do banco de dados
        e com as variaveis $nome e $sobrenome no banco, poderiam recuperar o seu valor. Pois o valor destas variáveis estão sendo atribuidas (‘Alguma’, ‘Coisa’).

        NO BANCO DE DADOS…

        Prezado $nome $sobrenome,
        Conforme solicitado, veja abaixo seus dados de acesso no site (site).

        NO SCRIPT…

        $nome = ‘Alguma’;
        $sobrenome = ‘Coisa’;

        $mensagem = $msg; (pre criada no banco de dados).

        Espero que me ajude!

        • Tinho acho que entendi… sendo assim recomendo a utilização da função do php chamada str_replace() para substituir uma referencia pelo real nome.

          Exemplo:

          VINDO DO BANCO DE DADOS…

          $msg = “Prezado {nome} {sobrenome},
          Conforme solicitado, veja abaixo seus dados de acesso no site (site).”;

          MONTANDO A MENSAGEM FINAL NO SCRIPT…

          $nome = ‘Alguma’;
          $sobrenome = ‘Coisa’;

          $mensagem = str_replace(‘{nome}’, $nome, $msg); // substituindo {nome} pelo valor de $nome
          $mensagem = str_replace(‘{sobrenome}’, $sobrenome, $mensagem); // substituindo {sobrenome} pelo valor de $sobrenome

          // agora é só enviar

          Veja se isso ajuda.
          Bons estudos!

  205. Muito bom o script teria como, deixar isto mais padronizado tipo tem o nome do campo logo após vem o campo tem como deixar tudo alinhadinho ?
    Exemplo

    Texto Campo
    Texto balbalbla Campo
    Texto balbalbal Campo

  206. Seu HTML não pode ser aceito: A tag não está fechada: FONT oque faço para funciona ?

    • Amigo, para funcionar, basta vc corrigir o SEU html.
      Se isso qeu vc escrevu acima é a mensagem de erro que apareceu pra você, então siga a instrução da mensagem pra encontrar o erro e corrigi-lo.
      Bons estudos!

  207. Gente urgente como eu faço para configurar um banco de dados ja existente na web?

  208. muito obrigado, ótimo tutorial.
    funcionou 100%!

  209. BOA NOITE NOITE!!

    SEU TUTORIAL É MUITO BOM…………MAS JÁ TO UM TEMPO TENTANDO RESOLVE ESSE ERRO E NÃO CONSIGO

    DA UMA AJUDINHA AI…..BRIGADA

    Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘root’@’localhost’ (using password: YES) in C:\Program Files (x86)\EasyPHP-5.3.9\www\config.php on line 7

    Warning: mysql_select_db() [function.mysql-select-db]: Access denied for user ”@’localhost’ (using password: NO) in C:\Program Files (x86)\EasyPHP-5.3.9\www\config.php on line 8

    Warning: mysql_select_db() [function.mysql-select-db]: A link to the server could not be established in C:\Program Files (x86)\EasyPHP-5.3.9\www\config.php on line 8

    • Isso tem haver com sua conexão com o banco de dados.
      2 hipoteses… você não colocou o include para o arquivo config.php indicando o caminho correto OU você não alterou os dados de conexão do arquivo pelos seus dados.

  210. BOA TARDE!!

    COLOQUEI O INCLUDE….E COLOQUEI OS DADOS DO BANCO DE DADOS…..NÃO DA MAIS ERRO…PORÉM FICA TUDO BRANCO COMO SE NÃO TIVESSE NADA…..JA REFIZ O BANCO DE DADOS….E O CONFIG.PHP MAS NÃO APARECE NADA…..JA TO ENLOQUECENDO…..PRECISO ENTREGA MEU TCC SABADO…..E NÃO AXO A SOLUÇÃO SE TEM COMO ME AJUDAR ….AGRADECIDA

    • Oque fica em branco? Em que parte ?? quando tu faz oque que fica em branco??
      Posso tentar te ajudar, mas vc tem que me ajudar primeiro a poder te ajudar… entendeu?
      Outra coisa… TCC pra que? Qual faculdade está terminando?

      • criei um site em php com o dreamweaver, em contatos preciso criar um newslestter…. ….em contatos .php coloquei ……quando rodo o site em localhost quando clico no link conatos fica tudo em branco…….antes quando o conf.php estava errado aparecia os erros agora não aparece nada…..

        o tcc é pra o curso técnico em informática

      • obs: “em conatos.php coloquei um include para config.php”

      • boa noite!!

        LI os comentarios e consegui resolve meus erros…..
        porém vi que para essa não aparecer essas noticias tenque ir no php.ini e configura-lo
        ja fiz isso tb mas não sai preciso tira-las tem outra forma???
        elas aparecem assim que carrego a pagina.

        preciso so mais dessa ajudinha….

        Notice: Undefined variable: nome in C:\Program Files (x86)\EasyPHP-5.3.9\www\cadastrar.php on line 5

        Notice: Undefined index: sobrenome in C:\Program Files (x86)\EasyPHP-5.3.9\www\cadastrar.php on line 6

        Notice: Undefined index: email in C:\Program Files (x86)\EasyPHP-5.3.9\www\cadastrar.php on line 7

        Notice: Undefined index: usuario in C:\Program Files (x86)\EasyPHP-5.3.9\www\cadastrar.php on line 8

        Notice: Undefined index: info in C:\Program Files (x86)\EasyPHP-5.3.9\www\cadastrar.php on line 9

        meu cadastra ta assim:
        $_POST['nome'] = trim($_POST['nome']);
        $_POST['sobrenome'] = trim($_POST['sobrenome']);
        $_POST['email'] = trim($_POST['email']);
        $_POST['usuario'] = trim($_POST['usuario']);
        $_POST['info'] = trim($_POST['info']);

        • 2 coisas Sil…

          1º No php.ini deve definir a diretriz referente aos Warnings e Notices da seguinte forma para não ser exibido nenhum deles:

          display_errors = off

          2º Essa prezepada que tu fez ali com o que vem do form está errado.
          Por favor leia o tutorial com atenção e perceberá que copiou errado.

          Bons estudos

  211. Saudações! As suas dicas me pareceram as mais próximas do que preciso. Porem nao consigo fazer algo que deve ser magico, ou seja fácil depois que aprender o truque.
    Estou tentando usar sessões para uma administradora de condomínios.
    Meu formulário tem usuário, senha, condomínio, nível de acesso.
    Gostaria que qdo o usuário colocasse o nome do condomínio e se logar ele seja direcionado para a pagia restrita do condomínio dele. Poderia me ajudar com este problema. Desde já agradeço

  212. Bom dia!
    Ao tentar efetuar um cadastro apareceu a seguinte mensagem:

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/sterssi1/public_html/cadastra.php on line 54

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/sterssi1/public_html/cadastra.php on line 55
    No database selected

    Você pode me auxiliar?

    • Olá @Marcio.
      Basta selecionar o banco de dados
      Se já o fez… deve ter feito errado, … de atenção ao config.php que explico no tutorial.
      Veja se o caminho para ele está correto.
      Veja inclisive se tem um banco de dados no seu servidor.
      Qualquer coisa fala aí
      Bons estudos!

      • Bom dia Roberto!
        Tentei novamente, mas acho que sou mais burro do que pensava… Vamos ver se você pode me auxiliar…

        Usando o phpmyadmin:
        Criei um banco de dados com o nome: sterssi1_usuarios
        Criei um usuário com o nome sterssi1_sterssi

        Porém ao tentar configurar o config.php não obtive sucesso.
        Segue abaixo o meu config.php:

        <?php

        define('BD_USER', 'sterssi1_sterssi'); // USE O TEU USUÁRIO DE BANCO DE DADOS
        define('BD_PASS', '000000'); // USE A TUA SENHA DO BANCO DE DADOS
        define('BD_NAME', 'sterssi1_usuarios'); // USE O NOME DO TEU BANCO DE DADOS

        mysql_connect('localhost', BD_USER, BD_PASS);
        mysql_select_db(BD_NAME);

        Será que eu deveria mudar algo na linha mysql_connect('localhost', BD_USER, BD_PASS);

        Tenho um dominio proprio e gerencio ele pelo CPNEL.

        Peço desculpas pela minha ignorancia, mas se puder auxiliar, agradeço!

        Atenciosamente,

        Marcio

        • Olá @MArcio, pelo que percebi o seu config.php está correto.
          Você está incluindo ele nas páginas que intereagem com banco de dados?

          include "config.php";

          Outra possibilidade é o caminho dele estar incorreto…

          Não funcionará se por exemplo o config.php estiver na raíz (www/) e o arquivo o qual você usa o include estiver em outro diretório e vice-versa.

          Nesse caso funcionará apenas se indicar o caminho corretamente.

          Exemplo:
          O config.php está na raíz e o arquivo que processa a ação está em /diretorio/ então esse arquivo que processa a informação deverá apontar o caminho para o config.php de forma correta

          include "../config.php"; // assim, indica que ]o arquivo está um nível acima do diretório. Se tiver 2 níveis seria ../../config.php

          No caso inverso, onde o arquivo que processa a ação está na raíz e o config.php em um outro /diretorio, seria assim o include:

          include "diretorio/config.php";

          @Marcio, leia com atenção as dicas e veja se faz sentido.
          Qualquer coisa volte a perguntar.

          Bons estudos!

          • Boa noite Roberto!

            Em primeiro lugar gostaria de agradecer pela atenção que tem disponibilizado não só para mim, mas para todos os que estão com dificuldades.

            Bom, tenho o site http://www.comerciodemarau.com.br e coloquei todos os arquivos aqui disponibilizados na pasta public_html, desta forma, bastga digitar o dominio/nome do arquivo aqui disponibilizado.php para acessar as páginas. Porém não obtive sucesso…

            O erro que dá o tentar cadastrar um usuário é o seguinte (http://www.comerciodemarau.com.br/formulario_cadastro.php):

            Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/sterssi1/public_html/cadastra.php on line 54

            Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/sterssi1/public_html/cadastra.php on line 55
            No database selected

            Segue abaixo o meu arquivo cadastra.php :
            <?php

            include "config.php";
            include "functions.php";

            $nome = trim($_POST['nome']);
            $sobrenome = trim($_POST['sobrenome']);
            $email = trim($_POST['email']);
            $usuario = trim($_POST['usuario']);
            $info = trim($_POST['info']);

            /* Vamos checar algum erro nos campos, mas tenha em mente que existem formas bem mais eficientes de tratar os dados que são enviados ou não pelos campos do formulário */

            if ((!$nome) || (!$sobrenome) || (!$email) || (!$usuario)){

            echo "ERRO: Você não enviou as seguintes informações requeridas para o cadastro! “;

            if (!$nome){

            echo “Nome é um campo requerido. “;

            }

            if (!$sobrenome){

            echo “Sobrenome é um campo requerido. “;

            }

            if (!$email){

            echo “Email é um campo requerido.”;

            }

            if (!$usuario){

            echo “Nome de Usuário é um campo requerido. “;

            }

            echo “Preencha os campos necessários abaixo: “;

            include “formulario_cadastro.php”;

            }
            else{

            /* Vamos checar se o nome de Usuário escolhido e/ou Email já existem no banco de dados */

            $sql_email_check = mysql_query(“SELECT COUNT(usuario_id) FROM usuarios WHERE email=’{$email}’”);
            $sql_usuario_check = mysql_query(“SELECT COUNT(usuario_id) FROM usuarios WHERE usuario=’{$usuario}’”);

            $eReg = mysql_fetch_array($sql_email_check);
            $uReg = mysql_fetch_array($sql_usuario_check);

            $email_check = $eReg[0];
            $usuario_check = $uReg[0];

            if (($email_check > 0) || ($usuario_check > 0)){

            echo “ERRO - Por favor corrija os seguintes erros abaixo: “;

            if ($email_check > 0){

            echo “Este email ( “.$email.” ) já está sendo utilizado.Por favor utilize outra conta de email! “;

            unset($email);

            }

            if ($usuario_check > 0){

            echo “Este nome de usuário ( “.$usuario.” ) já está sendo utilizado.Por favor utilize outro nome de usuário!”;

            unset($usuario);

            }

            echo “”;
            include “formulario_cadastro.php”;

            }
            else
            {

            $email = strtolower(trim($_POST['email']));
            $char = “@”;
            $pos = strpos($email, $char);

            if ($pos === false){

            echo “ERRO:“;
            echo “O endereço de email [ ".$email." ] que está tentando utilizar não é válido.”;
            echo “Por favor, utilize um email válido.”;
            include “formulario_cadastro.php”;

            }else{

            $v_mail = verifica_email($email);

            if ($v_mail){

            /* Se passarmos por esta verificação ilesos é hora de finalmente cadastrar
            os dados Vamos utilizar uma função para gerar uma senha randômica */

            function makeRandomPassword(){

            $salt = “abchefghjkmnpqrstuvwxyz0123456789″;
            srand((double)microtime()*1000000);

            $i = 0;

            while($i <= 7){

            $num = rand() % 33;
            $tmp = substr($salt, $num, 1);
            $pass = $pass . $tmp;
            $i++;

            }

            return $pass;

            }

            $senha_randomica = makeRandomPassword();

            $senha = md5($senha_randomica);

            // Inserindo os dados no banco de dados

            $info = htmlspecialchars($info);

            $sql = mysql_query("INSERT INTO usuarios (nome, sobrenome, email, usuario, senha, info, data_cadastro)
            VALUES('{$nome}', '{$sobrenome}', '{$email}', '{$usuario}', '{$senha}', '{$info}', now())")
            or die( mysql_error() );

            if (!$sql){

            echo "Ocorreu algum erro ao criar sua conta, por favor entre em contato com o Webmaster.";

            }
            else {

            $usuario_id = mysql_insert_id();

            // Enviar um email ao usuário para confirmação e ativar o cadastro!

            $headers = "MIME-Version: 1.0\n";
            $headers .= "Content-type: text/html; charset=iso-8859-1\n";
            $headers .= "From: http://www.comerciodemarau.com.br – Webmaster”; // TEU DOMÌNIO E TEU EMAIL

            $subject = “Confirmação de cadastro – http://www.comerciodemarau.com.br“;
            $mensagem = “Prezado $nome $sobrenome,

            Obrigado pelo seu cadastro em nosso site,
            http://www.comerciodemarau.com.br!

            Para confirmar seu cadastro e ativar sua conta, podendo assim acessar áreas exclusivas,
            por favor clique no link abaixo ou copie e cole o link na barra de endereço do seu navegador.


            http://www.comerciodemarau.com.br/ativar.php?id=$usuario_id&code=$senha

            Após a ativação de sua conta, você poderá ter acesso ao conteúdo exclusivo,
            efetuando o login com os dados abaixo:

            Usuario: {$usuario}

            Senha: {$senha_randomica}

            Obrigado!

            Webmaster

            Esta é uma mensagem automática, por favor não responda!”;

            mail($email, $subject, $mensagem, $headers);

            echo “Foi enviado para seu email – ( “.$email.” ) um pedido de confirmação de cadastro,
            por favor verifique a caixa de entrada, caso nao encontre,
            procure na caixa de span, e sigas as instruções!”;

            }

            }else{

            echo “ERRO:“;
            echo “O endereço de email [ ".$email." ] que está tentando utilizar não é válido.”;
            echo “Por favor, utilize um email válido.”;
            include “formulario_cadastro.php”;

            }

            }

            }

            }

            ?>

            Voçê pode me auxiliar?

            Atgenciosamente, Marcio

          • Esse código todo que vc colou se faz desnecessário para saber o porque está tendo problemas.
            O problema está todo na seleção do banco de dados que está incorreta e desta forma nenhuma query sql roda.
            O problema está todo no config.php ou na sua inclusão.
            Se ele está no mesmo diretório que o arquivo que vc colou acima, descartamos então o erro na inclusão.

            Porém voltamos aos dados informados incorretamente para os valores de usuário, nome do banco de dados, e senha.
            Um ou todos estes estao incorretos.

            Dica: Tente essa configuração com o usuário root do seu domínio e não esse user que vc criou para a conexão.
            Aproveito pra lembrar você de que em relação ao usuárioq ue vc tinha criado para essa conexão com o banco de dados, vc deve configurar no CPANEL as permissões para ele… serpá que as fez corretamente tbm?

            Por favor, verifique todos esses pontos individualmente e depois torne a comentar.
            Bons estudos!

  213. Primeiramente obrigado, pela ajuda. Você é um dos poucos que nos ajuda nessa imensa WEB…

    Eu fiz ate a parte de “cadastrar.php” quando fui testar e cadastrar um primeiro usuario me apareceu isso

    –>
    Warning: mysql_connect() [function.mysql-connect]: Access denied for user ‘root’@’localhost’ (using password: YES) in C:\xampp\htdocs\Projeto_Falai\config.php on line 7

    Notice: Undefined variable: eReg in C:\xampp\htdocs\Projeto_Falai\cadastrar.php on line 40

    Notice: Undefined variable: uReg in C:\xampp\htdocs\Projeto_Falai\cadastrar.php on line 41

    Notice: Undefined variable: alt in C:\xampp\htdocs\Projeto_Falai\cadastrar.php on line 65

    Notice: Undefined variable: pass in C:\xampp\htdocs\Projeto_Falai\cadastrar.php on line 66

    Notice: Undefined variable: alt in C:\xampp\htdocs\Projeto_Falai\cadastrar.php on line 65

    Notice: Undefined variable: alt in C:\xampp\htdocs\Projeto_Falai\cadastrar.php on line 65

    Notice: Undefined variable: alt in C:\xampp\htdocs\Projeto_Falai\cadastrar.php on line 65

    Notice: Undefined variable: alt in C:\xampp\htdocs\Projeto_Falai\cadastrar.php on line 65

    Notice: Undefined variable: alt in C:\xampp\htdocs\Projeto_Falai\cadastrar.php on line 65

    Notice: Undefined variable: alt in C:\xampp\htdocs\Projeto_Falai\cadastrar.php on line 65

    Notice: Undefined variable: alt in C:\xampp\htdocs\Projeto_Falai\cadastrar.php on line 65
    No database selected

    Você pode me ajudar com isso, quais possíveis erros cometi ? valeu cara…

    • Olá @Anderson, quanto ao Warning, vc esqueceu de incluir o config.php ou não definiu os dados de acesso ao seu banco de dados corretamente no arquivo config.php.
      Quanto aos NOTICEs, é devido ao seu arquivo.php.ini estar configurado pra exibir todas as mensagens de erros e mensagens NOTICE.

      Warning é um erro e deve ser corrigido, mas NOTICEs não farão com que o script não seja executado, apenas está te chamando atenção pra um fator.
      No caso ele diz que as variáveis $pass, $alt $eReg $uReg estão sendo utilizadas sem terem sido definidas antes, em algum ponto do script.

      Para resolver o Warning que aconteceu em relação ao acesso ao seu BD, faça como falei, de atenção ao config.php
      Quanto aos NOTICEs, da uma jogada no Google sobre ocultar NOTICES no PHP e terá diversos resultados dizendo como fazer ou aidna alguns coments acima tem algumas dicas que eu mesmo já dei aqui.
      Bons estudos!

    • ohei esse codigo pq estou com problema nao vejo pq aparece as noticias,seria solução oculta-la?

      • Sim, ou não usar variáveis sem estarem definidas.
        Veja que este sistema é antigo e na versão 4 do PHP não tinha muito desse problema devido as registers … estarem por padrão ON na maioria dos servidores.

  214. Olá roberto primeiramente gostaria de dar os parabéns pela sua iniciativa legal de compartilhar o seu conhecimento. gostaria de resolver um pequeno alerta no logout do seu sistema. que é a linha 10 do logout no wamp aqui pra mim aparece Deprecated: Function session_is_registered() is deprecated in C:\wamp\www\sistema_login\logout.php on line 10 pelo que andei vendo basta atualizar o código da linha 10 com if (preg_match mas não consegui o feito você poderia me auxiliar acredito que seria util também para os demais que possuem o sistema funcionando também. abraço!

    • Amigo, basta fazer o logout da seguinte forma:

      session_start();
      if ($_SESSION[id_user]){

      session_unset();
      session_destroy();
      $_SESSION = array();
      header("Location:http://www.teusite.com.br);

      }

      Aí não tem como o user manter-se logado rs*
      Só isso na página logout.php

      Bons estudos ;)

  215. $pass = $pass . $tmp;
    Essa linha faz algum sentido?
    Está dando um erro de variável indefinida pra $pass

    • Olá @ohn, isso que tu recebeu não foi um erro (ERROR ou WARNINGS) que faria o script parar de ser executado, se trata na verdade de NOTICEs
      A dica é: Leia alguns comentários acima e saberá como lidar com a situação, foi bem falado já.
      Qualquer coisa que não entender fala aí.
      Bons estudos!

  216. Ao importar o mysql da erro. Oque se passa? Diz que a primeira linha da erro penso eu..

  217. eu quero fazer uma pergunta,

    e como eu me cadastro? em que arquivo?

  218. Cara, parabens pelo tutorial e pela paciencia e atenção com os visitantes.

    Estou com uma dúvida só..

    Estou precisando do seguinte
    Vou usar para postar exames dos clientes, ou seja, quando o cliente realizar o login ele será direcionado à um conteúdo exclusivo, pode ser uma página, documento ou qualquer outro objeto, mas que somente seja visualizado por este úsuario.

    à partir desse tutorial, creio que há como fazer isso, correto?
    e se sim, qual seria o ”caminho das pedras”? Estou totalmente perdido… =|

    Obrigado!!! Abraço.

    • Olá @Sibelius, o caminho das pedras está asfaltado já através deste tutorial.
      Vc define o acesso do conteúdo através do ID do usuário e nivel de usuário registrados nas sessions.
      Através do arquivo verifica_usuário.php que vc registra essas sessions… o tuto ensina isso…
      No arquivo functions.php vc define pra onde redirecionar de acordo com o valor da session do nivel de usuário.

      Eu não faço assim… eu não redireciono… como meus trabalhos são baseado em banco de dados, eu apenas exibo conteúdo pertinente ao nivel de usuário

      Exemplo: Usuario X cadastrado… este usuário tem dados pessoais, e principalmente um ID quando foi registrado, conforme o tuto explica.
      Tudo e qualquer coisa que vc cadastre no banco de dados e queira associar especificamente à usuários específicos, vc sempre terá que relacionar pelo ID.

      Digamos que vc desenvolva um sistema de notícias… onde um usuário qualquer, logado, pode postar…

      Obviamente a tabela de noticias entre todos os campos que deverá teer como texto, titulo data etc… terá o campo id da noticia e claro que um campo id do usuario/editor/autor, seja lá o noem que queira dar… e claro tbm que ali nesse campo será o id do usuário que postou que ficará registrado, pois o id do usuário que postou na hora uqe ele postou estava registrado na session.

      Assim, sempre que vc quiser listar noticias somente do usuário X, é pelo ID que vai faze-lo, pois é por ele que o user se relaciona com o conteudo do site.

      Foi só um exemplo, mas pode ser usado em qulquer relação com conteúdo e usuário… por exemplo upload de arquivos, basta salvar o noem do arquivo no banco de dados numa tabela que tbm se relaciona com o id do user.

      Espero ter dado uma pequena luz… se precisar de meus serviços entre em contato para orçamento.
      Bons estudos!

  219. Bom dia, eu estou tendo que fazer um site com criptografia SHA1 , e separação de privilégios pra usuários, sendo eles administrador, gerente, funcionário operacional e etc…porém não programo, tem alguma maneira de continuar a partir deste código???

    • Olá @Wanderley, o tutorial já é tudo que vc precisa pra fazer o que deseja.
      Quanto ao SHA1, se estiver utilizando isso nas senhas, apenas substitua onde é MD5() por SHA1().
      Quanto aos níveis de acesso, o tutorial deixa preparado o banco de dados exatamente pra isso, mas para liberar ou não o acesso para cada tipo de usuário, isso é por conta sua, não detalhei isso no tutorial.
      Contudo a mágica está toda no arquivo verifica_usuário.php e functions.php… é nesses arquivos que deve implementar para que após enviar dados do login, seja registrada uma session com o nível do usuário, aliás já é assim… e o redirecionamento é fetio pra Home ou para a página que se tentou entrar antes de aparecer o form de login ou ainda de outra forma, de acordo com suas implementações.
      Seja pra onde for o redirecionamento após login, é necessário ter um include do functions.php nessas páginas para que seja feito a liberação ou não de acesso à determinado conteúdo, baseado no nível de usuário registrado na session… ou seja, tipo 0, 1 ou 2 ou ainda outros, caso tenha outros níveis.

      Por exemplo: Uma determinada páigna tem liberação de acesso somente para nível 3, lá no topo do arquivo desta página, terá que ter a verificação com o functions.php que irá verificar se a session registarda do nivel é 3… se não for a funcção no functions.php redireciona para uma página de erro personalizada por você.

      Não é difícil… mas se precisar que eu faça pra vc faça, entre em contato passando mais detalhes da tua estrutura para prévio orçamento.
      Bons estudos

  220. Está faltando o formulário para iniciar o cadastro.
    porque no formulario formulário_cadastro.php, que devia ser a página para iniciar o cadastro está
    . Ora vai dar erro, porque a variável ‘nome’ está vazia.
    O correto é nao usar php algum no inicio do cadastro.
    Depois que os dados forem preenchidos, ai sim, que irá submeter para o php do cadastro.
    if (empty($_POST['nome']) deve ser usado para quando receber uma variável de um campo de formulário em branco.
    Arruma isso ai, pois como o php vai dar echo de um campo não submetido ainda?
    Coloca uma página em html simples para iniciar o cadastro, que chamara a pagina de cadastro em php.

    • Amigo @Marcos, você está equivocado.
      Vou te explicar… esse tutorial se olhar com atenção é de 2007, quando as registers globals eram por padrão ON, o que ainda é em muitos servidores… o que não causa NOTICE, veja bem…NOTICEs e não ERROS…

      Tá… tudo bem… eu emsmo considero NOTICES erros, mas não são.

      Como está ainda funciona perfeitamente…

      O que deve ser alterado em questão é verificar antes se a variável está definida, numa condicional ternária.
      A finalidade de já preencher o value com o $_POST() é para caso o form seja enviado faltando algum campo, numa possivel verificação a volta para o form ou a exibição do form para retificações já traga os demias campos preenchidos.

      Então nos inpuits de preenchimento como fiz basta usar uma condição ternária.
      Sabe como é uma condicional terniária??

      Ese é o input:
      … input type=”text” name=”nome” value=”” …

      Essa é a condição:

      [?php echo isset($_POST['name']) ? $_POST['name'] : “”; ?]

      Troquei a tag por ] para que pudesse ser exibido o cod… esse meu wordpress tenho que fazer alguns ajustes rs*

      Mas era isso… qualquer dúvida fala aí.
      Bons estudos!

  221. Cara o seu codigo nao esta funcionando, na parte do formulario de cadastro esta tudo bugado da pra voce resolver isso ?

    • Olá @Jorge, não sei o que pode estar ocorrendo no seu código, pois o que disponibiliei está funcionando perfeito.
      Não fiz alterações. Não tem nada bugado… Poderia dar detalhes do erro que ocorre no seu código?

  222. Ola, gostaria de dizer que nao estou mais conseguindo usar esse sistema que antes eu coloquei no meu site, mas exclui e agora nao estou conseguindo mais, voce mexeu no codigo? voce deve ter atualizado alguma coisa no seu codigo porque nao esta mais funcionando esta dando erro, peço por favor que voce reveja seu codigo

  223. Boa tarde
    Desculpe incomodar, estou iniciando agora em php, e achei muito bom seu tutorial, simples, mas bem completo e objetivo ao que tem que ser feito. Parabéns!
    No entanto no que diz respeito a parte do código que diz: // Enviar um email ao usuário para confirmação e ativar o cadastro!
    ao fazer as alterações para os dados do meu domínio nao chega o Email de confirmação.
    se puder me ajudar com isso.
    Desde já grato, e parabéns pela iniciativa.

    • Olá Everton, sei que é trabalhoso, mas da uma pesquisada nos comentários deste tutorial, que por sua vez agregam muita informação, principalmente sobre esta questão dos emails.
      Qualquer coisa fala aí depois.
      Bons estudos.

  224. Parabéns pela inciativa Roberto Show de bola!

    Poderia me ajudar? Estou testando ele localmente via wamp antes de mandar para o servidor. Criei o banco de dados e tal. Só que todas as paginas ao entrar esta dando aquela msg de “NOTICE”. Tipo esta aqui na hora de fazer o cadastro:

    Nome
    ( ! ) Notice: Undefined index: nome in C:\wamp\www\cadastra\formulario_cadastro.php on line 18 Call Stack #TimeMemoryFunctionLocation 10.0401367280{main}( )..\formulario_cadastro.php:0 ” />

    Sobrenome
    ( ! ) Notice: Undefined index: sobrenome in C:\wamp\www\cadastra\formulario_cadastro.php on line 21 Call Stack #TimeMemoryFunctionLocation 10.0401367280{main}( )..\formulario_cadastro.php:0 ” />

    Email
    ( ! ) Notice: Undefined index: email in C:\wamp\www\cadastra\formulario_cadastro.php on line 24 Call Stack #TimeMemoryFunctionLocation 10.0401367280{main}( )..\formulario_cadastro.php:0 ” />

    Nome de Usuário
    ( ! ) Notice: Undefined index: usuario in C:\wamp\www\cadastra\formulario_cadastro.php on line 27 Call Stack #TimeMemoryFunctionLocation 10.0401367280{main}( )..\formulario_cadastro.php:0 ” />

    Sabe o pq esta acontecendo isso?

    Obrigado e parabéns!

    • O script irá funcionar memso ocm essas NOTICES, que se for dar uma olahda em alguns comentários mais acima perceberá que falo muito sobre isso.
      Pesquise sobre NOTICES aqui nos comentários e vai encontrar diversas opções sobre como resolver essa questão.
      Se não conseguir, fala aí.
      Bons estudos

  225. Como ficaria a url amigavel do link de ativação chamando dentro da include
    http://www.teusite.com.br/ativar.php?id={$usuario_id}&code={$senha}
    fora da include ativa assim: http://www.teusite.com.br/ativar/256/motyuild