Geburtsdatum für Teilnehmerverzeichnis

Pastor0345

Grünschnabel
Hallo Leute! Hab mal wieder eine Denkblockade im Kopf und würde mich freuen wenn ihr mir helfen könntet. Ich habe ein Teilnehmerverzeichnis worin die Daten der einzelnen Teilnehmer ausgelesen werden. Dazu habe ich noch ein Formular mit dem ich die einzelnen Teilnehmer eintragen kann. Nur irgendwie scheitere ich vollkommen an dem Geburtsdatum, da ich noch so gut wie keine Erfahrungen mit MYSQL und Datumseingaben besitze. Will das GEBURTSDATUM per Dropdownmenü auswählen und in meiner Datenbank abspeichern. Hab nur irgendwie keine Ahnung wie ich das anstellen soll. Für eure Hilfe wäre ich euch sehr dankbar!
 
Entweder du berechnest dir aus deinen eingaben einen Timestamp und speicherst den als Int(10) weg... oder du speicherst es dir in einem Format weg, in dem du es immer noch gut sortieren kannst: z.b: YYYYMMDD oder du schaust dir auf mysql.de an, wie man das Date-Format benutzt ;-)
 
man kann doch eigentlich auch direkt mit varchar speichern. man nimmt dann zb 07.10.90 und ruft das dann aus. zur weiterverarbeitung kann man das ja dann zb so teilen:
PHP:
//datum aus DB holen
$date= mysql...
list($tag, $monat, $jahr) = explode(".", $date);
dann hat man die cvariablen $tag, $monat, $jahr und kann die dann weiter verarbeiten
 
Hallo!

Mit den DATE-Formaten von MySQL habe ich mich noch nie auseinander gesetzt.
Aber unter PHP würde ich zuerst das angegeben Datum mit checkdate() auf seine Gültigkeit prüfen (es könnte ja jemand z.b. den 30.02. angeben ;) ) und bei Erfolg mit mktime() in einen Timestamp umwandeln und in der Datenbank als solchen speichern.
Die Darstellung bei der Ausgabe kannst Du dann mit date() beliebig formatieren.

Gruss Dr Dau
 
Auf jeden Fall empfehle ich dir die Verwendung eines Timestamps oder den DATE-Type in MySQL. Beides ist einfach anzuwenden und einfach umzuformatieren. Von einer Speicherung im Format DD.MM.YYYY rate ich dir dringend ab, da du mit diesen Werten in der Datenbank nicht mehr rechnen und sortieren kannst.
 
Danke für die Tips. Aber wenn ich denn Timestamp verwende komm ich denn da nicht in einen Konflikt wenn ich ein Datum vor dem 1.1.1970 habe? Soll ja ein Feld für das Geburtsdatum sein.
 
Ach so? Der berechnet mir sozusagen den Timestamp von allen Datums? Auch wenn ich jetzt sozusagen ein Geburtsdatum von 1901 oder so habe? Auch wenn das natürlich bestimmt nicht der Fall sein wird! ;)
 
Ich hatte mich auch mal damit beschäftigt und folgende Lösung ausgearbeitet:

In der Tabelle sind die Geburtstagsdaten im DATE-Format gespeichert. Die Daten werden im Query geholt und mittels Schleife und if-Konstrukt abgebildet. Im Verarbeitungsskript werden dann noch Eingaben via checkdate();-Funktion (damit keiner 31.02.xxxx eingibt) überprüft. Sicher nix professionelles aber vielleicht bringts ja nen Denkanstoß :D

Auschnitt für den Geburtstag:
PHP:
echo "<label for=\"gebi\">Geburtstag</label>";
//Geburtstagspr&uuml;fung
  $connection = new datenbank($db_host, $db_user, $db_pass, $db_name);
  $connection->datenbankQuery("SELECT
  DATE_FORMAT(`gebi`,'%e') AS tag
  FROM user
  WHERE bid = ".$_REQUEST['id']."");
  echo 'Tag ';
  echo "<select name=\"tag[]\" class=\"filter\">";
  $ausgabe2 = $connection->ressourceHolen();
  for ($i = 1; $i <= 31; $i++) 
  {
  if ($ausgabe2[tag] == $i)
  {
  echo "<option value=\"$ausgabe2[tag]\" selected=\"selected\">$ausgabe2[tag]</option>";
  }
  else
  {
  echo "<option value=\"$i\">$i</option>";  
  }
  }
  echo '</select>';
  $connection->datenbankQuery("SELECT
  DATE_FORMAT(`gebi`,'%c') AS monat
  FROM user
  WHERE bid = ".$_REQUEST['id']."");
  echo ' Monat ';
  echo "<select name=\"monat[]\" class=\"filter\">";
  $ausgabe2 = $connection->ressourceHolen();
 
  for ($i = 1; $i <= 12; $i++) 
  {
  switch ($i) 
  {
  case $i==1:        $i2 = "Januar";            break;
  case $i==2:        $i2 = "Februar";           break;
  case $i==3:        $i2 = "M&auml;rz";         break;
  case $i==4:        $i2 = "April";             break;
  case $i==5:        $i2 = "Mai";               break;
  case $i==6:        $i2 = "Juni";              break;
  case $i==7:        $i2 = "Juli";              break;
  case $i==8:        $i2 = "August";            break;  
  case $i==9:        $i2 = "September";         break;
  case $i==10:       $i2 = "Oktober";           break;  
  case $i==11:       $i2 = "November";          break;
  case $i==12:       $i2 = "Dezember";          break;
  }
  switch ($ausgabe2[monat]) 
  {
  case $ausgabe2[monat]==1:        $i3 = "Januar";            break;
  case $ausgabe2[monat]==2:        $i3 = "Februar";           break;
  case $ausgabe2[monat]==3:        $i3 = "M&auml;rz";         break;
  case $ausgabe2[monat]==4:        $i3 = "April";             break;
  case $ausgabe2[monat]==5:        $i3 = "Mai";               break;
  case $ausgabe2[monat]==6:        $i3 = "Juni";              break;
  case $ausgabe2[monat]==7:        $i3 = "Juli";              break;
  case $ausgabe2[monat]==8:        $i3 = "August";            break;  
  case $ausgabe2[monat]==9:        $i3 = "September";         break;
  case $ausgabe2[monat]==10:       $i3 = "Oktober";           break;  
  case $ausgabe2[monat]==11:       $i3 = "November";          break;
  case $ausgabe2[monat]==12:       $i3 = "Dezember";          break;
  }    
  if ($ausgabe2[monat] == $i)
  {
  echo "<option value=\"$ausgabe2[monat]\" selected=\"selected\">$i3</option>";
  }
  else
  {
  echo "<option value=\"$i\">$i2</option>";  
  }
  }
  echo '</select>';
  $connection->datenbankQuery("SELECT
  DATE_FORMAT(`gebi`,'%Y') AS jahr
  FROM user
  WHERE bid = ".$_REQUEST['id']."");  
  echo ' Jahr ';
  echo "<select name=\"jahr[]\" class=\"filter\">";
  $ausgabe2 = $connection->ressourceHolen();
  for ($i = 1940; $i <= 2005; $i++) 
  {
  if ($ausgabe2[jahr] == $i)
  {
  echo "<option value=\"$ausgabe2[jahr]\" selected=\"selected\">$ausgabe2[jahr]</option>";
  }
  else
  {
  echo "<option value=\"$i\">$i</option>";  
  }
  }
  echo '</select>';
   
echo "</p>";
 
Zuletzt bearbeitet:
Pastor0345 hat gesagt.:
Ach so? Der berechnet mir sozusagen den Timestamp von allen Datums? Auch wenn ich jetzt sozusagen ein Geburtsdatum von 1901 oder so habe? Auch wenn das natürlich bestimmt nicht der Fall sein wird! ;)
Ja, wenn das Datum vor 1970 liegt, wird ein negativer Timestamp errechnet (also mit einem "-" davor ;) ).
Windows kann damit (warum auch immer) nicht umgehen, für Linux ist es aber kein Problem.
Dieses dürfte (so denke ich) auch ein weiterer Grund (neben der Sicherheit, der Stabilität, der Kosten...... ) sein, warum die meisten Hoster Linux einsetzen. ;)
Problematisch wird es aber bei Historischen Daten...... Jesus z.b. soll ja "kurz vor" 1901 geboren sein. ;)
Für den normalen Gebrauch, z.b. die Geburtsdaten seiner Mitglieder, sollte 1901 aber völlig ausreichend sein.
Gibt zwar auch Leute die älter sind, aber diese sind da schon die Ausnahme..... für diese würde ich als Timestamp 0 eintragen und bei der Ausgabe einfach nur sagen "Der User ist xx Jahre alt oder älter.". ;)

Ach ja, checkdate() berücksichtigt bei der Prüfung auch ob der 29.02. ein gültiges Datum ist..... also ob das angebene Jahr ein Schaltjahr war. ;)
 
Zurück