Selectfeld vorausfüllen lassen

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Selectfeld vorausfüllen lassen

Beitrag 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
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Benutzeravatar
Blutgerinsel
Mitglied
Beiträge: 1801
Registriert: 19.07.2004 18:53
Wohnort: Landkreis Ulm
Kontaktdaten:

Beitrag 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
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag 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;
}
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag 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
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag 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:
Knowledge Base | MOD Datenbank | Boardsuche | HTML | PHP

Durch die richtige Verwendung dieser Links können viele Fragen beantwortet werden ;-)
Antworten

Zurück zu „Coding & Technik“