- 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>
39 lines
1.7 KiB
PHP
39 lines
1.7 KiB
PHP
<?php
|
|
require_once("../incs/connectmysql.php");
|
|
require_once("../incs/funcs.php");
|
|
require_once("../incs/listfuncs.php");
|
|
require_once ("../incs/rechnung.php");
|
|
require('../smarty/libs/Smarty.class.php');
|
|
|
|
|
|
$smarty = new Smarty;
|
|
|
|
|
|
if(!isset($err))
|
|
{
|
|
// Entwurf speichern, alle Artikel (auch deaktivierte)
|
|
list($progressid, $fehler) = saveTmpRechnung($dbconn, false);
|
|
if($fehler)
|
|
$err = $fehler;
|
|
else
|
|
{
|
|
$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(!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(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!");
|
|
}
|
|
}
|
|
?>
|