Fernando Mello
Validação de Usuário
06 de July de 2011 às 03:21PM
Boa noite pessoal !

Estou com um probleminha... estou colocando segurança em um site de cadastro.... e esta dando alguns erros que não estou conseguindo resolver, se alguém puder me ajudar... eu agradeço.

O problema é o seguinte tenho uma página index.php aonde o usuário faz o acesso... se estiver ok ele direciona para a página cadastro.php

existe um banco com uma tabela chamada acesso e lá tem os campos NOME, USUARIO e SENHA e junto com isso tenho os arquivos valida.php e seguranca.php. Esta tudo protegindo nas páginas com o include do arquivo seguranca.php

Mais na hora de logar esta dando o seguinte erro:

"PHP Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in E:\home\simsinam\Web\confiance\seguranca.php on line 69"

Na linha 69 tem esse código:

$sql = "SELECT `id`, `nome` FROM `".$_SG['tabela']."` WHERE ".$cS." `usuario` = '".$nusuario."' AND ".$cS." `senha` = '".$nsenha."' LIMIT 1";
$query = mysql_query($sql);
$resultado = mysql_fetch_assoc($query);

Confesso que não encontrei o erro !!! Se alguém puder me dar um help.

Obrigado.
Lucas Tiago de Moraes
Re: Validação de Usuário
06 de July de 2011 às 03:44PM
tente isso:

$sql = "SELECT id, nome FROM $_SG['tabela'] WHERE ".$cS." usuario = '$nusuario' AND $cS senha = '$nsenha' LIMIT 1";

Aspas dupla você não precisa concatenar, mas o erro aconteceu porque você usou ` no sql.

Falou.
Jayme A. C. Gimenez
Re: Validação de Usuário
06 de July de 2011 às 03:44PM
Fala, seu Fernando!

Precisa de todas essas aspas aí na query?
E o que é isso: $cS ?
Outra coisa, facilita muito fazer a query se vc faz assim com coisa esquisitas: $tabela = $_SG['tabela']; e, então, coloca na query o $SG .
Uma outra dica, essa de segurança, é fazer a primeira checagem do login com o mysql_num_rows e não com o mysql_fetch_assoc (a diferença é que o mysql_fetch_assoc traz conteúdo; se um cara conseguir botar um SQLinjection ele poderá ter, de graça, conteúdo de volta. Já com o num_rows ele teria, de graça, somente o retorno de um número). Aí, só o número retornar diferente de zero é que vc buscaria conteúdo.

Essa query não funciona se vc fizer simplesmente assim?

$sql = "SELECT id, nome FROM $tabela WHERE usuario = '$nusuario' AND senha = '$nsenha' LIMIT 1";
$query = mysql_query($sql);
$resultado = mysql_num_rows($query);
Fernando Mello
Re: Validação de Usuário
06 de July de 2011 às 03:52PM
Olá, fiz como foi falado

$sql = "SELECT id, nome FROM $tabela WHERE usuario = '$nusuario' AND senha = '$nsenha' LIMIT 1";
$query = mysql_query($sql);
$resultado = mysql_num_rows($query);

Mais continua dando o mesmo erro !!!
Fernando Mello
Re: Validação de Usuário
06 de July de 2011 às 03:54PM
Também fiz como você falou Lucas

$sql = "SELECT id, nome FROM $_SG['tabela'] WHERE ".$cS." usuario = '$nusuario' AND $cS senha = '$nsenha' LIMIT 1";

Mas da erro de código !! :-(
Jayme A. C. Gimenez
Re: Validação de Usuário
06 de July de 2011 às 04:02PM
E vc tem certeza que todas as variáveis estão à disposição da query?

$tabela : o nome da tabela está correto? Fez $tabela = $_SG['tabela'] antes da query?
Os nomes dos campos usuario e senha estão corretos?
$nusuario e $nsenha : já deu echos para ter certeza de que essas variáveis estão, mesmo, vindo do form?

E o que era o $cS na sua query inicial?
Fernando Mello
Re: Validação de Usuário
06 de July de 2011 às 04:06PM
O $cS é Case Sensitive

$cS = ($_SG['caseSensitive']) ? 'BINARY' : '';

Sim o nome da tabela é "acesso"

No arquivo seguranca.php

$_SG['servidor'] = 'mysql01.simsinam.com.br'; // Servidor MySQL
$_SG['usuario'] = 'simsinam'; // Usuário MySQL
$_SG['senha'] = 'xxxxxx'; // Senha MySQL
$_SG['banco'] = 'simsinam'; // Banco de dados MySQL

$_SG['paginaLogin'] = 'index.php'; // Página de login

$_SG['tabela'] = 'acesso';
Fernando Mello
Re: Validação de Usuário
06 de July de 2011 às 04:37PM
Resolvido !

O Problema estava nos id dos usuários. Mais resolvi.

Obrigado a todos !
Lucas Tiago de Moraes
Re: Validação de Usuário
06 de July de 2011 às 04:38PM
Oi, poderia colocar postar o código do arquivo seguranca.php?

falou.
Fernando Mello
Re: Validação de Usuário
07 de July de 2011 às 06:16AM
Olá Lucas ! Bom dia !

Segue o código do aqruivo seguranca.php ! Se lhe ajudar em alguma coisa tá ai todo comentado.

Abraços

<?php
// Configurações do Script
// ==============================
$_SG['conectaServidor'] = true; // Abre uma conexão com o servidor MySQL?
$_SG['abreSessao'] = true; // Inicia a sessão com um session_start()?

$_SG['caseSensitive'] = false; // Usar case-sensitive? Onde 'thiago' é diferente de 'THIAGO'

$_SG['validaSempre'] = true; // Deseja validar o usuário e a senha a cada carregamento de página?
// Evita que, ao mudar os dados do usuário no banco de dado o mesmo contiue logado.

$_SG['servidor'] = 'localhost'; // Servidor MySQL
$_SG['usuario'] = ''; // Usuário MySQL
$_SG['senha'] = ''; // Senha MySQL
$_SG['banco'] = ''; // Banco de dados MySQL

$_SG['paginaLogin'] = 'index.php'; // Página de login

$_SG['tabela'] = 'acesso'; // Nome da tabela onde os usuários são salvos
// ==============================

// ======================================
// ~ Não edite a partir deste ponto ~
// ======================================

// Verifica se precisa fazer a conexão com o MySQL
if ($_SG['conectaServidor'] == true) {
$_SG['link'] = mysql_connect($_SG['servidor'], $_SG['usuario'], $_SG['senha']) or die("MySQL: Não foi possível conectar-se ao servidor [".$_SG['servidor']."].");
mysql_select_db($_SG['banco'], $_SG['link']) or die("MySQL: Não foi possível conectar-se ao banco de dados [".$_SG['banco']."].");
}

// Verifica se precisa iniciar a sessão
if ($_SG['abreSessao'] == true) {
session_start();
}

/**
* Função que valida um usuário e senha
*
* @param string $usuario - O usuário a ser validado
* @param string $senha - A senha a ser validada
*
* @return bool - Se o usuário foi validado ou não (true/false)
*/
function validaUsuario($usuario, $senha) {
global $_SG;

$cS = ($_SG['caseSensitive']) ? 'BINARY' : '';

// Usa a função addslashes para escapar as aspas
$nusuario = addslashes($usuario);
$nsenha = addslashes($senha);

// Monta uma consulta SQL (query) para procurar um usuário
$sql = "SELECT `id`, `nome` FROM `".$_SG['tabela']."` WHERE ".$cS." `usuario` = '".$nusuario."' AND ".$cS." `senha` = '".$nsenha."' LIMIT 1";
$query = mysql_query($sql);
$resultado = mysql_fetch_assoc($query);

// Verifica se encontrou algum registro
if (empty($resultado)) {
// Nenhum registro foi encontrado => o usuário é inválido
return false;

} else {
// O registro foi encontrado => o usuário é valido

// Definimos dois valores na sessão com os dados do usuário
$_SESSION['usuarioID'] = $resultado['id']; // Pega o valor da coluna 'id do registro encontrado no MySQL
$_SESSION['usuarioNome'] = $resultado['nome']; // Pega o valor da coluna 'nome' do registro encontrado no MySQL

// Verifica a opção se sempre validar o login
if ($_SG['validaSempre'] == true) {
// Definimos dois valores na sessão com os dados do login
$_SESSION['usuarioLogin'] = $usuario;
$_SESSION['usuarioSenha'] = $senha;
}

return true;
}
}

/**
* Função que protege uma página
*/
function protegePagina() {
global $_SG;

if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
// Não há usuário logado, manda pra página de login
expulsaVisitante();
} else if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {
// Há usuário logado, verifica se precisa validar o login novamente
if ($_SG['validaSempre'] == true) {
// Verifica se os dados salvos na sessão batem com os dados do banco de dados
if (!validaUsuario($_SESSION['usuarioLogin'], $_SESSION['usuarioSenha'])) {
// Os dados não batem, manda pra tela de login
expulsaVisitante();
}
}
}
}

/**
* Função para expulsar um visitante
*/
function expulsaVisitante() {
global $_SG;

// Remove as variáveis da sessão (caso elas existam)
unset($_SESSION['usuarioID'], $_SESSION['usuarioNome'], $_SESSION['usuarioLogin'], $_SESSION['usuarioSenha']);

// Manda pra tela de login
header("Location: ".$_SG['paginaLogin']);
}
?>


Abraços
Pedro Cunha
Re: Validação de Usuário
02 de September de 2017 às 11:44AM
Boa tarde fernando.

O que quis dizer ao mencionar que o erro estava no "ID" do usuário?

Estou encontrando o mesmo problema.

Grato

Att
Você precisa estar logado no PHPBrasil.com para poder enviar mensagens para os nossos fóruns.

Faça o login aqui.