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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

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

Aceitar