Jump to content
Fórum Script Brasil
  • 0

[ursolouco]


ursolouco

Question

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 to comment
Share on other sites

11 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

  • 0

O urso aprendendo php! blink.gifwacko.gifph34r.gif

Completando o que o Illidan falou aí em cima, qualquer saída de dados fecha as headers...se você mandar um comando de impressão, por exemplo, também vai dar erro... rolleyes.gif

Seja bem vindo ao PHP, cara...espero que tenha vindo pra ficar... happy.gif

Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.1k
    • Total Posts
      651.9k
×
×
  • Create New...