# Fenster automatisch öffnen und wieder automatisch schließen. Fehler im Code?



## Grobekelle (22. September 2009)

Guten Tag,

ich bin absoluter Neuling im Bereich PHP und JavaScript und mache gerade meine ersten Gehversuche. Mit dem folgendem Code-Schnipsel möchte ich erreichen, das eine Seite geöffnet wird und automatisch nach einer Zeit x wieder geschlossen. Das ganze befindet sich in einer PHP While Schleife, die Ihre Links aus einer MySQL Datenbank entnimmt. Das automatische Öffnen lief bis dato ganz gut, bis ich den Code versuchte so zu ergänzen, das sich das geöffnete Fenster auch nach etwa 3 Sekunden wieder schließt.
Wo ist mein Fehler? Hier der Code.....

while Schleife:

```
{
    	
    $timer = $timer + 2000;
    	
    $Produktion = $row->Produktion; // einfache Zuweisung für Produktionsdauer im Link
    
    if($row->Standort == "Deutschland")
    {
    $x=1;
    }
    
    if($row->Standort == "SaudiArabien")
    {
    $x=3;
    }

    if($row->Standort == "Oman")
    {
    $x=4;
    }
    
	if($row->Standort == "Mauretanien")
    {
    $x=5;
    }

 	if($row->Standort == "Mali")
    {
    $x=6;
    }
	
 	if($row->Standort == "Kongo")
    {
    $x=7;
    }
    	
	echo "<script language=\"JavaScript\">";
	echo "Fenster = null";
	echo "setTimeout(\"";
	echo "Fenster=window.open('";
    echo "http://www.h2.welt2.kapiland.de/main.php4?page=roh2&art=1&UIN=";
    echo $UIN;
    echo "&q=199&x=";
    echo $x;
    echo "&prd=30&anz=";
    echo $Produktionsdauer * $Produktion;
    echo "&y=";
    echo $row->Adresse;
    echo "&w_quali1=";
    echo $Q_Oel;
	echo "')";
	echo "\","; 
	echo $timer;
	echo ");";
	echo "setTimeout(\"";
	echo "Fenster.focus();";
	echo "if (Fenster != null)";
    echo "if (!Fenster.closed)";
    echo "Fenster.close();";
    echo "\","; 
	echo $timer;
	echo ");";
	echo "</script>";
	}
```

Vielen Dank......


----------



## Quaese (23. September 2009)

Hi,

du initiierst sowohl das Öffnen des Fensters als auch das Schliessen in *setTimeout*-Methoden, die nach der gleichen Zeit ausgeführt werden. JS wartet nicht, bis die erste abgearbeietet wurde und startet dann die nächste, sondern läuft weiter. Das hat zur Folge, dass das Fenster zum gleichen Zeitpunkt geschlossen werden soll, zu dem es geöffnet wird - da existiert es jedoch noch nicht, und kann auch nicht geschlossen werden.

Als Lösung könntest du den Zeitpunkt, zu dem das Fenster wieder geschlossen werden soll, zeitlich verschieben.

```
window.setTimeout("Fenster=window.open();", 1000);
window.setTimeout("Fenster.close();", 3000);
```
 
Vielleicht hilft dir das weiter.

Ciao
Quaese


----------



## Grobekelle (23. September 2009)

Quaese hat gesagt.:


> Hi,
> 
> du initiierst sowohl das Öffnen des Fensters als auch das Schliessen in *setTimeout*-Methoden, die nach der gleichen Zeit ausgeführt werden. JS wartet nicht, bis die erste abgearbeietet wurde und startet dann die nächste, sondern läuft weiter. Das hat zur Folge, dass das Fenster zum gleichen Zeitpunkt geschlossen werden soll, zu dem es geöffnet wird - da existiert es jedoch noch nicht, und kann auch nicht geschlossen werden.
> 
> ...



Zunächst einmal tausend Dank, dass hat mich schon mal ein Stückchen weiter gebracht. Nun gibt es aber folgendes Problem, die ersten 10-20 Seiten die geöffnet und geschlossen werden funktionieren einwandfrei, nur macht es den Anschein, das sich etwas überschneidet, da sich nach 10-20 Seiten nichts mehr tut (Seiten werden geöffnet aber nicht mehr geschlossen). Ich habe schon mit den Timern etwas gespielt, jedoch ohne Erfolg. Muss ich etwa eine IF Schleife einbauen? Ich habe wirklich keine Idee woran es liegen könnten. Ich hoffe man kann mir nochmal helfen. Hier der aktuelle Code:


```
$abfrage = "SELECT Standort, Adresse, Flaeche, Produktionskosten, Produktion FROM quelle ORDER BY Standort DESC, Adresse, Produktionskosten DESC";
	$ergebnis = mysql_query($abfrage);
  	while($row = mysql_fetch_object($ergebnis))
    {
    	
    $timer = $timer + 2000;
    
    $timer_close = $timer_close + 4000;
    	
    $Produktion = $row->Produktion; // einfache Variablen Zuweisung für Produktionsdauer im Link
    
    if($row->Standort == "Deutschland")
    {
    $x=1;
    }
    
    if($row->Standort == "SaudiArabien")
    {
    $x=3;
    }

    if($row->Standort == "Oman")
    {
    $x=4;
    }
    
	if($row->Standort == "Mauretanien")
    {
    $x=5;
    }

 	if($row->Standort == "Mali")
    {
    $x=6;
    }
	
 	if($row->Standort == "Kongo")
    {
    $x=7;
    }


	echo "<script language=\"JavaScript\">";
	echo "setTimeout(\"";
	echo "namenfenster=window.open('";
	echo "http://www.h2.welt2.kapiland.de/main.php4?page=roh2&art=4&UIN=";
    echo $UIN;
    echo "&x=";
    echo $x;
    echo "&y=";
    echo $row->Adresse;
    echo "&q=99&a_bestellen[]=";
    echo $Produktionsdauer * $Produktion;
    echo "')";
	echo "\","; 
	echo $timer;
	echo ");";
	echo "setTimeout(\"";
	echo "Fenster.close();";
	echo "\","; 
	echo $timer_close;
	echo ");";
	echo "</script>";
	
	}
```

Vielen Dank....

Edit: Das Problem leuchtet mir nun ein:  

nach 2 sekunden wird die erste Seite geöffnet...
nach 4 sekunden wird diese geschlossen...
nach 4 sekunden wird die nächste Seite geöffnet...

und hier haben wir die Überschneidung, nur wie umgehe ich diese?

Selbst wenn ich den Timer fürs Fenster schließen, auf 3333 setze, gibt es anscheinend eine Überschneidung, obwohl beide Timer nie übereinstimmen?!

Edit: Ich habe die Lösung, einfach am Ende der Schleife den Timer nochmals um 3 Sekunden erhöhen, so erzeuge ich ein Puffer welches die Überschneidung verhindert. Hier der Code:


```
$abfrage = "SELECT Standort, Adresse, Flaeche, Produktionskosten, Produktion FROM kraftwerk ORDER BY Standort DESC, Adresse, Produktionskosten DESC";
	$ergebnis = mysql_query($abfrage);
  	while($row = mysql_fetch_object($ergebnis))
    {
	
	$timer = $timer + 3000;

	$timer_close = $timer + 3000;

    $Produktion = $row->Produktion; // einfache Variablen Zuweisung für Produktionsdauer im Link
    
    if($row->Standort == "Deutschland")
    {
    $x=1;
    }
    
    if($row->Standort == "SaudiArabien")
    {
    $x=3;
    }
    
    if($row->Standort == "Oman")
    {
    $x=4;
    }

	if($row->Standort == "Mauretanien")
    {
    $x=5;
    }

 	if($row->Standort == "Mali")
    {
    $x=6;
    }
	
 	if($row->Standort == "Kongo")
    {
    $x=7;
    }
    
    echo "<script language=\"JavaScript\">";
	echo "setTimeout(\"";
	echo "namenfenster=window.open('";
	echo "http://www.h2.welt2.kapiland.de/main.php4?page=roh2&art=43&UIN=";
    echo $UIN;
    echo "&x=";
    echo $x;
    echo "&y=";
    echo $row->Adresse;
    echo "&q=0&a_bestellen[]=";
    echo $Produktionsdauer * $Produktion;
    echo "')";
	echo "\","; 
	echo $timer;
	echo ");";
	echo "setTimeout(\"";
	echo "Fenster.close();";
	echo "\","; 
	echo $timer_close;
	echo ");";
	echo "</script>";
	
	$timer = $timer + 3000;
	
	}
```

Vielleicht gibt es ja eine schönere Lösung, ich bin für Ratschläge offen....


----------

