CronJob-Service
bei SELFPHP mit ...
|
+ minütlichen Aufrufen
+ eigenem Crontab Eintrag
+ unbegrenzten CronJobs
+ Statistiken
+ Beispielaufrufen
+ Control-Bereich
Führen Sie mit den CronJobs von
SELFPHP zeitgesteuert Programme
auf Ihrem Server
aus. Weitere Infos
|
:: Anbieterverzeichnis ::
Globale Branchen
Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP
:: Newsletter ::
Abonnieren Sie hier den kostenlosen
SELFPHP Newsletter!
|
PHP für Fortgeschrittene und Experten Fortgeschrittene und Experten können hier über ihre Probleme und Bedenken talken |
06.09.2005, 17:05:04
|
Anfänger
|
|
Registriert seit: Nov 2004
Ort: Landshut
Beiträge: 98
|
|
Zeitfunktion stimmt nicht, hilfe
Hi,
habe folgendes problem, im folgenden script
sollten eigentlich nur die Artikel angezeigt werden.
Die in einer Minute oder weniger ablaufen.
Er zeigt mir aber alle artikel an??
Kann mir da jemand helfen??
Vorab schon entschuldigung, das script ist sehr lang!
PHP-Code:
$TPL_ending_soon_value = "";
$now = date("YmdHis",time());
$query = "select ends,id,title,photo_uploaded from auctions where closed=\"0\" and
suspended=\"0\" order by ends";
$result = mysql_query($query);
$num_auction = mysql_num_rows($result);
$i = 0;
$bgcolor = "#FFFFFF";
while($i < $num_auction && $i < 6){
if($bgcolor == "#FFFFFF")
{
$bgcolor = "#F2F7FE";
}
else
{
$bgcolor = "#FFFFFF";
}
$title = mysql_result($result,$i,"title");
$id = mysql_result($result,$i,"id");
$ends = mysql_result($result,$i,"ends");
$picture = intval(mysql_result($result,$i,"photo_uploaded"));
$year = intval(date("Y"));
$month = intval(date("m"));
$day = intval(date("d"));
$hours = intval(date("H"));
$minutes = intval(date("i"));
$seconds = intval(date("s"));
$ends_year = substr($ends,0,4);
$ends_month = substr($ends,4,2);
$ends_day = substr($ends,6,2);
$ends_hours = substr($ends,8,2);
$ends_minutes = substr($ends,10,2);
$ends_seconds = substr($ends,12,2);
$difference = intval(mktime($ends_hours,$ends_minutes,$ends_seconds,$ends_month,$ends_day,$ends_year)) - intval(mktime($hours,$minutes,$seconds,$month,$day,$year));
if ($difference > 0) {
$ends_string = intval($difference / 86400).$MSG_126;
$difference = $difference - (intval($difference / 86400)
* 86400);
$hours_difference = intval($difference / 3600);
if(strlen($hours_difference) == 1){
$hours_difference = "0".$hours_difference;
}
$ends_string .= $hours_difference.":";
$difference = $difference - ($hours_difference * 3600);
$minutes_difference = intval($difference / 60);
if(strlen($minutes_difference) == 1){
$minutes_difference = "0".$minutes_difference;
}
$ends_string .= $minutes_difference.":";
$difference = $difference - ($minutes_difference * 60);
$seconds_difference = $difference;
if(strlen($seconds_difference) == 1){
$seconds_difference = "0".$seconds_difference;
}
$ends_string .= $seconds_difference;
} else {
$ends_string = "$err_font$MSG_911</FONT>";
}
$TPL_ending_soon_value .=
"<TR BGCOLOR=\"$bgcolor\">".
"<TD WIDTH=\"20%\" VALIGN=top ALIGN=LEFT>".
"$sml_font".$ends_string."</FONT>".
"</TD>".
"<TD WIDTH=\"60%\" VALIGN=top ALIGN=LEFT>";
if ($picture != 0)
$TPL_ending_soon_value .= "<IMG SRC=\"images/minipic.gif\" WIDTH=12 HEIGHT=10 BORDER=0> ";
$TPL_ending_soon_value .=
"$sml_font<A HREF=\"./item.php?id=$id&SESSION_ID=$sessionIDU\">".stripslashes($title)."</A></FONT>".
"</TD>".
"</TR>";
$i++;
}
if($num_auction > 6)
{
$TPL_ending_soon_value .= "<TR ALIGN=LEFT>".
"<TD></TD><TD>".
"<A HREF=\"./view_more_ending.php?SESSION_ID=$sessionIDU\">$sml_font$MSG_233</FONT></A>...".
"</TD>".
"</TR>";
}
Kann mir da jemand helfen??
Dank im voraus
Christian
|
06.09.2005, 18:41:15
|
Administrator
|
|
Registriert seit: Jan 2002
Ort: Köln
Alter: 53
Beiträge: 1.276
|
|
AW: Zeitfunktion stimmt nicht, hilfe
Hi,
ja es ist sehr lang - liegt wohl an den ganzen leeren Zeilenumbruechen - unsere Datenbank wird das wohl oder uebel verkraften muessen.
So, nun mal zu deinem Problem - ich habe mir zwar nicht dein Skript ganz angeschaut aber die Vorgehensweise wie du an die Zeit kommst ist nicht so gut. Hole doch einfach direkt bei der Datenbankabfrage alle Datensaetze, die unter einer Minute liegen - ein SELECT erschlaegt dein Problem.
Oder wo happert es???? Viel hast du ja nicht geschrieben ;-))
Bye Damir
|
06.09.2005, 18:43:57
|
Anfänger
|
|
Registriert seit: Nov 2004
Ort: Landshut
Beiträge: 98
|
|
AW: Zeitfunktion stimmt nicht, hilfe
Das script ist nicht von mir,
es soll eigentlich nur die Artikel anzeigen, die in einer minute ablaufen,
tut es aber nicht, es gibt alle artikel aus.
|
06.09.2005, 19:31:11
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Zeitfunktion stimmt nicht, hilfe
Zitat:
Zitat von JansonChristian
Das script ist nicht von mir
|
Das heißt ja nicht, dass du es nicht verändern kannst.
Zitat:
Zitat von Janson
es soll eigentlich nur die Artikel anzeigen, die in einer minute ablaufen,
tut es aber nicht, es gibt alle artikel aus.
|
In deinem Script wird im Prinzip der falsche Weg gegangen, in dem zunächst alle Artikel geholt werden und erst anschließend per PHP versucht wird, einzugrenzen, ob dieser Artikel in einer Minute abläuft oder nicht. Da dieser Weg viel zu umständlich und resourcenlastig ist, macht es auch nicht sonderlich viel Sinn, hier nach einem Fehler zu suchen. Stattdessen solltest du dir die Abfrage so umschreiben, dass bereits aus der Datenbank nur Datensätze geholt werden, die in einer Minute ablaufen. Wenn du beim Erstellen diese Abfrage Probleme hast, wird dir aber sicher gerne dabei geholfen.
|
06.09.2005, 19:58:45
|
Administrator
|
|
Registriert seit: Jan 2002
Ort: Köln
Alter: 53
Beiträge: 1.276
|
|
AW: Zeitfunktion stimmt nicht, hilfe
Hi,
aendere einfach deine Datenbankabfrage
z.B. liefert dir dieser Syntax alle Datensaetze innerhalb einer Minute:
PHP-Code:
SELECT datum FROM tabelle WHERE NOW() >= datum AND DATE_SUB(NOW(), INTERVAL 1 MINUTE) <= datum
Bye Damir
|
06.09.2005, 19:59:53
|
Anfänger
|
|
Registriert seit: Nov 2004
Ort: Landshut
Beiträge: 98
|
|
AW: Zeitfunktion stimmt nicht, hilfe
Also sollte ich folgende abfrage ändern :
PHP-Code:
$query = "select ends,id,title,photo_uploaded from auctions where closed=\"0\" and suspended=\"0\" order by ends";
Das ende des Artikels wird in der Datenbank 'ends' mit einem Timestamp(14)
gespeichert.
Nächstes problem, wie vielleicht schon bekannt, habe ich extreme probleme
mit datums- und zeitberechnungen, wie kann ich nun also die
abfrage so ändern, das er mir nur die Artikel die noch weniger als eine
minute laufen ausgibt?
|
06.09.2005, 20:10:40
|
Anfänger
|
|
Registriert seit: Nov 2004
Ort: Landshut
Beiträge: 98
|
|
AW: Zeitfunktion stimmt nicht, hilfe
Ok, habs so geändert:
PHP-Code:
$query = "select ends,id,title,photo_uploaded from auctions where closed=\"0\" and
suspended=\"0\" and NOW() >= ends AND DATE_SUB(NOW(), INTERVAL 1 MINUTE) <= ends order by ends";
hoffe, das es richtig ist??
|
06.09.2005, 20:19:36
|
Administrator
|
|
Registriert seit: Jan 2002
Ort: Köln
Alter: 53
Beiträge: 1.276
|
|
AW: Zeitfunktion stimmt nicht, hilfe
Hi,
ja so ist es richtig aber mein Beispiel funktioniert so nicht mit einem TIMESTAMp(14), sondern nur mit DATETIME. Also entweder du aenderst die Struktur dieser Spalte (mach aber vorher ein Backup) oder der Syntax muss auf TIMESTAMP geaendert werden. Wer die Wahl hat, hat die Qual;-))
Bye DAmir
|
06.09.2005, 21:28:59
|
|
SELFPHP Guru
|
|
Registriert seit: May 2003
Beiträge: 7.187
|
|
AW: Zeitfunktion stimmt nicht, hilfe
Zitat:
Zitat von Damir
ja so ist es richtig aber mein Beispiel funktioniert so nicht mit einem TIMESTAMp(14), sondern nur mit DATETIME.
|
Doch, doch. Die Datums- und Zeitfunktionen von MySQL funktionieren auch mit dem Spaltentyp Timestamp.
Geändert von xabbuh (06.09.2005 um 21:29:08 Uhr)
|
07.09.2005, 10:52:22
|
Administrator
|
|
Registriert seit: Jan 2002
Ort: Köln
Alter: 53
Beiträge: 1.276
|
|
AW: Zeitfunktion stimmt nicht, hilfe
Hi xabbuh,
hast recht, funktioniert auch mit einem TIMESTAMP - hatte irgendwie in Erinnerung, das es nicht funktioniert (INTVAL in Zusammenhang mit DATE_SUB und TIMESTAMP). Das naechste mal probiere ich es vorher aus;-))
Bye Damir
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
Alle Zeitangaben in WEZ +2. Es ist jetzt 07:05:47 Uhr.
|