Probleme mit Zeit und sowas

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • Probleme mit Zeit und sowas

    Hi Leutz,
    habe folgendes Problem:
    Habe das geburtsdatum einer Person in meiner Mysql-Datenbank in Tag, Monat, Jahr verteilt, quasi drei Spalten.

    Über mein Formular wo ein Benutzer diese eingibt werden alle Tage und monate, die einen Wert unter 10 haben (z.B September = 09) als 1, 2, 3....9 statt 01, 02, 03... 09 gespeichert.
    das liegt an folgenden Funktionen:

    PHP Code:
    function select_tag() {
            
                    
    $option '<option value="%s" %s>%s</option>';
                    
                    
    $selected[$this->tag] = "selected";
                    
                    
    $tagarr = array(
                            
    => "01",
                            
    => "02",
                            
    => "03",
                            
    => "04",
                            
    => "05",
                            
    => "06",
                            
    => "07",
                            
    => "08",
                            
    => "09",
                           
    10 => "10",
                           
    11 => "11",
                           
    12 => "12",
                           
    13 => "13",
                           
    14 => "14",
                           
    15 => "15",
                           
    16 => "16",
                           
    17 => "17",
                           
    18 => "18",
                           
    19 => "19",
                           
    20 => "20",
                           
    21 => "21",
                           
    22 => "22",
                           
    23 => "23",
                           
    24 => "24",
                           
    25 => "25",
                           
    26 => "26",
                           
    27 => "27",
                           
    28 => "28",
                           
    29 => "29",
                           
    30 => "30",
                           
    31 => "31");
                           
                           foreach(
    $tagarr as $value => $name) {

                            
    $options .= sprintf($option$value$selected[$name], $name);
                           }
                           return 
    $options;
            }
                           
            function 
    select_monat() {
            
                    
    $option '<option value="%s" %s>%s</option>';
                    
                    
    $selected[$this->monat] = "selected";
                    
                    
    $monatarr = array(
                            
    => "Januar",
                            
    => "Februar",
                            
    => "März",
                            
    => "April",
                            
    => "Mai",
                            
    => "Juni",
                            
    => "Juli",
                            
    => "August",
                           
    09 => "September",
                           
    10 => "Obtober",
                           
    11 => "November",
                           
    12 => "Dezember");
                           
                           foreach(
    $monatarr as $value => $name){
                                
    $options .= sprintf($option$value$selected[$value], $name);
                           }
                           return 
    $options;
            } 
    Verwende diese, weil ich im Daten-ändern-Formular Tag und Monat in ein Select Feld reinlade und den Monat nicht als Wert sondern mit Namen da drin haben will.
    Funzt soweit, hat aber einen Nachteil:

    Jetzt bastele ich grad an nem Birthday reminder. Dazu hab ich zusätzlich noch ne Spalte geburtstag in der Datenbank eingetragen.

    Sobald ein user seine daten ändert: wird $geburtstag aus $tag,$monat und $ jahr zusammengesetzt.

    Hat einer wie z.B. ich am 22.12.1984 geburtstag geht das und in $geburtstag steht hinterher 19841222

    Hat einer aber am 04.04 geburtstag steht da 198444... damit kann min birthday-reminder dann aber logischerweise nix anfangen.

    Was ist sinnvoller bzw. einfacher? Im birthday-reminder die werte tag, monat und jahr aus db holen und mit irgent einer funktion bei werten wie z.b. 4 ne null davorzuschreiben?

    Oder eher 2. die beiden funktionen select_tag und select_monat so umzuschreiben dass sie den wert aus der spalte geburtstag aufsplitten und bei änderung wieder richtig zurückgeben?

    Und welche Lösung auch immer, wie stell ich das an ?

    Mfg deschmiddi
    Geht net gibts net...

  • #2
    Warum benutzt du kein DATE, wie es jeder normale Mensch machen würde?

    Comment


    • #3
      wenn date 198444 in 19840404 ausgibt, gerne... ?!

      habs halt aufgesplittet, damit in meinem change formular die selectfelder so aussehen:

      <select name="user_tag" class="form">
      <option value="1" >01</option>
      <option value="2" >02</option>
      <option value="3" >03</option>
      <option value="4" >04</option>
      <option value="5" >05</option>
      <option value="6" >06</option>
      <option value="7" >07</option>
      <option value="8" >08</option>
      <option value="9" >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" selected>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>

      </select>
      .
      <select name="user_monat" class="form">

      <option value="1" >Januar</option>
      <option value="2" >Februar</option>
      <option value="3" >März</option>
      <option value="4" selected>April</option>
      <option value="5" >Mai</option>
      <option value="6" >Juni</option>
      <option value="7" >Juli</option>
      <option value="8" >August</option>
      <option value="9" >September</option>
      <option value="10" >Obtober</option>
      <option value="11" >November</option>
      <option value="12" >Dezember</option>

      </select>

      hängt mit den oben beschrieben funktionen zusammen...

      vielleicht könntest du mir ja deinen vorschlag mit date näher erläutern.
      Kenne den befehl, kenne es manual und hab hier auch noch nen schinken liegen aber keine idee wie ich beides birthday reminder und mein formular
      mit der selben strategie lösen soll
      Geht net gibts net...

      Comment


      • #4
        mein vorschlag ist es einfach mal ein DATE-Feld in der DB zu benutzen.

        dann hast du a) keine formatierungsprobleme, b) nur ein feld statt drei, c) kannst viele sachen direkt in mysql machen.

        eben so, wies gedacht ist! ;D

        Comment


        • #5
          ich werds mir mal angucken und mich dann wieder melden wenns net klappt
          Last edited by deschmiddi; 08-03-2004, 22:01.
          Geht net gibts net...

          Comment


          • #6
            also hab wie du gesagt hast in meiner spalte geburtstag es Datum mit der funktion date eingefügt, yyyy-mm-tt.

            die spalten tag, monat und jahr hab ich der einfachheit halber erstmal gelassen, und meine funktionen select_tag und select_monat ein bischen erweitert.

            Jetzt hab ich noch 2 Fragen:

            1: Wie kann ich aus den string $g = yyyy-mm-tt
            in $y = yyyy, $m = mm und $t = tt zerlegen?

            Dann könnte ich nämlich die beiden funktionen umstellen und auf die unnötigen Spalten verzichten.

            2: Zum Birthday-reminder verwende ich folgende abfrage:

            PHP Code:
            $query $db->query("SELECT 
                                                   userid, 
                                                   username, 
                                                   tag, 
                                                   monat, 
                                                   jahr 
                                                FROM 
                                                   
            {$config["tables"]["user"]} 
                                                WHERE 
                                                   MONTH(geburtstag) = MONTH(DATE_ADD(NOW(), INTERVAL 22 DAY)) 
                                                order by 
                                                  geburtstag 
                                                LIMIT 
                                                  0,3
                                                "
            ); 
            mit dieser Abfrage soll er mir alle Leute Anzeigen die von im Zeitraum von Heute + 20 Tage geburtstag haben aber irgentwie zeigt er mir alle die in dem jetzigen Monat geburtstag haben an. Heute is ja der 08.03 also möchte ich dass er mir alle bis einschließlich 28.03 anzeigt...
            vom 12.03 an bis 01.04 usw...
            wie muss ich das ändern?
            Geht net gibts net...

            Comment


            • #7
              Original geschrieben von deschmiddi
              MONTH(geburtstag) = MONTH(DATE_ADD(NOW(), INTERVAL 22 DAY))

              mit dieser Abfrage soll er mir alle Leute Anzeigen die von im Zeitraum von Heute + 20 Tage geburtstag haben aber irgentwie zeigt er mir alle die in dem jetzigen Monat geburtstag haben an. Heute is ja der 08.03 [...]
              eben.

              und 8.3. plus zwanzig tage ist 28.3., also immer noch monat märz.

              deine bedingung fragt also alle ab, bei denen der monat des geburtsdatums der märz ist.
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Comment


              • #8
                okay habs kapiert *g*
                jetzt wo dus sagst

                Aber mit DAY statt MONTH gehts net,
                da spuckt er mir folgendes aus:

                (116) SQL-Failure. Database respondet: You have an error in your SQL syntax near '(geburtstag) = DAY(DATE_ADD(NOW(), INTERVAL 20 DAY)) order by geburtstag LIMIT 0' at line 1
                Your query was: SELECT userid, username, tag, monat, jahr FROM oberstufe_user WHERE DAY(geburtstag) = DAY(DATE_ADD(NOW(), INTERVAL 20 DAY)) order by geburtstag LIMIT 0,3



                MIT DAYOFMONTH oder DAYOFWEEK gehts auch net, denn nehm ich beispielsweise statt 20 25 Tage so müsste sowohl einer der am 28.03 aus auch jemand der am 02.04 geburtstag hat angezeigt werden, spuckt aber jetzt nur noch es april-kind aus
                Last edited by deschmiddi; 08-03-2004, 23:45.
                Geht net gibts net...

                Comment


                • #9
                  Hab das prob mit der query gelöst...

                  so siehts dann aus... für alle die ebenfalls danach suchen:

                  PHP Code:

                  ("SELECT 
                    userid, 
                    username, 
                    tag, 
                    monat, 
                    jahr 
                  FROM 
                    
                  {$config["tables"]["user"]} 
                  WHERE 
                    date_format(geburtstag, '%m%d') 
                  between 
                    date_format(curdate(),'%m%d') 
                  and 
                    date_format(date_add(curdate(),interval 25 day),'%m%d') 
                  order by 
                    geburtstag 
                  LIMIT 
                    0,3
                  "
                  ); 
                  Last edited by deschmiddi; 09-03-2004, 01:25.
                  Geht net gibts net...

                  Comment

                  Working...
                  X