Ir para conteúdo

POWERED BY:

Arquivado

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

MiguelTb

[Resolvido] Efetuar login na mesma página de login.

Recommended Posts

Bom dia pessoal,

 

estou criando um site: http://www.revistahei.net/2011

Como podem ver, la em cima no canto direito tem Acesso Restrito.

 

Gostaria de fazer algo assim:

Se não estiver logado

exibir menu de login.

Se estiver logado verifica o nivel do usuario e retorna um menu diferente pra cada nível de usuário( no lugar do menu de login nessa mesma página.

 

Eu fiz algo do tipo:

	  <?php
	  if(!isset($_SESSION['email']) and !isset($_SESSION['senha'])){ 
	  echo "<table width='230' height='85' border='0' cellpadding='0' cellspacing='0'>
           <tr>
             <td valign='bottom' background='imagens/acesso_restrito.png'><form action='' method='post'><table width='230' border='0' cellspacing='0' cellpadding='0'>
               <tr>
                 <td> </td>
                 <td align='left'><font size='2px' face='Trebuchet MS' color='#C0FF00'>Acesso Restrito</font></td>
                 <td> </td>
               </tr>
               <tr>
                 <td width='10'> </td>
                 <td height='30' align='left'><table width='169' border='0' cellspacing='0' cellpadding='0'>
                   <tr>
                     <td width='40' align='left' valign='top'><span class='style6'><font face='Trebuchet MS' color='#FFFFFF'>Login:</font></span></td>
                     <td valign='top' background='apps/twitter/twitter_bg.png'><span class='style6'><font face='Trebuchet MS' color='#FFFFFF'><font face='Trebuchet MS' color='#FFFFFF'><font face='Trebuchet MS' color='#FFFFFF'>
                       <input name='login' type='text' class='textfield' id='login' size='22'>
                     </font> </font> </font></span></td>
                     <td width='5' valign='top'> </td>
                   </tr>
                 </table>
                   <span class='style6'><font face='Trebuchet MS' color='#FFFFFF'> </font></span></td>
                 <td width='50' height='23'> </td>
               </tr>
               <tr>
                 <td> </td>
                 <td height='30' align='left'><table width='169' border='0' cellspacing='0' cellpadding='0'>
                   <tr>
                     <td width='40' align='left' valign='top'><span class='style6'><font face='Trebuchet MS' color='#FFFFFF'>Senha:</font></span></td>
                     <td valign='top' background='apps/twitter/twitter_bg.png'><span class='style6'><font face='Trebuchet MS' color='#FFFFFF'><font face='Trebuchet MS' color='#FFFFFF'><font face='Trebuchet MS' color='#FFFFFF'>
                       <input name='senha' type='password' class='textfield' id='senha' size='22'>
                     </font>
                     </font>
                     </font></span></td>
                     <td width='5' valign='top'> </td>
                   </tr>
                 </table>                    
                 <span class='style6'><font face='Trebuchet MS' color='#FFFFFF'></font></span></td>
                 <td align='left' valign='middle'><img src='imagens/entrar.png' width='41' height='16'></td>
               </tr>
             </table></form></td>
           </tr>
         </table>";
 }
 else
 {
   echo "Você logou.";
 }
	  ?>

 

Mas não sei como continuar a partir disso ai, porque o else vai retornar apenas um valor né?

Alguma alma bondosa pode me ajudar só por onde começar?

Agradeço desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas não sei como continuar a partir disso ai, porque o else vai retornar apenas um valor né?

não entendi

não retorna nada

 

 

e seu if deveria ter um OR em vez de AND. Concorda? Basta uma não estar setada para considerar como não logado

Compartilhar este post


Link para o post
Compartilhar em outros sites

 else
 {
   echo "Você logou.";
 }
	  ?>

 

Mas não sei como continuar a partir disso ai, porque o else vai retornar apenas um valor né?

beleza cara.. dai em diante é só encaixar mais ifs else if

 

exemplo:

  else
 {
    if( $_SESSION['level']==1 )
      echo 'você é administrador!';
    else if( $_SESSION['level']==2 )
      echo 'você é gerente!';
 }

.. entendeu ? :lol:

 

 

@gremio10, no caso dele, não será interessante verificar se existe o POST, pois o usuário pode continuar navegando após o login(o envio do POST deixará de existir), e ele continuará tendo que exibir o menu personalizado ou o form.

A melhor forma é SESSION mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

I rapaz achei que nem poderia fazer isso uhauhauhau, mas beleza. Vou tentar aqui só não sei no form action='' o que devo colocar. index.php ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
só não sei no form action='' o que devo colocar. index.php ?

não necessariamente.

 

onde está o script que recebe o formulario, faz a consulta no banco e verifica se o cara pode se logar ou não ?

é ele que você deve colocar no action=""

Compartilhar este post


Link para o post
Compartilhar em outros sites

William no caso então no arquivo login.php por ex, eu mando fazer toda a verificação pegar os dados de qm está logando o nível e talz, e mando redirecionar pro index.php é isso? Porque dai ele já vai vir com a session e o nivel registrado?!

 

Abraços!

Compartilhar este post


Link para o post
Compartilhar em outros sites

William no caso então no arquivo login.php por ex, eu mando fazer toda a verificação pegar os dados de qm está logando o nível e talz, e mando redirecionar pro index.php é isso? Porque dai ele já vai vir com a session e o nivel registrado?!

exatamentee!!!!

 

testa cara, tenta ^_^

assim que você vai aprender.. mas é isso ai, tá certinho.

 

só atente a este detalhe:

use o Responder Azul respondery.png

ou a 'Resposta Rápida'.

 

qndo você usa o 'Responder' pequeno do post acima, o forum faz um quote da resposta, assim polui o topico.. e eu tenho que ficar editando o teu post.

Usa o Responder Azul respondery.png

 

:lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hehe ok. De uma olhada por favor, está sempre retornando pra página de erro, o que está errado?

 

<?
   $conn = mysql_connect("host","root","senha") ; //configure os dados do seu MySQL
   $banco = mysql_select_db("database"); //coloque o nome do seu banco de dados

   $email = $_POST['email'];
   $q_user = mysql_query("SELECT * FROM hei_users WHERE (`email` = '". $email ."')");

   if(mysql_num_rows($q_user) == 1) {

       $query = mysql_query("SELECT * FROM hei_users WHERE (`email` = '". $email ."')");
       $dados = mysql_fetch_array($query);
       if($_POST['nivel'] == $dados['nivel']) {
           session_register("nivel");
           header("Location: ../index.php");
           exit;
       } else {
           header("Location: error.php");
           exit;
       }
   } else {
       header("Location: error.php");
       exit;
   }

//agora a parte que verifica se o login já foi feito
if(session_is_registered("nivel") == false) {
   header("Location: error.php");
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

if($_POST['nivel'] == $dados['nivel']) {

??

 

o cara insere o nivel dele no formulario ??

fora isso, sempre siga estas dicas aqui:

http://forum.imasters.com.br/index.php?/topic/375800-orientacoes-para-uma-boa-participacao/

 

[ habilite as mensagens de erro, e adicione o mysql_error() ]

Compartilhar este post


Link para o post
Compartilhar em outros sites

nada de session_register ou session_is_registered

 

Caution

If you want your script to work regardless of register_globals, you need to instead use the $_SESSION array as $_SESSION entries are automatically registered. If your script uses session_register(), it will not work in environments where the PHP directive register_globals is disabled.

fonte: http://www.php.net/session_register

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então galera, pegando uns códigos que olhei aqui no fórum mesmo eu cheguei a isso:

O que está acontecendo é que ele redireciona para index.php (correto) mas continua vindo o campo login e senha em vez de aparecer: "Você é colunista" ou algo do tipo:

Acredito que o que esteja faltando é ele voltar para a página index.php, com a $_SESSION['nivel'] já com algum valor, não sei se estou esquecendo de acrescentar alguma coisa. Se puderem me ajudar fico grato. Um abraço

 

Segue os códigos:

 

index.php

	  <?php
	  if(!isset($_SESSION['nivel'])){ 
	  echo "<table width='230' height='85' border='0' cellpadding='0' cellspacing='0'>
           <tr>
             <td valign='bottom' background='imagens/acesso_restrito.png'><form action='admin/login.php' method='post'><table width='230' border='0' cellspacing='0' cellpadding='0'>
               <tr>
                 <td> </td>
                 <td align='left'><font size='2px' face='Trebuchet MS' color='#C0FF00'>Acesso Restrito</font></td>
                 <td> </td>
               </tr>
               <tr>
                 <td width='10'> </td>
                 <td height='30' align='left'><table width='169' border='0' cellspacing='0' cellpadding='0'>
                   <tr>
                     <td width='40' align='left' valign='top'><span class='style6'><font face='Trebuchet MS' color='#FFFFFF'>Login:</font></span></td>
                     <td valign='top' background='apps/twitter/twitter_bg.png'><span class='style6'><font face='Trebuchet MS' color='#FFFFFF'><font face='Trebuchet MS' color='#FFFFFF'><font face='Trebuchet MS' color='#FFFFFF'>
                       <input name='email' type='text' class='textfield' id='email' size='22'>
                     </font> </font> </font></span></td>
                     <td width='5' valign='top'> </td>
                   </tr>
                 </table>
                   <span class='style6'><font face='Trebuchet MS' color='#FFFFFF'> </font></span></td>
                 <td width='50' height='23'> </td>
               </tr>
               <tr>
                 <td> </td>
                 <td height='30' align='left'><table width='169' border='0' cellspacing='0' cellpadding='0'>
                   <tr>
                     <td width='40' align='left' valign='top'><span class='style6'><font face='Trebuchet MS' color='#FFFFFF'>Senha:</font></span></td>
                     <td valign='top' background='apps/twitter/twitter_bg.png'><span class='style6'><font face='Trebuchet MS' color='#FFFFFF'><font face='Trebuchet MS' color='#FFFFFF'><font face='Trebuchet MS' color='#FFFFFF'>
                       <input name='senha' type='password' class='textfield' id='senha' size='22'>
                     </font>
                     </font>
                     </font></span></td>
                     <td width='5' valign='top'> </td>
                   </tr>
                 </table>                    
                 <span class='style6'><font face='Trebuchet MS' color='#FFFFFF'></font></span></td>
                 <td align='left' valign='middle'><input name='enviar' type='image' src='imagens/entrar.png' width='41px' height='16px' /></td>
               </tr>
             </table></form></td>
           </tr>
         </table>";
 }
 else
 {
 if( $_SESSION['nivel'] == "1" )
      echo 'você é leitor!';
    else if( $_SESSION['nivel'] == "2" )
      echo 'você é colunista!';
   else if( $_SESSION['nivel']== "3" )
      echo 'você é seção!';
   	else if( $_SESSION['nivel']== "4" )
     	echo 'você é Administrador Geral!';
}
?>

 

login.php

<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
// Verifica se houve POST e se o usuário ou a senha é(são) vazio(s)
if (!empty($_POST) AND (empty($_POST['email']) OR empty($_POST['senha']))) {
       header("Location: index.php"); exit;
}

// Tenta se conectar ao servidor MySQL
mysql_connect('localhost', 'root', '') or trigger_error(mysql_error());
// Tenta se conectar a um banco de dados MySQL
mysql_select_db('revistaheinet') or trigger_error(mysql_error());

$email = mysql_real_escape_string($_POST['email']);
$senha = mysql_real_escape_string($_POST['senha']);

// Validação do usuário/senha digitados
$sql = "SELECT `email`, `nome`, `nivel` FROM `hei_users` WHERE (`email` = '". $email ."') AND (`senha` = '". $senha."') LIMIT 1";
$query = mysql_query($sql)or die( mysql_error() );
if (mysql_num_rows($query) != 1) {
       // Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
       header ("Location: fail.php"); exit;
} else {
       // Salva os dados encontados na variável $resultado
       $resultado = mysql_fetch_assoc($query);
}

if (mysql_num_rows($query) != 1) {
       // Mensagem de erro quando os dados são inválidos e/ou o usuário não foi encontrado
       header ("Location: fail.php"); exit;
} else {
       // Salva os dados encontados na variável $resultado
       $resultado = mysql_fetch_array($query);

       // Se a sessão não existir, inicia uma
       if (!isset($_SESSION)) session_start();

       // Salva os dados encontrados na sessão
       $_SESSION['email'] = $resultado['email'];
       $_SESSION['nome'] = $resultado['nome'];
       $_SESSION['nivel'] = $resultado['nivel'];
	header("Location: http://www.revistahei.net/2011/");           

       // Redireciona o visitante

}
?>

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

dê um echo em $_SESION['nivel'] e veja o que aparece

pelo que vi, você não usou session_start no primeiro script, por isso $_SESSION['nivel'] não aparece

 

Então Beraldo, no iníciooooo da página index.php eu coloquei isso:

<?php 
include ('admin/config.php');
session_start();
?>

 

E agora, eu fiz o que você disse:

<? echo "$_SESSION['nivel']"; ?>

 

E deu esse erro:

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/revistahei.net/www/2011/index.php on line 73

 

E se eu uso dessa forma:

<? echo $_SESSION['nivel']; ?>

 

Ele não retorna nada. O que será que pode estar errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

seguinte:

 

<?php var_dump( $_SESSION ); ?>

 

prefira sempre usar a tag completa <?php

 

aquilo que eu falo sempre cara..

qr debugar, faz um var_dump()... adote como prática!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

William, boa tarde,

Fiz da forma que você citou e retornou esses valores:

 

array(3) { ["email"]=> &string(5) "teste" ["nome"]=> &NULL ["nivel"]=> &string(32) "4ccfe44ee79ab9927edb3b405147a584" }

 

Mas não entendi, não retornou nenhum valor pra nivel?

 

Alguém consegue identificar o problema? :ermm:

Agradeço desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

entenda oque o var_dump() te retorna:

 

array(3) { ["email"]=> &string(5) "teste" ["nome"]=> &NULL ["nivel"]=> &string(32) "4ccfe44ee79ab9927edb3b405147a584" } 

 

$_SESSION['email'] contém uma string de 5 caracteres, e o valor é nome

$_SESSION['nome'] contém um NULO (sem valor)

$_SESSION['nivel'] contém uma string de 32 caracteres, e o valor é 4ccfe44ee79ab9927edb3b405147a584

 

ou seja, presta atenção no teu script que cria as sessions, você tá fazendo algo errado ai.

Conseguiu 'enxergar' melhor o retorno do var_dump()?

 

use-o.

 

 

 

 

e assim, não faça UP no teu tópico.

aguarde que alguém te responda, o fórum não é helpdesk, qndo alguém souber vai responder ^_^

Compartilhar este post


Link para o post
Compartilhar em outros sites

William mas como pode a $_SESSION['nivel'] conter uma string de 32 caracteres se o valor dela é 1 no banco de dados. Vou dar uma olhada com mais calma. Obrigado pela explicação! Abraços.

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.