function mk_select

GN911

Erfahrenes Mitglied
Hi,

ich würde gern mittels der ' function mk_select ' aus dem Tutorial mehrere Tabellen Dynamisch in Listen einlesen.
Leider das so nicht.

PHP:
<!doctype html public "-//W3C//DTD HTML 4.0 //EN"> 
<html>
<head>
	 <title>Auswahl</title>
</head>
<?php
	 $link = mysql_connect("localhost", "root", "");
			 mysql_select_db("datenbank", $link);
 
	 function mk_select ($feld, $name, $multipleauswahl = "", $groesse = 1)
	 {
		 echo "<select $multipleauswahl name=\"$name\" size=$groesse>\n";
		 echo "	 <option value=\"0\">- Bitte w&auml;hlen -</option>\n";
		 echo "	 <option value=\"\">------------------------------</option>\n";
		 $i = 0;
		 while ($row = mysql_fetch_array($result))
		 {
			 echo "	 <option value\"". $row['feld'] ."\">". $row['feld'] ."</option>\n";
		 }
		 mysql_data_seek($result, 0);
		 echo "</select>\n";
	 }
?>
<body>
<?php
	 $result = mysql_query("SELECT ID, ebene FROM ebenen");
	 echo mk_select ($result, 'roomID', 1);
 
	 $result = @mysql_query("SELECT ID, raum FROM raeumen");
	 echo mk_select ($result, 'levelID', 1);
 
?>
</body>
</html>

GN
 
Bei der Definition der mk_select()-Funktion gibst du als ersten Parameter die Variable $feld an, versuchst jedoch später den nicht existenten Parameter $result zu verarbeiten.
 
Hi,

danke. Habe aus $feld $result gemacht. Jetzt habe ich nur noch das Problem, das er in <option> die Werte nicht einliest.

PHP:
 echo "<option value\"". $row['feld'] ."\">". $row['feld'] ."</option>\n";

GN
 
Am besten beziehst du dich dort mit numerischen Schlüsseln auf die einzelnen Feldelemente:
PHP:
echo "<option value\"". $row[0] ."\">". $row[1] ."</option>\n";
 
[…] danke, daran hatte garnicht gedacht. Es .
Benutze das nächste Mal doch bitte das Wort „funktioniert“.


Wenn deine Frage damit beantwortet bezeihungsweise dein Anliegen befriedigt ist, dann markiere dieses Thema bitte als erledigt.
 
Hi,

wollte ich ja auch sagen, das es funktioniert.
Ein kleines Problem is denn doch noch.

PHP:
 echo "<option ". (@$result == $row[0] ? 'selected="selected"' : '') ." value\"". $row[0] ."\">". $row[1] ."</option>\n";

Ich wollte gleich noch mit einbauen, das wenn, ein Raum schon in der Tabelle steht, er diesen gleich selected. Dann kann man die Funktion gleich in Updatescripten benutzen.

GN
 
Probier mal Folgendes:
PHP:
<?php

	function createSelectElementFromMysqlResult($result, $name, $column_value, $column_content, $selected=false, $size=false, $multiple=false) {
		if( !is_resource($result) ) {
			return false;
		}
		$output = sprintf(
			'<select name="%s"%s>',
				htmlentities($name, ENT_COMPAT),
				(bool)$multiple
					? ' multiple="multiple"'
					: '',
				(int)$size > 0
					? ' size="'.((int)$size).'"'
					: ''
			);
		while( $row = mysql_fetch_array($result) ) {
			if( !isset($row[$column_value]) || !isset($row[$column_content]) ) {
				return false;
			}
			$output .= sprintf(
				'<option value="%s"%s>%s</option>',
					htmlentities($row[$column_value], ENT_COMPAT),
					$selected !== false
						? $selected == $row[$column_value]
							? ' selected="selected"'
							: ''
						: '',
					htmlentities($row[$column_content])
				);
		}
		$output .= '</select>';
		return $output;
	}



	$link = mysql_connect('localhost', 'root', '');
	mysql_select_db('datenbank', $link);

	$result = mysql_query("SELECT ID, ebene FROM ebenen");
	echo createSelectElementFromMysqlResult($result, 'roomID', 'ID', 'ebene', 'vorausgewählter Wert der ID-Spalte');

	$result = @mysql_query("SELECT ID, raum FROM raeumen");
	echo createSelectElementFromMysqlResult($result, 'levelID', 'ID', 'raum', 'vorausgewählter Wert der ID-Spalte');

?>
Ungetestet – ich hoffe es funktioniert.
 
Zurück