Show success message without leaving the page

0

I have a form that sends some data to the database and uploads to an FTP, the part of the database has a if that returns the error in a variable and shows the error in the form itself. But my question is how do I do this for another kind of mistake? Here is the code below:

$query = "INSERT INTO ".$table." (versao, revisao, data) VALUES 
('".$versao."', '".$revisao."', '".$data."')";
$resultado= mysqli_query($conn, $query);


if(mysqli_insert_id($conn)){
    $_SESSION['msg'] = "<div class='alert alert-success'>Versão e Revisão cadastrada com sucesso!</div>";
}else{
    $_SESSION['msg'] = "<div class='alert alert-danger'>Erro ao cadastrar ao cadastrar Versão e Revisão!</div>";
} 

This is the example that stores a variable and shows it in a part of the HTML form.

<div class="container">

<?php
    if(isset($_SESSION['msg'])){
        echo $_SESSION['msg'];
        unset($_SESSION['msg']);
    }
?>

How could I do for this message I can display on the form page instead of going to another page to show the message?

if ( @ftp_put( $conexao_ftp, $destino, $arquivo_temp, FTP_BINARY ) ) {
// Se for enviado, mostra essa mensagem
    echo '<br> <p class="alert alert-success d-flex justify-content-center"> Arquivo enviado com sucesso! </p>';

} else {
// Se não for enviado, mostra essa mensagem
    echo '<br> <p class="alert alert-danger d-flex justify-content-center"> Erro ao enviar arquivo! </p>';
}

    
asked by anonymous 13.11.2018 / 19:49

2 answers

3
<?php
session_start();

// Verifica se o "dados" está configurado, se sim significa q o form foi submetido(enviado)
if ( isset($_POST['dados']) ) {

    $query = "INSERT INTO ".$table." (versao, revisao, data) VALUES ('".$versao."', '".$revisao."', '".$data."')";

    $resultado= mysqli_query($conn, $query);

    if(mysqli_insert_id($conn)) {
      $_SESSION['msg'] = "<div class='alert alert-success'>Versão e Revisão cadastrada    com sucesso!</div>";
    }else{
      $_SESSION['msg'] = "<div class='alert alert-danger'>Erro ao cadastrar ao cadastrar  Versão e Revisão!</div>";
    }

    if ( @ftp_put( $conexao_ftp, $destino, $arquivo_temp, FTP_BINARY ) ) {
      // Se for enviado, mostra essa mensagem
      $_SESSION['msg2'] = '<br> <p class="alert alert-success d-flex justify-content-center"> Arquivo enviado com sucesso! </p>';

    } else {
        // Se não for enviado, mostra essa mensagem
       $_SESSION['msg2'] = '<br> <p class="alert alert-danger d-flex justify-content-center"> Erro ao enviar arquivo! </p>';
    }

} // fim do if

?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Seu form</title>
    </head>
    <body>

        <?php

            // Mostra a msg q está na variável global $_SESSION
            if(isset($_SESSION['msg'])){
                echo $_SESSION['msg'];
                unset($_SESSION['msg']);
            }

            if(isset($_SESSION['msg2'])){
                echo $_SESSION['msg2'];
                unset($_SESSION['msg2']);
            }

        ?>

        <!-- Deixe o action vazio para que os dados sejam enviados para propria página  -->
        <!-- Isso resolve o seu problema de sair da página -->
        <form method="post" action="">

            <!-- crie um input do tipo hidden(oculto) para sinalizar que os dados do form foram enviados -->
            <input type="hidden" name="dados">


        </form>

    </body>
</html>
    
13.11.2018 / 20:57
3

As php only runs on the server side, the information arrives on the server, it gives you a return, and the page loads. You will need to use ajax my friend.

Use the submit method (I'm using jquery in this case):

<script>
function enviarDados(){
    $.ajax({
     method: "POST",
     url: "seuarquivo.php",
     data: { versao: $("#versao").val(), revisao: $("#revisao").val(), data: $("#data").val() },
     function(msg){
       $("#resultado").html(msg);
       // #resultado é um id de um elemento de texto, como <p> ou <span>
       //quando você der echo na outra página, ele virá como parâmetro para essa função aqui.
     }
    });
  }
</script>

No data you pass an object with key and value of the variables that are going to be sent.

In your form you can put a click event on the button, something like:

<button onclick="enviarDados();">Salvar</button>

Your php can stay as it is, you will only assign variables to the data that will arrive via post. You will need a strategy to get the data. I usually get .val() of input and put it in a variable, versao for example. Remember to put the echo in your php.

There are other methods that use ajax, such as $ .post. Read more here

    
13.11.2018 / 20:09