Seite 1 von 1

Dropdown-Funktion will nicht

Verfasst: 27.05.2005 10:01
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?

Verfasst: 27.05.2005 16:13
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.

Verfasst: 27.05.2005 16:35
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;
	} 
}

Verfasst: 27.05.2005 18:12
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