Weiterleiten mit PHP wie geht das?
Marco
- php
0 Patrick Canterino0 Patrick Canterino
Hallo zusammen,
wie kann ich eine Weiterleitung machen mit PHP.
Also z.B hier:
if ($a == "super"){
echo "hallo";
}
else {
hier möchte ich jetzt auf eine Seite www.test.ch verweisen welche geladen wird.!! Aber nicht mit include !!
}
wie geht das ?!
Freue mich auf Eure Hilfe !!
Hallo Marco!
hier möchte ich jetzt auf eine Seite www.test.ch verweisen welche geladen wird.!! Aber nicht mit include !!
Nichts leichter als das:
header("Location: http://www.test.ch/");
exit;
Das exit ist ganz wichtig, damit kein weiterer PHP-Code ausgeführt wird.
Viele Grüße
Patrick Canterino
Ich nochmal!
Ganz wichtig:
Bevor header() ausgeführt, dürfen keine Daten ausgegeben worden sein. Sonst funktioniert es nicht!
Viele Grüße
Patrick Canterino
Ich nochmal!
Ganz wichtig:
Bevor header() ausgeführt, dürfen keine Daten ausgegeben worden sein. Sonst funktioniert es nicht!
Viele Grüße
Patrick Canterino
Und was macht man, wenn bereits Daten ausgegeben worden sind? (Dürfte in umfangreichen Scripts nichts ungewöhnliches sein)
Ich nochmal!
Ganz wichtig:
Bevor header() ausgeführt, dürfen keine Daten ausgegeben worden sein. Sonst funktioniert es nicht!
Viele Grüße
Patrick Canterino
Und was macht man, wenn bereits Daten ausgegeben worden sind? (Dürfte in umfangreichen Scripts nichts ungewöhnliches sein)
Ja genau das ist bei mir auch der fall und jetzt kommt folgende meldung:
Warning: Cannot add header information - headers already sent by (output started at /home/g-design.ch/html/test/kontakt.php:11) in /home/g-design.ch/html/test/auswerten.php on line 124
was jetzt ?!?
Huhu Marco
eine weitere Möglichkeit wäre es den "Output" zu "buffern".
Dann hast Du die Möglichkeit ggf. erst am Ende des Skriptes zu Entscheiden ob die gesammlten Ausgaben gezeigt, oder eine Weiterleitung gemacht werden soll.
hier ein einfaches Beispiel:
<?php
ob_start(); # OutPut Buffering starten
ob_implicit_flush(0);
?>
Html-Stuff
etc.
<?php
echo "some PHP-echos";
?>
some more
HTML-Stuff
<?php
$contents = ob_get_contents();
ob_end_clean();
if ($FlagShowThisStuff) {
echo $contents;
} else {
header("Location: http://www.test.ch/dochlieberwasanderes.html");
exit;
}
?>
Viele Grüße
lulu
Aloha!
Und was macht man, wenn bereits Daten ausgegeben worden sind? (Dürfte in umfangreichen Scripts nichts ungewöhnliches sein)
Man leitet ganz zuerst den Browser um. Üblicherweise kann man schon ganz oben entscheiden, ob der Rest des Skriptes abgearbeitet werden soll, oder die Umleitung.
Wenn du dein Skript dermaßen unübersichtlich gestaltet hast, dass dies nicht mehr möglich ist, solltest du ohnehin deinen Programmierstil mal überarbeiten. Es ist eine gute Idee, zuoberst erst mal einen längeren PHP-Block zu haben, der alle Vorarbeiten vornimmt, und dann am Ende einen relativ reinen HTML-Block, der die notwendigen Ausgaben übernimmt. Alles andere ist unübersichtlich.
- Sven Rautenberg
Aloha!
Und was macht man, wenn bereits Daten ausgegeben worden sind? (Dürfte in umfangreichen Scripts nichts ungewöhnliches sein)
Man leitet ganz zuerst den Browser um. Üblicherweise kann man schon ganz oben entscheiden, ob der Rest des Skriptes abgearbeitet werden soll, oder die Umleitung.
Wenn du dein Skript dermaßen unübersichtlich gestaltet hast, dass dies nicht mehr möglich ist, solltest du ohnehin deinen Programmierstil mal überarbeiten. Es ist eine gute Idee, zuoberst erst mal einen längeren PHP-Block zu haben, der alle Vorarbeiten vornimmt, und dann am Ende einen relativ reinen HTML-Block, der die notwendigen Ausgaben übernimmt. Alles andere ist unübersichtlich.
- Sven Rautenberg
Uff, dass ist mir als Neuling jetzt etwas komplziert :o)
Aber muss halt mal schauen ob ich das kann. Gibts also sonst keine andere Möglichkeit ?!?
Aloha!
Uff, dass ist mir als Neuling jetzt etwas komplziert :o)
Aber muss halt mal schauen ob ich das kann. Gibts also sonst keine andere Möglichkeit ?!?
Wieso kompliziert? Das macht die Sache einfacher, weil du im Prinzip zwei getrennte Bereiche hast: 1. den PHP-Block, in dem du Dinge verarbeitest (mailen, weiterleiten, Datenbank, ...), und 2. den HTML-Block, in dem du nur noch die Ausgabe der Seite machst.
Gegen den Zwang, dass vor header() keine Ausgabe geschehen darf, kannst du nichts tun. "Ausgabe" bezieht sich allerdings hierbei nur auf Dinge, die im Browser als Seite erscheinen. Du kannst ansonsten beliebige Ausgaben machen, in Dateien, Datenbanken und Mails.
- Sven Rautenberg
Aloha!
Uff, dass ist mir als Neuling jetzt etwas komplziert :o)
Aber muss halt mal schauen ob ich das kann. Gibts also sonst keine andere Möglichkeit ?!?
Wieso kompliziert? Das macht die Sache einfacher, weil du im Prinzip zwei getrennte Bereiche hast: 1. den PHP-Block, in dem du Dinge verarbeitest (mailen, weiterleiten, Datenbank, ...), und 2. den HTML-Block, in dem du nur noch die Ausgabe der Seite machst.
Gegen den Zwang, dass vor header() keine Ausgabe geschehen darf, kannst du nichts tun. "Ausgabe" bezieht sich allerdings hierbei nur auf Dinge, die im Browser als Seite erscheinen. Du kannst ansonsten beliebige Ausgaben machen, in Dateien, Datenbanken und Mails.
- Sven Rautenberg
Hmm, jrgendwie verstehe ich es nicht ganz. Naja dann sollte es doch unten gehen, weil dort mache ich keine ausgabe, ich mache ja nur ein mail aber keine echo befehle.. (die gehören doch zur Ausgabe oder?)
else {
$Bestellung ="\n"."---------------------------". "\n"."$bestellen"."\n"."$bestellen1"."\n"."$bestellen2"."\n"."$bestellen3"."\n"."$bestellen4"."\n"."$bestellen5"."\n"."$bestellen6"."\n"."$bestellen7"."\n"."$bestellen8"."\n"."$bestellen9"."\n"."$bestellen10"."\n"."$bestellen11"."\n"."---------------------------";
//Zusammenstellen der E-Mail
$to = $Email_Senden_an;
$subject = $Email_Betreff;
$nachricht ="Anrede: $Anrede\n\nName: $Name\n\nVorname: $Vorname\n\nPLZ\Ort: $PLZ $Ort\n\nE-Mail: $email\n\nMitteilung: $Mitteilung\n\n---------------------------\nBestellungen: $Bestellung\n\n";
$header ="From:" .$email."\n";
mail($to, $subject, $nachricht,$header);
echo '<table width="93%" border="0" cellpadding="0" cellspacing="0">';
echo "<tr>";
echo '<td bgcolor="#1C4595">';
echo '<table width="100%" border="0" cellpadding="1" cellspacing="1">';
echo '<tr>';
echo '<td bgcolor="#FFFFFF">';
echo "  ".$Text_VielenDank;
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</td>";
echo "</tr>";
echo "</table>";
}
Aloha!
Hmm, jrgendwie verstehe ich es nicht ganz. Naja dann sollte es doch unten gehen, weil dort mache ich keine ausgabe, ich mache ja nur ein mail aber keine echo befehle.. (die gehören doch zur Ausgabe oder?)
Was passiert vor diesem else?
else {
$Bestellung ="\n"."---------------------------". "\n"."$bestellen"."\n"."$bestellen1"."\n"."$bestellen2"."\n"."$bestellen3"."\n"."$bestellen4"."\n"."$bestellen5"."\n"."$bestellen6"."\n"."$bestellen7"."\n"."$bestellen8"."\n"."$bestellen9"."\n"."$bestellen10"."\n"."$bestellen11"."\n"."---------------------------";
//Zusammenstellen der E-Mail
$to = $Email_Senden_an;
$subject = $Email_Betreff;
$nachricht ="Anrede: $Anrede\n\nName: $Name\n\nVorname: $Vorname\n\nPLZ\Ort: $PLZ $Ort\n\nE-Mail: $email\n\nMitteilung: $Mitteilung\n\n---------------------------\nBestellungen: $Bestellung\n\n";
$header ="From:" .$email."\n";
mail($to, $subject, $nachricht,$header);
Spätestens hier sind Ausgaben auf die HTML-Seite. Vorher muss die Weiterleitung kommen.
echo '<table width="93%" border="0" cellpadding="0" cellspacing="0">';
echo "<tr>";
echo '<td bgcolor="#1C4595">';
echo '<table width="100%" border="0" cellpadding="1" cellspacing="1">';
echo '<tr>';
echo '<td bgcolor="#FFFFFF">';
echo "  ".$Text_VielenDank;
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</td>";
echo "</tr>";
echo "</table>";
}
- Sven Rautenberg
Aloha nochmal!
Spätestens hier sind Ausgaben auf die HTML-Seite. Vorher muss die Weiterleitung kommen.
Soll heißen: Jetzt kommen Ausgaben mit "echo", die auf die HTML-Seite gehen. Das ist böse.
Da du aber schon <table> etc. ausgibst, ist anzunehmen, dass vorher <html><head><body> ausgegeben wurde. Das ist ebenso böse und nicht erlaubt, wenn du an dieser Stelle mit header() eine Weiterleitung machen willst.
echo '<table width="93%" border="0" cellpadding="0" cellspacing="0">';
echo "<tr>";
echo '<td bgcolor="#1C4595">';
echo '<table width="100%" border="0" cellpadding="1" cellspacing="1">';
echo '<tr>';
echo '<td bgcolor="#FFFFFF">';
echo "  ".$Text_VielenDank;
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</td>";
echo "</tr>";
echo "</table>";
}
- Sven Rautenberg
Aloha nochmal!
Spätestens hier sind Ausgaben auf die HTML-Seite. Vorher muss die Weiterleitung kommen.
Soll heißen: Jetzt kommen Ausgaben mit "echo", die auf die HTML-Seite gehen. Das ist böse.
Da du aber schon <table> etc. ausgibst, ist anzunehmen, dass vorher <html><head><body> ausgegeben wurde. Das ist ebenso böse und nicht erlaubt, wenn du an dieser Stelle mit header() eine Weiterleitung machen willst.
echo '<table width="93%" border="0" cellpadding="0" cellspacing="0">';
echo "<tr>";
echo '<td bgcolor="#1C4595">';
echo '<table width="100%" border="0" cellpadding="1" cellspacing="1">';
echo '<tr>';
echo '<td bgcolor="#FFFFFF">';
echo "  ".$Text_VielenDank;
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</td>";
echo "</tr>";
echo "</table>";
}
- Sven Rautenberg
Juiii Juiii dann bin ich ja ganz böse. Uff, wäre ich doch nur so gut wie Du, nein ehrlich, verstehe es nicht ganz. Kann ich Dir die Datei nicht mal per E-Mal senden?!? Aber nicht erschrecken weil es ist mein erstes Script !!
Hmm, aber wenn ich die Weiterleitung vor dem echo einfüge, dann würde es ja die Tabelle gar nicht mehr anzeigen oder ?!?
Uff, Fragen über Fragen...
Juiii Juiii dann bin ich ja ganz böse. Uff, wäre ich doch nur so gut wie Du, nein ehrlich, verstehe es nicht ganz. Kann ich Dir die Datei nicht mal per E-Mal senden?!? Aber nicht erschrecken weil es ist mein erstes Script !!
Wenn du warten kannst, schicks an die Mailadresse oben - da kümmere ich mich zuhause dann drum. Aber ich glaube nicht, dass dies unbedingt notwendig ist, denn...
Hmm, aber wenn ich die Weiterleitung vor dem echo einfüge, dann würde es ja die Tabelle gar nicht mehr anzeigen oder ?!?
Der Sinn einer Weiterleitung ist, dass das Skript selbst gar keine Seite erstellt, sondern nur Funktionen im Hintergrund ausführt (also mailen, Datenbank füttern etc.), und dann einfach weiterleitet zu einer bestehenden anderen Seite.
Mit anderen Worten: Entweder gibst du auf deiner Seite eine Tabelle aus, die man sehen kann, _oder_ du leitest weiter. Beides zusammen macht nicht so recht Sinn.
Natürlich gibts noch diese Möglichkeit: Nachdem das Skript gemailt hat, soll für eine kurze Zeit (3 Sekunden) die Erfolgsmeldung angezeigt und dann eine neue Seite geladen werden. In diesem Falle empfehle ich Meta-Refresh:
<meta http-equiv="Refresh" content="3; url=http://www.neueseite.de/pfad/zur/seite.html">
Diese Zeile muss im <head> stehen. Alternativ dazu kann man diese Anweisung auch per header() senden (es ist ursprünglich eine header-Anweisung):
header("Refresh: 3; url=http://www.neueseite.de/pfad/zur/seite.html");
Allerdings ist header()-Funktion darauf angewiesen, vor jeglichem HTML-AOutput aufgerufen zu werden, während der Meta-Refresh _während_ des HTML-Outputs, aber innerhalb vom <head> ausgegeben werden muss.
Die ganz banale Variante: Mach unten auf der Seite einen schlichten Link "weiter" auf die nächste Seite. :)
- Sven Rautenberg
Aloha!
Und was macht man, wenn bereits Daten ausgegeben worden sind? (Dürfte in umfangreichen Scripts nichts ungewöhnliches sein)
Man leitet ganz zuerst den Browser um. Üblicherweise kann man schon ganz oben entscheiden, ob der Rest des Skriptes abgearbeitet werden soll, oder die Umleitung.
Wenn du dein Skript dermaßen unübersichtlich gestaltet hast, dass dies nicht mehr möglich ist, solltest du ohnehin deinen Programmierstil mal überarbeiten. Es ist eine gute Idee, zuoberst erst mal einen längeren PHP-Block zu haben, der alle Vorarbeiten vornimmt, und dann am Ende einen relativ reinen HTML-Block, der die notwendigen Ausgaben übernimmt. Alles andere ist unübersichtlich.
- Sven Rautenberg
Bei mir gehts nicht, naja das stimmt wohl das ich meinen Programmierstyl noch nicht so super ist, aber es ist das Problem dass ich zuerst noch eine Mail versenden muss und dann erste weiterletiten. Schau mal hier
else {
$Bestellung ="\n"."---------------------------". "\n"."$bestellen"."\n"."$bestellen1"."\n"."$bestellen2"."\n"."$bestellen3"."\n"."$bestellen4"."\n"."$bestellen5"."\n"."$bestellen6"."\n"."$bestellen7"."\n"."$bestellen8"."\n"."$bestellen9"."\n"."$bestellen10"."\n"."$bestellen11"."\n"."---------------------------";
//Zusammenstellen der E-Mail
$to = $Email_Senden_an;
$subject = $Email_Betreff;
$nachricht ="Name: $Name\n\nVorname: $Vorname\n\nPLZ\Ort: $PLZ $Ort\n\nE-Mail: $email\n\nMitteilung: $Mitteilung\n\n---------------------------\nBestellungen: $Bestellung\n\n";
$header ="From:" .$email."\n";
mail($to, $subject, $nachricht,$header);
echo '<table width="93%" border="0" cellpadding="0" cellspacing="0">';
echo "<tr>";
echo '<td bgcolor="#1C4595">';
echo '<table width="100%" border="0" cellpadding="1" cellspacing="1">';
echo '<tr>';
echo '<td bgcolor="#FFFFFF">';
echo "  ".$Text_VielenDank;
echo "</td>";
echo "</tr>";
echo "</table>";
echo "</td>";
echo "</tr>";
echo "</table>";
}
Freue mich über jeden Tipp !!