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:
+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))
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user