Ir para conteúdo
Fórum Script Brasil
  • 0

[ursolouco]


ursolouco

Pergunta

Olá senhores!!!!

Agora, estarei importunando por aqui, pois estou aprendendo PHP e já de inicio me deparei com uma duvida fulminante q não consegui resolver, então venho pedir ajuda.

Em ASP, sem querer comparar as linguagens, eu ultilizava o seguinte para redirecionar o usuário:

Response.Redirect("site.asp")
Em PHP, acredito que seja o método 'Location' do objeto 'Header', mas infelizmente não consegui fazer, vejam:
<html>
<head>
<title>Login do Sitema !</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../CSS/geral.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
  if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
    document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
  else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>
<body leftmargin="0" topmargin="0">
<div style="position:absolute; left:0; top:0; width:100%; height:100%; z-index:1">
 <table width="100%" height="100%" cellpadding="0" cellspacing="0">
  <tr>
  <td width="100%" align="center" valign="middle">
<?
	// Sistema de Autenticação:	

	$username = $_POST["username"];
	$senha =$_POST["senha"];
	//recolhendo os dados do formulario:

	include("conecta.php");

	$resultado = mysql_query("Select * from usuarios where username = '$username'");
	$linhas = mysql_num_rows($resultado);

	if($linhas == 0){
	//verifica retorno da consultao ao banco de dados em relação ao nome de usuario;	
?>
<p align="center">&nbsp;Usuario n&atilde;o encontrado no sistema !</p>
<?
	}
	else{
  //verificando a senha digitada;
  if($senha != mysql_result($resultado, 0, "senha")){
  	
  ?>
  <p align="center">Senha invalida !</p>
<?
  }else{
  	//usuario e senha existem;
  	//adicionar cookie
  	
  	setcookie("nome_usuario", $username);
  	setcookie("senha_usuario", $senha);
  	
  	//após adicionar cookie, redirecionar usuario.
  	
  	header('location: administra.php');
  	
  }
	}

	mysql_close($conexao);
?>
  </td>
	</tr>
 </table>
</div>
</body>
</html>
Ele apresenta o seguinte erro:
Warning: Cannot modify header information - headers already sent by (output started at c:\apache\htdocs\php\meuphp\login\login.php:6) in c:\apache\htdocs\php\meuphp\login\login.php on line 51

Warning: Cannot modify header information - headers already sent by (output started at c:\apache\htdocs\php\meuphp\login\login.php:6) in c:\apache\htdocs\php\meuphp\login\login.php on line 52

Warning: Cannot modify header information - headers already sent by (output started at c:\apache\htdocs\php\meuphp\login\login.php:6) in c:\apache\htdocs\php\meuphp\login\login.php on line 56

Como podemos ou como devo proceder para solucionar o erro e redirecionar meu usuario para a pagina 'administra.php' ?

OBS: já tentei com os dois pontos em Location e nada de funciona... sad.gif

Podem me explicar ?

Obrigado!!!!

[urso]

Link para o comentário
Compartilhar em outros sites

11 respostass a esta questão

Posts Recomendados

  • 0

Urso,

o header() deve ser colocado antes de qualquer saída HTML!

Isso vale tb se você usar os comandos echo ou print... não pode, se não dá esse erro mesmo.

Se você quer redirecionar ali, eu aconselho utilizar javascript...

Falou!

Link para o comentário
Compartilhar em outros sites

  • 0
Urso,

o header() deve ser colocado antes de qualquer saída HTML!

Isso vale tb se você usar os comandos echo ou print... não pode, se não dá esse erro mesmo.

Se você quer redirecionar ali, eu aconselho utilizar javascript...

Falou!

Obrigado!!

Eu coloquei o seguinte comando aqui no script:

print("<script language=\"javasctipt\">");
print("window.location='administra.php'");
print("</script>");
ai, deu até uma luz, mas continua dando erro no cabeçalho, olha só:
Warning: Cannot modify header information - headers already sent by (output started at c:\apache\htdocs\php\meuphp\login\login.php:6) in c:\apache\htdocs\php\meuphp\login\login.php on line 51

porque ele não adicona os cookies ?

Há, muito obrigado, valeu mesmo

Link para o comentário
Compartilhar em outros sites

  • 0
Seja bem vindo ao PHP, cara...espero que tenha vindo pra ficar...  

pode ter certeza que vim...

Legal, mais um pra nossa comunidade smile.gif Seja bem vindo!

Olha, eu não costumo trabalhar com cookies, mas se não me engano os comandos setcookie tb devem ser colocados antes de qualquer saída de texto (código HTML, comandos echo ou print)!

Abraços!

Link para o comentário
Compartilhar em outros sites

  • 0
Legal, mais um pra nossa comunidade Seja bem vindo!

Olha, eu não costumo trabalhar com cookies, mas se não me engano os comandos setcookie tb devem ser colocados antes de qualquer saída de texto (código HTML, comandos echo ou print)!

Abraços!

Opa, valeu galera pelas boas vindas!!

Então eu teria que mudar o seguinte:

- Se tudo Ok, adiciona o cookie e redirecionar o visitante com <javascript>

ou

- Se houver erro de usuario ou senha, printar mensagem na tela inicialmente....

? Basicamente então, os cookies e manipulação de informações com cliente sempre devem ser feitas antes de dar qualquer saida na tela.... seria isso ?

OBS: obrigado pela atenção Brothers...

Link para o comentário
Compartilhar em outros sites

  • 0

Basicamente então, os cookies e manipulação de informações com cliente sempre devem ser feitas antes de dar qualquer saida na tela.... seria isso ?

OBS: obrigado pela atenção Brothers...

É isso aí, Urso!

você não pode colocar nenhum comando header(), session_start(), session_destroy() ou setcookie (este eu não tenho certeza absoluta) antes de qualquer saída de texto...

você já começa o script com o "<?php" na primeira linha... se você der um enter antes de iniciar o script com o "<?php" e chamar a função header(), já dá erro!

Eu faria isso da seguinte forma: colocaria a conexão com o db, verificação e tudo mais que fosse possível no início do código (antes do <HTML>), e se desse erro, ao invés de mandar escrever a mensagem, você manda ele definir uma variável. Por exemplo:

$erro = "Texto da mensagem de erro!";

Aí, já no meio do código html (onde você quer que imprima a mensagem se der o erro), você faz assim:

if (isset($erro)) { echo $erro;}

beleza?

Falou!

Link para o comentário
Compartilhar em outros sites

  • 0
Basicamente então, os cookies e manipulação de informações com cliente sempre devem ser feitas antes de dar qualquer saida na tela.... seria isso ?

OBS: obrigado pela atenção Brothers...

É isso aí, Urso!

você não pode colocar nenhum comando header(), session_start(), session_destroy() ou setcookie (este eu não tenho certeza absoluta) antes de qualquer saída de texto...

você já começa o script com o "<?php" na primeira linha... se você der um enter antes de iniciar o script com o "<?php" e chamar a função header(), já dá erro!

Eu faria isso da seguinte forma: colocaria a conexão com o db, verificação e tudo mais que fosse possível no início do código (antes do <HTML>), e se desse erro, ao invés de mandar escrever a mensagem, você manda ele definir uma variável. Por exemplo:

$erro = "Texto da mensagem de erro!";

Aí, já no meio do código html (onde você quer que imprima a mensagem se der o erro), você faz assim:

if (isset($erro)) { echo $erro;}

beleza?

Falou!

Bem, eu não sei nada de PHP, mas estou pensando em começar devagarinho com o PHP, só dando umas bisoiadas de vez em quando aki... Só pra ir familiarizando...

Esta mesma coisa acontece no ASP.

Não podemos usar o objeto Response pra qlqr um de seus métodos (cookies, redirect) depois de ter "salvo" o conteúdo no buffer.

t+

Link para o comentário
Compartilhar em outros sites

  • 0

Harran!!

Acho que matei a xarada...

<?

  	$username = $_POST["username"];
   $senha =$_POST["senha"];

   include("conecta.php");

  	$resultado = mysql_query("Select * from usuarios where username = '$username'");
  	$linhas = mysql_num_rows($resultado);

  	if($linhas == 0){
          	$erro = "<p align=\"center\">Usuario inválido !</p>";
   }else{
         if($senha != mysql_result($resultado, 0, "senha")){
                  	$erro = "<p align=\"center\">Senha invalida !</p>";

          }
          else{
               setcookie("nome_usuario", $username);
               setcookie("senha_usuario", $senha);
               header('location: administra.php');
          }
         }
   mysql_close($conexao);
   if(isset($erro)){
?>
<html>
<head>
<title>Login do Sitema !</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../CSS/geral.css" rel="stylesheet" type="text/css">
<script language="JavaScript" type="text/JavaScript">
<!--
function MM_reloadPage(init) {  //reloads the window if Nav4 resized
 if (init==true) with (navigator) {if ((appName=="Netscape")&&(parseInt(appVersion)==4)) {
   document.MM_pgW=innerWidth; document.MM_pgH=innerHeight; onresize=MM_reloadPage; }}
 else if (innerWidth!=document.MM_pgW || innerHeight!=document.MM_pgH) location.reload();
}
MM_reloadPage(true);
//-->
</script>
</head>
<body leftmargin="0" topmargin="0">
<div style="position:absolute; left:0; top:0; width:100%; height:100%; z-index:1">
<table width="100%" height="100%" cellpadding="0" cellspacing="0">
 <tr>
 <td width="100%" align="center" valign="middle">
     <? print($erro);?>
 </td>
</tr>
</table>
</div>
</body>
</html>
<?
   }
?>

Recupero os dados, vejo se é igual com os do banco de dados, se tiver tudo 'ok', redireciono o visitante, caso contrario, passo uma string para meu $erro e depois monto documento com a mensagem de erro!!

Hehehe, já aprendi a primeira....

Muito Obrigado à todos!!! Valeu mesmo.....

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...