Link in Form einbauen
Sonja
- php
Hallo,
hier mit Sicherheit eine ganz einfache frage, auf die ich leider noch keine Antwort gefunden habe.
Ich habe eine HP mit HTML und darin ein php Kontaktformular eingebaut. Das funktioniert soweit auch gut. Nachdem der User auf Senden gedruckt hat, wird er auf eine Seite weiter geleitet. Diese Seite ist komplett weiss und es wird der Name und Vielen Dank etc ausgegeben. Ich moechte nun, dass nach dem Absenden auf eine xxx.html Seite verlinkt wird. dazu moechte ich dann die Parameter uebergeben wie Name und Vorname. Hier der Code:
<?php
$MailAdr = "xxx@xxx.com";
if($_REQUEST['Send'])
{
if(empty($_REQUEST['Name']) || empty($_REQUEST['LastName']) || empty($_REQUEST['Subject'])|| empty($_REQUEST['E-mail']) || empty($_REQUEST['Message']))
{
echo"Please ensure the fields with a * have been correctly filled out. <a href="javascript:history.back();">back</a>";
}
else
{
$Message = "You get the following Message: \n\n";
while(list($FormName, $Value)=each($_REQUEST))
{
if($FormName!="Send")
{
$Message .= $FormName.": ".$Value."\n";
}
}
$Message .= "\nDate/Time: ";
$Message .= date("m/d/Y H:i:s");
$Subject = "Web Page Message: ";
$Subject .= $_REQUEST['Subject'];
$TextName .= $_REQUEST['Name']. " ".$_REQUEST['LastName'];
mail($MailAdr, $Subject, $Message, "From: ".$_REQUEST['E-mail']);
echo"Thank you for your E-mail $TextName!";
--->>>>Was muss ich hier(echo) tun um auf eine html seite zu verlinken. und was muss dann auf der seite stehen um den Parameter $TextName zu uebergeben?
Danke fuer eure Hilfe
--->>>>Was muss ich hier(echo) tun um auf eine html seite zu verlinken. und was muss dann auf der seite stehen um den Parameter $TextName zu uebergeben?
du musst garnicht auf eine html seite verlinken sondern nur html mittels php ausgeben, das kann php ganz gut (wirklich)
dazu solltest du dich mit affenformularen auseinander setzen - eine seite reicht
prinzipielle vorgehensweise (pseudocode):
if keine postvariablen then
gib das formular aus
else if postvariablen gesetzt und fehler vorhanden
gib formular mit fehlerhinweisen aus
else
gib die dankeseite aus und verschicke die nachricht/verspeichere die daten
end if
im übrigen ist $_REQUEST potentiell gefährlicher als $_POST, $_GET oder $_COOKIE zu verwenden - am wenigsten kannst du benutzereingaben trauen, also biete dem benutzer garnicht erst so viele verschiedene möglichkeiten, variablen einzuschleusen
Hm sorry das hat mir jetzt nicht weiter geholfen.
Also wenn der User das Formular ausgefuellt hat, bekomme ich die Email und er bekommt die ausgabe von echo"Thank you for your E-mail $TextName!";.
ich will aber das er auf die Thankyou.html Seite weiter geleitet wird also irgendwie echo" url Thankyou.html" oder so. dabei soll dann der Parameter $TextName mitgegeben werde.
--->>>>Was muss ich hier(echo) tun um auf eine html seite zu verlinken. und was muss dann auf der seite stehen um den Parameter $TextName zu uebergeben?
du musst garnicht auf eine html seite verlinken sondern nur html mittels php ausgeben, das kann php ganz gut (wirklich)
dazu solltest du dich mit affenformularen auseinander setzen - eine seite reicht
prinzipielle vorgehensweise (pseudocode):
if keine postvariablen then
gib das formular aus
else if postvariablen gesetzt und fehler vorhanden
gib formular mit fehlerhinweisen aus
else
gib die dankeseite aus und verschicke die nachricht/verspeichere die daten
end ifim übrigen ist $_REQUEST potentiell gefährlicher als $_POST, $_GET oder $_COOKIE zu verwenden - am wenigsten kannst du benutzereingaben trauen, also biete dem benutzer garnicht erst so viele verschiedene möglichkeiten, variablen einzuschleusen
bitte zitiere nicht alles, nur das wesentliche
Hm sorry das hat mir jetzt nicht weiter geholfen.
schade - ggf solltest du beschreiben, was du an diesem nicht verstanden hast oder versuchen meinen pseudocode in php zu übersetzen - dafür sind für die rudimentäre funktionaliät 7 zeilen notwendig, mehr nicht (wirklich)
Also wenn der User das Formular ausgefuellt hat, bekomme ich die Email und er bekommt die ausgabe von echo"Thank you for your E-mail $TextName!";.
soweit so klar
ich will aber das er auf die Thankyou.html Seite weiter geleitet wird also irgendwie echo" url Thankyou.html" oder so. dabei soll dann der Parameter $TextName mitgegeben werde.
das hab ich verstanden, und ich hab dir theoretisch beschrieben wie ein affenformular auszusehen und und dir gesagt, dass es nicht notwendig ist auf eine dankeseite weiterzuleiten, weil du den inhalt der dankeseite mit php ausgeben sollst, wenn alles geklappt hat
Theoretisch hab ich das auch verstanden. ich weiss nur nicht wie ich das in php schreiben soll. deswegen bin ich hier.
wie schreibe ich den echo befehl, um nach submit auf eine seite zu gelangen?
bitte zitiere nicht alles, nur das wesentliche
Hm sorry das hat mir jetzt nicht weiter geholfen.
schade - ggf solltest du beschreiben, was du an diesem nicht verstanden hast oder versuchen meinen pseudocode in php zu übersetzen - dafür sind für die rudimentäre funktionaliät 7 zeilen notwendig, mehr nicht (wirklich)Also wenn der User das Formular ausgefuellt hat, bekomme ich die Email und er bekommt die ausgabe von echo"Thank you for your E-mail $TextName!";.
soweit so klarich will aber das er auf die Thankyou.html Seite weiter geleitet wird also irgendwie echo" url Thankyou.html" oder so. dabei soll dann der Parameter $TextName mitgegeben werde.
das hab ich verstanden, und ich hab dir theoretisch beschrieben wie ein affenformular auszusehen und und dir gesagt, dass es nicht notwendig ist auf eine dankeseite weiterzuleiten, weil du den inhalt der dankeseite mit php ausgeben sollst, wenn alles geklappt hat
Theoretisch hab ich das auch verstanden. ich weiss nur nicht wie ich das in php schreiben soll. deswegen bin ich hier.
wie schreibe ich den echo befehl, um nach submit auf eine seite zu gelangen?
wie gesagt, löse dich von deiner weiterleitungsproblematik - du musst nur in abhängigkeit verschiedener faktoren andere inhalte mit php ausgeben
grundlage bildet das <http://de.selfhtml.org/html/allgemein/grundgeruest.htm@title=html grundgerüst> - das kommt in eine datei, die nennen wir "formular.php", im body bereich geben wir unseren code aus
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Beschreibung der Seite</title>
</head>
<body>
<?php
// wenn im $_POST-array der key "foobar" nicht gesetzt ist (sprich, das formular wurde noch nicht abgeschickt)
if (!(isset($_POST['foobar']))) {
echo '<form name="foo" method="post" action="formular.php">';
echo '<input type="text" name="foobar">';
echo '<input type="submit" value="abschicken">';
echo '</form>';
} else {
echo '<p>Danke fürs ausfüllen,' . $_POST['foobar'] . '!</p>';
}
?>
</body>
</html>
achtung, nicht getestet
das ganze beinhaltet jetzt die möglichkeit, dass das fomular nicht ausfüllt wurde oder dass es ausgefüllt wurde
probiers mal aus und sieh, ob du weiterkommst
Statt danke fuers ausfuellen soll dort ein link stehen, um wieder zurueck zur hp zu kommen!!! das muss doch moeglich sein oder. Ich kann doch nicht komplett aufm schlauch stehen....
Theoretisch hab ich das auch verstanden. ich weiss nur nicht wie ich das in php schreiben soll. deswegen bin ich hier.
wie schreibe ich den echo befehl, um nach submit auf eine seite zu gelangen?
wie gesagt, löse dich von deiner weiterleitungsproblematik - du musst nur in abhängigkeit verschiedener faktoren andere inhalte mit php ausgebengrundlage bildet das <http://de.selfhtml.org/html/allgemein/grundgeruest.htm@title=html grundgerüst> - das kommt in eine datei, die nennen wir "formular.php", im body bereich geben wir unseren code aus
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Beschreibung der Seite</title>
</head>
<body>
> <?php
> // wenn im $\_POST-array der key "foobar" nicht gesetzt ist (sprich, das formular wurde noch nicht abgeschickt)
> if (!(isset($\_POST['foobar']))) {
> echo '<form name="foo" method="post" action="formular.php">';
> echo '<input type="text" name="foobar">';
> echo '<input type="submit" value="abschicken">';
> echo '</form>';
> } else {
> echo '<p>Danke fürs ausfüllen,' . $\_POST['foobar'] . '!</p>';
> }
> ?>
> ~~~html
</body>
> </html>
achtung, nicht getestet
das ganze beinhaltet jetzt die möglichkeit, dass das fomular nicht ausfüllt wurde oder dass es ausgefüllt wurde
probiers mal aus und sieh, ob du weiterkommst
Statt danke fuers ausfuellen soll dort ein link stehen, um wieder zurueck zur hp zu kommen!!! das muss doch moeglich sein oder. Ich kann doch nicht komplett aufm schlauch stehen....
ja das ist möglich, aber äusserst (sorry) dämlich
<a href="index.html">zurück zur startseite</a>
für den benutzer ist es ein zumutung soetwas zu tun
Das hatte ich auch schon raus gefunden und finde es auch daemlich.
Ich will doch einfach nur, dass nach dem Submit Butten sagen wir mal die index.html geoeffnet wird
Statt danke fuers ausfuellen soll dort ein link stehen, um wieder zurueck zur hp zu kommen!!! das muss doch moeglich sein oder. Ich kann doch nicht komplett aufm schlauch stehen....
ja das ist möglich, aber äusserst (sorry) dämlich
<a href="index.html">zurück zur startseite</a>
für den benutzer ist es ein zumutung soetwas zu tun
Das hatte ich auch schon raus gefunden und finde es auch daemlich.
gut dass wir uns da einig sind :)
Ich will doch einfach nur, dass nach dem Submit Butten sagen wir mal die index.html geoeffnet wird
wie gesagt, du willst dass das formular in abhängigkeit seines zustandes ANDERE INFORMATIONEN ausgibt - du willst nicht auf eine andere seite verweisen oder sowaswas
du kannst unmöglich (wirklich) den http-header manipulieren und den benutzer auf eine andere seite umleiten, wenn schon ausgabe an den client erfolgt ist - sprich, beim ersten zeichen (auch wenns nur ein leerzeichen ist) ist sense mit den umleitungen
du kannst höchstens per javascript umleiten oder mit meta refresh - aber das sind auch dämliche lösungen, da du ja dann noch einen workaround bräuchtest, um die parameter bzw texte mitzuschleifen
in der zeit wo du jetzt darüber haderst, was du möchtest, hättest du vermutlich mein beispiel schon 2x ausprobieren und verstehen können
wie schon erwähnt hast du eine seite (ein drumherum) und in diesem drumherum ist abhängig davon, ob das formular abgeschickt wurde oder nicht ein andere inhalt (den kannst du aus einem include holen oder im selben dokuement belassen) was du aber auf keinen fall machen kannst, ist ein vollständiges html-dokument in ein anderes includieren (das gibt viele böse html-fehler) oder eben eine weiterleitung zu machen
also nochmal: wenn du hilfe möchtest, solltest du sie annehmen oder zumindest versuchen sie anzunehmen - aktuell gibt es ausser meinen antworten nicht viele optionen die die wählen kannst
a) probier mein beispiel aus (copy und paste in ein dokument) dauert maximal 5 minuten mit ausprobieren
b) weiter herumhadern (meinetwegen nochmal eine 1 stunde, ich hab zeit) und mit "ich will doch nur" einer lösung nachjammern, die aus usablity sicht schlecht ist und dir mehr programmierarbeit beschert, als du durch die andere hast
Wow wir reden glaub ich echt aneinander vorbei. Hier mein letzter versuch mein problem zu loesen.
Es ist doch wie hier im forum. ich drucke auf nachricht senden und werde auf eine seite weiter geleitet. Thats it....genau das will ich statt der ausgabe danke bla bla....das muss doch moeglich sein.
Wenn du magst kannst du drauf antworten, wenn nicht danke fuer deine investierte zeit
Das hatte ich auch schon raus gefunden und finde es auch daemlich.
gut dass wir uns da einig sind :)Ich will doch einfach nur, dass nach dem Submit Butten sagen wir mal die index.html geoeffnet wird
wie gesagt, du willst dass das formular in abhängigkeit seines zustandes ANDERE INFORMATIONEN ausgibt - du willst nicht auf eine andere seite verweisen oder sowaswasdu kannst unmöglich (wirklich) den http-header manipulieren und den benutzer auf eine andere seite umleiten, wenn schon ausgabe an den client erfolgt ist - sprich, beim ersten zeichen (auch wenns nur ein leerzeichen ist) ist sense mit den umleitungen
du kannst höchstens per javascript umleiten oder mit meta refresh - aber das sind auch dämliche lösungen, da du ja dann noch einen workaround bräuchtest, um die parameter bzw texte mitzuschleifen
in der zeit wo du jetzt darüber haderst, was du möchtest, hättest du vermutlich mein beispiel schon 2x ausprobieren und verstehen können
wie schon erwähnt hast du eine seite (ein drumherum) und in diesem drumherum ist abhängig davon, ob das formular abgeschickt wurde oder nicht ein andere inhalt (den kannst du aus einem include holen oder im selben dokuement belassen) was du aber auf keinen fall machen kannst, ist ein vollständiges html-dokument in ein anderes includieren (das gibt viele böse html-fehler) oder eben eine weiterleitung zu machen
also nochmal: wenn du hilfe möchtest, solltest du sie annehmen oder zumindest versuchen sie anzunehmen - aktuell gibt es ausser meinen antworten nicht viele optionen die die wählen kannst
a) probier mein beispiel aus (copy und paste in ein dokument) dauert maximal 5 minuten mit ausprobieren
b) weiter herumhadern (meinetwegen nochmal eine 1 stunde, ich hab zeit) und mit "ich will doch nur" einer lösung nachjammern, die aus usablity sicht schlecht ist und dir mehr programmierarbeit beschert, als du durch die andere hast
Wow wir reden glaub ich echt aneinander vorbei. Hier mein letzter versuch mein problem zu loesen.
nein, tun wir nicht - nur scheine ich mich nicht verständlich genug auszudrücken
Es ist doch wie hier im forum. ich drucke auf nachricht senden und werde auf eine seite weiter geleitet. Thats it....genau das will ich statt der ausgabe danke bla bla....das muss doch moeglich sein.
nein weist du nicht - sowohl für die formularseite, die vorschau-seite, die fehlerseite, die rechtschreibungsseite und die danke-seite "dein post wurde eingetragen" wird die selbe ressource verwendet (http://forum.de.selfhtml.org/cgi-bin/user/fo_post) du wirst niemals auf ein anderes script weitergeleitet - warum? weils nicht notwendig ist und die leute die dieses forum programmiert haben sicht etwas dabei gedacht haben - jeder unnötige http-request sollte vermieden werden, da es einerseits zeit und andererseits traffic kostet bzw serverlast verursacht - besonders in einem forum liegt das auf der hand:
formular aufrufen (eine http-anfrage, eine antwort)
post abschicken (eine anfrage, eine antwort) - vorausgesetzt es gibt keinen fehler
jetzt stell dir das mit umleitung vor
post abschicken (eine anfrage, response mit umleitung, erneute anfrage, die richtige antwort)
damit wird auf der absenden-komponente die anzahl der anfragen/antworten exakt verdoppelt, da auch ein 301 oder 302-redirect anfragen bedeuten
wer ein formular mit einer umleitung programmiert, zeigt, dass er nicht viel ahnung hat, was er da eigentlich tut - die einzig sinnvolle möglichkeit ist es abhängig von bedingungen andere dokumententeile einzubinden - ein vollständiges html-dokument per include mittels php in ein html-dokument einzubinden ist zwar technisch möglich, nur sträube ich mich, dir zu zeigen wie du eine rekursion mit grauenhaften html-fehlern erzeugst
Wenn du magst kannst du drauf antworten, wenn nicht danke fuer deine investierte zeit
ich investiere gerne zeit - aber es scheint so, als würdest du nicht gerne zeit investieren um ein problem zu lösen, und anstatt dessen ein vielfaches (!) der zeit dafür aufzuwenden, um darum herumzudiskutieren
der thread wurde vor gut 100 minuten gestartet (über 1 1/2 stunden) und du hast dir nichtmal die mühe gemacht ein beispiel auszuprobieren, welches vermutlich dein problem löst, welches ich von grund auf in weniger als 5 minuten geschrieben habe
Ich habe das schon ausprobiert. Aber es hat mir nicht weiter geholfen...
Du sagst dass es ein und das selbe skript ist. bloss wie kann ich denn dann mein menue, mein banner und das ganze zeug einbauenk, dass dies seite nach dem bestaetigen so aus sieht wie der rest der hp
Ich habe das schon ausprobiert. Aber es hat mir nicht weiter geholfen...
Du sagst dass es ein und das selbe skript ist. bloss wie kann ich denn dann mein menue, mein banner und das ganze zeug einbauenk, dass dies seite nach dem bestaetigen so aus sieht wie der rest der hp
indem zwischen <body> und <form> das einfügst, was vor deinem formular sein soll und zwischen </form> und </body> das einfügst, was danach kommen soll - das beispiel mit dem grundgerüst sollst du natürlich auf deine seite übetragen - an der stelle wo dein formular ODER danketext sein soll (ich nehme stark an, dass die beiden seiten bis auf den inhalt gleich aussehen) muss durch das php-script ersetzt werden
ich werd mich für heute verabschieden - aber wie bereits erwähnt: mit dem werkzeug, dass ich dir gegeben habe und etwas nachdenken, solltest du eigentlich zum erfolg kommen
Da soll doch kein form mehr kommen. nachdem der user das formula ausgefuellt hat und den submit button gedrueckt hat, ist die sache mit dem php formular beendet, und er soll ganz normal die hompage weiter angucken koennen
Ich habe das schon ausprobiert. Aber es hat mir nicht weiter geholfen...
Du sagst dass es ein und das selbe skript ist. bloss wie kann ich denn dann mein menue, mein banner und das ganze zeug einbauenk, dass dies seite nach dem bestaetigen so aus sieht wie der rest der hpindem zwischen <body> und <form> das einfügst, was vor deinem formular sein soll und zwischen </form> und </body> das einfügst, was danach kommen soll - das beispiel mit dem grundgerüst sollst du natürlich auf deine seite übetragen - an der stelle wo dein formular ODER danketext sein soll (ich nehme stark an, dass die beiden seiten bis auf den inhalt gleich aussehen) muss durch das php-script ersetzt werden
ich werd mich für heute verabschieden - aber wie bereits erwähnt: mit dem werkzeug, dass ich dir gegeben habe und etwas nachdenken, solltest du eigentlich zum erfolg kommen
Hi,
nachdem der user das formula ausgefuellt hat und den submit button gedrueckt hat, ist die sache mit dem php formular beendet, und er soll ganz normal die hompage weiter angucken koennen
versuche doch bitte, die Ausführungen von suit zu verstehen (und im übrigen die unnötigen Vollzitate zu unterlassen).
Der User möchte natürlich nicht auf die Startseite gelangen, sondern die Kontaktseite mit einer Bestätigungsmeldung (anstelle des Formulars) sehen. Wenn Du also eine vollständige Kontaktseite mit Deiner Navigation etc. erstellst und im Inhaltsbereich variabel über PHP entweder das Formular (ggfls. mit Fehlermeldungen) oder die Bestätigungsmeldung ausgibst, dann hast Du ein einfach zu nutzendes, sinnvolles "Affenformular".
Übrigens ist
mail($MailAdr, $Subject, $Message, "From: ".$_REQUEST['E-mail']);
extrem gefährlich. Nicht nur wegen $_REQUEST, sondern weil Du hier ungeprüfte Usereingaben an die mail()-Funktion übergibst. Hierüber kann Dein Formular manipuliert und zum Versand von Massen-Spam missbraucht werden - mit der Folge, dass Dein Prvider bestenfalls Deine Seite lahmlegt oder schlimmstenfalls Schadenersatzforderungen auf Dich zu kommen.
freundliche Grüße
Ingo
Hallo,
Interessante Diskussion ^^
Ich versuche mich mal an einem "Kompromiss", welcher nicht die optimale Lösung aber eine annehbare ist.
Wenn ich dich richtig verstanden habe hast du ein HTML-Formular und ein PHP-Script, welches dieses 1. auswerte und 2. eine "Danke"-Meldung ausgibt. Du möchtest aber auf das Bedanken verzichten und direkt zur Startseite "weiterleiten".
Ändere dein Auswerte-Script einfach dahingehend, das zunächst die ganze Verarbeitung der Daten erfolgt und wenn alles sauber ist _inkludierst_ du deine Startseite UND GIBST SONST NICHTS WEITER AUS! Sonst hättest du Ausgaben außerhalb des <html>-Elements.
Der Effekt wäre, dass das "Danke" weg ist und direkt die Startseite erscheint. Erweitern kannst du (später, wenn du möchtest) das ganze indem du eine Variable erstellst, die eine Meldung (Fehler, Bedankungen, Hinweise etc.) enthält, welche du auf der Startseite mittels php auswertest... etwa so:
(... Teil der Startseite, die vor der Meldung erscheinen soll, inklusive Header etc...)
<?php
if (isset($Meldung_Hinweis_Fehler)) {
echo ('<div class="hinweis_meldung_fehler">'.htmlentities($Meldung_Hinweis_Fehler).'</div>');
} else {
echo ('<!-- Hier koente eine Alternative Ausgabe erscheinen, falls es keine Meldung gibt -->');
}
?>
(... Teil der Startseite, die nach der Meldung erscheinen soll und auch wenn keine Meldung da ist ...)
Aber wie gesagt, das ist alles andere als "Schön" aber du müsstest deine Startseite nicht (oder nur geringfügig) verändern. Langfristig solltest du aber suits Tipps und Hinweisen nocheinmal nachgehen.