• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Datumsabfrage in php

Status
Für weitere Antworten geschlossen.

P51D

Mitglied
Hallo zusammen

Ich habe auch noch ein weiteres Problem. Ich habe bei meiner Page eine Agenda, wo alle meine Termine aufgelistet sind. Jetzt möchte ich auch noch eine Seite machen, mit aktuellem. In dieser Seite will ich meine nächsten drei Termine anzeigen, welche in der Agenda schon definiert sind. Es sollen also die Termine aus der Agenda herausgelesen werden. Diese sollen sich auch automatisch aktualisieren, wenn der nächste Termin vorbei ist, sollen wieder die nächsten drei angezeigt werden usw.

Nun habe ich echt keine Ahnung, wie ich so etwas aufbauen könnte. Ich hoffen, ihr habt mir eine Lösung

Besten Dank

P51D
 
Wie speicherst du denn die Termine? Empfehlung: speicher sie in einer MySQL-Datenbanktabelle. Dann kannst Du die Termine wie du möchtest ausgeben.
 
bis jetzt besteht der "agenda-Teil" aus einem normalen HTML-File, in dem über eine Tabelle die einzelnen Termine gesetzt werden.

Du meinst, dass ich irgendwie eine Datenbank zuhilfe nehmen soll, bei der ich dann im Aktuell-Teil nur die 3 nächsten Termine und im Agenda-Teil alle Termine ausgeben kann, soll. Wobei der Agenda-Teil sich nicht undebing an einem Datum orientiern müsste.

kannst du mir einen Tipp geben, wo ich die "Grundlage" für das als eine Art Muster oder Anleitung finde?

Danke für die rasche Antwort

MFG
P51D
 
kotz, wie ich daten hasse.. hab auch grad die ganze zeit probleme damit. aber egal, als erstes brauchst du eine mysql-datenbank. wenn du ein filehosting-servie dingsbums da hast, muss du mal gucken, ob der auch mysql kann. ist aber eigentlich selbstverständlich. dann musst du noch eine tabelle in der datenbank erstellen, wo du dann datum und beschreibung des termins oder so reinpackst. dann machst du auf deiner anderen seite php code rein, der etwa wie folgt aussehen könnte(ich weiß, geht eleganter aber um diese uhrzeit....:mrgreen:):
PHP:
$host = "HOST(eigentlich immer localhost)";
$user = "BENUTZERNAME";
$pass = "PASSWORT";
$db = "NAME DER DATENBANK";
$link = mysql_connect($host, $user, $pass) or die ("Keine Verbindung zu der Datenbank möglich.");
$result = mysql_query("SELECT * FROM `TABELLENNAME`) or die(mysql_error());
mysql_select_db($db, $link);
for($i = 0, $i > 3, $i++){$row = mysql_fetch_assoc($result);
echo $row["SPALTENNAME"]
und schon solltest du dein ergebnis haben
 
um wieviele daten geht es denn, man kann das sicher schneller und einfacher über files lösen, wenn du nicht tausende von daten hast, die dann wirklich in eine datenbank gehören. du hast ja schon dateien, der aufbau ist notwendig.

datenbanken kümmern sich um viele daten, nicht um 1-2 hundert, es sei denn man mietet sich einen server, weil man 10 html dateien hochladen möchte :-D.
 
es geht um maximum 150 termine jährlich. Es werden erher durchschnittlich etwas knapp unter 100 sein.
Was könnte ich nun bei dieser "geringen" Menge machen?

mfg
P51D
 
gibt es denn einen datenaufbau der dateien, wo deine termine gespeichert sind.

prinzipiell geht das dann so:
man liest deine termine in ein array, sortiert das nach deinen wünschen und gibt die daten dann aus.

datenbank verneine ich in deinem fall deshalb, weil du offensichtlich deine termine irgendwo schon stehen hast (agenda). eine doppelte wartung (also in deinem bestehenden system plus neu in einer datenbank) scheint mir da umständlich. was du an vorteilen in einer datenbank gewinnst, verlierst du, weil du alle termine doppelt eintragen und warten musst.
 
ich habe mich wahrscheinlich nicht ganz klar ausgedrückt. Meine Seite ist noch im Aufbau, das heisst, die Termine sind noch nicht vollständig vorhanden. Ich müsste sie so oder so noch um einiges ergänzen. Wie würde ich das dann mit dem array machen? ich habe keine ahnung, wie das am schluss aussehen sollte.

P51D
 
dann könntest du sehr wohl über eine db nachdenken.
eine datei lässt sich mit dem befehl file() in ein array lesen. das file xyz.dat würde z.b. so aussehen:

Code:
datum1       text
datum2       text
datum3       text
datum4       text
datum5       text
.
.
.
der phpcode:
PHP:
$daten = file("xyz.dat");
würde dir ein array erzeugen, das so aussieht:
PHP:
daten[0] = 'datum1       text';
daten[1] = 'datum1       text';
daten[2] = 'datum1       text';
daten[3] = 'datum1       text';
daten[4] = 'datum1       text';
.
.
.
mit einem fwrite() befehl könnte man neue einträge immer hinten an die datei hängen, die letzten datensätze wären also immer die aktuellen. mit einer schleife könnte man die daten dann von hinten auslesen (rückwärts) und z.b. nach dem dritten durchlauf stoppen oder einträge als abgelaufen markieren oder wie man möchte.

vorteil:
* du sicherst ein file mir jedem x-beliebigen ftp-programm und hast alle daten.
* du brauchst keine datenbank und keine kenntnisse über datenbanken.
* es reicht ein simpler editor, um daten zu lesen oder zu editieren

nachteil:
die datenbank funktionen stehen dir nicht zur verfügung

ich persönlich arbeite mit beidem, datanbanken und files. solche fuddelsachen wie 500-1000 einträge (shoutbox, gästebuch etc) die nicht gross archiviert werden müssen, mache ich in files, weil sie viel schneller abgearbeitet werden und auf sie leichter zugegriffen werden kann.

bsp:
ich habe meine webseite auf ein filebased cms umgestellt und habe zugriffszeiten von 7 Datei(en) in 0.016006 Sek. mit einer datenbank war es um den faktor 5 - 10 langsamer (was auch logisch ist). ab 10.000 einträgen sähe das schon ganz anders aus...
 
Ich habe deine Anleitung wohl nicht ganz verstanden. Bei mir werden die Daten nicht aus der db herausgelesen.

Meine Datenbank heiss Agenda.dat und beinhaltet folgendes:
Code:
event1  07.12.2008    Adventskonzert        Kirche Wahlern
event2  11.12.2008    Adventskonzert        Kirche Wahlern
event3  14.12.2008    Adventskonzert        Kirche Guggisberg
event4  28.01.2008    Geburtstagsständli    Schwarzenburg
event5  17.02.2008    Geburtstagsständli    Schwarzenburg
event6  01.03.2008    Geburtstagsständli    Schwarzenburg

In meiner php-seite, in der die Daten angezeigt werden sollen, habe ich deinen code so eingefügt:
PHP:
$daten = file("agenda.dat");

Ich denke, ich habe irgendetwas übersehen oder falsch verstanden. Von arrays verstehe ich no so halbwegs etwas, aber mit Datenbanken siehts schon sehr düster aus. Kannst du mir das noch etwas genauer erklären?

mfg

P51D
 
ich gehe mal von einem TAB als trenner aus, dann kann dir folgender code helfen:
(nach eventzähler umgekehrt)
PHP:
$daten = file("agenda.dat");
$daten = array_reverse($daten); // reigenfolge umdrehen

$stop = 4; // bis welchem event soll gelistet werden
$trenner = "\t";

for($i = 0; $i < $stop; $i++)
{
    $werte = explode($trenner,$daten[$i]);
    echo $werte[0]." -> ".$werte[1]." -> ".$werte[2]."<br>";

}
wenn das ganze nach (umgekehrtem) datum sortiert ausgegeben werden muss, dann sollte dein code ca so aussehen:
PHP:
<?php

function cmpdatum($a,$b)
{
    if($a['datum']  == $b['datum']) return 0;
    return ($a['datum'] > $b['datum']) ? -1 : 1;
}

$daten = file("agenda.dat");
$daten = array_reverse($daten);

$stop = 4; // bis welchem event soll gelistet werden
$trenner = "\t";


for($i = 0; $i < $stop; $i++)
{
    $werte = explode($trenner,$daten[$i]);

    $datum = explode(".",$werte[1]);
    $datum1 = mktime(0,0,0,$datum[1],$datum[0],$datum[2]); // in ein ordentliches php-datum umwandeln

    $wert[$i]['event'] = $werte[0];
    $wert[$i]['datum'] = $datum1;
    $wert[$i]['datumswert'] = $werte[1];
    $wert[$i]['eintrag'] = $werte[2];
    $wert[$i]['wo'] = $werte[3];
}

usort($wert,"cmpdatum");

for($i = 0; $i < $stop; $i++)
{
    echo $wert[$i]['datumswert']." -> ".$wert[$i]['event']." -> ".$wert[$i]['eintrag']." -> ".$wert[$i]['wo']."<br>";
}

?>
 
Zuletzt bearbeitet von einem Moderator:
Danke für deine Hilfe, aber es will immer noch nicht funktionieren. Jetzt spuckt mir der Browser beim Test mehrere Fehlermeldungen aus:

Warning: file(agenda.dat) [webhosting24 - Login]: failed to open stream: No such file or directory in \\agenda.php on line 48

Warning: array_reverse() [webhosting24 - Login]: The argument should be an array in \\agenda.php on line 49

Warning: mktime() expects parameter 5 to be long, string given in \\agenda.php on line 60

Warning: mktime() expects parameter 5 to be long, string given in \\agenda.php on line 60

Warning: mktime() expects parameter 5 to be long, string given in \\agenda.php on line 60

Warning: mktime() expects parameter 5 to be long, string given in \\agenda.php on line 60
-> -> ->
-> -> ->
-> -> ->
-> -> ->

Bei Zeile 48 ist folgender Code:
PHP:
$daten = file("agenda.dat");

Bei Zeile 49 ist folgender Code:
PHP:
$daten = array_reverse($daten);

Und bei Zeile 60 noch der Teil:
PHP:
$datum1 = mktime(0,0,0,$datum[1],$datum[0],$datum[2]);

Anscheinend kann er die "agenda.dat" und das darausfolgende array nicht laden.
 
nun, den pfad zum file musst du natürlich richtig angeben, die anderen fehler ergeben sich daraus, dass kein file gefunden wird.

liegt dein agenda.dat z.b. im verzeichnis daten, muss der pfad so lauten:

$daten = file("daten/agenda.dat");
und ich gehe wie gesagt von tab als trennzeichen aus.

in welchem verzeichnis liegt deine php-datei und in welchem verzeichnis liegt die agenda.dat ?
solltest du ein anderes trennzeichen als tab verwenden, kannst du das mit
$trenner einstellen.

ps. ich habe den geposteten code hier jetzt erfolgreich getestet, er funktioniert also.
 
Zuletzt bearbeitet von einem Moderator:
das .php sowie das .dat-File sind im selben Verzeichnis. Ich habe das Datenbank-File in einem Excel erstellt und als txt mit TAB trennzeichen abgespeichert. anschliessen noch in ein .dat umgewandelt. Auch mit einer Pfadangabe wird die Datenbank nicht gefunden.
 
ich habe es doch noch hingekriegt. Habe allerdings noch eine Frage: Wie kann ich die Positionen der Spalten bestimmen, sodass alle immer gleich ausgerichtet sind. Momentan beziehen sie sich immer auf die vordere Spalte. Ich möchte am Schluss eine Art Tabelle haben.
 
diese werte enthalten die daten:

$wert[$i]['datumswert']
$wert[$i]['event']
$wert[$i]['eintrag']
$wert[$i]['wo']

die kannst du anordnen wie du willst, also auch in einer tabelle.

z.b.
PHP:
.
. das kennst du ja schon
.
usort($wert,"cmpdatum");

echo '<table>';

for($i = 0; $i < $stop; $i++)
{
    echo '<tr><td>'.$wert[$i]['datumswert']."</td><td>".$wert[$i]['event']."</td><td>".$wert[$i]['eintrag']."</td><td>".$wert[$i]['wo']."</td></tr>";
}

echo '</table>';
 
Jetzt wird das ganze schon in einer Tabelle angeortnet. Wie kann ich jetzt aber noch die grösse der Tabelle verändern? Ich will, dass die Spalten und Zeilen weiter auseinander sind. (Die Zeilen etwa 1.5 mal, die Spalten etwas mehr).
Danke für deine Hilfe
 
Besten Dank für eure Hilfe. Wie kann ich die Variable "stop" so definieren, dass das file mir automatisch alle Zeilen der Datenbank ausgibt. Für meine "Aktuell"-Seite ist der code perfekt. Und wie kann ich das array vorwärts ausgeben? Momentan listet es mir den Termin, der am weitesten in der Zukunft liegt zu oberst auf und den aktuellsten zu unterst. Einfach das reverse löschen geht nicht. Dann hat der mktime-Befehl Probleme.
 
alle zeilen:

PHP:
$stop = count($daten);
array vorwärts:
PHP:
function cmpdatum($a,$b)
{
    if($a['datum']  == $b['datum']) return 0;
    return ($a['datum'] > $b['datum']) ? 1 : -1;
}
der unterschied liegt hier:

vorher

return ($a['datum'] > $b['datum']) ? -1 : 1;

nachher
return ($a['datum'] > $b['datum']) ? 1 : -1;
 
Status
Für weitere Antworten geschlossen.
Zurück
Oben