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
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
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
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
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
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
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
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

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
dank dir
lg
4seven