Rechnungsmodul auf Prepared Statements umgebaut
- incs/rechnung.php: alle Abfragen mit Platzhaltern. saveRechnung() setzte $_POST ungeprueft in SQL (Injection; ein Apostroph im Text brach das Speichern ab). Speichern, Kopieren und Loeschen laufen in Transaktionen, bei Fehlern bleibt nichts Halbes zurueck. Formularwerte ueber formularText/-Zahl/-Ganzzahl (strikter Modus). - copyRech() trug die Rechnungsnummer ohne typ_id ein (Fehler im strikten Modus) und zaehlte typuebergreifend; jetzt wie beim Anlegen pro Typ (neueRechnungsnummer()). Artikel und Eigenschaften per INSERT ... SELECT. - Adressblock-Formatierung aus makeadressblock() und makeadressblockUmschlag() in formatiereAdressblock() zusammengefuehrt. - ajax/autosave.php und ajax/preview.php teilen sich saveTmpRechnung(); ueberzaehlige Entwuerfe werden samt Artikeln entfernt (vorher FK-Fehler). - sites/rechnungadd.php: Storno ohne SQL-Injection ueber $_GET["id"], Auswahllisten ueber db_zuordnung(), tote Kommissions-Abfrage entfernt. - Rechnungssuche (createRechQry/createKdnRechQry) liefert SQL und Parameter getrennt; Suchbegriffe waren ungeprueft im SQL. - saveLog() mit Platzhaltern, Protokolltext ueber db_sql_text(). - db.php: db_zuordnung(), db_sql_text(); Helfer liefern Strings wie mysqli_query(), damit alter Code sich gleich verhaelt. Getestet: alter und neuer Code lesen dieselbe migrierte Datenbank, 150 von 155 Pruefungen (10.936 Werte) identisch, die uebrigen 5 sind der Injection-Suchbegriff (alt: SQL-Fehler). Schreibtests fuer Entwurf, Anlegen, Nummernkreise, Aendern, Rollback, Kopieren, Adresse, Storno und Loeschen im strikten Modus. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -86,6 +86,16 @@ Eine Schemaänderung besteht also aus: neuer Eintrag **vorn** in `update/version
|
||||
|
||||
**Umbau läuft (Branch `db-umbau`):** Verbindungen entstehen nur noch über `db_verbinden()` aus `incs/db.php`. Die Funktion setzt `utf8mb4`, den strikten `sql_mode` und schaltet die mysqli-Exceptions ab. Neue und umgebaute Abfragen nutzen `db_abfrage()`, `db_zeilen()`, `db_zeile()` und `db_wert()` mit `?`-Platzhaltern statt String-Verkettung. Ziel-Schema ist das der Instanz `kunden` in `utf8mb4`; die Altdaten sind teils doppelt kodiert und werden per Migration repariert. Dieser Stand darf nur zusammen mit der migrierten Datenbank live gehen.
|
||||
|
||||
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.
|
||||
- **Ä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.
|
||||
- **Tabellen- und Spaltennamen** lassen sich nicht binden; nur feste Werte aus dem Code einsetzen, `LIMIT` als `(int)`.
|
||||
|
||||
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/`.
|
||||
|
||||
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.
|
||||
|
||||
SQL wird durchgehend per String-Verkettung gebaut. Escaping ist Handarbeit über `mysqli_real_escape_string($dbconn, …)` und muss bei jeder Änderung mitgedacht werden.
|
||||
|
||||
+7
-179
@@ -9,202 +9,30 @@ require('../smarty/libs/Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
|
||||
|
||||
|
||||
if(!isset($err))
|
||||
{
|
||||
$show = "";
|
||||
if(isset($_POST["show_firmaanr"]))
|
||||
$show .= str_pad($_POST["show_firmaanr"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_firma"]))
|
||||
$show .= str_pad($_POST["show_firma"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_anr"]))
|
||||
$show .= str_pad($_POST["show_anr"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if( isset($_POST["show_titel"]))
|
||||
$show .= str_pad($_POST["show_titel"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_name"]))
|
||||
$show .= str_pad($_POST["show_name"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_anr2"]))
|
||||
$show .= str_pad($_POST["show_anr2"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_titel2"]))
|
||||
$show .= str_pad($_POST["show_titel2"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_name2"]))
|
||||
$show .= str_pad($_POST["show_name2"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_str"]))
|
||||
$show .= str_pad($_POST["show_str"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_ort"]))
|
||||
$show .= str_pad($_POST["show_ort"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_land"]))
|
||||
$show .= str_pad($_POST["show_land"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_zusatz"]))
|
||||
$show .= str_pad($_POST["show_zusatz"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
|
||||
if(isset($_POST["anr1"]))
|
||||
$anr1 = trim($_POST["anr1"]);
|
||||
else
|
||||
$anr1 = "";
|
||||
if(isset($_POST["anr2"]))
|
||||
$anr2 = trim($_POST["anr2"]);
|
||||
else
|
||||
$anr2 = "";
|
||||
if(isset($_POST["intro"]))
|
||||
$intro = trim($_POST["intro"]);
|
||||
else
|
||||
$intro = "";
|
||||
|
||||
$adrerw = trim($_POST["adresserweiterung"]);
|
||||
$outro = trim($_POST["outro"]);
|
||||
$type = $_POST["type"];
|
||||
$adressid = $_POST["adressid"];
|
||||
$partnerid = $_POST["partnerid"];
|
||||
$mwst = $_POST["mwst"];
|
||||
$zahlziel = $_POST["zahlziel"];
|
||||
$wahrung = $_POST["wahrung"];
|
||||
if(isset($_POST["sub_mwst"]))
|
||||
$sub_mwst = $_POST["sub_mwst"];
|
||||
else
|
||||
$sub_mwst = "";
|
||||
$rabatt = $_POST["rabatt"];
|
||||
$rabattdesc = $_POST["rabattdesc"];
|
||||
$lieferdatum = $_POST["lieferdatum"];
|
||||
$buchKto = $_POST["buchKto"];
|
||||
|
||||
$qry = mysqli_query($dbconn, "SELECT id FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '$type'") or $err=error("Fehler beim ermitteln der Rechnung <br />".mysqli_error($dbconn));
|
||||
$progressid = mysqli_fetch_array($qry);
|
||||
$progressid = $progressid[0];
|
||||
if(!$progressid)
|
||||
{
|
||||
|
||||
$qry = mysqli_query($dbconn, "INSERT INTO tmp_rechnung SET
|
||||
user_id = '".$_SESSION["user"]."',
|
||||
adressfields='$show',
|
||||
anrede1='$anr1',
|
||||
anrede2='$anr2',
|
||||
intro='$intro',
|
||||
outro='$outro',
|
||||
typ_id = '$type',
|
||||
adresse_id='$adressid',
|
||||
partner_id='$partnerid',
|
||||
mwst_id = '$mwst',
|
||||
zahlziel_id = '$zahlziel',
|
||||
wahrung_id='$wahrung',
|
||||
sub_mwst='$sub_mwst',
|
||||
rabatt='$rabatt',
|
||||
rabattdesc='$rabattdesc',
|
||||
adresserweiterung='$adrerw',
|
||||
lieferdatum='$lieferdatum',
|
||||
buchungsKto_id = '$buchKto',
|
||||
datetime=NOW()") or $err=error("[autosave.js] Fehler beim erstellen der Rechnung <br />".mysqli_error($dbconn));
|
||||
$progressid = mysqli_insert_id($dbconn);
|
||||
}
|
||||
// Entwurf speichern, alle Artikel (auch deaktivierte)
|
||||
list($progressid, $fehler) = saveTmpRechnung($dbconn, false);
|
||||
if($fehler)
|
||||
$err = $fehler;
|
||||
else
|
||||
{
|
||||
$qry = mysqli_query($dbconn, "UPDATE tmp_rechnung SET
|
||||
user_id = '".$_SESSION["user"]."',
|
||||
adressfields='$show',
|
||||
anrede1='$anr1',
|
||||
anrede2='$anr2',
|
||||
intro='$intro',
|
||||
outro='$outro',
|
||||
typ_id = '$type',
|
||||
adresse_id='$adressid',
|
||||
partner_id='$partnerid',
|
||||
mwst_id = '$mwst',
|
||||
zahlziel_id = '$zahlziel',
|
||||
wahrung_id='$wahrung',
|
||||
sub_mwst='$sub_mwst',
|
||||
rabatt='$rabatt',
|
||||
rabattdesc='$rabattdesc',
|
||||
lieferdatum='$lieferdatum',
|
||||
adresserweiterung='$adrerw',
|
||||
buchungsKto_id = '$buchKto',
|
||||
datetime=NOW() WHERE id='$progressid'") or $err=error("Fehler beim aktualisieren der Rechnung <br />".mysqli_error($dbconn));
|
||||
$qry = mysqli_query($dbconn, "DELETE FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '$type' AND id != '$progressid' LIMIT 1") or $err=error("Fehler beim löschen alter tmp Rechnungen <br />".mysqli_error($dbconn));
|
||||
}
|
||||
|
||||
$qry= mysqli_query($dbconn, "SELECT id FROM tmp_artikel WHERE rech_id = '".$progressid."'");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
mysqli_query($dbconn, "DELETE FROM tmp_eigensch WHERE art_id = '".$res["id"]."'") or $err=error("Fehler beim löschen der eigenschaften <br />".mysqli_error($dbconn));
|
||||
}
|
||||
|
||||
$qry = mysqli_query($dbconn, "DELETE FROM tmp_artikel WHERE rech_id = '".$progressid."'") or $err=error("Fehler beim löschen der Artikel <br />".mysqli_error($dbconn));
|
||||
if(!isset($err))
|
||||
{
|
||||
$i = 1;
|
||||
while($_POST["arthead".$i] && !isset($err))
|
||||
{
|
||||
$angtyp = trim($_POST["angtyp".$i]);
|
||||
$arttyp = trim($_POST["arttyp".$i]);
|
||||
$arthead = trim($_POST["arthead".$i]);
|
||||
$artpr = str_replace(",",".",trim($_POST["artpr".$i]));
|
||||
$artmen = str_replace(",",".",trim($_POST["artmen".$i]));
|
||||
$artrab = trim($_POST["artrab".$i]);
|
||||
if(!isset($_POST["artrabtyp".$i]))
|
||||
$_POST["artrabtyp".$i] = "";
|
||||
$artrabtyp = trim($_POST["artrabtyp".$i]);
|
||||
$artmeneinh = trim($_POST["artmeneinh".$i]);
|
||||
$artwa = trim($_POST["artwa".$i]);
|
||||
$artmwst = trim($_POST["artmwst".$i]);
|
||||
$pagebreak = trim($_POST["pagebreak".$i]);
|
||||
|
||||
|
||||
$qry = mysqli_query($dbconn, "INSERT INTO tmp_artikel SET bezeichn='$arthead', preis='$artpr', mwst_id='$artmwst', pagebreak='$pagebreak', einheit_id='$artmeneinh', typ_id='$arttyp', datetime=NOW(), wanr='$artwa', rech_id='$progressid',posnr='$i',rabatt='$artrab',rabatttyp='$artrabtyp',menge='$artmen',angtyp='$angtyp'") or $err=error("Fehler beim anlegen der Artikel <br />".mysqli_error($dbconn));
|
||||
$artid=mysqli_insert_id($dbconn);
|
||||
$ii = 1;
|
||||
while($_POST["arteig".$i."_".$ii] && !isset($err))
|
||||
{
|
||||
$arteig = trim($_POST["arteig".$i."_".$ii]);
|
||||
$artval = trim($_POST["artval".$i."_".$ii]);
|
||||
$arteinh = trim($_POST["arteinh".$i."_".$ii]);
|
||||
$qry = mysqli_query($dbconn, "INSERT INTO tmp_eigensch SET bezeichn='$arteig', wert='$artval', einheit_id='$arteinh', datetime=NOW(), posnr='$ii', art_id='$artid'") or $err=error("Fehler beim anlegen der Eigenschaften <br />".mysqli_error($dbconn));
|
||||
$eigid=mysqli_insert_id($dbconn);
|
||||
$ii++;
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
if(!isset($err))
|
||||
{
|
||||
$type = formularGanzzahl("type");
|
||||
$adresse = makeadressblock($dbconn,$progressid,1);
|
||||
$rechnung = makerechnungsarray($dbconn,$progressid,1);
|
||||
$artikel = makeartikelarray($dbconn,$progressid,1);
|
||||
if($adresse["lines"]>6)
|
||||
error("Die Adresse hat zu viele Zeilen!<br />Bitte wählen Sie einige Elemente ab.");
|
||||
if(!$_POST["show_ort"] || !$_POST["show_str"])
|
||||
if(!formularText("show_ort") || !formularText("show_str"))
|
||||
error("Die Adresse erscheint nicht vollständig auf der Rechnung!<br />Falls die Rechnung über den Postweg zugestellt werden soll muss die Adresse vervollständigt werden!");
|
||||
if($rechnung["rabatt"] && !$rechnung["rabattdesc"])
|
||||
warning("Ein Rabatt wird von der Gesamtsumme abgezogen, jedoch ist die Rabattbeschreibung leer!<br />Bitte geben Sie eine Rabattbeschreibung ein (z.B.: Sonderrabatt, Winterrabatt, etc.).");
|
||||
if(!$artikel[0] && $type != 5)
|
||||
if(empty($artikel) && $type != 5)
|
||||
warning("Es sind noch keine Artikel vorhanden. Bitte Fügen Sie Artikel durch eintragen einer Artikelbeschreibung ein.");
|
||||
if(!is_file("../".UPLOADS_PATH."signs/".$_SESSION["user"].".png"))
|
||||
error("Für Ihren Benutzer wurde noch keine Unterschrift hinterlegt. Bitte vergessen Sie nicht zu unterschreiben.<br />("."./".UPLOADS_PATH."signs/".$_SESSION["user"].".png");
|
||||
|
||||
ok("<img src='' id='saveimg' class='saveimg' /><br />Dokument wurde um ".date("H:i:s")." Uhr gespeichert!");
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
+6
-188
@@ -10,203 +10,22 @@ require('../smarty/libs/Smarty.class.php');
|
||||
$smarty = new Smarty;
|
||||
|
||||
|
||||
|
||||
if(!isset($err))
|
||||
{
|
||||
$show = "";
|
||||
if(isset($_POST["show_firmaanr"]))
|
||||
$show .= str_pad($_POST["show_firmaanr"],1,"0");
|
||||
// Entwurf speichern, nur aktive Artikel, und daraus die Vorschau erzeugen
|
||||
list($progressid, $fehler) = saveTmpRechnung($dbconn, true);
|
||||
if($fehler)
|
||||
$err = $fehler;
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_firma"]))
|
||||
$show .= str_pad($_POST["show_firma"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_anr"]))
|
||||
$show .= str_pad($_POST["show_anr"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if( isset($_POST["show_titel"]))
|
||||
$show .= str_pad($_POST["show_titel"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_name"]))
|
||||
$show .= str_pad($_POST["show_name"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_anr2"]))
|
||||
$show .= str_pad($_POST["show_anr2"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_titel2"]))
|
||||
$show .= str_pad($_POST["show_titel2"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_name2"]))
|
||||
$show .= str_pad($_POST["show_name2"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_str"]))
|
||||
$show .= str_pad($_POST["show_str"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_ort"]))
|
||||
$show .= str_pad($_POST["show_ort"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_land"]))
|
||||
$show .= str_pad($_POST["show_land"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
if(isset($_POST["show_zusatz"]))
|
||||
$show .= str_pad($_POST["show_zusatz"],1,"0");
|
||||
else
|
||||
$show .= "0";
|
||||
|
||||
if(isset($_POST["anr1"]))
|
||||
$anr1 = trim($_POST["anr1"]);
|
||||
else
|
||||
$anr1 = "";
|
||||
if(isset($_POST["anr2"]))
|
||||
$anr2 = trim($_POST["anr2"]);
|
||||
else
|
||||
$anr2 = "";
|
||||
if(isset($_POST["intro"]))
|
||||
$intro = trim($_POST["intro"]);
|
||||
else
|
||||
$intro = "";
|
||||
$adrerw = trim($_POST["adresserweiterung"]);
|
||||
$outro = trim($_POST["outro"]);
|
||||
$type = $_POST["type"];
|
||||
$adressid = $_POST["adressid"];
|
||||
$partnerid = $_POST["partnerid"];
|
||||
$mwst = $_POST["mwst"];
|
||||
$zahlziel = $_POST["zahlziel"];
|
||||
$wahrung = $_POST["wahrung"];
|
||||
if(!isset($_POST["sub_mwst"]))
|
||||
$_POST["sub_mwst"] = "";
|
||||
$sub_mwst = $_POST["sub_mwst"];
|
||||
$rabatt = $_POST["rabatt"];
|
||||
$rabattdesc = $_POST["rabattdesc"];
|
||||
$buchKto = $_POST["buchKto"];
|
||||
$lieferdatum = $_POST["lieferdatum"];
|
||||
$qry = mysqli_query($dbconn, "SELECT id FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '$type' LIMIT 1") or $err=error("Fehler beim ermitteln der Rechnung <br />".mysqli_error($dbconn));
|
||||
$progressid = mysqli_fetch_array($qry);
|
||||
$progressid = $progressid[0];
|
||||
if(!$progressid)
|
||||
{
|
||||
|
||||
$qry = mysqli_query($dbconn, "INSERT INTO tmp_rechnung SET
|
||||
user_id = '".$_SESSION["user"]."',
|
||||
adressfields='$show',
|
||||
anrede1='$anr1',
|
||||
anrede2='$anr2',
|
||||
intro='$intro',
|
||||
outro='$outro',
|
||||
typ_id = '$type',
|
||||
adresse_id='$adressid',
|
||||
partner_id='$partnerid',
|
||||
mwst_id = '$mwst',
|
||||
zahlziel_id = '$zahlziel',
|
||||
wahrung_id='$wahrung',
|
||||
sub_mwst='$sub_mwst',
|
||||
rabatt='$rabatt',
|
||||
adresserweiterung='$adrerw',
|
||||
rabattdesc='$rabattdesc',
|
||||
buchungsKto_id = '$buchKto',
|
||||
lieferdatum='$lieferdatum',
|
||||
datetime=NOW()") or $err=error("Fehler beim erstellen der Rechnung <br />".mysqli_error($dbconn));
|
||||
$progressid = mysqli_insert_id($dbconn);
|
||||
}
|
||||
else
|
||||
{
|
||||
$qry = mysqli_query($dbconn, "UPDATE tmp_rechnung SET
|
||||
user_id = '".$_SESSION["user"]."',
|
||||
adressfields='$show',
|
||||
anrede1='$anr1',
|
||||
anrede2='$anr2',
|
||||
intro='$intro',
|
||||
outro='$outro',
|
||||
typ_id = '$type',
|
||||
adresse_id='$adressid',
|
||||
partner_id='$partnerid',
|
||||
mwst_id = '$mwst',
|
||||
zahlziel_id = '$zahlziel',
|
||||
wahrung_id='$wahrung',
|
||||
sub_mwst='$sub_mwst',
|
||||
rabatt='$rabatt',
|
||||
adresserweiterung='$adrerw',
|
||||
rabattdesc='$rabattdesc',
|
||||
buchungsKto_id = '$buchKto',
|
||||
lieferdatum='$lieferdatum',
|
||||
datetime=NOW() WHERE id='$progressid'") or $err=error("Fehler beim aktualisieren der Rechnung <br />".mysqli_error($dbconn));
|
||||
$qry = mysqli_query($dbconn, "DELETE FROM tmp_rechnung WHERE user_id = '".$_SESSION["user"]."' AND typ_id = '$type' AND id != '$progressid' LIMIT 1") or $err=error("Fehler beim löschen alter tmp Rechnungen <br />".mysqli_error($dbconn));
|
||||
}
|
||||
$qry= mysqli_query($dbconn, "SELECT id FROM tmp_artikel WHERE rech_id = '".$progressid."'");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
mysqli_query($dbconn, "DELETE FROM tmp_eigensch WHERE art_id = '".$res["id"]."'") or $err=error("Fehler beim löschen der eigenschaften <br />".mysqli_error($dbconn));
|
||||
}
|
||||
|
||||
$qry = mysqli_query($dbconn, "DELETE FROM tmp_artikel WHERE rech_id = '".$progressid."'") or $err=error("Fehler beim löschen der Artikel <br />".mysqli_error($dbconn));
|
||||
if(!isset($err))
|
||||
{
|
||||
$i = 1;
|
||||
while($_POST["arthead".$i] && !isset($err))
|
||||
{
|
||||
if($_POST["artact".$i])
|
||||
{
|
||||
$angtyp = trim($_POST["angtyp".$i]);
|
||||
$arttyp = trim($_POST["arttyp".$i]);
|
||||
$arthead = trim($_POST["arthead".$i]);
|
||||
$artpr = str_replace(",",".",trim($_POST["artpr".$i]));
|
||||
$artmen = str_replace(",",".",trim($_POST["artmen".$i]));
|
||||
$artrab = trim($_POST["artrab".$i]);
|
||||
if(!isset($_POST["artrabtyp".$i]))
|
||||
$_POST["artrabtyp".$i] = "";
|
||||
$artrabtyp = trim($_POST["artrabtyp".$i]);
|
||||
$artmeneinh = trim($_POST["artmeneinh".$i]);
|
||||
$artwa = trim($_POST["artwa".$i]);
|
||||
$artmwst = trim($_POST["artmwst".$i]);
|
||||
$pagebreak = trim($_POST["pagebreak".$i]);
|
||||
|
||||
|
||||
$qry = mysqli_query($dbconn, "INSERT INTO tmp_artikel SET bezeichn='$arthead', preis='$artpr', mwst_id='$artmwst', pagebreak='$pagebreak', einheit_id='$artmeneinh', typ_id='$arttyp', datetime=NOW(), wanr='$artwa', rech_id='$progressid',posnr='$i',rabatt='$artrab',rabatttyp='$artrabtyp',menge='$artmen',angtyp='$angtyp'") or $err=error("Fehler beim anlegen der Artikel <br />".mysqli_error($dbconn));
|
||||
$artid=mysqli_insert_id($dbconn);
|
||||
$ii = 1;
|
||||
while($_POST["arteig".$i."_".$ii] && !isset($err))
|
||||
{
|
||||
$arteig = trim($_POST["arteig".$i."_".$ii]);
|
||||
$artval = trim($_POST["artval".$i."_".$ii]);
|
||||
$arteinh = trim($_POST["arteinh".$i."_".$ii]);
|
||||
$qry = mysqli_query($dbconn, "INSERT INTO tmp_eigensch SET bezeichn='$arteig', wert='$artval', einheit_id='$arteinh', datetime=NOW(), posnr='$ii', art_id='$artid'") or $err=error("Fehler beim anlegen der Eigenschaften <br />".mysqli_error($dbconn));
|
||||
$eigid=mysqli_insert_id($dbconn);
|
||||
$ii++;
|
||||
}
|
||||
}
|
||||
$i++;
|
||||
}
|
||||
}
|
||||
if(!isset($err))
|
||||
{
|
||||
$adresse = makeadressblock($dbconn,$progressid,1);
|
||||
$rechnung = makerechnungsarray($dbconn,$progressid,1);
|
||||
$artikel = makeartikelarray($dbconn,$progressid,1);
|
||||
/*
|
||||
if($adresse["lines"]>6)
|
||||
error("Die Adresse hat zu viele Zeilen!<br />Bitte wählen Sie einige Elemente ab.");
|
||||
if(!$_POST["show_ort"] || !$_POST["show_str"])
|
||||
error("Die Adresse erscheint nicht vollständig auf der Rechnung!<br />Falls die Rechnung über den Postweg zugestellt werden soll muss die Adresse vervollständigt werden!");
|
||||
if($rechnung["rabatt"] && !$rechnung["rabattdesc"])
|
||||
warning("Ein Rabatt wird von der Gesamtsumme abgezogen, jedoch ist die Rabattbeschreibung leer!<br />Bitte geben Sie eine Rabattbeschreibung ein (z.B.: Sonderrabatt, Winterrabatt, etc.).");
|
||||
if(!$artikel[0] && $type != 5)
|
||||
warning("Es sind noch keine Artikel vorhanden. Bitte Fügen Sie Artikel durch eintragen einer Artikelbeschreibung ein.");
|
||||
if(!is_file("../pics/users/".$_SESSION["user"].".png"))
|
||||
error("Für Ihren Benutzer wurde noch keine Unterschrift hinterlegt. Bitte vergessen Sie nicht zu unterschreiben.");
|
||||
*/
|
||||
|
||||
$pdf = makerawPDF(1);
|
||||
|
||||
makefirstpage($pdf,$adresse["adresse"],$rechnung,1);
|
||||
$gesamtpreis = 0;
|
||||
if(count($artikel))
|
||||
{
|
||||
$gesamtpreis = maketable($pdf,$artikel,$rechnung,1);
|
||||
@@ -217,6 +36,5 @@ if(!isset($err))
|
||||
savePDF($pdf,"../temp/pdfpreview/$tmppdfname.pdf");
|
||||
echo makeImageFromPDF("../temp/pdfpreview/$tmppdfname.pdf");
|
||||
}
|
||||
|
||||
}
|
||||
?>
|
||||
+13
-13
@@ -18,24 +18,25 @@ if(!isset($err))
|
||||
}
|
||||
$fulltag = utf8_encode($_GET["search"]);
|
||||
$src = explode(" ",$fulltag);
|
||||
$combiner = mysql_escape_string($_GET["link"]);
|
||||
$combiner = $_GET["link"];
|
||||
if($combiner != "AND" && $combiner != "OR")
|
||||
{
|
||||
$combiner = "AND";
|
||||
}
|
||||
$page = $_GET["page"];
|
||||
$skspage = $_GET["skspage"];
|
||||
$typ = $_GET["typ"];
|
||||
$id = $_GET["kdnid"];
|
||||
$page = (int)$_GET["page"];
|
||||
$skspage = (int)$_GET["skspage"];
|
||||
// landen auch in JavaScript-Aufrufen der Seitennavigation
|
||||
$typ = (int)$_GET["typ"];
|
||||
$id = (int)$_GET["kdnid"];
|
||||
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,$id,$typ,0);
|
||||
$qry = mysqli_query($dbconn,$queries["all"])
|
||||
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
|
||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||
$numres = mysqli_num_rows($qry);
|
||||
/*
|
||||
if(!$numres)
|
||||
{
|
||||
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1);
|
||||
$qry = mysqli_query($dbconn,$queries["all"])
|
||||
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
|
||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||
$numres = mysqli_num_rows($qry);
|
||||
message("veraltete Datensätze wurden in die Suche einbezogen");
|
||||
@@ -44,7 +45,7 @@ if(!isset($err))
|
||||
if($numres)
|
||||
{
|
||||
$listlines=array();
|
||||
$qry = mysqli_query($dbconn,$queries["limited"])
|
||||
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
|
||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
@@ -53,8 +54,7 @@ if(!isset($err))
|
||||
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."'><span class='edit' title='Dokument ändern'></span></a>";
|
||||
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&changeadr=1'><span class='changeadr' title='Adresse ändern'></span></a>";
|
||||
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."©=1'><span class='copy' title='Dokument kopieren'></span></a>";
|
||||
$tmpqry = mysqli_query($dbconn,"SELECT id FROM kontakt WHERE partner_id = '$id' AND typ_id = 1");
|
||||
if(mysqli_fetch_array($tmpqry))
|
||||
if(db_wert($dbconn, "SELECT id FROM kontakt WHERE partner_id = ? AND typ_id = 1 LIMIT 1", array($id)))
|
||||
$actions .= "<a href='?action=rechnungadd&id=".$res["id"]."&adressid=".$res["adresse_id"]."&mail=1'><span class='mail' title='Dokument per E-Mail versenden'></span></a>";
|
||||
|
||||
switch($res["typ_id"])
|
||||
@@ -128,14 +128,14 @@ if(!isset($err))
|
||||
echo "<h3>SKS Dokumente:</h3><div class='line'></div>";
|
||||
$queries="";
|
||||
$queries = createKdnRechQry($skspage,$pagesize,$src,$combiner,$id,$typ,1);
|
||||
$qry = mysqli_query($dbconn,$queries["all"])
|
||||
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
|
||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||
$numres = mysqli_num_rows($qry);
|
||||
/*
|
||||
if(!$numres)
|
||||
{
|
||||
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1);
|
||||
$qry = mysqli_query($dbconn,$queries["all"])
|
||||
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
|
||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||
$numres = mysqli_num_rows($qry);
|
||||
message("veraltete Datensätze wurden in die Suche einbezogen");
|
||||
@@ -145,7 +145,7 @@ if(!isset($err))
|
||||
{
|
||||
$speciallines[]=array();
|
||||
$listlines[]=array();
|
||||
$qry = mysqli_query($dbconn,$queries["limited"])
|
||||
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
|
||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
|
||||
+9
-9
@@ -24,24 +24,24 @@ if(!isset($err))
|
||||
}
|
||||
$fulltag = utf8_encode($_GET["search"]);
|
||||
$src = explode(" ",$fulltag);
|
||||
$combiner = mysql_escape_string($_GET["link"]);
|
||||
$combiner = $_GET["link"];
|
||||
if($combiner != "AND" && $combiner != "OR")
|
||||
{
|
||||
$combiner = "AND";
|
||||
}
|
||||
$page = $_GET["page"];
|
||||
$skspage = $_GET["skspage"];
|
||||
$page = (int)$_GET["page"];
|
||||
$skspage = (int)$_GET["skspage"];
|
||||
$typ = $_GET["typ"];
|
||||
$id = $_GET["kdnid"];
|
||||
$queries = createRechQry($page,$pagesize,$src,$combiner,0);
|
||||
$qry = mysqli_query($dbconn,$queries["all"])
|
||||
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
|
||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||
$numres = mysqli_num_rows($qry);
|
||||
/*
|
||||
if(!$numres)
|
||||
{
|
||||
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1);
|
||||
$qry = mysqli_query($dbconn,$queries["all"])
|
||||
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
|
||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||
$numres = mysqli_num_rows($qry);
|
||||
message("veraltete Datensätze wurden in die Suche einbezogen");
|
||||
@@ -49,7 +49,7 @@ if(!isset($err))
|
||||
*/
|
||||
if($numres)
|
||||
{
|
||||
$qry = mysqli_query($dbconn,$queries["limited"])
|
||||
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"])
|
||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
@@ -122,14 +122,14 @@ if(!isset($err))
|
||||
{
|
||||
echo "<h3>SKS Dokumente:</h3><div class='line'></div>";
|
||||
$queries = createRechQry($skspage,$pagesize,$src,$combiner,1);
|
||||
$qry = mysqli_query($dbconn,$queries["all"])
|
||||
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
|
||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||
$numres = mysqli_num_rows($qry);
|
||||
/*
|
||||
if(!$numres)
|
||||
{
|
||||
$queries = createKdnRechQry($page,$pagesize,$src,$combiner,1);
|
||||
$qry = mysqli_query($dbconn,$queries["all"])
|
||||
$qry = db_abfrage($dbconn,$queries["all"],$queries["params"])
|
||||
or die("Datenbank fehler: ".mysqli_error($dbconn));
|
||||
$numres = mysqli_num_rows($qry);
|
||||
message("veraltete Datensätze wurden in die Suche einbezogen");
|
||||
@@ -137,7 +137,7 @@ if(!isset($err))
|
||||
*/
|
||||
if($numres)
|
||||
{
|
||||
$qry = mysqli_query($dbconn,$queries["limited"]);
|
||||
$qry = db_abfrage($dbconn,$queries["limited"],$queries["params"]);
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$speciallines[] = array("<a href='?action=rechshow&id=".$res["id"]."'>".$res["rechnr"]."</a>",
|
||||
|
||||
+54
-3
@@ -44,19 +44,36 @@ function db_verbinden($server, $user, $pw, $db)
|
||||
/*
|
||||
* Führt eine Abfrage mit ?-Platzhaltern aus. Gibt bei SELECT ein
|
||||
* mysqli_result zurück, sonst true, bei Fehlern false.
|
||||
*
|
||||
* Achtung: Prepared Statements liefern Zahlen als int/float, mysqli_query()
|
||||
* lieferte Strings. db_zeilen(), db_zeile(), db_wert() und db_zuordnung()
|
||||
* wandeln deshalb in Strings um, damit sich alter Code (=== "0", "1" etc.)
|
||||
* gleich verhält. Wer das Ergebnis von db_abfrage() selbst ausliest, bekommt
|
||||
* die nativen Typen.
|
||||
*/
|
||||
function db_abfrage($dbconn, $sql, $params = array())
|
||||
{
|
||||
return mysqli_execute_query($dbconn, $sql, array_values($params));
|
||||
}
|
||||
|
||||
/* Werte einer Zeile als Strings wie bei mysqli_query(), NULL bleibt NULL */
|
||||
function db_als_text($zeile)
|
||||
{
|
||||
if(!is_array($zeile))
|
||||
return $zeile;
|
||||
foreach($zeile as $spalte => $wert)
|
||||
if($wert !== null && !is_string($wert))
|
||||
$zeile[$spalte] = (string)$wert;
|
||||
return $zeile;
|
||||
}
|
||||
|
||||
/* Alle Zeilen als Liste assoziativer Arrays, bei Fehlern false. */
|
||||
function db_zeilen($dbconn, $sql, $params = array())
|
||||
{
|
||||
$res = db_abfrage($dbconn, $sql, $params);
|
||||
if(!$res)
|
||||
return false;
|
||||
return mysqli_fetch_all($res, MYSQLI_ASSOC);
|
||||
return array_map("db_als_text", mysqli_fetch_all($res, MYSQLI_ASSOC));
|
||||
}
|
||||
|
||||
/* Erste Zeile als assoziatives Array, null ohne Treffer, bei Fehlern false. */
|
||||
@@ -65,7 +82,41 @@ function db_zeile($dbconn, $sql, $params = array())
|
||||
$res = db_abfrage($dbconn, $sql, $params);
|
||||
if(!$res)
|
||||
return false;
|
||||
return mysqli_fetch_assoc($res);
|
||||
return db_als_text(mysqli_fetch_assoc($res));
|
||||
}
|
||||
|
||||
/*
|
||||
* Zwei Spalten als Zuordnung erste => zweite, etwa für Auswahllisten
|
||||
* (SELECT id, anrede FROM anrede). Bei Fehlern false.
|
||||
*/
|
||||
function db_zuordnung($dbconn, $sql, $params = array())
|
||||
{
|
||||
$res = db_abfrage($dbconn, $sql, $params);
|
||||
if(!$res)
|
||||
return false;
|
||||
$zuordnung = array();
|
||||
while($zeile = mysqli_fetch_row($res))
|
||||
$zuordnung[$zeile[0]] = $zeile[1] === null ? null : (string)$zeile[1];
|
||||
return $zuordnung;
|
||||
}
|
||||
|
||||
/*
|
||||
* Die Abfrage mit eingesetzten Werten als lesbarer Text - ausschließlich für
|
||||
* das Änderungsprotokoll (Tabelle log). Nie ausführen.
|
||||
*/
|
||||
function db_sql_text($dbconn, $sql, $params = array())
|
||||
{
|
||||
$teile = explode("?", $sql);
|
||||
$text = array_shift($teile);
|
||||
foreach(array_values($params) as $i => $wert)
|
||||
{
|
||||
if($wert === null)
|
||||
$text .= "NULL";
|
||||
else
|
||||
$text .= "'".mysqli_real_escape_string($dbconn, (string)$wert)."'";
|
||||
$text .= isset($teile[$i]) ? $teile[$i] : "";
|
||||
}
|
||||
return $text;
|
||||
}
|
||||
|
||||
/* Erste Spalte der ersten Zeile, null ohne Treffer, bei Fehlern false. */
|
||||
@@ -75,5 +126,5 @@ function db_wert($dbconn, $sql, $params = array())
|
||||
if(!$res)
|
||||
return false;
|
||||
$zeile = mysqli_fetch_row($res);
|
||||
return $zeile === null ? null : $zeile[0];
|
||||
return $zeile === null || $zeile[0] === null ? null : (string)$zeile[0];
|
||||
}
|
||||
|
||||
+31
-16
@@ -180,12 +180,16 @@ function createAdressQry($page,$pagesize,$src,$combiner,$fields,$full=0,$typ=1)
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Suche in den Dokumenten eines Kunden. Liefert array("all" => sql,
|
||||
* "limited" => sql mit LIMIT, "params" => Platzhalterwerte für beide).
|
||||
* $combiner muss "AND" oder "OR" sein.
|
||||
*/
|
||||
function createKdnRechQry($page,$pagesize,$src,$combiner,$id,$typ,$sks=0)
|
||||
{
|
||||
if($typ == 1)
|
||||
$docnr = "rechnr";
|
||||
else
|
||||
$docnr = "rechnr";
|
||||
$combiner = $combiner == "OR" ? "OR" : "AND";
|
||||
$params = array($id, $typ);
|
||||
if(!$sks)
|
||||
{
|
||||
$query = "SELECT rechnung.$docnr AS rechnr,
|
||||
@@ -199,11 +203,12 @@ function createKdnRechQry($page,$pagesize,$src,$combiner,$id,$typ,$sks=0)
|
||||
LEFT JOIN rechtyp ON rechnung.typ_id = rechtyp.id
|
||||
LEFT JOIN artikel_rechn ON rechnung.id = artikel_rechn.rech_id
|
||||
LEFT JOIN artikel ON artikel_rechn.art_id = artikel.id
|
||||
WHERE partner_id='".$id."' AND rechtyp.id = '".$typ."' AND rechnung.sks = 0 ";
|
||||
WHERE partner_id = ? AND rechtyp.id = ? AND rechnung.sks = 0 ";
|
||||
foreach($src AS $tag)
|
||||
{
|
||||
$tag .= "%";
|
||||
$query .= " $combiner (artikel.bezeichn LIKE '$tag' OR rechnung.rechnr LIKE '$tag' OR DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE '$tag')";
|
||||
$query .= " $combiner (artikel.bezeichn LIKE ? OR rechnung.rechnr LIKE ? OR DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE ?)";
|
||||
array_push($params, $tag, $tag, $tag);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -217,19 +222,21 @@ function createKdnRechQry($page,$pagesize,$src,$combiner,$id,$typ,$sks=0)
|
||||
FROM rechnung
|
||||
LEFT JOIN rechtyp ON rechnung.typ_id = rechtyp.id
|
||||
RIGHT JOIN artikelsks ON rechnung.rechnr = artikelsks.rechnr
|
||||
WHERE partner_id='".$id."' AND rechtyp.id = '".$typ."' AND rechnung.sks = 1 ";
|
||||
WHERE partner_id = ? AND rechtyp.id = ? AND rechnung.sks = 1 ";
|
||||
foreach($src AS $tag)
|
||||
{
|
||||
$tag .= "%";
|
||||
$query .= " $combiner (artikelsks.bezeichn1 LIKE '$tag' OR artikelsks.bezeichn2 LIKE '$tag' OR rechnung.rechnr LIKE '$tag' OR DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE '$tag')";
|
||||
$query .= " $combiner (artikelsks.bezeichn1 LIKE ? OR artikelsks.bezeichn2 LIKE ? OR rechnung.rechnr LIKE ? OR DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE ?)";
|
||||
array_push($params, $tag, $tag, $tag, $tag);
|
||||
}
|
||||
}
|
||||
|
||||
$query .= " GROUP BY rechnung.rechnr ORDER BY rechnung.datetime DESC ";
|
||||
|
||||
$ret["all"] = $query;
|
||||
$query .= " LIMIT ".$page*$pagesize.", $pagesize";
|
||||
$query .= " LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
|
||||
$ret["limited"] = $query;
|
||||
$ret["params"] = $params;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
@@ -283,9 +290,14 @@ function createKommQry($page,$pagesize,$src,$combiner,$id)
|
||||
return $ret;
|
||||
}
|
||||
|
||||
/*
|
||||
* Suche über alle Dokumente, Rückgabe wie createKdnRechQry().
|
||||
*/
|
||||
function createRechQry($page,$pagesize,$src,$combiner,$sks=0)
|
||||
{
|
||||
$docnr = "rechnr";
|
||||
$combiner = $combiner == "OR" ? "OR" : "AND";
|
||||
$params = array();
|
||||
if(!$sks)
|
||||
{
|
||||
$query = "SELECT CONCAT(ELT(rechnung.typ_id,'R','G','A','B','L','M'),MID(rechnung.$docnr,1,4),'-',MID(rechnung.$docnr,5,2),'-',MID(rechnung.$docnr,7,2),'.',MID(rechnung.$docnr,9,2)) AS drechnr,
|
||||
@@ -304,9 +316,10 @@ function createRechQry($page,$pagesize,$src,$combiner,$sks=0)
|
||||
foreach($src AS $tag)
|
||||
{
|
||||
$tag = "%".$tag."%";
|
||||
$query .= " $combiner (artikel.bezeichn LIKE '$tag' OR
|
||||
CONCAT(ELT(rechnung.typ_id,'R','G','A','B','L','M'),MID(rechnung.$docnr,1,4),'-',MID(rechnung.$docnr,5,2),'-',MID(rechnung.$docnr,7,2),'.',MID(rechnung.$docnr,9,2)) LIKE '$tag' OR
|
||||
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE '$tag')";
|
||||
$query .= " $combiner (artikel.bezeichn LIKE ? OR
|
||||
CONCAT(ELT(rechnung.typ_id,'R','G','A','B','L','M'),MID(rechnung.$docnr,1,4),'-',MID(rechnung.$docnr,5,2),'-',MID(rechnung.$docnr,7,2),'.',MID(rechnung.$docnr,9,2)) LIKE ? OR
|
||||
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE ?)";
|
||||
array_push($params, $tag, $tag, $tag);
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -326,18 +339,20 @@ function createRechQry($page,$pagesize,$src,$combiner,$sks=0)
|
||||
foreach($src AS $tag)
|
||||
{
|
||||
$tag = "%".$tag."%";
|
||||
$query .= " $combiner (artikelsks.bezeichn1 LIKE '$tag' OR
|
||||
artikelsks.bezeichn2 LIKE '$tag' OR
|
||||
rechnung.rechnr LIKE '$tag' OR
|
||||
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE '$tag')";
|
||||
$query .= " $combiner (artikelsks.bezeichn1 LIKE ? OR
|
||||
artikelsks.bezeichn2 LIKE ? OR
|
||||
rechnung.rechnr LIKE ? OR
|
||||
DATE_FORMAT(rechnung.datetime, '%d.%m.%Y') LIKE ?)";
|
||||
array_push($params, $tag, $tag, $tag, $tag);
|
||||
}
|
||||
}
|
||||
|
||||
$query .= " GROUP BY rechnung.rechnr ORDER BY rechnung.datetime DESC ";
|
||||
|
||||
$ret["all"] = $query;
|
||||
$query .= " LIMIT ".$page*$pagesize.", $pagesize";
|
||||
$query .= " LIMIT ".((int)$page*(int)$pagesize).", ".(int)$pagesize;
|
||||
$ret["limited"] = $query;
|
||||
$ret["params"] = $params;
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
+426
-626
File diff suppressed because it is too large
Load Diff
+12
-10
@@ -1,18 +1,20 @@
|
||||
<?php
|
||||
|
||||
// LOG
|
||||
/*
|
||||
* Ä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)
|
||||
{
|
||||
$qry=mysqli_query($dbconn,"SELECT id FROM accesstype WHERE typ = '$type'") or $err=error("Fehler beim Eintragen der Aktion in die LOG:<br />".mysqli_error($dbconn));
|
||||
$res=mysqli_fetch_array($qry);
|
||||
|
||||
$qry=mysqli_query($dbconn,"INSERT INTO log SET
|
||||
typ_id= '$res[0]',
|
||||
datetime=NOW(),
|
||||
qry='".mysql_escape_string($qrystr)."',
|
||||
undo_qry='".mysql_escape_string($undoqry)."',
|
||||
user_id='".mysql_escape_string($_SESSION["user"])."'")
|
||||
or $err=error("Fehler beim LOGGEN der Aktion:<br />".mysqli_error($dbconn));
|
||||
$err = 0;
|
||||
$typId = db_wert($dbconn, "SELECT id FROM accesstype WHERE typ = ?", array($type));
|
||||
if($typId === false)
|
||||
return error("Fehler beim Eintragen der Aktion in die LOG:<br />".mysqli_error($dbconn));
|
||||
db_abfrage($dbconn, "INSERT INTO log SET typ_id = ?, datetime = NOW(), qry = ?, undo_qry = ?, user_id = ?",
|
||||
array((int)$typId, $qrystr, $undoqry, $_SESSION["user"]))
|
||||
or $err = error("Fehler beim LOGGEN der Aktion:<br />".mysqli_error($dbconn));
|
||||
return $err;
|
||||
}
|
||||
|
||||
|
||||
+37
-126
@@ -42,58 +42,25 @@ elseif($_GET["copy"] == 1 && $_GET["id"])
|
||||
doneNreturn("Erfolgreich geändert");
|
||||
}
|
||||
}
|
||||
elseif($_GET["storno"] == "YES" && $_GET["id"]){
|
||||
$querystr = "UPDATE rechnung SET
|
||||
storno = 1, stornodate = NOW() WHERE id = '".$_GET["id"]."'";
|
||||
mysqli_query($dbconn,$querystr) or $err=error("Fehler beim aktualisieren der Rechnung<br />".mysqli_error($dbconn));
|
||||
doneNreturn("Erfolgreich geändert");
|
||||
}
|
||||
elseif($_GET["storno"] == "NO" && $_GET["id"]){
|
||||
$querystr = "UPDATE rechnung SET
|
||||
storno = 0 WHERE id = '".$_GET["id"]."'";
|
||||
mysqli_query($dbconn,$querystr) or $err=error("Fehler beim aktualisieren der Rechnung<br />".mysqli_error($dbconn));
|
||||
elseif(($_GET["storno"] == "YES" || $_GET["storno"] == "NO") && $_GET["id"]){
|
||||
$err = stornoRechnung($dbconn, $_GET["id"], $_GET["storno"] == "YES");
|
||||
if(!$err)
|
||||
doneNreturn("Erfolgreich geändert");
|
||||
}
|
||||
elseif($_GET["mail"] == 1 && $_GET["id"])
|
||||
{
|
||||
$kdnres=makeadressarray($dbconn, $_GET["adressid"]);
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,anrede FROM anrede");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typnames[$res["id"]] = $res["anrede"];
|
||||
}
|
||||
$smarty->assign("anrs",$typnames);
|
||||
list($anrs, $titels) = anredenUndTitel($dbconn);
|
||||
$smarty->assign("anrs",$anrs);
|
||||
$smarty->assign("titels",$titels);
|
||||
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,titel FROM titel");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typnames[$res["id"]] = $res["titel"];
|
||||
}
|
||||
$smarty->assign("titels",$typnames);
|
||||
$mails = db_zuordnung($dbconn, "SELECT id, kontakt FROM kontakt WHERE partner_id = ? AND typ_id = 1", array($kdnres["partner_id"] ?? 0)) ?: array();
|
||||
$smarty->assign("mails",array_values($mails));
|
||||
$smarty->assign("mailids",array_keys($mails));
|
||||
|
||||
$mails=array();
|
||||
$mailids=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($kdnres["partner_id"])."' AND typ_id = 1");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$mails[] = $res["kontakt"];
|
||||
$mailids[] = $res["id"];
|
||||
}
|
||||
$smarty->assign("mails",$mails);
|
||||
$smarty->assign("mailids",$mailids);
|
||||
|
||||
$typids=array();
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,bezeichn FROM artikeltyp");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typids[] = $res["id"];
|
||||
$typnames[] = $res["bezeichn"];
|
||||
}
|
||||
$smarty->assign("typids",$typids);
|
||||
$smarty->assign("typs",$typnames);
|
||||
$typen = db_zuordnung($dbconn, "SELECT id, bezeichn FROM artikeltyp") ?: array();
|
||||
$smarty->assign("typids",array_keys($typen));
|
||||
$smarty->assign("typs",array_values($typen));
|
||||
$rechnung=makerechnungsarray($dbconn, $_GET["id"], 0);
|
||||
$smarty->assign("rechnung",$rechnung);
|
||||
$smarty->assign("adresse",$kdnres);
|
||||
@@ -197,72 +164,29 @@ else
|
||||
if($kdnres["adresstyp"] == "Kommission")
|
||||
{
|
||||
$smarty->assign("kommission",$kdnres);
|
||||
$qry = mysqli_query($dbconn,"SELECT plz, ortsteil, ort, str, adresstyp.typ AS adresstyp, hnr, vname, partner_id, nname, vname2, nname2, firma, adresse.id, land, anrede_id, titel_id, anrede2_id, titel2_id
|
||||
FROM adresse
|
||||
LEFT JOIN strasse ON str_id = strasse.id
|
||||
LEFT JOIN ort ON ort_id = ort.id
|
||||
LEFT JOIN land ON land_id = land.id
|
||||
JOIN adresstyp ON adresse.typ_id = adresstyp.id
|
||||
WHERE adresse.typ_id='1' AND adresse.partner_id = '".$kdnres["partner_id"]."'
|
||||
ORDER BY typ_id ASC") or $err = error("Fehler beim abrufen der Daten ".mysqli_error($dbconn));
|
||||
//$kdnres=mysqli_fetch_assoc($qry);
|
||||
}
|
||||
|
||||
if($kdnres["partner_id"])
|
||||
{
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,anrede FROM anrede");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typnames[$res["id"]] = $res["anrede"];
|
||||
}
|
||||
$smarty->assign("anrs",$typnames);
|
||||
list($anrs, $titels) = anredenUndTitel($dbconn);
|
||||
$smarty->assign("anrs",$anrs);
|
||||
$smarty->assign("titels",$titels);
|
||||
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,titel FROM titel");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typnames[$res["id"]] = $res["titel"];
|
||||
}
|
||||
$smarty->assign("titels",$typnames);
|
||||
$liste = db_zuordnung($dbconn, "SELECT id, bezeichn FROM artikeltyp") ?: array();
|
||||
$smarty->assign("typids",array_keys($liste));
|
||||
$smarty->assign("typs",array_values($liste));
|
||||
|
||||
$liste = db_zuordnung($dbconn, "SELECT id, einheit FROM einheit") ?: array();
|
||||
$smarty->assign("einhids",array_keys($liste));
|
||||
$smarty->assign("einhs",array_values($liste));
|
||||
|
||||
$liste = db_zuordnung($dbconn, "SELECT id, wahrung FROM wahrung") ?: array();
|
||||
$smarty->assign("wahrids",array_keys($liste));
|
||||
$smarty->assign("wahrs",array_values($liste));
|
||||
|
||||
$typids=array();
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,bezeichn FROM artikeltyp");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typids[] = $res["id"];
|
||||
$typnames[] = $res["bezeichn"];
|
||||
}
|
||||
$smarty->assign("typids",$typids);
|
||||
$smarty->assign("typs",$typnames);
|
||||
|
||||
$typids=array();
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,einheit FROM einheit");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typids[] = $res["id"];
|
||||
$typnames[] = $res["einheit"];
|
||||
}
|
||||
$smarty->assign("einhids",$typids);
|
||||
$smarty->assign("einhs",$typnames);
|
||||
|
||||
$typids=array();
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,wahrung FROM wahrung");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typids[] = $res["id"];
|
||||
$typnames[] = $res["wahrung"];
|
||||
}
|
||||
$smarty->assign("wahrids",$typids);
|
||||
$smarty->assign("wahrs",$typnames);
|
||||
|
||||
$typids=array();
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,mwst FROM mwst");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
foreach(db_zeilen($dbconn, "SELECT id, mwst FROM mwst") ?: array() as $res)
|
||||
{
|
||||
if($res["mwst"] != "999")
|
||||
{
|
||||
@@ -283,31 +207,18 @@ else
|
||||
$smarty->assign("artmwstids",$typids2);
|
||||
$smarty->assign("artmwsts",$typnames2);
|
||||
|
||||
$typids=array();
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,ziel FROM zahlziel");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typids[] = $res["id"];
|
||||
$typnames[] = $res["ziel"];
|
||||
}
|
||||
$smarty->assign("zzielids",$typids);
|
||||
$smarty->assign("zziels",$typnames);
|
||||
$liste = db_zuordnung($dbconn, "SELECT id, ziel FROM zahlziel") ?: array();
|
||||
$smarty->assign("zzielids",array_keys($liste));
|
||||
$smarty->assign("zziels",array_values($liste));
|
||||
|
||||
$typids=array();
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,kto,name FROM buchungsKontos");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typids[] = $res["id"];
|
||||
$liste = db_zuordnung($dbconn, "SELECT id, CONCAT(kto, ' (', name, ')') FROM buchungsKontos") ?: array();
|
||||
$smarty->assign("buchKtoids",array_keys($liste));
|
||||
$smarty->assign("buchKtos",array_values($liste));
|
||||
|
||||
$typnames[] = $res["kto"]." (".$res["name"].")";
|
||||
}
|
||||
$smarty->assign("buchKtoids",$typids);
|
||||
$smarty->assign("buchKtos",$typnames);
|
||||
|
||||
$qry=mysqli_query($dbconn,"SELECT tmp_rechnung.id,adresse_id, vname, nname, str, hnr FROM tmp_rechnung JOIN adresse ON adresse_id = adresse.id JOIN strasse ON str_id = strasse.id WHERE tmp_rechnung.typ_id='".mysql_escape_string($_GET["type"])."' AND user_id = '".mysql_escape_string($_SESSION["user"])."' ORDER BY datetime DESC LIMIT 1") or $err=error("Fehler beim Suchen nach nicht gespeicherten Daten<br />".mysqli_error($dbconn));
|
||||
if($res = mysqli_fetch_assoc($qry))
|
||||
$res = db_zeile($dbconn, "SELECT tmp_rechnung.id, adresse_id, vname, nname, str, hnr FROM tmp_rechnung JOIN adresse ON adresse_id = adresse.id JOIN strasse ON str_id = strasse.id WHERE tmp_rechnung.typ_id = ? AND user_id = ? ORDER BY datetime DESC LIMIT 1", array((string)$_GET["type"], $_SESSION["user"]));
|
||||
if($res === false)
|
||||
$err = error("Fehler beim Suchen nach nicht gespeicherten Daten<br />".mysqli_error($dbconn));
|
||||
if($res)
|
||||
{
|
||||
$smarty->assign("draft",$res["id"]);
|
||||
$smarty->assign("draftname",$res["vname"]." ".$res["nname"]);
|
||||
|
||||
+3
-15
@@ -6,21 +6,9 @@ $kdnres=makeadressarray($dbconn, $_GET["adressid"]);
|
||||
if($kdnres["partner_id"])
|
||||
{
|
||||
$kdnres["adressid"] = $_GET["adressid"];
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,anrede FROM anrede");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typnames[$res["id"]] = $res["anrede"];
|
||||
}
|
||||
$smarty->assign("anrs",$typnames);
|
||||
|
||||
$typnames=array();
|
||||
$qry=mysqli_query($dbconn, "SELECT id,titel FROM titel");
|
||||
while($res=mysqli_fetch_assoc($qry))
|
||||
{
|
||||
$typnames[$res["id"]] = $res["titel"];
|
||||
}
|
||||
$smarty->assign("titels",$typnames);
|
||||
list($anrs, $titels) = anredenUndTitel($dbconn);
|
||||
$smarty->assign("anrs",$anrs);
|
||||
$smarty->assign("titels",$titels);
|
||||
$smarty->assign("adresse",$kdnres);
|
||||
|
||||
$smarty->display("umschlagshow.tpl");
|
||||
|
||||
Reference in New Issue
Block a user