From 3dfbf1c9c7108b00b4f6dbcc29a7f52d01a9f37e Mon Sep 17 00:00:00 2001 From: Moirtz Wagner Date: Mon, 21 Sep 2026 19:47:01 +0200 Subject: [PATCH] Kunden und Adressen auf Prepared Statements umgebaut incs/saveNchange.php neu geschrieben: Adressen, Telefonnummern, Kontakte, Notizen und Konten laufen ueber db_abfrage() mit Platzhaltern, mehrschrittiges Speichern in einer Transaktion. Weil sich die Speicherfunktionen gegenseitig aufrufen, klammern beginneSpeichern()/beendeSpeichern() die Verschachtelung; incs/rechnung.php nutzt sie ebenfalls. Kunden- und Lieferantenseiten waren zwei fast gleiche Kopien und teilen sich jetzt partnerAddSeite(), partnerChangeSeite() und partnerShowDaten(). Dabei behoben: - SQL-Injektion ueber die Suchbegriffe der Kunden-, Lieferanten-, Adress-, Kommissions- und Projektsuche sowie ueber die Artikel-Autovervollstaendigung - gespeichertes XSS: Notizen (nl2br escapt nicht), Bankname, Dokumenttyp, Namen und Adressen in allen Trefferlisten - sites/liefershow.php war unter PHP 8 ein Fatal ($kdnres.id) - "Telefonnummer loeschen" im Kundenbereich lief in einen Fatal, die Nummern einer geloeschten Adresse blieben stehen (Spalte hiess adress_id statt adresse_id, mysql_fetch_assoc gibt es nicht mehr) - Geburtstag ohne Jahr wurde im Formular verschluckt, die IBAN kam beim Bearbeiten aus $_GET statt aus dem Konto - die Versionskette eines Kunden brach nach einem Schritt ab - Kommissionsadressen speicherten die Ortsangabe der Adresse statt der des Telefonformulars und einen Adresstyp als Telefontyp - Blaettern in den Trefferlisten: ohne ORDER BY konnte dieselbe Zeile zweimal oder gar nicht erscheinen; ajax_searchadress() bekam die Seite nicht - Hauptadresse laesst sich nicht mehr loeschen, Kundendaten nicht mehr ueber die Lieferantenseite (und umgekehrt) - ajax/auto/* baute JSON von Hand zusammen, ein Anfuehrungszeichen im Ort machte die Liste unbrauchbar Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 8 +- ajax/auto/art.php | 84 +- ajax/auto/autofuncs.php | 28 + ajax/auto/bank.php | 26 +- ajax/auto/blz.php | 26 +- ajax/auto/land.php | 26 +- ajax/auto/ort.php | 27 +- ajax/auto/oteil.php | 28 +- ajax/auto/plz.php | 28 +- ajax/auto/str.php | 30 +- ajax/auto/vwahl.php | 27 +- ajax/searchadress.php | 72 +- ajax/searchkdnprojects.php | 107 +-- ajax/searchkdnrech.php | 6 +- ajax/searchkomm.php | 91 +- ajax/searchkunden.php | 86 +- ajax/searchliefer.php | 73 +- ajax/searchrech.php | 6 +- incs/db.php | 9 + incs/funcs.php | 7 + incs/listfuncs.php | 351 +++---- incs/rechnung.php | 61 +- incs/saveNchange.php | 1820 ++++++++++++++++++++++-------------- js/ajaxlists.js | 28 +- sites/kundenadd.php | 60 +- sites/kundenchange.php | 212 +---- sites/kundenshow.php | 126 +-- sites/lieferadd.php | 60 +- sites/lieferchange.php | 196 +--- sites/liefershow.php | 123 +-- templates/changeadr.tpl | 6 +- templates/copyrech.tpl | 6 +- templates/kunden.tpl | 4 +- templates/kundenshow.tpl | 23 +- templates/liefershow.tpl | 15 +- templates/newadress.tpl | 2 +- templates/newkontakt.tpl | 2 +- templates/newkonto.tpl | 2 +- templates/newnotiz.tpl | 6 +- templates/newtel.tpl | 2 +- 40 files changed, 1706 insertions(+), 2194 deletions(-) create mode 100644 ajax/auto/autofuncs.php diff --git a/CLAUDE.md b/CLAUDE.md index e77a005..3677b89 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -91,12 +91,14 @@ Eine Schemaänderung besteht also aus: neuer Eintrag **vorn** in `update/version Regeln für den Umbau: - **Ergebnisse sind Strings** wie früher bei `mysqli_query()`: `db_zeilen()`, `db_zeile()`, `db_wert()` und `db_zuordnung()` wandeln die nativen int/float-Werte der Prepared Statements um. Wer `db_abfrage()` selbst ausliest, bekommt native Typen. -- **Formularwerte** über `formularText()`, `formularZahl()` (Komma als Dezimaltrenner, leer wird 0) und `formularGanzzahl()` aus `incs/rechnung.php` holen – der strikte Modus lehnt `''` in Zahlenspalten ab. +- **Formularwerte** über `formularText()`, `formularZahl()` (Komma als Dezimaltrenner, leer wird 0) und `formularGanzzahl()` aus `incs/saveNchange.php` holen – der strikte Modus lehnt `''` in Zahlenspalten ab. - **Änderungsprotokoll:** `saveLog()` bekommt den Text aus `db_sql_text()`. Die Tabelle `log` ist reine Dokumentation, nichts daraus wird ausgeführt. -- **Mehrschrittiges Speichern** in eine Transaktion (`mysqli_begin_transaction` / `commit` / `rollback`), damit bei Fehlern keine halben Datensätze bleiben. +- **Mehrschrittiges Speichern** in eine Transaktion, damit bei Fehlern keine halben Datensätze bleiben — aber über `beginneSpeichern()` / `beendeSpeichern()` aus `incs/saveNchange.php`, nicht über `mysqli_begin_transaction()` direkt. Die Speicherfunktionen rufen sich gegenseitig auf (`savePart()` → `saveAdress()` → `updateKunde()` → `saveAdress()`, `loeschePartner()` → `delRechnung()`), MariaDB kennt aber keine geschachtelten Transaktionen; ein Zähler sorgt dafür, dass nur der äußerste Aufruf öffnet und schließt. - **Tabellen- und Spaltennamen** lassen sich nicht binden; nur feste Werte aus dem Code einsetzen, `LIMIT` als `(int)`. +- **Suchabfragen** (`create*Qry()` in `incs/listfuncs.php`) liefern `array("all", "limited", "params")`. Aufrufer nutzen `db_abfrage($dbconn, $q["limited"], $q["params"])` und `zaehleTreffer()`. Die Suchbegriffe sind Platzhalterwerte, `%` und `_` darin bleiben absichtlich Jokerzeichen — so ist die Suche dokumentiert. In der Autovervollständigung (`ajax/auto/`) werden sie dagegen über `db_like_praefix()` entwertet. +- **Werte aus der Datenbank sind kein HTML.** `GROUP_CONCAT` trennt mit einem Zeilenumbruch; zusammengebaut und escaped wird erst in `zeilenHtml()` bzw. `makenameline()`/`makeadressline()`/`maketelline()`. -Umgebaut: Login/Passkeys, Benutzereinstellungen, Änderungsprotokoll, Rechnungsmodul (`incs/rechnung.php`, `sites/rechnungadd.php`, `sites/umschlagshow.php`, `ajax/autosave.php`, `ajax/preview.php`, Rechnungssuche). Offen: Kunden/Adressen (`incs/saveNchange.php`), Termine, Projekte, Zeiten, Benutzerverwaltung, übrige Suchen, `incs/makepdf.php`, `update/`. +Umgebaut: Login/Passkeys, Benutzereinstellungen, Änderungsprotokoll, Rechnungsmodul (`incs/rechnung.php`, `sites/rechnungadd.php`, `sites/umschlagshow.php`, `ajax/autosave.php`, `ajax/preview.php`, Rechnungssuche), Kunden und Lieferanten (`incs/saveNchange.php` samt `sites/kunden*.php`, `sites/liefer*.php`, Kunden-, Lieferanten-, Adress- und Kommissionssuche, `ajax/auto/`). Offen: Termine, Projekte, Zeiten, Benutzerverwaltung, `incs/makepdf.php`, `update/`. Prozedurales `mysqli`. `$dbconn` wird zusätzlich in `$_SESSION["dbconn"]` abgelegt, damit `incs/mysql_ecape_wrapper.php` eine globale Funktion `mysql_escape_string()` als Shim über diese Verbindung bereitstellen kann — ein Überbleibsel der `mysql_*`-Ära, das in altem Code noch aufgerufen wird. diff --git a/ajax/auto/art.php b/ajax/auto/art.php index f453f7a..48d06cd 100644 --- a/ajax/auto/art.php +++ b/ajax/auto/art.php @@ -1,50 +1,46 @@ -= YEAR(NOW())-1 GROUP BY artikel.bezeichn") or die(mysqli_error($dbconn)); - if($tmpres=mysqli_fetch_array($qry)) - { - $innerqry = mysqli_query($dbconn,"SELECT artikel.bezeichn, artikel.typ_id, artikel.einheit_id, artikel.id, artikel_rechn.preis, artikel_rechn.rech_id, artikel_rechn.posnr FROM artikel - JOIN artikeltyp ON typ_id = artikeltyp.id - JOIN artikel_rechn ON artikel.id = art_id - WHERE artikel.id = ".$tmpres["id"]." ORDER BY artikel_rechn.art_id DESC LIMIT 1") or die(mysqli_error($dbconn)); - $res = mysqli_fetch_array($innerqry); - echo "[ "; - echo '{"value": "'.$res[0].'","typ": "'.$res[1].'","einh": "'.$res[2].'","preis": "'.number_format($res[4],2,",","").'","eig":['; - $qry2 = mysqli_query($dbconn,"SELECT bezeichn, wert, einheit_id FROM eigensch - JOIN artikel_eigensch ON eig_id = eigensch.id - WHERE art_id='".$res[3]."' AND rech_id='".$res[5]."' AND artposnr = '".$res[6]."' ORDER BY posnr ASC"); - if($res2 = mysqli_fetch_array($qry2)) - echo '{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}'; - while($res2=mysqli_fetch_array($qry2)) - echo ',{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}'; - echo ']}'; - while($tmpres=mysqli_fetch_array($qry)) - { - $innerqry = mysqli_query($dbconn,"SELECT artikel.bezeichn, artikel.typ_id, artikel.einheit_id, artikel.id, artikel_rechn.preis, artikel_rechn.rech_id, artikel_rechn.posnr FROM artikel + $treffer = db_zeilen($dbconn, "SELECT MAX(artikel.id) AS id FROM artikel JOIN artikeltyp ON typ_id = artikeltyp.id - JOIN artikel_rechn ON artikel.id = art_id - WHERE artikel.id = ".$tmpres["id"]." ORDER BY artikel_rechn.art_id DESC LIMIT 1") or die(mysqli_error($dbconn)); - $res = mysqli_fetch_array($innerqry); - echo ',{"value": "'.$res[0].'","typ": "'.$res[1].'","einh": "'.$res[2].'","preis": "'.number_format($res[4],2,",","").'","eig":['; - $qry2 = mysqli_query($dbconn,"SELECT bezeichn, wert, einheit_id FROM eigensch - JOIN artikel_eigensch ON eig_id = eigensch.id - WHERE art_id='".$res[0]."' AND rech_id='".$res[5]."' AND artposnr = '".$res[6]."' ORDER BY posnr ASC"); - if($res2 = mysqli_fetch_array($qry2)) - echo '{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}'; - while($res2=mysqli_fetch_array($qry2)) - echo ',{"des":"'.$res2[0].'","val":"'.$res2[1].'", "einh":"'.$res2[2].'"}'; - echo ']}'; - } - echo "]"; - } + WHERE artikel.bezeichn LIKE ? AND dropdown = 1 + AND YEAR(artikel.datetime) >= YEAR(NOW())-1 + GROUP BY artikel.bezeichn LIMIT 25", + array(db_like_praefix(autoBegriff()))); + + $liste = array(); + foreach((array)$treffer as $t) + { + $art = db_zeile($dbconn, "SELECT artikel.bezeichn, artikel.typ_id, artikel.einheit_id, artikel.id, + artikel_rechn.preis, artikel_rechn.rech_id, artikel_rechn.posnr + FROM artikel + JOIN artikeltyp ON artikel.typ_id = artikeltyp.id + JOIN artikel_rechn ON artikel.id = art_id + WHERE artikel.id = ? ORDER BY artikel_rechn.art_id DESC LIMIT 1", + array($t["id"])); + if(!$art) + continue; + $eigensch = db_zeilen($dbconn, "SELECT bezeichn AS des, wert AS val, einheit_id AS einh + FROM eigensch + JOIN artikel_eigensch ON eig_id = eigensch.id + WHERE art_id = ? AND rech_id = ? AND artposnr = ? ORDER BY posnr ASC", + array($art["id"], $art["rech_id"], $art["posnr"])); + $liste[] = array( + "value" => $art["bezeichn"], + "typ" => $art["typ_id"], + "einh" => $art["einheit_id"], + "preis" => number_format((float)$art["preis"], 2, ",", ""), + "eig" => $eigensch ? $eigensch : array(), + ); } + header("Content-Type: application/json; charset=utf-8"); + echo json_encode($liste, JSON_UNESCAPED_UNICODE); } -?> \ No newline at end of file diff --git a/ajax/auto/autofuncs.php b/ajax/auto/autofuncs.php new file mode 100644 index 0000000..0c7ce85 --- /dev/null +++ b/ajax/auto/autofuncs.php @@ -0,0 +1,28 @@ + \ No newline at end of file +if(!$err && autoBegriff() !== "") + autoAusgabe($dbconn, "SELECT bank AS value, blz FROM bank + WHERE bank LIKE ? GROUP BY bank ORDER BY bank ASC LIMIT 25", + array(db_like_praefix(autoBegriff()))); diff --git a/ajax/auto/blz.php b/ajax/auto/blz.php index a12f38b..1204937 100644 --- a/ajax/auto/blz.php +++ b/ajax/auto/blz.php @@ -1,20 +1,8 @@ - \ No newline at end of file +require_once("./autofuncs.php"); + +if(!$err && autoBegriff() !== "") + autoAusgabe($dbconn, "SELECT blz AS value, bank FROM bank + WHERE blz LIKE ? GROUP BY blz ORDER BY blz ASC LIMIT 25", + array(db_like_praefix(autoBegriff()))); diff --git a/ajax/auto/land.php b/ajax/auto/land.php index eb41b17..b64afae 100644 --- a/ajax/auto/land.php +++ b/ajax/auto/land.php @@ -1,22 +1,8 @@ - \ No newline at end of file +if(!$err && autoBegriff() !== "") + autoAusgabe($dbconn, "SELECT land AS value FROM land + WHERE land LIKE ? ORDER BY land ASC LIMIT 25", + array(db_like_praefix(autoBegriff()))); diff --git a/ajax/auto/ort.php b/ajax/auto/ort.php index 6dfb762..accd9f9 100644 --- a/ajax/auto/ort.php +++ b/ajax/auto/ort.php @@ -1,22 +1,9 @@ - \ No newline at end of file +if(!$err && autoBegriff() !== "") + autoAusgabe($dbconn, "SELECT ort AS value, plz, land AS lnd, vwahl AS vwl + FROM ort JOIN land ON land.id = ort.land_id + WHERE ort LIKE ? GROUP BY ort ORDER BY ort ASC LIMIT 25", + array(db_like_praefix(autoBegriff()))); diff --git a/ajax/auto/oteil.php b/ajax/auto/oteil.php index e376c66..48e4faf 100644 --- a/ajax/auto/oteil.php +++ b/ajax/auto/oteil.php @@ -1,23 +1,9 @@ - \ No newline at end of file +if(!$err && autoBegriff() !== "") + autoAusgabe($dbconn, "SELECT ortsteil AS value, plz, ort, land AS lnd, vwahl AS vwl + FROM ort JOIN land ON land.id = ort.land_id + WHERE ortsteil LIKE ? GROUP BY ortsteil ORDER BY ort ASC LIMIT 25", + array(db_like_praefix(autoBegriff()))); diff --git a/ajax/auto/plz.php b/ajax/auto/plz.php index 614a728..2090f01 100644 --- a/ajax/auto/plz.php +++ b/ajax/auto/plz.php @@ -1,23 +1,9 @@ - \ No newline at end of file +if(!$err && autoBegriff() !== "") + autoAusgabe($dbconn, "SELECT plz AS value, ort, land AS lnd, vwahl AS vwl + FROM ort JOIN land ON land.id = ort.land_id + WHERE plz LIKE ? GROUP BY plz ORDER BY plz ASC LIMIT 25", + array(db_like_praefix(autoBegriff()))); diff --git a/ajax/auto/str.php b/ajax/auto/str.php index 96bde4d..dd471f4 100644 --- a/ajax/auto/str.php +++ b/ajax/auto/str.php @@ -1,23 +1,11 @@ - \ No newline at end of file +if(!$err && autoBegriff() !== "") + autoAusgabe($dbconn, "SELECT str AS value, plz, ort, ortsteil AS otl, land AS lnd + FROM strasse + JOIN ort ON ort.id = strasse.ort_id + JOIN land ON land.id = ort.land_id + WHERE str LIKE ? GROUP BY str ORDER BY str ASC LIMIT 25", + array(db_like_praefix(autoBegriff()))); diff --git a/ajax/auto/vwahl.php b/ajax/auto/vwahl.php index 7101778..fe47ab1 100644 --- a/ajax/auto/vwahl.php +++ b/ajax/auto/vwahl.php @@ -1,22 +1,9 @@ - \ No newline at end of file +if(!$err && autoBegriff() !== "") + autoAusgabe($dbconn, "SELECT vwahl AS value, plz, ort, ortsteil AS otl, land AS lnd + FROM ort JOIN land ON land.id = ort.land_id + WHERE vwahl LIKE ? GROUP BY vwahl ORDER BY vwahl ASC LIMIT 25", + array(db_like_praefix(autoBegriff()))); diff --git a/ajax/searchadress.php b/ajax/searchadress.php index 3c89a17..a558a12 100644 --- a/ajax/searchadress.php +++ b/ajax/searchadress.php @@ -1,56 +1,52 @@ -".$res["firma"].""; - if($res["vwahl"]) - $res["tel"] = $res["vwahl"]."/".$res["tel"]; - if(!$res["updated_by"]) - $listlines[] = array("   ".$res["kdnr"]."",$name,$res["plz"]." ".$res["ort"], $res["str"]." ".$res["hnr"], $res["tel"]); + $adresse = makeadressline($res); + $waehlen = ""; + $zeile = array($waehlen."   ".(int)$res["kdnr"], makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res)); + if(empty($res["updated_by"])) + $listlines[] = $zeile; else - $speciallines[] = array("   ".$res["kdnr"]."",$name,$res["plz"]." ".$res["ort"], $res["str"]." ".$res["hnr"], $res["tel"]); + $speciallines[] = $zeile; } $headings = array("Kd.Nr.","Name/Firma","Ort","Straße","Telefon"); $lastdisplay = ($page+1)*$pagesize; @@ -60,12 +56,12 @@ if(!$err) ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.
Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay); else ok($numres." Adressen sind insgesamt gespeichert."); - - displayPages($pagesize,$page,$numres,"ajax_searchadress"); + + displayPages($pagesize,$page,$numres,"ajax_searchadress",",".$rechid.",'".$subact."'"); displayList($headings,$listlines,$speciallines); - displayPages($pagesize,$page,$numres,"ajax_searchadress"); + displayPages($pagesize,$page,$numres,"ajax_searchadress",",".$rechid.",'".$subact."'"); } - else + else ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse."); } -?> \ No newline at end of file +?> diff --git a/ajax/searchkdnprojects.php b/ajax/searchkdnprojects.php index 26e3dbe..26826d7 100644 --- a/ajax/searchkdnprojects.php +++ b/ajax/searchkdnprojects.php @@ -1,89 +1,45 @@ -wirklich unwiederruflich löschen?\",\"?action=projectadd&id=".$res["id"]."&del=1\")'>"; - $actions .= ""; - //$actions .= ""; - //$tmpqry = mysqli_query($dbconn,"SELECT id FROM kontakt WHERE partner_id = '$id' AND typ_id = 1"); - //if(mysqli_fetch_array($tmpqry)) - // $actions .= ""; - /* - $res["drechnr"] = substr($res["rechnr"],0,4)."-".substr($res["rechnr"],4,2)."-".substr($res["rechnr"],6,2).".".substr($res["rechnr"],8,2); - switch($res["typ_id"]) - { - case 1: - $res["drechnr"] = "R".$res["drechnr"]; - $actions .= ""; - $actions .= ""; - break; - case 2: - $res["drechnr"] = "G".$res["drechnr"]; - break; - case 3: - $actions .= ""; - $actions .= ""; - $res["drechnr"] = "A".$res["drechnr"]; - break; - case 4: - $actions .= ""; - $res["drechnr"] = "B".$res["drechnr"]; - break; - } - if(!$res["drechnr"]) - $res["drechnr"] = $res["drechnr"]; - */ - $listlines[] = array("".$res["name"]."", - $res["date"], - $res["work"], - $actions - ); + $projektid = (int)$res["id"]; + $name = htmlspecialchars((string)$res["name"]); + $actions = ""; + $actions .= ""; + $listlines[] = array("".$name."", + htmlspecialchars((string)$res["date"]), + htmlspecialchars((string)$res["work"]), + $actions); } - + $headings = array("Name","Datum","Unberechnete
Stunden","Aktionen"); $lastdisplay = ($page+1)*$pagesize; if($numres < $lastdisplay) @@ -92,18 +48,17 @@ if(!$err) ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.
Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay); else ok($numres." Projekte sind insgesamt gespeichert."); - - displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkdnprojects",",$typ,$id"); - displayList($headings,$listlines,$speciallines); - displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkdnprojects",",$typ,$id"); + + displayPages($pagesize,$page,$numres,"ajax_searchkdnprojects",",".$id); + displayList($headings,$listlines,array()); + displayPages($pagesize,$page,$numres,"ajax_searchkdnprojects",",".$id); } - else + else { if($fulltag) ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse."); - else + else ok("Keine Einträge."); } - } -?> \ No newline at end of file +?> diff --git a/ajax/searchkdnrech.php b/ajax/searchkdnrech.php index 64b5897..ccfcfcb 100644 --- a/ajax/searchkdnrech.php +++ b/ajax/searchkdnrech.php @@ -88,14 +88,14 @@ if(!isset($err)) if($res["storno"] == 1){ $listlines[] = array("".$res["drechnr"]."", $res["date"], - artikelListeHtml($res["artikel"]), + zeilenHtml($res["artikel"]), $actions ); } else{ $listlines[] = array("".$res["drechnr"]."", $res["date"], - artikelListeHtml($res["artikel"]), + zeilenHtml($res["artikel"]), $actions ); } @@ -152,7 +152,7 @@ if(!isset($err)) { $speciallines[] = array("".$res["rechnr"]."", $res["date"], - artikelListeHtml($res["artikel"]), + zeilenHtml($res["artikel"]), ""); } $headings = array("Nummer","Datum","Artikel","Aktion"); diff --git a/ajax/searchkomm.php b/ajax/searchkomm.php index 6376fd5..3231651 100644 --- a/ajax/searchkomm.php +++ b/ajax/searchkomm.php @@ -1,66 +1,47 @@ -"; - $actions .= " "; - $actions .= " "; - $actions .= "
"; - $actions .= " "; - $actions .= " "; - $actions .= " "; - $actions .= "
"; - $tmpqry = mysqli_query($dbconn,"SELECT id FROM kontakt WHERE partner_id = '$id' AND typ_id = 1"); - if(mysqli_fetch_array($tmpqry)) - $actions .= ""; - $name=makenameline($res); - $adresse=makeadressline($res); - $listlines[] = array($name, - $adresse["ort"], $adresse["str"], - maketelline($res), - $actions - ); + $adrid = (int)$res["id"]; + $karte = rawurlencode($res["plz"]." ".$res["ort"]." ".$res["str"]." ".$res["hnr"]); + $actions = " "; + $actions .= " "; + $actions .= " "; + $actions .= "
"; + $actions .= " "; + $actions .= " "; + $actions .= " "; + $actions .= "
"; + $adresse = makeadressline($res); + $listlines[] = array(makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res), $actions); } $headings = array("Name","Ort","Straße","Tel","Aktionen"); $lastdisplay = ($page+1)*$pagesize; @@ -70,17 +51,17 @@ if(!$err) ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.
Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay); else ok($numres." Kommissionen sind insgesamt gespeichert."); - - displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkomm",",$id"); - displayList($headings,$listlines,$speciallines); - displaySplitPages($pagesize,$page,$skspage,0,$numres,"ajax_searchkomm",",$id"); + + displayPages($pagesize,$page,$numres,"ajax_searchkomm",",".$id); + displayList($headings,$listlines,array()); + displayPages($pagesize,$page,$numres,"ajax_searchkomm",",".$id); } - else + else { if($fulltag) ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse."); - else + else ok("Keine Einträge."); } } -?> \ No newline at end of file +?> diff --git a/ajax/searchkunden.php b/ajax/searchkunden.php index 2079eed..2a03de7 100644 --- a/ajax/searchkunden.php +++ b/ajax/searchkunden.php @@ -1,85 +1,71 @@ -".$res["firma"].""; - if(isset($res["vwahl"])) - $res["tel"] = $res["vwahl"]."/".$res["tel"]; - $adresse=makeadressline($res); - if(!isset($res["updated_by"])) - $listlines[] = array("".$res["kdnr"]."",makenameline($res),$adresse["ort"], $adresse["str"], maketelline($res),""); + $adresse = makeadressline($res); + $kdnr = (int)$res["kdnr"]; + $aktionen = "" + .""; + $zeile = array("".$kdnr."", makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res), $aktionen); + if(empty($res["updated_by"])) + $listlines[] = $zeile; else - $speciallines[] = array("".$res["kdnr"]."",makenameline($res),$adresse["ort"], $adresse["str"], maketelline($res),""); + $speciallines[] = $zeile; } $headings = array("Kd.Nr.","Name/Firma","Ort","Straße","Telefon","Löschen"); - $lastdisplay = (intval($page)+1)*$pagesize; + $lastdisplay = ($page+1)*$pagesize; if($numres < $lastdisplay) $lastdisplay = $numres; if($fulltag) ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.
Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay); else ok($numres." Kunden sind insgesamt gespeichert."); - + displayPages($pagesize,$page,$numres,"ajax_searchkunden"); displayList($headings,$listlines,$speciallines); displayPages($pagesize,$page,$numres,"ajax_searchkunden"); } - else + else ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse."); } -?> \ No newline at end of file +?> diff --git a/ajax/searchliefer.php b/ajax/searchliefer.php index 575731a..329572d 100644 --- a/ajax/searchliefer.php +++ b/ajax/searchliefer.php @@ -1,61 +1,47 @@ -".$res["kdnr"]."",$name,$res["plz"]." ".$res["ort"], $res["str"]." ".$res["hnr"], $res["tel"],""); - else - $speciallines[] = array("".$res["kdnr"]."",$name,$res["plz"]." ".$res["ort"], $res["str"]." ".$res["hnr"], $res["tel"],""); + $adresse = makeadressline($res); + $kdnr = (int)$res["kdnr"]; + $aktionen = ""; + $listlines[] = array("".$kdnr."", makenameline($res), $adresse["ort"], $adresse["str"], maketelline($res), $aktionen); } - $headings = array("Kd.Nr.","Name/Firma","Ort","Straße","Telefon","Löschen"); + $headings = array("Kd.Nr.","Name/Firma","Ort","Straße","Telefon","Löschen"); $lastdisplay = ($page+1)*$pagesize; if($numres < $lastdisplay) $lastdisplay = $numres; @@ -63,13 +49,12 @@ if(!isset($err)) ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab ".$numres." Ergebnisse.
Ergebnis ".($page*$pagesize+1)." bis ".$lastdisplay); else ok($numres." Lieferanten sind insgesamt gespeichert."); - - $speciallines = Array(); - displayPages($pagesize,$page,$numres,"ajax_searchkunden"); - displayList($headings,$listlines,$speciallines); - displayPages($pagesize,$page,$numres,"ajax_searchkunden"); + + displayPages($pagesize,$page,$numres,"ajax_searchliefer"); + displayList($headings,$listlines,array()); + displayPages($pagesize,$page,$numres,"ajax_searchliefer"); } - else + else ok("Die Suche nach ".htmlspecialchars($fulltag)." ergab keine Ergebnisse."); } -?> \ No newline at end of file +?> diff --git a/ajax/searchrech.php b/ajax/searchrech.php index 5b8b938..19197e6 100644 --- a/ajax/searchrech.php +++ b/ajax/searchrech.php @@ -83,14 +83,14 @@ if(!isset($err)) if($res["storno"] == 1){ $listlines[] = array("".$res["drechnr"]."", $res["date"], - artikelListeHtml($res["artikel"]), + zeilenHtml($res["artikel"]), $actions ); } else{ $listlines[] = array("".$res["drechnr"]."", $res["date"], - artikelListeHtml($res["artikel"]), + zeilenHtml($res["artikel"]), $actions ); } @@ -143,7 +143,7 @@ if(!isset($err)) { $speciallines[] = array("".$res["rechnr"]."", $res["date"], - artikelListeHtml($res["artikel"]), + zeilenHtml($res["artikel"]), ""); } $headings = array("Nummer","Datum","Artikel","Aktion"); diff --git a/incs/db.php b/incs/db.php index 5a29310..9c9a5b2 100644 --- a/incs/db.php +++ b/incs/db.php @@ -119,6 +119,15 @@ function db_sql_text($dbconn, $sql, $params = array()) return $text; } +/* + * Text als Praefix-Suchmuster fuer LIKE. % und _ waeren darin sonst + * Platzhalter; das Fluchtzeichen ist der Backslash. + */ +function db_like_praefix($text) +{ + return str_replace(array("\\", "%", "_"), array("\\\\", "\%", "\_"), (string)$text)."%"; +} + /* Erste Spalte der ersten Zeile, null ohne Treffer, bei Fehlern false. */ function db_wert($dbconn, $sql, $params = array()) { diff --git a/incs/funcs.php b/incs/funcs.php index 4607bc7..70dc162 100644 --- a/incs/funcs.php +++ b/incs/funcs.php @@ -36,6 +36,9 @@ function rrmdir($dir) { function del_files($path, $pattern) { $matches = Array(); $entries = Array(); + // Fehlt das Verzeichnis, gibt es auch nichts zu loeschen + if(!is_dir($path)) + return; $dir = dir($path); while ($entry = $dir->read()) { @@ -51,6 +54,10 @@ function del_files($path, $pattern) { function search_file($path, $pattern) { $matches = Array(); $entries = Array(); + $ret = ""; + // Fehlt das Verzeichnis, gibt es auch nichts zu finden + if(!is_dir($path)) + return $ret; $dir = dir($path); while ($entry = $dir->read()) { diff --git a/incs/listfuncs.php b/incs/listfuncs.php index 30d2fe7..4b065f3 100644 --- a/incs/listfuncs.php +++ b/incs/listfuncs.php @@ -1,182 +1,100 @@ array("vname", "nname", "vname2", "nname2", "firma", "ort", "str", "plz", "partner.id"), + "kdnr" => array("partner.id"), + "name" => array("vname", "nname", "vname2", "nname2", "firma"), + "str" => array("str"), + "plz" => array("plz"), + "ort" => array("ort"), + "tel" => array("tel.nr"), + "kont" => array("kontakt"), + ); + if(!isset($spalten[$fields])) + return ""; + $combiner = $combiner == "OR" ? "OR" : "AND"; + $bedingung = ""; + foreach($src AS $tag) + { + $teile = array(); + foreach($spalten[$fields] as $spalte) + { + $teile[] = "$spalte LIKE ?"; + $params[] = "%".$tag."%"; + } + $bedingung .= " $combiner (".implode(" OR ", $teile).")"; + } + return $bedingung; +} + +/* + * Kunden- bzw. Lieferantensuche, eine Zeile je Partner. $typ ist 1 fuer + * Kunden, 2 fuer Lieferanten. Mit $full kommen auch veraltete Versionen + * dazu; ihre Namen, Adressen und Telefonnummern stehen dann untereinander + * in einer Zelle (siehe zeilenHtml()). + * Rueckgabe: array("all" => sql, "limited" => sql mit LIMIT, "params" => Werte). + */ function createPartQry($page,$pagesize,$src,$combiner,$fields,$full=0,$typ=1) { + $joins = "FROM partner + LEFT JOIN adresse ON adresse.partner_id = partner.id + LEFT JOIN strasse ON strasse.id = str_id + LEFT JOIN ort ON ort.id = ort_id + LEFT JOIN tel ON tel.partner_id = partner.id + LEFT JOIN kontakt ON kontakt.partner_id = partner.id"; if(!$full) - { - $query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr, tel.nr AS tel FROM partner - LEFT JOIN adresse ON adresse.partner_id = partner.id - LEFT JOIN strasse ON strasse.id = str_id - LEFT JOIN ort ON ort.id = ort_id - LEFT JOIN tel ON tel.partner_id = partner.id - LEFT JOIN kontakt ON kontakt.partner_id = partner.id - WHERE updated_by = 0 and adresse.typ_id = 1 AND partner.typ_id = $typ"; - } + $query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr, tel.nr AS tel + $joins + WHERE updated_by = 0 AND adresse.typ_id = 1 AND partner.typ_id = ?"; else - { - $query = "SELECT partner.id AS kdnr,firma,GROUP_CONCAT(CONCAT(vname,' ',nname) SEPARATOR '
') AS nname, '' AS vname,GROUP_CONCAT(CONCAT(vname2,' ',nname2) SEPARATOR '
') AS nname2,'' AS vname2,'' AS ort,GROUP_CONCAT(CONCAT(plz,' ',ort) SEPARATOR '
') AS plz,GROUP_CONCAT(CONCAT(str,' ',hnr) SEPARATOR '
') AS str,'' AS hnr, GROUP_CONCAT(tel.nr SEPARATOR '
') AS tel FROM partner - LEFT JOIN adresse ON adresse.partner_id = partner.id - LEFT JOIN strasse ON strasse.id = str_id - LEFT JOIN ort ON ort.id = ort_id - LEFT JOIN tel ON tel.partner_id = partner.id - LEFT JOIN kontakt ON kontakt.partner_id = partner.id - WHERE partner.typ_id = $typ"; - } - - switch($fields) - { - case "all": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (vname LIKE '$tag' OR nname LIKE '$tag' OR vname2 LIKE '$tag' OR nname2 LIKE '$tag' OR firma LIKE '$tag' OR ort LIKE '$tag' OR str LIKE '$tag' OR plz LIKE '$tag' OR partner.id LIKE '$tag')"; - } - break; - case "kdnr": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (partner.id LIKE '$tag')"; - } - break; - case "name": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (vname LIKE '$tag' OR nname LIKE '$tag' OR vname2 LIKE '$tag' OR nname2 LIKE '$tag' OR firma LIKE '$tag')"; - } - break; - case "str": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (str LIKE '$tag')"; - } - break; - case "plz": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (plz LIKE '$tag')"; - } - break; - case "ort": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (ort LIKE '$tag')"; - } - break; - case "tel": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (tel.nr LIKE '$tag')"; - } - break; - case "kont": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (kontakt LIKE '$tag')"; - } - break; - } - $query .= " GROUP BY partner.id"; + $query = "SELECT partner.id AS kdnr,firma, + GROUP_CONCAT(CONCAT(vname,' ',nname) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS nname, '' AS vname, + GROUP_CONCAT(CONCAT(vname2,' ',nname2) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS nname2,'' AS vname2,'' AS ort, + GROUP_CONCAT(CONCAT(plz,' ',ort) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS plz, + GROUP_CONCAT(CONCAT(str,' ',hnr) ORDER BY adresse.id, tel.id SEPARATOR '\n') AS str,'' AS hnr, + GROUP_CONCAT(tel.nr ORDER BY adresse.id, tel.id SEPARATOR '\n') AS tel + $joins + WHERE partner.typ_id = ?"; + $params = array((int)$typ); + $query .= partnerSuchbedingung($src, $combiner, $fields, $params); + // Ohne feste Reihenfolge kann dieselbe Zeile beim Blaettern zweimal + // oder gar nicht auftauchen + $query .= " GROUP BY partner.id ORDER BY partner.id"; + $ret["all"] = $query; - $query .= " LIMIT ".(intval($page)*$pagesize).", $pagesize"; - $ret["limited"] = $query; + $ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize; + $ret["params"] = $params; return $ret; } +/* + * Adresssuche: wie createPartQry(), aber eine Zeile je Adresse statt je + * Partner. Damit laesst sich fuer ein Dokument eine Nebenadresse auswaehlen. + */ function createAdressQry($page,$pagesize,$src,$combiner,$fields,$full=0,$typ=1) { - if(!$full) - { - $query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr,adresse.id AS adrid, tel.nr AS tel - FROM partner - LEFT JOIN adresse ON adresse.partner_id = partner.id - LEFT JOIN strasse ON strasse.id = str_id - LEFT JOIN ort ON ort.id = ort_id - LEFT JOIN tel ON tel.partner_id = partner.id - LEFT JOIN kontakt ON kontakt.partner_id = partner.id - WHERE updated_by = 0 AND partner.typ_id = $typ"; - } - else - { - $query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr,adresse.id AS adrid, tel.nr AS tel - FROM partner - LEFT JOIN adresse ON adresse.partner_id = partner.id - LEFT JOIN strasse ON strasse.id = str_id - LEFT JOIN ort ON ort.id = ort_id - LEFT JOIN tel ON tel.partner_id = partner.id - LEFT JOIN kontakt ON kontakt.partner_id = partner.id - WHERE partner.typ_id = $typ"; - } - - switch($fields) - { - case "all": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (vname LIKE '$tag' OR nname LIKE '$tag' OR vname2 LIKE '$tag' OR nname2 LIKE '$tag' OR firma LIKE '$tag' OR ort LIKE '$tag' OR str LIKE '$tag' OR plz LIKE '$tag' OR partner.id LIKE '$tag')"; - } - break; - case "kdnr": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (partner.id LIKE '$tag')"; - } - break; - case "name": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (vname LIKE '$tag' OR nname LIKE '$tag' OR vname2 LIKE '$tag' OR nname2 LIKE '$tag' OR firma LIKE '$tag')"; - } - break; - case "str": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (str LIKE '$tag')"; - } - break; - case "plz": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (plz LIKE '$tag')"; - } - break; - case "ort": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (ort LIKE '$tag')"; - } - break; - case "tel": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (tel.nr LIKE '$tag')"; - } - break; - case "kont": - foreach($src AS $tag) - { - $tag = "%".$tag."%"; - $query .= " $combiner (kontakt LIKE '$tag')"; - } - break; - } - $query .= " GROUP BY adresse.id"; + $query = "SELECT partner.id AS kdnr,firma,vname,nname,vname2,nname2,ort,plz,str,hnr,adresse.id AS adrid, tel.nr AS tel + FROM partner + LEFT JOIN adresse ON adresse.partner_id = partner.id + LEFT JOIN strasse ON strasse.id = str_id + LEFT JOIN ort ON ort.id = ort_id + LEFT JOIN tel ON tel.partner_id = partner.id + LEFT JOIN kontakt ON kontakt.partner_id = partner.id + WHERE ".($full ? "" : "updated_by = 0 AND ")."partner.typ_id = ?"; + $params = array((int)$typ); + $query .= partnerSuchbedingung($src, $combiner, $fields, $params); + $query .= " GROUP BY adresse.id ORDER BY adresse.id"; + $ret["all"] = $query; - $query .= " LIMIT ".$page*$pagesize.", $pagesize"; - $ret["limited"] = $query; + $ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize; + $ret["params"] = $params; return $ret; } @@ -240,53 +158,62 @@ function createKdnRechQry($page,$pagesize,$src,$combiner,$id,$typ,$sks=0) return $ret; } +/* Projekte eines Kunden, Rueckgabe wie createKdnRechQry(). */ function createKdnProjectQry($page,$pagesize,$src,$combiner,$id) { - $query = "SELECT project.id, project.name, + $combiner = $combiner == "OR" ? "OR" : "AND"; + $params = array($id); + $query = "SELECT project.id, project.name, DATE_FORMAT(project.datetime, '%d.%m.%Y') AS date, SUM(CASE WHEN rechn = 0 THEN work.std ELSE 0 END) AS work - FROM project + FROM project JOIN work ON project.id = work.project_id - AND partner_id='".$id."'"; + AND partner_id = ?"; foreach($src AS $tag) { $tag .= "%"; - $query .= " $combiner (work.bezeichn LIKE '$tag' OR project.name LIKE '$tag' OR DATE_FORMAT(project.datetime, '%d.%m.%Y') LIKE '$tag')"; + $query .= " $combiner (work.bezeichn LIKE ? OR project.name LIKE ? OR DATE_FORMAT(project.datetime, '%d.%m.%Y') LIKE ?)"; + array_push($params, $tag, $tag, $tag); } $query .= " GROUP BY project.id ORDER BY project.datetime DESC "; - + $ret["all"] = $query; - $query .= " LIMIT ".$page*$pagesize.", $pagesize"; - $ret["limited"] = $query; + $ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize; + $ret["params"] = $params; return $ret; } +/* Kommissionsadressen (adresstyp 5) eines Kunden, Rueckgabe wie createKdnRechQry(). */ function createKommQry($page,$pagesize,$src,$combiner,$id) { - $query = "SELECT adresse.id, adresse.partner_id, firma, vname, nname, vname2, nname2, titel_id, titel2_id, anrede_id, anrede2_id, str, hnr, ort, ortsteil,plz,ort,nr AS tel,vwahl + $combiner = $combiner == "OR" ? "OR" : "AND"; + $params = array($id); + $query = "SELECT adresse.id, adresse.partner_id, firma, vname, nname, vname2, nname2, titel_id, titel2_id, anrede_id, anrede2_id, str, hnr, ort, ortsteil,plz,ort,nr AS tel,vwahl FROM adresse - LEFT JOIN strasse ON adresse.str_id = strasse.id - LEFT JOIN ort ON ort_id = ort.id + LEFT JOIN strasse ON adresse.str_id = strasse.id + LEFT JOIN ort ON ort_id = ort.id LEFT JOIN tel ON adresse.id = tel.adresse_id - WHERE adresse.partner_id='".$id."' AND adresse.typ_id = '5' "; + WHERE adresse.partner_id = ? AND adresse.typ_id = 5 "; foreach($src AS $tag) { $tag .= "%"; - $query .= " $combiner (ort LIKE '$tag' - OR str LIKE '$tag' - OR nr LIKE '$tag' - OR vname LIKE '$tag' - OR nname LIKE '$tag' - OR vname2 LIKE '$tag' - OR nname2 LIKE '$tag' - OR firma LIKE '$tag')"; + $query .= " $combiner (ort LIKE ? + OR str LIKE ? + OR nr LIKE ? + OR vname LIKE ? + OR nname LIKE ? + OR vname2 LIKE ? + OR nname2 LIKE ? + OR firma LIKE ?)"; + for($i = 0; $i < 8; $i++) + $params[] = $tag; } $query .= " GROUP BY adresse.id ORDER BY adresse.id DESC "; - + $ret["all"] = $query; - $query .= " LIMIT ".$page*$pagesize.", $pagesize"; - $ret["limited"] = $query; + $ret["limited"] = $query." LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize; + $ret["params"] = $params; return $ret; } @@ -461,10 +388,29 @@ function createMsgQry($page,$pagesize,$src,$combiner,$user) return $ret; } -/* Artikelliste aus createRechQry()/createKdnRechQry() als escaptes HTML, eine Zeile je Artikel */ -function artikelListeHtml($artikel) +/* + * Zahl der Treffer einer Suche. Die Abfragen aus create*Qry() gruppieren, + * deshalb wird die ungekuerzte Abfrage ausgefuehrt und gezaehlt, statt mit + * COUNT(*) zu arbeiten. + */ +function zaehleTreffer($dbconn, $queries) { - return implode("
", array_map("htmlspecialchars", explode("\n", (string)$artikel))); + $res = isset($queries["params"]) + ? db_abfrage($dbconn, $queries["all"], $queries["params"]) + : mysqli_query($dbconn, $queries["all"]); + if(!$res) + die("Datenbank fehler: ".htmlspecialchars(mysqli_error($dbconn))); + return mysqli_num_rows($res); +} + +/* + * Mit \n verbundene Werte aus GROUP_CONCAT als escaptes HTML, eine Zeile + * je Wert. Zusammengebaut wird erst hier, damit Daten aus der Datenbank + * nicht als HTML durchschlagen. + */ +function zeilenHtml($text) +{ + return implode("
", array_map("htmlspecialchars", explode("\n", (string)$text))); } function displayPages($pagesize,$currpage,$numentries,$refreshfunc,$ad_params = "") @@ -585,25 +531,30 @@ function displayList($header,$entries,$speciallines=array(),$colors=array()) echo ""; } +/* + * Bausteine fuer die Trefferlisten. Sie liefern fertiges HTML und escapen + * die Werte aus der Datenbank deshalb selbst. + */ function makenameline($adresse) { - $ret = $adresse["vname"]." ".$adresse["nname"]; - if($adresse["firma"]) - $ret .= "
".$adresse["firma"].""; + $ret = zeilenHtml(trim($adresse["vname"]." ".$adresse["nname"])); + if(!empty($adresse["firma"])) + $ret .= "
".zeilenHtml($adresse["firma"]).""; return $ret; } function makeadressline($adresse) { - $ret["ort"] = $adresse["plz"]." ".$adresse["ort"]; - $ret["str"] = $adresse["str"]." ".$adresse["hnr"]; + $ret["ort"] = zeilenHtml(trim($adresse["plz"]." ".$adresse["ort"])); + $ret["str"] = zeilenHtml(trim($adresse["str"]." ".$adresse["hnr"])); return $ret; } function maketelline($tel) { - $ret=""; - if(isset($tel["vwahl"]) && !stristr($tel["tel"], "-") && !stristr($tel["tel"], "/")) - $ret = $tel["vwahl"]."-"; - $ret .= $tel["tel"]; + $nr = isset($tel["tel"]) ? (string)$tel["tel"] : ""; + $ret = ""; + if(!empty($tel["vwahl"]) && !str_contains($nr, "-") && !str_contains($nr, "/")) + $ret = zeilenHtml($tel["vwahl"])."-"; + $ret .= zeilenHtml($nr); return $ret; } diff --git a/incs/rechnung.php b/incs/rechnung.php index 9dcebc8..3ad2877 100644 --- a/incs/rechnung.php +++ b/incs/rechnung.php @@ -1,36 +1,10 @@ Ihre Rechnung ist aber noch vorhanden,
Bitte gehen Sie zurück zum Rechnungsformular
@@ -598,7 +568,7 @@ function saveTmpRechnung($dbconn, $nurAktive) ); $set = implode(", ", array_map(function($spalte) { return "`$spalte` = ?"; }, array_keys($felder))); - mysqli_begin_transaction($dbconn); + beginneSpeichern($dbconn); $err = 0; $progressid = db_wert($dbconn, "SELECT id FROM tmp_rechnung WHERE user_id = ? AND typ_id = ? ORDER BY id LIMIT 1", array($_SESSION["user"], $type)); if($progressid === false) @@ -649,17 +619,14 @@ function saveTmpRechnung($dbconn, $nurAktive) $i++; } - if($err) - mysqli_rollback($dbconn); - else - mysqli_commit($dbconn); + beendeSpeichern($dbconn, $err); return array($progressid, $err); } function delRechnung($dbconn,$id) { $err = 0; - mysqli_begin_transaction($dbconn); + beginneSpeichern($dbconn); db_abfrage($dbconn, "DELETE FROM artikel_rechn WHERE rech_id = ?", array($id)) or $err = error("Fehler beim löschen der Artikel-Rechnung Beziehung
".mysqli_error($dbconn)); if(!$err) db_abfrage($dbconn, "DELETE FROM artikel_eigensch WHERE rech_id = ?", array($id)) or $err = error("Fehler beim löschen der Artikel-Eigenschaften Beziehung
".mysqli_error($dbconn)); @@ -667,8 +634,7 @@ function delRechnung($dbconn,$id) db_abfrage($dbconn, "DELETE FROM rechnung WHERE id = ? LIMIT 1", array($id)) or $err = error("Fehler beim löschen der Rechnung
".mysqli_error($dbconn)); if(!$err) $err = saveLog($dbconn, db_sql_text($dbconn, "DELETE FROM rechnung WHERE id = ? LIMIT 1", array($id))." [rechnung DEL]", "", "löschen"); - $err ? mysqli_rollback($dbconn) : mysqli_commit($dbconn); - return $err; + return beendeSpeichern($dbconn, $err); } /* Storno setzen (1) oder zurücknehmen (0) */ @@ -717,7 +683,7 @@ function copyRech($dbconn,$id,$adrid) if($partnerid === false) return error("Fehler beim ermitteln der Adressdaten
".mysqli_error($dbconn)); - mysqli_begin_transaction($dbconn); + beginneSpeichern($dbconn); list($rechnr, $err) = neueRechnungsnummer($dbconn, $res["typ_id"]); if(!$err) { @@ -746,8 +712,7 @@ function copyRech($dbconn,$id,$adrid) if(!$err) $err = saveLog($dbconn, db_sql_text($dbconn, $sql, array($rechid, $id))." [rechnung copy]", "DELETE FROM artikel_eigensch WHERE rech_id = $rechid", "anlegen"); } - $err ? mysqli_rollback($dbconn) : mysqli_commit($dbconn); - return $err; + return beendeSpeichern($dbconn, $err); } function calculateRechnungsSum($dbconn, $rechid, $inclmwst) diff --git a/incs/saveNchange.php b/incs/saveNchange.php index 3c6341b..29fdcf1 100644 --- a/incs/saveNchange.php +++ b/incs/saveNchange.php @@ -1,10 +1,99 @@ -format("Y-m-d"); +} + +/* + * Gegenstück zu formularGeburtsdatum(): "" wenn kein Geburtstag hinterlegt + * ist, "24.12." wenn nur Tag und Monat bekannt sind, sonst das volle Datum. + */ +function geburtstagAnzeigen($datum) +{ + if(!$datum || $datum == "01.01.2100" || $datum == "00.00.0000") + return ""; + if(substr($datum, 6, 4) == "2099") + return substr($datum, 0, 5); + return $datum; +} + +/* --------------------------------------------------------------------- + * Änderungsprotokoll + * ------------------------------------------------------------------ */ + +/* + * $qrystr und $undoqry sind reiner Text zur Nachvollziehbarkeit (siehe + * db_sql_text()), sie werden nie ausgeführt. $type ist ein Eintrag aus + * accesstype ("anlegen", "ändern", "löschen"). */ function saveLog($dbconn,$qrystr,$undoqry,$type) { @@ -18,529 +107,595 @@ function saveLog($dbconn,$qrystr,$undoqry,$type) return $err; } +/* --------------------------------------------------------------------- + * Transaktionen + * + * Die Speicherfunktionen rufen sich gegenseitig auf (savePart -> + * saveAdress -> updateKunde -> saveAdress), MariaDB kennt aber keine + * geschachtelten Transaktionen. Deshalb zählt ein Zähler die Verschachtelung + * mit: nur der äußerste Aufruf öffnet und schließt wirklich. + * ------------------------------------------------------------------ */ + +function transaktionsTiefe($aenderung = 0) +{ + static $tiefe = 0; + $tiefe += $aenderung; + return $tiefe; +} + +function beginneSpeichern($dbconn) +{ + if(transaktionsTiefe() == 0) + mysqli_begin_transaction($dbconn); + transaktionsTiefe(1); +} + +/* Gibt $err unverändert zurück, damit sich der Aufruf ans return anhängen lässt */ +function beendeSpeichern($dbconn, $err) +{ + transaktionsTiefe(-1); + if(transaktionsTiefe() > 0) + return $err; + if($err) + mysqli_rollback($dbconn); + else + mysqli_commit($dbconn); + return $err; +} + +/* --------------------------------------------------------------------- + * Stammdaten: Land, Ort, Straße, Bank + * + * Diese Tabellen wachsen beim Erfassen mit. Gibt es den Eintrag schon, wird + * er wiederverwendet, sonst angelegt und protokolliert. + * ------------------------------------------------------------------ */ + +/* + * $spalten sind die Werte, die den Eintrag eindeutig machen. $kontext + * landet im Protokolltext ("beim adresse anlegen"). Rückgabe ist die id + * oder false bei Fehlern. + */ +function findeOderLege($dbconn, $tabelle, $spalten, $kontext) +{ + $bedingung = array(); + $zuweisung = array(); + foreach(array_keys($spalten) as $spalte) + { + $bedingung[] = "`$spalte` = ?"; + $zuweisung[] = "`$spalte` = ?"; + } + $werte = array_values($spalten); + + $id = db_wert($dbconn, "SELECT id FROM `$tabelle` WHERE ".implode(" AND ", $bedingung), $werte); + if($id === false) + { + error("Fehler beim suchen in $tabelle:
".mysqli_error($dbconn)); + return false; + } + if($id !== null) + return $id; + + $sql = "INSERT INTO `$tabelle` SET ".implode(", ", $zuweisung); + if(!db_abfrage($dbconn, $sql, $werte)) + { + error("Fehler beim anlegen in $tabelle:
".mysqli_error($dbconn)); + return false; + } + $id = mysqli_insert_id($dbconn); + if(saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [hat ID $id ($kontext)]", "DELETE FROM `$tabelle` WHERE id = $id", "anlegen")) + return false; + return $id; +} + +function landId($dbconn, $land, $kontext) +{ + return findeOderLege($dbconn, "land", array("land" => $land), $kontext); +} + +function ortId($dbconn, $land_id, $ort, $plz, $ortsteil, $kontext) +{ + return findeOderLege($dbconn, "ort", array("land_id" => $land_id, "ort" => $ort, "plz" => $plz, "ortsteil" => $ortsteil), $kontext); +} + +function strasseId($dbconn, $ort_id, $str, $kontext) +{ + return findeOderLege($dbconn, "strasse", array("ort_id" => $ort_id, "str" => $str), $kontext); +} + +function bankId($dbconn, $bank, $blz, $kontext) +{ + return findeOderLege($dbconn, "bank", array("bank" => $bank, "blz" => $blz), $kontext); +} + +/* + * Land, Ort und Straße in einem Zug. $ortsangabe enthält land, ort, plz, + * ortsteil und (optional) str. Rückgabe ist array(land_id, ort_id, str_id) + * oder false bei Fehlern; ohne str bleibt str_id 0. + */ +function ortsangabeIds($dbconn, $ortsangabe, $kontext) +{ + $land_id = landId($dbconn, $ortsangabe["land"], $kontext); + if($land_id === false) + return false; + $ort_id = ortId($dbconn, $land_id, $ortsangabe["ort"], $ortsangabe["plz"], $ortsangabe["ortsteil"], $kontext); + if($ort_id === false) + return false; + $str_id = 0; + if(isset($ortsangabe["str"])) + { + $str_id = strasseId($dbconn, $ort_id, $ortsangabe["str"], $kontext); + if($str_id === false) + return false; + } + return array($land_id, $ort_id, $str_id); +} + +/* Auswahlliste für html_options: array(ids, Texte) */ +function auswahlliste($dbconn, $sql, $params = array()) +{ + $zuordnung = db_zuordnung($dbconn, $sql, $params); + if($zuordnung === false) + return array(array(), array()); + return array(array_keys($zuordnung), array_values($zuordnung)); +} + //############################################## //########## ADRESSEN ###################### //############################################## -function saveAdress($dbconn) + +/* Die Adressfelder aus newadress.tpl bzw. newpar.tpl */ +function adressFormularwerte() { - $adressid=mysql_escape_string($_GET["adressid"]); - - $land = mysql_escape_string(trim($_POST["land"])); - $ort = mysql_escape_string(trim($_POST["ort"])); - $plz = mysql_escape_string(trim($_POST["plz"])); - $oteil = mysql_escape_string(trim($_POST["oteil"])); - $str = mysql_escape_string(trim($_POST["str"])); - $hnr = mysql_escape_string(trim($_POST["hnr"])); - $firma = mysql_escape_string(trim($_POST["firma"])); - $vname = mysql_escape_string(trim($_POST["vname"])); - $nname = mysql_escape_string(trim($_POST["nname"])); - $vname2 = mysql_escape_string(trim($_POST["vname2"])); - $nname2 = mysql_escape_string(trim($_POST["nname2"])); - $anrede_id = mysql_escape_string(trim($_POST["anrede"])); - $titel_id = mysql_escape_string(trim($_POST["titel"])); - $anrede2_id = mysql_escape_string(trim($_POST["anrede2"])); - $titel2_id = mysql_escape_string(trim($_POST["titel2"])); - $typ_id = mysql_escape_string(trim($_POST["typ"])); - $kunde=mysql_escape_string($_GET["kunde"]); - $gebdat = mysql_escape_string(trim($_POST["gebdat"])); - $gebdat2 = mysql_escape_string(trim($_POST["gebdat2"])); - $zusatz = mysql_escape_string(trim($_POST["zusatz"])); - - if(!strlen($gebdat)) - $gebdat = "01.01.2100"; - else if(strlen($gebdat) < 7) - $gebdat .= ".2099"; - - if(!strlen($gebdat2)) - $gebdat2 = "01.01.2100"; - else if(strlen($gebdat2) < 7) - $gebdat2 .= ".2099"; - - if($adressid && $_POST["overwrite"]) + return array( + "firma" => formularText("firma"), + "vname" => formularText("vname"), + "nname" => formularText("nname"), + "vname2" => formularText("vname2"), + "nname2" => formularText("nname2"), + "anrede_id" => formularGanzzahl("anrede"), + "titel_id" => formularGanzzahl("titel"), + "anrede2_id" => formularGanzzahl("anrede2"), + "titel2_id" => formularGanzzahl("titel2"), + "hnr" => formularText("hnr"), + "zusatz" => formularText("zusatz"), + "gebdat" => formularGeburtsdatum("gebdat"), + "gebdat2" => formularGeburtsdatum("gebdat2"), + ); +} + +/* + * Adresse anlegen oder ändern. + * + * Drei Fälle: + * - bestehende Adresse und "überschreiben": die Adresse wird geändert, + * alte Rechnungen zeigen danach auf den neuen Stand. + * - Hauptadresse (typ 1) ohne "überschreiben": es entsteht eine neue + * Version des Kunden (updateKunde()), alte Rechnungen behalten die alte. + * - sonst: neue Adresse. + * + * $kunde, $typ und $adressid überschreiben die Werte aus der Anfrage - + * savePart() und updateKunde() legen darüber die Hauptadresse eines frisch + * angelegten Partners an. + */ +function saveAdress($dbconn, $kunde = null, $typ = null, $adressid = null) +{ + $adressid = $adressid === null ? parameterGanzzahl("adressid") : (int)$adressid; + $kunde = $kunde === null ? parameterGanzzahl("kunde") : (int)$kunde; + $typ_id = $typ === null ? formularGanzzahl("typ") : (int)$typ; + $ueberschreiben = formularGanzzahl("overwrite") != 0; + + $err = 0; + if($adressid && $ueberschreiben) { message("Adresse wird geändert..."); - $act="ändern"; + $act = "ändern"; } - elseif($adressid && !$_POST["overwrite"]) + elseif($adressid) { message("Neue Adresse (update)..."); - $act="update"; - $qry=mysqli_query($dbconn,"SELECT updated_by FROM partner WHERE id = '$kunde'") or $err=error("Fehler testen auf aktualität:
".mysqli_error($dbconn)); - $res=mysqli_fetch_assoc($qry); - if($res["updated_by"]) - $err=error("Eine solche Adressänderung kann nur mit der aktuellsten Version des Kunden durchgeführt werden.
Bitte wechseln Sie zur aktuellsten Version und führen Sie die gewünschen Änderungen dort durch."); + $act = "update"; + $updatedBy = db_wert($dbconn, "SELECT updated_by FROM partner WHERE id = ?", array($kunde)); + if($updatedBy === false) + $err = error("Fehler testen auf aktualität:
".mysqli_error($dbconn)); + elseif($updatedBy) + $err = error("Eine solche Adressänderung kann nur mit der aktuellsten Version des Kunden durchgeführt werden.
Bitte wechseln Sie zur aktuellsten Version und führen Sie die gewünschen Änderungen dort durch."); } - else + else { message("Adresse wird angelegt..."); - $act="anlegen"; + $act = "anlegen"; } - if(!$err) + if($err) + return $err; + + beginneSpeichern($dbconn); + + $ids = ortsangabeIds($dbconn, array( + "land" => formularText("land"), + "ort" => formularText("ort"), + "plz" => formularText("plz"), + "ortsteil" => formularText("oteil"), + "str" => formularText("str"), + ), "beim adresse $act"); + if($ids === false) + return beendeSpeichern($dbconn, 1); + list($land_id, $ort_id, $str_id) = $ids; + + $felder = array_merge(array("str_id" => $str_id, "typ_id" => $typ_id), adressFormularwerte()); + $zuweisung = array(); + foreach(array_keys($felder) as $spalte) + $zuweisung[] = "`$spalte` = ?"; + $set = implode(", ", $zuweisung); + + if($adressid && $ueberschreiben) { - $qry=mysqli_query($dbconn,"SELECT id FROM land WHERE land = '$land'") or $err=error("Fehler beim suchen des Landes:
".mysqli_error($dbconn)); - if($res=mysqli_fetch_array($qry)) - $land_id = $res[0]; - else + $alt = db_zeile($dbconn, "SELECT * FROM adresse WHERE id = ?", array($adressid)); + if($alt === false || $alt === null) + return beendeSpeichern($dbconn, error("Fehler beim ändern der Adresse:
".mysqli_error($dbconn))); + + $sql = "UPDATE adresse SET $set WHERE id = ?"; + $werte = array_merge(array_values($felder), array($adressid)); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim ändern der Adresse:
".mysqli_error($dbconn))); + + $altWerte = array(); + foreach(array_keys($felder) as $spalte) + $altWerte[] = $alt[$spalte]; + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [adresse change]", + db_sql_text($dbconn, $sql, array_merge($altWerte, array($adressid))), "ändern"); + } + elseif($typ_id != 1 || !$adressid) + { + $sql = "INSERT INTO adresse SET $set, partner_id = ?"; + $werte = array_merge(array_values($felder), array($kunde)); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim Anlegen der Adresse:
".mysqli_error($dbconn))); + $adressid = mysqli_insert_id($dbconn); + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [Hat ID $adressid]", + "DELETE FROM adresse WHERE id = $adressid", "anlegen"); + } + else + { + // Hauptadresse ändern heißt: neue Version des Kunden anlegen + return beendeSpeichern($dbconn, updateKunde($dbconn, $kunde)); + } + + /* + * Kommissionsadressen (typ 5) haben eine eigene Telefonnummer, die im + * selben Formular steht. Wird der Typ zurückgestellt, fällt sie weg. + */ + if(!$err && $adressid) + { + if($typ_id != 5) { - $qry=mysqli_query($dbconn,"INSERT INTO land SET land = '$land'") or $err=error("Fehler beim anlegen des Landes:
".mysqli_error($dbconn)); - $land_id = mysqli_insert_id($dbconn); - if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO land SET land = $land [hat ID $land_id (beim adresse $act)]","DELETE FROM land WHERE id = $land_id","anlegen"); - } + db_abfrage($dbconn, "DELETE FROM tel WHERE adresse_id = ?", array($adressid)) + or $err = error("Fehler beim löschen der Telefonnummer der Adresse:
".mysqli_error($dbconn)); } - if(!$err) + elseif(formularText("nr") !== "") { - $qry=mysqli_query($dbconn,"SELECT id FROM ort WHERE land_id = '$land_id' AND ort = '$ort' AND plz = '$plz' AND ortsteil = '$oteil'") or $err=error("Fehler beim suchen des Ortes:
".mysqli_error($dbconn)); - if($res=mysqli_fetch_array($qry)) - $ort_id = $res[0]; - else - { - $qry=mysqli_query($dbconn,"INSERT INTO ort SET land_id = '$land_id', ort = '$ort', plz = '$plz', ortsteil = '$oteil'") or $err=error("Fehler beim anlegen des Ortes:
".mysqli_error($dbconn)); - $ort_id = mysqli_insert_id($dbconn); - if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO ort SET land_id=$land_id,ort = $ort, plz=$plz, ortsteil=$oteil [hat ID $ort_id (beim adresse $act)]","DELETE FROM ort WHERE id = $ort_id","anlegen"); - } - } - } - if(!$err) - { - $qry=mysqli_query($dbconn,"SELECT id FROM strasse WHERE ort_id = '$ort_id' AND str = '$str'") or $err=error("Fehler beim suchen der Straße:
".mysqli_error($dbconn)); - if($res=mysqli_fetch_array($qry)) - $str_id = $res[0]; - else - { - $qry=mysqli_query($dbconn,"INSERT INTO strasse SET str = '$str', ort_id = '$ort_id'") or $err=error("Fehler beim anlegen der Straße:
".mysqli_error($dbconn)); - $str_id = mysqli_insert_id($dbconn); - if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO strasse SET str = $str, ort_id = $ort_id [hat ID $str_id (beim adresse $act)]","DELETE FROM strasse WHERE id = $str_id","anlegen"); - } - } - } - if(!$err) - { - if($_GET["adressid"] && $_POST["overwrite"]) - { - $qry=mysqli_query($dbconn,"SELECT str_id,typ_id, firma, titel_id,vname,nname,vname2,nname2,anrede_id,anrede2_id,titel2_id,hnr FROM adresse - WHERE id='$adressid'") or $err=error("Fehler beim ändern der Adresse:
".mysqli_error($dbconn)); - $undores=mysqli_fetch_assoc($qry); - $qry=mysqli_query($dbconn,"UPDATE adresse SET - str_id='$str_id', - typ_id='$typ_id', - firma='$firma', - vname='$vname', - nname='$nname', - vname2='$vname2', - nname2='$nname2', - titel_id='$titel_id', - anrede_id='$anrede_id', - titel2_id='$titel2_id', - anrede2_id='$anrede2_id', - gebdat=STR_TO_DATE('$gebdat','%d.%m.%Y'), - gebdat2=STR_TO_DATE('$gebdat2','%d.%m.%Y'), - zusatz='$zusatz', - hnr='$hnr' - WHERE id='$adressid'") or $err=error("Fehler beim ändern der Adresse:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"UPDATE adresse SET str_id=$str_id,typ_id=$typ_id,firma=$firma,titel_id=$titel_id,titel_id2='$titel2_id',anrede_id2='$anrede2_id',vname=$vname,nname=$nname,vname2=$vname2,nname2=$nname2,anrede_id=$anrede_id,hnr=$hnr,zusatz='$zusatz' WHERE id=$adressid", - "UPDATE adresse SET str_id=".$undores["str_id"].",typ_id=".$undores["typ_id"].",typ2_id=".$undores["typ2_id"].",anrede2_id=".$undores["anrede2_id"].",firma=".$undores["firma"].",titel_id=".$undores["titel_id"].",vname=".$undores["vname"].",nname=".$undores["nname"].",vname2=".$undores["vname2"].",nname2=".$undores["nname2"].",anrede_id=".$undores["anrede_id"].",hnr=".$undores["hnr"].",zusatz=".$undores["zusatz"]." WHERE id=$adressid", - "ändern"); - } - } - elseif($typ_id != 1 || !$_GET["adressid"]) - { - $qry=mysqli_query($dbconn,"INSERT INTO adresse SET - str_id='$str_id', - typ_id='$typ_id', - firma='$firma', - vname='$vname', - nname='$nname', - vname2='$vname2', - nname2='$nname2', - titel_id='$titel_id', - anrede_id='$anrede_id', - titel2_id='$titel2_id', - anrede2_id='$anrede2_id', - gebdat=STR_TO_DATE('$gebdat','%d.%m.%Y'), - gebdat2=STR_TO_DATE('$gebdat2','%d.%m.%Y'), - zusatz='$zusatz', - hnr='$hnr', - partner_id='$kunde'") or $err=error("Fehler beim Anlegen der Adresse:
".mysqli_error($dbconn)); - $adressid=mysqli_insert_id($dbconn); - if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO adresse SET str_id=$str_id,typ_id=$typ_id,firma=$firma,titel_id=$titel_id,titel_id2='$titel2_id',anrede_id2='$anrede2_id',vname='$vname',nname='$nname',vname2='$vname2',nname2='$nname2',anrede_id='$anrede_id',hnr='$hnr',zusatz='$zusatz', partner_id=$kunde [Hat ID $adressid]", - "DELETE FROM adresse WHERE id=$adressid", - "anlegen"); - } - } + $telid = db_wert($dbconn, "SELECT id FROM tel WHERE adresse_id = ? ORDER BY id LIMIT 1", array($adressid)); + if($telid === false) + $err = error("Fehler beim suchen der Telefonnummer der Adresse:
".mysqli_error($dbconn)); else - { - $err=updateKunde($dbconn,$kunde); - } + $err = speichereTelefon($dbconn, array( + "telid" => (int)$telid, + "adresse_id" => $adressid, + "partner_id" => $kunde, + // newadress.tpl kennt keine Typauswahl für die Nummer + "typ_id" => 1, + "name" => "", + "nr" => formularText("nr"), + "vwahl" => formularText("vwahl"), + "land" => formularText("telland"), + "ort" => formularText("telort"), + "plz" => formularText("telplz"), + "ortsteil" => formularText("teloteil"), + )); } } - if(!$err) - { - if($typ_id != 5 && $adressid) - { - mysqli_query($dbconn,"DELETE FROM tel WHERE adress_id = '$adressid'"); - } - elseif($typ_id == 5 && $adressid) - { - $qry = mysqli_query($dbconn,"SELECT id FROM tel WHERE adress_id = '$adressid'"); - if($res = mysql_fetch_assoc($qry)) - $_GET["telid"] = $res["id"]; - $_GET["adressid"] = $adressid; - $err = saveTel($dbconn); - } - - } - return $err; + return beendeSpeichern($dbconn, $err); } function dispAdressForm($dbconn,$smarty,$typ=1) { - if(!$_GET["adressid"]) + $adressid = parameterGanzzahl("adressid"); + $kunde = parameterGanzzahl("kunde"); + if(!$adressid) { $smarty->assign("head","Neue Adresse anlegen"); - $qry=mysqli_query($dbconn, "SELECT anrede_id, titel_id, firma, vname, nname, vname2, nname2 - FROM adresse - WHERE adresse.partner_id ='".mysql_escape_string($_GET["kunde"])."' AND adresse.typ_id = 1") or $err=error("Fehler beim auslesen der Daten:
".mysqli_error($dbconn)); - + // Firma, Anrede und Namen der Hauptadresse als Vorbelegung + $res = db_zeile($dbconn, "SELECT anrede_id, titel_id, firma, vname, nname, vname2, nname2 + FROM adresse + WHERE adresse.partner_id = ? AND adresse.typ_id = 1", array($kunde)); } else { $smarty->assign("head","Adresse ändern"); - $qry=mysqli_query($dbconn, "SELECT anrede_id, zusatz, titel_id, anrede2_id, titel2_id, DATE_FORMAT(gebdat,'%d.%m.%Y') AS gebdat, DATE_FORMAT(gebdat2,'%d.%m.%Y') AS gebdat2, firma, vname, nname, vname2, nname2,str, hnr, ort, ortsteil,plz, land, typ_id, partner_id FROM adresse - JOIN strasse ON strasse.id = adresse.str_id - JOIN ort ON strasse.ort_id = ort.id - JOIN land ON land.id = ort.land_id - WHERE adresse.id ='".mysql_escape_string($_GET["adressid"])."'") or $err=error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); + $res = db_zeile($dbconn, "SELECT anrede_id, zusatz, titel_id, anrede2_id, titel2_id, + DATE_FORMAT(gebdat,'%d.%m.%Y') AS gebdat, DATE_FORMAT(gebdat2,'%d.%m.%Y') AS gebdat2, + firma, vname, nname, vname2, nname2, str, hnr, ort, ortsteil, plz, land, typ_id, partner_id + FROM adresse + JOIN strasse ON strasse.id = adresse.str_id + JOIN ort ON strasse.ort_id = ort.id + JOIN land ON land.id = ort.land_id + WHERE adresse.id = ?", array($adressid)); } - $res=mysqli_fetch_assoc($qry); - $smarty->assign("kunde",$_GET["kunde"]); - $smarty->assign("firma",$res["firma"]); - $smarty->assign("titel",$res["titel_id"]); - $smarty->assign("anrede",$res["anrede_id"]); - $smarty->assign("titel2",$res["titel2_id"]); - $smarty->assign("anrede2",$res["anrede2_id"]); - $smarty->assign("vname",$res["vname"]); - $smarty->assign("nname",$res["nname"]); - $smarty->assign("vname2",$res["vname2"]); - $smarty->assign("nname2",$res["nname2"]); - $smarty->assign("ort",$res["ort"]); - $smarty->assign("plz",$res["plz"]); - $smarty->assign("hnr",$res["hnr"]); - $smarty->assign("land",$res["land"]); - $smarty->assign("str",$res["str"]); - $smarty->assign("oteil",$res["ortsteil"]); - $smarty->assign("typ",$res["typ_id"]); - $smarty->assign("zusatz",$res["zusatz"]); - - $qry=mysqli_query($dbconn, "SELECT tel.id AS telid, ort, name, vwahl, ortsteil, land, plz, typ_id, partner_id, nr FROM tel - JOIN ort ON tel.ort_id = ort.id - JOIN land ON land.id = ort.land_id - WHERE tel.adresse_id ='".mysql_escape_string($_GET["adressid"])."'") or $err=error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); - if($telres=mysqli_fetch_assoc($qry)) + if($res === false) + return error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); + if(!$res) + $res = array(); + if(!empty($res["partner_id"])) + $kunde = $res["partner_id"]; + + foreach(array("firma","vname","nname","vname2","nname2","ort","plz","hnr","land","str","zusatz") as $feld) + $smarty->assign($feld, isset($res[$feld]) ? $res[$feld] : ""); + $smarty->assign("titel", isset($res["titel_id"]) ? $res["titel_id"] : ""); + $smarty->assign("anrede", isset($res["anrede_id"]) ? $res["anrede_id"] : ""); + $smarty->assign("titel2", isset($res["titel2_id"]) ? $res["titel2_id"] : ""); + $smarty->assign("anrede2", isset($res["anrede2_id"]) ? $res["anrede2_id"] : ""); + $smarty->assign("oteil", isset($res["ortsteil"]) ? $res["ortsteil"] : ""); + $smarty->assign("typ", isset($res["typ_id"]) ? $res["typ_id"] : ""); + $smarty->assign("gebdat", geburtstagAnzeigen(isset($res["gebdat"]) ? $res["gebdat"] : "")); + $smarty->assign("gebdat2", geburtstagAnzeigen(isset($res["gebdat2"]) ? $res["gebdat2"] : "")); + + // Telefonnummer einer Kommissionsadresse: eigene Felder im Formular + $telres = db_zeile($dbconn, "SELECT tel.id AS telid, ort, name, vwahl, ortsteil, land, plz, typ_id, partner_id, nr + FROM tel + JOIN ort ON tel.ort_id = ort.id + JOIN land ON land.id = ort.land_id + WHERE tel.adresse_id = ? ORDER BY tel.id LIMIT 1", array($adressid)); + if($telres === false) + return error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); + if($telres) { - $smarty->assign("name",$telres["name"]); - $smarty->assign("ort",$telres["ort"]); - $smarty->assign("plz",$telres["plz"]); $smarty->assign("nr",$telres["nr"]); $smarty->assign("vwahl",$telres["vwahl"]); - $smarty->assign("land",$telres["land"]); - $smarty->assign("oteil",$telres["ortsteil"]); - $smarty->assign("teltyp",$telres["typ_id"]); - $_GET["kunde"] = $telres["partner_id"]; + $smarty->assign("telplz",$telres["plz"]); + $smarty->assign("telort",$telres["ort"]); + $smarty->assign("teloteil",$telres["ortsteil"]); + $smarty->assign("telland",$telres["land"]); $smarty->assign("telid",$telres["telid"]); + if(!$kunde) + $kunde = $telres["partner_id"]; } - if($res["gebdat"] != "01.01.2100") - { - if(substr($res["gebdat"],6,4) != "2099") - $smarty->assign("gebdat",$res["gebdat"]); - else - $smarty->assign("gebdat",substr($res["gebdat"],0,5)); - } - if($res["gebdat2"] != "01.01.2100") - { - if(substr($res["gebdat2"],6,4) != "2099") - $smarty->assign("gebdat2",$res["gebdat2"]); - else - $smarty->assign("gebdat2",substr($res["gebdat2‚"],0,5)); - } - $smarty->assign("adressid",$_GET["adressid"]); - $_GET["kunde"] = $res["partner_id"]; - $qry=mysqli_query($dbconn, "SELECT id,anrede FROM anrede WHERE id < 4"); - while($res=mysqli_fetch_assoc($qry)) - { - $anrids[] = $res["id"]; - $anrnames[] = $res["anrede"]; - } + $smarty->assign("kunde",$kunde); + $smarty->assign("adressid",$adressid); + + list($anrids, $anrnamen) = auswahlliste($dbconn, "SELECT id, anrede FROM anrede WHERE id < 4"); $smarty->assign("anrids",$anrids); - $smarty->assign("anrs",$anrnames); - $qry=mysqli_query($dbconn, "SELECT id,titel FROM titel"); - while($res=mysqli_fetch_assoc($qry)) - { - $titelids[] = $res["id"]; - $titelnames[] = $res["titel"]; - } + $smarty->assign("anrs",$anrnamen); + list($titelids, $titelnamen) = auswahlliste($dbconn, "SELECT id, titel FROM titel"); $smarty->assign("titelids",$titelids); - $smarty->assign("titels",$titelnames); - - $qry=mysqli_query($dbconn, "SELECT id,typ FROM adresstyp WHERE id != 1"); - while($res=mysqli_fetch_assoc($qry)) - { - $typids[] = $res["id"]; - $typnames[] = $res["typ"]; - } + $smarty->assign("titels",$titelnamen); + list($typids, $typnamen) = auswahlliste($dbconn, "SELECT id, typ FROM adresstyp WHERE id != 1"); $smarty->assign("typids",$typids); - $smarty->assign("typs",$typnames); - if($typ == 1) - $smarty->assign("frmact","kundenchange"); - elseif($typ == 2) - $smarty->assign("frmact","lieferchange"); + $smarty->assign("typs",$typnamen); + + $smarty->assign("frmact", $typ == 2 ? "lieferchange" : "kundenchange"); $smarty->display("newadress.tpl"); + return 0; } //############################################## //########## TEL.NRN. ###################### //############################################## -function saveTel($dbconn) +/* + * Legt eine Telefonnummer an oder ändert sie. $daten enthält telid, + * adresse_id, partner_id, typ_id, name, nr, vwahl und die Ortsangaben + * land/ort/plz/ortsteil. + */ +function speichereTelefon($dbconn, $daten) { - $telid = mysql_escape_string($_GET["telid"]); - $adressid = mysql_escape_string($_GET["adressid"]); - $land = mysql_escape_string(trim($_POST["land"])); - $ort = mysql_escape_string(trim($_POST["ort"])); - $plz = mysql_escape_string(trim($_POST["plz"])); - $oteil = mysql_escape_string(trim($_POST["oteil"])); - $name = mysql_escape_string(trim($_POST["name"])); - $typ_id = mysql_escape_string(trim($_POST["typ"])); - $nr = mysql_escape_string(trim($_POST["nr"])); - $vwahl = mysql_escape_string(trim($_POST["vwahl"])); - $kunde=mysql_escape_string($_GET["kunde"]); - - if(!$telid) + $telid = (int)$daten["telid"]; + $act = $telid ? "ändern" : "anlegen"; + message($telid ? "Telefonnummer wird geändert..." : "Telefonnummer wird angelegt..."); + + beginneSpeichern($dbconn); + + $ids = ortsangabeIds($dbconn, $daten, "beim telefon $act"); + if($ids === false) + return beendeSpeichern($dbconn, 1); + list($land_id, $ort_id) = $ids; + + // Die Vorwahl hängt am Ort, nicht an der Nummer + $alteVorwahl = db_wert($dbconn, "SELECT vwahl FROM ort WHERE id = ?", array($ort_id)); + if($alteVorwahl === false) + return beendeSpeichern($dbconn, error("Fehler beim ermitteln der Daten für die LOG:
".mysqli_error($dbconn))); + $err = 0; + if($alteVorwahl !== $daten["vwahl"]) { - message("Telefonnummer wird angelegt..."); - $act = "anlegen"; + $sql = "UPDATE ort SET vwahl = ? WHERE id = ?"; + $werte = array($daten["vwahl"], $ort_id); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim anlegen der Vorwahl:
".mysqli_error($dbconn))); + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [(beim telefon $act)]", + db_sql_text($dbconn, $sql, array($alteVorwahl, $ort_id)), "ändern"); } - else + if($err) + return beendeSpeichern($dbconn, $err); + + $felder = array( + "ort_id" => $ort_id, + "typ_id" => (int)$daten["typ_id"], + "name" => $daten["name"], + "adresse_id" => (int)$daten["adresse_id"], + "nr" => $daten["nr"], + ); + $zuweisung = array(); + foreach(array_keys($felder) as $spalte) + $zuweisung[] = "`$spalte` = ?"; + $set = implode(", ", $zuweisung); + + if($telid) { - message("Telefonnummer wird geändert..."); - $act="ändern"; + $alt = db_zeile($dbconn, "SELECT * FROM tel WHERE id = ?", array($telid)); + if($alt === false || $alt === null) + return beendeSpeichern($dbconn, error("Fehler beim ermitteln der Daten für die LOG:
".mysqli_error($dbconn))); + + $sql = "UPDATE tel SET $set WHERE id = ?"; + $werte = array_merge(array_values($felder), array($telid)); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim ändern der Telefonnummer:
".mysqli_error($dbconn))); + + $altWerte = array(); + foreach(array_keys($felder) as $spalte) + $altWerte[] = $alt[$spalte]; + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [tel change]", + db_sql_text($dbconn, $sql, array_merge($altWerte, array($telid))), "ändern"); } - $qry=mysqli_query($dbconn,"SELECT id FROM land WHERE land = '$land'") or $err=error("Fehler beim suchen des Landes:
".mysqli_error($dbconn)); - if($res=mysqli_fetch_array($qry)) - $land_id = $res[0]; else { - $qry=mysqli_query($dbconn,"INSERT INTO land SET land = '$land'") or $err=error("Fehler beim anlegen des Landes:
".mysqli_error($dbconn)); - $land_id = mysqli_insert_id($dbconn); - if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO land SET land = $land [hat ID $land_id (beim telefon $act)]", - "DELETE FROM land WHERE id = $land_id", - "anlegen"); - } + $sql = "INSERT INTO tel SET $set, partner_id = ?"; + $werte = array_merge(array_values($felder), array((int)$daten["partner_id"])); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim Anlegen der Telefonnummer:
".mysqli_error($dbconn))); + $telid = mysqli_insert_id($dbconn); + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [hat ID $telid]", + "DELETE FROM tel WHERE id = $telid", "anlegen"); } - if(!$err) - { - $qry=mysqli_query($dbconn,"SELECT id FROM ort WHERE land_id = '$land_id' AND ort = '$ort' AND plz = '$plz' AND ortsteil = '$oteil'") or $err=error("Fehler beim suchen des Ortes:
".mysqli_error($dbconn)); - if($res=mysqli_fetch_array($qry)) - $ort_id = $res[0]; - else - { - $qry=mysqli_query($dbconn,"INSERT INTO ort SET land_id = '$land_id', ort = '$ort', plz = '$plz', ortsteil = '$oteil'") or $err=error("Fehler beim anlegen des Ortes:
".mysqli_error($dbconn)); - $ort_id = mysqli_insert_id($dbconn); - if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO ort SET land_id=$land_id,ort = $ort, plz=$plz, ortsteil=$oteil [hat ID $ort_id (beim telefon $act)]", - "DELETE FROM ort WHERE id = $ort_id", - "anlegen"); - } - } - } - if(!$err) - { - $qry=mysqli_query($dbconn,"SELECT vwahl FROM ort WHERE id = '$ort_id'") or $err=error("Fehler beim ermitteln der Daten für die LOG:
".mysqli_error($dbconn)); - $undores=mysqli_fetch_assoc($qry); - $qry=mysqli_query($dbconn,"UPDATE ort SET vwahl = '$vwahl' WHERE id = '$ort_id'") or $err=error("Fehler beim anlegen der Vorwahl:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"UPDATE ort SET vwahl = $vwahl WHERE id = $ort_id [(beim telefon $act)]", - "UPDATE ort SET vwahl = ".$undores["vwahl"]." WHERE id = $ort_id", - "ändern"); - } - if($telid) - { - $qry=mysqli_query($dbconn,"SELECT ort_id,typ_id,name,adresse_id='$adressid',nr FROM tel WHERE id = '$telid'") or $err=error("Fehler beim ermitteln der Daten für die LOG:
".mysqli_error($dbconn)); - $undores=mysqli_fetch_assoc($qry); - $qry=mysqli_query($dbconn,"UPDATE tel SET - ort_id='$ort_id', - typ_id='$typ_id', - name='$name', - adresse_id='$adressid', - nr='$nr' - WHERE id='$telid'") or $err=error("Fehler beim ändern der Telefonnummer:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"UPDATE tel SET ort_id=$ort_id, typ_id=$typ_id, name=$name, adresse_id='$adressid', nr=$nr WHERE id=$telid", - "UPDATE tel SET ort_id=".$undores["ort_id"].", typ_id=".$undores["typ_id"].", name=".$undores["name"].",adresse_id='".$undores["adresse_id"]."', nr=".$undores["nr"]." WHERE id=$telid", - "ändern"); - } - } - else - { - $qry=mysqli_query($dbconn,"INSERT INTO tel SET - ort_id='$ort_id', - typ_id='$typ_id', - name='$name', - adresse_id='$adressid', - nr='$nr', - partner_id='$kunde'") or $err=error("Fehler beim Anlegen der Telefonnummer:
".mysqli_error($dbconn)); - $telid=mysqli_insert_id($dbconn); - if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO tel SET ort_id=$ort_id, typ_id=$typ_id, name=$name, adresse_id='$adressid', nr=$nr, partner_id = $kunde [hat ID $telid]", - "DELETE FROM tel WHERE id=$telid", - "anlegen"); - } - } - } - return $err; + return beendeSpeichern($dbconn, $err); +} + +/* Telefonnummer aus dem eigenen Formular (newtel.tpl) */ +function saveTel($dbconn) +{ + return speichereTelefon($dbconn, array( + "telid" => parameterGanzzahl("telid"), + "adresse_id" => parameterGanzzahl("adressid"), + "partner_id" => parameterGanzzahl("kunde"), + "typ_id" => formularGanzzahl("typ"), + "name" => formularText("name"), + "nr" => formularText("nr"), + "vwahl" => formularText("vwahl"), + "land" => formularText("land"), + "ort" => formularText("ort"), + "plz" => formularText("plz"), + "ortsteil" => formularText("oteil"), + )); } function dispTelForm($dbconn,$smarty,$typ=1) { - if(!$_GET["telid"]) + $telid = parameterGanzzahl("telid"); + $kunde = parameterGanzzahl("kunde"); + if(!$telid) { $smarty->assign("head","Neue Telefonnummer anlegen"); - $qry=mysqli_query($dbconn, "SELECT ort, vname, nname, vwahl, ortsteil, land, plz - FROM adresse JOIN strasse ON strasse.id = adresse.str_id JOIN ort ON ort.id = strasse.ort_id JOIN land ON land.id = ort.land_id - WHERE adresse.partner_id ='".mysql_escape_string($_GET["kunde"])."' AND adresse.typ_id = 1") or $err=error("Fehler beim auslesen der Daten:
".mysqli_error($dbconn)); + // Ort und Name aus der Hauptadresse als Vorbelegung + $res = db_zeile($dbconn, "SELECT ort, vname, nname, vwahl, ortsteil, land, plz + FROM adresse + JOIN strasse ON strasse.id = adresse.str_id + JOIN ort ON ort.id = strasse.ort_id + JOIN land ON land.id = ort.land_id + WHERE adresse.partner_id = ? AND adresse.typ_id = 1", array($kunde)); } else { $smarty->assign("head","Telefonnummer ändern"); - $qry=mysqli_query($dbconn, "SELECT ort, name, vwahl, ortsteil, land, plz, typ_id, partner_id, nr FROM tel - JOIN ort ON tel.ort_id = ort.id - JOIN land ON land.id = ort.land_id - WHERE tel.id ='".mysql_escape_string($_GET["telid"])."'") or $err=error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); + $res = db_zeile($dbconn, "SELECT ort, name, vwahl, ortsteil, land, plz, typ_id, partner_id, nr + FROM tel + JOIN ort ON tel.ort_id = ort.id + JOIN land ON land.id = ort.land_id + WHERE tel.id = ?", array($telid)); } - $res=mysqli_fetch_assoc($qry); - if($res["vname"] || $res["nname"]) - $res["name"] = $res["vname"]." ".$res["nname"]; - - $smarty->assign("kunde",$_GET["kunde"]); - $smarty->assign("name",$res["name"]); - $smarty->assign("ort",$res["ort"]); - $smarty->assign("plz",$res["plz"]); - $smarty->assign("nr",$res["nr"]); - $smarty->assign("vwahl",$res["vwahl"]); - $smarty->assign("land",$res["land"]); - $smarty->assign("oteil",$res["ortsteil"]); - $smarty->assign("typ",$res["typ_id"]); - $_GET["kunde"] = $res["partner_id"]; - $smarty->assign("telid",$_GET["telid"]); + if($res === false) + return error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); + if(!$res) + $res = array(); + if(!empty($res["vname"]) || !empty($res["nname"])) + $res["name"] = trim($res["vname"]." ".$res["nname"]); + if(!empty($res["partner_id"])) + $kunde = $res["partner_id"]; - $qry=mysqli_query($dbconn, "SELECT id,typ FROM teltyp"); - while($res=mysqli_fetch_assoc($qry)) - { - $typids[] = $res["id"]; - $typnames[] = $res["typ"]; - } + foreach(array("name","ort","plz","nr","vwahl","land") as $feld) + $smarty->assign($feld, isset($res[$feld]) ? $res[$feld] : ""); + $smarty->assign("oteil", isset($res["ortsteil"]) ? $res["ortsteil"] : ""); + $smarty->assign("typ", isset($res["typ_id"]) ? $res["typ_id"] : ""); + $smarty->assign("kunde",$kunde); + $smarty->assign("telid",$telid); + + list($typids, $typnamen) = auswahlliste($dbconn, "SELECT id, typ FROM teltyp"); $smarty->assign("typids",$typids); - $smarty->assign("typs",$typnames); - if($typ == 1) - $smarty->assign("frmact","kundenchange"); - elseif($typ == 2) - $smarty->assign("frmact","lieferchange"); + $smarty->assign("typs",$typnamen); + $smarty->assign("frmact", $typ == 2 ? "lieferchange" : "kundenchange"); $smarty->display("newtel.tpl"); + return 0; } + //############################################## //########## KONTAKTE ###################### //############################################## function saveKontakt($dbconn) { - $kontaktid = mysql_escape_string($_GET["kontaktid"]); - $kontakt = trim($_POST["kontakt"]); - $typ_id = mysql_escape_string(trim($_POST["typ"])); - $kunde = mysql_escape_string($_GET["kunde"]); + $kontaktid = parameterGanzzahl("kontaktid"); + $kunde = parameterGanzzahl("kunde"); + $felder = array( + "kontakt" => formularText("kontakt"), + "typ_id" => formularGanzzahl("typ"), + ); + $set = "kontakt = ?, typ_id = ?"; + $err = 0; + beginneSpeichern($dbconn); if($kontaktid) { message("Kontaktadresse wird geändert..."); - $qry=mysqli_query($dbconn,"SELECT kontakt, typ_id FROM kontakt WHERE id = '$kontaktid'") or $err=error("Fehler beim ermitteln der Daten für die LOG:
".mysqli_error($dbconn)); - $undores=mysqli_fetch_assoc($qry); - $qry=mysqli_query($dbconn,"UPDATE kontakt SET - kontakt='$kontakt', - typ_id='$typ_id' - WHERE id='$kontaktid'") or $err=error("Fehler beim ändern der Kontaktadresse:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"UPDATE kontakt SET kontakt='$kontakt',typ_id='$typ_id', WHERE id='$kontaktid'", - "UPDATE kontakt SET kontakt='".$undores["kontakt"]."',typ_id='".$undores["typ_id"]."', WHERE id='".$kontaktid."'", - "ändern"); - } + $alt = db_zeile($dbconn, "SELECT kontakt, typ_id FROM kontakt WHERE id = ?", array($kontaktid)); + if($alt === false || $alt === null) + return beendeSpeichern($dbconn, error("Fehler beim ermitteln der Daten für die LOG:
".mysqli_error($dbconn))); + + $sql = "UPDATE kontakt SET $set WHERE id = ?"; + $werte = array_merge(array_values($felder), array($kontaktid)); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim ändern der Kontaktadresse:
".mysqli_error($dbconn))); + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [kontakt change]", + db_sql_text($dbconn, $sql, array($alt["kontakt"], $alt["typ_id"], $kontaktid)), "ändern"); } else - { + { message("Kontaktadresse wird angelegt..."); - $qry=mysqli_query($dbconn,"INSERT INTO kontakt SET - kontakt='$kontakt', - typ_id='$typ_id', - partner_id='$kunde'") or $err=error("Fehler beim Anlegen der Kontaktadresse:
".mysqli_error($dbconn)); - $kontaktid=mysqli_insert_id($dbconn); - if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO kontakt SET kontakt='$kontakt', typ_id='$typ_id', partner_id='$kunde' [Hat ID $kontaktid]", - "DELETE FROM kontakt WHERE id='".$kontaktid."'", - "anlegen"); - } + $sql = "INSERT INTO kontakt SET $set, partner_id = ?"; + $werte = array_merge(array_values($felder), array($kunde)); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim Anlegen der Kontaktadresse:
".mysqli_error($dbconn))); + $kontaktid = mysqli_insert_id($dbconn); + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [Hat ID $kontaktid]", + "DELETE FROM kontakt WHERE id = $kontaktid", "anlegen"); } - return $err; + return beendeSpeichern($dbconn, $err); } function dispKontaktForm($dbconn,$smarty,$typ=1) { - if(!$_GET["kontaktid"]) - { + $kontaktid = parameterGanzzahl("kontaktid"); + $kunde = parameterGanzzahl("kunde"); + $res = array(); + if(!$kontaktid) $smarty->assign("head","Neue Kontaktadresse anlegen"); - $res = array(); - } else { $smarty->assign("head","Kontaktadresse ändern"); - $qry=mysqli_query($dbconn, "SELECT kontakt, typ_id, partner_id FROM kontakt - WHERE id ='".mysql_escape_string($_GET["kontaktid"])."'") or $err=error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); - $res=mysqli_fetch_assoc($qry); + $res = db_zeile($dbconn, "SELECT kontakt, typ_id, partner_id FROM kontakt WHERE id = ?", array($kontaktid)); + if($res === false) + return error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); + if(!$res) + $res = array(); } - $smarty->assign("kunde",$_GET["kunde"]); - $smarty->assign("kontakt",$res["kontakt"]); - $smarty->assign("typ",$res["typ_id"]); - $_GET["kunde"] = $res["partner_id"]; - $smarty->assign("kontaktid",$_GET["kontaktid"]); + if(!empty($res["partner_id"])) + $kunde = $res["partner_id"]; + $smarty->assign("kunde",$kunde); + $smarty->assign("kontakt", isset($res["kontakt"]) ? $res["kontakt"] : ""); + $smarty->assign("typ", isset($res["typ_id"]) ? $res["typ_id"] : ""); + $smarty->assign("kontaktid",$kontaktid); - $qry=mysqli_query($dbconn, "SELECT id,typ FROM kontakttyp"); - while($res=mysqli_fetch_assoc($qry)) - { - $typids[] = $res["id"]; - $typnames[] = $res["typ"]; - } + list($typids, $typnamen) = auswahlliste($dbconn, "SELECT id, typ FROM kontakttyp"); $smarty->assign("typids",$typids); - $smarty->assign("typs",$typnames); - if($typ == 1) - $smarty->assign("frmact","kundenchange"); - elseif($typ == 2) - $smarty->assign("frmact","lieferchange"); - + $smarty->assign("typs",$typnamen); + $smarty->assign("frmact", $typ == 2 ? "lieferchange" : "kundenchange"); $smarty->display("newkontakt.tpl"); + return 0; } //############################################## @@ -549,75 +704,88 @@ function dispKontaktForm($dbconn,$smarty,$typ=1) function saveNotiz($dbconn) { - $notizid = mysql_escape_string($_GET["notizid"]); - $notiz = trim($_POST["notiz"]); - $color = mysql_escape_string(trim($_POST["color"])); - $kunde = mysql_escape_string($_GET["kunde"]); + $notizid = parameterGanzzahl("notizid"); + $kunde = parameterGanzzahl("kunde"); + $felder = array( + "notiz" => formularText("notiz"), + "color" => formularText("color"), + ); + $set = "notiz = ?, color = ?, datetime = NOW()"; + $err = 0; + beginneSpeichern($dbconn); if($notizid) { message("Notiz wird geändert..."); - $qry=mysqli_query($dbconn,"SELECT notiz, color, datetime FROM notiz WHERE id='$notizid'") or $err=error("Fehler beimerfassen der Daten für die LOG:
".mysqli_error($dbconn)); - $undores=mysqli_fetch_assoc($qry); - $qry=mysqli_query($dbconn,"UPDATE notiz SET - notiz='$notiz', - color='$color', - datetime=NOW() - WHERE id='$notizid'") or $err=error("Fehler beim ändern der Notiz:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"UPDATE notiz SET notiz='$notiz',color='$color', datetime=NOW() WHERE id='$notizid'", - "UPDATE notiz SET notiz='".$undores["notiz"]."',color='".$undores["color"]."', datetime='".$undores["datetime"]."' WHERE id='$notizid'", - "ändern"); - } + $alt = db_zeile($dbconn, "SELECT notiz, color, datetime FROM notiz WHERE id = ?", array($notizid)); + if($alt === false || $alt === null) + return beendeSpeichern($dbconn, error("Fehler beim erfassen der Daten für die LOG:
".mysqli_error($dbconn))); + + $sql = "UPDATE notiz SET $set WHERE id = ?"; + $werte = array_merge(array_values($felder), array($notizid)); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim ändern der Notiz:
".mysqli_error($dbconn))); + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [notiz change]", + db_sql_text($dbconn, "UPDATE notiz SET notiz = ?, color = ?, datetime = ? WHERE id = ?", + array($alt["notiz"], $alt["color"], $alt["datetime"], $notizid)), "ändern"); } else - { - message("Notiz wird angelegt..."); - $qry=mysqli_query($dbconn,"INSERT INTO notiz SET - notiz='$notiz', - color='$color', - datetime=NOW(), - partner_id='$kunde'") or $err=error("Fehler beim Anlegen der Notiz:
".mysqli_error($dbconn)); - $notizid=mysqli_insert_id($dbconn); - if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO notiz SET notiz='$notiz',color='$color', datetime=NOW(), partner_id='$kunde' [Hat ID $notizid]", - "DELETE FROM notiz WHERE id='$notizid'", - "anlegen"); - } - } - if($_FILES['notefile']['tmp_name']) { - //echo "Dateiname: ./".UPLOADS_PATH."notes/".$notizid.".".pathinfo($_FILES["notefile"]["name"],PATHINFO_EXTENSION); - if(!is_dir("./".UPLOADS_PATH."notes/")) - $err = error("Pfad zum speichern existiert nicht"); - del_files("./".UPLOADS_PATH."notes/","!^".$notizid."\..*$!"); - if(!move_uploaded_file($_FILES['notefile']['tmp_name'], "./".UPLOADS_PATH."notes/".$notizid.".".pathinfo($_FILES["notefile"]["name"],PATHINFO_EXTENSION))) - $err = error("Hochgeladene Datei konnte leider nicht gespeichert werden."); + message("Notiz wird angelegt..."); + $sql = "INSERT INTO notiz SET $set, partner_id = ?"; + $werte = array_merge(array_values($felder), array($kunde)); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim Anlegen der Notiz:
".mysqli_error($dbconn))); + $notizid = mysqli_insert_id($dbconn); + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [Hat ID $notizid]", + "DELETE FROM notiz WHERE id = $notizid", "anlegen"); } - return $err; + if(!$err && !empty($_FILES["notefile"]["tmp_name"])) + $err = speichereNotizDatei($notizid); + return beendeSpeichern($dbconn, $err); +} + +/* + * Anhang einer Notiz. Der Dateiname ist die Notiz-id, die Endung kommt aus + * dem Hochgeladenen - deshalb wird sie auf harmlose Zeichen begrenzt, sonst + * ließe sich über den Namen eine .php im Uploads-Verzeichnis ablegen. + */ +function speichereNotizDatei($notizid) +{ + $ordner = "./".UPLOADS_PATH."notes/"; + if(!is_dir($ordner)) + return error("Pfad zum speichern existiert nicht"); + $endung = strtolower(pathinfo($_FILES["notefile"]["name"], PATHINFO_EXTENSION)); + if(!preg_match('/^[a-z0-9]{1,8}$/', $endung) || in_array($endung, array("php", "phtml", "phar", "htaccess"))) + return error("Dieser Dateityp kann nicht gespeichert werden."); + del_files($ordner, "!^".preg_quote((string)$notizid, "!")."\..*$!"); + if(!move_uploaded_file($_FILES["notefile"]["tmp_name"], $ordner.$notizid.".".$endung)) + return error("Hochgeladene Datei konnte leider nicht gespeichert werden."); + return 0; } function dispNotizForm($dbconn,$smarty,$typ=1) { - if(!$_GET["notizid"]) - { + $notizid = parameterGanzzahl("notizid"); + $kunde = parameterGanzzahl("kunde"); + $res = array(); + if(!$notizid) $smarty->assign("head","Neue Notiz anlegen"); - $res = array(); - } else { $smarty->assign("head","Notiz ändern"); - $qry=mysqli_query($dbconn, "SELECT notiz, color, partner_id FROM notiz - WHERE id ='".mysql_escape_string($_GET["notizid"])."'") or $err=error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); - $res=mysqli_fetch_assoc($qry); + $res = db_zeile($dbconn, "SELECT notiz, color, partner_id FROM notiz WHERE id = ?", array($notizid)); + if($res === false) + return error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); + if(!$res) + $res = array(); } - $smarty->assign("kunde",$_GET["kunde"]); - $smarty->assign("notiz",$res["notiz"]); - $smarty->assign("color",$res["color"]); - $_GET["kunde"] = $res["partner_id"]; - $smarty->assign("notizid",$_GET["notizid"]); + if(!empty($res["partner_id"])) + $kunde = $res["partner_id"]; + $smarty->assign("kunde",$kunde); + $smarty->assign("notiz", isset($res["notiz"]) ? $res["notiz"] : ""); + $smarty->assign("color", isset($res["color"]) ? $res["color"] : ""); + $smarty->assign("notizid",$notizid); $smarty->assign("colors",array("#fff"=>"
", "#afa"=>"
", "#ee0"=>"
", @@ -627,141 +795,107 @@ function dispNotizForm($dbconn,$smarty,$typ=1) "#bbf"=>"
", "#aff"=>"
", "#ccc"=>"
")); - if($typ == 1) - $smarty->assign("frmact","kundenchange"); - elseif($typ == 2) - $smarty->assign("frmact","lieferchange"); + $smarty->assign("frmact", $typ == 2 ? "lieferchange" : "kundenchange"); $smarty->display("newnotiz.tpl"); - + return 0; } //############################################## //########## PARTNER ###################### //############################################## +/* + * Legt einen Partner samt Hauptadresse und erster Telefonnummer an + * (newpar.tpl). $typ ist 1 für Kunden, 2 für Lieferanten. Rückgabe ist + * array($err, $partner_id). + */ function savePart($dbconn,$typ=1) { - - - $typ_id = 1; - $kunde=mysql_escape_string($_GET["kunde"]); - message("Partner wird angelegt..."); - $act="anlegen"; + beginneSpeichern($dbconn); - $qry=mysqli_query($dbconn,"INSERT INTO partner SET datetime_new = NOW(), user_id = '".mysql_escape_string($_SESSION["user"])."', typ_id = $typ, zahlziel_id = 1") or $err=error("Fehler beim anlegen des Parnters:
".mysqli_error($dbconn)); + $sql = "INSERT INTO partner SET datetime_new = NOW(), user_id = ?, typ_id = ?, zahlziel_id = 1"; + $werte = array($_SESSION["user"], (int)$typ); + if(!db_abfrage($dbconn, $sql, $werte)) + return array(beendeSpeichern($dbconn, error("Fehler beim anlegen des Parnters:
".mysqli_error($dbconn))), 0); $partner_id = mysqli_insert_id($dbconn); + + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [Hat ID $partner_id]", + "DELETE FROM partner WHERE id = $partner_id", "anlegen"); if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO partner SET datetime_new = NOW(), user_id = '".mysql_escape_string($_SESSION["user"])."', typ_id = $typ [Hat ID $partner_id]","DELETE FROM partner WHERE id = $partner_id","anlegen"); - } - $_GET["kunde"] = $partner_id; - if(!$err) - { - $_POST["typ"] = 1; - $err=saveAdress($dbconn); - } - if(!$err) - { - $_POST["land"] = mysql_escape_string(trim($_POST["telland"])); - $_POST["ort"] = mysql_escape_string(trim($_POST["telort"])); - $_POST["plz"] = mysql_escape_string(trim($_POST["telplz"])); - $_POST["oteil"] = mysql_escape_string(trim($_POST["teloteil"])); - $_POST["typ"] = $_POST["teltyp"]; - if($_POST["nr"]) - $err=saveTel($dbconn); - } - return array($err,$partner_id); + $err = saveAdress($dbconn, $partner_id, 1, 0); + if(!$err && formularText("nr") !== "") + $err = speichereTelefon($dbconn, array( + "telid" => 0, + "adresse_id" => 0, + "partner_id" => $partner_id, + "typ_id" => formularGanzzahl("teltyp"), + "name" => formularText("name"), + "nr" => formularText("nr"), + "vwahl" => formularText("vwahl"), + "land" => formularText("telland"), + "ort" => formularText("telort"), + "plz" => formularText("telplz"), + "ortsteil" => formularText("teloteil"), + )); + return array(beendeSpeichern($dbconn, $err), $partner_id); } function dispPartForm($dbconn,$smarty,$typ=1) { - if($typ == 1) - $typname= "Kunden"; - elseif($typ == 2) - $typname = "Zulieferer"; - $smarty->assign("head","Neuen $typname anlegen"); - - $qry=mysqli_query($dbconn, "SELECT id,anrede FROM anrede WHERE id < 4"); - while($res=mysqli_fetch_assoc($qry)) - { - $anrids[] = $res["id"]; - $anrnames[] = $res["anrede"]; - } + $smarty->assign("head","Neuen ".($typ == 2 ? "Zulieferer" : "Kunden")." anlegen"); + + list($anrids, $anrnamen) = auswahlliste($dbconn, "SELECT id, anrede FROM anrede WHERE id < 4"); $smarty->assign("anrids",$anrids); - $smarty->assign("anrs",$anrnames); - $qry=mysqli_query($dbconn, "SELECT id,titel FROM titel"); - while($res=mysqli_fetch_assoc($qry)) - { - $titelids[] = $res["id"]; - $titelnames[] = $res["titel"]; - } + $smarty->assign("anrs",$anrnamen); + list($titelids, $titelnamen) = auswahlliste($dbconn, "SELECT id, titel FROM titel"); $smarty->assign("titelids",$titelids); - $smarty->assign("titels",$titelnames); - - $qry=mysqli_query($dbconn, "SELECT id,typ FROM teltyp"); - while($res=mysqli_fetch_assoc($qry)) - { - $typids[] = $res["id"]; - $typnames[] = $res["typ"]; - } + $smarty->assign("titels",$titelnamen); + list($typids, $typnamen) = auswahlliste($dbconn, "SELECT id, typ FROM teltyp"); $smarty->assign("typids",$typids); - $smarty->assign("typs",$typnames); + $smarty->assign("typs",$typnamen); $smarty->assign("partyp",$typ); - if($typ == 1) - $smarty->assign("frmact","kundenadd"); - elseif($typ == 2) - $smarty->assign("frmact","lieferadd"); + $smarty->assign("frmact", $typ == 2 ? "lieferadd" : "kundenadd"); $smarty->display("newpar.tpl"); - + return 0; } +/* + * Neue Version eines Kunden: Der alte Datensatz bleibt erhalten und zeigt + * über updated_by auf den neuen. Alte Rechnungen behalten dadurch die + * Adresse, unter der sie gestellt wurden. + */ function updateKunde($dbconn,$oldkunde) { - $land = mysql_escape_string(trim($_POST["land"])); - $ort = mysql_escape_string(trim($_POST["ort"])); - $plz = mysql_escape_string(trim($_POST["plz"])); - $oteil = mysql_escape_string(trim($_POST["oteil"])); - $str = mysql_escape_string(trim($_POST["str"])); - $hnr = mysql_escape_string(trim($_POST["hnr"])); - $firma = mysql_escape_string(trim($_POST["firma"])); - $vname = mysql_escape_string(trim($_POST["vname"])); - $nname = mysql_escape_string(trim($_POST["nname"])); - $vname2 = mysql_escape_string(trim($_POST["vname2"])); - $nname2 = mysql_escape_string(trim($_POST["nname2"])); - $anrede_id = mysql_escape_string(trim($_POST["anrede"])); - $titel_id = mysql_escape_string(trim($_POST["titel"])); - $typ_id = 1; - $kunde=mysql_escape_string($_GET["kunde"]); - message("Update von Kunde wird angelegt..."); - $act="anlegen"; + beginneSpeichern($dbconn); - $qry=mysqli_query($dbconn,"INSERT INTO partner SET datetime_new = NOW(), user_id = '".mysql_escape_string($_SESSION["user"])."', typ_id = 1, zahlziel_id = 1") or $err=error("Fehler beim anlegen des Kunden:
".mysqli_error($dbconn)); + $sql = "INSERT INTO partner SET datetime_new = NOW(), user_id = ?, typ_id = 1, zahlziel_id = 1"; + $werte = array($_SESSION["user"]); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim anlegen des Kunden:
".mysqli_error($dbconn))); $partner_id = mysqli_insert_id($dbconn); + + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [Hat ID $partner_id]", + "DELETE FROM partner WHERE id = $partner_id", "anlegen"); + if(!$err) { - $err = saveLog($dbconn,"INSERT INTO partner SET datetime_new = NOW(), user_id = '".mysql_escape_string($_SESSION["user"])."', typ_id = 1 [Hat ID $partner_id]","DELETE FROM partner WHERE id = $partner_id","anlegen"); - } - $_GET["kunde"] = $partner_id; - - $qry=mysqli_query($dbconn,"SELECT datetime_lastchange, user_id, updated_by FROM partner WHERE id = '$oldkunde'") or $err=error("Fehler beim abrufen der infos für die LOG:
".mysqli_error($dbconn)); - $undores = mysqli_fetch_assoc($qry); - $qry=mysqli_query($dbconn,"UPDATE partner SET datetime_lastchange = NOW(), user_id = '".mysql_escape_string($_SESSION["user"])."', updated_by = '$partner_id' WHERE id = '$oldkunde'") or $err=error("Fehler beim update des alten Kunden:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn, - "UPDATE partner SET datetime_lastchange = NOW(), user_id = '".mysql_escape_string($_SESSION["user"])."', updated_by = '$partner_id' WHERE id = '$oldkunde'", - "UPDATE partner SET datetime_lastchange = ".$undores["datetime_lastchange"].", user_id = '".$undores["user_id"]."', updated_by = '".$undores["partner_id"]."' WHERE id = '$oldkunde'", - "ändern"); + $alt = db_zeile($dbconn, "SELECT datetime_lastchange, user_id, updated_by FROM partner WHERE id = ?", array($oldkunde)); + if($alt === false || $alt === null) + return beendeSpeichern($dbconn, error("Fehler beim abrufen der infos für die LOG:
".mysqli_error($dbconn))); + + $sql = "UPDATE partner SET datetime_lastchange = NOW(), user_id = ?, updated_by = ? WHERE id = ?"; + $werte = array($_SESSION["user"], $partner_id, $oldkunde); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim update des alten Kunden:
".mysqli_error($dbconn))); + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [kunde update]", + db_sql_text($dbconn, "UPDATE partner SET datetime_lastchange = ?, user_id = ?, updated_by = ? WHERE id = ?", + array($alt["datetime_lastchange"], $alt["user_id"], $alt["updated_by"], $oldkunde)), "ändern"); } if(!$err) - { - $_POST["typ"] = 1; - $_GET["adressid"] = 0; - $err=saveAdress($dbconn); - } - return $err; + $err = saveAdress($dbconn, $partner_id, 1, 0); + return beendeSpeichern($dbconn, $err); } //############################################## @@ -770,115 +904,443 @@ function updateKunde($dbconn,$oldkunde) function saveKonto($dbconn) { - $kontoid = mysql_escape_string($_GET["kontoid"]); - $bank = mysql_escape_string(trim($_POST["bank"])); - $blz = mysql_escape_string(trim($_POST["blz"])); - $ktonr = mysql_escape_string(trim($_POST["ktonr"])); - $iban = mysql_escape_string(trim($_POST["iban"])); - $swift = mysql_escape_string(trim($_POST["swift"])); - $inhaber = mysql_escape_string(trim($_POST["inhaber"])); - $kunde=mysql_escape_string($_GET["kunde"]); - if(!$kontoid) + $kontoid = parameterGanzzahl("kontoid"); + $kunde = parameterGanzzahl("kunde"); + $act = $kontoid ? "ändern" : "anlegen"; + message($kontoid ? "Konto wird geändert..." : "Konto wird angelegt..."); + + beginneSpeichern($dbconn); + $bank_id = bankId($dbconn, formularText("bank"), formularText("blz"), "beim konto $act"); + if($bank_id === false) + return beendeSpeichern($dbconn, 1); + + $felder = array( + "bank_id" => $bank_id, + "inhaber" => formularText("inhaber"), + "iban" => formularText("iban"), + "swift" => formularText("swift"), + "ktonr" => formularText("ktonr"), + ); + $zuweisung = array(); + foreach(array_keys($felder) as $spalte) + $zuweisung[] = "`$spalte` = ?"; + $set = implode(", ", $zuweisung); + $err = 0; + + if($kontoid) { - message("Konto wird angelegt..."); - $act = "anlegen"; + $alt = db_zeile($dbconn, "SELECT * FROM konto WHERE id = ?", array($kontoid)); + if($alt === false || $alt === null) + return beendeSpeichern($dbconn, error("Fehler beim ermitteln der Daten für die LOG:
".mysqli_error($dbconn))); + + $sql = "UPDATE konto SET $set WHERE id = ?"; + $werte = array_merge(array_values($felder), array($kontoid)); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim ändern des Kontos:
".mysqli_error($dbconn))); + + $altWerte = array(); + foreach(array_keys($felder) as $spalte) + $altWerte[] = $alt[$spalte]; + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [konto change]", + db_sql_text($dbconn, $sql, array_merge($altWerte, array($kontoid))), "ändern"); } - else - { - message("Konto wird geändert..."); - $act="ändern"; - } - $qry=mysqli_query($dbconn,"SELECT id FROM bank WHERE bank = '$bank' AND blz = '$blz'") or $err=error("Fehler beim suchen der Bank:
".mysqli_error($dbconn)); - if($res=mysqli_fetch_array($qry)) - $bank_id = $res[0]; else { - $qry=mysqli_query($dbconn,"INSERT INTO bank SET bank = '$bank', blz = '$blz'") or $err=error("Fehler beim anlegen der Bank:
".mysqli_error($dbconn)); - $bank_id = mysqli_insert_id($dbconn); - if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO bank SET bank = '$bank', blz = '$blz' [hat ID $bank_id (beim konto $act)]", - "DELETE FROM bank WHERE id = $bankk_id", - "anlegen"); - } + $sql = "INSERT INTO konto SET $set, partner_id = ?"; + $werte = array_merge(array_values($felder), array($kunde)); + if(!db_abfrage($dbconn, $sql, $werte)) + return beendeSpeichern($dbconn, error("Fehler beim Anlegen des Kontos:
".mysqli_error($dbconn))); + $kontoid = mysqli_insert_id($dbconn); + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, $werte)." [Hat ID $kontoid]", + "DELETE FROM konto WHERE id = $kontoid", "anlegen"); } - if(!$err) - { - if($kontoid) - { - $qry=mysqli_query($dbconn,"SELECT bank_id, ktonr, iban, swift, inhaber FROM konto WHERE id = '$kontoid'") or $err=error("Fehler beim ermitteln der Daten für die LOG:
".mysqli_error($dbconn)); - $undores=mysqli_fetch_assoc($qry); - $qry=mysqli_query($dbconn,"UPDATE konto SET - bank_id='$bank_id', - inhaber='$inhaber', - iban='$iban', - swift='$swift', - ktonr='$ktonr' - WHERE id='$kontoid'") or $err=error("Fehler beim ändern des Kontos:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"UPDATE konto SET bank_id='$bank_id', inhaber='$inhaber', iban='$iban', swift='$swift', ktonr='$ktonr' WHERE id='$kontoid'", - "UPDATE konto SET bank_id=".$undores["bank_id"].", ktonr=".$undores["ktonr"].", inhaber=".$undores["inhaber"].", iban=".$undores["iban"].", swift=".$undores["swift"]." WHERE id=$telid", - "ändern"); - } - } - else - { - $qry=mysqli_query($dbconn,"INSERT INTO konto SET - bank_id='$bank_id', - inhaber='$inhaber', - iban='$iban', - swift='$swift', - ktonr='$ktonr', - partner_id='$kunde'") or $err=error("Fehler beim Anlegen des Kontos:
".mysqli_error($dbconn)); - $kontoid=mysqli_insert_id($dbconn); - if(!$err) - { - $err = saveLog($dbconn,"INSERT INTO konto SET bank_id='$bank_id', inhaber='$inhaber', iban='$iban', swift='$swift', ktonr='$ktonr' WHERE id='$kontoid'", - "DELETE FROM konto WHERE id=$kontoid", - "anlegen"); - } - } - } - return $err; + return beendeSpeichern($dbconn, $err); } function dispKontoForm($dbconn,$smarty,$typ=1) { - if(!$_GET["kontoid"]) + $kontoid = parameterGanzzahl("kontoid"); + $kunde = parameterGanzzahl("kunde"); + if(!$kontoid) { $smarty->assign("head","Neues Konto anlegen"); - $qry=mysqli_query($dbconn, "SELECT vname, nname, firma, partner_id FROM adresse - WHERE partner_id ='".mysql_escape_string($_GET["kunde"])."' AND typ_id = 1") or $err=error("Fehler beim auslesen der Daten:
".mysqli_error($dbconn)); + // Inhaber aus der Hauptadresse vorbelegen + $res = db_zeile($dbconn, "SELECT vname, nname, firma, partner_id FROM adresse + WHERE partner_id = ? AND typ_id = 1", array($kunde)); } else { $smarty->assign("head","Konto ändern"); - $qry=mysqli_query($dbconn, "SELECT ktonr, iban, swift, blz, bank, inhaber, partner_id FROM konto + $res = db_zeile($dbconn, "SELECT ktonr, iban, swift, blz, bank, inhaber, partner_id FROM konto JOIN bank ON konto.bank_id = bank.id - WHERE konto.id ='".mysql_escape_string($_GET["kontoid"])."'") or $err=error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); + WHERE konto.id = ?", array($kontoid)); } - $res=mysqli_fetch_assoc($qry); - if($res["vname"] || $res["nname"]) - $res["inhaber"] = $res["vname"]." ".$res["nname"]; - if($res["firma"]) + if($res === false) + return error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); + if(!$res) + $res = array(); + if(!empty($res["vname"]) || !empty($res["nname"])) + $res["inhaber"] = trim($res["vname"]." ".$res["nname"]); + if(!empty($res["firma"])) $res["inhaber"] = $res["firma"]; - - $smarty->assign("iban",$_GET["iban"]); - $smarty->assign("swift",$res["swift"]); - $smarty->assign("ktonr",$res["ktonr"]); - $smarty->assign("bank",$res["bank"]); - $smarty->assign("blz",$res["blz"]); - $smarty->assign("inhaber",$res["inhaber"]); - $_GET["kunde"] = $res["partner_id"]; - $smarty->assign("kunde",$_GET["kunde"]); - $smarty->assign("kontoid",$_GET["kontoid"]); - if($typ == 1) - $smarty->assign("frmact","kundenchange"); - elseif($typ == 2) - $smarty->assign("frmact","lieferchange"); - + if(!empty($res["partner_id"])) + $kunde = $res["partner_id"]; + + foreach(array("iban","swift","ktonr","bank","blz","inhaber") as $feld) + $smarty->assign($feld, isset($res[$feld]) ? $res[$feld] : ""); + $smarty->assign("kunde",$kunde); + $smarty->assign("kontoid",$kontoid); + $smarty->assign("frmact", $typ == 2 ? "lieferchange" : "kundenchange"); $smarty->display("newkonto.tpl"); + return 0; } -?> \ No newline at end of file +//############################################## +//########## LÖSCHEN ###################### +//############################################## + +/* + * Die Unterdatensätze eines Partners. "beschreibung" liefert den Text fürs + * Änderungsprotokoll, "form"/"save" die Funktionen der Pflegeseite. + * Tabellen- und Spaltennamen stammen ausschließlich von hier, nie aus der + * Anfrage - binden lassen sie sich nicht. + */ +function partnerBereiche() +{ + return array( + "adress" => array( + "tabelle" => "adresse", "param" => "adressid", "was" => "Adresse", + "form" => "dispAdressForm", "save" => "saveAdress", + "beschreibung" => "SELECT CONCAT(adresstyp.typ, ' (', vname, ' ', nname, ' - ', firma, ')') FROM adresse JOIN adresstyp ON adresstyp.id = adresse.typ_id WHERE adresse.id = ?", + ), + "tel" => array( + "tabelle" => "tel", "param" => "telid", "was" => "Telefonnummer", + "form" => "dispTelForm", "save" => "saveTel", + "beschreibung" => "SELECT CONCAT(teltyp.typ, ' ', tel.nr) FROM tel JOIN teltyp ON teltyp.id = tel.typ_id WHERE tel.id = ?", + ), + "kontakt" => array( + "tabelle" => "kontakt", "param" => "kontaktid", "was" => "Kontaktinformation", + "form" => "dispKontaktForm", "save" => "saveKontakt", + "beschreibung" => "SELECT CONCAT(kontakttyp.typ, ' ', kontakt.kontakt) FROM kontakt JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id WHERE kontakt.id = ?", + ), + "notiz" => array( + "tabelle" => "notiz", "param" => "notizid", "was" => "Notiz", + "form" => "dispNotizForm", "save" => "saveNotiz", + "beschreibung" => "SELECT LEFT(notiz, 60) FROM notiz WHERE id = ?", + ), + "konto" => array( + "tabelle" => "konto", "param" => "kontoid", "was" => "Konto", + "form" => "dispKontoForm", "save" => "saveKonto", + "beschreibung" => "SELECT CONCAT(bank.bank, ' ', konto.iban, konto.ktonr) FROM konto JOIN bank ON bank.id = konto.bank_id WHERE konto.id = ?", + ), + ); +} + +/* + * Löscht einen Unterdatensatz eines Partners. Der JOIN auf partner stellt + * sicher, dass er wirklich zu einem Partner des erwarteten Typs gehört - + * sonst ließe sich über die Lieferantenseite ein Kunde bearbeiten. + */ +function loescheUnterdatensatz($dbconn, $bereich, $id, $partnertyp) +{ + $tabelle = $bereich["tabelle"]; + $partnerwort = $partnertyp == 2 ? "Lieferant" : "Kunde"; + + $kdnr = db_wert($dbconn, "SELECT $tabelle.partner_id FROM $tabelle + JOIN partner ON partner.id = $tabelle.partner_id + WHERE $tabelle.id = ? AND partner.typ_id = ?", array($id, $partnertyp)); + if($kdnr === false) + return error("Fehler beim abrufen der Informationen für die LOG:
".mysqli_error($dbconn)); + if(!$kdnr) + return error("Ungültiger $partnerwort!"); + + // Ohne Hauptadresse ist der Partner nicht mehr auffindbar, die + // Oberfläche bietet das Löschen dafür auch gar nicht erst an + if($tabelle == "adresse" && db_wert($dbconn, "SELECT typ_id FROM adresse WHERE id = ?", array($id)) == 1) + return error("Die Hauptadresse lässt sich nicht löschen."); + + $beschreibung = db_wert($dbconn, $bereich["beschreibung"], array($id)); + if($beschreibung === false) + $beschreibung = ""; + + beginneSpeichern($dbconn); + $err = 0; + if($tabelle == "adresse") + $err = loescheAdressAnhaenge($dbconn, $id); + if(!$err) + { + $sql = "DELETE FROM $tabelle WHERE id = ?"; + if(!db_abfrage($dbconn, $sql, array($id))) + $err = error("Fehler beim löschen der ".$bereich["was"].":
".mysqli_error($dbconn)); + else + $err = saveLog($dbconn, db_sql_text($dbconn, $sql, array($id))." [$beschreibung von $partnerwort $kdnr]", "", "löschen"); + } + if(!$err && $tabelle == "notiz") + del_files("./".UPLOADS_PATH."notes/", "!^".preg_quote((string)$id, "!")."\..*$!"); + return beendeSpeichern($dbconn, $err); +} + +/* + * Entwürfe (tmp_rechnung) samt Artikeln und Eigenschaften. $spalte ist + * "adresse_id" oder "partner_id"; die Reihenfolge ist wichtig, weil + * tmp_artikel per Fremdschlüssel an tmp_rechnung hängt. + */ +function loescheEntwuerfe($dbconn, $spalte, $wert) +{ + $err = 0; + db_abfrage($dbconn, "DELETE tmp_eigensch FROM tmp_eigensch + JOIN tmp_artikel ON tmp_eigensch.art_id = tmp_artikel.id + JOIN tmp_rechnung ON tmp_artikel.rech_id = tmp_rechnung.id + WHERE tmp_rechnung.$spalte = ?", array($wert)) + or $err = error("Fehler beim löschen der Entwurfs-Eigenschaften:
".mysqli_error($dbconn)); + if(!$err) + db_abfrage($dbconn, "DELETE tmp_artikel FROM tmp_artikel + JOIN tmp_rechnung ON tmp_artikel.rech_id = tmp_rechnung.id + WHERE tmp_rechnung.$spalte = ?", array($wert)) + or $err = error("Fehler beim löschen der Entwurfs-Artikel:
".mysqli_error($dbconn)); + if(!$err) + db_abfrage($dbconn, "DELETE FROM tmp_rechnung WHERE $spalte = ?", array($wert)) + or $err = error("Fehler beim löschen der Entwürfe:
".mysqli_error($dbconn)); + return $err; +} + +/* + * Alles, was auf eine Adresse zeigt: Telefonnummern und Dokumente. Die + * Oberfläche kündigt beim Löschen einer Adresse ausdrücklich an, dass die + * zugehörigen Rechnungen mit verschwinden - ohne das blieben sie mit einer + * ins Leere zeigenden Adresse zurück. + */ +function loescheAdressAnhaenge($dbconn, $adressid) +{ + $err = 0; + $rechnungen = db_zeilen($dbconn, "SELECT id, rechnr FROM rechnung WHERE adresse_id = ?", array($adressid)); + if($rechnungen === false) + return error("Fehler beim ermitteln verknüpfter Rechnungen:
".mysqli_error($dbconn)); + foreach($rechnungen as $rechnung) + { + if(!$err) + db_abfrage($dbconn, "DELETE FROM artikelsks WHERE rechnr = ?", array($rechnung["rechnr"])) + or $err = error("Fehler beim löschen verknüpfter SKS Artikel:
".mysqli_error($dbconn)); + if(!$err) + $err = delRechnung($dbconn, $rechnung["id"]); + } + if(!$err) + $err = loescheEntwuerfe($dbconn, "adresse_id", $adressid); + if(!$err) + db_abfrage($dbconn, "DELETE FROM tel WHERE adresse_id = ?", array($adressid)) + or $err = error("Fehler beim löschen der zugehörigen Telefonnummern:
".mysqli_error($dbconn)); + return $err; +} + +/* + * Löscht einen Partner mit allem, was an ihm hängt. $typ ist 1 für Kunden, + * 2 für Lieferanten. + * + * Braucht das Rechnungsmodul (delRechnung), die aufrufende Seite muss + * incs/rechnung.php eingebunden haben. + */ +function loeschePartner($dbconn, $kundeid, $typ) +{ + $partnerwort = $typ == 2 ? "Lieferant" : "Kunde"; + $res = db_zeile($dbconn, "SELECT partner.id, vname, nname, firma FROM partner + JOIN adresse ON adresse.partner_id = partner.id + WHERE partner.id = ? AND adresse.typ_id = 1 AND partner.typ_id = ?", + array($kundeid, $typ)); + if($res === false) + return error("Fehler beim ermitteln der Kundendaten für die LOG:
".mysqli_error($dbconn)); + if(!$res) + return error("Ungültiger $partnerwort!"); + $beschreibung = $res["vname"]." ".$res["nname"]." - ".$res["firma"]; + + beginneSpeichern($dbconn); + $err = 0; + $rechnungen = db_zeilen($dbconn, "SELECT id, rechnr FROM rechnung WHERE partner_id = ?", array($kundeid)); + if($rechnungen === false) + $err = error("Fehler beim ermitteln verknüpfter Rechnungen:
".mysqli_error($dbconn)); + foreach((array)$rechnungen as $rechnung) + { + if(!$err) + db_abfrage($dbconn, "DELETE FROM artikelsks WHERE rechnr = ?", array($rechnung["rechnr"])) + or $err = error("Fehler beim löschen verknüpfter SKS Artikel:
".mysqli_error($dbconn)); + if(!$err) + $err = delRechnung($dbconn, $rechnung["id"]); + } + // Reihenfolge: erst alles, was auf partner oder adresse zeigt + if(!$err) + $err = loescheEntwuerfe($dbconn, "partner_id", $kundeid); + $aufraeumen = array( + "tel" => "Fehler beim Löschen verknüpfter Telefonnummern", + "adresse" => "Fehler beim Löschen verknüpfter Adressen", + "kontakt" => "Fehler beim Löschen verknüpfter Kontaktadressen", + "notiz" => "Fehler beim Löschen verknüpfter Notizen", + "konto" => "Fehler beim Löschen verknüpfter Konten", + ); + foreach($aufraeumen as $tabelle => $meldung) + if(!$err) + db_abfrage($dbconn, "DELETE FROM $tabelle WHERE partner_id = ?", array($kundeid)) + or $err = error($meldung.":
".mysqli_error($dbconn)); + if(!$err) + db_abfrage($dbconn, "DELETE FROM partner WHERE id = ?", array($kundeid)) + or $err = error("Fehler beim löschen des Kunden:
".mysqli_error($dbconn)); + if(!$err) + $err = saveLog($dbconn, db_sql_text($dbconn, "DELETE FROM partner WHERE id = ?", array($kundeid))." [$beschreibung]", "", "löschen"); + // Zeigte eine ältere Version auf diesen Datensatz, ist sie jetzt wieder aktuell + if(!$err) + db_abfrage($dbconn, "UPDATE partner SET updated_by = 0 WHERE updated_by = ?", array($kundeid)) + or $err = error("Fehler beim unlinken einer eventuellen aktualisierung:
".mysqli_error($dbconn)); + return beendeSpeichern($dbconn, $err); +} + +//############################################## +//########## SEITEN ###################### +//############################################## + +/* + * sites/kundenadd.php und sites/lieferadd.php: Partner anlegen oder löschen. + * $typ ist 1 für Kunden, 2 für Lieferanten. + */ +function partnerAddSeite($dbconn, $smarty, $typ) +{ + if(parameterGanzzahl("del") == 1) + { + $err = loeschePartner($dbconn, parameterGanzzahl("kundeid"), $typ); + if(!$err) + doneNreturn("Erfolgreich gelöscht!"); + return $err; + } + if(parameterGanzzahl("formsent") == 1) + { + list($err, $partner_id) = savePart($dbconn, $typ); + $_SESSION["camefrom"] = ($typ == 2 ? "liefershow" : "kundenshow")."&id=".$partner_id; + if(!$err) + doneNreturn("Erfolgreich erledigt!"); + return $err; + } + return dispPartForm($dbconn, $smarty, $typ); +} + +/* + * sites/kundenchange.php und sites/lieferchange.php: Adressen, Telefon- + * nummern, Kontakte, Notizen und Konten eines Partners pflegen. + */ +function partnerChangeSeite($dbconn, $smarty, $typ) +{ + $bereiche = partnerBereiche(); + $name = isset($_GET["do"]) && is_string($_GET["do"]) ? $_GET["do"] : ""; + if(!isset($bereiche[$name])) + return error("Unbekannter Bereich."); + $bereich = $bereiche[$name]; + + if(parameterGanzzahl("del") == 1) + { + $err = loescheUnterdatensatz($dbconn, $bereich, parameterGanzzahl($bereich["param"]), $typ); + if(!$err) + doneNreturn("Erfolgreich gelöscht!"); + return $err; + } + if(parameterGanzzahl("formsent") == 1) + { + $err = call_user_func($bereich["save"], $dbconn); + if(!$err) + doneNreturn("Erfolgreich erledigt!"); + return $err; + } + return call_user_func($bereich["form"], $dbconn, $smarty, $typ); +} + +/* + * sites/kundenshow.php und sites/liefershow.php: alle Daten eines Partners + * für die Anzeige. Gibt false zurück, wenn es ihn nicht (mehr) gibt. + */ +function partnerShowDaten($dbconn, $smarty, $id, $typ) +{ + $kdnres = db_zeile($dbconn, "SELECT * FROM partner WHERE id = ? AND typ_id = ?", array($id, $typ)); + if($kdnres === false) + { + error("Fehler beim auslesen des Partners:
".mysqli_error($dbconn)); + $kdnres = null; + } + $smarty->assign("kunde", $kdnres ? $kdnres : array()); + if(!$kdnres) + return false; + + // Versionskette in beide Richtungen: ältere Stände zeigen über + // updated_by auf diesen, neuere hängen an unserem updated_by + $smarty->assign("oldrecords", partnerVersionen($dbconn, $id, "vorgaenger")); + $smarty->assign("newrecords", partnerVersionen($dbconn, $kdnres["updated_by"], "nachfolger")); + + $smarty->assign("anr", db_zuordnung($dbconn, "SELECT id, anrede FROM anrede") ?: array()); + $smarty->assign("titel", db_zuordnung($dbconn, "SELECT id, titel FROM titel") ?: array()); + + $smarty->assign("telnrn", db_zeilen($dbconn, "SELECT name, typ, tel.id, nr, ort, ortsteil, plz, vwahl, ort.id AS ort_id + FROM tel + LEFT JOIN teltyp ON tel.typ_id = teltyp.id + LEFT JOIN ort ON tel.ort_id = ort.id + WHERE partner_id = ? AND tel.adresse_id = 0 + ORDER BY tel.typ_id ASC", array($id)) ?: array()); + + $smarty->assign("contacts", db_zeilen($dbconn, "SELECT kontakt.id, kontakt, partner_id, typ + FROM kontakt LEFT JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id + WHERE partner_id = ? ORDER BY kontakt.typ_id ASC", array($id)) ?: array()); + + $smarty->assign("kontos", db_zeilen($dbconn, "SELECT ktonr, iban, swift, blz, bank, partner_id, konto.id, inhaber + FROM konto JOIN bank ON konto.bank_id = bank.id + WHERE partner_id = ?", array($id)) ?: array()); + + $notes = db_zeilen($dbconn, "SELECT * FROM notiz WHERE partner_id = ?", array($id)) ?: array(); + foreach($notes as $i => $note) + $notes[$i]["file"] = search_file("./".UPLOADS_PATH."notes/", "!^".preg_quote($note["id"], "!")."\..*$!"); + + // Mahnungen sind keine Notiz, werden aber wie eine angezeigt + $mahnungen = db_wert($dbconn, "SELECT COUNT(rechnr) FROM rechnung WHERE typ_id = 6 AND partner_id = ?", array($id)); + if($mahnungen > 0) + $notes[] = array( + "notiz" => "ACHTUNG! Es sind bereits ".$mahnungen." Mahnungen für diesen Kunden vorhanden!!", + "color" => "#f76", + "datetime" => date("Y-m-d H:i:s"), + ); + $smarty->assign("notes", $notes); + + $smarty->assign("adressen", db_zeilen($dbconn, "SELECT plz, ortsteil, tel.nr, ort.vwahl, ort, str, + DATE_FORMAT(gebdat,'%d.%m.%Y') AS gebdat, DATE_FORMAT(gebdat2,'%d.%m.%Y') AS gebdat2, + hnr, vname, nname, vname2, nname2, firma, adresse.id, land, + anrede_id, titel_id, anrede2_id, titel2_id, adresstyp.typ, adresse.typ_id + FROM adresse + JOIN adresstyp ON adresstyp.id = adresse.typ_id + LEFT JOIN strasse ON str_id = strasse.id + LEFT JOIN ort ON ort_id = ort.id + LEFT JOIN land ON land_id = land.id + LEFT JOIN tel ON tel.adresse_id = adresse.id + WHERE adresse.partner_id = ? AND adresse.typ_id != 5 + ORDER BY adresse.typ_id ASC", array($id)) ?: array()); + + $smarty->assign("kommadressen", db_wert($dbconn, "SELECT COUNT(*) FROM adresse WHERE partner_id = ? AND typ_id = 5", array($id)) > 0 ? 1 : 0); + $smarty->assign("rechtypen", db_zeilen($dbconn, "SELECT typ, id FROM rechtyp") ?: array()); + return true; +} + +/* + * Folgt der Versionskette eines Partners. "vorgaenger" sucht die älteren + * Stände (sie zeigen über updated_by hierher), "nachfolger" die neueren + * (jeder Stand zeigt über updated_by auf den nächsten). Nach 50 Schritten + * ist Schluss, damit ein ringförmiger Verweis die Seite nicht aufhängt. + */ +function partnerVersionen($dbconn, $start, $richtung) +{ + $sql = $richtung == "vorgaenger" + ? "SELECT id, datetime_new, updated_by FROM partner WHERE updated_by = ?" + : "SELECT id, datetime_new, updated_by FROM partner WHERE id = ?"; + $versionen = array(); + $id = $start; + while($id && count($versionen) < 50) + { + $res = db_zeile($dbconn, $sql, array($id)); + if(!$res) + break; + $versionen[] = $res; + $id = $richtung == "vorgaenger" ? $res["id"] : $res["updated_by"]; + } + return $versionen; +} + +?> diff --git a/js/ajaxlists.js b/js/ajaxlists.js index cc5826a..e6ec7c9 100644 --- a/js/ajaxlists.js +++ b/js/ajaxlists.js @@ -7,8 +7,8 @@ function ajax_searchkunden(page) search_in_progress = 1; document.getElementById("kdnsrc_list").innerHTML = "

"; //document.getElementById("kdnsrc_src").disabled = true; - field = escape(document.getElementById("kdnsrc_field").value); - search = escape(document.getElementById("kdnsrc_src").value); + field = encodeURIComponent(document.getElementById("kdnsrc_field").value); + search = encodeURIComponent(document.getElementById("kdnsrc_src").value); var url = "ajax/searchkunden.php?field=" + field + "&page=" + page + "&search=" + search; reqkdnsrc = new XMLHttpRequest(); @@ -35,7 +35,7 @@ function ajax_searchzeit(page,user) search_in_progress = 1; document.getElementById("termcontainer-"+user).innerHTML = "

"; //document.getElementById("kdnsrc_src").disabled = true; - search = escape(document.getElementById("zeit_src-"+user).value); + search = encodeURIComponent(document.getElementById("zeit_src-"+user).value); var url = "ajax/searchzeit.php?page=" + page + "&user=" + user + "&search=" + search; reqkdnsrc = new XMLHttpRequest(); @@ -55,15 +55,17 @@ function ajax_searchzeit(page,user) } } -function ajax_searchadress(rechid,subact,page) +// page zuerst, damit die Seitenschaltung (displayPages) die Nummer +// als erstes Argument uebergeben kann - wie bei den anderen Suchen +function ajax_searchadress(page,rechid,subact) { if(!search_in_progress) { search_in_progress = 1; document.getElementById("adrsrc_list").innerHTML = "

"; //document.getElementById("kdnsrc_src").disabled = true; - field = escape(document.getElementById("adrsrc_field").value); - search = escape(document.getElementById("adrsrc_src").value); + field = encodeURIComponent(document.getElementById("adrsrc_field").value); + search = encodeURIComponent(document.getElementById("adrsrc_src").value); var url = "ajax/searchadress.php?field=" + field + "&page=" + page + "&search=" + search + "&rechid=" + rechid + "&subact=" + subact; reqadrsrc = new XMLHttpRequest(); @@ -90,8 +92,8 @@ function ajax_searchliefer(page) search_in_progress = 1; document.getElementById("kdnsrc_list").innerHTML = "

"; //document.getElementById("kdnsrc_src").disabled = true; - field = escape(document.getElementById("kdnsrc_field").value); - search = escape(document.getElementById("kdnsrc_src").value); + field = encodeURIComponent(document.getElementById("kdnsrc_field").value); + search = encodeURIComponent(document.getElementById("kdnsrc_src").value); var url = "ajax/searchliefer.php?field=" + field + "&page=" + page + "&search=" + search; reqkdnsrc = new XMLHttpRequest(); @@ -118,7 +120,7 @@ function ajax_searchkdnprojects(page,kdnid) search_in_progress = 1; document.getElementById("projectlist").innerHTML = "

"; //document.getElementById("kdnsrc_src").disabled = true; - search = escape(document.getElementById("src_project").value); + search = encodeURIComponent(document.getElementById("src_project").value); var url = "ajax/searchkdnprojects.php?page=" + page + "&search=" + search+"&kdnid=" + kdnid; @@ -173,7 +175,7 @@ function ajax_searchkomm(page,kdnid) search_in_progress = 1; document.getElementById("kommsrc_list").innerHTML = "

"; //document.getElementById("kdnsrc_src").disabled = true; - search = escape(document.getElementById("kommsrc_src").value); + search = encodeURIComponent(document.getElementById("kommsrc_src").value); var url = "ajax/searchkomm.php?page=" + page + "&search=" + search+"&kdnid=" + kdnid; @@ -181,7 +183,7 @@ function ajax_searchkomm(page,kdnid) reqkommsrc.open("GET", url, true); reqkommsrc.onreadystatechange = function() { - if(reqkdnsrc.readyState == 4) + if(reqkommsrc.readyState == 4) { // Get the data from the server's response document.getElementById("kommsrc_list").innerHTML = reqkommsrc.responseText; @@ -226,7 +228,7 @@ function ajax_searchterm(page, termtyp) { search_in_progress = 1; document.getElementById("termcontainer-"+termtyp).innerHTML = "

"; - search = escape(document.getElementById("term_src-"+termtyp).value); + search = encodeURIComponent(document.getElementById("term_src-"+termtyp).value); var url = "ajax/searchterm.php?page=" + page + "&search=" + search + "&termtyp=" + termtyp; @@ -276,7 +278,7 @@ function ajax_displaymsgs(page,user) } function sendmsg(touser) { - msg = escape(document.getElementById("message-"+touser).value); + msg = encodeURIComponent(document.getElementById("message-"+touser).value); var url = "ajax/sendmsg.php?touser="+touser+"&msg="+msg; reqsndmsgs = new XMLHttpRequest(); reqsndmsgs.open("GET", url, true); diff --git a/sites/kundenadd.php b/sites/kundenadd.php index ebf3370..098c035 100644 --- a/sites/kundenadd.php +++ b/sites/kundenadd.php @@ -1,59 +1,7 @@ -".mysqli_error($dbconn)); - $res=mysqli_fetch_array($qry); - $kundeid=$res[0]; - $vname=$res[1]; - $nname=$res[2]; - $firma=$res[3]; - $qry=mysqli_query($dbconn,"SELECT id, rechnr FROM rechnung WHERE partner_id = '$kundeid'") or $err=error("Fehler beim ermitteln verknüpfter Rechnungen:
".mysqli_error($dbconn)); - while($res = mysqli_fetch_array($qry)) - { - $qry2=mysqli_query($dbconn,"DELETE FROM artikel_rechn WHERE rech_id = '$res[0]'") or $err=error("Fehler beim löschen verknüpfter Artikel:
".mysqli_error($dbconn)); - $qry2=mysqli_query($dbconn,"DELETE FROM artikelsks WHERE rechnr = '$res[1]'") or $err=error("Fehler beim löschen verknüpfter SKS Artikel:
".mysqli_error($dbconn)); - } - $qry=mysqli_query($dbconn,"SELECT id FROM rechnung WHERE partner_id = '$kundeid'") or $err=error("Fehler beim ermitteln verknüpfter Rechnungen:
".mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $err = delRechnung($dbconn,$res["id"]); - } - $qry=mysqli_query($dbconn,"DELETE FROM adresse WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Adressen:
".mysqli_error($dbconn)); - $qry=mysqli_query($dbconn,"DELETE FROM tel WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Telefonnummern:
".mysqli_error($dbconn)); - $qry=mysqli_query($dbconn,"DELETE FROM kontakt WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Kontaktadressen:
".mysqli_error($dbconn)); - $qry=mysqli_query($dbconn,"DELETE FROM notiz WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Notizen:
".mysqli_error($dbconn)); - $qry=mysqli_query($dbconn,"DELETE FROM konto WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Konten:
".mysqli_error($dbconn)); - $qry=mysqli_query($dbconn,"DELETE FROM partner WHERE id = '$kundeid'") or $err=error("Fehler beim löschen des Kunden:
".mysqli_error($dbconn)); - - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM partner WHERE id = $kundeid [$vname $nname - $firma]", - "", - "löschen"); - if(!$err) - { - $qry=mysqli_query($dbconn,"UPDATE partner SET updated_by = 0 WHERE updated_by = '$kundeid'") or $err=error("Fehler beim unlinken einer eventuellen aktualisierung:
".mysqli_error($dbconn)); - } - if(!$err) - { - doneNreturn("Erfolgreich gelöscht!"); - } - } -} -elseif($_GET["formsent"] == 1) -{ - $ret = savePart($dbconn,1); - $_SESSION["camefrom"] = "kundenshow&id=".$ret[1]; - if(!$ret[0]) - doneNreturn("Erfolgreich erledigt!"); -} -else -{ - dispPartForm($dbconn,$smarty); -} -?> \ No newline at end of file +$err = partnerAddSeite($dbconn, $smarty, 1); +?> diff --git a/sites/kundenchange.php b/sites/kundenchange.php index dbcd682..c0dec70 100644 --- a/sites/kundenchange.php +++ b/sites/kundenchange.php @@ -1,207 +1,7 @@ -".mysqli_error($dbconn)); - $res=mysqli_fetch_array($qry); - $vname = $res[0]; - $nname = $res[1]; - $firma = $res[2]; - $typ = $res[3]; - $kdnr = $res[4]; - if($kdnr) - { - $qry=mysqli_query($dbconn,"DELETE FROM adresse WHERE id = '$adressid'") or $err=error("Fehler beim löschen der Adresse:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM adresse WHERE id = $adressid [$typ von Kunde $kdnr ($vname $nname - $firma)]","","löschen"); - if(!$err) - doneNreturn("Erfolgreich gelöscht!"); - } - if(!$err) - { - $qry=mysqli_query($dbconn,"SELECT * FROM tel WHERE adresse_id = '$adressid'"); - while($res = mysqli_fetch_assoc($dbconn,$qry)) - { - mysqli_query($dbconn,"DELETE FROM tel WHERE id='".$res["id"]."'") or $err = error("Fehler beim löschen der zugehörigen Telefonnummern
".mysqli_error($dbconn));# - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM tel WHERE id = ".$res["$id"]." [$typ von Kunde $kdnr ($vname $nname - $firma)]","","löschen"); - } - } - } - if(!$err) - doneNreturn("Erfolgreich gelöscht!"); - } - else - { - $err = error("Ungültiger Kunde!"); - } - } - elseif($_GET["formsent"] == 1) - { - $err = saveAdress($dbconn); - if(!$err) - doneNreturn("Erfolgreich erledigt!"); - } - else - { - dispAdressForm($dbconn,$smarty,1); - } -} -elseif($_GET["do"] == "tel") -{ - if($_GET["del"] == 1) - { - $telid=mysql_escape_string($_GET["telid"]); - $qry=mysqli_query($dbconn,"SELECT typ, partner.id FROM tel - JOIN teltyp ON teltyp.id = tel.typ_id - JOIN partner ON partner.id = tel.partner_id - WHERE adresse.id = '$adressid' AND partner.typ_id = 1") or $err=error("Fehler beim abrufen der Informationen für die LOG:
".mysqli_error($dbconn)); - $res=mysqli_fetch_array($dbconn,$qry); - $typ = $res[0]; - $kdnr = $res[1]; - if($kdnr) - { - $qry=mysqli_query($dbconn,"DELETE FROM tel WHERE id = '$telid'") or $err=error("Fehler beim löschen der Telefonnummer:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM tel WHERE id = $telid [$typ von Kunde $kdnr]","","löschen"); - if(!$err) - doneNreturn("Erfolgreich gelöscht!"); - } - } - else - { - $err = error("Ungültiger Kunde!"); - } - } - elseif($_GET["formsent"] == 1) - { - $err = saveTel($dbconn); - if(!$err) - doneNreturn("Erfolgreich erledigt!"); - } - else - { - dispTelForm($dbconn,$smarty,1); - } -} -elseif($_GET["do"] == "kontakt") -{ - if($_GET["del"] == 1) - { - $kontaktid=mysql_escape_string($_GET["kontaktid"]); - $qry=mysqli_query($dbconn,"SELECT typ, partner.id FROM kontakt - JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id - JOIN partner ON partner.id = kontakt.partner_id - WHERE kontakt.id = '$kontaktid'") or $err=error("Fehler beim abrufen der Informationen für die LOG:
".mysqli_error($dbconn)); - $res=mysqli_fetch_array($qry); - $typ = $res[0]; - $kdnr = $res[1]; - if($kdnr) - { - $qry=mysqli_query($dbconn,"DELETE FROM kontakt WHERE id = '$kontaktid'") or $err=error("Fehler beim löschen der Kontaktinformation:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM kontakt WHERE id = $kontaktid [$typ von Kunde $kdnr]","","löschen"); - if(!$err) - doneNreturn("Erfolgreich gelöscht!"); - } - } - else - { - $err = error("Ungültiger Kunde!"); - } - } - elseif($_GET["formsent"] == 1) - { - $err = saveKontakt($dbconn); - if(!$err) - doneNreturn("Erfolgreich erledigt!"); - } - else - { - dispKontaktForm($dbconn,$smarty,1); - } -} -elseif($_GET["do"] == "notiz") -{ - if($_GET["del"] == 1) - { - $notizid=mysql_escape_string($_GET["notizid"]); - $qry=mysqli_query($dbconn,"SELECT partner_id FROM notiz - JOIN partner ON partner.id = notiz.partner_id - WHERE notiz.id = '$notizid' AND partner.typ_id = 1") or $err=error("Fehler beim abrufen der Informationen für die LOG:
".mysqli_error($dbconn)); - $res=mysqli_fetch_array($qry); - $kdnr = $res[0]; - if($kdnr) - { - $qry=mysqli_query($dbconn,"DELETE FROM notiz WHERE id = '$notizid'") or $err=error("Fehler beim löschen der Notiz:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM notiz WHERE id = $notizid [von Kunde $kdnr]","","löschen"); - del_files("./".UPLOADS_PATH."notes/","!^".$notizid."\.(.)+$!"); - if(!$err) - doneNreturn("Erfolgreich gelöscht!"); - } - } - else - { - $err = error("Ungültiger Kunde!"); - } - } - elseif($_GET["formsent"] == 1) - { - $err = saveNotiz($dbconn); - if(!$err) - doneNreturn("Erfolgreich erledigt!"); - } - else - { - dispNotizForm($dbconn,$smarty,1); - } -} -elseif($_GET["do"] == "konto") -{ - if($_GET["del"] == 1) - { - $kontoid = mysql_escape_string($_GET["kontoid"]); - $qry = mysqli_query($dbconn,"SELECT konto.partner_id FROM konto - JOIN partner ON partner.id = konto.partner_id - WHERE konto.id = '$kontoid' AND partner.typ_id = 1") or $err=error("Fehler beim abrufen der Informationen für die LOG:
".mysqli_error($dbconn)); - $res = mysqli_fetch_array($qry); - $kdnr = $res[0]; - if($kdnr) - { - $qry=mysqli_query($dbconn,"DELETE FROM konto WHERE id = '$kontoid'") or $err=error("Fehler beim löschen des Kontos:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM konto WHERE id = $kontoid [von Kunde $kdnr]","","löschen"); - if(!$err) - doneNreturn("Erfolgreich gelöscht!"); - } - } - else - { - $err = error("Ungültiger Kunde!"); - } - } - elseif($_GET["formsent"] == 1) - { - $err = saveKonto($dbconn); - if(!$err) - doneNreturn("Erfolgreich erledigt!"); - } - else - { - dispKontoForm($dbconn,$smarty,2); - } -} -?> \ No newline at end of file +// Beim Löschen einer Adresse verschwinden auch ihre Dokumente (delRechnung) +require_once "incs/rechnung.php"; + +$err = partnerChangeSeite($dbconn, $smarty, 1); +?> diff --git a/sites/kundenshow.php b/sites/kundenshow.php index cfc492f..a2246c0 100644 --- a/sites/kundenshow.php +++ b/sites/kundenshow.php @@ -1,121 +1,7 @@ -assign("kunde",$kdnres); - if($kdnres["id"]) - { - $qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE updated_by='".$kdnres["id"]."'"); - while($res=mysqli_fetch_assoc($qry)) - { - $oldrecords[] = $res; - $qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE updated_by='".$res["id"]."'"); - } - $smarty->assign("oldrecords",$oldrecords); - - $qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE id='".$kdnres["updated_by"]."'"); - while($res=mysqli_fetch_assoc($qry)) - { - $newrecords[] = $res; - $qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE id='".$res["updated_by"]."'"); - } - $smarty->assign("newrecords",$newrecords); - - $tmp = array(); - $qry = mysqli_query($dbconn,"SELECT * FROM anrede"); - while($res=mysqli_fetch_assoc($qry)) - { - $tmp[$res["id"]] = $res["anrede"]; - } - $smarty->assign("anr",$tmp); - - $tmp = array(); - $qry = mysqli_query($dbconn,"SELECT * FROM titel"); - while($res=mysqli_fetch_assoc($qry)) - { - $tmp[$res["id"]] = $res["titel"]; - } - $smarty->assign("titel",$tmp); - - - - $qry = mysqli_query($dbconn,"SELECT name,typ,tel.id,nr,ort,ortsteil,plz,vwahl, ort.id AS ort_id FROM tel LEFT JOIN teltyp ON typ_id = teltyp.id LEFT JOIN ort ON ort_id = ort.id WHERE partner_id='".mysql_escape_string($_GET["id"])."' AND tel.adresse_id = 0 ORDER BY typ_id ASC"); - while($res=mysqli_fetch_assoc($qry)) - { - $tels[] = $res; - } - $smarty->assign("telnrn",$tels); - - - $qry = mysqli_query($dbconn,"SELECT kontakt.id, kontakt, partner_id, typ FROM kontakt LEFT JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id WHERE partner_id='".mysql_escape_string($_GET["id"])."' ORDER BY typ_id ASC"); - while($res=mysqli_fetch_assoc($qry)) - { - $contacts[] = $res; - } - $smarty->assign("contacts",$contacts); - - $tmp = array(); - $qry = mysqli_query($dbconn,"SELECT ktonr,iban,swift,blz,bank,partner_id,konto.id,inhaber - FROM konto JOIN bank ON konto.bank_id = bank.id WHERE partner_id='".mysql_escape_string($_GET["id"])."'") - or $err=error("Fehler beim auslesen der Konten:
". mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $tmp[] = $res; - } - $smarty->assign("kontos",$tmp); - - - $qry = mysqli_query($dbconn,"SELECT * FROM notiz WHERE partner_id='".mysql_escape_string($_GET["id"])."'"); - while($res=mysqli_fetch_assoc($qry)) - { - $res["file"] = search_file("./".UPLOADS_PATH."notes/","!^".$res["id"]."\.(.)+$!"); - $notes[] = $res; - } - - - $qry = mysqli_query($dbconn,"SELECT COUNT(rechnr) AS nr_mahn, NOW() AS datetime FROM rechnung WHERE typ_id = 6 AND partner_id = '".mysql_escape_string($_GET["id"])."'") or $err=error("Fehler beim Auslesen der Daten:
".mysqli_error($dbconn)); - $res=mysqli_fetch_assoc($qry); - if($res["nr_mahn"] > 0) - { - $mahn["notiz"] = "ACHTUNG! Es sind bereits ".$res["nr_mahn"]." Mahnungen für diesen Kunden vorhanden!!"; - $mahn["color"] = "#f76"; - $mahn["datetime"] = $res["datetime"]; - $notes[] = $mahn; - } - $smarty->assign("notes",$notes); - $qry = mysqli_query($dbconn,"SELECT plz, ortsteil, tel.nr, ort.vwahl, ort, str, DATE_FORMAT(gebdat,'%d.%m.%Y') AS gebdat, DATE_FORMAT(gebdat2,'%d.%m.%Y') AS gebdat2, hnr, vname, nname, vname2, nname2, firma, adresse.id, land, anrede_id, titel_id, anrede2_id, titel2_id, adresstyp.typ, adresse.typ_id - FROM adresse JOIN - adresstyp ON adresstyp.id = adresse.typ_id - LEFT JOIN strasse ON str_id = strasse.id - LEFT JOIN ort ON ort_id = ort.id - LEFT JOIN land ON land_id = land.id - LEFT JOIN tel ON tel.adresse_id = adresse.id - WHERE adresse.partner_id='".mysql_escape_string($_GET["id"])."' AND adresse.typ_id != 5 - ORDER BY typ_id ASC")or $err=error("Mysql-Fehler:
".mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $adressen[] = $res; - } - $smarty->assign("adressen",$adressen); - - $qry = mysqli_query($dbconn,"SELECT id - FROM adresse WHERE adresse.partner_id='".mysql_escape_string($_GET["id"])."' AND adresse.typ_id = 5 - ORDER BY typ_id ASC")or $err=error("Mysql-Fehler:
".mysqli_error($dbconn)); - if(mysqli_fetch_array($qry)) - $smarty->assign("kommadressen",1); - - $tmp=array(); - $qry = mysqli_query($dbconn,"SELECT typ, id FROM rechtyp"); - while($res=mysqli_fetch_assoc($qry)) - { - $tmp[] = $res; - } - $smarty->assign("rechtypen",$tmp); - - - } -} -$_SESSION["camefrom"] ="kundenshow&id=".$_GET["id"]; +display("kundenshow.tpl"); -?> \ No newline at end of file +?> diff --git a/sites/lieferadd.php b/sites/lieferadd.php index aac7c35..116d5f1 100644 --- a/sites/lieferadd.php +++ b/sites/lieferadd.php @@ -1,57 +1,7 @@ -".mysqli_error($dbconn)); - $res=mysqli_fetch_array($qry); - $kundeid=$res[0]; - $vname=$res[1]; - $nname=$res[2]; - $firma=$res[3]; - if($kundeid) - { - $qry=mysqli_query($dbconn,"SELECT id, rechnr FROM rechnung WHERE partner_id = '$kundeid'") or $err=error("Fehler beim ermitteln verknüpfter Rechnungen:
".mysqli_error($dbconn)); - while($res = mysqli_fetch_array($qry)) - { - $qry2=mysqli_query($dbconn,"DELETE FROM artikel_rechn WHERE rech_id = '$res[0]'") or $err=error("Fehler beim löschen verknüpfter Artikel:
".mysqli_error($dbconn)); - $qry2=mysqli_query($dbconn,"DELETE FROM artikelsks WHERE rechnr = '$res[1]'") or $err=error("Fehler beim löschen verknüpfter SKS Artikel:
".mysqli_error($dbconn)); - } - $qry=mysqli_query($dbconn,"DELETE FROM rechnung WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Rechnungen:
".mysqli_error($dbconn)); - $qry=mysqli_query($dbconn,"DELETE FROM adresse WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Adressen:
".mysqli_error($dbconn)); - $qry=mysqli_query($dbconn,"DELETE FROM tel WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Telefonnummern:
".mysqli_error($dbconn)); - $qry=mysqli_query($dbconn,"DELETE FROM kontakt WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Kontaktadressen:
".mysqli_error($dbconn)); - $qry=mysqli_query($dbconn,"DELETE FROM notiz WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Notizen:
".mysqli_error($dbconn)); - $qry=mysqli_query($dbconn,"DELETE FROM konto WHERE partner_id = '$kundeid'") or $err=error("Fehler beim Löschen verknüpfter Konten:
".mysqli_error($dbconn)); - $qry=mysqli_query($dbconn,"DELETE FROM partner WHERE id = '$kundeid'") or $err=error("Fehler beim löschen des Kunden:
".mysqli_error($dbconn)); - } - else - { - $err = error("Ungültiger Lieferant!"); - } - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM partner WHERE id = $kundeid [$vname $nname - $firma]", - "", - "löschen"); - echo "sadlk"; - if(!$err) - { - doneNreturn("Erfolgreich gelöscht!"); - } - } -} -elseif($_GET["formsent"] == 1) -{ - $ret = savePart($dbconn,2); - $_SESSION["camefrom"] = "liefershow&id=".$ret[1]; - if(!$ret[0]) - doneNreturn("Erfolgreich erledigt!"); -} -else -{ - dispPartForm($dbconn,$smarty,2); -} -?> \ No newline at end of file +$err = partnerAddSeite($dbconn, $smarty, 2); +?> diff --git a/sites/lieferchange.php b/sites/lieferchange.php index 5a40ff1..84f3d09 100644 --- a/sites/lieferchange.php +++ b/sites/lieferchange.php @@ -1,191 +1,7 @@ -".mysqli_error($dbconn)); - $res=mysqli_fetch_array($qry); - $vname = $res[0]; - $nname = $res[1]; - $firma = $res[2]; - $typ = $res[3]; - $kdnr = $res[4]; - if($kdnr) - { - $qry=mysqli_query($dbconn,"DELETE FROM adresse WHERE id = '$adressid'") or $err=error("Fehler beim löschen der Adresse:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM adresse WHERE id = $adressid [$typ von Kunde $kdnr ($vname $nname - $firma)]","","löschen"); - if(!$err) - doneNreturn("Erfolgreich gelöscht!"); - } - } - else - { - $err = error("Ungültiger Lieferant!"); - } - } - elseif($_GET["formsent"] == 1) - { - $err = saveAdress($dbconn); - if(!$err) - doneNreturn("Erfolgreich erledigt!"); - } - else - { - dispAdressForm($dbconn,$smarty,2); - } -} -elseif($_GET["do"] == "tel") -{ - if($_GET["del"] == 1) - { - $telid=mysql_escape_string($_GET["telid"]); - $qry=mysqli_query($dbconn,"SELECT typ, partner.id FROM tel - JOIN teltyp ON teltyp.id = tel.typ_id - JOIN partner ON partner.id = tel.partner_id - WHERE adresse.id = '$adressid' AND partner.typ_id = 2") or $err=error("Fehler beim abrufen der Informationen für die LOG:
".mysqli_error($dbconn)); - $res=mysqli_fetch_array($qry); - $typ = $res[0]; - $kdnr = $res[1]; - if($kdnr) - { - $qry=mysqli_query($dbconn,"DELETE FROM tel WHERE id = '$telid'") or $err=error("Fehler beim löschen der Telefonnummer:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM tel WHERE id = $telid [$typ von Kunde $kdnr]","","löschen"); - if(!$err) - doneNreturn("Erfolgreich gelöscht!"); - } - } - else - { - $err = error("Ungültiger Lieferant!"); - } - } - elseif($_GET["formsent"] == 1) - { - $err = saveTel($dbconn); - if(!$err) - doneNreturn("Erfolgreich erledigt!"); - } - else - { - dispTelForm($dbconn,$smarty,2); - } -} -elseif($_GET["do"] == "kontakt") -{ - if($_GET["del"] == 1) - { - $kontaktid=mysql_escape_string($_GET["kontaktid"]); - $qry=mysqli_query($dbconn,"SELECT konatkttyp.typ, partner.id FROM kontakt - JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id - JOIN partner ON partner.id = kontakt.partner_id WHERE kontakt.id = '$kontaktid' partner.typ_id = 2") or $err=error("Fehler beim abrufen der Informationen für die LOG:
".mysqli_error($dbconn)); - $res=mysqli_fetch_array($qry); - $typ = $res[0]; - $kdnr = $res[1]; - if($kdnr) - { - $qry=mysqli_query($dbconn,"DELETE FROM kontakt WHERE id = '$kontaktid'") or $err=error("Fehler beim löschen der Kontaktinformation:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM kontakt WHERE id = $kontaktid [$typ von Kunde $kdnr]","","löschen"); - if(!$err) - doneNreturn("Erfolgreich gelöscht!"); - } - } - else - { - $err = error("Ungültiger Lieferant!"); - } - } - elseif($_GET["formsent"] == 1) - { - $err = saveKontakt($dbconn); - if(!$err) - doneNreturn("Erfolgreich erledigt!"); - } - else - { - dispKontaktForm($dbconn,$smarty,2); - } -} -elseif($_GET["do"] == "notiz") -{ - if($_GET["del"] == 1) - { - $notizid=mysql_escape_string($_GET["notizid"]); - $qry=mysqli_query($dbconn,"SELECT partner_id FROM notiz - JOIN partner ON partner.id = notiz.partner_id - WHERE notiz.id = '$notizid' AND partner.typ_id = 2") or $err=error("Fehler beim abrufen der Informationen für die LOG:
".mysqli_error($dbconn)); - $res=mysqli_fetch_array($qry); - $kdnr = $res[0]; - if($kdnr) - { - $qry=mysqli_query($dbconn,"DELETE FROM notiz WHERE id = '$notizid'") or $err=error("Fehler beim löschen der Notiz:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM notiz WHERE id = $notizid [von Kunde $kdnr]","","löschen"); - if(!$err) - doneNreturn("Erfolgreich gelöscht!"); - } - } - else - { - $err = error("Ungültiger Lieferant!"); - } - } - elseif($_GET["formsent"] == 1) - { - $err = saveNotiz($dbconn); - if(!$err) - doneNreturn("Erfolgreich erledigt!"); - } - else - { - dispNotizForm($dbconn,$smarty,2); - } -} -elseif($_GET["do"] == "konto") -{ - if($_GET["del"] == 1) - { - $kontoid = mysql_escape_string($_GET["kontoid"]); - $qry = mysqli_query($dbconn,"SELECT konto.partner_id FROM konto - JOIN partner ON partner.id = konto.partner_id - WHERE konto.id = '$kontoid' AND partner.typ_id = 2") or $err=error("Fehler beim abrufen der Informationen für die LOG:
".mysqli_error($dbconn)); - $res = mysqli_fetch_array($qry); - $kdnr = $res[0]; - if($kdnr) - { - $qry=mysqli_query($dbconn,"DELETE FROM konto WHERE id = '$kontoid'") or $err=error("Fehler beim löschen des Kontos:
".mysqli_error($dbconn)); - if(!$err) - { - $err = saveLog($dbconn,"DELETE FROM konto WHERE id = $kontoid [von Kunde $kdnr]","","löschen"); - if(!$err) - doneNreturn("Erfolgreich gelöscht!"); - } - } - else - { - $err = error("Ungültiger Lieferant!"); - } - } - elseif($_GET["formsent"] == 1) - { - $err = saveKonto($dbconn); - if(!$err) - doneNreturn("Erfolgreich erledigt!"); - } - else - { - dispKontoForm($dbconn,$smarty,2); - } -} -?> \ No newline at end of file +// Beim Löschen einer Adresse verschwinden auch ihre Dokumente (delRechnung) +require_once "incs/rechnung.php"; + +$err = partnerChangeSeite($dbconn, $smarty, 2); +?> diff --git a/sites/liefershow.php b/sites/liefershow.php index 591a6d5..8da27e5 100644 --- a/sites/liefershow.php +++ b/sites/liefershow.php @@ -1,120 +1,7 @@ -". mysqli_error($dbconn)); - $kdnres=mysqli_fetch_assoc($qry); - $smarty->assign("kunde",$kdnres); - if($kdnres.id) - { - $qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE updated_by='".$kdnres["id"]."'") - or $err=error("Fehler beim auslesen der neueren Versionen:
". mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $oldrecords[] = $res; - $qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE updated_by='".$res["id"]."'") - or $err=error("Fehler beim auslesen der neueren Versionen:
". mysqli_error($dbconn)); - } - $smarty->assign("oldrecords",$oldrecords); - - $qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE id='".$kdnres["updated_by"]."'") - or $err=error("Fehler beim auslesen der älteren Versionen:
". mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $newrecords[] = $res; - $qry = mysqli_query($dbconn,"SELECT id, datetime_new FROM partner WHERE id='".$res["updated_by"]."'") - or $err=error("Fehler beim auslesen der älteren Versionen:
". mysqli_error($dbconn)); - } - $smarty->assign("newrecords",$newrecords); - - $tmp = array(); - $qry = mysqli_query($dbconn,"SELECT * FROM anrede") - or $err=error("Fehler beim auslesen der Anreden:
". mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $tmp[$res["id"]] = $res["anrede"]; - } - $smarty->assign("anr",$tmp); - - $tmp = array(); - $qry = mysqli_query($dbconn,"SELECT * FROM titel") - or $err=error("Fehler beim auslesen der Titel:
". mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $tmp[$res["id"]] = $res["titel"]; - } - $smarty->assign("titel",$tmp); - - $tmp = array(); - $qry = mysqli_query($dbconn,"SELECT name,typ,tel.id,nr,ort,ortsteil,plz,vwahl - FROM tel LEFT JOIN teltyp ON typ_id = teltyp.id LEFT JOIN ort ON ort_id = ort.id - WHERE partner_id='".mysql_escape_string($_GET["id"])."' ORDER BY typ_id ASC") - or $err=error("Fehler beim auslesen der Telefonnummern:
". mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $tmp[] = $res; - } - $smarty->assign("telnrn",$tmp); - - $tmp = array(); - $qry = mysqli_query($dbconn,"SELECT kontakt.id, kontakt, partner_id, typ - FROM kontakt LEFT JOIN kontakttyp ON kontakttyp.id = kontakt.typ_id - WHERE partner_id='".mysql_escape_string($_GET["id"])."' ORDER BY typ_id ASC") - or $err=error("Fehler beim auslesen der Kontakte:
". mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $tmp[] = $res; - } - $smarty->assign("contacts",$tmp); - - $tmp = array(); - $qry = mysqli_query($dbconn,"SELECT * FROM notiz WHERE partner_id='".mysql_escape_string($_GET["id"])."'") - or $err=error("Fehler beim auslesen der Notizen:
". mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $tmp[] = $res; - } - $smarty->assign("notes",$tmp); - - $tmp = array(); - $qry = mysqli_query($dbconn,"SELECT ktonr,iban,swift,blz,bank,partner_id,konto.id,inhaber - FROM konto JOIN bank ON konto.bank_id = bank.id WHERE partner_id='".mysql_escape_string($_GET["id"])."'") - or $err=error("Fehler beim auslesen der Konten:
". mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $tmp[] = $res; - } - $smarty->assign("kontos",$tmp); - - - $qry = mysqli_query($dbconn,"SELECT plz, ortsteil, ort, str, hnr, vname, nname, vname2, nname2, firma, adresse.id, land, anrede_id, titel_id, adresstyp.typ, adresse.typ_id - FROM adresse JOIN - adresstyp ON adresstyp.id = adresse.typ_id - LEFT JOIN strasse ON str_id = strasse.id - LEFT JOIN ort ON ort_id = ort.id - LEFT JOIN land ON land_id = land.id - WHERE partner_id='".mysql_escape_string($_GET["id"])."' - ORDER BY typ_id ASC") or $err=error("Fehler beim auslesen der Adressen:
". mysqli_error($dbconn)); - while($res=mysqli_fetch_assoc($qry)) - { - $adressen[] = $res; - } - $smarty->assign("adressen",$adressen); - - $tmp=array(); - $qry = mysqli_query($dbconn,"SELECT typ, id FROM rechtyp"); - while($res=mysqli_fetch_assoc($qry)) - { - $tmp[] = $res; - } - $smarty->assign("rechtypen",$tmp); - - - - - $_SESSION["camefrom"] ="liefershow&id=".$_GET["id"]; - } -} +display("liefershow.tpl"); -?> \ No newline at end of file +?> diff --git a/templates/changeadr.tpl b/templates/changeadr.tpl index f29e8e2..6fc36cc 100644 --- a/templates/changeadr.tpl +++ b/templates/changeadr.tpl @@ -3,8 +3,8 @@
Neue Adresse:
-{html_options name=adrsrc_field onChange="ajax_searchadress({$rechid|escape},'changeadr',0)" id=adrsrc_field options=$felder selected=$selfeld class='searchform' title='Bitte wählen Sie die Spalte, die durchsucht werden soll.' onchange='#'} - +{html_options name=adrsrc_field onChange="ajax_searchadress(0,{$rechid|intval},'changeadr')" id=adrsrc_field options=$felder selected=$selfeld class='searchform' title='Bitte wählen Sie die Spalte, die durchsucht werden soll.' onchange='#'} +
@@ -14,4 +14,4 @@
- + diff --git a/templates/copyrech.tpl b/templates/copyrech.tpl index 1f1fea6..85a1a46 100644 --- a/templates/copyrech.tpl +++ b/templates/copyrech.tpl @@ -3,8 +3,8 @@
Neue Adresse:
-{html_options name=adrsrc_field onChange='ajax_searchadress({$rechid|escape},\'copy\',0)' id=adrsrc_field options=$felder selected=$selfeld class='searchform' title='Bitte wählen Sie die Spalte, die durchsucht werden soll.' onchange='#'} - +{html_options name=adrsrc_field onChange="ajax_searchadress(0,{$rechid|intval},'copy')" id=adrsrc_field options=$felder selected=$selfeld class='searchform' title='Bitte wählen Sie die Spalte, die durchsucht werden soll.' onchange='#'} +
@@ -14,4 +14,4 @@
- + diff --git a/templates/kunden.tpl b/templates/kunden.tpl index 2eb8769..e514d8d 100644 --- a/templates/kunden.tpl +++ b/templates/kunden.tpl @@ -5,7 +5,7 @@
{html_options name=kdnsrc_field onChange='ajax_searchkunden(0)' id=kdnsrc_field options=$felder selected=$selfeld class='searchform' title='Bitte wählen Sie die Spalte, die durchsucht werden soll.' onchange='#'} - +
@@ -15,7 +15,7 @@ - +
\ No newline at end of file diff --git a/templates/kundenshow.tpl b/templates/kundenshow.tpl index e27aee5..8707887 100644 --- a/templates/kundenshow.tpl +++ b/templates/kundenshow.tpl @@ -42,9 +42,9 @@ {/if} {if $adresse.gebdat != "01.01.2100" && $adresse.gebdat != "00.00.0000"} {if $adresse.gebdat|substr:6:4 != "2099"} - (Geburtstag: {$adresse.gebdat})
+ (Geburtstag: {$adresse.gebdat|escape})
{else} - (Geburtstag: {$adresse.gebdat|substr:0:5})
+ (Geburtstag: {$adresse.gebdat|escape|substr:0:5})
{/if} {/if} {/if} @@ -56,9 +56,9 @@ {/if} {if $adresse.gebdat2 != "01.01.2100" && $adresse.gebdat2 != "00.00.0000"} {if $adresse.gebdat2|substr:6:4 != "2099"} - (Geburtstag: {$adresse.gebdat2})
+ (Geburtstag: {$adresse.gebdat2|escape})
{else} - (Geburtstag: {$adresse.gebdat2|substr:0:5})
+ (Geburtstag: {$adresse.gebdat2|escape|substr:0:5})
{/if} {/if} {/if} @@ -71,6 +71,9 @@ {$adresse.plz|escape|default:""} {$adresse.ort|escape|default:""} {$adresse.ortsteil|escape|default:""}
{$adresse.land|escape|default:""} + {if $adresse.nr} + Telefon: {if $adresse.vwahl}{$adresse.vwahl|escape} / {/if}{$adresse.nr|escape}
+ {/if}

@@ -78,7 +81,7 @@ {if $adresse.typ_id != 1} {/if} - +
@@ -177,13 +180,13 @@ {/if} {$i=$i+1} {strip} -

+
{$note.datetime|date_format:"%a, %d.%m.%Y
%R Uhr"}
- {$note.notiz|nl2br|default:""}
+ {$note.notiz|default:""|escape|nl2br}

{if $note.id} {if $note.file} - + {/if} @@ -211,7 +214,7 @@ {$i=$i+1} {strip}

- {$kto.bank}
{$kto.blz|chunk_split:3:" "}
+ {$kto.bank|escape}
{$kto.blz|escape|chunk_split:3:" "}
Konto Nr.: {$kto.ktonr|escape|chunk_split:3:" "}
Inhaber: {$kto.inhaber|escape}
{if $kto.iban} @@ -234,7 +237,7 @@
{foreach $rechtypen as $rechtyp} diff --git a/templates/liefershow.tpl b/templates/liefershow.tpl index f263e7b..fc7ef62 100644 --- a/templates/liefershow.tpl +++ b/templates/liefershow.tpl @@ -43,13 +43,16 @@ {$adresse.plz|escape|default:""} {$adresse.ort|escape|default:""} {$adresse.ortsteil|escape|default:""}
{$adresse.land|escape|default:""} + {if $adresse.nr} + Telefon: {if $adresse.vwahl}{$adresse.vwahl|escape} / {/if}{$adresse.nr|escape}
+ {/if}

{if $adresse.typ_id != 1} {/if} - +

{/strip} @@ -116,7 +119,7 @@ {foreach $notes as $note} {strip} -
+
{$note.datetime|date_format:"%a, %d.%m.%Y
%R Uhr"}
{$note.notiz|escape|default:""}

@@ -134,7 +137,7 @@ {foreach $kontos as $kto} {strip}

- {$kto.bank}
{$kto.blz|chunk_split:3:" "}
+ {$kto.bank|escape}
{$kto.blz|escape|chunk_split:3:" "}
Konto Nr.: {$kto.ktonr|escape|chunk_split:3:" "}
Inhaber: {$kto.inhaber|escape}
{if $kto.iban} @@ -158,14 +161,14 @@
{foreach $rechtypen as $rechtyp}
- +
@@ -181,7 +184,7 @@ $(function() { $( "#tabs" ).tabs(); }); - ajax_searchkdnrech(0,1,{$kunde.id}); + ajax_searchkdnrech(0,0,1,{$kunde.id});
diff --git a/templates/newadress.tpl b/templates/newadress.tpl index b902e45..51de737 100644 --- a/templates/newadress.tpl +++ b/templates/newadress.tpl @@ -2,7 +2,7 @@ {include file="heading.tpl" heading=$head}
-
+
{html_options values=$typids output=$typs selected="{$typ}"} diff --git a/templates/newkonto.tpl b/templates/newkonto.tpl index 67fbc55..95f93f2 100644 --- a/templates/newkonto.tpl +++ b/templates/newkonto.tpl @@ -2,7 +2,7 @@ {include file="heading.tpl" heading=$head}
- +

diff --git a/templates/newnotiz.tpl b/templates/newnotiz.tpl index 0b9109e..727c029 100644 --- a/templates/newnotiz.tpl +++ b/templates/newnotiz.tpl @@ -2,16 +2,16 @@ {include file="heading.tpl" heading=$head}
- +
Farbe: -{html_radios name='color' options=$colors selected={$color|default:'#fff'} separator=' ' escape=0 labels=1} +{html_radios name='color' options=$colors selected={$color|default:'#fff'|escape} separator=' ' escape=0 labels=1}
Notiz: -
+


diff --git a/templates/newtel.tpl b/templates/newtel.tpl index ba0d587..a5a0607 100644 --- a/templates/newtel.tpl +++ b/templates/newtel.tpl @@ -2,7 +2,7 @@ {include file="heading.tpl" heading=$head}
- +