Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

HdN

[Resolvido] sistema com header location = ERRO

Recommended Posts

Ola pessoal quem puder da uma força!!

 

estou fazendo um sistema de login/senha com login/senha ja definidos e esta dando erro no header

 

<html>
<head>
<title>Login/Senha</title>
<body>

<?php
$login = $_POST["login"];
$senha = $_POST["senha"];

//echo "login: $login, Senha: $senha";

if($login == "abc" and $senha == "123"){
header("location: index.php");
exit;
}else{
header("location: index.php?error=erro");
exit;
}
?>

<a href="index.php">Voltar</a>

</body>
</html>

 

erro: Warning: Cannot modify header information - headers already sent by (output started at C:\Documents ... \www\login\act.php:5) in C:\Documents ...\www\login\act.php on line 27

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que voccê já inseriu HTML antes do PHP:

 

<html>
 <head>
 <title>Login/Senha</title>
 <body>
 
 <?php
 ...

O ideal é fazer TODOS os redirecinamentos, inicio de sessão e manipulação de cookies ANTES de enviar qualquer html pro cliente (navegador). :)

 

Move o bloco de PHP todo pra antes do HTML (pra primeira linha do arquivo) que deve funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu removi todos o HTML, so ficou o PHP:

<?php
$login = $_POST["login"];
$senha = $_POST["senha"];

//echo "login: $login, Senha: $senha";

if($login == "abc" and $senha == "123"){
header("location: index.php");
exit;
}else{
header("location: index.php?error=erro");
exit;
}
?>

 

e ainda fica dando o erro:

Warning: Cannot modify header information - headers already sent by (output started at C:\Documents ...\www\login\act.php:4) in C:\Documents ...\www\login\act.php on line 15

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem alguma coisa estranha... O erro está dizendo que é na linha 15, e só tem 14 linhas no seu código.

http://forum.imasters.com.br/index.php?/topic/342563-dicas-para-uso-de-variaveis-de-sessao/

 

Dá uma olhada neste link pra ver se te ajuda em alguma coisa.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

deve ter algum include antes desse código para dar esse erro com certeza ou algum HTML ou algum "echo" por que senão não daria este erro não.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Na página do formulário, nomeie ela como: login.html no action de seu form de login, adicione: logar.php

 

na página logar.php apenas adicione o código:

 

<?php
$login = $_POST['login'];
$senha = $_POST['senha'];

//echo "login: $login, Senha: $senha";

if($login == 'abc' and $senha == 123){
header("location: index.php");
}else{
header("location: index.php?error=erro");
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu refiz o codigo, acho que ta quase so tem um problema

 

pagina: index.php

<form name="fpower"  action="index.php" method="post">
L:<input type="text" name="login" /><br/>
S:<input type="text" name="senha" />
<input type="submit" value="ok" /> <a href="index.php">Limpar!</a>
</form>

<?php
if(isset($_POST['login'])){
$login = $_POST['login'];
$senha = $_POST['senha'];

if($login == 'abc' and $senha == '123'){
	header("Location: act.php");
}else{
	$msg = 	"Login ou Senha invalida!";
	header("Location: index.php?msg=$msg");
}
}
echo $_GET["msg"];
?>

 

pagina: act.php

<?php
if(($_POST['$login'] and $_POST['$senha']) == ''){
//if(!($_POST['$login'] and $_POST['$senha']) == ''){
$msg = 	"Favor logar antes!";
header("Location: index.php?msg=$msg");
}else{
echo "bem vindo!";
}

?>

 

quando eu coloco a senha, ele verifica, se tiver errada ele devolve, se nao esse passa td certinho!!

 

PROBLEMA: quando eu tento entrar direto na pagina "act.php"(digitando pelo browser) ele acessa normal a pagina, queria que se tivesse fazendo isso ele mandasse para a index.php, mas quando eu fiz isso mesmo eu digitando a senha correta ele manda p/ a index.php

 

como bloqueio o acesso sem dar erro digitando a senha correta!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você teria que usar SESSION/(ou) Cookie para verificar se o jogador está logado ou não.

 

Ou então por MySQL, você cria uma tabela com o status da pessoa :}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem alguma coisa estranha... O erro está dizendo que é na linha 15, e só tem 14 linhas no seu código.

 

Correto, o erro aponta a última linha do código dele, mas olhe só:

 

headers already sent by (output started at C:\Documents ...\www\login\act.php:4)

 

A parte negritada mostra que houve uma saída na linha 4, que é exatamente a linha do $_POST[ "senha" ], isso significa que ele está pegando os dados sem verificar a existência deles, ele está recebendo um E_NOTICE, "Undefined index senha"

 

para resolver isso, será necessário uma verificação:

 

$login = isset( $_POST['login'] ) ? $_POST['login'] : null;
$senha = isset( $_POST['senha'] ) ? $_POST['senha'] : null;

//echo "login: $login, Senha: $senha";

if($login == 'abc' and $senha == 123){
header("location: index.php");
}else{
header("location: index.php?error=erro");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Complementando:

 

$login = isset( $_POST['login'] ) ? $_POST['login'] : null;
$senha = isset( $_POST['senha'] ) ? $_POST['senha'] : null;

if($login != null and $senha != null){

//echo "login: $login, Senha: $senha";

if($login == 'abc' and $senha == 123){
header("location: index.php");
}else{
header("location: index.php?error=erro");
}

}else{
header("location: index.php?error=erro");
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

intao galera eu tinha refeito o codigo e deu certo depois apareceu um novo problema.

 

nova pagina: index.php

<form name="fpower"  action="index.php" method="post">
L:<input type="text" name="login" /><br/>
S:<input type="text" name="senha" />
<input type="submit" value="ok" /> <a href="index.php">Limpar!</a>
</form>

<?php
if(isset($_POST['login'])){
       $login = $_POST['login'];
       $senha = $_POST['senha'];

       if($login == 'abc' and $senha == '123'){
               header("Location: act.php");
       }else{
               $msg =  "Login ou Senha invalida!";
               header("Location: index.php?msg=$msg");
       }
}
echo $_GET["msg"];
?>

 

nova pagina: act.php

<?php
if(($_POST['$login'] and $_POST['$senha']) == ''){
//if(!($_POST['$login'] and $_POST['$senha']) == ''){
       $msg =  "Favor logar antes!";
       header("Location: index.php?msg=$msg");
}else{
       echo "bem vindo!";
}
?>

 

quando eu digito a senha ele verifica td certo, se tiver ok ele passa se nao ele devolve para pagina index.php com uma msg de erro!!

 

NOVO PROBLEMA: quando eu tento acessa a pagina act.php(digitando o nome no browser) ele acessa normal, eu queria que se tivesse fazendo isso ele mandasse para a index.php(forçando que eu digite a senha), mas quando eu fiz isso, acho que nao soube montar essa verificação e mesmo quando eu digito login/senha correta ele manda p/ a index.php.

 

como bloqueio o acesso(ao act.php) sem dar erro digitando a senha correta!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você vai ter que usar SESSION ou COOKIE, porque o POST não vem pra segunda página. Mais ou menos assim.

 

if($login == 'abc' and $senha == '123'){
       session_start();
       $_SESSION['logado'] = true;
       header("Location: act.php");

Daí na act.php, você faz o teste.

 

session_start();
if(!isset($_SESSION['logado'])){
        $msg =  "Favor logar antes!";
        header("Location: index.php?msg=$msg");
}else{
        echo "bem vindo!";
}

Este é um código somente de exemplo... Está bem inseguro, mas dá pra você entender a lógica.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.