Seite 1 von 1

[erledigt] suche "user ist mitglied snippet"

Verfasst: 08.08.2006 00:01
von QO
Servus

Ich möchte eine funktion bei mir im Forum einbauen, finde jedoch nichts in diese richtung.

Es soll überprüfen ob ein user mitglied/gruppemleiter einer gruppe ist. Dazu soll ein varchar mit den gruppen id's zum überprüfen verwendet werden , die mit "," getrennt werden z.B. '1,8,25' und in der DB gespeichert werden

Als ergebniss soll ein string o.ä. weitergegeben werden, den man dann in einer if-funktion weiterverwenden kann.

Ich habe vom Admin_userlist_mod ein teil bereits lösen können, aber es funktioniert nicht wenn ichs in einer anderen php-datei verwende. es gibt dann ne fehlermeldung.

Folgenden Code hab ich herrausgefiltert/angepasst

Code: Alles auswählen

			$test = '82';
			$ist_gruppenmitglied = 'n';
			$group_sql = "SELECT * FROM " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g
				WHERE ug.user_id = " . $row['user_id'] . "
				 AND g.group_single_user <> 1
				 AND g.group_id = ug.group_id
				 AND g.group_id = $test";
				
			if( !($group_result = $db->sql_query($group_sql)) )
			{
				message_die(GENERAL_ERROR, 'Could not query groups', '', __LINE__, __FILE__, $group_sql);
			}
			while ( $group_row = $db->sql_fetchrow($group_result) )
			{
				//
				// assign the group varibles
				//
				if ( $group_row['group_moderator'] == $row['user_id'] )
				{
					$ist_gruppenmitglied = 'j';
				}
				else if ( $group_row['user_pending'] == true )
				{
				}
				else
				{
					$ist_gruppenmitglied = 'j';
				}

			}
  • $test soll die gruppen-id sein
    $ist_gruppenmitglied ändert sich von "n" zu "j" wenn user mitglied einer der gesuchten $test-gruppe ist


Problem 1: Ich erhalte folgende fehlermeldung sobald es in einer anderen php-datei ist:

Code: Alles auswählen

Could not query groups

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 'AND g.group_single_user <> 1 AND g.group_id = ug.group_id AND g.grou' at line 3

SELECT * FROM phpbb_user_group ug, phpbb_groups g WHERE ug.user_id = AND g.group_single_user <> 1 AND g.group_id = ug.group_id AND g.group_id = 82
Problem 2: Wie ersetzte ich $test mit dem wert aus der DB?


Hoffe ihr könnt mir helfen.

QO

Verfasst: 08.08.2006 00:13
von S2B
Soll es "ein Mitglied" sein oder der aktuell eingeloggte Benutzer?
Wenn es der aktuelle Benutzer sein soll, musst du lediglich das

Code: Alles auswählen

$row['user_id']
mit

Code: Alles auswählen

$userdata['user_id']
ersetzen. :wink:

Verfasst: 08.08.2006 00:29
von QO
DANKE

ja, ein aktueller. Also, Problem 1 ist gelöst.

Wie mache ich das jetzt mit den werten die in der DB gespeichert werden, also wie ersetzte ich $test?

Verfasst: 08.08.2006 00:55
von S2B
Du könntest das ganze z.B. in der phpbb_config speichern. Wie das geht, steht im zweiten Teil dieses Beitrags. :wink:

Edit: Und schon gibt's ein Snippet dafür. *g*
http://www.phpbb.de/viewtopic.php?t=127917

Verfasst: 08.08.2006 02:38
von QO
Danke für deine schnelle hilfe

Leider mache ich trotzdem etwas falsch

Also, ich hab ne neue tabelle gemacht:


Code: Alles auswählen

CREATE TABLE `phpbb_test` (
  `test_id` mediumint(8) NOT NULL auto_increment,
  `test_name` varchar(40) collate latin1_general_ci NOT NULL default '',
  PRIMARY KEY  (`test_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=89 ;

-- 
-- Daten für Tabelle `phpbb_test`
-- 

INSERT INTO `phpbb_test` VALUES (1, '1,2,3,82');
INSERT INTO `phpbb_test` VALUES (2, '10');
  • 82 ist die testgruppen-id in der der user mitglied ist
ich habs auch mit der config-tabelle probiert, aber irgendwie wills das auch net.

Der code dann müsste doch so lauten?

Code: Alles auswählen

         $ist_gruppenmitglied = 'n';
         $group_sql = "SELECT * FROM " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g
            WHERE ug.user_id = " . $userdata['user_id'] . "
             AND g.group_id = " . $board_config['test'] . "
			 AND g.group_single_user <> 1
             AND g.group_id = ug.group_id";
             
            
         if( !($group_result = $db->sql_query($group_sql)) )
         {
            message_die(GENERAL_ERROR, 'Could not query groups', '', __LINE__, __FILE__, $group_sql);
         }
         while ( $group_row = $db->sql_fetchrow($group_result) )
         {
            //
            // assign the group varibles
            //
            if ( $group_row['group_moderator'] == $userdata['user_id'] )
            {
               $ist_gruppenmitglied = 'j';
            }
            else if ( $group_row['user_pending'] == true )
            {
            }
            else
            {
               $ist_gruppenmitglied = 'j';
            }

         } 
bzw. man setzt vorher $board_config['test'] ein und ruft 'test' im sql auf, oder? Jedenfalls hat das und div. andere versuche kein erfolg gebracht :(

EDIT: Du meinst mit dem snipet von dir das ich wie oben es mache nur das ich vorn z.B. $test = $board_config['test']? hab ich auch schon probiert.

Verfasst: 08.08.2006 14:37
von S2B
Was willst du denn jetzt genau machen? Soll für jeden Benutzer eine andere Überprüfung erfolgen oder immer die gleiche?

Verfasst: 08.08.2006 16:41
von QO
Hi

Hmmmm, wie beschreib ichs am Besten. Also das ganze wird zur Gruppenverwaltung bei mir benötigt damit es für den user übersichtlicher wird (Gruppen werden bei mir u.a. für Gruppenmails verwendet)




vereinfachtes Bsp. meiner Gruppen

Hauptgruppe A
  • Sub-gruppe1
    Subgruppe2
    Subgruppe3
HauptgruppeB
  • Sub-gruppe1
    Subgruppe2
Hauptgruppe C
  • Sub-gruppe1
    Subgruppe2
    Subgruppe3
Da die "Sub-gruppen" nur von den usern aus der Hauptgruppe (manchmal mehrere) benutzt werden kann egal ob mitglied der gruppe oder nicht, will ich diese von den anderen Gruppen verstecken.

Es ist alles soweit vorbereitet, d.h. ich kann bereits die id's im acp eingeben, es wird gespeichert und lässt sich ändern. Das gleiche gilt auch für die groupcp.php. Es läuft soweit.

Ich hab die Testtabelle oben als allgemeines bsp. angegeben. In meinem Fall werden die Gruppen-ID's auch in der gruppentabelle eingefügt, d.h. jede gruppentabelle erhält zusätzlich den wert der gruppen die die entsprechenden rechte später hat.

Jedenfalls reicht mein php-wissen nur nicht aus um den Wert aus der db aufzurufen und dann den array in meiner abfrage zu setzten. :( Mit learning by doing hab ich diesen schritt nochnicht lösen können.

Hoffe das hilt jetzt weiter. Wenn nicht, dann mach ich das mal zeichnerisch ;)

QO

Verfasst: 08.08.2006 20:43
von S2B
So wie ich das jetzt verstanden habe, fehlt dir im Moment nur so etwas:

Code: Alles auswählen

$group_sql = "SELECT COUNT(group_id) AS count
	FROM " . USER_GROUP_TABLE . " ug, " . GROUPS_TABLE . " g
	WHERE ug.user_id = " . $userdata['user_id'] . "
		AND g.group_id IN(" . $board_config['test'] . ")
		AND g.group_single_user <> 1
		AND g.group_id = ug.group_id";
if (!$group_result = $db->sql_query($group_sql))
{
	message_die(GENERAL_ERROR, 'Could not query groups', '', __LINE__, __FILE__, $group_sql);
}
$group_status = ($db->sql_fetchfield('count', 0, $result)) ? true : false;
(Ich habe einfach nochmal dein $board_config-Beispiel übernommen, denn deinem Konzept konnte ich nicht zu 100% folgen. *g*

Verfasst: 08.08.2006 23:11
von QO
DANKE
S2B hat geschrieben: (Ich habe einfach nochmal dein $board_config-Beispiel übernommen, denn deinem Konzept konnte ich nicht zu 100% folgen. *g*
geht mir genauso :D und deins hab ich entweder nicht richtig eingesetzt, oder es ging auch nicht.

Jedenfals konnte dank deinen letzten code und weitere 2 Stunden experimentieren ne funktionierende lösung finden.

Jetzt muss ich nur noch alles säubern und dann gibts nen update von meinem verwaltungsgruppen mod...

Nochmals, danke

QO