 |
| Hinweise |
Willkommen im TP-Hilfe-Forum!Dies ist ein Forum zu den Themen Photoshop, Dreamweaver, Flash, Selbständigkeit und mehr, in dem Du Hilfe, Anleitung oder eine Lösung zu Deinen Problemen erhältst. Aktuell bist Du in unseren Foren als Gast mit reinen Leserechten unterwegs. Wenn Du Dich registrierst, kannst Du eigene Themen verfassen, Deine Frage stellen und privat mit anderen TPlern kommunizieren. Weitere Foren werden zugänglich, und Du wirst – falls gewünscht – per Mail über neue Beiträge informiert. Die Registrierung ist schnell und kostenlos. Sollten bei der Registrierung Fragen auftauchen, reicht ein Klick in unsere Hilfe - Häufig gestellte Fragen oder eine kurze Mitteilung an das Support-Team. Viel Spaß bei Traum-Projekt.com |
11.01.2004, 11:41
|
#1
|
|
TP-Senior
Registriert seit: Oct 2002
Ort: Steinach
|
Datensatz älter als 30 Tage
Ich möchte gerne feststellen ob ein Datensatz älter ist als 30 Tage, wenn ja soll er mir Template 1 ausgeben ansonsten Template 2.
Das Problem ist:
1. Wenn ich das so mache wie unten gibt mir immer die gleiche Template aus.
2. Anstatt die Templates zu wechseln währe es doch wahrscheinlich einfacher nur die Grafik für Alten und Neuen Beitrag zu wechseln und nur eine Template zu verwenden.
Das Problem ist, wenn ich das mit einer Template versuche schreibt er mir die Grafiken der Reihe nach hin und dann gibt einmal die Template aus aber ohne Daten.
Die Funktion wird per includ in die endsprechende Seite eingebunden.
PHP-Code:
function tutalter()
{
global $db;
$db->query("SELECT a.id,a.catid,a.userid,a.topic,a.datum,a.visits,
b.name,b.userid,
c.catid,c.beschreibung
FROM tut_dokument a INNER JOIN tut_autoren b, tut_kategorie c
WHERE a.catid=c.catid ORDER BY datum ");
//Daten anzeigen
$alter = "30"; // Legt das Alter des Eintrages fest
$date1 = date("d.m.Y"); // liefert das Aktuelle Datum
$date2 = $row['datum']; // wann der Datensatz angelegt wurde
list($day1,$month1,$year1)=explode(".",$date1);
list($day2,$month2,$year2)=explode(".",$date2);
$tdate1=mktime(0,0,0,$month1,$day1,$year1);
$tdate2=mktime(0,0,0,$month2,$day2,$year2);
$diffdate = round(($tdate1-$tdate2)/86400);
while($row = $db->data())
{
if ($diffdate<$alter)
{
include("./inc/vartutnew.php");
echo ($template);
}
if ($diffdate>$alter)
{
include("./inc/vartutold.php");
echo ($template);
}
}
}
In dieser Datei lege ich die Variablen für die Templates fest:
PHP-Code:
$dokid = $row['id'];
$catid = $row['catid'];
$beschreibung = $row['beschreibung'];
$topic = $row['topic'];
$thema = $row['thema'];
$datum = $row['datum'];
$userid = $row['userid'];
$name = $row['name'];
$visits = $row['visits'];
$img ="<img src='images/newtopic.gif' width='16' height='16'>";
$counter = "<a href=clicks.php?id=$row[id] target='_blank' class='menü'>$row[topic]</a>";
//Templateausgabe
$template = implode("",file("templates/tpl_tutnew.htm"));
$template = str_replace("{TOPIC}", $topic, $template);
$template = str_replace("{THEMA}", $thema, $template);
$template = str_replace("{DATUM}", $datum, $template);
$template = str_replace("{USER}", $name, $template);
$template = str_replace("{RUBRIK}", $beschreibung, $template);
$template = str_replace("{VISITS}", $visits, $template);
$template = str_replace("{COUNTER}", $counter, $template);
$template = str_replace("{IMG}", $img, $template);
?>
|
|
|
11.01.2004, 14:00
|
#2
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Für Datumsberechnung sollte man auch Felder vom Type DATETIME in der Datenbank nutzen. Dann kann man die Daten direkt in der Abfrage filtern. Schau mal in der Suche... zu dem Thema habe wir schon einiges geschrieben.
Gruss
Jan
|
|
|
11.01.2004, 14:19
|
#3
|
|
TP-Senior
Registriert seit: Oct 2002
Ort: Steinach
|
Das Feld Datum ist bei mir als 'Date' Type angelegt.
Das Problem ist nicht das Berechnen des Unterschieds, sondern die richtige Ausgabe der Templates.
|
|
|
11.01.2004, 15:14
|
#4
|
|
TP-Senior
Registriert seit: Oct 2002
Ort: Steinach
|
Ich habe jetzt das Feld Datum in DateTime umgeändert.
Und die Select Abfrage habe ich so geändert:
(Das habe ich in der MYSQL Dokumentation gefunden)
PHP-Code:
SELECT * FROM tut_dokument WHERE TO_DAYS(NOW()) - TO_DAYS(datum) <= 30;
Wenn ich das Datum jedoch Formatiere schreibt er mir ein Datum von 1.1.1970 hin.
PHP-Code:
$datum = date( 'd.m.Y', $row['datum']);
|
|
|
11.01.2004, 15:35
|
#5
|
|
TP-Moderator
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
|
Genau das brauchst du ja nicht mehr... du kannst die Formatierung direkt in deinen Query einbauen. Schau mal hier: http://www.traum-projekt.com/forum/s...ht=datum+mysql
Da wurde das schonmal angesprochen.
Gruss
Jan
|
|
|
11.01.2004, 16:41
|
#6
|
|
TP-Insider
Registriert seit: Jun 2001
Ort: Berlin
|
Du kannst auch das Alter direkt per sql auslesen:
SELECT *, TO_DAYS(NOW()) - TO_DAYS(datum) as alter
FROM tut_dokument;
jetzt brauchts Du in php nur noch feld alter < oder > 30 zu überprüfen.
|
|
|
11.01.2004, 16:55
|
#7
|
|
TP-Senior
Registriert seit: Oct 2002
Ort: Steinach
|
Meinst Du so?
PHP-Code:
function PrintAllTopics()
{
global $db;
$db->query("SELECT *, TO_DAYS(NOW()) - TO_DAYS(datum) as alter FROM tut_dokument");
//Daten anzeigen
while($row = $db->data())
{
if ($alter <= 30)
{
include("./inc/vartutnew.php");
echo ($template);
}
include("./inc/vartutold.php");
echo ($template);
}
}
|
|
|
11.01.2004, 17:21
|
#8
|
|
TP-Insider
Registriert seit: Jun 2001
Ort: Berlin
|
ja, so:
PHP-Code:
SELECT * , ( TO_DAYS( NOW( ) ) - TO_DAYS(datum) ) AS tage FROM tut_dokument
"AS alter" kann man nicht nehmen, weil alter ein sql begriff ist.
so bekommst du eine zusätzliche Spalte "tage" für jeden Tabellenzeile.
|
|
|
11.01.2004, 18:28
|
#9
|
|
TP-Senior
Registriert seit: Oct 2002
Ort: Steinach
|
Ok das funktioniert so.
Wenn ich das aber jetzt mit der folgenden Abfrage machen will, wie schaut es dann aus?
PHP-Code:
$db->query("SELECT a.id,a.catid,a.userid,a.topic,a.datum,a.visits,
b.name,b.userid,
c.catid,c.beschreibung
FROM tut_dokument a INNER JOIN tut_autoren b, tut_kategorie c
WHERE a.catid=c.catid ORDER BY datum ");
|
|
|
11.01.2004, 19:20
|
#10
|
|
TP-Insider
Registriert seit: Jun 2001
Ort: Berlin
|
denke mal so:
PHP-Code:
$db->query("SELECT a.id,a.catid,a.userid,a.topic,a.datum,a.visits,
b.name,b.userid,
c.catid,c.beschreibung,(TO_DAYS(NOW()) - TO_DAYS(a.datum)) AS tage
FROM tut_dokument a INNER JOIN tut_autoren b, tut_kategorie c
WHERE a.catid=c.catid");
|
|
|
11.01.2004, 19:42
|
#11
|
|
TP-Senior
Registriert seit: Oct 2002
Ort: Steinach
|
bleibt jetzt nur noch das Problem mit der Datums Formatierung.
Funktioniert das so und wo muss ich dass einsetzen?
DATE_FORMAT('a.datum','%d %M %Y')
Im Augenblick gibt er kein Datum aus.
PHP-Code:
SELECT a.id,a.catid,a.userid,a.topic,a.visits, DATE_FORMAT(a.datum,'%d %M %Y'),
b.name,b.userid,
c.catid,c.beschreibung,(TO_DAYS(NOW()) - TO_DAYS(a.datum)) AS tage
FROM tut_dokument a INNER JOIN tut_kategorie c,tut_autoren b
WHERE a.catid=c.catid
|
|
|
11.01.2004, 19:51
|
#12
|
|
TP-Insider
Registriert seit: Jun 2001
Ort: Berlin
|
versuchs mit
PHP-Code:
DATE_FORMAT(a.datum,'%d %M %Y') AS das_datum
|
|
|
12.01.2004, 16:56
|
#13
|
|
TP-Senior
Registriert seit: Oct 2002
Ort: Steinach
|
Wie kann ich dann auf das_datum Zugreifen.
Etwa so: $row['das_datum'] oder wie geht das?
|
|
|
12.01.2004, 17:02
|
#14
|
|
TP-Insider
Registriert seit: Jun 2001
Ort: Berlin
|
ja, genau wie du auf "tage" und alle anderen spaltennamen zugreifst.
|
|
|
12.01.2004, 19:01
|
#15
|
|
TP-Senior
Registriert seit: Oct 2002
Ort: Steinach
|
Danke für die bisherige Hilfe.
Ich habe das ganze jetzt so gemacht, die Berechnung funktioniert und er zeigt mir die Templates für neue und alte Beiträge endsprechend an.
Das Problem hierbei ist, das er mir jetzt die Template anzeigt aber in der Template für die alten Tutorials keine Datensätze drinnen stehen.
Muss ich dafür auch nochmal eine Abfrage machen damit die Daten angezeigt werden?
PHP-Code:
function PrintAllTopics()
{
global $db;
// ######## Tage zwischen Heute und dem Datum an dem der Datensatz angelegt worden ist ###########
$sqltage = $db->query(" SELECT *, TO_DAYS(NOW()) - TO_DAYS(datum) AS anztage FROM tut_dokument a ");
$alter = "30"; // Legt das Alter des Eintrages fest
$diffdate = ($sqltage[anztage]-$alter); // Berechnet den Unterschied
// ######## Tutorials auslesen ###########
if ($diffdate <= $alter)
{
$auslesen = $db->query ("SELECT a.id,a.catid,a.userid,a.topic,a.visits,a.datum,
b.name,b.userid,
c.catid,c.beschreibung
FROM tut_dokument a INNER JOIN tut_autoren b, tut_kategorie c
WHERE a.catid=c.catid ");
while($row = $db->data())
include("vartutnew.php");
echo ($template);
}
include("vartutold.php");
echo ($template);
}
Test Seite
|
|
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
Thema durchsuchen |
|
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 06:26 Uhr.
| |