[PHP] Kleine Schwierigkeit mit date-Funktion

T-Flow

Scheidenpilz!
ID: 16924
L
24 August 2006
10.107
434
Hi Leute,

ich habe mir auf meiner Page ein kleines Mini-Script geschrieben, das mir auf einer HTML-Seite abhängig vom jeweiligen Datum entweder die Datei "news_handel.gif" oder "news_preview.gif" anzeigen soll. Ist das angegebene Datum reldate erreicht oder überschritten soll "news_handel.gif" angezeigt werden, und wenn es noch nicht soweit ist, soll die andere angezeigt werden. In der HTML-Datei sieht das dann so aus:

HTML:
<script src="gfx_preview.php?reldate=20071207" type="text/javascript" language="JavaScript"><!--//
--></script>

Und in der gfx_preview.php-Datei sieht es folgendermaßen aus:

PHP:
<?php

$release = date('Ymd', strtotime($_POST["reldate"])); 
$heute = date('Ymd');

if ($release > $heute) {
  echo "document.write(\"<img src=\\\"images/news_preview.gif\\\" height=20 width=220 border=0>\");";
}

else {
  echo "document.write(\"<img src=\\\"images/news_handel.gif\\\" height=20 width=220 border=0>\");";
}
?>

Leider wird momentan IMMER die "news_handel.gif" angezeigt und wenn ich statt "_POST" dann "_GET" reinschreibe kommt immer die "news_preview.gif" :( Verstehe leider nicht ganz, wo der Fehler liegen könnte... 8O
 
  1. Gib mal den Inhalt von $_POST["reldate"] aus und schreib ihn hier hin ;) (Aber nicht was da drin stehen müsste! Sondern was das Script mittels echo $_POST["reldate"]; z.B. ausgibt)
  2. Warum vergleichst du Ymd mit einander? Warum nicht den Timestamp?
  3. Man kann auch ein ' anstatt eines " benutzen - meine nun deine Zeilen 7 und 11 wo du so viel escaped hast ;)
 
soweit ich weis erwartet strtotime das datum im englischen format... sprich mit -.. probier mal
HTML:
<script src="gfx_preview.php?reldate=2007-12-07" type="text/javascript" language="JavaScript"><!--// --></script>
und dann änder das post in ein GET ;)

jetzt müsste es eigtl funktionieren..

mfg
Gsus

PS: bin mir nicht ganz sicher ;)
 
Du vergleichst - wenn der Code oben aktuell is - immer noch Strings miteinander. Das geht in diesem Fall zwar, weil du Ymd-Format hast und PHP die Umwandlung in eine Zahl transparent macht, bleibt aber trotzdem böse.

Wenn du schon den Timestamp hast, warum nimmst du ihn dann nicht auch ? ;)
PHP:
if(strtotime($_POST["reldate"]) > time())
  foo();
 
soweit ich weis erwartet strtotime das datum im englischen format... sprich mit -.. probier mal
HTML:
<script src="gfx_preview.php?reldate=2007-12-07" type="text/javascript" language="JavaScript"><!--// --></script>
und dann änder das post in ein GET ;)

Leider totaler Fehlgriff, funktioniert nur mit GET hab ich gemerkt...

Du vergleichst - wenn der Code oben aktuell is - immer noch Strings miteinander. Das geht in diesem Fall zwar, weil du Ymd-Format hast und PHP die Umwandlung in eine Zahl transparent macht, bleibt aber trotzdem böse.

Wenn du schon den Timestamp hast, warum nimmst du ihn dann nicht auch ? ;)
PHP:
if(strtotime($_POST["reldate"]) > time())
  foo();

Also jetzt hab ichs folgendermaßen und es klappt auch :yes: Aber immerhin habt ihr mich durch die Ideen etwas weiter gebracht :kiss:

PHP:
<?php

$release = $_GET["reldate"];  
$heute = date('Ymd', time());

if ($release > $heute) {
  echo "document.write(\"<img src=\\\"images/news_preview.gif\\\" height=20 width=220 border=0>\");";
}

else {
  echo "document.write(\"<img src=\\\"images/news_handel.gif\\\" height=20 width=220 border=0>\");";
}
?>
 
[..]
PHP:
<?php

$release = $_GET["reldate"];  
$heute = date('Ymd', time());

if ($release > $heute) {
  echo "document.write(\"<img src=\\\"images/news_preview.gif\\\" height=20 width=220 border=0>\");";
}

else {
  echo "document.write(\"<img src=\\\"images/news_handel.gif\\\" height=20 width=220 border=0>\");";
}
?>

Trotzdem würde ich es noch ein wenig umändern in folgendes:

PHP:
<?php

$release = strtotime($_GET["reldate"]); // Oder mit mktime() - liegt dran wie der String aus $_GET["reldate"] aussieht
$heute = time();

if ($release > $heute) {
  echo "document.write('<img src=\"images/news_preview.gif\" height=20 width=220 border=0>');";
}

else {
  echo "document.write('<img src=\"images/news_handel.gif\" height=20 width=220 border=0>');";
}
?>

Am Anfang habe ich das so umgeändert, dass auch Zahlen (der Timestamp) miteinander verglichen werden.
Bei den Ausgabe habe ich das ganze escapen ein wenig minimiert ;) (Nur so als Tipp gedacht, denn bei größeren Sachen wird das escapen sehr lästig wenn man immer nur " verwendet)