Ankündigung

Einklappen
Keine Ankündigung bisher.

Php Formular prüfen mit Javascript ohne <form>

Einklappen

Neue Werbung 2019

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

  • Php Formular prüfen mit Javascript ohne <form>

    Guten Abend,

    ich habe eine Grundsatzfrage:

    Ein Formular besitzt mehrere checkboxen. Klickt man auf den submit button, soll geprüft werden, ob mindestens eine checkbox angeklickt ist. Ist dies der Fall, soll die E-Mail versendet werden. Wenn nicht, soll eine Fehlermeldung ausgegeben werden.

    Diese Funktion kann man per javascript lösen. Beim Googlen habe ich oft die Lösung mittels eines <form ... > tags gefunden, in dem sich dann diese checkboxen und der submit button befinden.

    Gibt es eine Möglichkeit, diesen Form-Tag zu umgehen? Wenn ja, wie?

    (Hintergrund: Das Formular besteht aus insegesamt 14 Fragen - bestehend aus Radio-Buttons, Textfeldern, etc. Da insgesamt alle Fragen durch unterschiedliche Javascript-Funktionen geprüft werden sollen, würde das <form ...> Tag doch monstergroß werden!?)

    Danke im Voraus!


  • #2
    Ein Formtag ist die Voraussetzung, dass die Daten überhaupt übermittelt werden.

    1/ Eine Javascript Prüfung allein ist i.A. nicht ausreichend, weil JS abgeschaltet werden kann.
    2/ Möglicherweise meinst Du eine onSubmit Anweisung innerhalb des Tags. Du kannst die Prüfung in einen extray JS Bereich auslagern, sogar in eines externe .js Datei

    Stell Deine Frage bitte präziser und gib ggf. ein Beispiel...
    --

    „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
    Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


    --

    Kommentar


    • #3
      Okay, hier ein paar Snippets:

      Drei Checkboxen. Es soll später geprüft werden, ob mindestens eine davon "checked" ist. Wenn nicht, Fehlermeldung.
      PHP-Code:

      <body>

      <!-- Beginn des PHP-Codes -->
      <?php 

      ...

      <
      span>
      <
      input type="checkbox" name="checkbox1" value="Ja"
      <? if($_POST['checkbox1']=='Ja') echo 'checked="checked"'?>>Antwort A
      <input type="checkbox" name="checkbox1" value="Ja"
      <? if($_POST['checkbox1']=='Ja') echo 'checked="checked"'?>>Antwort B
      <input type="checkbox" name="checkbox1" value="Ja"
      <? if($_POST['checkbox1']=='Ja') echo 'checked="checked"'?>>Antwort C
      </span>
      Hier werden - am Ende der Html-Datei - die Daten per submit-button verschickt:
      PHP-Code:
      <div>
      <input type="submit" name="submit" value="Abschicken">
      <input type="reset" value="Zurücksetzen">
      </div>

      <?php

      ?>

      </body>
      </html>
      Das Formular besitzt kein <form> tag und funktioniert einwandfrei. Wie gesagt, ich möchte gern die Prüfroutine implementieren. *hm


      Für konstruktive Vorschläge danke ich im Voraus!

      Kommentar


      • #4
        Versteh ich nicht. Was hast Du denn für ein Problem mit dem Form Tag? Das Body Tag ist doch auch 'groß' ??
        Datenübetragung ohne Form ist nicht definiert und reines Gutdünken des Browsers (und damit Glückssache). Davon ist dringend abzuraten. Schon gar nicht, wirst Du hier auf einen POST Request prüfen können.

        Das Code Bsp. ist auch schnell hinkopiert, oder? Ist nämlich auch Murx. Gleich benannte Input Elemente funktionieren nur bei Radioboxes oder mit [].
        --

        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


        --

        Kommentar


        • #5
          Hallo, wenn du das ganze etwas abstrahierst, muss das garnicht mal so gross sein. Benenn deine Checkboxen-Gruppen doch einfach so:

          <input name="hobbies[]" value="soccer" /> Soccer
          <input name="hobbies[]" value="paintball" /> Paintball
          ..

          Und dann kannst du mit PHP das ganze so testen, ob mindestens ein Element angeklickt wurde:
          array_key_exists("hobbies", $_POST) and count($_POST["hobbies"]) > 0
          (wobei das count() fast schon ueberfluessig ist)

          Das ganze dann noch mit anderen Checkbox-Gruppen auf die gleiche Weise
          <input type="checkbox" name="favoriteMovies[]" value="Superstau" /> Superstau
          <input type="checkbox" name="favoriteMovies[]" value="Surf Nazis Must Die" /> 08/15 Trash-Movie

          In PHP kannst du das dann mit einer Schleife durchlaufen:
          PHP-Code:
          <?php
          $arrRequiredGroups 
          = array("hobbies" => "Hobbies""favoriteMovies" => "Lieblingsfilme");
          $arrWarnings = array();
          foreach (
          $arrRequiredGroups as $strGroup => $strTitle) {
            
          $blnFormOk array_key_exists($strGroup$_POST) && count($_POST[$strGroup]) > 0;
            if (!
          $blnFormOk) {
              
          $arrWarnings[] = $strTitle;
            }
          }
          if (
          count($arrWarnings) > 0) {
            
          printf("<ul><li>%s</li></ul>"implode("</li><li>"$arrWarnings);
          }
          ?>
          In JavaScript saehe das ganze ziemlich aehnlich aus:
          Code:
          function Check(objForm) {
            var arrWarnings = new Array();
            var arrRequiredGroups = { hobbies : "Hobbies", favoriteMovies : "Lieblingsfilme" };
            var arrElements, intChecked;
            for (var strGroup in arrRequiredGroups) {
              arrElements = document.getElementsByName(strGroup + "[]");
              for (var i = 0, intChecked = 0; i < arrElements.length; i++) {
                intChecked += parseInt(arrElements[i].checked, 10);
              }
              if (intChecked > 0) {
                arrWarnings[] = arrRequiredGroups[strGroup];
              }
            }
            if (arrWarnings.length > 0) {
              alert("Please fillout:\n" + arrWarnings.join("\n"));
            }
            return arrWarnings.length == 0;
          }
          Code:
          <form action=".." onsubmit="return Check(this)"> .. </form>
          (ungetestet)

          Natuerlich kannst du mit PHP dann auch Teile deiner JavaScript-Ueberpruefung generieren (das "arrRequiredGroups" Objekt naemlich).
          "Mein Name ist Lohse, ich kaufe hier ein."

          Kommentar


          • #6
            Hallo!

            @nikosch77-new: Japp, hab einfach einen <input ...> tag kopiert und vergessen die Bezeichnung zu wechseln.

            @Chriz: Wow! Vielen dank für deine Tipps.

            Für die checkboxen habe ich bisher keine Arrays verwendet:
            PHP-Code:
            <input type="checkbox" name="checkbox1" value="Ja"
            <? if($_POST['checkbox1']=='Ja') echo 'checked="checked"'?>>Antwort A

            <input type="checkbox" name="checkbox2" value="Ja"
            <? if($_POST['checkbox2']=='Ja') echo 'checked="checked"'?>>Antwort B

            usw.
            Den Namen der checkboxen habe ich für das Mailformular bisher wie folgt verwendet:

            PHP-Code:
            //Den Nachrichtentext der E-Mail für eine HTML-Mail zusammenbauen

            $message.="\nFRAGE 2";
            $message.="\r\n";
            $message.="Hier die Ergebnisse: ";
            $message.=$checkbox1;
            $message.="\r\n";
            $message.=$checkbox2;
            ... 
            Mit Arrays ist das nicht möglich, da für alle checkboxen der name="..." der selbe ist.

            Meine Frage: Wie weise ich an, dass anstatt des name="..." das value="..." bei der Validierung des E-Mail Formulares genutzt wird?

            Danke im Voraus.

            Kommentar


            • #7
              Zitat von 0uhr15 Beitrag anzeigen
              Meine Frage: Wie weise ich an, dass anstatt des name="..." das value="..." bei der Validierung des E-Mail Formulares genutzt wird?
              Siehe hier: http://www.php.de/mysql/1576-erledig...html#post12378 #2 bis #4
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                @nikosch77-new: Sorry mit deinem Tipp kann ich überhaupt nix anfangen. Würdest du das bitte etwas genauer erklären? Danke!

                Kommentar


                • #9
                  Ungern. Lesen lernen und verstehen!

                  Code:
                  <input name="wechmit[]" value="Schlüsselangabe" type="checkbox" />
                  PHP-Code:
                  foreach ($_POST["wechmit"] as $id) {
                    
                  // delete $id
                    

                  Code:
                  <input name="wechmit[Schlüsselangabe]" value="1" type="checkbox" />
                  PHP-Code:
                  foreach ($_POST["wechmit"] as $id => $tmp) {
                    
                  // delete $id
                    

                  --

                  „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                  Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                  --

                  Kommentar


                  • #10
                    Erbitte kurze Hilfe:



                    PHP-Code:
                    <span class="spacer1">
                    <input type="checkbox" name="zielgruppe[]" value="Antwort_A" />Antwort A
                    </span><br />

                    <span class="spacer1">
                    <input type="checkbox" name="zielgruppe[]" value="Antwort_B" />Antwort B
                    </span><br />

                    <?PHP
                    foreach ($_POST["zielgruppe"] as $id) {
                    // delete $id
                    }  
                    ?>
                    Beim Senden des Formulares werden die Felder (wenn andere Pflichtfelder nicht "checked" oder "selected" sind und das Formular somit nicht versendet wird) einfach "unchecked und auch nicht überprüft, ob mindestens eine checkbox angeklickt wurde. Was mache ich falsch?

                    Würde mich wirklich über ein paar Tipps freuen!

                    Kommentar


                    • #11
                      Ich verstehe deinen Satz jetzt zwar nicht ganz genau, aber ich könnte mir vorstellen, dass du vergisst, dass nicht aktivierte Checkboxen gar nicht erst übertragen werden. Ob eine Checkbox angeklickt wurde, kannst du also mit isset() abfragen.
                      Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                      Kommentar


                      • #12
                        Zitat von 0uhr15 Beitrag anzeigen
                        Beim Senden des Formulares werden die Felder (wenn andere Pflichtfelder nicht "checked" oder "selected" sind und das Formular somit nicht versendet wird) einfach "unchecked und auch nicht überprüft, ob mindestens eine checkbox angeklickt wurde. Was mache ich falsch?

                        Würde mich wirklich über ein paar Tipps freuen!
                        Das habe ich schon zweimal gesagt:
                        Datenübetragung ohne Form ist nicht definiert und reines Gutdünken des Browsers (und damit Glückssache). Davon ist dringend abzuraten. Schon gar nicht, wirst Du hier auf einen POST Request prüfen können.
                        --

                        „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                        Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                        --

                        Kommentar


                        • #13
                          Welchen Sinn sollte das denn eigentlich haben, die Daten ohne Formular zu versenden?

                          [OT]
                          Dazu: ich kann mich noch an einen Typen aus einem anderen Forum erinnern, der eine furchtbare Orthographie hatte und meinte, alles zu können. Seine Fehler, bei denen er Hilfe brauchte waren dann aber alkles andere als Profi-Niveau.

                          Eines seiner Probleme: er hatte das <form>-Tag nicht geschlossen und wunderte sich, warum das Formular nicht gesendet wurde.
                          Dann hat er ewig dran herumprobiert und es schließlich geschlossen, aber so:
                          Code:
                          <from>
                          <!--- Weiteres -->
                          </from>
                          Warum hat das nur wieder nicht funktioniert?
                          Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                          Kommentar


                          • #14
                            Ich habe jetzt nicht den ganzen Thread gelesen, aber wenn ich dich recht verstehe, willst du eine Überprüfung mit JS. Schau dir das mal an:
                            PHP-Code:
                            <script type='text/javascript'>
                                function 
                            jstest(){
                                    var 
                            cnt 0;
                                    
                            field document.getElementsByName('zielgruppe[]');
                                    for(
                            0;field.length;++){
                                        if (
                            field[i].checked == true){
                                            
                            cnt ++;
                                        }
                                    }
                                    if (
                            cnt 0){
                                        
                            alert(cnt " Felder angeklickt");
                                    }
                                    else{
                                        
                            alert("Keine Felder angeklickt");
                                    }
                                }
                            </script> 
                            Und im Form-Tag (das selbstverständlich nötig ist, siehe vorherige Posts) rufst du das dann mit
                            PHP-Code:
                            <form action='irgendwas.php' method='post' onsubmit='jstest()'
                            auf. Das hat aber einerseits nichts mehr mit PHP zu tun, und entbindet dich andererseits nicht davon, die Werte im Zielscript nochmals zu überprüfen.
                            Gruss
                            L

                            Kommentar

                            Lädt...
                            X