Ir para conteúdo



comentario duplicado no banco de dados ao atualizar página

comentario duplicado banco de dados

  • Por favor, faça o login para responder
4 respostas neste tópico

#1 radicalroller2

radicalroller2
  • Membros
  • 1 posts

Postado 01 December 2011 - 05:03 PM

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&#225;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&#225;rio e ele ser&#225; 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&#225;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&#227;o existem coment&#225;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&#225;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&#225;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&#225;rio" class="btn"/>
</fieldset>
</form>
</div><!--comentar-->




#2 fernandoalls

fernandoalls
  • Membros
  • 50 posts

Postado 11 December 2011 - 07:26 AM

o mais ideal seria vc separar o seu formulário em uma página e o algoritmo que grava em outra, claro teria que alterar algumas coisas neste se código, faça um formulário com POST ficará melhor tanto para vc aprender a separar o código e receber em outra página e tbm quanto a organização do seu código.

bom já que não tenho nada para fazer dê uma olhada aí no num pequeno exemplo que irei fazer:
Pagina formulario.html


Quote

<form action="gravar.php" method="post"/>
Nome: <br />
<input type="text" name="nome" /> <br />


Mensagem: <br />
<input type="text" name="msg" /> <br />

<input type="submit" value="comentar" /> <br />
</form>

Página gravar.php

<?php
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("nomedobancocriado", $conn);

$nome = $_POST['nome']; // recebo da pagina formulario nome
$msg = $_POST['msg']; // recebe da pagina formulario mensagem

if($nome != "" && $msg !=""){
$sql = mysql_query("INSERT INTO comentarios (id, nome, mensagem) VALUES ('','$nome','$msg')");
if($sql){
header('Location: formulario.html');
}else{
echo "erro ao cadastrar";
}
}

?>

então explicando


$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("nomedobancocriado", $conn);
conexão basica para o banco de dados



$nome = $_POST['nome']
$msg = $_POST['msg']
Aqui vc está recebendo do seu formulário as variaveis, se notar no seu formulario no campo nome esta atribuido nome como name e mensagem com msg entao dentro destas variaveis acima colocamos os valores nome e msg.

f($nome != "" && $msg !=""){
Aki diz que se nome não conter nada e se msg nao conter nada passa para o proximo passo.

$sql = mysql_query("INSERT INTO nomedatabela (id, camponome, campomensagem) VALUES ('','$nome','$msg')");
aqui criamos a query que ira gravar no banco



if($sql){
header('Location: formulario.html');
}
este trecho diz que se a query criada acima gravou então ele retorna ao formulario conforme colocado dentro do header




else{
echo "erro ao cadastrar";
}

senão se nao gravou ele da o erro na tela dizendo que não cadastrou.


É claro é um exemplo muito simples mas que tbm não posso te dar mastigado vc tem que ler isso e tentar melhorar fazer da sua forma para que vc realmente possa aprender.

Ah não esqueça de criar a tabela no banco de dados da seguinte forma

create table comentarios(
id int not nul auto_increment primary key,
nome varchar(45),
msg text);


bom no mais é isso qualquer duvida poste alguma coisa ai.

I HOPE THAT HELPS!
"Sem o C nós só teríamos Pasal, Obol e BASI."

#3 fernandoalls

fernandoalls
  • Membros
  • 50 posts

Postado 11 December 2011 - 07:29 AM

Formulario.html

<form action="gravar.php" method="post"/>
Nome: <br />
<input type="text" name="nome" /> <br />
Mensagem: <br />
<input type="text" name="msg" /> <br />
<input type="submit" value="comentar" /> <br />
</form>
P&#225;gina gravar.php
<?php
$conn = mysql_connect("localhost","root","");
$db = mysql_select_db("nomedobancocriado", $conn);
$nome = $_POST["]; // recebo da pagina formulario nome
$msg = $_POST['msg']; // recebe da pagina formulario mensagem
if($nome != "" && $msg !=""){
	    $sql = mysql_query("INSERT INTO comentarios (id, nome, mensagem) VALUES ('','$nome','$msg')");
   if($sql){
	    header('Location: formulario.html');
   }else{
		   echo "erro ao cadastrar";
		   }
   }
?>

coloquei novamente o código melhor escrito
"Sem o C nós só teríamos Pasal, Obol e BASI."

#4 henrico

henrico
  • Moderadores
  • 734 posts

Postado 19 December 2011 - 11:47 AM

O ideal seria vc confgurar o banco de dados para nao receber valores duplicatas em um determinado campo, ou então le sobre o token no google é uma tecnica qeu evita isso

#5 fernandoalls

fernandoalls
  • Membros
  • 50 posts

Postado 16 January 2012 - 07:02 AM

Bom dia,
Estarei ministrando um curso de PHP ORIENTADO A OBJETOS pelo site http://stoodos.com.b...ulate/course/99 o curso custa R$ 30,00 realmente é muito barato, entre lá e confirme sua presença para fevereiro, já estamos na segunda turma e realmente o aproveitamento está sendo muito bom. No curso ensino desde o php para iniciantes até o php orientado a objetos.

Abaixo um pouco sobre o que você aprenderá neste curso.



1 - Introdução ao PHP
1.1 História do PHP
1.2 O PHP e a sua área de aplicação

2 - Ambiente
1.1 Escolhendo as ferramentas para trabalhar
1.2 Preparando o ambiente
1.3 Testando o ambiente

3 - Aprendendo PHP do básico ao avançado
1.1 Delimitadores
1.2 Variáveis
1.3 Constantes
1.4 Variáveis globais
1.5 Operadores aritméticos
1.6 Operadores de comparação
1.7 Operadores lógicos
1.8 Estruturas de controle (if, swicht)
1.9 Laços de repetição (for, foreach, while, do while)
1.10 Resources para banco de dados
1.11 Functions
1.12 Algumas funções pré-definidas do php

4 - Aprendendo PHP Orientado a Objetos
1.1 Conceito de Orientação a Objetos
1.2 Conceito de classes e objetos
1.3 Criando a primeira classe
1.4 Métodos e Propriedades
1.5 Herança
1.6 Polimorfismo
1.7 Abstração
1.8 Modificadores de acesso
1.9 Palavra reservada self::
1.10 Constantes no PHP OO
1.11 Classe abstrata
1.12 Classe final
1.12 Método abstrato
1.13 Método final
1.14 Manipulação de métodos e classes
1.15 Associação e Agregação
1.16 Acesse banco de dados com PDO
1.17 Projeto final do curso

************************************************************

A cada aula que for realizada o aluno irá receber o material de estudo onde conterá, o material apresentado na aula sendo eles:

1 - Slides do curso com a matéria aprendida.
2 - Fontes do curso, exemplos de como funciona o que aprendeu.
3 - IDE de desenvolvimento.
4 - Ajuda na instalação do ambiente.
"Sem o C nós só teríamos Pasal, Obol e BASI."




1 usuário(s) está(ão) lendo este tópico

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