Jump to content


Photo

Comentario Duplicado No Banco De Dados Ao Atualizar Página


  • Faça o login para participar
3 replies to this topic

#1 radicalroller2

radicalroller2

    Novato no fórum

  • Usuários
  • 2 posts
  • Sexo:Não informado

Posted 01/12/2011, 17:07

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-->


#2 Jefferson Ventura

Jefferson Ventura

    Turista

  • Usuários
  • 25 posts
  • Sexo:Masculino

Posted 02/12/2011, 09:59

Olá radicalroller2!

É o seguinte, existe N maneiras de corrigir esse "problema", não vou entrar na questão de segurança ou melhores formas de se fazer, vou apenas tentar te ajudar para o problema que esta ocorrendo na situação de código atual.

Então é o seguinte resumidamente e superficialmente falando, como você utiliza o mesmo arquivo para salvar e exibir os comentários quando a pessoa envia os dados os mesmos são armazenados em $_POST, então quando você atualiza a página os dados ainda estão no $_POST.

Altere o seguinte código:
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!";
}

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, $_POST); // ALTERAÇÃO AQUI ELE VAI LIMPAR TODOS OS DADOS DE $_POST
}else{
    $retorno = "Erro ao cadastrar seu comentário, tente novamente!";
}

Qualquer dúvida só falar!

Abs.

#3 radicalroller2

radicalroller2

    Novato no fórum

  • Usuários
  • 2 posts
  • Sexo:Não informado

Posted 02/12/2011, 13:18

Tipo eu fiz o que vc disse, ele realmente limpa o formulário após enviado a informação, porém creio q a informação continua de alguma forma armazenada no navegador pq quando atualizo ela continua sendo enviada mesmo com o $_POST do formulário estando limpo!

#4 WebOliveira

WebOliveira

    Novato no fórum

  • Usuários
  • 9 posts
  • Sexo:Masculino
  • Localidade:Rio de Janeiro

Posted 04/12/2011, 01:57

Tipo eu fiz o que vc disse, ele realmente limpa o formulário após enviado a informação, porém creio q a informação continua de alguma forma armazenada no navegador pq quando atualizo ela continua sendo enviada mesmo com o $_POST do formulário estando limpo!


Se eu não me engano alguns navegadores tem uma função de que quando você utiliza o F5 para atualizar ele reenvia os dados do formulário.

tenta atualizar a página pela URL (clica nela lá em cima e dá enter)

Se não duplicar então tem que ver como vamos bloquear isso pelo PHP.

Edição feita por: WebOliveira, 04/12/2011, 01:57.





0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq