<?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-->
Comentario Duplicado No Banco De Dados Ao Atualizar Página
Started By radicalroller2, 01/12/2011, 17:07
3 replies to this topic
#1
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?
#2
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:
para:
Qualquer dúvida só falar!
Abs.
É 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
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
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.
1 user(s) are reading this topic
0 membro(s), 1 visitante(s) e 0 membros anônimo(s)