Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Mesmo digitando os dados corretos na tela de login ao clicar no botão entrar não faz o logon e os dados são apagados resetados. server xampp 3.2.2 php 7 mysql 5.1.7.9.
Segui o código:
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
require_once 'conexao.php';
$usuario = $_POST['usuario'];
$senha = $_POST['senha'];
$sql = "select nome, usuario, senha from tab_socios where usuario = '$usuario' and senha = '$senha'";
$query = mysqli_query ($conexao,$sql);
$linhas = mysqli_affected_rows($conexao);
if ($linhas > 0){
session_start();
$_SESSION['$usuario'] = $usuario;
while ($exibirNome = mysqli_fetch_array($query)){
$nome = $exibirNome[0];
$nomeusuario = $exibirNome[1];
$enhausuario = $exibirNome[2];
}
$_SESSION['nome'] = $nome;
header ("Location:sistema.php");
}else{
print "Dados não conferem!<br>";
print "<a href='index.php'>Voltar</a>";
}
?>>
3 horas atrás, Draco Malfoy disse:
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
session_start();
De:
$usuario = $_POST['usuario'];
Para:
// previne SQL Injection
$usuario = mysqli_real_escape_string($conexao, $_POST['usuario']);
De:
$senha = $_POST['senha'];
Para:
// previne SQL Injection
$senha = mysqli_real_escape_string($conexao, $_POST['senha']);
De:
$linhas = mysqli_affected_rows($conexao);
Para:
$linhas = mysqli_num_rows($query);
Ok vou testar, o brigado pela resposta.>
3 horas atrás, Draco Malfoy disse:
<?php
ini_set('display_errors', true);
error_reporting(E_ALL);
session_start();
De:
$usuario = $_POST['usuario'];
Para:
// previne SQL Injection
$usuario = mysqli_real_escape_string($conexao, $_POST['usuario']);
De:
$senha = $_POST['senha'];
Para:
// previne SQL Injection
$senha = mysqli_real_escape_string($conexao, $_POST['senha']);
De:
$linhas = mysqli_affected_rows($conexao);
Para:
$linhas = mysqli_num_rows($query);
Olá draco malfoy acrescentei as mudanças sugeridas não logou ´mesmo digitando o nome de usuário e senha corretos ao clicar em entrar ele apaga oque foi digitado e volta para tela de login. comentei o header ("Location:sistema.php"); pra ver se dava erro, nada, a tela processalogin.php fica em branco. como estou testando no host local no win 7 fui no php.ini e setei session.save_path = "C:/Temp" não funfou, então onde estou errando?Manda o código do seu formulário de POST.
>
2 horas atrás, Jesse&Francinete disse:
Manda o código do seu formulário de POST.
Oi, Jesse&francinete ai está:
<!DOCTYPE html>
<html lang="pt-br">
<head>
<title>Logar</title>
<meta charset="utf-8">
<link rel="stylesheet" href="_css/style.css">
</head>
<body>
<form method="post" action="processalogin.php"><br>
<fieldset><legend>Login</legend>
<br>
<input type="text" name="usuario" placeholder="Nome do Usuario" required autofocus><br>
<br>
<input type="password" name="senha" placeholder="Digite sua senha" required><br><br>
<input type="submit" value="Entrar" class="btn"><br>
Ou se registre agora! <a href="cadastro.php">Novo Cadastro</a>
</fieldset>
</form>
</body>
</html>troque:
$query = mysqli_query ($conexao,$sql);
por:
$query = mysqli_query($conexao, $sql) or die (mysqli_error($conexao));
faça login novamente e nos diga se da algum error.Cara, eu tenho um sistema de login, vou mandar a parte em PHP, espero que esclareça suas dúvidas:
<?php
if(!isset($_SESSION))
session_start();
//Login de Usários
if(isset($_POST['login'])){
include('class/config.php');
$erro = array();
// Captação de dados
$senha = $_POST['password'];
$_SESSION['email'] = $mysqli->escape_string($_POST['email']);
// Validação de dados
if(count($erro) == 0){
$sql = "SELECT senha as senha, id as valor
FROM admin
WHERE email = '$_SESSION[email]'";
$que = $mysqli->query($sql) or die($mysqli->error);
$dado = $que->fetch_assoc();
if($que->num_rows == 0)
$erro[] = "Nenhum usuário possui o <strong>e-mail</strong> informado.";
elseif(strcmp($dado['senha'], ($senha)) == 0){
$_SESSION['id'] = $dado['valor'];
}else
$erro[] = "<strong>Senha</strong> incorreta.";
if(count($erro) == 0){
echo "<script>location.href='dashboard.php';</script>";
exit();
unset($_SESSION['email']);
}
}
}
?>>
3 horas atrás, Jesse&Francinete disse:
Cara, eu tenho um sistema de login, vou mandar a parte em PHP, espero que esclareça suas dúvidas:
<?php
if(!isset($_SESSION))
session_start();
//Login de Usários
if(isset($_POST['login'])){
include('class/config.php');
$erro = array();
// Captação de dados
$senha = $_POST['password'];
$_SESSION['email'] = $mysqli->escape_string($_POST['email']);
// Validação de dados
if(count($erro) == 0){
$sql = "SELECT senha as senha, id as valor
FROM admin
WHERE email = '$_SESSION[email]'";
$que = $mysqli->query($sql) or die($mysqli->error);
$dado = $que->fetch_assoc();
if($que->num_rows == 0)
$erro[] = "Nenhum usuário possui o <strong>e-mail</strong> informado.";
elseif(strcmp($dado['senha'], ($senha)) == 0){
$_SESSION['id'] = $dado['valor'];
}else
$erro[] = "<strong>Senha</strong> incorreta.";
if(count($erro) == 0){
echo "<script>location.href='dashboard.php';</script>";
exit();
unset($_SESSION['email']);
}
}
}
?>
Vou tentar adaptar baseado no seu código, obrigado pela resposta.>
10 horas atrás, Draco Malfoy disse:
troque:
$query = mysqli_query ($conexao,$sql);
por:
$query = mysqli_query($conexao, $sql) or die (mysqli_error($conexao));
faça login novamente e nos diga se da algum error.
Verifiquei, não deu nenhum erro continua tudo igual digita usuário e senha igual ao q tá gravado no BD clica entrar apaga oque foi digitado e volta pra tela de lojin sem logar. Uma das minhas duvidas e de que a sessão não estava gravando no arquivo Temp do PHP mas da uma olhada tá pegando o nome do BD $usuario|s:4:"jrib";nome|s:13:"João Robeiro"; só não loga porque? pois de acordo com o meu código tinha que funcionar já que eu quero pegar somente o nome veja a img abaixo.
Troque
if ($linhas > 0){
session_start();
$_SESSION['$usuario'] = $usuario;
while ($exibirNome = mysqli_fetch_array($query)){
$nome = $exibirNome[0];
$nomeusuario = $exibirNome[1];
$enhausuario = $exibirNome[2];
}
$_SESSION['nome'] = $nome;
header ("Location:sistema.php");
}else{
print "Dados não conferem!<br>";
print "<a href='index.php'>Voltar</a>";
}
por:
if(mysqli_num_rows($query)) {
$result = mysqli_fetch_assoc($query);
$_SESSION['usuario'] = $usuario;
$_SESSION['nome'] = $result['nome'];
header('Location: sistema.php');
exit; print "Dados não conferem!<br>";
print "<a href='index.php'>Voltar</a>";
}>
12 horas atrás, Draco Malfoy disse:
Troque
if ($linhas > 0){
session_start();
$_SESSION['$usuario'] = $usuario;
while ($exibirNome = mysqli_fetch_array($query)){
$nome = $exibirNome[0];
$nomeusuario = $exibirNome[1];
$enhausuario = $exibirNome[2];
}
$_SESSION['nome'] = $nome;
header ("Location:sistema.php");
}else{
print "Dados não conferem!<br>";
print "<a href='index.php'>Voltar</a>";
}
por:
if(mysqli_num_rows($query)) {
$result = mysqli_fetch_assoc($query);
$_SESSION['usuario'] = $usuario;
$_SESSION['nome'] = $result['nome'];
header('Location: sistema.php');
exit; print "Dados não conferem!<br>";
print "<a href='index.php'>Voltar</a>";
}
Olá Draco Malfoy com essa alteração logou mas não aparece o nome da pessoa logada, além do erro mostrado na img.
Aqui onde tá dando o erro:
<?php
print "Logado como:" . $_SESSION['$nome'] . "<br>";//aqui deveria aparecer o nome do user logado!
print "<a href='produtos.php'>Produtos</a><br>";
print "<a href='logout.php'>Sair</a>";
?>
>troque **$_SESSION['$nome']** por **$_SESSION['nome']**
Lembrando que você ainda deve fazer uma verificação nessa página, afim de validar para que somente usuários autenticados tenham acesso. Da forma que está, qualquer um acessa sua página.>
1 hora atrás, Draco Malfoy disse:
troque **$_SESSION['$nome']** por **$_SESSION['nome']**
Lembrando que você ainda deve fazer uma verificação nessa página, afim de validar para que somente usuários autenticados tenham acesso. Da forma que está, qualquer um acessa sua página.
Os erros desapareceram, mas ainda não aparece o nome do usuário logado** **quanto a validar a página você tem razão já fiz isso para se prevenir do sql injection. Voltando ao problema preciso que o user apareça logado com o nome completo exemplo abaixo:
Primeiro... Lendo o conteúdo do post inteiro não há tratamento contra inject em nenhum momento.
Segundo, o nome do usuário no banco está completo em uma única coluna?
Ou o sobre nome está em outra coluna?
Se estiver em 1 só, reveja o nome do usuário no banco
Se estiver em duas colunas você pode pegar os 2 campos e setar com valor da sessão usando um contatemo entre os dados exemplo: **$_SESSION[****'blablabla'****] ****=**** $code ****.**** $code2****;**
Ou armazenar em outra cessão os dados do sobre-nome e tal.
E só para constar $_SESSION é uma super-global que já trás falha de segurança em utilizar. Dê uma pesquisada por aí que muitas algumas classes para tratar desse tipo de coisa de forma segura, se não souber como criar uma.>
11 horas atrás, OmarF disse:
Primeiro... Lendo o conteúdo do post inteiro não há tratamento contra inject em nenhum momento.
Segundo, o nome do usuário no banco está completo em uma única coluna?
Ou o sobre nome está em outra coluna?
Se estiver em 1 só, reveja o nome do usuário no banco
Se estiver em duas colunas você pode pegar os 2 campos e setar com valor da sessão usando um contatemo entre os dados exemplo: **$_SESSION[****'blablabla'****] ****=**** $code ****.**** $code2****;**
Ou armazenar em outra cessão os dados do sobre-nome e tal.
E só para constar $_SESSION é uma super-global que já trás falha de segurança em utilizar. Dê uma pesquisada por aí que muitas algumas classes para tratar desse tipo de coisa de forma segura, se não souber como criar uma.
Obrigado por responder Omarf! no bd o nome completo $nome é todo em uma unica coluna e o nick (apelido) $usuário também em uma outra coluna. Ai no post você só vê fragmentos do código original quando a prevenção do sql injection alterei aqui no meu pc. Quanto a tratar com outras variáveis que não sessions não tenho muita experiencia visto que sou novato em php. Se tiver alguma sugestão sempre bem vindas.O problema é passar a cessão direta e uma terceira pessoa ter acesso ao código fonte do que você desenvolveu.
Mas não vou me reter a ficar batendo nessa tecla já que como disse ainda está como novato no php.
Na verdade ninguém nunca é veterano em qualquer linguagem vai por mim. Mecho com PHP a mais de 12 anos e quase sempre me pego, tendo que aprender alguma coisa.
Como dica sugiro que comece a estudar POO, verá um mundo novo no php e a forma correta de se programar nessa linguagem.
E para o uso de banco de dados/ conexões/ SEGURANÇA e etc-e-tal, nada se compara ao PDO, bom essa é minha opinião.
Olha aqui uma classe bacana para gerenciar cessão:
Spoiler
<?php
/**
* *********************************************************************
* @author ?
* @copyright ?
* @version 2.0: 2010, Spell Master (c)
* @version 2.1: 2011, Spell Master (c)
* @version 2.2: 2013, Spell Master (c)
* @version 3.0: 2017, Spell Master (c)
*
* *********************************************************************
* @class: Classe para o gerenciamento e manipulação de sessões
* *********************************************************************
*
* @Usage single session
* ---------------------------------------------------------------------
* *** Pega a instância da classe
* $session = Session::getSession();
*
* *** Ver a cessão armazenada
* $session->Word = "Olá mundo";
*
* * Inicia uma cessão
* $session->startSession();
*
* *** Verificação de a sessão existe
* if (isset($session->helloWord)) {
* echo "A cessão \"Word\" foi iniciada : "{$session->Word}".;
* } else {
* echo "A cessão \"Word\" não foi iniciada";
* }
*
* *** Destroi a cessão
* unset($session->Word);
*
* ---------------------------------------------------------------------
* @Usage all sessions
* ---------------------------------------------------------------------
* $session->destroy();
* $session->restart();
* $session->reset();
*
* ---------------------------------------------------------------------
* @Usage static
* ---------------------------------------------------------------------
* $session = managerSession::getSession();
* $session->hello = "Olá Mundo";
* echo $session->hello;
*
* *********************************************************************
* @changelog
* * Adicionado ducumentação e instruções de uso [spell master]
* * Removido métodos e atributos desnecessários [spell master]
* * Removido necessidade de parâmetros [spell master]
* * Fixado na instância o construtor [spell master]
* * Aplicado corretamente o uso de métodos estáticos [spell master]
* *********************************************************************
*/ const SESSION_STARTED = true;
const SESSION_STOPED = false;
/* Atributo de verificação */
private $sessionStatus = self::SESSION_STOPED;
/* Atributo estático de método */
private static $session;
/** ***************************************************************
* @Method: Obtem a intância da cessão
* (bool) Se a cessão já exite retorna a mesma
** ***************************************************************/
public static function getSession() {
if (!isset(self::$session)) {
self::$session = new self;
}
self::$session->startSession();
return self::$session;
}
/** ***************************************************************
* @Method: Inicia a cessão
** ***************************************************************/
public function startSession() {
$this->sessionStatus = session_start();
return $this->sessionStatus;
}
/** ***************************************************************
* @Method: Elimina sessões
** ***************************************************************/
public function destroy() {
if ($this->sessionStatus == self::SESSION_STARTED) {
$this->sessionStatus = session_destroy();
unset($_SESSION);
return $this->sessionStatus;
}
return false;
}
/** ***************************************************************
* @Method: Reinicia as sessões
** ***************************************************************/
public function restart() {
if (self::$session->destroy()) {
self::$session->startSession();
}
}
/** ***************************************************************
* @Method: Reseta as sessões
** **************************************************************/
public function reset() {
session_reset();
}
/******************************************************************
* @Method's HELPER: Helpes de auxílio a sessão única
*****************************************************************/
// ----------------------------------------------------------------
// Definir sessão
public function __set($name, $value) {
$_SESSION[$name] = $value;
}
// ----------------------------------------------------------------
// Obter sessão
public function __get($name) {
if (isset($_SESSION[$name])) {
return $_SESSION[$name];
}
}
// ----------------------------------------------------------------
// Verificar sessão
public function __isset($name) {
return isset($_SESSION[$name]);
}
// ----------------------------------------------------------------
// Desfazer sessão
public function __unset($name) {
unset($_SESSION[$name]);
}
}>
10 horas atrás, Omar~ disse:
O problema é passar a cessão direta e uma terceira pessoa ter acesso ao código fonte do que você desenvolveu.
Mas não vou me reter a ficar batendo nessa tecla já que como disse ainda está como novato no php.
Na verdade ninguém nunca é veterano em qualquer linguagem vai por mim. Mecho com PHP a mais de 12 anos e quase sempre me pego, tendo que aprender alguma coisa.
Como dica sugiro que comece a estudar POO, verá um mundo novo no php e a forma correta de se programar nessa linguagem.
E para o uso de banco de dados/ conexões/ SEGURANÇA e etc-e-tal, nada se compara ao PDO, bom essa é minha opinião.
Olha aqui uma classe bacana para gerenciar cessão:
Mostrar conteúdo oculto
<?php
/**
* *********************************************************************
* @author ?
* @copyright ?
* @version 2.0: 2010, Spell Master (c)
* @version 2.1: 2011, Spell Master (c)
* @version 2.2: 2013, Spell Master (c)
* @version 3.0: 2017, Spell Master (c)
*
* *********************************************************************
* @class: Classe para o gerenciamento e manipulação de sessões
* *********************************************************************
*
* @Usage single session
* ---------------------------------------------------------------------
* *** Pega a instância da classe
* $session = Session::getSession();
*
* *** Ver a cessão armazenada
* $session->Word = "Olá mundo";
*
* * Inicia uma cessão
* $session->startSession();
*
* *** Verificação de a sessão existe
* if (isset($session->helloWord)) {
* echo "A cessão \"Word\" foi iniciada : "{$session->Word}".;
* } else {
* echo "A cessão \"Word\" não foi iniciada";
* }
*
* *** Destroi a cessão
* unset($session->Word);
*
* ---------------------------------------------------------------------
* @Usage all sessions
* ---------------------------------------------------------------------
* $session->destroy();
* $session->restart();
* $session->reset();
*
* ---------------------------------------------------------------------
* @Usage static
* ---------------------------------------------------------------------
* $session = managerSession::getSession();
* $session->hello = "Olá Mundo";
* echo $session->hello;
*
* *********************************************************************
* @changelog
* * Adicionado ducumentação e instruções de uso [spell master]
* * Removido métodos e atributos desnecessários [spell master]
* * Removido necessidade de parâmetros [spell master]
* * Fixado na instância o construtor [spell master]
* * Aplicado corretamente o uso de métodos estáticos [spell master]
* *********************************************************************
*/ const SESSION_STARTED = true;
const SESSION_STOPED = false;
/* Atributo de verificação */
private $sessionStatus = self::SESSION_STOPED;
/* Atributo estático de método */
private static $session;
/** ***************************************************************
* @Method: Obtem a intância da cessão
* (bool) Se a cessão já exite retorna a mesma
** ***************************************************************/
public static function getSession() {
if (!isset(self::$session)) {
self::$session = new self;
}
self::$session->startSession();
return self::$session;
}
/** ***************************************************************
* @Method: Inicia a cessão
** ***************************************************************/
public function startSession() {
$this->sessionStatus = session_start();
return $this->sessionStatus;
}
/** ***************************************************************
* @Method: Elimina sessões
** ***************************************************************/
public function destroy() {
if ($this->sessionStatus == self::SESSION_STARTED) {
$this->sessionStatus = session_destroy();
unset($_SESSION);
return $this->sessionStatus;
}
return false;
}
/** ***************************************************************
* @Method: Reinicia as sessões
** ***************************************************************/
public function restart() {
if (self::$session->destroy()) {
self::$session->startSession();
}
}
/** ***************************************************************
* @Method: Reseta as sessões
** **************************************************************/
public function reset() {
session_reset();
}
/******************************************************************
* @Method's HELPER: Helpes de auxílio a sessão única
*****************************************************************/
// ----------------------------------------------------------------
// Definir sessão
public function __set($name, $value) {
$_SESSION[$name] = $value;
}
// ----------------------------------------------------------------
// Obter sessão
public function __get($name) {
if (isset($_SESSION[$name])) {
return $_SESSION[$name];
}
}
// ----------------------------------------------------------------
// Verificar sessão
public function __isset($name) {
return isset($_SESSION[$name]);
}
// ----------------------------------------------------------------
// Desfazer sessão
public function __unset($name) {
unset($_SESSION[$name]);
}
}
Obrigado! vou usar seu exemplo como referencia, ok? eu quero aprender mysqli primeiro ou posso estudar PDO junto oque você recomenda? e onde encontro um tutorial pra estudar POO? alguma dica!Olá Mestres! muito obrigado pelas dicas ai, blza! bom consegui fazer aparecer o usuário logado, abaixo a solução para algum novato passar por essa dificuldade.
Habilite o modulo_session no apache caso estiver usando wampserv. assim começou a gravar as sessões
Para aparecer o nome do user logado troquei:
$_SESSION = $_SESSION['usuario'] por
$usuario = $_SESSION['usuario'] assim de certo.
Problema resolvido.
// previne SQL Injection
// previne SQL Injection