Seite 1 von 1

Selectfeld vorausfüllen lassen

Verfasst: 08.05.2005 21:12
von kratzer54847
Hi,

bin bei meinem Versuch, ein Dropdownfeld nach einem Wert aus der DB vorausfüllen zu lassen, kläglioch gescheitert.

Habs folgendermaßen versucht:

1. Eine neue Funktion ähnlich der tz_select, die die Zeitzone auswählt in der includes/functions_selects.php eingefügt:

Code: Alles auswählen

//
// Pick a cat, any cat ...
//
function cat_select($default, $select_name = "book_cat")
{
	global $phpEx, $phpbb_root_path, $db;

	$default = '1';

	$sql = "SELECT *
		  FROM " . BOOK_CATEGORIES_TABLE . "";
	$result = $db->sql_query($sql);

	$cats = array();
	while ( $row = $db->sql_fetchrow($result) )
	{
			$cats['name'] = $row['cat_name'];
			$cats['id'] = $row['cat_id'];
	}

	@asort($cats);
	@reset($cats);

	$cat_select = '<select name="' . $select_name . '">';
	while ( list($cats['id'], $cats['name']) = @each($row) )
	{
		$selected = ( $default == '1' ) ? ' selected="selected"' : '';
		$cat_select .= '<option value="' . $cats['id'] . '"' . $selected . '>' . $cats['name'] . '</option>';
	}
	$cat_select .= '</select>';

	return $cat_select;
}
2. Die Funktion im Code berücksichtigt:

Code: Alles auswählen

'CAT_SELECT' => cat_select('1', 'book_cat'),
3. den tpl-Code ausgegeben:

Code: Alles auswählen

	</tr>
		<td class="row1">{L_CATEGORY}</td>
		<td class="row2">
		{CAT_SELECT}
		</td>
	</tr>
doch irgendwo muss da noch ein Haken liegen,denn ich bekomme lediglich eine leere Selectbox auf der Seite angezeigt!

mfg Johny

Verfasst: 09.05.2005 12:47
von Blutgerinsel
Ich sehe nirgendwo eine Debugging Ausgabe des Rückgabeparameters.....

Des weiteren muss ich wohl auch nicht verstehen warum hier 2 Schleifen im Einsatz sind.....

Und genauso wenig muss ich irgendwie entfernt nachvollziehen warum man eine Fehlerunterdrückung bei einer Entwicklung macht.

Tja willst du nun deinen Fehler selbst rausfinden oder weiterhin nach jedem kleinen Problem um Hilfe schreien ? Meins nur gut mit dir.

Ach ja den möglichen Fehler hab ich auch schon entdeckt und der ist mit einer reinem Debugging schnell ersichtlich.

Die Frage ist ob du dazulernen willst oder es dir einfach machen willst

Verfasst: 10.05.2005 15:41
von kratzer54847
das Debugging brachte mich insofern weiter,dass jetzt nur noch eine Selectbox angezeigt wird. Doch die Kuriosität ist: in 2 von drei Kategorien ist die Anzeige korrekt, in der dritten nicht, obwohl immer dieselbe Funktion angewandt wird:

Code: Alles auswählen

//
// Pick a cat, any cat ...
//
function cat_select($oldcat, $bookid, $select_name = "cat")
{
	global $db;

	$sql = "SELECT cat_id, cat_name
		FROM " . BOOK_CATEGORIES_TABLE. "
		ORDER BY cat_name, cat_id";
	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, "Couldn't query book cat table", "", __LINE__, __FILE__, $sql);
	}

	$cat_select = '<select name="' . $select_name . '">';
	while ( $row = $db->sql_fetchrow($result) )
	{
		//
		// Select Book's Cat
		//

		$sql2 = "SELECT *
			  FROM " . BOOKS_TABLE . "
			  WHERE book_id = '$bookid'";
		$result2 = $db->sql_query($sql2);
	
		while ( $row2 = $db->sql_fetchrow($result2) )
		{
			if( $row2['book_cat'] == $oldcat)
			{
				$selected = "selected='selected'";
			}
			else
			{
				$selected = "";
			}
	
			$cat_select .= '<option value="' . $row['cat_id'] . '"' . $selected . '>' . $row['cat_name'] . '</option>';
		}
	}
	$cat_select .= "</select>";

	return $cat_select;
}

Verfasst: 10.05.2005 21:32
von kratzer54847
soo habs rausbekommen...manchmal seh ich den Wald vor lauter Bäumen nicht!

Es war falsch,die Query in zwei Teile zu splitten, entfernt man den zweiten SQL-Befehl und ersetzt den ersten durch

Code: Alles auswählen

$sql = "SELECT *
FROM " . BOOK_CATEGORIES_TABLE. " bc, " . BOOKS_TABLE . " b
WHERE b.book_id = '$bookid'
AND b.book_cat = bc.cat_id
ORDER BY bc.cat_name, bc.cat_id";
klappt es reibungslos!

mfg Johny

Verfasst: 11.05.2005 07:37
von kratzer54847
dachte ich jedenfalls :roll:
sobald ich eine zweite Kategorie erstelle, wird nur noch eine einzige angezeigt!

habs also mal mit

Code: Alles auswählen

SELECT * FROM phpbb_books b, phpbb_users u LEFT JOIN phpbb_book_categories AS c ON c.cat_id != 0 WHERE u.user_id = b.book_user AND b.book_id = '17' 
probiert, das brachte aber auch keinen weiteren Erfolg :roll: