Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Anzahl Felder berechnen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Anzahl Felder berechnen

    Morgen,

    ich moechte gerne die Anzahl der Textfelder berechnen, die in meinem Skript ausgefüllt wurden. Z.b. habe ich frei verfügbare Diagnosefelder & je nachdem wieiviel Felder mit Strings gefüllt wurden bekomme ich als Ergebniss in einem anderen Feld die Anzahl.

    Was einem spontan einfällt ist der Ansatz:
    PHP-Code:
    if ($_POST['Textfeld01'] != ''){ // $Zaehler um eins erhoehen} if ($_POST['Textfeld02'] 1=''){// $Zaehler um eins erhoehen} //etc 
    Das scheint mir aber viel zu umständlich zu sein...gibt es keinen besseren effektiveren Weg, um die bestimmten [Textfeld 01 bis 40] Textfelder nacheinander zu pruefen, ob Sie leer sind oder nicht? Gruß


  • #2
    Wenn sie alle nach dem Schema TextfeldXX aufgebaut sind kannst doch
    mit foreach() über $_POST laufen und bei jedem Key, der mit "Textfeld" beginnt einen Zähler erhöhen.

    Wäre jetzt spontan ne simple Lösung, gibt sicher elegantere...
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Ja....sind alle nach diesem Schema auch benannt (name=Textfeld01 bis Texfeld40)..hab ein wenig geschaut und traf auf das hier
      PHP-Code:
      foreach($_POST as $key => $value)
        { print(
      htmlspecialchars("Name: [$key] Wert: [$value]")."<br>"); } 
      das is das was du meinst glaub ich.....jetzt übertragen...hm...
      PHP-Code:

      $Anzahl 
      0;
      foreach(
      $_POST as $key => $value)
        { if ([
      $key] != ""){$Anzahl++;} } 
      Würde das so klappen?

      Edit: Moment.....dann macht er das ja für alle Felder.....wenn ich sagen wir 120 Felder hab und davon 40 mit dem Name Textfeld01 bis 40....wie greife ich mit der foreach-schleife auf genau nur diese felder mit diesen name (Textfeld01)(Textfeld02) etc etc..

      Kommentar


      • #4
        wie greife ich mit der foreach-schleife auf genau nur diese felder mit diesen name (Textfeld01)(Textfeld02)
        Indem Du sie eben nicht mit Name01 etc. bezeichnest, sondern als Array, Name[1] ...
        --

        „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
          In $key hast Du den Array-Schlüssel, also bspw. "Textfeld01".
          Nun mußt Du prüfen, ob es auch an dem ist.

          PHP-Code:
          $count 0;
          foreach(
          $_POST as $key=>$val)
            if(
          strpos('Textfeld',$key) === && trim($val) != ''$count++; 
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #6
            Bezieht sich dein Code auf die HTML Bezeichnung ohne "Array"? Habs ausprobiert...kommt zwar keine Fehlermeldung aber der counter ist immer auf 0. Hier mal mein PHP Code:
            PHP-Code:
             foreach($_POST as $key=>$val) {
                          
            $count 0;
                            if(
            strpos('Diagnose',$key) === && trim($val) != '') {$count++;}}
                            
                            echo 
            'Der Zaehler ist ' $count 
            Hab den Counter mal reingezogen...macht hoffentlich kein Unterschied. Die Ausgabe:
            PHP-Code:
            Der Zaehler ist 0 
            Damit auch die anderen verstehen wie ich das HTML Formular bezeichnet ist. Ein Auszug:
            PHP-Code:
            <!-- *****  02. Erfassung der Diagnosen ****************************************************************************************  -->
              <div id="DivErfassungDiagnosen">
                <fieldset>
                <legend>Erfassung der Diagnosen</legend>
                <table width="100%" border="0">
                  <tr>
                    <td>&nbsp;</td>
                    <td height="30" class="Bezeichnung"><div align="center">Diagnose</div></td>
                    <td class="Bezeichnung">&nbsp;</td>
                    <td class="Bezeichnung"><div align="center">ICD-10</div></td>
                    <td class="Bezeichnung">&nbsp;</td>
                    <td class="Bezeichnung"><div align="center">*Quelle</div></td>
                    <td class="Bezeichnung">&nbsp;</td>
                    <td class="Bezeichnung"><div align="center">Sicherheit</div></td>
                    <td colspan="3" class="Bezeichnung"><div align="center" class="Bezeichnung">Zeitpunkt der Erstdiagnose</div></td>
                    <td colspan="3"><div align="center" class="Bezeichnung"> Diagnose aktuell?</div></td>
                    <td colspan="2"><div align="center" class="Bezeichnung">Subjektiver Beschwerdegrad</div></td>
                  </tr>
                  <tr>
                    <td width="10" class="Bezeichnung">01</td>
                    <td width="141" height="40"><span class="Spalte">
                      <label for="Diagnose01"></label>
                      <textarea name="Diagnose01" cols="20" rows="1" id="Diagnose01"></textarea>
                      </span></td>
                    <td width="20">&nbsp;</td>
                    <td width="141"><span class="Spalte">
                      <label for="ICD01"></label>
                      <textarea name="ICD01" cols="20" rows="1" id="ICD01"></textarea>
                      </span></td>
                    <td width="22">&nbsp;</td>
                    <td width="105"><label for="Quelle01"></label>
                      <select name="Quelle01" size="1" id="Quelle01">
                        <option value="" selected="selected">0-Nichts</option>
                        <option value="ST,HA,PA">1-ST,HA,PA</option>
                        <option value="HA,PA">2-HA,PA</option>
                        <option value="ST,PA">3-ST,PA</option>
                        <option value="ST,HA">4-ST,HA</option>
                        <option value="ST">5-nurST</option>
                        <option value="HA">6-nurHA</option>
                        <option value="PA">7-nurPA</option>
                      </select></td>
                    <td width="5">&nbsp;</td>
                    <td width="166"><label for="Sicherheit01"></label>
                      <select name="Sicherheit01" size="1" id="Sicherheit01">
                        <option value="" selected="selected">0-Nichts</option>
                        <option value="sicher">1-sicher</option>
                        <option value="sehrwahrscheinlich">2-sehr wahrscheinlich</option>
                        <option value="wahrscheinlich">3-wahrscheinlich</option>
                        <option value="fraglich">4-fraglich</option>
                        <option value="sehrunsicher">5-sehr unsicher</option>
                      </select></td>
                    <td width="16">&nbsp;</td>
                    <td width="57"><label for="Monat02"></label>
                      <select  type="text" name="Monat01" id="Monat01" value="">
                        
                        
                        ';
                       
                        
                        
                        <?php 
                         
            for($i 1$i <= 12$i++ )
                       {
                            print 
            '<option>'.$i.'</option> ';
                       }
                       
            ?>
                      </select>
                    </td>
                    <td width="97"><label for="Jahr01"><span class="Spalte">
                      <select  type="text" name="Jahr01" id="Jahr01" value="">
                        <?php 
                         $thisYear 
            date("o");
                       for(
            $i $thisYear$i >= 1900$i-- )
                       {
                            print 
            '<option>'.$i.'</option> ';
                       }
                       
            ?>
                      </select>
                      </span></label></td>
                    <td width="11">&nbsp;</td>
                    <td width="53" class="Informationen"><label for="DiagnoseAkt01"></label>
                      <input type="radio" name="DiagnoseAkt01" id="DiagnoseAkt01" value="AktuellJa" />
                      Ja</td>
                    <td width="72" class="Informationen"><input type="radio" name="DiagnoseAkt01" id="AktuellNein" value="AktuellNein" />
                      Nein</td>
                    <td width="24">&nbsp;</td>
                    <td width="192"><label for="SubjektiverBeschwerdegrad01"></label>
                      <select name="SubjektiverBeschwerdegrad01" size="1" id="SubjektiverBeschwerdegrad01">
                        <option value="">0-nichts</option>
                        <option value="keiner">1-keiner</option>
                        <option value="gering">2-gering</option>
                        <option value="deutlich">3-deutlich</option>
                        <option value="schwer">4-schwer</option>
                        <option value="nichtbeurteilbar">5-nicht beurteilbar</option>
                      </select></td>
                  </tr>
                  <tr>
                    <td width="10" class="Bezeichnung">02</td>
                    <td height="40"><span class="Spalte">
                      <label for="Diagnose02"></label>
                      <textarea name="Diagnose02" cols="20" rows="1" id="Diagnose02"></textarea>
                      </span></td>
                    <td>&nbsp;</td>
                    <td><span class="Spalte">
                      <label for="ICD02"></label>
                      <textarea name="ICD02" cols="20" rows="1" id="ICD02"></textarea>
                      </span></td>
                    <td>&nbsp;</td>
                    <td><label for="Quelle02"></label>
                      <select name="Quelle02" size="1" id="Quelle02">
                        <option value="" selected="selected">0-Nichts</option>
                        <option value="ST,HA,PA">1-ST,HA,PA</option>
                        <option value="HA,PA">2-HA,PA</option>
                        <option value="ST,PA">3-ST,PA</option>
                        <option value="ST,HA">4-ST,HA</option>
                        <option value="ST">5-nurST</option>
                        <option value="HA">6-nurHA</option>
                        <option value="PA">7-nurPA</option>
                      </select></td>
                    <td>&nbsp;</td>
                    <td><label for="Sicherheit02"></label>
                      <select name="Sicherheit02" size="1" id="Sicherheit02">
                        <option value=""selected="selected">0-Nichts</option>
                        <option value="sicher">1-sicher</option>
                        <option value="sehrwahrscheinlich">2-sehr wahrscheinlich</option>
                        <option value="wahrscheinlich">3-wahrscheinlich</option>
                        <option value="fraglich">4-fraglich</option>
                        <option value="sehrunsicher">5-sehr unsicher</option>
                      </select></td>
                    <td>&nbsp;</td>
                    <label for="Monat02"></label>
                    <td><select  type="text" name="Monat02" id="Monat02" value="">
                        
                        ';
                       
                        
                        <?php 
                         
            for($i 1$i <= 12$i++ )
                       {
                            print 
            '<option>'.$i.'</option> ';
                       }
                       
            ?>
                      </select></td>
                    <td><span class="Spalte">
                      <select  type="text" name="Jahr02" id="Jahr02" value="">
                        <?php 
                         $thisYear 
            date("o");
                       for(
            $i $thisYear$i >= 1900$i-- )
                       {
                            print 
            '<option>'.$i.'</option> ';
                       }
                       
            ?>
                      </select>
                      </span></td>
                    <td>&nbsp;</td>
                    <td width="53" class="Informationen"><label for="DiagnoseAkt02"></label>
                      <input type="radio" name="DiagnoseAkt02" id="DiagnoseAkt02" value="AktuellJa" />
                      Ja</td>
                    <td width="72" class="Informationen"><input type="radio" name="DiagnoseAkt02" id="AktuellNein" value="AktuellNein" />
                      Nein</td>
                    <td>&nbsp;</td>
                    <td width="192"><label for="SubjektiverBeschwerdegrad02"></label>
                      <select name="SubjektiverBeschwerdegrad02" size="1" id="SubjektiverBeschwerdegrad02">
                        <option value="">0-nichts</option>
                        <option value="keiner">1-keiner</option>
                        <option value="gering">2-gering</option>
                        <option value="deutlich">3-deutlich</option>
                        <option value="schwer">4-schwer</option>
                        <option value="nichtbeurteilbar">5-nicht beurteilbar</option>
                      </select></td>
                  </tr>
                  <tr>
                    <td width="10" class="Bezeichnung">03</td>
                    <td height="40"><span class="Spalte">
                      <label for="Diagnose03"></label>
                      <textarea name="Diagnose03" cols="20" rows="1" id="Diagnose03"></textarea>
                      </span></td>
                    <td>&nbsp;</td>
                    <td><span class="Spalte">
                      <label for="ICD03"></label>
                      <textarea name="ICD03" cols="20" rows="1" id="ICD03"></textarea>
                      </span></td>
                    <td>&nbsp;</td>
                    <td><label for="Quelle03"></label>
                      <select name="Quelle03" size="1" id="Quelle03">
                        <option value="" selected="selected">0-Nichts</option>
                        <option value="ST,HA,PA">1-ST,HA,PA</option>
                        <option value="HA,PA">2-HA,PA</option>
                        <option value="ST,PA">3-ST,PA</option>
                        <option value="ST,HA">4-ST,HA</option>
                        <option value="ST">5-nurST</option>
                        <option value="HA">6-nurHA</option>
                        <option value="PA">7-nurPA</option>
                      </select></td>
                    <td>&nbsp;</td>
                    <td><label for="Sicherheit03"></label>
                      <select name="Sicherheit03" size="1" id="Sicherheit03">
                        <option value="" selected="selected">0-Nichts</option>
                        <option value="sicher">1-sicher</option>
                        <option value="sehrwahrscheinlich">2-sehr wahrscheinlich</option>
                        <option value="wahrscheinlich">3-wahrscheinlich</option>
                        <option value="fraglich">4-fraglich</option>
                        <option value="sehrunsicher">5-sehr unsicher</option>
                      </select></td>
                    <td>&nbsp;</td>
                    <td><select  type="text" name="Monat03" id="Monat03" value="">
                        
                        ';
                       
                        
                        <?php 
                         
            for($i 1$i <= 12$i++ )
                       {
                            print 
            '<option>'.$i.'</option> ';
                       }
                       
            ?>
                      </select></td>
                    <td><span class="Spalte">
                      <select  type="text" name="Jahr03" id="Jahr03" value="">
                        <?php 
                         $thisYear 
            date("o");
                       for(
            $i $thisYear$i >= 1900$i-- )
                       {
                            print 
            '<option>'.$i.'</option> ';
                       }
                       
            ?>
                      </select>
                      </span></td>
                    <td>&nbsp;</td>
                    <td width="53" class="Informationen"><label for="DiagnoseAkt03"></label>
                      <input type="radio" name="DiagnoseAkt03" id="DiagnoseAkt03" value="AktuellJa" />
                      Ja</td>
                    <td width="72" class="Informationen"><input type="radio" name="DiagnoseAkt03" id="AktuellNein" value="AktuellNein" />
                      Nein</td>
                    <td>&nbsp;</td>
                    <td width="192"><label for="SubjektiverBeschwerdegrad03"></label>
                      <select name="SubjektiverBeschwerdegrad03" size="1" id="SubjektiverBeschwerdegrad03">
                        <option value="">0-nichts</option>
                        <option value="keiner">1-keiner</option>
                        <option value="gering">2-gering</option>
                        <option value="deutlich">3-deutlich</option>
                        <option value="schwer">4-schwer</option>
                        <option value="nichtbeurteilbar">5-nicht beurteilbar</option>
                      </select></td>
                  </tr>
                  <tr>
            Die Bezeichnung für die "gesuchten/gezaehlten" Felder ist also
            PHP-Code:
             <textarea name="Diagnose01" cols="20" rows="1" id="Diagnose01"></textarea>.....
             <
            textarea name="Diagnose02" cols="20" rows="1" id="Diagnose02"></textarea
            etc...soll ich das jetz umändern statt Diagnose01 zu Diagnose[1]..? Zumindest so verstanden aber ob der Code dann funktioniert

            EDIT: Habs mal umgeändert....den Namen auf Diagnose[1] aber dann funktiert der Code nicht mehr.....weil trim() kein Array erwartet, sondern einen String.

            Kommentar


            • #7
              Steht denn was drin in den Textareas? Wenn nicht, wird das Statement ebenfalls false und der Counter nicht gezählt!

              Alternativ kannst Du auch mal probieren gegen false zu prüfen.
              PHP-Code:
              if(strpos('Diagnose',$key) !== false && ... 
              Ansonsten probier es doch eifach mal mit Arrays als name=-Bezeichner:
              Code:
              <textarea name="Diagnose[]" ...
              <textarea name="Diagnose[]" ...
              Dann kannst per PHP folgendes machen:
              PHP-Code:
              $count 0;
              foreach(
              $_POST['Diagnose'] as $diagnose)
                if(
              trim($diagnose) != ''$count++; 
              Competence-Center -> Enjoy the Informatrix
              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

              Kommentar


              • #8
                wenn du deine Felder Diagnose[1], Diagnose[2] etc nennst, kannst du auf alle Felder via
                PHP-Code:
                $_POST["Diagnose"
                zugreifen. Um also die ausgefüllten Felder zu Zählen brauchst du einfach nur
                PHP-Code:
                $i=0;
                foreach(
                $_POST["Diagnose"] as $value)
                   if(
                trim($value != "")) $i++; 
                zu schreiben.

                [EDIT]
                zu langsam ...

                Kommentar


                • #9
                  Zitat von Buhmann Beitrag anzeigen
                  wenn du deine Felder Diagnose[1], Diagnose[2] etc nennst, kannst du auf alle Felder via
                  PHP-Code:
                  $_POST["Diagnose"
                  zugreifen. Um also die ausgefüllten Felder zu Zählen brauchst du einfach nur
                  PHP-Code:
                  $i=0;
                  foreach(
                  $_POST["Diagnose"] as $value)
                     if(
                  trim($value != "")) $i++; 
                  zu schreiben.

                  [EDIT]
                  zu langsam ...
                  Arrays sind der richtige Ansatz...
                  PHP-Code:
                  echo count($_POST['Diagnose']); 
                  einfacher gehts nicht oder ??

                  Kommentar


                  • #10
                    mom....war zu langsam..erstmal eure vorschläge ausprobieren

                    Kommentar


                    • #11
                      Also das ist === korrekt und SOLLTE bei strpos() verwendet werden!
                      Steht in der Doku zum Nachlesen, falls Du Zeit hast...

                      @Papst:
                      Er will ja nur die gefüllten Felder zählen, nicht alle!
                      Competence-Center -> Enjoy the Informatrix
                      PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                      Kommentar


                      • #12
                        Juhuuuuuuuu :P

                        es klappt. Arrays to make a better world.....:P

                        vielen Dank!

                        Kommentar


                        • #13
                          upss.duplikate wollte ich nicht..schönen tag noch :P

                          ps: === werd ich mir anschauen..dir auch besten dank für deine mühe

                          Kommentar


                          • #14
                            Zitat von Arne Drews Beitrag anzeigen
                            @Papst:
                            Er will ja nur die gefüllten Felder zählen, nicht alle!
                            Uuups.. mein Fehler..
                            dann würde ich etwas in der Richtung probieren:

                            PHP-Code:
                            function arrayRemoveEmptyValues($value)
                            {
                                return !empty(
                            $value);
                            }

                            $test = array('hallo' => '''name' => 'test''foo' => 'bar''bar' => '');
                            $test array_filter($test'arrayRemoveEmtpyValues');

                            echo 
                            count($test); 

                            Kommentar


                            • #15
                              @Papst:
                              Bis auf den Rechtschreibfehler ist das natürlich die elegantere Variante...
                              Competence-Center -> Enjoy the Informatrix
                              PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                              Kommentar

                              Lädt...
                              X