Diverse Fehler in der phpBB Knowledge Base MOD v1.0.2

In diesem Forum kann man Fragen zur Programmierung stellen, die bei der Entwicklung von Mods für phpBB 3.0.x oder dem Modifizieren des eigenen Forums auftauchen.
Forumsregeln
phpBB 3.0 hat das Ende seiner Lebenszeit überschritten
phpBB 3.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 3.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf die neuste phpBB-Version, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Benutzeravatar
WileCoyote
Mitglied
Beiträge: 901
Registriert: 13.07.2011 07:38
Wohnort: Österreich

Re: Diverse Fehler in der phpBB Knowledge Base MOD v1.0.2

Beitrag von WileCoyote »

Weder noch. Das Log wird bei aktivem Debug-Mode von dieser MOD Debug Errors and Notices generiert. Sehr hilfreich zum Debuggen ;-)
Der Fehler tritt auch nur auf, wenn man beim Vergleichen von verschiedenen Artikel-Versionen das entsprechende Formular ohne 2 Artikel-Stände gewählt zu haben, absendet.
Gruß WileCoyote
modernist
Ehemaliges Teammitglied
Beiträge: 2202
Registriert: 12.01.2009 10:44

Re: Diverse Fehler in der phpBB Knowledge Base MOD v1.0.2

Beitrag von modernist »

WileCoyote hat geschrieben:Das Log wird bei aktivem Debug-Mode von dieser MOD Debug Errors and Notices generiert.
Danke für den Hinweis, das werde ich doch glatt mal einbauen. Mal schauen, was da alles bei mir falsch läuft...
Benutzeravatar
WileCoyote
Mitglied
Beiträge: 901
Registriert: 13.07.2011 07:38
Wohnort: Österreich

Re: Diverse Fehler in der phpBB Knowledge Base MOD v1.0.2

Beitrag von WileCoyote »

Bedenke aber, dass der laufende Debug-Mode zu Perfomance-Verlusten führen kann. Speziell deswegen, weil es mit ein paar Stunden debuggen meistens nicht getan ist. Erfahrungsgemäß, sollte man den Debug-Mode ein paar Tagen laufen haben.
Gruß WileCoyote
modernist
Ehemaliges Teammitglied
Beiträge: 2202
Registriert: 12.01.2009 10:44

Re: Diverse Fehler in der phpBB Knowledge Base MOD v1.0.2

Beitrag von modernist »

WileCoyote hat geschrieben:ch habe eben im Debug Log gesehen, dass auch die History Funktion Probleme macht.Und zwar in der includes/kb.php in den Zeilen:
4205, 4206 & 4220: Undefined offset: -1
4225: Undefined index: no_diff
Lokal habe ich mir die Debug-MOD mal installiert und prompt tauchen bei mir auch zwei Fehler an drei Stellen in der Versionsgeschichte der KB auf:

  • Datei: [ROOT]/includes/kb.php
    Zeile: 4209 Undefined offset: -1
  • Datei: [ROOT]/includes/kb.php
    Zeile: 4203 in_array() expects parameter 2 to be array, null given
  • Datei: [ROOT]/includes/kb.php
    Zeile: 4203 Undefined offset: -1
Die Zeilen 4203 bzw. 4209 meiner kb.php:

'S_CAN_DIFF_T' => (in_array(EDIT_TYPE_CONTENT, $rowset[count($rowset) - 1]['edit_type'])) ? true : false,

'U_VIEW_REV' => append_sid("{$phpbb_root_path}kb.$phpEx", 'i=history&e=' . $rowset[count($rowset) - 1]['edit_id']),

Wenn ich's mir so anschaue, könnte es daran liegen, daß es keine echte Historie des Artikels gab, sondern nur eine Version. :oops:

Sind mehrere Versionen vorhanden, erscheinen diese Fehlermeldungen:
  • Datei: [ROOT]/includes/kb.php
    Zeile: 4252 Undefined offset: -1
  • Datei: [ROOT]/includes/kb.php
    Zeile: 4238 Undefined offset: -1
  • Datei: [ROOT]/includes/kb.php
    Zeile: 4237 Undefined offset: -1
Meine Zeile 4237:

'S_CAN_DIFF_F' => ($can_diff_from && (!$rowset[$parent_id - 1]['nodiff'] || ($diff_from_old && $num == $total_edits))) ? true : false,

4238:

'S_CAN_DIFF_T' => ($rowset[$parent_id - 1]['nodiff'] || $num == $total_edits) ? false : true,

4252:

if($rowset[$parent_id - 1]['nodiff'] && $can_diff_from)

Wenn ich die - 1 hinter parent_id entferne, gibt es diese Fehlermeldungen nicht mehr. Fehlfunktionen konnte ich da jetzt auch nicht auf die Schnelle feststellen. Was passiert bei dir, wenn du die - 1 entfernst?
WileCoyote hat geschrieben:4225: Undefined index: no_diff
Hier sollte es statt

Code: Alles auswählen

				if(!$edit['no_diff'])
				{
					$can_diff_from = true;
				}
so heißen:

Code: Alles auswählen

				if(!$edit['nodiff'])
				{
					$can_diff_from = true;
				}
Benutzeravatar
WileCoyote
Mitglied
Beiträge: 901
Registriert: 13.07.2011 07:38
Wohnort: Österreich

Re: Diverse Fehler in der phpBB Knowledge Base MOD v1.0.2

Beitrag von WileCoyote »

modernist hat geschrieben:Wenn ich die - 1 hinter parent_id entferne, gibt es diese Fehlermeldungen nicht mehr. Fehlfunktionen konnte ich da jetzt auch nicht auf die Schnelle feststellen. Was passiert bei dir, wenn du die - 1 entfernst?
Das ist klar, dass der Fehler dann weg ist. Das Problem in dem Fall ist, dass wenn nichts zum Vergleichen da ist bzw nichts gewählt wird der Wert 0 ist und 0-1 geht halt nicht ^^
Gruß WileCoyote
Benutzeravatar
WileCoyote
Mitglied
Beiträge: 901
Registriert: 13.07.2011 07:38
Wohnort: Österreich

Re: Diverse Fehler in der phpBB Knowledge Base MOD v1.0.2

Beitrag von WileCoyote »

Ich habe weitere Fehler in der Datei functions_kb.php in der Funktion function feed_output($feed, $feed_type, $feed_data = false) entdeckt.

Zeile 2421: undefined variable: sql_where
Zeile 2422: undefined variable: sql_order
Zeile 2442: undefined variable: title

Wenn ich mich nicht irre, liegt es an einem falsch gesetztem "}" in Zeile 2415. Das "}" sollte ans Ende der "function".
Gruß WileCoyote
modernist
Ehemaliges Teammitglied
Beiträge: 2202
Registriert: 12.01.2009 10:44

Re: Diverse Fehler in der phpBB Knowledge Base MOD v1.0.2

Beitrag von modernist »

In der praktischen Anwendung habe ich den ganzen Feed auskommentiert, deshalb macht sich da auch kein Fehler bei mir bemerkbar... :grin:

In der Originaldatei ist die function feed_output aber doch durch eine abschliessende Klammer in Zeile 2465 geschlossen. Bei mir sieht die Funktion im Original so aus:

Code: Alles auswählen

function feed_output($feed, $feed_type, $feed_data = false)
{
	global $template, $phpbb_root_path, $phpEx, $config, $db, $user;
	
	switch ($feed_type)
	{
		case 'latest':
			$title = $user->lang['KB_LATEST'];
			$sql_where = 'a.article_status = ' . STATUS_APPROVED;
			$sql_order = 'a.article_time DESC';
		break;
		
		case 'user':
			$title = $feed_data['USERNAME'] .  ' ' . $user->lang['ARTICLE'];
			$sql_where = 'a.article_user_id = ' . $feed_data['USER_ID'] . ' AND a.article_status = ' . STATUS_APPROVED;
			$sql_order = 'a.article_time DESC';
		break;
		
		case 'cat':
			$title = $user->lang['KB_SORT_CAT'] . ' - ' . $feed_data['CAT_NAME'] .  ' ' . $user->lang['ARTICLE'];
			$sql_where = 'a.cat_id = ' . $feed_data['CAT_ID'] . ' AND a.article_status = ' . STATUS_APPROVED;
			$sql_order = 'a.article_time DESC';
		break;
		
		case 'popular':
			$title = $user->lang['POPULAR_ART'];
			$sql_where = 'a.article_status = ' . STATUS_APPROVED;
			$sql_order = 'a.article_views DESC';
		break;	
	}
	
	$sql = $db->sql_build_query('SELECT', array(
		'SELECT'	=> 'a.article_id, a.article_title, a.article_desc, a.article_desc_uid, a.article_user_name, a.article_time',
		'FROM'		=> array(
			KB_TABLE => 'a'),		
		'WHERE'		=> "$sql_where",
		'ORDER_BY'	=> "$sql_order",
	));
	$result = $db->sql_query_limit($sql, 10);
	while ($row = $db->sql_fetchrow($result))
	{
		strip_bbcode($row['article_desc'], $row['article_desc_uid']);
		$template->assign_block_vars('item', array(
			'TITLE'				=> $row['article_title'],
			'URL'				=> generate_board_url() . '/kb.' . $phpEx . '?a=' . $row['article_id'],
			'USERNAME'			=> $row['article_user_name'],
			'MESSAGE'			=> str_replace("'", ''', $row['article_desc']),
			'PUB_DATE'			=> date('r', $row['article_time']),
			'DATE_3339'			=> ($feed_type == 'ATOM') ? date3339($row['article_time']) : '',
		));
	}
	$db->sql_freeresult($result);

	$template->assign_vars(array(
		'FEED'				=> $feed,
		'SELF_FULL_URL'		=> generate_board_url() . '/kb.' . $phpEx . '?i=feed&feed=' . $feed . '&feed_type=' . $feed_type,
		'TITLE'				=> $config['sitename'] . ' ' . $title . ' ' . $user->lang['FEED'],
		'SITE_URL'			=> generate_board_url() . '/kb.' . $phpEx,
		'SITE_DESC'			=> $config['site_desc'],
		'SITE_LANG'			=> $config['default_lang'],
		'CURRENT_TIME'		=> ($feed_type == 'ATOM') ? date3339() : date('r'),
	));

	// Output time
	header('Content-type: application/xml; charset=UTF-8');

	header('Cache-Control: private, no-cache="set-cookie"');
	header('Expires: 0');
	header('Pragma: no-cache');

	$template->set_template();
	$template->set_filenames(array(
		'body' => 'kb/kb_feed.xml'
	));

	$template->display('body');

	garbage_collection();
	exit_handler();
}
In Zeile 2415 wird die { von switch ($feed_type) geschlossen.
$sql_where, $sql_order und $title werden im Switch definiert. Ist dann nur die Frage, ob es Abfragen geben kann, die nicht vom Switch abgedeckt sind.
Benutzeravatar
WileCoyote
Mitglied
Beiträge: 901
Registriert: 13.07.2011 07:38
Wohnort: Österreich

Re: Diverse Fehler in der phpBB Knowledge Base MOD v1.0.2

Beitrag von WileCoyote »

Wenn ich das richtige verstehe greift

Code: Alles auswählen

   $sql = $db->sql_build_query('SELECT', array(
      'SELECT'   => 'a.article_id, a.article_title, a.article_desc, a.article_desc_uid, a.article_user_name, a.article_time',
      'FROM'      => array(
         KB_TABLE => 'a'),      
      'WHERE'      => "$sql_where",
      'ORDER_BY'   => "$sql_order",
   ));
   $result = $db->sql_query_limit($sql, 10);
   while ($row = $db->sql_fetchrow($result))
   {
      strip_bbcode($row['article_desc'], $row['article_desc_uid']);
      $template->assign_block_vars('item', array(
         'TITLE'            => $row['article_title'],
         'URL'            => generate_board_url() . '/kb.' . $phpEx . '?a=' . $row['article_id'],
         'USERNAME'         => $row['article_user_name'],
         'MESSAGE'         => str_replace("'", ''', $row['article_desc']),
         'PUB_DATE'         => date('r', $row['article_time']),
         'DATE_3339'         => ($feed_type == 'ATOM') ? date3339($row['article_time']) : '',
      ));
   }
auf die variablen aus dem switch zurück, also sollte das auch innerhalb des switches sein.
Gruß WileCoyote
Antworten

Zurück zu „[3.0.x] Mod Bastelstube“