Index: trunk/mapbender/http/nav/alkisnav_fls.php
===================================================================
--- trunk/mapbender/http/nav/alkisnav_fls.php	(revision 334)
+++ trunk/mapbender/http/nav/alkisnav_fls.php	(revision 348)
@@ -11,4 +11,5 @@
 	2014-09-03  PostNAS 0.8: ohne Tab. "alkis_beziehungen", mehr "endet IS NULL", Spalten varchar statt integer
 	2014-09-15  Bei Relationen den Timestamp abschneiden, mehr "endet IS NULL"
+	2014-12-11  Fehlerbehandlung bei Eingabe ungÃŒltiger Gemarkungsnummer. Tabellen pp_gemarkung und pp_flur verwenden.
 */
 $cntget = extract($_GET);
@@ -68,5 +69,5 @@
 	// Teile der Zerlegung in global-Vars "$z..."
 	global $debug, $zgemkg, $zflur, $zzaehler, $znenner;	
-	$arr = explode("-", $fskennz, 4);
+	$arr = explode("-", $fskennz, 4); // an den Trenn-Strichen aufteilen
 	$zgemkg=trim($arr[0]);
 	$zflur=h_hinten($arr[1]);
@@ -129,6 +130,7 @@
 // Eine Zeile zu Gemarkung ausgeben
 	global $con, $gkz, $gemeinde, $epsg, $gfilter;
+
 	if ($gkgname == "") { // Falls Gem.-Name fehlt, in DB nachschlagen
-		$sql ="SELECT g.gemarkungsname FROM pp_gemarkung g WHERE g.gemarkung = $1 AND endet IS NULL LIMIT 1;";
+		$sql ="SELECT g.gemarkungsname FROM pp_gemarkung g WHERE g.gemarkung = $1 LIMIT 1;";
 		$v=array($gnr);
 		$res=pg_prepare("", $sql);
@@ -138,7 +140,9 @@
 		$gkgname=$row["gemarkungsname"];
 	}
+
 	if ($gkgname == "") {$gkgname = "(unbekannt)";}
 	$gnam=htmlentities($gkgname, ENT_QUOTES, "UTF-8");
 	if ($aktuell) {$cls=" aktuell";}
+
 	echo "\n<div class='gk".$cls."' title='Gemarkung'>";
 	echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='GKG' title='Gemarkung'>";
@@ -353,35 +357,52 @@
 
 function gg_head($gkgnr, $gkgaktuell) {
-	// Ãbergeordnete Zeilen (Head) fÃŒr Gemeinde und Gemarkung ausgeben
-	// Parameter = Gemarkungsnummer
+	// Kopf-Zeilen Gemeinde und Gemarkung ausgeben
+	// Parameter: Gemarkungsnummer, aktuell hervorzuhebende Zeile
+	// Return: true/false ob gefunden 
+
 	$sqlh ="SELECT g.gemarkungsname, s.gemeinde, s.gemeindename FROM pp_gemarkung g 
 	JOIN pp_gemeinde s ON g.gemeinde=s.gemeinde AND g.land=s.land WHERE g.gemarkung = $1 ;";
+
 	$v=array($gkgnr);
 	$resh=pg_prepare("", $sqlh);
 	$resh=pg_execute("", $v);
+
 	if (!$resh) {echo "\n<p class='err'>Fehler bei Gemeinde und Gemarkung.</p>";}
-	$rowh = pg_fetch_array($resh);
-	$gmkg=$rowh["gemarkungsname"];
-	$skey=$rowh["gemeinde"];
-	$snam=$rowh["gemeindename"];
-	zeile_gemeinde($skey, $snam, false);
-	zeile_gemarkung($gkgnr, $gmkg, $gkgaktuell);
-	return;
+
+	if ($rowh = pg_fetch_array($resh)) {
+		$gmkg=$rowh["gemarkungsname"];
+		$skey=$rowh["gemeinde"];
+		$snam=$rowh["gemeindename"];
+		zeile_gemeinde($skey, $snam, false);
+		zeile_gemarkung($gkgnr, $gmkg, $gkgaktuell);
+		return true;
+    } else {
+		echo "\n<div class='gk' title='Gemarkung'>";
+		echo "\n\t\t<img class='nwlink' src='ico/Gemarkung.ico' width='16' height='16' alt='GKG' title='Gemarkung'>";
+		echo " Gemarkung ".$gkgnr." nicht gefunden!\n</div>";
+		return false;
+	}
 }
 
 function EineGemarkung($AuchGemkZeile) {
 	// Kennzeichen bestehend nur aus Gemarkung-SchlÃŒssel wurde eingegeben
-	// Parameter = $zgemkg
 	global $con, $gkz, $gemeinde, $epsg, $debug, $zgemkg;
 	$linelimit=120; // max.Fluren/Gemkg
 
 	// Head
-	if ($AuchGemkZeile) {gg_head($zgemkg, true);}
+	if ($AuchGemkZeile) { // Kopf davor ausgeben
+		if (! gg_head($zgemkg, true)) {
+			if ($debug >= 1) {echo "\n<p class='dbg'>Gem.-Gemkg.-Kopf abgebrochen</p>";}	
+			return false;
+		} 
+	}
+
 	// Body
-	$sql ="SELECT gemarkungsteilflur AS flur FROM ax_gemarkungsteilflur f 
-	WHERE gemarkung= $1 AND endet IS NULL ORDER BY gemarkungsteilflur LIMIT $2 ;";
+	// Tabelle pp_flur verwenden um nur Fluren aufzulisten, die tatsÃ€chlich FlurstÃŒcke enthalten
+	$sql ="SELECT flurnummer AS flur FROM pp_flur f WHERE gemarkung= $1 ORDER BY flurnummer LIMIT $2 ;";
 	$v=array($zgemkg, $linelimit);
 	$res=pg_prepare("", $sql);
 	$res=pg_execute("", $v);
+
 	if (!$res) {echo "\n<p class='err'>Fehler bei Flur.</p>";}
 	$zfl=0;
@@ -391,4 +412,5 @@
 		$zfl++;
 	}
+
 	// Foot
 	if($zfl == 0) { 
@@ -399,5 +421,5 @@
 		echo "\n<p class='anz'>".$zfl." Fluren</p>";
 	}
-	return;
+	return true;
 }
 
@@ -408,6 +430,9 @@
 
 	// Head
-	gg_head($zgemkg, false);
-	zeile_flur($zgemkg, $zflur, true, true);
+	if (gg_head($zgemkg, false)) {
+		zeile_flur($zgemkg, $zflur, true, true);
+	} else {
+		return false;
+	}
 
 	// Body
@@ -444,5 +469,5 @@
 		echo "\n<p class='anz'>".$zfs." Flurst&uuml;cke</p>";
 	}
-	return;
+	return true;
 }
 
@@ -454,6 +479,9 @@
 
 	// Head	
-	gg_head($zgemkg, false);
-	zeile_flur($zgemkg, $zflur, true, true);
+	if (gg_head($zgemkg, false)) {
+		zeile_flur($zgemkg, $zflur, true, true);
+	} else {
+		return false;
+	}
 
 	// Body
@@ -486,5 +514,5 @@
 		echo "\n<p class='anz'>".$zfs." historische Flurst&uuml;cke</p>";
 	}
-	return;
+	return true;
 }
 
@@ -495,6 +523,9 @@
 
 	// Head
-	gg_head($zgemkg, false);
-	zeile_flur($zgemkg, $zflur, true, false);
+	if (gg_head($zgemkg, false)) {
+		zeile_flur($zgemkg, $zflur, true, false);
+	} else {
+		return false;
+	}
 
 	// Body
@@ -507,6 +538,5 @@
 		$sql.="y(st_transform(st_Centroid(f.wkb_geometry), ".$epsg.")) AS y ";			
 	}
-	$sql.="FROM ax_flurstueck f ";
-	$sql.="WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND f.zaehler= $3 ";
+	$sql.="FROM ax_flurstueck f WHERE f.gemarkungsnummer= $1 AND f.flurnummer= $2 AND f.zaehler= $3 ";
 	If ($znenner != "") {$sql.="AND f.nenner=".$znenner." ";} // wie prepared?
 	$sql.="AND endet IS NULL ORDER BY f.zaehler, f.nenner;";
@@ -535,5 +565,5 @@
 		echo "\n</div>";		
 	}
-	return;
+	return true;
 }
 
@@ -543,6 +573,9 @@
 
 	// Head
-	gg_head($zgemkg, false);
-	zeile_flur($zgemkg, $zflur, true, false);
+	if (gg_head($zgemkg, false)) {
+		zeile_flur($zgemkg, $zflur, true, false);
+	} else {
+		return false;
+	}
 	echo "\n<hr>";
 
@@ -577,5 +610,5 @@
 		echo "\n<p class='err'>Fehler bei historischem Flurst&uuml;ck.</p>";
 		if ($debug > 2) {echo "<p class='dbg'>SQL = '".$sql."'<br>Parameter: ".$fskzwhere."<p>";}
-		return;
+		return true;
 	}
 
@@ -675,5 +708,6 @@
 } else { // Die Formular-Eingabe interpretieren (kann auch ein Link sein)
 	$retzer=ZerlegungFsKennz($fskennz);
-	switch ($retzer) {
+	if ($debug >= 1) {echo "\n<p class='dbg'>Return Zerlegung: ".$retzer."</p>";}	
+	switch ($retzer) { // Return der Zerlegung
 	case 0: // leere Eingabe
 		if ($gfilter == 1) { // Die GUI ist bereits auf EINE Gemeinde gefiltert
