Enum-Werte in DropDown Liste

jenno

Erfahrenes Mitglied
Ich habe eine Datenbanktabelle mit einer Spalte Einheit vom Typ enum("Liter", "kg", "Flasche", "Dose").

Auf einer php-Seite möchte ich jetzt gern, dass der User festlegen kann, welche Einheit ein bestimmtes Produkt hat.

Ich frage mich jetzt, komm ich irgendwie an die Typendefinition der Tabellenspalte Einheit? Ich habe schon das hier gefunden:

PHP:
DESCRIBE angebot einheit;
+---------+------------------------------------------------------+------+-----+---------+-------+
| Field   | Type                                                 | Null | Key | Default | Extra |
+---------+------------------------------------------------------+------+-----+---------+-------+
| eenheid | enum('-','stuk','kilo','gram','liter','fles','doos') | YES  |     | NULL    |       |
+---------+------------------------------------------------------+------+-----+---------+-------+

Aber wie gelange ich jetzt mittels php an die möglichen Werte in der Aufzählungsliste?
 
Hallo,

im Grunde genommen ganz einfach:

PHP:
$sql = "DESCRIBE table spalte";
$result = mysql_query($sql) or die(mysql_error());
$row = mysql_fetch_assoc($result);
$type = explode(',', substr($row['Type'],5,-1));
echo "<select name=\"select\">\n";
foreach($type as $enum)
{
	echo "<option>".trim(str_replace("'"," ",$enum))."</option>\n";
}
echo "</select>\n";

Vielleicht kann man es auich besser herausfiltern aber es geht .. habs getestet.

ciao nauti
 
Hallo jenno,
im Prinzip ist das was ich hier abliefere der Lösung von nautiLus` sehr ähnlich. Ich habe mir für diese Aufgabe mal eine Funktion gebastelt, die in meiner Standard-Include-Datei steckt. Hab' sie lange nicht mehr angeguckt, so wie nautiLus` das macht (DESCRIBE statt SHOW) erscheint mir das noch viel einfacher:
PHP:
// Liefert die Elemente eines SET- oder ENUM-Feldes
// als Array oder als getrennte Liste
function getEnumElems($tbl, $fld, $returnType = "Array") {
	
	global $con;
		
	$it  = "SHOW COLUMNS FROM $tbl LIKE '$fld'";
	$rst = mysql_query($it, $con) or die("FEHLER in dbBasics/getEnumElems:\n$it");
	$it  = mysql_fetch_array($rst, MYSQL_ASSOC) or die("FEHLER in dbBasics/getEnumElems:\n$it");
	$it = $it["Type"];
	mysql_free_result($rst);
	
	$rst = explode(",", $it);
	while ($elem = each($rst)) {
		$rst[$elem[0]] = str_replace("set('", "", $rst[$elem[0]]);
		$rst[$elem[0]] = str_replace("enum('", "", $rst[$elem[0]]);
		$rst[$elem[0]] = str_replace("')", "", $rst[$elem[0]]);
		$rst[$elem[0]] = str_replace("'", "", $rst[$elem[0]]);
	}
	
	if ($returnType == "Array") {
		return $rst;
	} else {
		return implode($returnType, $rst);
	}
}
Der dritte Parameter $returnType ist optional, wenn hier was anderes als der Default "Array" übergeben wird, dann liefert die Funktion eine Liste der ENUM- oder SET-Elemente als String, getrennt durch den übergebenen String. Parameter 1 und 2 sind klar: Name der Tabelle und Name des Feldes.
Wie man das Dropdown dann füllt, hat nautiLus` schon aufgezeigt.

Grüße,
Martin
 
Zurück