Ankündigung

Einklappen
Keine Ankündigung bisher.

Formular soll nicht leer verschickt werden

Einklappen

Neue Werbung 2019

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

  • Formular soll nicht leer verschickt werden

    Hallo, ein Formular wird immer wieder leer verschickt und kommt dann so an die angegebene Mailadresse. Wie kann ich das Skript verändern, damit keine leeren Formulare mehr verschickt werden ? Danke für die Hilfe! Hans


    <?php

    $vorname=$HTTP_POST_VARS['vorname'];
    $name=$HTTP_POST_VARS['name'];
    $adresse=$HTTP_POST_VARS['adresse'];
    $plz=$HTTP_POST_VARS['plz'];
    $ort=$HTTP_POST_VARS['ort'];
    $tel=$HTTP_POST_VARS['tel'];
    $email=$HTTP_POST_VARS['email'];
    $papier=$HTTP_POST_VARS['papier'];


    $mailtext="Besten Dank für Ihre Bestellung!";
    $mailtext.="\n";
    $mailtext.="Gerne senden wir Ihnen die gewünschten Unterlagen";
    $mailtext.="\n";
    $mailtext.="Sekretariat DOMUS ANTIQUA HELVETICA";

    $daten.="Vorname: ";
    $daten.=$vorname;
    $daten.="\n";
    $daten.="Name: ";
    $daten.=$name;
    $daten.="\n";
    $daten.="Adresse: ";
    $daten.=$adresse;
    $daten.="\n";
    $daten.="PLZ: ";
    $daten.=$plz;
    $daten.="\n";
    $daten.="Ort: ";
    $daten.=$ort;
    $daten.="\n";
    $daten.="E-Mail: ";
    $daten.=$email;
    $daten.="\n";
    $daten.="Bestellung: ";
    $daten.=$papier;
    $daten.="\n";


    // Mail versenden

    mail($email,"Re: Bestellung DOMUS",
    $mailtext,"From@y.ch");

    mail("sekretariat@domusantiqua.ch","Re: Bestellung",
    $daten,"From: x@y.ch");

    mail("webmaster@domusantiqua.ch","Re: Bestellung",
    $daten,"From: x@y.ch");

    print("Danke für die Bestellung. Sie wird automatisch per Mail bestätigt!");
    print ("<a href='bestellen.html'> Zurück zur Bestellung</a>");
    ?>

  • #2
    Also erstmal eines vorne weg: mach mal aus allen $HTTP_POST_VARS $_POST

    Dann zur Vorgehensweise:
    Du solltest
    1. Formulardaten nur verarbeiten, wenn $_SERVER['REQUEST_METHOD'] == 'POST'
    2. checke, ob bestimmte Formulareingaben vorhanden sind, evt. mit Formatprüfung. nur wenn kein Fehler vorliegt verarbeiten, ansonsten einfach wieder das Formular auf den screen werfen.
    Du kannst den check auch schon im client mit JavaScript machen, das sollte aber eine serverseitige Prüfung nicht ersetzen.
    4. nach der erfolgreichen VErarbeitung dann die Erfolgsmeldung ausgeben

    Kommentar


    • #3
      Danke für den Tipp. Weil ich ein blutiger Anfänger bin, muss ich Dich noch fragen, wie ich eine Formatprüfung mache...

      Besten Dank!

      Kommentar


      • #4
        Na wenn Du zum Beispiel als name eine kette aus Buchstaben erwartest in $_POST['name'] dann checkst Du eben, ob der name nur Buchstaben enthält, zB per regular expression...

        Kommentar


        • #5
          Benutze bitte für den Code PHP-Tags und rücke ihn entsprechend ein. Beschränke dich auf die wesentlichen Teile, das ganze CSS-Zeugs und der (falsche) <head>-Teil interessieren in diesem Fall niemanden. Und Operatoren brauchen Luft, sprich Leerstellen drum herum, dann sieht man sie besser.
          Das Vorgehen von HPR1974 ist zwar richtig, kann aber nicht die Ursache des leeren Formulars sein. Entweder wurde das Formular nicht ausgefüllt, oder deine Felder heissen anders. Lass dir am Anfang deine Daten mal mit
          PHP-Code:
          var_dump($_POST); 
          ausgeben.
          Gruss
          L

          Kommentar


          • #6
            OK, hast Du mir bitte ein Beispiel.... Danke!

            Kommentar


            • #7
              Danke lazydog, die Felder sind schon richtig. Ich erhalte ja auch ausgefüllte Formulare. Wo muss ich den von Dir angegebenen Code einbauen ?
              Danke und Gruss h

              Kommentar


              • #8
                @lazydog Also mal am Rande, wenn ich die folgenden Zeilen sehe, dann wird das Formular bei Aufruf der Seite immer leer verschickt, da keine Prüfung erscheint ob POST request oder GET oder sonstwas.

                // Mail versenden
                mail($email,"Re: Bestellung DOMUS",
                $mailtext,"From@y.ch");
                mail("sekretariat@domusantiqua.ch","Re: Bestellung",
                $daten,"From: x@y.ch");
                mail("webmaster@domusantiqua.ch","Re: Bestellung",
                $daten,"From: x@y.ch");


                Und wenn ich die übergebenen Daten nicht prüfe, ob gesetzt oder korrekt wird auch immer ein Formular verschickt, mit oder ohne Daten.

                Von das Formular wird auch leer verschickt, darauf zu schliessen dass die Variablennamen nicht mit den Formularfeldbezeichnungen übereinstimmt ist natürlich schon viel weiter gedacht als den gegebenen Code zu analysieren...

                Kommentar


                • #9
                  Zitat von hansstalder Beitrag anzeigen
                  Wo muss ich den von Dir angegebenen Code einbauen ?
                  Einfach am Anfang deines Scripts. Was ich eben gesehen habe, falls es sich um dieses Formular handelt, [i]$_POST['papier'] wird immer leer sein, da die Optionen keine value-Attribute haben.
                  Besser wäre es vielleicht auch, die Verarbeitung des Formulars im gleichen Script zu machen, dann kann im Fehlerfall das Formular direkt wieder mit den vorhandenen Eingaben angezeigt werden.

                  @HPR1974
                  Das Formular befindet sich ja nicht in diesem Script, sondern dieses wird (per post) aus dem Formular aufgerufen. Ich habe eben nicht nur den hier gegebenen Code amgeschaut, sondern bin - vermutlich - auch auf das auslösende Formular gestossen.
                  Gruss
                  L

                  Kommentar


                  • #10
                    Ja, es ist dieses Formular. Kann ich den php-Code einfach an den Schluss der html-Seite stellen ?

                    Danke und Gruss Hans

                    Kommentar


                    • #11
                      Ich würde den Code vor das Formular stellen. Allerdings musst du die Datei dann nach .php umbenennnen. Z.B. etwa so :
                      PHP-Code:
                      ...
                            <p><span class="Stil6"><a href="mailto:webmaster@domusantiqua.ch" target="_blank">webmaster</a></span>      </p></td>
                      <?php
                      $ok 
                      true;
                      If (isset(
                      $_POST['Abschicken']){
                      //    var_dump($_POST);
                          
                      if (empty($_POST['vorname'])){
                              echo 
                      "Bitte Vorname eingeben<br />";
                              
                      $ok false;
                          }
                          if (empty(
                      $_POST['name'])){
                              echo 
                      "Bitte Name eingeben<br />";
                              
                      $ok false;
                          }

                          if (empty(
                      $_POST['vorname'])){
                              echo 
                      "Bitte Vorname eingeben<br />";
                              
                      $ok false;
                          }
                          
                      // etc
                      }
                      if (
                      $ok){
                      ?>
                          <td width="62%" valign="top"><form action="<?php $_SERVER['PHP_SELF'?>" method="post" name="bestellen" id="bestellen">
                            <table width="63%" border="0">
                              <tr>
                                <td colspan="2"><p class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2"><b><font size="4">Unterlagen bestellen </font></b></font></p>
                                    <p class="Stil7">Bitte f&uuml;llen Sie alle Felder aus! </p>
                                    <p class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2"><br>
                                  </font></p></td>
                              </tr>
                              <tr>
                                <td width="33%"><span class="Stil7"><b><font face="Arial, Helvetica, sans-serif" size="2">Vorname:</font></b></span></td>
                                <td width="67%"><span class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2">
                                  <input type="text" name="vorname" size="40">
                                </font></span></td>
                              </tr>
                              <tr>
                                <td width="33%"><span class="Stil7"><b><font face="Arial, Helvetica, sans-serif" size="2">Name:</font></b></span></td>
                                <td width="67%"><span class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2">
                                  <input type="text" name="name" size="40">
                                </font></span></td>...
                      <?php
                      }
                      ?>
                      Natürlich können einzelne Felder, z.B. Mail-Adresse, genauer gprüft werden. Das ist ja nur ein Beispiel.

                      [edit]
                      Ich gehe jetzt mal davon aus, das das irgendwie von einem nicht allzu neuen Tool generierter Code ist. Andernfalls würde ich dir dringend empfehlen, die ganzen Formatierungen (<font> u.ä) in ein Stylesheet zu verschieben.
                      Gruss
                      L

                      Kommentar


                      • #12
                        Danke lazydog, das probiere ich aus!

                        Gruss Hans

                        Kommentar


                        • #13
                          Der Code sieht jetzt so aus (ohne Head)


                          <p><span class="Stil6"><a href="mailto:webmaster@domusantiqua.ch" target="_blank">webmaster</a></span> </p></td>
                          <?php
                          $ok = true;
                          If (isset($_POST['Abschicken']){
                          // var_dump($_POST);
                          if (empty($_POST['vorname'])){
                          echo "Bitte Vorname eingeben<br />";
                          $ok = false;
                          }
                          if (empty($_POST['name'])){
                          echo "Bitte Name eingeben<br />";
                          $ok = false;
                          }

                          if (empty($_POST['vorname'])){
                          echo "Bitte Vorname eingeben<br />";
                          $ok = false;
                          }
                          // etc
                          }
                          if ($ok){
                          ?>
                          <td width="62%" valign="top"><form action="<?php $_SERVER['PHP_SELF'] ?>" method="post" name="bestellen" id="bestellen">
                          <table width="63%" border="0">
                          <tr>
                          <td colspan="2"><p class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2"><b><font size="4">Unterlagen bestellen </font></b></font></p>
                          <p class="Stil7">Bitte f&uuml;llen Sie alle Felder aus! </p>
                          <p class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2"><br>
                          </font></p></td>
                          </tr>
                          <tr>
                          <td width="33%"><span class="Stil7"><b><font face="Arial, Helvetica, sans-serif" size="2">Vorname:</font></b></span></td>
                          <td width="67%"><span class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2">
                          <input type="text" name="vorname" size="40">
                          </font></span></td>
                          </tr>
                          <tr>
                          <td width="33%"><span class="Stil7"><b><font face="Arial, Helvetica, sans-serif" size="2">Name:</font></b></span></td>
                          <td width="67%"><span class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2">
                          <input type="text" name="name" size="40">
                          </font></span></td>...
                          <?php
                          }
                          ?>



                          <tr>
                          <td width="33%"><span class="Stil7"><b><font face="Arial, Helvetica, sans-serif" size="2">Adresse:</font></b></span></td>
                          <td width="67%"><span class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2">
                          <input type="text" name="adresse" size="40">
                          </font></span></td>
                          </tr>
                          <tr>
                          <td width="33%"><span class="Stil7"><b><font face="Arial, Helvetica, sans-serif" size="2">PLZ:</font></b></span></td>
                          <td width="67%"><span class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2">
                          <input type="text" name="plz" size="6">
                          </font></span></td>
                          </tr>
                          <tr>
                          <td width="33%"><span class="Stil7"><b><font face="Arial, Helvetica, sans-serif" size="2">Ort:</font></b></span></td>
                          <td width="67%"><span class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2">
                          <input type="text" name="ort" size="40">
                          </font></span></td>
                          </tr>
                          <tr>
                          <td width="33%"><span class="Stil7"><b><font face="Arial, Helvetica, sans-serif" size="2">e-Mail:</font></b></span></td>
                          <td width="67%"><span class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2">
                          <input type="text" name="email" size="40">
                          </font></span></td>
                          </tr>
                          <tr>
                          <td width="33%" valign="bottom"><span class="Stil7"><b><font size="2" face="Arial, Helvetica, sans-serif"> Bitte senden Sie</font></b></span></td>
                          <td width="67%" valign="bottom"><span class="Stil7"><font face="Arial, Helvetica, sans-serif" size="2"> </font></span> <br>
                          <select name="papier" id="papier">
                          <option selected>Aufnahmegesuch</option>
                          <option>Statuten</option>
                          <option>Bulletin Okt 06</option>
                          </select>
                          </td>
                          </tr>
                          <tr>
                          <td width="33%" valign="bottom"><font face="Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">
                          <br>
                          <input type="submit" name="Abschicken" value="Abschicken">
                          </font></td>
                          <td width="67%" valign="bottom"><font face="Arial, Helvetica, sans-serif" size="2" color="#FFFFFF">
                          <input type="reset" name="L&ouml;schen" value="Zur&uuml;cksetzen">
                          </font></td>
                          </tr>
                          </table>
                          </form>
                          <h2>&nbsp;</h2>
                          </td>
                          </tr>
                          </table>
                          </body>
                          </html>

                          und verursacht folgende Fehlermeldung:


                          Parse error: syntax error, unexpected '{' in /home/domusant/public_html/bestellen.php on line 145

                          Jetzt bin ich wieder am Anschlag. Gruss hans

                          Kommentar


                          • #14
                            Zitat von hansstalder Beitrag anzeigen

                            Jetzt bin ich wieder am Anschlag. Gruss hans
                            Ich auch, wenn ich diesen Code lesen soll. Lies bitte diese Regeln, v.a. Punkt 4 und 5, editiere deinen Code entsprechend und sage, welches die Zeile 145 ist.
                            De chasch de wider cho
                            Gruss
                            L

                            Kommentar


                            • #15
                              Juhu meine Tipps werden von Helfern benutzt

                              abgesehen davon fehlt hier

                              PHP-Code:
                               If (isset($_POST['Abschicken']){ 
                              ne Klammer zu.

                              Gruß
                              Cy

                              Kommentar

                              Lädt...
                              X