Index: trunk/info/info/alkisn/alkisbaurecht.php
===================================================================
--- trunk/info/info/alkisn/alkisbaurecht.php	(revision 429)
+++ trunk/info/info/alkisn/alkisbaurecht.php	(revision 430)
@@ -13,4 +13,5 @@
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che)
 	2022-01-13 Limit in Variable. Neue Functions LnkStf(), DsKy()
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 */
 ini_set("session.cookie_httponly", 1);
@@ -66,6 +67,6 @@
 
 $v = array($gmlid);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Baurecht.</p>";
@@ -149,6 +150,6 @@
 // Trotz Limit lange Antwortzeit, wegen OrderBy -> intersection
 
-$res=pg_prepare("", $sql);
-$res=pg_execute("", $v);
+$res=pg_prepare($con, "", $sql);
+$res=pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Keine Flurst&uuml;cke ermittelt.<br></p>";
Index: trunk/info/info/alkisn/alkisbauwerk.php
===================================================================
--- trunk/info/info/alkisn/alkisbauwerk.php	(revision 429)
+++ trunk/info/info/alkisn/alkisbauwerk.php	(revision 430)
@@ -27,4 +27,5 @@
 	2022-01-13 Neue Functions LnkStf(), DsKy()
 	2022-02-23 Neue Bauwerks-Typen 10-12
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 
 ToDo:
@@ -35,5 +36,5 @@
 // Ein Bauwerk (bw_) "gehÃ¶rt zu" (_gz_) (Relation) einem GebÃ€ude. Zu diesem GebÃ€ude die Lage-Zeilen als Tabellen ausgeben
 function bw_gz_lage($gmlgz) {
-	global $gkz, $dbg;
+	global $gkz, $dbg, $con;
 	// HAUPTgebÃ€ude  Geb >zeigtAuf> lage (mehrere)
 	$sqlgz ="SELECT 'm' AS ltyp, l.gml_id AS lgml, s.lage, s.bezeichnung, l.hausnummer, '' AS laufendenummer, p.bezeichnung as gemeinde "
@@ -51,6 +52,6 @@
 	$sqlgz.="ORDER BY bezeichnung, hausnummer, laufendenummer;";
 	$v = array($gmlgz);
-	$resgz = pg_prepare("", $sqlgz);
-	$resgz = pg_execute("", $v);
+	$resgz = pg_prepare($con, "", $sqlgz);
+	$resgz = pg_execute($con, "", $v);
 	if (!$resgz) {
 		echo "\n<p class='err'>Fehler bei Lage mit HsNr. zum Bauwerk</p>";
@@ -157,8 +158,10 @@
 	switch ($col) {
 		case 'hatdirektunten': // [] In welcher Tabelle kann man dies Objekt finden?
-			$olist='';
-			$arrhdu=explode(",", trim($inhalt, "{}"));
-			foreach($arrhdu AS $hdugml) {$olist.=$hdugml."<br>";}
-			tab_zeile('Hat direkt Unten', '', $olist, '', 'Verweis auf ein Objekt unter diesem Bauwerk, Typ unbekannt.');
+			if (isset($inhalt)) {
+				$olist='';
+				$arrhdu=explode(",", trim($inhalt, "{}"));
+				foreach($arrhdu AS $hdugml) {$olist.=$hdugml."<br>";}
+				tab_zeile('Hat direkt Unten', '', $olist, '', 'Verweis auf Objekte unter diesem Bauwerk, Typ unbekannt.');
+			}
 		break;
 
@@ -376,10 +379,49 @@
  	$sqlr="SELECT b12.hatdirektunten ".$FR.$WH;
 break;
-/*
+/*  +++ B A U S T E L L E +++
 case $btyp_bpkt: // 13 - Besonderer Bauwerkspunkt (ohne Geom.)
 	$FR=" FROM ax_besondererbauwerkspunkt b13 ";
 	$btyptitle="Besonderer Bauwerkspunkt";
 //  punktkennung, sonstigeeigenschaft, zustaendigestelle_land, zustaendigestelle_stelle
-break; */
+
+break;
+
+CREATE TABLE IF NOT EXISTS public.ax_besondererbauwerkspunkt
+(   ...
+	punktkennung character varying, -- immer gefÃŒllt, 
+	   z.B. '324825754002450'
+	         rrhhrrhhAnnnnnn	
+    sonstigeeigenschaft character varying[],
+    zustaendigestelle_land character varying,
+    zustaendigestelle_stelle character varying,
+
+
+SELECT b.gml_id, p.gml_id 
+FROM ax_besondererbauwerkspunkt b
+JOIN ax_punktortag p ON b.gml_id = any(p.istteilvon)
+LIMIT 100;
+
+Das ZUSO besteht aus einem 'PunktortAG' und/oder aus einem oder mehreren 'PunktortAU'.
+
+Der 'Besondere Bauwerkspunkt' und der ihm zugeordnete 'Punktort' mit der Attributart 'Liegenschaftskarte' und der Werteart TRUE erhÃ€lt 
+den Raumbezug durch einen Punkt der FlÃ€che oder der Linie, die zur Vermittlung des Raumbezuges des entsprechenden Bauwerks 
+oder der Einrichtung beitrÃ€gt.
+
+
+ 'PunktortAG' ist ein Punktort mit redundanzfreier Geometrie (Besonderer GebÃ€udepunkt, Besonderer Bauwerkspunkt) innerhalb eines Geometriethemas.
+    istteilvon[]
+
+
+ 'PunktortAU' ist ein Punktort mit unabhÃ€ngiger Geometrie ohne ZugehÃ¶rigkeit zu einem Geometriethema. Er kann zu ZUSOs der folgenden Objektarten gehÃ¶ren: Grenzpunkt, Besonderer GebÃ€udepunkt, Besonderer Bauwerkspunkt, Aufnahmepunkt, Sicherungspunkt, Sonstiger Vermessungspunkt, Besonderer topographischer Punkt, Lagefestpunkt, HÃ¶henfestpunkt, Schwerefestpunkt, Referenzstationspunkt.
+
+ 'PunktortTA' ist ein Punktort, der in der FlurstÃŒcksgrenze liegt und einen Grenzpunkt verortet.
+  
+	
+SchlÃŒssel:
+	ax_art_punktkennung
+
+pg_dump  -d alkis0150 -s -x -O -F p -f /home/b600352/ALKIS-Schema.sql
+
+ */
 
 default:
@@ -390,6 +432,6 @@
 // 1. sqlb: Standard-Spalten, die bei (fast) jedem Typ vorhanden sind
 $v=array($gmlid);
-$resb=pg_prepare("", $sqlb);
-$resb=pg_execute("", $v);
+$resb=pg_prepare($con, "", $sqlb);
+$resb=pg_execute($con, "", $v);
 if (!$resb) {
 	echo "\n<p class='err'>Fehler bei Bauwerksdaten Standardfelder.</p>";
@@ -440,5 +482,7 @@
 		}
 
-		tab_zeile('Statement', '', htmlentities($rowb["statement"], ENT_QUOTES, "UTF-8"), '', '');
+		if (isset($rowb["statement"])) {
+			tab_zeile('Statement', '', htmlentities($rowb["statement"], ENT_QUOTES, "UTF-8"), '', '');
+		}
 
 		// G e o m e t r i e  und FlÃ€che
@@ -475,6 +519,6 @@
 if ($sqlk != '') {
 	$v=array($gmlid);
-	$resk=pg_prepare("", $sqlk);
-	$resk=pg_execute("", $v);	
+	$resk=pg_prepare($con, "", $sqlk);
+	$resk=pg_execute($con, "", $v);	
 	if (!$resk) {
 		echo "\n<p class='err'>Fehler bei Schl&uuml;sseltabelle ".$btyp."</p>";
@@ -495,6 +539,14 @@
 		} else {
 		// Treffer
-			$bes=htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8");
-			$dok=htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8");
+			if (is_null($rowk["beschreibung"])) {
+				$bes="";
+			} else {
+				$bes=htmlentities($rowk["beschreibung"], ENT_QUOTES, "UTF-8");
+			}
+			if (is_null($rowk["dokumentation"])) {
+				$dok="";
+			} else {
+				$dok=htmlentities($rowk["dokumentation"], ENT_QUOTES, "UTF-8");
+			}
 			switch ($btyp) {  // individuell je Typ
 			case $btyp_verkehr: // 1
@@ -506,5 +558,15 @@
 			case $btyp_sonst: // 3
 				tab_zeile('Funktion', $rowk["funktion"], $bes, '', $dok);
-				tab_zeile('Hydrologisches Merkmal', $rowk["hydrologischesmerkmal"], htmlentities($rowk["hmbeschr"], ENT_QUOTES, "UTF-8"), '', htmlentities($rowk["hmdoku"], ENT_QUOTES, "UTF-8"));
+				if (is_null($rowk["hmbeschr"])) {
+					$hmbeschr="";
+				} else {
+					$hmbeschr=htmlentities($rowk["hmbeschr"], ENT_QUOTES, "UTF-8");
+				}
+				if (is_null($rowk["hmdoku"])) {
+					$hmdoku="";
+				} else {
+					$hmdoku=htmlentities($rowk["hmdoku"], ENT_QUOTES, "UTF-8");
+				}
+				tab_zeile('Hydrologisches Merkmal', $rowk["hydrologischesmerkmal"], $hmbeschr, '', $hmdoku);
 			break;
 			case $btyp_indu: // 4
@@ -545,6 +607,6 @@
 if ($sqlz != '') {
 	$v=array($gmlid);
-	$resz=pg_prepare("", $sqlz);
-	$resz=pg_execute("", $v);
+	$resz=pg_prepare($con, "", $sqlz);
+	$resz=pg_execute($con, "", $v);
 	if (!$resz) {
 		echo "\n<p class='err'>Fehler bei Bauwerk Relation.</p>";
@@ -581,6 +643,6 @@
 if ($sqlr != '') {
 	$v=array($gmlid);
-	$resr=pg_prepare("", $sqlr);
-	$resr=pg_execute("", $v);
+	$resr=pg_prepare($con, "", $sqlr);
+	$resr=pg_execute($con, "", $v);
 	if (!$resr) {
 		echo "\n<p class='err'>Fehler bei Bauwerksdaten Zusatzfelder.</p>";
Index: trunk/info/info/alkisn/alkisfshist.php
===================================================================
--- trunk/info/info/alkisn/alkisfshist.php	(revision 429)
+++ trunk/info/info/alkisn/alkisfshist.php	(revision 430)
@@ -15,4 +15,5 @@
 	2021-12-09 Neuer Parameter $PrntBtn (Drucken-SchaltflÃ€che)
 	2022-01-13 Neue Functions LnkStf(), DsKy()
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 */
 
@@ -52,6 +53,6 @@
 	$sql ="SELECT bezeichnung FROM ax_gemarkung g WHERE g.gemarkungsnummer= $1 AND g.endet IS NULL LIMIT 1;";
 	$v=array($gkey);
-	$res=pg_prepare("", $sql);
-	$res=pg_execute("", $v);
+	$res=pg_prepare($con, "", $sql);
+	$res=pg_execute($con, "", $v);
 	if (!$res) {echo "\n<p class='err'>Fehler bei Gemarkung.</p>";}
 	$gmkg="";
@@ -81,6 +82,6 @@
 
 	$v=array($fsk);
-	$resv = pg_prepare("", $sqlv);
-	$resv = pg_execute("", $v);
+	$resv = pg_prepare($con, "", $sqlv);
+	$resv = pg_execute($con, "", $v);
 	if (!$resv) {
 		echo "\n<p class='err'>Fehler bei Vorg&auml;nger-FS.</p>";
@@ -186,6 +187,6 @@
 	."UNION SELECT 'o' AS ftyp, ".$felder."nachfolgerflurstueckskennzeichen AS nach, vorgaengerflurstueckskennzeichen AS vor, zeigtaufexternes_art AS zart, zeigtaufexternes_name AS zname FROM ax_historischesflurstueckohneraumbezug o ".$whereclause.$whereo." AND o.endet IS NULL;";
 
-	$resu = pg_prepare("", $sqlu);
-	$resu = pg_execute("", $v);
+	$resu = pg_prepare($con, "", $sqlu);
+	$resu = pg_execute($con, "", $v);
 	if ($rowu = pg_fetch_assoc($resu)) {
 		$ftyp=$rowu["ftyp"];
@@ -204,4 +205,5 @@
 		$zeart=$rowu["zart"];
 		$zename=$rowu["zname"];
+		if (is_null($zename)) {$zename="";}
 		if ($gmlid == "") {$gmlid=$rowu["gml_id"];} // fÃŒr selbst-link-Umschalter ÃŒber footer
 
Index: trunk/info/info/alkisn/alkishaus.php
===================================================================
--- trunk/info/info/alkisn/alkishaus.php	(revision 429)
+++ trunk/info/info/alkisn/alkishaus.php	(revision 430)
@@ -16,5 +16,5 @@
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che). Gemeinde in Adresse
 	2022-01-13 Neue Functions LnkStf(), DsKy()
-
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 ToDo:
 	- per Relation dazugehÃ¶rige Bauwerke (z.B. Ãberdachung) suchen, ax_sonstigesbauwerkodersonstigeeinrichtung.gehoertzu
@@ -85,6 +85,6 @@
 
 $v = array($gmlid);
-$resg = pg_prepare("", $sqlg);
-$resg = pg_execute("", $v);
+$resg = pg_prepare($con, "", $sqlg);
+$resg = pg_execute($con, "", $v);
 if (!$resg) {
 	echo "\n<p class='err'>Fehler bei Geb&auml;ude.<br>".pg_last_error()."</p>";
@@ -130,5 +130,10 @@
 $aug=$rowg["aug"];
 $hoh=$rowg["hochhaus"];
-$nam=trim(trim($rowg["name"], "{}"), '"'); // GebÃ€ude-Name ist ein Array.
+if (is_null($rowg["name"])) {
+	$nam="";
+} else {
+	$nam=trim(trim($rowg["name"], "{}"), '"'); // GebÃ€ude-Name ist ein Array.
+}
+
 // Mehrfachbelegung theoretisch. Entklammern reicht. Mal mit und mal ohne "" drum.
 $kfunk=$rowg["gebaeudefunktion"];
@@ -195,6 +200,6 @@
 
 $v = array($gmlid);
-$resl = pg_prepare("", $sqll);
-$resl = pg_execute("", $v);
+$resl = pg_prepare($con, "", $sqll);
+$resl = pg_execute($con, "", $v);
 if (!$resl) {
 	echo "\n<p class='err'>Fehler bei Lage mit HsNr.</p>";
@@ -317,6 +322,6 @@
 		$sqlw="SELECT wert, beschreibung, dokumentation FROM ax_gebaeudefunktion WHERE wert IN ( $1 ) ORDER BY wert;";
 		$v = array($wgf);
-		$resw = pg_prepare("", $sqlw);
-		$resw = pg_execute("", $v);
+		$resw = pg_prepare($con, "", $sqlw);
+		$resw = pg_execute($con, "", $v);
 		if (!$resw) {
 			echo "\n<p class='err'>Fehler bei Geb&auml;ude - weitere Funktion.</p>";
@@ -415,6 +420,6 @@
 WHERE g.gml_id= $1 AND g.endet IS NULL;";
 $v = array($gmlid);
-$rese = pg_prepare("", $sqle);
-$rese = pg_execute("", $v);
+$rese = pg_prepare($con, "", $sqle);
+$rese = pg_execute($con, "", $v);
 if (!$rese) {
 	echo "\n<p class='err'>Fehler bei Datenerhebung.<br>".pg_last_error()."</p>";
@@ -457,6 +462,6 @@
 
 $v=array($gmlid);
-$resf=pg_prepare("", $sqlf);
-$resf=pg_execute("", $v);
+$resf=pg_prepare($con, "", $sqlf);
+$resf=pg_execute($con, "", $v);
 if (!$resf) {
 	echo "\n<p class='err'>Fehler bei FS-Verschneidung.</p>";
Index: trunk/info/info/alkisn/alkisinlayausk.php
===================================================================
--- trunk/info/info/alkisn/alkisinlayausk.php	(revision 429)
+++ trunk/info/info/alkisn/alkisinlayausk.php	(revision 430)
@@ -20,4 +20,5 @@
 	2021-03-09 Link zum GebÃ€udenachweis auch mit "Bauwerke" betiteln
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix)
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 */
 ini_set("session.cookie_httponly", 1);
@@ -73,6 +74,6 @@
 
 $v = array($gmlid);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Flurstuecksdaten.</p>";
@@ -158,6 +159,6 @@
 ORDER BY s.bezeichnung, l.hausnummer;";
 $v=array($gmlid); // id FS
-$res=pg_prepare("", $sql);
-$res=pg_execute("", $v);
+$res=pg_prepare($con, "", $sql);
+$res=pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Lagebezeichnung mit Hausnummer.</p>";
@@ -201,6 +202,6 @@
 	."WHERE f.gml_id= $1 AND f.endet IS NULL AND l.endet IS NULL AND s.endet IS NULL ORDER BY s.bezeichnung;";
 $v=array($gmlid);
-$res=pg_prepare("", $sql);
-$res=pg_execute("", $v);
+$res=pg_prepare($con, "", $sql);
+$res=pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Lagebezeichnung ohne Hausnummer.</p>";
@@ -257,5 +258,5 @@
 echo "\n\n<table class='outer'>";
 	$gezeigt=buchung_anzg($gml_buchungsstelle, 'j', true, "", 1); // direkte Buchung anzeigen
-	$anzber=ber_bs_zaehl($gml_buchungsstelle); // Ber. Buchg., nur Anzahl
+	$anzber=ber_bs_zaehl($gml_buchungsstelle, $con); // Ber. Buchg., nur Anzahl
 	if ($anzber > 0 ) {
 		if ($gezeigt) {
Index: trunk/info/info/alkisn/alkisbestnw.php
===================================================================
--- trunk/info/info/alkisn/alkisbestnw.php	(revision 429)
+++ trunk/info/info/alkisn/alkisbestnw.php	(revision 430)
@@ -17,4 +17,5 @@
 	2021-12-30 Bestandsnachweis recursiv ÃŒber alle Buchungs-Ebenen
 	2022-01-13 Functions aus alkisfkt.php in dies Modul verschoben, wenn nur hier verwendet. Neue Functions LnkStf(), DsKy()
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 */
 
@@ -23,5 +24,5 @@
 	"dienende" Buchungsstellen suchen. Miteigentumsanteil, Erbbaurecht usw. 
 	Return: gml_id der dienenden Buchungsstelle wenn gefunden? Sonst Leerstring */
-	global $dbg, $bartkey, $bart, $bartstory, $anteil;
+	global $dbg, $bartkey, $bart, $bartstory, $anteil, $con;
 
 //	dann "dienende" Buchungsstellen
@@ -47,6 +48,6 @@
 	."ORDER BY sd.laufendenummer;";
 	$v=array($gml_h); // gml_id "herrschende" B-Stelle
-	$resan=pg_prepare("", $sql);
-	$resan=pg_execute("", $v);
+	$resan=pg_prepare($con, "", $sql);
+	$resan=pg_execute($con, "", $v);
 	if (!$resan) {
 		echo "\n<p class='err'>Fehler bei 'dienende Buchungsstelle'.</p>";
@@ -93,5 +94,5 @@
 	Der Tabellenkopf wird im aufrufenden Programm ausgegeben. 
 	Return: Anzahl der ausgegebenen FlurstÃŒcke */
-	global $dbg, $gkz, $showkey, $filtkreis, $filtgem, $trclass, $katAmtMix, $lfdnr, $altlfdnr, $bartkey, $bart, $bartstory, $anteil;
+	global $dbg, $gkz, $showkey, $filtkreis, $filtgem, $trclass, $katAmtMix, $lfdnr, $altlfdnr, $bartkey, $bart, $bartstory, $anteil, $con;
 
 	$sql="SELECT g.gemarkungsnummer, g.bezeichnung, f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.amtlicheflaeche "
@@ -105,6 +106,6 @@
 	}
 	$sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
-	$resf = pg_prepare("", $sql);
-	$resf = pg_execute("", $v);
+	$resf = pg_prepare($con, "", $sql);
+	$resf = pg_execute($con, "", $v);
 	if (!$resf) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck</p>";}
 	$zeianz=pg_num_rows($resf);
@@ -261,6 +262,6 @@
 
 $v = array($gmlid);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Grundbuchdaten.</p>";
@@ -335,6 +336,6 @@
 if ($dbg > 1) {$sql.="AND s3.endet IS NULL AND s4.endet IS NULL";}
 $v=array($gmlid); // GB-Blatt
-$res=pg_prepare("", $sql);
-$res=pg_execute("", $v);
+$res=pg_prepare($con, "", $sql);
+$res=pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei tiefer Suche nach Buchungen.</p>";
@@ -391,6 +392,6 @@
 WHERE s.istbestandteilvon= $1 AND s.endet IS NULL ORDER BY cast(s.laufendenummer AS integer);";
 $v=array($gmlid);
-$res=pg_prepare("", $sql);
-$res=pg_execute("", $v);
+$res=pg_prepare($con, "", $sql);
+$res=pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Buchung.</p>";
@@ -461,6 +462,6 @@
 
 $v = array($gmlid);
-$resb = pg_prepare("", $sql);
-$resb = pg_execute("", $v);
+$resb = pg_prepare($con, "", $sql);
+$resb = pg_execute($con, "", $v);
 if (!$resb) {
 	echo "\n<p class='err'>Fehler bei 'Berechtigte Bl&auml;tter.</p>";
Index: trunk/info/info/alkisn/alkisausk.php
===================================================================
--- trunk/info/info/alkisn/alkisausk.php	(revision 429)
+++ trunk/info/info/alkisn/alkisausk.php	(revision 430)
@@ -17,4 +17,5 @@
 	2020-12-15 Input-Validation und Strict Comparisation (===)
 	2022-01-13 Neue Functions LnkStf(), DsKy()
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 
 H i n w e i s :  Dies Modul wird beim Entwickler nicht mehr produktiv eingesetzt.
@@ -58,6 +59,6 @@
 
 $v = array($gmlid);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Flurstuecksdaten.</p>";
@@ -147,6 +148,6 @@
 
 $v = array($gmlid);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Lagebezeichnung mit Hausnummer.</p>";
@@ -187,6 +188,6 @@
 
 $v = array($gmlid);
-$resg = pg_prepare("", $sql);
-$resg = pg_execute("", $v);
+$resg = pg_prepare($con, "", $sql);
+$resg = pg_execute($con, "", $v);
 if (!$resg) {
 	echo "\n<p class='err'>Keine Buchungen.</p>";
Index: trunk/info/info/alkisn/alkisnamstruk.php
===================================================================
--- trunk/info/info/alkisn/alkisnamstruk.php	(revision 429)
+++ trunk/info/info/alkisn/alkisnamstruk.php	(revision 430)
@@ -15,4 +15,5 @@
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che). Gruppenwechsel Bezirk.
 	2022-01-13 Neue Functions LnkStf(), DsKy()
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 */
 ini_set("session.cookie_httponly", 1);
@@ -65,11 +66,11 @@
 if (!$con) "\n<p class='err'>Fehler beim Verbinden der DB</p>";
 
-$sql="SELECT p.nachnameoderfirma, p.anrede, p.vorname, p.geburtsname, to_char(cast(p.geburtsdatum AS date),'DD.MM.YYYY') AS geburtsdatum, 
-p.namensbestandteil, p.akademischergrad, a.beschreibung AS anrv
+$sql="SELECT p.nachnameoderfirma, p.anrede, coalesce(p.vorname, '') AS vorn, coalesce(p.geburtsname, '') AS geburts, to_char(cast(p.geburtsdatum AS date),'DD.MM.YYYY') AS geburtsdatum, 
+coalesce(p.namensbestandteil, '') AS nbest, coalesce(p.akademischergrad, '') AS aka, a.beschreibung AS anrv
 FROM ax_person p LEFT JOIN ax_anrede_person a ON p.anrede = a.wert WHERE gml_id= $1 AND p.endet IS NULL;";
 
 $v = array($gmlid);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 
 if (!$res) {
@@ -85,11 +86,11 @@
 }
 if ($row = pg_fetch_assoc($res)) {
-	$vor=htmlentities($row["vorname"], ENT_QUOTES, "UTF-8");
+	$vor=htmlentities($row["vorn"], ENT_QUOTES, "UTF-8");
 	$nam=htmlentities($row["nachnameoderfirma"], ENT_QUOTES, "UTF-8");
-	$geb=htmlentities($row["geburtsname"], ENT_QUOTES, "UTF-8");
+	$geb=htmlentities($row["geburts"], ENT_QUOTES, "UTF-8");
 	$anrk=$row["anrede"]; // Key
 	$anr=$row["anrv"]; // Value
-	$nbest=htmlentities($row["namensbestandteil"], ENT_QUOTES, "UTF-8");
-	$aka=htmlentities($row["akademischergrad"], ENT_QUOTES, "UTF-8");
+	$nbest=htmlentities($row["nbest"], ENT_QUOTES, "UTF-8");
+	$aka=htmlentities($row["aka"], ENT_QUOTES, "UTF-8");
 
 	echo "<table>"
@@ -114,6 +115,6 @@
 
 	$v = array($gmlid);
-	$resa = pg_prepare("", $sqla);
-	$resa = pg_execute("", $v);
+	$resa = pg_prepare($con, "", $sqla);
+	$resa = pg_execute($con, "", $v);
 	if (!$resa) {
 		echo "\n<p class='err'>Fehler bei Adressen</p>";
@@ -186,6 +187,6 @@
 
 	$v = array($gmlid);
-	$resg = pg_prepare("", $sqlg);
-	$resg = pg_execute("", $v);
+	$resg = pg_prepare($con, "", $sqlg);
+	$resg = pg_execute($con, "", $v);
 
 	if (!$resg) {
Index: trunk/info/info/alkisn/alkisgebaeudenw.php
===================================================================
--- trunk/info/info/alkisn/alkisgebaeudenw.php	(revision 429)
+++ trunk/info/info/alkisn/alkisgebaeudenw.php	(revision 430)
@@ -18,4 +18,5 @@
 	2022-01-13 Neue Functions LnkStf(), DsKy()
 	2022-02-17 Neue Bauwerks-Typen
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 */
 
@@ -108,6 +109,6 @@
 ."WHERE f.gml_id= $1 AND f.endet IS NULL AND g.endet IS NULL;";
 $v=array($gmlid);
-$resf=pg_prepare("", $sqlf);
-$resf=pg_execute("", $v);
+$resf=pg_prepare($con, "", $sqlf);
+$resf=pg_execute($con, "", $v);
 if (!$resf) {
 	echo "\n<p class='err'>Fehler bei Flurst&uuml;cksdaten.</p>";
@@ -169,5 +170,5 @@
 
 // GebÃ€ude
-$sqlg ="SELECT g.gml_id, g.name, g.bauweise, g.gebaeudefunktion, h.beschreibung AS bauweise_beschreibung, u.beschreibung AS bezeichner, u.dokumentation AS gfktd, g.zustand, z.beschreibung AS bzustand, 
+$sqlg ="SELECT g.gml_id, g.name, g.bauweise, g.gebaeudefunktion, coalesce(h.beschreibung, '') AS bauweise_beschreibung, u.beschreibung AS bezeichner, u.dokumentation AS gfktd, g.zustand, coalesce(z.beschreibung, '') AS bzustand, 
 round(st_area(g.wkb_geometry)::numeric,2) AS gebflae, "; // GEB-FlÃ€che, auch ausserhalb des FS
 $sqlg.="round(st_area(ST_Intersection(g.wkb_geometry,f.wkb_geometry))::numeric,2) AS schnittflae, "; // wie viel vom GEB liegt im FS?
@@ -186,6 +187,6 @@
 
 $v=array($gmlid);
-$resg=pg_prepare("", $sqlg);
-$resg=pg_execute("", $v);
+$resg=pg_prepare($con, "", $sqlg);
+$resg=pg_execute($con, "", $v);
 if (!$resg) {
 	echo "\n<p class='err'>Fehler bei Geb&auml;ude-Verschneidung.</p>";
@@ -200,5 +201,9 @@
 	$ggml=$rowg["gml_id"];
 	$gebflsum=$gebflsum + $rowg["schnittflae"];
-	$gnam=trim(trim($rowg["name"], "{}"), '"'); // GebÃ€ude-Name ist ein Array in der DB: '{"A","B"}'
+	if (is_null($rowg["name"])) {
+		$gnam="";
+	} else {
+		$gnam=trim(trim($rowg["name"], "{}"), '"'); // GebÃ€ude-Name ist ein Array in der DB: '{"A","B"}'
+	}
 	// Mehrfachbelegung nur theoretisch. Entklammern reicht. Mal mit und mal ohne "" drum!?
 	$gfktk=htmlentities($rowg["gebaeudefunktion"], ENT_QUOTES, "UTF-8");  // Geb.-Funktion Key
@@ -263,6 +268,6 @@
 		$sqll.="ORDER BY bezeichnung, hausnummer, laufendenummer;";
 		$v = array($ggml);
-		$resl = pg_prepare("", $sqll);
-		$resl = pg_execute("", $v);
+		$resl = pg_prepare($con, "", $sqll);
+		$resl = pg_execute($con, "", $v);
 		if (!$resl) {
 			echo "\n<p class='err'>Fehler bei Lage mit HsNr.</p>";
@@ -439,142 +444,150 @@
 
 $v=array($gmlid);
-$resb=pg_prepare("", $sqlb);
-$resb=pg_execute("", $v);
+$resb=pg_prepare($con, "", $sqlb);
+$resb=pg_execute($con, "", $v);
+
+$baunr=0; // ZÃ€hler
+$bauflsum=0; // FlÃ€chensumme
+$gwbwtyp=0; // Gruppen-Wechsel Bauwerks-Typ
+
 if (!$resb) {
 	echo "\n<p class='err'>Fehler bei Bauwerke-Verschneidung.</p>";
 	if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".str_replace("$1","'".$gmlid."'",$sqlb)."</p>";}
 	if ($dbg > 1) {echo "<p class='dbg'>Fehler:".pg_result_error($resb)."</p>";}
-}
-$baunr=0; // ZÃ€hler
-$bauflsum=0; // FlÃ€chensumme
-$gwbwtyp=0; // Gruppen-Wechsel Bauwerks-Typ
-
-while($rowb = pg_fetch_assoc($resb)) {
-	$baunr++;
-	$btyp=$rowb["bwtyp"]; // Tabelle
-	$bgml=$rowb["gml_id"];
-	$bauflsum=$bauflsum + $rowb["schnittflae"];
-	$bbez=htmlentities($rowb["bezeichnung"], ENT_QUOTES, "UTF-8");
-
-	$bfktk=htmlentities($rowb["bauwerksfunktion"], ENT_QUOTES, "UTF-8");
-	$bfktv=htmlentities($rowb["beschreibung"], ENT_QUOTES, "UTF-8");
-	$bfktd=htmlentities($rowb["dokumentation"], ENT_QUOTES, "UTF-8"); 
-
-	$bnam=htmlentities($rowb["name"], ENT_QUOTES, "UTF-8");
-	$bgeb=$rowb["gehoertzu"];
-	$drin=$rowb["drin"];
-	$bgeotyp=$rowb["bgeotyp"];
-
-	// Lage des Bauwerks zum FlurstÃŒck
-	if ($bgeotyp === "LINESTRING") {
-		if ($drin === "t") {
-			$bstyle="gin";
+} else {
+	while($rowb = pg_fetch_assoc($resb)) {
+		$baunr++;
+		$btyp=$rowb["bwtyp"]; // Tabelle
+		$bgml=$rowb["gml_id"];
+		$bauflsum=$bauflsum + $rowb["schnittflae"];
+		if (is_null($rowb["bezeichnung"])) {
+			$bbez="";
 		} else {
-			$bstyle="gtl";
-		}
-		$f1="&nbsp;";
-		$f2="Linie";
-	} elseif ($bgeotyp === "POINT") {
-		if ($drin === "t") {
-			$bstyle="gin";
+			$bbez=htmlentities($rowb["bezeichnung"], ENT_QUOTES, "UTF-8");
+		}
+		$bfktk=htmlentities($rowb["bauwerksfunktion"], ENT_QUOTES, "UTF-8");
+		$bfktv=htmlentities($rowb["beschreibung"], ENT_QUOTES, "UTF-8");
+		$bfktd=htmlentities($rowb["dokumentation"], ENT_QUOTES, "UTF-8"); 
+		if (is_null($rowb["name"])) {
+			$bnam="";
 		} else {
-			$bstyle="gtl";
-		}
-		$f1="&nbsp;";
-		$f2="Punkt";		
-	} else { // FlÃ€che / Multi-
-		if ($drin === "t") { // komplett IM FlurstÃŒck
-			$f1=$rowb["schnittflae"]." m&#178;";
-			$f2="&nbsp;";
-			$bstyle="gin"; // siehe .css
-		} else {
-			if ($rowb["schnittflae"] === "0.00") { // nur angrenzend
-				$bstyle="gan";
-				$f1="&nbsp;";
-				$f2="angrenzend";
-			} else { // Teile auf FlurstÃŒck
+			$bnam=htmlentities($rowb["name"], ENT_QUOTES, "UTF-8");
+		}
+		$bgeb=$rowb["gehoertzu"];
+		$drin=$rowb["drin"];
+		$bgeotyp=$rowb["bgeotyp"];
+
+		// Lage des Bauwerks zum FlurstÃŒck
+		if ($bgeotyp === "LINESTRING") {
+			if ($drin === "t") {
+				$bstyle="gin";
+			} else {
 				$bstyle="gtl";
+			}
+			$f1="&nbsp;";
+			$f2="Linie";
+		} elseif ($bgeotyp === "POINT") {
+			if ($drin === "t") {
+				$bstyle="gin";
+			} else {
+				$bstyle="gtl";
+			}
+			$f1="&nbsp;";
+			$f2="Punkt";		
+		} else { // FlÃ€che / Multi-
+			if ($drin === "t") { // komplett IM FlurstÃŒck
 				$f1=$rowb["schnittflae"]." m&#178;";
-				$f2="(von ".$rowb["gebflae"]." m&#178;)";
+				$f2="&nbsp;";
+				$bstyle="gin"; // siehe .css
+			} else {
+				if ($rowb["schnittflae"] === "0.00") { // nur angrenzend
+					$bstyle="gan";
+					$f1="&nbsp;";
+					$f2="angrenzend";
+				} else { // Teile auf FlurstÃŒck
+					$bstyle="gtl";
+					$f1=$rowb["schnittflae"]." m&#178;";
+					$f2="(von ".$rowb["gebflae"]." m&#178;)";
+				}
+			}	
+		}
+
+		// Gruppenwechsel Bauwerks-Typ (Quell-Tabelle) - Zwischen-Ãberschrift
+		If ($btyp != $gwbwtyp) {
+			$gwbwtyp = $btyp;
+			if ($baunr === 1) {bauw_tab_head();} // Tab.-Kopf
+			switch ($btyp) {
+				case $btyp_verkehr:
+					$btyptitle='Bauwerk im Verkehrsbereich'; break;
+				case $btyp_gewaesser:
+					$btyptitle='Bauwerk im Gew&auml;sserbereich'; break;
+				case $btyp_sonst: 
+					$btyptitle='Sonstiges Bauwerk oder sonstige Einrichtung'; break;
+				case $btyp_indu:
+					$btyptitle="Bauwerk oder Anlage f&uuml;r Industrie und Gewerbe"; break;
+				case $btyp_sport:
+					$btyptitle="Bauwerk oder Anlage f&uuml;r Sport, Freizeit und Erholung"; break;
+				case $btyp_leitg:
+					$btyptitle="Leitung"; break;
+				case $btyp_trans:
+					$btyptitle="Transportanlage"; break;
+				case $btyp_turm:
+					$btyptitle="Turm"; break;
+				case $btyp_vorrat:
+					$btyptitle="Vorratsbeh&auml;lter, Speicherbauwerk"; break;
+				case $btyp_hist:
+					$btyptitle="Historisches Bauwerk oder historische Einrichtung"; break;
+				case $btyp_heil:
+					$btyptitle="Heilquelle, Gasquelle"; break;
+				case $btyp_oeff:
+					$btyptitle="Einrichtung in &ouml;ffentlichen Bereichen"; break;
+				case $btyp_bpkt:
+					$btyptitle="Besonderer Bauwerkspunkt"; break;
+				default:
+					$btyptitle='Fehler!'; break;
 			}
-		}	
+			echo "<tr><td colspan=3></td><td colspan=2 class='gw'>".$btyptitle."</td></tr>"; // ++ Symbol?
+		}
+
+		echo "\n<tr>";
+			echo "\n\t<td>";
+			if ($bbez != "") {echo "<span title='Bezeichnung'>".$bbez."</span> ";}
+			if ($bnam != "") {echo "<span title='Name'>".$bnam."</span> ";}
+			echo "</td>";
+			echo "\n\t<td class='fla'>".$f1."</td>"
+			."\n\t<td class='".$bstyle."'>".$f2."</td>"; // FlÃ€chenangaben
+			echo "\n\t<td>".DsKy($bfktk, 'Bauwerksfunktion-*')."<span title='".$bfktd ."'>".$bfktv."</span></td>";
+
+			// Lage / Haus (nur bei Typ 3 sonstige)
+			echo "\n\t<td class='nwlink noprint'>"; // Link
+			if ($bgeb != "") { // gehÃ¶rt zu GebÃ€ude
+			//	bw_gz_lage($bgeb); // Function: Lage (Adresse) ausgeben
+				echo "\n\t\t<a title='gehÃ¶rt zu' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$bgeb.LnkStf()
+				."'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>";
+			}
+			echo "\n\t</td>";
+
+			// Bauwerk Details
+			echo "\n\t<td class='nwlink noprint'>" // Link
+			."\n\t\t<a title='Bauwerksdaten' href='alkisbauwerk.php?gkz=".$gkz."&amp;btyp=".$btyp."&amp;gmlid=".$bgml.LnkStf()
+			."'>Bauwerk&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>" // Icon fÃŒr Bauwerk schaffen
+			."\n\t</td>"
+		."\n</tr>";
 	}
 
-	// Gruppenwechsel Bauwerks-Typ (Quell-Tabelle) - Zwischen-Ãberschrift
-	If ($btyp != $gwbwtyp) {
-		$gwbwtyp = $btyp;
-		if ($baunr === 1) {bauw_tab_head();} // Tab.-Kopf
-		switch ($btyp) {
-			case $btyp_verkehr:
-				$btyptitle='Bauwerk im Verkehrsbereich'; break;
-			case $btyp_gewaesser:
-				$btyptitle='Bauwerk im Gew&auml;sserbereich'; break;
-			case $btyp_sonst: 
-				$btyptitle='Sonstiges Bauwerk oder sonstige Einrichtung'; break;
-			case $btyp_indu:
-				$btyptitle="Bauwerk oder Anlage f&uuml;r Industrie und Gewerbe"; break;
-			case $btyp_sport:
-				$btyptitle="Bauwerk oder Anlage f&uuml;r Sport, Freizeit und Erholung"; break;
-			case $btyp_leitg:
-				$btyptitle="Leitung"; break;
-			case $btyp_trans:
-				$btyptitle="Transportanlage"; break;
-			case $btyp_turm:
-				$btyptitle="Turm"; break;
-			case $btyp_vorrat:
-				$btyptitle="Vorratsbeh&auml;lter, Speicherbauwerk"; break;
-			case $btyp_hist:
-				$btyptitle="Historisches Bauwerk oder historische Einrichtung"; break;
-			case $btyp_heil:
-				$btyptitle="Heilquelle, Gasquelle"; break;
-			case $btyp_oeff:
-				$btyptitle="Einrichtung in &ouml;ffentlichen Bereichen"; break;
-			case $btyp_bpkt:
-				$btyptitle="Besonderer Bauwerkspunkt"; break;
-			default:
-				$btyptitle='Fehler!'; break;
-		}
-		echo "<tr><td colspan=3></td><td colspan=2 class='gw'>".$btyptitle."</td></tr>"; // ++ Symbol?
+	// Footer Bauwerke
+	if ($baunr === 0) {
+		echo "\n<p>Kein Bauwerk auf diesem Flurst&uuml;ck.</p><br>";
+		// if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".$sqlb."<br>$1 = gml_id = '".$gmlid."'</p>";}
+	} else {
+		echo "\n<tr>"
+			."\n\t<td>Summe:</td>"
+			."\n\t<td class='fla sum' title='von Bauwerken &uuml;berbaute Fl&auml;che des Flurst&uuml;cks'>".number_format($bauflsum,0,",",".")."&nbsp;&nbsp;&nbsp;&nbsp;m&#178;</td>"
+			."\n\t<td colspan='6'>&nbsp;</td>"
+		."\n</tr>"
+		."\n</table>\n";
 	}
-
-	echo "\n<tr>";
-		echo "\n\t<td>";
-		if ($bbez != "") {echo "<span title='Bezeichnung'>".$bbez."</span> ";}
-		if ($bnam != "") {echo "<span title='Name'>".$bnam."</span> ";}
-		echo "</td>";
-		echo "\n\t<td class='fla'>".$f1."</td>"
-		."\n\t<td class='".$bstyle."'>".$f2."</td>"; // FlÃ€chenangaben
-		echo "\n\t<td>".DsKy($bfktk, 'Bauwerksfunktion-*')."<span title='".$bfktd ."'>".$bfktv."</span></td>";
-
-		// Lage / Haus (nur bei Typ 3 sonstige)
-		echo "\n\t<td class='nwlink noprint'>"; // Link
-		if ($bgeb != "") { // gehÃ¶rt zu GebÃ€ude
-		//	bw_gz_lage($bgeb); // Function: Lage (Adresse) ausgeben
-			echo "\n\t\t<a title='gehÃ¶rt zu' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$bgeb.LnkStf()
-			."'>Haus&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>";
-		}
-		echo "\n\t</td>";
-
-		// Bauwerk Details
-		echo "\n\t<td class='nwlink noprint'>" // Link
-		."\n\t\t<a title='Bauwerksdaten' href='alkisbauwerk.php?gkz=".$gkz."&amp;btyp=".$btyp."&amp;gmlid=".$bgml.LnkStf()
-		."'>Bauwerk&nbsp;<img src='ico/Haus.png' width='16' height='16' alt=''></a>" // Icon fÃŒr Bauwerk schaffen
-		."\n\t</td>"
-	."\n</tr>";
-}
-
-// Footer Bauwerk
-if ($baunr === 0) {
-	echo "\n<p>Kein Bauwerk auf diesem Flurst&uuml;ck.</p><br>";
-	// if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>".$sqlb."<br>$1 = gml_id = '".$gmlid."'</p>";}
-} else {
-	echo "\n<tr>"
-		."\n\t<td>Summe:</td>"
-		."\n\t<td class='fla sum' title='von Bauwerken &uuml;berbaute Fl&auml;che des Flurst&uuml;cks'>".number_format($bauflsum,0,",",".")."&nbsp;&nbsp;&nbsp;&nbsp;m&#178;</td>"
-		."\n\t<td colspan='6'>&nbsp;</td>"
-	."\n</tr>"
-	."\n</table>\n";
-}
-pg_free_result($resb);
+	pg_free_result($resb);
+}
 
 echo "<div class='buttonbereich noprint'>\n<hr>"
Index: trunk/info/info/alkisn/alkislage.php
===================================================================
--- trunk/info/info/alkisn/alkislage.php	(revision 429)
+++ trunk/info/info/alkisn/alkislage.php	(revision 430)
@@ -16,5 +16,6 @@
                Gemarkung und Flur bei Gruppenwechsel FETT anzeigen
 	2022-01-12 Neue Functions LnkStf(), DsKy()
-
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
+	
 ToDo:
 	- Balken-Kennzeichen kompatibel machen mit der Eingabe der Navigation fÃŒr Adresse
@@ -102,6 +103,6 @@
 
 $v = array($gmlid);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Lagebezeichnung.</p>";
@@ -259,6 +260,6 @@
 
 	$v = array($gmlid);
-	$resf = pg_prepare("", $sql);
-	$resf = pg_execute("", $v);
+	$resf = pg_prepare($con, "", $sql);
+	$resf = pg_execute($con, "", $v);
 	if (!$resf) {
 		echo "\n<p class='err'>Fehler bei Flurst&uuml;ck.</p>";
@@ -331,6 +332,6 @@
 
 			$v = array($land,$regbez,$kreis,$gem,$lage,$lage,$hsnr);
-			$res = pg_prepare("", $sql);
-			$res = pg_execute("", $v);
+			$res = pg_prepare($con, "", $sql);
+			$res = pg_execute($con, "", $v);
 			if (!$res) {
 				echo "\n<p class='err'>Fehler bei Nebengeb&auml;ude.</p>";
@@ -351,6 +352,6 @@
 
 			$v = array($land,$regbez,$kreis,$gem,$lage,$pseu);
-			$res = pg_prepare("", $sql);
-			$res = pg_execute("", $v);
+			$res = pg_prepare($con, "", $sql);
+			$res = pg_execute($con, "", $v);
 
 			if (!$res) {echo "\n<p class='err'>Fehler bei Hauptgeb&auml;ude.<br>".$sql."</p>";}
@@ -367,6 +368,6 @@
 			.$whereclaus."AND pseudonummer= $6 AND laufendenummer <> $7 AND l.endet IS NULL ORDER BY laufendenummer;";
 			$v=array($land,$regbez,$kreis,$gem,$lage,$pseu,$lfd);
-			$res = pg_prepare("", $sql);
-			$res = pg_execute("", $v);
+			$res = pg_prepare($con, "", $sql);
+			$res = pg_execute($con, "", $v);
 			if (!$res) {
 				echo "\n<p class='err'>Fehler bei Nebengeb&auml;ude.</p>";
@@ -394,5 +395,5 @@
 
 	$sql ="SELECT g.gml_id, g.gebaeudefunktion, array_to_string(g.name, ',') AS name, g.bauweise, g.grundflaeche, g.zustand, round(st_area(g.wkb_geometry)::numeric,2) AS flaeche,
-	h.beschreibung AS hv, h.dokumentation AS hd, u.beschreibung AS uv, u.dokumentation AS ud, z.beschreibung AS zv, z.dokumentation AS zd FROM ax_gebaeude g 
+	h.beschreibung AS hv, coalesce(h.dokumentation, '') AS hd, u.beschreibung AS uv, coalesce(u.dokumentation, '') AS ud, z.beschreibung AS zv, coalesce(z.dokumentation, '') AS zd FROM ax_gebaeude g 
 	LEFT JOIN ax_bauweise_gebaeude h ON g.bauweise = h.wert
 	LEFT JOIN ax_gebaeudefunktion u ON g.gebaeudefunktion = u.wert
@@ -403,6 +404,6 @@
 
 	$v = array($gmlid);
-	$res = pg_prepare("", $sql);
-	$res = pg_execute("", $v);
+	$res = pg_prepare($con, "", $sql);
+	$res = pg_execute($con, "", $v);
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Geb&auml;ude.</p>";
@@ -422,10 +423,13 @@
 		$ggml=$row["gml_id"];
 		$gfla=$row["flaeche"];
+		$ud=htmlentities($row["ud"], ENT_QUOTES, "UTF-8");
+		$hd=htmlentities($row["hd"], ENT_QUOTES, "UTF-8");
+		$zd=htmlentities($row["zd"], ENT_QUOTES, "UTF-8");
 		echo "\n<tr>"
 		."\n\t<td>".$row["name"]."</td>"
 		."\n\t<td class='fla'>".$gfla." m&#178;</td>"
-		."\n\t<td title='".htmlentities($row["ud"], ENT_QUOTES, "UTF-8")."'>".DsKy($row["gebaeudefunktion"], 'Geb&auml;udefunktion-*').$row["uv"]."</td>"
-		."\n\t<td title='".htmlentities($row["hd"], ENT_QUOTES, "UTF-8")."'>".DsKy($row["bauweise"], 'Bauweise-*').$row["hv"]."</td>"
-		."\n\t<td title='".htmlentities($row["zd"], ENT_QUOTES, "UTF-8")."'>".DsKy($row["zustand"], 'Zustand-*').$row["zv"]."</td>"
+		."\n\t<td title='".$ud."'>".DsKy($row["gebaeudefunktion"], 'Geb&auml;udefunktion-*').$row["uv"]."</td>"
+		."\n\t<td title='".$hd."'>".DsKy($row["bauweise"], 'Bauweise-*').$row["hv"]."</td>"
+		."\n\t<td title='".$zd."'>".DsKy($row["zustand"], 'Zustand-*').$row["zv"]."</td>"
 		."\n\t<td class='nwlink noprint'>"
 			."\n\t\t<a title='komplette Hausdaten' href='alkishaus.php?gkz=".$gkz."&amp;gmlid=".$ggml.LnkStf()
Index: trunk/info/info/alkisn/alkisfsnw.php
===================================================================
--- trunk/info/info/alkisn/alkisfsnw.php	(revision 429)
+++ trunk/info/info/alkisn/alkisfsnw.php	(revision 430)
@@ -16,4 +16,5 @@
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che)
 	2022-01-13 Functions in Fach-Modul verschoben, die nicht von mehreren verwendet werden. Neue Functions LnkStf(), DsKy()
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 
 ToDo:
@@ -25,5 +26,5 @@
 */
 
-function werteliste($bez ,$sqlin) {
+function werteliste($bez ,$sqlin, $con) {
 // Eine oder mehrere EntschlÃŒsselungen in eine Zeile ausgeben.
 // Dient dazu, SchlÃŒssel-ARRAYs auflÃ¶sen ohne die Zeile im JOIN mehrfach aufzulisten
@@ -36,6 +37,6 @@
 	$sql="SELECT wert, beschreibung FROM ".$tabelle." WHERE wert IN (".$sqlin.") ORDER BY wert LIMIT $1 ;";
 	$v = array('9');
-	$res = pg_prepare("", $sql);
-	$res = pg_execute("", $v);
+	$res = pg_prepare($con, "", $sql);
+	$res = pg_execute($con, "", $v);
 	if (!$res) {
 		echo "\n<p class='err'>Fehler bei Werteliste.</p>";
@@ -115,6 +116,6 @@
 	$sql ="SELECT gml_id FROM ax_flurstueck WHERE flurstueckskennzeichen= $1 AND endet IS NULL;";
 	$v=array(fskenn_dbformat($fskennz));
-	$res = pg_prepare("", $sql);
-	$res = pg_execute("", $v);
+	$res = pg_prepare($con, "", $sql);
+	$res = pg_execute($con, "", $v);
 	if ($row = pg_fetch_assoc($res)) {
 		$gmlid=$row["gml_id"];
@@ -139,6 +140,6 @@
 
 $v = array($gmlid); // mit gml_id suchen
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Flurstuecksdaten</p>";
@@ -165,5 +166,9 @@
 	$nenner=$row["nenner"];
 	$flstnummer=$zaehler;
-	if ($nenner > 0) {$flstnummer.="/".$nenner;} // BruchNr
+	if ($nenner == NULL) {
+		$nenner="";
+	} else {
+		$flstnummer.="/".$nenner;
+	} // BruchNr
 	$fsbuchflae=$row["amtlicheflaeche"]; // amtl. Fl. aus DB-Feld
 	$fsgeomflae=$row["fsgeomflae"]; // aus Geometrie ermittelte FlÃ€che
@@ -175,4 +180,5 @@
 	$zeart=$row["zeigtaufexternes_art"];
 	$zename=$row["zeigtaufexternes_name"];
+	if (is_null($zename)) {$zename="";}
 } else {
 	echo "\n<p class='err'>Fehler! Kein Treffer f&uuml;r Flurst&uuml;ck mit gml_id=".$gmlid."</p>";
@@ -246,6 +252,6 @@
 
 $v = array($gmlid);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 
 if (!$res) {
@@ -297,5 +303,5 @@
 // Lagebezeichnung  O H N E  Hausnummer  (Gewanne oder nur Strasse)
 // ax_flurstueck  >zeigtAuf>  AX_LagebezeichnungOhneHausnummer
-$sql ="SELECT l.gml_id, l.unverschluesselt, l.gemeinde, l.lage, s.bezeichnung 
+$sql ="SELECT l.gml_id, coalesce(l.unverschluesselt, '') AS gewann, l.gemeinde, l.lage, s.bezeichnung 
 FROM ax_flurstueck f JOIN ax_lagebezeichnungohnehausnummer l ON l.gml_id=ANY(f.zeigtauf) 
 LEFT JOIN ax_lagebezeichnungkatalogeintrag s ON l.land=s.land AND l.regierungsbezirk=s.regierungsbezirk AND l.kreis=s.kreis AND l.gemeinde=s.gemeinde AND l.lage=s.lage 
@@ -303,6 +309,6 @@
 
 $v = array($gmlid);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Lagebezeichnung ohne Hausnummer</p>";
@@ -312,5 +318,5 @@
 	$skey=$row["lage"]; // Strassenschl.
 	$lgml=$row["gml_id"]; // Key der Lage
-	$gewann = htmlentities($row["unverschluesselt"], ENT_QUOTES, "UTF-8");
+	$gewann = htmlentities($row["gewann"], ENT_QUOTES, "UTF-8");
 	if ($gewann != '') {
 		echo "\n<tr>"
@@ -367,6 +373,6 @@
 $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);
 $v = array($fskennzalb);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Suche tats. Nutzung</p>";
@@ -436,5 +442,5 @@
  b.bodenart AS bodenartk, bodenart.beschreibung AS bodenartv, zustbod.beschreibung AS zustbodv,
  b.entstehungsartoderklimastufewasserverhaeltnisse AS entsteh, b.sonstigeangaben,
- b.bodenzahlodergruenlandgrundzahl as bodenzahl, b.ackerzahlodergruenlandzahl AS ackerzahl,
+ coalesce(b.bodenzahlodergruenlandgrundzahl, '') as bodenzahl, b.ackerzahlodergruenlandzahl AS ackerzahl,
  b.jahreszahl, st_area(st_intersection(b.wkb_geometry, f.wkb_geometry)) AS schnittflae 
 FROM ax_flurstueck f
@@ -446,6 +452,6 @@
 
 $v = array($gmlid);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 if (!$res) {echo "\n<p class='err'>Fehler bei DB-Abfrage zur Klassifizierung Boden</p>\n";}
 $gesertragsmz = 0; // Gesamt-ErtragsMesszahl
@@ -466,10 +472,17 @@
 		$absbuchflae = $absflae * $the_Xfactor;
 		$klasflae+=$absbuchflae;
-		$ertragszahl = intval($absbuchflae * $row['ackerzahl'] / 100);
+
+		$boedenzahl=ltrim($row['bodenzahl'], '0');
+		if (is_null($row['ackerzahl'])) {
+			$ackerzahl="";
+			$ertragszahl = 0;	
+		} else {
+			$ackerzahl=ltrim($row['ackerzahl'], '0');
+			$ertragszahl = intval($absbuchflae * $row['ackerzahl'] / 100);
+		}
 		$gesertragsmz+=$ertragszahl;
 	//	$absflaedis = number_format($absflae,0,",",".")." m&#178;"; // als Tool-Tip ?
 		$absbuchflaedis = number_format($absbuchflae,0,",",".")." m&#178;";
-		$boedenzahl=ltrim($row['bodenzahl'], '0');
-		$ackerzahl=ltrim($row['ackerzahl'], '0');
+
 		$jahr=$row['jahreszahl'];
 		$entsteh=$row['entsteh'];
@@ -492,10 +505,10 @@
 				$ent=trim($entsteh, "{}");
 				echo "\n\t\t<br><span title='Enststehungsart oder Klimastufe, Wasserverh&auml;ltnisse'>".DsKy($ent, '*');
-				werteliste('e', $ent); // ++ Zeilenweise mit <br> ?
+				werteliste('e', $ent, $con); // ++ Zeilenweise mit <br> ?
 				echo "</span>";
 			}
 			if (isset($sonst)) {
 				$son=trim($sonst, "{}");
-				echo "\n\t\t<br><span title='Sonstige Angaben'>".werteliste('s', $son)."</span>"; // ++ Zeilenweise mit <br> ?
+				echo "\n\t\t<br><span title='Sonstige Angaben'>".werteliste('s', $son, $con)."</span>"; // ++ Zeilenweise mit <br> ?
 			}
 			if (isset($jahr)) {
Index: trunk/info/info/alkisn/alkisgsnw.php
===================================================================
--- trunk/info/info/alkisn/alkisgsnw.php	(revision 429)
+++ trunk/info/info/alkisn/alkisgsnw.php	(revision 430)
@@ -14,5 +14,5 @@
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che)
 	2022-01-13 Neue Functions LnkStf(), DsKy()
-
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 ToDo: 
 - Den Fall berÃŒcksichtigen, dass die Buchung vorhanden ist, aber das GB nicht (ModellschwÃ€che). Meldungen ausgeben.
@@ -23,5 +23,5 @@
 // Daten zur Buchungsstelle (GS = GrundstÃŒck) aus der DB lesen.
 // Suche wahlweise ÃŒber die GML-ID oder ÃŒber das GrundstÃŒcks-Kennzeichen (Bezirk-Blatt-LfdNr) aus der URL.
-	global $gkz, $showkey, $dbg, $defland, $gsbez, $gsblatt, $gslfdnr, $gsbart;
+	global $gkz, $showkey, $dbg, $defland, $gsbez, $gsblatt, $gslfdnr, $gsbart, $con;
 
 	$sqlgs="SELECT s.gml_id, b.bezirk, b.buchungsblattnummermitbuchstabenerweiterung AS blatt, s.laufendenummer, s.buchungsart "
@@ -55,6 +55,6 @@
 	// egal ob Suche mit gmlid ODER Kennzeichen
 	$sqlgs.="AND b.endet IS NULL AND s.endet IS NULL;";
-	$resgs=pg_prepare("", $sqlgs);
-	$resgs=pg_execute("", $v);
+	$resgs=pg_prepare($con, "", $sqlgs);
+	$resgs=pg_execute($con, "", $v);
 	if ($rowgs=pg_fetch_assoc($resgs)) {
 		$gmlid=$rowgs["gml_id"];
@@ -72,10 +72,10 @@
 
 function Back2theRoots($gmlid) {
-// Die Buchungsstelle aus dem Aufruf-Parameter wenn eindeutig mÃ¶glich iterativ zurÃŒck fÃŒhren auf die dienende Buchungsstelle, 
+// Die Buchungsstelle aus dem Aufruf-Parameter - wenn eindeutig mÃ¶glich - iterativ zurÃŒck fÃŒhren auf die dienende Buchungsstelle, 
 // auf der die FlurstÃŒcke gebucht sind (Buchungsart="GrundstÃŒck" oder Blattart="fiktives Blatt").
 // Der GrundstÃŒcksnachweis wird aus anderen Modulen nur fÃŒr die "GrundstÃŒck"-Buchung aufgerufen, so dass diese Suche nicht notwendig ist.
 // Bei Aufrufen von auÃen kann dies aber sinnvoll sein.
 
-	global $gkz, $dbg, $showkey, $gerooted;
+	global $gkz, $dbg, $showkey, $gerooted, $con;
 	$gd=$gmlid; // gml dienend
 
@@ -87,6 +87,6 @@
 		$gr=$gd; // gml Return
 		$v=array($gd);
-		$res=pg_prepare("", $sql);
-		$res=pg_execute("", $v);
+		$res=pg_prepare($con, "", $sql);
+		$res=pg_execute($con, "", $v);
 		$zeianz=pg_num_rows($res);
 		if ($zeianz == 0){ // sollte nicht vorkommen, die Buchungsart "GrundstÃŒck" ruft dies NICHT auf
@@ -212,6 +212,6 @@
 	}
 	$sqlfs.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;";
-	$resfs = pg_prepare("", $sqlfs);
-	$resfs = pg_execute("", $v);
+	$resfs = pg_prepare($con, "", $sqlfs);
+	$resfs = pg_execute($con, "", $v);
 	if (!$resfs) {echo "\n<p class='err'>Fehler bei Flurst&uuml;ck</p>";}
 
Index: trunk/info/info/alkisn/alkisexport.php
===================================================================
--- trunk/info/info/alkisn/alkisexport.php	(revision 429)
+++ trunk/info/info/alkisn/alkisexport.php	(revision 430)
@@ -31,4 +31,5 @@
 	2020-12-16 Input-Validation und Strict Comparisation (===), BerechtigungsprÃŒfung vorÃŒbergehend deaktiviert
 	2021-12-01 Client-Encoding
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 
 	ToDo:
@@ -37,4 +38,5 @@
 	- In Dateiname den StraÃennamen statt der gmlid verwenden? (Umlaute?)
 	- in alkislage.php fÃŒr den Typ "ohne Haunummer" den Export mit strasse und haus=o verlinken
+ToDo: FÃŒr PHP 8.1: connection angeben bei pg_prpare und pg_execute
 */
 
@@ -43,4 +45,5 @@
 	// dass ggf. mehrere Lagebezeichnungen in eine Zelle der Tabelle passen.
 	// FS >westAuf> Lage >> Katalog
+	global $con;
 	$sql ="SELECT DISTINCT s.bezeichnung, l.hausnummer "
 	."FROM ax_flurstueck f JOIN ax_lagebezeichnungmithausnummer l ON l.gml_id=ANY(f.weistauf) "
@@ -49,6 +52,6 @@
 
 	$v=array($gmlid);
-	$res=pg_prepare("", $sql);
-	$res=pg_execute("", $v);
+	$res=pg_prepare($con, "", $sql);
+	$res=pg_execute($con, "", $v);
 	if (!$res) {return "** Fehler bei Lagebezeichnung **";}
 	$j=0;
@@ -239,6 +242,6 @@
 }
 
-$res=pg_prepare("", $sql);
-$res=pg_execute("", $v);
+$res=pg_prepare($con, "", $sql);
+$res=pg_execute($con, "", $v);
 if (!$res) {
 	$err="\nFehler bei Datenbankabfrage";
Index: trunk/info/info/alkisn/alkisstrasse.php
===================================================================
--- trunk/info/info/alkisn/alkisstrasse.php	(revision 429)
+++ trunk/info/info/alkisn/alkisstrasse.php	(revision 430)
@@ -15,4 +15,5 @@
 	2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÃ€che)
 	2022-01-13 Neue Functions LnkStf(), DsKy()
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 */
 ini_set("session.cookie_httponly", 1);
@@ -73,6 +74,6 @@
 
 $v=array($gmlid);
-$res=pg_prepare("", $sql);
-$res=pg_execute("", $v);
+$res=pg_prepare($con, "", $sql);
+$res=pg_execute($con, "", $v);
 if (!$res) {
 	echo "\n<p class='err'>Fehler bei Lagebezeichnungskatalogeintrag.</p>";
@@ -153,6 +154,6 @@
 
 $v=array($gmlid);
-$resf=pg_prepare("", $sql);
-$resf=pg_execute("", $v);
+$resf=pg_prepare($con, "", $sql);
+$resf=pg_execute($con, "", $v);
 if (!$resf) {
 	echo "\n<p class='err'>Fehler bei Flurst&uuml;ck.</p>";
Index: trunk/info/info/alkisn/alkisfkt.php
===================================================================
--- trunk/info/info/alkisn/alkisfkt.php	(revision 429)
+++ trunk/info/info/alkisn/alkisfkt.php	(revision 430)
@@ -18,4 +18,5 @@
 	2021-12-30 Bestandsnachweis recursiv ÃŒber alle Buchungs-Ebenen
 	2022-01-13 Functions in Fach-Modul verschoben, wenn nur von einem verwendet. Neue Functions LnkStf(), DsKy()
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 */
 
@@ -177,4 +178,5 @@
 function ber_bs_zaehl($gmls) {
 // Berechtigte Buchungs-Stellen zÃ€hlen.
+	global $con;
 
 	// Buchungstelle dienend <(Recht)an< Buchungstelle herrschend
@@ -182,6 +184,6 @@
 	."WHERE sd.gml_id= $1 AND sh.endet IS NULL AND sd.endet IS NULL;";
 	$v = array($gmls); // GML dienende Buchungs-Stelle
-	$resan = pg_prepare("", $sql);
-	$resan = pg_execute("", $v);
+	$resan = pg_prepare($con, "", $sql);
+	$resan = pg_execute($con, "", $v);
 	if (!$resan) {echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen z&auml;hlen'.</p>";}
 	$rowan = pg_fetch_assoc($resan);
@@ -199,5 +201,5 @@
 //  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
 //	$trtyp: Tabellen-Zeilen-Typ. Werte: 1="mit GS-Link", 2="ohne GS-Link", 3="ohne GS-Link +Zeile einfÃ€rben"
-	global $gkz, $dbg, $showkey, $bartgrp, $barttypgrp, $stufe, $katAmtMix;
+	global $gkz, $dbg, $showkey, $bartgrp, $barttypgrp, $stufe, $katAmtMix, $con;
 
 	$sqlbs="SELECT sh.gml_id AS hgml, sh.buchungsart, sh.laufendenummer as lfd, sh.zaehler, sh.nenner, sh.nummerimaufteilungsplan as nrpl, sh.beschreibungdessondereigentums as sond, " // Buchungs-Stelle herrschend
@@ -211,6 +213,6 @@
 
 	$v = array($gmlbs); // ID dienende Buchungs-Stelle
-	$resbs = pg_prepare("", $sqlbs);
-	$resbs = pg_execute("", $v);
+	$resbs = pg_prepare($con, "", $sqlbs);
+	$resbs = pg_execute($con, "", $v);
 	if (!$resbs) {
 		echo "\n<p class='err'>Fehler bei 'Buchungsstelle ausgeben'.</p>";
@@ -353,5 +355,5 @@
 //  $gml_fs: GML-ID des FlurstÃŒcke (nur bei erstem Aufruf in einem FS-Nachweis notwendig)
 //	$gsanfrd: In einem GS-Nachw. die GML-ID der in de URL angeforderten Buchungsstelle (-> Hervorhebung)
-	global $dbg, $gezeigt;
+	global $dbg, $gezeigt, $con;
 
 	// sh=Buchungstelle herrschend >(Recht)an> sd=Buchungstelle dienend >istBestandteilVon> BLATT -> Bezirk
@@ -363,6 +365,6 @@
 
 	$v = array($gmls); // ID dienende BuchungsStelle
-	$resber = pg_prepare("", $sql);
-	$resber = pg_execute("", $v);
+	$resber = pg_prepare($con, "", $sql);
+	$resber = pg_execute($con, "", $v);
 	if (!$resber) {
 		echo "\n<p class='err'>Fehler bei 'berechtigte Buchungsstellen'.</p>";
@@ -412,5 +414,5 @@
 	$jsfenster: Beim Link mit Javascript ein neues Fenster Ã¶ffnen
   Return = Anzahl Namensnummern */
-	global $dbg, $gkz, $showkey;
+	global $dbg, $gkz, $showkey, $con;
 	if ($jsfenster) { // beim Link aus iFrame ausbrechen
 		$lnkvor  = "javascript:imFenster(\"";
@@ -423,6 +425,6 @@
 	// N a m e n s n u m m e r
 	// ax_namensnummer >istBestandteilVon> ax_buchungsblatt
-	$sqln="SELECT n.gml_id, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, n.artderrechtsgemeinschaft AS adr, n.beschriebderrechtsgemeinschaft as beschr, n.eigentuemerart, n.anlass, n.benennt, "
-	."wn.beschreibung AS adrv, we.beschreibung AS eiartv, "
+	$sqln="SELECT n.gml_id, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, n.artderrechtsgemeinschaft AS adr, coalesce(n.beschriebderrechtsgemeinschaft, '') as beschr, n.eigentuemerart, n.anlass, n.benennt, "
+	."coalesce(wn.beschreibung, '') AS adrv, we.beschreibung AS eiartv, "
 	."p.gml_id AS gmlpers, p.nachnameoderfirma, p.vorname, p.geburtsname, to_char(cast(p.geburtsdatum AS date),'DD.MM.YYYY') AS geburtsdatum, p.namensbestandteil, p.akademischergrad "
 	."FROM ax_namensnummer n "
@@ -435,6 +437,6 @@
 
 	$v = array($gmlid); // GB-Blatt
-	$resn = pg_prepare("", $sqln);
-	$resn = pg_execute("", $v);
+	$resn = pg_prepare($con, "", $sqln);
+	$resn = pg_execute($con, "", $v);
 	if (!$resn) {
 		echo "\n<p class='err'>Fehler bei Eigent&uuml;mer</p>";
@@ -451,5 +453,5 @@
 		$eiartkey=$rown["eigentuemerart"]; // Key
 		$eiart=$rown["eiartv"]; // Value
-		$anlass=$rown["anlass"]; // ???
+	//	$anlass=$rown["anlass"];
 		$gmlpers=$rown["gmlpers"]; // leer bei RechtsverhÃ€ltnis
 		$akadem=$rown["akademischergrad"];
@@ -459,7 +461,14 @@
 		$gebdat=$rown["geburtsdatum"];
 		$gebnam=$rown["geburtsname"];
-		$zaehler=str_replace(".", ",", $rown["zaehler"]); // Dezimal-KOMMA wenn dem Notar der Bruch nicht reicht
-		$nenner=str_replace(".", ",", $rown["nenner"]);
-
+		if (is_null($rown["zaehler"])) {
+			$zaehler="";
+		} else {
+			$zaehler=str_replace(".", ",", $rown["zaehler"]); // Dezimal-KOMMA wenn dem Notar der Bruch nicht reicht
+		}
+		if (is_null($rown["nenner"]))  {
+			$nenner="";
+		} else {
+			$nenner=str_replace(".", ",", $rown["nenner"]);
+		}
 		echo "\n\t<tr>";
 		if($n === 0) { // 1. Zeile zum GB
@@ -479,5 +488,7 @@
 			. "\n\t\t<td>";
 		}
-		if ($anlass > 0 ) {echo "<p>Anlass=".$anlass."</p>";}
+
+	//	if ($anlass > 0 ) {echo "<p>Anlass=".$anlass."</p>";} // Array, EntschlÃŒsseln?
+
 		// Andere Namensnummern? Relation: ax_namensnummer >bestehtAusRechtsverhaeltnissenZu> ax_namensnummer 
 		// Die Relation 'Namensnummer' besteht aus RechtsverhÃ€ltnissen zu 'Namensnummer' sagt aus, dass mehrere Namensnummern zu einer Rechtsgemeinschaft gehÃ¶ren kÃ¶nnen. 
@@ -508,6 +519,6 @@
 			."ORDER BY a.beginnt DESC LIMIT 2;";
 			$v = array($gmlpers);
-			$resa = pg_prepare("", $sqla);
-			$resa = pg_execute("", $v);
+			$resa = pg_prepare($con, "", $sqla);
+			$resa = pg_execute($con, "", $v);
 			if (!$resa) {
 				echo "\n\t<p class='err'>Fehler bei Adressen</p>";
Index: trunk/info/info/alkisn/alkisinlaybaurecht.php
===================================================================
--- trunk/info/info/alkisn/alkisinlaybaurecht.php	(revision 429)
+++ trunk/info/info/alkisn/alkisinlaybaurecht.php	(revision 430)
@@ -15,4 +15,5 @@
 	2020-12-15 Input-Validation und Strict Comparisation (===)
 	2021-12-09 2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix)
+	2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
 */
 ini_set("session.cookie_httponly", 1);
@@ -69,6 +70,6 @@
 
 $v = array($gmlid);
-$res = pg_prepare("", $sql);
-$res = pg_execute("", $v);
+$res = pg_prepare($con, "", $sql);
+$res = pg_execute($con, "", $v);
 
 if (!$res) {
