Jump to content

Recommended Posts

Posted

Bom dia,

Eu estou a fazer um sistema de login...

E agora estou na parte em que lê se o user ta logado ou não, mas o que me está a acontecer é assume sempre que o user não esta logado:

<?PHP
include 'db_connect.php';
session_start();

//user 'logado' ou nao
if (!(isset($_SESSION['username']) && $_SESSION['username'] != ''))
{
 header ("Location: index.php");
}
$username = $_SESSION['username'];

$query_lang="SELECT * FROM content_lang";
$lang=mysql_query($query_lang, $connect);
$row_lang=mysql_fetch_assoc($lang);

$query_cont="SELECT * FROM content WHERE id = '".$row_lang['id_content']."'";
$cont=mysql_query($query_cont, $connect);
$row_cont=mysql_fetch_assoc($cont);
?>
<html>
 <head>
  <title>Adminstração</title>
 </head>
 <body style="color:#FFF;" bgcolor="#666666">
  Bem-Vindo ao Backoffice, <?PHP $username ?>! <a href="logout.php"> Sair</a>
  <br/>
  <br/>
  <a href="adicionar.php"><input type="button" value="Adicionar Novo"></input></a>
 <?PHP
 do {
 ?>
  <table width="100%" style="text-align:center;" align="center" border=1>
<tr>
 <td width="5%">
  IDENTIFICADOR
 </td>
 <td width="5%">
  LINGUAGEM
 </td>
 <td width="10%">
  TÍTULO
 </td>
 <td width="50%">
  CONTEÚDO
 </td>
 <td width="5%">

 </td>
 <td width="5%">

 </td>
</tr>
<tr>
 <td width="5%">
  <?PHP echo $row_cont['identifier']; ?>
 </td>
 <td width="5%">
  <?PHP echo $row_lang['lang']; ?>
 </td>
 <td width="10%">
  <?PHP echo $row_lang['titulo']; ?>
 </td>
 <td align="justify" width="50%">
  <?PHP echo $row_lang['conteudo']; ?>
 </td>
 <td width="5%">
  <a href="editar.php">Editar</a>
 </td>
 <td width="5%">
  <a href="remover.php">Remover</a>
 </td>
</tr>
  </table>
 <?PHP
 } while ($row_lang=mysql_fetch_assoc($lang));
 ?>
</body>
</html>
Posted

A tua condição if está errada

//user 'logado' ou nao
if (!(isset($_SESSION['username']) && $_SESSION['username'] == ''))

Continua a dar o mesmo problema...eu faço login e manda-me po index.php e eu quero que ele vá para o admin.php

Eu quero esta função logado ou nao para proteger melhor a página de gestão, se não qualquer um entra...

Posted (edited)

Garante que o nome da tua sessão é mesmo "username". Num outro tópico teu, usaste "user". Em todo o caso, coloca para testes:

var_dump($_SESSION);

depois do session_start() para veres o que está no array das sessões.

Quanto ao if, acho que deveria ser:

if (!(isset($_SESSION['username']) || $_SESSION['username'] == ''))

(As duas barras verticais || são o OR; também podes usar OR se quiseres)

E a propósito, depois de redireccionares, coloca uma chamada à função exit(), senão o resto do script vai continuar a ser executado.

Edited by softklin

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Posted

Garante que o nome da tua sessão é mesmo "username". Num outro tópico teu, usaste "user". Em todo o caso, coloca para testes:

var_dump($_SESSION);

depois do session_start() para veres o que está no array das sessões.

Quanto ao if, acho que deveria ser:

if (!(isset($_SESSION['username']) || $_SESSION['username'] == ''))

(As duas barras verticais || são o OR; também podes usar OR se quiseres)

E a propósito, depois de redireccionares, coloca uma chamada à função exit(), senão o resto do script vai continuar a ser executado.

O dump dá-me empty...

E com o "||" entrou na conta, por isso acho que não é a opção correta.

Posted

Se o dump te deu empty e o puseste depois da chamada ao session_start, então a resposta é simples: a tua sessão não foi bem definida, e não tens dados de utilizador. Volta ao teu script de login e garante que a sessão é corretamente definida.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Posted

Se o dump te deu empty e o puseste depois da chamada ao session_start, então a resposta é simples: a tua sessão não foi bem definida, e não tens dados de utilizador. Volta ao teu script de login e garante que a sessão é corretamente definida.

Tá bem:

login.php

<?php
   session_start();

   include "db_connect.php";

   $username = $_POST['user'];
   $pass = $_POST['password'];

   $sql="SELECT * FROM utilizadores WHERE username='". $username. "'";
   $resultado = mysql_query($sql, $connect) or die(mysql_error());
   $num = mysql_fetch_assoc($resultado);

   if ($username == $num['username'] AND sha1($pass) == $num['password'])
{
 $username=$_SESSION['username'];

 header("Location: admin.php");
   }
else
{
 header("Location: login_error.php");
   }
   mysql_close($connect);
?>

admin.php

<?PHP
include 'db_connect.php';
session_start();

var_dump($_SESSION);

//user 'logado' ou nao

if (!(isset($_SESSION['username']) || $_SESSION['username'] == ''))
{
 header ("Location: index.php");
}

$username = $_SESSION['username'];

$query_lang="SELECT * FROM content_lang ORDER BY id ASC";
$lang=mysql_query($query_lang, $connect);
$row_lang=mysql_fetch_assoc($lang);

$query_cont="SELECT * FROM content WHERE id = '".$row_lang['id_content']."'";
$cont=mysql_query($query_cont, $connect);
$row_cont=mysql_fetch_assoc($cont);
?>
<html>
 <head>
  <title>Adminstração</title>
  <!---------------------------------------------->
  <script type="text/JavaScript">
   function confirmDelete()
   {
 var agree=confirm("Tem a certeza que quer remover?");

 if (agree)
 {
   return true;
 }
 else
 {
   return false;
 }
   }
  </script>
  <!---------------------------------------------->
 </head>
 <body style="color:#FFF;" bgcolor="#666666">
  Bem-Vindo ao Backoffice, <?PHP $username ?>! <a href="logout.php"> Sair</a>
  <br/>
  <br/>
  <a href="adicionar.php"><input type="button" value="Adicionar Novo"></input></a>
  <table width="100%" style="text-align:center;" align="center" border=1>
   <tr>
 <td width="5%">
  IDENTIFICADOR
 </td>
 <td width="5%">
  LINGUAGEM
 </td>
 <td width="10%">
  TÍTULO
 </td>
 <td width="50%">
  CONTEÚDO
 </td>
 <td width="5%">

 </td>
 <td width="5%">

 </td>
   </tr>
 <?PHP
 do {
 ?>
   <tr>
 <td width="5%">
  <?PHP echo $row_cont['identifier']; ?>
 </td>
 <td width="5%">
  <?PHP echo $row_lang['lang']; ?>
 </td>
 <td width="10%">
  <?PHP echo $row_lang['titulo']; ?>
 </td>
 <td align="justify" width="50%">
  <?PHP echo $row_lang['conteudo']; ?>
 </td>
 <td width="5%">
  <a href="edit.php">Editar</a>
 </td>
 <td width="5%">
  <a href="" onClick="confirmDelete();">Remover</a>
 </td>
   </tr>
  </table>
 <?PHP
 } while ($row_lang=mysql_fetch_assoc($lang));
 ?>
</body>
</html>

index.php

<html>
<head>
<title>Adminstração</title>
</head>

<body bgcolor="#666666">
<table width="100%" height="100%" border="0" align="center" cellpadding="0" cellspacing="1">
 <tr>
  <form method="post" action="login.php">
   <td align="center" valign="middle">
 <table width="300px" cellpadding="0" cellspacing="3" bgcolor="#FFFFFF" style=" border: 2px solid #FFFFFF;">
  <tr>
   <td style=" border-style:none;">
    <br>
   </td>
  </tr>

  <tr>
   <td align="right" style="font-size: 13;font-family: Arial, Helvetica, sans-serif;font-weight: bold;border-style:none;">
    Utlizador:
   </td>

   <td style=" border-style:none;">
    <input name="user" type="text">
   </td>
  </tr>

  <tr>
   <td align="right" style="font-size: 13;font-family: Arial, Helvetica, sans-serif;font-weight: bold;border-style:none;">
    Password:
   </td>
   <td style=" border-style:none;">
    <input name="password" type="password">
   </td>
  </tr>

  <tr>
   <td colspan="2" align="center" style=" border-style:none;">
    <input type="submit" name="submit" value="Login">
   </td>
  </tr>

  <tr>
   <td style=" border-style:none;">
    <br>
   </td>
  </tr>
 </table>
 <span class="style1" style="font-size: 13;font-family: Arial, Helvetica, sans-serif;font-weight: bold;color: red;"> </span>
   </td>
  </form>
 </tr>
</table>
</body>
</html>
Posted (edited)

No teu login.php, estás a atribuir o valor de sessão à variável $username, ou seja, estás a ler a sessão. Nessa altura, o teu interesse é escrever na sessão o utilizador que acabou de iniciar sessão no teu sistema, por isso tens de inverter a ordem da atribuição.

$_SESSION['username'] = $username;
Edited by softklin

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Posted

No teu login.php, estás a atribuir o valor de sessão à variável $username, ou seja, estás a ler a sessão. Nessa altura, o teu interesse é escrever na sessão o utilizador que acabou de iniciar sessão no teu sistema, por isso tens de inverter a ordem da atribuição.

$_SESSION['username'] = $username;

Eish fui eu que mudei sem querer :S

Agora tenho um problema se eu mudar o url para ir para o admin.php ele entra eu não quero... Como é que faço?

Posted

Eu entro com a conta existente e o dump dá-me o username, tudo bem. depois de fazer logout se eu mudar o url ele dá-me empty e isso nao pode acontecer nao pode se quer entrar...

Posted (edited)

Substitui a tua condição por esta:

if (!isset($_SESSION['username']) || $_SESSION['username'] == '') header("Location: index.php");
Edited by johnmaia

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.