SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



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



:: Buchempfehlung ::

Der CSS-Problemlöser

Der CSS-Problemlöser zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > MySQLi/PDO/(MySQL)
Hilfe Community Kalender Heutige Beiträge Suchen

MySQLi/PDO/(MySQL) Anfänger, Fortgeschrittene oder Experten können hier Fragen und Probleme rund um MySQLi/PDO/(MySQL) diskutieren

Antwort
 
Themen-Optionen Ansicht
  #11  
Alt 21.07.2004, 08:14:56
c4 c4 ist offline
SELFPHP Guru
 
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
Was soll er denn auch ausgeben? Wenn keine Fehler auftreten, gibt's für ihn auch nichts zu sagen.

Ich habe Dir das mal ein wenig angepasst:
PHP-Code:
$db=mysql_connect($server$user$password);
mysql_select_db($database);

$ip      $_SERVER['REMOTE_ADDR'];
// Du könntest die IP auch in einem CHAR(15) speichern, damit ersparst Du Dir diesen Quatsch
$ipclean str_replace('.'''$ip);

// Es ist nicht notwendig einmalig verwendete Abfrage extra in einer Variable zu speichern
// Auch das Ergebnis der Abfrage wird meist nicht benötigt
mysql_query('DELETE * FROM tracker WHERE zeitpunkt < DATE_SUB(date, INTERVAL 5 MINUTES)') or die(mysql_error());

// Zahlen schreibt man nicht in Hochkommas!!
// WHERE 1 ist auch überflüssig
$anfrage mysql_query("SELECT * FROM tracker WHERE ip=$ipclean") or die(mysql_error());

// Mag sein, dass das mit dem ! klappt, aber mach lieber einen Mengenvergleich
if (mysql_num_rows($anfrage)<=0) {
    
mysql_query("INSERT INTO tracker (ip, zeitpunkt) VALUES ($ipclean, NOW())") or die(mysql_error());

    
// Du musst nicht erst den alten Wert auslesen, Du kannst ihn auch gleich inkrementieren
    
mysql_query('UPDATE counter SET hits=hits+1') or die(mysql_error());
    
    
// Das Auslesen kannst Du so übrigens eleganter machen:
    //   $result=mysql_query('SELECT hits FROM counter');
    //   list($hits)=mysql_fetch_row($result);
    // Danach steht Dir der Wert von hits in $hits zur Verfügung
}
else {
    
mysql_query("UPDATE tracker SET zeitpunkt=NOW() WHERE ip=$ipclean");
}    

mysql_close($db); 
Das or die(mysql_error()) hat in einem fertigen Skript nichts mehr zu suchen. Entferne es also, wenn Du das Ding online stellst!


Ach ja: Welche PHP-Version hast Du lokal, bzw. online am laufen?
__________________
sic!
--> http://dbCF.de/
Mit Zitat antworten
  #12  
Alt 21.07.2004, 12:09:12
Dommy Dommy ist offline
Anfänger
 
Registriert seit: Mar 2004
Beiträge: 22
lokale Version:
PHP Version 4.3.6
Apache/2.0.50 (Fedora)
MySQL 3.23.58 API Version

online Version:
Apache/1.3.27 (Linux/SuSE) mod_jk/1.2.2-dev mod_ssl/2.8.12 OpenSSL/0.9.6i PHP/4.3.4 mod_perl/1.27 FrontPage/4.0.4.3
MySQL 3.23.55


Mir ist bewusst, dass es nicht gerade gut ist auf 2 verschiedenen Server-Umgebungen zu programmieren, aber ich wollte eigentlich eine serverunabhängige Site haben weil ich ja net weiss wie lange ich ncoh bei dem Anbieter bleibe zumal der Server schon ein paar Mal eingebrochen ist , aber egal!


Zum eigentlichen Problem:
lokal sieht die Sache gut aus und er füht auch nicht unnötig neue Zeilen ein, aber es werden auch nicht die zu alten Einträge gelöscht, also gehe ich davon aus, dass an folgendem Befehl etwas nicht korrekt abläuft
PHP-Code:
mysql_query("DELETE * FROM tracker WHERE zeitpunkt < DATE_SUB(date, INTERVAL 5 MINUTES)"); 

Online sieht die Sache allerdings schon ganz anders und das ist ja auch das Problem.
Erstens werden wie bei der lokalen Variante auch die zu alten Einträge nicht gelöscht (ich spare mir das Posten der Zeile)
Zweitens wird obwohl die IP gleich bleibt jedes Mal eine neue Zeile angelegt! Also wird wohl etwas an diesem Befehl vom Server net richtig verarbeitet würde ich sagen
PHP-Code:
if (mysql_num_rows($anfrage)<=0) {
    
mysql_query("INSERT INTO tracker (ip, zeitpunkt) VALUES ($ipclean, NOW())");
    
mysql_query('UPDATE counter SET hits=hits+1'); 
} else {
    
mysql_query("UPDATE tracker SET zeitpunkt=NOW() WHERE ip=$ipclean");


An der if-Abfrage scheint es wohl ein Problem zu geben, da jedes Mal der erste teil durchlaufen wird und nicht falls von Nöten der Else-Teil! Liegt das an den unterschiedlichen PHP-Versionen ?

Trotzdem schon einmal großen Dank für Deine Hilfe! Wäre super wenn das Problem auch noch gelößt werden könnte!

Geändert von Dommy (21.07.2004 um 12:12:32 Uhr)
Mit Zitat antworten
  #13  
Alt 21.07.2004, 12:19:50
c4 c4 ist offline
SELFPHP Guru
 
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
Das nenne ich doch mal eine Fehlerbeschreibung!

Du hast mein Skript aber nicht komplett übernommen, richtig? Meine mysql_error() scheinen zu fehlen.

Die Abfrage
PHP-Code:
mysql_query("DELETE * FROM tracker WHERE zeitpunkt < DATE_SUB(date, INTERVAL 5 MINUTES)"); 
arbeitet noch mit dem Feldnamen date, das muss natürlich auch zeitpunkt heißen:
PHP-Code:
mysql_query("DELETE * FROM tracker WHERE zeitpunkt < DATE_SUB(zeitpunkt, INTERVAL 5 MINUTES)"); 
An den genutzten System liegt das Problem nicht.
__________________
sic!
--> http://dbCF.de/
Mit Zitat antworten
  #14  
Alt 21.07.2004, 13:31:10
Dommy Dommy ist offline
Anfänger
 
Registriert seit: Mar 2004
Beiträge: 22
Wieso? War die Fehlerbeschreibung net deutlich?

Habe jetzt Deine OR die(mysql_error()); auch noch drangehängt und jetzt halte fest:
Es gibt Probleme mit dem Befehl
PHP-Code:
mysql_query("DELETE * FROM tracker WHERE zeitpunkt < DATE_SUB(zeitpunkt, INTERVAL 5 MINUTES)") OR die(mysql_error()); 
und zwar:
You have an error in your SQL syntax near '* FROM tracker WHERE zeitpunkt < DATE_SUB(zeitpunkt, INTERVAL 5 MINUTE)' at line 1

Ich habe das MINUTES durch MINUTE ersetzt weil ich es auf der Site http://dev.mysql.com/doc/mysql/de/Da...functions.html
verstanden habe, aber auch mit MINUTES kommt der Fehler !
Liegt das Problem daran, dass das Feld zeitpunkt vom Typ TIMESTAMP(14) ist und nicht ein DATE oder DATETIME ?
Mit Zitat antworten
  #15  
Alt 21.07.2004, 13:33:23
c4 c4 ist offline
SELFPHP Guru
 
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
Zitat:
War die Fehlerbeschreibung net deutlich?
Oh doch!
Zitat:
Liegt das Problem daran, dass das Feld zeitpunkt vom Typ TIMESTAMP(14) ist und nicht ein DATE oder DATETIME ?
Gut möglich, probier's aus!
__________________
sic!
--> http://dbCF.de/
Mit Zitat antworten
  #16  
Alt 21.07.2004, 14:15:04
Dommy Dommy ist offline
Anfänger
 
Registriert seit: Mar 2004
Beiträge: 22
OK! zeitpunkt ist nun vom TYP DATETIME aber gleiches Resultat!
Daraufhin habe ich nun den Befehl folgendermaßen geändert
PHP-Code:
mysql_query("DELETE * FROM tracker WHERE zeitpunkt < DATE_SUB('zeitpunkt', INTERVAL '-0 0:5' DAY_MINUTE)") OR die(mysql_error()); 
aber immer noch diese Fehlermeldung!
Mit Zitat antworten
  #17  
Alt 21.07.2004, 18:48:42
Dommy Dommy ist offline
Anfänger
 
Registriert seit: Mar 2004
Beiträge: 22
Folgendermaßen funktioniert das Script ganz gut, zumindest die Löschung aller Einträge, die älter als 5 Minuten sind, aber ist das auch die optimale Schreibweise?
PHP-Code:
$delete mysql_query("DELETE FROM tracker WHERE zeitpunkt < DATE_SUB(NOW(), INTERVAL '0 0:5:0' DAY_SECOND)") OR die(mysql_error());
if (
$delete)
{
    
mysql_query("OPTIMIZE TABLE `tracker`");

Leider ist das Problem mit dem updaten bereits vorhandener IPs noch nicht behoben!
Mit Zitat antworten
  #18  
Alt 22.07.2004, 08:34:27
c4 c4 ist offline
SELFPHP Guru
 
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
Die Idee mit dem NOW() statt zeitpunkt habe ich wohl glatt übersehen...

Kannst es ja wieder mit dem '5 MINUTES' probieren. Ansonsten passt das so schon.
__________________
sic!
--> http://dbCF.de/
Mit Zitat antworten
  #19  
Alt 22.07.2004, 11:49:00
Dommy Dommy ist offline
Anfänger
 
Registriert seit: Mar 2004
Beiträge: 22
Kein Problem, hast mir trotzdem sehr geholfen!
HAbe mich dann erstmal durch die Online Doku von MySQL durchgelesen (zumindest diesen Abschnitt)!
Aber eine Frage habe ich noch:
Heisst das jetzt
PHP-Code:
INTERVAL 5 MINUTES 
oder
PHP-Code:
INTERVAL 5 MINUTE 
weil ich in der Beschreibung nur letzteres gefunden habe!
Mit Zitat antworten
  #20  
Alt 22.07.2004, 11:56:37
c4 c4 ist offline
SELFPHP Guru
 
Registriert seit: Jul 2002
Ort: Oberursel
Alter: 54
Beiträge: 4.748
Dann nimm letzteres.

Die Wahrscheinlichkeit, dass ich etwas sage, was im Manual anders steht und ich auch noch Recht habe damit ist doch recht gering... ;)
__________________
sic!
--> http://dbCF.de/
Mit Zitat antworten
Antwort


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.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 16:28:23 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt