Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

OmegaX

[Resolvido] Aprimorar sistema de login

Recommended Posts

Olá a todos!

 

Sou iniciante em PHP :P e minha dúvida é a seguinte, estou criando um sistema de login usando PHP/MySQL, baseado em alguns tutoriais na internet e inclusive com ajuda do próprio fórum imasters, para o site que estou desenvolvendo. O cadastro e o login funcionam perfeitamente, entretanto, gostaria que isso fosse feito dessa forma:

 

- O usuário se cadastra

- Efetua o login, a partir da página principal (index.php)

- Ao efetuar o login os campos que o usuário digitou (login e senha) para entrar

desaparecem e no lugar aparece: Bem-vindo(a), Nome_do_usuário ( Sair )

- Os campos só aparecem novamente na página principal quando o usuário faz o logout

 

Obs: O sistema seria igual ao desse fórum, no início tem lá os campos, depois que você loga eles somem e no lugar fica Bem-vindo(a), Nome_do_usuário ( Sair ).

 

Lembrando que tudo isso na mesma página (index.php). Se isso é possível, como pode ser feito?. Grato desde já! http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa noite

 

 

Cara, acho que a melhor saida para o seu caso seria trabalhar com cookies.

 

No momento que o usuário preenche o login e senha dele, voce define um cookie com o id do usuário por exemplo e depois redireciona o usuario de volta para a pagina que desejar.

 

No local onde existe o formulario de login e senha, voce faz uma verificacao, onde pegaria o valor do cookie e, quando o mesmo for DIFERENTE de vazio, voce exibiria campo para o usuario efetuar LOGOUT, e se fosse VAZIO entao exibiria o formulario de login.

 

Segue abaixo exemplo:

//Gerando o cookie
setcookie('NOME_DO_COOKIE', VALOR_DO_COOKIE);

//No local onde existe o formulario voce utiliza o codigo abaixo, para pegar o valor do cookie e fazer a validacao

$ValorCookie = $_COOKIE['NOME_DO_COOKIE_CRIADO'];

if($ValorCookie==""){

	 //EXIBE O FORMULARIO DE LOGIN

}else{

	 //EXIBE O NOME DO USUARIO E LINK PARA LOGOUT

}

 

Abraços...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puts é mesmo, vlw Igor!

Então Thomazelli, to usando session, ouvi falar que setcookie não é muito seguro.

Fiz assim:

<?php

session_start();

if(!$_SESSION["login"] and !$_SESSION["senha"]){

include "login.html";

}

else {

echo "Você já está logado<br>";

echo "<a href='logout.php'>Sair</a>";

}

?>

 

Só que agora ta aparecendo isso:

 

Notice: Undefined index: login in C:\Arquivos de programas\EasyPHP 2.0b1\www\login.php on line 3

 

Notice: Undefined index: senha in C:\Arquivos de programas\EasyPHP 2.0b1\www\login.php on line 3

 

:(

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta..

<?php
session_start();
if(!isset($_SESSION["login"]) || !isset($_SESSION["senha"]))
{
  include "login.html";
}
else 
{
  echo "Você já está logado<br>";
  echo "<a href='logout.php'>Sair</a>";
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Puts é mesmo, vlw!

 

Fiz assim:

<?php

session_start();

if(!$_SESSION["login"] and !$_SESSION["senha"]){

include "login.html";

}

else {

echo "Você já está logado<br>";

echo "<a href='logout.php'>Sair</a>";

}

?>

 

Só que agora ta aparecendo isso:

 

Notice: Undefined index: login in C:\Arquivos de programas\EasyPHP 2.0b1\www\login.php on line 6

 

Notice: Undefined index: senha in C:\Arquivos de programas\EasyPHP 2.0b1\www\login.php on line 6

 

:(

Voce esta trabalhando com session para o login?

Bem, confirmou se o start do session esta sendo efetuado antes de qualquer insercao HTML?

Outra coisa, tente definir variaveis para o valor das sessions e no IF verificar as suas variaveis.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta..

<?php
session_start();
if(!isset($_SESSION["login"]) || !isset($_SESSION["senha"]))
{
  include "login.html";
}
else 
{
  echo "Você já está logado<br>";
  echo "<a href='logout.php'>Sair</a>";
}
?>

Aee deu certo vlw Skyo!

Era por causa do !isset. Então Thomazelli as variáveis ja estão definidas em uma outra página. :P

 

Vocês saberiam me dizer se tem algum comando pra apagar os campos quando o usuário der submit? Isso claro, depois de enviar o formulário. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Disponha =).

Como assim, você está usando ajax para enviar e quer que limpe depois de enviado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Depende da forma como voce esta utilizando o formulario.

 

Se voce envia com AJAX, no momento que voce retorna o valor dele, voce tambem zera os campos com o proprio javascript. Caso voce recarregue a pagina,nao haveria motivo, pois ele ja voltaria zerado.

 

Segue abaixo um modelo de como fazer isso com o java script:

 

function Limpar(){
	 document.NOME_DO_FORM.NOME_DO_CAMPO_1.value = '';
	 document.NOME_DO_FORM.NOME_DO_CAMPO_2.value = '';
}

Nesse caso voce precisaria chamar essa funcao em alguma requisicao, como por exemplo no momento que envia o form. Coloca um exemplo de como envia este form para dar uma analisada melhor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

proteger.php

 

<?php
 session_start(); //inicio a sessão.

if(!$_SESSION["login"] and !$_SESSION["senha"]){
  header("location: login.php");
//não existir a sessão ele redireciona para a pagina de login.
}

?>

index1.php

 

<?php

require("proteger.php");

?>
<html>
<body>
Seja bem vindo ao site!!!<br>
Coloque o conteudo aqui!!!
<br><br><br>
<a href="logout.php">Logout</a>
</body>
</hmtl>

login.php

<?php
session_start();
if(!isset($_SESSION["login"]) || !isset($_SESSION["senha"]))
{
  include "login.html";
}
else
{
  echo "Você já está logado<br>";
  echo "<a href='logout.php'>Sair</a>";
}
?>

login.html

<title>Login</title><form name="login" method="post" action="confirmar_login.php">
  <table width="400" border="0" align="center" cellpadding="0" cellspacing="0">
	<tr>
	  <td width="150" height="40"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Login:</font></td>
<td width="250"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<input name="login" type="text" id="login">
</font></td>
</tr>
<tr>
	  <td height="30"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Senha:</font></td>
<td><input name="senha" type="password" id="senha"></td>
</tr>
<tr>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> </font></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"> </font></td>
</tr>
<tr>
<td><div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif">
<input name="entrar" type="submit" id="entrar" value="Entrar">
</font></div></td>
<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><a href="senha.php">Esqueceu
a senha?</a> <a href="cadastrar.php">Cadastre-se</a></font></td>
</tr>
</table>
  <div align="left"></div>
</form>

 

confirmar_login.php

<?php
//inicio a sessão
session_start();
//include da conexão com o banco.
include "config.php";
//recebo as variáveis.

$login = $_POST["login"];
$senha = $_POST["senha"];
$erro = "";
// verifico se estão preenchidos.
$db =mysql_connect ("$host", "$login_db", "$senha_db") or die ("Não foi possível conectar ao Banco de Dados"); //conectamos ao mysql
$basedados = mysql_select_db("$database"); //selecionamos o database escolhido

if(empty($login) || empty($senha)){
echo "você deve informar o usuário e a senha.";
$erro +=1; //informo que ocorreu um erro.
}
// agora verifico se ocorreu erro ou não.
if($erro != 0)
{
 echo "$erro";
echo "<br>";
echo "<a href='#' onclick='java script:history.go(-1)'>Voltar</a>";
}
//se não ocorreu erro
else{
$sql = mysql_query("select * from tbl_usuarios where login='$login' and senha='$senha'");

$rows = mysql_num_rows($sql);
//verifico se existe registros na consulta
if($rows!=0){
//a consulta nao for 0
$mostra = mysql_fetch_array($sql); // busco todas as informações da consulta.
//incremento as variáveis.
$nome = $mostra["nome"];
$senha = $mostra["senha"];

//crio as sessoes

$_SESSION["login"] = $login; //sessão do usuario
$_SESSION["senha"] = $senha; //crio a sesão da senha
$_SESSION["nome"] = $nome; //crio tb a sessão do nome para ser exibido


//apresento uma mensagem de boas vindas usando o alert e puxando o php dentro do javascript

echo "<script>
				  alert('Seja bem Vindo, " . $nome . " ');
		 </script>";

//redireciono para a pagina padrão

echo "<script> window.location='index1.php'; </script>";

		  }//fecho o if
	  else{
	//por algum motivo for 0 a consulta
	echo "<script>alert('Usuário e senha Não reconhecidos.'); history.back()</script>";
	//se for 0 mostro mensagem e utilizo a função js para voltar para a pagina.
   }//fecho o else da consulta
}//fecho o else de verificação

mysql_close($con);
?>

Ta meio bagunçado, por que fico modificando direto, mas aqui funciona direitinho.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema esta com o redirecionamento que voce faz em caso de erro.

 

echo "<a href='#' onclick='java script:history.go(-1)'>Voltar</a>";

O que poderia fazer e apenas colocar um link para a pagina que ele estava.

Caso ele tenha a possibilidade de efetuar login em varias paginas, entao teriamos um "probleminha": Pra qual pagina voltar?

 

Qual a situacao? Ele faz login somente em 1 pagina ou pode ser feito em varias?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá só não entendi direito o que você quer o0.

 

Obs: ele não ta limpando pq você ta usando javascript para voltar no histórico, use isso:

header("Location: index.php");
Obvio, no lugar de index.php use a página para onde quer que direcione.

 

Você poderia usar o header passando o erro, tipo:

header("Location: index.php?erro=$erro");

E na pagina index.php ou seja la qual for:

$erro = $_GET["erro"];
if(!empty($erro)){echo("$erro");}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá só não entendi o que você quer o0.

 

Obs: ele não ta limpando pq você ta usando javascript para voltar no histórico, use isso:

header("Location: index.php");
Obvio, no lugar de index.php use a página para onde quer que direcione.

Quero que ao clicar em entrar, antes de entrar apague os campos, pra quando o usuário voltar na página de login não estiver la o login dele. É igual esses sites que a gente acessa, aparece la uma checkbox pra salvar os campos, assim quando o usuário volta eles estão la, sem isso eles não ficam salvos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caso voce tenha esse login com include em varias paginas, voce teria que passar a URL junto com o form (pode ser com um input type="hidden"), e a partir dessa nova variavel redirecionar o usuario com header que o Skyo citou acima, assim nao teria problemas em retornar o usuario para uma pagina errada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá só não entendi o que você quer o0.

 

Obs: ele não ta limpando pq você ta usando javascript para voltar no histórico, use isso:

header("Location: index.php");
Obvio, no lugar de index.php use a página para onde quer que direcione.

Quero que ao clicar em entrar, antes de entrar apague os campos, pra quando o usuário voltar na página de login não estiver la o login dele. É igual esses sites que a gente acessa, aparece la uma checkbox pra salvar os campos, assim quando o usuário volta eles estão la, sem isso eles não ficam salvos.

 

Amigo basta fixar, não fica "salvo" é porque você volta usando javascript com history.go, o ideal é fazer como disse usando header.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, no submit do FORM voce requisita um javascript entao. Segue abaixo o codigo:

 

<script>

function Limpar(){
	 document.login.login.value = "";
	 document.login.senha.value = "";
}

</script>

Outra coisa que poderia fazer tambem e, sempre na pagina de login, chamar no body esta função.

Ficaria assim:

<body onLoad="Limpar()">

</body>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.