Sonja: Link in Form einbauen

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

  1. --->>>>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

    1. 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 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

      1. 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

        1. 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 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

          1. 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

            1. 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 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>';  
                
                
                
                
                
              
              >   }  
              > ?>  
              > ~~~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

              1. 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

                1. 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

                  1. 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

                    1. 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 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

                      1. 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

                        1. 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

                          1. 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

                            1. 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 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

                              1. 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

                                1. 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.

                                  --
                                  sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(