Ir para conteúdo

POWERED BY:

Arquivado

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

Alex Lupóz

Erro ao exibir nome de usuário logado

Recommended Posts

Primeiramente, boa tarde!

Estou com o seguinte problema: não consigo exibir de forma correta o nome de usuário na página depois do login. Sempre aparece apenas o usuário de ID 1, independente do usuário que logue.

Estarei postando abaixo, os respectivos códigos das páginas que provavelmente, contém o código que é preciso ser alterado.

 

painel.php (página pós-login)

<?php
	require_once $_SERVER['DOCUMENT_ROOT'].'/painel/system/system.php';
	AccessPrivate();
?>
<?php
	require_once $_SERVER['DOCUMENT_ROOT'].'/painel/system/exibir.php';
?>


<!DOCTYPE HTML>
<html lang="pt_BR">
<head>
<meta charset="utf-8">
<title>Painel</title>
</head>

<body>

	<h2>Painel</h2>

	<hr>
	Bem-vindo, <strong><?=$linha['name']?></strong><p>
 
<? echo $id ?>

	<a href="?logout" title="sair">Sair</a>
	
	</body>
	</html>

Exibir.php

<?php // definições de host, database, usuário e senha
$host = "localhost";
$db = "painel";
$user = "root";
$pass = "";

// conecta ao banco de dados

$con = ($GLOBALS["___mysqli_ston"] = mysqli_connect($host,  $user,  $pass)) or trigger_error(((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)),E_USER_ERROR);

// seleciona a base de dados em que vamos trabalhar

((bool)mysqli_query( $con, "USE $db"));

// cria a instrução SQL que vai selecionar os dados

$query = sprintf("SELECT id, name, password FROM membros");

// executa a query

$dados = mysqli_query( $con, $query) or die(((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)));

// transforma os dados em um array

$linha = mysqli_fetch_assoc($dados);

// calcula quantos dados retornaram

$total = mysqli_num_rows($dados);

?>

Eu chamo dentro da página painel: <?=$linha['name']?>, onde "name" é o campo salvo no meu DB (eu troquei pelo campo "id", o que mostrou que apenas a id de nº 1 aparece, independente do usuário que se logue, como dito anteriormente)

Ele funciona, mas não da forma que eu gostaria. Será que existe alguma forma de inverter esta situação?

Obrigado desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu SELECT não tem WHERE. Por isso ele pegar todos os resultados. E você busca sempre o primeiro resultado. Logo, sempre virá o ID 1

 

Você precisa usar WHERE no SELECT, filtrando pelo ID do usuário logado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu SELECT não tem WHERE. Por isso ele pegar todos os resultados. E você busca sempre o primeiro resultado. Logo, sempre virá o ID 1

 

Você precisa usar WHERE no SELECT, filtrando pelo ID do usuário logado

Então o meu código ficaria:

 

$query = sprintf("SELECT id, name, password FROM membros WHERE id = $name");

Deste modo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você está filtrando pelo campo "id" e usando a variável 'name'. Escolha um ou outro. É melhor usar ID

 

Mudei para ID: $query = sprintf("SELECT id, name, password FROM membros WHERE id = $id");

 

Mas agora dá erro "Undefined Variable"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como criou a variável? Qual o valor que ela recebe? Mostre como fez

 

Na página exibir.php, eu fiz:

$id = "id";

E na página painel.php, estou usando este código para exibir:

<?=$linha['id']?>

Deu certo para fazer o erro de "Undefined Variable" desaparecer, mas continuo com o mesmo problema: independente do usuário logado, apenas o id 1 aparece.

 

Será que o erro é mesmo na linha 21 do meu código da página exibir.php?

$query = sprintf("SELECT id, name, password FROM membros WHERE id = $id");

dasdsa_zpsa309600b.png

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você deve salvar o id do usuario em uma $_SESSION['id'], após validar o usuario e salvar o id na $_SESSION['id'] sua consulta ficaria assim:

 

$query = sprintf("SELECT id, name, password FROM membros WHERE id = '". $_SESSION['id']."'");

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpe a demora.

Ainda não deu certo, amigo :upset:

Acho que talvez o problema seja na função que valida o login. Será que teria como mudar esse código para salvar na session?:

<?php
	
	Init();

	// Valida Form de Login
	function ValidateFormLogin(){
		if(!!GetPost('send')){
			$message 	= null;
			$RedCad 	= null;

			$username 	= GetPost('username');
			$password 	= GetPost('password');
			
			if(empty($username))
				$message = 'Informe seu nome de usuário!';
			else if(empty($password))
				$message = 'Informe sua senha!';
			else {

				if(!UserVerify($username, $password))
					$message = 'Nome de usuário ou senha incorretos!';
				else if(!UserVerify($username, $password, true))
					$message = 'Esta conta foi desativada!';
				else
					CreateSession($username, $password);
			}

			echo ($message != null) ? $message.'<hr>' : null;
		}
	}
	
	// Valida Form de Cadastro
	function ValidateFormRegister(){
		if(!!GetPost('send')){
			$message	= null;
			$RedCad 	= null;

			$name 		= GetPost('name');
			$mail 		= GetPost('mail');
			$username	= GetPost('username');
			$password	= GetPost('password');
			$confirm	= GetPost('confirm');

			if(empty($name))
				$message = 'Informe seu nome';
			else if(empty($mail))
				$message = 'Informe seu email';
			else if(!filter_var($mail, FILTER_VALIDATE_EMAIL))
				$message = 'Informe um email válido';
			else if(empty($username))
				$message = 'Informe seu usuário ';
			else if(empty($password))
					$message = 'Informe sua senha';
			else if(empty($confirm))
					$message = 'Confirme sua senha';
			else if($password != $confirm)
					$message = 'As senhas não correspondem';
			else {

				if(!MailExists($mail))
					$message = 'Este email já está cadastrado no sistema!';
				else if(!UserNameExists($username))
					$message = 'Este nome de usuário já está cadastrado no sistema';
				else {
					$register = Register($name, $mail, $username, $password);

					if(!$register)
						$message = 'Desculpe, ocorreu um erro no sistema...';
					else
						$message = 'Você foi cadastrado com sucesso!';
						$RedCad = header("location:../paginas/redcad.php");
				}

			}

			echo ($message != null) ? $message.'<hr>' : null;
		}
	}

	// Inicia o Sistema
	function Init(){
		session_start();

		// Chama CONFIG
		$configFile = $_SERVER['DOCUMENT_ROOT'].'/painel/system/config.php';
		if(!file_exists($configFile))
			die('Erro config.php');
		else
			require_once $configFile;

		// Chama HELPERS
		if(!file_exists(FILE_HELPERS))
			die('Erro helpers.php');
		else
			require_once FILE_HELPERS;

		// Chama DATABASE
		if(!file_exists(FILE_DATABASE))
			die('Erro database.php');
		else
			require_once FILE_DATABASE;

		Connect();
		DoLogout();
	}

E no caso, na página painel (caso o login seja bem sucedido), eu teria que colocar um "session_start();"?

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você realmente setou o $id para 'id' ou foi só pra exemplificar.

 

O usuário tem que entrar com login e senha, pra entrar no sistema?

 

Neste caso você não pode usar o id como discriminador. Você tem selecionar o usuario onde:

 

WHERE login = "{$_POST['login']}" AND senha = "{$_POST['senha']}"

 

Lembre-se de escapar as variáveis antes de usa-las.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, resolvi com a ajuda de uma amigo. Estou postando a solução aqui para caso de outras pessoas estiverem com o mesmo erro e puderem de alguma forma, absorver para aplicar em seu próprio projeto:

Logo abaixo da variável que recebe o valor do campo "username" do meu formulário, apenas adicionei a linha:

$_SESSION['username'] = $username;

e chamei na página HTML usando:

<?php echo $_SESSION['username']; ?>

Mas obrigado pelas respostas.

Um abraço!

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.