Datum vergleiche, Problem

  • [COLOR="DarkOrange"][SIZE="2"]Hallo :3

    ich bin immoment dabei ne Homepage zu machen
    auf der unteranderem kommende veranstaltungen aus einer
    Mysql tabelle ausgelesen werden,
    diese nach Datum ordnet und prüft ob das jeweilige Datum
    in der vergangenheit liegt, oder nicht.
    Außerdem werden maximal 5 angezeigt.

    Und da kommt mein Problem
    wen ich mehr als 5 Einträge die in der
    Zukunft liegen, in der Tabelle hab, zeigt er nicht die Daten
    die am nächsten an dem heutigen Tag liegen,
    sodern die am weitesten entfehrnt sind... (hoffe ihr versteht
    was ich meine xD)

    Hier mal mein momentaner Code:

    PHP
    <?php $date = date("Y-m-d");$connectionid = mysql_connect ($host, $user, $pass); if (!mysql_select_db ($db, $connectionid)){ die ("Keine Verbindung"); }  $sql="SELECT * FROM `veranstaltungen` ORDER BY `Datum` DESC LIMIT 0,5";$result=mysql_query($sql);while ($zeile=mysql_fetch_array($result)){	If ($zeile["Datum"] >= $date)	{	echo ''.$zeile["Datum"].'&nbsp;&nbsp;&nbsp;'.$zeile["Text"].'<br>';	}}?>

    Hoffe ihr könnt mir helfen :>

    MfG
    BizZi
    [/SIZE][/COLOR]

    [CENTER]
    [/CENTER]

  • [COLOR="Pink"]

    Zitat

    <?php

    $date = date("Y-m-d");


    Müsste das nicht wie folgt sein?

    Zitat

    <?php

    $date = date("DD-MM-YY");

    [/COLOR]

    [CENTER]
    [/CENTER]

  • [COLOR="DarkOrange"][SIZE="2"]eig nicht ... :O
    da die mysql tabelle unter "date" so speichert :O
    wen ichs so mach wie du es sagst zeigt er garnix mehr an :3
    [/SIZE][/COLOR]

    [CENTER]
    [/CENTER]

  • [FONT="Comic Sans MS"][COLOR="DeepSkyBlue"][SIZE="3"]Für mySQL und Datum reicht ein einfaches Varcharfeld, das so 20 Zeichen aufnimmt.
    Dann machste

    PHP
    date("d.m.Y H:i");


    somit bekommst du das Datum im Format wie dieses hier:
    24.06.2010 11:32
    So das speicherste in der DB.
    Und dein Problem liegt am auslesen.
    Du suchst dir einfach nur alle Datensätze aus der DB und lässt die ordnen.
    So und dank dem Datum DESC ordnet der die so, dass das größte Datum oben is oder so.
    Und wenn das grad der am weitesten entfernte Datensatz ist, so wird der den auch ausgeben, da der die der Reihe nach ausgibt und zwar so wie der die entsprechend deinen Kriterien aus der DB holt.
    Habe auch mal ein Newsscript gebastelt, das holt immer die neusten 5-10 Artikel und zeigt das neuste oben an und so.
    Wie du es eben gemacht hast.
    Sinnvoller bei dir wäre es, wenn du ne for-Schleife entsprechend deiner Vorstellung hast und dir dann eben das Datum selbst zusammenbastelst.
    zB so:


    So ists für dich sicher sinnvoller und dürfte dein Ergbenis bringen was du dir wünscht, egal wie viele Daten in der Zukunft liegen.
    Solange das Datum stimmt, passt es schon, musst das Script für dich halt anpassen, es können auch Fehler drin sein, weiß es jetzt nicht da ichs ncih testen konnte.

    Hoffe es hilft[/SIZE][/COLOR][/FONT]

  • [COLOR="DarkOrange"][SIZE="2"] internetfreak
    anscheind stimmt iw mit der for schleife net X:
    bin noch n ziemlicher newbi was php angeht :>
    hab noch nie mit for schleifen iw gemacht...
    hier ma der error

    Zitat

    Parse error: syntax error, unexpected T_INC, expecting ')' in E:\...\veranstaltungen.php on line 17

    wenn ich das so mach, dann ordnet er die daten aber nicht mehr nach dem datum, sondern nur
    nach der ersten Zahl, sprich dem Tag :X
    deswegen muss es ja in dem format Y-M-D sein, oder nich?

    felix
    is im prinzip das gleiche bloß das er
    die daten halt andersrum anordnet :X
    wen nu n datum dazwischen is was in der vergangenheit liegt
    zählt er das zu den 5 mit X:
    [/SIZE][/COLOR]

    [CENTER]
    [/CENTER]

  • [FONT="Comic Sans MS"][COLOR="DeepSkyBlue"][SIZE="3"]Sagte ja varchar mit etwa 20 Zeichen fürs Datum, dann kannste den Datumsstring beliebig formatieren.
    Und nach dem Datum ordnen is doch kein Problem, der Code der for-schleife enthält soweit alles, musst eig nurnoch ausgeben nach dem Query und sonst vll bissl anpassen wenn was nich ganz stimmen sollte.

    Zur for-Schleife, da hab ich ein Zeichen vergessen.
    Nach meinem letzten Kommentar noch ein

    Code
    }

    hin.
    Dann klappts, habe den Funktionsrumpf vergessen abzuschliessen xD
    PHP Fehlermeldungen sind meist eh so komisch, da sie nich immer die richtigen Infos haben, zB Zeilennummmer.
    Die Zeilennummer die enthalten is, die bezieht immer auf das wo der Fehler auftritt, aber der liegt meist obendrüber und dann musste suchen xD[/SIZE][/COLOR][/FONT]

  • [COLOR="DarkOrange"][SIZE="2"]das is ja das komische
    die hab ich gesetzt :o

    PHP
    <?php $tag = date("d");$restdatum = "." . date("m.Y");$connectionid = mysql_connect ($host, $user, $pass); if (!mysql_select_db ($db, $connectionid)){ die ("Keine Verbindung zur Datenbank"); } for ($i = 0; i < 5; i++){$datum = $tag . $restdatum;$Query = "SELECT Datum,Text FROM $db WHERE  datum = 'datum' " $result = mysql_query($Query);echo ''.$result.'&nbsp;&nbsp;&nbsp;'.'nix'.'<br>';$tag++;}?>

    hab ich was falsch gemacht? :X[/SIZE][/COLOR]

    [CENTER]
    [/CENTER]

  • [FONT="Comic Sans MS"][COLOR="DeepSkyBlue"][SIZE="3"]Ich würde mal speziell noch sagen du ersetzt das $db durch deine Table^^
    Denn anders wird der kein result finden und gibt eben nix aus.
    Ausserdem musste mal noch

    Code
    mysql_fetch_array($result);

    machen damit der das Result überhaupt findet was du wolltest.
    Sagte doch, das Script muss auf deine Bedürfnisse angepasst werden^^
    Und das Datumsformat muss stimmen, ansonsten im date() Aufruf ändern
    [/SIZE][/COLOR][/FONT]

  • [COLOR="DarkOrange"][SIZE="2"]ups :O
    hab ich total übersehen... xD
    is aber immer noch das gleiche resultat

    PHP
    <?php $date = date("Y-m-d");$tag = date("d");$restdatum = "." . date("m.Y");$connectionid = mysql_connect ($host, $user, $pass); if (!mysql_select_db ($db, $connectionid)){ die ("Keine Verbindung zur Datenbank"); } for ($i = 0; i < 5; i++){$datum = $tag . $restdatum;$Query = "SELECT Datum, Text FROM veranstaltungen WHERE datum = 'datum' " $result = mysql_query($Query);$zeile = mysql_fetch_array($result);echo ''.$zeile["Datum"].'&nbsp;&nbsp;&nbsp;'.'nix'.'<br>';$tag++;}?>

    habs so geändert wie du es gesagt hast :o
    der fehler bleibt aber, scheint wirklich
    als wen n fehler in der for schleife wäre... >.<
    die errors von php sind echt sowas von unnütz ...
    [/SIZE][/COLOR]

    [CENTER]
    [/CENTER]

  • Speicher doch das Datum im TimeStamp format. Das sind die Sekunden die seit dem 01.01.1970 vergangen sind.

    Kannst es dan mit Date(time(), "Y:D:M") z.b als Datum ausgeben.

  • [FONT="Comic Sans MS"][COLOR="DeepSkyBlue"][SIZE="3"]@yannik
    Date berechnet das Datum auch aus dem UNIX Timestamp.
    Er hat wohl einfach wie immer das Datumsformat nicht angepasst und daher nix von php bekommen.
    Ausserdem BizZi
    Du hast nichmal die Variable $datum genutzt, du hast nur nach dem String datum gexucht in der DB, kein Wunder dass kein Query funzt.

    [/SIZE][/COLOR][/FONT]

  • Aber ihr müsst bedenken das DATE nicht unendlich geht. Im gegensatz zum Unix-Timestamp. Desweiteren ist man durch den Timestamp bei weitem flexibler was die Ausgabe betrifft. Du kannst dir dadurch das Datum in jeglicher Form ausgeben lassen, die du möchtest. Da wie schon angesprochen hier die Sekunden seit dem 01.01.19.. weiß der Teufel gespeichert werden. Dieser Timestamp ist immer gültig und verfällt nie.

  • Das is so nich ganz richtig Ulle.

    Der Unix-Timestamp is sogar ziemlich anfällig. Es ist wahr, dass man da zwar alles gängige mit Datumsformatierungen erledigen kann, aber was ist mit Daten vor 1970?

    Außerdem gibt es das Jahr-2038-Problem, wo der Unix-Timestamp in der Tat verfällt weil 32 Bit überschritten werden.

  • Zitat von Lunatic;160589

    Das is so nich ganz richtig Ulle.

    Der Unix-Timestamp is sogar ziemlich anfällig. Es ist wahr, dass man da zwar alles gängige mit Datumsformatierungen erledigen kann, aber was ist mit Daten vor 1970?

    Außerdem gibt es das Jahr-2038-Problem, wo der Unix-Timestamp in der Tat verfällt weil 32 Bit überschritten werden.

    Die Frage ist nur in welchem Fall man ein Datum in eine Datenbank vor 1970 bzw.
    nach 2038 eintragen muss ;)

  • Zitat von Lunatic;160589

    Das is so nich ganz richtig Ulle.

    Der Unix-Timestamp is sogar ziemlich anfällig. Es ist wahr, dass man da zwar alles gängige mit Datumsformatierungen erledigen kann, aber was ist mit Daten vor 1970?

    Außerdem gibt es das Jahr-2038-Problem, wo der Unix-Timestamp in der Tat verfällt weil 32 Bit überschritten werden.

    Rate mal wieso es erst ab 1970 gerechnet wird. In diesem jahr wurde dererste MikroProzessor "erschaffen".

    Ich glaub nebenbei auch nicht das ein Programm / Script noch 28Jahre haltet.. ^^

  • Zitat von yannickmama;160830

    Rate mal wieso es erst ab 1970 gerechnet wird. In diesem jahr wurde dererste MikroProzessor "erschaffen".

    Ich glaub nebenbei auch nicht das ein Programm / Script noch 28Jahre haltet.. ^^


    Und nur aus dem Grund heißt er auch Unix-Timestamp und nicht MikroProzessor-Timestamp. :)

  • Es geht mir ja nicht darum zu zeigen warum der Unix-Timestamp ein Unix-Timestamp ist, sondern darum, dass er eben doch ziemlich anfällig ist.

    Zugegebenermaßen ist es Wahr dass die realen Anwendungsfälle für sowas ziemlich mager sind, allerdings gibt es Fälle. Besonders für das Jahr 2038 Problem gibt es bereits düstere Prophezeiungen.

    Aber für Kalendersysteme z.B. wäre es möglich, dass man die Daten vor 1970 benötigt. Allein wenn man danach googelt findet man viele Menschen die das brauchen.

    ~Luna

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!