Datumabhängige Datei in PHP einbinden
Hallo zusammen,
in Abhängigkeit vom Wochentag möchte ich eine bestimmte Datei anzeigen.
Nun hatte ich mir eine if else Anweisung gebaut nach dem Muster (abhängig), aber leider funktioniert das noch nicht - die Variable Tages-Nr. scheint aber richtig ausgelesen zu werden. Nur mit dem include gibt es Probleme ...
Was kann ich besser machen?
in Abhängigkeit vom Wochentag möchte ich eine bestimmte Datei anzeigen.
Nun hatte ich mir eine if else Anweisung gebaut nach dem Muster (abhängig), aber leider funktioniert das noch nicht - die Variable Tages-Nr. scheint aber richtig ausgelesen zu werden. Nur mit dem include gibt es Probleme ...
<?PHP
$heute = date("N");
// Ausgabe:1-2-3-4-5-6-7
if ($heute == '1') {
include('montag.php');
} elseif ($heute == '2') {
include('dienstag.php');
} elseif ($heute == '3') {
include('mittwoch.php');
} elseif ($heute == '4') {
include('donnerstag.php');
} elseif ($heute == '5') {
include('freitag.php');
} elseif ($heute == '6') {
include('samstag.php');
} elseif ($heute == '7') {
include('sonntag.php');
} else {
$text = "kein Treffer";
}
?>
Was kann ich besser machen?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 964718501
Url: https://administrator.de/contentid/964718501
Ausgedruckt am: 19.11.2024 um 17:11 Uhr
28 Kommentare
Neuester Kommentar
Hallo,
wie schon erwähnt nutzt man include ohne Klammern. Das PHP Handbuch mit den Funktionserklärung en ist hier die schnellst und beste Anlaufstelle.
Und dann solltest du dir noch den Befehl "Switch" ansehen. Währe hier die schönste Lösung da hier nicht jede "IF" Abfrage der Reihe nach abgearbeitet wird bis das Ergebnis passt.
wie schon erwähnt nutzt man include ohne Klammern. Das PHP Handbuch mit den Funktionserklärung en ist hier die schnellst und beste Anlaufstelle.
Und dann solltest du dir noch den Befehl "Switch" ansehen. Währe hier die schönste Lösung da hier nicht jede "IF" Abfrage der Reihe nach abgearbeitet wird bis das Ergebnis passt.
Servus
Keep it simple .
Grüße Uwe
Was kann ich besser machen?
da du ja den Wochentag als fortlaufenden integer vorliegen hast würde sich ja eigentlich gleich ein Array statt den langwierigen If else Abfragen und redundanten includes anbieten:<?php
$weekdays = array('montag','dienstag','mittwoch','donnerstag','freitag','samstag','sonntag');
$include_file = $weekdays[(intval(date('N'))-1)] . ".php";
file_exists($include_file) or die("File '$include_file' not found!");
include $include_file;
?>
Grüße Uwe
getdate() gibt erst mal generell Variablen vom Typ 'string' aus, Das siehst du im PHP-Manual an dem : string hinter der Funktionsdefinition.
Siehe demo tio.run
Wenn man Strings die in Zahlen umwandelbar sind mit einem Integer addiert, multipliziert usw. dann rechnet PHP damit automatisch (nimmt also intern eine Umwandlung des Strings in einen Integer vor), man könnte also das intval() zur Umwandlung des Strings in einen Integer weg lassen, finde ich aber persönlich unsauberer Stil.
Den Index ersetzt man nun einfach durch den Wert den date('N') liefert aber zusätzlich zieht man davon noch -1 ab da das Wochentags-Array ja 0-basiert ist und der erste Wochentag bei date('N') ja 1 ist . Jetzt verstanden?
Ich bin auch nicht täglich mit PHP unterwegs, muss mir da auch ab und zu mit dem Manual behelfen, das ist aber völlig normal wenn man zwangsweise zwischen x Sprachen hin und her springen muss, mit der Zeit entwickeln sich dann aber Muster die man von einer zur anderen Sprache übertragen kann.
Viel Erfolg weiterhin.
Grüße Uwe
Siehe demo tio.run
Wenn man Strings die in Zahlen umwandelbar sind mit einem Integer addiert, multipliziert usw. dann rechnet PHP damit automatisch (nimmt also intern eine Umwandlung des Strings in einen Integer vor), man könnte also das intval() zur Umwandlung des Strings in einen Integer weg lassen, finde ich aber persönlich unsauberer Stil.
und wie dann daraus die ausgeschriebenen Wochentage gelesen werden können - - - Kopf krat' zl ...
Das ist einfach, die Wochentage stehen in einem Array, jeder Array-Eintrag ist über seinen Index ansprechbar, also der erste über Index 0 der zweite über Index 1 usw. ($weekdays ... $weekdays[n]).Den Index ersetzt man nun einfach durch den Wert den date('N') liefert aber zusätzlich zieht man davon noch -1 ab da das Wochentags-Array ja 0-basiert ist und der erste Wochentag bei date('N') ja 1 ist . Jetzt verstanden?
Ich "schwöre", keep it simple versuche ich nicht nur dabei sondern auch täglich umzusetzen!!
Das verstehe ich, das wird aber mit der Zeit einfacher wenn einem ein größerer Satz der PHP Funktionen bekannt ist, oder man weiß wo man nachschlagen muss.Ich bin auch nicht täglich mit PHP unterwegs, muss mir da auch ab und zu mit dem Manual behelfen, das ist aber völlig normal wenn man zwangsweise zwischen x Sprachen hin und her springen muss, mit der Zeit entwickeln sich dann aber Muster die man von einer zur anderen Sprache übertragen kann.
Viel Erfolg weiterhin.
Grüße Uwe
Zitat von @wiesi200:
Da fällt mir ein:
https://www.php.net/manual/de/function.strftime.php
Sollte auch passen
Stimmt, da war doch noch was 🙂 👍.Da fällt mir ein:
https://www.php.net/manual/de/function.strftime.php
Sollte auch passen
Zitat von @colinardo:
Servus
Keep it simple .
Grüße Uwe
Servus
Was kann ich besser machen?
da du ja den Wochentag als fortlaufenden integer vorliegen hast würde sich ja eigentlich gleich ein Array statt den langwierigen If else Abfragen und redundanten includes anbieten:> <?php
> $weekdays = array('montag','dienstag','mittwoch','donnerstag','freitag','samstag','sonntag');
> $include_file = $weekdays[(intval(date('N'))-1)] . ".php";
> file_exists($include_file) or die("File '$include_file' not found!");
> include $include_file;
> ?>
>
Grüße Uwe
Moin,
das geht doch noch kürzer und sicherer (Vieleicht ändert ja mal jemand was und Sonntag ist Tag 0).
date("l") liefert für heute z.B. Monday.
Und strtolower macht daraus dann monday.
<?php
$include_file = strtolower(date("l") . ".php");
file_exists($include_file) or die("File '$include_file' not found!");
require $include_file;
Laut PHP-Doku sind die Klammern nicht notwendig, aber auch nicht falsch.
https://www.php.net/manual/de/function.require.php
Stefan
Zitat von @StefanKittel:
das geht doch noch kürzer und sicherer (Vieleicht ändert ja mal jemand was und Sonntag ist Tag 0).
Das sich die RFC dahingehend ändert glaube ich eher nicht . Wohl wahrscheinlicher das die Politik künftig ein Gendersternchen bei den Wochentagen einführt .das geht doch noch kürzer und sicherer (Vieleicht ändert ja mal jemand was und Sonntag ist Tag 0).
date("l") liefert für heute z.B. Monday.
Klar aber er wollte ja deutsche Wochentagsnamen , setlocale und strftime() macht das lokalisieren der Namen dann noch etwas kürzer ohne Array.setlocale(LC_TIME,"de_DE");
$include_file = strtolower(strftime("%A")) . ".php";
file_exists($include_file) or die("File '$include_file' not found!");
include $include_file;
Zitat von @colinardo:
Bei der RFC nicht, aber Microsoft sieht das anders...Zitat von @StefanKittel:
das geht doch noch kürzer und sicherer (Vieleicht ändert ja mal jemand was und Sonntag ist Tag 0).
Das sich die RFC dahingehend ändert glaube ich eher nicht . Wohl wahrscheinlicher das die Politik künftig ein Gendersternchen bei den Wochentagen einführt .das geht doch noch kürzer und sicherer (Vieleicht ändert ja mal jemand was und Sonntag ist Tag 0).
Konstante Wert Beschreibung
vbSunday 1 Sonntag
vbMonday 2 Montag
vbTuesday 3 Dienstag
vbWednesday 4 Mittwoch
vbThursday 5 Donnerstag
vbFriday 6 Freitag
vbSaturday 7 Samstag
Bei der RFC nicht, aber Microsoft sieht das anders...
VB und PHP haben ja auch nichts miteinander am Hut, PHP date('N') richtet sich nach ISO-8601.VB muss man dann auch sagen welches der erste Tag der Woche ist, dann stimmt auch das wieder nach dem Schema 1 = Montag 7 = Sonntag.
Debug.Print Format(Now, "w", vbMonday, vbFirstFourDays)
Zitat von @colinardo:
Ist eher eine Prinzip-Antwort.Bei der RFC nicht, aber Microsoft sieht das anders...
VB und PHP haben ja auch nichts miteinander am Hut, PHP date('N') richtet sich nach ISO-8601.Jemand mag das lesen und zu VB konvertieren und sich wundern.
Ich bleibe mein programmieren, allen Code-Dokus und allen internen Ausgaben, wie z.B. diese Dateinamen immer bei den englischen Begriffen aus Prinzip. Mich macht das deutsche VBA immer noch fuchsig.
Nichts war nur ein Einwand mit Erläuterung 😉.
Zum Bleistift (ohne obigen Code zu wiederholen, das einzubauen schaffst du auch selbst)
Wo ihr hier gerade so am Philosophieren über Datum, Zeit und verschiedene Sprachen seid. Wie lässt sich der Code anpassen, damit eine Datei nicht nur am entsprechenden Tag, sondern auch zu einer bestimmten Zeit angezeigt wird?
Sprich beispielsweise Mo 08:00 bis 12:59 Uhr 'montag1.pdf', 15:00-17:59 Uhr 'montag2.pdf' usw.
Geht das überhaupt?
Klar, holst du dir zusätzlich einfach die aktuelle Stunde und vergleichst sie entsprechend deinen ZeiträumenSprich beispielsweise Mo 08:00 bis 12:59 Uhr 'montag1.pdf', 15:00-17:59 Uhr 'montag2.pdf' usw.
Geht das überhaupt?
Zum Bleistift (ohne obigen Code zu wiederholen, das einzubauen schaffst du auch selbst)
date_default_timezone_set('Europe/Berlin');
$h = date('G');
if ($h >= 8 && $h < 13) {
echo "Mach was zwischen 8:00 und 13:00";
}
Alles
Ich frage mich immer, wobei ich kein Programmier-Held bin, wie Leute die nicht programmieren können durch das Leben mit Computern kommen.
Ich benutze diesen Code auf einigen servern.
Mit cron with eine Datei im Minutentakt aufgerufen und schaut ob es was zu starten gibt.
Dadurch benötige ich keine Datenbank oder aufwendige XML-Dateien.
crontab -e
Teil von cron.php
Dazu dann im Client-Verzeichnis diese Dateien.
Ich frage mich immer, wobei ich kein Programmier-Held bin, wie Leute die nicht programmieren können durch das Leben mit Computern kommen.
Wo ihr hier gerade so am Philosophieren über Datum, Zeit und verschiedene Sprachen seid. Wie lässt sich der Code anpassen, damit eine Datei nicht nur am entsprechenden Tag, sondern auch zu einer bestimmten Zeit angezeigt wird?
Sprich beispielsweise Mo 08:00 bis 12:59 Uhr 'montag1.pdf', 15:00-17:59 Uhr 'montag2.pdf' usw.
So nicht direkt.Sprich beispielsweise Mo 08:00 bis 12:59 Uhr 'montag1.pdf', 15:00-17:59 Uhr 'montag2.pdf' usw.
Ich benutze diesen Code auf einigen servern.
Mit cron with eine Datei im Minutentakt aufgerufen und schaut ob es was zu starten gibt.
Dadurch benötige ich keine Datenbank oder aufwendige XML-Dateien.
crontab -e
*/1 * * * * php /swh/clients/cron.php > /dev/null
Teil von cron.php
//check if a cron for this current time is defined and start it
function StartCronBasedOnTime()
{
global $cronLog;
$cronLog->ShowLog_Info("Start");
//every hour
//cron_d_*_*_00.php
$filename = "cron_d_*_*_" . date("i") . ".php";
IncludePHPLogged($filename);
//every day at 22:00
//cron_d_*_22_00.php
$filename = "cron_d_*_" . date("H") . "_" . date("i") . ".php";
IncludePHPLogged($filename);
//5th of each month at 22:00
//cron_d_05_22_00.php
$filename = "cron_d_" . date("d") . "_" . date("H") . "_" . date("i") . ".php";
IncludePHPLogged($filename);
//sunday at 22:00
//cron_w_0_22_00.php
$filename = "cron_w_" . date("w") . "_" . date("H") . "_" . date("i") . ".php";
IncludePHPLogged($filename);
$cronLog->ShowLog_Info("Start");
}
Dazu dann im Client-Verzeichnis diese Dateien.
cron_d_*_01_00.php
cron_d_*_03_00.php
cron_d_*_22_00.php
Zitat von @OKIDOKI:
@colinardo: sieht so einfach aus ... aber irgendwie muss doch vorher der Tag abgefragt werden, also doch der obige Code mit eingebaut werden, oder? Werde mich am WE damit mal auseinandersetzen ....
@colinardo: sieht so einfach aus ... aber irgendwie muss doch vorher der Tag abgefragt werden, also doch der obige Code mit eingebaut werden, oder? Werde mich am WE damit mal auseinandersetzen ....
Hast du wohl den Absatz dazu überlesen
Zum Bleistift (ohne obigen Code zu wiederholen, das einzubauen schaffst du auch selbst)
Die Tagesselektion steht ja schon weiter oben, brauchst du also nur 1 und 1 zusammen zählen und miteinander kombinieren.
Ich bau's jetzt absichtlich etwas langsam auf
Am einfachsten den Code wiederholen, nur blöd zu pflegen
Etwas schöner
oder
dann könnte man das noch in ein Array packen wenn du mehr Optionen hast.
könnte vielleicht der eine oder andere Tippfehler drinnen sein. Kanns grad ned vernünftig testen.
Aber das Grundprinzip sollte klar sein, hoffe ich.
Am einfachsten den Code wiederholen, nur blöd zu pflegen
<?php
date_default_timezone_set('Europe/Berlin');
$h = date('G');
if ($h >= 8 && $h < 13) {
setlocale(LC_TIME,"de_DE");
$include_file = strtolower(strftime("%A")) . ".php";
file_exists($include_file) or die("File '$include_file' not found!");
include $include_file;
}
else {
date_default_timezone_set('Europe/Berlin');
$h = date('G');
if ($h >= 8 && $h < 13) {
setlocale(LC_TIME,"de_DE");
$include_file = strtolower(strftime("%A")) . "1.php";
file_exists($include_file) or die("File '$include_file' not found!");
include $include_file;
}
?>
Etwas schöner
date_default_timezone_set('Europe/Berlin');
setlocale(LC_TIME,"de_DE");
$h = date('G');
if ($h >= 8 && $h < 13) {
$include_file = strtolower(strftime("%A")) . ".php";
}
else
{
$include_file = strtolower(strftime("%A")) . "1.php";
}
file_exists($include_file) or die("File '$include_file' not found!");
include $include_file;
oder
date_default_timezone_set('Europe/Berlin');
setlocale(LC_TIME,"de_DE");
$h = date('G');
if ($h >= 8 && $h < 13) {$sufix = ".php";}
else{$sufix = "1.php";}
$include_file = strtolower(strftime("%A")) . $sufix;
file_exists($include_file) or die("File '$include_file' not found!");
include $include_file;
dann könnte man das noch in ein Array packen wenn du mehr Optionen hast.
$sufix = array('.php','1.php');
date_default_timezone_set('Europe/Berlin');
setlocale(LC_TIME,"de_DE");
$h = date('G');
if ($h >= 8 && $h < 13) {$v = 1;}
else{$v = 2;}
$include_file = strtolower(strftime("%A")) . $sufix[$v];
file_exists($include_file) or die("File '$include_file' not found!");
include $include_file;
könnte vielleicht der eine oder andere Tippfehler drinnen sein. Kanns grad ned vernünftig testen.
Aber das Grundprinzip sollte klar sein, hoffe ich.
Ja genau das meinte ich mit den Optionen.
Wobei du, wenn du einfach nur hoch zählst nicht Mal das Array bräuchtest. Du dannst ja den Dateinamen auch aus 3 Teilen zusammen setzen.
Im Endeffekt ist's wichtig zu wissen wie man an so Probleme rann geht. Das verfeinern kommt dann Schritt für Schritt und der wachsenden Erfahrung.
Und das kann man dann auch auf andere Sprachen meistens anwenden.
Wobei du, wenn du einfach nur hoch zählst nicht Mal das Array bräuchtest. Du dannst ja den Dateinamen auch aus 3 Teilen zusammen setzen.
Im Endeffekt ist's wichtig zu wissen wie man an so Probleme rann geht. Das verfeinern kommt dann Schritt für Schritt und der wachsenden Erfahrung.
Und das kann man dann auch auf andere Sprachen meistens anwenden.
Merci @wiesi200,
war heute leider mit der Beseitigung von Überflutungsschäden beschäftigt 😞, das hat hier momentan im Ort Priorität, absolute Katastrophe ...
Grüße Uwe
war heute leider mit der Beseitigung von Überflutungsschäden beschäftigt 😞, das hat hier momentan im Ort Priorität, absolute Katastrophe ...
Grüße Uwe