source: trunk/info/info/alkisn/alkisnamstruk.php @ 431

Revision 430, 11.9 KB checked in by frank.jaeger, 22 months ago (diff)

ALKIS-Auskunft angepasst an PHP 8

Line 
1<?php
2/*      alkisnamstruk.php
3
4        ALKIS-Auskunft
5        Author: Frank JÀger, Kommunales Rechenzentrum Minden-Ravensberg/Lippe (Lemgo)
6
7        Namens- und Adressdaten fÃŒr einen EigentÃŒmer aus ALKIS PostNAS
8
9        Version:
10        2016-02-24 Version fÃŒr norGIS-ALKIS-Import
11        ...
12        2020-02-20 Authentifizierung ausgelagert in Function darf_ich()
13        2020-12-03 function selbstverlinkung() statt $_SERVER['PHP_SELF']
14        2020-12-15 Input-Validation und Strict Comparisation (===)
15        2021-12-09 Neue Parameter: $katAmtMix (Kataster-Amt-Mix), $PrntBtn (Drucken-SchaltflÀche). Gruppenwechsel Bezirk.
16        2022-01-13 Neue Functions LnkStf(), DsKy()
17        2022-07-05 PHP 8.1: Connection verwenden bei "pg_prepare" und "pg_execute", keine NULL-Werte in String-Functions verwenden
18*/
19ini_set("session.cookie_httponly", 1);
20session_start();
21$multiadress="n"; $showkey="n"; $nodebug=""; // Var. aus Parameter initalisieren
22$cntget = extract($_GET); // Parameter in Variable umwandeln
23
24// strikte Validierung aller Parameter
25if (isset($gmlid)) {
26        if (!preg_match('#^[0-9A-Za-z]{16}$#', $gmlid)) {die("Eingabefehler gmlid");}
27} else {
28        die("Fehlender Parameter");
29}
30if (isset($gkz)) {
31        if (!preg_match('#^[0-9]{3}$#', $gkz)) {die("Eingabefehler gkz");}
32} else {
33        die("Fehlender Parameter");
34}
35if (!preg_match('#^[j|n]{0,1}$#', $showkey)) {die ("Eingabefehler showkey");}
36if ($showkey === "j") {$showkey=true;} else {$showkey=false;}
37if (!preg_match('#^[j|n]{0,1}$#', $multiadress)) {die ("Eingabefehler multiadress");}
38if (!preg_match('#^j{0,1}$#', $nodebug)) {die("Eingabefehler nodebug");}
39
40require_once("alkis_conf_location.php");
41include("alkisfkt.php");
42?>
43<!doctype html>
44<html lang="de">
45<head>
46        <meta charset="utf-8">
47        <meta name="viewport" content="width=device-width, initial-scale=1.0">
48        <title>ALKIS Person und Adresse</title>
49        <link rel="stylesheet" type="text/css" href="alkisauszug.css">
50        <link rel="shortcut icon" type="image/x-icon" href="ico/Eigentuemer_2.ico">
51        <script type="text/javascript">
52                function ALKISexport() {
53                        window.open(<?php echo "'alkisexport.php?gkz=".$gkz."&tabtyp=person&gmlid=".$gmlid."'"; ?>);
54                }
55        </script>
56</head>
57<body>
58<?php
59$erlaubnis = darf_ich(); if ($erlaubnis === 0) { die('<p class="stop1">Abbruch</p></body>'); }
60$dbg=$debug;
61if ($nodebug === "j") {$dbg=0;}
62
63echo "<p class='balken nakennz'>ALKIS Name id=".$gmlid."&nbsp;</p>\n"
64."\n<h2><img src='ico/Eigentuemer.png' width='16' height='16' alt=''> Person</h2>";
65$con = pg_connect($dbconn." options='--application_name=ALKIS-Auskunft_alkisnamstruk.php'");
66if (!$con) "\n<p class='err'>Fehler beim Verbinden der DB</p>";
67
68$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,
69coalesce(p.namensbestandteil, '') AS nbest, coalesce(p.akademischergrad, '') AS aka, a.beschreibung AS anrv
70FROM ax_person p LEFT JOIN ax_anrede_person a ON p.anrede = a.wert WHERE gml_id= $1 AND p.endet IS NULL;";
71
72$v = array($gmlid);
73$res = pg_prepare($con, "", $sql);
74$res = pg_execute($con, "", $v);
75
76if (!$res) {
77        echo "\n<p class='err'>Fehler bei Zugriff auf Namensnummer</p>";
78        if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sql), ENT_QUOTES, "UTF-8")."</p>";}
79}
80if ($dbg > 0) {
81        $zeianz=pg_num_rows($res);
82        if ($zeianz > 1){
83                echo "\n<p class='err'>Die Abfrage liefert mehr als eine Person!</p>";
84                if ($dbg > 2) {echo "\n<p class='dbg'>SQL=<br>".htmlentities(str_replace("$1","'".$gmlid."'",$sql), ENT_QUOTES, "UTF-8")."</p>";}
85        }
86}
87if ($row = pg_fetch_assoc($res)) {
88        $vor=htmlentities($row["vorn"], ENT_QUOTES, "UTF-8");
89        $nam=htmlentities($row["nachnameoderfirma"], ENT_QUOTES, "UTF-8");
90        $geb=htmlentities($row["geburts"], ENT_QUOTES, "UTF-8");
91        $anrk=$row["anrede"]; // Key
92        $anr=$row["anrv"]; // Value
93        $nbest=htmlentities($row["nbest"], ENT_QUOTES, "UTF-8");
94        $aka=htmlentities($row["aka"], ENT_QUOTES, "UTF-8");
95
96        echo "<table>"
97                ."\n\t<tr><td class='nhd'>Anrede:</td><td class='nam'>".DsKy($anrk, '* der Anrede-Kennung').$anr."</td></tr>"
98                ."\n\t<tr><td class='nhd'>Nachname oder Firma:</td><td class='nam'>".$nam."</td></tr>"
99                ."\n\t<tr><td class='nhd'>Vorname:</td><td class='nam'>".$vor."&nbsp;</td></tr>"
100                ."\n\t<tr><td class='nhd'>Geburtsname:</td><td class='nam'>".$geb."&nbsp;</td></tr>"
101                ."\n\t<tr><td class='nhd'>Geburtsdatum:</td><td class='nam'>".$row["geburtsdatum"]."&nbsp;</td></tr>"
102                ."\n\t<tr><td class='nhd'>Namensbestandteil:</td><td class='nam'>".$nbest."&nbsp;</td></tr>"
103                ."\n\t<tr><td class='nhd'>akademischer Grad:</td><td class='nam'>".$aka."&nbsp;</td></tr>"
104        ."\n</table>\n<hr>";
105
106        // A d r e s s e
107        if ($multiadress === "j") {$plural="n";} else {$plural="";}
108        echo "\n\n<h3><img src='ico/Strasse_mit_Haus.png' width='16' height='16' alt=''> Adresse".$plural."</h3>";
109        // Es können redundante Adressen vorhanden sein, z.B. aus Migration, temporÀr aus LBESAS.
110        // Im Normalfall nur die "letzte" davon anzeigen. Auf Wunsch alle anzeigen, dazu den Anlass und das Datum um das zu bewerten.
111        $sqla ="SELECT a.gml_id, w.value AS anltxt, a.anlass, to_char(cast(a.beginnt AS date),'DD.MM.YYYY') AS datum, a.ort_post, a.postleitzahlpostzustellung AS plz, a.strasse, a.hausnummer, a.bestimmungsland "
112        ."FROM ax_anschrift a JOIN ax_person p ON a.gml_id=ANY(p.hat) "
113        ."LEFT JOIN aa_anlassart w ON w.id = ANY(a.anlass) "
114        ."WHERE p.gml_id= $1 AND a.endet IS NULL AND p.endet IS NULL ORDER BY a.beginnt DESC ;";
115
116        $v = array($gmlid);
117        $resa = pg_prepare($con, "", $sqla);
118        $resa = pg_execute($con, "", $v);
119        if (!$resa) {
120                echo "\n<p class='err'>Fehler bei Adressen</p>";
121                if ($dbg > 2) {echo "\n<p class='err'>SQL=<br>". str_replace("$1", "'".$gmlid."'", $sqla)."</p>";}
122        }
123
124        $j=0;
125        // Parameter $multiadress = j zeigt ALLE Adressen an
126        while($rowa = pg_fetch_assoc($resa)) {
127                $j++;
128                if ($multiadress === "j" OR $j === 1) {
129                        $gmla=$rowa["gml_id"];
130                        $plz=$rowa["plz"];
131                        $ort=htmlentities($rowa["ort_post"], ENT_QUOTES, "UTF-8");
132                        $str=htmlentities($rowa["strasse"], ENT_QUOTES, "UTF-8");
133                        $hsnr=$rowa["hausnummer"];
134                        $land=htmlentities($rowa["bestimmungsland"], ENT_QUOTES, "UTF-8");
135                        $anlass=trim($rowa["anlass"], "{}"); // Key
136                        $anltxt=$rowa["anltxt"]; // Value
137                        $datum=$rowa["datum"];
138                        echo "<table>\n";
139                                if ($multiadress === "j" OR $showkey) {
140                                        if ($dbg > 0) { // nur Entw.: Sortierung gml_id vs. beginnt?
141                                                echo "\t<tr><td class='dbg'>gml_id:</td><td class='dbg'>".$rowa["gml_id"]."</td></tr>\n";
142                                        }
143                                        echo "\t<tr><td class='nhd'>Datum:</td><td class='nam'>".$datum."</td></tr>\n"
144                                        ."\t<tr><td class='nhd'>Anlass:</td><td class='nam'>".DsKy($anlass, 'Anlass-*').$anltxt."</td></tr>\n";
145                                }
146                                echo "\t<tr><td class='nhd'>PLZ:</td><td class='nam'>".$plz."</td></tr>\n"
147                                ."\t<tr><td class='nhd'>Ort:</td><td class='nam'>".$ort."</td></tr>\n"
148                                ."\t<tr><td class='nhd'>Strasse:</td><td class='nam'>".$str."</td></tr>\n"
149                                ."\t<tr><td class='nhd'>Hausnummer:</td><td class='nam'>".$hsnr."</td></tr>\n"
150                                ."\t<tr><td class='nhd'>Land:</td><td class='nam'>".$land."</td></tr>\n"
151                        ."\n</table>\n<br>";
152
153                        // Name und Adresse Kompakt (im Rahmen) - Alles was man fÃŒr ein Anschreiben braucht
154                        echo "\n<img src='ico/Namen.png' width='16' height='16' alt='Brief' title='Anschrift'>"
155                        ."\n<div class='adr' title='Anschrift'>\n\t".$anr." ".$aka." ".$vor." ".$nbest." ".$nam."<br>"
156                        ."\n\t".$str." ".$hsnr."<br>"
157                        ."\n\t".$plz." ".$ort."\n</div>";
158                }
159        }
160        pg_free_result($resa);
161        if ($j === 0) {
162                echo "\n<p class='err'>Keine Adressen.</p>";
163        } elseif ($j > 1) {
164                echo "\n\t\t<p class='nwlink noprint'>"
165                ."\n\t\t\t<a href='".selbstverlinkung(). "?gkz=".$gkz."&amp;gmlid=".$gmlid.LnkStf();
166                if ($multiadress === "j") {
167                        echo "&amp;multiadress=n' title='mehrfache Adressen unterdr&uuml;cken'>erste Adresse ";
168                } else {
169                        echo "&amp;multiadress=j' title='Adressen ggf. mehrfach vorhanden'>alle Adressen ";
170                }
171                echo "\n\t\t\t</a>"
172                ."\n\t\t</p>";
173        }
174
175        // G R U N D B U C H
176        echo "\n<hr>\n<h3><img src='ico/Grundbuch_zu.png' width='16' height='16' alt=''> Grundb&uuml;cher</h3>";
177        // person <benennt< namensnummer >istBestandteilVon>                Buchungsblatt
178        //                               >bestehtAusRechtsverhaeltnissenZu> namensnummer   (Nebenzweig/SonderfÀlle?)
179
180        $sqlg ="SELECT n.gml_id AS gml_n, n.laufendenummernachdin1421 AS lfd, n.zaehler, n.nenner, g.gml_id AS gml_g, g.bezirk, g.buchungsblattnummermitbuchstabenerweiterung as nr, g.blattart, wb.beschreibung AS blattartv, b.bezeichnung AS beznam "
181        ."FROM ax_person p JOIN ax_namensnummer n ON p.gml_id=n.benennt "
182        ."JOIN ax_buchungsblatt g ON g.gml_id=n.istbestandteilvon "
183        ."LEFT JOIN ax_buchungsblattbezirk b ON g.land=b.land AND g.bezirk=b.bezirk ".UnqKatAmt("g","b")
184        ."LEFT JOIN ax_blattart_buchungsblatt wb ON g.blattart = wb.wert "
185        ."WHERE p.gml_id= $1 AND p.endet IS NULL AND n.endet IS NULL AND b.endet IS NULL "
186        ."ORDER BY b.bezeichnung, g.buchungsblattnummermitbuchstabenerweiterung, n.laufendenummernachdin1421;";
187
188        $v = array($gmlid);
189        $resg = pg_prepare($con, "", $sqlg);
190        $resg = pg_execute($con, "", $v);
191
192        if (!$resg) {
193                echo "\n<p class='err'>Fehler bei Grundbuch</p>";
194                if ($dbg > 2) {
195                        echo "\n<p class='err'>SQL=<br>".htmlentities(str_replace("$1", "'".$gmlid."'", $sqlg ), ENT_QUOTES, "UTF-8")."</p>";
196                }
197        }
198        echo "<table class='eig'>"
199        ."\n<tr>"
200                ."\n\t<td class='heads'>Bezirk<img src='ico/sort.png' width='10' height='10' alt='' title='Sortierung'></td>"
201                ."\n\t<td class='head'>Blattart</td>"
202                ."\n\t<td class='heads'>Blatt<img src='ico/sort.png' width='10' height='10' alt='' title='Sortierung'></td>"
203                ."\n\t<td class='heads'>Namensnummer<img src='ico/sort.png' width='10' height='10' alt='' title='Sortierung'></td>"
204                ."\n\t<td class='head'>Anteil</td>"
205                ."\n\t<td class='head nwlink noprint' title='Verlinkung zu anderen Nachweis-Arten und verbundenen Objekten'>weitere Auskunft</td>"
206        ."\n</tr>";
207
208        $i=0;
209        $zpaar=false;
210        $gwbeznam='';
211        while($rowg = pg_fetch_assoc($resg)) {
212                $gmln=$rowg["gml_n"];
213                $gmlg=$rowg["gml_g"];
214                $namnum=kurz_namnr($rowg["lfd"]);
215                $zae=$rowg["zaehler"];
216                $blattkey=$rowg["blattart"]; // Key
217                $blattart=$rowg["blattartv"]; // Value
218                if ($zpaar) {$trclass='paa';} else {$trclass='unp';}
219                $beznam=$rowg["beznam"];
220                $zpaar=!$zpaar;
221                echo "\n<tr class='".$trclass."'>"
222                        ."\n\t<td>".DsKy($rowg["bezirk"], 'Grundbuch-Bezirks-*');
223                        if ($gwbeznam != $beznam){
224                                echo "<b>".$beznam."</b>";
225                                $gwbeznam=$beznam;
226                        } else {
227                                echo $beznam;
228                        }
229                        echo "</td>";
230
231                        echo "\n\t<td>".DsKy($blattkey, 'Blattart-*').$blattart."</td>";
232                        echo "\n\t<td><span class='wichtig'>".$rowg["nr"]."</span></td>";// Blatt
233
234                        echo "\n\t<td>"; // Namensnummer
235                        if ($namnum == "") {
236                                echo "&nbsp;";
237                        } else {
238                                echo $namnum;
239                        }
240                        echo "</td>";
241
242                        echo "\n\t<td>"; // Anteil
243                        if ($zae == '') {
244                                echo "&nbsp;";
245                        } else {
246                                echo $zae."/".$rowg["nenner"]." Anteil";
247                        }
248                        echo "</td>"
249                        ."\n\t<td>"
250                        ."\n\t\t<p class='nwlink noprint'>"
251                                ."\n\t\t\t<a href='alkisbestnw.php?gkz=".$gkz."&amp;gmlid=".$gmlg.LnkStf()."' title='Bestandsnachweis'>".$blattart
252                                ."\n\t\t\t<img src='ico/GBBlatt_link.png' width='16' height='16' alt=''></a>"
253                        ."\n\t\t</p>"
254                        ."\n\t</td>"
255                ."\n</tr>";
256                // +++ >bestehtAusRechtsverhaeltnissenZu> namensnummer ?
257                // z.B. eine Namennummer "Erbengemeinschaft" zeigt auf Namensnummern mit EigentÃŒmern
258                $i++;
259        }
260        pg_free_result($resg);
261        echo "</table>";
262        if ($i === 0) {echo "\n<p class='err'>Kein Grundbuch.</p>";}
263} else {
264        echo "\n\t<p class='err'>Fehler! Kein Treffer f&uuml;r Person".$gmlid."</p>\n";
265}
266pg_free_result($res);
267
268echo "\n<div class='buttonbereich noprint'>\n<hr>"
269        ."\n\t<a title='zur&uuml;ck' href='javascript:history.back()'><img src='ico/zurueck.png' width='16' height='16' alt='zur&uuml;ck'></a>&nbsp;";
270if ($PrntBtn==true){echo "\n\t<a title='Drucken' href='javascript:window.print()'><img src='ico/print.png' width='16' height='16' alt='Drucken'></a>&nbsp;";}
271echo "\n\t<a title='Export als CSV' href='javascript:ALKISexport()'><img src='ico/download.png' width='16' height='16' alt='Export'></a>&nbsp;"
272."\n</div>";
273
274footer($gmlid, selbstverlinkung()."?", "");
275?>
276
277</body>
278</html>
Note: See TracBrowser for help on using the repository browser.