Ir para conteúdo
Fórum CódigoFonte.net
Entre para seguir isso  
radicalroller2

comentario duplicado no banco de dados ao atualizar 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&#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-->

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

×
×
  • Criar Novo...