-1

I'm writing code in PHP where the response of an if condition calls a Javascript function with SweetAlert2. Basically, when a register is updated, the button calls a PHP function and this one call a Javscript function if it successfully runs. This javascript function is a SweetAlert2 which shows a message and should wait for a click on the "Ok" button to redirect the user to another URL.

The problem is the message appears really fast and doesn't wait to click; it closes by itself. The redirect is not working as well.

I already tried this javascript function from the PHP code and it is running fine.

How can I fix it?

PHP code

    function UpdateReg() {
      $Titulo =  $_REQUEST['f_titulo'];
      $Descricao = $_REQUEST['f_desc'];
      $Valor = $_REQUEST['f_valor'];
      $cod = $_GET['cod'];
    
    if ($GLOBALS['$conexao']->connect_error) {
        die("Falha de Conexão: " . $GLOBALS['$conn']->connect_error);
      }
      
      $sql = "UPDATE produtos set titulo = '$Titulo', descricao = '$Descricao', valor = '$Valor', WHERE cod_produto = $cod";
    
    
      if (mysqli_query($GLOBALS['$conexao'], $sql)) {
    
        echo "<script>ChangeOk('produto')";
          
      } else {
    
        echo "Erro: " . $sql . "<br>" . mysqli_error($GLOBALS['$conexao']);
      } 
      
      mysqli_close($GLOBALS['$conexao']);
    
    }
    
    }

Javascript

    function ChangeOk(tipo)
        {
          Swal.fire({
            title: "Feito!",
            text: "Registro alterado com sucesso",
            icon: 'success',
            showConfirmButton: true
            }).then((result) => {
              if (result.isConfirmed) {
                window.location = "home.php?tipo=" + tipo
              } 
          })
        }
code11
  • 1,986
  • 5
  • 29
  • 37
  • 1
    **Warning:** You are wide open to [SQL Injections](https://php.net/manual/en/security.database.sql-injection.php) and should use parameterized **prepared statements** instead of manually building your queries. They are provided by [PDO](https://php.net/manual/pdo.prepared-statements.php) or by [MySQLi](https://php.net/manual/mysqli.quickstart.prepared-statements.php). Never trust any kind of input! Even when your queries are executed only by trusted users, [you are still in risk of corrupting your data](http://bobby-tables.com/). [Escaping is not enough!](https://stackoverflow.com/q/5741187) – Dharman Jan 11 '22 at 21:15

1 Answers1

0

As PHP is a server-side language and Javascript is a client-side language you might run in to some problems with the timing. Your echo in php is the first line your document will generate. You'll see this when you check the sourcecode of the page in your browser.

I'm thinking the problem here might be that you call for ChangeOk('produto') too fast. Your library and javascript-function might not have been enterily loaded while you al ready call it from the echo with php. If that's the case it might help to tell Javascript it needs to run the call after all code is loaded.

echo "<script> window.addEventListener('load', ChangeOk('produto')); </script>";
T-S
  • 707
  • 3
  • 8