# OnSubmit Daten senden und Fenster schließen



## Flo<H> (2. Januar 2004)

Hallo!
Folgendes Problem: Ich arbeite gerade an einem Gästebuch, bei dem sich durch Klick auf  "Eintragen" ein neues Fenster durch "window.open"  öffnet, das ein Formular beinhaltet. 
Ich will jetzt, dass wenn man das Formular abschickt die Daten an eine andere Seite weitergeschickt werden und sich das Fenster selber schließt. 

Hir der Link der das Fenster öffnet:

```
<a href=\"gbnewentry.php\" onClick=\"window.open(this.href,'Anzeige','width=600,height=290,left=300,top=200,menubar=no,location=no,scrollbars=no'); return false;\">Eintragen</a>
```

Hier der form tag des Formulars:

```
echo "<form method=\"post\" action=\"gb.php\" target=\"frame\" name=\"Formular\" onSubmit=\"return chkFormular()\">
```

Die Funktion chkFormular() überprüft das Formular ob die Felder ausgefüllt sind. Ich habe jetzt versucht in das onSubmit ein self.close() miteinzubauen, hab aber nur erreicht, dass sich das Fenster schließt ohne dass die Daten an die Datei gesendet werden.

Leider kenn ich mich mit JavaScript so gut wie gar nicht aus, aber theoretisch bräuchte ich nur eine Funktion, die überprüft ob die Daten gesendet wurden und dann gegebenenfalls das Fenster schließt. 

Flo


----------



## SilentWarrior (2. Januar 2004)

Hi

Ich würde mal versuchen, in der gb.php mittels PHP zu überprüfen, ob die Daten gesendet und erfolgreich eingetragen wurden. Wenn nein, eine Fehlermeldung ausgeben - wenn ja, mit JavaScript das Fenster schliessen. Also irgendwie sowas:
	
	
	



```
<?php
// MySQL-Query
if ($query) {
?>
<body onload="window.close()">
<?php
} else {
?>
<body>
<p>Folgender Fehler ist aufgetreten:</p>
<p>blabla...</p>
<?php
}
?>
```
Allerdings wirst du damit die Sicherheitsabfrage des Browsers nicht verhindern können.

P.S.: Achte doch bitte auf die Breite deines Quelltexts (Querscrolling ist echt nervend).


----------



## Flo<H> (2. Januar 2004)

So funktioniert es nicht, da die Daten lediglich an eine andere Seite geschickt werden, die diese speichert.


----------



## Sven Mintel (2. Januar 2004)

> _Original geschrieben von Flo[H] _
> *So funktioniert es nicht, da die Daten lediglich an eine andere Seite geschickt werden, die diese speichert. *



aber die gb.php ist doch die Seite, welche die daten empfängt...





> "<form method=\"post\" action=\"gb.php\"


  


die einfachste Methode wäre, das self.close() verzögert auszuführen. Ist allerdings nicht sehr elegant, weil es noch lange nicht garantiert, dass die Daten vorher angekommen sind.
Dazu müsstest du in der Funktion "chkFormular()" vor der letzten return-Anweisung fogendes notieren:

```
setTimeout('self.close()',3000);
```
...das würde das Fenster bspw. nach 3 sec schliessen, sofern die Funktion nicht schon vorher aufgrund einer falschen Formulareingabe verlassen wurde.
Innerhalb dieser 3sec hätte das Formular dann Zeit, sich zu versenden.


Sicherer wäre es allerdings, in der Zielseite des Formulars zu überprüfen, ob die gewünschten Daten angekommen sind.
Dazu müsstest du das Popup in einer Variablen speichern:

```
<a href=\"gbnewentry.php\" onClick=\"popper=window.open(this.href,'Anzeige','/*parameter*/'); return false;\">Eintragen</a>
```
in der gb.php müsstest du dann, falls die gewünschten Daten angekommen sind, folgendes ausgeben:

```
<script type="text/javascript">
<!--
if(typeof popper=='object'&&!popper.closed){popper.close();}
//-->
</script>
```
...was das Popup, falls vorhanden, schliessen sollte.


----------



## Flo<H> (3. Januar 2004)

Leider hat mir das alles nicht geholfen, aber ich habs jetzt anders gelöst und jetzt läuft es so wie ich will. Trotzdem Danke für eure Mühen!


----------

