Dropdown-Funktion will nicht

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:

Dropdown-Funktion will nicht

Beitrag von kratzer54847 »

hoi,

ich versuche derzeit, für eine Liste eine Art "zweite Benutzerbefugnisse" zu erstellen, in denen angegeben wird, wer in einer bestimmten Datenbankkategorie lesen/schreiben/löschen/bearbeiten darf.

Die Befugnisse sind dabei ähnlich dem phpBB aufgebaut.
Zur Generierung der einzelnen Selectboxen, in denen man auswählen kann. wer was machen darf(wie bei phpBB) verwende ich eine Funktion cat_auth_list() mit folgendem Inhalt:

Code: Alles auswählen

//
// Generate Cat Auth List
//
function cat_auth_list($cat_id, $auth_view, $auth_read, $auth_edit, $auth_delete )
{
	global $db;

	$sql = "SELECT *
		  FROM " . BOOK_CATEGORIES_AUTH_TABLE . "
		  WHERE cat_id = '$cat_id'";
	$result = $db->sql_query($sql);

	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, "Couldn't get Auth Data", "", __LINE__, __FILE__, $sql);
	}

	while( $row = $db->sql_fetchrow($result) )
	{
		if ( $row['auth_view'] )
		{
			$auth_view_select = '<select name="auth_view">';

			if( $row['auth_view'] == $auth_view)
			{
				$selected = "selected='selected'";
			}
			else
			{
				$selected = "";
			}
			$auth_view_select .= '<option value="0"' . $selected . '>ALL</option>';
			$auth_view_select .= '<option value="1"' . $selected . '>REG</option>';
			$auth_view_select .= '<option value="2"' . $selected . '>MOD</option>';
			$auth_view_select .= '<option value="3"' . $selected . '>ADMIN</option>';
			$auth_view_select .= "</select>";

			return $auth_view_select; 
		}
		if ( $row['auth_read'] )
		{
			$auth_read_select = '<select name="auth_read">';

			if( $row['auth_read'] == $auth_read)
			{
				$selected = "selected='selected'";
			}
			else
			{
				$selected = "";
			}
			$auth_read_select .= '<option value="0"' . $selected . '>ALL</option>';
			$auth_read_select .= '<option value="1"' . $selected . '>REG</option>';
			$auth_read_select .= '<option value="2"' . $selected . '>MOD</option>';
			$auth_read_select .= '<option value="3"' . $selected . '>ADMIN</option>';
			$auth_read_select .= "</select>";

			return $auth_read_select; 
		}
		if ( $row['auth_edit'] )
		{
			$auth_edit_select = '<select name="auth_edit">';

			if( $row['auth_edit'] == $auth_edit)
			{
				$selected = "selected='selected'";
			}
			else
			{
				$selected = "";
			}
			$auth_edit_select .= '<option value="0"' . $selected . '>ALL</option>';
			$auth_edit_select .= '<option value="1"' . $selected . '>REG</option>';
			$auth_edit_select .= '<option value="2"' . $selected . '>MOD</option>';
			$auth_edit_select .= '<option value="3"' . $selected . '>ADMIN</option>';
			$auth_edit_select .= "</select>";

			return $auth_edit_select; 
		}
		if ( $row['auth_delete'] )
		{
			$auth_delete_select = '<select name="auth_delete">';

			if( $row['auth_delete'] == $auth_delete)
			{
				$selected = "selected='selected'";
			}
			else
			{
				$selected = "";
			}
			$auth_delete_select .= '<option value="0"' . $selected . '>ALL</option>';
			$auth_delete_select .= '<option value="1"' . $selected . '>REG</option>';
			$auth_delete_select .= '<option value="2"' . $selected . '>MOD</option>';
			$auth_delete_select .= '<option value="3"' . $selected . '>ADMIN</option>';
			$auth_delete_select .= "</select>";

			return $auth_delete_select; 
		}
	}
} 
es werden aber nicht mehrere Felder angezeigt, sondern nur eines, was dann auch noch falsch ausgefüllt wird. Da in der Funktion aber eine while-Schleife zum Einsatz kommt, die eigentlich immer erfüllt ist, sollten eigentlich alle Felder angezeigt werden.

wer weiß Rat?
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 »

Kannst du dein Problem konkretisieren?

angenommen $row['auth_view'] ist true dann sollte lediglich die dazugehörigen Felder
$auth_view_select .= '<option value="0"' . $selected . '>ALL</option>';
$auth_view_select .= '<option value="1"' . $selected . '>REG</option>';
$auth_view_select .= '<option value="2"' . $selected . '>MOD</option>';
$auth_view_select .= '<option value="3"' . $selected . '>ADMIN</option>';

angezeigt werden.....

Folglich erfolgt nach der ersten ausgelesenen Zeile ein Schleifenabbruch da ein Rückgabeparameter breits anschließend verfügbar ist....

Diese Tatsache lässt sich aber bereits aus der Dokumentation entnehmen
PHP-Manual hat geschrieben: Wird die return() Anweisung innerhalb einer Funktion aufgerufen, wird die Ausführung der Funktion sofort beendet und das Argument als Wert des Funktionsaufrufs zurückgegeben. return() beendet auch die Ausführung einer eval() Anweisung oder einer Skriptdatei.
Benutzeravatar
kratzer54847
Mitglied
Beiträge: 3065
Registriert: 20.01.2003 16:34
Wohnort: Düsseldorf/Hannover/Berlin
Kontaktdaten:

Beitrag von kratzer54847 »

hoi,

wenn ich die returns ans Ende setze, bekomme ich schonmal alle vier Felder angezeigt ;-)

jedoch stimmt da was mit der Vorbelegung nicht!
Alle Felder werden mit dem letzen Wert vorbelegt, das soll aber nicht sein!

Code: Alles auswählen

//
// Generate Cat Auth List
//
function cat_auth_list2($cat_id, $auth_view, $auth_read, $auth_edit, $auth_delete )
{
	global $db;

	$sql = "SELECT *
		  FROM " . BOOK_CATEGORIES_AUTH_TABLE . "
		  WHERE cat_id = '$cat_id'";
	$result = $db->sql_query($sql);

	if ( !($result = $db->sql_query($sql)) )
	{
		message_die(GENERAL_ERROR, "Couldn't get Auth Data", "", __LINE__, __FILE__, $sql);
	}

	if ( $row = $db->sql_fetchrow($result) )
	{
		$auth_view_select .= '<select name="auth_view">';

		if( $row['auth_view'] == $auth_view)
		{
			$selected1 = "selected='selected'";
		}
		else
		{
			$selected1 = "";
		}
		$auth_view_select .= '<option value="0"' . $selected1 . '>ALL</option>';
		$auth_view_select .= '<option value="1"' . $selected1 . '>REG</option>';
		$auth_view_select .= '<option value="2"' . $selected1 . '>MOD</option>';
		$auth_view_select .= '<option value="3"' . $selected1 . '>ADMIN</option>';
		$auth_view_select .= "</select>";

		$auth_read_select = '<select name="auth_read">';

		if( $row['auth_read'] == $auth_read)
		{
			$selected2 = "selected='selected'";
		}
		else
		{
			$selected2 = "";
		}
		$auth_read_select .= '<option value="0"' . $selected2 . '>ALL</option>';
		$auth_read_select .= '<option value="1"' . $selected2 . '>REG</option>';
		$auth_read_select .= '<option value="2"' . $selected2 . '>MOD</option>';
		$auth_read_select .= '<option value="3"' . $selected2 . '>ADMIN</option>';
		$auth_read_select .= "</select>";

		$auth_edit_select = '<select name="auth_edit">';

		if( $row['auth_edit'] == $auth_edit)
		{
			$selected3 = "selected='selected'";
		}
		else
		{
			$selected3 = "";
		}

		$auth_edit_select .= '<option value="0"' . $selected3 . '>ALL</option>';
		$auth_edit_select .= '<option value="1"' . $selected3 . '>REG</option>';
		$auth_edit_select .= '<option value="2"' . $selected3 . '>MOD</option>';
		$auth_edit_select .= '<option value="3"' . $selected3 . '>ADMIN</option>';
		$auth_edit_select .= "</select>";


		$auth_delete_select = '<select name="auth_delete">';

		if( $row['auth_delete'] == $auth_delete)
		{
			$selected4 = "selected='selected'";
		}
		else
		{
			$selected4 = "";
		}
		$auth_delete_select .= '<option value="0"' . $selected4 . '>ALL</option>';
		$auth_delete_select .= '<option value="1"' . $selected4 . '>REG</option>';
		$auth_delete_select .= '<option value="2"' . $selected4 . '>MOD</option>';
		$auth_delete_select .= '<option value="3"' . $selected4 . '>ADMIN</option>';
		$auth_delete_select .= "</select>";
	
		echo $auth_read_select; 
		echo $auth_edit_select; 
		echo $auth_view_select; 
		echo $auth_delete_select;
	} 
}
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 »

Du weisst glaube ich nicht was du tust bzw. was du für eine Ist-Situation hast.

Daher schau dir mal an was du für eine Ausgangsstellung in der Table hast bzw. was du je Zeile erhälst. Und dann schau dir an wie du das umsetzt.

Und am besten postest du noch 2-3 exemplarische Datensätze
Antworten

Zurück zu „Coding & Technik“