Onlinecounter X7Chat

Allgemeiner Support zum phpBB 2 Board und phpBB 2 Modifikationen
Forumsregeln
Auch wenn hier der Support für phpBB 2 weiterhin aufrecht erhalten bleibt, weisen wir darauf hin, dass das phpBB 2 nicht mehr offiziell unterstützt und weiterentwickelt wird!
Antworten
Max
Beiträge: 628
Registriert: So 23.Jan, 2005 09:54

Onlinecounter X7Chat

Beitrag von Max »

Hallo,


ich habe mir den X7 Chat eingebaut. Das Teil funktioniert auch hervorragend.
Aber es gibt einen klitzekleinen Punkt, an dem ich hängen bleibe.

Man kann mit Hilfe dieses Codes:

Code: Alles auswählen

(&nbsp;<img src="./x7chat/online.php?font_size=10&size_y=10&red=00&green=66&blue=99" border="0" align="absmiddle">)
Die Anzahl der User im Chat anzeigen lassen. Allerdings wird mit der ./x7chat/online.php eine Grafik erzeugt, die dann als Bild eingebunden wird.
Das Problem daran ist, dass das nicht geht, wenn auf dem Server SAFE MODE an ist - dann gibt es keine Grafik.

Also habe ich nachgedacht (was oft schon nichts Gutes verheißt)
Als Erstes habe ich mir mal die /x7chat/online.php geschnappt und soweit herunterreduziert, dass sie nur noch den Wert ausgibt.
Dann habe ich mir den Code mal angeschaut und gedacht; das kommt jetzt (etwas angepasst) in die portal.php

Aber Pustekuchen, da stelle ich mich zu doof an.


Der Code für die portal.php sieht nun so aus:

Code: Alles auswählen

  $exptime = time()-30;
	$sql = "SELECT COUNT * as total_chatter	FROM ".x7chat2_line." WHERE invisible<>'1' AND time>'$exptime'";
	$result = $db->sql_query($sql);
	$countrow = $db->sql_fetchrow($result);
  $x7_on = ('<b>' . $countrow['total_chatter'] . '</b>' . '&nbsp;' . 'User');

  $template->assign_vars(array( 
    'L_X7COUNT'   => $x7_on));
und in die portal_body.tpl habe ich dann an die gewünschte Stelle das hier gesetzt:

Code: Alles auswählen

{L_X7COUNT}
Eigentlich sollte dort ja jetzt nun sowas wie "x User" stehen, Tut es aber nicht, es steht da nur " User"

Ich bekomme keine Fehlermeldung und nichts.
Selbst, wenn ich das hier ".x7chat2_line." gegen ".blablablubb." austausche, passiert gar nichts - nicht einmal eine Fehlermeldung, dass es die Tabelle blablablubb nicht gibt.
Also meine ich, dass mein Fehler in der DB-Abfrage steckt.

Wer kann mir da weiterhelfen? (und tut es auch ;) )



Gruß Max
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Ersetze mal

Code: Alles auswählen

$result = $db->sql_query($sql);
durch

Code: Alles auswählen

if (!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, 'Fehler in der Abfrage', '', __LINE__, __FILE__, $sql);
}
um genau den Fehler eben angezeigt zu bekommen...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Max
Beiträge: 628
Registriert: So 23.Jan, 2005 09:54

Beitrag von Max »

danke, das "klappt" schon mal.
Wenigstens sagt er was:
Fehler in der Abfrage

DEBUG MODE

SQL Error : 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 'as total_chatter FROM x7chat2_online WHERE invisible<>'1' AND time>'1168838650'' at line 1

SELECT COUNT * as total_chatter FROM x7chat2_online WHERE invisible<>'1' AND time>'1168838650'

Line : 976
File : portal.php
Also ist ein Fehler in der Abfrage selber.

Nun sieht der Code so aus:

Code: Alles auswählen

  $exptime = time()-30;
	$sql = "SELECT COUNT ('*') as total_chatter	FROM ".x7chat2_online." WHERE invisible<>'1' AND time>'$exptime'";
	if (!$result = $db->sql_query($sql))
  {
  message_die(GENERAL_ERROR, 'Fehler in der Abfrage', '', __LINE__, __FILE__, $sql);
  }
	$countrow = $db->sql_fetchrow($result);
  $x7_on = ('<b>' . $countrow['total_chatter'] . '</b>' . '&nbsp;' . 'User');

 $template->assign_vars(array( 
    'L_X7COUNT'   => $x7_on));
Und ich bekomme diese Fehlermeldung:
Fehler in der Abfrage

DEBUG MODE

SQL Error : 1305 FUNCTION testdb.COUNT does not exist

SELECT COUNT ('*') as total_chatter FROM x7chat2_online WHERE invisible<>'1' AND time>'1168838985'

Line : 976
File : portal.php
Leider bringt mich das nun grade nicht weiter.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Du musst schon einen Feldnamen anstelle '*' angeben, sonst weiß die Datenbank ja nicht, was gezählt werden soll...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Max
Beiträge: 628
Registriert: So 23.Jan, 2005 09:54

Beitrag von Max »

Ja, hatte ich mir auch schon gedacht, habe es gemacht und nichts bei erreicht:
Fehler in der Abfrage

DEBUG MODE

SQL Error : 1305 FUNCTION testdb.COUNT does not exist

SELECT COUNT (id) as total_chatter FROM x7chat2_online WHERE invisible<>'1' AND time>'1168855860'

Line : 976
File : portal.php
Im Gegenvergleich habe ich auch mal testweise einen nichtexistenten Feldnamen eingetragen - da wurde nur gemeldet, dass es den nicht gibt.

Die SQL-Zeile sieht nun so aus:

Code: Alles auswählen

$sql = "SELECT COUNT (id) as total_chatter	FROM ".x7chat2_online." WHERE invisible<>'1' AND time>'$exptime'";
Ich häge hiermit fest, weil ich den Fehler nicht finde/sehe.



EDIT:
Erledigt, was ein Leerzeichen ausmacht......
Die SQL-Zeile muss lauten:

Code: Alles auswählen

$sql = "SELECT COUNT(id) as total_chatter	FROM ".x7chat2_online." WHERE invisible<>'1' AND time>'$exptime'";
Also COUNT(id) und nicht COUNT (id)


Danke für die Hilfe und Aktion beendet :)



Gruß Max
Zuletzt geändert von Max am Mo 15.Jan, 2007 11:23, insgesamt 1-mal geändert.
Benutzeravatar
oxpus
Administrator
Beiträge: 28735
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Beitrag von oxpus »

Öh, ja, da war ich jetzt garnicht drauf fixiert, denn ich ging davon aus, daß dort keins ist...
Merke (gilt nicht für PHP!): Werte werden in SQL immer in Klammern und ohne Leerzeichen vom Anweisungsnamen geschrieben.

Da muss man wirklich immer genau hinschauen, was aus Zeitmangel oft übersehen wird...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Max
Beiträge: 628
Registriert: So 23.Jan, 2005 09:54

Beitrag von Max »

[quote="oxpus";p="68762"]Da muss man wirklich immer genau hinschauen, was aus Zeitmangel oft übersehen wird...[/quote]

So ist es.
Aber wenn man Fehler nicht macht, kann man auch nicht daraus lernen.

Ich hatte also gestern schon etliche Male alles korrekt, aber das Leerzeichen... Ich habe es einfach nicht für voll genommen.
Nun weiß ich´s und es steht hier als "Mahnmal" für alle.



Gruß Max
Benutzeravatar
AmigaLink
Beiträge: 5843
Registriert: Mi 03.Mär, 2004 09:05
Wohnort: NRW
Kontaktdaten:

Beitrag von AmigaLink »

Aber wenn man Fehler nicht macht, kann man auch nicht daraus lernen.
Stimmt. :)

Und Leerzeichen sind noch lange nicht so fatal wie Hochkommas!
Ein Leerzeichen zuviel oder zuwenig habe ich meistens recht schnell gefunden. Aber ein Fehler in den Hochkommas, hat mich auch schon mal nen ganzen Tag gekostet. :wall:
[center].: Web Relax .::. Essen mit Freude .::. AmigaLink.de :.
______________________________________

Kein Support per PM, ICQ oder eMail!!!
[/center]
Max
Beiträge: 628
Registriert: So 23.Jan, 2005 09:54

Beitrag von Max »

[quote="AmigaLink";p="68784"]Aber ein Fehler in den Hochkommas, hat mich auch schon mal nen ganzen Tag gekostet. [/quote]

Sowas sehe ich im Weaverslave.
Dort wird der Code immer farbig dargestellt, wenn ein " oder ein ' zuviel oder zu wenig ist, ändert sich die Farbe des folgenden Codes, so dass man sofort sieht, dass da was nicht mehr (oder zu früh) als php-Code läuft.
Das hat mir schon oft weiter geholfen, besonders wenn man irgendwelche verschachtelten Links vorbereiten will und da mit . und " und ' agieren muss.


Zum Thema, für andere X7-Nutzer:


das hier in die includes(page_header.php

Code: Alles auswählen

// X7 Counter Anfang
  $exptime = time()-30;
   $sql = "SELECT COUNT(id) as total_chatter   FROM ".x7chat2_online." WHERE invisible<>'1' AND time>'$exptime'";
   if (!$result = $db->sql_query($sql))
  {
  message_die(GENERAL_ERROR, 'Fehler in der Abfrage', '', __LINE__, __FILE__, $sql);
  }
   $countrow = $db->sql_fetchrow($result);
  $x7_on = ('<b>(' . $countrow['total_chatter'] . ')</b>' . '&nbsp;' . 'User im Chat');
  $x7_on_h = ('Chat&nbsp;/&nbsp;<b>(' . $countrow['total_chatter'] . ')</b>' . '&nbsp;' . 'Besucher');
 $template->assign_vars(array(
    'L_H_X7COUNT'   => $x7_on_h,
    'L_X7COUNT'   => $x7_on));
// X7 Counter Ende
und zwar vor:

Code: Alles auswählen

$template->assign_vars(array(
   'SITENAME' => $board_config['sitename'],

dann hat man zwei Möglichkeiten boardweit zur Verfügung, um den Zähler in den *.tpl anzuzeigen.

Variante 1: {L_H_X7COUNT} ---> sieht so aus: Chat / (0) Besucher

Variante 2: {L_X7COUNT} ---> sieht so aus: (0) User im Chat



Gruß Max
Antworten