Ir para conteúdo

POWERED BY:

Arquivado

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

Whiksw

Header com problemas

Recommended Posts

Olá, sou meio novo aqui no fórum mais td bem..

Eu estou criando um fórum.

E tenho um script que quando o termina precisa voltar a página inícial mais não volta.

aqui:

<?php
$troca_senha = $_GET['troca_senha'];
if($troca_senha == '1') {
echo " <form name='form' method='post' action='?trocando_senha=1'>";
echo "<div class=\"mute\" id='mute'><div style='margin-left:15px; margin-top:50px;'>Você está mudando a senha..<br><input type='password' class='texttopic' name='senha'>";
echo "<input type='submit' class='form' style='color:#EAEAEA' value='Enviar'><a class='form' href='index.php'><font color=#EAEAEA>Fechar</font></a></div></div>";
}

$trocando_senha = $_GET['trocando_senha'];
if($trocando_senha == '1') {
$senha = MD5($_POST['senha']);
$r = mysql_query("UPDATE `usuarios` SET senha = '$senha' WHERE login = '$login_cookie' ");


header("Location: index.php");

}
?> 

Esse script é para trocar senha, e está funcionando normalmente, mas o header não funciona.

No meu antigo fórum que eu estava fazendo, o header pegava em qualquer lugar, ai eu deletei esse fórum que estava no 000Webhost e fiz um novo fórum no host hostiger.

Ai está tendo esse problema de header em todo meu fórum novo.

Por que o header pegava em qualquer lugar no meu outro fórum e nesse novo não?

E tem como botar o header para funcionar?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Habilite os erros do PHP e poste aqui as mensagens de erro...:

 

error_reporting(1);

ini_set('display_errors', 1);

Não entendi..

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque este código logo no início do seu script, nas primeiras linhas:

error_reporting(1);
ini_set('display_errors', 1);

Isso vai habilitar as mensagens de erro do PHP, e quando você rodar o script novamente, vai receber estas mensagens que indicarão o que acontece de errado. Quando tiver as mensagens, poste-as aqui.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Coloque este código logo no início do seu script, nas primeiras linhas:

error_reporting(1);
ini_set('display_errors', 1);

Isso vai habilitar as mensagens de erro do PHP, e quando você rodar o script novamente, vai receber estas mensagens que indicarão o que acontece de errado. Quando tiver as mensagens, poste-as aqui.

Bota isso?

<?php
error_reporting(1);
ini_set('display_errors', 1);
?>

Mas eu nem consigo editar o tópico(não vejo o botão..)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique no seu editor se você está salvando como UTF8 SEM BOM. Por incrível que pareça, isso faz a diferença.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo, em página que só tem código php, você não deve por o ?> no fim do arquivo, porque se tiver algum espaço depois dessa tag dá problema nos headers, apaga ele daí e vê se resolve.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo, em página que só tem código php, você não deve por o ?> no fim do arquivo, porque se tiver algum espaço depois dessa tag dá problema nos headers, apaga ele daí e vê se resolve.

Mas se eu tirar o tag do fim do php vai ficar o código todo exposto e não vai funcionar o código..

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
if(isset($_GET['troca_senha']) AND $_GET['troca_senha'] == 1){
?>

<form name='form' method='post' action=''>
<div class="mute" id='mute'>
	<div style='margin-left:15px; margin-top:50px;'>Você está mudando a senha..<br />
		<input type='password' class='texttopic' name='senha'>
		<input type='submit' class='form' name="trocando_senha" style='color:#EAEAEA' value='Enviar'>
		<a class='form' href='index.php'><font color="#EAEAEA">Fechar</font></a>
	</div>
</div>

<?php

	if(isset($_POST['trocando_senha']) && $_POST['trocando_senha'] == "Enviar"):
		$novasenha = md5($_POST['senha']);
		$r = mysql_query("UPDATE `usuarios` SET senha = '$senha' WHERE login = '$login_cookie' ") or die ("Erro ao executar o UPDATE da nova senha.");
		if($r):
			header('Location: index.php');
		else:
			echo 'Erro ao entar atualizar sua senha, entre em contato com o desenvolvedor.';
		endif;
	endif;


}else{
	echo 'Erro, não foi passado parametros para a execução.';
}



?> 

Tenta esse código.

Compartilhar este post


Link para o post
Compartilhar em outros sites
<?php
if(isset($_GET['troca_senha']) AND $_GET['troca_senha'] == 1){
?>

<form name='form' method='post' action=''>
<div class="mute" id='mute'>
	<div style='margin-left:15px; margin-top:50px;'>Você está mudando a senha..<br />
		<input type='password' class='texttopic' name='senha'>
		<input type='submit' class='form' name="trocando_senha" style='color:#EAEAEA' value='Enviar'>
		<a class='form' href='index.php'><font color="#EAEAEA">Fechar</font></a>
	</div>
</div>

<?php

	if(isset($_POST['trocando_senha']) && $_POST['trocando_senha'] == "Enviar"):
		$novasenha = md5($_POST['senha']);
		$r = mysql_query("UPDATE `usuarios` SET senha = '$senha' WHERE login = '$login_cookie' ") or die ("Erro ao executar o UPDATE da nova senha.");
		if($r):
			header('Location: index.php');
		else:
			echo 'Erro ao entar atualizar sua senha, entre em contato com o desenvolvedor.';
		endif;
	endif;


}else{
	echo 'Erro, não foi passado parametros para a execução.';
}



?> 

Tenta esse código.

 

Também não pegou :/

O código que eu coloquei no início pega normal, o único problema é que o header não está funcionando, é como se o header não tivesse ali naquele código pra redirecionar pra index.

Compartilhar este post


Link para o post
Compartilhar em outros sites


<?php

$troca_senha = $_GET['troca_senha'];

if($troca_senha == '1') {

echo " <form name='form' method='post' action='?trocando_senha=1'>";

echo "<div class=\"mute\" id='mute'><div style='margin-left:15px; margin-top:50px;'>Você está mudando a senha..<br><input type='password' class='texttopic' name='senha'>";

echo "<input type='submit' class='form' style='color:#EAEAEA' value='Enviar'><a class='form' href='index.php'><font color=#EAEAEA>Fechar</font></a></div></div>";

}

 

$trocando_senha = $_GET['trocando_senha'];

if($trocando_senha == '1') {

$senha = MD5($_POST['senha']);

$r = mysql_query("UPDATE `usuarios` SET senha = '$senha' WHERE login = '$login_cookie' ");

 

// Verifica se executou com sucesso

if($r){

header("Location: index.php");

}else{

echo 'O mysql_query não executou com sucesso, verifique a conexão, entre em contato com o desenvolvedor';

}

 

 

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

se o problema for só quanto redirecionamento troca o header por:

echo '<meta http-equiv="refresh" content="1; url=index.php">';

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não entendi..

 

Logo após iniciar seu código com <?php, adicione as seguintes linhas:

error_reporting(1);
ini_set('display_errors', 1);

E rode novamente o código para ver os erros retornados...Certeza que vai vir algo do tipo "Headers already sent by...".

Olhando teu código é simples de ver, você está imprimindo HTML antes de usar o header. O header deve ser uma das primeiras coisas do teu script, sempre antes de saídas HTML etc. A estrutura deveria ser algo assim:

<?php
    if( isset( $_POST['trocando_senha'] ) && $_POST['trocando_senha'] == "Enviar" ) {
        $novasenha = md5( $_POST['senha'] );
        $r = mysql_query("UPDATE `usuarios` SET senha = '$senha' WHERE login = '$login_cookie' ");
        if($r):
            header('Location: atualizou.php');
        else:
            echo 'Erro ao entar atualizar sua senha, entre em contato com o desenvolvedor.';
        endif;
    }

    if ( isset( $_GET['troca_senha'] ) && $_GET['troca_senha'] == 1 ) :
    ?>
        <form name='form' method='post' action=''>
            <div class="mute" id='mute'>
                <div style='margin-left:15px; margin-top:50px;'>Você está mudando a senha..<br />
                    <input type='password' class='texttopic' name='senha'>
                    <input type='submit' class='form' name="trocando_senha" style='color:#EAEAEA' value='Enviar'>
                    <a class='form' href='index.php'><font color="#EAEAEA">Fechar</font></a>
                </div>
            </div>
    <?php endif; ?>

Veja que o header vem antes de qualquer saída para o navegador (no caso HTML)...

Compartilhar este post


Link para o post
Compartilhar em outros sites

troca o header("Location: index.php"); por:

print '<script> window.location("index.php"); </script>';

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

troca o header("Location: index.php"); por:

print '<script> window.location("index.php"); </script>';

 

A gambiarra é uma má prática, incentivar seu uso também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

A gambiarra é uma má prática, incentivar seu uso também.

 

Quer dizer que essa não é uma solução? o que isso implicaria na execução do sistema? cai tanto assim o rendimento?

 

Acabaria com o erro dele, e não ia "zuar" o código e é muito usado pra redirecionar pra outra página...

 

Eu propus, quer usar usa, nao quer não usa.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro, você tentou ajudar, é louvável da tua parte. Mas não trate apenas o sintoma, trate a doença. A chance de fazer código spaghetti e repetir o erro em outros pontos do sistema é grande. O header deve ser usado antes de qualquer saída para o navegador, é o modo correto.

Temos que pensar assim, ficar tratando somente o sintoma é um mal de toda comunidade PHP por isso que a linguagem acaba sendo marginalizada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claro, você tentou ajudar, é louvável da tua parte. Mas não trate apenas o sintoma, trate a doença. A chance de fazer código spaghetti e repetir o erro em outros pontos do sistema é grande. O header deve ser usado antes de qualquer saída para o navegador, é o modo correto.

Temos que pensar assim, ficar tratando somente o sintoma é um mal de toda comunidade PHP por isso que a linguagem acaba sendo marginalizada.

 

Ok, entendi, desculpe minha ignorância

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.