Peter: Dropdown mit Uhrzeiten

0 75

Dropdown mit Uhrzeiten

Peter
  • programmiertechnik
  1. 0
    Der Martin
    1. 0
      Peter
      1. 0
        M.
      2. 0
        Auge
        1. 0
          Peter
          1. 0
            M.
            1. 0
              Peter
              1. 0
                M.
          2. 0
            Auge
            1. 0
              Peter
              1. 0
                M.
                1. 0
                  Peter
                  1. 0
                    M.
                    1. 0
                      Peter
                      1. 0
                        M.
                        1. 0
                          Peter
                          1. 0
                            M.
                            1. 0
                              Peter
                              1. 0
                                M.
                                1. 0
                                  Peter
                                  1. 0
                                    M.
                                    1. 0
                                      Peter
                                      1. 0
                                        M.
                                        1. 0
                                          Peter
                                          1. 0
                                            M.
                          2. 0
                            Auge
                            1. 0
                              Peter
                              1. 0
                                Auge
                                1. 0
                                  Peter
                                  1. 0
                                    Peter
                                    1. 0
                                      M.
                                      1. 0
                                        Peter
                                2. 0

                                  Funktioniert ABER

                                  Peter
                                  1. 0
                                    Peter
                                3. 0

                                  Ich hab noch eine Frage zu deiner Funktion - Bitte um Hilfe!

                                  Peter
                                  1. 0

                                    OK, es funktioniert!

                                    Peter
                                  2. 0

                                    Etwas kürzer schreiben?

                                    Peter
                                    1. 0
                                      M.
                                      1. 0
                                        Peter
                                        1. 0
                                          M.
                                          1. 0
                                            Peter
                        2. 0
                          Tabellenkalk
                          1. 0
                            M.
                        3. 0

                          Hab ich dich so richtig verstanden?

                          Peter
                          1. 0
                            Peter
                      2. 0
                        Quincunx
        2. 0
          Quincunx
          1. 0
            Peter
            1. 1
              Jörg Reinholz
              1. 0
                Peter
                1. 0
                  Jörg Reinholz
              2. 1

                Nachtrag

                Peter
                1. 1
                  misterunknown
          2. 0

            Firefox HTML type="time"

            Peter
            1. 0
              Quincunx
              1. 0
                Peter
    2. 0
      Jan
  2. 0
    Tom
  3. 0

    Bitte nicht zwischendurch den Namen ändern (?)

    Matthias Apsel
    • zu diesem forum
  4. 0

    Eine Lösung mit einem kleinen Problem

    Peter
    1. 0

      Eine Lösung mit einem kleinen Problem - Verbesserte Version

      Peter
      1. 0

        Eine Lösung mit einem kleinen Problem - Fast geschafft

        Peter
        1. 0

          Schade

          Peter
          1. 0
            Jörg Reinholz
            • zur info
            1. 2
              Tom
              • menschelei
              1. 0
                Peter
                1. 2

                  Schade - nö ...

                  tami
                  • zu diesem forum
            2. 0
              Peter
              1. 0
                M.
              2. 0
                Jörg Reinholz
                1. 0
                  tami
            3. 0

              Kirschen

              JürgenB
              1. 0
                Jörg Reinholz
                1. 0
                  Der Martin

Ist es möglich mit PHP ein Dropdown zu erzeugen ohne jedes Feld anlegen zu müssen? Damit meine ich dieses:

  
  <select name="uhrzeit" id="uhrzeit">  
    <option value="00:00">00:00</option>  
    <option value="00:15">00:15</option>  
    <option value="00:30">00:30</option>  
    <option value="00:45">00:45</option>  
    <option value="01:00">01:00</option>  
    .....  
    <option value="12:45">12:45</option>  
    <option value="13:00">13:00</option>  
  </select>  

usw... Wäre klasse wenn ich dieses nicht alles von Hand schreiben müsste oder sollte ich diese Daten  doch lieber in eine Datenbank legen und mit einem Array dann füllen?

  1. Hi,

    Ist es möglich mit PHP ein Dropdown zu erzeugen ohne jedes Feld anlegen zu müssen?

    wenn die Einträge eine gewisse Regelmäßigkeit aufweisen, klar.

    <select name="uhrzeit" id="uhrzeit">

    <option value="00:00">00:00</option>
        <option value="00:15">00:15</option>
        <option value="00:30">00:30</option>
        <option value="00:45">00:45</option>
        <option value="01:00">01:00</option>
        .....
        <option value="12:45">12:45</option>
        <option value="13:00">13:00</option>
      </select>

    
    >   
    > usw... Wäre klasse wenn ich dieses nicht alles von Hand schreiben müsste  
      
    Eine einfache for-Schleife würde genügen. Aber denk bitte auch an diejenigen, die das später nutzen sollen: Findest du es komfortabel, aus einer Liste mit 96 Einträgen den passenden rauszupicken? Ich nicht. Als Nutzer hätte ich hier lieber ein Textfeld, in das ich die Uhrzeit direkt eingebe. Wenn es für die weitere Verarbeitung erforderlich ist, kannst du den eingegebenen Wert immer noch auf Viertelstunden runden.  
      
    Ciao,  
     Martin  
    
    -- 
    Bis du einen Prinzen findest, musst du viele Frösche küssen.  
    Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(
    
    1. Hallo Martin,

      Eine einfache for-Schleife würde genügen. Aber denk bitte auch an diejenigen, die das später nutzen sollen: Findest du es komfortabel, aus einer Liste mit 96 Einträgen den passenden rauszupicken? Ich nicht. Als Nutzer hätte ich hier lieber ein Textfeld, in das ich die Uhrzeit direkt eingebe. Wenn es für die weitere Verarbeitung erforderlich ist, kannst du den eingegebenen Wert immer noch auf Viertelstunden runden.

      Ein Eingabefeld wäre mir natürlich auch am liebsten, kaum Arbeit :) Jetzt kommt aber das ABER ich hab ein so ein paar Idioten die Tagen dann folgende Werte ein:

      1:00
      01:5
      01:70 (geht überhaupt nicht)
      usw..

      Ist in meinen Augen nicht schön wenn auch jeder User eigentlich selber verantwortlich ist was auf seiner Seite zu sehen ist. Um es schön aussehen zu lassen sollten die Daten so vorliegen:

      10:00
      12:00
      05:00
      04:30
      04:35
      usw...

      verstehst du was ich meine?

      1. Mahlzeit,

        Ist in meinen Augen nicht schön wenn auch jeder User eigentlich selber verantwortlich ist was auf seiner Seite zu sehen ist. Um es schön aussehen zu lassen sollten die Daten so vorliegen:

        DU prüfst die Eingabe doch sowieso. (Wenn du es nicht tust, fühl dich geohrfeigt) Wo ist dann das Problem bei einer falschen Eingabe eine Fehlermeldung auszugeben und bei einer richtigen Eingabe die Uhrzeit in das Format zu bringen, das dir gefällt?

        --
        42
      2. Hallo

        Ein Eingabefeld wäre mir natürlich auch am liebsten, kaum Arbeit :) Jetzt kommt aber das ABER ich hab ein so ein paar Idioten die Tagen dann folgende Werte ein:

        1:00
        01:5
        01:70 (geht überhaupt nicht)
        usw..

        Ist in meinen Augen nicht schön wenn auch jeder User eigentlich selber verantwortlich ist was auf seiner Seite zu sehen ist.

        <wink class="zahnpfaul">Eine Prüfung der Eingaben wirst du doch wohl vorgesehen haben?</wink>

        Um es schön aussehen zu lassen sollten die Daten so vorliegen:

        10:00
        12:00
        05:00
        04:30
        04:35
        usw...

        verstehst du was ich meine?

        Da käme die von Martin angesprochene Rundung der Werte zu Zuge. Zudem müsste ja auch der Trenner („:“) und die Plausibilität der Eingabe geprüft werden (siehe Zaunpfahl). Machbar ist das und es erleichtert die Eingabe ungemein, nicht durch eine ellenlange Liste scrollen zu müssen, wenn man 21:45 auswählen möchte.

        Mit JS kannst du eine Vorprüfung machen, die eine Fehleingabe (Plausibilität und Format) moniert. Vor dem speichern auf dem Server wird bei der Verarbeitung eine Prüfung mit PHP durchgeführt.

        Tschö, Auge

        --
        Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
        Terry Pratchett, "Wachen! Wachen!"
        ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
        Veranstaltungsdatenbank Vdb 0.3
        1. Hallo,

          Da käme die von Martin angesprochene Rundung der Werte zu Zuge. Zudem müsste ja auch der Trenner („:“) und die Plausibilität der Eingabe geprüft werden (siehe Zaunpfahl). Machbar ist das und es erleichtert die Eingabe ungemein, nicht durch eine ellenlange Liste scrollen zu müssen, wenn man 21:45 auswählen möchte.

          Ich hatte vor einiger Zeit mal ein JavaScript bzw. eines von jQuery wo genau das geprüft hat. Finde ich leider nicht mehr.

          Mit JS kannst du eine Vorprüfung machen, die eine Fehleingabe (Plausibilität und Format) moniert. Vor dem speichern auf dem Server wird bei der Verarbeitung eine Prüfung mit PHP durchgeführt.

          Ich hab eine kleine Funktion im Internet gefunden

            
          function check_time($time)  
          {  
            $parts = explode(':',$time);  
            if (  
                  count($parts) !== 2 ||  
                  !is_numeric($parts[0])||  
                  !is_numeric($parts[1])||  
                  $parts[0]    <  0 ||  
                  $parts[0]    > 24 ||  
                  $parts[1]    <  0 ||  
                  $parts[1]    > 60  
               )return FALSE;  
            return TRUE;  
          }  
            
          // testcode  
          $zeiten   = array();  
          $zeiten[] = '1:44';  
            
            
          foreach($zeiten as $zeit)  
          {  
              echo $zeit.' ist ';  
              if(check_time($zeit))  
              {  
                echo 'gueltig';  
              }else  
              {  
                echo 'falsch';  
              }  
              echo '  
          ';  
          }  
          
          

          Diese scheint recht gut zu funktionieren ABER wenn ich 1:44 eingebe sagt die Ausgabe gültig! OK, diese Uhrzeit gibt es auch ABER ich brauch eine 0 davor.

          Dann hätte ich noch eine zweite Frage. Die Eingabe sieht bei mir so aus

            
          <form name="form1" method="post" action="">  
            <label for="montagvon"></label>  
            <input type="text" name="montagvon" id="montagvon"> - <input type="text" name="montagbis" id="montagbis"> und von  
            <input type="text" name="montagvon_nachmittag" id="montagvon_nachmittag"> - <input type="text" name="montagbis_nachmittag" id="montagbis_nachmittag"> und von  
            <label for="dienstaggvon"></label>  
            <input type="text" name="dienstagvon" id="dienstagvon"> - <input type="text" name="dienstagbis" id="dienstagbis"> und von  
            <input type="text" name="dienstagvon_nachmittag" id="dienstagvon_nachmittag"> - <input type="text" name="dienstagbis_nachmittag" id="dienstagbis_nachmittag"> und von  
          </form>  
          
          

          Mit PHP Prüfe ich meine Eingaben so

            
          	 	if(empty($_POST['montagvon'])) {  
                      $errors[] = "WAS MUSS HIER REIN";  
                  }  
          
          

          aber wie muss ich nun die oben genannten Funktion anwenden?

          1. Mahlzeit,

            Diese scheint recht gut zu funktionieren ABER wenn ich 1:44 eingebe sagt die Ausgabe gültig! OK, diese Uhrzeit gibt es auch ABER ich brauch eine 0 davor.

            Und wo ist dein Problem, eine 0 davor zu schreiben?

            --
            42
            1. Hallo,

              Und wo ist dein Problem, eine 0 davor zu schreiben?

              ich hab es so zusammen gebaut

                
              function check_time($time)  
              {  
                $parts = explode(':',$time);  
                if (  
                      count($parts) !== 2 ||  
                      !is_numeric($parts[0])||  
                      !is_numeric($parts[1])||  
                      $parts[0]    <  0 ||  
                      $parts[0]    > 24 ||  
                      $parts[1]    <  0 ||  
                      $parts[1]    > 60  
                   )return FALSE;  
                return TRUE;  
              }  
                
              $zeit = $_POST['montagvon'];  
                
                  if(check_time($zeit)):  
                    $errors = "Uhrzeit stimmt nicht";  
              	endif;  
                
              
              
                
              <form name="form1" method="post" action="">  
                        <?php echo $error; ?>  
                <p>  
                  <label for="montagvon"></label>  
                  <input type="text" name="montagvon" id="montagvon">  
                </p>  
                <p>  
                  <input type="submit" name="abschicken" id="abschicken" value="Senden">  
                </p>  
              </form>  
              
              

              leider lässt er alles durch. Irgendwie zieht die Funktion nicht.

              1. Mahlzeit,

                if(check_time($zeit)):
                      $errors = "Uhrzeit stimmt nicht";
                endif;

                  
                
                > leider lässt er alles durch. Irgendwie zieht die Funktion nicht.  
                  
                Was erwartest du denn? Du weisst im Fehlerfall $error einen Wert zu, machst dann aber nichts damit.  
                Der Code macht also exakt das, was du ihm sagst.  
                  
                Grundsätzlich macht ein Script nicht das, was es soll sondern das, was man ihm sagt.  
                  
                Du musst $error prüfen und ggf. reagieren mit Ausgabe der Fehlermeldung, Neuladen des Formulars usw.  
                
                -- 
                42
                
          2. Hallo

            Mit JS kannst du eine Vorprüfung machen, die eine Fehleingabe (Plausibilität und Format) moniert. Vor dem speichern auf dem Server wird bei der Verarbeitung eine Prüfung mit PHP durchgeführt.

            Ich hab eine kleine Funktion im Internet gefunden

            function check_time($time)
            {
              $parts = explode(':',$time);
              if (
                    count($parts) !== 2 ||
                    !is_numeric($parts[0])||
                    !is_numeric($parts[1])||
                    $parts[0]    <  0 ||
                    $parts[0]    > 24 ||
                    $parts[1]    <  0 ||
                    $parts[1]    > 60
                 )return FALSE;
              return TRUE;
            }

              
            Laut der Funktion ist auch 24:12 oder gar 24:60 ein gültiger Wert. Begrenze den Bereich auf 0-23 bzw. 0-59.  
              
            
            > Diese scheint recht gut zu funktionieren ABER wenn ich 1:44 eingebe sagt die Ausgabe gültig! OK, diese Uhrzeit gibt es auch …  
              
            Gültig ist sie in der Realität und laut der Prüfroutine.  
              
            
            > … ABER ich brauch eine 0 davor.  
              
            Führende Nullen kannst du $parts[0] mit [str_pad](http://www.php.net/str-pad) voranstellen.  
              
            Allerdings ist die Prüfung an dieser Stelle ungünstig aufgebaut. Die Uhrzeit wird in der Funktion auseinander genommen, das Setzen der führenden 0 gehört aber nicht in die Funktion.  
              
            ~~~php
            function check_time($hour, $minute)  
            {  
              if ([link:http://www.php.net/in_array@title=in_array]($hour, [link:http://www.php.net/range@title=range](0, 23))  
                 and in_array($minute, range(0, 59))) return TRUE; // Eingabe im gültigen Bereich  
              return FALSE; // Eingabe nicht im gültigen Bereich  
            }  
              
            $parts = explode(':',$_POST['montagvon']);  
            $gueltig = check_time($parts[0], $parts[1]);  
            if ($gueltig === FALSE)  
            {  
              $errors[] = "Benutzer wegen falscher Eingabe beschimpfen!";  
            } else {  
            $parts[0] = [link:http://www.php.net/str-pad@title=str_pad]($parts[0], 2, "0", STR_PAD_LEFT); // Stunden links mit 0 auffüllen  
            $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT); // evtl. Minuten links mit 0 auffüllen  
            $_POST['montagvon'] = $parts[0] .":". $parts[1];  
            }
            

            Nicht die eleganteste Methode, aber es funktioniert.

            Tschö, Auge

            --
            Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
            Terry Pratchett, "Wachen! Wachen!"
            ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
            Veranstaltungsdatenbank Vdb 0.3
            1. Hallo,

              Nicht die eleganteste Methode, aber es funktioniert.

              Vielen Dank hab es getestet und es funktioniert. Allerdings habe ich SEHR viele Eingabefelder pro Tag sind es 8! Stück und dieses auf zwei Wochen hochgerechnet sind es 112 Felder. Muss ich jetzt 112 mal dieses aufrufen:

                
              $parts = explode(':',$_POST['montagvon']);  
              $gueltig = check_time($parts[0], $parts[1]);  
              if ($gueltig === FALSE)  
              {  
                $errors[] = "Benutzer wegen falscher Eingabe beschimpfen!";  
              } else {  
              $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT); // Stunden links mit 0 auffüllen  
              $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT); // evtl. Minuten links mit 0 auffüllen  
              $_POST['montagvon'] = $parts[0] .":". $parts[1];  
              }  
              
              

              Wenn ja kann ich dieses vergessen, wird viel zu unübersichtlich, dann schreibe ich meine Dropdown Felder doch lieber mit der Hand.

              1. Mahlzeit,

                Vielen Dank hab es getestet und es funktioniert. Allerdings habe ich SEHR viele Eingabefelder pro Tag sind es 8! Stück und dieses auf zwei Wochen hochgerechnet sind es 112 Felder. Muss ich jetzt 112 mal dieses aufrufen:

                ...

                Wenn ja kann ich dieses vergessen, wird viel zu unübersichtlich, dann schreibe ich meine Dropdown Felder doch lieber mit der Hand.

                Und wieso klemmst du den Code nicht in eine Funktion und rufst die Funktion 112 mal auf?
                Das sind Grundlagen in PHP. Damit hast du dich doch sicher schon befasst, oder?

                --
                42
                1. Hallo,

                  Und wieso klemmst du den Code nicht in eine Funktion und rufst die Funktion 112 mal auf?
                  Das sind Grundlagen in PHP. Damit hast du dich doch sicher schon befasst, oder?

                  in $errors[] = "Benutzer wegen falscher Eingabe beschimpfen!"; muss ja jedesmal etwas anderes stehen wie z.B.

                  $errors[] = "Im Feld Montag hast du ein falsches Format";
                  $errors[] = "Im Feld Mittwoch hast du ein falsches Format";
                  $errors[] = "Im Feld Mittwoch bis hast du ein falsches Format";

                  usw...

                  1. Mahlzeit,

                    in $errors[] = "Benutzer wegen falscher Eingabe beschimpfen!"; muss ja jedesmal etwas anderes stehen wie z.B.

                    Und wo ist das Problem?
                    Nur zur Info, es macht keinen Spass, dir alles aus der Nase zu ziehen. Wenn du Hilfe willst, sag _konkret_ was du für ein Problem hast. Sonst bin ich ganz schnell raus.

                    --
                    42
                    1. Hallo,

                      Nur zur Info, es macht keinen Spass, dir alles aus der Nase zu ziehen. Wenn du Hilfe willst, sag _konkret_ was du für ein Problem hast. Sonst bin ich ganz schnell raus.

                      Ich hab doch vorhin geschrieben dass ich NICHT weiß wie ich das in eine Funktion packen soll, so dass ich jeweils die RICHTIGE Meldung angezeigt bekomme. Derzeit bin ich soweit.

                        
                        <label for="montagvon"></label>  
                        <input type="text" name="montagvon" id="montagvon" pattern="(0[0-9]|1[0-9])(:[0-5][0-9])"> -  
                        <input type="text" name="montagbis" id="montagbis" pattern="(0[0-9]|1[0-9])(:[0-5][0-9])"> und von<br>  
                        <input type="text" name="montagvon_nachmittag" id="montagvon_nachmittag" pattern="(0[0-9]|1[0-9])(:[0-5][0-9])"> -  
                        <input type="text" name="montagbis_nachmittag" id="montagbis_nachmittag" pattern="(0[0-9]|1[0-9])(:[0-5][0-9])">  
                        <br><br>  
                        <label for="dienstaggvon"></label>  
                        <input type="text" name="dienstagvon" id="dienstagvon" pattern="(0[0-9]|1[0-9])(:[0-5][0-9])"> -  
                        <input type="text" name="dienstagbis" id="dienstagbis" pattern="(0[0-9]|1[0-9])(:[0-5][0-9])"> und von<br>  
                        <input type="text" name="dienstagvon_nachmittag" id="dienstagvon_nachmittag" pattern="(0[0-9]|1[0-9])(:[0-5][0-9])"> -  
                        <input type="text" name="dienstagbis_nachmittag" id="dienstagbis_nachmittag" pattern="(0[0-9]|1[0-9])(:[0-5][0-9])">  
                      
                      

                      Und diese Funktion

                        
                      function check_time($hour, $minute)  
                      {  
                        if (in_array($hour, range(0, 23))  
                           and in_array($minute, range(0, 59))) return TRUE; // Eingabe im gültigen Bereich  
                        return FALSE; // Eingabe nicht im gültigen Bereich  
                      }  
                        
                      $parts = explode(':',$_POST['montagvon']);  
                      $gueltig = check_time($parts[0], $parts[1]);  
                      if ($gueltig === FALSE)  
                      {  
                        $errors[] = "Benutzer wegen falscher Eingabe beschimpfen!";  
                      } else {  
                      $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT); // Stunden links mit 0 auffüllen  
                      $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT); // evtl. Minuten links mit 0 auffüllen  
                      $_POST['montagvon'] = $parts[0] .":". $parts[1];  
                      }  
                      
                      

                      Mein erstes Problem ist, dass das pattern nicht wohl nicht richtig geht, denn 23:59 Uhr ist wohl kein gültiger Wert warum auch immer! Aber damit kann ich leben.

                      so schlimm ist, ich weiß eben NICHT wie ich die Funktion in diesem Fall 8x aufrufen kann mit jeweils einer passenden Meldung!

                      1. Mahlzeit,

                        Ich hab doch vorhin geschrieben dass ich NICHT weiß wie ich das in eine Funktion packen soll, so dass ich jeweils die RICHTIGE Meldung angezeigt bekomme. Derzeit bin ich soweit.

                        Das brauchst du doch gar nicht. Du rufst die Funktion auf und bekommst ein TRUE oder FALSE zurück.
                        Wenn FALSE, weisst du $error den passenden Text zu.

                          
                        $success = pruefeZeit($zeit);  
                        if($success === FALSE) {  
                             $error = "Passende Fehlermeldung";  
                        }  
                        
                        

                        Alternativ, wenn du deine Prüfung in einer Schleife durchläufst, weisst du ja, welches Feld den Fehler geworfen hat. Dann machst du ein

                          
                        $error = "Das markierte Feld enthält einen ungültigen Wert";  
                        
                        

                        Und beim erneuten Aufruf markierst du das entsprechende Feld farbig.

                        --
                        42
                        1. Hallo,

                          Das brauchst du doch gar nicht. Du rufst die Funktion auf und bekommst ein TRUE oder FALSE zurück.
                          Wenn FALSE, weisst du $error den passenden Text zu.

                          $success = pruefeZeit($zeit);
                          if($success === FALSE) {
                               $error = "Passende Fehlermeldung";
                          }

                            
                          Kann sein dass ich nicht verstehe was du meinst oder du verstehst nicht was ich meine. In dieser Funktion steht doch dieser Wert `$parts = explode(':',$_POST['montagvon']);`{:.language-php} fest drin also muss ich den ganzen Block irgendwie 8 mal bzw. später 112 mal aufrufen, dass ich die passende Meldung eintragen kann.  
                            
                          
                          
                          1. Mahlzeit,

                            Kann sein dass ich nicht verstehe was du meinst oder du verstehst nicht was ich meine.

                            Beides grundsätzlich möglich ;)

                            In dieser Funktion steht doch dieser Wert $parts = explode(':',$_POST['montagvon']); fest drin also muss ich den ganzen Block irgendwie 8 mal bzw. später 112 mal aufrufen, dass ich die passende Meldung eintragen kann.

                            In diesem Fall hat deine Funktion einen massiven Konzeptfehler. Der Sinn einer Funktion ist deren flexibilität um doppelten Code zu vermeiden.
                            Mal abgesehen davon, dass du $_POST grundsätzlich prüfen musst um schadliche Injections und Angriffe abzufangen, wieso übergibst du  $_POST['montagvon'] nicht als Parameter.

                            Nochmal konkret: Hast du dich mit den Grundlagen von PHP befasst?

                            --
                            42
                            1. In diesem Fall hat deine Funktion einen massiven Konzeptfehler. Der Sinn einer Funktion ist deren flexibilität um doppelten Code zu vermeiden.

                              Ich kenne mich mit Funktionen nur sehr wenig aus. Hab dieses Beispiel übernommen http://forum.de.selfhtml.org/?t=217937&m=1498735

                              Mal abgesehen davon, dass du $_POST grundsätzlich prüfen musst um schadliche Injections und Angriffe abzufangen, wieso übergibst du  $_POST['montagvon'] nicht als Parameter.

                              Warum sollte ich mich jetzt damit rumschlagen eine Benutzereingabe zu prüfen wenn noch nicht mal sicher ist wie ich das Problem lösen kann? Derzeit ist alles nur Intern. Wenn die Seite online geht ist logisch dass man Benutzereingaben prüft.

                              1. Mahlzeit,

                                Warum sollte ich mich jetzt damit rumschlagen eine Benutzereingabe zu prüfen wenn noch nicht mal sicher ist wie ich das Problem lösen kann?

                                Weil das _GRUNDLAGEN_ sind.

                                Polizist: Wieso ist der Unfall passiert?
                                Fahrer: Ich wollte mich nicht mit der Bremse befassen, bevor ich das Gaspedal beherrsche.

                                --
                                42
                                1. Hallo,

                                  Weil das _GRUNDLAGEN_ sind.

                                  Nein, rede doch bitte nicht so ein misst. Was hat das bitte mit Grundlagen zu tun ob man Benutzereingaben prüft oder NICHT! Hast du einen Plan wer an diese Daten kommt? Hast du ein Plan, wie ich die Daten weiter verarbeite? Hast du ein Plan ob es eine öffentliche Seite ist oder ein Intranet? NEIN hast du zu 99,9% nicht!

                                  Benutzereingaben auf schädlichen Code zu prüfen hat NICHTS aber auch gar NICHTS mit diesem Problem zu tun.

                                  1. Mahlzeit,

                                    Was hat das bitte mit Grundlagen zu tun ob man Benutzereingaben prüft oder NICHT!

                                    Soll das eine Frage sein?

                                    Benutzereingaben auf schädlichen Code zu prüfen hat NICHTS aber auch gar NICHTS mit diesem Problem zu tun.

                                    Wenn du meinst. Dann erzähl ich dir halt nicht, dass du einige Probleme gar nicht hättest, wenn du das tun würdest.
                                    Wenn du dir das Leben weiterhin schwer machen willst, tu das, dann müssen dir aber andere dabei helfen.

                                    BTW: Es ist nie eine gute Idee, pampig zu werden, wenn man Hilfe erwartet. Es könnte sein, das sich da andere dran stören und damit die Lust verlieren, die Tipps zu geben.

                                    Aus dem Grund bin ich hier raus.

                                    --
                                    42
                                    1. BTW: Es ist nie eine gute Idee, pampig zu werden, wenn man Hilfe erwartet. Es könnte sein, das sich da andere dran stören und damit die Lust verlieren, die Tipps zu geben.

                                      Du hast eh 0 zu meinem Problem beigetragen und jetzt meinst du dass du mir die Schuld geben kannst nur weil du keine Lösung kennst.

                                      1. Mahlzeit,

                                        Du hast eh 0 zu meinem Problem beigetragen und jetzt meinst du dass du mir die Schuld geben kannst nur weil du keine Lösung kennst.

                                        Sorry, du hast auf meine Frage, ob du die Grundlagen kannst, zweimal nicht geantwortet. Dass du meine Lösungsansätze nicht verstehst, kann ich dadurch nicht wissen. Wenn du von Anfang an gesagt hättest, dass du ein PHP-Grünschnabel bist, hätte ich anders geantwortet.

                                        Grundsätzlich hast du als fragender die Pflicht, ohne Aufforderung alle relevanten Infos zu geben. Wenn du das nichtmal auf Nachfrage machst, musst du mit dem leben, was du bekommst.

                                        BTW: Ich hatte nicht vor etwas zu deinem Problem beizutragen. Aber ich hab einiges zur _Lösung_ beigetragen. Leider hast du das, mangels Grundwissen, nicht verstanden.

                                        --
                                        42
                                        1. Hallo,

                                          BTW: Ich hatte nicht vor etwas zu deinem Problem beizutragen. Aber ich hab einiges zur _Lösung_ beigetragen. Leider hast du das, mangels Grundwissen, nicht verstanden.

                                          Hätte ich einfach mein Dropdown genommen wie ich es vor hatte wäre ich schon längst fertig.  Ich ärgere mich über mich selber dass ich auf so ein Dreck gehört habe "Mach es doch mit Eingabefelder dass der User nicht so viel klicken muss". Scheiß drauf ob ein User klicken muss oder nicht. Wenn es ihm nicht passt soll er verschwinden oder sich durchklicken.

                                          1. Mahlzeit,

                                            Scheiß drauf ob ein User klicken muss oder nicht. Wenn es ihm nicht passt soll er verschwinden oder sich durchklicken.

                                            Recht hast du. Dieses Konzept hat schon bei allen anderen erfolgreichen Web-Projekten funktioniert :D

                                            --
                                            42
                          2. Hallo

                            Kann sein dass ich nicht verstehe was du meinst oder du verstehst nicht was ich meine. In dieser Funktion steht doch dieser Wert $parts = explode(':',$_POST['montagvon']); fest drin also muss ich den ganzen Block irgendwie 8 mal bzw. später 112 mal aufrufen, dass ich die passende Meldung eintragen kann.

                            Wenn du 112 Eingaben hast, musst du auch 112 Eingaben prüfen, sprich, 112 mal die Prüfroutine anschmeißen.

                            Tschö, Auge

                            --
                            Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
                            Terry Pratchett, "Wachen! Wachen!"
                            ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
                            Veranstaltungsdatenbank Vdb 0.3
                            1. Hallo Auge,

                              Wenn du 112 Eingaben hast, musst du auch 112 Eingaben prüfen, sprich, 112 mal die Prüfroutine anschmeißen.

                              das heißt ich kopiere diesen Code

                                
                              $parts = explode(':',$_POST['montagvon']);  
                              $gueltig = check_time($parts[0], $parts[1]);  
                              if ($gueltig === FALSE)  
                              {  
                                $errors[] = "Benutzer wegen falscher Eingabe beschimpfen!";  
                              } else {  
                              $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT); // Stunden links mit 0 auffüllen  
                              $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT); // evtl. Minuten links mit 0 auffüllen  
                              $_POST['montagvon'] = $parts[0] .":". $parts[1];  
                              }  
                              
                              

                              und ändere jeweils diesen $_POST['montagvon'] wert?

                              1. Hallo

                                Wenn du 112 Eingaben hast, musst du auch 112 Eingaben prüfen, sprich, 112 mal die Prüfroutine anschmeißen.

                                das heißt ich kopiere diesen Code

                                $parts = explode(':',$_POST['montagvon']);
                                $gueltig = check_time($parts[0], $parts[1]);
                                if ($gueltig === FALSE)
                                {
                                  $errors[] = "Benutzer wegen falscher Eingabe beschimpfen!";
                                } else {
                                $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT); // Stunden links mit 0 auffüllen
                                $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT); // evtl. Minuten links mit 0 auffüllen
                                $_POST['montagvon'] = $parts[0] .":". $parts[1];
                                }

                                
                                >   
                                > und ändere jeweils diesen `$_POST['montagvon']`{:.language-php} wert?  
                                  
                                Wenn ich's mir richtig anschaue: Nöö.  
                                  
                                Also, die Aufgaben (Prüfung und Auffüllen) einzeln anzugehen, ist schon richtig. Es spricht aber nichts dagegen, beide Aufgaben wiederum in einer Funktion zu kapseln. Du hast dann einerseits die Funktion check\_time und desweiteren eine Funktion, nennen wir sie handleTimeInput, die alles, was zur Prüfung der Eingabe nötig ist, erledigt.  
                                  
                                ~~~php
                                // Die Funktion gibt entweder die für gut befundene Eingabe zurück oder im Fehlerfall FALSE  
                                //  
                                function handleTimeInput($input) {  
                                // globalisiere $errors, damit das Array hier drinnen  
                                // genauso funktioniert, wie außerhalb der Funktion  
                                global $errors;  
                                  
                                $parts = explode(':',$input);  
                                $gueltig = check_time($parts[0], $parts[1]);  
                                if ($gueltig === FALSE) {  
                                  $errors[] = "Benutzer wegen falscher Eingabe beschimpfen!";  
                                  return FALSE;  
                                  } else {  
                                   $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT); // Stunden links mit 0 auffüllen  
                                  $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT); // evtl. Minuten links mit 0 auffüllen  
                                  $input = $parts[0] .":". $parts[1];  
                                  return $input;  
                                  }  
                                }  
                                  
                                $_POST['montagvon'] = handleTimeInput($_POST['montagvon']); // ist FALSE oder der geprüfte Inhalt.
                                

                                Tschö, Auge

                                --
                                Verschiedene Glocken läuteten in der Stadt, und jede von ihnen vertrat eine ganz persönliche Meinung darüber, wann es Mitternacht war.
                                Terry Pratchett, "Wachen! Wachen!"
                                ie:{ fl:| br:> va:) ls:[ fo:) rl:( ss:| de:> js:| zu:}
                                Veranstaltungsdatenbank Vdb 0.3
                                1. Hallo,

                                  Also, die Aufgaben (Prüfung und Auffüllen) einzeln anzugehen, ist schon richtig. Es spricht aber nichts dagegen, beide Aufgaben wiederum in einer Funktion zu kapseln. Du hast dann einerseits die Funktion check_time und desweiteren eine Funktion, nennen wir sie handleTimeInput, die alles, was zur Prüfung der Eingabe nötig ist, erledigt.

                                  // Die Funktion gibt entweder die für gut befundene Eingabe zurück oder im Fehlerfall FALSE

                                  //
                                  function handleTimeInput($input) {
                                  // globalisiere $errors, damit das Array hier drinnen
                                  // genauso funktioniert, wie außerhalb der Funktion
                                  global $errors;

                                  $parts = explode(':',$input);
                                  $gueltig = check_time($parts[0], $parts[1]);
                                  if ($gueltig === FALSE) {
                                    $errors[] = "Benutzer wegen falscher Eingabe beschimpfen!";
                                    return FALSE;
                                    } else {
                                     $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT); // Stunden links mit 0 auffüllen
                                    $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT); // evtl. Minuten links mit 0 auffüllen
                                    $input = $parts[0] .":". $parts[1];
                                    return $input;
                                    }
                                  }

                                  $_POST['montagvon'] = handleTimeInput($_POST['montagvon']); // ist FALSE oder der geprüfte Inhalt.

                                    
                                  Ich hab das ganze nun so versucht  
                                    
                                  ~~~php
                                    
                                  function check_time($hour, $minute)  
                                  {  
                                    if (in_array($hour, range(0, 23))  
                                       and in_array($minute, range(0, 59))) return TRUE; // Eingabe im gültigen Bereich  
                                    return FALSE; // Eingabe nicht im gültigen Bereich  
                                  }  
                                    
                                  function handleTimeInput($input) {  
                                    
                                  	global $errors;  
                                  	  
                                  	$parts = explode(':',$input);  
                                  	$gueltig = check_time($parts[0], $parts[1]);  
                                  	  
                                  	if ($gueltig === FALSE) {  
                                  	  return FALSE;  
                                  	  } else {  
                                  	  
                                  	  $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT); // Stunden links mit 0 auffüllen  
                                  	  $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT); // evtl. Minuten links mit 0 auffüllen  
                                  	  $input = $parts[0] .":". $parts[1];  
                                  	  
                                  	  return $input;  
                                  	  }  
                                  }  
                                    
                                  	 	if( $_POST['montagvon'] = handleTimeInput($_POST['montagvon'] === FALSE)) {  
                                              $errors[] = "Geben Sie bitte eine Gültigen Wert in Montag von ein";  
                                          }  
                                    
                                  	 	if( $_POST['montagbis'] = handleTimeInput($_POST['montagbis'] === FALSE)) {  
                                              $errors[] = "Geben Sie bitte eine Gültigen Wert in Montag bis ein";  
                                          }  
                                  
                                  

                                  aber leider bekomme ich immer die Fehlermeldung angezeigt dass etwas mit dem Datum nicht stimmt.

                                  1. Ich bin nun den ganzen Nachmittag dran und versuche die Fehlermeldungen ausgeben zu lassen, es klappt einfach nicht.

                                      
                                    function check_time($hour, $minute)  
                                    {  
                                      if (in_array($hour, range(0, 23))  
                                         and in_array($minute, range(0, 59))) return TRUE; // Eingabe im gültigen Bereich  
                                      return FALSE; // Eingabe nicht im gültigen Bereich  
                                    }  
                                      
                                    function handleTimeInput($input) {  
                                      
                                    	global $errors;  
                                    	  
                                    	$parts = explode(':',$input);  
                                    	$gueltig = check_time($parts[0], $parts[1]);  
                                    	  
                                    	if ($gueltig === FALSE) {  
                                    	 return FALSE;  
                                    	  } else {  
                                    	  
                                    	  $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT); // Stunden links mit 0 auffüllen  
                                    	  $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT); // evtl. Minuten links mit 0 auffüllen  
                                    	  $input = $parts[0] .":". $parts[1];  
                                    	  
                                    	  return $input;  
                                    	  }  
                                    }  
                                    
                                    

                                    Es muss doch irgendwie Möglich sein, dass ich diesen Fehler $errors[] = "Benutzer wegen falscher Eingabe beschimpfen!"; anders ausgeben zu lassen in etwa so, dass ich damit weiter arbeiten kann.

                                      
                                    	 if( $_POST['montagvon'] = handleTimeInput($_POST['montagvon'] === FALSE)) {  
                                             $errors[] = "Geben Sie bitte eine Gültigen Wert in Montag von ein";  
                                            }  
                                      
                                    	 if( $_POST['montagbis'] = handleTimeInput($_POST['montagbis'] == FALSE)) {  
                                             $errors[] = "Geben Sie bitte eine Gültigen Wert in Montag bis ein";  
                                            }  
                                    
                                    
                                    1. Mahlzeit,

                                      Du weisst aber schon, was

                                      $errors[]

                                        
                                      bedeutet?  
                                      
                                      -- 
                                      42
                                      
                                      1. Hallo,

                                        Du weisst aber schon, was

                                        $errors[]

                                        
                                        >   
                                        > bedeutet?  
                                          
                                        ja, das ist ein Array.
                                        
                                2. Hallo Auge,

                                  ich habe es nun so hinbekommen

                                    
                                  function check_time($hour, $minute)  
                                  {  
                                    if (in_array($hour, range(0, 23))  
                                       and in_array($minute, range(0, 59))) return TRUE; // Eingabe im gültigen Bereich  
                                    return FALSE; // Eingabe nicht im gültigen Bereich  
                                  }  
                                    
                                  function handleTimeInput($input) {  
                                    
                                  	global $errors;  
                                  	  
                                  	$parts = explode(':',$input);  
                                  	$gueltig = check_time($parts[0], $parts[1]);  
                                  	  
                                  	if ($gueltig === FALSE) {  
                                  	  return FALSE;  
                                  	  } else {  
                                  	  
                                  	  $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT); // Stunden links mit 0 auffüllen  
                                  	  $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT); // evtl. Minuten links mit 0 auffüllen  
                                  	  $input = $parts[0] .":". $parts[1];  
                                  	  
                                  	  return $input;  
                                  	  }  
                                  }  
                                    
                                   if($_POST['montagvon'] != handleTimeInput($_POST['montagvon'])) {  
                                              $errors[] = "Geben Sie bitte eine Gültigen Wert in Montag von ein";  
                                          }  
                                   if($_POST['montagbis'] != handleTimeInput($_POST['montagbis'])) {  
                                              $errors[] = "Geben Sie bitte eine Gültigen Wert in Montag bis ein";  
                                          }  
                                  
                                  

                                  scheint auch gut zu funktionieren ABER wenn ich das Formular leer abschicke was auch völlig OK ist habe ich überall 00:00 Einträge dieses ist nicht gewollt, denn 00:00 bedeutet bei mir etwas anderes. Wie könnte ich verhindern dass deine Funktion Felder die leer sind NICHT berücksichtigt? Vielen Dank für deine Hilfe!

                                  1. Hallo,

                                    ich hab es so getestet

                                      
                                    	 if (strlen($input) > 0):  
                                    	  $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT); // Stunden links mit 0 auffüllen  
                                    	  $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT); // evtl. Minuten links mit 0 auffüllen  
                                    	  $input = $parts[0] .":". $parts[1];  
                                    	 endif;  
                                    
                                    

                                    aber jetzt gibt er keine Fehlermeldung mehr aus. Schade dass man mir hier nicht weiter helfen kann / will.

                                3. Hallo,

                                  ich hab es nun geschafft, alles soweit umzusetzen, mein Code sieht so aus

                                    
                                  	function check_time($hour, $minute)	{  
                                  	  if (in_array($hour, range(0, 23))  
                                  		 and in_array($minute, range(0, 59))) return TRUE;  
                                  	  
                                  	  return FALSE;  
                                  	}  
                                    
                                  	function handleTimeInput($input) {  
                                  		$parts = explode(':',$input);  
                                  		$gueltig = check_time($parts[0], $parts[1]);  
                                  		  
                                  		if ($gueltig === FALSE) {  
                                  		  return NULL;  
                                  		  } else {  
                                  		  
                                  		  $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT);  
                                  		  $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT);  
                                  		  $input = $parts[0] .":". $parts[1];  
                                  		  
                                  		  return $input;  
                                  		  }  
                                  	}  
                                    
                                  	  
                                  if (strlen($_POST['montag_von']) > 0) {  
                                  			$success_montag_von = handleTimeInput($_POST['montag_von']);  
                                  			if($success_montag_von === NULL) {  
                                  			$errors[] = "Montag <strong>von </strong>passt nicht";  
                                  	}}  
                                    
                                  if (strlen($_POST['montag_bis']) > 0) {  
                                  			$success_montag_bis = handleTimeInput($_POST['montag_bis']);  
                                  			if($success_montag_bis === NULL) {  
                                  			$errors[] = "Montag <strong>bis </strong>passt nicht";  
                                  	}}  
                                    
                                    
                                  
                                  

                                  und mein Feld so

                                    
                                    <input type="text" name="montag_von" id="montag_von" class="time_input" value="<?php if(isset($_POST['form_abschicken'])){  
                                  	echo $success_montag_von;  
                                  } else {  
                                  	echo $montag_von;  
                                  }  
                                  ?>" >  
                                  
                                  

                                  klappt auch soweit _aber_ ich bekomme folgende Meldung "Notice: Undefined offset: 1 in" wenn ich im Feld z.B. nur eine 25 schreibe. Ist auch klar, denn in der Funktion wird geschaut was VOR : und NACH : steht.

                                  Wie könnte ich dieses nun beheben? Eigentlich kann wenn man z.B. 23 eingibt automatisch ein :00 einfügen. Ich hab aber keine Ahnung wie ich dieses umsetzten könnte. Könntet mir hier jemand bitte nochmals helfen? Ich bin jetzt so weit gekommen.

                                  1. Hallo,

                                    ok das Problem sollte auch gelöst sein

                                      
                                    	function handleTimeInput($input) {  
                                    		  
                                    		$parts = explode(':',$input);  
                                    		  
                                    		if ($parts[1] = 0) {  
                                    		$parts[1] = "00";  
                                    		}  
                                      
                                    		$gueltig = check_time($parts[0], $parts[1]);  
                                    		  
                                    		if ($gueltig === FALSE) {  
                                    		  return NULL;  
                                    		  } else {  
                                    		  
                                    		  $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT);  
                                    		  $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT);  
                                    		  $input = $parts[0] .":". $parts[1];  
                                    		  
                                    		  return $input;  
                                    		  }  
                                    	}  
                                    
                                    

                                    Ich prüfe ob in $parts[1] etwas steht, wenn nicht, setzte ich den Wert auf 00 somit ist _immer_ etwas vorhanden und meine "Notice: Undefined offset" ist nun auch weg. Keine Ahnung ob es so richtig ist aber es geht.

                                  2. Hallo,

                                    ich erstelle gerade die restlichen Felder. Ist es möglich folgendes value

                                      
                                     value="<?php if(isset($_POST['form_abschicken'])){  
                                            echo $success_montag_von;  
                                    } else {  
                                            echo $montag_von;  
                                    }  
                                    ?>"  
                                    
                                    

                                    etwas kürzer zu schreiben? Sprich dass es übersichtlicher ist?

                                    1. Mahlzeit,

                                      ich erstelle gerade die restlichen Felder. Ist es möglich folgendes value etwas kürzer zu schreiben? Sprich dass es übersichtlicher ist?

                                      Ja, z.B. so:

                                        
                                      <?php (isset($_POST['form_abschicken'])) ? echo $success_montag_von : echo $montag_von;?>  
                                      
                                      

                                      Ungetestet, aber sollte klappen.

                                      --
                                      42
                                      1. Hallo,

                                        <?php (isset($_POST['form_abschicken'])) ? echo $success_montag_von : echo $montag_von;?>

                                        
                                        > Ungetestet, aber sollte klappen.  
                                          
                                        danke für deine Hilfe, ich bekomme eine Fehlermeldung angezeigt "PHP Parse error:  syntax error, unexpected T\_ECHO"
                                        
                                        1. Mahlzeit,

                                          danke für deine Hilfe, ich bekomme eine Fehlermeldung angezeigt "PHP Parse error:  syntax error, unexpected T_ECHO"

                                          Ich habs mal für dich gegoggled...

                                            
                                          <?php echo (isset($_POST['form_abschicken'])) ? $success_montag_von : $montag_von;?>  
                                          
                                          

                                          Da dir das Suchen der Fehler durch eine kurze Suche bei Google auch schon zuviel ist, war das meine letzte Hilfe in diesem Thread. Entweder kannst du die Grundlagen von PHP nicht lernen oder du willst nicht.
                                          Im ersten Fall kannst du nichts dafür, Hilfe bringt dir aber nichts, im zweiten fühl ich mich verarscht und hab keinen Bock mehr zu helfen. Ist ja nicht das erste mal im Thread, dass du keine Eigeninitiative zeigst.

                                          EOT für mich, keinen Bock mehr.

                                          --
                                          42
                                          1. DANN LASS ES DOCH EINFACH! DU HAST EH GESAGT DASS DU NICHT HELFEN WILLST! HALTE DICH EINFACH DRAN!

                        2. Hallo,

                          Wenn FALSE, weisst du $error den passenden Text zu.

                          wegen der besseren Auffälligkeit sollte man $error den entsprechenden Text zuroten, statt zuweißen...

                          Gruß
                          Kalk

                          1. Mahlzeit,

                            wegen der besseren Auffälligkeit sollte man $error den entsprechenden Text zuroten, statt zuweißen...

                            Ich hab da ne Methode, da wird $success ein text zugegrünt und $warning zugegelbt ;)

                            --
                            42
                        3. Hallo,

                          Das brauchst du doch gar nicht. Du rufst die Funktion auf und bekommst ein TRUE oder FALSE zurück.
                          Wenn FALSE, weisst du $error den passenden Text zu.

                          $success = pruefeZeit($zeit);
                          if($success === FALSE) {
                               $error = "Passende Fehlermeldung";
                          }

                            
                          hab ich dich so richtig verstanden?  
                            
                          ~~~php
                            
                          if(isset($_POST['abschicken'])){  
                            
                          	function check_time($hour, $minute)  
                          	{  
                          	  if (in_array($hour, range(0, 23))  
                          		 and in_array($minute, range(0, 59))) return TRUE;  
                          	  return FALSE;  
                          	}  
                            
                          function handleTimeInput($input) {  
                            
                          	global $errors;  
                          	  
                          	$parts = explode(':',$input);  
                          	$gueltig = check_time($parts[0], $parts[1]);  
                          	  
                          	if ($gueltig === FALSE) {  
                          	  return NULL;  
                          	  } else {  
                          	  
                          	  $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT);  
                          	  $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT);  
                          	  $input = $parts[0] .":". $parts[1];  
                          	  return $input;  
                          	  }  
                          }  
                          
                          

                          und die Prüfung mache ich dann so

                            
                          	if (strlen($_POST['montagvon']) > 0) {  
                          			$success = handleTimeInput($_POST['montagvon']);  
                          			if($success === NULL) {  
                          			$errors[] = "Montag von ist falsch";  
                          	}}  
                            
                          	if (strlen($_POST['montagbis']) > 0) {  
                          			$success = handleTimeInput($_POST['montagbis']);  
                          			if($success === NULL) {  
                          			$errors[] = "Montag bis ist falsch";  
                          	}}  
                          
                          

                          oder könnte man das noch weiter in die Funktion mit einbauen?

                          1. Hallo,

                            hab es noch etwas umgebaut. Meintest du dieses so?

                            Hier die Funktion

                              
                            if(isset($_POST['abschicken'])){  
                              
                            	function check_time($hour, $minute)  
                            	{  
                            	  if (in_array($hour, range(0, 23))  
                            		 and in_array($minute, range(0, 59))) return TRUE;  
                            	  return FALSE;  
                            	}  
                              
                            function handleTimeInput($input) {  
                              
                            	global $errors;  
                            	  
                            	$parts = explode(':',$input);  
                            	$gueltig = check_time($parts[0], $parts[1]);  
                            	  
                            	if ($gueltig === FALSE) {  
                            	  return NULL;  
                            	  } else {  
                            	  
                            	  $parts[0] = str_pad($parts[0], 2, "0", STR_PAD_LEFT);  
                            	  $parts[1] = str_pad($parts[1], 2, "0", STR_PAD_LEFT);  
                            	  $input = $parts[0] .":". $parts[1];  
                            	  return $input;  
                            	  }  
                            }  
                            
                            

                            Hier das prüfen der Felder

                              
                            	if (strlen($_POST['montagvon']) > 0) {  
                            			$success1 = handleTimeInput($_POST['montagvon']);  
                            			if($success1 === NULL) {  
                            			$errors[] = "Montag von ist falsch";  
                            	}}  
                              
                            	if (strlen($_POST['montagbis']) > 0) {  
                            			$success2 = handleTimeInput($_POST['montagbis']);  
                            			if($success2 === NULL) {  
                            			$errors[] = "Montag bis ist falsch";  
                            	}}  
                            
                            

                            Und meine Felder sehen so aus

                              
                              <input type="text" name="montagvon" id="montagvon" class="time_input" value="<?php echo $success1;?>" > -  
                              <input type="text" name="montagbis" id="montagbis" class="time_input" value="<?php echo $success2?>" > und von  
                            
                            
                      2. Hallo,

                        Mein erstes Problem ist, dass das pattern nicht wohl nicht richtig geht, denn 23:59 Uhr ist wohl kein gültiger Wert warum auch immer! Aber damit kann ich leben.

                        Hier kannst du sehen und ausprobieren das das pattern bestens funktioniert.

                        lg qx

        2. Hallo Auge

          Mit JS kannst du eine Vorprüfung machen, die eine Fehleingabe (Plausibilität und Format) moniert. Vor dem speichern auf dem Server wird bei der Verarbeitung eine Prüfung mit PHP durchgeführt.

          Als Vorprüfung würde ich ein html5 Pattern wie pattern="(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){1}" verwenden.

          beste gruesse qx

          1. Hallo,

            Als Vorprüfung würde ich ein html5 Pattern wie pattern="(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){1}" verwenden.

            vielen DANK! Genau danach habe ich gesucht!

            1. Hallo,

              Als Vorprüfung würde ich ein html5 Pattern wie pattern="(0[0-9]|1[0-9]|2[0-3])(:[0-5][0-9]){1}" verwenden.

              vielen DANK! Genau danach habe ich gesucht!

              Na? Damit lässt sich auch 12:11 eingeben. Wie wärs denn damit:

              <!DOCTYPE html>  
              <html lang="de-DE">  
              <style type="text/css">  
              .time_input {  
                 width:2.8em;  
              }  
              </style>  
              <form method="get" action="http://localhost/test">  
              <input class="time_input" name="stunden" id="stunden" value="" type="number" step="1" min="0" max="23">:<input class="time_input" value=""  name="minuten" id="minuten" type="number" step="15" min="0" max="45">  
              <input type="submit">  
              </form>  
              
              
              1. Hallo,

                Na? Damit lässt sich auch 12:11 eingeben. Wie wärs denn damit:

                Ich verstehe nicht was an diesem Wert 12:11 falsch sein soll? 12:11 ist ein gültiger Wert!

                1. Ich verstehe nicht was an diesem Wert 12:11 falsch sein soll? 12:11 ist ein gültiger Wert!

                  Woher soll ich das wissen?

                  In Deiner Ursprungsfrage hast Du Stunden und die Minuten als 00, 15, 30, 45 als gültige Werte vorgestellt.

                  Jörg Reinholz

              2. Hallo,

                <!DOCTYPE html>

                <html lang="de-DE">
                <style type="text/css">
                .time_input {
                   width:2.8em;
                }
                </style>
                <form method="get" action="http://localhost/test">
                <input class="time_input" name="stunden" id="stunden" value="" type="number" step="1" min="0" max="23">:<input class="time_input" value=""  name="minuten" id="minuten" type="number" step="15" min="0" max="45">
                <input type="submit">
                </form>

                  
                das sieht sehr gut aus. Um meine PHP Prüfung komme ich dennoch nicht herum da der IE8 type="number" ebenfalls nicht kennt. :(
                
                1. Moin,

                  Um meine PHP Prüfung komme ich dennoch nicht herum da der IE8 type="number" ebenfalls nicht kennt. :(

                  Um eine serverseitige Validierung kommst du sowieso nicht herum. Man kann dein PHP-Skript nämlich auch mit cURL aufrufen und da wird gar nichts clientseitig validiert. Wenn da eine Lücke gefunden wird, kanns böse enden. Traue niemals den Daten, die du kriegst!

                  Grüße Marco

                  --
                  Ich spreche Spaghetticode - fließend.
          2. Hallo,

            kann es sein dass der Firefox dieses NICHT kennt?

              
             <input type="time" name="montagvon" id="montagvon">  
            
            

            Ist in meinen Augen doch sehr traurig :/

            1. Hallo Peter

              kann es sein dass der Firefox dieses NICHT kennt?
              Ist in meinen Augen doch sehr traurig :/

              Bei caniuse kannst du nachsehen, die Unterstützung ist nicht nur bei FireFox traurig, aber das macht nix ;-))

              lg qx

              1. Hallo,

                Bei caniuse kannst du nachsehen, die Unterstützung ist nicht nur bei FireFox traurig, aber das macht nix ;-))

                sieht mehr als traurig aus ;)

    2. Hi,

      oder mach zwei Dropdown Felder, Stunde und Minute, 23,00,01, etc. und 00,15,30,45...

      Gruß
      Jan

  2. Hello,

    Du hast doch deswegen schon einen Thread hier, oder irre ich mich da? Dann sieht es allerdings nach eine Hausaufgabe aus ;-)

    Ist es möglich mit PHP ein Dropdown zu erzeugen ohne jedes Feld anlegen zu müssen? Damit meine ich dieses:

    <select name="uhrzeit" id="uhrzeit">
        <option value="00:00">00:00</option>
        <option value="00:15">00:15</option>
        <option value="00:30">00:30</option>
        <option value="00:45">00:45</option>
        <option value="01:00">01:00</option>
        .....
        <option value="12:45">12:45</option>
        <option value="13:00">13:00</option>
      </select>

    
    >   
    > usw... Wäre klasse wenn ich dieses nicht alles von Hand schreiben müsste oder sollte ich diese Daten  doch lieber in eine Datenbank legen und mit einem Array dann füllen?  
      
    Du kannst das Select-Feld mit einer serverseitigen Scriptsprache (oder Programm) oder auch mit JavaScript erzeugen lassen.  
      
    Die Kontrolle und die Auswertung der Daten sollte immer auf dem Server stattfinden.  
    Ich lege Dir da außerdem mal das Stichwort "Affenformular" für die Suche im Archiv ans Herz.  
      
    Wenn Du PHP benutzen möchtest auf dem Server, dann kommen z. B. die Funktionen  
    <http://de2.php.net/manual/en/function.checkdate.php>  
    <http://de2.php.net/manual/en/function.strtotime.php>  
    in Betracht.  
      
    Außerdem wirst Du testen müssen, vieviele und welche Zeichen in den einzelnen Feldern eingegeben wurden.  
      
    <http://de2.php.net/manual/en/function.strlen.php>  
    <http://de2.php.net/manual/en/function.preg-match.php>  
      
    und viele andere Möglichkeiten  
      
    Wenn Du die Eingabe in einem Feld vornehmen lässt [01:20], dann wird Dir ggf. auch noch  
    <http://de2.php.net/manual/en/function.explode.php>  
      
    helfen.  
      
      
    An dieser Aufgabe wird hier schon ganz schön lange herumgestoppelt:  
      
    <https://forum.selfhtml.org/?t=217902&m=1498441>  
      
      
      
      
      
    Liebe Grüße aus dem schönen Oberharz  
      
      
    Tom vom Berg  
    ![](http://selfhtml.bitworks.de/Virencheck.gif)  
      
    
    -- 
     ☻\_  
    /▌  
    / \ Nur selber lernen macht schlau  
    [Die ultimative Seite für Selbermacher](http://getscript.de/)
    
  3. Om nah hoo pez nyeetz, Peter!

    Du bist nicht zufällig Yael?

    Matthias

    --
    Der Unterschied zwischen Java und JavaScript ist größer als der zwischen Waffe und Waffeleisen.

  4. Hallo,

    ich habe eine einfachere Lösung gefunden

      
    if (strlen($_POST['montagvon']) > 0) {  
    	  
    	$time = $_POST['montagvon'];;  
      
    	if(preg_match("/^(\d{1,2}):(\d{1,2})$/", $time, $matches) && ($matches[1] <= 24 && $matches[1] >= 0) && ($matches[2] <= 59 && $matches[2] >= 0) )  
    	  
    	$errors[] = "Fehler";  
      }  
    
    

    diese geht FAST!

    Wenn ich 14:00 Uhr eintrage kommt Fehler.
    Wenn ich 25:25 Uhr eintrage lässt er es durch.

    Ich dachte ich muss aus if(preg_match) ein if(!preg_match) damit sag ich doch dass es UNGLEICH preg_match sein soll oder?

    1. Hallo,

      hab eine kleine Verbesserung

        
      if (strlen($_POST['montagvon']) > 0) {  
      	  
      	$time = $_POST['montagvon'];  
        
      	if( preg_match("/^(\d{1,2}):(\d{1,2})$/", $time, $matches) && ($matches[1] <= 24 && $matches[1] >= 0) && ($matches[2] <= 59 && $matches[2] >= 0) )  
      		  
      	echo '';  
      		  
      	else  
      	  
      	$errors[] = 'Der Wert '.$_POST['montagvon'].' ist keine gültige Uhrzeit';  
        
      		  }  
      
      

      Nur ich frage mich warum ich das echo ''; benötige. Nehme ich das raus geht nichts mehr. Außerdem ist es möglich wenn eine falsche Eingabe vorhanden ist, den Wert von $_POST['montagvon'] zu löschen, dass im Feld

        
      <input type="text" name="montagvon" id="montagvon" class="time_input" value="<?php echo $_POST['montagvon'];?>" >  
      
      

      nichts mehr steht? Getestet habe ich es so

        
      if (strlen($_POST['montagvon']) > 0) {  
      	  
      	$time = $_POST['montagvon'];  
        
      	if( preg_match("/^(\d{1,2}):(\d{1,2})$/", $time, $matches) && ($matches[1] <= 24 && $matches[1] >= 0) && ($matches[2] <= 59 && $matches[2] >= 0) )  
      		  
      	echo '';  
      		  
      	else  
      	  
      	$errors[] = 'Der Wert '.$_POST['montagvon'].' ist keine gültige Uhrzeit';  
              $_POST['montagvon'] = '';  
        
      		  }  
      
      

      leider ist dann auch die Eingabe weg sollte die Uhrzeit richtig sein.

      1. Hallo,

        ich habe es nun fast geschafft. Bekomme es aber NICHT hin sollte ein Fehler sein dass mein $_POST['montagvon'] auf leer gesetzt wird.

          
          $time = $_POST['montagvon'];  
          if ($_POST['montagvon'] != (preg_match("/^(\d{1,2}):(\d{1,2})$/", $time, $matches) && ($matches[1] <= 24 && $matches[1] >= 0) && ($matches[2] <= 59 && $matches[2] >= 0) ))  
          $errors[] = "Fehler";  
          }  
        
        

        Kann mir hier vielleicht jemand helfen?

        1. Schade das mann mir eine einfache Frage hier nicht beantworten kann! Naja ich werde meine Seite einfach in die Tonne treten und wie bis jetzt auch alles auf Papier notieren. Danke dennoch für die Hilfe bis hierhin.

          1. Schade das mann mir eine einfache Frage hier nicht beantworten kann!

            Das ist hier kein 24/7 Kundendienst, sondern ein Forum. Ich muss mich also nicht dafür entschuldigen, dass ich gestern Kirschen geerntet habe.

            Jörg Reinholz

            1. Hello,

              Schade das mann mir eine einfache Frage hier nicht beantworten kann!

              Das ist hier kein 24/7 Kundendienst, sondern ein Forum. Ich muss mich also nicht dafür entschuldigen, dass ich gestern Kirschen geerntet habe.

              Nee, aber dass Du uns keine davon abgegeben hast ;-P

              Liebe Grüße aus Vienenburg vom Angelteich

              Tom vom Berg

              --
               ☻_
              /▌
              / \ Nur selber lernen macht schlau
              Die ultimative Seite für Selbermacher
              1. Nee, aber dass Du uns keine davon abgegeben hast ;-P

                Auch dein Beitrag hat NICHTS aber auch gar NICHTS mit dem Thema zu tun. Mehr kannst du wohl hier nicht sagen, warum bist du dann nicht einfach ruhig? Solche Beiträge machen alles nur kaput.

                1. hi Peter,

                  Nee, aber dass Du uns keine davon abgegeben hast ;-P

                  Auch dein Beitrag hat NICHTS aber auch gar NICHTS mit dem Thema zu tun. Mehr kannst du wohl hier nicht sagen, warum bist du dann nicht einfach ruhig? Solche Beiträge machen alles nur kaput.

                  https://forum.selfhtml.org/?t=217937&m=1498728

                  Hier driften die Threads wie sie wollen, das ist Teil des Forums. Niemand ist gezwungen, Beiträge zu lesen. Jeder kann schreiben, wie er möchte, wenn es denn Charta-konform ist ...

                  mfg

                  tami

            2. Das ist hier kein 24/7 Kundendienst, sondern ein Forum. Ich muss mich also nicht dafür entschuldigen, dass ich gestern Kirschen geerntet habe.

              Dein Beitrag ist so unnötig! Hat nichts aber auch gar nichts mit dem Thema zu tun! Wie im Kindergarten.

              1. Mahlzeit,

                Wie im Kindergarten.

                Nicht ganz. Im Kindergarten gibt es pro Gruppe einen Erwachsenen und mehrere Kinder. Hier lese ich nur ein Kind.

                --
                42
              2. Dein Beitrag ist so unnötig! Hat nichts aber auch gar nichts mit dem Thema zu tun! Wie im Kindergarten.

                Mal ehrlich: Du hast ein sehr unhöfliches "Drängelposting" veröffentlicht - und ich habe Dir geschrieben, dass es einen, bzw. viele Gründe dafür gibt, warum Du Antworten nicht binnen Stunden (3 Postings im Stundentakt zwischen 11:56 und 13:56 und dann dieses "Schade" um 19:07) bekommst.

                Wir haben nämlich alle ein Leben und wir werden für die Antworten nicht bezahlt. Du hast den Formularbutton "Schnelle Antwort KOSTENPFLICHTIG anfordern" nämlich auch nicht gesehen - oder?

                Jörg Reinholz

                1. hi Jörg,

                  Dein Beitrag ist so unnötig! Hat nichts aber auch gar nichts mit dem Thema zu tun! Wie im Kindergarten.

                  Mal ehrlich: Du hast ein sehr unhöfliches "Drängelposting" veröffentlicht - und ich habe Dir geschrieben, dass es einen, bzw. viele Gründe dafür gibt, warum Du Antworten nicht binnen Stunden (3 Postings im Stundentakt zwischen 11:56 und 13:56 und dann dieses "Schade" um 19:07) bekommst.

                  Wir haben nämlich alle ein Leben und wir werden für die Antworten nicht bezahlt. Du hast den Formularbutton "Schnelle Antwort KOSTENPFLICHTIG anfordern" nämlich auch nicht gesehen - oder?

                  Ist doch längstens geklärt.

                  mfg

                  tami

            3. Hallo Jörg,

              ... dass ich gestern Kirschen geerntet habe.

              war die Ernte gut? Haben die Vögel was übrig gelassen? Bei uns haben sie mal an einem Nachmittag den ganzen Baum leer gefressen :(

              Gruß, Jürgen

              1. Hallo Jörg,

                ... dass ich gestern Kirschen geerntet habe.

                war die Ernte gut?

                "Gute Ernte" ist die erzkonservative, höfliche, geradezu euphemistische Umschreibung für "Kirschseuche".

                Im Ernst: Wahnsinn. Gut, dass der Vogel geholfen hat.

                So wie es aussieht folgen neben Kleinkram noch fette Ernten von Tomaten, Äpfel, Birnen, Pflaumen. Nur den Erdbeeren war es wohl zu warm.

                Jörg Reinholz

                1. Hallo,

                  "Gute Ernte" ist die erzkonservative, höfliche, geradezu euphemistische Umschreibung für "Kirschseuche".

                  naja, aus meiner Sicht ist das Beste, was man mit Kirschen tun kann, sie den Vögeln zu überlassen. Mir fällt jedenfalls kein Produkt aus Kirschen ein, das ich mir freiwillig aussuchen würde. Bestenfalls ein "naja, geht so", etwa bei Törtchen mit Kirschen als Belag, oder bei Kirschlikör.

                  So wie es aussieht folgen neben Kleinkram noch fette Ernten von Tomaten, Äpfel, Birnen, Pflaumen.

                  Damit kann man ja auch wenigstens was anfangen. ;-)

                  Nur den Erdbeeren war es wohl zu warm.

                  Hier in der Stuttgarter Region gab es diese Saison eine regelrechte Erdbeer-Überschwemmung. Die omnipräsenten Stände von kleinen Obstbauern haben teilweise nichts anderes angeboten, und wenn man an den Feldern entlangfuhr, war der intensive Geruch nach Erdbeeren fast betäubend.

                  Ciao,
                   Martin

                  --
                  Strawberries, cherries, and an angel's kiss in spring
                  My summerwine is really made from all these things
                  Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(