Sessão para login em php- Qual o erro?

28/09/2016

0

Olá Pessoal estava lendo um artigo aqui da Devmedia mesmo sobre session [url:descricao=Criando Sessão para login php]https://www.devmedia.com.br/criando-sessao-para-login-no-php/27347[/url]
tentei implementar o exemplo do link mas não funcionou, então modifiquei a conexão com o banco e continua a não funcionar, digito senha e usuario e ele continua na tela de login, abaixo o contigo que estou usando:
index.php
<!DOCTYPE html>
<html>
<head>
	<title></title>
</head>
<body>

<!--/* na primeira linha usaremos o “action=ope.php” para que o formulário repasse as informações para a pagina ope.php */-->
<form method="post" action="ope.php" id="formlogin" name="formlogin" >
<fieldset id="fie">
<legend>LOGIN</legend><br />
<label>NOME : </label>
<!--// o campo “name” dentro do input e importante, pois será ele que armazenará os dados digitados . -->
<input type="text" name="login" id="login"  /><br />
<label>SENHA :</label>
<input type="password" name="senha" id="senha" /><br />
<input type="submit" value="LOGAR	"  />
</fieldset>
</form>


</body>
</html>


ope.php
<?php 
// session_start inicia a sessão
session_start();
// as variáveis login e senha recebem os dados digitados na página anterior
$login = $_POST['login'];
$senha = $_POST['senha'];
// as próximas 3 linhas são responsáveis em se conectar com o bando de dados.

$servidor = "localhost";
$usuario = "root";
$senha = "";
$banco = "server";

$mysqli = new mysqli($servidor, $usuario, $senha, $banco);

// A vriavel $result pega as varias $login e $senha, faz uma pesquisa na tabela de usuarios
$result = mysqli_query("SELECT * FROM usuario WHERE nome = '$login' AND senha = '$senha'");
/* Logo abaixo temos um bloco com if e else, verificando se a variável $result foi bem sucedida, ou seja se ela estiver encontrado algum registro idêntico o seu valor será igual a 1, se não, se não tiver registros seu valor será 0. Dependendo do resultado ele redirecionará para a pagina site.php ou retornara  para a pagina do formulário inicial para que se possa tentar novamente realizar o login */

$linhas = mysqli_num_rows($result);
//if(mysqli_num_rows($result) > 0 )
if($linhas > 0)
{
$_SESSION['login'] = $login;
$_SESSION['senha'] = $senha;
header('location:site.php');
}
else{
	unset ($_SESSION['login']);
	unset ($_SESSION['senha']);
	header('location:index.php');
	
	}

?>
}


site.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php  
/* esse bloco de código em php verifica se existe a sessão, pois o usuário pode simplesmente não fazer o login e digitar na barra de endereço do seu navegador o caminho para a página principal do site (sistema), burlando assim a obrigação de fazer um login, com isso se ele não estiver feito o login não será criado a session, então ao verificar que a session não existe a página redireciona o mesmo para a index.php.*/
session_start();
if((!isset ($_SESSION['login']) == true) and (!isset ($_SESSION['senha']) == true))
{
	unset($_SESSION['login']);
	unset($_SESSION['senha']);
	header('location:index.php');
	}

$logado = $_SESSION['login'];
?>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>SISTEMA WEB</title>
</head>

<body>
<table width="800" height="748" border="1">
  <tr>
    <td height="90" colspan="2" bgcolor="#CCCCCC">SISTEM WEB TESTE
    <?php 
	echo" Bem vindo $logado";
	?>
    </td>
  </tr>
  <tr>
    <td width="103" height="410" bgcolor="#CCCCCC">MENU AQUI</td>
    <td width="546">CONTEUDO E ICONES AQUI</td>
  </tr>
  <tr>
    <td colspan="2" bgcolor="#000000"> </td>
  </tr>
</table>
</body>
</html>


e o banco de dados:

-- phpMyAdmin SQL Dump
-- version 4.6.4
-- https://www.phpmyadmin.net/
--
-- Host: 127.0.0.1
-- Generation Time: 29-Set-2016 às 02:23
-- Versão do servidor: 10.1.16-MariaDB
-- PHP Version: 7.0.9

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Database: `server`
--

-- --------------------------------------------------------

--
-- Estrutura da tabela `usuario`
--

CREATE TABLE `usuario` (
  `id_user` int(4) NOT NULL,
  `nome` varchar(50) NOT NULL,
  `senha` varchar(50) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

--
-- Extraindo dados da tabela `usuario`
--

INSERT INTO `usuario` (`id_user`, `nome`, `senha`) VALUES
(1, 'ad', '123'),
(2, 'bebe', 'bebe');

--
-- Indexes for dumped tables
--

--
-- Indexes for table `usuario`
--
ALTER TABLE `usuario`
  ADD PRIMARY KEY (`id_user`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `usuario`
--
ALTER TABLE `usuario`
  MODIFY `id_user` int(4) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=3;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;



Alguém pode me dizer qual o erro?
Anderson Martins

Anderson Martins

Responder

Post mais votado

29/09/2016

Analisei aqui rapidinho e vi que você define a variável senha com o que vem do post da outra página

$senha = $_POST['senha'];


Mas depois você sobrescreve a variável senha novamente

$servidor = "localhost";
$usuario = "root";
$senha = "";
$banco = "server";


Aí no seu select ele não vai encontrar esse usuário, porque você usou a mesma variável senha para a sua conexão. E ela com certeza será diferente do valor digitado no campo senha do formulário. A solução para esse problema seria trocar o nome da variável, para que ele não venha a substituir o que você pega no post.

Diego Silva

Diego Silva
Responder

Mais Posts

29/09/2016

Diego Silva

Eu não analisei seu código todo, pode ser que mais para a frente tenha outros erros
Responder

29/09/2016

Anderson Martins

Olá! Troquei o nome da variável do banco, mas mesmo problema continua...
Responder

29/09/2016

Anderson Martins

Consegui resolver o problema!
Não estava passando a conexão no query de consulta.
Muito Obrigado pela atenção!
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar