incs/saveNchange.php neu geschrieben: Adressen, Telefonnummern, Kontakte, Notizen und Konten laufen ueber db_abfrage() mit Platzhaltern, mehrschrittiges Speichern in einer Transaktion. Weil sich die Speicherfunktionen gegenseitig aufrufen, klammern beginneSpeichern()/beendeSpeichern() die Verschachtelung; incs/rechnung.php nutzt sie ebenfalls. Kunden- und Lieferantenseiten waren zwei fast gleiche Kopien und teilen sich jetzt partnerAddSeite(), partnerChangeSeite() und partnerShowDaten(). Dabei behoben: - SQL-Injektion ueber die Suchbegriffe der Kunden-, Lieferanten-, Adress-, Kommissions- und Projektsuche sowie ueber die Artikel-Autovervollstaendigung - gespeichertes XSS: Notizen (nl2br escapt nicht), Bankname, Dokumenttyp, Namen und Adressen in allen Trefferlisten - sites/liefershow.php war unter PHP 8 ein Fatal ($kdnres.id) - "Telefonnummer loeschen" im Kundenbereich lief in einen Fatal, die Nummern einer geloeschten Adresse blieben stehen (Spalte hiess adress_id statt adresse_id, mysql_fetch_assoc gibt es nicht mehr) - Geburtstag ohne Jahr wurde im Formular verschluckt, die IBAN kam beim Bearbeiten aus $_GET statt aus dem Konto - die Versionskette eines Kunden brach nach einem Schritt ab - Kommissionsadressen speicherten die Ortsangabe der Adresse statt der des Telefonformulars und einen Adresstyp als Telefontyp - Blaettern in den Trefferlisten: ohne ORDER BY konnte dieselbe Zeile zweimal oder gar nicht erscheinen; ajax_searchadress() bekam die Seite nicht - Hauptadresse laesst sich nicht mehr loeschen, Kundendaten nicht mehr ueber die Lieferantenseite (und umgekehrt) - ajax/auto/* baute JSON von Hand zusammen, ein Anfuehrungszeichen im Ort machte die Liste unbrauchbar Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
42 lines
1.4 KiB
Smarty
42 lines
1.4 KiB
Smarty
|
|
{include file="heading.tpl" heading=$head}
|
|
|
|
<div class="widthlimiter">
|
|
<form action="?action={$frmact}&do=konto&kunde={$kunde|escape}&formsent=1&kontoid={$kontoid|intval}" method='POST'>
|
|
<fieldset>
|
|
|
|
<label>Bank:</label><input name='bank' id='bank' value="{$bank|escape}" pattern="[^0-9]*" /><br />
|
|
<label>BLZ:</label><input name='blz' id='blz' value="{$blz|escape}" pattern="[0-9]*" /><br />
|
|
<label>Konto Nr.:</label><input name='ktonr' id='ktonr' value="{$ktonr|escape}" pattern="[0-9]*" /><br />
|
|
<label>Inhaber:</label><input name='inhaber' id='inhaber' value="{$inhaber|escape}" /><br />
|
|
<label>IBAN:</label><input name='iban' id='iban' value="{$iban|escape}" pattern="[0-9a-zA-Z]*" /><br />
|
|
<label>SWIFT:</label><input name='swift' id='swift' value="{$swift|escape}" pattern="[0-9]*" /><br />
|
|
<button type="button" class='spell' onclick="$('input').spellCheckInDialog()">Rechtschreibung prüfen</button><br />
|
|
</fieldset>
|
|
<input type="submit" value="Speichern" />
|
|
</form>
|
|
|
|
</div>
|
|
|
|
<script>
|
|
$(function() {
|
|
$( "#bank" ).autocomplete({
|
|
source: "ajax/auto/bank.php",
|
|
minLength: 2,
|
|
focus: function( event, ui ) {
|
|
$( "#blz" ).val( ui.item.blz);
|
|
return false;
|
|
}
|
|
});
|
|
});
|
|
$(function() {
|
|
$( "#blz" ).autocomplete({
|
|
source: "ajax/auto/blz.php",
|
|
minLength: 2,
|
|
focus: function( event, ui ) {
|
|
$( "#bank" ).val( ui.item.bank);
|
|
return false;
|
|
}
|
|
});
|
|
});
|
|
</script> |