# Weiterleitung auf PHP Seite nach Ausführung einer Action



## wal (2. November 2004)

Hallo,

ich habe schon mit der Suche gearbeitet, habe aber nicht das gefunden, dass ich eigentlich suchte bzw. konnte es eventuell nur nicht richtig einbauen.

Hintergrund meiner kommenden Frage ist:
Ich habe einen Kalender gebaut, der aus der Datenbank sich die Daten holt und in einer HTML Seite ausgibt. Dann ist es möglich die Daten zu ändern bzw. auch zu löschen.

Der Aufbau dieser Seiten sieht folgendermaßen aus, zuerst wird eine PHP Seite aufgerufen, die eine HTML Seite einliest, die erforderlichen Werte aus der Datenbank holt, die in die HTML Seite schreibt und dann ausgibt. Wenn ich nun einen Datensatz lösche oder ändere, gibt es eine weitere PHP Seite die auf der Datenbank dies durchführt und dann eine Bestätigungseite (HTML) das diese Aktion funktioniert hat mit einem Link, der den Benutzer wieder zurück zur ersten PHP Seite bringt, die dann erneut auf die DB zugreift und die Daten wieder anzeigt.

Mein Problem ist nun, das ich die Bestätigungseite nicht mehr haben möchte und z.B: nach dem Löschen wieder direkt auf die erste Kalenderanzeigeseite in PHP gelange.

Dabei ist der PHP Code vom HTML Code getrennt, das heisst, in der PHP Seite steht nur PHP Code und in der HTML Seite nur HTML Code.

Ich habe dies mit @header und dem <meta - Tag probiert, hat aber nicht funktioniert.

Hier folgt zur bessern Erklärung mal die Löschen-PHP Seite, von der ich wieder zur ersten PHP Seite springen möchte:


```
<?php
 //print_r($_POST); // Testausgabe der Forumlareingabe (Array wird ausgegeben)
 $done=false;

 if (!$done) {
	$erg = deleteData();
	displayEnd($erg);
	$done=true;
 }
	// Löschen des Eintrags aus der DB
 	function deleteData() {

		$back="";

		$id = $_GET['swert'];
 		include 'c:\include_php\inc.mysql.php';
		mysql_select_db("termin", $dbcnx);

		$sql = "Delete FROM tlbestand WHERE id='$id'";
		                 	
		if (@mysql_query($sql)){
			$back = 1; 
		} else {
			$back = 2; 
		}
		$done=true;
		return $back;	
	}

 // Ende-HTML ausgeben
 function displayEnd($ok) { 
  // HTML lesen
  
//  @header("Location: terminanzeige.php"); 
  $fileName="ende.htm";
  $fp=fopen($fileName,"rb");
  $s_Inhalt=fread($fp, filesize($fileName));
  fclose($fp);
  
  // Text für Erfolg/Misserfolg festlegen
  switch ($ok) {
   case "1":
			// Javascript für Weiterleitung einbauen
/*		  $muster="<!-- headbereich -->";
		  $replace="<meta http-equiv="refresh" content="0; URL=Kalender-anzeige-PHP-Seite.php">";
		  $s_Inhalt=str_replace($muster,$replace,$s_Inhalt); */
          $message="Termin wurde aus Kalender entfernt!"; break;
   case "2":
          $message="Fehler bei der Ausführung der Abfrage ".mysql_error()."!"; break;
  }

  // Message im HTML ersetzen
  $muster="<!-- message -->";
  $replace=$message;
  $s_Inhalt=str_replace($muster,$replace,$s_Inhalt);
  
  echo $s_Inhalt; */
 }
?>
```

Ich würde nun gerne von dieser Seite aus direkt die andere PHP Seite aufrufen, wie kann ich dies machen?

Vielen Dank schon mal vorab für Hilfestellungen oder Tipps.


----------



## CodAv (2. November 2004)

header("Location: xyz.php"); kannst Du nur benutzen, wenn vorher keine Ausgabe erfolgt ist. Da Du die Bestätigungsseite nicht mehr willst, lasse am besten einfach die Textausgabe vollständig weg, und benutze die header()-Funktion zum Weiterleiten. Ansonsten tut es folgender META-Redirect im <head>-Bereich der Website:


```
<meta http-equiv="refresh" content="0; url=xyz.php">
```


----------



## wal (2. November 2004)

Hi CodAv,

danke für die schnelle Antwort. Ich habe es nun mit dem Head Bereich versucht.
Also es wird die HTML Seite eingelesen und dann im <head>-Bereich der <meta>-Tag reingeschrieben.

Leider erhalte ich dabei eine Fehlermeldung: da in der Zeile die reingeschrieben werden muss, ein; zuvor drinnen stehet. Auch wenn ich ein \ davor setze, wird dies nicht erkannt.


Kannst du mir eventuell bitte nochmals kurz sagen, wie ich dies schreiben muss, also wo der Fehler liegt, bzw wie die Syntax dazu genau auschauen muss?

Code:

```
$muster="<!-- headbereich -->";
		  $replace="<meta http-equiv=\"refresh\" content=\"0; URL=Kalender-anzeige-PHP-Seite.php\">";
		  $s_Inhalt=str_replace($muster,$replace,$s_Inhalt);
```

Also das Problem liegt bei: ... \0*;*...

Vielen Dank für deine Hilfe!


----------



## fh_study (2. November 2004)

Baue das löschen des Datensatzes doch einfach in die Seite ein, in der der Kalender angezeigt wird (ganz am Anfang versteht sich). 
Setze den Link zum löschen nicht auf die externe php Seite, sondern rufe die gleiche Seite wieder auf, mit einem Parameter loeschen=1 oder so.
Dann einfach

$loeschen = $HTTP_GET_VARS["loeschen"];

if ($loeschen > 0) { 
    $erg = deleteData(); 
    displayEnd($erg); 
    $done=true; 
} 
    // Löschen des Eintrags aus der DB 
    function deleteData() { 

        $back=""; 

        $id = $_GET['swert']; 
        include 'c:\include_php\inc.mysql.php'; 
        mysql_select_db("termin", $dbcnx); 

        $sql = "Delete FROM tlbestand WHERE id='$id'"; 

        if (@mysql_query($sql)){ 
            $back = 1; 
        } else { 
            $back = 2; 
        } 
        $done=true; 
        return $back;     
    }

vor dem ganzen natürlich Verbindung zur Datenbak herstellen


----------



## wal (3. November 2004)

Hi,

ich habe es nun ganz einfach anders gelöst, indem ich von der letzten PHP Seite (Ergebnisseite) bereits auf die DB zugreife und die Eingangs-HTML-Seite mit den Inhalten fülle und dann anzeige - ist natürlich viel einfacher gewesen. Verstehe nicht, warum ich da nicht gleich drauf kam ... Sorry Aber manchmal braucht man erst mal einen Denkanstoss

Also daher vielen Dank für eure Hilfen und Tipps.


----------



## torkel (13. Juli 2005)

Hallo

ich kann ja mit header eine andere Seite aufrufen.Ich habe eine HTML seite mit frames. Und die header funktion rufe ich aus einer php im mainframe aus. bei einer action soll es mich dann auf eine andere seite weiterleiten. Diese wird allerdings immer im mainframe angezeigt.

wie kann ich es machen, dass es mir ein neues fenster öffnet? oder einfach der inhalt der weitergeleiteten im selber fenster öffnet, aber nicht innerhalb vom mainframe.

ist das überhaupt möglich?

thanxx


----------

