Ankündigung

Einklappen
Keine Ankündigung bisher.

dynamisches Pulldown

Einklappen

Neue Werbung 2019

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

  • dynamisches Pulldown

    Hallo zusammen!

    Ich möchte ein dynamisches Pulldownmenü für Datumsangaben machen.

    Man wählt den Monat und den Tag, damit man aber zb nicht den 31. Februar einstellen kann, möchte ich das ganze dynamisch machen, damit man bei Jänner 31 Tage wählen kann, bei Februar 28, ...

    Ich hab schon etwas rumgesucht, und hab mir mal so halbwegs was zusammengebastelt.

    Das sieht im Moment so aus:
    PHP-Code:
    <?
    $mon_array = array( "01"=>"31",
                        "02"=>"28",
                        "03"=>"31",
                        "04"=>"30",
                        "05"=>"31",
                        "06"=>"30",
                        "07"=>"31",
                        "08"=>"31",
                        "09"=>"30",
                        "10"=>"31",
                        "11"=>"30",
                        "12"=>"31");

    for($i = 0; $i < $mon_array[$mon]; $i++)
    {
        $tagesliste .= sprintf("<option value=\"%02d\">%02d</option>", $i, $i);
    }
    ?>
    Da ich diesen Code aber nicht selbst erfunden hab, sondern nur an meine Bedürfnisse angepasst hab, weiß ich jetzt nicht wie ich jetzt daraus das Pulldown erzeugen kann...

    Ich hab schon viel herumprobiert, aber ich schaff's irgendwie nicht...

    Frage:
    Wie kann ich aus meinem bisherigen Code jetzt ein Pulldown für Monat und Tag machen?

    Vielen Dank im Vorraus für jede Antwort!


  • #2
    PHP-Code:
    <select name="testdrop">

    <?php
    for($i 0$i $mon_array[$mon]; $i++) 

       
    $tagesliste .= sprintf("<option value=\"%02d\">%02d</option>"$i$i); 

    </
    select>
    Mach das doch dynamisch mit date & mktime... Wie weit muss das Datum denn einstellbar sein?

    Kommentar


    • #3
      Hm, damit:
      PHP-Code:
      <?
      $mon_array = array( "01"=>"31",
                          "02"=>"28",
                          "03"=>"31",
                          "04"=>"30",
                          "05"=>"31",
                          "06"=>"30",
                          "07"=>"31",
                          "08"=>"31",
                          "09"=>"30",
                          "10"=>"31",
                          "11"=>"30",
                          "12"=>"31");
      ?>
      <select>
      <?
      for($i = 0; $i < $mon_array[$mon]; $i++)
      {
          $tagesliste .= sprintf("<option value=\"%02d\">%02d</option>", $i, $i);
      }
      ?>
      </select> 
      <?
      wird zwar ein Pulldown erzeugt, aber es ist leer...

      Das ganze hat den Zweck:
      In der MySQL-Datenbank sind Geburtsdaten drin.
      Über Pulldown soll man nun einstellen können, welche man sehen möchte.
      Beispiel:
      So soll es dann funktionieren:
      Heute ist der 12.10.
      Ich möchte wissen, wer heuer noch Geburtstag hat.
      Ich gebe also Monat 10 und Tag 12 via Pulldown ein, bei Start.
      Dann gebe ich Monat 12 und Tag 31 ein, bei Ende.
      Dann klicke ich auf einen Button und es werden mir alle Geburtstage in dem Zeitraum angezeigt.

      Mit normalen Pulldowns kann ich das, aber ich will ja dynamische, weil nicht jeder Monat gleich viele Tage hat...

      Javascript braucht mein Programm sowieso, also wenn es eine solche Lösung gibt, wär die auch ok (php wär mir aber lieber).

      Kommentar


      • #4
        Naja, du könntest ja ne Monatsansicht machen....
        Ich hätte das anders realisiert...

        mit date() + mktime()

        Kommentar


        • #5
          Hm?

          date() formatiert ein Datum, mktime() erzeugt ein Datum

          Wie kann man daraus ein Pulldown machen??

          Kommentar


          • #6
            PHP-Code:
            <?php
            if(!isset($_GET["month"])) $_GET["month"] = date("m");
            if(!isset(
            $_GET["year"])) $_GET["year"] = date("Y");

            $start mktime(0,0,0,$_GET["month"], 1$_GET["year"]);
            $end mktime(0,0,0,$_GET["month"]+10$_GET["year"]);

            ?>
            Das sollte dir helfen...

            Kommentar


            • #7
              Hm, danke, aber wo sind da die Tage?

              Und wo ist das Pulldown wo man month auswählen kann?

              Ich blick da nicht so ganz durch wo hier der Zusammenhang mit meinem Pulldown ist...

              Kommentar


              • #8
                Da ist auch derzeit kein Zusammenhang.
                Du machst einfach 2 Dropdowns (statisch):

                Name: month; Inhalt 1-12;
                Name: year; Inhalt 2005-?;

                Das Formular schickste dann per GET ab und dann sollte das gehen...

                Kommentar


                • #9
                  Aber warum year?
                  Das Jahr ist doch egal, man hat ja JEDES jahr Geburtstag.
                  Oder hab ich da was nicht mitbekommen?

                  Und wo sind die Tage hingekommen?
                  Ist zwar auch praktisch, wenn immer von heute bis zum Monatsende die Geburtstage angezegt werden, aber es soll ja genauer gewählt werden können, nicht nur die Monate, sondern auch die Tage...

                  Kommentar


                  • #10
                    dann erweiterst du das ganze um tage, sollte kein Problem sein
                    Ich habe einen ganzen Kalender realisiert und weiß, wovon ich rede

                    Kommentar


                    • #11
                      PHP-Code:
                      <html>
                          <body>
                              <select>
                      <?php
                      $gewünschterMonat 
                      2// Februar 2005
                      $anzahlTageImMonat = (int)(date('t'mktime200$gewünschterMonat1)));

                      foreach(
                      range(1,$anzahlTageImMonat) as $tag)
                          echo 
                      '<option>',  $tag'<option>';
                      ?>
                              </select>
                          <body>
                      </html>
                      Das jetzt vielleicht in einer Funktion verpacken und für alle Monate aufrufen und fertig.

                      Kommentar


                      • #12
                        Ok, ich hab das jetzt gemacht:
                        PHP-Code:
                        <?
                        if(!isset($_GET["day_a"])) $_GET["day_a"] = date("d");
                        if(!isset($_GET["month_a"])) $_GET["month_a"] = date("m");

                        if(!isset($_GET["day_e"])) $_GET["day_e"] = date("d");
                        if(!isset($_GET["month_e"])) $_GET["month_e"] = date("m");

                        if(!isset($_GET["year"])) $_GET["year"] = date("Y");

                        $start = mktime(0,0,0,$_GET["month_a"], $_GET["day_a"], $_GET["year"]);
                        $end = mktime(0,0,0,$_GET["month_e"], $_GET["day_e"], $_GET["year"]); 

                        echo date("Y-m-d",$start);
                        echo "
                        ";
                        echo date("Y-m-d",$end);

                        $zeit_tag = "
                            <option value='01'>01</option>
                            <option value='02'>02</option>
                            <option value='03'>03</option>
                            <option value='04'>04</option>
                            <option value='05'>05</option>
                            <option value='06'>06</option>
                            <option value='07'>07</option>
                            <option value='08'>08</option>
                            <option value='09'>09</option>
                            <option value='10'>10</option>
                            <option value='11'>11</option>
                            <option value='12'>12</option>
                            <option value='13'>13</option>
                            <option value='14'>14</option>
                            <option value='15'>15</option>
                            <option value='16'>16</option>
                            <option value='17'>17</option>
                            <option value='18'>18</option>
                            <option value='19'>19</option>
                            <option value='20'>20</option>
                            <option value='21'>21</option>
                            <option value='22'>22</option>
                            <option value='23'>23</option>
                            <option value='24'>24</option>
                            <option value='25'>25</option>
                            <option value='26'>26</option>
                            <option value='27'>27</option>
                            <option value='28'>28</option>
                            <option value='29'>29</option>
                            <option value='30'>30</option>
                            <option value='31'>31</option>
                        ";
                        $zeit_monat = "
                            <option value='01'>01</option>
                            <option value='02'>02</option>
                            <option value='03'>03</option>
                            <option value='04'>04</option>
                            <option value='05'>05</option>
                            <option value='06'>06</option>
                            <option value='07'>07</option>
                            <option value='08'>08</option>
                            <option value='09'>09</option>
                            <option value='10'>10</option>
                            <option value='11'>11</option>
                            <option value='12'>12</option>
                        ";

                        ?>
                        <form action="test_geb.php" >
                            <table>
                             <tr>
                                <td>von:</td>
                                <td>
                                    <table>
                                     <tr>
                                        <td>Tag</td>
                                        <td>Monat</td>
                                     </tr>
                                     <tr>
                                        <td><select name='day_a'><?=$zeit_tag?></select></td>
                                        <td><select name='month_a'><?=$zeit_monat?></select></td>
                                     </tr>
                                    </table>
                                </td>
                                <td></td>
                                <td>bis:</td>
                                <td>
                                    <table>
                                     <tr>
                                        <td>Tag</td>
                                        <td>Monat</td>
                                     </tr>
                                     <tr>
                                        <td><select name='day_e'><?=$zeit_tag?></select></td>
                                        <td><select name='month_e'><?=$zeit_monat?></select></td>
                                     </tr>
                                    </table>
                                </td>
                                <td></td>
                                <td><input type="submit" name="search_b" value="suchen" /></td>
                             </tr>
                            </table
                        </form>
                        ?>
                        Frage 1: Wie muss kann ich jetzt in eine entsprechende Abfrage machen?
                        Beispiel:
                        Ich will alle Geburtstage zwischen heute und 31. 11 wissen, wie muss ich da den query machen?
                        In der Datenbank ist ein Feld für das Geburtsdatum, es wird als date gespeichert in dem Format: 1984.08.26
                        Wie kann muss da der query lauten?

                        Frage 2: Jetzt sind aber wieder bei jedem Monat 31 Tage möglich im Pulldown. Es wird zwar jetzt entsprechend umgewandelt, zb 31.02 wird 03.03, aber ist das eine gute Lösung?

                        Kommentar


                        • #13
                          Zitat von seeker
                          PHP-Code:
                          <?php
                          ...

                          $zeit_tag "
                              <option value='01'>01</option>
                              <option value='02'>02</option>
                              <option value='03'>03</option>
                              <option value='04'>04</option>
                              <option value='05'>05</option>
                              <option value='06'>06</option>
                              <option value='07'>07</option>
                              <option value='08'>08</option>
                              <option value='09'>09</option>
                              <option value='10'>10</option>
                              <option value='11'>11</option>
                              <option value='12'>12</option>
                              <option value='13'>13</option>
                              <option value='14'>14</option>
                              <option value='15'>15</option>
                              <option value='16'>16</option>
                              <option value='17'>17</option>
                              <option value='18'>18</option>
                              <option value='19'>19</option>
                              <option value='20'>20</option>
                              <option value='21'>21</option>
                              <option value='22'>22</option>
                              <option value='23'>23</option>
                              <option value='24'>24</option>
                              <option value='25'>25</option>
                              <option value='26'>26</option>
                              <option value='27'>27</option>
                              <option value='28'>28</option>
                              <option value='29'>29</option>
                              <option value='30'>30</option>
                              <option value='31'>31</option>
                          "
                          ;
                          $zeit_monat "
                              <option value='01'>01</option>
                              <option value='02'>02</option>
                              <option value='03'>03</option>
                              <option value='04'>04</option>
                              <option value='05'>05</option>
                              <option value='06'>06</option>
                              <option value='07'>07</option>
                              <option value='08'>08</option>
                              <option value='09'>09</option>
                              <option value='10'>10</option>
                              <option value='11'>11</option>
                              <option value='12'>12</option>
                          "
                          ;

                          ...
                          ?>
                          wie elegant!
                          zu 2: vielleicht ähnlich wie in diesem post?:
                          http://www.phpfriend.de/forum/ftopic48366.html

                          ein richtiges datumfeld sollte so aussehen: YYYY-MM-DD [würde die abfrage per sql wohl vereinfachen]

                          Kommentar


                          • #14
                            Mein Datumsformat ist doch auch YYYY-MM-DD in der Datenbank, nur statt "-" hab ich "." genommen.

                            Danke für den Link, aber dort steht auch nicht, wie der query aussehen soll...

                            Wie soll den query jetzt aussehen?

                            Kommentar

                            Lädt...
                            X