[PHP&MySQL] Geburtstagskinder auslesen

TS7

Well-known member
ID: 251056
L
22 September 2006
374
20
Hi,
ich habe folgendes Script gebastelt, was leider nicht funktioniert.

Die Geburtstags Angaben (dd.mm.jjjj) wurden in dem Feld "Geburtstag" gespeichert.

PHP:
        $datum=date("d.m.");
        $query = "SELECT Vorname, Nachname, Geburtstag FROM Mitglieder WHERE Geburtstag = '$datum' ORDER BY Vorname ASC";  
           $result1=mysql_query($query) or die("Anfrage fehlgeschlagen: " . mysql_error());
        echo $datum;
    if ($result1)
    {
         $datum1 = date("d.m.Y");
         print "<table border=\"0\" cellspacing=\"0\" cellpadding=\"0\" WIDTH=\"70%\" >\n";         
         print "<tr>";
           print "<td colspan=\"5\">Heute am ".$datum1." haben folgende Personen Geburtstag:</td>";
         print "</tr>";

    while ($dataset1 = mysql_fetch_array($result1))
       {
            print "<tr>";
         print "<td colspan=\"5\"><br /></td>";
         print "</tr>";
         print "<tr>";
         print "<td width=\"20\"></td>";
         print "<td width=\"1\"><li></li></td>";
         print "<td width=\"20\">".$dataset1['Vorname']."</td>";
         print "<td width=\"20\">".$dataset1['Nachname']."</td>";
         print "<td width=\"5\">pic</td>";
         print "</tr>\n";
        }
        
         $count1 = mysql_num_rows($result1);
         print "</table>\n";
         echo "<br />";
        }
Der Fehler liegt in der Select Anweisung.

Wäre wunderbar wenn mir da jemand hift.

Gruß
 
schau mal, ob Du die Abfrage nicht einfach auch so schreiben kannst:


WHERE DAY(Geburtstag) = DAY(CURDATE())
AND MONTH(Geburtstag) = MONTH(CURDATE()) ;
 
ich muss ja den aktuellen Tag und Monat mit der Datenbank vergleichen und aufrufen wenn sie übereinstimmen.

und wenn ich statt:
PHP:
$datum=date("d.m.");

das hier mache:
PHP:
 $datum=date("%e.%c.");

gibt er mir unter echo folgendes aus:
%Europe/Berlin.%2008-02-20T07:43:37+01:00.

und das Geburtstagskind wird nicht angezeigt.

Überrings die Geburtstage stehen in einem Varchar Feld.

oder habe ich was falsch verstanden
 
Zuletzt bearbeitet:
VARCHAR ... hm,

dann kannst Du ja an Dein Datum ein % - Zeichen anhängen und mit LIKE suchen ?

$datum=date("d.m.");
$search = $datum . '%' ;

...
$query="'SELECT...WHERE geburtstag LIKE '$search' ORDER ..." ;
 
schade er gibt nix aus.
und
echo = 20.02.%

Ich dachte auch schon an einen Platzhalter leider hat "%" und "____" vier unterstriche nicht funktioniert
 
Überrings die Geburtstage stehen in einem Varchar Feld.
Wieso, wenn ich fragen darf ? Wenn es ein Tag ist, also ein Datum, dann muss das Feld auch vom Typ DATE sein.

Ansonsten, so wie es jetzt is, kannst du eben die Geburtstagskinder holen, wie transversalis schon gesagt hat. Das muss funktionen, wenn du im Format dd.mm.yyyy in deine VARCHAR-Spalte eingetragen hast:
PHP:
$date = date("d.m.");
Code:
SELECT * FROM table WHERE birthday LIKE '$date%'
edit:
Ok, wäre das ja geklärt. Bleibt die Frage, warum VARCHAR.
 
wenn sich mitglieder anmelden geben die das GebDatum manuell ein und so habe ich es auch gespeichert.

Ist denn das andere Verfahren besser?
Wenn ja wie kann ich das umsetzen?
 
wenn sich mitglieder anmelden geben die das GebDatum manuell ein und so habe ich es auch gespeichert.
Wenn du das Format nicht kontrollierst, dann kannst du die Daten auch nicht so einfach auswerten. Es gibt Datumsfunktionen (siehe Post #4), die du mit komischen VARCHAR-Felder nicht benutzen kannst.
Ist denn das andere Verfahren besser?
Ja. Das Ding, was du benutzt, ist eine Datenbank und du solltest mit ihr umgehen können, wenn du sie benutzt !
Das "andere Verfahren" ist nicht besser, sondern es ist richtig.
Wenn ja wie kann ich das umsetzen?
Stelle in der Struktur die Spalte auf den Typ DATE um (mach dir aber ne Sicherung vorher, du musst die Daten wohl alle umschreiben !)
Aber Achtung: Du kannst dann keine Werte wie "4.5.2006" mehr eintragen (die DB intepretiert das als 20. Mai 2004), sondern musst immer im Format Y-m-d, also "2006-05-04" eintragen.

Danach kannst du auch Datumsfunktionen benutzen, da die DB mit dem Datum (singl. f. Daten) auch als Datum (Tagangabe) arbeiten kann.
 
Zuletzt bearbeitet: