Fehler Code:1064 im birthday Plugin

Hast du Probleme oder Fragen bei der Einrichtung bestimmter Plugins ? Diese kannst du hier loswerden.
Thommy
Beiträge: 5
Registriert: 17. Jun 2008, 12:34

Fehler Code:1064 im birthday Plugin

Beitrag von Thommy »

Hallo,
ich habe das birthday-Plugin installiert und bekomme folgenden Fehler angezeigt.

Code: Alles auswählen

S Q L - E R R O R

CODE: 1064
You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near '(birthday.usd_value) - INTERVAL YEAR(birthday.usd_value) YEAR +

B A C K T R A C E

FILE: adm_program/system/mysql_class.php
LINE: 77
CALL: mysqldb->db_error()

FILE: adm_plugins/birthday/birthday.php
LINE: 124
CALL: mysqldb->query()
Kann mir jemand weiterhelfen?
Da ich in php noch blutiger Anfänger bin, kann ich das Problem nicht lösen :cry:
matzman2000
Former team member
Beiträge: 1087
Registriert: 2. Sep 2007, 17:12
Wohnort: Itzstedt
Kontaktdaten:

Beitrag von matzman2000 »

Welche MySQL Datenbank Version nutzt Du ?
Thommy
Beiträge: 5
Registriert: 17. Jun 2008, 12:34

Beitrag von Thommy »

Hi matzmann!

Ich verwende MYSQL 4.0
bettes
Beiträge: 65
Registriert: 12. Mai 2008, 23:33
Kontaktdaten:

Beitrag von bettes »

Auch ich habe das gleiche Problem,

es scheint hierbei an der Version der Datenbank zu liegen. Ich setze Version 4.0 ein. Diese kommt scheinbar mit dem Statement-Ausdruck interval nicht zurecht.

Ein Wechsel auf 5.0 möchte ich ungerne vornehmen, da ich dann meinen gesamten Web-Auftritt unter Joomla ebenfalls umstellen müsste. Dieser ist jedoch so umfangreich, dass ich diese Arbeit, bei der sicherlich auch Fehler passieren können, nur ungern vornehme.

Weiß jemand Rat?

Gruß
Bettes
roben
Beiträge: 19
Registriert: 21. Apr 2008, 12:53

Beitrag von roben »

Das ist dann wohl auf meinem Mist gewachsen, wobei MySQL 4.0 wirklich schon zum sehr alten Eisen gehört ;-)
Da hilft wohl nur die ältere Version 1.3.1, die aber nicht in die Zukunft gucken kann. Vielleicht kann jemand vom Team diese Version bereitstellen.
Als Wokarround könnt ihr die Zeile

Code: Alles auswählen

 AND (TO_DAYS(DATE(birthday.usd_value) - INTERVAL YEAR(birthday.usd_value) YEAR + INTERVAL YEAR(NOW()) YEAR) - TO_DAYS(NOW()) BETWEEN -$plg_show_zeitraum AND $plg_show_future)
in

Code: Alles auswählen

 AND DATE(birthday.usd_value) = NOW()
ändern. (ohne Gewähr, nicht getestet)
Benutzeravatar
fasse
Administrator
Beiträge: 6163
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Hallo zusammen,

ich werde die "alte" Version 1.3.1 alternativ zum Download anbieten. Allerdings ist mir noch nicht so ganz klar, woran MySQL 4.0 jetzt scheitert. Mit MySQL 4.1 klappt alles wunderbar. MySQL 4.0 hab ich leider nicht zur Verfügung.

Ich habe gerade auch mal bei MySQL im Handbuch nachgeschaut, was evtl. unter 4.0 noch nicht unterstützt wurde, aber so ganz klar wird mir das nicht. Die Funktion to_days gibt es dort schon, INTERVAL eigentlich auch.

@roben: vielleicht muss man das INTERVAL mit Date_add erst einmal hinzufügen bevor man die Funktion to_days anwendet ?

Kann Thommy oder Bettes mir mal per PN eure Mail-Adresse zukommen lassen, dann schick ich euch mal eine angepasste Version.
roben
Beiträge: 19
Registriert: 21. Apr 2008, 12:53

Beitrag von roben »

Hm, also das einzige Problem was ich dabei *hatte*, war, dass man to_days nicht mehr vor 800 (oder so ähnlich) nach Chr. benutzen kann. Das heißt, mann sollte mit seinem Datum immer schön in der Gegenwart bleiben - mein erster Gedanke war nämlich, von beiden Daten einfach das Geburts- bzw. das aktuelle Jahr abzuziehen und dann mit to_days die Differenz zu bilden. Jetzt ziehe ich vom Geburtstag einfach das Geburtsjahr ab und addiere das aktuelle Jahr drauf.

Date_add/sub und +/- sind laut Handbuch äquivalent, aber unter Umständen weiß Mysql 4.0 das noch nicht. Evtl. kann man da mal ansetzen. Habe allerdings keinen Server, auf dem ich das testen kann...
bettes
Beiträge: 65
Registriert: 12. Mai 2008, 23:33
Kontaktdaten:

Beitrag von bettes »

Hallo roben, hallo fasse,

ich habe mal ein bischen die Referenz von mysql studiert und festgestellt, dass es nicht an den Befehlen to_days oder interval liegt, sondern an dem Befehl date(). Dieser Befehl wird in der Version 4.0 nicht unterstützt, sondern erst ab Version 4.11.

Ich werde mir mal Gedanken machen, ob man den Select nicht etwas anders formulieren kann.

Werde mich wieder melden.
Benutzeravatar
fasse
Administrator
Beiträge: 6163
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Hallo zusammen,

neben der date-Funktion, die scheinbar garnicht nötig ist, war auch die day-Funktion noch nicht in MySQL 4.0 enthalten. Ich hab jetzt mal die Plugin-Version aktualisiert.

Testet das bitte mal auf euren 4.0 Systemen.

Viele Grüße
Fasse
bettes
Beiträge: 65
Registriert: 12. Mai 2008, 23:33
Kontaktdaten:

Beitrag von bettes »

Hallo fasse,

die concat-Funktion zum Zusammenbauen des Geburtsdatums mit dem aktuellen Jahr hatte ich auch im Sinne, da mysql bei datumsangaben recht gutmütig ist.

Da warst Du mir etwas zuvor gekommen.

Ich habe das Plugin eingespielt und.....

es funktioniert.

Bei der Berechnung des Alters müsste aber noch eine Korrektur vorgenommen werden. Für Geburtstage, die in der Zukunft liegen, wird auf Basis des aktuellen Datums das Alter um 1 Jahr zu gering berechnet. Ein Mitglied welches in einigen Tagen 18 Jahre alt wird, wird aber ohne Anpassung momentan noch mit 17 Jahren berechnet. Wenn der Geburtstag erreicht wurde, dann wird das korrekte Alter errechnet.

Ich denke mal, dass hier eine Abfrage zum Vergleich des Geburtsdatums mit dem aktuellen Datum erfolgen muss, wenn dass Datum noch nicht erreicht ist, sollte auf die Altersangabe ein 1 Jahr hinzuaddiert werden.

Vielleicht kannst Du diese Änderung ja mal vornehmen.

Nachdem ich den Funktionsumfang von mysql 4.0 mit den anderen Versionen verglichen habe, habe ich mich entschlossen, demnächst die Datenbankversion doch zu wechseln. Ich denke, ich erspare mir damit einiges an Ärger.

Gruß
Bettes
Benutzeravatar
fasse
Administrator
Beiträge: 6163
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Da ich in den nächsten Woche nicht da bin, würde ich diese Korrektur gerne an Roben weitergeben.

Von mir auch noch eine Anmerkung:

Wenn nur Geburtstage in der Zukunft gefunden werden, dann ist die momentane Formulierung etwas unglücklich. Gratulieren will man ja im vorhinein eigentlich nicht, sondern eher einen Hinweis geben.
Hier sollten wir auch noch eine Anpassung vornehmen.
bettes
Beiträge: 65
Registriert: 12. Mai 2008, 23:33
Kontaktdaten:

Berücksichtigung aktuelles Datum bei Altersberechnung

Beitrag von bettes »

Hallo fasse,

ich habe mal am Code etwas gearbeitet und folgende Bedingung für die Berechnung des Alters hinzugefügt:

Code: Alles auswählen

                if($act_date['mon'] >= $geb_month)
                {
                    if($act_date['mon'] == $geb_month)
                    {
                        if($act_date['mday'] >= $geb_day)
                        {
                            $birthday = true;
                        }
                    }
                    else
                    {
                        $birthday = true;
                    }
                }
                if($birthday == false)
                {
                    $age--;
                }

                // AB HIER ERFOLGT DIE ERGÄNZUNG //
                // aktuelles Datum bei Berechnung berücksichtigen
                if ($act_date['mon'] >= $geb_month)
                {
                    if($act_date['mon'] == $geb_month)
                    {
                        if($act_date['mday'] >= $geb_day)
                        {
                            $age = $act_date['year'] - $geb_year+1;
                        }
                    }
                    else
                    {
                        $age = $act_date['year'] - $geb_year+1;
                    }
                 }
                 $age = $act_date['year'] - $geb_year;
[/b]
Kannst Du die Änderung bitte in das Plugin integrieren?

Gruß
Bettes
roben
Beiträge: 19
Registriert: 21. Apr 2008, 12:53

Beitrag von roben »

fasse hat geschrieben:Da ich in den nächsten Woche nicht da bin, würde ich diese Korrektur gerne an Roben weitergeben.
Hat sich wohl eben erledigt :-)
fasse hat geschrieben: Wenn nur Geburtstage in der Zukunft gefunden werden, dann ist die momentane Formulierung etwas unglücklich. Gratulieren will man ja im vorhinein eigentlich nicht, sondern eher einen Hinweis geben.
Hier sollten wir auch noch eine Anpassung vornehmen.
Das ist mir gestern auch aufgefallen. Ich habe die Ausgabe bei mir Testweise mal so geändert:
Geburtstage:
- XXX am XX.XX.
- XXX wird heute XX Jahre alt
- XXX am XX.XX.

Also nix mit "wir gratulieren" etc., das gehört meiner Meinung nach da gar nicht hin. Wenn es keine Einwände gibt werde ich mal die Ausgaben komplett überarbeiten und noch ne Option zum Ausblenden des Alters einbauen.

Nachtrag:
Mir fällt auch grade auf, das wir mit Gebutrtstagen kurz vor bzw. nach der Jahreswende Probleme bekommen. Geburtstage am 1.1. werden wohl nicht im Vorhinein angezeigt...
Man könnte das Statement einfach noch mit 2 ORs erweitern, die dann nochmal ein Jahr dazu addieren bzw. abziehen, aber schön ist das nicht.
Zuletzt geändert von roben am 25. Jun 2008, 11:39, insgesamt 1-mal geändert.
Benutzeravatar
fasse
Administrator
Beiträge: 6163
Registriert: 12. Nov 2005, 16:06

Beitrag von fasse »

Hi Roben,

von mir aus kannst du gerne die Scriptausgabe ein wenig aufpeppen oder komplett überarbeiten. Schön wäre es, wenn du dann noch Bettes Korrektur einbaust und dies dann hier wieder als Link anbietest oder mir direkt schickst. E-Mail-Adresse kommt per PN.

Ich setze es dann Online, sobald Zeit da ist.

Vielen Dank
Fasse
roben
Beiträge: 19
Registriert: 21. Apr 2008, 12:53

Beitrag von roben »

Ok, werde ich in den nächsten Tagen machen.
Antworten