Jump to content
GobsRuiz

PHP - Estou tentando fazer um envio de comentários ao bd

Recommended Posts

Estou tentando criar um sistema de envios de comentários. Estou tendo problema com alerta. Primeiramente era do envio. Depois que eu preenchia os campos, enviava e dava um refresh na página(f5), ele envia os mesmos dados, mas colocando o ‘header(location)’, resolvi mas a mensagem não aparece mais e não sei como consigo resolver isso. O outro problema é que quando os campos estão vazios e aparece a mensagem como programei para preencher os campos e dou um f5, ele aparece um alert. A página dá um refresh e continua a mensagem lá e se eu dou refresh de novo, acontece a mesma coisa. Fica nesse loop infinito. Tive que fazer junção das imagen

 

<?php
    $host = 'localhost';
    $user = 'root';
    $password = '';
    $banco = 'comentarios';

    $bdconnect = mysqli_connect($host, $user, $password, $banco);
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Sistema de comentários</title>
</head>
<body>
    
    <form action="" method="post">
        <span>Nome: </span><input type="text" name="nome"><br>
        <span>Email: </span><input type="text" name="email"><br>
        <span>Mensagem: </span><input type="text" name="mensagem"><br>
        <input type="submit" name="enviar" value="Enviar"><br>
    </form>

    <?php
        if(isset($_POST['enviar'])){
            $nome = $_POST['nome'];
            $email = $_POST['email'];
            $mensagem = $_POST['mensagem'];
            if($nome == '' and $email == '' and $mensagem == ''){
                echo 'Preencha todos os campos';

            } else{
                echo 'Enviado com sucesso';
                
                $insert = mysqli_query($bdconnect, "INSERT INTO comentario_bd(nome, email, mensagem) 
                VALUES('$nome', '$email', '$mensagem')");
                
                header('Location:index.php');
            }
        }

    ?>
</body>
</html>

parte 1.png

parte 3.png

parte2.png

Share this post


Link to post
Share on other sites

Vamos lá!

 

1º - Uma alternativa seria passar parâmetros via GET

e depois verificar o mesmo, contudo, o alerta sempre

será exibido enquanto o parâmetro estiver na URL.

Segue exemplo:

 

CÓDIGO:

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Sistema de comentários</title>
</head>
<body>
    <?php
        // VERIFICA PARÂMETRO "MSG" VIA GET,
        // E RETORNA O "ALERTA".
        if(isset($_GET['msg'])){
            if ($_GET['msg']==="success"){
                $msg = "Enviado com sucesso!!!";
            }else{
                $msg = "Preencha todos os campos!!!";
            }

            echo "
                <style>
                .msg {
                    padding: 10px 20px;
                    text-align: center;
                    border: 2px solid #999;
                    margin-bottom: 20px;
                    font-weight: 700;
                    background: #000;
                    color: #fff;
                }
                </style>

                <div class='msg'>
                    <span>".$msg."</span>
                </div>
            ";
        }
    ?>
    
    <form action="" method="post">
        <span>Nome: </span><input type="text" name="nome"><br>
        <span>Email: </span><input type="text" name="email"><br>
        <span>Mensagem: </span><input type="text" name="mensagem"><br>
        <input type="submit" name="enviar" value="Enviar"><br>
    </form>

    <?php
        if(isset($_POST['enviar'])){
            $nome = $_POST['nome'];
            $email = $_POST['email'];
            $mensagem = $_POST['mensagem'];

            // NECESSARIO PREENCHER TODOS OS CAMPOS
            if($nome == '' or $email == '' or $mensagem == ''){
                header('Location:index.php?msg=error');
            } else{
                // PASSAMOS PARÂMETRO MSG VIA GET
                header('Location:index.php?msg=success');
            }
        }

    ?>
</body>
</html>

 

2º - Você pode usar  "Flash Message", que exibirá o

alerta uma única vez. Exemplo:

 

CÓDIGO:

<?php
    // OBRIGATÒRIO
    session_start();
?>

<!DOCTYPE html>
<html lang="pt-br">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Sistema de comentários</title>
</head>
<body>
    <?php
        if (isset($_SESSION["flash"])){
            echo "
                <style>
                .msg {
                    padding: 10px 20px;
                    text-align: center;
                    border: 2px solid #999;
                    margin-bottom: 20px;
                    font-weight: 700;
                    background: #000;
                    color: #fff;
                }
                </style>

                <div class='msg'>
                    <span>".$_SESSION["flash"]["texto"]."</span>
                </div>
            ";

            unset($_SESSION["flash"]);
        }
    ?>
    
    <form action="" method="post">
        <span>Nome: </span><input type="text" name="nome"><br>
        <span>Email: </span><input type="text" name="email"><br>
        <span>Mensagem: </span><input type="text" name="mensagem"><br>
        <input type="submit" name="enviar" value="Enviar"><br>
    </form>

    <?php
        if(isset($_POST['enviar'])){
            $nome = $_POST['nome'];
            $email = $_POST['email'];
            $mensagem = $_POST['mensagem'];

            // NECESSARIO PREENCHER TODOS OS CAMPOS
            if($nome == '' or $email == '' or $mensagem == ''){
                $_SESSION["flash"] = array (
                    "tipo" => "success",
                    "texto" => "Preencha todos os campos!!!"
                );
            }else{
                $_SESSION["flash"] = array (
                    "tipo" => "success",
                    "texto" => "Enviado com sucesso!!!"
                );
            }

            header('Location:index.php');
        }

    ?>
</body>
</html>

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By danilo759
      Tenho uma tabelinha de programas para uma rádio... está da seguinte forma.

      titulo
      data (YYYY-MM-DD)
      hora (00:00:00)

      Minha consulta, mas não retorna o programa da hora corrente. O que eu fiz de errado?
      SELECT * FROM programas WHERE data = CURDATE() AND hora = CURTIME() LIMIT 1
    • By Ro_JnR
      Estou tentando a semanas resolver um problema, consumir uma API e verificar se o campo no banco está vazio, se estiver faz insert se não faz update.
      Até aí tudo bem, agora não consigo passar do meu select para o banco, ele da erro.
       
      Segue o código:
       
      <?php

          require_once("db.class.php");
          
          $url = "https://servicodados.ibge.gov.br/api/v1/localidades/distritos";
              $ch = curl_init($url);
              curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
              curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
              $resultado = json_decode(curl_exec($ch));
              foreach ($resultado as $cidades) {
                  $nome = $cidades->nome;
                  $stmt = $conn->prepare("SELECT name FROM cidades WHERE name=?");
                  $stmt->bind_Param(':name', $nome);
                  $stmt->execute();
                  $stmt->bind_result($resultSelect);
                  $stmt->fetch();
                  if(!$stmt->execute()){
                      print_r($stmt->errorInfo());
                  }
              } 

      ?>
       
      Código do banco:
       
      $conn = new PDO("mysql:host=localhost;dbname=exercicio", "root", "");
      //"sqlsrv:Database=dbphp7;server=localhost\SQLEXPRESS;ConnectionPooling=0", "sa", "root");
      $stmt = $conn->prepare("SELECT * FROM cidades ORDER BY nome");
      $stmt->execute();
      //fetchALL basicamente faço while do mysqli
      $results = $stmt->fetchALL(PDO::FETCH_ASSOC);
       
      Print do erro:

       
      Tenho um outro exercicio que fiz bem parecido, consumi a API de estados e inseri no banco de dados, esse funcionou normalmente.
      Alguém poderia me dar uma luz, não sei mais o que fazer.
      Era para ser simples rsrsrrs.
    • By asacap1000
      Galera me foi solicitado a criação de um servidor web, para disponibilizar serviços para os clientes. O que vocês recomendam?
      Tenho um servidor da DELL com windows 2016. Todo o desenvolvimento será em PHP, Javascript e companhia Ltda com conexão aos bancos de dados Mysql, SQL e ORACLE.
      Já temos um servidor que será desativado porém está utilizando uma versão muito antiga de PHP 5.4 e como base de instalação foi utilizado o WampServer. 
    • By asacap1000
      Galera me foi solicitado a criação de um servidor web, para disponibilizar serviços para os clientes. O que vocês recomendam?
      Tenho um servidor da DELL com windows 2016. Todo o desenvolvimento será em PHP, Javascript e companhia Ltda com conexão aos bancos de dados Mysql, SQL e ORACLE.
      Já temos um servidor que será desativado porém está utilizando uma versão muito antiga de PHP 5.4 e como base de instalação foi utilizado o WampServer. 
    • By dutopfave
      Boa Noite Galera, estou com dúvida em como cria um cadastra de VARIAÇÕES DE PRODUTOS.

      Ex.: Tenho um produto que é um TENIS, ai nele vou criar as VARIAÇÕES, então vou usa COR e TAMANHO.
      COR: preto, verde, azul
      TAMANHO: 39, 40, 41

      até ai blz, porém a duvida é como fazer o cadastrado de combinações de cor e tênis, tipo no banco de dados teria q fica exatamente assim....

      ID | COR | TAMANHO
      ... | preto | 39
      ... | preto | 40
      ... | preto | 41
      ... | verde | 39
      ... | verde | 40
      ... | verde | 41
      ... | azul | 39
      ... | azul | 40
      ... | azul | 41

      alguém tem alguma solução
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.