PHP "Tages" Links

Hanni2k

Commander
Registriert
Apr. 2006
Beiträge
2.832
Hallo leute, hab mal ein paar grundlegende Fragen zur herangehensweise.
Mir ist kein besserer Titel eingefallen. Nun zum Problem:

Ich habe eine kleine seite, in der Navigation möchte ich 7 Links einbauen:

Montag
Dienstag
Mittwoch
Donnerstag
Freitag
Samstag
Sonntag


Soweit kein Problem.
In der Datenbank habe ich eine Tabelle mit Produkten, z.B. Spiele bilder und texte dazu.
Dort will ich dann Festlegen:

CS - 25.08.2008
MoH - 26.08.2008
Crysis - 27.08.2008
CoD 4- 28.08.2008
......
Siedler 4 - 1.09.2008 (Montag)

Ich möchte nun das er wenn ich auf den Link klicke die passenden daten heraussucht.
Würde ich heute auf Mittwoch drücken -> Crysis informationen
Würde ich heute auf Montag klicken -> Informationen von Siedler 4 (da montag ja schon "abgelaufen" ist also nächten montag anzeigen).

Könnte mir vorstellen das die Links dann so aufgebaut sind zb.

index.php?d=Monday
index.php?d=Tuesday
index.php?d=Wednesday
....

klicke ich auf Wednesday wird abgefragt ob heute montag ist, wenn ja welches datum ist heute, dann aus der DB holen. Irgendwie so in der richtung.


Kann mir jemand auf die sprünge helfen? Wenn was nicht verständlich ist dann bitte nachfragen ;)
 
PHP:
echo '<a href=index.php?s=1>Montag</a><br>';
echo '<a href=index.php?s=2>Dienstag</a><br>';
echo '<a href=index.php?s=3>Mittwoch</a><br>';
echo '<a href=index.php?s=4>Donnerstag</a><br>';
echo '<a href=index.php?s=5>Freitag</a><br>';
echo '<a href=index.php?s=6>Samstag</a><br>';
echo '<a href=index.php?s=0>Sonntag</a><br>';

if(isset($_REQUEST['s']) && is_numeric($_REQUEST['s']))
{
	if(($_REQUEST['s'])===date(w))
	{
		echo '<br>Heute ist der richtige Tag<br>';
		echo 'Heute ist der: '.date("d.m.Y");
	}
	else
	{
			switch($_REQUEST['s']) {
			case '0': $day='next Sunday';
			break;
			case '1': $day='next Monday';
			break;
			case '2': $day='next Tuesday';
			break;
			case '3': $day='next Wednesday';
			break;
			case '4': $day='next Thursday';
			break;
			case '5': $day='next Friday';
			break;
			case '6': $day='next Saturday';
			break;
			
			}
			echo date("d.m.Y", strtotime($day));
	}
}

Habs so gelöst. Kann jemand was dazu sagen wie "performant" und "gut" das ist oder hat ggf ne bessere lösung?
 
Hi Hanni2k,
zu deinem Script habe ich gleich einmal ein eigenes Script entworfen. :P

Es ist so aufgebaut, dass du lediglich das dabei herauskommende Datum an deine Datenbank senden musst und den Rest erledigt deine DB ;)

Hier einmal meine Variante:
PHP:
<?php

  $today = date("w");  //Heutiger Tag
  if(isset($_GET['day']) AND is_numeric($_GET['day'])){	//Checke die URL
    $chooseDay = $_GET['day'] < $today ? $_GET['day'] + 7 : $_GET['day'];

    $chooseDay = date("d.m.y", mktime(0,0,0,date("m"),date("d")+($choseDay - $today),date("Y")));
    echo $chooseDay; //Das gewaehlte Datum
  }
?>

Zum Vergleich um wievieles schneller das eine Script zum anderen liegt:
  • Mein Script: 0.00104880332 sec
  • Dein Script: 1.81198120117 sec

Da ich leider nicht Prozentrechnen kann (warum auch immer... :rolleyes:) kann ich dir nicht sagen um wievieles schneller in Prozent das Script rechnet, aber ich denke die Zahlen sprechen für sich. :)

Hoffe ich konnte helfen ;)

mfg Michael
 
zahl1/ zahl2 * 100%

1,81198120117 / 0.00104800332 * 100% = 172767%
dein script ist also 1728 mal so schnell wie das andere...
oder auch AUF 172767% oder UM 172667%

allerdings kann ich ned glauben dass dem sein script so lange dauert.. da muss irgendwo anders ein Fehler liegen ;)
 
Zuletzt bearbeitet:
schonmal danke das sich da noch wer mühe gemacht hat >)

also ich komme auf eine laufzeit meines scriptes bei 0.000638 Secunden. Hab es auch noch etwas umgebaut:

Code:
function getLinkDate($weekday)
{
	
	$day='today';

			if(is_numeric($weekday) && $weekday <= 6 && ($weekday != date(w) ))
			{
				switch($weekday) {
				case '0': $day='next Sunday';
				break;
				case '1': $day='next Monday';
				break;
				case '2': $day='next Tuesday';
				break;
				case '3': $day='next Wednesday';
				break;
				case '4': $day='next Thursday';
				break;
				case '5': $day='next Friday';
				break;
				case '6': $day='next Saturday';
				break;
				
				}
			}
			$day=date("Y-m-d", strtotime($day));

return($day);
}

Laufzeitberechnug hier:
Code:
$time_start=microtime();

// Datum herausfiltern.
$date=getLinkDate($_GET['s']);

$time_ende=microtime();

echo $time_ende-$time_start;

Woher kommen nun die verschiedenen zeiten?



ps: mir fällt gerade auf: && $weekday <= 6 ist total überflüssig weil ich danach die switch anweisun ghabe.. kann das sein?
 
Zuletzt bearbeitet:
Hi,
@PW-toXic:
Danke fürs erklären, ich werde mir das aufschreiben ;)

@Topic:
Woher die langen Ladezeiten kommen weiß ich auch nicht, hat mich eigentlich eh gewundert da ich das ganze auf meinem eigenen Apache-Server (der lokal verfügbar ist) berechnen hab lassen...

Aber eigentlich habe ich auch mit der Funktion microtime gearbeitet - in beiden Fällen die gleiche Formel (wie Hanni2k jetzt)!

Naja, vielleicht hats da irgendwo einen Fehler gegeben.. Sorry :p

Und das && $weekday <= 6 ist eigentlich von Nutzen. Falls nämlich einmal eine größere Zahl als 6 eingegeben wird (was ja theoretisch nicht passieren darf), kannst du eine Fehlermeldung oder dergleichen schreiben.

Mit && ($weekday != date(w) ) prüfst du auch ob die Zahl "nicht" heute ist. Allerdings: was ist WENN sie "heute" ist?
Entweder habe ich jetzt einen Denkfehler oder wenn du auf den heutigen Tag klicken würdest, kommt der der nächsten Woche.

mfg Michael

P.s.: Wenn ich nochmal Zeit habe, lasse ich die Berechnungen neu durchlaufen.
 
Wenn nicht heute ist nimmt er today, is quasi als default über der If abfrage angegeben:
$day='today';

Wenn day > 6 ist sollte eigentlich keine fehlermeldung kommen, er soll dann die daten von heute nehmen. also könnte sie ja theoretisch raus?
 
Das $day='today'; habe ich übersehen.
Und wenn du das Script so lässt, kann das && $weekday <= 6 raus, ja.

Denn du hast, wie du schon sagst, den Defaultwert.
 
Zurück
Oben