web-dev-qa-db-fra.com

Comment fermer l'onglet du navigateur après avoir soumis un formulaire?

<?php
    /* ... SQL EXECUTION TO UPDATE DB ... */
?>

<form method  = "post"
      action  = "<?=$_SERVER['php_self']?>" 
      onSubmit= "window.close();">
  ...
  <input type="submit" value="submit" />
  <input type="reset"  value="reset" />
</form>

Je voudrais fermer la page après avoir soumis le formulaire. Après avoir exécuté le code ci-dessus, la page est fermée après avoir cliqué sur le bouton d'envoi, mais le SQL ne s'exécute pas.

Quelqu'un peut-il m'aider? Merci d'avance!

15
Acubi
<?php    
    /* ... SQL EXECUTION TO UPDATE DB ... */

    echo "<script>window.close();</script>";
?>

et supprimer la window.close() du formulaire onsubmit événement

44
Shakti Singh

Supprimez onsubmit de la balise form. Change ça:

<input type="submit" value="submit" />

À:

<input type="submit" value="submit" name='btnSub' />

Et écris ceci:

if(isset($_POST['btnSub']))
    echo "<script>window.close();</script>";
9
Sonal Khunt

Si vous avez à utiliser la même page que l'action, vous ne pouvez pas utiliser onSubmit="window.close();" car cela ferme la fenêtre avant la réception de la réponse. Vous devez générer en Dinamycally un fragment JS qui ferme la fenêtre après le traitement des données SQL. Il serait cependant beaucoup plus élégant d’utiliser une autre page comme action de formulaire.

1
Viruzzo

essayez onsubmit="submit(); window.close()"

1
Marijn van Vliet

Window.close () ne fonctionne plus comme avant. Peut être vu ici:

window.close et self.close ne ferment pas la fenêtre dans Chrome

Dans mon cas, j'ai réalisé que je n'avais pas besoin de fermer la page. Vous pouvez donc rediriger l'utilisateur vers une autre page avec:

window.location.replace("https://stackoverflow.com/");
1
blueseal

En effet, l'événement onsubmit est déclenché avant l'envoi du formulaire.

Supprimez votre onSubmit et insérez ce code JavaScript dans votre script PHP après avoir traité la demande. Vous fermez la fenêtre maintenant et annulez la demande à votre serveur.

0
Jan Hančič

Cela a fonctionné avec brio pour moi:

 $query = "INSERT INTO `table` (...or put your preferred sql stuff)" 
 $result = mysqli_query($connect, $query); 
 if($result){
  // If everything runs fine with your sql query you will see a message and then the window
  //closes
        echo '<script language="javascript">';
        echo 'alert("Successful!")';
        echo '</script>';
        echo "<script>window.close();</script>";
        }
 else {
        echo '<script language="javascript">';
        echo 'alert("Problem with database or something!")';
        echo '</script>';           
        }
0
Macarrao