Seite 1 von 2

PHP-Script: Fragen!

Verfasst: 12.08.2006 15:03
von leopittoni
Hallo

Ich versuche, die admin_forums.php so umzuändern, dass beim erstellen eines neuen Forums, auch eine neue gleichnamige Benutzergruppe erstellt wird, die automatisch Rechte für das Forum erhält.

Leider krieg ichs nicht gebacken...

Ich habe ein Extrafeld in der DB gemacht, so siehts aus:
(Um alle DB-Felder mit der selben ID ansprechen zu können)
In: phpbb_forums und phpbb_groups und phpbb_auth_access

Code: Alles auswählen

product_id , smallint(5), UNSIGNED, Null=Nein, Standard=0
Meine admin_forums.php sieht so aus. (Ausschnitt)

Code: Alles auswählen

			//
			// Create a forum in the DB
			//
			if( trim($HTTP_POST_VARS['forumname']) == "" )
			{
				message_die(GENERAL_ERROR, "Can't create a forum without a name");
			}

			$sql = "SELECT MAX(forum_order) AS max_order
				FROM " . FORUMS_TABLE . "
				WHERE cat_id = " . intval($HTTP_POST_VARS[POST_CAT_URL]);
			if( !$result = $db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, "Couldn't get order number from forums table", "", __LINE__, __FILE__, $sql);
			}
			$row = $db->sql_fetchrow($result);

			$max_order = $row['max_order'];
			$next_order = $max_order + 10;
			
			$sql = "SELECT MAX(forum_id) AS max_id
				FROM " . FORUMS_TABLE;
			if( !$result = $db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, "Couldn't get order number from forums table", "", __LINE__, __FILE__, $sql);
			}
			$row = $db->sql_fetchrow($result);

			$max_id = $row['max_id'];
			$next_id = $max_id + 1;
			
			$sql = "SELECT MAX(product_id) AS max_product
				FROM " . FORUMS_TABLE;
			if( !$result = $db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, "Couldn't get order number from forums table", "", __LINE__, __FILE__, $sql);
			}
			$row = $db->sql_fetchrow($result);

			$max_product = $row['max_product'];
			$next_product = $max_product + 1;

			//
			// Default permissions of public :: 
			//
			$field_sql = "";
			$value_sql = "";
			while( list($field, $value) = each($forum_auth_ary) )
			{
				$field_sql .= ", $field";
				$value_sql .= ", $value";

			}

			// There is no problem having duplicate forum names so we won't check for it.
			$sql = "INSERT INTO " . FORUMS_TABLE . " (forum_id, product_id, forum_name, cat_id, forum_desc, forum_order, forum_status, prune_enable" . $field_sql . ")
				VALUES ('" . $next_id . "', '" . $next_product . "', '" . str_replace("\'", "''", $HTTP_POST_VARS['forumname']) . "', " . intval($HTTP_POST_VARS[POST_CAT_URL]) . ", '" . str_replace("\'", "''", $HTTP_POST_VARS['forumdesc']) . "', $next_order, " . intval($HTTP_POST_VARS['forumstatus']) . ", " . intval($HTTP_POST_VARS['prune_enable']) . $value_sql . ")";
			if( !$result = $db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, "Couldn't insert row in forums table", "", __LINE__, __FILE__, $sql);
			}
			
			
			//
			// GLEICHTZEITIG GLEICHNAMIGE BENUTZERGRUPPE ERSTELLEN :: START
			//
			
	
			$sql = "INSERT INTO " . GROUPS_TABLE . " (group_type, group_name, group_description, group_moderator, group_single_user, product_id)
VALUES ('2', '" . str_replace("\'", "''", $HTTP_POST_VARS['forumname']) . "', '" . str_replace("\'", "''", $HTTP_POST_VARS['forumdesc']) . "', '2', '0', '" . $next_product . "')";
			if ( !$db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, 'Could not insert new group', '', __LINE__, __FILE__, $sql);
			}

$new_group_id = $db->sql_nextid();
			$sql = "INSERT INTO " . USER_GROUP_TABLE . " (group_id, user_id, user_pending)
				VALUES ($new_product, '2', 0)";
			if ( !$db->sql_query($sql) )
			{
				message_die(GENERAL_ERROR, 'Could not insert new user-group info', '', __LINE__, __FILE__, $sql);
			}
			
			
			//
			// GLEICHTZEITIG GLEICHNAMIGE BENUTZERGRUPPE ERSTELLEN :: ENDE
			//
			
			//
			// GLEICHTZEITIG RECHTE DER NEUEN BENUTZERGRUPPE FUER NEUES FORUM VERGEBEN :: START
			//
			
			$sql = "INSERT INTO " . AUTH_ACCESS_TABLE . " (group_id, forum_id, auth_view, auth_read, auth_post, auth_reply, auth_edit, auth_delete, auth_sticky, auth_announce, auth_vote, auth_pollcreate, auth_attachments, auth_mod)
			VALUES ($new_group_id, $next_id, $next_product, '1', '1', '1', '1', '1', '0', '0', '0', '1', '1', '1', '0')";
			
			if ( !($result = $db->sql_query($sql)) )
			{
				message_die(GENERAL_ERROR, "Couldn't update auth access", "", __LINE__, __FILE__, $sql);
			}
			
			
			//
			// GLEICHTZEITIG RECHTE DER NEUEN BENUTZERGRUPPE FUER NEUES FORUM VERGEBEN :: ENDE
			//
			
			
			
			if( $HTTP_POST_VARS['prune_enable'] )
			{

				if( $HTTP_POST_VARS['prune_days'] == "" || $HTTP_POST_VARS['prune_freq'] == "")
				{
					message_die(GENERAL_MESSAGE, $lang['Set_prune_data']);
				}

				$sql = "INSERT INTO " . PRUNE_TABLE . " (forum_id, prune_days, prune_freq)
					VALUES('" . $new_group_id . "', " . intval($HTTP_POST_VARS['prune_days']) . ", " . intval($HTTP_POST_VARS['prune_freq']) . ")";
				if( !$result = $db->sql_query($sql) )
				{
					message_die(GENERAL_ERROR, "Couldn't insert row in prune table", "", __LINE__, __FILE__, $sql);
				}
			}

			$message = $lang['Forums_updated'] . "<br /><br />" . sprintf($lang['Click_return_forumadmin'], "<a href=\"" . append_sid("admin_forums.$phpEx") . "\">", "</a>") . "<br /><br />" . sprintf($lang['Click_return_admin_index'], "<a href=\"" . append_sid("index.$phpEx?pane=right") . "\">", "</a>");

			message_die(GENERAL_MESSAGE, $message);

			break;
Das Forum wird erstellt, aber nicht die Benutzergruppe...

Wer kann mir helfen? Danke!
Léo

Verfasst: 12.08.2006 17:21
von leopittoni
Was momentan funktioniert:

Das Forum wird erstellt.

Was nicht funktioniert:

Es wird keine Benutzergruppe erstellt, auch keinen Eintrag in der DB phpbb_auth_access.

In der DB ist ausserdem die neu hinzugefügte "product_id" immer 0.

Danke für Hilfe! Léo

Verfasst: 13.08.2006 14:41
von leopittoni
Hmm, kann mir denn niemand helfen?

Was stimmt daran nicht?

Code: Alles auswählen

// 
         // GLEICHTZEITIG GLEICHNAMIGE BENUTZERGRUPPE ERSTELLEN :: START 
         // 
          
    
         $sql = "INSERT INTO " . GROUPS_TABLE . " (group_type, group_name, group_description, group_moderator, group_single_user, product_id) 
VALUES ('2', '" . str_replace("\'", "''", $HTTP_POST_VARS['forumname']) . "', '" . str_replace("\'", "''", $HTTP_POST_VARS['forumdesc']) . "', '2', '0', '" . $next_product . "')"; 
         if ( !$db->sql_query($sql) ) 
         { 
            message_die(GENERAL_ERROR, 'Could not insert new group', '', __LINE__, __FILE__, $sql); 
         } 

$new_group_id = $db->sql_nextid(); 
         $sql = "INSERT INTO " . USER_GROUP_TABLE . " (group_id, user_id, user_pending) 
            VALUES ($new_product, '2', 0)"; 
         if ( !$db->sql_query($sql) ) 
         { 
            message_die(GENERAL_ERROR, 'Could not insert new user-group info', '', __LINE__, __FILE__, $sql); 
         } 
          
          
         // 
         // GLEICHTZEITIG GLEICHNAMIGE BENUTZERGRUPPE ERSTELLEN :: ENDE 
         // 
Danke, Léo

Verfasst: 14.08.2006 17:23
von leopittoni
sorry für den "quad-post" aber kann mir denn wirklich niemand weiterhelfen? Sollte doch für Erfahrende wie ihr kein Problem sein...

Danke im Voraus! Léo

Verfasst: 14.08.2006 19:07
von Miriam
Dann will ich mal Deine Posting-Strähne unterbrechen.

Probleme, die mir aufgefallen sind:

Code: Alles auswählen

$sql = "INSERT INTO " . USER_GROUP_TABLE . " (group_id, user_id, user_pending)
            VALUES ($new_product, '2', 0)";
Was hat da $new_product zu suchen? Meintest Du $new_group_id?

Code: Alles auswählen

$sql = "INSERT INTO " . PRUNE_TABLE . " (forum_id, prune_days, prune_freq)
               VALUES('" . $new_group_id . "', " . intval($HTTP_POST_VARS['prune_days']) . ", " . intval($HTTP_POST_VARS['prune_freq']) . ")";
Meintest Du anstelle $new_group_id etwas $next_id?

Da sind bestimmt noch mehr Ungereimtheiten, die mir jetzt nicht aufgefallen sind....

Debugge mal selbst ein bisschen, anstatt zu warten, dass Dir die Codes gerade gebogen werden.
Lass' Dir mal Deine Variablen anzeigen, damit Du siehst, welche Werte sie zu Laufzeit haben.

Verfasst: 14.08.2006 20:14
von leopittoni
Hi

Wie im ersten Post beschrieben, ist das DB-Feld "product_id" neu von mir erstellt.

Das Problem liegt also nicht daran...

Léo

Verfasst: 14.08.2006 21:01
von Miriam
Na dann.

Verfasst: 15.08.2006 20:28
von leopittoni
Na dann, danke!

Kann mir vielleicht jemand anders helfen?

Léo

Verfasst: 16.08.2006 18:28
von leopittoni
Hmm, niemand? Sorry, ich weiss ich schreib ein bisschen viel in meinem eigenen Thema... Aber ich kriegs einfach nicht hin, und sooo schwer sollte das doch eigentlich auch nicht sein...

Oder?

Danke, Léo

Verfasst: 19.08.2006 13:51
von easygo
Versuchs einfach mal mit verschiedenen Namen bei mehreren inserts

Als Beispiel Nummern: $sql, $sql1, $sql2, ...

und setz die message_dies geschlossen drunter. easy