Update index.php

UI Update
This commit is contained in:
Leonardo Brandenberger 2026-02-26 04:02:50 +01:00
parent dd08482038
commit 467fc2219a
1 changed files with 378 additions and 294 deletions

670
index.php
View File

@ -1,348 +1,432 @@
<?php <?php
include "zefixAPI.php"; include "zefixAPI.php";
?> ?>
<!doctype html>
<html lang="de"> <html lang="de">
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="css/custom.css?v=1.2">
<link rel="stylesheet" href="css/bootstrap.css">
<title>Silias Zefix Suche</title>
<style> <!-- Bootstrap first, then your overrides -->
#sitzInput { <link rel="stylesheet" href="css/bootstrap.css">
box-sizing: border-box; <link rel="stylesheet" href="css/custom.css?v=1.3">
background-position: 14px 12px;
background-repeat: no-repeat;
font-size: 16px;
padding: 14px 20px 12px 45px;
border: none;
border-bottom: 1px solid #ddd;
}
#sitzInput {outline: 3px solid #ddd;} <title>Silias Zefix Suche</title>
.button-small { <style>
font-size: 0.7rem; /* Nice input for the search box */
padding: 0% 1%; #sitzInput {
} box-sizing: border-box;
font-size: 16px;
border: 1px solid #dee2e6;
border-radius: .5rem;
padding: .6rem .8rem;
width: 100%;
}
.dropdown a:hover {background-color: #ddd;} .scrollWindow {
max-height: 320px;
overflow-y: auto;
border: 1px solid #dee2e6;
border-radius: .75rem;
background: #fff;
padding: .75rem;
}
.show {display: block;} .button-small {
font-size: 0.8rem;
padding: .35rem .6rem;
border-radius: .5rem;
}
.scrollWindow { .gemeindeeintrag { margin-bottom: .25rem; }
max-height: 300px; /* Adjust the value as needed */ </style>
overflow-y: auto; /* This will add a scrollbar when content exceeds max-height */
border: 1px solid #ccc; /* Optional: Add a border for visual clarity */
padding: 10px; /* Optional: Add padding for better spacing */
}
</style>
</head> </head>
<body> <body class="bg-light">
<div class="wrapper"> <nav class="navbar navbar-light bg-white border-bottom">
<section> <div class="container">
<span class="navbar-brand mb-0 h1">Silias ZEFIX Export</span>
</div>
</nav>
<main class="container py-4 py-md-5">
<div class="row justify-content-center">
<div class="col-lg-10 col-xl-9">
<div class="container"> <div class="card shadow-sm">
<h1>Silias Zefix Suche</h1> <div class="card-body p-4 p-md-5">
<div class="d-flex flex-column flex-md-row align-items-md-start justify-content-between gap-2 mb-3">
<div>
<h1 class="h3 mb-1">Silias Zefix Suche</h1>
<p class="text-muted mb-0">
Exportiere Firmen als Excel (xlsx) aus dem Zentralen Firmenindex (ZEFIX).
</p>
</div>
<span class="badge bg-primary-subtle text-primary border border-primary-subtle align-self-md-center">
Export via E-Mail Link
</span>
</div>
<p>Willkommen bei Silias Zefix Suche. Diese Applikation ermöglicht es, eine Liste von Firmen als Excel Liste (xlsx) aus dem Zentralen Firmenindex zu exportieren.</p> <hr class="my-4">
<form action="submit.php" method="post"> <form action="submit.php" method="post" class="needs-validation" novalidate>
<label for="firma">Firmenname:</label>
<p>* kann als Platzhalter verwendet werden</p>
<input type="text" id="firma" name="firma"><br><br>
<label for="kanton">Kanton:</label> <!-- Firmenname -->
<p>Bitte beachten Sie, dass die Auswahl der Kantone von der Export Funktion ignoriert wird. Sie wird nur dazu verwendet, die untenstehenden Ortschaften zu filtern. Wenn Sie Firmen nach Kantonen exportieren möchten, klicken Sie alle gewünschten Kantone an und klicken Sie anschliessend bei den Ortschaften auf "alle Ergebnise auswählen".</p> <div class="mb-4">
<div id="kantonauswahl" class="scrollWindow" onclick="filterFunction()"> <label for="firma" class="form-label">Firmenname</label>
<div class="form-text mb-2">* kann als Platzhalter verwendet werden</div>
<input type="text" id="firma" name="firma" class="form-control" placeholder="z.B. Silias*">
</div>
</div><br><br> <!-- Kanton -->
<div class="mb-4">
<label class="form-label">Kanton</label>
<div class="alert alert-warning py-2 mb-2" role="alert" style="font-size: .95rem;">
Die Kantonsauswahl wird vom Export ignoriert und dient nur zum Filtern der Ortschaften.
Für Export nach Kanton: gewünschte Kantone wählen und dann bei Ortschaften auf
<b>Alle Ergebnisse auswählen</b> klicken.
</div>
<div id="kantonauswahl" class="scrollWindow" onclick="filterFunction()"></div>
</div>
<label for="sitz">Sitz (Ort):</label><br> <!-- Sitz / Ort -->
<div class="dropdown"> <div class="mb-4">
<div id="gemeindeDropdown" class="dropdown-content"> <label class="form-label">Sitz (Ort)</label>
<table style="width: 100%">
<td>
<input type="text" placeholder="suchen (Ort)" id="sitzInput" onkeyup="filterFunction()" onchange="filterFunction()" name="sitzfilter" autocomplete="off">
</td>
<td>
<button type="button" class="button-small" onclick="gefundeneGemeindenAuswählen()">Alle Ergebnise auswählen</button>
<button type="button" class="button-small" onclick="ausgewählteGemeindenLöschen()">Auswahl löschen</button>
<button type="button" class="button-small" onclick="alleGemeindenAnzeigen()">Alle anzeigen</button>
<button type="button" class="button-small" onclick="nurAusgewählteGemeindenAnzeigen()">Nur ausgewählte anzeigen</button>
</td>
</table>
<script>
function alleGemeindenAnzeigen() {
sitzInput.value = ""
filterFunction()
}
function nurAusgewählteGemeindenAnzeigen() {
sitzInput.value = "(nur ausgewählte)"
filterFunction()
}
function ausgewählteGemeindenLöschen() {
sitzauswahl.querySelectorAll('input[type="checkbox"]').forEach(function(checkbox) {
checkbox.checked = false;
})
filterFunction()
}
function gefundeneGemeindenAuswählen() { // TODO diese Funktion aufrufen wenn keine Gemeinde ausgewählt und gesucht wird.
sitzauswahl.querySelectorAll('input[type="checkbox"]').forEach(function(checkbox) {
if(checkbox.parentNode.parentNode.style.display !== "none")
checkbox.checked = true;
})
filterFunction()
}
</script>
<div id="sitzauswahl" class="scrollWindow">
</div>
<div class="card border-0 bg-white">
<div class="card-body p-0">
<div class="d-flex flex-column flex-lg-row gap-2 mb-2">
<div class="flex-grow-1">
<input type="text"
placeholder="Suchen (Ort)"
id="sitzInput"
onkeyup="filterFunction()"
onchange="filterFunction()"
name="sitzfilter"
autocomplete="off">
</div> </div>
</div><br><br><br><br>
<div class="d-flex flex-wrap gap-2">
<button type="button" class="btn btn-outline-primary button-small" onclick="gefundeneGemeindenAuswählen()">
Alle Ergebnisse auswählen
</button>
<button type="button" class="btn btn-outline-secondary button-small" onclick="ausgewählteGemeindenLöschen()">
Auswahl löschen
</button>
<button type="button" class="btn btn-outline-secondary button-small" onclick="alleGemeindenAnzeigen()">
Alle anzeigen
</button>
<button type="button" class="btn btn-outline-secondary button-small" onclick="nurAusgewählteGemeindenAnzeigen()">
Nur ausgewählte
</button>
</div>
</div>
<div id="sitzauswahl" class="scrollWindow"></div>
<label for="rechtsform">Rechtsform:</label><br>
<div id = "rechtsformenauswahl" class="scrollWindow">
</div> </div>
<br><br> </div>
</div>
<input type="checkbox" id="exakteSuche" name="exakteSuche" disabled> <!-- Rechtsform -->
<label for="exakteSuche">Exakte Suche (noch in Entwicklung)</label><br> <div class="mb-4">
<label class="form-label">Rechtsform</label>
<div id="rechtsformenauswahl" class="scrollWindow"></div>
</div>
<input type="checkbox" id="geloeschteRechtseinheiten" name="geloeschteRechtseinheiten"> <!-- Optionen -->
<label for="geloeschteRechtseinheiten">Gelöschte Rechtseinheiten suchen</label><br> <div class="mb-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="exakteSuche" name="exakteSuche" disabled>
<label class="form-check-label" for="exakteSuche">Exakte Suche (noch in Entwicklung)</label>
</div>
<input type="checkbox" id="inBisherigenFirmen" name="inBisherigenFirmen" disabled> <div class="form-check">
<label for="inBisherigenFirmen">In bisherigen Firmen/Namen suchen (noch in Entwicklung)</label><br> <input class="form-check-input" type="checkbox" id="geloeschteRechtseinheiten" name="geloeschteRechtseinheiten">
<label class="form-check-label" for="geloeschteRechtseinheiten">Gelöschte Rechtseinheiten suchen</label>
</div>
<input type="checkbox" id="phonetischeSuche" name="phonetischeSuche" disabled> <div class="form-check">
<label for="phonetischeSuche">Phonetische Suche (noch in Entwicklung)</label><br><br> <input class="form-check-input" type="checkbox" id="inBisherigenFirmen" name="inBisherigenFirmen" disabled>
<label class="form-check-label" for="inBisherigenFirmen">In bisherigen Firmen/Namen suchen (noch in Entwicklung)</label>
</div>
<label for="email">Ihre E-Mail Adresse:</label> <div class="form-check">
<p>Das aufbereiten der Daten kann lange dauern. Sie erhalten einen Download-Link per E-Mail sobald die Daten bereit sind.</p> <input class="form-check-input" type="checkbox" id="phonetischeSuche" name="phonetischeSuche" disabled>
<input type="email" id="email" name="email" required><br><br> <label class="form-check-label" for="phonetischeSuche">Phonetische Suche (noch in Entwicklung)</label>
</div>
</div>
<input type="submit" value="Export starten"> <!-- Email -->
</form> <div class="mb-4">
<label for="email" class="form-label">Ihre E-Mail Adresse</label>
<div class="form-text mb-2">
Das Aufbereiten der Daten kann länger dauern. Sie erhalten einen Download-Link per E-Mail sobald die Daten bereit sind.
</div>
<input type="email" id="email" name="email" class="form-control" required placeholder="name@firma.ch">
<div class="invalid-feedback">Bitte eine gültige E-Mail Adresse eingeben.</div>
</div>
<script> <div class="d-grid">
<button type="submit" class="btn btn-primary btn-lg">Export starten</button>
</div>
</form>
// Parse CSV-Daten und fülle das Dropdown-Feld <script>
// Bootstrap validation (optional)
(function () {
'use strict'
const forms = document.querySelectorAll('.needs-validation')
Array.prototype.slice.call(forms).forEach(function (form) {
form.addEventListener('submit', function (event) {
if (!form.checkValidity()) {
event.preventDefault()
event.stopPropagation()
}
form.classList.add('was-validated')
}, false)
})
})();
</script>
<script>
// CSV data injected by PHP
let communityCsvData;
let legalFormsCsvData;
<?php
include 'gemeinden.php';
include 'legalForms.php';
?>
let communityCsvData; // --- Helpers to create nicer checkbox rows (Bootstrap form-check) ---
let legalFormsCsvData; function addCheckboxRow(container, checkboxName, checkboxValue, labelText) {
<?php const wrapper = document.createElement('div');
include 'gemeinden.php'; wrapper.className = "form-check";
include 'legalForms.php';
?>
const input = document.createElement('input');
input.className = "form-check-input";
input.type = "checkbox";
input.name = checkboxName;
input.value = checkboxValue;
const legalFormslines = legalFormsCsvData.trim().split('\n'); const label = document.createElement('label');
const legalFormsheaders = legalFormslines[0].split(','); label.className = "form-check-label";
const legalformIdIndex = legalFormsheaders.indexOf('id'); label.textContent = labelText;
const legalformNameIndex = legalFormsheaders.indexOf('name');
for (let i = 1; i < legalFormslines.length; i++) { wrapper.appendChild(input);
const cells = legalFormslines[i].split(','); wrapper.appendChild(label);
const id = cells[legalformIdIndex].trim(); container.appendChild(wrapper);
const name = cells[legalformNameIndex].trim();
const label = document.createElement('label'); return input;
const rechtsformenauswahl = document.getElementById("rechtsformenauswahl") }
rechtsformenauswahl.appendChild(label);
const input = document.createElement('input'); // --- Legal forms ---
input.type = "checkbox"; const legalFormslines = legalFormsCsvData.trim().split('\n');
input.name = "rechtsformen[]"; const legalFormsheaders = legalFormslines[0].split(',');
input.value = id; const legalformIdIndex = legalFormsheaders.indexOf('id');
label.textContent = " " + name; const legalformNameIndex = legalFormsheaders.indexOf('name');
label.style.marginBottom = '0';
label.prepend(input); const rechtsformenauswahl = document.getElementById("rechtsformenauswahl");
rechtsformenauswahl.appendChild(document.createElement("br")) for (let i = 1; i < legalFormslines.length; i++) {
const cells = legalFormslines[i].split(',');
const id = (cells[legalformIdIndex] || '').trim();
const name = (cells[legalformNameIndex] || '').trim();
if (!id || !name) continue;
addCheckboxRow(rechtsformenauswahl, "rechtsformen[]", id, " " + name);
}
// --- Communities + Cantons ---
const lines = communityCsvData.trim().split('\n');
const headers = lines[0].split(',');
const gemeindeNameIndex = headers.indexOf('Gemeindename');
const bfsIdIndex = headers.indexOf('id');
const kantonIndex = headers.indexOf('Kanton');
const registryOfCommerceIdIndex = headers.indexOf('registryOfCommerceId');
const sitze = [];
const kantone = [];
const kantonauswahl = document.getElementById("kantonauswahl");
const sitzauswahl = document.getElementById("sitzauswahl");
for (let i = 1; i < lines.length; i++) {
const cells = lines[i].split(',');
if (!cells || cells.length < 4) continue;
const bfsId = (cells[bfsIdIndex] || '').trim();
const gemeindeName = (cells[gemeindeNameIndex] || '').trim();
const kanton = (cells[kantonIndex] || '').trim();
const registryOfCommerceId = (cells[registryOfCommerceIdIndex] || '').trim();
if (!bfsId || !gemeindeName) continue;
// Add canton if new
if (kanton && !kantone.includes(kanton)) {
kantone.push(kanton);
addCheckboxRow(kantonauswahl, "kantone[]", kanton, " " + kanton);
}
// Store row for filtering logic
sitze.push(cells);
// Create nicer entry
const gemeindeEintrag = document.createElement("div");
gemeindeEintrag.classList.add("gemeindeeintrag");
const wrapper = document.createElement('div');
wrapper.className = "form-check";
const input = document.createElement('input');
input.className = "form-check-input";
input.type = "checkbox";
input.name = "sitze[]";
input.value = bfsId;
const label = document.createElement('label');
label.className = "form-check-label";
label.textContent = " " + gemeindeName;
wrapper.appendChild(input);
wrapper.appendChild(label);
gemeindeEintrag.appendChild(wrapper);
sitzauswahl.appendChild(gemeindeEintrag);
}
const sitzInput = document.getElementById('sitzInput');
function kantoneAusgewählt() {
const checkboxes = document.querySelectorAll('input[name="kantone[]"]');
let countChecked = 0;
for (let i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) countChecked++;
}
return countChecked;
}
function filterFunction() {
const numKantoneAusgewählt = kantoneAusgewählt();
const filter = (sitzInput.value || "").toUpperCase();
const entries = sitzauswahl.getElementsByClassName("gemeindeeintrag");
for (let i = 0; i < entries.length; i++) {
const txtValue = entries[i].textContent || entries[i].innerText;
const selectedCheckbox = entries[i].querySelector('input[type="checkbox"]');
const isSelected = selectedCheckbox ? selectedCheckbox.checked : false;
// map entry->sitz row index: still aligned because we push sitze once per entry
const row = sitze[i];
const rowKanton = row ? row[kantonIndex] : "";
let cantonOk = true;
if (numKantoneAusgewählt > 0 && rowKanton) {
const cantonBox = document.querySelector('input[name="kantone[]"][value="' + rowKanton + '"]');
cantonOk = cantonBox ? cantonBox.checked : false;
} }
const matchesText = txtValue.toUpperCase().indexOf(filter) > -1;
if ((matchesText && (cantonOk || numKantoneAusgewählt === 0)) || isSelected) {
entries[i].style.display = "";
const lines = communityCsvData.trim().split('\n'); } else {
const headers = lines[0].split(','); entries[i].style.display = "none";
const gemeindeNameIndex = headers.indexOf('Gemeindename');
const bfsIdIndex = headers.indexOf('id');
const kantonIndex = headers.indexOf('Kanton');
const registryOfCommerceIdIndex = headers.indexOf('registryOfCommerceId');
const sitze = [];
const kantone = []
for (let i = 1; i < lines.length; i++) {
const cells = lines[i].split(',');
const bfsId = cells[bfsIdIndex].trim();
const gemeindeName = cells[gemeindeNameIndex].trim();
const kanton = cells[kantonIndex].trim();
const registryOfCommerceId = cells[registryOfCommerceIdIndex].trim();
// Falls Kanton noch nicht vorhanden -> hinzufügen
if (!kantone.includes(kanton)) {
kantone.push(kanton)
const label = document.createElement('label');
const kantonsauswahl = document.getElementById("kantonauswahl")
kantonsauswahl.appendChild(label);
const input = document.createElement('input');
input.type = "checkbox";
input.name = "kantone[]";
input.value = kanton;
label.textContent = " " + kanton;
label.style.marginBottom = '0';
label.prepend(input);
kantonsauswahl.appendChild(document.createElement("br"))
}
// Sitz hinzufügen
sitze.push(cells)
const sitzString = gemeindeName
const gemeindeEintrag = document.createElement("div");
gemeindeEintrag.classList.add("gemeindeeintrag");
const label = document.createElement('label');
const sitzauswahl = document.getElementById("sitzauswahl")
sitzauswahl.appendChild(gemeindeEintrag);
gemeindeEintrag.appendChild(label);
const input = document.createElement('input');
input.type = "checkbox";
input.name = "sitze[]";
input.value = bfsId;
label.textContent = " " + sitzString;
label.style.marginBottom = '0';
label.prepend(input);
gemeindeEintrag.appendChild(document.createElement("br"))
} }
}
}
function filterFunction() { function alleGemeindenAnzeigen() {
const numKantoneAusgewählt = kantoneAusgewählt() sitzInput.value = "";
var input, filter, ul, li, a, i; filterFunction();
input = document.getElementById("sitzInput"); }
filter = input.value.toUpperCase();
div = document.getElementById("gemeindeDropdown");
a = div.getElementsByClassName("gemeindeeintrag");
for (i = 0; i < a.length; i++) {
txtValue = a[i].textContent || a[i].innerText;
if ((txtValue.toUpperCase().indexOf(filter) > -1 && (document.querySelector('input[name="kantone[]"][value=' + sitze[i][kantonIndex] + ']').checked || numKantoneAusgewählt === 0) ) || a[i].firstElementChild.firstElementChild.checked) {
a[i].style.display = "";
} else {
a[i].style.display = "none";
}
}
}
function kantoneAusgewählt() { function nurAusgewählteGemeindenAnzeigen() {
const checkboxes = document.querySelectorAll('input[name="kantone[]"]'); sitzInput.value = "(nur ausgewählte)";
let countChecked = 0; filterFunction();
}
for (var i = 0; i < checkboxes.length; i++) { function ausgewählteGemeindenLöschen() {
if (checkboxes[i].checked) { sitzauswahl.querySelectorAll('input[type="checkbox"]').forEach(function(cb) {
countChecked = countChecked + 1; cb.checked = false;
} });
} filterFunction();
return countChecked; }
}
function gefundeneGemeindenAuswählen() {
const sitzInput = document.getElementById('sitzInput'); sitzauswahl.querySelectorAll('input[type="checkbox"]').forEach(function(cb) {
const sitzauswahl = document.getElementById('sitzauswahl'); // show/hide is on the gemeindeeintrag wrapper
const gemeindedropdown = document.getElementById('gemeindeDropdown'); const entry = cb.closest('.gemeindeeintrag');
sitzauswahl.style.display = 'block'; if (entry && entry.style.display !== "none") cb.checked = true;
});
gemeindedropdown.addEventListener('focusin', () => { filterFunction();
console.log("focusin") }
sitzauswahl.style.display = 'block'; </script>
});
</script>
</div> </div>
</div>
</section>
<div class="push"></div>
</div>
<footer class="text-center">
<div class="container footer">
<div class="row">
<table>
<tr>
<td class="footer">
<div class="col-12">
<p><span><b>Impressum</b></span><br>
Silias KLG<br>
Toggenburgstrasse 31<br>
8245 Feuerthalen<br>
<a href="https://www.silias.ch" target="_blank">www.silias.ch</a><br>
<a href="mailto:info@silias.ch">info@silias.ch</a><br>
<a href="https://gitea.silias.ch/Silias-Public/Zefix_search">Projekt Repository</a>
</div>
</td>
<td class="footer">
<div class="col-12">
<p><span><b>Datenquelle</b></span><br>
Zentraler Firmenindex<br>
Eidgenössisches Justiz- und Polizeidepartement (EJPD)<br>
Bundesamt für Justiz (BJ)<br>
Eidgenössisches Amt für das Handelsregister (EHRA)<br>
Bundesrain 20<br>
3003 Bern<br>
<a href="https://www.zefix.admin.ch" target="_blank">www.zefix.admin.ch</a><br>
<a href="tel:+41584624197">+41 (0) 58 462 41 97</a><br>
<a href="zefix@bj.admin.ch">zefix@bj.admin.ch</a>
</p>
</div>
</td>
<td class="footer">
<div class="col-12">
<p>
<script>
const deleteFiles = function (){
let taskDeletePassword = prompt("Passwort eingeben:")
let formdata = new FormData()
formdata.append('taskDeletePassword', taskDeletePassword)
fetch("deleteFiles.php", {
method: "POST",
body: formdata,
});
location.reload();
}
</script>
Momentan sind <?php $taskDir = 'tasks'; echo count(scandir($taskDir)) - 2 ?> Aufträge in der Warteliste.<br>
<a href="#" onclick="deleteFiles()">alle löschen</a>
</p>
</div>
</td>
</tr>
</table>
</div>
</div> </div>
</div>
</main>
<footer class="border-top bg-white">
<div class="container py-4">
<div class="row g-4">
<div class="col-md-4">
<h2 class="h6 mb-2">Impressum</h2>
<div class="text-muted" style="font-size:.95rem;">
Silias KLG<br>
Toggenburgstrasse 31<br>
8245 Feuerthalen<br>
<a href="https://www.silias.ch" target="_blank" rel="noopener">www.silias.ch</a><br>
<a href="mailto:info@silias.ch">info@silias.ch</a><br>
<a href="https://gitea.silias.ch/Silias-Public/Zefix_search">Projekt Repository</a>
</div>
</div>
<div class="col-md-4">
<h2 class="h6 mb-2">Datenquelle</h2>
<div class="text-muted" style="font-size:.95rem;">
Zentraler Firmenindex<br>
Eidgenössisches Justiz- und Polizeidepartement (EJPD)<br>
Bundesamt für Justiz (BJ)<br>
Eidgenössisches Amt für das Handelsregister (EHRA)<br>
Bundesrain 20, 3003 Bern<br>
<a href="https://www.zefix.admin.ch" target="_blank" rel="noopener">www.zefix.admin.ch</a><br>
<a href="tel:+41584624197">+41 (0) 58 462 41 97</a><br>
<a href="mailto:zefix@bj.admin.ch">zefix@bj.admin.ch</a>
</div>
</div>
<div class="col-md-4">
<h2 class="h6 mb-2">Warteliste</h2>
<div class="text-muted" style="font-size:.95rem;">
<script>
const deleteFiles = function () {
let taskDeletePassword = prompt("Passwort eingeben:");
if (taskDeletePassword === null) return;
let formdata = new FormData();
formdata.append('taskDeletePassword', taskDeletePassword);
fetch("deleteFiles.php", { method: "POST", body: formdata })
.then(() => location.reload());
}
</script>
Momentan sind
<b><?php $taskDir = 'tasks'; echo count(scandir($taskDir)) - 2 ?></b>
Aufträge in der Warteliste.<br>
<a href="#" onclick="deleteFiles(); return false;">alle löschen</a>
</div>
</div>
</div>
<div class="text-center text-muted mt-4" style="font-size:.9rem;">
© <?php echo date('Y'); ?> Silias KLG
</div>
</div>
</footer> </footer>
</body> </body>