Ir ao conteúdo
  • Cadastre-se

Erro de Validação PHP


Ir à solução Resolvido por DiF,

Posts recomendados

Fala galera, beleza?

 

Cá estou com mais dúvidas em PHP...

 

Fiz a pouco tempo uma área de login que busca os dados do banco, até ai está perfeito... Porém tentei fazer uma janela php com validação, que serve para, quando eu logar, voltar uma pagina e avançar, termine a sessão e diga que precise conectar novamente...

 

Ai está o erro...

 

1 - Se eu logar, deslogar e voltar a página, acontece o erro(que está certo, pois ele não permite voltar a página de login)

2 - Se eu logar, voltar a pagina e avançá-la novamente, eu volto para o perfil... ai deveria aparecer uma pop-up dizendo que preciso me reconectar para acessar ali...

 

Vou tirar umas prints e envio junto ao código para que alguma alma abençoada me ajude...

 

Foto do erro 1.

(lembrando, o que aparece está certo, pois não permite eu logar, mas deveria aparecer um pop-up dizendo fala eu relogar.

miFNtVI.png

 

Foto do erro 2.

(eu logo, volto a pagina e avanço novamente e volta para o perfil.php... Deveria dar o erro de pop-up dizendo para relogar.

lzVPywq.png

 

 

Agora postarei o código do perfil e o código do verifica.php...

 

Perfil.PHP

<?php		require_once 'verifica.php';		$conexao = mysqli_connect("localhost","root","","login_senha");	session_start();		$login = $_SESSION['login_usuario'];		$sql = mysqli_query($conexao, "SELECT * FROM usuario WHERE login = '$login'");	while ($linha = mysqli_fetch_array($sql)):	$nome = $linha['nome'];	$sobrenome = $linha['sobrenome'];	$email = $linha['email'];	$foto = $linha['foto'];	 	endwhile;?>             <!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>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />        <link rel="stylesheet" href="css/style.css"  />    <style type="text/css">    a:link {        text-decoration: none;        color: #CCC;    }    a:visited {        text-decoration: none;        color: #CCC;    }    a:hover {        text-decoration: none;        color: #CCC;    }    a:active {        text-decoration: none;        color: #CCC;    }    </style>    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>    <script type="text/javascript" src="js/JCarrouselLite.js"></script>    <script type="text/javascript" src="js/functions.js"></script>        <title>Prottus</title>    </head>        <body>        <div id="topo">        <div id="topo_conteudo">          <div id="logo">            <a href="index.html"><img src="img/logo.png"/></a>          </div>                      <div id="painel">                    <div id="fone" class="fonte_topo">                  Fone: <span style="color:#000">(51)3072-6383</span>            </div>                                <div id="email" class="fonte_topo">                    E-mail: <a href="mailto:[email protected]"><span style="color:#427593">[email protected]</span></a>            </div>                                <div id="social" class="fonte_topo"> Siga-nos:                 <a href="http://facebook.com"><img src="img/face.png" onmouseover="this.src='img/facehover.png'" onmouseout="this.src='img/face.png'"/></a>                <a href="http://twitter.com"><img src="img/twitter.png" onmouseover="this.src='img/twitterhover.png'" onmouseout="this.src='img/twitter.png'"/></a>                                </div>          </div>         </div>    </div>        <div id="menuConteudo">        <div class="menu_estilo">            <ul id="nav">                <li><a href="index.html"> HOME <span> Início </span></a></li>                <li><a href="sobre.html"> SOBRE <span> Quem Somos? </span></a></li>                <li><a href="gestaoemti.html"> GESTÃO EM TI <span> Outsourcing </span></a></li>                <li><a href="nossotrabalho.html"> NOSSO TRABALHO <span> Metodologia </span></a></li>                <li><a href="#"> FALE CONOSCO <span> Contate-nos </span></a></li>                <li><a href="saojudastadeu.php"> SÃO JUDAS TADEU <span> Acesso Privado </span></a></li>            </ul>                        </div>    </div>    <!--fim da div menu conteudo-->    <div id="perfil">       		<img src="fotos/<? echo $foto?>" width="350" height="250" alt="Imagem de Perfil" title="Imagem de Perfil" />                                           <div id="dados">                        <p>Nome: <?php echo $nome ?></p></br>            <p>Sobrenome: <?php echo $sobrenome  ?></p></br>            <p>E-mail: <?php echo $email  ?></p></br></br></br></br></br></br></br></br>            <h1><a href="logout.php">SAIR</a></h1>            </div>       		<!--fim div dados-->        </div>       <!--fim div perfil-->                <div id="rodape">                        <div class="subtitulo2"/>DIREITOS AUTORAIS © 2014 |<a href="#"> POLÍTICA DE PRIVACIDADE</div></a>                        </div><!--fim div rodape-->          </body>    </html>

E agora Verifica.PHP

<?php	$conexao = mysqli_connect("localhost","root","","login_senha");			if(isset($_SESSION['login_usuario']) && isset($_SESSION['senha_usuario'])) {		$login_usuario = $_SESSION['login'];		$senha_usuario = $_SESSION['senha'];				$sql = mysqli_query($conexao, "SELECT * FROM usuario WHERE login = '$login' and senha = '$senha'");	  	$cont = mysqli_num_rows($sql);		if($cont == 0):		echo "			<meta http-equiv='refresh' content='0; url=saojudastadeu.php' />			<script type='text/javascript'>alert('Login ou senha inválida')</script>";	else:		echo "			<meta http-equiv='refresh' content='0; url=saojudastadeu.php' />			<script type='text/javascript'>alert('Voce precisa estar logado para visualizar esta página!')</script>";	endif;	}	?>
Link para o comentário
Compartilhar em outros sites

  • Moderador

No seu perfil.php tente adicionar as linhas:

setcookie("ck_authorized", "true", 0, "/");date_default_timezone_set("Brazil/East");	if(!isset($_SESSION["login"])):        //se não tiver logado volta pra pagina de login	header("location: ../login.php"); else:	$login = $_SESSION["login"];		$idAdmin = $_SESSION["codusuario"];	$nome = $_SESSION["nome"];endif;

Veja que isso é um exemplo. adapte para seu propósito.

a linha que mais importa é a 1

Link para o comentário
Compartilhar em outros sites

  • Moderador

Como isso foi tirado de um dos meus antigos projetos de faculdade... aquilo é só para recuperar o ID do adminstrador logado, caso precisasse fazer um registro de horarios entrada e saida no sistema..   pode apagar se quiser.

Como disse anteriormente, o que interessa  você é a linha 1 e alguns detalhes do bloco if-else.

 

Sugestão: mude algumas coisas .. por exemplo   abra a sessão no seu verifica.php... e faça o redirecionamento para o perfil.php dentro do seu verifica.

 

no seu verifica.php você coloca o trecho que postei...

 

desta maneira:

<?php	session_start();		$conexao = mysqli_connect("localhost","root","","login_senha");	        setcookie("ck_authorized", "true", 0, "/");        date_default_timezone_set("Brazil/East");	        if(!isset($_SESSION["login"])):          //se não tiver logado volta pra pagina de login	  header("location: ../login.php");         else:           //dados atribuidos no verifica.php	   $login = $_SESSION['login_usuario'];	   $nome = $_SESSION["nome"];endif;		$sql = mysqli_query($conexao, "SELECT * FROM usuario WHERE login = '$login'");	while ($linha = mysqli_fetch_array($sql)):	$nome = $linha['nome'];	$sobrenome = $linha['sobrenome'];	$email = $linha['email'];	$foto = $linha['foto'];	 	endwhile;?>   

Visto que no seu verifica.php... você atribui todas as variaveis de sessão que vais utilizar.

Você precisa re-ver seu conhecimento sobre esta parte. ( falo isso para você melhorar :) )

Link para o comentário
Compartilhar em outros sites

Dei umas testadas e verifiquei que to com problema no include do verifica.php no logar.php... se eu ponho, da erro de login/senha... se eu ponho include no perfil.php(onde é pra estar) não acontece nada e eu simplesmente entro, volto a pagina e avanço-a novamente, nada acontece, onde era pra acontecer...

Link para o comentário
Compartilhar em outros sites

  • Moderador

Vamos por partes.

Para que funcione corretamente precisas pensar da seguinte forma:

 

O formulário de login, envia os dados para um arquivo que processa e valida. Se validado o usuário é redirecionado ao perfil, Caso contrário obterá uma mensagem de erro.

É no script de validação que o usuário vai ser redirecionado, ou seja, você vai incluir nele um header() que redireciona.. e não o contrário onde no seu perfil você inclui o validador.

Com base nisso vamos analisar este modelo( que por sinal é de um dos meus projetos antigos):

 

validaUser.php

<?phpsession_start();		$login = $_POST["usuario"];	$senha = $_POST["senha"];	$login_escape = addslashes($login);	$senha_escape = addslashes($senha);			if (empty($login) or empty($senha)) :    echo "<script>          alert('Preencha todos os campos');          history.go(-1);          </script>";    exit;      endif;			include '../conexao/conexao.php';		$sql = "SELECT idAdmin, login, senha FROM admin WHERE login ='$login_escape' AND senha = '$senha_escape' ";	$dados = mysqli_query($sql, $conexao);	$num = mysqli_num_rows($dados);		if ($num == 0):		echo "<script>				alert('Usuario ou senha Incorreta');				history.go(-1);			  </script>";		exit;	 else:				while($admin = mysqli_fetch_object($dados)):			$coduser = $admin->idAdmin;							$_SESSION["codusuario"] = $coduser;		$_SESSION["login"] = $login;				header ("Location: view/gpainel.php");		endwhile;		endif;	// mysql_free_result($dados); 	 mysqli_close($conecta);?>
Linha 2, Aberta a sessão.
Linhas 4 a 7, Recebe os dados do formulário e utiliza uma função para retirar os caracteres especiais, é uma das prevenções ao SQL injection.
Linhas 10 a 16, Verifica se os campos de login e senha estão vazios, se sim vai mostrar um alert informando o erro.
Linha 19, Faz a incluão da conexão com o banco de dados
Linha 21, Instrução SQL buscando os dados que iremos utilizar.
Linha 22, Variável que executa a consulta ao banco.
Linha 23, Atribui em uma variável o número de linhas para a verificação
Linhas 25 a 30, Bloco  do IF que diz que Se o número de linhas for igual a zero, vai mostrar uma mensagem de erro.
Linhas 31 a 42, Bloco do ELSE, onde se não houve erros o script fará um laço de WHILE onde no mesmo resgata o código ID do usuário( no caso ali é um admin mas poderia ser user). Ainda dentro do while, é atribuido as variáveis de SESSÃO para o ID do usuário, e o login( no caso de querer resgatar o nome para dizer "bondia fulano" ou informar o login utilizado ( geralmente um e-mail)
Ainda no while, é utilizada a função Header() que fará o redirecionamento para o perfil.
 
Agora no gpainel.php( seria seu perfil.php)
 
<?php session_start();	setcookie("ck_authorized", "true", 0, "/");	date_default_timezone_set("Brazil/East");		if(!isset($_SESSION["login"])):		header("location: ../index.php"); 	else:		$login = $_SESSION["login"];			$idAdmin = $_SESSION["codusuario"];	endif;?>
Linha 2, abre a sessão
Linha 3, seta o cookie que é uma restrição de protocolo, se quiser saber mais sobre isso leia aqui: http://php.net/manual/pt_BR/function.setcookie.php
Linha 4, seta o timezone.. as vezes o timezone do servidor é diferente.
Linhas 6 e 7, Bloco do IF que verifica se a variável de sessão NÃO está vazia.. perguntando " IF not isset". se tiver vai voltar para pagina de login.
Linhas 8 a 10, Bloco do ELSE, que re-atribui em uma variável o valor da variável de sessão, isso vai servir se você quiser mostrar em algum lugar da tela o bem vindo fulano( se o nome tiver armazenado na variável de sessão) ou só informar o login utilizado...
 
Abaixo disso,  viria as tags HTML e toda a estrutura do perfil.
 
Agora analise, em momento algum inlcui o validaUser.php no perfil.. pois é errado. 
 
Bem este é o máximo de detalhamento que posso dar no momento. Use ele para "estudar" e completar seu projeto.
 

 

 

 

 

 

Link para o comentário
Compartilhar em outros sites

Cara, eu tentei e ainda não consegui, porém, vamos deixar isto de lado (por enquanto)... gostaria de aproveitar o tópico para não precisar criar outro... Estou usando uma ferramenta de enviar e-mail, coisa simples e rápida de resolver.

 

Aqui é a tabela no perfil.php

<h1> Faça sua reserva de equipamentos abaixo: </h1><br/><br/>                <form action="enviarEmail.php" method="POST">                <input name="nome" type="text" id="nomeEmail" placeholder="Digite seu nome" required="required" /><br /><br />        <input name="email" type="text" id="emailEmail"  placeholder="Digite seu e-mail" required="required"/><br /><br />        <input name="assunto" type="text" id="assuntoEmail" placeholder="Digite o assunto"required="required" /><br /><br />        <textarea name="mensagem" id="mensagemEmail" placeholder="Digite sua mensagem" cols="55" rows="15" required="required"></textarea>        <br /><br />                <input value="Enviar" type="submit" />        <input type="reset" value="Limpar"                </form>

e aqui é o codigo do enviarEmail.php

// Destinatário  $para = "[email protected]";  // Assunto do e-mail  $assunto = "Reserva de Equipamento Via Site";  // Campos do formulário de contato  $nome = $_POST['nome'];  $email = $_POST['email'];  $assunto = $_POST['assunto'];  $mensagem = $_POST['mensagem'];  // Monta o corpo da mensagem com os campos  $corpo = "Nome: $nome <br>Assunto: $assunto <br>";  $corpo .= "E-mail: $email <br>Mensagem: $mensagem";  // Cabeçalho do e-mail  $header = "From: $nome <$para> Reply-to: $email ";  $header .= "Content-Type: text/html; charset=iso-8859-1 ";  mail($para, $assunto, $corpo, $header);  $msg = "Sua mensagem foi enviada com sucesso.";  // Mostra a mensagem acima e redireciona para index.html  echo "<script>location.href=`perfil.php`; alert(`$msg`);</script>";

eu fiz este código... porém na hora que vou enviar  o email, mostra erro na linha 63.

Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in C:\wamp\www\prottus\enviarEmail.php on line 63

O que poderia ser?

 

OBs. Linha 63 é a linha do mail.... 

 

mail($para, $assunto, $corpo, $header);
Link para o comentário
Compartilhar em outros sites

  • Moderador
  • Solução

Isso acontece porque a função nativa de envio não funciona em localhost. e ainda por cima é bem "ruinzinha".

 

O melhor é você utilizar a classe phpmailer  para enviar emails. ela te permite fazer autenticação pelo gmail( ótimo para testar em localhost)

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...