Ir para conteúdo
Fórum Script Brasil
  • 0

Sistema de Login - MySQL


david.lyonnais

Pergunta

Eu como estudo PHP como um Hobbie, resolvi fazer um sistema de login com as seguintes caracteristicas.

1-Área para administrador, para ele excluir,alterar e cadastra algum usuario.

2-Área de Cadastro.

3-Página de Login (Pronta Já)(so faltando colocar a verificação de nivel de permissao e se já confirmo email, que so serao feito posteriomente).

3-Página pro Administrados visualizar as Log de Acesso

4-Log de Acesso: Que mostra o nome do usuario , ip e dia do acesso toda vez que alguém logar.

5-Uma página perfil (Area Restrita),onde vai ter as informações do usuario.

6- Posta aqui...

Mas até agr eu so tenho a página login.php.E uma tabela chamada usuarios ,com 4 campos, id, usuario,senha e email.(Edit:Adicionado o de permissao)

Segue o código do login.php.

<?
session_start();

include ("conexao.php");//incluir a pagina que contem a classe MySQL
include ("config.php");

$cnx = new MySQL('sistemalogin');//Fazer conexao ao BD sistemalogin
$lg = new Login();//Instanciar Objeto.

//Verificar se o usuario aperto em "Entrar"
if(isset($_POST['entrar'])){

//Armazena campos do formulario em variaveis
list($usuario,$senha) = $lg->getCampos($_POST['usuario'],$_POST['senha']);

//Verificar se os campos estão vazios
if(empty($usuario) or empty($senha)){
$rs = "Porfavor preencher todos os campos.";
}else{

//Validar login
$res = $lg->validarLogin($usuario,$senha,'usuarios');
if (!$res){
$rs = "Usuario ou/e senha incorretos!";
}
}
}
?>
<HTML>
<HEAD>
 <TITLE>Sistema de Login</TITLE>
<style type="text/css">
fieldset{
          width: 210px;
          height: auto;
          border-color: blue;
}
#fieldset1{
          border-color: red;
          color: red;
}
</style>
</HEAD>
<BODY>
<div align="center">
  <fieldset align="center">
  <legend><strong>Logar-se</strong></legend>
            <form method="POST" action="login.php">
              <label>Login:</label>
              <input type="text" name="usuario" />
              <label>Senha:</label>
              <input type="password" name="senha" />
              <input type="submit"name="entrar" value="Entrar">
            </form>
  </fieldset>
</div>
<?
if(isset($rs)){
?>
<div align="center">
<fieldset id="fieldset1">
<legend><strong>Erro:</strong></legend>
<? echo "<span>".$rs."</span>"; ?>
</fieldset>
</div>
<? } ?>
</BODY>
</HTML>
Segue agora o config.php:
<?

class Login{
private $lg = array();
function Login(){
//Ativar/Desativar codificação de senha
$this->lg['ePK'] = true;
//Palavra-chave pra codificar senha
$this->lg['key'] = "key";
//Ativar/Desativar metodo Anti_injection.
$this->lg['anti_injection'] = true;
//Ativar/Desativar log de acesso
$this->lg['logAcesso'] = true;
//Diretorio do arquivo para log de acesso
$this->lg['nomeLogAcesso'] = "logs/acesso.txt";
//Pagina a redirecionar apos logar
$this->lg['pagLogado'] = "arearestrita.php";
}

//Metodos
public function validarLogin($usuario,$senha,$tabela){
       if($this->lg['ePK'] == true){
       $senha = $this->ePK($senha,$this->lg['key']);
       }
       $sql = "SELECT * FROM $tabela WHERE usuario='$usuario' AND senha='$senha' AND permissao > 0";
       $query = mysql_query($sql);
       $row = mysql_num_rows($query);
       if($row == 1){
       $SESSION['usuario'] = $usuario;
       if($this->lg['logAcesso']==true){
       $this->logAcesso($usuario);
       }
       echo $this->redirecionar($this->lg['pagLogado']);
       exit;
       }else{
       return false;
       }
}

public function anti_injection($sql) {
        $sql = preg_replace(sql_regcase("/(from|select|insert|delete|where|drop table|show tables|#|\*|--|\\\\)/"),"",$sql);
        $sql = trim($sql);
        $sql = strip_tags($sql);
        $sql = addslashes($sql);
        return $sql;
    }

public function getCampos($usuario,$senha){
       if ($this->lg['anti_injection']== true){
       $usuario = $this->anti_injection($usuario);
       $senha = $this->anti_injection($senha);
       }
       
       return array($usuario,$senha);
}

public function logAcesso($usuario){
       $fp = fopen($this->lg['nomeLogAcesso'],"a");
       $txt = "Usuario:".$usuario.",Hora de Acesso:".date("d/m/Y H:i:s ").",IP:".$ip."\n";
       fwrite($fp,$txt);
       fclose($fp);
       }

public function ePK($senha,$chave){
       $txt = strrev($senha);
       $txt = str_repeat(md5($txt),2);
       $txt = md5($txt);
       $txt .= md5($chave);
       $txt = md5($txt);
       return $txt;
       }
public function redirecionar($pagina) {
       $pag = "&lt;script type=\"text/javascript\">window.location = \"".$pagina."\"</script> ";
       return  $pag;
       }
}

Funcionando perfeitamente. Comentem o que acharam? Fico faltando algo,se sim,o que?

Qualquer dúvida sobre o código até agr so postar.

@EDIT

Modificado,apos conselho de Jefferson Oliveira,opinei por adotar OO(Orientação a Objetos),não ta perfeito mas esta facil de editar ao gosto da pessoa , basta mudar as opções em config.php e conexao.php(esse ultimo pra editar conexao ao banco de dados.

Esperando,opinião de vocês, se acharam bom o modo que estou usando a class nesse sistema pra que eu possa da continuidade nesse mesmo modo.

Até

Editado por david.lyonnais
Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

:lol: muito bom david.lyonnais mais sabe o que esta faltando?

Esse codigo não esta organizado, hoje o PHP tem suporte a ORIENTACAO A OBJETOS, e o código seu poderia ser mais poderoso ainda, acho que o modo de programar sem OB se torna um codigo ultrapassado, e assim perde eficiencia, então, o que eu acho que você poderia aplicar mais termos de OB.

Essa é minha opinião.

Valeu abracos!

Mais se aquestão for fazer funcionar, você esta de parabens.

Link para o comentário
Compartilhar em outros sites

  • 0

Vlw..

Eu não to acostumado muito com Orientação a Objetos,apesar de fica mais organizado eu acho mais trabalhoso, apesar que no final valha mais a pena.Pois a grande edição ou uma pequena modificação seria mais fácil e agil.

Vou estudar um pouco mais sobre orientação a objetos já que eu manjo so o básico mesmo, dai mudarei pra uma forma mais organizada.

Qualquer outro conselho, critica ou dúvida é so postar.

Até

Link para o comentário
Compartilhar em outros sites

  • 0

Depois que você manja o OB você nunca mais quer largar ^^ vai por mim, faz a programacao ser mais PRAZEROSO! Aauhuahuahushasua

Viu ai Como agora ficou uma coisa mais SHOW ^^

Pow ateh me emocionei ^^

Parabens novamente david.lyonnais!!!

^^

Editado por Jefferson Oliveira
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      652k
×
×
  • Criar Novo...