Sessão para login em php- Qual o erro?
28/09/2016
0
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
Post mais votado
29/09/2016
$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
Mais Posts
29/09/2016
Diego Silva
29/09/2016
Anderson Martins
29/09/2016
Anderson Martins
Não estava passando a conexão no query de consulta.
Muito Obrigado pela atenção!
Clique aqui para fazer login e interagir na Comunidade :)