devin Posted May 21, 2009 at 10:16 AM Report #266079 Posted May 21, 2009 at 10:16 AM boas. mais uma dúvida, para variar pessoal. é o seguinte, na minha index.php tenho um sistema de login que só quero que apareça se o utilizador ainda não estiver logado. se estiver, quero que em vez da form de login apresente uma mensagem com link para fazer logout. :smoke:
mohican Posted May 21, 2009 at 11:51 AM Report #266108 Posted May 21, 2009 at 11:51 AM usa a global $_SESSION, quando faz login crias depois usas if(isset($_SESSION['tal'])) { //código para user com login feito } else { //código para user sem login }
devin Posted May 21, 2009 at 12:20 PM Author Report #266115 Posted May 21, 2009 at 12:20 PM estou a fazer isso e ele limita-se a não aparecer. quer esteja user loged ou não.
mohican Posted May 21, 2009 at 01:03 PM Report #266124 Posted May 21, 2009 at 01:03 PM tens de usar session_start() em todas as paginas que queiras ir buscar a global session. tens isto mais detalhado no php.net por exemplo
devin Posted May 21, 2009 at 01:18 PM Author Report #266128 Posted May 21, 2009 at 01:18 PM e estou a usar o session_start(). <script type="text/javascript"> function form_submit() { $("div#content").load("login-exec.php",{ username: $("txtUsername").val(), password: $("txtPassword").val()}); return false; } </script> <?php if(!isset($_SESSION['SESS_MEMBRO_ID']) || (trim($_SESSION['SESS_MEMBRO_ID']) == '')) { echo '<h2>login</h2>'; echo '<form id="loginForm" name="loginForm" method="post" onsubmit="form_submit()">'; echo '<table width="232" border="0" align="center" cellpadding="2" cellspacing="0">'; echo '<tr>'; echo '<td width="77">utilizador</td>'; echo '<td width="215"><input name="txtUsername" type="text" id="s" /></td>'; echo '</tr>'; echo '<tr>'; echo '<td>password</td>'; echo '<td><input name="txtPassword" type="password" id="s" /></td>'; echo '</tr>'; echo '<tr>'; echo '<td> </td>'; echo '<td><input type="submit" name="Submit" id="x" value="Entrar" /></td>'; echo '</tr>'; echo '</table>'; echo '</form>'; }else{ echo 'Welcome' && $_SESSION['SESS_NOME']; } ?> está aqui o código que estou a user.
scorch Posted May 21, 2009 at 07:20 PM Report #266241 Posted May 21, 2009 at 07:20 PM Faz isto. <?php session_start(); if(!isset($_SESSION['SESS_MEMBRO_ID']) || (trim($_SESSION['SESS_MEMBRO_ID']) == '')) { echo '<h2>login</h2>'; echo '<form id="loginForm" name="loginForm" method="post" onsubmit="form_submit()">'; echo '<table width="232" border="0" align="center" cellpadding="2" cellspacing="0">'; echo '<tr>'; echo '<td width="77">utilizador</td>'; echo '<td width="215"><input name="txtUsername" type="text" id="s" /></td>'; echo '</tr>'; echo '<tr>'; echo '<td>password</td>'; echo '<td><input name="txtPassword" type="password" id="s" /></td>'; echo '</tr>'; echo '<tr>'; echo '<td> </td>'; echo '<td><input type="submit" name="Submit" id="x" value="Entrar" /></td>'; echo '</tr>'; echo '</table>'; echo '</form>'; }else{ echo 'Welcome' && $_SESSION['SESS_NOME']; } ?> PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.
devin Posted May 22, 2009 at 08:21 AM Author Report #266330 Posted May 22, 2009 at 08:21 AM parece que apenas desenha a form. não executa depois o script que está no onsubmit da form. eu faço entrar e fica na mesma. e quando meto dados errados tenho uma div em que aparece lá os erros e agora nem isso aparece. EDIT: empanquei neste problema.
scorch Posted May 22, 2009 at 09:19 PM Report #266621 Posted May 22, 2009 at 09:19 PM Tu usas o evento onsubmit para chamar a função, certo? PS: Não respondo a perguntas por mensagem que podem ser respondidas no fórum.
mohican Posted May 23, 2009 at 01:52 PM Report #266742 Posted May 23, 2009 at 01:52 PM em vez do onsubmit usa no botao o onclick="chamar_funcao()" li algures que o onsubmit por vezes n funciona lá mt bem..? n custa nada testar outras opções B) mas ja agora outra coisa... onde é que estás a iniciar a sessao?
devin Posted May 25, 2009 at 08:26 AM Author Report #267011 Posted May 25, 2009 at 08:26 AM continua na mesma. só desenha a form mas não executa o que quer que seja. eu inicio a sessão como está no código acima que o scorch alterou.
devin Posted June 8, 2009 at 08:49 AM Author Report #270639 Posted June 8, 2009 at 08:49 AM e agora espero que o tópico morra? ?
The Loser Posted June 8, 2009 at 10:48 AM Report #270661 Posted June 8, 2009 at 10:48 AM Não te vejo a inicializar as variáveis de sessão (suponho que seja no login-exec.php). Give us some code. 😄 I intend to live forever. So far so good.
devin Posted June 8, 2009 at 10:56 AM Author Report #270663 Posted June 8, 2009 at 10:56 AM aqui está o index <?php session_start(); ?> <script type="text/javascript"> function form_submit() { $("div#content").load("login-exec.php",{ username: $("txtUsername").val(), password: $("txtPassword").val()}); return false; } </script> <html> <head> <title>PCL</title> <meta name="keywords" content="" /> <meta name="description" content="" /> <link href="default.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="wrapper"> <!-- start header --> <div id="logo"> <h1><a href="#">PCL </a></h1> </div> <div id="header"> <div id="menu"> <ul> <li class="current_page_item"><a href="index.php">Inicio</a></li> <li><a href="#">Produtos</a></li> <li><a href="#">Área de Clientes</a></li> <li><a href="#">Downloads</a></li> <li class="last"><a href="#">Contacto</a></li> </ul> </div> </div> <!-- end header --> </div> <!-- start page --> <div id="page"> <!-- start content --> <div id="content"> <div class="post"> <h1 class="title">bem vindo à PCL </h1> <div class="entry"> <p>This is Emporium, is a free template from <a href="http://freecsstemplates.org/">Free CSS Templates</a> released under a <a href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5 License</a>. You're free to use this template for both commercial or personal use. I only ask that you link back to <a href="http://freecsstemplates.org/">my site</a> in some way. Enjoy </p> <p>Curabitur tellus. Phasellus tellus turpis, iaculis in, faucibus lobortis, posuere in, lorem. Donec a ante. Donec neque purus, adipiscing id, eleifend a, cursus vel, odio. Vivamus varius justo sit amet leo. Morbi sed libero. Vestibulum blandit augue at mi. Praesent fermentum lectus eget diam. Nam cursus, orci sit amet porttitor iaculis, ipsum massa aliquet nulla, non elementum mi elit a mauris. </p> </div> <div class="meta"> <p class="links"><a href="#" class="more">Read full article</a> <b>|</b> <a href="#" class="comments">Comments (32)</a></p> </div> </div> <div class="post"> <h2 class="title">Lorem Ipsum Dolor Volutpat</h2> <div class="entry"> <p>Curabitur tellus. Phasellus tellus turpis, iaculis in, faucibus lobortis, posuere in, lorem. Donec a ante. Donec neque purus, adipiscing id, eleifend a, cursus vel, odio. Vivamus varius justo sit amet leo. Morbi sed libero. Vestibulum blandit augue at mi. Praesent fermentum lectus eget diam. Nam cursus, orci sit amet porttitor iaculis, ipsum massa aliquet nulla, non elementum mi elit a mauris. In hac habitasse platea.</p> <p>Vestibulum blandit augue at mi. Praesent fermentum lectus eget diam. Nam cursus, orci sit amet porttitor iaculis, ipsum massa aliquet nulla, non elementum mi elit a mauris. </p> </div> <div class="meta"> <p class="links"><a href="#" class="more">Read full article</a> <b>|</b> <a href="#" class="comments">Comments (32)</a></p> </div> </div> </div> <!-- end content --> <!-- start sidebar --> <div id="sidebar"> <ul> <li id="search"> <h2>Procurar</h2> <form method="get" action=""> <fieldset> <input type="text" id="s" name="s" value="" /> <input type="submit" id="x" value="Procurar" /> </fieldset> </form> </li> <li> </li> <div class="log"> <?php if(isset($_SESSION['ERRMSG_ARR']) && is_array($_SESSION['ERRMSG_ARR']) && count($_SESSION['ERRMSG_ARR']) >0 ) { echo '<ul class="err">Erro:<br>'; foreach($_SESSION['ERRMSG_ARR'] as $msg) { echo '',$msg,'<br>'; } echo '</ul>'; unset($_SESSION['ERRMSG_ARR']); } ?> </div> <li> <?php if(!isset($_SESSION['SESS_MEMBRO_ID']) || (trim($_SESSION['SESS_MEMBRO_ID']) == '')) { echo '<h2>login</h2>'; echo '<form id="loginForm" name="loginForm" method="post" onsubmit="form_submit()">'; echo '<table width="232" border="0" align="center" cellpadding="2" cellspacing="0">'; echo '<tr>'; echo '<td width="77">utilizador</td>'; echo '<td width="215"><input name="txtUsername" type="text" id="s" /></td>'; echo '</tr>'; echo '<tr>'; echo '<td>password</td>'; echo '<td><input name="txtPassword" type="password" id="s" /></td>'; echo '</tr>'; echo '<tr>'; echo '<td> </td>'; echo '<td><input type="submit" name="Submit" id="x" value="Entrar" /></td>'; echo '</tr>'; echo '</table>'; echo '</form>'; }else{ echo 'Welcome' && $_SESSION['SESS_NOME']; } ?> <br> <br> </li> <li> <h2>Lorem Ipsum</h2> <ul> <li><a href="#">Fusce dui neque fringilla</a></li> <li><a href="#">Eget tempor eget nonummy</a></li> <li><a href="#">Magna lacus bibendum mauris</a></li> <li><a href="#">Nec metus sed donec</a></li> <li><a href="#">Magna lacus bibendum mauris</a></li> <li><a href="#">Velit semper nisi molestie</a></li> <li><a href="#">Eget tempor eget nonummy</a></li> </ul> </li> <li> <h2>Volutpat Dolore</h2> <ul> <li><a href="#">Nec metus sed donec</a></li> <li><a href="#">Magna lacus bibendum mauris</a></li> <li><a href="#">Velit semper nisi molestie</a></li> <li><a href="#">Eget tempor eget nonummy</a></li> <li><a href="#">Nec metus sed donec</a></li> <li><a href="#">Magna lacus bibendum mauris</a></li> <li><a href="#">Velit semper nisi molestie</a></li> </ul> </li> </ul> </div> <!-- end sidebar --> <div style="clear: both;"> </div> </div> <!-- end page --> <!-- start footer --> <div id="footer"> <p id="legal">© 2009. Direitos Reservados.</p> </div> <!-- end footer --> </body> </html> e aqui tenho o login-exec <?php //Iniciar sessão session_start(); //Incluir os detalhes da base de dados require_once('config.php'); //Array para guardar os erros de validação $errmsg_arr = array(); //Flag de erro de validação $errflag = false; //Ligação ao servidor mysql $link = mysql_connect(DB_HOST, DB_USER, DB_PASSWORD); if(!$link) { die('Falha na ligação ao servidor: ' . mysql_error()); } //Seleccionar a base de dados $db = mysql_select_db(DB_DATABASE); if(!$db) { die("Não foi possível seleccionar a base de dados."); } //Prevenir SQL injection function clean($str) { $str = @trim($str); if(get_magic_quotes_gpc()) { $str = stripslashes($str); } return mysql_real_escape_string($str); } //Limpar $login = clean($_POST['login']); $password = clean($_POST['password']); //Validações input if($login == '') { $errmsg_arr[] = 'Falta o utilizador'; $errflag = true; } if($password == '') { $errmsg_arr[] = 'Falta a password'; $errflag = true; } //Se ocurrer falha na validação, redirecionar para a página de login if($errflag) { $_SESSION['ERRMSG_ARR'] = $errmsg_arr; session_write_close(); header("location: index.php"); exit(); } //Criar query $qry="SELECT * FROM membros WHERE utilizador='$login' AND password='".md5($_POST['password'])."'"; $result=mysql_query($qry); //Verificar se a query foi feita com sucesso if($result) { if(mysql_num_rows($result) == 1) { //Login Successful session_regenerate_id(); $member = mysql_fetch_assoc($result); $_SESSION['SESS_MEMBRO_ID'] = $member['membro_id']; $_SESSION['SESS_NOME'] = $member['nome']; $_SESSION['SESS_MORADA'] = $member['morada']; $_SESSION['SESS_CONTACTO'] = $member['contacto']; session_write_close(); header("location: member-index.php"); exit(); }else { //Login failed header("location: login-failed.php"); exit(); } }else { die("Query falhou"); } ?> é que não estou conseguir detectar o erro.
The Loser Posted June 8, 2009 at 09:07 PM Report #270849 Posted June 8, 2009 at 09:07 PM $login = clean($_POST['login']); Tens a certeza que é isso? $_POST['login'] está mesmo a ser passado? I intend to live forever. So far so good.
devin Posted June 9, 2009 at 08:43 AM Author Report #270940 Posted June 9, 2009 at 08:43 AM penso que me enganei nessa parte. mas já troquei pelo que a funcção define o user e a pass e mesmo assim não dá nada. aposto que é um erro estúpido.
andreb Posted June 9, 2009 at 03:45 PM Report #271052 Posted June 9, 2009 at 03:45 PM devin o que significa esta parte: $("div#content").load("login-exec.php",{ username: $("txtUsername").val(), password: $("txtPassword").val()}); envia as informações por Post? ...
devin Posted June 9, 2009 at 03:48 PM Author Report #271057 Posted June 9, 2009 at 03:48 PM é para utilizar outro php (login-exec.php) sem sair do index.php . só que por algum motivo não está a funcionar e não estou a entender porquê. ?
andreb Posted June 9, 2009 at 03:56 PM Report #271061 Posted June 9, 2009 at 03:56 PM sim isso já tinha percebido.. mas o que queria saber era de que forma? $_POST[]? mas olha acho que ja sei o que poderá ser.. é estares a alterar a a SESSION através desse código.. já exprimentas-te correr mesmo a outra pagina com as informações de login separadamente e depois ver se isso funcionava? ...
devin Posted June 9, 2009 at 04:09 PM Author Report #271064 Posted June 9, 2009 at 04:09 PM o login-exec está a funcar bem, o erro deve estar na maneira como defino os valores para usar no login-exec.
The Loser Posted June 9, 2009 at 08:04 PM Report #271123 Posted June 9, 2009 at 08:04 PM Os valores são mesmo enviados por POST? Não sei o que estás a usar (parece-me jQuery mas abstenho-me de afirmações por ignorância), mas não me parece que os valores sejam mesmo enviados por POST. Faz dump dos valores de $_POST para verificar-se isto. 🙂 I intend to live forever. So far so good.
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now