ACP Modul funktioniert nicht

Allgemeiner Support zum phpBB 3 Board und phpBB 3 Modifikationen.
Kein Support für die Download MOD / Extension!!
No support for the Download MOD / Extension!!
Please visit https://phpbb3.oxpus.net for Download MOD / Extension
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

ACP Modul funktioniert nicht

Beitrag von Angel »

Hallo,

habe ein wenig rumprobiert um ein ACP Modus selbst zu schreiben aber irgendwie klappt es nicht.
Vorerst wollte ich nur die vorhanden Befehle aus der DB auslesen und anzeigen aber das Modul wird gar nicht angezeigt obwohl ich es hinzugefügt habe.

hier meine includes/acp/acp_commands.php

Code: Alles auswählen

 <?php
 /**
 *
 * @package acp_commands
 * @version $Id: acp_commands.php,v 1.2.1 2008-04-29 20:56:00 AUTHOR $
 * @copyright (c) AUTHOR + WWW
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 *
 */
 /**
 * @ignore
 */

if (!defined('IN_PHPBB'))
{
	exit;
}

 /**
* @package acp
*/
class acp_commands
{
	var $u_action;
    var $new_config;

    function main($id, $mode)
    {
		global $db, $user, $template, $phpbb_root_path, $phpEx;
        global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;

		$user->add_lang('mods/acp_commands');
          
        $this->tpl_name = 'acp_commands';
        $this->page_title = $user->lang['ACP_COMMANDS'];

		$sql = 'SELECT command_id, command, com_desc_ger, com_desc_eng
		FROM ' . COMMANDS_TABLE . "
		WHERE command != ''
		ORDER BY command_id ASC";
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$template->assign_block_vars('comrow', array(
			'COMMAND'	=> $row['command'],
			'DESC_DE'	=> $row['com_desc_ger'],
			'DESC_EN'	=> $row['com_desc_eng'],
			));
		}
		$db->sql_freeresult($result);       
    }
}
?>
hier die inlcudes/acp/info/acp_commands.php

Code: Alles auswählen

<?php
/**
*
* @package acp
* @version $Id: acp_commands.php 3 2010-06-07 Shona $
* @copyright (c) 2005 phpBB Group
* @copyright (c) 2008 Andreas Fischer (bantu@phpbb.de)
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @package module_install
*/
class acp_commands_info
{
    function module()
    {
        return array(
            'filename'    => 'acp_commands',
            'title'        => 'ACP_COMMANDS',
            'version'    => '1.0.0',
            'modes'        => array(
            'index'     => array('title' => 'ACP_COMMANDS', 'auth' => 'acl_a_commands_auth', 'cat' => array('')),
            ),
        );
    }
 
    function install()
    {
    }
 
    function uninstall()
    {
    }
}

?>
Hoffe das mir jemadn helfen kann
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von oxpus »

Jaaaaaaaaaaaaaaaaaaaaa, das Rechtesystem des phpBB 3...

Du hast zunächst (ich habe den Code jetzt nur überflogen) alles richtig gemacht, aber vergessen, dass das Modul auch Zugriffsrechte besitzt, wenn du mit "auth" etwas angibst.
Das Modul trägt damit nämlich eine Berechtigung ein, die dann auch vergeben werden muss.

Um das aber zu tun, musst du zumindest die Datei language/../acp/permissions_phpbb.php editieren, um für dein Recht "acl_a_commands_auth" auch noch eine Beschreibung bereitzustellen. Sonst wird die Berechtigungsoption nämlich auch nicht in den Berechtigungen angezeigt (Benutzerrechte bei diesem Beispiel, um genau zu sein).
Übrigends solltest du auch eine Kategorie (cat) eintragen, sonst würde das Modul zwangsweise unterhalb einer bestehenden Kategorie eingeordnet werden müssen. Wenn das gewünscht ist, habe ich allerdings nichts gesagt.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

Verstehe grad null :/

Habe es nach dieser http://wiki.phpbb.com/display/DEV/Creating+modules Anleitung gemacht und einfach überall wo "foo" stand hab ich "commands" draus gemacht.
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von oxpus »

Ist ja richtig, aber der Eintrag in der Info-Datei

Code: Alles auswählen

'auth' => 'acl_a_foo_auth'
besagt, dass ein Zugriffsrecht für das Modul einzurichten ist.
Daher ist das Modul zwar zunächst eingebunden, für dich aber nicht verfügbar, weil die Benutzerrechte dafür nicht eingerichtet wurden!!
Und dazu muss eben auch die Sprachdatei, wie zuvor genannt, erweitert werden (oder die eigene info_acp_wasauchimmer.php), damit hinter

Code: Alles auswählen

acl_a_foo_auth
auch ein Text steht, den das Berechtigungssystem des phpBB 3 anzeigen kann. Sonst ist die Option nicht da und du hast keine Möglichkeit, das Modul im Zugriff zu haben.
Auch ist die Kategorie, unter der das Modul fällt, nicht unspannend, sonst wird es im Berechtigungssystem auch nicht korrekt zugeordnet.
Die intern angelegte Berechtigungsoption ist damit auch nicht "sichtbar" für das Forum, sprich: Das Modul bleibt auch "versteckt".

Ganz so einfach ist es nämlich nicht, ein neues ACP-Modul anzulegen.
Wenn du dich mit den Berechtigungen hierzu nicht auseinandersetzen willst oder dieses nicht brauchst, z. B. weil nur du Admin in deinem Forum bist, dann entferne das Modul zunächst wieder, lasse in der info-Datei zum Modul den Eintrag "auth" leer und binde das Modul wieder ein.
Damit wird es sofort angezeigt, da ja keine (nicht gesetzten) Berechtigungen dieses blockieren.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

Achso jetzt habe ich es :D

Nun bekomm ich folgenden Fehler :(
[phpBB Debug] PHP Notice: in file /adm/index.php on line 150: Cannot modify header information - headers already sent by (output started at /includes/acp/acp_commands.php:1)
[phpBB Debug] PHP Notice: in file /adm/index.php on line 152: Cannot modify header information - headers already sent by (output started at /includes/acp/acp_commands.php:1)
[phpBB Debug] PHP Notice: in file /adm/index.php on line 153: Cannot modify header information - headers already sent by (output started at /includes/acp/acp_commands.php:1)
[phpBB Debug] PHP Notice: in file /adm/index.php on line 154: Cannot modify header information - headers already sent by (output started at /includes/acp/acp_commands.php:1)
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von oxpus »

Was hast du jetzt genau geändert?
Wie hast du die permissions_phpbb.php angepasst?
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

hab diese gar nicht angepasst, habe das gemacht was du geschrieben hast
lasse in der info-Datei zum Modul den Eintrag "auth" leer und binde das Modul wieder ein.
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von oxpus »

Wie sieht die Datei denn nun genau aus?
So sollte die betreffende Zeile in der Datei lauten:

Code: Alles auswählen

'index'     => array('title' => 'ACP_COMMANDS', 'auth' =>  '', 'cat' => array('')),
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

genau so sah sie aus, aheb aber nun erfolgreich mit dieser http://wiki.phpbb.com/display/MODDOCS/T ... ermissions Seite en auth hinzugefügt aber der fehler kommt immer noch
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

achso hier die neue datei

Code: Alles auswählen

 <?php
 /**
 *
 * @package acp_commands
 * @version $Id: acp_commands.php,v 1.2.1 2008-04-29 20:56:00 AUTHOR $
 * @copyright (c) AUTHOR + WWW
 * @license http://opensource.org/licenses/gpl-license.php GNU Public License
 *
 */
 /**
 * @ignore
 */

if (!defined('IN_PHPBB'))
{
	exit;
}

 /**
* @package acp
*/
class acp_commands
{
	var $u_action;
    var $new_config;

    function main($id, $mode)
    {
		
		global $db, $user, $auth, $template, $cache;
		global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;
		
		if (!$auth->acl_get('a_commands_view'))
		{
			trigger_error('NOT_AUTHORISED');
		}
		
		$user->add_lang('mods/info_acp_commands');
		
		switch($mode)
		{
			case 'servcom':
				$this->page_title = $user->lang['ACP_COMMANDS'];
				$this->tpl_name = 'acp_commands';
            break;
		}

		$sql = 'SELECT command_id, command, com_desc_ger, com_desc_eng
		FROM ' . COMMANDS_TABLE . "
		WHERE command != ''
		ORDER BY command_id ASC";
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$template->assign_block_vars('comrow', array(
			'COMMAND'	=> $row['command'],
			'DESC_DE'	=> $row['com_desc_ger'],
			'DESC_EN'	=> $row['com_desc_eng'],
			));
		}
		$db->sql_freeresult($result);       
    }
}
?>
und hier vll mal die template datei

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->

 <a name="maincontent"></a>

<h1>{L_ACP_COMMANDS}</h1>
<p>{L_ACP_COMMAND_DESC}</p>
<br />

<table cellspacing="1">
	<thead>
		<tr>
			<td class="cat" width="15%" align="center"><b>{L_COMMAND}</b></td>
			<td class="cat" width="42%" align="center"><b>{L_DESCDE}</b></td>
			<td class="cat" width="42%" align="center"><b>{L_DESCEN}</b></td>
		</tr>

		</thead>	
	<tbody>
		<!-- BEGIN comrow -->
		<tr>
			<td class="genmed" align="left">{comrow.COMMAND}</td>
			<td class="genmed" align="left">{comrow.DESC_DE}</td>
			<td class="genmed" align="left">{comrow.DESC_EN}</td>
		</tr>

		<!-- END comrow -->	
	</tbody>
</table>
<!-- INCLUDE overall_footer.html -->
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von oxpus »

Häng mal bitte die Datei acp_commands.php hier als Datei an. Bitte dazu vorher als ZIP oder RAR-File packen, sonst geht das nicht.
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

fehler gerade selbst gefunden ;) es war ein leerzeichen vor dem <?php und das hat mir die meldungen gebracht.
danke dir trotzdem für deine hilfe.

achso wenn ich grade so am fragen bin
welches acp modul eignet sich am besten um die hinzuügen, bearbeiten und löschen funktion zu "kopieren" und für mein Modul "zu benutzen".

Hab ansich nur ne ID, Befehl, Beschreibung Deutsch, Beschreibung Englisch

Hab mir schonmal die acp_bbcodes angeschaut aber das ist doch recht kompliziert
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

Kannst du mal drüber schauen ob das so funktionieren kann? Hab mal die acp_bbcodes angepasst so wie ich es mir vorstelle das es geht

Code: Alles auswählen

<?php
/**
*
* @package acp
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* @package acp
*/
class acp_commands
{
	var $u_action;

	function main($id, $mode)
	{
		global $db, $user, $auth, $template, $cache;
		global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;

		if (!$auth->acl_get('a_commands_view'))
		{
			trigger_error('NOT_AUTHORISED');
		}
		
		$user->add_lang('mods/info_acp_commands');
		
		// Set up general vars
		$action	= request_var('action', '');
		$commands_id = request_var('command', 0);

		$this->tpl_name = 'acp_commands';
		$this->page_title = 'ACP_COMMANDS';
		$form_key = 'acp_commands';

		add_form_key($form_key);

		// Set up mode-specific vars
		switch ($action)
		{
			case 'add':
				$command = $com_desc_ger = $com_desc_eng = '';
			break;

			case 'edit':
				$sql = 'SELECT command, com_desc_ger, com_desc_eng
					FROM ' . COMMANDS_TABLE . '
					WHERE command_id = ' . $command_id;
				$result = $db->sql_query($sql);
				$row = $db->sql_fetchrow($result);
				$db->sql_freeresult($result);
				
				if (!$row)
				{
					trigger_error($user->lang['COMMAND_NOT_EXIST'] . adm_back_link($this->u_action), E_USER_WARNING);
				}

				$command = $row['command'];
				$com_desc_ger = $row['com_desc_ger'];
				$com_desc_eng = $row['com_desc_eng'];
			break;

			// No break here

			case 'create':
				$command = utf8_normalize_nfc(request_var('command', '', true));
				$com_desc_ger = utf8_normalize_nfc(request_var('com_desc_ger', '', true));
				$com_desc_eng = utf8_normalize_nfc(request_var('com_desc_eng', '', true));
			break;
		}

		// Do major work
		switch ($action)
		{
			case 'edit':
			case 'add':

				$template->assign_vars(array(
					'S_EDIT_COMMAND'		=> true,
					'U_BACK'			=> $this->u_action,
					'U_ACTION'			=> $this->u_action . '&action=' . (($action == 'add') ? 'create') . (($command_id) ? "&command=$command_id" : ''),

					'SERVCOMMAND'	=> $command,
					'DESC_GER'		=> $com_desc_ger,
					'DESC_ENG'		=> $com_desc_eng)
				);

				break;

			case 'create':

				if ($action == 'create')
					{
						$sql = 'SELECT MAX(command_id) as max_command_id
							FROM ' . COMMANDS_TABLE;
						$result = $db->sql_query($sql);
						$row = $db->sql_fetchrow($result);
						$db->sql_freeresult($result);

						if ($row)
						{
							$command_id = $row['max_command_id'] + 1;

							// Make sure it is greater than the core bbcode ids...
							if ($command_id <= NUM_CORE_COMMANDS)
							{
								$command_id = NUM_CORE_COMMANDS + 1;
							}
						}
						else
						{
							$command_id = NUM_CORE_COMMANDS + 1;
						}

						$sql_ary['command_id'] = (int) $command_id;

						$db->sql_query('INSERT INTO ' . COMMANDS_TABLE . $db->sql_build_array('INSERT', $sql_ary));
						$cache->destroy('sql', COMMANDS_TABLE);

						$lang = 'COMMAND_ADDED';
						$log_action = 'LOG_COMMAND_ADD';
					}
					else
					{
						$sql = 'UPDATE ' . COMMANDS_TABLE . '
							SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
							WHERE command_id = ' . $command_id;
						$db->sql_query($sql);
						$cache->destroy('sql', COMMANDS_TABLE);

						$lang = 'COMMAND_EDITED';
						$log_action = 'LOG_COMMAND_EDIT';
					}

					add_log('admin', $log_action, $data['command']);

					trigger_error($user->lang[$lang] . adm_back_link($this->u_action));
								
			break;

			case 'delete':

				$sql = 'SELECT command
					FROM ' . COMMANDS_TABLE . "
					WHERE command_id = $command_id";
				$result = $db->sql_query($sql);
				$row = $db->sql_fetchrow($result);
				$db->sql_freeresult($result);

				if ($row)
				{
					if (confirm_box(true))
					{
						$db->sql_query('DELETE FROM ' . COMMANDS_TABLE . " WHERE command_id = $command_id");
						$cache->destroy('sql', COMMANDS_TABLE);
						add_log('admin', 'LOG_COMMAND_DELETE', $row['command']);
					}
					else
					{
						confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
							'command'		=> $command_id,
							'i'				=> $id,
							'mode'			=> $mode,
							'action'		=> $action))
						);
					}
				}

			break;
		}

		$template->assign_vars(array(
			'U_ACTION'		=> $this->u_action . '&action=add')
		);

		$sql = 'SELECT *
			FROM ' . COMMANDS_TABLE . '
			ORDER BY command_id';
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$template->assign_block_vars('comrow', array(
				'COMMAND_ID'		=> $row['command_id'],
				'COMMAND'			=> $row['command'],
				'U_EDIT'			=> $this->u_action . '&action=edit&bbcode=' . $row['bbcode_id'],
				'U_DELETE'			=> $this->u_action . '&action=delete&bbcode=' . $row['bbcode_id'])
			);
		}
		$db->sql_freeresult($result);
	}

}

?>
und angehängt als RAR-Archiv
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von oxpus »

Was willst du denn kopieren/hinzufügen/bearbeiten?
Die Funktionen in den einzelnen phpBB-Modulen unterscheiden sich hierbei schon sehr stark, dass man nicht wirklich etwas für die gewünschten Funktionen empfehlen kann.
Es kommt dabei ja auch immer darauf an, was man an Daten wie "bewegen" will.
Am besten geht das immer noch mit neu geschriebenen Script-Abläufen.
Und das sollte man sich besser auch immer erst mal auf ein Stück Papier schreiben, damit man nicht die Übersicht verliert, wenn man in einer groß gewordenen Datei noch etwas finden möchte...

Zur Datei selber (umfangreicher, als ich es eigentlich wollte):
if (!$auth->acl_get('a_commands_view'))
{
trigger_error('NOT_AUTHORISED');
}

$user->add_lang('mods/info_acp_commands');
Dieser Block ist eigentlich überflüssig.
Wenn die Berechtigungen eingestellt werden können, verwaltet das Berechtigungssystem des phpBB 3 bereits selber, ob ein Modul angezeigt wird oder nicht. Also je nach User, bzw. Usergruppe.
Auch muss eine info_acp_...php-Sprachdatei nicht noch einmal manuell eingebunden werden, da dieses das Forum selber schon macht. Hierzu wird der Dateiname der Moduldatei durch ein vorangestelltes "info_" ergänzt und gesucht, bzw. dann auch eingebunden, wenn eine entsprechende Datei vorhanden ist.

Die Aktionen "add" und "edit" würde ich in einem Block zusammenführen.
Also

Code: Alles auswählen

case 'add':
case 'edit':
// Programmcode
break;
Denn so kann man mit weniger Programmcode allgemeine Variablen und Werte setzen, die für beide Aktionen gelten und dann einfach mit einer Bedingung, wie z. B. das "Vorhandensein" (z. B. aus einer Übergabe aus einem Formular heraus) einer ID-Nummer für den gerade zu bearbeitenden Datensatz, die Aktionen trennen. Du hast dafür die Variable $command_id verwendet.
Hiermit lässt sich gut zwischen 'add' und 'edit' unterscheiden, indem du folgende Bedingung verwendest:
if ($command_id)
{
// Bereich für 'edit', um z. B. die Daten für diese ID aus der Datenbank zu lesen
}
else
{
// Aktionen, um die später zu verwendenden / darzustellenden Variablen zu initieren/vorzubereiten.
}[/code]
Damit wird der switch-Block um ein Stück kleiner und du musst nicht zweimal einen Code-Block schreiben, um z. B. die Inhalte an das Template zu übergeben.
Auch kann man in diesen "gemeinsamen" Block auch viele weitere gemeinsame Punkte auf einmal abarbeiten, was sonst immer verdoppelt werden müsste.
Merke:
Ein fehlendes break; in einem switch-Block aktiviert die Aktionen für alle mit case angegebenen Möglichkeiten.
Also wenn $action eben 'add' oder 'edit' wäre, würde man so immer den gleichen Script-Part abarbeiten lassen.
Und zuletzt wird die Datei damit auch kleiner und belegt weniger PHP-Speicher, was die Performance des Servers auch wieder ein Stück verbessert.

Das gleiche Prinzip gilt dann für deine Idee, zwei switch-Blöcke zu verwenden (Vorbereitung und Durchführung).
Auch dieses Prinzip dient nur dem vielleicht besserem Verständnis, was im Script passiert (auch wenn man selber das Script nach längerer Zeit mal wieder anfasst und zunächst auch erst wieder nachsehen muss, was wo gemacht wird).
Aber: Wenn du im ersten switch-Block 'add' und 'edit' zusammenlegst, kannst du dir den zweiten Schritt über den zweiten switch-Block sparen.
Das verringert dann auch gleich wieder die Dateigrösse und verbessert hierbei aber auch die "Lesbarkeit" des Scripts: Man muss sich nicht erst "oben" merken, was "unten" wie verwendet wird.

Dann hast du im 2. switch-Block eingetragen:

Code: Alles auswählen

			case 'create':

				if ($action == 'create')
Das ist logisch doppelt gemoppelt.
Ich denke, anstelle

Code: Alles auswählen

$action == 'create'
solltest du hier lieber

Code: Alles auswählen

if ($command_id)
abfragen, da sich ja entscheidet, ob $command_id einen Wert hat, also ein bestehender Datensatz aktualisiert (SQL-UPDATE) oder neu hinzuzufügen (SQL-INSERT) ist.
Bei der von dir vorgegebenen Reihenfolge wäre allerdings die Bedingung so einzutragen:

Code: Alles auswählen

if (!$command_id)
Also mit einem vorangestellten Ausrufezeichen, was die Bedingung negiert (= "wenn $command_id nicht vorhanden ist").
Oder du würdest das INSERT und UPDATE in der Ablaufreihenfolge umdrehen, dann gilt eben die Bedingung ohne Ausrufezeichen.

Zuletzt noch ein Hinweis zu Abfragen, wenn du nur einen bestimmten Wert aus einer Tabelle, bzw. einem Datensatz holen möchtest:

Code: Alles auswählen

						$sql = 'SELECT MAX(command_id) as max_command_id
							FROM ' . COMMANDS_TABLE;
						$result = $db->sql_query($sql);
						$row = $db->sql_fetchrow($result);
						$db->sql_freeresult($result);
Hier fragst du die höchste command_id ab, die gespeichert wurde, um diese (um 1 erhöht) für den nächsten einzufügenden Datensatz verwenden kannst.
Das geht in der Abfrage so einfacher und performanter:

Code: Alles auswählen

						$sql = 'SELECT MAX(command_id) as max_command_id
							FROM ' . COMMANDS_TABLE;
						$result = $db->sql_query($sql);
						$command_id = $db->sql_fetchfield('max_command_id');
						$db->sql_freeresult($result);
Das spart dann auch die Verwendung von $row, wie du es im weiteren Verlauf des Scripts getan hast.
Zu diesem Punkt wäre aber grundsätzlich zu überlegen, ob man diese eher unnötigen Abfragen nicht einfach mit einem Auto-Wert für das Feld command_id direkt in der Datenbank erledigt.
Denn damit müsste man für einen neuen Datensatz nicht zwangsweise die letzte command_id auslesen (gerade bei grösseren Tabellen kann dieses dazu auch richtig viel Zeit kosten!) und dann um 1 erhöhen, sondern fügt einfach den Datensatz ohne eine vorgegebene command_id ein.
In phpBB kann man dannach, bei Bedarf, die ID für den gerade neu gespeicherten Datensatz auch mittels

Code: Alles auswählen

$command_id = $db->sql_nextid();
abfragen, muss ihn dann also auch nicht vorher erst "berechnen".

Dann zu deiner Löschroutine:
Die ist nicht falsch, aber unnötig langsam.
Erst fragst du ab, ob der zu löschende Datensatz vorhanden ist, um ihn dann zum löschen anzubieten, bzw. auch tatsächlich zu löschen.
Das ist unnötig, sofern du den Inhalt aus der Prüfung nicht auch gleich in die Bestätigungsabfrage zum löschen einbindest (der Benutzer wüsste dann auch gleich, was er gerade löscht).
Wenn du auf diese Zusatzinformation für den Benutzer verzichten willst, was du aktuell ja tust, dann würde es absolut ausreichen, ohne Prüfung, ob hinter der $command_id auch ein Datensatz in der Datenbank steht, die Bestätigung anzuzeigen, bzw. das Löschen durchzuführen.
Denn: Auch wenn ein Datensatz nicht vorhanden ist, gibt die Datenbank ein OK nach dem Löschen zurück, da ja kein Fehler vorliegt ("nicht löschen" bedeutet ja schliesslich auch, dass der Löschvorgang erfolgreich war, auch wenn "0 Datensätze" gelöscht wurden!!).

Und so solltest du die Löschung nicht durchführen:

Code: Alles auswählen

						$db->sql_query('DELETE FROM ' . COMMANDS_TABLE . " WHERE command_id = $command_id");
Das ist zwar nicht falsch, aber wenn du dich schon an die Vorgaben aus dem Wiki auf phpbb.com hälst, solltest du auch die Coding Guidelines beachten und die erlauben solche Konstrukte eher nicht.
Auch lässt sich so (in deinem Fall weniger, aber bei anderen eher komplexeren SQL-Anweisungen) nicht so schnell etwas einfügen, ohne Gefahr zu laufen, den gesamten Befehl und damit auch das Script in der Syntax zu zerstören und zunächst mit einem Fehler anzuhalten. Was so eben schneller passieren kann.
Also merke: Immer $sql = ''; definieren und dieses dann mit $db->sql_query($sql); ausführen.
Ist sauberer programmiert, lesbarer und besser in der späteren Pflege des Codes zu handhaben.

Ansonsten könnte ich jetzt nicht behaupten, dass dein Script auch ohne meine Anmerkungen Probleme hätte.
Ich würde es einfach starten und ausprobieren.
Da du ja keine phpBB-Daten und Tabellen anfasst, wäre ein Fehler auch schnell verzeihbar und "deine" Tabelle kann ja auch während der Tests schnell mal wieder geleert werden...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

Aha ok soweit verstanden aber wieso ist der folgende Codeabschnitt falsch?

Code: Alles auswählen

 $db->sql_query('DELETE FROM ' . COMMANDS_TABLE . " WHERE command_id = $command_id");
Genau so steht dieser in der acp_bbcode.php und ich habe nur aus "bbcodes" mein "command" bzw. "commands" gemacht?

Code: Alles auswählen

$db->sql_query('DELETE FROM ' . BBCODES_TABLE . " WHERE bbcode_id = $bbcode_id");

Bekomme grade den folgenden Fehler und finde einfach den fehler nicht
Parse error: syntax error, unexpected ')' in includes\acp\acp_commands.php on line 84
Zeile 83-86

Code: Alles auswählen

'U_BACK'			=> $this->u_action,
					'U_ACTION'			=> $this->u_action . '&action=' . (($action == 'add') ? 'create') . (($command_id) ? "&command=$command_id" : ''),

					'SERVCOMMAND'	=> $command,
MFG
Angel

PS: Achja was negiert heisst weiss ich auch, da ich Elektronikerin bin und dies in "Logik der Digitalelektronik" vorkommt ;)
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von oxpus »

Falsch ist die SQL-Anweisung nicht, nur nicht sauber programmiert.
Und bitte nicht stur nach den vorhandenen phpBB-3-Dateien richten. Auch die sind nicht immer 100%ig korrekt nach den "eigenen" Coding Guidelines erstellt worden ;)

Code: Alles auswählen

'U_ACTION'         => $this->u_action . '&action=' . (($action == 'add') ? 'create') . (($command_id) ? "&command=$command_id" : ''),
Die Zeile ist logisch schon falsch.
So wäre sie richtig:

Code: Alles auswählen

'U_ACTION'         => $this->u_action . '&action=' . $action . (($action == 'create' && $command_id) ? "&command=$command_id" : ''),
So aber auch und dazu viel übersichtlicher:

Code: Alles auswählen

'U_ACTION'         => $this->u_action . "&action=$action&command=$command_id",
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

Könntest du nochmal drüber schauen weil das anzeigen geht, aber das hinzufügen bearbeiten und löschen nicht.

Code: Alles auswählen

<?php
/**
*
* @package acp
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* @package acp
*/
class acp_commands
{
	var $u_action;

	function main($id, $mode)
	{
		global $db, $user, $auth, $template, $cache;
		global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx;

		// Set up general vars
		$action	= request_var('action', '');
		$commands_id = request_var('command', 0);

		$this->tpl_name = 'acp_commands';
		$this->page_title = 'ACP_COMMANDS';
		$form_key = 'acp_commands';

		add_form_key($form_key);

		// Set up mode-specific vars
		switch ($action)
		{
			case 'add':
			case 'edit':
			
				if ($command_id)
				{
					$sql = 'SELECT command, com_desc_ger, com_desc_eng
					FROM ' . COMMANDS_TABLE . '
					WHERE command_id = ' . $command_id;
					$result = $db->sql_query($sql);
					$row = $db->sql_fetchrow($result);
					$db->sql_freeresult($result);
				
					if (!$row)
					{
						trigger_error($user->lang['COMMAND_NOT_EXIST'] . adm_back_link($this->u_action), E_USER_WARNING);
					}
					
					$command = $row['command'];
					$com_desc_ger = $row['com_desc_ger'];
					$com_desc_eng = $row['com_desc_eng'];
				}
				else
				{
					$command = $com_desc_ger = $com_desc_eng = '';
					
				}
			
				
			break;

			// No break here

			case 'create':
				$command = utf8_normalize_nfc(request_var('command', '', true));
				$com_desc_ger = utf8_normalize_nfc(request_var('com_desc_ger', '', true));
				$com_desc_eng = utf8_normalize_nfc(request_var('com_desc_eng', '', true));
			break;
		}

		// Do major work
		switch ($action)
		{
			case 'edit':
			case 'add':

				$template->assign_vars(array(
					'S_EDIT_COMMAND'	=> true,
					'U_BACK'			=> $this->u_action,
					'U_ACTION'         => $this->u_action . "&action=$action&command=$command_id",

					'SERVCOMMAND'	=> $command,
					'DESC_GER'		=> $com_desc_ger,
					'DESC_ENG'		=> $com_desc_eng
				));

				break;

			case 'create':

				if (!$command_id)
					{
						$sql = 'SELECT MAX(command_id) as max_command_id
							FROM ' . COMMANDS_TABLE;
						$result = $db->sql_query($sql);
						$command_id = $db->sql_fetchfield('max_command_id');
						$db->sql_freeresult($result);

						$command_id = $db->sql_nextid();

						$sql_ary['command_id'] = (int) $command_id;

						$db->sql_query('INSERT INTO ' . COMMANDS_TABLE . $db->sql_build_array('INSERT', $sql_ary));
						$cache->destroy('sql', COMMANDS_TABLE);

						$lang = 'COMMAND_ADDED';
						$log_action = 'LOG_COMMAND_ADD';
					}
					else
					{
						$sql = 'UPDATE ' . COMMANDS_TABLE . '
							SET ' . $db->sql_build_array('UPDATE', $sql_ary) . '
							WHERE command_id = ' . $command_id;
						$db->sql_query($sql);
						$cache->destroy('sql', COMMANDS_TABLE);

						$lang = 'COMMAND_EDITED';
						$log_action = 'LOG_COMMAND_EDIT';
					}

					add_log('admin', $log_action, $data['command']);

					trigger_error($user->lang[$lang] . adm_back_link($this->u_action));
								
			break;

			case 'delete':

				$sql = 'SELECT command
					FROM ' . COMMANDS_TABLE . "
					WHERE command_id = $command_id";
				$result = $db->sql_query($sql);
				$row = $db->sql_fetchrow($result);
				$db->sql_freeresult($result);

				if ($row)
				{
					if (confirm_box(true))
					{
						$db->sql_query('DELETE FROM ' . COMMANDS_TABLE . " WHERE command_id = $command_id");
						$cache->destroy('sql', COMMANDS_TABLE);
						add_log('admin', 'LOG_COMMAND_DELETE', $row['command']);
					}
					else
					{
						confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
							'command'		=> $command_id,
							'i'				=> $id,
							'mode'			=> $mode,
							'action'		=> $action))
						);
					}
				}

			break;
		}

		$template->assign_vars(array(
			'U_ACTION'		=> $this->u_action . '&action=add')
		);

		$sql = 'SELECT *
			FROM ' . COMMANDS_TABLE . '
			ORDER BY command_id';
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$template->assign_block_vars('comrow', array(
				'COMMAND_ID'		=> $row['command_id'],
				'COMMAND'			=> $row['command'],
				'COMMAND'			=> $row['command'],
				'DESC_DE'			=> $row['com_desc_ger'],
				'DESC_EN'			=> $row['com_desc_eng'],
				'U_EDIT'			=> $this->u_action . '&action=edit&command=' . $row['command_id'],
				'U_DELETE'			=> $this->u_action . '&action=delete&command=' . $row['command_id'])
			);
		}
		$db->sql_freeresult($result);
	}

}

?>

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->

<a name="maincontent"></a>

<!-- IF S_EDIT_COMMAND -->

	<a href="{U_BACK}" style="float: {S_CONTENT_FLOW_END};">&laquo; {L_BACK}</a>

	<h1>{L_ACP_COMMANDS}</h1>

	<p>{L_ACP_COMMAND_DESC}</p>

	<form id="acp_commands" method="post" action="{U_ACTION}">

	<fieldset>
		<legend>{L_COMMAND_USAGE}</legend>
		<p>{L_COMMAND_USAGE_EXPLAIN}</p>
	<dl>
		<dd><input type="text" id="command" name="command" size="60" maxlength="255" value="{SERVCOMMAND}" /></dd>
	</dl>
	</fieldset>

	<fieldset>
		<legend>{L_DESCDE}</legend>
		<p>{L_DESCDE_EXPLAIN}</p>
	<dl>
		<dd><input type="text" id="com_desc_ger" name="com_desc_ger" size="60" maxlength="255" value="{DESC_GER}" /></dd>
	</dl>
	</fieldset>	
	
	<fieldset>
		<legend>{L_DESCEN}</legend>
		<p>{L_DESCEN_EXPLAIN}</p>
	<dl>
		<dd><input type="text" id="com_desc_eng" name="com_desc_eng" size="60" maxlength="255" value="{DESC_ENG}" /></dd>
	</dl>
	</fieldset>

	<fieldset class="submit-buttons">
		<legend>{L_SUBMIT}</legend>
		<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />&nbsp;
		<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
	</fieldset>
	</form>

<!-- ELSE -->

	<h1>{L_ACP_COMMANDS}</h1>

	<p>{L_ACP_COMMAND_DESC}</p>
	
	<form id="acp_commands" method="post" action="{U_ACTION}">
	
	<fieldset class="tabulated">
	<legend>{L_ACP_COMMANDS}</legend>

	<table cellspacing="1" id="down">
	<thead>
	<tr>
		<th class="cat" width="15%" style="text-align: center;"><b>{L_COMMAND}</b></td>
		<th class="cat" width="40%" style="text-align: center;"><b>{L_DESCDE}</b></td>
		<th class="cat" width="40%" style="text-align: center;"><b>{L_DESCEN}</b></td>
		<th class="cat" width="5%" style="text-align: center;"><b>{L_ACTION}</b></td>
	</tr>
	</thead>
	<tbody>
	<!-- BEGIN comrow -->
		<!-- IF comrow.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->
			<td class="row1" align="left">{comrow.COMMAND}</td>
			<td class="row1" align="left">{comrow.DESC_DE}</td>
			<td class="row1" align="left">{comrow.DESC_EN}</td>
			<td style="text-align: right; width: 40px;"><a href="{comrow.U_EDIT}">{ICON_EDIT}</a> <a href="{comrow.U_DELETE}">{ICON_DELETE}</a></td>
		</tr>
	<!-- BEGINELSE -->
		<tr class="row3">
			<td colspan="2">{L_ACP_NO_ITEMS}</td>
		</tr>
	<!-- END comrow -->
	</tbody>
	</table>

	<p class="quick">
		<input class="button2" name="submit" type="submit" value="{L_ADD_COMMAND}" />
	</p>
	</fieldset>

	</form>

<!-- ENDIF -->

<!-- INCLUDE overall_footer.html -->
Beim hinzufügen kommt zwar das formular aber wenn ich auf "Absenden" drücke kommt das Formular wieder mir leeren Feldern

Beim bearbeiten kommt auch ein formular aber nicht mit den hinhalten aus der DB sondern ein leeres

Beim löschen kommt der folgende Fehler
SQL ERROR [ mysql4 ]

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 '' at line 3 [1064]

SQL

SELECT command FROM phpbb_commands WHERE command_id =

BACKTRACE

FILE: includes/db/mysql.php
LINE: 174
CALL: dbal->sql_error()

FILE: includes/acp/acp_commands.php
LINE: 144
CALL: dbal_mysql->sql_query()

FILE: includes/functions_module.php
LINE: 507
CALL: acp_commands->main()

FILE: adm/index.php
LINE: 74
CALL: p_master->load_active()
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von oxpus »

Zunächst zur fehlenden command_id:
Im Script übernimmst du diese in die Variable $commands_id, im Template beschreibst du aber damit den Befehl:

Code: Alles auswählen

      <dd><input type="text" id="command" name="command" size="60" maxlength="255" value="{SERVCOMMAND}" /></dd>
Das passt nicht wirklich zusammen und daher auch die Fehlermeldung beim Löschen.

Und das verursacht auch wohl alle anderen Fehlverhalten ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

Ich schecks nicht :( sitz wohl auf dem schlauch oder meine erkältung hat mein hirn total vernebelt :lol:
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von oxpus »

Ich würde ja gerne weiter helfen, aber ich programmiere nicht kostenlos ganze Scripte für dritte...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

hab dich ja auch nicht darum gebeten! wollte ja nur wissen was da jetzt falsch ist weil ich keinen fehler sehe!
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von oxpus »

Ich wollte damit auch eher ausdrücken: Wenn ich dir das jetzt erkläre, habe ich das gesamte Script geschrieben.

Was du jetzt falsch gemacht hast?
Du übernimmst in die Variable $command_id den Inhalt des Befehlstrings, den du im Formular eintragen willst.
Das passt nicht.
Und hier solltest du mal die Zuordnung der dargestellten Formularfeldern zu den übernommenen Daten im Script prüfen ;)
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

So nach langer pause habe ich nocheinmal mit dem acp modul probiert und diesmal hab ich die acp_bots.php umgeschrieben.

nun klappt das löschen schon aber das hinzufügen und bearbeiten bringt nen fehler und zwar
Warnung

Das übermittelte Formular war ungültig. Versuche erneut, das Formular abzusenden.
so nun hab ich schon zig mal die acp_commands.php angesehen und nochmal mit der eigentlichen acp_bots.php verglichen aber ich finde den fehler nicht.

acp_commands.php

Code: Alles auswählen

<?php
/** 
*
* @package acp
* @version $Id: acp_commands.php 238 2010-10-19 Angel200 $ 
* @copyright (c) 2005 phpBB Group, (c) 2010 Angel200 (modified acp_bots.php for Server Commands)
* @license http://opensource.org/licenses/gpl-license.php GNU Public License 
*
*/
/**
* DO NOT CHANGE
*/
if (!defined('IN_PHPBB'))
{
	exit;
}

/**
* @package acp
*/
class acp_commands
{
	var $u_action;

	function main($id, $mode)
	{
		global $config, $db, $user, $auth, $template, $cache;
		global $phpbb_root_path, $phpbb_admin_path, $phpEx;

		$action = request_var('action', '');
		$submit = (isset($_POST['submit'])) ? true : false;
		$mark	= request_var('mark', array(0));
		$command_id	= request_var('id', 0);

		if (isset($_POST['add']))
		{
			$action = 'add';
		}

		$default_key = 'a';
		$sort_key = request_var('sk', $default_key);
		$sort_dir = request_var('sd', 'a');
	
		$error = array();

		$user->add_lang('mods/commands');
		$this->tpl_name = 'acp_commands';
		$this->page_title = 'ACP_COMMANDS';
		add_form_key('acp_commands');

		if ($submit && !check_form_key('acp_commands'))
		{
			$error[] = $user->lang['FORM_INVALID'];
		}
		$command_id = (int) $command_id;
	
	// User wants to do something, how inconsiderate of them!
		switch ($action)
		{
			case 'delete':
				if ($command_id || sizeof($mark))
				{
					if (confirm_box(true))
					{
						// Need to delete the relevant command entries
						$sql = 'SELECT command_title, command_id 
							FROM ' . COMMANDS_TABLE . ' 
							WHERE ' . $db->sql_in_set('command_id', ($command_id) ? array($command_id) : $mark);
						$result = $db->sql_query($sql);

						$command_title_ary = array();
						while ($row = $db->sql_fetchrow($result))
						{
							$command_title_ary[] = (string) $row['command_title'];
						}
						$db->sql_freeresult($result);

						$sql = 'DELETE FROM ' . COMMANDS_TABLE . ' 
							WHERE ' . $db->sql_in_set('command_id', ($command_id) ? array($command_id) : $mark);
						$db->sql_query($sql);

						add_log('admin', 'LOG_COM_DELETE', implode(', ', $command_title_ary));
						trigger_error($user->lang['COM_DELETED'] . adm_back_link($this->u_action));
					}
					else
					{
						confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields(array(
							'mark'		=> $mark,
							'id'		=> $command_id,
							'mode'		=> $mode,
							'action'	=> $action))
						);
					}
				}
			break;

			case 'edit':
			case 'add':

				$command_row = array(
					'command_title' => utf8_normalize_nfc(request_var('command_title', '', true)),
					'command_desc1' => utf8_normalize_nfc(request_var('command_desc1', '', true)),
					'command_desc2' => utf8_normalize_nfc(request_var('command_desc2', '', true)),
				);

				if ($submit)
				{
					if (!$command_row['command_title'] || !$command_row['command_desc2'])
					{
						$error[] = $user->lang['ERR_COM_NO_MATCHES'];
					}

					if ($command_id)
					{
						$sql = 'SELECT command_title
							FROM ' . COMMANDS_TABLE . " 
							WHERE command_id = $command_id";
						$result = $db->sql_query($sql);
						$row = $db->sql_fetchrow($result);
						$db->sql_freeresult($result);

						if (!$row)
						{
							$error[] = $user->lang['NO_COM'];
						}
					}
					else
					{
						$sql = 'SELECT command_title
							FROM ' . COMMANDS_TABLE . "
							WHERE command_title = '" . $db->sql_escape($command_row['command_title']) . "'";
						$result = $db->sql_query($sql);
						$row = $db->sql_fetchrow($result);
						$db->sql_freeresult($result);
						
						if ($row)
						{
							$error[] = $user->lang['COM_NAME_TAKEN'];
						}
					}
					
					if (!sizeof($error))
					{
						// A new Server Command? Create a Server Command entry in the Database
						if ($action == 'add')
						{
							$sql = 'INSERT INTO ' . COMMANDS_TABLE . ' ' . $db->sql_build_array('INSERT', array(
								'command_title' 						=> (string) $command_row['command_title'],
								'command_desc1' 						=> (string) $command_row['command_desc1'],
								'command_desc2' 						=> (string) $command_row['command_desc2'],
						));
							$db->sql_query($sql);
	
							$log = 'ADDED';
						}
						else if ($command_id)
						{
							$sql = 'SELECT command_id, command_title 
								FROM ' . COMMANDS_TABLE . " 
								WHERE command_id = $command_id";
							$result = $db->sql_query($sql);
							$row = $db->sql_fetchrow($result);
							$db->sql_freeresult($result);

							if (!$row)
							{
								trigger_error($user->lang['NO_COM'] . adm_back_link($this->u_action . "&id=$command_id&action=$action"), E_USER_WARNING);
							}

							$sql = 'UPDATE ' . COMMANDS_TABLE . ' SET ' . $db->sql_build_array('UPDATE', array(
								'command_title' 						=> (string) $command_row['command_title'],
								'command_desc1' 						=> (string) $command_row['command_desc1'],
								'command_desc2' 						=> (string) $command_row['command_desc2'],
								
							)) . " WHERE command_id = $command_id";
							$db->sql_query($sql);

							$log = 'UPDATED';
						}
						
						add_log('admin', 'LOG_COM_' . $log, $command_row['command_title']);
						trigger_error($user->lang['COM_' . $log] . adm_back_link($this->u_action));
					
					}
				}
				else if ($command_id)
				{
					$sql = 'SELECT * 
						FROM ' . COMMANDS_TABLE . "
						WHERE command_id = $command_id";
					$result = $db->sql_query($sql);
					$command_row = $db->sql_fetchrow($result);
					$db->sql_freeresult($result);

					if (!$command_row)
					{
						trigger_error($user->lang['NO_COM'] . adm_back_link($this->u_action . "&id=$command_id&action=$action"), E_USER_WARNING);
					}

				}
				
				$l_title = ($action == 'edit') ? 'EDIT' : 'ADD';

				$template->assign_vars(array(
					'L_TITLE'		=> $user->lang['COM_' . $l_title],
					'U_ACTION'		=> $this->u_action . "&id=$command_id&action=$action",
					'U_BACK'		=> $this->u_action,
					'ERROR_MSG'		=> (sizeof($error)) ? implode('<br />', $error) : '',
					
					'COMMAND_TITLE'     => $command_row['command_title'],
					'DESC_ONE'          => $command_row['command_desc1'],
					'DESC_TWO'          => $command_row['command_desc2'],
					

					'S_EDIT_COMMAND'		=> true,
					'S_ERROR'			=> (sizeof($error)) ? true : false,
					)
				);

				return;

			break;
		}

		$s_options = '';
		$_options = array('delete' => 'DELETE');
		foreach ($_options as $value => $lang)
		{
			$s_options .= '<option value="' . $value . '">' . $user->lang[$lang] . '</option>';
		}

		$sql = 'SELECT * 
			FROM ' . COMMANDS_TABLE . " 
			ORDER BY command_id ASC";
		$result = $db->sql_query($sql);

		while ($row = $db->sql_fetchrow($result))
		{
			$template->assign_block_vars('com', array(
			'COMMAND_ID'        => $row['command_id'],
			'COMMAND_TITLE'     => $row['command_title'],
			'DESC_ONE'          => $row['command_desc1'],
			'DESC_TWO'          => $row['command_desc2'],
	
				'U_EDIT'				=> $this->u_action . "&id={$row['command_id']}&action=edit",
				'U_DELETE'				=> $this->u_action . "&id={$row['command_id']}&action=delete")
			);
		}
		$db->sql_freeresult($result);
		

		$template->assign_vars(array(
			'U_ACTION'		=> $this->u_action,

			'U_SORT_COM_TITLE'		=> $this->u_action . '&sk=a&sd=' . (($sort_key == 'a' && $sort_dir == 'a') ? 'd' : 'a'),
			'U_SORT_COM_DESC1'	=> $this->u_action . '&sk=b&sd=' . (($sort_key == 'b' && $sort_dir == 'a') ? 'd' : 'a'),
			'U_SORT_COM_DESC2'		=> $this->u_action . '&sk=c&sd=' . (($sort_key == 'c' && $sort_dir == 'a') ? 'd' : 'a'),
			
			'S_COM_OPTIONS'	=> $s_options)
		);


	}
	
}
?>
und die template dazu

Code: Alles auswählen

<!-- INCLUDE overall_header.html -->

<a name="maincontent"></a>

<!-- IF S_EDIT_COMMAND -->

	<a href="{U_BACK}" style="float: {S_CONTENT_FLOW_END};">&laquo; {L_BACK}</a>

	<h1>{L_ACP_COMMANDS}</h1>

	<p>{L_ACP_COMMAND_DESC}</p>
	
	

	<!-- IF S_ERROR -->
		<div class="errorbox">
			<h3>{L_WARNING}</h3>
			<p>{ERROR_MSG}</p>
		</div>
	<!-- ENDIF -->

	<form id="acp_commands" method="post" action="{U_ACTION}">

	<fieldset>
		<legend>{L_COMMAND_USAGE}</legend>
		<p>{L_COMMAND_USAGE_EXPLAIN}</p>
	<dl>
		<dd><input type="text" id="command_title" name="command_title" size="60" maxlength="255" value="{COMMAND_TITLE}" /></dd>
	</dl>
	</fieldset>

<fieldset>
		<legend>{L_DESC_ONE}</legend>
		<p>{L_DESCDE_EXPLAIN}</p>
	<dl>
		<dd><input type="text" id="command_desc1" name="command_desc1" size="60" maxlength="255" value="{DESC_ONE}" /></dd>
	</dl>
	</fieldset>
	
	<fieldset>
		<legend>{L_DESC_TWO}</legend>
		<p>{L_DESCEN_EXPLAIN}</p>
	<dl>
		<dd><input type="text" id="command_desc2" name="command_desc2" size="60" maxlength="255" value="{DESC_TWO}" /></dd>
	</dl>
	</fieldset>

	<fieldset class="submit-buttons">
		<legend>{L_SUBMIT}</legend>
		<input class="button1" type="submit" id="submit" name="submit" value="{L_SUBMIT}" />&nbsp;
		<input class="button2" type="reset" id="reset" name="reset" value="{L_RESET}" />
	</fieldset>
	</form>

<!-- ELSE -->

	<h1>{L_ACP_COMMANDS}</h1>

	<p>{L_ACP_COMMAND_DESC}</p>
	
	<form id="acp_commands" method="post" action="{U_ACTION}">
	
	<fieldset class="tabulated">
	<legend>{L_ACP_COMMANDS}</legend>

	<table cellspacing="1" id="down">
	<thead>
	<tr>
		<th class="cat" style="text-align: center;" nowrap="nowrap"><b>{L_COMMAND_TITLE}</b></th>
		<th class="cat" style="text-align: center;" nowrap="nowrap"><b>{L_DESC_ONE}</b></th>
		<th class="cat" style="text-align: center;" nowrap="nowrap"><b>{L_DESC_TWO}</b></th>
		<th class="cat" width="5%" style="text-align: center;"><b>{L_ACTION}</b></th>
	</tr>
	</thead>
	<tbody>
	<!-- BEGIN com -->
		<!-- IF com.S_ROW_COUNT is even --><tr class="row1"><!-- ELSE --><tr class="row2"><!-- ENDIF -->
			<td class="row1" style="text-align:left;">{com.COMMAND_TITLE}</td>
			<td class="row1" style="text-align:left;">{com.DESC_ONE}</td>
			<td class="row1" style="text-align:left;">{com.DESC_TWO}</td>
			<td class="row1" style="text-align:right;"><a href="{com.U_EDIT}">{ICON_EDIT}</a> <a href="{com.U_DELETE}">{ICON_DELETE}</a></td>
		</tr>
	<!-- BEGINELSE -->
		<tr class="row3">
			<td colspan="5">{L_ACP_NO_ITEMS}</td>
		</tr>
	<!-- END com -->
	</tbody>
	</table>

	<p class="quick">
		<input class="button2" name="add" type="submit" value="{L_ADD_COMMAND}" />
	</p>
	</fieldset>

	</form>

<!-- ENDIF -->

<!-- INCLUDE overall_footer.html -->
Hoffe das du mir nen tipp geben kannst wo ich den fehler finde

mfg
angel
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Benutzeravatar
oxpus
Administrator
Beiträge: 28737
Registriert: Mo 27.Jan, 2003 22:13
Wohnort: Bad Wildungen
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von oxpus »

Die Formulare (zumindest die wichtigsten) des phpBB 3 werden durch einen Zeitschutz abgesichert.
Dieser wird in der PHP-Datei aufgerufen und in der Template-Datei (HTML-Datei) mit dem Token

Code: Alles auswählen

{S_FORM_TOKEN}
angegeben.
Dieser fehlt in deiner HTML-Datei, so dass das Formular bei der Auswertung immer ungültigt ist, da ja kein "Sicherheitscode" zurückgeschickt wird.
Füge also einfach vor jedem

Code: Alles auswählen

</form>
noch ein

Code: Alles auswählen

{S_FORM_TOKEN}
ein und die Fehlermeldung ist weg.

Selbstverständlich nach der Änderung an der HTML-Datei den Cache des Forums nicht vergessen zu löschen/aktualisieren...
Karsten Ude
-={ Das Mädchen für alles }=-
Kein Support per Messenger, Email oder PN! Unaufgeforderte Nachrichten werden ignoriert!
No support per Messenger, Email or PM. Each unasked message will be ignored!
Benutzeravatar
Angel
Beiträge: 126
Registriert: Mi 11.Aug, 2004 21:59
Wohnort: dehom
Kontaktdaten:

Re: ACP Modul funktioniert nicht

Beitrag von Angel »

Och man vielen vielen Dank, das hab ich natürlich nicht gesehen weil ich den Fehler nur in der PHP Datei gesucht habe.
Das ich auch mal in der html schauen sollte viel mir gar nicht ein -.- xD

MfG
Angel
Der die G?tter der Regenb?gen ehrt,
soll auf Schwingen silberner Grazie,
in den Himmel gef?hrt werden!
(Golden Sun 2)
Antworten