Und wieder mal Formularueberpruefung

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

  • Und wieder mal Formularueberpruefung

    Ich hab mir hier alle (na ja, zumindest viele) Threads zur Forumlarüberprüfung angesehen, aber irgenwie hilft es mir nicht weiter. Auch die Online-Doku von php.net hat nicht geholfen, sowie meine 4 (!) Bücher über PHP und diverse Tutorials im WWW.

    Folgendes Prob:


    habe eine Seite gebaut (in HTML) mit Kontaktformular. Über PHP werden die Daten (Absender-Name, Absender-Adresse, Betreff, Inhalt der Mail) per E-Mail an meine Adresse verschickt. Jetzt möchte ich aber prüfen, ob die Felder ausgefüllt sind. So funktioniert alles (ohne die Überprüfungsfunktion), aber die Funktion macht selber Mist:
    Egal ob etwas eingetragen wird oder nicht, werden alle Schleifen durchlaufen, also die Fehlermeldung ausgegeben, dass nichts eingetragen wäre. Der soll ja nur dann die Fehlermeldung anzeigen, wenn nichts eingetragen ist, wenn was drinsteht, (in allen Feldern), soll er die verflixte Mail schicken. Ich raffs nicht... HILFE...
    ich habe schon alles probiert (isset, empty, das jetztige, und was weiss ich was es da noch fuer optionen gibt). ich dachte schon daran, dass vielliecht keine globale Variabele definiert wäre, aber ... ach menno, sagt mir, was ich falsch mache...

    Quellcode:

    <?php

    // Funktion um auf vollstaendige Eingaben zu pruefen

    function testforms($errors)
    {
    if($von="") //hier hatte ich auch die Versionen emty($von), isset($von)...
    {
    echo "Ihr Name fehlt...";
    echo "<br>";
    $errors++;
    }
    if($vonmail="")
    {
    echo "Ihre E-Mail-Adresse fehlt...";
    echo "<br>";
    $errors++;
    }
    if($betreff="")
    {
    echo "Ihr Betreff fehlt...";
    echo "<br>";
    $errors++;
    }
    if($inhalt="")
    {
    echo "Ihre Nachricht fehlt...";
    echo "<br>";
    $errors++;
    }
    return $errors;
    }

    $body="";

    foreach($_POST as $name=>$value)
    {
    $body=$body."$name=$value\n";
    }

    // Benachrichtigung im E-Mail Formular

    $inhalt="$von ($vonmail) schreibt:

    $inhalt";


    //Fehlerüberprüfung

    if (testforms(0)>=1)
    {
    echo "<br>";
    echo "Bitte korrigieren Sie Ihre Eingaben!";
    echo "<br>";
    echo "Benutzen Sie den Zur&uumlck-Button Ihres Browsers um zur Eingabemaske zur&uumlckzukehren...";
    }
    else
    {
    mail(trim($an), $betreff, $inhalt);
    header("Location: $bestaetigen"); // Bestaetigen verweist auf eine Seite, die den E-Mail-Versand bestaetigt
    }

    ?>



    //und warum rückt der jetzt hier die Zeilen nicht ein????
    instant artist - just add water and food

  • #2
    versuchs mal mit

    if($vonmail=="")

    oder

    if(!$vonmail)

    gruß
    berni

    php-Entwicklung | ebiz-consult.de
    PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
    die PHP Marktplatz-Software | ebiz-trader.de

    Kommentar


    • #3
      In einer if-Bedingung muß immer == stehen.
      = ist eine Zuweisung, z.B. $a=2 // in $a steht jetzt der Wert 2
      == ist ein Vergleich, z.B. $a==2 // der Wert in $a wird mit 2 verglichen, liefert true, wenn $a den Wert 2 enthält, sonst false.

      Wichtig, eine Zuweisung ist immer wahr!!! Daher werden bei Dir auch alle Anweisungen ausgeführt.

      Also bei jeder if-Bedingung mußt du aus = == machen.
      Beispiel:
      aus if($von="") wird if($von=="")

      cu tj99de
      Of all things I've lost
      I miss my mind the most

      Kommentar


      • #4
        danke, bringt aber leider auch keine Änderung, funktioniert trotzdem nicht...
        instant artist - just add water and food

        Kommentar


        • #5
          setzt mal global ein!

          function testforms($errors)
          {
          globals $vonmail.....

          php-Entwicklung | ebiz-consult.de
          PHP-Webhosting für PHP Entwickler | ebiz-webhosting.de
          die PHP Marktplatz-Software | ebiz-trader.de

          Kommentar


          • #6
            mit strlen kannst du auch die länge der Eingabe abfragen

            PHP-Code:
            if (strlen($_POST[eingabe]) < 1) {
            //nichts eingegeben

            gruss

            Kommentar


            • #7
              @Berni: klappt nicht, dann kommt folgende Fehlermeldung:

              Parse error: parse error, unexpected T_VARIABLE in /is/htdocs/12200/www.huebinet-intern.de/mawecon/kontakt.php on line 7

              sollte doch eigentlich nicht sein,oder???


              @MoRtAlan:

              das ist schön, das hab ich auch schon probiert, aber wer kann es eraten... es klappt nicht... das heisst, er sendet dann die Mail, egal ob was drinsteht oder nicht, also könnte ich mir die Funktion auch sparen...
              instant artist - just add water and food

              Kommentar


              • #8
                Original geschrieben von Berni
                setzt mal global ein!

                function testforms($errors)
                {
                globals $vonmail.....
                Kleiner Tippfehler: das Wort heißt global, nicht globals.
                mein Sport: mein Frühstück: meine Arbeit:

                Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

                Kommentar


                • #9
                  ähm ich will ja hier niemanden den Tag vermiesen, aber würde das nicht bedeutend eifach gehen mit einer javascript funktion?

                  Kommentar


                  • #10
                    mittlerweile überlege ich mir das auch, ob des nicht sinnvoller ist, aber ich will noch ein bisschen probieren.
                    instant artist - just add water and food

                    Kommentar


                    • #11
                      Original geschrieben von tj99de
                      In einer if-Bedingung muß immer == stehen.
                      Das ist ja nicht korrekt ... es kommt immer darauf an was man mit der Operation erreichen will ... s.u.
                      Original geschrieben von tj99de

                      = ist eine Zuweisung, z.B. $a=2 // in $a steht jetzt der Wert 2
                      == ist ein Vergleich, z.B. $a==2 // der Wert in $a wird mit 2 verglichen, liefert true, wenn $a den Wert 2 enthält, sonst false.

                      Wichtig, eine Zuweisung ist immer wahr!!! Daher werden bei Dir auch alle Anweisungen ausgeführt.
                      Das ist auch nicht korrekt ... die Zuweisung $a=0 ergibt FALSE als Ergebnis.

                      In C,C++,PHP, ... Hat jede Operation grundsätzlich ein ergebnis (in C,C++ kann dieses auch void sein) ... FALSE ist als 0 definiert und TRUE als !0 ...
                      Daher macht grundsätzlich auch eine Zuweisung in einer if() Anweisung oder while() Schleife oder ähnlichem durchaus sinn und erspart u.U. sehr viel Schreibarbeit ... ich erinnere nur an:
                      PHP-Code:
                      while ( $row=mysql_fetch_array($res) ) 
                      Original geschrieben von tj99de
                      Also bei jeder if-Bedingung mußt du aus = == machen.
                      Beispiel:
                      aus if($von="") wird if($von=="")

                      cu tj99de
                      carpe noctem

                      [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                      [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                      Kommentar


                      • #12
                        Original geschrieben von MichaelHebel
                        mittlerweile überlege ich mir das auch, ob des nicht sinnvoller ist, aber ich will noch ein bisschen probieren.
                        Das würde ich auf gar keinen Fall machen ... JavaScript kann jeder abschalten und dann hast Du hinterher Datenmüll ...

                        Entweder würde ich Titus' Vorschlag folgen ... oder auf die $HTTP_POST_VARS, $_POST Arrays umstellen ... das macht weniger arbeit ... denke ich ...
                        carpe noctem

                        [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                        [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                        Kommentar


                        • #13
                          jetzt fragt mich bitte nicht, warum meine global-Aufrufe nicht funktioniert haben (das war schon klar, dass es nicht globals heisst), aber jetzt funktioniert es endlich... (vielleicht hatte ich ja sonst irgendwo einen Schreibfehler)...

                          Vielen Dank an alle, die mir hier geholfen haben, Ihr seid super!


                          <?php

                          // Funktion um auf vollstaendige Eingaben zu pruefen

                          function testforms($errors)
                          {
                          global $von;
                          global $vonmail;
                          global $betreff;
                          global $inhalt;

                          if($von=="")
                          {
                          echo "Ihr Name fehlt...";
                          echo "<br>";
                          $errors++;
                          }
                          if($vonmail=="")
                          {
                          echo "Ihre E-Mail-Adresse fehlt...";
                          echo "<br>";
                          $errors++;
                          }
                          if($betreff=="")
                          {
                          echo "Ihr Betreff fehlt...";
                          echo "<br>";
                          $errors++;
                          }
                          if($inhalt=="")
                          {
                          echo "Ihre Nachricht fehlt...";
                          echo "<br>";
                          $errors++;
                          }
                          return $errors;
                          }

                          $body="";

                          foreach($_POST as $name=>$value)
                          {
                          $body=$body."$name=$value\n";
                          }


                          //Fehlerüberprüfung

                          if (testforms(0)>=1)
                          {
                          echo "<br>";
                          echo "Bitte korrigieren Sie Ihre Eingaben!";
                          echo "<br>";
                          echo "Benutzen Sie den Zur&uumlck-Button Ihres Browsers um zur Eingabemaske zur&uumlckzukehren...";
                          }
                          else
                          {
                          // Benachrichtigung im E-Mail Formular

                          $inhalt="$von ($vonmail) schreibt:

                          $inhalt";
                          mail(trim($an), $betreff, $inhalt);
                          header("Location: $bestaetigen");
                          }

                          ?>
                          instant artist - just add water and food

                          Kommentar


                          • #14
                            @goth:
                            das in einer if-Bedingung immer == stehen muß bezog sich natürlich auf den Fall, daß ich etwas auf Gleichheit überprüfen will.

                            Den Fall $a=0 hatte ich leider nicht bedacht
                            Of all things I've lost
                            I miss my mind the most

                            Kommentar


                            • #15
                              ... war ja nur ein Hinweis ...
                              carpe noctem

                              [color=blue]Bitte keine Fragen per EMail ... im Forum haben alle was davon ... und ich beantworte EMail-Fragen von Foren-Mitgliedern in der Regel eh nicht![/color]
                              [color=red]Hinweis: Ich bin weder Mitglied noch Angestellter von ebiz-consult! Alles was ich hier von mir gebe tue ich in eigener Verantwortung![/color]

                              Kommentar

                              Lädt...
                              X