#!/usr/bin/perl ########################################################################### # Programm Name: # Autor: Thomas Schaaff # Erstellt am: <19.04.13> Version: <1.16> # # Programmaufruf: # usage: # wer Parameter: Name, Vorname(opt), Kürzel(opt) oder tln_nr ########################################################################### # # Programmbeschreibung: Perl Skript zur Datenbankabfrage nach Personendaten # # Dieses Programm ist urheberrechtlich geschuetzt und kann unter den selben # Bedingungen wie Perl verbreitet werden. # Copyright 2013 Thomas Schaaff (c) # ########################################################################### use lib "/home/thomas/bin/"; no lib "."; use strict; use warnings; use Ias; use encoding ':locale'; # deutsche Sonderzeichen # --------------------- Verbindung ------------------------------ my $dbh = Ias::connect(); #---------------------- Parameter ------------------------------- my ($name, $name_like, $name_genau, $vorname, $kurs, $erg, $arg, @was); @was='wer'; my @titel = qw(Privatdressen Geschäftadressen Kurse Buchkonten); my @titel_sing = qw(Privatdresse Geschäftadresse Kurs Buchkonto); # Unterschriften der einzelnen Abfragen if (!@ARGV) { my $eingabe_ref = Ias::eingabe(\@was); # Referenz an IAS::eingabe übergeben (was wird gefragt) @ARGV = @$eingabe_ref; # Referenz von IAS::eingabe erhalten } if(@ARGV > 3) { die "Programm $0 verlangt max. 3 Parameter: Nachname, Vorname, Kurs\n"; } elsif(@ARGV == 3) # 3 Paramter { $name = $ARGV[0]; $vorname = $ARGV[1]; $kurs = $ARGV[2]; $erg = $name . ", ". $vorname .", ". $kurs; # zuammengesetzte Ergebnisse } elsif(@ARGV == 2) # 2 Parameter { $name = $ARGV[0]; $vorname = $ARGV[1]; $erg = $name . ", ". $vorname ; } elsif(@ARGV == 1) # 1 Parameter { chomp($name = $ARGV[0]); if ($name =~ /#$/) # Raute am Ende einen Namens such nur nach vollständigem Namen { substr($name,-1) = ""; $name_genau = $name; } $name_like = "%".$name."%"; $erg = $name; } # --------------------- Eingabe prüfen ------------------------- my $wer_1 = $dbh-> selectrow_array ("select count(*) from S_whois_3 where Nachname = ? and Vorname = ? and Kuerzel = ?", undef, $name, $vorname, $kurs); # Nachnname, Vorname, Kürzel my $wer_2 = $dbh-> selectrow_array ("select count(*) from S_whois_3 where Nachname = ? and Vorname = ? and Kuerzel = ?", undef, $vorname, $name, $kurs); # dto aber Vorname, Nachname, Kürzel my $wer_3 = $dbh-> selectrow_array ("select count(*) from tln where Nachname = ? and Vorname = ?", undef, $name, $vorname); # Nachname, Vorname my $wer_4 = $dbh-> selectrow_array ("select count(*) from tln where Nachname = ? and Vorname = ?", undef, $vorname, $name); # Vorname, Nachname my $wer_5 = $dbh-> selectrow_array ("select count(*) from S_whois_3 where Nachname = ? and Kuerzel = ?", undef, $name, $vorname); # Nachnname, Kürzel my $wer_6 = $dbh-> selectrow_array ("select count(*) from S_whois_3 where Nachname = ? and Kuerzel = ?", undef, $vorname, $name); # Kürzel, Nachname my $wer_7 = $dbh->selectrow_array ("select count(*) from tln where Nachname = ? ", undef,$name_genau); # Name (exakt) my $wer_8 = $dbh->selectrow_array ("select count(*) from tln where Nachname like ?", undef,$name_like); # Name oder Teil eines Namens my $wer_9 = $dbh->selectrow_array ("select count(*) from tln where TLN_NR = ?", undef,$name); # Teilnehmernummer # ---------------------- Abfrage auswählen ----------------------- SWITCH: { if($wer_1) { &wer_kurs_1($wer_1); last SWITCH; } if($wer_2) { ($name,$vorname) = ($vorname, $name); &wer_kurs_1($wer_1); last SWITCH; } if($wer_3 and @ARGV < 3) { &wer_kurs_2($wer_3); last SWITCH; } if($wer_4 and @ARGV < 3) { ($name,$vorname) = ($vorname, $name); &wer_kurs_2($wer_3); last SWITCH; } if($wer_5 and @ARGV < 3) { $kurs = $vorname; &wer_kurs_6($wer_5); last SWITCH; } if($wer_6 and @ARGV < 3) { $kurs = $vorname; ($kurs, $name) = ($name,$kurs); &wer_kurs_6($wer_6); last SWITCH; } if($wer_7 and @ARGV < 3) { &wer_kurs_7($wer_7); last SWITCH; } if($wer_8 and @ARGV < 3) { &wer_kurs_4($wer_8); last SWITCH; } if($wer_9 and @ARGV < 3) { &wer_kurs_5($wer_9); last SWITCH; } print "Kein Ergebnis für \'$erg\' gefunden!!\n"; print "Probieren Sie \'such\' Vorname oder \'such\' Nachname.\n"; } #---------------------- Abfragen -------------------------------- sub wer_kurs_1 { my $pfad = '/home/thomas/bin/'; my $wer; open (FRAGE,'<',$pfad ."wer_alle.sql") || die "Oops: $!\n"; while () { chomp($wer .= $_); # sql Abfragen aus Datei auslesen } close(FRAGE); my @sql = split /:/,"$wer"; # einzelne Abfragen separieren #---------------------- Ergebnisprüfung ------------- my $erg_1= @_; my $erg_2= $dbh->selectrow_array ("select count(*) from tln where Nachname = ? and Vorname = ? and multi_adr=1", undef,$name, $vorname); # zweite Adresse my $erg_3= $dbh->selectrow_array ("select count(*) from S_whois_3 where Nachname = ? and Vorname = ? and Kuerzel=?", undef,$name, $vorname,$kurs); # Abfrage ohne Zahlungskontrolle my $erg_4= $dbh->selectrow_array ("select count(*) from S_whois_2 where Nachname = ? and Vorname = ? and Kuerzel =?", undef,$name, $vorname,$kurs); # Abfrage mit Zahlungskontrolle my @anzahl = ($erg_1, $erg_2,$erg_3, $erg_4); #---------------------- Ergebnisse ---------------------------- for (my $i = 0; $i < @anzahl; $i++) # Schleife durch alle Abfragen { if($anzahl[$i]) # nur wenn Ergebnis vorhanden { my $sth = $dbh->prepare($sql[$i]); $sth->bind_param(1, $name); $sth->bind_param(2, $vorname); $sth->bind_param(3, $kurs); $sth->execute(); my $breite_ref = $sth->{'mysql_max_length'}; my @title = @{$sth->{NAME_uc}}; my @zahl = @{$sth->{TYPE}}; # Datentypen ermitteln #-------------------- Titelzeile ausgeben --------------------- my $werte = Ias::rahmen(\@$breite_ref,\@title,\@zahl); # 3 Referenzen an Ias::rahmen übergeben # 2 Referenzen von Ias::rahmen erhalten #-------------------- Werte ausgeben -------------------------- my ($anzahl,$yyyy,$mm,$dd); while (my @row =$sth->fetchrow_array) # zeilenweise ausgeben { foreach (@row) { $_ = 0 unless defined $_; # Null durch 0 ersetzen } for (my $i = 0; $i < @zahl; $i++) # Datentypen prüfen { if ($zahl[$i] == 9) # Datum { ($yyyy, $mm, $dd) = ($row[$i] =~ /(\d+)-(\d+)-(\d+)/); # Elemente extrahieren $row[$i] = join ".",$dd,$mm,$yyyy; # Elemente neu zusammensetzen } } my $wert = @$werte[0]; # printf-formel ist erster Wert aus Ias::rahmen printf "$wert",@row; ++$anzahl; } my $line = @$werte[1]; # Tabellenbreite ist zweiter Wert aus Ias::rahmen print "-" x $line, "\n"; # Trennline in Tabellenbreite if ($anzahl == 1) { print "$anzahl $titel_sing[$i]\n\n"; # Unterschrift der Abfrage singular } else { print "$anzahl $titel[$i]\n\n"; # Unterschrift der Abfrage plural } } } } #--------------------------Abfrage---------------------------------- sub wer_kurs_2 { my $pfad = '/home/thomas/bin/'; my $wer; open (FRAGE,'<',$pfad ."wer_name_vorname.sql") || die "Oops: $!\n"; while () { chomp($wer .= $_); # sql Abfragen aus Datei auslesen } close(FRAGE); my @sql = split /:/,"$wer"; # einzelne Abfragen separieren #---------------------- Ergebnisprüfung ------------- my $erg_1= @_; my $erg_2= $dbh->selectrow_array ("select count(*) from tln where multi_adr=1 and Nachname = ? and Vorname = ?", undef,$name, $vorname); my $erg_3= $dbh->selectrow_array ("select count(*) from S_whois_3 where Nachname = ? and Vorname = ?", undef,$name, $vorname); my $erg_4= $dbh->selectrow_array ("select count(*) from S_whois_2 where Nachname = ? and Vorname = ?", undef,$name, $vorname); my @anzahl = ($erg_1, $erg_2,$erg_3, $erg_4); #---------------------- Ergebnisse ---------------------------- for (my $i = 0; $i < @anzahl; $i++) # Schleife durch alle Abfragen { if($anzahl[$i]) # nur wenn Ergebnis vorhanden { my $sth = $dbh->prepare($sql[$i]); $sth->bind_param( 1, $name); $sth->bind_param(2, $vorname); $sth->execute(); my $breite_ref = $sth->{'mysql_max_length'}; my @title = @{$sth->{NAME_uc}}; my @zahl = @{$sth->{TYPE}}; # Datentypen ermitteln #-------------------- Titelzeile ausgeben --------------------- my $werte = Ias::rahmen(\@$breite_ref,\@title,\@zahl); # 3 Referenzen an Ias::rahmen übergeben # 2 Referenzen von Ias::rahmen erhalten #-------------------- Werte ausgeben -------------------------- my ($anzahl,$yyyy,$mm,$dd); while (my @row =$sth->fetchrow_array) # zeilenweise ausgeben { foreach (@row) { $_ = 0 unless defined $_; # Null durch 0 ersetzen } for (my $i = 0; $i < @zahl; $i++) # Datentypen prüfen { if ($zahl[$i] == 9) # Datum { ($yyyy, $mm, $dd) = ($row[$i] =~ /(\d+)-(\d+)-(\d+)/); # Elemente extrahieren $row[$i] = join ".",$dd,$mm,$yyyy; # Elemente neu zusammensetzen } } my $wert = @$werte[0]; # printf-formel ist erster Wert aus Ias::rahmen printf "$wert",@row; ++$anzahl; } my $line = @$werte[1]; # Tabellenbreite ist zweiter Wert aus Ias::rahmen print "-" x $line, "\n"; # Trennline in Tabellenbreite if ($anzahl == 1) { print "$anzahl $titel_sing[$i]\n\n"; # Unterschrift der Abfrage singular } else { print "$anzahl $titel[$i]\n\n"; # Unterschrift der Abfrage plural } } } } #--------------------------Abfrage---------------------------------- sub wer_kurs_4 { my $pfad = '/home/thomas/bin/'; my $wer; open (FRAGE,'<',$pfad ."wer_name.sql") || die "Oops: $!\n"; while () { chomp($wer .= $_); # sql Abfragen aus Datei auslesen } close(FRAGE); my @sql = split /:/,"$wer"; # einzelne Abfragen separieren #---------------------- Ergebnisprüfung ------------- my $erg_1 = @_; my $erg_2 = $dbh->selectrow_array ("select count(*) from tln where multi_adr=1 and Nachname like ?", undef,$name_like); my $erg_3= $dbh->selectrow_array ("select count(*) from S_whois_3 where Nachname like ?", undef,$name_like); my $erg_4= $dbh->selectrow_array ("select count(*) from S_whois_2 where Nachname like ?", undef,$name_like); my @anzahl = ($erg_1, $erg_2,$erg_3, $erg_4); #---------------------- Ergebnisse ---------------------------- for (my $i = 0; $i < @anzahl; $i++) # Schleife durch alle Abfragen { if($anzahl[$i]) # nur wenn Ergebnis vorhanden { my $sth = $dbh->prepare($sql[$i]); $sth->bind_param( 1, $name_like); $sth->execute(); my $breite_ref = $sth->{'mysql_max_length'}; my @title = @{$sth->{NAME_uc}}; my @zahl = @{$sth->{TYPE}}; # Datentypen ermitteln #-------------------- Titelzeile ausgeben --------------------- my $werte = Ias::rahmen(\@$breite_ref,\@title,\@zahl); # 3 Referenzen an Ias::rahmen übergeben # 2 Referenzen von Ias::rahmen erhalten #-------------------- Werte ausgeben -------------------------- my ($anzahl, $yyyy, $mm, $dd); while (my @row =$sth->fetchrow_array) # zeilenweise ausgeben { foreach (@row) { $_ = 0 unless defined $_; # Null durch 0 ersetzen } for (my $i = 0; $i < @zahl; $i++) # Datentypen prüfen { if ($zahl[$i] == 9) # Datum { ($yyyy, $mm, $dd) = ($row[$i] =~ /(\d+)-(\d+)-(\d+)/); # Elemente extrahieren $row[$i] = join ".",$dd,$mm,$yyyy; # Elemente neu zusammensetzen } } my $wert = @$werte[0]; # printf-formel ist erster Wert aus Ias::rahmen printf "$wert",@row; ++$anzahl; } my $line = @$werte[1]; # Tabellenbreite ist zweiter Wert aus Ias::rahmen print "-" x $line, "\n"; # Trennline in Tabellenbreite if ($anzahl == 1) { print "$anzahl $titel_sing[$i]\n\n"; # Unterschrift der Abfrage singular } else { print "$anzahl $titel[$i]\n\n"; # Unterschrift der Abfrage plural } } } } #--------------------------Abfrage---------------------------------- sub wer_kurs_5 { my $pfad = '/home/thomas/bin/'; my $wer; open (FRAGE,'<',$pfad ."wer_tln_nr.sql") || die "Oops: $!\n"; while () { chomp($wer .= $_); # sql Abfragen aus Datei auslesen } close(FRAGE); my @sql = split /:/,"$wer"; # einzelne Abfragen separieren #---------------------- Ergebnisprüfung ------------- my $erg_1= @_; my $erg_2= $dbh->selectrow_array ("select count(*) from tln where multi_adr=1 and TLN_NR = ?", undef,$name); my $erg_3= $dbh->selectrow_array ("select count(*) from S_whois_3 where TLN_NR = ?", undef,$name); my $erg_4= $dbh->selectrow_array ("select count(*) from S_whois_2 where TLN_NR = ?", undef,$name); my @anzahl = ($erg_1, $erg_2,$erg_3, $erg_4); #---------------------- Ergebnisse ---------------------------- for (my $i = 0; $i < @anzahl; $i++) # Schleife durch alle Abfragen { if($anzahl[$i]) # nur wenn Ergebnis vorhanden { my $sth = $dbh->prepare($sql[$i]); $sth->bind_param( 1, $name); $sth->execute(); my $breite_ref = $sth->{'mysql_max_length'}; my @title = @{$sth->{NAME_uc}}; my @zahl = @{$sth->{TYPE}}; # Datentypen ermitteln #-------------------- Titelzeile ausgeben --------------------- my $werte = Ias::rahmen(\@$breite_ref,\@title,\@zahl); # 3 Referenzen an Ias::rahmen übergeben # 2 Referenzen von Ias::rahmen erhalten #-------------------- Werte ausgeben -------------------------- my ($anzahl, $yyyy, $mm, $dd); while (my @row =$sth->fetchrow_array) # zeilenweise ausgeben { foreach (@row) { $_ = 0 unless defined $_; # Null durch 0 ersetzen } for (my $i = 0; $i < @zahl; $i++) # Datentypen prüfen { if ($zahl[$i] == 9) # Datum { ($yyyy, $mm, $dd) = ($row[$i] =~ /(\d+)-(\d+)-(\d+)/); # Elemente extrahieren $row[$i] = join ".",$dd,$mm,$yyyy; # Elemente neu zusammensetzen } } my $wert = @$werte[0]; # printf-formel ist erster Wert aus Ias::rahmen printf "$wert",@row; ++$anzahl; } my $line = @$werte[1]; # Tabellenbreite ist zweiter Wert aus Ias::rahmen print "-" x $line, "\n"; # Trennline in Tabellenbreite if ($anzahl == 1) { print "$anzahl $titel_sing[$i]\n\n"; # Unterschrift der Abfrage singular } else { print "$anzahl $titel[$i]\n\n"; # Unterschrift der Abfrage plural } } } } #--------------------------Abfrage---------------------------------- sub wer_kurs_6 { my $pfad = '/home/thomas/bin/'; my $wer; open (FRAGE,'<',$pfad ."wer_name_kurs.sql") || die "Oops: $!\n"; while () { chomp($wer .= $_); # sql Abfragen aus Datei auslesen } close(FRAGE); my @sql = split /:/,"$wer"; # einzelne Abfragen separieren #---------------------- Ergebnisprüfung ------------- my $erg_1= @_; my $erg_2= $dbh->selectrow_array ("select count(*) from tln where Nachname = ? and multi_adr=1", undef,$name); # zweite Adresse my $erg_3= $dbh->selectrow_array ("select count(*) from S_whois_3 where Nachname = ? and Kuerzel=?", undef,$name,$kurs); # Abfrage ohne Zahlungskontrolle my $erg_4= $dbh->selectrow_array ("select count(*) from S_whois_2 where Nachname = ? and Kuerzel =?", undef,$name, $kurs); # Abfrage mit Zahlungskontrolle my @anzahl = ($erg_1, $erg_2,$erg_3, $erg_4); #---------------------- Ergebnisse ---------------------------- for (my $i = 0; $i < @anzahl; $i++) # Schleife durch alle Abfragen { if($anzahl[$i]) # nur wenn Ergebnis vorhanden { my $sth = $dbh->prepare($sql[$i]); $sth->bind_param(1, $name); $sth->bind_param(2, $kurs); $sth->execute(); my $breite_ref = $sth->{'mysql_max_length'}; my @title = @{$sth->{NAME_uc}}; my @zahl = @{$sth->{TYPE}}; # Datentypen ermitteln #-------------------- Titelzeile ausgeben --------------------- my $werte = Ias::rahmen(\@$breite_ref,\@title,\@zahl); # 3 Referenzen an Ias::rahmen übergeben # 2 Referenzen von Ias::rahmen erhalten #-------------------- Werte ausgeben -------------------------- my ($anzahl, $yyyy, $mm, $dd); while (my @row =$sth->fetchrow_array) # zeilenweise ausgeben { foreach (@row) { $_ = 0 unless defined $_; # Null durch 0 ersetzen } for (my $i = 0; $i < @zahl; $i++) # Datentypen prüfen { if ($zahl[$i] == 9) # Datum { ($yyyy, $mm, $dd) = ($row[$i] =~ /(\d+)-(\d+)-(\d+)/); # Elemente extrahieren $row[$i] = join ".",$dd,$mm,$yyyy; # Elemente neu zusammensetzen } } my $wert = @$werte[0]; # printf-formel ist erster Wert aus Ias::rahmen printf "$wert",@row; ++$anzahl; } my $line = @$werte[1]; # Tabellenbreite ist zweiter Wert aus Ias::rahmen print "-" x $line, "\n"; # Trennline in Tabellenbreite if ($anzahl == 1) { print "$anzahl $titel_sing[$i]\n\n"; # Unterschrift der Abfrage singular } else { print "$anzahl $titel[$i]\n\n"; # Unterschrift der Abfrage plural } } } } print"\n\n"; #--------------------------Abfrage---------------------------------- sub wer_kurs_7 { my $pfad = '/home/thomas/bin/'; my $wer; open (FRAGE,'<',$pfad ."wer_name_genau.sql") || die "Oops: $!\n"; while () { chomp($wer .= $_); # sql Abfragen aus Datei auslesen } close(FRAGE); my @sql = split /:/,"$wer"; # einzelne Abfragen separieren my @titel = qw(Privatdressen Geschäftadressen Kurse Buchkonten); my @titel_sing = qw(Privatdresse Geschäftadresse Kurs Buchkonto); # Unterschriften der einzelnen Abfragen #---------------------- Ergebnisprüfung ------------- my $erg_1 = @_; my $erg_2 = $dbh->selectrow_array ("select count(*) from tln where multi_adr=1 and Nachname = ?", undef,$name_genau); my $erg_3= $dbh->selectrow_array ("select count(*) from S_whois_3 where Nachname = ?", undef,$name_genau); my $erg_4= $dbh->selectrow_array ("select count(*) from S_whois_2 where Nachname = ?", undef,$name_genau); my @anzahl = ($erg_1, $erg_2,$erg_3, $erg_4); #---------------------- Ergebnisse ---------------------------- for (my $i = 0; $i < @anzahl; $i++) # Schleife durch alle Abfragen { if($anzahl[$i]) # nur wenn Ergebnis vorhanden { my $sth = $dbh->prepare($sql[$i]); $sth->bind_param( 1, $name_genau); $sth->execute(); my $breite_ref = $sth->{'mysql_max_length'}; my @title = @{$sth->{NAME_uc}}; my @zahl = @{$sth->{TYPE}}; # Datentypen ermitteln #-------------------- Titelzeile ausgeben --------------------- my $werte = Ias::rahmen(\@$breite_ref,\@title,\@zahl); # 3 Referenzen an Ias::rahmen übergeben # 2 Referenzen von Ias::rahmen erhalten #-------------------- Werte ausgeben -------------------------- my ($anzahl, $yyyy, $mm, $dd); while (my @row =$sth->fetchrow_array) # zeilenweise ausgeben { foreach (@row) { $_ = 0 unless defined $_; # Null durch 0 ersetzen } for (my $i = 0; $i < @zahl; $i++) # Datentypen prüfen { if ($zahl[$i] == 9) # Datum { ($yyyy, $mm, $dd) = ($row[$i] =~ /(\d+)-(\d+)-(\d+)/); # Elemente extrahieren $row[$i] = join ".",$dd,$mm,$yyyy; # Elemente neu zusammensetzen } } my $wert = @$werte[0]; # printf-formel ist erster Wert aus Ias::rahmen printf "$wert",@row; ++$anzahl; } my $line = @$werte[1]; # Tabellenbreite ist zweiter Wert aus Ias::rahmen print "-" x $line, "\n"; # Trennline in Tabellenbreite if ($anzahl == 1) { print "$anzahl $titel_sing[$i]\n\n"; # Unterschrift der Abfrage singular } else { print "$anzahl $titel[$i]\n\n"; # Unterschrift der Abfrage plural } } } } # --------------------- Programmende ---------------------------- $dbh->disconnect(); exit 0;