Ir para conteúdo

POWERED BY:

Arquivado

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

radicalroller2

[Resolvido] Comentario duplicando ao atualizar a página

Recommended Posts

Sou novo no php e estou tento um probleminha, fiz um sistema de comentários que assisti em um tutorial com um painel administrativo, o formulário para comentar junto com o código fica em uma página dinâmica chamada single.php, ao se comentar, e clicar em enviar o comentário aparece normalmente no Painel administrativo como aguardando, porém se o usuário atualizar a página, sem comentar, o comentário que ele fez anteriormente é enviado novamente para o Painel Administrativo = Banco de dados. Não consegui arrumar esse problema alguém pode me dar uma luz?

 


<?php 


if(isset($_POST['cadastrar']) && $_POST['cadastrar'] == 'ok'){


$post_status = 'aguardando';
$post_data = date('Y-m-d H:i:s');

$autor        = strip_tags(trim($_POST['nome']));
$email        = strip_tags(trim($_POST['email']));
$site         = strip_tags(trim($_POST['site']));
$comentario   = strip_tags(trim($_POST['comentario']));

  if(empty($autor)){
   $retorno = "Informe seu nome";
  }elseif(empty($email)){
   $retorno = "Informe seu e-mail";
  }/*elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
   $retorno = "Informe um e-mail válido";
  }*/elseif(empty($comentario)){
   $retorno = "Informe seu comentario";
  }if(empty($retorno)){


$cadastrar_comentario = mysql_query("INSERT INTO c_comments (id, post_status, data, autor, email, site, comentario) VALUES ('$recupera', '$post_status', '$post_data', '$autor', '$email ', '$site', '$comentario')") or die (mysql_query());

   if($cadastrar_comentario >= '1'){
	   $retorno  = "Recebemos seu comentário e ele será publicado assim que for aprovado por nossa equipe. Obrigado!";
	   unset($form_autor, $form_email, $form_site, $form_comentario);
   }else{
	   $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
   }

   }

  }
?>

<?php

$form_autor         = $_POST['nome'];
$form_email         = $_POST['email'];
$form_site          = $_POST['site'];
$form_comentario    = $_POST['comentario'];

?>
<ul>
<?php 

$id_do_post = $_GET['topico'];

$comentarios = mysql_query("SELECT id, 
                            post_status,
						 data,
						 autor,
						 email,
						 site,
						 comentario
						 FROM c_comments
					      WHERE id = '$recupera' AND post_status = 'aprovado'
						  ORDER BY data DESC") 
						 or die (mysql_error());

if(@mysql_num_rows($comentarios) == '0'){
echo "não existem comentários neste topico, seja o primeiro!";
}else{
	while($res_comments=mysql_fetch_array($comentarios)){
		$post_id = $res_comments[0];
		$post_status = $res_comments[1];
		$data = $res_comments[2];
		$autor = $res_comments[3];
		$email = $res_comments[4];
		$site = $res_comments[5];
		$comentario = $res_comments[6];

		$default = "http://0.gravatar.com/avatar/6a74d27730409454cee4eac1af23234c?s=40&d=&r=G";
           $size = 40;
		$grav_url = "http://www.gravatar.com/avatar/" . md5( strtolower( trim( $email ) ) ) . "?d=" . urlencode( $default ) . "&s=" . $size;

?>
<li>
<h2><img src="<?php echo $grav_url; ?>" alt="" /> <?php echo $autor; ?> Disse em: <?php echo date('d/m/Y H:m', strtotime($data));?></h2>
<p><?php echo $comentario; ?></p>


</li>

<?php 
	}
}
?>

</ul>

<div id="comentar">


<h2><?php if(isset($retorno)){
echo "$retorno";
}
?></h2>
<form method="post" action="" name="comentar" enctype="multipart/form-data">
<fieldset>
<legend>Deixe seu comentário</legend>
<label> <span>Nome</span>
<input type="text" name="nome" value="<?php echo $form_autor; ?>"/>
</label>

<label> <span>E-mail</span>
<input type="text" name="email" value="<?php echo $form_email; ?>"/>
</label>

<label> <span>Site</span>
<input type="text" name="site" value="<?php echo $form_site; ?>"/>
</label>

<label> <span>Comentário</span>
<textarea name="comentario" rows="5"><?php echo $form_comentario; ?></textarea>
</label>

<input type="hidden" name="cadastrar" value="ok"/>
<input type="submit" value="Enviar Comentário" class="btn"/>
</fieldset>
</form>
</div><!--comentar-->

Compartilhar este post


Link para o post
Compartilhar em outros sites

este tipo de página onde se envia os dados com POST para ela mesma é um problema, se você der refresh o navegador vai pensar que você poderá perder os dados e pede para enviar novamente.

 

Nessa linha

 if($cadastrar_comentario >= '1'){etc...}else{etc....}

 

mude para

 

  if($cadastrar_comentario >= '1'){
  $retorno  = "Recebemos seu comentário e ele será publicado assim que for aprovado por nossa equipe. Obrigado!";
  unset($form_autor, $form_email, $form_site, $form_comentario);
  sleep(2); // 2 segundos para redirecionar
  header('Location: ./');
  }else{
  $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
  }

Compartilhar este post


Link para o post
Compartilhar em outros sites

duas dicas

1- o que puder fazer em um unico bloco faça, pois abrir e fechar tags do php gastam recursos do servidor, ali tem 2 blocos q poderiam ser um so

2- nao uso o @ ele nao corrige os erros, apenas os esconde, pra resover os erros traduza e tente conserta-los, nao conseguiu, poste aki o erro...

Compartilhar este post


Link para o post
Compartilhar em outros sites

este tipo de página onde se envia os dados com POST para ela mesma é um problema, se você der refresh o navegador vai pensar que você poderá perder os dados e pede para enviar novamente.

 

Nessa linha

 if($cadastrar_comentario >= '1'){etc...}else{etc....}

 

mude para

 

  if($cadastrar_comentario >= '1'){
  $retorno  = "Recebemos seu comentário e ele será publicado assim que for aprovado por nossa equipe. Obrigado!";
  unset($form_autor, $form_email, $form_site, $form_comentario);
  sleep(2); // 2 segundos para redirecionar
  header('Location: ./');
  }else{
  $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
  }

 

Bom eu fiz o que você disse mas deu esse erro:

 

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\sitedinamico\header.php:92) in c:\program files\easyphp1-8\www\sitedinamico\nav\single.php on line 128

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom eu fiz o que você disse mas deu esse erro:

 

Warning: Cannot modify header information - headers already sent by (output started at c:\program files\easyphp1-8\www\sitedinamico\header.php:92) in c:\program files\easyphp1-8\www\sitedinamico\nav\single.php on line 128

 

eu já esperava, mas como não fiquei olhando seu código todo não reparei nisso.

 

isso é normal é porque já tinha sido enviado um outro header, resolve fácil mudando para javascript,

 

mude para;

 

  if($cadastrar_comentario >= '1'){
  $retorno  = "Recebemos seu comentário e ele será publicado assim que for aprovado por nossa equipe. Obrigado!";
  unset($form_autor, $form_email, $form_site, $form_comentario);
  sleep(2); // 2 segundos para redirecionar
  echo '<script> window.location=window.location.href; </script>';
  }else{
  $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
  }

Compartilhar este post


Link para o post
Compartilhar em outros sites

eu já esperava, mas como não fiquei olhando seu código todo não reparei nisso.

 

isso é normal é porque já tinha sido enviado um outro header, resolve fácil mudando para javascript,

 

mude para;

 

  if($cadastrar_comentario >= '1'){
  $retorno  = "Recebemos seu comentário e ele será publicado assim que for aprovado por nossa equipe. Obrigado!";
  unset($form_autor, $form_email, $form_site, $form_comentario);
  sleep(2); // 2 segundos para redirecionar
  echo '<script> window.location=window.location.href; </script>';
  }else{
  $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
  }

 

Só ficou mais um erro, pq a mensagem que o comentário foi enviado com sucesso não aparece mais, ai o usuário vai pensar que o comentário n foi enviado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ah!

 

 

tire isso

 


  sleep(2); // 2 segundos para redirecionar
  echo '<script> window.location=window.location.href; </script>';

 

e deixe como estava

 

  if($cadastrar_comentario >= '1'){
  $retorno  = "Recebemos seu comentário e ele será publicado assim que for aprovado por nossa equipe. Obrigado!";
  unset($form_autor, $form_email, $form_site, $form_comentario);
  }else{
  $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
  }

 

 

e agora coloque aqui

 

<h2><?php if(isset($retorno)){
       echo "$retorno";

  sleep(3); // 3 segundos para redirecionar, aumente pra quantos segundos você quiser
  echo '<script> window.location=window.location.href; </script>';

}
?></h2>

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.