Ankündigung

Einklappen
Keine Ankündigung bisher.

Formular hilfe

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Formular hilfe

    Moin Moin,

    ich benötige Hilfe für das folgende Form Tag:

    Code:
    <form id="form2" name="form2" method="post" action="newsletterverarbeiten.php">
              <span id="sprytextfield1">
              <label for="newsletter"></label>
              <input name="newsletter" type="text" id="newsletter" value="" />
              <span class="textfieldRequiredMsg">Bitte E-Mail angeben!</span><span class="textfieldInvalidFormatMsg">Ungültiges Format.</span></span>
                <br />
                <input type="submit" name="senden1" class="sendenbutton" id="senden1" value="Frauen" />
              <input type="submit" name="senden2" class="sendenbutton" id="senden2" value="Männer" />
            </form>
    Ich möchte, dass bei Auswertung des Formulars die aktuelle Seite bestehen bleibt und das php script im Hintergrund (ohne das der User dies bemerkt und auf der gleichen Seite bleibt) verarbeitet wird. Die Seite die der User gerade besucht soll aber keine php sein, die Verarbeitung soll eine extra php sein die nicht erscheint.
    Die Auswertung des Formulars soll dann an eine E-Mail verschickt werden. In der Mail soll dann als Absender die Email die im Formular eingegeben wurde erscheinen und als Inhalt nochmals die Email des Newsletters und die Information welcher Button gedrückt wurde (Frau oder Mann).

    Kann mir jemand Helfen? Bitte mit Entgeld-Vorschlag!

    Gruß

    sven

  • #2
    Das musst du über eine AJAX-Abfrage lösen (also mit Javascript), vorzugweise mit einer noscript-Fallback-Variante.

    Was PHP ausspuckt ist ein Ergebnis in reinem HTML - da gibt es nichts mehr was im Hintergrund läuft. PHP läuft auf dem Server, Javascript hingegen beim Klienten, wodurch es möglich ist, auf Eingaben (auch verdeckt) zu reagieren oder ein Dokument direkt zu ändern ohne es neu zu laden.

    Kommentar


    • #3
      Würde nicht eventuell sogar nen iframe reichen? Dann spart man sich den Cross-Domain Ajax Teil...

      Kommentar


      • #4
        Zitat von phpsecretary Beitrag anzeigen
        Würde nicht eventuell sogar nen iframe reichen? Dann spart man sich den Cross-Domain Ajax Teil...
        Er hat nichts von unterschiedlichen Domains erzählt. Grundsätzlich ist ein iframe eine möglichkeit ( ein verstecktes ). Aber jede Wette das er damit mehr rum zu hampeln hat als mit einem einfachen AJAX-Request.
        [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

        Kommentar


        • #5
          Zitat von tr0y Beitrag anzeigen
          Er hat nichts von unterschiedlichen Domains erzählt. Grundsätzlich ist ein iframe eine möglichkeit ( ein verstecktes ). Aber jede Wette das er damit mehr rum zu hampeln hat als mit einem einfachen AJAX-Request.
          Dann zeig mal deinen einfachen Ajax Request.

          Wenn ich einen mache muss ich zumindest mal ne Lib wie Jquery einbinden... Dazu gehört dann schon wieder JavaScript Wissen. Und das hat hier nicht jeder (auch wenn ich an anderer Stelle bereits betont habe, dass ein Profi diese Scriptsprache kennen und anwenden können sollte).

          Und dann vertippt der sich beim Selector und flucht das da keine vernünftige Fehlerausgabe kommt und muss sich in des Errorhandling einarbeiten... und und und...

          Beim iframe hat man das Problem nicht. Und außerdem wäre das iframe sowieso das fallback für kein Javascript... also das muss man sowieso machen...

          Kommentar


          • #6
            Naja, er will mit der Auswertung ja auch was Anfangen.. Muss also Daten vom Iframe ins Parent bringen. Wenn sich die Seite nicht neu laden soll passiert das wohl auch mit Javascript.. Es sei denn er nutzt das Iframe als Fehler und Fortsetzungsteil des Dokuments.. Dann muss er hingehen und das iFrame noch Cross-Browser tauglich via CSS stylen..

            Ich würde da wie schon beschrieben eher zu raten jQuery einzusetzen, ein Ajax-Request abzusetzen, entsprechend CSS-Klassen zuweisen und als Fallback einen Seitenwechsel vornehmen.. ( Fallbacks also als Failsave-Lösung nutzen, die zwar technisch das selbe leistet, kosmetisch aber nicht ) Ergo: Iframes weglassen.
            [URL="https://gitter.im/php-de/chat?utm_source=share-link&utm_medium=link&utm_campaign=share-link"]PHP.de Gitter.im Chat[/URL] - [URL="https://raindrop.io/user/32178"]Meine öffentlichen Bookmarks[/URL] ← Ich habe dir geholfen ? [B][URL="https://www.amazon.de/gp/wishlist/348FHGUZWTNL0"]Beschenk mich[/URL][/B].

            Kommentar


            • #7
              Zitat von strombose007 Beitrag anzeigen
              Ich möchte, dass bei Auswertung des Formulars die aktuelle Seite bestehen bleibt und das php script im Hintergrund (ohne das der User dies bemerkt und auf der gleichen Seite bleibt) verarbeitet wird. Die Seite die der User gerade besucht soll aber keine php sein, die Verarbeitung soll eine extra php sein die nicht erscheint.
              (..)
              wie willste was auswerten,
              formulare laasen sich herrlich durch das drücken des submit buttons abschicken, aber ohne das und ohne javascript?
              und das formular soll noch auf der seite stehen, obwohl ich es schon benützt habe und es ausgewertet ist?

              Kommentar


              • #8
                Zitat von moma Beitrag anzeigen
                wie willste was auswerten,
                formulare laasen sich herrlich durch das drücken des submit buttons abschicken, aber ohne das und ohne javascript?
                und das formular soll noch auf der seite stehen, obwohl ich es schon benützt habe und es ausgewertet ist?
                Für 4 Uhr ist die Antwort noch ok *g*

                Kommentar


                • #9
                  per se halte ich es für eine GAAAANZ schlechte Idee, wenn der User keinerlei Rückmeldung bekommt, dass "sein Formular" beim Server irgendwie angekommen und wahrgenommen wurde (sprich verarbeitet) - dein Arbeitsansatz wäre also meiner Meinung nach "Affenformular" - wenn du dabei den Site-Reload nicht willst, dann kannst du wie schon 3 mal angeraten mit Ajax nachhelfen, aber du solltest wirklich eine Rückmeldung einbauen - sonst klickt der User "wie ein Blöder" auf den Submit-button, und verlässt schulterzuckend für immer deine Seite, weil "die tut ja nichts ... muss kaputt sein"

                  wenn du nicht willst, dass der User sieht, dass er auf .php-Scripten surft, wäre URL-Rewriting was für dich, da kannst du die wahre URL verschleiern = aus Parametern werden scheinbar "Unterordner" - und man kann den Webserver so einstellen, dass eben die eigentliche Seite nicht angegeben werden muss ...

                  (www.example.org steht in der Adress-Zeile, in Wahrheit aber versucht der Webserver eine der konfigurierten Seiten zu laden ... z.B kann das implizit heißen -> www.example.org/index.html oder www.example.org/index.php ... diese Seite taucht aber nicht in der Adresszeile auf)
                  [Quote=nikosch]
                  So glatt kann doch wirklich keiner sein.[/quote] :roll:

                  Kommentar


                  • #10
                    Zitat von phpsecretary Beitrag anzeigen
                    Würde nicht eventuell sogar nen iframe reichen? Dann spart man sich den Cross-Domain Ajax Teil...
                    In welchem Jahr lebst du denn?
                    PHP 6 and MySQL 5 for Dynamic Web Sites: Visual QuickPro Guide - cool, oder?
                    http://www.amazon.com/gp/product/032...SIN=032152599X

                    Kommentar


                    • #11
                      Hallo,

                      habe mich extra wegen dieses Threads registriert... Ist doch kein Aufwand sowas.
                      Ein simples Beispiel mit PHP und AJAX (10min Arbeit):
                      Es werden zwei Dateien benötigt...

                      index.php (oder newsletter.php, wie auch immer)
                      Code:
                      <!DOCTYPE html>
                      <html>
                          <head>
                              <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                              <title>Newsletter</title>
                              <script lang="JavaScript">
                                  function triggerNewsletter(gender, email)
                                      {
                                          var Handler;
                                          Handler = new XMLHttpRequest();
                                          Handler.open("GET", "newsletterDo.php?insert&gender="+gender+"&email=" + email, false);
                                          Handler.send();
                                          document.getElementById('resultArea').innerHTML=Handler.responseText;
                                          window.setTimeout("document.getElementById('resultArea').innerHTML=''", 5000); // Löscht die Anzeige nach 5 Sekunden wieder
                                      }
                              </script>
                          </head>
                          <body>
                              <form id="form2" name="form2" method="post" action="newsletterverarbeiten.php">
                                <span id="sprytextfield1">
                                <label for="newsletter"></label>
                                <input name="newsletter" type="text" id="newsletter" value="" />
                                <span class="textfieldRequiredMsg">Bitte E-Mail angeben!</span><span class="textfieldInvalidFormatMsg">Ungültiges Format.</span></span>
                                  <br />
                                  <input type="button" name="senden1" class="sendenbutton" id="senden1" value="Frauen" onclick="triggerNewsletter(this.value, form2.newsletter.value)" />
                                <input type="button" name="senden2" class="sendenbutton" id="senden2" value="Männer" onclick="triggerNewsletter(this.value, form2.newsletter.value)" />
                              </form>
                              <div id='resultArea'></div> <!-- Ausgabe von newsletterDo.php (Eintragen Erfolgreich oder nicht) -->
                          </body>
                      </html>
                      newsletterDo.php (Verarbeitet die AJAX Anfrage und gibt etwas, je nach Wunsch, an den Benutzer zurück)
                      PHP-Code:
                      <?php
                      // Verarbeitung des übergeben Formulars
                      $to      'user@example.com';     ### E-Mail Adresse des Empfängers
                      $subject 'Neuer Newsletter Abonnent';     ### Betreff der Mail
                      $message "Ein neuer Benutzer hat den Newsletter abonniert!
                          E-Mail des Abonnenten: \"
                      {$_GET['email']}\"
                          Geschlecht: \"
                      {$_GET['gender']}\"";
                      $headers "From: {$_GET['email']}"."\r\n".
                          
                      "Reply-To: {$_GET['email']}\r\n".
                          
                      'X-Mailer: PHP/'.phpversion();

                      // Mail send und Ergebnis an den Benutzer weitergeben
                      if(mail($to$subject$message$headers))
                          print(
                      "<font color='red'>Sie haben den Newsletter erfolgreich abboniert!</font>");
                      else
                          print(
                      "<font color='red'>Es ist ein Fehler aufgetreten, bitte versuchen Sie es später noch einmal.</font>");

                      // Ausgabe der übergebenen Daten (nur zur testzwecken)
                      print("<br/>Geschlecht: ".$_GET['gender']."<br/>E-Mail: ".$_GET['email']);
                      ?>
                      Sven, hab dein Formular kopiert und folgende Änderungen vorgenommen:
                      - HTML Konstrukt hinzugügt
                      - AJAX-Handler via JS oben drüber gebaut
                      - die Buttons vom Typ 'submit' auf 'button' gesetzt
                      - zu den Buttons ein onclick-Event hinzugefügt, welches die JS Funktion aufruft und die Formular-Felder übergibt
                      - einen DIV Container der zur Anzeige eines Ergebnisses dient
                      - ein paar Kommentare zur Übersichtlichkeit natürlich

                      Und halt die PHP Datei, die die Verarbeitung übernimmt.
                      Hab das ganze mit meinem lokalen Mailserver getestet - hier läuft es Problemlos... Hab es aber so simpel wie möglich gemacht, solltest daher auf jeden Fall auch noch an das Escaping denken.

                      Ich hoffe, dass ich dir weiterhelfen konnte.

                      Gruß

                      Kommentar

                      Lädt...
                      X