Seite 1 von 2

Admin doppelt in der Viewonline nach Login in das ACP

Verfasst: 31.10.2007 02:34
von 4seven
Hallo an alle,

ich habe folgendes Problem (vermutl. wegen einbau von Count_Hidden_Users_@_Guests und advanced_ip_tracking).

Wenn ich mich als Admin ins ACP einlogge, stehe ich in der viewonline doppelt (allerdings nur für 20 min., dann wieder einmal)
Auf der index und admin_index ist dabei alles normal.

Meine Vermutung ist ein temporäres doppeltes sessionhandling, hab auch schon mit den originaldateien verglichen (auch session_time in viewonline und pageheader etc.) und die mods bis zum excess :roll:

Nun, da es ein "kosmetisches" Problem zu sein scheint, habe ich folgende Frage.

Ist es möglich, eine Anweisung in die viewonline.php zu integrieren, die folgendes bewirkt ?

Wenn (User doppelt angezeigt wird)
Dann (ziehe ihn einmal ab)


Wäre klasse, wenn das möglich wäre :wink:

lg
4seven

Verfasst: 01.11.2007 13:24
von 4seven
Hallo PHPBB-Freunde,

ich hab es jetzt soweit analysiert:

In der SQL-Datenbank unter phpbb_sessions > session_id..

..tauche ich nach dem Admin-Login unter session_user_id 7 + session_admin 0 auf.
Log ich mich dann als Admin in das ACP ein,
taucht unter session_id eine zweite Session als session_user_id 7 + session_admin 1 auf.

Gut, soweit nichts außergewöhnliches.
Lösche ich jetzt manuell die erste Session, wo session_user_id 7 + session_admin 0 steht,
dann stehe ich, wie gewünscht, nur einmal in der viewonline.php

(Zur Erinnerung, auf der index und der admin_index stehe ich immer nur einmal, also korrekt)

Ich kann einfache Scripte selbst entwerfen und vorhandene gut anpassen aber zu der Lösung fehlt mir schlicht das know-how.
Meine Frage an die PHP-Kundigen unter euch:

Wie erreiche ich in der viewonline.php eine SQL-Anweisung, die folgendes tut (bitte nicht lachen *g)

Wenn eine Session mit (session_user_id 7 + session_admin 1) existiert
Dann lösche eine schon vorhandene, die aus (session_user_id 7 + session_admin 0) besteht

pls help

lg
4seven

Verfasst: 01.11.2007 15:30
von 4seven
Ist diese Lösung für mein Problem richtig?

if ( $sql['session_user_id'] != 7 || $userdata['session_admin'] != 1 ){
$sql = ALTER TABLE 'session_id' DROP (['session_user_id'] != 7 || $userdata['session_admin'] != 0);
}


.....EDIT: Das hat natürlich nicht funktioniert :roll:

lg
4seven

Verfasst: 02.11.2007 05:51
von 4seven
Hallo PHPBB-Freunde,

nach Codesuche und rumprobieren konnte ich das, was ich realisieren möchte, schonmal im MYSQL ausführen:

Code: Alles auswählen

SELECT * FROM phpbb_sessions 
WHERE `session_user_id`=7
AND `session_admin`=0
UNION
SELECT * FROM phpbb_sessions 
WHERE `session_user_id`=7
AND `session_admin`=1;
DELETE FROM phpbb_sessions 
WHERE `session_user_id`=7
AND `session_admin`=0
Funktioniert 1A. Jetzt komm ich aber wirklich nicht mehr allein weiter und hab nach einiger Zeit aufgegeben.

Also, meine Frage an die PHP-Cracks:

Wie implementiere ich die obige Lösung in die viewonline.php?

__________________________________________________________


mysql_query(
"SELECT * FROM phpbb_sessions
WHERE session_user_id='7'
AND session_admin='0'
UNION
SELECT * FROM phpbb_sessions
WHERE session_user_id='7'
AND session_admin='1';
DELETE FROM phpbb_sessions
WHERE session_user_id=7
AND session_admin='0'");

.....und ähnliche Codeversuche haben nicht funktioniert.

Wer hat einen Tip???

lg
4seven

Verfasst: 02.11.2007 08:52
von Boecki91
schaue es dir doch mal aus den vorgegebenen SQL Abfragen ab :wink:

Desweiteren frage ich mich warum du nicht den Ursprung des Problems suchst, sondern einfach die Auswirkungen behebst.


So sollte es Funktionieren:

Code: Alles auswählen

		$sql = "Meine Coole SQL Abfrage";
		if ( !$db->sql_query($sql) )
		{
			message_die(GENERAL_ERROR, "Meine coole SQL Abfrage ging nicht", "", __LINE__, __FILE__, $sql);
		}
Und wenn du anstatt phpbb-sessions die bereits vorhandene Konstante nimmst ( SESSIONS_TABLE ) entspricht das ganze viel mehr dem Standard :D

Du weißt hoffentlich auch das das ganze 2 SQL Abfragen/Anweisungen sind und es der DELETE Anweisung in deinem Fall egal ist ob vorher was SELECT selektiert wurde oder eben nicht.
Du wirst dich wahrscheinlich nicht einloggen können wenn jemand gerade die viewonline.php aktualisiert.

Verfasst: 02.11.2007 15:17
von 4seven
Hallo Boecki91,

erstmal vielen Dank für deine Hilfe :grin:

Was ich mit dem SELECT und UNION erreichen wollte, ist folgendes:

______________________________

Nur wenn

SELECT * FROM phpbb_sessions
WHERE `session_user_id`=7
AND `session_admin`=0

und

SELECT * FROM phpbb_sessions
WHERE `session_user_id`=7
AND `session_admin`=1;

(also beide Bedingungen) zutreffend sind, dann

DELETE FROM phpbb_sessions
WHERE `session_user_id`=7
AND `session_admin`=0
_______________________________


Wie wäre denn die richtige Anweisung,
um eine Abfrage in der Syntax zu erstellen?


Und, natürlich wäre mir eine Lösung des Problems lieber.
Aber ich kann in der viewonline.php und page_header.php keinen Fehler entdecken :roll:

lg
4seven

Verfasst: 03.11.2007 09:44
von 4seven
Hallo nochmal,

hier mal die relevanten Dateien, falls jemand die viewonline.php und page_header.php überfliegen möchte. Ich würd mich sehr drüber freuen.

Achja, was mir auffiel ist, das *es beim "versteckten Admin" (anderer Benutzername) nicht passiert (*Symptome siehe oben) .... Schonmal ein Indiz.

Die Syntax für die "SQL-Anweisung mit 4 Bedingungen" herzustellen hab ich nach langem recherchieren + hin und herprobieren aufgegeben, aber eine andere Lösung gefunden. Ich habe die Anweisung von Boecki91 mit dem SQL-Code...

Code: Alles auswählen

$sql = "DELETE FROM phpbb_sessions
WHERE session_user_id = 7
AND session_admin = 0";
if ( !$db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Meine coole SQL Abfrage ging nicht", "", __LINE__, __FILE__, $sql);
}
...in die admin_index gepackt. So wird sie, sobald ich mich ins ACP einlogge, automatisch ausgeführt. Immerhin ne gute Notlösung.


P.S. nochmal an Boecki91:
Die Variable SESSIONS_TABLE hat aus unerfindlichen Gründen nicht funktioniert.


Schönes WE an alle

lg
4seven

Verfasst: 04.11.2007 14:02
von 4seven
...nochmal hochschieb :roll:

Verfasst: 04.11.2007 14:40
von Boecki91

Code: Alles auswählen

$sql = "DELETE FROM " . SESSIONS_TABLE . "
WHERE session_user_id = 7
AND session_admin = 0"; 
Wieso sollte das nicht gehen?

Verfasst: 04.11.2007 14:49
von 4seven
*kopfklatsch*, klar, bei solchen anweisungen gehören ja punkte mit leerstelle rein :D

dank dir :wink:

lg
4seven