PHP-Script: Fragen!

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

PHP-Script: Fragen!

Beitrag 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
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag 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.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Na dann.
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag von leopittoni »

Na dann, danke!

Kann mir vielleicht jemand anders helfen?

Léo
Benutzeravatar
leopittoni
Mitglied
Beiträge: 1162
Registriert: 26.04.2004 20:17

Beitrag 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
Benutzeravatar
easygo
Mitglied
Beiträge: 2170
Registriert: 03.09.2004 13:45
Kontaktdaten:

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

Zurück zu „Coding & Technik“