Index: trunk/info/info/alkisn/alkisfsnw.php
===================================================================
--- trunk/info/info/alkisn/alkisfsnw.php	(revision 377)
+++ trunk/info/info/alkisn/alkisfsnw.php	(revision 387)
@@ -10,18 +10,42 @@
 	2016-12-01 HTML5, Gemeinsam genutzte Datenbanken ermÃ¶glichen
 	2016-12-05 Nutzungsart-Kategorie ist nun in Text enthalten, nicht mehr aus der Definition ausschneiden
+	2017-06-08 optional "berechtigte Buchungen" anzeigen, Function "eigentuemer" ohne Parameter $con,
+				Validierung Eingabeparameter, Feinkorrekturen
 
 	ToDo:
-	- BodenschÃ€tzung anzeigen
+	- BodenschÃ€tzung anzeigen (siehe Mail Frau Weyand ITEBO vom 15.05.17)
 	- Bessere Differenzierung bei den Nutzungsarten (Tabelle dafÃŒr aufbauen)
 */
 session_start();
-$id="n";
+
+// Var. aus Parameter initalisieren
 $eig="n";
+$berbu="n";
+$showkey="n";
+
+// alle Parameter in Variable umwandeln
 $cntget = extract($_GET);
+
+// strikte Validierung aller Parameter
+if (isset($gmlid)) {
+	if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
+	$fskennz='';
+} else { // Alternativ
+	$gmlid='';
+	if (isset($fskennz)) { // llgggg-fff-11111/222 oder z.B.'052647002001910013__' oder '05264700200012______'
+		if (!preg_match('#^[0-9\-_/]{8,20}$#', $fskennz)) {die ("Eingabefehler fskennz");}
+	} else {
+		$fskennz='';
+	}
+}
+if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
+if (!preg_match('#^[j|n]{0,1}$#', $eig)) {die("Eingabefehler eig");}
+if (!preg_match('#^[j|n]{0,1}$#', $berbu)) {die ("Eingabefehler berbu");}
+if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
+if ($showkey == "j") {$showkey=true;} else {$showkey=false;} // "j"/"n" als boolean umwandeln, ist praktischer abzufragen, wird oft gebraucht
+
 require_once("alkis_conf_location.php");
 if ($auth == "mapbender") {require_once($mapbender);}
 include("alkisfkt.php");
-$keys = isset($_GET["showkey"]) ? $_GET["showkey"] : "n";
-if ($keys == "j") {$showkey=true;} else {$showkey=false;}
 ?>
 <!doctype html>
@@ -29,4 +53,5 @@
 <head>
 	<meta charset="utf-8">
+	<meta name="viewport" content="width=device-width, initial-scale=1.0">
 	<title>ALKIS Flurst&uuml;cksnachweis</title>
 	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
@@ -37,7 +62,4 @@
 		}
 	</script>
-	<style type='text/css' media='print'>
-		.noprint {visibility: hidden;}
-	</style>
 </head>
 <body>
@@ -45,12 +67,12 @@
 // S t a r t
 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisfsnw.php'");
-if (!$con) echo "<p class='err'>Fehler beim Verbinden der DB</p>\n";
+if (!$con) echo "\n<p class='err'>Fehler beim Verbinden der DB</p>";
 
 // Ein (ALB- ?) FlurstÃŒcks-Kennzeichen wurde alternativ zur gml_id ÃŒbermittelt
-if ($gmlid == '' and $fskennz != '') {
+if ($fskennz != '') {
 	// Ãbergabe Format z.B. "llgggg-fff-nnnn/zz.nn" oder "gggg-ff-nnn/zz"
 	$arr=explode("-", $fskennz, 4);
 	$zgemkg=trim($arr[0]);
-	if (strlen($zgemkg) == 20 and $arr[1] == "") { // Oh, ist wohl schon das Datenbank-Feldformat 
+	if (strlen($zgemkg) == 20 and !isset($arr[1])) { // Oh, ist wohl schon das Datenbank-Feldformat 
 		$fskzdb=$zgemkg;
 	} else { // NÃ¶, ist wohl eher ALB-Format
@@ -65,6 +87,10 @@
 		$zfsnr=trim($arr[2]); // FlurstÃŒcke-Nr
 		$zn=explode("/", $zfsnr, 2); // Bruch?
-		$zzaehler=str_pad(trim($zn[0]), 5 , "0", STR_PAD_LEFT);	
-		$znenner=trim($zn[1]);
+		$zzaehler=str_pad(trim($zn[0]), 5 , "0", STR_PAD_LEFT);
+		if (isset($zn[1])) {
+			$znenner=trim($zn[1]);
+		} else {
+			$znenner="";
+		}
 		if (trim($znenner, " 0.") == "") { // kein Bruch oder nur Nullen
 			$znenner="____"; // in DB-Spalte mit Tiefstrich aufgefÃŒllt
@@ -86,5 +112,8 @@
 		$gmlid=$row["gml_id"];
 	} else {
-		echo "<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ckskennzeichen='".$fskennz."' (".$fskzdb.")</p>";
+		echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ckskennzeichen='".$fskennz."' (".$fskzdb.")</p>";
+		echo "<p>Kennzeichen veraltet? <a href='./alkisfshist.php?gkz=".$gkz."&fskennz=".$fskennz."'>Suche in der Flurst&uuml;cks-Historie</a></p>";
+		echo "\n</body>\n</html>";
+		return;
 	}
 	pg_free_result($res);
@@ -101,6 +130,6 @@
 
 if (!$res) {
-	echo "\n<p class='err'>Fehler bei Flurstuecksdaten</p>\n";
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	echo "\n<p class='err'>Fehler bei Flurstuecksdaten</p>";
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
 }
 if ($row = pg_fetch_array($res)) {
@@ -123,7 +152,7 @@
 	$arrn = explode(",", trim($name, "{}") ); // PHP-Array
 } else {
-	echo "<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ck mit gml_id=".$gmlid."</p>";
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
-	echo "</body></html>";
+	echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ck mit gml_id=".$gmlid."</p>";
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	echo "\n</body>\n</html>";
 	return;
 }
@@ -132,9 +161,9 @@
 // Balken
 if ($eig=="j") {
-	echo "<p class='fsei'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n"
-	."\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck mit Eigent&uuml;mer</h2>\n";
+	echo "<p class='fsei'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>"
+	."\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck mit Eigent&uuml;mer</h2>";
 } else {
-	echo "<p class='fskennz'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>\n"
-	."\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck</h2>\n";
+	echo "<p class='fskennz'>ALKIS Flurst&uuml;ck ".$gmkgnr."-".$flurnummer."-".$flstnummer."&nbsp;</p>"
+	."\n<h2><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;ck</h2>";
 }
 
@@ -145,6 +174,6 @@
 	if ($debug > 2) {
 	//++ SchÃ¶nes Bild? Stop-Zeichen?
-		echo "<p class='err'>Filter Kreis='".$filtkreis."', Gemeinde='".$filtgem."'</p>"
-		."<p class='err'>Flstk. Kreis='".$fskrs."', Gemeinde='".$fsgem."'</p>";
+		echo "\n<p class='err'>Filter Kreis='".$filtkreis."', Gemeinde='".$filtgem."'</p>"
+		."\n<p class='err'>Flstk. Kreis='".$fskrs."', Gemeinde='".$fsgem."'</p>";
 	}
 	echo "\n<br><p class='stop1'>Zugriff nicht erlaubt</p>"
@@ -154,27 +183,27 @@
 
 echo "\n<table class='outer'>\n<tr>\n\t<td>" // linke Seite
-	."\n\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>\n\t<tr>" // darin Tabelle Kennzeichen
-		."\n\t\t<td class='head'>Gmkg</td>\n\t\t<td class='head'>Flur</td>\n\t\t<td class='head'>Flurst-Nr.</td>\n\t</tr>"
-		."\n\t<tr>\n\t\t<td title='Gemarkung'>";
+	."\n\t\t<table class='kennzfs' title='Flurst&uuml;ckskennzeichen'>\n\t\t<tr>" // darin Tabelle Kennzeichen
+		."\n\t\t\t<td class='head'>Gmkg</td>\n\t\t\t<td class='head'>Flur</td>\n\t\t\t<td class='head'>Flurst-Nr.</td>\n\t\t</tr>"
+		."\n\t\t<tr>\n\t\t\t<td title='Gemarkung'>";
 		if ($showkey) {
 			echo "<span class='key'>".$gmkgnr."</span><br>";
 		}
 		echo $gemkname."&nbsp;</td>"
-		."\n\t\t<td title='Flurnummer'>".$flurnummer."</td>"
-		."\n\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t</tr>"
-	."\n\t</table>"
+		."\n\t\t\t<td title='Flurnummer'>".$flurnummer."</td>"
+		."\n\t\t\t<td title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>".$flstnummer."</span></td>\n\t\t</tr>"
+	."\n\t\t</table>"
 ."\n\t</td>\n\t<td>" // rechte Seite
-	."\n\t<table class='fsd'>" // FS-Daten 2 Spalten
-		."\n\t<tr>\n\t\t<td>Entstehung</td>"
-		."\n\t\t<td>".$entsteh."</td>\n\t</tr>"
-		."\n\t<tr>"
-			."\n\t\t<td>letz. Fortf</td>"
-			."\n\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
+	."\n\t\t<table class='fsd'>" // FS-Daten 2 Spalten
+		."\n\t\t<tr>\n\t\t\t<td>Entstehung</td>"
+		."\n\t\t\t<td>".$entsteh."</td>\n\t\t</tr>"
+		."\n\t\t<tr>"
+			."\n\t\t\t<td>letz. Fortf</td>"
+			."\n\t\t\t<td title='Jahrgang / Fortf&uuml;hrungsnummer - Fortf&uuml;hrungsart'>";
 				foreach($arrn AS $val) { // Zeile f. jedes Element des Array
 					echo trim($val, '"')."<br>";
 				}
 			echo "</td>"
-		."\n\t</tr>"
-	."\n\t</table>"
+		."\n\t\t</tr>"
+	."\n\t\t</table>"
 ."\n\t</td>\n</tr>\n</table>";
 //	echo "\n<tr>\n\t<td>Finanzamt</td>\n\t<td>".$finanzamt." ".$finame  . "</td>\n</tr>";
@@ -197,23 +226,21 @@
 $res = pg_execute("", $v);
 if (!$res) {
-	echo "\n<p class='err'>Fehler bei Gemeinde</p>\n";
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."</p>";}
+	echo "\n<p class='err'>Fehler bei Gemeinde</p>";
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
 }
 $row = pg_fetch_array($res);
 $gnam = htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
-echo "\n\t<td class='lr'>Gemeinde</td><td class='lr'>";
-if ($showkey) {
-	echo "<span class='key'>(".$gemeinde.")</span> ";
-}
+echo "\n\t<td class='lr'>Gemeinde</td>\n\t<td class='lr'>";
+if ($showkey) {echo "<span class='key'>(".$gemeinde.")</span> ";}
 // Link zur FS-Historie (passt nicht ganz in die Zeile "Gemeinde", aber gut unter "weitere Auskunft")
-echo $gnam."</td><td class='nwlink'>"
-	."\n<p class='nwlink noprint'>"
-		."\n\t<a href='alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
-			if ($showkey)   {echo "&amp;showkey=j";}
+echo $gnam."</td>\n\t<td class='nwlink'>"
+	."\n\t\t<p class='nwlink noprint'>"
+		."\n\t\t\t<a href='alkisfshist.php?gkz=".$gkz."&amp;gmlid=".$gmlid;
+			if ($showkey) {echo "&amp;showkey=j";}
 			echo "' title='Vorg&auml;nger-Flurst&uuml;cke'>Historie "
 			."<img src='ico/Flurstueck_Historisch.png' width='16' height='16' alt=''>"
 		."</a>"
-	."\n</p>"
-. "</td></tr>";
+	."\n\t\t</p>"
+. "\n\t</td>\n</tr>";
 pg_free_result($res);
 
@@ -224,14 +251,12 @@
 $res = pg_execute("", $v);
 if (!$res) {
-	echo "\n<p class='err'>Fehler bei Kreis</p>\n";
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."</p>";}
+	echo "\n<p class='err'>Fehler bei Kreis</p>";
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
 }
 $row = pg_fetch_array($res);
 $knam = htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
-echo "<tr><td>&nbsp;</td><td>Kreis</td><td>";
-if ($showkey) {
-	echo "<span class='key'>(".$kreis.")</span> ";
-}
-echo $knam."</td><td>&nbsp;</td></tr>";
+echo "\n<tr>\n\t<td>&nbsp;</td>\n\t<td>Kreis</td>\n\t<td>";
+if ($showkey) {echo "<span class='key'>(".$kreis.")</span> ";}
+echo $knam."</td>\n\t<td>&nbsp;</td>\n</tr>";
 pg_free_result($res);
 
@@ -242,14 +267,12 @@
 $res = pg_execute("", $v);
 if (!$res) {
-	echo "<p class='err'>Fehler bei Regierungsbezirk</p>";
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."</p>";}
+	echo "\n<p class='err'>Fehler bei Regierungsbezirk</p>";
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."</p>";}
 }
 $row=pg_fetch_array($res);
 $bnam=htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8");
-echo "<tr><td>&nbsp;</td><td>Regierungsbezirk</td><td>";
-if ($showkey) {
-	echo "<span class='key'>(".$bezirk.")</span> ";
-}
-echo $bnam."</td><td>&nbsp;</td></tr>";
+echo "\n<tr>\n\t<td>&nbsp;</td>\n\t<td>Regierungsbezirk</td>\n\t<td>";
+if ($showkey) {echo "<span class='key'>(".$bezirk.")</span> ";}
+echo $bnam."</td>\n\t<td>&nbsp;</td>\n</tr>";
 pg_free_result($res);
 // ENDE G e b i e t s z u g e h o e r i g k e i t
@@ -270,10 +293,9 @@
 
 if (!$res) {
-	echo "<p class='err'>Fehler bei Lagebezeichnung mit Hausnummer</p>";
+	echo "\n<p class='err'>Fehler bei Lagebezeichnung mit Hausnummer</p>";
 	if ($debug > 1) {
-		//echo "<p class='dbg'>Fehler:".pg_result_error($res)."</p>";
-		echo "<p class='dbg'>Fehler:".pg_last_error()."</p>";
-	}
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+		echo "\n<p class='dbg'>Fehler:".pg_last_error()."</p>";
+		if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	}
 } else {
 	$j=0;
@@ -282,7 +304,7 @@
 		echo "\n<tr>\n\t";
 			if ($j == 0) {
-				echo "<td class='ll'><img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''> Adresse:</td>";
+				echo "\n\t<td class='ll'><img src='ico/Lage_mit_Haus.png' width='16' height='16' alt=''> Adresse:</td>";
 			} else {
-				echo "<td>&nbsp;</td>";
+				echo "\n\t<td>&nbsp;</td>";
 			}
 			echo "\n\t<td>&nbsp;</td>"
@@ -316,7 +338,7 @@
 $res = pg_execute("", $v);
 if (!$res) {
-	echo "<p class='err'>Fehler bei Lagebezeichnung ohne Hausnummer</p>";
+	echo "\n<p class='err'>Fehler bei Lagebezeichnung ohne Hausnummer</p>";
 	//if ($debug > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($res)."</p>";}
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
 }
 $j=0;
@@ -376,6 +398,6 @@
 $res = pg_execute("", $v);
 if (!$res) {
-	echo "<p class='err'>Fehler bei Suche tats. Nutzung</p>\n";
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	echo "\n<p class='err'>Fehler bei Suche tats. Nutzung</p>";
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
 }
 $the_Xfactor=$fsbuchflae / $fsgeomflae; // geom. ermittelte FlÃ€che auf amtl. BuchflÃ€che angleichen
@@ -481,5 +503,5 @@
 
  Die EntschlÃŒsselung der Nutzungsart in den verschiedenen ALKIS-Varianten ist darin unterentwickelt.
- Diese ist eigentlich fÃŒr jede der getrennten Tabellen der Gruppe Nutzungsrt individuell.
+ Diese ist eigentlich fÃŒr jede der getrennten Tabellen der Gruppe Nutzungsart individuell.
  Die Classic-LÃ¶sung mit 2 Zusatzfeldern war schon sehr pauschalisiert, aber 
  durch die RÃŒck-Konvertierung in ALB-Strukturen in der norGIS-Version ist das zu stark vereinfacht.
@@ -499,5 +521,5 @@
 
 $fskennzalb=$defland.$gmkgnr."-".str_pad($flurnummer,3,"0",STR_PAD_LEFT)."-".str_pad($zaehler,5,"0",STR_PAD_LEFT)."/".str_pad($nenner,3,"0",STR_PAD_LEFT);
-// echo "<p class='err'>Kennz ALB='".$fskennzalb."'</p>";
+// echo "\n<p class='err'>Kennz ALB='".$fskennzalb."'</p>";
 
 $v = array($fskennzalb);
@@ -505,6 +527,6 @@
 $res = pg_execute("", $v);
 if (!$res) {
-	echo "<p class='err'>Fehler bei Suche tats. Nutzung</p>\n";
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = FS-Kennz = '".$fskennzalb."'</p>";}
+	echo "\n<p class='err'>Fehler bei Suche tats. Nutzung</p>";
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = FS-Kennz = '".$fskennzalb."'</p>";}
 }
 
@@ -584,6 +606,6 @@
 $res_bodeneuordnung = pg_execute($con, "bodeneuordnung", array($gmlid));
 if (!$res_bodeneuordnung) {
-	echo "<p class='err'>Fehler bei Bau-, Raum- oder Bodenordnungsrecht</p>\n";
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql_boden."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	echo "\n<p class='err'>Fehler bei Bau-, Raum- oder Bodenordnungsrecht</p>";
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sql_boden."<br>$1 = gml_id = '".$gmlid."'</p>";}
 }
 
@@ -594,6 +616,6 @@
 $res_strittigeGrenze = pg_execute($con, "strittigeGrenze", array($gmlid));
 if (!$res_strittigeGrenze) {
-	echo "<p class='err'>Fehler bei strittige Grenze</p>\n";
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql_str."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	echo "\n<p class='err'>Fehler bei strittige Grenze</p>";
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".$sql_str."<br>$1 = gml_id = '".$gmlid."'</p>";}
 }
 
@@ -667,18 +689,18 @@
 
 // G R U N D B U C H
-echo "\n<table class='outer'>"
+echo "\n\n<table class='outer'>"
 	."\n<tr>"
 		."\n\t<td>"
-			."\n\t\t<a id='gb'></a>\n\t\t<h3><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Grundb&uuml;cher</h3>"
+			."\n\t\t<h3 id='gb'><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Grundb&uuml;cher</h3>"
 		."\n\t</td>"
 		."\n\t<td>"
 			."\n\t\t<p class='nwlink noprint'>"
-				."\n\t\t\t<a href='".$_SERVER['PHP_SELF']. "?gkz=".$gkz."&amp;gmlid=".$gmlid;
+				."\n\t\t\t<a href='".$_SERVER['PHP_SELF']. "?gkz=".$gkz."&amp;gmlid=".$gmlid."&amp;berbu=".$berbu;
 				if ($showkey) {echo "&amp;showkey=j";}
 
-				// Umschalter: FS-Nachw ruft sich selbst mit geaend. Param. auf. Posit. auf Marke #gb
+				// Umschalter: FS-Nachweis ruft sich selbst mit geaendertem Parameter auf. Positionierung auf Marke "#gb"
 				if ($eig=="j") {
 					echo "&amp;eig=n#gb' title='Flurst&uuml;cksnachweis'>ohne Eigent&uuml;mer</a>";
-				} else { // ++ kÃ¶nnte man sich sparen, wenn unten nur ein "fiktives Blatt" kommt
+				} else {
 					echo "&amp;eig=j#gb' title='Flurst&uuml;cks- und Eigent&uuml;mernachweis'>mit Eigent&uuml;mer "
 					."<img src='ico/EigentuemerGBzeile.png' width='16' height='16' alt=''></a>";
@@ -687,5 +709,5 @@
 		."\n\t</td>"
 	."\n</tr>"
-."\n</table>\n";
+."\n</table>";
 
 // B U C H U N G S S T E L L E N  zum FS (istGebucht)
@@ -699,12 +721,12 @@
 $ress = pg_execute("", $v);
 if (!$ress) {
-	echo "\n<p class='err'>Keine Buchungsstelle.</p>\n";
+	echo "\n<p class='err'>Keine Buchungsstelle.</p>";
 	if ($debug > 1) {
 		echo "<p class='dbg'>Fehler:".pg_result_error($ress)."</p>";
-		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+		if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
 	}
 }
 $bs=0; // Z.BuchungsStelle
-while($rows = pg_fetch_array($ress)) {
+while($rows = pg_fetch_array($ress)) {  // Schleife Buchungs-Stelle
 	$gmls=$rows["gml_id"]; // gml b-Stelle
 	$lfd=$rows["lfd"]; // BVNR
@@ -723,6 +745,6 @@
 	$resg=pg_execute("", $v);
 	if (!$resg) {
-		echo "\n<p class='err'>Kein Buchungsblatt.</p>\n";
-		if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmls."'</p>";}
+		echo "\n<p class='err'>Kein Buchungsblatt.</p>";
+		if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmls."'</p>";}
 	}
 	$bl=0; // Z.Blatt
@@ -732,4 +754,5 @@
 		$blattkeyg=$rowg["blattart"]; // Key
 		$blattartg=$rowg["blattartv"]; // Value
+		$blatt=$rowg["blatt"];
 		echo "\n<hr>"
 		."\n<table class='outer'>"
@@ -739,26 +762,26 @@
 				// Rahmen mit GB-Kennz
 				if ($blattkeyg == 1000) {
-					echo "\n\t<table class='kennzgb' title='Bestandskennzeichen'>";
+					echo "\n\t\t<table class='kennzgb' title='Bestandskennzeichen'>";
 				}else {
-					echo "\n\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // dotted
+					echo "\n\t\t<table class='kennzgbf' title='Bestandskennzeichen'>"; // GB fiktiv = Rahmen dotted
 				}
-					echo "\n\t<tr>\n\t\t<td class='head'>Bezirk</td>"
-						."\n\t\t<td class='head' title='".$rowg["blattartd"]."'>";
+					echo "\n\t\t<tr>\n\t\t\t<td class='head'>Bezirk</td>"
+						."\n\t\t\t<td class='head' title='".$rowg["blattartd"]."'>";
 						if ($showkey) {echo "<span class='key'>".$blattkeyg."</span>&nbsp;";}
 						echo $blattartg."</td>"
-						."\n\t\t<td class='head'>Lfd-Nr.</td>"
-						."\n\t\t<td class='head'>Buchungsart</td>"
-					."\n\t</tr>"
-					."\n\t<tr>"
-						."\n\t\t<td title='Grundbuchbezirk'>";
-							if ($showkey) {echo "<span class='key'>".$rowg["bezirk"]."</span><br>";}
+						."\n\t\t\t<td class='head'>Lfd-Nr.</td>"
+						."\n\t\t\t<td class='head'>Buchungsart</td>"
+					."\n\t\t</tr>"
+					."\n\t\t<tr>"
+						."\n\t\t\t<td title='Grundbuchbezirk'>";
+						if ($showkey) {echo "<span class='key'>".$rowg["bezirk"]."</span><br>";}
 						echo $beznam."&nbsp;</td>"
-						."\n\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$rowg["blatt"]."</span></td>"
-						."\n\t\t<td title='Bestandsverzeichnis-Nummer (BVNR, Grundst&uuml;ck)'>".$rows["lfd"]."</td>"
-						."\n\t\t<td title='".$barttitle."'>";
+						."\n\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$blatt."</span></td>"
+						."\n\t\t\t<td title='Bestandsverzeichnis-Nummer (BVNR, Grundst&uuml;ck)'>".$lfd."</td>"
+						."\n\t\t\t<td title='".$barttitle."'>";
 						if ($showkey) {echo "<span class='key'>".$rows["buchungsart"]."</span><br>";}
 						echo $rows["bart"]."</td>"
-					."\n\t</tr>"
-				."\n\t</table>";
+					."\n\t\t</tr>"
+				."\n\t\t</table>";
 
 				// Miteigentumsanteil
@@ -766,8 +789,11 @@
 					echo "\n<p class='ant'>".$rows["zaehler"]."/".$rows["nenner"]."&nbsp;Anteil am Flurst&uuml;ck</p>";
 				}
-			echo "\n</td>\n<td>"; // Outer rechte Spalte: NW-Links
-				echo "\n\t<p class='nwlink noprint'>weitere Auskunft:<br>"
-					."\n\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gmlg."#bvnr".$lfd;
-						if ($showkey)   {echo "&amp;showkey=j";}
+			echo "\n\t</td>\n\t<td>"; // Outer rechte Spalte: NW-Links
+
+				echo "\n\t\t<p class='nwlink noprint'>weitere Auskunft:<br>";
+					if ($showkey) {echo "<span class='key'>".$blattkeyg."</span> ";}
+					echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gmlg;
+						if ($showkey) {echo "&amp;showkey=j";}
+						echo "#bvnr".$lfd; // Die # hinter die &-Paramter
 						if ($blattkeyg == 1000) {
 							echo "' title='Grundbuchnachweis mit kompletter Eigent&uuml;merangabe'>";
@@ -777,9 +803,10 @@
 						echo $blattartg." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''>"
 					."</a>"
-				."\n\t</p>";
-
-				ber_bs_hinw($gmls); // berechtigte Buchungstellen Hinweis
-
-			echo "\n</td>"
+				."\n\t\t</p>";
+
+				// berechtigte Buchungstellen (im rechten Teil der Ã€uÃeren Tab.
+				$cnt_ber = ber_bs_hinw($gmls, $gmlid); // Hinweis ausgeben, zÃ€hlen
+
+			echo "\n\t</td>" // ende aussen rechts
 		."\n</tr>"
 		."\n</table>";
@@ -787,8 +814,8 @@
 		// +++ Weitere Felder ausgeben? BeschreibungDesUmfangsDerBuchung
 		if ($rows["sond"] != "") {
-			echo "<p class='sond' title='Sondereigentum'>Verbunden mit dem Sondereigentum<br>".$rows["sond"]."</p>";
+			echo "\n<p class='sond' title='Sondereigentum'>Verbunden mit dem Sondereigentum<br>".$rows["sond"]."</p>";
 		}
 		if ($rows["nrpl"] != "") {
-			echo "<p class='nrap' title='Nummer im Aufteilungsplan'>Nummer <span class='wichtig'>".$rows["nrpl"]."</span> im Aufteilungsplan.</p>";
+			echo "\n<p class='nrap' title='Nummer im Aufteilungsplan'>Nummer <span class='wichtig'>".$rows["nrpl"]."</span> im Aufteilungsplan.</p>";
 		}
 
@@ -796,6 +823,5 @@
 		// Person <-benennt< AX_Namensnummer  >istBestandteilVon-> AX_Buchungsblatt
 		if ($eig=="j") { // Wahlweise mit/ohne EigentÃŒmer
-			echo "\n\n<h3><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Angaben zum Eigentum</h3>\n";
-			$n = eigentuemer($con, $gmlg, false, ""); // ohne Adresse
+			$n = eigentuemer($gmlg, false, ""); // ohne Adresse
  			if ($n == 0) {
 				if ($blattkeyg == 1000) {
@@ -806,11 +832,19 @@
 			}
 		}
-		$bl++;
-	}
-	if ($bl == 0) {echo "\n<p class='err'>Kein Buchungsblatt gefunden.</p>";}
-	$bs++;
-}
+
+		// B e r e c h t i g t e   B u c h u n g e n  ... zu dieser Buchungs-Stelle. Optional.
+		if ($berbu=="j") { // Wahlweise anzeigen
+			echo "\n<hr>\n<h3 id='berbu'><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Berechtigte Buchungen</h3>"
+			."\n<p>".$cnt_ber." Buchungen mit Rechten an der Buchung ".$lfd." auf ".$blattartg." ".$blatt." von ".$beznam.":</p>";
+			ber_bs_anz($gmls, $eig); // berechtigte Buchungstellen und GB-BlÃ€tter Anzeigen, und ggf. auch mit EigentÃŒmer
+		}
+		$bl++; // ZÃ€hl Blatt
+	}
+	if ($bl == 0) {echo "\n<p class='err'>Kein Buchungsblatt zur Buchungstelle gefunden.</p>";}
+	$bs++; // ZÃ€hl Buchungs-Stelle
+}
+
 pg_free_result($resg);
-if ($bs == 0) {echo "\n<p class='err'>Keine Buchungstelle gefunden.</p>";}
+if ($bs == 0) {echo "\n<p class='err'>Keine Buchungstelle zum Flurst&uuml;ck gefunden.</p>";}
 pg_close($con);
 echo <<<END
@@ -823,5 +857,5 @@
 </div>
 END;
-footer($gmlid, $_SERVER['PHP_SELF']."?", "&amp;eig=".$eig);
+footer($gmlid, $_SERVER['PHP_SELF']."?", "&amp;eig=".$eig."&amp;berbu=".$berbu);
 ?>
 </body>
