php debug meldung beheben?

Ich habe nach dieser http://www.reisefotografien.eu/phoc...kann-ich-php-fehler-auf-meiner-seite-anzeigen Anleitung das Log in der php.ini eingeschaltet.

Aber unter /var/log/apache2/php.errors ist diese Datei nicht zu finden?

Hallo ich muss mich leider mal wider mit einem Debug Fehle melden.

Ich habe in meinem phpbb Forum einen MOD eingebaut bei dem man geänderte Forenregeln bestätigen muss dieser macht aber beim Board Gründer Probleme beim bestätigen,so das der Gründer immer wider nach dem bestätigen mit JA aus geloggt wird.

Mit meine Erfahrungen kann ich den Fehler nicht beheben,da habe ich etwas anderes versucht.

Bei dem MOD muss ich in der includes/functions.php folgenden Code eingeben:
Code:
if ($user->data['user_accept_rules'] == 0 && $user->data['is_registered'] && !$user->data['is_bot'] && (request_var('mode', '') != 'terms'))
	{
		if (confirm_box(true))
		{
			$sql = 'UPDATE ' . USERS_TABLE . '
				SET user_accept_rules = 1
				WHERE user_id = ' . $user->data['user_id'];
			$db->sql_query($sql);
		}
		else
		{
			confirm_box(false, sprintf($user->lang['NEW_RULES'], '<a href="' . append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=terms') . '">', '</a>'));
			header("Location: " . append_sid("{$phpbb_root_path}ucp.$phpEx?mode=logout&sid=" . $user->session_id));
		}
	}
Nun habe ich in diesem Teil:
Code:
if ($user->data['user_accept_rules'] == 0 && $user->data['is_registered'] && !$user->data['is_bot'] && (request_var('mode', '') != 'terms'))
ein:
Code:
&& $user->data['is_founder']
eingefügt , so kann ich mich ohne bestätigen als Gründer wider einloggen,aber ich bekomme nun auch:
Code:
[phpBB Debug] PHP Notice: in file [ROOT]/includes/functions.php on line 5247: Undefined index: is_founder
und weiss nicht wie ich das weg bekomme und hoffe dabei auf eure Hilfe?

Für den Fall das der gesamte MOD benötigt wird,hier ein Link zu dem MOD:
http://www.phpbb-seo.de/downloads/mod-accept-terms.html
 
Für alle Notices mit dem Text "Undefined index: xxxx" gilt:

Es handelt sich um Zugriffe auf Elemente eines Array (in deinem Falle $user->data), bei denen das Element, auf das zugegriffen werden soll, nicht existiert.

Stelle es dir wie ein Schachbrett vor, bei dem du eine Figur auf ein Feld stellen willst, das nicht existiert (z.B. i-1).

Wenn du ein in einem Array (heißt zu deutsch "Feld") einen Element nur unter ganz bestimmten Bedingungen erzeugst, also z.B. so:

PHP:
if( $irgendwas == true )
  $user->data['is_founder'] = 1;

dann ist das Element unter anderen Umständen (wenn $irgendwas eben nicht true ist) eben nicht gesetzt.

Daher verwendet man bei solchen Gegebenheiten zunächst eine Prüfung, ob das Element existiert und dann erst, ob in dem Element ein bestimmter Wert drin steht. Das sieht dann so aus:

PHP:
if( isset( $user->data['is_founder'] ) && $user->data['is_founder'] == true )
{
  ...
}

Das Vorgehen ist Usus und sollte daher immer so gemacht werden. Wenn dir das zu viel Code ist, kannst du ja eine Funktion daraus machen:

PHP:
<?php
/**
 * Primitive Funktion zum testen, ob ein Array-Element true ist
 * @param array $array Array, welches das Element enthält (oder nicht)
 * @param mixed $key Element-Name, der geprüft werden soll
 * 
 * @return boolean true, wenn das Element true ist, ansonsten false
 */
function is_true($array, $key)
{
	if(empty($array[$key]))
		return false;
	
	if(!$array[$key])
		return false;
	
	return true;
}

$myArray = array();
$myArray['foo'] = true;
$myArray['bar'] = false;

echo "foo in myArray ist " . ( is_true($myArray, 'foo') ? 'true' : 'false' ) . '<br/>';
echo "bar in myArray ist " . ( is_true($myArray, 'bar') ? 'true' : 'false' ) . '<br/>';
echo "baz in myArray ist " . ( is_true($myArray, 'baz') ? 'true' : 'false' ) . '<br/>';

gibt aus:

Code:
foo in myArray ist true
bar in myArray ist false
baz in myArray ist false
 
Hallo Saftmeister
Vielen dan fü deine Antwor,ich habe Probleme bei der Umsetzung.

Ich habe es nun mal so versucht:
Code:
if( $is_founder == true )
  $user->data['is_founder'] = 1;
  if(isset($user->data['is_founder'] ) && $user->data['is_founder'] == true )
{
  if ($user->data['user_accept_rules'] == 0 && $user->data['is_registered'] && !$user->data['is_bot'] && (request_var('mode', '') != 'rules'))
	{
		if (confirm_box(true))
		{
			$sql = 'UPDATE ' . USERS_TABLE . '
				SET user_accept_rules = 1
				WHERE user_id = ' . $user->data['user_id'];
			$db->sql_query($sql);
		}
		else
		{
			confirm_box(false, sprintf($user->lang['NEW_RULES'], '<a href="' . append_sid("{$phpbb_root_path}rules.php") . '">', '</a>'));
			header("Location: " . append_sid("{$phpbb_root_path}ucp.$phpEx?mode=logout&sid=" . $user->session_id));
		}
	}
Da bekomme ich immer noch die Debug meldung und bei diesem versuch eine HTTP 500 Error:
Code:
if ($user->data['user_accept_rules'] == 0 && $user->data['is_registered'] && $user->data['is_founder'] = 1; && !$user->data['is_bot'] && (request_var('mode', '') != 'rules'))
	{
		if (confirm_box(true))
		{
			$sql = 'UPDATE ' . USERS_TABLE . '
				SET user_accept_rules = 1
				WHERE user_id = ' . $user->data['user_id'];
			$db->sql_query($sql);
		}
		else
		{
			confirm_box(false, sprintf($user->lang['NEW_RULES'], '<a href="' . append_sid("{$phpbb_root_path}rules.php") . '">', '</a>'));
			header("Location: " . append_sid("{$phpbb_root_path}ucp.$phpEx?mode=logout&sid=" . $user->session_id));
		}
	}
 
Der 500er kommt daher, das du in der if-Kondition ein Semikolon hinter "$user->data['is_founder'] = 1" geschrieben hast. Außerdem ist das keine Prüfung sondern eine Zuweisung. Erst durch ein zweites Gleich-Zeichen wird eine Prüfung draus.

Dafür das die Notice kommt, habe ich keine Erklärung, eigentlich sollte der Code im ersten Beispiel, zumindest was die is_founder-Prüfung angeht, korrekt sein. Außer das du erst $user->data['is_founder'] auf 1 setzt und dann auf true prüfst, ist daran nichts falsch.

Du solltest nicht wild verschiedene Sachen durch probieren, sondern dir eine Lösung überlegen und die dann korrekt umsetzen. Entscheide dich für einen Weg, wenn der Probleme macht, dann lösen wir den, aber nicht mehrere Lösungen, das stiftet nur Verwirrung.
 
Hallo ich verstehe und habe mich für diese Lösung endschieden.

Aber wenn ich den Code nun so eingebe ist immer noch die HTTP 500 Error seite da?
Code:
if(isset($user->data['is_founder'] ) && $user->data['is_founder'] == true)
    {

    if($is_founder == true)
        $user->data['is_founder'] = 1

  if ($user->data['user_accept_rules'] == 0 && $user->data['is_registered'] && !$user->data['is_bot'] && (request_var('mode', '') != 'rules'))
    {
        if (confirm_box(true))
        {
            $sql = 'UPDATE ' . USERS_TABLE . '
                SET user_accept_rules = 1
                WHERE user_id = ' . $user->data['user_id'];
            $db->sql_query($sql);
        }
        else
        {
            confirm_box(false, sprintf($user->lang['NEW_RULES'], '<a href="' . append_sid("{$phpbb_root_path}rules.php") . '">', '</a>'));
            header("Location: " . append_sid("{$phpbb_root_path}ucp.$phpEx?mode=logout&sid=" . $user->session_id));
        }
    }
 
Zurück