Hi!
<form action="<?PHP echo $PHP_SELF ?>" method="POST">
Kontextwechsel zur Vermeidung von Sicherheitslücken beachten. Statt htmlspecialchars($PHP_SELF) kann das Attribut action="" auch einfach leer notiert werden, das verweist ebenfalls und ohne HTML/Javascript-Injection-Potential auf die aktuelle URL. Wo kommt außerdem $PHP_SELF her? Verwende die Werte in $_GET, $_POST oder hier $_SERVER bitte direkt, ohne sie umzukopieren oder gar auf Register Globals zu bauen.
echo '<option value="$row->gebietid" ';
Anfängerwissen. Bitte beachte den essentiellen Unterschied zwischen in "" und '' eingefassten Strings.
<td valign="top"> <b>Mehrere auswählen</b>: <br>
Strg-Taste während
des Auswählens gedrückt halten </td>
Verwende eine angemessene Zeichenkodierung, dann kannst du dir das Gehampel mit den Umlaut-Entities sparen.
$query=mysql_query("DELETE FROM tbl_buecher_fachgebiete WHERE buchid=$buchid") or die ("alte Gebiete loeschen schlug fehl: ".mysql_error());
Auch hier wieder ein nicht beachteter Kontextwechsel, der das Potential hat, die gesamte Tabelle löschen zu können.
if(isset ($_POST[gebiet]))
foreach($_POST[gebiet] as $gebietid)
Auch wenn PHP großzügig ist, was die Notation von Array-Keys anbelangt, solltest du immer solche String-Werte in Anführungszeichen setzen. (Also, nicht immer, es gibt Ausnahmen.) Wenn du irgendwann mal entdeckt hast, dass ein aus E_ALL gesetztes error_reporting bei Entwickeln eine wertvolle Hilfe beim Finden von Tipp- und anderen Fehlern ist, wirst du danken, wenn nicht auch noch dafür Notice-Meldungen generiert werden.
Lo!