Seite aus php-script aufrufen
Mel
- php
Hallo liebes Forum,
vorsicht, jetzt gibt es eine blutige Anfängerfrage zu php. Ich bitte um Nachsicht...
Folgendes Problem, ich habe ein freies Script für ein feedback-Formular aus dem Inet und bin dabei es anzupassen.
Ich möchte gerne dass bei einem Fehler (email falsch, Felder unvollständig ausgefüllt) eine Seite aufgerufen wird.
Ich habe so die Ahnung dass das total trivial ist aber ich komme nicht drauf.
in der aufgerufenen Datei sieht das nun folgendermassen aus:
$mailfalsch = "<h2>Ihre Nachricht konnte nicht versandt werden!</h2>
<p>Das Feld eMail-Adresse wurde nicht korrekt ausgefüllt.</p>
<p>Bitte kontrollieren Sie noch einmal die Eingabe.";
Hier könnte ich nun natürlich nochmal den ganzen Quellcode für die Seite hineinkopieren aber das ist umständlich finde ich...ich hätte gerne dass da eben eine fehlerseite.html aufgerufen wird.
Beim googlen bin ich auf den Befehl
header("LOCATION: andereseite.html");
gestossen aber wenn ich versuche das einzubauen kommt nur Unsinn heraus, also
$mailfalsch = "('LOCATION: andereseite.html');";
Vermutlich krümen sich gerade die Fussnägel bei den php-Kundigen, sorry sorry ;) Ich häng da grad fest, bitte gebt mir doch Hinweise dass ich auf die richtige Spur komme ;)
Danke, Melanie
Hallo Melanie,
Folgendes Problem, ich habe ein freies Script für ein feedback-Formular aus dem Inet und bin dabei es anzupassen.
bitte _alle_ Missbrauchsmöglichkeiten entfernen. Am besten schreibst Du das Skript selbst neu. Dabei lernst Du am besten, die offensichtlich vorhandenen Fehler zu vermeiden.
Ich möchte gerne dass bei einem Fehler (email falsch, Felder unvollständig ausgefüllt) eine Seite aufgerufen wird.
Ja, und zwar die gleiche, auf der der Benutzer gerade ist. Keine andere. Lies http://faq-php.de/q/q-stil-normalform.html. Du möchtest ein Affenformular (Stichwort).
$mailfalsch = "<h2>Ihre Nachricht konnte nicht versandt werden!</h2>
<p>Das Feld eMail-Adresse wurde nicht korrekt ausgefüllt.</p>
und konsultiere bitte das Archiv zu der Frage: "Was ist eine richtige E-Mail-Adresse". Besonders die Beiträge von Sven Rautenberg zu diesem Thema sind interessant.
<p>Bitte kontrollieren Sie noch einmal die Eingabe.";
Hier könnte ich nun natürlich nochmal den ganzen Quellcode für die Seite hineinkopieren aber das ist umständlich finde ich...ich hätte gerne dass da eben eine fehlerseite.html aufgerufen wird.
Nein, das willst Du ganz bestimmt nicht. Überleg' Dir, dass ggf. ordentlich ausgefüllte Feldinhalte verloren gehen. Nimm ein Affenformular, füge an geeigneter Stelle den Hinweis hin. Wenn der Check erfolgreich ist, ja dann könntest Du auf eine Erfolgsseite weiterleiten. Dazu ist die Funktion
header("LOCATION: andereseite.html");
header() nützlich. Konsultiere bitte das Archiv zu Problemen wie: "Header already sent" oder ähnliches. Es enthält viel zum vorzeitigen Senden von Headern.
Du wirst das schon hinkriegen, das ist gar nicht so schwer. Am einfachsten ist es bestimmt, wenn Du das selbst machst. Die Anlaufstelle bei Problemen kennst Du ja. *g*
Freundliche Grüße
Vinzenz
Hallo Vinzenz,
vielen Dank für die nette und ausführliche Antwort.
Das mit dem Affenformular ist genau das was ich (wohl) wollte und der gepostet Link war auch so verständlich dass ich es geschafft habe so umzusetzen dass die Werte erhalten bleiben, die gleiche Seite aufgerufen wird und Fehlermeldungen entsprechend eingesetzt werden.
So aber nun hängen ich fest und zwar an der FEhlermeldung
Warning: Cannot modify header information - headers already sent by ..
Ich habe das Archiv und php.net dazu befragt aber es hat mir nicht weitergeholfen.
Mir fehlen komplett die Basics.
Vielleicht kann mir das jemand so erklären dass es auch ein dreijähriger versteht ;(
vielen Dank, Melanie
Hallo Mel.
So aber nun hängen ich fest und zwar an der FEhlermeldung
Warning: Cannot modify header information - headers already sent by ..
Ein recht typischer Fehler.
Ich habe das Archiv und php.net dazu befragt aber es hat mir nicht weitergeholfen.
Bei allem Respekt: Das glaube ich nicht. Diese Fehlermeldung kommt so häufig vor, dass man dazu nahezu überall etwas findet.
Mir fehlen komplett die Basics.
Dann erarbeite sie dir am Besten, in dem du das Handbuch konsultierst und vor allem ein Prinzip verfolgst: Trial-and-Error.
Vielleicht kann mir das jemand so erklären dass es auch ein dreijähriger versteht ;(
Soviel zur Meldung: Ein Server sendet, nach dem er eine Anfrage von einem Client (deinem Browser zum Beispiel) erhalten hat, sowohl einen HTTP-Head als auch einen HTTP-Body. (Lasse dich von den Namen nicht verwirren, sie haben nichts mit den in HTML enthaltenen head- und body-Element zu tun, auch wenn sie sich prinzipiell ähneln.)
Im HTTP-Head finden sich einige Informationen über den Statuscode, die Länge der ankommenden Daten und dergleichen. Hier setzt die header-Funktion von PHP an, um eine Weiterleitung zu einer anderen Resource (im HTTP-Kontext gibt es keine Dateien, dafür ist FTP--das Dateitransferprotokoll--zuständig) anzustoßen.
Im HTTP-Body nun finden sich schließlich all deine tatsächlichen Daten, also z. B. dein HTML-Dokument, Grafiken, Stylesheets, etc.
Der HTTP-Head kann serverseitig beliebig modifiziert und erweitert werden, aber nur so lange, wie noch kein Byte Daten gesendet wurde. Wenn Letzteres eintritt, wird implizit der HTTP-Head geschlossen, so dass der HTTP-Body gesendet werden kann.
Ein einmalig geschlossener und abgsendeter HTTP-Head kann nicht mehr modifizert werden, weshalb ein nachträglicher Versuch in PHP berechtigterweise zu obiger Fehlermeldung führt.
Du hast nun zwei Möglichkeiten:
1) Du passt dein Skript so an, dass die für die header-Funktion relevanten Bedingungen noch vor dem Senden des ersten Bytes überprüft und die erforderlichen Schritte eingeleitet werden.
2) Du nutzt die von PHP zur Verfügung gestellte Ausgabepufferung. Damit kannst du zu jeder Zeit den HTTP-Head beeinflussen, bis du den Ausgabepuffer ausgeben und beenden lässt.
Einen schönen Samstag noch.
Gruß, Ashura
Hallo Ashura,
auch Dir danke für die ausführliche Antwort. Natürlich habe ich etliches gefunden, im Archiv und auch sonst, aber verstanden habe ich trotzdem nichts, bei allem Respekt das ist nicht ungewöhnlich ;)
Deine Erklärung verstehe ich auch nicht, sorry. Sagen wir, noch nicht.
DAs ist alles so komplex. Der Gedanke erst ein Buch durcharbeiten zu müssen um so ein kleines Kontaktformular zu erstellen frustriert mich gerade nachhaltig.
vg melanie
Hallo Mel.
Deine Erklärung verstehe ich auch nicht, sorry. Sagen wir, noch nicht.
Du wirst das Prinzip früher oder später verstehen, da du im HTTP-Umfeld erwartungsgemäß häufig damit zu tun haben wirst.
Der Gedanke erst ein Buch durcharbeiten zu müssen um so ein kleines Kontaktformular zu erstellen frustriert mich gerade nachhaltig.
Darum verbietet es dir auch niemand, bereits funktionstüchtige Beispielskripte zu übernehmen und mit diesen zu experimentieren, um die Wirkungsweise heraus zu finden. Vollständige eigenständiges schreiben erfordert nun einmal viel Verständnis von der Materie und eventueller Fallstricke.
Einen schönen Samstag noch.
Gruß, Ashura
Ich war soweit, dass entsprechende Fehlermeldungen in der gleichen SEite ausgegeben werden und hatte es auch geschafft dass den entsprechenden Feldern css-Fehler-Klassen zugewiesen werden.
ABer jetzt stelle ich fest dass bei einem erneuten reload bzw. wenn man auf der Seite navigiert und dann wieder zu kontakt klickt diese leider auch erhalten bleiben. Das ist ja auch nicht im Sinne des Erfinders, Affenformular hin oder her.
Hallo,
Ich möchte gerne dass bei einem Fehler (email falsch, Felder unvollständig ausgefüllt) eine Seite aufgerufen wird.
Mach Dir erstmal den Unterschied klar zwischen
Dann sollte Dir die Antwort auch leichter fallen.
LG
Chris