Bugtracker Mantis ---> Problem mit CSV Export

HeinerPyt

Erfahrenes Mitglied
hallo leute,

habe gestern eine Änderung an einer der PHP-Dateien vorgenommen. Wenn ich nun den CSV-Export aufrufe bekomme ich folgende Fehlermeldung in meine Exeldatei:
HTML:
p style="color:red">SYSTEM WARNING: array_keys() [<a href='function.array-keys'>function.array-keys</a>]: 
The first argument should be an array</p>
<p style="color:red">SYSTEM WARNING: Invalid argument supplied for foreach()</p>
<p style="color:red">SYSTEM WARNING: array_keys() [<a href='function.array-keys'>function.array-keys</a>]: The first argument should be an array</p>
<p style="color:red">SYSTEM WARNING: Invalid argument supplied for foreach()</p>
<p style="color:red">SYSTEM WARNING: array_values() [<a href='function.array-values'>function.array-values</a>]: The argument should be an array</p>
<p style="color:red">SYSTEM WARNING: Invalid argument supplied for foreach()</p>

Die letzte Zeile wiederholt sich für jeden Datensatz in der DB.

Die Änderung wurde leider an der datei config_defaults_inc.php vorgenommen und zwar hier:


PHP:
	# A configuration option that identifies the columns to be include in the CSV export.
	# In Mantis 1.1, this option can be overriden using the Generic Configuration screen.
	# This configuration can be overriden dynamically by overriding the custom function "get_columns_to_view".
	$g_csv_columns = array ( 'id', 'project_id', 'reporter_id', 'handler_id', 'priority', 'severity', 'reproducibility', 'version', 'projection', 'category', 'date_submitted', 'eta', 'os', 'os_build', 'platform', 'view_state', 'last_updated', 'summary', 'status', 'resolution', 'fixed_in_version', 'duplicate_id' );

Es wurde in der letzten Zeile zu den vorhandenen Standardbezeicnern ein zusätzlicher column-bezeichner eingefügt. Das ganze wurde dann auch wieder rückgängig gemacht aber es funktioniert trotzdem nicht.

Kann jemand helfen, da es dringend ist.

Vielen Dank

heiner
 
Ich denke, dass du die Fehlermeldung deuten kannst, oder?

foreach() erwartet ein Array, und scheint keines zu bekommen. In deinem PHP-Code ist kein foreach() du solltest dir also am besten mal die Stelle suchen in der das foreach steht.

Das da oben ist definitiv ein Array, daher kann die Fehlermeldung Sinn machen, wenn dies das Array sein soll, das mit foreach behandelt wird. Hast du vlt den Variablennamen falsch, oder im Array (bei dem hier oben nicht) ein Komma mit einem Punkt verwechselt?

Wenn du etwas anderes mit foreach behandelst, dann guck nach ob sich da etwas verändert hat. Jedenfalls glaubt PHP kein Array zu bekommen.

Hoffe das hilft für den Anfang, mehr ist aus deinem Post nicht zu lesen glaub ich, sry.
 
Erst mal danke soweit. Hier sollte es es eigentlich die richtige Stelle sein:

PHP:
# Get columns to be exported
	$t_columns = csv_get_columns();

	# export the titles
	$t_first_column = true;
	ob_start();
	$t_titles = array();
	foreach ( $t_columns as $t_column ) {
		if ( !$t_first_column ) {
			echo $t_sep;
		} else {
			$t_first_column = false;
		}

		if ( strpos( $t_column, 'custom_' ) === 0 ) {
			$t_column_title_function = 'print_column_title';
			helper_call_custom_function( $t_column_title_function, array( $t_column, COLUMNS_TARGET_CSV_PAGE ) );
		} else {
			$t_function = 'print_column_title_' . $t_column;
			$t_function( '', 'ASC', COLUMNS_TARGET_CSV_PAGE );
		}
	}

	echo $t_nl;


Und das habe ich auch noch gefunden:

PHP:
	# --------------------
	# An array of column names that are used to identify  fields to include and in which order.
	function csv_get_columns() {
		$t_columns = helper_get_columns_to_view( COLUMNS_TARGET_CSV_PAGE );
		return $t_columns;
	}

Hilft dir das weiter?

Danke
heiner
 
Naja, also jedenfalls sehe ich in dem Code keinen Fehler (wenn helper_get_columns_to_view() richtig funktionert). Wenn er dir wirklich bei diesem foreach() das Skript spregt probier einfach mal ein

PHP:
print_r($t_columns);

das dürfte dir zumindest sagen, ob dein Array richtig ankommt.

Am besten tu setzt es zuerst in den oben code vor dem foreach() und dann in den 2ten, vor dem return.
 
moin, sry hab das vorhin zu schnell und falsch beantwortet.

Er schreibt dir natürlich in deinen Quelltext, also gibt direkt aus.
Musst du eventuell mit Rechtsklick -> Quelltext anzeigen sichtbar machen.
 
Erst mal bis hierher Danke. Leider sehe ich da gar nichts. Gibt es keine Möglichkeit die Ausgabe des print_r zum beispiel in eine Datei umzuleiten.

Ich kann mir einfach nicht erklären wo der Fehler sein soll.
 
Gern geschehen.

kurze Nachfrage, du hast schon print_r mit der Variable benutzt, und dich bei der Variable nicht verschrieben, oder?

Wenn ja, kann es sein, dass die Varbiable einfach leer ist, dann Zeigt print_r auch nichts an.

Die Fehlermeldung asu deinem ersten Post sagt einfach, dass das foreach kein Array geliefert bekommt, sondern z. B. einen leeren String oder sowas....

Da kann also entweder die Funktion fehlerhaft sein, die das Array raholt, also

csv_get_columns();

Oder das Array ist nicht richtig definiert worden.
Da kommen wir wieder zu deinem ersten Post. Wo du meintest du hast ein Array geändert.
Eigentlich sieht das Array da aber korrekt aus. Die Strings sind korrekt und die Kommata sind auch alle da.

Das heißt, entweder hast du das Array umbenannt, dass g_ am Anfang kommt mir nämlich komisch vor in g_csv_columns.

Oder die Funktion ist wie gesagt schon kaputt. Nachgucken ob da wirklich ein Array ist kannst du nur in dem du es ausgibst (oder per if prüfst und dann "juhu" ausgibst).
Das macht print_r halt. Weiß sonst auch keine Vorankommen. Wir müssen den Fehler schon irgendwie lokalisieren.
 
Zuletzt bearbeitet:
Zurück