Duplicate BD data when requesting Ajax

Asked

Viewed 328 times

0

Every time I try to register a new comment, it doubles in my database. It loads the comment by ajax, but after I refresh the page appears the duplicate comment.

<?php
require_once("classes/dao/UsuarioDAO.class.php"); //Chama a classe UsuarioDAO.
require_once("classes/dao/ComentarioDAO.class.php"); //Chama a classe comentarioDAO.
require_once("classes/entidade/Comentario.class.php"); //Chama a classe comentario, que é nossa entidade.
require_once("classes/entidade/Usuario.class.php"); //Chama a classe usuario

$usuarioDAO = new UsuarioDAO();
$usuario = new Usuario();
$comentarioDAO = new ComentarioDAO(); 
$comentario = new Comentario(); 

    if (@$_GET['go'] == 'sair') {
        $usuarioDAO->sair();
        echo "<meta http-equiv='refresh' content='0, index.php'>";
    }

    if (isset($_GET['txtComentario'])) {
        $teste = $_GET['txtComentario'];

        $comentario->setComentario($_GET["txtComentario"]); 

        if ($comentarioDAO->cadatrarComentario($comentario)) { 
            ?>
            <script type="text/javascript">
                alert("Comentário gravado com sucesso."); 
            </script>
            <?php
        } else {
            ?>
            <script type="text/javascript">
                alert("Erro ao gravar comentário.");
            </script>
            <?php
        }
    }



?>
<?php
require_once('indexAjax.php');
?>

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Arrays- Comentário</title>
        <link rel="stylesheet" href="css/style.css" type="text/css" media="all" />
    </head>
    <body>
        <div id="dvCentro">
            <div id="dvComentario">
                <?php                  
                    if(isset($_SESSION["ID_USER"]))
                   {
                        $usuarioDAO->exibirUserLogado($usuario);
                        $nome = $usuario->getNome();
                        $email = $usuario->getEmail();
                ?>
                <form method="get" action="#" name="frmComentario">
                    <table>
                        <tr>
                            <td class="texto">Nome:</td>
                            <td><input type="text" name="txtNome" value="<?php echo$nome; ?>" disabled/></td>
                        </tr>
                        <tr>
                            <td class="texto">E-mail:</td>
                            <td><input type="text" name="txtEmail" value="<?php echo $email; ?>"  disabled/></td>
                        </tr>
                        <tr>
                            <td class="texto">Comentário:</td>
                            <td></td>
                        </tr>
                        <tr>
                            <td colspan="2">
                                <textarea name="txtComentario" id="txtComentario"></textarea>
                            </td>
                        </tr>
                        <tr>
                            <td colspan="2"><input type="submit"  value="&raquo; Comentar" /></td>&nbsp
                        </tr>
                         <tr>

                            <a href="?go=sair">Sair</a><br><br>
                        </tr>
                    </table>
                </form>
                <?php
                    }else{
                        echo "Faca Login para comentar";

                 ?>                

                 <td colspan="2"><a href="login.php"><input type="submit" name="btnSubmit" value="Login" /></a></td>
                 <td colspan="2"><a href="cadastro.php"><input type="submit" name="btnSubmit" value="Cadastro" /></a></td> &nbsp
                 <?php
                       }
                 ?>

            </div>

            <br />Comentarios
            <div id="dvLerComentario">
                    <?php
                foreach ($comentarioDAO->consultarComentario() as $consulta) {
                    ?>
                    <p><b>Nome: </b> <?= $consulta['nome']; ?></p>

                    <p><b>Comentário: </b> <?= $consulta['comentario']; ?></p>

                    <p><b>Data: </b> <?= $consulta['data']; ?>
                       <b>Hora: </b> <?= $consulta['hora']; ?>
                    </p>

                    <hr /><br />
                    <?php
                }
                ?>
            </div>
        </div>
    </body>
</html>
<?php
    include('indexAjax.php');
?>

<script>
  /** * Função para criar um objeto XMLHTTPRequest */ 
function CriaRequest() { 
    try{ 
        request = new XMLHttpRequest(); 
    }catch (IEAtual){ 

        try{ 
            request = new ActiveXObject("Msxml2.XMLHTTP"); 
        }catch(IEAntigo){ 

            try{ 
                request = new ActiveXObject("Microsoft.XMLHTTP"); 
            }catch(falha){ 
                request = false;

            } 

        } 

    } 

    if (!request) 
        alert("Seu Navegador não suporta Ajax!"); 
    else 
        return request; 

} 
    /** * Função para enviar os dados */ 
    function getDados() { 

        var comentario = document.getElementById("txtComentario").value;
        var result = document.getElementById("comentario");
        var xmlreq = CriaRequest();

        //Inicia uma requisição
        xmlreq.open("GET","indexAjax.php?txtComentario="+comentario,true);

        //atribui uma funcao para ser executada sempre que houver uma mudanca de dado
        xmlreq.onreadystatechange = function(){
            //verifica se foi concluído com sucesso e a conexão fechada (readyState=4)
            if (xmlreq.readyState == 4) {
                //verifica se o arquivo foi encontrado com sucesso
                if (xmlreq.status ==200) {
                    result.innerHTML = xmlreq.responseText;
                }else{
                    result.innerHTML = "Erro: "+xmlreq.statusText;
                }
            }

        };
        xmlreq.send(null);

    }   
</script>
<?php
session_start();
require_once("/classes/Conexao.class.php"); //Incluimos o arquivo de conexão.
require_once("classes/entidade/Usuario.class.php");
require_once("classes/dao/UsuarioDAO.class.php");
class comentarioDAO {


    function __construct() {
        $this->con = new Conexao(); 
        $this->pdo = $this->con->Connect(); 
    }


    public function cadatrarComentario(comentario $entComentario) {//Criamos um método que será responsável por gravar os comentários, como parâmetro ele recebe nossa entidade comentário. 
        try { 

            //$idUser = $this->obterIdUser($emailUser);
            $stmt = $this->pdo->prepare("INSERT INTO comentario (comentario, data, hora, id_usuario) 
                                        VALUES ( :comentario, :data, :hora, :idUsuario)");

            $param = array(
                ":comentario" => $entComentario->getComentario(),
                ":data" => date("Y/m/d"),
                ":hora" => date("h:i:s"),
                ":idUsuario" => $_SESSION['ID_USER']//chamando aqui o valor que armazenou
            );

            return $stmt->execute($param); // Aqui executamos nosso SQL e passamos os parâmetros, o reusltado é retornado no nosso método

        } catch (PDOException $ex) { //Se houver algum erro no nosso código vamos criar uma exceção para informar onde esta o erro.
            echo "ERRO: " + $ex->getMessage(); //Exibimos a mensagem de erro e pegamos o código do erro.
        }
    }

    //Método de consulta

    public function consultarComentario() {
        try { //Executa nosso código
            $stmt = $this->pdo->prepare("SELECT * FROM comentario INNER JOIN usuario ON (comentario.id_usuario = usuario.id_usuario)");

            $stmt->execute(); 

           return $stmt->fetchall(PDO::FETCH_ASSOC); 

        } catch (PDOException $ex) { //Se houver algum erro no nosso código vamos criar uma exceção para informar onde esta o erro.
            echo "ERRO: " + $ex->getMessage(); //Exibimos a mensagem de erro e pegamos o código do erro.
        }
    }


}

?>
  • 6

    Looks like it’s the fault of include('indexAjax.php'); in the middle file.

  • bingo!!! thank you

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.