Forum verstecken aber vollzugriff beibehalten

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Christian Benz
Mitglied
Beiträge: 854
Registriert: 25.02.2004 00:41
Wohnort: Regen
Kontaktdaten:

Beitrag von Christian Benz »

Hallo,

ausgehend von der eingefügten Zeile ...

Code: Alles auswählen

WHERE f.forum_id != xxx
(siehe http://www.phpbb.de/viewtopic.php?t=61396)

... müßte es doch eingentlich reichen, diese Zeile im Falle eines Moderators oder Admins nicht wirksam werden zu lassen. Also praktisch in der Art:

if (AktuellerUser = Moderator) OR (AktuellerUser = Admin))
{ [nix] } else { WHERE f.forum_id != xxx }


Vielleicht kann das (oder was ähnliches in dieser Richtung) mal jemand in gültiges php umsetzen. :wink:

Gruß,
Christian
Benutzeravatar
Rainer4ever
Mitglied
Beiträge: 352
Registriert: 10.10.2003 22:51
Wohnort: Ribnitz-Damgarten
Kontaktdaten:

Beitrag von Rainer4ever »

Ich möchte das eine Forum als eine Art "Forum Shop" nutzen. (Amazon Mod)

Dieses soll dann aber eben nicht über den normalen Forum Index zu erreichen sein, sondern eben über einen Link im Header. Das ist etwas übersichtlicher als wieder ein extra Sub-Forum im index.

Auf jeden Fall, danke für die Hilfe ;)

Gruss
Benutzeravatar
JB007
Mitglied
Beiträge: 102
Registriert: 23.07.2004 07:52
Wohnort: Troisdorf
Kontaktdaten:

Beitrag von JB007 »

Christian Benz hat geschrieben:Hallo,

ausgehend von der eingefügten Zeile ...

Code: Alles auswählen

WHERE f.forum_id != xxx
(siehe http://www.phpbb.de/viewtopic.php?t=61396)

... müßte es doch eingentlich reichen, diese Zeile im Falle eines Moderators oder Admins nicht wirksam werden zu lassen. Also praktisch in der Art:

if (AktuellerUser = Moderator) OR (AktuellerUser = Admin))
{ [nix] } else { WHERE f.forum_id != xxx }


Vielleicht kann das (oder was ähnliches in dieser Richtung) mal jemand in gültiges php umsetzen.
So müsste es eigentlich funktionieren.

Jetzt bräuchten wir nur noch jemanden, der soviel Ahnung von PHP hat, dass er uns sagt, wie? :wink:
Christian Benz
Mitglied
Beiträge: 854
Registriert: 25.02.2004 00:41
Wohnort: Regen
Kontaktdaten:

Beitrag von Christian Benz »

Hallo,

ich glaube ich habe eine Lösung gefunden. Hilfreich dabei waren die Infos unter "Vorlage für in phpBB eingebundene Seiten - Prüfung der Benutzerrechte".

Diesen Codeteil aus der index.php:

Code: Alles auswählen

$sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
                                FROM (( " . FORUMS_TABLE . " f
                                LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )
                                LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id )
                                ORDER BY f.cat_id, f.forum_order";
                        break;
... habe ich durch folgenden Code ersetzt:

Code: Alles auswählen

if ( ($userdata['user_level'] == ADMIN) OR ($userdata['user_level'] == MOD))
                        {
                        $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
                                FROM (( " . FORUMS_TABLE . " f
                                LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )
                                LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id )
                                ORDER BY f.cat_id, f.forum_order";
                        break;
                        }
                        else
                        {
                        $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
                                FROM (( " . FORUMS_TABLE . " f
                                LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )
                                LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id )
                                WHERE f.forum_id != xxx
                                ORDER BY f.cat_id, f.forum_order";
                        break;
                        }
Dabei gilt wieder: xxx steht für die zu versteckende Foren-ID.

Keine Garantie oder Gewähr! :wink: (Bei mir scheint es jedenfalls zu funktionieren.) Vielleicht kann das aber ein php- und phpbb-Kenner zur Sicherheit mal prüfen, ob das auch so in Ordnung und "unbedenklich" ist.

Gruß,
Christian
Benutzeravatar
JB007
Mitglied
Beiträge: 102
Registriert: 23.07.2004 07:52
Wohnort: Troisdorf
Kontaktdaten:

Beitrag von JB007 »

Hmmm. Bei mir passiert da gar nichts. Also es ändert sich nichts an der Ansicht. :-? Eine Fehler-Meldung erhalte aber erfreulicherweise aber auch nicht, also kann dein Code nicht so falsch sein.

Kannst du vielleicht mal deinen kompletten Code für den Bereich

Code: Alles auswählen

		case 'oracle':
			$sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id 
				FROM " . FORUMS_TABLE . " f, " . POSTS_TABLE . " p, " . USERS_TABLE . " u
				WHERE p.post_id = f.forum_last_post_id(+)
					AND u.user_id = p.poster_id(+)
				ORDER BY f.cat_id, f.forum_order";
			break;

default:
 		$sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id, t.topic_title, t.topic_last_post_id " .
			" FROM ((( " . FORUMS_TABLE . " f " .
			" LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )" .
			" LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id ) " .
			" LEFT JOIN " . TOPICS_TABLE . " t ON t.topic_last_post_id = p.post_id ) " .
			" ORDER BY f.cat_id, f.forum_order";
		break;
	}
hier posten?

Danke schon mal!
Christian Benz
Mitglied
Beiträge: 854
Registriert: 25.02.2004 00:41
Wohnort: Regen
Kontaktdaten:

Beitrag von Christian Benz »

Hallo,
Hmmm. Bei mir passiert da gar nichts.
Schade. Hast du die "xxx" durch die zu versteckende Foren-ID-Nummer ersetzt? Das ganze einmal als Moderator/Admin und dann als Gast getestet? Vermutlich ja. Dein zitierter Codeabschnitt sah bei mir aber anders aus! Welche Version hast du? Benutzt du irgendenwelche Mods welche die index.php hier nachträglich verändert haben?

Versuch mal diesen Code anstelle deines zitierten Abschnittes zu benutzen:

Code: Alles auswählen

case 'oracle':
         $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id
            FROM " . FORUMS_TABLE . " f, " . POSTS_TABLE . " p, " . USERS_TABLE . " u
            WHERE p.post_id = f.forum_last_post_id(+)
               AND u.user_id = p.poster_id(+)
            ORDER BY f.cat_id, f.forum_order";
         break;

default:
       if (($userdata['user_level'] == ADMIN) OR ($userdata['user_level'] == MOD))
       {
       $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id, t.topic_title, t.topic_last_post_id " .
         " FROM ((( " . FORUMS_TABLE . " f " .
         " LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )" .
         " LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id ) " .
         " LEFT JOIN " . TOPICS_TABLE . " t ON t.topic_last_post_id = p.post_id ) " .
         " ORDER BY f.cat_id, f.forum_order";
       break;
       }
       else
       {
       $sql = "SELECT f.*, p.post_time, p.post_username, u.username, u.user_id, t.topic_title, t.topic_last_post_id " .
         " FROM ((( " . FORUMS_TABLE . " f " .
         " LEFT JOIN " . POSTS_TABLE . " p ON p.post_id = f.forum_last_post_id )" .
         " LEFT JOIN " . USERS_TABLE . " u ON u.user_id = p.poster_id ) " .
         " LEFT JOIN " . TOPICS_TABLE . " t ON t.topic_last_post_id = p.post_id ) " .
         WHERE f.forum_id != xxx
         " ORDER BY f.cat_id, f.forum_order";
       break;
       }
   }
... und natürlich nicht vergessen: die xxx im Code ersetzen!

Test auf eigene Gefahr. :wink:

Gruß,
Christian
Benutzeravatar
JB007
Mitglied
Beiträge: 102
Registriert: 23.07.2004 07:52
Wohnort: Troisdorf
Kontaktdaten:

Beitrag von JB007 »

Das mit den xxx hatte ich schon verstanden... 8)

Wenn ich deinen code in meine index.php kopiere, die xxx durch eine Forennummer ersetzte, erhalte ich die Meldung:

Code: Alles auswählen

Parse error: parse error in /mnt/be1/08/467/00000011/htdocs/community/index_100804.php on line 173
Zeile 173 beinhaltet bei mit die folgenden Text (die xxx natürlich ausgetauscht):

Code: Alles auswählen

WHERE f.forum_id != xxx 
Keine Ahnung warum....
Christian Benz
Mitglied
Beiträge: 854
Registriert: 25.02.2004 00:41
Wohnort: Regen
Kontaktdaten:

Beitrag von Christian Benz »

Hallo,

schade :( ich hab's fast schon befürchtet.

Ich glaub' das liegt daran, weil bei mir (Version 2.0.10) der Code mit weniger Verkettungen daherkommt (dieses " . " im Code)

Tausche bitte mal in dem von mir vorgeschlagenen Code diese Zeile:

Code: Alles auswählen

WHERE f.forum_id != xxx
... gegen das hier aus:

Code: Alles auswählen

" WHERE f.forum_id != xxx " .
Gruß,
Christian, hoffend und betend es möge klappen
Benutzeravatar
JB007
Mitglied
Beiträge: 102
Registriert: 23.07.2004 07:52
Wohnort: Troisdorf
Kontaktdaten:

Beitrag von JB007 »

Deine Gebete wurden erhört. Teilweise zumindest! :wink:

Die geänderte Zeile funktioniert. Yippey! Aber nur bei einem Forum. Wenn ich mehrere ID´s eingebe erhalten ich folgende Fehlermeldung:

Code: Alles auswählen

Could not query forums information

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 '28 ORDER BY f.cat_id, f.forum_order' at line 1

SELECT f.*, p.post_time, p.post_username, u.username, u.user_id, t.topic_title, t.topic_last_post_id FROM ((( phpbb_forums f LEFT JOIN phpbb_posts p ON p.post_id = f.forum_last_post_id ) LEFT JOIN phpbb_users u ON u.user_id = p.poster_id ) LEFT JOIN phpbb_topics t ON t.topic_last_post_id = p.post_id ) WHERE f.forum_id != 25,28 ORDER BY f.cat_id, f.forum_order

Line : 180
File : /mnt/be1/08/467/00000011/htdocs/community/index_100804.php
Den Fehler hab ich bisher noch nicht gesehen, obwohl ich schon einige auf dem Monitor hatte. :lol: Interessant! :evil:
Christian Benz hat geschrieben:Ich glaub' das liegt daran, weil bei mir (Version 2.0.10) der Code mit weniger Verkettungen daherkommt (dieses " . " im Code)
Mein Forum läuft jetzt seit etwa 3 Wochen. Ich habe mir damals die neueste Version runtergeladen und im Copyright steht auch "Powered by phpBB 2.0.10", also sollte es zwischen unseren Board-Versionen doch eigentlich keinen Unterschied geben...

Ich habe zusätzlich nur 2 Mods laufen: Album-Mod und Statistik-Mod. Beide dürften in die betreffenden Zeilen nicht eingreifen.

Danke übrigens für deine Mühe!!! 8)
Christian Benz
Mitglied
Beiträge: 854
Registriert: 25.02.2004 00:41
Wohnort: Regen
Kontaktdaten:

Beitrag von Christian Benz »

Hallo,
Deine Gebete wurden erhört.
Amen. :D
Aber nur bei einem Forum. Wenn ich mehrere ID´s eingebe erhalten ich folgende Fehlermeldung: [...]

Code: Alles auswählen

WHERE f.forum_id != 25,28
Kann mir auch nicht ganz vorstellen, dass es so klappen könnte. Da müßtest du schon sowas in der Art wie etwa das hier ausprobieren:

Code: Alles auswählen

WHERE ((f.forum_id != 25) AND (f.forum_id != 28))
(Ob das wirklich funktioniert habe ich noch nicht getestet. Käme auf einen Versuch an.)
... also sollte es zwischen unseren Board-Versionen doch eigentlich keinen Unterschied geben
Bei Computern und ihren Eigenheiten wundert mich schon lange nichts mehr. :wink:

Gruß,
Christian
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“