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:
+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