Zur Navigation

Formular absenden und Geburtstag auslesen

1 tobi

Hallo zusammen,

worum gehst? Ich möchte ein Formular erstellen, welches Namen und Geburtsdatum an die DB sendet. z.B: Alex Meier 30.02.1990
Sollte eigentlich kein Problem seien. Die Frage die sich mir stellt, mit welchem Typ sollte ich das Datum in der DB speichern?

Nun zum Auslesen, ist es möglich, dass ich z.B am Anfang des Monats alle Personen aufgelistet bekomme, welche in dem Monat Geburtstag haben und zugleich auch das Alter mit errechnet und angegeben wird?

Also: Alex Meier hat am 30.02. Geburtstag und wird 20 Jahre alt (25.02.1990)

MfG tobi

25.01.2010 17:32

3 tobi

Hallo Jörg,

danke für die Info.
Mir ist nur jetzt ein anderer Gedanke in den Sinn gekommen, wenn ich alle Namen und Geburtsdaten via Formluar absende und speichere, dann brauche ich eine Ewigkeit (sind ca. 180 Namen).

Gäbe es die Möglichkeit wenn ich meine Liste als .csv speichere und diese dann irgendwie direkt in die DB importiere oder auf anderem Wege?
Macht erstens die Arbeit leichter und ich kann auch andere Infos (Name, Geburtsdatum, Adresse, Telefonnummer ...), welche in der Liste sind mit in die DB aufnehmen.

MfG tobi

26.01.2010 11:00

4 Jörg Kruse

In phpMyAdmin gibt es die Möglichkeit csv Dateien in Datenbanktabellen zu importieren

26.01.2010 11:34

5 tobi

Ok, diese habe ich anfangs nicht gefunden, daher habe ich gefragt.

Nun hat es funktioniert. Ich habe Testweise drei Namen mit Geburtsdatum (1999-01-30) in die DB importiert.

Nun möchte ich via Cronjob am 25. jeden Monats, dass ein PHP-Script aufruft, welches die Geburtstage des kommenden Monats anzeigt.

Aktuell schaut mein Script folgendermaßen aus.
<?php

//Datenbank verbinden
include ("../../zugang.php.inc");

echo "<p>Hallo zusammen, <br /><br />hier die aktuellen Geburtstagskinder des TTC`s der kommenden Monats ???: </p>\n";
			
//sql Befehl			
$sql = "
SELECT id, name, geburtsdatum FROM geburtstagsliste ";

$db_erg = mysql_query( $sql );
if ( ! $db_erg )

{
die('Ungültige Abfrage: ' . mysql_error());
}

$anzahl = mysql_num_rows($db_erg);
				
if ($anzahl == 0) {

echo "<p>In dem oben angegebenen Zeitraum gibt es keine Geburtstagskinder des TTC´s.</p>\n";

}
else {
		
$anzahl = 1;	
					
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
					{
					
echo "". $zeile['name'] ."\n";
echo "". $zeile['geburtsdatum'] ."\n";
echo "<br />\n";

$anzahl++;
}
				
mysql_free_result( $db_erg );
				
}

// Datenbank schließen
mysql_close($link);

?>

</body>
</html>


Nun stellt sich mir die Frage wie ich immer den kommenden Monat definieren kann? Und wie dann auch nur die Geburtstage aus der DB für den jeweiligen (fälligen) Monat angezeigt werden.

Die Ausgabe schaut nun folgendermaßen aus:
Hallo zusammen,

hier die aktuellen Geburtstagskinder des TTC`s der kommenden Monats ???:
Heinz 1990-02-10
Fritz 1987-05-04
Karl 1981-08-25

MfG tobi

26.01.2010 17:42

7 tobi

Hallo Jörg,

ich habe nun an meinem Script ein wenig weitergemacht und auch experimentiert.

<?php

$monate = array(
1=>"Januar",
2=>"Februar",
3=>"März",
4=>"April",
5=>"Mai",
6=>"Juni",
7=>"Juli",
8=>"August",
9=>"September",
10=>"Oktober",
11=>"November",
12=>"Dezember");
$monat = date("n") + 1;

//Datenbank verbinden
include ("../../zugang.php.inc");

echo "<p>Hallo zusammen, <br /><br />hier die aktuellen Geburtstagskinder des TTC`s des kommenden Monats: $monate[$monat]</p>\n";
			
//sql Befehl			
$sql = "
SELECT id, name, vorname, geburtsdatum FROM geburtstagsliste WHERE MONTH(geburtsdatum) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH)) ORDER BY geburtsdatum";

$db_erg = mysql_query( $sql );
if ( ! $db_erg )

{
die('Ungültige Abfrage: ' . mysql_error());
}

function date_mysql2german($date) {
$d    =    explode("-",$date);
    
return    sprintf("%02d.%02d.%04d", $d[2], $d[1], $d[0]);
}

$anzahl = mysql_num_rows($db_erg);
				
if ($anzahl == 0) {

echo "<p>In dem oben angegebenen Zeitraum gibt es keine Geburtstagskinder des TTC´s.</p>\n";

}
else {
		
$anzahl = 1;	
					
while ($zeile = mysql_fetch_array( $db_erg, MYSQL_ASSOC))
					{
	
$expDate = explode(" ",$zeile['geburtsdatum']);	
	
echo "". $zeile['vorname'] ." \n";
echo "". $zeile['name'] ." hat am \n";

echo "". date_mysql2german($expDate[0])." ".substr($expDate[1],0,5)." Geburtstag und wird \n";
echo "???? Jahre alt\n";

echo "(". date_mysql2german($expDate[0])."".substr($expDate[1],0,5).")\n";
echo "<br />\n";

$anzahl++;
}
				
mysql_free_result( $db_erg );
				
}

// Datenbank schließen
mysql_close($link);

?>

</body>
</html>

meine Ausgabe schaut nun folgendermasen aus:
Hallo zusammen,

hier die aktuellen Geburtstagskinder des TTC`s des kommenden Monats: Februar
Fritz Hube hat am 03.02.1936 Geburtstag und wird ???? Jahre alt (03.02.1936)
Karl Schaudel hat am 16.02.1942 Geburtstag und wird ???? Jahre alt (16.02.1942)
etc.

nun möchte ich, dass
- die ???? durch das genau Alter ersetzt werden
- bei dem Datum die letzten 4 Ziffern ausgeblendet werden, aber nur bei dem Datum welches nicht in der Klammer steht.
- und die Reihenfolge sollte richtig seien, also chronolgisch vom ersten bis zum letzten des Monats.

MfG tobi

27.01.2010 19:53

8 Jörg Kruse

- die ???? durch das genau Alter ersetzt werden

Das kannst du noch mit in die Abfrage packen

(YEAR(CURDATE()) - YEAR(geburtsdatum)) AS alter

bei dem Datum die letzten 4 Ziffern ausgeblendet werden, aber nur bei dem Datum welches nicht in der Klammer steht.

Da musst du die Argumente von substr() entsprechend anpassen

- und die Reihenfolge sollte richtig seien, also chronolgisch vom ersten bis zum letzten des Monats.

Dazu fragst du noch den Tag ab

DAYOFMONTH(geburtsdatum) AS geburtstag

Dann kannst du weiter hinten danach sortieren

ORDER BY geburtstag

27.01.2010 22:38 | geändert: 27.01.2010 22:39

9 tobi

bekomme Ungültige Abfrage: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

wenn meine sql anweisung so aussieht:
//sql Befehl			
$sql = "
SELECT id, name, vorname, geburtsdatum FROM geburtstagsliste WHERE MONTH(geburtsdatum) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH)) (YEAR(CURDATE()) - YEAR(geburtsdatum)) AS alter DAYOFMONTH(geburtsdatum) AS geburtstag  ORDER BY geburtstag";

muss ich da noch AND hinzufügen?

28.01.2010 19:56

10 Jörg Kruse

alter und geburtstag sind keine Bedingungen, sondern gewissermaßen Datenfelder, die du abfragst

SELECT id, name, vorname, geburtsdatum, (YEAR(CURDATE()) - YEAR(geburtsdatum)) AS alter, DAYOFMONTH(geburtsdatum) AS geburtstag  
FROM geburtstagsliste
WHERE MONTH(geburtsdatum) = MONTH(DATE_ADD(CURDATE(),INTERVAL 1 MONTH))
ORDER BY geburtstag

28.01.2010 21:18