Index: trunk/info/info/alkisn/alkisbestnw.php
===================================================================
--- trunk/info/info/alkisn/alkisbestnw.php	(revision 377)
+++ trunk/info/info/alkisn/alkisbestnw.php	(revision 387)
@@ -8,13 +8,21 @@
 	2016-02-24 Version fuer norGIS-ALKIS-Import
 	2016-11-29 HTML5, Gemeinsam genutzte Datenbanken ermÃ¶glichen, Markierung der Sortierung
+	2017-06-01 Function "eigentuemer" ohne Parameter $con
+	2017-06-08 Validierung Eingabeparameter, Farbwechsel der Tabelle je GrundstÃŒck, Feinschliff und HTML-Profilierung
 */
 session_start();
-$id="n";
-$cntget = extract($_GET);
+
+$showkey="n"; // Var. initalisieren
+$cntget = extract($_GET); // Parameter in Variable umwandeln
+
+// strikte Validierung aller Parameter
+if (!isset($gmlid) or !preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
+if (!isset($gkz) or !preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
+if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
+if ($showkey == "j") {$showkey=true;} else {$showkey=false;}
+
 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>
@@ -22,4 +30,5 @@
 <head>
 	<meta charset="utf-8">
+	<meta name="viewport" content="width=device-width, initial-scale=1.0">
 	<title>ALKIS Bestandsnachweis</title>
 	<link rel="stylesheet" type="text/css" href="alkisauszug.css">
@@ -30,12 +39,9 @@
 		}
 	</script>
-	<style type='text/css' media='print'>
-		.noprint {visibility: hidden;}
-	</style>
 </head>
 <body>
 <?php
 $con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisbestnw.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>";
 
 // G R U N D B U C H
@@ -54,6 +60,6 @@
 $res = pg_execute("", $v);
 if (!$res) {
-	echo "<p class='err'>Fehler bei Grundbuchdaten.</p>";
-	if ($debug > 2) {echo "<p class='dbg'>SQL=<br>".$sql."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	echo "\n<p class='err'>Fehler bei Grundbuchdaten.</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)) {
@@ -61,40 +67,39 @@
 	$blattart=$row["blattartv"];
 
-	echo "<p class='gbkennz'>ALKIS Bestand ".$row["bezirk"]." - ".$row["nr"]."&nbsp;</p>\n"; // Balken
+	echo "<p class='gbkennz'>ALKIS Bestand ".$row["bezirk"]." - ".$row["nr"]."&nbsp;</p>"; // Balken
 	echo "\n<h2><img src='ico/Grundbuch.png' width='16' height='16' alt=''> Grundbuch</h2>"
 	."\n<table class='outer'>\n<tr>\n\t<td>"; // Kennz. im Rahmen
 		if ($blattkey == 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'>"; // dotted
 		}
-			echo "\n\t<tr>"
-				."\n\t\t<td class='head'>"; // .d nicht gefÃŒllt
+			echo "\n\t\t<tr>"
+				."\n\t\t\t<td class='head'>"; // .d nicht gefÃŒllt
 				if ($showkey) {echo "<span class='key'>".$row["stellenart"]."&nbsp;</span>";}
 				echo $row["stellev"]."</td>";
-				echo "\n\t\t<td class='head'>Bezirk</td>"
-				."\n\t\t<td class='head' title='".htmlentities($row["blattartd"], ENT_QUOTES, "UTF-8")."'>";
+				echo "\n\t\t\t<td class='head'>Bezirk</td>"
+				."\n\t\t\t<td class='head' title='".htmlentities($row["blattartd"], ENT_QUOTES, "UTF-8")."'>";
 				if ($showkey) {echo "<span class='key'>".$blattkey."&nbsp;</span>";}
 				echo $blattart."</td>"
-			."\n\t</tr>\n\t<tr>"
-				."\n\t\t<td title='Amtsgerichtsbezirk'>";
+			."\n\t\t</tr>\n\t\t<tr>"
+				."\n\t\t\t<td title='Amtsgerichtsbezirk'>";
 				if ($showkey) {echo "<span class='key'>".$row["stelle"]."</span><br>";}
 				echo htmlentities($row["bezeichnung"], ENT_QUOTES, "UTF-8")."</td>"
-				."\n\t\t<td title='Grundbuchbezirk'>";
+				."\n\t\t\t<td title='Grundbuchbezirk'>";
 				if ($showkey) {echo "<span class='key'>".$row["bezirk"]."</span><br>";}
 				echo htmlentities($row["beznam"], ENT_QUOTES, "UTF-8")."</td>"
-				."\n\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$row["nr"]."</span></td>"
-			."\n\t</tr>"
-		."\n\t</table>"
-		."\n\n\t</td>\n\t<td>"
+				."\n\t\t\t<td title='Grundbuch-Blatt'><span class='wichtig'>".$row["nr"]."</span></td>"
+			."\n\t\t</tr>"
+		."\n\t\t</table>"
+		."\n\t</td>\n\t<td>&nbsp;"
 	."\n\t</td>\n</tr>\n</table>";
 }
 
 if ($blattkey == 5000) { // fikt. Blatt
-	echo "\n<p>Keine Angaben zum Eigentum bei fiktivem Blatt.</p>\n";
+	echo "\n<p>Keine Angaben zum Eigentum bei fiktivem Blatt.</p>";
 } else {
 	// E I G E N T U E M E R
-	echo "\n\n<h3><img src='ico/Eigentuemer_2.png' width='16' height='16' alt=''> Angaben zum Eigentum</h3>";
-	$n = eigentuemer($con, $gmlid, true, ""); // MIT Adressen.
+	$n = eigentuemer($gmlid, true, ""); // MIT Adressen.
 	if ($n == 0) { // keine NamensNr, kein Eigentuemer
 		echo "\n<p class='err'>Keine Namensnummer gefunden.</p>"
@@ -104,20 +109,19 @@
 
 // Vorab pruefen, ob der Fall "Rechte an .." vorliegt.
-if ($blattkey == 1000) { // GB-Blatt  <istBestandteilVon<  sh=herrschend  >an>  sd=dienend
-	$sql="SELECT count(sd.laufendenummer) AS anzahl
-	FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON (sd.gml_id=ANY(sh.an) OR sd.gml_id=ANY(sh.zu)) 
-	WHERE sh.istbestandteilvon= $1 AND sd.endet IS NULL AND sh.endet IS NULL;";
+if ($blattkey == 1000) { // GB-Blatt  <istBestandteilVon<  sh=herrschend  >an/zu>  sd=dienend
+	$sql="SELECT count(sd.laufendenummer) AS anzahl "
+	."FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON (sd.gml_id=ANY(sh.an) OR sd.gml_id=ANY(sh.zu)) "
+	."WHERE sh.istbestandteilvon= $1 AND sd.endet IS NULL AND sh.endet IS NULL;";
 
 	$v=array($gmlid); // GB-Blatt
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
-	if (!$res) echo "<p class='err'>Fehler bei Suche nach Buchungen.</p>\n";
+	if (!$res) echo "\n<p class='err'>Fehler bei Suche nach Buchungen.</p>";
 	$row=pg_fetch_array($res);
 	$anz=$row["anzahl"];
-	//echo "<p>Zeilen : ".$anz." zu Blattart ".$blattkey."</p>";
 } else { // 2000: Katasterblatt, 3000: Pseudoblatt, 5000: Fiktives Blatt
 	$anz=0;
 }
-if ($anz > 0) {
+if ($anz > 0) { // auch Rechte: dann erweiterter Tabellen-Kopf
 	echo "\n<hr>\n\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Rechte und Flurst&uuml;cke</h3>"
 	."\n<table class='fs'>"
@@ -125,5 +129,5 @@
 		."\n\t<td>&nbsp;</td>"
 		."\n\t<td class='dien' title='herrschendes Grundst&uuml;ck'>herrschende Buchungsart</td>"
-		."\n\t<td>&nbsp;</td>"
+		."\n\t<td class='dien'>Anteil</td>"
 		."\n\t<td class='dien'>Bezirk</td>"
 		."\n\t<td class='dien'>Blatt</td>"
@@ -132,5 +136,5 @@
 		."\n\t<td>&nbsp;</td>"
 	."\n</tr>";
-} else {
+} else { // nur FlurstÃŒcke, keine Rechte an/zu anderen Buchungen
 	echo "\n<hr>\n\n<h3><img src='ico/Flurstueck.png' width='16' height='16' alt=''> Flurst&uuml;cke</h3>"
 	."\n<table class='fs'>";
@@ -139,10 +143,10 @@
 	."\n\t<td class='heads' title='laufende Nummer Bestandsverzeichnis (BVNR) = Grundst&uuml;ck'><span class='wichtig'>BVNR</span><img src='ico/sort.png' width='10' height='10' alt='' title='prim&auml;re Sortierung'></td>"
 	."\n\t<td class='head'>Buchungsart</td>"
-	."\n\t<td class='head'>Anteil</td>"
+	."\n\t<td class='head'>&nbsp;</td>"
 	."\n\t<td class='heads'>Gemarkung</td>"
 	."\n\t<td class='heads'>Flur</td>"
 	."\n\t<td class='heads fsnr' title='Flurst&uuml;cksnummer (Z&auml;hler / Nenner)'><span class='wichtig'>Flurst.</span></td>"
-	."\n\t<td class='head fla'>Fl&auml;che</td>"
-	."\n\t<td class='head nwlink noprint' title='Link: weitere Auskunft'>weit. Auskunft</td>"
+	."\n\t<td class='head flag'>Fl&auml;che</td>"
+	."\n\t<td class='head nwlink noprint' title='Verlinkung zu anderen Nachweis-Arten und verbundenen Objekten'>weitere Auskunft</td>"
 ."\n</tr>";
 
@@ -158,13 +162,14 @@
 
 if (!$res) {
-	echo "<p class='err'>Fehler bei Buchung.</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 Buchung.</p>";
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '". $gmlid."'</p>";}
 }
 $i=0;
 $fscnt=0;
+$zpaar=false;
 while($row = pg_fetch_array($res)) { // Loop Buchungsstelle (GrundstÃŒck)
 	$lfdnr=$row["lfd"];
 	$bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
-	$gml_bs= $row["gml_id"]; // id der buchungsstelle
+	$gml_bs=$row["gml_id"]; // id der buchungsstelle
 	$bartkey=$row["buchungsart"]; // SchlÃŒsselwert
 	$bart=$row["bart"]; // BuchungsART Text dazu
@@ -176,4 +181,8 @@
 		$anteil = $row["zaehler"]."/".$row["nenner"];
 	}
+
+	if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel je GrundstÃŒck
+	$zpaar=!$zpaar;
+
 	// F l u r s t u e c k s d a t e n  zur direkten Buchungsstelle
 	$j = bnw_fsdaten($con, $lfdnr, $gml_bs, $bart, $anteil, true, $bartkey, $bartstory); // return=Anzahl der FS
@@ -184,26 +193,43 @@
 		//  Buchungsstelle >an/zu> (andere)Buchungsstelle >istBestandTeilVon> "FiktivesBlatt (ohne) Eigentuemer"
 
-		// andere Buchungsstellen
+		// dann andere "dienende" Buchungsstellen
+		//  sh=herrschend          sd=dienend
 		//  ax_buchungsstelle >zu> ax_buchungsstelle (des gleichen Blattes)
 		//  ax_buchungsstelle >an> ax_buchungsstelle (anderes Blatt, z.B Erbbaurecht an)
-		//  sh=herrschend          sd=dienend
-		$sql ="SELECT sd.gml_id, sd.buchungsart, sd.laufendenummer AS lfd, sd.beschreibungdesumfangsderbuchung AS udb, sd.nummerimaufteilungsplan AS nrap, sd.beschreibungdessondereigentums AS sond, wb.v AS bart "
+
+/* alte Version	
+		$sql="SELECT sd.gml_id, sd.buchungsart, sd.laufendenummer AS lfd, sd.beschreibungdesumfangsderbuchung AS udb, sd.nummerimaufteilungsplan AS nrap, sd.beschreibungdessondereigentums AS sond, wb.v AS bart "
 		."FROM ax_buchungsstelle sh JOIN ax_buchungsstelle sd ON (sd.gml_id=ANY(sh.an) OR sd.gml_id=ANY(sh.zu)) "
 		."LEFT JOIN alkis_wertearten wb ON cast(sd.buchungsart AS character varying)=wb.k AND wb.element='ax_buchungsstelle' AND wb.bezeichnung='buchungsart' "
-		."WHERE sh.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL ORDER BY sd.laufendenummer;";
-
-		$v=array($gml_bs);
-		$resan=pg_prepare("", $sql);
+		."WHERE sh.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL ORDER BY sd.laufendenummer;"; */
+
+		// Mit "UNION" um die FÃ€lle mit JOIN ÃŒber die Arrays "an" und "zu" unterscheiden zu kÃ¶nnen
+		$sql="SELECT uni.*, wb.v AS bart FROM "
+		."(SELECT sda.gml_id, sda.buchungsart, sda.laufendenummer AS lfd, sda.beschreibungdesumfangsderbuchung AS udb, sda.nummerimaufteilungsplan AS nrap, sda.beschreibungdessondereigentums AS sond, 'an' as anzu "
+		."FROM ax_buchungsstelle sha JOIN ax_buchungsstelle sda ON sda.gml_id=ANY(sha.an) "
+		."WHERE sha.gml_id= $1 AND sha.endet IS NULL AND sda.endet IS NULL "
+		."UNION SELECT sdz.gml_id, sdz.buchungsart, sdz.laufendenummer AS lfd, sdz.beschreibungdesumfangsderbuchung AS udb, sdz.nummerimaufteilungsplan AS nrap, sdz.beschreibungdessondereigentums AS sond, 'zu' as anzu "
+		."FROM ax_buchungsstelle shz JOIN ax_buchungsstelle sdz ON sdz.gml_id=ANY(shz.zu) "
+		."WHERE shz.gml_id= $1 AND shz.endet IS NULL AND sdz.endet IS NULL "
+		.") AS uni LEFT JOIN alkis_wertearten wb ON cast(uni.buchungsart AS character varying)=wb.k AND wb.element='ax_buchungsstelle' AND wb.bezeichnung='buchungsart' "
+		."ORDER BY uni.lfd;";
+	//	Testfall suchen: SELECT gml_id, zu, durch FROM ax_buchungsstelle WHERE NOT zu IS NULL OR NOT durch IS NULL;
+	//	Die Relationen "an" und "durch" kommen in der Praxis nicht vor.
+
+		$v=array($gml_bs); // gml_id der "herrschenden" Buchungs-Stelle
+		$resan=pg_prepare("", $sql); // Suche nach "dienender" Buchungsstelle
 		$resan=pg_execute("", $v);
 		if (!$resan) {
-			echo "<p class='err'>Fehler bei 'andere Buchungsstelle'.</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 'andere Buchungsstelle'.</p>";
+			if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = '".$gml_bs."'</p>";}
 		}
+
 		$a=0; // count
 		$altbvnr=""; // Gruppenwechsel
 		while($rowan= pg_fetch_array($resan)) {
-			$lfdnran=$rowan["lfd"];		// BVNR an
+			$lfdnran=$rowan["lfd"];	// BVNR an
 			$gml_bsan=$rowan["gml_id"];	// id der buchungsstelle an
-			$baan=$rowan["bart"];  		// Buchungsart an, entschluesselt
+			$baan=$rowan["bart"];  	// Buchungsart an, entschluesselt
+			$anzu=$rowan["anzu"];	// Welche Relation? Recht an oder Recht zu ?
 
 			// a n d e r e s   B l a t t  (an dem das aktuelle Blatt Rechte hat)
@@ -218,6 +244,6 @@
 			$fbres=pg_execute("", $v);
 			if (!$fbres) {
-				echo "<p class='err'>Fehler bei fiktivem Blatt.</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 fiktivem Blatt.</p>";
+				if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}			
 			}
 			$b=0;
@@ -227,20 +253,21 @@
 				$fbbez=$fbrow["bezirk"];
 				$beznam=$fbrow["beznam"];
-				$fbblatt=$fbrow["blatt"]; // Key
-				$fbbart=$fbrow["blattartv"]; // Value
+				$fbblatt=$fbrow["blatt"];
+				$fbbartkey=$fbrow["blattart"]; // Key
+				$fbbart=$fbrow["blattartv"];  // Value
 				$b++;
 			}
 			if ($b != 1) { // Ãberwachen: genau 1?
-				echo "<p class='err'>Anzahl fiktive Bl&auml;tter zu anderer Buchungstelle = ".$b."</p>";
+				echo "\n<p class='err'>Anzahl fiktive Bl&auml;tter zu anderer Buchungstelle = ".$b."</p>";
 			}
 
 			// G r u n d b u c h d a t e n  zur  a n d e r e n  Buchungsstelle
-			echo "\n<tr>"
-				."\n\t<td>"; // Sp.1 Erbbau BVNR
+			echo "\n<tr class='".$trclass."'>"
+				."\n\t<td id='bvnr".$lfdnr."'>"; // Sp.1 Erbbau BVNR, Sprungmarke
 					if($bvnr == $altbvnr) {	// gleiches Grundstueck
 						echo "&nbsp;"; // dann Anzeige unterdruecken
 					} else {
-						echo "<a id='bvnr".$lfdnr."'></a>" // Sprungmarke
-						."<span class='wichtig'>".$bvnr."</span>"; 
+					//	echo "<a id='bvnr".$lfdnr."'></a>" // Sprungmarke
+						echo "<span class='wichtig'>".$bvnr."</span>"; 
 						$altbvnr = $bvnr; // Gruppenwechsel merken
 					}
@@ -249,29 +276,30 @@
 					if ($showkey) {echo "<span class='key'>".$row["buchungsart"]."</span> ";}
 				echo $bart." an</td>"
-				."\n\t<td>".$anteil."</td>" // Sp.3 Anteil
-				."\n\t<td class='dien'>"; // Sp.4 Gemarkg., hier Bezirk
+				."\n\t<td class='dien'>".$anteil."</td>" // Sp.3 Anteil
+				."\n\t<td class='dien' title='Grundbuch-Bezirk'>"; // Sp.4 Gemarkg., hier Bezirk
 					if ($showkey) {echo "<span class='key'>".$fbbez."</span> ";}
-					echo $beznam
+					echo htmlentities($beznam, ENT_QUOTES, "UTF-8")
 				."</td>";
-				echo "\n\t<td class='dien'>".$fbblatt."</td>" // Sp. 5 Blatt
-					."\n\t<td class='dien'>".str_pad($lfdnran, 4, "0", STR_PAD_LEFT)."</td>" // Sp.6 BVNR
-					."\n\t<td class='dien'>"; // Sp.7 Buchungsart
+				echo "\n\t<td class='dien' title='".$fbbart."'>".$fbblatt."</td>" // Sp. 5 Blatt
+					."\n\t<td class='dien' title='Bestandsverzeichnis-Nummer'>".str_pad($lfdnran, 4, "0", STR_PAD_LEFT)."</td>" // Sp.6 BVNR
+					."\n\t<td class='dien' title='Buchungsart'>"; // Sp.7 Buchungsart
 					if ($showkey) {echo "<span class='key'>".$rowan["buchungsart"]."</span> ";}
 					echo $baan." "
 				."</td>"
 				."\n\t<td>" // Sp.8 Link ("an" oder "zu"?)
-					."<p class='nwlink noprint'>an/zu"
-					." <a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$fbgml;
+					."\n\t\t<p class='nwlink noprint'>".$anzu; // Recht "an" oder "zu"
+					if ($showkey) {echo " <span class='key'>".$fbbartkey."</span>";} // Blatt-Art SchlÃŒssel
+					echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$fbgml;
 						if ($showkey) {echo "&amp;showkey=j";}
 						echo "#bvnr".$lfdnran // Sprungmarke auf der Seite
 						."' title='Zum Grundbuchnachweis des dienenden Blattes'>";
-						if ($showkey) {echo "<span class='key'>".$rowan["blattart"]."</span> ";}
-						echo $fbbart
-					." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a></p>"
-				."</td>"
+						echo $fbbart // Blatt-Art entschlÃŒsselt
+					." <img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>\n\t\t</p>"
+				."\n\t</td>"
 			."\n</tr>"; 
 
 			// F l u r s t u e c k s d a t e n  zur  a n d e r e n  Buchungsstelle
 			// Buchungsart wird nur in erster Zeile ausgegeben, hier leer
+
 			$aj = bnw_fsdaten($con, $lfdnran, $gml_bsan, "", $anteil, false, "", ""); // return=Anz.FS
 			$fscnt=$fscnt + $aj;
@@ -284,5 +312,5 @@
 			if ($rowan["sond"] != "") {
 				echo "\n<tr>"
-					."\n\t<td class='sond' colspan=8>Verbunden mit dem Sondereigentum an: ".$rowan["sond"]."</td>"
+					."\n\t<td class='sond' colspan=8>Verbunden mit dem Sondereigentum an: ".htmlentities($rowan["sond"], ENT_QUOTES, "UTF-8")."</td>"
 				."\n</tr>";
 			}
@@ -290,9 +318,7 @@
 		}
 		if ($a == 0) {
-			echo "\n<tr>"
+			echo "\n<tr class='".$trclass."'>"
 				."\n\t<td><span class='wichtig'>".$bvnr."</span></td>"
-				."\n\t<td colspan=7>"
-					."<p class='warn'>Keine Flurst&uuml;cke zu Buchung ".$bvnr." im berechtigten Bereich.</p>"
-				."</td>"
+				."\n\t<td colspan=7><p class='warn'>Keine Flurst&uuml;cke zu Buchung ".$bvnr." im berechtigten Bereich.</p></td>"
 			."\n</tr>";
 		}
@@ -313,8 +339,8 @@
 
 if ($i == 0) {
-	echo "\n<p class='err'>Keine Buchung gefunden.</p>\n";
+	echo "\n<p class='err'>Keine Buchung gefunden.</p>";
 } else {
 	if ($i > 5 and $fscnt > 5) { // nur wenn nicht auf einen Blick zu erkennen
-		echo "\n<p class='cnt'>".$i." Buchungen mit ".$fscnt." Flurst&uuml;cken</p>\n";
+		echo "\n<p class='cnt'>".$i." Buchungen mit ".$fscnt." Flurst&uuml;cken</p>";
 	}
 }
@@ -341,15 +367,15 @@
 $resb = pg_execute("", $v);
 if (!$resb) {
-	echo "<p class='err'>Fehler bei 'Berechtigte Bl&auml;tter.</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 'Berechtigte Bl&auml;tter.</p>";
+	if ($debug > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities($sql, ENT_QUOTES, "UTF-8")."<br>$1 = gml_id = '".$gmlid."'</p>";}
 }
 $b=0; // count: Buchungen / BlÃ€tter
+$zpaar=false;
 while($rowb = pg_fetch_array($resb)) {
 	if ($b == 0) { // Ueberschrift und Tabelle nur ausgeben, wenn etwas gefunden wurde
-		echo "\n<h3><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Berechtigte Grundb&uuml;cher</h3>\n"
+		echo "\n\n<h3><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Berechtigte Grundb&uuml;cher</h3>"
 		."\n<table class='outer'>"
 		."\n<tr>"
 			."\n\t<td class='heads' title='lfd. Nr. auf diesem Blatt, wie im Teil Flurst&uuml;cke'><span class='wichtig'>an BVNR</span><img src='ico/sort.png' width='10' height='10' alt='' title='prim&auml;re Sortierung'></td>"
-		//	."\n\t<td class='heads'>Land</td>"
 			."\n\t<td class='head'>Dienststelle</td>"
 			."\n\t<td class='heads'>Bezirk</td>"
@@ -372,17 +398,17 @@
 	$bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT);
 
-	echo "\n<tr>"; // Der Teil "berechtigte GrundbÃŒcher" ist sortiert wie oberer Teil "FlurstÃŒcke"
-		echo "\n\t<td><span class='wichtig'>".$anlfdnr0."</span>";
-
-		echo "</td>"
-		//."\n\t<td>".$rowb["land"]."</td>"
+	if ($zpaar) {$trclass='paa';} else {$trclass='unp';} // Farbwechsel je Zeile = GrundstÃŒck
+	$zpaar=!$zpaar;
+
+	echo "\n<tr class='".$trclass."'>"; // Der Teil "berechtigte GrundbÃŒcher" ist sortiert wie oberer Teil "FlurstÃŒcke"
+		echo "\n\t<td><span class='wichtig'>".$anlfdnr0."</span></td>"
 		."\n\t<td>"; // Amtsgericht,Grundbuchamt
-			echo $rowb["stellev"]." ";
+			echo htmlentities($rowb["stellev"], ENT_QUOTES, "UTF-8")." ";
 			if ($showkey) {echo "<span class='key'>".$rowb["stelle"]."</span> ";}
-			echo $rowb["bezeichnung"]
+			echo htmlentities($rowb["bezeichnung"], ENT_QUOTES, "UTF-8")
 		."</td>"
 		."\n\t<td>";
 			if ($showkey) {echo "<span class='key'>".$rowb["bezirk"]."</span> ";}
-			echo $rowb["beznam"]
+			echo htmlentities($rowb["beznam"], ENT_QUOTES, "UTF-8")
 		."</td>"
 		."\n\t<td><span class='wichtig'>".$rowb["blatt"]."</span></td>"
@@ -393,8 +419,9 @@
 		."</td>"
 		."\n\t<td>"
-			."\n\t\t<p class='nwlink noprint'>"
-			."\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml_b."#bvnr".$lfdnr;
+			."\n\t\t<p class='nwlink noprint'>";
+// +++ SchlÃŒssel der Blatt-Art wenn showkey +++
+			echo "\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gml_b;
 				if ($showkey) {echo "&amp;showkey=j";}
-				echo "' title='Nachweis des berechtigten Blattes an ".$blattart."'>".$rowb["blattartv"]; // oder "zu" statt "an"
+				echo "#bvnr".$lfdnr."' title='Nachweis des berechtigten Blattes an einer Buchung auf ".$blattart."'>".$rowb["blattartv"]; // "an" ggf. durch "zu" ersetzen?
 				echo " \n\t\t\t<img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>"
 			."\n\t\t</p>"
@@ -405,10 +432,10 @@
 if ($b == 0) {
 	if ($blattkey > 2000 ) { // Warnung nicht bei Grundbuchblatt 1000 und Katasterblatt 2000
-		echo "<p class='err'>Keine berechtigten Bl&auml;tter zu ".$blattart." (".$blattkey.") gefunden.</p>";
+		echo "\n<p class='err'>Keine berechtigten Bl&auml;tter zu ".$blattart." (".$blattkey.") gefunden.</p>";
 	}
 } else {
 	echo "\n</table>";
 	if ($i > 1) {
-		echo "\n<p class='cnt'>Rechte anderer Buchungsstellen an ".$b." der ".$i." Buchungen</p>\n";
+		echo "\n<p class='cnt'>Rechte anderer Buchungsstellen an ".$b." der ".$i." Buchungen</p>";
 	}
 }
@@ -416,5 +443,5 @@
 
 <div class='buttonbereich noprint'>
-<hr>
+	<hr>
 	<a title="zur&uuml;ck" href='javascript:history.back()'><img src="ico/zurueck.png" width="16" height="16" alt="zur&uuml;ck"></a>&nbsp;
 	<a title="Drucken" href='javascript:window.print()'><img src="ico/print.png" width="16" height="16" alt="Drucken"></a>&nbsp;
