erster Aufruf, die Fehlermeldungen...

Begonnen von Andi, 28 Mai 2007, 11:24:20

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Andi

Der erste Klick auf "Private Nachrichten" bringt folgende 2 Fehlermeldungen:

ZitatNotice: Use of undefined constant uname - assumed 'uname' in \modules\Private_Messages\inboxsize-conf.php on line 2

ZitatNotice: Undefined variable: uinfo in \modules\Private_Messages\inboxsize-conf.php on line 2


Etliche PHP-Coder sagen jetzt:
Das sind Notices, die kannst du ignorieren.

Ich sage:
Das sind Fehler und mindestens einer davon ein ganz krasser, der zu einer Funktionsstörung führt.


So, jetzt dürft ihr erstmal ;)

Woher kommen die Fehler?
Was ist zu tun?


PS/Edit: Screenshot zur Spurensuche anbei
schön´s Grüssle, Andi

Eismann1976

Use of undefined constant uname

Ich dachte uname ist immer eine Variable ? Der Wert kann/darf doch garnicht konstant sein !? Müsste es dann nicht $uname heißen oder versteh ich das jetzt falsch ?
LG Eismann


Kein Support per PN/ICQ/MSN ect.
Bitte schreibt eure Frage ins Forum, so haben Alle was von der Antwort.
Viele Antworten findest du auch im DOKUWIKI



http://www.wtj-clan.de | pragmaMx 0.1.11.2 &  1.12 RC2 | PHP: 5.2.9 | mysql: 5.1.33 | apache: 2.2.11 (Win32) & Microsoft-IIS/7.5

Andi

Oki, betrachten wir die Zeile.

$qry = "select user_ingroup from " . $prefix . "_users where uname='" . $uinfo[uname] . "'";

Dort wird der Variablen $qry ein String als Wert übergeben. Der String setzt sich wiederum aus mehreren Teilstrings und einigen Variablen zusammen. Die Variable $uinfo ist ein Array und von diesem Array wird der Index "uname" in dem String verwendet.

Lesen wir die Fehlermeldung:
ZitatUse of undefined constant uname - assumed 'uname'
Es wird die undefinierte Konstante "uname" verwendet. Warum das?

Wir guggen ins PHP-Manual und betrachten die Schreibweise von Strings, Variablen und Arrays
http://www.php.net/manual/de/language.types.string.php
http://www.php.net/manual/de/language.variables.php
http://www.php.net/manual/de/language.types.array.php
schön´s Grüssle, Andi

Andi

schön´s Grüssle, Andi

GerhardSt

Stimmt, da sind Fehler drinnen!
Wie man ja schon aus der Fehlermeldung lesen kann gehört muss das ['uname'] heissen.

Bleibt nur noch der zweite Fehler!
ZitatNotice: Undefined variable: uinfo in F:\xampp\htdocs\html\modules\Private_Messages\inboxsize-conf.php on line 2
Da bin ich schuld! Ich habe da eine Zeile zuviel gelöscht.
Also der Inhalt der inboxsize-conf.php muss so aussehen
Zitat<?php
$uinfo = mxGetUserData();
$qry = "select user_ingroup from " . $prefix . "_users where uname='" . $uinfo['uname'] . "'";
$result = sql_query($qry);
list($user_ingroup) = sql_fetch_row($result);

if ($user_ingroup == 2) {
        $inboxsize = 800;
        $sentboxsize = 800;
   } else {
        $inboxsize = 200;
        $sentboxsize = 200;
}

?>

Danke, Andi!

Eismann1976

LG Eismann


Kein Support per PN/ICQ/MSN ect.
Bitte schreibt eure Frage ins Forum, so haben Alle was von der Antwort.
Viele Antworten findest du auch im DOKUWIKI



http://www.wtj-clan.de | pragmaMx 0.1.11.2 &  1.12 RC2 | PHP: 5.2.9 | mysql: 5.1.33 | apache: 2.2.11 (Win32) & Microsoft-IIS/7.5

GerhardSt

Ja und wenn ich das jetzt richtig sehe, ist auch schon der erste Fehler weg!
Denn bei mir funktioniert die Begrenzung schon für verschiedene Benutzergruppen.
Wie schaut es da bei euch aus?

Eismann1976

#7
Gerade getestet. Fehler weg. Begrenzung funktioniert.   :thumbup:

Edit: Habs gleich in den aktuellen Download mit reingepackt.
LG Eismann


Kein Support per PN/ICQ/MSN ect.
Bitte schreibt eure Frage ins Forum, so haben Alle was von der Antwort.
Viele Antworten findest du auch im DOKUWIKI



http://www.wtj-clan.de | pragmaMx 0.1.11.2 &  1.12 RC2 | PHP: 5.2.9 | mysql: 5.1.33 | apache: 2.2.11 (Win32) & Microsoft-IIS/7.5

GerhardSt

@ Eismann1976
Danke, das du das mit dem Download übernommen hast. :thumbup:


Leider sind in dieser Datei noch mehr Fehler vorhanden, ich habe da gerade folgende Meldung bekommen.
ZitatNotice: Undefined variable: prefix in F:\xampp\htdocs\html\modules\Private_Messages\inboxsize-conf.php on line 3

Error sql_query():
qry: select user_ingroup from _users where uname='GerhardSt'
descr: Table 'usr_web158_3._users' doesn't exist ( mysql 1146 )
details:
file: /modules/Private_Messages/inboxsize-conf.php # line:   4, cmd: sql_query(select user_ingroup from _users where uname='GerhardSt'),
file: /modules/Private_Messages/index.php # line: 821, cmd: include(select user_ingroup from _users where uname='GerhardSt', /modules/Private_Messages/inboxsize-conf.php),
file: /modules/Private_Messages/index.php # line:1031, cmd: submitmessage(select user_ingroup from _users where uname='GerhardSt', /modules/Private_Messages/inboxsize-conf.php, Array[10], 2),
file: /modules.php # line: 136, cmd: include_once(select user_ingroup from _users where uname='GerhardSt', /modules/Private_Messages/inboxsize-conf.php, Array[10], 2, /modules/Private_Messages/index.php),


Error sql_fetch_row():
descr: mysql_fetch_row(): supplied argument is not a valid MySQL result resource
details:
file: /modules/Private_Messages/inboxsize-conf.php # line:   5, cmd: sql_fetch_row(false),
file: /modules/Private_Messages/index.php # line: 821, cmd: include(false, /modules/Private_Messages/inboxsize-conf.php),
file: /modules/Private_Messages/index.php # line:1031, cmd: submitmessage(false, /modules/Private_Messages/inboxsize-conf.php, Array[10], 2),
file: /modules.php # line: 136, cmd: include_once(false, /modules/Private_Messages/inboxsize-conf.php, Array[10], 2, /modules/Private_Messages/index.php),


Notice: Undefined variable: dbi in F:\xampp\htdocs\html\modules\Private_Messages\index.php on line 898

Notice: Undefined variable: dbi in F:\xampp\htdocs\html\modules\Private_Messages\index.php on line 898
Den Fehler sieht man nur ganz kurz, wenn man eine Nachricht versendet.
Ich schätze mal, dies ist der Grund warum mit PM-Begrenzung, der Postausgang nicht stimmt!

Eismann1976

#9
Wenn man in der config.php des Moduls hier

$refresh = 1 ; # the Time in seconds for auto-refresh to messagelist, when delete or send messages

die Zeit hochstellt kann man mal in Ruhe lesen. Ich hab den Fehler auch.

Ein weiterer Fehler der damit zusammenhängen dürfte kommt wenn man über die Online-Liste ein neues PM Popup aufrufen will.

Error sql_query():
qry: select user_ingroup from _users where uname='Tester'
descr: Table 'pmtest._users' doesn't exist ( mysql 1146 )
details:

file: /modules/Private_Messages/inboxsize-conf.php # line:   4, cmd: sql_query(select user_ingroup from _users where uname='Tester'),
file: /modules/Private_Messages/buddy.php # line: 150, cmd: include(select user_ingroup from _users where uname='Tester', /modules/Private_Messages/inboxsize-conf.p...),
file: /modules/Private_Messages/buddy.php # line: 525, cmd: compose(select user_ingroup from _users where uname='Tester', /modules/Private_Messages/inboxsize-conf.p..., Admin, ),
file: /modules.php # line: 136, cmd: include_once(select user_ingroup from _users where uname='Tester', /modules/Private_Messages/inboxsize-conf.p..., Admin, , /modules/Private_Messages/buddy.php),


Error sql_fetch_row():
descr: mysql_fetch_row(): supplied argument is not a valid MySQL result resource
details:

file: /modules/Private_Messages/inboxsize-conf.php # line:   5, cmd: sql_fetch_row(false),
file: /modules/Private_Messages/buddy.php # line: 150, cmd: include(false, /modules/Private_Messages/inboxsize-conf.p...),
file: /modules/Private_Messages/buddy.php # line: 525, cmd: compose(false, /modules/Private_Messages/inboxsize-conf.p..., Admin, ),
file: /modules.php # line: 136, cmd: include_once(false, /modules/Private_Messages/inboxsize-conf.p..., Admin, , /modules/Private_Messages/buddy.php),
LG Eismann


Kein Support per PN/ICQ/MSN ect.
Bitte schreibt eure Frage ins Forum, so haben Alle was von der Antwort.
Viele Antworten findest du auch im DOKUWIKI



http://www.wtj-clan.de | pragmaMx 0.1.11.2 &  1.12 RC2 | PHP: 5.2.9 | mysql: 5.1.33 | apache: 2.2.11 (Win32) & Microsoft-IIS/7.5

Andi

perfekt  :thumbup:

das war die Funktionsstörung, die ich von Anfang an angesprochen hatte ;)

Aber schauen wir doch was da passiert ist.
Die Variable $qry beeinhaltet ja letztendlich die Datenbankabfrage, die mySql übergeben wird um die Benutzergruppe des aktuellen Users zu ermitteln. Da aber $uinfo nicht definiert war, wurde aus $uinfo[uname] einfach ein leerer String. Die Datenabnkanfrage, die mySql zu sehen bekam, sah also so aus:
select user_ingroup from mx_users where uname='' Es sollte also ein Datensatz ermittelt werden, bei dem das Feld uname leer ist. Einen solchen Datensatz gibt es in der Usertabelle aber nicht. Die Variable $user_ingroup war folglich auch immer leer. Demnach wurde in der folgenden IF-Struktur immer der Else-Zweig verwendet.

In dieser Datei (inboxsize-conf.php) sind noch mehr Fehler und Ungereimtheiten. Aber die besprechen wir, wenn wir zu dem Punkt "Begrenzung des Postfachs" kommen. Dazu gehört diese Datei...



Aber machen wir erstmal mit den Fehlermeldungen weiter, wer findet noch welche?
Wie gesagt, das Friendslistmodul und dessen DB-Tabellen sind noch nicht vorhanden. Diese Möglichkeit, dass das Modul fehlt, müsste man später sowieso abfangen. (ist ein TODO für später)


Beim abschicken einer Nachricht kommt bei mir z.B. folgendes:
ZitatNotice: Undefined variable: prefix in /modules/Private_Messages/inboxsize-conf.php on line 3

Error sql_query():
qry: select user_ingroup from _users where uname='Andi'
descr: Table 'dev_pm._users' doesn't exist ( mysql 1146 )

Error sql_query():
qry: select uname from {prefix}_users_ignorelist where uid='2' AND ignoreid='2'
descr: Table 'dev_pm.{prefix}_users_ignorelist' doesn't exist ( mysql 1146 )

Notice: Undefined variable: dbi in /modules/Private_Messages/index.php on line 900

Error sql_query():
qry: SELECT uname, email, user_pm_mail FROM {prefix}_users WHERE uid='2'
descr: Unknown column 'user_pm_mail' in 'field list' ( mysql 1054 )

Notice: Undefined variable: dbi in /modules/Private_Messages/index.php on line 900
Screenie wieder anbei

Ganz ähnliches auch beim Senden über den Messenger...


EDIT: uuups, seid ihr schnell....
das hat sich überschnitten ;)


PS: um den Fehler beim Senden dauerhaft anzuzeigen, einfach im Browser mehrmals die Abbrechen Schaltfläche drücken, bis der eingeleitete refresh abgebrochen wurde.
schön´s Grüssle, Andi

Andi

ZitatIch schätze mal, dies ist der Grund warum mit PM-Begrenzung, der Postausgang nicht stimmt!

Nicht vermuten was passiert, sondern die Ursache für die Fehlermeldung finden ;)


Wichtig ist in dem Fall die fehlende Variable $prefix, die $dbi können wir ertmal ignorieren, dazu etwaas später mehr...

Der passende Link zum Manual:
http://www.php.net/manual/de/language.variables.scope.php

Tip: die Datei inboxsize-conf.php wird innerhalb einer Funktion includet. Welche, das sieht man im Callstack in meinem Screenie...
schön´s Grüssle, Andi

GerhardSt

Das geht ja schnell!
In die zweite Zeile gleich nach <?php gehört
Zitatglobal $prefix;

Bleiben diese zwei
ZitatNotice: Undefined variable: dbi in /modules/Private_Messages/index.php on line 900

Notice: Undefined variable: dbi in /modules/Private_Messages/index.php on line 900

Eismann1976

Hatte ich auch gerade so, allerdings

<?php
global $user_prefix;
$uinfo mxGetUserData();
$qry "select user_ingroup from " $user_prefix "_users where uname='" $uinfo['uname'] . "'";


Jubilee hatte mal geschrieben, dass es ohnehin logisch wäre den user_prefix zu verwenden.

Wenn man das hier gleich so einfliesen lassen könnte müßte ich es nicht immer bei mir umschreiben. Oder hat das Nachteile ?
LG Eismann


Kein Support per PN/ICQ/MSN ect.
Bitte schreibt eure Frage ins Forum, so haben Alle was von der Antwort.
Viele Antworten findest du auch im DOKUWIKI



http://www.wtj-clan.de | pragmaMx 0.1.11.2 &  1.12 RC2 | PHP: 5.2.9 | mysql: 5.1.33 | apache: 2.2.11 (Win32) & Microsoft-IIS/7.5

Andi

#14
Ey, da wird mitgedacht  :thumbup: :thumbup:

Stimmt mit dem Userprefix, hatte ich auch gesehen, wollte ich aber erst später drauf kommen.  ;)
Also, diese Codezeilen sind dann richtig und sollten so übernommen werden.

Aber wie gesagt, mit dieser Datei sind wir noch nicht fertig ;)


Zu $dbi:

$dbi ist eine global verwendete Systemvariable, in der grob gesagt die Datenbankverbindung gespeichert ist. Diese Variable kann man allen pragmaMx-Funktionen übergeben, die die Datenbank ansprechen. Also all dem Kram, welches in der /includes/sql_layer.php drinsteht. Wenn ihr da mal reinschaut könnt ihr das sehen, dass z.B. die Funktion sql_query() einen zweiten optionalen Parameter haben kann. Das ist eigentlich noch ein phpNuke Erbe, dort musste diese $dbi Variable wirklich immer übergeben werden. In pragmaMx kann man die übergeben, braucht aber nicht.
Also kann man in dem Fall die Meldung ignorieren, weil ja unnötig...

Aber wir machen das richtig!
Das ist die betreffende Codezeile:
list($touser_uname,$touser_email,$user_pm_mail) = sql_fetch_row(sql_query("SELECT uname, email, user_pm_mail FROM " . $user_prefix . "_users WHERE uid='$to_userid'", $dbi), $dbi);
Um die Fehlermeldung zu verhindern, löschen wir dort diese Variable $dbi einfach aus den Funktionsparametern raus. Also jeweils $dbi mitsamt dem Komma davor...
Neu:
list($touser_uname,$touser_email,$user_pm_mail) = sql_fetch_row(sql_query("SELECT uname, email, user_pm_mail FROM " . $user_prefix . "_users WHERE uid='$to_userid'"));
Alternativ hätte man auch wieder global $dbi; vor den Funktionsaufruf schreiben können.

Dieser dort in die index.php eingefügte Codeblock hat nen logischen Fehler. Da das aber zum Mailversand gehört besprechen wir das auch später ;)


Funktionen und (optionale) Funktionsparameter:
http://www.php.net/manual/de/language.functions.php
http://www.php.net/manual/de/functions.arguments.php



So jetzt bleiben mir im Moment noch 2 Meldungen:

ZitatError sql_query():
qry: select uname from {prefix}_users_ignorelist where uid='2' AND ignoreid='2'
descr: Table 'dev_pm.{prefix}_users_ignorelist' doesn't exist ( mysql 1146 )

ZitatError sql_query():
qry: SELECT uname, email, user_pm_mail FROM {prefix}_users WHERE uid='2'
descr: Unknown column 'user_pm_mail' in 'field list' ( mysql 1054 )

Zugegeben, das Friendslist modul fehlt, nur deswegen kommen die....
Aber wie verhindern wir das bei den Usern, die das Modul noch garnicht haben?
schön´s Grüssle, Andi

GerhardSt

#15
In der Userinfo, view.php ist das so gelöst
Zitatif (@file_exists('modules/Private_Messages/bbfunctions.php')) {
Bei uns müsste das dann
Zitatif (@file_exists('modules/JSM_Friendlist/index.php')) {
heissen.
Werde das gleich mal versuchen.

Ab Zeile 869 die Ignore Funktion durch das hier ersetzen
Zitat//ignore Funktion
if (@file_exists('modules/Friendlist/index.php')) {
$ignore = sql_query("select uname from " . $user_prefix . "_users_ignorelist where uid='" . $to_userid . "' AND ignoreid='" . $uid . "'");
$nene = sql_num_rows($ignore);
if ($nene == 1) {
         list($ignorename) = sql_fetch_row($ignore);
            prvmsgerror($ignorename . " " . _NOMESSAGE . "<br><a href=\"modules.php?name=$module_name\">" . _PMSRETURNTOPMSG);
       }
}
######

Andi

#16
Jop, die Lösung wäre für die erste Fehlermeldung soweit korrekt  :thumbup:
Könnte so übernommen werden. Natürlich nur, wenn das Friendlist-Modul auch wirklich so heisst.
[OT on]Ich find den Namen doof und ich würde das Ding einfach nur Friendlist nennen.[/OT off]

sehe aber gerade, die 2te Fehlermeldung kommt ja von dieser Datenbankabfrage:
SELECT uname, email, user_pm_mail FROM " . $user_prefix . "_users WHERE uid='$to_userid'
Das Feld user_pm_mail fehlt in der Usertabelle und hat eigentlich mit dem Friendlistmodul nix zu tun, sondern wird nur für den Mailversand benötigt. Anscheinend kann da der User angeben, ob er benachrichtigt werden will...?
schön´s Grüssle, Andi

GerhardSt

Stimmt, da wurde auch was geändert.
Ist schon so lange her, ich glaube das ging so
ZitatALTER TABLE {PRÄFIX}_users ADD user_pm_mail TINYINT(1)

Andi

Oki  :thumbup:

ALTER TABLE `{USER_PREFIX}_users` ADD `user_pm_mail` TINYINT( 1 ) NOT NULL DEFAULT '0';
Also ab damit in die sql Datei ;)




So, auf den ersten Blick sind jetzt alle Fehlermeldungen verschwunden. Ich konnte ohne Meldung ne PM versenden. Die Fehlermeldung im Messenger hat sich automatisch miterledigt...
Klickt mal bitte rum und testet durch, ob noch irgendwo ne Meldung kommt...


Dann machen wir weiter mit dem Postausgang ;)
Aber neuer Thread ;)
schön´s Grüssle, Andi

GerhardSt

@ Eismann1976
Laß dir ruhig Zeit, ich habe gerade noch eine Fehlermeldung entdeckt!

Ich hätte die Fehlermeldungen des PM-Moduls fast vergessen, da gibt es ja das Problem das die PM-Zählerstände immer 0 sind. Diese Meldung erscheint dort
ZitatNotice: Undefined variable: uid in F:\xampp\htdocs\html\modules\Private_Messages\index.php on line 285
Die Fehlermeldung, habe ich dank Andi´s Post von vorher schon wegbekommen, aber der Fehler bleibt.
Zeile 281 von
Zitatglobal $header, $footer, $PHP_SELF, $bgcolor2, $url_button;
auf
Zitatglobal $header, $footer, $PHP_SELF, $bgcolor2, $url_button, $uid;
ändern.