MiguelTb 2 Denunciar post Postado Fevereiro 4, 2011 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
gremio10 14 Denunciar post Postado Fevereiro 4, 2011 é só tu criar o código php embaixo da form... mas verificando se existe o POST tipo /** * sua form */ <?php if(isset($_POST)){ /** * aqui voce coloca o codigo do login. */ } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 4, 2011 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
William Bruno 1501 Denunciar post Postado Fevereiro 4, 2011 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
MiguelTb 2 Denunciar post Postado Fevereiro 4, 2011 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
William Bruno 1501 Denunciar post Postado Fevereiro 4, 2011 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
MiguelTb 2 Denunciar post Postado Fevereiro 4, 2011 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 Bruno 1501 Denunciar post Postado Fevereiro 4, 2011 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 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 :lol: Compartilhar este post Link para o post Compartilhar em outros sites
MiguelTb 2 Denunciar post Postado Fevereiro 4, 2011 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
William Bruno 1501 Denunciar post Postado Fevereiro 4, 2011 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
MiguelTb 2 Denunciar post Postado Fevereiro 4, 2011 Não hehe, axo que tenho que pegar o nivel na busca então, vou ver aqui. ^^ vlw! Compartilhar este post Link para o post Compartilhar em outros sites
Beraldo 864 Denunciar post Postado Fevereiro 4, 2011 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
MiguelTb 2 Denunciar post Postado Fevereiro 4, 2011 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
Beraldo 864 Denunciar post Postado Fevereiro 4, 2011 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 Compartilhar este post Link para o post Compartilhar em outros sites
MiguelTb 2 Denunciar post Postado Fevereiro 4, 2011 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
William Bruno 1501 Denunciar post Postado Fevereiro 4, 2011 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
MiguelTb 2 Denunciar post Postado Fevereiro 4, 2011 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
William Bruno 1501 Denunciar post Postado Fevereiro 4, 2011 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
MiguelTb 2 Denunciar post Postado Fevereiro 4, 2011 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
Beraldo 864 Denunciar post Postado Fevereiro 4, 2011 32 caracteres hexadecimais... cara de md5 você deve estar salvando o hash da senha em vez do nível Compartilhar este post Link para o post Compartilhar em outros sites