pg_prepare + pg_execute) 2011-11-01 *Left* Join - Fehlertoleranz bei unvollstaendigen Schluesseltabellen 2011-11-02 Parameter debug in function eigentuemer 2011-11-17 Variable ($debug, $idanzeige, $showkey) von Parameter nach global. Die heißen in allen Programmteilen gleich. 2014-01-22 Eigentuemerart: Mehr Werte und Zugriff auf DB-Schlüssel-Tabelle 2014-02-06 Korrektur Eigentümerart */ function footer($gmlid, $link, $append) { // Einen Seitenfuss ausgeben. // Den URL-Parameter "&id=j/n" und "&showkey=j/n" in allen Kombinationen umschalten lassen. // Die Parameter &gkz= und &gmlid= kommen in allen Modulen einheitlich vor // Der Parameter $append wird angehaengt wenn gefuellt // Anwendung: &eig=j bei FS-NW, <yp=m/p/o bei Lage global $gkz, $idumschalter, $idanzeige, $showkey, $hilfeurl; $customer=$_SESSION["mb_user_name"]; echo "\n
"; echo "\n\n"; // Spalte 1: Info Benutzerkennung echo "\n\t"; // Spalte 2: Umschalter echo "\n\t"; // Spalte 3 echo "\n\t"; echo "\n\n
Benutzer: ".$customer.""; $mylink ="\n\t\t"; echo " ID aus"; } else { echo $mylink.$mykey."&id=j' title='Verfolgung der GML-ID in den ALKIS-Beziehungen'>"; echo " ID ein"; } echo " | "; } else { // keinen ID-Umschalter $myid = ""; } if ($showkey) { // // Umschalten Schlüssel ein/aus echo $mylink.$myid."&showkey=n' title='Verschlüsselungen ausblenden'>Schlüssel aus"; } else { echo $mylink.$myid."&showkey=j' title='Verschlüsselungen anzeigen'>Schlüssel ein"; } echo "\n\t"; echo "\n\t\t\n\t
\n
\n"; return 0; } function linkgml($gkz, $gml, $typ) { // Einen Link zur Verfolgung der Beziehungen mit dem Modul alkisrelationen.php $kurzid=substr($gml, 12); // ID in Anzeige kuerzen (4 Zeichen), der Anfang ist immer gleich echo "\n\t\t"; echo "".$kurzid.""; return 0; } function kurz_namnr($lang) { // Namensnummer kuerzen. Nicht benoetigte Stufen der Dezimalklassifikation abschneiden $kurz=str_replace(".00","",$lang); // leere Stufen (nur am Ende) $kurz=str_replace("0000","",$kurz); // ganz leer (am Anfang) $kurz=ltrim($kurz, "0"); // fuehrende Nullen am Anfang $kurz=str_replace(".0",".",$kurz); // fuehrende Null jeder Stufe return $kurz; } function bnw_fsdaten($con, $lfdnr, $gml_bs, $ba, $anteil, $bvnraus) { /* Bestandsnachweis - Flurstuecksdaten Die Tabellenzeilen mit den Flurstuecksdaten zu einer Buchungsstelle im Bestandsnachweis ausgeben. Die Funktion wird je einmal aufgerufen für die Buchungen direkt auf dem GB (Normalfall). Weiterere Aufrufe ggf. bei Erbbaurecht für die mit "an" verknuepften Buchungsstellen. Table-Tag und Kopfzeile im aufrufenden Programm. */ global $gkz, $idanzeige, $showkey; // F L U R S T U E C K $sql="SELECT g.gemarkungsnummer, g.bezeichnung, "; $sql.="f.gml_id, f.flurnummer, f.zaehler, f.nenner, f.regierungsbezirk, f.kreis, f.gemeinde, f.amtlicheflaeche "; $sql.="FROM ax_flurstueck f "; $sql.="JOIN alkis_beziehungen v ON f.gml_id=v.beziehung_von "; $sql.="LEFT JOIN ax_gemarkung g ON f.land=g.land AND f.gemarkungsnummer=g.gemarkungsnummer "; $sql.="WHERE v.beziehung_zu= $1 "; // id buchungsstelle $sql.="AND v.beziehungsart='istGebucht' "; $sql.="ORDER BY f.gemarkungsnummer, f.flurnummer, f.zaehler, f.nenner;"; $v = array($gml_bs); $resf = pg_prepare("", $sql); $resf = pg_execute("", $v); if (!$resf) {echo "

Fehler bei Flurstück

\n";} if($bvnraus) { // nur bei direkten Buchungen die lfdNr ausgeben $bvnr=str_pad($lfdnr, 4, "0", STR_PAD_LEFT); } $altlfdnr=""; $j=0; while($rowf = pg_fetch_array($resf)) { $flur=str_pad($rowf["flurnummer"], 3, "0", STR_PAD_LEFT); /* $fskenn=str_pad($rowf["zaehler"], 5, "0", STR_PAD_LEFT); if ($rowf["nenner"] != "") { // Bruchnummer $fskenn.="/".str_pad($rowf["nenner"], 3, "0", STR_PAD_LEFT); } */ // ohne fuehrende Nullen? $fskenn=$rowf["zaehler"]; if ($rowf["nenner"] != "") { // Bruchnummer $fskenn.="/".$rowf["nenner"]; } $flae=number_format($rowf["amtlicheflaeche"],0,",",".") . " m²"; echo "\n"; // eine Zeile je Flurstueck // Sp. 1-3 der Tab. aus Buchungsstelle, nicht aus FS if($lfdnr == $altlfdnr) { // gleiches Grundstueck echo "\n\t "; echo "\n\t "; echo "\n\t "; } else { echo "\n\t"; echo ""; // Sprungmarke echo "".$bvnr.""; // BVNR if ($idanzeige) {linkgml($gkz, $gml_bs, "Buchungsstelle");} echo ""; echo "\n\t"; // Buchungsart // if ($showkey) {echo "".$???." ";} // Schluessel echo $ba; // entschluesselt echo ""; echo "\n\t "; // Anteil $altlfdnr=$lfdnr; } //Sp. 4-7 aus Flurstueck echo "\n\t"; if ($showkey) { echo "".$rowf["gemarkungsnummer"]." "; } echo $rowf["bezeichnung"].""; echo "\n\t".$flur.""; echo "\n\t".$fskenn.""; if ($idanzeige) {linkgml($gkz, $rowf["gml_id"], "Flurstück");} echo ""; echo "\n\t".$flae.""; echo "\n\t"; echo "\n"; $j++; } // Ende Flurstueck pg_free_result($resf); return $j; } function eigentuemer($con, $gmlid, $mitadresse, $lnkclass) { // Tabelle mit Eigentuemerdaten zu einem Grundbuchblatt ausgeben // Sp.1 = Namennummer, Sp. 2 = Name / Adresse, Sp. 3 = Link // Parameter: // $gmlid = ID des GB-Blattes // $mitadresse = Option (true/false) ob auch die Adresszeile ausgegeben werden soll // Return = Anzahl Namensnummern // Schleife 1: N a m e n s n u m m e r // Beziehung: ax_namensnummer >istBestandteilVon> ax_buchungsblatt global $debug, $gkz, $idanzeige, $showkey; // Link über Java-Class? (Ja in alkisinlayausk.php, sonst normal) if ($lnkclass == "") { $lnkvor = ""; $lnknach = ""; } else { $lnkvor = "javascript:".$lnkclass."(\""; $lnknach = "\")"; } // Beispiel-Link href='javascript:imFenster(\"alkislage.php?gkz= ... ."\")'>xxx "; $sqln="SELECT n.gml_id, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, "; $sqln.="n.artderrechtsgemeinschaft AS adr, n.beschriebderrechtsgemeinschaft as beschr, n.eigentuemerart, n.anlass "; $sqln.="FROM ax_namensnummer n JOIN alkis_beziehungen b ON b.beziehung_von=n.gml_id "; $sqln.="WHERE b.beziehung_zu= $1 AND b.beziehungsart='istBestandteilVon' ORDER BY laufendenummernachdin1421;"; $v = array($gmlid); $resn = pg_prepare("", $sqln); $resn = pg_execute("", $v); if (!$resn) { echo "

Fehler bei Eigentümer

\n"; if ($debug > 2) {echo "

SQL=
".$sqln."
$1=gml= '".$gmlid."'

";} } echo "\n\n"; $n=0; // Z.NamNum. while($rown = pg_fetch_array($resn)) { $gmlnn=$rown["gml_id"]; echo "\n"; echo "\n\t"; echo "\n\t\n\t\n\t"; // Spalte 3 = Link echo "\n\t\n"; if ($mitadresse) { // Schleife 3: A d r e s s e (OPTIONAL) $sqla ="SELECT a.gml_id, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland "; $sqla.="FROM ax_anschrift a JOIN alkis_beziehungen b ON a.gml_id=b.beziehung_zu "; $sqla.="WHERE b.beziehung_von= $1 AND b.beziehungsart='hat';"; // ORDER? $gmlp=$rowp["gml_id"]; // Person $v = array($gmlp); $resa = pg_prepare("", $sqla); $resa = pg_execute("", $v); if (!$resa) { echo "\n\t

Fehler bei Adressen

\n"; if ($debug > 2) {echo "

SQL=
".$sqla."
$1=gml= '".$gmlp."'

";} } $j=0; while($rowa = pg_fetch_array($resa)) { $gmla=$rowa["gml_id"]; $plz=$rowa["plz"]; // integer if($plz == 0) { $plz=""; } else { $plz=str_pad($plz, 5, "0", STR_PAD_LEFT); } $ort=htmlentities($rowa["ort_post"], ENT_QUOTES, "UTF-8"); $str=htmlentities($rowa["strasse"], ENT_QUOTES, "UTF-8"); $hsnr=$rowa["hausnummer"]; $land=htmlentities($rowa["bestimmungsland"], ENT_QUOTES, "UTF-8"); echo "\n\n\t"; // Spalte 1 echo "\n\t"; echo "\n\t\n"; $j++; } pg_free_result($resa); } // End if // 'keine Adresse' kann vorkommen, z.B. "Deutsche Telekom AG" $i++; // cnt Person // als eigene Tab-Zeile? // 'Anteil' ist der Anteil der Berechtigten in Bruchteilen (Par. 47 GBO) an einem gemeinschaftlichen Eigentum (Grundstück oder Recht). if ($rown["zaehler"] != "") { echo "\n\n\t"; // Sp. 1 echo "\n\t"; echo "\n\t\n"; // Sp. 3 } } // End Loop Person if ($i == 0) { // kommt vor hinter Zeile Erbengemeinschaft, dann kein Fehler if ($debug > 0) { echo "\n

Rechtsgemeinschaft = '".$rechtsg."'

"; if ($rechtsg != 9999) { echo "\n

Keine Person zur Namensnummer ".$namnum."

"; } //if ($debug > 2) {echo "\n

SQL=
".$sqlp."
$1=gml(NamNum)= '".$gmlnn."'

";} } echo "\n\t\n"; } $n++; // cnt NamNum } // End Loop NamNum echo "\n
\n\t\t

"; // Sp. 1 // VOR die Tabelle: "Eigentümer" $namnum=kurz_namnr($rown["lfd"]); echo $namnum." "; if ($idanzeige) {linkgml($gkz, $rown["gml_id"], "Namensnummer");} echo "

\n\t
"; // Sp. 2 $rechtsg=$rown["adr"]; if ($rechtsg != "" ) { if ($rechtsg == 9999) { // sonstiges echo "\n\t\t

".htmlentities($rown["beschr"], ENT_QUOTES, "UTF-8")."

"; } else { echo "\n\t\t

".htmlentities(rechtsgemeinschaft($rown["adr"]), ENT_QUOTES, "UTF-8")."

"; } } //if ($rown["anlass"] > 0 ) {echo "

Anlass=".$rown["anlass"]."

";} // TEST: // Schleife Ebene 2: andere Namensnummern // Beziehung 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. // Die Rechtsgemeinschaft selbst steht unter einer eigenen AX_Namensnummer, // die zu allen Namensnummern der Rechtsgemeinschaft eine Relation besitzt. // Die Relation 'Namensnummer' hat Vorgänger 'Namensnummer' gibt Auskunft darüber, // aus welchen Namensnummern die aktuelle entstanden ist. // Schleife 2: P e r s o n // Beziehung: ax_person Fehler bei Person

\n"; if ($debug > 2) {echo "

SQL=
".$sqlp."
$1=gml= '".$gmlnn."'

";} } $i=0; // cnt Person while($rowp = pg_fetch_array($resp)) { $diePerson=""; if ($rowp["akademischergrad"] <> "") {$diePerson=$rowp["akademischergrad"]." ";} $diePerson.=$rowp["nachnameoderfirma"]; if ($rowp["vorname"] <> "") {$diePerson.=", ".$rowp["vorname"];} if ($rowp["namensbestandteil"] <> "") {$diePerson.=". ".$rowp["namensbestandteil"];} if ($rowp["geburtsdatum"] <> "") {$diePerson.=", geb. ".$rowp["geburtsdatum"];} if ($rowp["geburtsname"] <> "") {$diePerson.=", geb. ".$rowp["geburtsname"];} $diePerson=htmlentities($diePerson, ENT_QUOTES, "UTF-8"); // Umlaute // Spalte 1 enthält die Namensnummer, nur in Zeile 0 if ($i > 0) { echo "\n
 "; } // Spalte 2 = Angaben $eiartkey=$rown["eigentuemerart"]; $eiart=eigentuemerart($eiartkey); echo "\n\t\t

".$diePerson."

\n\t
\n\t\t"; echo "\n\t
 

"; //Spalte 2 if ($str.$hsnr != "") { echo $str." ".$hsnr."
"; } if ($plz.$ort != "") { echo $plz." ".$ort; } if ($land != "" and $land != "DEUTSCHLAND") { echo ", ".$land; } echo "

"; // Spalte 3 if ($idanzeige) { echo ""; } else { echo " "; } echo "
 

".$rown["zaehler"]."/".$rown["nenner"]." Anteil

 
 
\n"; if ($n == 0) { if ($debug > 0) {echo "

keine Namensnummern zum Blatt

";} if ($debug > 2) {echo "

Namensnummern: SQL=
".$sqln."
$1=gml(Blatt)= '".$gmlid."'

";} } pg_free_result($resn); return $n; } // End Function eigentuemer // ** Functions zum E n t s c h l u e s s e l n ** // Entschluesslung ax_person.anrede function anrede($key) { switch ($key) { case 1000: $wert = "Frau"; break; case 2000: $wert = "Herr"; break; case 3000: $wert = "Firma"; break; default: $wert = ""; break; } return $wert; } // Entschluesslung AX_Namensnummer.artDerRechtsgemeinschaft function rechtsgemeinschaft($key) { switch ($key) { case 1000: $wert = "Erbengemeinschaft"; break; case 2000: $wert = "Gütergemeinschaft"; break; case 3000: $wert = "BGB-Gesellschaft"; break; case 9999: $wert = "Sonstiges"; break; // dann: beschriebDerRechtsgemeinschaft default: $wert = ""; break; } return $wert; } // Entschluesslung AX_Namensnummer.eigentuemerart function eigentuemerart($key) { // Die häufigsten Werte direkt aus den Programmcode liefern, ggf. angepasst. // Für seltene Werte in der Datenbank nachschlagen. // Schlüsseltabelle dazu ist vorhanden seit 2014-01-22. // Hier Verwendung für Text zum Link. // Für korrekte Wiedergabe der amtlichen Werte einen Join auf Tabelle verwenden statt dieser Function. global $debug; switch ($key) { case 1000: $wert = "Natürliche Person"; break; // singular fuer Link-Text case 2000: $wert = "Juristische Person"; break; // singl. case 3000: $wert = "Körperschaft"; break; // singl. case 4000: $wert = "Kirchliches Eigentum"; break; case 4100: $wert = "Evangelische Kirche"; break; case 4200: $wert = "Katholische Kirche"; break; case 5100: $wert = "Bundesrepublik Deutschland"; break; case 5400: $wert = "Kreis"; break; case 5500: $wert = "Gemeinde"; break; case 5920: $wert = "Land"; break; // "Eigenes Bundesland" case "": $wert = "Person"; break; // falls (noch) nicht gefuellt default: // Datenbank-Abfrage $sql="SELECT bezeichner FROM ax_namensnummer_eigentuemerart WHERE wert= $1 ;"; $v=array($key); $res=pg_prepare("", $sql); $res=pg_execute("", $v); if ($res) { $row=pg_fetch_array($res); $wert=htmlentities($row["bezeichner"], ENT_QUOTES, "UTF-8"); if ($wert == "") {$wert="** Eigentümerart '".$key."' nicht gefunden **";} } else { echo "\n\t

Fehler bei DB-Zugriff auf Eigentümerart.

\n"; $wert="** Unbekannte Eigentümerart '".$key."' **"; } pg_free_result($res); break; } return $wert; } // Entschluesslung ax_buchungsblatt.blattart function blattart($key) { switch ($key) { case 1000: $wert = "Grundbuchblatt"; break; // Ein Grundbuchblatt ist ein Buchungsblatt, das die Buchung im Grundbuch enthält. case 2000: $wert = "Katasterblatt"; break; // Ein Katasterblatt ist ein Buchungsblatt, das die Buchung im Liegenschaftskataster enthält. case 3000: $wert = "Pseudoblatt"; break; // Ein Pseudoblatt ist ein Buchungsblatt, das die Buchung, die bereits vor Eintrag im Grundbuch Rechtskraft erlangt hat, enthält // (z.B. Übernahme von Flurbereinigungsverfahren, Umlegungsverfahren). case 5000: $wert = "Fiktives Blatt"; break; // Das fiktive Blatt enthält die aufgeteilten Grundstücke und Rechte als Ganzes. // Es bildet um die Miteigentumsanteile eine fachliche Klammer. default: $wert = "** Unbekannter Wert '".$key."'"; break; } return $wert; } // Entschluesslung ax_dienststelle.stellenart function dienststellenart($key) { switch ($key) { case 1000: $wert = "Grundbuchamt"; break; case 1100: $wert = "Katasteramt"; break; case 1200: $wert = "Finanzamt"; break; case 1300: $wert = "Flurbereinigungsbehörde"; break; case 1400: $wert = "Forstamt"; break; case 1500: $wert = "Wasserwirtschaftsamt"; break; case 1600: $wert = "Straßenbauamt"; break; case 1700: $wert = "Gemeindeamt"; break; case 1900: $wert = "Kreis- oder Stadtverwaltung"; break; case 2000: $wert = "Wasser- und Bodenverband"; break; case 2100: $wert = "Umlegungsstelle"; break; case 2200: $wert = "Landesvermessungsverwaltung"; break; case 2300: $wert = "ÖbVI"; break; case 2400: $wert = "Bundeseisenbahnvermögen"; break; case 2500: $wert = "Landwirtschaftskammer"; break; default: $wert = "** Unbekannter Wert '".$key."'"; break; } return $wert; } ?>