selfhtml.de - Alles für den Webmaster!

 

Anzeige: Goneo - Du machst das Web!

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Unvollständiges Datum = falsche Ausgabe

Autor: FelixF
Datum: 19.08.2010 12:10:55

Hallo,
es tut mir Leid, schon wieder ein Posting zu erstellen, aber ich muss mich gerade ein bisschen mit meiner Webseite beeilen. Doch leider hat mein "Auftraggeber" (ich mache das ganze freiwillig) immerwieder neue Ansprüche. Jetzt möchte er einen Geburtstagskalender haben, den ich auch hatte, nur möchte er jetzt auch neue Geburtstage eintragen können, weshalb ich die Daten aus einer Textdatei in eine Datenbank verlagert habe.
Jetzt habe ich allerdings zwei Probleme: 1. Ich habe alle Geburtstage ohne Jahr bekommen, d.h. ein Datum sieht wie folgt aus 01.01. Kann ich damit trotzdem einen _sinnvollen_ Timestamp erzeugen, mit dem ich auch rechnen kann?
2. Wenn ich versuche die Daten wieder auszugeben, wird _immer_ auf den else-Zweig verwiesen, auch wenn ein passendes Datum in der Datenbank vorhanden wäre, warum? Gibt es einen SQL-Befehl mit dem ich dieses Datumsformat sortieren kann? Wenn ich einen Timestamp verwenden würde, dann könnte ich "ORDER BY xxx" verwenden, aber wenn ich das jetzt anwende, dann sortiert er mir nur nach dem Tag, anstatt auch den Monat mit einzubeziehen.

<?php
$timestamp = time();
$datum = date("d",$timestamp).".".date("m",$timestamp);
$sql_geb = "SELECT * FROM geburtstage";
$ausgabe_geb = mysql_query($sql_geb);
while($row_geb = mysql_fetch_object($ausgabe_geb))
{
$geb_datum = explode(".",$row_geb->geburtstag);
#echo $geb_datum[0].".".$geb_datum[1]."=".$datum."<br />"; //zur Überprüfung
if($datum == $geb_datum[0].".".$geb_datum[1])
{
echo 'Herzlichen Glückwunsch '.$row_geb ->name;
}
else
{
echo 'Heute hat keiner Geburtstag.';
}
}
?>

DB Struktur
id|name|geburtstag

Ich hoffe ich habe mich deutlich ausgedrückt.
Danke für eure Hilfe
Felix



Anzeige: Goneo - Du machst das Web!

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Re: Unvollständiges Datum = falsche Ausgabe

Autor: xabbuh
Datum: 19.08.2010 13:23:05

> 1. Ich habe alle Geburtstage ohne Jahr bekommen, d.h.
> ein Datum sieht wie folgt aus 01.01. Kann ich
> damit trotzdem einen _sinnvollen_ Timestamp
> erzeugen, mit dem ich auch rechnen kann?

Du kannst allen Datum das gleiche Jahr geben. Altersberechnungen sind damit natürlich nicht sinnvoll möglich. Aber das sind sie auch ganz ohne Jahresangabe nicht.


> 2. Wenn ich versuche die Daten wieder auszugeben,
> wird _immer_ auf den else-Zweig verwiesen, auch
> wenn ein passendes Datum in der Datenbank
> vorhanden wäre, warum?


Hast du dir die Testausgabe mal angesehen. Fallen überhaupt Daten raus, bei denen die Abfrage true ergeben kann? Einfacher wäre es aber sowieso, die Geburtsdaten in einem Datumsformat (s. o.) zu speichern und in der Abfrage die Selektion der Datensätze auf den aktuellen Tag und Monat einzuschränken.

> Gibt es einen SQL-Befehl mit dem ich dieses Datumsformat
> sortieren kann? Wenn ich einen Timestamp verwenden würde,
> dann könnte ich "ORDER BY xxx" verwenden, aber wenn
> ich das jetzt anwende, dann sortiert er mir nur
> nach dem Tag, anstatt auch den Monat mit
> einzubeziehen.

Warum benutzt du dann nicht Timestamp oder Date als Spaltenformat?

Gruß



Anzeige: Goneo - Du machst das Web!

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Re: Unvollständiges Datum = falsche Ausgabe

Autor: FelixF
Datum: 20.08.2010 16:13:34

Hallo,

> Du kannst allen Datum das gleiche Jahr geben.
> Altersberechnungen sind damit natürlich nicht
> sinnvoll möglich. Aber das sind sie auch ganz
> ohne Jahresangabe nicht.

So ich habe jetzt jeden Datum die Jahreszahl 2000 zugewiesen und sie als Timestamp gespeichert.
  
> Hast du dir die Testausgabe mal angesehen. Fallen
> überhaupt Daten raus, bei denen die Abfrage true
> ergeben kann? Einfacher wäre es aber sowieso, die
> Geburtsdaten in einem Datumsformat (s. o.) zu
> speichern und in der Abfrage die Selektion der
> Datensätze auf den aktuellen Tag und Monat
> einzuschränken.

Jaein, sie gibt mir ein Ergebnis aus und zwar jenes, welche oben in der Datenbank steht.
Nur das ist es ja nicht welches ich verwenden möchte.
  
> Warum benutzt du dann nicht Timestamp oder Date
> als Spaltenformat?

Weil ich mehr oder weniger mit Datenbanken und Mysql angefangen habe. Aber wenn ich die Datumsfunktion verwende, dann muss ich das Datum doch im amerikanischen Stil speichern oder? (JJJJ-MM-DD)

Meine Änderung:
<?php
$sql_geb = "SELECT * FROM geburtstage ORDER BY geburtstag DESC";
$ausgabe_geb = mysql_query($sql_geb);
while($row_geb = mysql_fetch_object($ausgabe_geb))
{
$geburtstag = $row_geb->geburtstag + ???

//hier müsste ich es jetzt irgendwie schaffen, die Differenz zwischen 2000 und heute dynamisch auszugleichen, oder gäbe es vielleicht noch eine ganz andere Variante?


echo $row_geb->name.'<br />';
if($geburtstag == time())
{
echo 'Herzlichen Glückwunsch '.$row_geb ->name;
}
else
{
echo 'Heute hat keiner Geburtstag.';
break;
}
}
?>

Also möchte eigentlich nur, dass an dem Tag wo jemand Geburtstag hat, eine Meldung angezeigt wird.

Liebe Grüße
Felix



Anzeige: Goneo - Du machst das Web!

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Re: Unvollständiges Datum = falsche Ausgabe

Autor: xabbuh
Datum: 20.08.2010 16:17:44

Du kannst die Anfrage so anpassen, dass sie nur die passenden Datensätze liefert:

SELECT * FROM geburtstage WHERE MONTH(geburtstag) = MONTH(CURDATE()) AND DAY(geburtstag) = DAY(CURDATE()) ORDER BY geburtstag DES


Anzeige: Goneo - Du machst das Web!

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Re: Unvollständiges Datum = falsche Ausgabe

Autor: FelixF
Datum: 20.08.2010 16:52:14

> Du kannst die Anfrage so anpassen, dass sie nur
> die passenden Datensätze liefert:
>
> SELECT * FROM geburtstage WHERE MONTH(geburtstag)
> = MONTH(CURDATE()) AND DAY(geburtstag) =
> DAY(CURDATE()) ORDER BY geburtstag DES

Jetzt hast du mich richtig verwirrt. Ich habe zwar den Befehl soweit verstanden, nur was muss ich jetzt in die Datenbank eintragen? Einen Timestamp, ein "deutsches" Datum (dd.mm.jjjj) oder ein amerikanisches Datum (jjjj-mm-dd).

Nur für mich zum mitdenken: Es werden jetzt die Daten herausgefiltert, bei denen der Monat der Geburtstage mit dem heutigen Monat UND der Geburts_tage_ mit dem heutigen Tag übereinstimmt und anschließend werden die Daten sortiert, richtig?

Verwirrte Grüße



Anzeige: Goneo - Du machst das Web!

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Re: Unvollständiges Datum = falsche Ausgabe

Autor: xabbuh
Datum: 20.08.2010 17:17:22

> Jetzt hast du mich richtig verwirrt. Ich habe
> zwar den Befehl soweit verstanden, nur was muss
> ich jetzt in die Datenbank eintragen? Einen
> Timestamp, ein "deutsches" Datum (dd.mm.jjjj)
> oder ein amerikanisches Datum (jjjj-mm-dd).

Eines der Datumsformate von MySQL (Date, Datetime oder Timestamp). Üblicherweise verwendet man für Geburtstage Date, da man für gewöhnlich nur an dem Datum und nicht der Uhrzeit der Geburt interessiert ist. Wenn du aber die Daten bereits als Timestamp in der Datenbank stehen hast, ist das auch okay.


> Nur für mich zum mitdenken: Es werden jetzt die
> Daten herausgefiltert, bei denen der Monat der
> Geburtstage mit dem heutigen Monat UND der
> Geburts_tage_ mit dem heutigen Tag übereinstimmt
> und anschließend werden die Daten sortiert,
> richtig?

Genau.



Anzeige: Goneo - Du machst das Web!

Anzeige: united-domains - Die ganze Welt der Domains

united domains - jetzt Wunsch-Domain sichern!

Einfache & schnelle Domain-Registrierung zu fairen Preisen ohne Einrichtungsgebühren. Mehr als 250 Domain-Endungen aus einer Hand inklusive E-Mail- & Web-Weiterleitung. Einzigartiges Domain-Portfolio zur bequemen & sicheren Verwaltung Ihrer Domain-Namen.

Jetzt Domain-Check bei united-domains!

Re: Unvollständiges Datum = falsche Ausgabe

Autor: FelixF
Datum: 22.08.2010 17:30:59

> Eines der Datumsformate von MySQL (Date, Datetime
> oder Timestamp). Üblicherweise verwendet man für
> Geburtstage Date, da man für gewöhnlich nur an
> dem Datum und nicht der Uhrzeit der Geburt
> interessiert ist. Wenn du aber die Daten bereits
> als Timestamp in der Datenbank stehen hast, ist
> das auch okay.

Ich habe mich jetzt doch für "Date" entschieden, vielleicht bekomme ich ja doch irgendwann mal die Jahreszahlen, dann brauche ich nicht erst die ganzen Timestamps neu berechnen, sondern brauche nur die Jahreszahlen in der DB ersetzen ;)

Vielen Dank nochmal.