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"=>"







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